Skip to content

Commit

Permalink
Merge branch 'master' of https://github.com/goonstation/goonstation i…
Browse files Browse the repository at this point in the history
…nto master
  • Loading branch information
Tarmunora committed Jan 5, 2024
2 parents 75cc96c + af7b9ea commit 55361b6
Show file tree
Hide file tree
Showing 23 changed files with 379 additions and 409 deletions.
2 changes: 1 addition & 1 deletion +secret
7 changes: 5 additions & 2 deletions code/datums/abilities/critter/gibstare.dm
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,13 @@
onEnd()
..()
logTheThing(LOG_COMBAT, owner, "gibs [constructTarget(target,"combat")] using Martian gib stare.")
owner.visible_message(SPAN_ALERT("<b>[target.name]'s</b> head explodes!"))
if (target == owner)
boutput(owner, SPAN_SUCCESS("Good. Job."))
target.gib()
if(ishuman(target))
var/mob/living/carbon/human/H = target
H.head_explosion()
else
target.gib()
ability.disabled = FALSE
ability?.actionFinishCooldown()

Expand Down
2 changes: 1 addition & 1 deletion code/datums/mutantraces.dm
Original file line number Diff line number Diff line change
Expand Up @@ -226,7 +226,7 @@ ABSTRACT_TYPE(/datum/mutantrace)
proc/load_clothing_icons()
SHOULD_CALL_PARENT(TRUE)
for (var/category in src.clothing_icons)
src.clothing_icon_states[category] = icon_states(src.clothing_icons[category], 1)
src.clothing_icon_states[category] = icon_states(src.clothing_icons[category])

/// Called by /mob/living/carbon/human/update_clothing()'s slot-specific sub-procs.
/// Each sub-proc passes its obj to this proc, which you can then operate on.
Expand Down
2 changes: 1 addition & 1 deletion code/map.dm
Original file line number Diff line number Diff line change
Expand Up @@ -394,7 +394,7 @@ var/global/list/mapNames = list(
"the EVA storage" = list(/area/station/ai_monitored/storage/eva),
"the robotics lab" = list(/area/station/medical/robotics),
"the bridge" = list(/area/station/bridge),
"the stock exchange at the public market" = list(/area/station/crew_quarters/stockex),
"the public market" = list(/area/station/crew_quarters/market),
"the escape arm" = list(/area/station/hallway/secondary/exit),
"the central room of the crew lounge" = list(/area/station/crew_quarters/quarters),
"the chapel" = list(/area/station/chapel/sanctuary))
Expand Down
17 changes: 17 additions & 0 deletions code/mob/living/carbon/human.dm
Original file line number Diff line number Diff line change
Expand Up @@ -3554,3 +3554,20 @@
/mob/living/carbon/human/choose_name(retries, what_you_are, default_name, force_instead)
. = ..()
src.on_realname_change()

/mob/living/carbon/human/proc/head_explosion()
var/list/nearby_turfs = list()
for(var/turf/T in view(5, src))
nearby_turfs += T
var/obj/brain = src.organHolder.drop_organ("brain")
var/obj/l_eye = src.organHolder.drop_organ("left_eye")
var/obj/r_eye = src.organHolder.drop_organ("right_eye")
var/obj/head = src.organHolder.drop_organ("head")
brain?.throw_at(pick(nearby_turfs), pick(1,2), 10)
l_eye?.throw_at(pick(nearby_turfs), pick(1,2), 10)
r_eye?.throw_at(pick(nearby_turfs), pick(1,2), 10)
qdel(head)
take_bleeding_damage(src, null, 500, DAMAGE_STAB)
src.visible_message(SPAN_ALERT("<B>BOOM!</B> [src]'s head explodes."),\
SPAN_ALERT("<B>BOOM!</B>"),\
SPAN_ALERT("You hear someone's head explode."))
2 changes: 1 addition & 1 deletion code/mob/living/carbon/human/procs/update_icon.dm
Original file line number Diff line number Diff line change
Expand Up @@ -537,7 +537,7 @@

