diff --git a/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm b/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm
index 1a3997272a..af9c10abc6 100644
--- a/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm
+++ b/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm
@@ -666,7 +666,7 @@ This is here to make the tiles around the station mininuke change when it's arme
if(disk_comfort_level >= 2) //Sleep tight, disky.
if(!(process_tick % 30))
visible_message("[src] sleeps soundly. Sleep tight, disky.")
- if(last_disk_move < world.time - 5000 && prob((world.time - 5000 - last_disk_move)*0.0001))
+ if(last_disk_move < world.time - 5000 && prob((world.time - 5000 - last_disk_move)*0.0001 / max(disk_comfort_level,1)))
var/datum/round_event_control/operative/loneop = locate(/datum/round_event_control/operative) in SSevents.control
if(istype(loneop) && loneop.occurrences < loneop.max_occurrences)
loneop.weight += 1
diff --git a/code/modules/mining/lavaland/ruins/gym.dm b/code/modules/mining/lavaland/ruins/gym.dm
index c26631be74..68e0706d84 100644
--- a/code/modules/mining/lavaland/ruins/gym.dm
+++ b/code/modules/mining/lavaland/ruins/gym.dm
@@ -1,7 +1,7 @@
/obj/structure/punching_bag
name = "punching bag"
desc = "A punching bag. Can you get to speed level 4???"
- icon = 'goon/icons/obj/fitness.dmi'
+ icon = 'icons/obj/fitness.dmi'
icon_state = "punchingbag"
anchored = TRUE
layer = WALL_OBJ_LAYER
@@ -12,7 +12,7 @@
. = ..()
if(.)
return
- flick("[icon_state]2", src)
+ flick("[icon_state]-punch", src)
playsound(loc, pick(hit_sounds), 25, 1, -1)
if(isliving(user))
var/mob/living/L = user
@@ -20,15 +20,24 @@
L.apply_status_effect(STATUS_EFFECT_EXERCISED)
/obj/structure/weightmachine
- name = "Weight Machine"
desc = "Just looking at this thing makes you feel tired."
+ icon = 'icons/obj/fitness.dmi'
density = TRUE
anchored = TRUE
- var/icon_state_inuse
/obj/structure/weightmachine/proc/AnimateMachine(mob/living/user)
return
+/obj/structure/weightmachine/update_icon_state()
+ . = ..()
+ icon_state = (obj_flags & IN_USE) ? "[base_icon_state]-u" : base_icon_state
+
+/obj/structure/weightmachine/update_overlays()
+ . = ..()
+
+ if(obj_flags & IN_USE)
+ . += mutable_appearance(icon, "[base_icon_state]-o", layer = ABOVE_MOB_LAYER, alpha = src.alpha)
+
/obj/structure/weightmachine/on_attack_hand(mob/living/user, act_intent = user.a_intent, unarmed_attack_flags)
. = ..()
if(.)
@@ -38,7 +47,7 @@
return
else
obj_flags |= IN_USE
- icon_state = icon_state_inuse
+ update_appearance()
user.setDir(SOUTH)
user.Stun(80)
user.forceMove(src.loc)
@@ -48,17 +57,17 @@
playsound(user, 'sound/machines/click.ogg', 60, 1)
obj_flags &= ~IN_USE
+ update_appearance()
user.pixel_y = 0
var/finishmessage = pick("You feel stronger!","You feel like you can take on the world!","You feel robust!","You feel indestructible!")
SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, "exercise", /datum/mood_event/exercise)
- icon_state = initial(icon_state)
to_chat(user, finishmessage)
user.apply_status_effect(STATUS_EFFECT_EXERCISED)
/obj/structure/weightmachine/stacklifter
- icon = 'goon/icons/obj/fitness.dmi'
- icon_state = "fitnesslifter"
- icon_state_inuse = "fitnesslifter2"
+ name = "chest press machine"
+ icon_state = "stacklifter"
+ base_icon_state = "stacklifter"
/obj/structure/weightmachine/stacklifter/AnimateMachine(mob/living/user)
var/lifts = 0
@@ -69,27 +78,24 @@
animate(user, pixel_y = -2, time = 3)
sleep(3)
animate(user, pixel_y = -4, time = 3)
- sleep(3)
- playsound(user, 'goon/sound/effects/spring.ogg', 60, 1)
+ sleep(2)
+ playsound(user, 'sound/machines/creak.ogg', 60, 1)
/obj/structure/weightmachine/weightlifter
- icon = 'goon/icons/obj/fitness.dmi'
- icon_state = "fitnessweight"
- icon_state_inuse = "fitnessweight-c"
+ name = "inline bench press"
+ icon_state = "benchpress"
+ base_icon_state = "benchpress"
/obj/structure/weightmachine/weightlifter/AnimateMachine(mob/living/user)
- var/mutable_appearance/swole_overlay = mutable_appearance(icon, "fitnessweight-w", WALL_OBJ_LAYER)
- add_overlay(swole_overlay)
var/reps = 0
user.pixel_y = 5
while (reps++ < 6)
if (user.loc != src.loc)
break
for (var/innerReps = max(reps, 1), innerReps > 0, innerReps--)
- sleep(3)
+ sleep(4)
animate(user, pixel_y = (user.pixel_y == 3) ? 5 : 3, time = 3)
- playsound(user, 'goon/sound/effects/spring.ogg', 60, 1)
+ playsound(user, 'sound/machines/creak.ogg', 60, 1)
sleep(3)
animate(user, pixel_y = 2, time = 3)
sleep(3)
- cut_overlay(swole_overlay)
diff --git a/code/modules/power/singularity/field_generator.dm b/code/modules/power/singularity/field_generator.dm
index 9d887a8e1f..567ac00487 100644
--- a/code/modules/power/singularity/field_generator.dm
+++ b/code/modules/power/singularity/field_generator.dm
@@ -34,6 +34,7 @@ field_generator power level display
max_integrity = 500
//100% immune to lasers and energy projectiles since it absorbs their energy.
armor = list(MELEE = 25, BULLET = 10, LASER = 100, ENERGY = 100, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 70)
+ var/obj/item/radio/radio
var/const/num_power_levels = 6 // Total number of power level icon has
var/power_level = 0
var/active = FG_OFFLINE
@@ -58,6 +59,9 @@ field_generator power level display
. = ..()
fields = list()
connected_gens = list()
+ radio = new(src)
+ radio.listening = 0
+ radio.recalculateChannels()
/obj/machinery/field/generator/ComponentInitialize()
. = ..()
@@ -166,6 +170,7 @@ field_generator power level display
/obj/machinery/field/generator/Destroy()
cleanup()
+ QDEL_NULL(radio)
return ..()
@@ -333,6 +338,7 @@ field_generator power level display
if((world.time - O.last_warning) > 50) //to stop message-spam
temp = 0
var/turf/T = get_turf(src)
+ radio.talk_into(src, "A containment field has failed in [get_area_name(src, TRUE)] while a singularity exists.", null, language = get_selected_language())
message_admins("A singulo exists and a containment field has failed at [ADMIN_VERBOSEJMP(T)].")
investigate_log("has failed whilst a singulo exists at [AREACOORD(T)].", INVESTIGATE_SINGULO)
O.last_warning = world.time
diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm
index 8490daa681..29fd68d034 100644
--- a/code/modules/power/singularity/singularity.dm
+++ b/code/modules/power/singularity/singularity.dm
@@ -415,17 +415,13 @@
/obj/singularity/proc/mezzer()
for(var/mob/living/carbon/M in oviewers(8, src))
- if(isbrain(M)) //Ignore brains
- continue
-
- if(M.stat == CONSCIOUS)
- if (ishuman(M))
- var/mob/living/carbon/human/H = M
- if(istype(H.glasses, /obj/item/clothing/glasses/meson))
- var/obj/item/clothing/glasses/meson/MS = H.glasses
- if(MS.vision_flags == SEE_TURFS)
- to_chat(H, "You look directly into the [src.name], good thing you had your protective eyewear on!")
- return
+ if(M.stat == CONSCIOUS && ishuman(M))
+ var/mob/living/carbon/human/H = M
+ if(istype(H.glasses, /obj/item/clothing/glasses/meson))
+ var/obj/item/clothing/glasses/meson/MS = H.glasses
+ if(MS.vision_flags == SEE_TURFS)
+ to_chat(H, "You look directly into the [src.name], good thing you had your protective eyewear on!")
+ return
M.apply_effect(60, EFFECT_STUN)
M.visible_message("[M] stares blankly at the [src.name]!", \
diff --git a/code/modules/research/destructive_analyzer.dm b/code/modules/research/destructive_analyzer.dm
index cc02e271f9..9c7ca5b999 100644
--- a/code/modules/research/destructive_analyzer.dm
+++ b/code/modules/research/destructive_analyzer.dm
@@ -84,15 +84,7 @@ Note: Must be placed within 3 tiles of the R&D Console
reclaim_materials_from(thing)
for(var/mob/M in thing)
M.death()
- if(istype(thing, /obj/item/stack/sheet))
- var/obj/item/stack/sheet/S = thing
- if(S.amount > 1 && !innermode)
- S.amount--
- loaded_item = S
- else
- qdel(S)
- else
- qdel(thing)
+ qdel(thing)
if (!innermode)
update_icon()
return TRUE
diff --git a/goon/icons/obj/chairs.dmi b/goon/icons/obj/chairs.dmi
deleted file mode 100644
index 462370ac37..0000000000
Binary files a/goon/icons/obj/chairs.dmi and /dev/null differ
diff --git a/goon/icons/obj/fitness.dmi b/goon/icons/obj/fitness.dmi
deleted file mode 100644
index e2675cbda4..0000000000
Binary files a/goon/icons/obj/fitness.dmi and /dev/null differ
diff --git a/goon/sound/effects/spring.ogg b/goon/sound/effects/spring.ogg
deleted file mode 100644
index 472a75e304..0000000000
Binary files a/goon/sound/effects/spring.ogg and /dev/null differ
diff --git a/html/changelogs/archive/2022-09.yml b/html/changelogs/archive/2022-09.yml
new file mode 100644
index 0000000000..e0dee70cac
--- /dev/null
+++ b/html/changelogs/archive/2022-09.yml
@@ -0,0 +1,25 @@
+2022-09-01:
+ Putnam3145:
+ - bugfix: Job code is no longer fricked (oh well)
+ - rscadd: Antag roles can be set to "low" rather than just "enabled" or "disabled",
+ which will prevent spending antag rep on that antag but make you a low priority
+ pick
+ - code_imp: Changed no antags from a special role to a toggle (why did i make it
+ a special role)
+ - code_imp: All direct references to ROLE_NO_ANTAGONISTS have been swapped to the
+ HAS_ANTAG_PREF macro or removed
+2022-09-02:
+ Putnam3145:
+ - tweak: comfy disky no longer wants the station to blow up
+ - balance: Field generators now yell if they fail (singuloose nerf)
+ ? zeroisthebiggay and Tastyfish (https://github.com/Tastyfish) and Fikou (https://github.com/Fikou)
+ and san7890 (https://github.com/san7890)
+ : - bugfix: The 2 types of weight machines now have unique in-game names.
+ - imageadd: New sprites for the weight machines.
+ - imageadd: new punching bag sprites!!!!!!!!!!!!!!!!
+ - soundadd: The next time you work out at the gym, please appreciate the new crispness
+ of the sound when that machine starts to squeak as a result of your effort.
+ So refreshing.
+2022-09-03:
+ Putnam3145:
+ - bugfix: Destructive analyzer now does not multiply your stack by 50
diff --git a/icons/obj/fitness.dmi b/icons/obj/fitness.dmi
new file mode 100644
index 0000000000..c48e2450fb
Binary files /dev/null and b/icons/obj/fitness.dmi differ
diff --git a/sound/machines/creak.ogg b/sound/machines/creak.ogg
new file mode 100644
index 0000000000..edb9802b08
Binary files /dev/null and b/sound/machines/creak.ogg differ