diff --git a/code/datums/chatmessage.dm b/code/datums/chatmessage.dm index f4a979c510..fe1fbdf340 100644 --- a/code/datums/chatmessage.dm +++ b/code/datums/chatmessage.dm @@ -202,7 +202,7 @@ message.maptext_height = mheight message.maptext_x = (CHAT_MESSAGE_WIDTH - owner.bound_width) * -0.5 message.maptext = MAPTEXT(complete_text) - message.pixel_x = -owner.pixel_x //Dogborgs and other wide boys have a pixel offset. This accounts for that + message.pixel_x = -target.pixel_x //Dogborgs and other wide boys have a pixel offset. This accounts for that // View the message LAZYADDASSOC(owned_by.seen_messages, message_loc, src) diff --git a/code/game/machinery/computer/aifixer.dm b/code/game/machinery/computer/aifixer.dm index bd7ae64e16..92040e3647 100644 --- a/code/game/machinery/computer/aifixer.dm +++ b/code/game/machinery/computer/aifixer.dm @@ -61,13 +61,16 @@ /obj/machinery/computer/aifixer/proc/Fix() use_power(1000) - occupier.adjustOxyLoss(-1, 0) - occupier.adjustFireLoss(-1, 0) - occupier.adjustToxLoss(-1, 0) - occupier.adjustBruteLoss(-1, 0) + occupier.adjustOxyLoss(-1, FALSE, FALSE) + occupier.adjustFireLoss(-1, FALSE, FALSE) + occupier.adjustBruteLoss(-5, FALSE) + occupier.updatehealth() if(occupier.health >= 0 && occupier.stat == DEAD) - occupier.revive() + occupier.revive(full_heal = FALSE, admin_revive = FALSE) + if(!occupier.radio_enabled) + occupier.radio_enabled = TRUE + to_chat(occupier, span_warning("Your Subspace Transceiver has been enabled!")) return occupier.health < 100 /obj/machinery/computer/aifixer/process() diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm index f3868f703f..0a626a0558 100644 --- a/code/modules/clothing/head/misc.dm +++ b/code/modules/clothing/head/misc.dm @@ -440,6 +440,16 @@ icon_state = "cowboyhat_sec" item_state= "cowboyhat_sec" +/obj/item/clothing/head/cowboyhat/polychromic + name = "polychromic cowboy hat" + desc = "A polychromic cowboy hat, perfect for your indecisive rancher" + icon_state = "cowboyhat_poly" + item_state= "cowboyhat_poly" + +/obj/item/clothing/head/cowboyhat/polychromic/ComponentInitialize() + . = ..() + AddElement(/datum/element/polychromic, list("#5F5F5F", "#DDDDDD"), 2) + /obj/item/clothing/head/squatter_hat name = "slav squatter hat" icon_state = "squatter_hat" diff --git a/code/modules/mob/living/silicon/damage_procs.dm b/code/modules/mob/living/silicon/damage_procs.dm index f49c5933bb..b50aeb5f48 100644 --- a/code/modules/mob/living/silicon/damage_procs.dm +++ b/code/modules/mob/living/silicon/damage_procs.dm @@ -9,9 +9,6 @@ adjustBruteLoss(damage_amount, forced = forced) if(BURN) adjustFireLoss(damage_amount, forced = forced) - if(OXY) - if(damage < 0 || forced) //we shouldn't be taking oxygen damage through this proc, but we'll let it heal. - adjustOxyLoss(damage_amount, forced = forced) return 1 @@ -30,7 +27,7 @@ /mob/living/silicon/setCloneLoss(amount, updating_health = TRUE, forced = FALSE) return FALSE -/mob/living/silicon/adjustStaminaLoss(amount, updating_health = 1, forced = FALSE)//immune to stamina damage. +/mob/living/silicon/adjustStaminaLoss(amount, updating_health = 1, forced = FALSE) //immune to stamina damage. return FALSE /mob/living/silicon/setStaminaLoss(amount, updating_health = 1) @@ -41,3 +38,15 @@ /mob/living/silicon/setOrganLoss(slot, amount) return FALSE + +/mob/living/silicon/adjustOxyLoss(amount, updating_health = TRUE, forced = FALSE) //immune to oxygen damage + if(istype(src, /mob/living/silicon/ai)) //ais are snowflakes and use oxyloss for being in AI cards and having no battery + return ..() + + return FALSE + +/mob/living/silicon/setOxyLoss(amount, updating_health = TRUE, forced = FALSE) + if(istype(src, /mob/living/silicon/ai)) //ditto + return ..() + + return FALSE diff --git a/code/modules/mob/living/silicon/pai/pai_defense.dm b/code/modules/mob/living/silicon/pai/pai_defense.dm index 9e81725731..e54d5e05b7 100644 --- a/code/modules/mob/living/silicon/pai/pai_defense.dm +++ b/code/modules/mob/living/silicon/pai/pai_defense.dm @@ -85,15 +85,6 @@ /mob/living/silicon/pai/adjustFireLoss(amount, updating_health = TRUE, forced = FALSE, only_robotic = FALSE, only_organic = TRUE) return take_holo_damage(amount) -/mob/living/silicon/pai/adjustToxLoss(amount, updating_health = TRUE, forced = FALSE, toxins_type = TOX_DEFAULT) - return FALSE - -/mob/living/silicon/pai/adjustOxyLoss(amount, updating_health = TRUE, forced = FALSE) - return FALSE - -/mob/living/silicon/pai/adjustCloneLoss(amount, updating_health = TRUE, forced = FALSE) - return FALSE - /mob/living/silicon/pai/adjustStaminaLoss(amount, updating_health, forced = FALSE) if(forced) take_holo_damage(amount) @@ -108,27 +99,3 @@ /mob/living/silicon/pai/getFireLoss() return emittermaxhealth - emitterhealth - -/mob/living/silicon/pai/getToxLoss(toxins_type = TOX_OMNI) - return FALSE - -/mob/living/silicon/pai/getOxyLoss() - return FALSE - -/mob/living/silicon/pai/getCloneLoss() - return FALSE - -/mob/living/silicon/pai/getStaminaLoss() - return FALSE - -/mob/living/silicon/pai/setCloneLoss() - return FALSE - -/mob/living/silicon/pai/setStaminaLoss() - return FALSE - -/mob/living/silicon/pai/setToxLoss(toxins_type = TOX_OMNI) - return FALSE - -/mob/living/silicon/pai/setOxyLoss() - return FALSE diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm index e902d57ddd..8a0b8def51 100644 --- a/code/modules/mob/living/silicon/robot/life.dm +++ b/code/modules/mob/living/silicon/robot/life.dm @@ -1,7 +1,6 @@ /mob/living/silicon/robot/BiologicalLife(delta_time, times_fired) if(!(. = ..())) return - adjustOxyLoss(-10) //we're a robot! handle_robot_hud_updates() handle_robot_cell() diff --git a/code/modules/mob/living/silicon/robot/update_icons.dm b/code/modules/mob/living/silicon/robot/update_icons.dm index 088c93cff1..59c3c1794c 100644 --- a/code/modules/mob/living/silicon/robot/update_icons.dm +++ b/code/modules/mob/living/silicon/robot/update_icons.dm @@ -17,12 +17,16 @@ icon_state = "[module.cyborg_base_icon]-wreck" if(module.cyborg_pixel_offset) - pixel_x = module.cyborg_pixel_offset + var/matrix/M = transform + M.c = module.cyborg_pixel_offset + transform = M //End of citadel changes if(module.cyborg_base_icon == "robot") icon = 'icons/mob/robots.dmi' - pixel_x = initial(pixel_x) + var/matrix/M = transform + M.c = 0 // Cyborg's initial x offset is very likely to be 0 + transform = M if(stat != DEAD && !(IsUnconscious() || IsStun() || IsParalyzed() || low_power_mode)) //Not dead, not stunned. if(!eye_lights) eye_lights = new() diff --git a/code/modules/mob/living/silicon/silicon_defense.dm b/code/modules/mob/living/silicon/silicon_defense.dm index a87c0a81ab..e1a179ea52 100644 --- a/code/modules/mob/living/silicon/silicon_defense.dm +++ b/code/modules/mob/living/silicon/silicon_defense.dm @@ -45,14 +45,6 @@ adjustBruteLoss(damage) if(BURN) adjustFireLoss(damage) - if(TOX) - adjustToxLoss(damage) - if(OXY) - adjustOxyLoss(damage) - if(CLONE) - adjustCloneLoss(damage) - if(STAMINA) - adjustStaminaLoss(damage) /mob/living/silicon/attack_paw(mob/living/user) return attack_hand(user) diff --git a/code/modules/modular_computers/file_system/programs/airestorer.dm b/code/modules/modular_computers/file_system/programs/airestorer.dm index 4f181c0e34..ff5240306b 100644 --- a/code/modules/modular_computers/file_system/programs/airestorer.dm +++ b/code/modules/modular_computers/file_system/programs/airestorer.dm @@ -75,9 +75,8 @@ restoring = FALSE return ai_slot.locked = TRUE - A.adjustOxyLoss(-5, FALSE) - A.adjustFireLoss(-5, FALSE) - A.adjustToxLoss(-5, FALSE) + A.adjustOxyLoss(-5, FALSE, FALSE) + A.adjustFireLoss(-5, FALSE, FALSE) A.adjustBruteLoss(-5, FALSE) // Please don't forget to update health, otherwise the below if statements will probably always fail. diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index 9b10a843e8..5fd158c028 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -181,7 +181,6 @@ /obj/item/gun/energy/kinetic_accelerator/emp_act(severity) return -/* moved to modular_sand /obj/item/gun/energy/kinetic_accelerator/proc/reload() cell.give(cell.maxcharge) process_chamber() @@ -191,7 +190,7 @@ to_chat(loc, "[src] silently charges up.") update_icon() overheat = FALSE -*/ + /obj/item/gun/energy/kinetic_accelerator/update_overlays() . = ..() if(!can_shoot()) diff --git a/html/changelogs/archive/2023-01.yml b/html/changelogs/archive/2023-01.yml index 9ec4f2a21d..967b2b4a19 100644 --- a/html/changelogs/archive/2023-01.yml +++ b/html/changelogs/archive/2023-01.yml @@ -116,3 +116,6 @@ 2023-01-21: zeroisthebiggay: - spellcheck: the meme emotes + SandPoot: + - rscadd: Added a reskin to the premium kinetic accelerator. + - bugfix: Fixed some possible graphical glitches with the mining hardsuit reskin. diff --git a/icons/mob/clothing/head.dmi b/icons/mob/clothing/head.dmi index fb0246e6e3..26a8b1808f 100644 Binary files a/icons/mob/clothing/head.dmi and b/icons/mob/clothing/head.dmi differ diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi index 6e8ea50d39..0831f7be2f 100644 Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ diff --git a/modular_citadel/code/modules/client/loadout/head.dm b/modular_citadel/code/modules/client/loadout/head.dm index d0563d2986..58dd6e9fc3 100644 --- a/modular_citadel/code/modules/client/loadout/head.dm +++ b/modular_citadel/code/modules/client/loadout/head.dm @@ -195,6 +195,12 @@ restricted_desc = "Security" restricted_roles = list("Warden","Detective","Security Officer","Head of Security") +/datum/gear/head/cowboyhat/polychromic + name = "Cowboy Hat, Polychromic" + path = /obj/item/clothing/head/cowboyhat/polychromic + loadout_flags = LOADOUT_CAN_NAME | LOADOUT_CAN_DESCRIPTION | LOADOUT_CAN_COLOR_POLYCHROMIC + loadout_initial_colors = list("#5F5F5F", "#DDDDDD") + /datum/gear/head/wkepi name = "white kepi" path = /obj/item/clothing/head/kepi diff --git a/modular_sand/code/modules/clothing/spacesuits/hardsuit.dm b/modular_sand/code/modules/clothing/spacesuits/hardsuit.dm index 63777f7482..a73639e808 100644 --- a/modular_sand/code/modules/clothing/spacesuits/hardsuit.dm +++ b/modular_sand/code/modules/clothing/spacesuits/hardsuit.dm @@ -136,7 +136,7 @@ "Conscript" = list( "name" = "Conscript suit", "desc" = "..and so he left, with new orders and new questions.", - "icon" = 'modular_sand/icons/mob/clothing/suit.dmi', + "icon" = 'modular_sand/icons/obj/clothing/suits.dmi', "icon_state" = "commando-armor", "mob_overlay_icon" = 'modular_sand/icons/mob/clothing/suit.dmi', "anthro_mob_worn_overlay" = 'modular_sand/icons/mob/clothing/suit_digi.dmi' @@ -151,10 +151,15 @@ . = ..() switch(current_skin) if("Conscript") - if(slot == ITEM_SLOT_OCLOTHING) - icon = 'modular_sand/icons/mob/clothing/suit.dmi' - else - icon = 'modular_sand/icons/obj/clothing/suits.dmi' + var/datum/component/armor_plate/armor_comp = GetComponent(/datum/component/armor_plate) + var/armor_level = 0 + var/armor_max = 0 + if(armor_comp) + armor_level = armor_comp.amount + armor_max = armor_comp.maxamount + + upgrade_icon(amount = armor_level, maxamount = armor_max) + else return @@ -171,37 +176,39 @@ if(istype(helmet)) mining_helmet = helmet + /// h suffix for helmet + var/datum/component/armor_plate/armor_comp_h = mining_helmet.GetComponent(/datum/component/armor_plate) + var/armor_level_h = 0 + var/armor_max_h = 0 + if(armor_comp_h) + armor_level_h = armor_comp_h.amount + armor_max_h = armor_comp_h.maxamount + switch(current_skin) if("Default") - if(armor_level != 0) - upgrade_icon(amount = armor_level, maxamount = armor_max) + upgrade_icon(amount = armor_level, maxamount = armor_max) if(mining_helmet) mining_helmet.name = initial(mining_helmet.name) mining_helmet.desc = initial(mining_helmet.desc) mining_helmet.icon = initial(mining_helmet.icon) mining_helmet.icon_state = initial(mining_helmet.icon_state) - if(armor_level != 0) - mining_helmet.upgrade_icon(amount = armor_level, maxamount = armor_max) + mining_helmet.upgrade_icon(amount = armor_level_h, maxamount = armor_max_h) mining_helmet.mob_overlay_icon = initial(mining_helmet.mob_overlay_icon) mining_helmet.anthro_mob_worn_overlay = initial(mining_helmet.anthro_mob_worn_overlay) /// Sprited by Dexxiol#3462 :) if("Conscript") - if(armor_level != 0) - upgrade_icon(amount = armor_level, maxamount = armor_max) + upgrade_icon(amount = armor_level, maxamount = armor_max) if(mining_helmet) mining_helmet.name = "Conscript helmet" mining_helmet.desc = "It shines briefly, full of life." - mining_helmet.icon = 'modular_sand/icons/mob/clothing/head.dmi' + mining_helmet.icon = 'modular_sand/icons/obj/clothing/hats.dmi' mining_helmet.icon_state = "commando-helmet" - if(armor_level != 0) - mining_helmet.upgrade_icon(amount = armor_level, maxamount = armor_max) + mining_helmet.upgrade_icon(amount = armor_level_h, maxamount = armor_max_h) mining_helmet.mob_overlay_icon = 'modular_sand/icons/mob/clothing/head.dmi' mining_helmet.anthro_mob_worn_overlay = 'modular_sand/icons/mob/clothing/head_muzzled.dmi' - if(current_equipped_slot != ITEM_SLOT_OCLOTHING) - icon = 'modular_sand/icons/obj/clothing/suits.dmi' /obj/item/clothing/head/helmet/space/hardsuit/mining/update_icon_state() switch(suit.current_skin) @@ -224,7 +231,7 @@ icon_state = "commando[hardsuit_type]" if(ishuman(loc)) var/mob/living/carbon/human/wearer = loc - if(wearer.head == src) + if(istype(wearer) && (wearer.head == src)) wearer.update_inv_head() else . = ..() @@ -238,10 +245,10 @@ hardsuit_type = "2-armor" if(amount == maxamount) hardsuit_type = "3-armor" - icon_state = "commando[hardsuit_type]" + icon_state = "commando[hardsuit_type][current_equipped_slot != ITEM_SLOT_OCLOTHING ? "-inhand" : ""]" if(ishuman(loc)) var/mob/living/carbon/human/wearer = loc - if(wearer.wear_suit == src) + if(istype(wearer) && (wearer.wear_suit == src)) wearer.update_inv_wear_suit() else . = ..() diff --git a/modular_sand/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/modular_sand/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index ac51d7e5ec..12189b10ba 100644 --- a/modular_sand/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/modular_sand/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -1,21 +1,3 @@ -//Kinetic accelerator charging meme bugfix -/obj/item/gun/energy/kinetic_accelerator/ - var/chargetimer = null - -/obj/item/gun/energy/kinetic_accelerator/proc/reload() - if(ismob(loc) || isturf(loc)) //Kinetic accelerators won't charge inside objects. Period. - cell.give(cell.maxcharge) - if(!suppressed) - playsound(src.loc, 'sound/weapons/kenetic_reload.ogg', 60, 1) - else - to_chat(loc, span_warning("[src] silently charges up.")) - update_icon() - overheat = FALSE - else //this is a terrible solution, but it ensures that it wont be stuck on dischaged if it fails to reload in an obj - if(chargetimer) - deltimer(chargetimer) - chargetimer = addtimer(CALLBACK(src, .proc/reload), overheat_time * 2, TIMER_STOPPABLE) - //BDM pka /obj/item/gun/energy/kinetic_accelerator/premiumka/bdminer name = "bloody accelerator" @@ -568,3 +550,37 @@ /obj/item/borg/upgrade/modkit/aoe/heavy/modify_projectile(obj/item/projectile/kinetic/K) K.name = "heavy kinetic explosion" + +/obj/item/gun/energy/kinetic_accelerator/premiumka + unique_reskin = list( + "Default" = list( + "name" = "premium accelerator", + "desc" = "A premium kinetic accelerator fitted with an extended barrel and increased pressure tank.", + "icon" = 'icons/obj/guns/energy.dmi', + "icon_state" = "premiumgun", + "item_state" = "premiumgun", + "lefthand_file" = 'icons/mob/inhands/weapons/guns_lefthand.dmi', + "righthand_file" = 'icons/mob/inhands/weapons/guns_righthand.dmi' + ), + "Conscript's tapper" = list( + "name" = "Conscript's tapper", + "desc" = "Good 'ol kinetic handgun that has been revised to mining and killing tool, works better in pair.", // lies + "icon" = 'modular_sand/icons/obj/guns/energy.dmi', + "icon_state" = "commando-gun", + "item_state" = "commando-gun", + "lefthand_file" = 'modular_sand/icons/mob/inhands/weapons/guns_lefthand.dmi', + "righthand_file" = 'modular_sand/icons/mob/inhands/weapons/guns_righthand.dmi' + ) + ) + +/obj/item/gun/energy/kinetic_accelerator/premiumka/reskin_obj(mob/user) + . = ..() + if(ismob(loc) && current_equipped_slot == ITEM_SLOT_HANDS) + var/mob/update_hands = loc + update_hands.update_inv_hands() + +/obj/item/gun/energy/kinetic_accelerator/premiumka/update_overlays() + . = ..() + if(current_skin == "Conscript's tapper") + if(can_shoot()) + . += "[icon_state]_cocked" diff --git a/modular_sand/icons/mob/clothing/head.dmi b/modular_sand/icons/mob/clothing/head.dmi index e4e8b762c5..b0b9a34673 100644 Binary files a/modular_sand/icons/mob/clothing/head.dmi and b/modular_sand/icons/mob/clothing/head.dmi differ diff --git a/modular_sand/icons/mob/clothing/head_muzzled.dmi b/modular_sand/icons/mob/clothing/head_muzzled.dmi index 168b605f70..19eb0eaf85 100644 Binary files a/modular_sand/icons/mob/clothing/head_muzzled.dmi and b/modular_sand/icons/mob/clothing/head_muzzled.dmi differ diff --git a/modular_sand/icons/mob/clothing/suit.dmi b/modular_sand/icons/mob/clothing/suit.dmi index cf40ce721c..0cfaf655f8 100644 Binary files a/modular_sand/icons/mob/clothing/suit.dmi and b/modular_sand/icons/mob/clothing/suit.dmi differ diff --git a/modular_sand/icons/mob/inhands/weapons/guns_lefthand.dmi b/modular_sand/icons/mob/inhands/weapons/guns_lefthand.dmi index 8871ec5afd..1b9839a127 100644 Binary files a/modular_sand/icons/mob/inhands/weapons/guns_lefthand.dmi and b/modular_sand/icons/mob/inhands/weapons/guns_lefthand.dmi differ diff --git a/modular_sand/icons/mob/inhands/weapons/guns_righthand.dmi b/modular_sand/icons/mob/inhands/weapons/guns_righthand.dmi index a07597f370..ac450ce359 100644 Binary files a/modular_sand/icons/mob/inhands/weapons/guns_righthand.dmi and b/modular_sand/icons/mob/inhands/weapons/guns_righthand.dmi differ diff --git a/modular_sand/icons/obj/clothing/hats.dmi b/modular_sand/icons/obj/clothing/hats.dmi index e393feeb57..b269f8d166 100644 Binary files a/modular_sand/icons/obj/clothing/hats.dmi and b/modular_sand/icons/obj/clothing/hats.dmi differ diff --git a/modular_sand/icons/obj/clothing/suits.dmi b/modular_sand/icons/obj/clothing/suits.dmi index f2b9bedc0e..05ba6f3f04 100644 Binary files a/modular_sand/icons/obj/clothing/suits.dmi and b/modular_sand/icons/obj/clothing/suits.dmi differ diff --git a/modular_sand/icons/obj/guns/energy.dmi b/modular_sand/icons/obj/guns/energy.dmi index 18cb252bd8..5b5e9867cf 100644 Binary files a/modular_sand/icons/obj/guns/energy.dmi and b/modular_sand/icons/obj/guns/energy.dmi differ