// does a suit potentially cover our tail?
if(our_tail.clothing_image_icon && icon_state)
var/tail_overrides = icon_states(our_tail.clothing_image_icon, 1)
var/tail_overrides = icon_states(our_tail.clothing_image_icon)
if (islist(tail_overrides) && (icon_state in tail_overrides))
human_tail_image = image(our_tail.clothing_image_icon, icon_state)
src.tail_standing.overlays += human_tail_image
Expand Down
1 change: 0 additions & 1 deletion code/mob/living/silicon/ai/camera_handling.dm
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,6 @@
var/target_name = tgui_input_list(usr, "Which creature should you track?", "Track", creatures)

if (!target_name)
//usr:cameraFollow = null
src.tracker.cease_track()
return

Expand Down
1 change: 1 addition & 0 deletions code/mob/zoldorfmob.dm
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
src.sight |= SEE_TURFS | SEE_MOBS | SEE_OBJS | SEE_SELF
src.see_invisible = INVIS_GHOST
src.see_in_dark = SEE_DARK_FULL
src.flags |= UNCRUSHABLE

proc/addAllAbilities()
src.addAbility(/datum/targetable/zoldorfAbility/fortune)
Expand Down
2 changes: 1 addition & 1 deletion code/modules/antagonists/wizard/abilities/cluwne.dm
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
actions.start(new/datum/action/bar/icon/cluwne_spell(usr, target, src), holder.owner)

/datum/action/bar/icon/cluwne_spell
duration = 1.5 SECONDS
duration = 3 SECONDS
interrupt_flags = INTERRUPT_MOVE | INTERRUPT_ACT | INTERRUPT_STUNNED | INTERRUPT_ACTION
icon = 'icons/ui/actions.dmi'
icon_state = "cluwne"
Expand Down
29 changes: 17 additions & 12 deletions code/modules/camera/camera.dm
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,8 @@
/// The viewers of the camera, for quickly disconnecting them when needed
var/list/mob/viewers

HELP_MESSAGE_OVERRIDE("You can use a pair of <b>wire cutters</b> to disable the camera, or a <b>cable coil</b> to fix it if it's broken.")

/*
Autoname
Set by having "autoname" anywhere in the name variable.
Expand Down Expand Up @@ -136,8 +138,17 @@
user.visible_message(SPAN_ALERT("[user] wipes [src] with the bloody end of [W.name]. What the fuck?"), SPAN_ALERT("You wipe [src] with the bloody end of [W.name]. What the fuck?"))
return

if (issnippingtool(W) && !src.reinforced)
SETUP_GENERIC_ACTIONBAR(user, src, 0.5 SECOND, /obj/machinery/camera/proc/snipcamera, list(user), W.icon, W.icon_state, null, INTERRUPT_ACT | INTERRUPT_STUNNED | INTERRUPT_ACTION | INTERRUPT_MOVE)
if (issnippingtool(W))
if (src.reinforced)
boutput(user, SPAN_ALERT("[src] is too reinforced to disable!"))
return
else if (!src.camera_status)
boutput(user, SPAN_ALERT("[src] is already disabled. Use a cable coil if you want to fix it."))
return

SETUP_GENERIC_ACTIONBAR(user, src, 0.5 SECOND, /obj/machinery/camera/proc/break_camera, list(user), W.icon, W.icon_state, null, INTERRUPT_ACT | INTERRUPT_STUNNED | INTERRUPT_ACTION | INTERRUPT_MOVE)
else if (!src.camera_status && istype(W, /obj/item/cable_coil))
SETUP_GENERIC_ACTIONBAR(user, src, 0.5 SECOND, /obj/machinery/camera/proc/repair_camera, list(user, W), W.icon, W.icon_state, null, INTERRUPT_ACT | INTERRUPT_STUNNED | INTERRUPT_ACTION | INTERRUPT_MOVE)

if (!src.camera_status)
return
Expand Down Expand Up @@ -262,24 +273,18 @@
user.visible_message(SPAN_ALERT("[user] has deactivated [src]!"), SPAN_ALERT("You have deactivated [src]."))
logTheThing(LOG_STATION, null, "[key_name(user)] deactivated a security camera ([log_loc(src.loc)])")
add_fingerprint(user)
src.disconnect_viewers()

/obj/machinery/camera/proc/repair_camera(mob/user)
/obj/machinery/camera/proc/repair_camera(mob/user, obj/item/cable_coil/cables)
cables?.change_stack_amount(-1)
src.set_camera_status(TRUE)
playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1)
playsound(src.loc, 'sound/items/Deconstruct.ogg', 100, 1)
src.icon_state = "camera"
src.light.enable()
if (user)
user.visible_message(SPAN_ALERT("[user] has reactivated [src]!"), SPAN_ALERT("You have reactivated [src]."))
add_fingerprint(user)

/obj/machinery/camera/proc/snipcamera(user)
if (src.camera_status)
src.break_camera(user)
else
src.repair_camera(user)
// now disconnect anyone using the camera
src.disconnect_viewers()

/obj/machinery/camera/ranch
name = "autoname - ranch"
c_tag = "autotag"
Expand Down
2 changes: 2 additions & 0 deletions code/modules/chemistry/tools/grenades.dm
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
/* -------------------- Grenades -------------------- */
/* ================================================== */

