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