Desinning the past step by step (#10308)

This commit is contained in:
Kashargul
2025-03-06 23:39:27 +01:00
committed by GitHub
parent feda7c468a
commit 3025bb7f28
9 changed files with 45 additions and 379 deletions

View File

@@ -12875,10 +12875,6 @@
/obj/item/gun/projectile/automatic/sts35,
/turf/simulated/shuttle/floor/voidcraft/light,
/area/space)
"iIq" = (
/obj/effect/ctrigger,
/turf/simulated/floor/outdoors/dirt,
/area/space)
"iIv" = (
/obj/structure/artilleryplaceholder{
icon_state = "33"
@@ -17978,10 +17974,6 @@
},
/turf/simulated/floor/tiled/techmaint,
/area/space)
"mfO" = (
/obj/effect/ctrigger,
/turf/template_noop,
/area/space)
"mfQ" = (
/obj/machinery/shower{
dir = 4
@@ -40769,7 +40761,7 @@ cmZ
sRR
plK
mYY
iIq
mYY
imH
mYY
mYY
@@ -43858,7 +43850,7 @@ nwG
nwG
dmw
nwG
mfO
nwG
nwG
nwG
cmZ

View File

@@ -327,7 +327,6 @@
JOB_CLOWN = /datum/alt_title/clown, JOB_ALT_JESTER = /datum/alt_title/clown/jester,JOB_ALT_FOOL = /datum/alt_title/clown/fool,
JOB_MIME= /datum/alt_title/mime,JOB_ALT_PASEUR= /datum/alt_title/mime/poseur, //CHOMPEDIT: Adding clown + mime and their alts as alts of entertainer
JOB_ALT_ARTIST = /datum/alt_title/artist, JOB_ALT_FITNESS_INSTRUCTOR = /datum/alt_title/fitnessinstructor, JOB_ALT_GAME_MASTER = /datum/alt_title/game_master)
// Entertainer Alt Titles
/datum/alt_title/actor
title = JOB_ALT_ACTOR

View File

@@ -1,31 +0,0 @@
/datum/job/entertainer
alt_titles = list(JOB_ALT_PERFORMER = /datum/alt_title/performer, JOB_ALT_MUSICIAN = /datum/alt_title/musician, JOB_ALT_STAGEHAND = /datum/alt_title/stagehand,
JOB_ALT_ACTOR = /datum/alt_title/actor, JOB_ALT_DANCER = /datum/alt_title/dancer, JOB_ALT_SINGER = /datum/alt_title/singer,
JOB_ALT_MAGICIAN = /datum/alt_title/magician, JOB_ALT_COMEDIAN = /datum/alt_title/comedian, JOB_ALT_TRAGEDIAN = /datum/alt_title/tragedian,
JOB_CLOWN = /datum/alt_title/clown, JOB_ALT_JESTER = /datum/alt_title/clown/jester,JOB_ALT_FOOL = /datum/alt_title/clown/fool,
JOB_MIME= /datum/alt_title/mime,JOB_ALT_PASEUR= /datum/alt_title/mime/poseur, JOB_ALT_FITNESS_INSTRUCTOR = /datum/alt_title/fitness) //CHOMPEDIT: Adding clown + mime and their alts as alts of entertainer, as well as fitness instructor
/datum/alt_title/fitness
title = JOB_ALT_FITNESS_INSTRUCTOR
title_blurb = "A " + JOB_ALT_FITNESS_INSTRUCTOR + "'s goal is to keep the station in shape. Get the crew shaving up those built up pounds and get them to eat something other than chocolate bars and burgers for once"
//Below, well sort off, these are the clown and mime returning! as entertainer alts
//They even get their respective outfits.
/datum/alt_title/clown
title = JOB_CLOWN
title_blurb = "A " + JOB_CLOWN + " is there to entertain the crew and keep high morale using various harmless pranks and ridiculous jokes!"
title_outfit = /decl/hierarchy/outfit/job/clown
/datum/alt_title/clown/jester
title = JOB_ALT_JESTER
/datum/alt_title/clown/fool
title = JOB_ALT_FOOL
/datum/alt_title/mime
title = JOB_MIME
title_blurb = "A " + JOB_MIME + " is there to entertain the crew and keep high morale using unbelievable performances and acting skills!"
title_outfit = /decl/hierarchy/outfit/job/mime
/datum/alt_title/mime/poseur
title = JOB_ALT_PASEUR

View File

@@ -1,91 +0,0 @@
/obj/effect/ctrigger
name = "Step Trigger"
icon = null
anchored = 1
invisibility = INVISIBILITY_OBSERVER
density = 0
var/list/potential_triggerers = list() //What can set off our trigger?
var/list/trig_target_paths = list() //What are the paths of whatever we want to call our proc on?
var/trig_target_trigger_uid //What is the trigger_uid of whatever we want to call our proc on?
var/trig_proc //What proc do we want to call?
var/list/trig_args = list() //What are the arguments for said proc?
var/trig_message //Should we send a message to the person who stepped here?
var/message_span_class = "notice" //If we're gonna send them a message, what span class to use?
var/trig_single_use = FALSE //Is this only a single use trigger, or can it be used multiple times?
var/has_been_used = FALSE //Has this trigger been set off yet?
var/list/trig_targets = list() //This is set automatically if the other target vars are set.
var/list/been_triggered_by = list() //Who has set this off so far?
var/trig_single_use_per_triggerer = FALSE //Do we want to make so each atom can only trigger this once?
var/trig_target_is_trigerrer = FALSE //Do we want to use the atom that trigerred us as the target?
/obj/effect/ctrigger/proc/can_use_trigger(atom/movable/mover)
if(trig_single_use && has_been_used)
return FALSE
if(trig_single_use_per_triggerer && (mover in been_triggered_by))
return FALSE
if(!potential_triggerers.len)
return TRUE
else
for(var/path in potential_triggerers)
if(istype(mover,text2path(trim(path))))
return TRUE
else
continue
return FALSE
/obj/effect/ctrigger/Crossed(atom/movable/mover)
. = ..()
if(can_use_trigger(mover))
if(trig_proc)
if(trig_target_is_trigerrer)
trig_targets = list(mover)
if(trig_targets.len)
var/testname = trig_proc
//Find one of the 3 possible ways they could have written /proc/PROCNAME
if(findtext(trig_proc, "/proc/"))
testname = replacetext(trig_proc, "/proc/", "")
else if(findtext(trig_proc, "/proc"))
testname = replacetext(trig_proc, "/proc", "")
else if(findtext(trig_proc, "proc/"))
testname = replacetext(trig_proc, "proc/", "")
//Clear out any parenthesis if they're a dummy
testname = replacetext(testname, "()", "")
for(var/trig_target in trig_targets)
if(trig_target && !hascall(trig_target,testname))
message_admins("TRIGGER ERROR: ONE OR MORE TRIGGER TARGETS LACKS THE MENTIONED PROC")
return
for(var/trig_target in trig_targets)
call(trig_target,testname)(arglist(trig_args))
else
var/procpath = text2path(trig_proc)
if(!procpath)
message_admins("TRIGGER ERROR: INVALID PROC")
return
call(procpath)(arglist(trig_args))
if(trig_message)
to_chat(mover,"<span class='[message_span_class]'>"+trig_message+"</span>")
has_been_used = TRUE
been_triggered_by |= mover
else
return
/obj/effect/ctrigger/proc/update_trig_targets()
trig_targets = list()
for(var/path in trig_target_paths)
var/trig_target_path = text2path(path)
if(trig_target_path && trig_target_trigger_uid)
var/list/candidates = get_all_of_type(trig_target_path)
for(var/candidate in candidates)
var/datum/cand_datum = candidate
if(istype(cand_datum))
if(cand_datum.trigger_uid == trig_target_trigger_uid)
trig_targets += candidate
continue
continue
if(!trig_targets.len)
message_admins("TRIGGER ERROR: trig_targets STILL EMPTY AFTER CALLED update_trig_targets()")
/obj/effect/ctrigger/Initialize(mapload)
. = ..()
if(trig_target_paths.len)
update_trig_targets()

View File

@@ -1,231 +0,0 @@
/obj/kbutton
name = "button"
icon = 'icons/obj/objects.dmi'
icon_state = "launcherbtt"
desc = "A remote control switch for something."
anchored = 1.0
var/nothing_sound_file //Sound to play when button fails to be pressed
var/nothing_sound_volume //Volume of sound when button fails to be pressed
var/pressed_sound_file = 'sound/machines/button.ogg'//Sound to play when button is successfully pressed
var/pressed_sound_volume = 100 //Volume of sound when button is successfully pressed
var/list/trig_target_paths = list() //What are the paths of whatever we want to call our proc on?
var/trig_target_trigger_uid //What is the trigger_uid of whatever we want to call our proc on?
var/trig_proc //What proc do we want to call?
var/list/trig_args = list() //What are the arguments for said proc?
var/trig_message = "You press the button" //Should we send a message to the person who pressed the button?
var/trig_message_span_class = "notice" //Span class used for pressed message, normal ones include notice, warning, and danger.
var/nothing_message = "Nothing happens." //Should we send a message if nothing happens when the button is pressed?
var/nothing_message_span_class = "warning" //Span class used for nothing message, normal ones include notice, warning, and danger.
var/list/trig_targets = list()
var/trig_target_is_trigerrer = FALSE //Should we use the button presser as the target?
/obj/kbutton/attackby(obj/item/W, mob/user as mob)
return attack_hand(user)
/obj/kbutton/attack_hand(mob/user as mob)
. = ..()
if(can_press(user))
if(trig_target_is_trigerrer)
trig_targets = list(user)
button_trigger()
if(pressed_sound_file)
playsound(src, pressed_sound_file, pressed_sound_volume, 1)
if(trig_message)
to_chat(user,"<span class='[trig_message_span_class]'>"+trig_message+"</span>")
else
if(nothing_sound_file)
playsound(src, nothing_sound_file, nothing_sound_volume, 1)
if(nothing_message)
to_chat(user,"<span class='[nothing_message_span_class]'>"+nothing_message+"</span>")
return
/obj/kbutton/proc/button_trigger()
if(trig_proc)
if(trig_targets.len)
var/testname = trig_proc
//Find one of the 3 possible ways they could have written /proc/PROCNAME
if(findtext(trig_proc, "/proc/"))
testname = replacetext(trig_proc, "/proc/", "")
else if(findtext(trig_proc, "/proc"))
testname = replacetext(trig_proc, "/proc", "")
else if(findtext(trig_proc, "proc/"))
testname = replacetext(trig_proc, "proc/", "")
//Clear out any parenthesis if they're a dummy
testname = replacetext(testname, "()", "")
for(var/trig_target in trig_targets)
if(trig_target && !hascall(trig_target,testname))
message_admins("TRIGGER ERROR: ONE OR MORE TRIGGER TARGETS LACKS THE MENTIONED PROC")
return
for(var/trig_target in trig_targets)
call(trig_target,testname)(arglist(trig_args))
else
var/procpath = text2path(trig_proc)
if(!procpath)
message_admins("TRIGGER ERROR: INVALID PROC")
return
call(procpath)(arglist(trig_args))
/obj/kbutton/proc/can_press(mob/user)
return TRUE
/obj/kbutton/proc/update_trig_targets()
trig_targets = list()
for(var/path in trig_target_paths)
var/trig_target_path = text2path(path)
if(trig_target_path && trig_target_trigger_uid)
var/list/candidates = get_all_of_type(trig_target_path)
for(var/candidate in candidates)
var/datum/cand_datum = candidate
if(istype(cand_datum))
if(cand_datum.trigger_uid == trig_target_trigger_uid)
trig_targets += candidate
continue
continue
if(!trig_targets.len)
message_admins("TRIGGER ERROR: trig_targets STILL EMPTY AFTER CALLED update_trig_targets()")
/obj/kbutton/Initialize(mapload)
. = ..()
update_trig_targets()
return
/obj/kbutton/single_use
name = "single use button"
var/has_been_pressed = FALSE
/obj/kbutton/single_use/button_trigger()
has_been_pressed = TRUE
..()
/obj/kbutton/single_use/can_press(mob/user)
return !has_been_pressed
/obj/kbutton/single_use_per_mob
name = "button"
var/list/been_triggered_by = list()
/obj/kbutton/single_use_per_mob/can_press(mob/user)
if(user in been_triggered_by)
return FALSE
else
been_triggered_by |= user
return TRUE
/obj/kbutton/toggle
name = "toggle button"
var/toggled = FALSE
//For each of the following, each of the following variables will be used when switching to that state,
//and if it's set to null, it will use def(short for default)
var/trig_message_types = list(\
"def" = "You toggle the button.", \
"on" = null, \
"off" = null)
var/nothing_message_types = list(\
"def" = "Nothing happens.", \
"on" = null, \
"off" = null)
var/pressed_sound_file_types = list(\
"def" = 'sound/machines/button.ogg', \
"on" = null, \
"off" = null)
var/pressed_sound_volume_types = list(\
"def" = 100, \
"on" = null, \
"off" = null)
var/nothing_sound_file_types = list(\
"def" = null, \
"on" = null, \
"off" = null)
var/nothing_sound_volume_types = list(\
"def" = null, \
"on" = null, \
"off" = null)
var/icon_types = list(\
"def" = 'icons/obj/objects.dmi', \
"on" = null, \
"off" = null)
var/icon_state_types = list(\
"def" = "launcherbtt", \
"on" = null, \
"off" = null)
var/trig_proc_types = list(\
"def" = null, \
"on" = null, \
"off" = null)
var/trig_args_types = list(\
"def" = list(), \
"on" = list(), \
"off" = list())
/obj/kbutton/toggle/Initialize(mapload)
. = ..()
update_variables()
/obj/kbutton/toggle/proc/update_variables()
var/index = toggled ? "on" : "off"
trig_message = trig_message_types[index] ? trig_message_types[index] : trig_message_types["def"]
nothing_message = nothing_message_types[index] ? nothing_message_types[index] : nothing_message_types["def"]
pressed_sound_file = pressed_sound_file_types[index] ? pressed_sound_file_types[index] : pressed_sound_file_types["def"]
pressed_sound_volume = pressed_sound_volume_types[index] ? pressed_sound_volume_types[index] : pressed_sound_volume_types["def"]
nothing_sound_file = nothing_sound_file_types[index] ? nothing_sound_file_types[index] : nothing_sound_file_types["def"]
nothing_sound_volume = nothing_sound_volume_types[index] ? nothing_sound_volume_types[index] : nothing_sound_volume_types["def"]
icon = icon_types[index] ? icon_types[index] : icon_types["def"]
icon_state = icon_state_types[index] ? icon_state_types[index] : icon_state_types["def"]
trig_proc = trig_proc_types[index] ? trig_proc_types[index] : trig_proc_types["def"]
var/list/trig_arg_type = trig_args_types[index]
trig_args = (istype(trig_arg_type) && trig_arg_type.len) ? trig_args_types[index] : trig_args_types["def"]
/obj/kbutton/toggle/button_trigger()
toggled = !toggled
update_variables()
..()
//An example button which opens and closes a closet.
/obj/kbutton/toggle/example
var/press_wait_time = 25
var/last_pressed = 0
trig_target_paths = list("/obj/structure/closet")
trig_target_trigger_uid = 97482
trig_message_types = list(\
"def" = "You toggle the button.", \
"on" = "You switch the button on.", \
"off" = "You switch the button off.")
nothing_message_types = list(\
"def" = "Nothing happens.", \
"on" = "You fail to switch the button off.", \
"off" = "You fail to switch the button on.")
pressed_sound_file_types = list(\
"def" = 'sound/machines/button.ogg', \
"on" = 'sound/machines/chime.ogg', \
"off" = 'sound/machines/buttonbeep.ogg')
pressed_sound_volume_types = list(\
"def" = 80, \
"on" = 80, \
"off" = 80)
nothing_sound_file_types = list(\
"def" = 'sound/machines/buzz-sigh.ogg', \
"on" = 'sound/machines/buzz-sigh.ogg', \
"off" = 'sound/machines/buzz-two.ogg')
nothing_sound_volume_types = list(\
"def" = 100, \
"on" = 100, \
"off" = 100)
icon_state_types = list(\
"def" = "launcherbtt", \
"on" = "launcheract", \
"off" = "launcherbtt")
trig_proc_types = list(\
"def" = "close", \
"on" = "open", \
"off" = "close")
/obj/kbutton/toggle/example/can_press(mob/user)
if(world.time > last_pressed + press_wait_time)
last_pressed = world.time
return TRUE
else
return FALSE
//Corresponding closet for example button
/obj/structure/closet/button_example
trigger_uid = 97482

View File

@@ -0,0 +1,20 @@
//Below, well sort off, these are the clown and mime returning! as entertainer alts
//They even get their respective outfits.
/datum/alt_title/clown
title = JOB_CLOWN
title_blurb = "A " + JOB_CLOWN + " is there to entertain the crew and keep high morale using various harmless pranks and ridiculous jokes!"
title_outfit = /decl/hierarchy/outfit/job/clown
/datum/alt_title/clown/jester
title = JOB_ALT_JESTER
/datum/alt_title/clown/fool
title = JOB_ALT_FOOL
/datum/alt_title/mime
title = JOB_MIME
title_blurb = "A " + JOB_MIME + " is there to entertain the crew and keep high morale using unbelievable performances and acting skills!"
title_outfit = /decl/hierarchy/outfit/job/mime
/datum/alt_title/mime/poseur
title = JOB_ALT_PASEUR

View File

@@ -61,4 +61,4 @@
/mob/living/silicon/robot/drone/min
name = "mining drone"
law_type = /datum/ai_laws/mining_drone
law_type = /datum/ai_laws/mining_drone

View File

@@ -1,3 +1,5 @@
GLOBAL_LIST_EMPTY(simple_portals)
/obj/effect/simple_portal
name = "Portal"
desc = "It looks like a portal that leads to somewhere, although you can't quite see through it."
@@ -9,6 +11,20 @@
var/atom/destination
var/teleport_sound = 'sound/effects/portal_effect.ogg'
/obj/effect/simple_portal/Initialize(mapload)
..()
GLOB.simple_portals += src
return INITIALIZE_HINT_LATELOAD
/obj/effect/simple_portal/linked/LateInitialize()
. = ..()
if(portal_id)
link_portal()
/obj/effect/simple_portal/Destroy()
. = ..()
GLOB.simple_portals -= src
/obj/effect/simple_portal/Bumped(atom/movable/AM)
. = ..()
handle_teleport(AM)
@@ -43,7 +59,7 @@
icon_state = "portal1"
var/obj/effect/simple_portal/linked/linked_portal
var/portal_id
/obj/effect/simple_portal/linked/handle_teleport(atom/movable/AM)
destination = null
update_icon()
@@ -69,7 +85,7 @@
if(valid_destination(destination))
break
. = ..()
/obj/effect/simple_portal/linked/proc/valid_destination(var/turf/dest,var/atom/movable/AM)
if(!dest)
return FALSE
@@ -98,8 +114,7 @@
/obj/effect/simple_portal/linked/proc/link_portal()
if(!portal_id)
return "SET PORTAL ID FIRST"
var/list/candidates = get_all_of_type(/obj/effect/simple_portal/linked)
for(var/obj/effect/simple_portal/linked/candidate in candidates)
for(var/obj/effect/simple_portal/linked/candidate in GLOB.simple_portals)
if(istype(candidate) && portal_id == candidate.portal_id && candidate != src)
linked_portal = candidate
break
@@ -110,8 +125,3 @@
icon_state = "portal"
else
icon_state = "portal1"
/obj/effect/simple_portal/linked/Initialize()
. = ..()
if(portal_id)
link_portal()

View File

@@ -1005,7 +1005,6 @@
#include "code\game\jobs\job\security.dm"
#include "code\game\jobs\job\silicon.dm"
#include "code\game\jobs\job\special.dm"
#include "code\game\jobs\job\zz_alt_titles_ch.dm"
#include "code\game\machinery\adv_med.dm"
#include "code\game\machinery\adv_med_vr.dm"
#include "code\game\machinery\ai_slipper.dm"
@@ -1305,7 +1304,6 @@
#include "code\game\objects\explosion_recursive.dm"
#include "code\game\objects\items.dm"
#include "code\game\objects\items_vr.dm"
#include "code\game\objects\kasscbuttons_ch.dm"
#include "code\game\objects\mail.dm"
#include "code\game\objects\micro_event.dm"
#include "code\game\objects\micro_structures.dm"
@@ -1343,8 +1341,6 @@
#include "code\game\objects\effects\step_triggers.dm"
#include "code\game\objects\effects\wire_deleter.dm"
#include "code\game\objects\effects\zone_divider.dm"
#include "code\game\objects\effects\zz_portals_ch.dm"
#include "code\game\objects\effects\zz_triggers_ch.dm"
#include "code\game\objects\effects\alien\aliens.dm"
#include "code\game\objects\effects\chem\chemsmoke.dm"
#include "code\game\objects\effects\chem\coating.dm"
@@ -3417,7 +3413,6 @@
#include "code\modules\mob\living\silicon\robot\drone\swarm.dm"
#include "code\modules\mob\living\silicon\robot\drone\swarm_abilities.dm"
#include "code\modules\mob\living\silicon\robot\drone\swarm_items.dm"
#include "code\modules\mob\living\silicon\robot\drone\zzz_unify_drone.dm"
#include "code\modules\mob\living\silicon\robot\robot_modules\__Widerobot_Misc_Tools_ch.dm"
#include "code\modules\mob\living\silicon\robot\robot_modules\event.dm"
#include "code\modules\mob\living\silicon\robot\robot_modules\station.dm"
@@ -4808,6 +4803,7 @@
#include "modular_chomp\code\game\jobs\job\captain.dm"
#include "modular_chomp\code\game\jobs\job\department.dm"
#include "modular_chomp\code\game\jobs\job\engineering.dm"
#include "modular_chomp\code\game\jobs\job\entertainer_alts.dm"
#include "modular_chomp\code\game\jobs\job\medical.dm"
#include "modular_chomp\code\game\jobs\job\noncrew.dm"
#include "modular_chomp\code\game\jobs\job\security.dm"
@@ -4978,6 +4974,7 @@
#include "modular_chomp\code\modules\mob\living\carbon\human\species\station\traits\positive.dm"
#include "modular_chomp\code\modules\mob\living\carbon\human\species\station\traits\trait_mods.dm"
#include "modular_chomp\code\modules\mob\living\carbon\human\species\station\traits\xenomorph_hybrid_trait.dm"
#include "modular_chomp\code\modules\mob\living\silicon\drone\unify_drone.dm"
#include "modular_chomp\code\modules\mob\living\silicon\robot\robot.dm"
#include "modular_chomp\code\modules\mob\living\silicon\robot\robot_movement.dm"
#include "modular_chomp\code\modules\mob\living\simple_animal\aliens\synx.dm"
@@ -5135,6 +5132,7 @@
#include "modular_chomp\code\ZAS\Fire.dm"
#include "modular_chomp\code\ZAS\Fire_acts.dm"
#include "modular_chomp\datums\tgs_event_handler.dm"
#include "modular_chomp\game\effects\simple_portals.dm"
#include "modular_chomp\game\effects\spawner.dm"
#include "modular_chomp\game\machinery\bluespace_denier.dm"
#include "modular_chomp\game\machinery\buttons.dm"