ADMIN_INTERACT_PROCS(/obj/item/chem_grenade, proc/arm, proc/explode)

/obj/item/chem_grenade
name = "imcoder chemical grenade"
icon_state = "grenade-chem1"
Expand Down
2 changes: 1 addition & 1 deletion code/modules/events/white_hole.dm
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
TYPEINFO(/datum/random_event/major/white_hole)
initialization_args = list(
EVENT_INFO("target_turf", DATA_INPUT_REFPICKER, "Pick location"),
EVENT_INFO_EXT("grow_duration", DATA_INPUT_TEXT, "White Hole Growth Time", 0, 1 HOUR),
EVENT_INFO_EXT("grow_duration", DATA_INPUT_NUM, "White Hole Growth Time", 0, 1 HOUR),
EVENT_INFO_EXT("duration", DATA_INPUT_NUM, "White Hole Duration", 0, 1 HOUR),
EVENT_INFO_EXT("activity_modifier", DATA_INPUT_NUM, "White Hole Activity Modifier", 0, 250),
EVENT_INFO_EXT("source_location", DATA_INPUT_LIST_PROVIDED, "Pick source location", VALID_WHITE_HOLE_LOCATIONS)
Expand Down
3 changes: 3 additions & 0 deletions code/modules/medals/rewardsLocker.dm
Original file line number Diff line number Diff line change
Expand Up @@ -343,7 +343,10 @@
var/mob/living/carbon/human/H = activator
if (!istype(H.head, /obj/item/clothing/head/helmet) && istype(H.head, /obj/item/clothing/head)) // ha...
var/obj/item/clothing/head/M = H.head
M.icon = 'icons/obj/clothing/item_hats.dmi'
M.icon_state = "beret_base"
M.item_state = "beret_base"
M.wear_state = "beret_base"
M.wear_image_icon = 'icons/mob/clothing/head.dmi'
M.color = random_saturated_hex_color(1)
M.name = "beret"
Expand Down
2 changes: 1 addition & 1 deletion code/modules/sound/sound.dm
Original file line number Diff line number Diff line change
Expand Up @@ -245,7 +245,7 @@ var/global/list/default_channel_volumes = list(1, 1, 1, 0.5, 0.5, 1, 1)
S.environment = SPACED_ENV
S.echo = SPACED_ECHO
else
if(listener_location != source_location)
if(listener_location != source_location) // are they in a different area?
//boutput(M, "You barely hear a [source] at [source_location]!")
S.echo = ECHO_AFAR //Sound is occluded
else
Expand Down
6 changes: 3 additions & 3 deletions code/modules/transport/pods/vehicle.dm
Original file line number Diff line number Diff line change
Expand Up @@ -1033,7 +1033,7 @@
boutput(boarder, "There is no more room!")
return

if(!src.pilot && (ismobcritter(boarder)))
if(!src.pilot && (ismobcritter(boarder) && (!isadmin(boarder) || boarder.client.player_mode)))
boutput(boarder, SPAN_ALERT("You don't know how to pilot a pod, you can only enter as a passenger!"))
return

Expand All @@ -1050,7 +1050,7 @@
M.override_movement_controller = src.movement_controller
M.reset_keymap()
M.recheck_keys()
if(!src.pilot && !(ismobcritter(boarder)))
if(!src.pilot && (!ismobcritter(boarder) || (isadmin(boarder) && !M.client.player_mode)))
src.ion_trail.start()
src.find_pilot()
if (M.client)
Expand Down Expand Up @@ -1189,7 +1189,7 @@
if(src.pilot && (src.pilot.disposed || isdead(src.pilot) || src.pilot.loc != src))
src.pilot = null
for(var/mob/living/M in src) // fuck's sake stop assigning ghosts and observers to be the pilot
if(!src.pilot && !M.stat && M.client && !(ismobcritter(M)))
if(!src.pilot && !M.stat && M.client && (!ismobcritter(M) || isadmin(M) && !M.client.player_mode))
src.pilot = M
break

Expand Down
3 changes: 2 additions & 1 deletion code/obj/artifacts/artifact_objects/cloner.dm
Original file line number Diff line number Diff line change
Expand Up @@ -107,9 +107,10 @@
if(H)
H.ai_aggressive = 1
H.ai_calm_down = 0
sleep(randfloat(3 SECOND, 20 SECONDS))
while (!isdead(H) && isnull(H.client))
sleep(randfloat(3 SECOND, 20 SECONDS))
H.say(phrase_log.random_phrase("say"))
sleep(randfloat(3 SECOND, 20 SECONDS))
else
// make clone evil
clone.attack_alert = 0
Expand Down
2 changes: 1 addition & 1 deletion code/obj/item/clothing/gimmick.dm
Original file line number Diff line number Diff line change
Expand Up @@ -493,7 +493,7 @@ TYPEINFO(/obj/item/clothing/under/gimmick/fake_waldo)
desc = "Hey, still looks pretty happy for being so blue."
icon_state = "blessedclown"
item_state = "bclown_hat"
base_icon_state = "blesssedclown"
base_icon_state = "blessedclown"
bald_desc_state = "For sad clowns who want to show off their hair!"

/obj/item/clothing/under/misc/clown/blue
Expand Down
21 changes: 9 additions & 12 deletions code/obj/item/grenades.dm
Original file line number Diff line number Diff line change
Expand Up @@ -907,7 +907,7 @@ TYPEINFO(/obj/item/old_grenade/oxygen)
return

////////////////////////// Gimmick bombs /////////////////////////////////

ADMIN_INTERACT_PROCS(/obj/item/gimmickbomb, proc/arm, proc/detonate)
/obj/item/gimmickbomb
name = "Don't spawn this directly!"
icon = 'icons/obj/items/grenade.dmi'
Expand All @@ -920,7 +920,7 @@ TYPEINFO(/obj/item/old_grenade/oxygen)
proc/detonate()
playsound(src.loc, sound_explode, 45, 1)

var/obj/effects/explosion/E = new /obj/effects/explosion(src.loc)
var/obj/effects/explosion/E = new /obj/effects/explosion(get_turf(src))
E.fingerprintslast = src.fingerprintslast

invisibility = INVIS_ALWAYS_ISH
Expand Down Expand Up @@ -988,11 +988,10 @@ TYPEINFO(/obj/item/old_grenade/oxygen)
sound_beep = 'sound/voice/animal/hoot.ogg'

detonate()
for(var/mob/living/carbon/human/M in range(5, src))
for(var/mob/living/carbon/human/M in range(5, get_turf(src)))
var/area/t = get_area(M)
if(t?.sanctuary) continue
SPAWN(0)
M.owlgib()
M.owlgib()
..()

/obj/item/gimmickbomb/owlclothes
Expand Down Expand Up @@ -1030,11 +1029,10 @@ TYPEINFO(/obj/item/old_grenade/oxygen)
..()
return

for(var/mob/living/carbon/human/M in range(5, src))
for(var/mob/living/carbon/human/M in range(5, get_turf(src)))
var/area/t = get_area(M)
if(t?.sanctuary) continue
SPAWN(0)
src.dress_up(M)
src.dress_up(M)
..()

/obj/item/gimmickbomb/hotdog
Expand Down Expand Up @@ -1067,11 +1065,10 @@ TYPEINFO(/obj/item/old_grenade/oxygen)
src.dress_up(hero, cant_self_remove=TRUE, cant_other_remove=TRUE)
..()
return
for(var/mob/living/carbon/human/M in range(5, src))
for(var/mob/living/carbon/human/M in range(5, get_turf(src)))
var/area/t = get_area(M)
if(t?.sanctuary) continue
SPAWN(0)
src.dress_up(M)
src.dress_up(M)
..()

/obj/item/gimmickbomb/butt
Expand Down Expand Up @@ -1683,7 +1680,7 @@ TYPEINFO(/obj/item/old_grenade/oxygen)

// Pies won't do, they require a mob as the target. Obviously, the mousetrap roller is much more
// likely to bump into an inanimate object.
if (!checked_trap.grenade && !checked_trap.grenade_old && !checked_trap.pipebomb && !checked_trap.buttbomb)
if (!checked_trap.grenade && !checked_trap.grenade_old && !checked_trap.pipebomb && !checked_trap.gimmickbomb)
user.show_text("[checked_trap] must have a grenade or pipe bomb attached first.", "red")
return FALSE

Expand Down
17 changes: 2 additions & 15 deletions code/obj/item/gun/russian.dm
Original file line number Diff line number Diff line change
Expand Up @@ -45,26 +45,13 @@
return 0
else if(src.shotsLeft == 1)
if(ishuman(user))
var/list/nearby_turfs = list()
for(var/turf/T in view(5, user))
nearby_turfs += T
var/mob/living/carbon/human/H = user
var/obj/brain = H.organHolder.drop_organ("brain")
var/obj/l_eye = H.organHolder.drop_organ("left_eye")
var/obj/r_eye = H.organHolder.drop_organ("right_eye")
var/obj/head = H.organHolder.drop_organ("head")
brain?.throw_at(pick(nearby_turfs), pick(1,2), 10)
l_eye?.throw_at(pick(nearby_turfs), pick(1,2), 10)
r_eye?.throw_at(pick(nearby_turfs), pick(1,2), 10)
qdel(head)
H.head_explosion()
else
user.TakeDamage("head", 300, 0)
take_bleeding_damage(user, null, 500, DAMAGE_STAB)
take_bleeding_damage(user, null, 500, DAMAGE_STAB)
src.shotsLeft = 0
playsound(user, 'sound/weapons/Gunshot.ogg', 100, TRUE)
user.visible_message(SPAN_ALERT("<B>BOOM!</B> [user]'s head explodes."),\
SPAN_ALERT("<B>BOOM!</B>"),\
SPAN_ALERT("You hear someone's head explode."))
logTheThing(LOG_COMBAT, user, "shoots themselves with [src] at [log_loc(user)].")
inventory_counter.update_number(0)
return 1
Expand Down
Loading

0 comments on commit 55361b6

Please sign in to comment.