diff --git a/code/game/gamemodes/events/biomass.dm b/code/game/gamemodes/events/biomass.dm index 36a22c86dc0..dd0fb3dd982 100644 --- a/code/game/gamemodes/events/biomass.dm +++ b/code/game/gamemodes/events/biomass.dm @@ -202,10 +202,11 @@ var/area/Hallway = locate(type) for(var/turf/simulated/floor/Floor in Hallway.contents) - if(Floor.contents.len <= 0) + if(!is_blocked_turf(Floor)) Floors += Floor if(Floors.len) // pick a floor to spawn at var/turf/simulated/floor/Floor = pick(Floors) new/obj/effect/biomass_controller(Floor) // spawn a controller at floor - message_admins("Event: Biomass spawned at [Floor.loc] ([Floor.x].[Floor.y].[Floor.z])") + log_admin("Event: Biomass spawned at [Floor.loc] ([Floor.x],[Floor.y],[Floor.z]).") + message_admins("Event: Biomass spawned at [Floor.loc] [formatJumpTo(Floor)]") diff --git a/code/game/gamemodes/events/spacevines.dm b/code/game/gamemodes/events/spacevines.dm index 7c5ce0d8d88..d7513dba4a8 100644 --- a/code/game/gamemodes/events/spacevines.dm +++ b/code/game/gamemodes/events/spacevines.dm @@ -1,6 +1,5 @@ //Carn: Spacevines random event. /proc/spacevine_infestation() - //writepanic("[__FILE__].[__LINE__] (no type)([usr ? usr.ckey : ""]) \\/proc/spacevine_infestation() called tick#: [world.time]") spawn() //to stop the secrets panel hanging @@ -8,10 +7,11 @@ for(var/areapath in typesof(/area/hallway)) var/area/A = locate(areapath) for(var/turf/simulated/floor/F in A.contents) - if(!F.contents.len) + if(!is_blocked_turf(F)) turfs += F if(turfs.len) //Pick a turf to spawn at if we can var/turf/simulated/floor/T = pick(turfs) new/obj/effect/plant_controller(T) //spawn a controller at turf - message_admins("Event: Spacevines spawned at [T.loc] ([T.x],[T.y],[T.z])") + log_admin("Event: Spacevines spawned at [T.loc] ([T.x],[T.y],[T.z]).") + message_admins("Event: Spacevines spawned at [T.loc] [formatJumpTo(T)]") diff --git a/code/game/objects/items/weapons/shields.dm b/code/game/objects/items/weapons/shields.dm index 48a38105195..46b84d5ee29 100644 --- a/code/game/objects/items/weapons/shields.dm +++ b/code/game/objects/items/weapons/shields.dm @@ -60,6 +60,7 @@ desc = "A shield capable of stopping most projectile and melee attacks. It can be retracted, expanded, and stored anywhere." icon = 'icons/obj/weapons.dmi' icon_state = "eshield0" // eshield1 for expanded + inhand_states = list("left_hand" = 'icons/mob/in-hand/left/shields.dmi', "right_hand" = 'icons/mob/in-hand/right/shields.dmi') flags = FPRINT siemens_coefficient = 1 force = 3.0 @@ -71,9 +72,36 @@ attack_verb = list("shoved", "bashed") var/active = 0 - suicide_act(mob/user) - viewers(user) << "[user] is putting the [src.name] to their head and activating it! It looks like \he's trying to commit suicide!" - return (BRUTELOSS) +/obj/item/weapon/shield/energy/suicide_act(mob/user) + viewers(user) << "[user] is putting the [src.name] to their head and activating it! It looks like \he's trying to commit suicide!" + return (BRUTELOSS) + +/obj/item/weapon/shield/energy/IsShield() + if(active) + return 1 + else + return 0 + +/obj/item/weapon/shield/energy/attack_self(mob/living/user as mob) + if ((M_CLUMSY in user.mutations) && prob(50)) + user << "You beat yourself in the head with [src]." + user.take_organ_damage(5) + active = !active + if (active) + force = 10 + w_class = 4 + playsound(user, 'sound/weapons/saberon.ogg', 50, 1) + user << "[src] is now active." + else + force = 3 + w_class = 1 + playsound(user, 'sound/weapons/saberoff.ogg', 50, 1) + user << "[src] can now be concealed." + icon_state = "eshield[active]" + item_state = "eshield[active]" + user.regenerate_icons() + add_fingerprint(user) + return /obj/item/weapon/cloaking_device diff --git a/code/game/objects/items/weapons/swords_axes_etc.dm b/code/game/objects/items/weapons/swords_axes_etc.dm index 01a1df19105..f96a21f97fe 100644 --- a/code/game/objects/items/weapons/swords_axes_etc.dm +++ b/code/game/objects/items/weapons/swords_axes_etc.dm @@ -207,31 +207,3 @@ return -/* - * Energy Shield - */ -/obj/item/weapon/shield/energy/IsShield() - if(active) - return 1 - else - return 0 - -/obj/item/weapon/shield/energy/attack_self(mob/living/user as mob) - if ((M_CLUMSY in user.mutations) && prob(50)) - user << "You beat yourself in the head with [src]." - user.take_organ_damage(5) - active = !active - if (active) - force = 10 - icon_state = "eshield[active]" - w_class = 4 - playsound(user, 'sound/weapons/saberon.ogg', 50, 1) - user << "[src] is now active." - else - force = 3 - icon_state = "eshield[active]" - w_class = 1 - playsound(user, 'sound/weapons/saberoff.ogg', 50, 1) - user << "[src] can now be concealed." - add_fingerprint(user) - return \ No newline at end of file diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index e800e72727f..36ee9095232 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -2795,16 +2795,17 @@ A.update_lightsource() A.busjuke.dir = EAST message_admins("[key_name_admin(usr)] has spawned an Adminbus. Who gave him the keys?") + log_admin("[key_name_admin(usr)] has spawned an Adminbus.") if("spawnselfdummy") feedback_inc("admin_secrets_fun_used",1) feedback_add_details("admin_secrets_fun_used","TD") message_admins("[key_name_admin(usr)] spawned himself as a Test Dummy.") + log_admin("[key_name_admin(usr)] spawned himself as a Test Dummy.") var/turf/T = get_turf(usr) var/mob/living/carbon/human/dummy/D = new /mob/living/carbon/human/dummy(T) usr.client.cmd_assume_direct_control(D) D.equip_to_slot_or_del(new /obj/item/clothing/under/color/black(D), slot_w_uniform) D.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(D), slot_shoes) - D.equip_to_slot_or_del(new /obj/item/weapon/card/id/admin(D), slot_wear_id) D.equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/captain(D), slot_ears) D.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(D), slot_back) D.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(D.back), slot_in_backpack) @@ -2817,6 +2818,9 @@ newname = "Admin" D.name = newname D.real_name = newname + var/obj/item/weapon/card/id/admin/admin_id = new(D) + admin_id.registered_name = newname + D.equip_to_slot_or_del(admin_id, slot_wear_id) //False flags and bait below. May cause mild hilarity or extreme pain. Now in one button if("fakealerts") feedback_inc("admin_secrets_fun_used",1) diff --git a/code/modules/hydroponics/vines.dm b/code/modules/hydroponics/vines.dm index 71050f8e9a3..cc1fcb421eb 100644 --- a/code/modules/hydroponics/vines.dm +++ b/code/modules/hydroponics/vines.dm @@ -130,14 +130,14 @@ if(prob(seed ? seed.potency : 25)) - if(!locked_atoms.len) + if(!locked_atoms || !locked_atoms.len) var/mob/living/carbon/V = locate() in src.loc if(V && V.stat != DEAD) // If mob exists and is not dead or captured. lock_atom(V) V << "The vines [pick("wind", "tangle", "tighten")] around you!" // FEED ME, SEYMOUR. - if(seed && locked_atoms.len) + if(seed && locked_atoms && locked_atoms.len) var/mob/V = locked_atoms[1] if(V.stat != DEAD) //Don't bother with a dead mob. diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 5a5482f3234..da9097375c6 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -482,7 +482,6 @@ var/global/list/damage_icon_parts = list() update_mutations(0) update_mutantrace(0) update_inv_w_uniform(0) - update_inv_wear_id(0) update_inv_gloves(0) update_inv_glasses(0) update_inv_ears(0) @@ -493,6 +492,7 @@ var/global/list/damage_icon_parts = list() update_inv_belt(0) update_inv_back(0) update_inv_wear_suit(0) + update_inv_wear_id(0) update_inv_r_hand(0) update_inv_l_hand(0) update_inv_handcuffed(0) @@ -580,8 +580,9 @@ var/global/list/damage_icon_parts = list() wear_id.screen_loc = ui_id //TODO if(w_uniform && w_uniform:displays_id) var/obj/Overlays/O = obj_overlays[ID_LAYER] - O.icon = 'icons/mob/mob.dmi' - O.icon_state = "id" + var/obj/item/weapon/card/ID_worn = wear_id + O.icon = 'icons/mob/ids.dmi' + O.icon_state = ID_worn.icon_state O.overlays.len = 0 if(wear_id.dynamic_overlay) if(wear_id.dynamic_overlay["[ID_LAYER]"]) diff --git a/code/modules/overlays/mobs.dm b/code/modules/overlays/mobs.dm index 13ce274f435..5dc7ff6ec32 100644 --- a/code/modules/overlays/mobs.dm +++ b/code/modules/overlays/mobs.dm @@ -14,31 +14,31 @@ /obj/Overlays/uniform_layer layer = FLOAT_LAYER - 20 -/obj/Overlays/id_layer +/obj/Overlays/shoes_layer layer = FLOAT_LAYER - 19 -/obj/Overlays/shoes_layer +/obj/Overlays/gloves_layer layer = FLOAT_LAYER - 18 -/obj/Overlays/gloves_layer +/obj/Overlays/ears_layer layer = FLOAT_LAYER - 17 -/obj/Overlays/ears_layer +/obj/Overlays/suit_layer layer = FLOAT_LAYER - 16 -/obj/Overlays/suit_layer +/obj/Overlays/glasses_layer layer = FLOAT_LAYER - 15 -/obj/Overlays/glasses_layer +/obj/Overlays/belt_layer layer = FLOAT_LAYER - 14 -/obj/Overlays/belt_layer +/obj/Overlays/suit_store_layer layer = FLOAT_LAYER - 13 -/obj/Overlays/suit_store_layer +/obj/Overlays/back_layer layer = FLOAT_LAYER - 12 -/obj/Overlays/back_layer +/obj/Overlays/id_layer layer = FLOAT_LAYER - 11 /obj/Overlays/hair_layer diff --git a/code/setup.dm b/code/setup.dm index 977536f3e61..ba7f242b363 100644 --- a/code/setup.dm +++ b/code/setup.dm @@ -1070,15 +1070,15 @@ var/list/RESTRICTED_CAMERA_NETWORKS = list( //Those networks can only be accesse #define MUTATIONS_LAYER 3 #define DAMAGE_LAYER 4 #define UNIFORM_LAYER 5 -#define ID_LAYER 6 -#define SHOES_LAYER 7 -#define GLOVES_LAYER 8 -#define EARS_LAYER 9 -#define SUIT_LAYER 10 -#define GLASSES_LAYER 11 -#define BELT_LAYER 12 //Possible make this an overlay of somethign required to wear a belt? -#define SUIT_STORE_LAYER 13 -#define BACK_LAYER 14 +#define SHOES_LAYER 6 +#define GLOVES_LAYER 7 +#define EARS_LAYER 8 +#define SUIT_LAYER 9 +#define GLASSES_LAYER 10 +#define BELT_LAYER 11 //Possible make this an overlay of somethign required to wear a belt? +#define SUIT_STORE_LAYER 12 +#define BACK_LAYER 13 +#define ID_LAYER 14 #define HAIR_LAYER 15 //TODO: make part of head layer? #define GLASSES_OVER_HAIR_LAYER 16 #define FACEMASK_LAYER 17 diff --git a/html/changelogs/DeityLink_6582.yml b/html/changelogs/DeityLink_6582.yml new file mode 100644 index 00000000000..14f85dbc85d --- /dev/null +++ b/html/changelogs/DeityLink_6582.yml @@ -0,0 +1,8 @@ +author: Deity Link +delete-after: true +changes: + - imageadd: Added on-mob sprites for every kinds of IDs. + - imageadd: Added on-mob sprites for every kinds of headsets. + - tweak: Moved the ID layer above suits and backpacks, so it's less likely to be hidden when it shouldn't. + - bugfix: Fixed energy shield sprite not updating when the shield is activated. + - bugfix: Fixed spacevine and biomass events being borked and not properly triggering. Welcome back spacevines random events. diff --git a/icons/mob/ears.dmi b/icons/mob/ears.dmi index c6eb50c9d7b..bcd592b0755 100644 Binary files a/icons/mob/ears.dmi and b/icons/mob/ears.dmi differ diff --git a/icons/mob/ids.dmi b/icons/mob/ids.dmi new file mode 100644 index 00000000000..ee926d6278d Binary files /dev/null and b/icons/mob/ids.dmi differ diff --git a/icons/mob/in-hand/left/shields.dmi b/icons/mob/in-hand/left/shields.dmi index cbbd3fd26fd..78da34e30c9 100644 Binary files a/icons/mob/in-hand/left/shields.dmi and b/icons/mob/in-hand/left/shields.dmi differ diff --git a/icons/mob/in-hand/right/shields.dmi b/icons/mob/in-hand/right/shields.dmi index c43c2301c67..bb08fd04767 100644 Binary files a/icons/mob/in-hand/right/shields.dmi and b/icons/mob/in-hand/right/shields.dmi differ diff --git a/icons/mob/mob.dmi b/icons/mob/mob.dmi index c2b31ac2f62..509d5b81e0d 100644 Binary files a/icons/mob/mob.dmi and b/icons/mob/mob.dmi differ