[MIRROR] Polaris Hook Removal Part 1 (#11887)

Co-authored-by: Will <7099514+Willburd@users.noreply.github.com>
Co-authored-by: C.L. <killer65311@gmail.com>
This commit is contained in:
CHOMPStation2StaffMirrorBot
2025-10-30 13:40:35 -07:00
committed by GitHub
parent 2a35bdaac7
commit d82d0807a5
52 changed files with 198 additions and 286 deletions

View File

@@ -6,23 +6,45 @@
// These are signals which can be listened to by any component on any parent
// start global signals with "!", this used to be necessary but now it's just a formatting choice
/// /datum/controller/subsystem/ticker/proc/setup() : ()
#define COMSIG_GLOB_ROUND_START "!round_start"
/// /datum/controller/subsystem/ticker/proc/post_game_tick() : ()
#define COMSIG_GLOB_ROUND_END "!round_end"
///from base of datum/controller/subsystem/mapping/proc/add_new_zlevel(): (list/args)
#define COMSIG_GLOB_NEW_Z "!new_z"
/// called after a successful var edit somewhere in the world: (list/args)
#define COMSIG_GLOB_VAR_EDIT "!var_edit"
/// called after an explosion happened : (epicenter, devastation_range, heavy_impact_range, light_impact_range, took, orig_dev_range, orig_heavy_range, orig_light_range)
/// called after an explosion happened, called by /datum/controller/subsystem/explosions/proc/end_resolve() : (epicenter, devastation_range, heavy_impact_range, light_impact_range, seconds_taken)
#define COMSIG_GLOB_EXPLOSION "!explosion"
/// mob was created somewhere : (mob)
/// mob was created somewhere, called by /mob/Initialize() : (mob)
#define COMSIG_GLOB_MOB_CREATED "!mob_created"
/// mob died somewhere : (mob , gibbed)
/// mob died somewhere, called by /mob/proc/death(gibbed,deathmessage) : (mob , gibbed)
#define COMSIG_GLOB_MOB_DEATH "!mob_death"
/// global living say plug - use sparingly: (mob/speaker , message)
#define COMSIG_GLOB_LIVING_SAY_SPECIAL "!say_special"
/// called by datum/cinematic/play() : (datum/cinematic/new_cinematic)
#define COMSIG_GLOB_PLAY_CINEMATIC "!play_cinematic"
#define COMPONENT_GLOB_BLOCK_CINEMATIC (1<<0)
/// ingame button pressed (/obj/machinery/button/button)
/// ingame button pressed, called by /obj/machinery/button/attack_hand() : (obj/machinery/button/button, mob/user)
#define COMSIG_GLOB_BUTTON_PRESSED "!button_pressed"
/// Supply shuttle selling, before all items are sold, called by /datum/controller/subsystem/supply/proc/sell() : (/list/area/supply_shuttle_areas)
#define COMSIG_GLOB_SUPPLY_SHUTTLE_DEPART "!sell_supply_shuttle"
/// Supply shuttle selling, for each item sold, called by /datum/controller/subsystem/supply/proc/sell() : (atom/movable/sold_item, sold_successfully, datum/exported_crate/export_data, area/shuttle_subarea)
#define COMSIG_GLOB_SUPPLY_SHUTTLE_SELL_ITEM "!supply_shuttle_sell_item"
/// Mind inserted into body: (mob/new_owner, /datum/mind/assigned_mind)
#define COMSIG_GLOB_RESLEEVED_MIND "!resleeved_mind_into_body"
/// ID card modified: (obj/item/card/id/modified_card)
#define COMSIG_GLOB_REASSIGN_EMPLOYEE_IDCARD "!modified_employee_idcard"
/// ID card terminated: (obj/item/card/id/terminated_card)
#define COMSIG_GLOB_TERMINATE_EMPLOYEE_IDCARD "!modified_terminated_idcard"
/// payment account status changed /obj/machinery/account_database/tgui_act() : (datum/money_account/account)
#define COMSIG_GLOB_PAYMENT_ACCOUNT_STATUS "!payment_account_change_status"
/// payment account status changed /obj/machinery/account_database/tgui_act() : (datum/money_account/account)
#define COMSIG_GLOB_PAYMENT_ACCOUNT_REVOKE "!payment_account_revoke_payroll"
/// borg created: (mob/living/silicon/robot/new_robot)
#define COMSIG_GLOB_BORGIFY "!borgify_mob"
/// brain removed from body, called by /obj/item/organ/internal/brain/proc/transfer_identity() : (mob/living/carbon/brain/brainmob)
#define COMSIG_GLOB_BRAIN_REMOVED "!brain_removed_from_mob"
/// signals from globally accessible objects

View File

@@ -1653,6 +1653,7 @@ GLOBAL_LIST_INIT(suitable_fish_turf_types, list(
/turf/simulated/floor/water
))
GLOBAL_LIST_BOILERPLATE(papers_dockingcode, /obj/item/paper/dockingcodes)
//Chamelion clothing was all stupid so it's done here instead.
//Jumpsuit

View File

@@ -85,10 +85,6 @@ var/next_duration_update = 0
var/last_round_duration = 0
GLOBAL_VAR_INIT(round_start_time, 0)
/hook/roundstart/proc/start_timer()
GLOB.round_start_time = REALTIMEOFDAY
return 1
/proc/roundduration2text()
if(!GLOB.round_start_time)
return "00:00"

View File

@@ -5,79 +5,7 @@
/hook/startup
/**
* Roundstart hook.
* Called in gameticker.dm when a round starts.
* Roundend hook.
* Called in gameticker.dm when a round ends.
*/
/hook/roundstart
/**
* Death hook.
* Called in death.dm when someone dies.
* Parameters: var/mob/living/carbon/human, var/gibbed
*/
/hook/death
/**
* Cloning hook.
* Called in cloning.dm when someone is brought back by the wonders of modern science.
* Parameters: var/mob/living/carbon/human
*/
/hook/clone
/**
* Debrained hook.
* Called in brain_item.dm when someone gets debrained.
* Parameters: var/obj/item/organ/brain
*/
/hook/debrain
/**
* Borged hook.
* Called in robot_parts.dm when someone gets turned into a cyborg.
* Parameters: var/mob/living/silicon/robot
*/
/hook/borgify
/**
* Payroll revoked hook.
* Called in Accounts_DB.dm when someone's payroll is stolen at the Accounts terminal.
* Parameters: var/datum/money_account
*/
/hook/revoke_payroll
/**
* Account suspension hook.
* Called in Accounts_DB.dm when someone's account is suspended or unsuspended at the Accounts terminal.
* Parameters: var/datum/money_account
*/
/hook/change_account_status
/**
* Employee reassignment hook.
* Called in card.dm when someone's card is reassigned at the HoP's desk.
* Parameters: var/obj/item/card/id
*/
/hook/reassign_employee
/**
* Employee terminated hook.
* Called in card.dm when someone's card is terminated at the HoP's desk.
* Parameters: var/obj/item/card/id
*/
/hook/terminate_employee
/**
* Crate sold hook.
* Called in supplyshuttle.dm when a crate is sold on the shuttle.
* Parameters: var/obj/structure/closet/crate/sold, var/area/shuttle
*/
/hook/sell_crate
/**
* Supply Shuttle sold hook.
* Called in supplyshuttle.dm when the shuttle contents are sold.
* This hook is called _before_ the crates are processed for normal
* phoron/metal sale (and before the sell_crate hooks)
* Parameters: var/area/area_shuttle
*/
/hook/sell_shuttle
/hook/roundend

View File

@@ -79,17 +79,17 @@ SUBSYSTEM_DEF(explosions)
// We've handled the actual explosions, it's time to wrap up everything else.
// send signals to all machines scanning for them
for(var/list/time_dat in currentsignals)
var/x0 = time_dat[1]
var/y0 = time_dat[2]
var/z0 = time_dat[3]
var/turf/epicenter = locate(time_dat[1],time_dat[2],time_dat[3])
if(!epicenter)
continue
var/z_transfer = time_dat[8]
if(z_transfer != (UP|DOWN)) // Only the initial explosion in a multiz explosion transfers both up and down!
continue
var/devastation_range = time_dat[4]
var/heavy_impact_range = time_dat[5]
var/light_impact_range = time_dat[6]
var/tim = time_dat[7]
for(var/i,i<=GLOB.doppler_arrays.len,i++)
var/obj/machinery/doppler_array/Array = GLOB.doppler_arrays[i]
if(Array)
Array.sense_explosion(x0,y0,z0,devastation_range,heavy_impact_range,light_impact_range, tim - world.time)
var/took = (world.time - time_dat[7]) / (1 SECOND) // Horrifyingly, this has always been server performance dependant. Should really only be used for cosmetic stuff.
SEND_GLOBAL_SIGNAL(COMSIG_GLOB_EXPLOSION, epicenter, devastation_range, heavy_impact_range, light_impact_range, took)
currentsignals.Cut()
// return to setup mode... Unless...
@@ -217,7 +217,7 @@ SUBSYSTEM_DEF(explosions)
currentrun["[x0].[y0].[z0]"] = list(x0,y0,z0,pwr,direction,max_starting)
// Queue explosion event, call this from explosion() ONLY
/datum/controller/subsystem/explosions/proc/append_explosion(var/turf/epicenter,var/pwr,var/devastation_range,var/heavy_impact_range,var/light_impact_range,var/flash_range)
/datum/controller/subsystem/explosions/proc/append_explosion(turf/epicenter, pwr, devastation_range, heavy_impact_range, light_impact_range, flash_range, z_transfer)
SHOULD_NOT_OVERRIDE(TRUE)
if(pwr <= 0)
return
@@ -245,7 +245,7 @@ SUBSYSTEM_DEF(explosions)
pending_explosions["[T.x].[T.y].[T.z]"] = list(T.x,T.y,T.z,rad_power,direction,max_starting)
// send signals to dopplers
explosion_signals.Add(list( list(x0,y0,z0,devastation_range,heavy_impact_range,light_impact_range,world.time) )) // append a list in a list. Needed so that the data list doesn't get merged into the list of datalists
explosion_signals.Add(list( list(x0, y0, z0, devastation_range, heavy_impact_range, light_impact_range, world.time, z_transfer))) // append a list in a list. Needed so that the data list doesn't get merged into the list of datalists
// BOINK! Time to wake up sleeping beauty!
wake_and_defer_subsystem_updates(devastation_range >= 8 || heavy_impact_range >= 16 || light_impact_range >= 20)
@@ -336,4 +336,4 @@ SUBSYSTEM_DEF(explosions)
// Queue explosion event
var/power = devastation_range * 2 + heavy_impact_range + light_impact_range //The ranges add up, ie light 14 includes both heavy 7 and devestation 3. So this calculation means devestation counts for 4, heavy for 2 and light for 1 power, giving us a cap of 27 power.
SSexplosions.append_explosion(epicenter,power,devastation_range,heavy_impact_range,light_impact_range,flash_range)
SSexplosions.append_explosion(epicenter,power,devastation_range,heavy_impact_range,light_impact_range,flash_range,z_transfer)

View File

@@ -67,8 +67,8 @@ SUBSYSTEM_DEF(supply)
//Selling
/datum/controller/subsystem/supply/proc/sell()
// Loop over each area in the supply shuttle
SEND_GLOBAL_SIGNAL(COMSIG_GLOB_SUPPLY_SHUTTLE_DEPART, shuttle.shuttle_area)
for(var/area/subarea in shuttle.shuttle_area)
callHook("sell_shuttle", list(subarea));
for(var/atom/movable/MA in subarea)
if(MA.anchored)
continue
@@ -79,10 +79,10 @@ SUBSYSTEM_DEF(supply)
EC.contents = list()
var/base_value = 0
// Must be in a crate!
// Most items must be in a crate!
var/sold_successfully = FALSE
if(istype(MA,/obj/structure/closet/crate))
var/obj/structure/closet/crate/CR = MA
callHook("sell_crate", list(CR, subarea))
points += CR.points_per_crate
if(CR.points_per_crate)
@@ -90,11 +90,12 @@ SUBSYSTEM_DEF(supply)
// For each thing in the crate, get the value and quantity
for(var/atom/A in CR)
SEND_SIGNAL(A,COMSIG_ITEM_SOLD,EC,TRUE)
sold_successfully = SEND_SIGNAL(A,COMSIG_ITEM_SOLD,EC,TRUE)
else
// Selling things that are not in crates.
// Usually it just makes a log that it wasn't shipped properly, and so isn't worth anything
SEND_SIGNAL(MA,COMSIG_ITEM_SOLD,EC,FALSE)
sold_successfully = SEND_SIGNAL(MA,COMSIG_ITEM_SOLD,EC,FALSE)
SEND_GLOBAL_SIGNAL(COMSIG_GLOB_SUPPLY_SHUTTLE_SELL_ITEM, MA, sold_successfully, EC, subarea)
exported_crates += EC
points += EC.value

View File

@@ -213,9 +213,34 @@ SUBSYSTEM_DEF(ticker)
cb.InvokeAsync()
LAZYCLEARLIST(round_start_events)
round_start_time = world.time //otherwise round_start_time would be 0 for the signals
//otherwise round_start_time would be 0 for the signals
round_start_time = world.time
GLOB.round_start_time = REALTIMEOFDAY
SEND_SIGNAL(src, COMSIG_TICKER_ROUND_STARTING, world.time)
callHook("roundstart")
SEND_GLOBAL_SIGNAL(COMSIG_GLOB_ROUND_START)
SSwebhooks.send(WEBHOOK_ROUNDSTART, list("url" = get_world_url()))
// Spawn randomized items
for(var/id in multi_point_spawns)
var/list/spawn_points = multi_point_spawns[id]
var/obj/random_multi/rm = pickweight(spawn_points)
rm.generate_items()
for(var/entry in spawn_points)
qdel(entry)
// Place empty AI cores once we know who is playing AI
for(var/obj/effect/landmark/start/S in GLOB.landmarks_list)
if(S.name != JOB_AI)
continue
if(locate(/mob/living) in S.loc)
continue
GLOB.empty_playable_ai_cores += new /obj/structure/AIcore/deactivated(get_turf(S))
// Final init, these things need round to start for their info to be ready
for(var/obj/item/paper/dockingcodes/dcp as anything in GLOB.papers_dockingcode)
dcp.populate_info()
for(var/obj/machinery/power/solar_control/SC as anything in GLOB.solars_list)
SC.auto_start()
log_world("Game start took [(world.timeofday - init_start)/10]s")
INVOKE_ASYNC(SSdbcore, TYPE_PROC_REF(/datum/controller/subsystem/dbcore,SetRoundStart))
@@ -326,7 +351,8 @@ SUBSYSTEM_DEF(ticker)
/datum/controller/subsystem/ticker/proc/post_game_tick()
switch(end_game_state)
if(END_GAME_READY_TO_END)
callHook("roundend")
callHook("roundend") // TODO, remove all hooks that use this in favor of global signal
SEND_GLOBAL_SIGNAL(COMSIG_GLOB_ROUND_END)
if (mode.station_was_nuked)
feedback_set_details("end_proper", "nuke")

View File

@@ -90,7 +90,3 @@ SUBSYSTEM_DEF(webhooks)
log_and_message_admins("has pinged webhook [choice].", usr)
log_world("[usr.key] has pinged webhook [choice].")
webhook.send()
/hook/roundstart/proc/run_webhook()
SSwebhooks.send(WEBHOOK_ROUNDSTART, list("url" = get_world_url()))
return 1

View File

@@ -77,10 +77,10 @@
/datum/mind/proc/transfer_to(mob/living/new_character, force = FALSE)
if(!istype(new_character))
log_world("## DEBUG: transfer_to(): Some idiot has tried to transfer_to() a non mob/living mob. Please inform Carn")
var/datum/component/antag/changeling/comp
var/datum/component/antag/changeling/changeling_comp
if(current)
comp = is_changeling(current) //remove ourself from our old body's mind variable
if(comp)
changeling_comp = is_changeling(current) //remove ourself from our old body's mind variable
if(changeling_comp)
current.remove_changeling_powers()
remove_verb(current, /mob/proc/EvolutionMenu)
current.mind = null
@@ -91,15 +91,23 @@
current = new_character //link ourself to our new body
new_character.mind = src //and link our new body to ourself
if(comp)
// Handle mode/antag specific respawns
if(changeling_comp)
new_character.make_changeling()
if(learned_spells)
for(var/spell/spell_to_add in learned_spells)
new_character.add_spell(spell_to_add)
if(active || force)
new_character.key = key //now transfer the key to link the client to our new body
if(new_character.client)
new_character.client.init_verbs() // re-initialize character specific verbs
update_antag_icons(src)
/datum/mind/proc/store_memory(new_text)
memory += "[new_text]<BR>"

View File

@@ -1,5 +1,6 @@
/obj/machinery/button/attack_hand(obj/item/W, mob/user as mob)
if(..()) return 1
SEND_GLOBAL_SIGNAL(COMSIG_GLOB_BUTTON_PRESSED, src, user)
playsound(src, 'sound/machines/button.ogg', 100, 1)
/obj/machinery/button/windowtint/multitint

View File

@@ -131,11 +131,7 @@
H.ckey = BR.ckey
to_chat(H, span_warning(span_bold("Consciousness slowly creeps over you as your body regenerates.") + "<br>" + span_bold(span_large("Your recent memories are fuzzy, and it's hard to remember anything from today...")) + \
"<br>" + span_notice(span_italics("So this is what cloning feels like?"))))
// -- Mode/mind specific stuff goes here
callHook("clone", list(H))
update_antag_icons(H.mind)
// -- End mode specific stuff
SEND_GLOBAL_SIGNAL(COMSIG_GLOB_RESLEEVED_MIND, H, clonemind)
// A modifier is added which makes the new clone be unrobust.
// Upgraded cloners can reduce the time of the modifier, up to 80%

View File

@@ -224,7 +224,7 @@
modify.assignment = t1
modify.rank = t1
callHook("reassign_employee", list(modify))
SEND_GLOBAL_SIGNAL(COMSIG_GLOB_REASSIGN_EMPLOYEE_IDCARD, modify)
. = TRUE
if("reg")
@@ -280,8 +280,7 @@
if(is_authenticated())
modify.assignment = "Dismissed" //VOREStation Edit: setting adjustment
modify.access = list()
callHook("terminate_employee", list(modify))
SEND_GLOBAL_SIGNAL(COMSIG_GLOB_TERMINATE_EMPLOYEE_IDCARD, modify)
. = TRUE

View File

@@ -194,7 +194,7 @@
card.name = text("[card.registered_name]'s ID Card ([card.assignment])")
GLOB.data_core.manifest_modify(card.registered_name, card.assignment, card.rank)
card.last_job_switch = world.time
callHook("reassign_employee", list(card))
SEND_GLOBAL_SIGNAL(COMSIG_GLOB_REASSIGN_EMPLOYEE_IDCARD, card)
newjob.current_positions++
var/mob/living/carbon/human/H = user
H.mind.assigned_role = card.rank
@@ -220,7 +220,7 @@
card.name = text("[card.registered_name]'s ID Card ([card.assignment])")
GLOB.data_core.manifest_modify(card.registered_name, card.assignment, card.rank)
card.last_job_switch = world.time
callHook("reassign_employee", list(card))
SEND_GLOBAL_SIGNAL(COMSIG_GLOB_REASSIGN_EMPLOYEE_IDCARD, card)
var/mob/living/carbon/human/H = user
H.mind.assigned_role = ptojob.title
H.mind.role_alt_title = ptojob.title

View File

@@ -392,14 +392,14 @@ var/list/whitelisted_positions = list(
writer.assignment = t1
writer.name = text("[writer.registered_name]'s ID Card ([writer.assignment])")
data_core.manifest_modify(writer.registered_name, writer.assignment, writer.rank)
callHook("reassign_employee", list(writer))
SEND_GLOBAL_SIGNAL(COMSIG_GLOB_REASSIGN_EMPLOYEE_IDCARD, writer)
if("reg" in href_list)
if(auth)
writer.registered_name = href_list["reg"]
writer.name = text("[writer.registered_name]'s ID Card ([writer.assignment])")
data_core.manifest_modify(writer.registered_name, writer.assignment, writer.rank)
callHook("reassign_employee", list(writer))
SEND_GLOBAL_SIGNAL(COMSIG_GLOB_REASSIGN_EMPLOYEE_IDCARD, writer)
computer.updateUsrDialog(usr)
return

View File

@@ -1,5 +1,3 @@
GLOBAL_LIST_EMPTY(doppler_arrays)
/obj/machinery/doppler_array
anchored = TRUE
name = "tachyon-doppler array"
@@ -11,37 +9,35 @@ GLOBAL_LIST_EMPTY(doppler_arrays)
/obj/machinery/doppler_array/Initialize(mapload)
. = ..()
GLOB.doppler_arrays += src
RegisterSignal(SSdcs, COMSIG_GLOB_EXPLOSION, PROC_REF(sense_explosion))
/obj/machinery/doppler_array/Destroy()
GLOB.doppler_arrays -= src
UnregisterSignal(SSdcs, COMSIG_GLOB_EXPLOSION)
. = ..()
/obj/machinery/doppler_array/proc/sense_explosion(var/x0,var/y0,var/z0,var/devastation_range,var/heavy_impact_range,var/light_impact_range,var/took)
if(stat & NOPOWER) return
if(z != z0) return
/obj/machinery/doppler_array/proc/sense_explosion(datum/source, turf/epicenter, devastation_range, heavy_impact_range, light_impact_range, seconds_taken)
SIGNAL_HANDLER
var/dx = abs(x0-x)
var/dy = abs(y0-y)
var/distance
var/direct
if(stat & NOPOWER)
return
if(dx > dy)
distance = dx
if(x0 > x) direct = EAST
else direct = WEST
else
distance = dy
if(y0 > y) direct = NORTH
else direct = SOUTH
var/x0 = epicenter.x
var/y0 = epicenter.y
var/z0 = epicenter.z
if(!(z0 in GetConnectedZlevels(z)))
return
var/turf/our_turf = get_turf(src)
if(our_turf.Distance(epicenter) > 100)
return
if(distance > 100) return
if(!(direct & dir)) return
/* There is no way to rotate these... Why?
var/direct = get_dir(our_turf,epicenter)
if(!(direct & dir))
return
*/
var/message = "Explosive disturbance detected - Epicenter at: grid ([x0],[y0]). Epicenter radius: [devastation_range]. Outer radius: [heavy_impact_range]. Shockwave radius: [light_impact_range]. Temporal displacement of tachyons: [took]seconds."
for(var/mob/O in hearers(src, null))
O.show_message(span_npc_say(span_name("[src]") + " states coldly, \"[message]\""),2)
var/message = "Explosive disturbance detected - Epicenter at: grid ([x0],[y0],[z0]). Epicenter radius: [devastation_range]. Outer radius: [heavy_impact_range]. Shockwave radius: [light_impact_range]. Temporal displacement of tachyons: [seconds_taken] seconds."
audible_message(span_npc_say(span_name("[src]") + " states coldly, \"[message]\""))
/obj/machinery/doppler_array/power_change()
..()

View File

@@ -70,6 +70,7 @@ var/global/mob/living/carbon/human/dummy/mannequin/sleevemate_mob
M.ooc_notes_favs = ooc_notes_favs
M.ooc_notes_maybes = ooc_notes_maybes
M.ooc_notes_style = ooc_notes_style
SEND_GLOBAL_SIGNAL(COMSIG_GLOB_RESLEEVED_MIND, M, stored_mind)
clear_mind()

View File

@@ -221,7 +221,7 @@
cell_component.installed = 1
feedback_inc("cyborg_birth",1)
callHook("borgify", list(O))
SEND_GLOBAL_SIGNAL(COMSIG_GLOB_BORGIFY, O)
qdel(src)
else

View File

@@ -137,12 +137,3 @@ var/list/multi_point_spawns
/obj/random_multi/single_item/generate_items()
new item_path(loc)
/hook/roundstart/proc/generate_multi_spawn_items()
for(var/id in multi_point_spawns)
var/list/spawn_points = multi_point_spawns[id]
var/obj/random_multi/rm = pickweight(spawn_points)
rm.generate_items()
for(var/entry in spawn_points)
qdel(entry)
return 1

View File

@@ -394,13 +394,6 @@ var/list/species_sound_map = list(
"Unset" = use_default
)
/* // Not sure we even really need this
/hook/startup/proc/Init_species_sounds() // The entries we're checking over MUST have unique keys.
for(var/i in species_sound_map)
species_sounds |= species_sound_map[i]
return 1
*/
/*
* Call this for when you need a sound from an already-identified list - IE, "Canine". pick() cannot parse procs.
* Indexes must be pre-calculated by the time it reaches here - for instance;

View File

@@ -139,7 +139,7 @@
if("toggle_suspension")
if(detailed_account_view)
detailed_account_view.suspended = !detailed_account_view.suspended
callHook("change_account_status", list(detailed_account_view))
SEND_GLOBAL_SIGNAL(COMSIG_GLOB_PAYMENT_ACCOUNT_STATUS, detailed_account_view)
if("finalise_create_account")
var/account_name = params["holder_name"]
@@ -196,7 +196,7 @@
detailed_account_view.transaction_log.Add(account_trx)
GLOB.station_account.transaction_log.Add(station_trx)
callHook("revoke_payroll", list(detailed_account_view))
SEND_GLOBAL_SIGNAL(COMSIG_GLOB_PAYMENT_ACCOUNT_REVOKE, detailed_account_view)
if("print")
print()

View File

@@ -5,7 +5,7 @@
endWhen = 126
/datum/event/aurora_caelus/announce()
command_announcement.Announce("[station_name()]: A harmless cloud of ions is approaching your station, and will exhaust their energy battering the hull. \
command_announcement.Announce("[station_name()]: A harmless cloud of ions is approaching your [using_map.facility_type], and will exhaust their energy battering the hull. \
Nanotrasen has approved a short break for all employees to relax and observe this very rare event. \
During this time, starlight will be bright but gentle, shifting between quiet green and blue colors. \
Any staff who would like to view these lights for themselves may proceed to the area nearest to them with viewing ports to open space. \

View File

@@ -4,9 +4,9 @@
endWhen = 3
/datum/event/ianstorm/announce()
command_announcement.Announce("It has come to our attention that the station passed through an ion storm. Please monitor all electronic equipment for malfunctions.", "Anomaly Alert") //CHOMPedit: removes announcement .ogg
command_announcement.Announce("It has come to our attention that the [using_map.facility_type] passed through an ion storm. Please monitor all electronic equipment for malfunctions.", "Anomaly Alert") //CHOMPedit: removes announcement .ogg
spawn(7 SECONDS)
command_announcement.Announce("Wait. No, that's wrong. The station passed through an IAN storm!.", "Ian Alert")
command_announcement.Announce("Wait. No, that's wrong. The [using_map.facility_type] passed through an IAN storm!.", "Ian Alert")
/datum/event/ianstorm/start()
spawn()

View File

@@ -37,7 +37,7 @@
/datum/event/prison_break/announce()
if(areas && areas.len > 0)
command_announcement.Announce("[pick("Gr3y.T1d3 virus","Malignant trojan")] detected in [station_name()] [(eventDept == "Security")? "imprisonment":"containment"] subroutines. Secure any compromised areas immediately. Station AI involvement is recommended.", "[eventDept] Alert")
command_announcement.Announce("[pick("Gr3y.T1d3 virus","Malignant trojan")] detected in [station_name()] [(eventDept == "Security")? "imprisonment":"containment"] subroutines. Secure any compromised areas immediately. Involvement of [using_map.facility_type] AI is recommended.", "[eventDept] Alert")
/datum/event/prison_break/start()

View File

@@ -16,7 +16,7 @@
/datum/event/radiation_storm/tick()
if(activeFor == enterBelt)
command_announcement.Announce("The station has entered the radiation belt. Please remain in a sheltered area until we have passed the radiation belt.", "Anomaly Alert") //CHOMPEdit: Restored original message
command_announcement.Announce("The [using_map.facility_type] has entered the radiation belt. Please remain in a sheltered area until we have passed the radiation belt.", "Anomaly Alert") //CHOMPEdit: Restored original message
radiate()
if(activeFor >= enterBelt && activeFor <= leaveBelt)
@@ -27,7 +27,7 @@
radiate()
else if(activeFor == leaveBelt)
command_announcement.Announce("The station has passed the radiation belt. Please allow for up to one minute while radiation levels dissipate, and report to medbay if you experience any unusual symptoms. Maintenance will lose all access again shortly.", "Anomaly Alert") //CHOMPEdit: Restored original message
command_announcement.Announce("The [using_map.facility_type] has passed the radiation belt. Please allow for up to one minute while radiation levels dissipate, and report to medbay if you experience any unusual symptoms. Maintenance will lose all access again shortly.", "Anomaly Alert") //CHOMPEdit: Restored original message
/datum/event/radiation_storm/proc/radiate()
var/radiation_level = rand(15, 35)
for(var/z in using_map.station_levels)

View File

@@ -35,7 +35,7 @@
if(4)
msg = "A passing derelict ship's drone defense systems have just activated. If any are sighted in the area, use caution." //CHOMPStation Edit: Restored original message.
if(5)
msg = "We're detecting a swarm of small objects approaching your station. Most likely a bunch of drones. Please exercise caution if you see any."
msg = "We're detecting a swarm of small objects approaching your [using_map.facility_type]. Most likely a bunch of drones. Please exercise caution if you see any."
//CHOMPStation Edit End
command_announcement.Announce(msg, "Rogue drone alert")

View File

@@ -9,7 +9,7 @@
endWhen = startWhen + rand(30,90) + rand(30,90) //2-6 minute duration
/datum/event/solar_storm/announce()
command_announcement.Announce("A solar storm has been detected approaching \the [station_name()]. Please halt all EVA activites immediately and return to the interior of the station.", "Anomaly Alert", new_sound = 'sound/AI/radiation.ogg')
command_announcement.Announce("A solar storm has been detected approaching \the [station_name()]. Please halt all EVA activites immediately and return to the interior of the [using_map.facility_type].", "Anomaly Alert", new_sound = 'sound/AI/radiation.ogg')
adjust_solar_output(1.5)
/datum/event/solar_storm/proc/adjust_solar_output(var/mult = 1)
@@ -18,7 +18,7 @@
/datum/event/solar_storm/start()
command_announcement.Announce("The solar storm has reached the station. Please refrain from EVA and remain inside the station until it has passed.", "Anomaly Alert")
command_announcement.Announce("The solar storm has reached the [using_map.facility_type]. Please refrain from EVA and remain inside the [using_map.facility_type] until it has passed.", "Anomaly Alert")
adjust_solar_output(5)
@@ -40,7 +40,7 @@
L.rad_act(rand(15, 30))
/datum/event/solar_storm/end()
command_announcement.Announce("The solar storm has passed the station. It is now safe to resume EVA activities. Please report to medbay if you experience any unusual symptoms. ", "Anomaly Alert")
command_announcement.Announce("The solar storm has passed the [using_map.facility_type]. It is now safe to resume EVA activities. Please report to medbay if you experience any unusual symptoms. ", "Anomaly Alert")
adjust_solar_output()

View File

@@ -1,10 +1,5 @@
/var/global/running_demand_events = list()
/hook/sell_shuttle/proc/supply_demand_sell_shuttle(var/area/area_shuttle)
for(var/datum/event/supply_demand/E in running_demand_events)
E.handle_sold_shuttle(area_shuttle)
return 1 // All hooks must return one to show success.
//
// The Supply Demand Event - CentCom asks for us to put some stuff on the shuttle
//
@@ -62,7 +57,8 @@
send_console_message(message, dpt);
// Also announce over main comms so people know to look
command_announcement.Announce("An order for the station to deliver supplies to [command_name()] has been delivered to all supply Request Consoles", my_department)
command_announcement.Announce("An order for the [using_map.facility_type] to deliver supplies to [command_name()] has been delivered to all supply Request Consoles", my_department)
RegisterSignal(SSdcs, COMSIG_GLOB_SUPPLY_SHUTTLE_DEPART, PROC_REF(handle_supply_demand_sell_shuttle))
/datum/event/supply_demand/tick()
if(required_items.len == 0)
@@ -70,6 +66,7 @@
/datum/event/supply_demand/end()
running_demand_events -= src
UnregisterSignal(SSdcs, COMSIG_GLOB_SUPPLY_SHUTTLE_DEPART)
// Check if the crew succeeded or failed!
if(required_items.len == 0)
// Success!
@@ -86,6 +83,16 @@
for(var/datum/supply_demand_order/req in required_items)
message += req.describe() + "<br>"
post_comm_message("'[my_department] Mission Summary'", message)
/**
* Signal Handler for when the shuttle fires COMSIG_GLOB_SUPPLY_SHUTTLE_DEPART
*/
/datum/event/supply_demand/proc/handle_supply_demand_sell_shuttle(datum/source, list/area/supply_shuttle_areas)
SIGNAL_HANDLER
for(var/datum/event/supply_demand/E in running_demand_events)
// I don't think multiple supply shuttles have ever been used, but retaining support regardless...
for(var/area/sub_area in supply_shuttle_areas)
E.handle_sold_shuttle(sub_area)
/**
* Event Handler for responding to the supply shuttle arriving at centcom.
*/

View File

@@ -18,7 +18,7 @@
/datum/event/wallrot/announce()
if(center)
command_announcement.Announce("Harmful fungi detected on \the [station_name()]. Hull integrity near [center.loc.name] may be compromised.", "Hazardous Biomass")
command_announcement.Announce("Harmful fungi detected on \the [station_name()]. Hull integrity near [center.loc.name] may be compromised.", "Hazardous Biomass") //CHOMPEdit - Wording
// Chomp edit - Better wording as to what the hell it actually does.
/datum/event/wallrot/start()

View File

@@ -6,4 +6,4 @@
wormhole_event()
/datum/event/wormholes/end()
command_announcement.Announce("There are no more space-time anomalies detected on the station.", "Anomaly Alert")
command_announcement.Announce("There are no more space-time anomalies detected on the [using_map.facility_type].", "Anomaly Alert")

View File

@@ -1,11 +1,5 @@
GLOBAL_LIST_EMPTY(prevent_respawns)
/hook/death/proc/quit_notify(mob/dead)
if(ishuman(dead))
to_chat(dead,span_notice("You're dead! If you don't intend to continue playing this round as this character, please use the <b>Quit This Round</b> verb in the OOC tab to free your job slot. Otherwise, you can use the <b>Notify Transcore</b> verb to let medical know you need resleeving, or <b>Find Auto Resleever</b> verb to be taken to an auto resleever, which you can click on to be resleeved automatically after a time."))
return TRUE
/mob/observer/dead/verb/cleanup()
set name = "Quit This Round"
set category = "OOC.Game"

View File

@@ -72,6 +72,8 @@
if(stat == DEAD)
return 0
SEND_SIGNAL(src, COMSIG_MOB_DEATH, gibbed)
SEND_GLOBAL_SIGNAL(COMSIG_GLOB_MOB_DEATH, src, gibbed)
if(src.loc && istype(loc,/obj/belly) || istype(loc,/obj/item/dogborg/sleeper) || istype(loc, /obj/item/clothing/shoes)) deathmessage = "no message" //VOREStation Add - Prevents death messages from inside mobs - CHOMPEdit: Added in-shoe as well
//CHOMPAdd Start - Muffle original body death on Mob TF death
if(src.loc && isliving(loc))

View File

@@ -79,11 +79,22 @@
remove_verb(src, /mob/living/carbon/proc/release_control)
callHook("death", list(src, gibbed))
// Handle vorny
if(isbelly(loc))
//Were they digesting and we have a mind you can update?
//Technically allows metagaming by allowing buddies to turn on digestion for like 2 seconds
// to finish off critically wounded friends to avoid resleeving sickness, but like
// *kill those people* ok?
var/obj/belly/in_belly = loc
if(in_belly.digest_mode == DM_DIGEST || in_belly.digest_mode == DM_SELECT)
mind?.vore_death = TRUE
soulcatcher_on_mob_death()
if(istype(loc, /obj/item/clothing/shoes))
mind?.vore_death = TRUE
// Let them know we died!
to_chat(src, span_notice("You're dead! If you don't intend to continue playing this round as this character, please use the <b>Quit This Round</b> verb in the OOC tab to free your job slot. Otherwise, you can use the <b>Notify Transcore</b> verb to let medical know you need resleeving, or <b>Find Auto Resleever</b> verb to be taken to an auto resleever, which you can click on to be resleeved automatically after a time."))
if(mind)
var/area/A = get_area(src)
if(!(A?.flag_check(AREA_BLOCK_SUIT_SENSORS)) && isbelly(loc))

View File

@@ -12,25 +12,6 @@
. = ..()
//Surprisingly this is only called for humans, but whatever!
/hook/death/proc/digestion_check(var/mob/living/carbon/human/H, var/gibbed)
//Not in a belly? Well, too bad!
if(!isbelly(H.loc))
return TRUE
//What belly!
var/obj/belly/B = H.loc
//Were they digesting and we have a mind you can update?
//Technically allows metagaming by allowing buddies to turn on digestion for like 2 seconds
// to finish off critically wounded friends to avoid resleeving sickness, but like
// *kill those people* ok?
if(B.digest_mode == DM_DIGEST || B.digest_mode == DM_SELECT)
H.mind?.vore_death = TRUE
//Hooks need to return true otherwise they're considered having failed
return TRUE
//For making sure that if a mob is able to be joined by ghosts, that ghosts can't join it if it dies
/mob/living/simple_mob/death()
..()

View File

@@ -1,15 +1,5 @@
GLOBAL_LIST_EMPTY(empty_playable_ai_cores)
/hook/roundstart/proc/spawn_empty_ai()
for(var/obj/effect/landmark/start/S in GLOB.landmarks_list)
if(S.name != JOB_AI)
continue
if(locate(/mob/living) in S.loc)
continue
GLOB.empty_playable_ai_cores += new /obj/structure/AIcore/deactivated(get_turf(S))
return 1
/mob/living/silicon/ai/verb/store_core()
set name = "Store Core"
set category = "OOC.Game"

View File

@@ -177,12 +177,6 @@
//INCOMPLETE and not ready, no sprites other than tall and basically useless, also lacking a belly
//Add ourselves to the borg list
/hook/startup/proc/Modular_Borg_init_standardhound()
//robot_modules["Honk-Hound"] = /obj/item/robot_module/robot/clerical/honkborg - done in station_vr modular chomp for ordering reasons
robot_module_types += "Standard-Hound" //Add ourselves to global
return 1
/obj/item/robot_module/robot/standard/hound
name = "Standard-Hound"
sprites = list(

View File

@@ -3,19 +3,6 @@
// code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm //tag so it shows up in gitsearch
/*
What Borgs are available is sadly handled in the above file in the proc
/hook/startup/proc/robot_modules_vr()
robot_modules["Medihound"] = /obj/item/robot_module/robot/medihound
robot_modules["K9"] = /obj/item/robot_module/robot/knine
robot_modules["ERT"] = /obj/item/robot_module/robot/ert
robot_modules["Janihound"] = /obj/item/robot_module/robot/scrubpup
robot_modules["Sci-borg"] = /obj/item/robot_module/robot/science
robot_modules["Pupdozer"] = /obj/item/robot_module/robot/engiedog
return 1
*/
/obj/item/robot_module/robot/booze
name = "BoozeHound robot module"
channels = list("Service" = 1)

View File

@@ -1,9 +1,3 @@
/* //Uncomment the exploration modules in code\global.dm
/hook/startup/proc/Modular_Borg_init_Exploration()
robot_modules["Exploration"] = /obj/item/robot_module/robot/exploration //add to array
robot_module_types += "Exploration" //Add to global list
return 1
*/
//Explo doggos
/obj/item/robot_module/robot/exploration
name = "exploration robot module"

View File

@@ -75,6 +75,7 @@
zone_sel = null
/mob/Initialize(mapload)
SEND_GLOBAL_SIGNAL(COMSIG_GLOB_MOB_CREATED, src)
GLOB.mob_list += src
if(stat == DEAD)
GLOB.dead_mob_list += src

View File

@@ -189,7 +189,7 @@
O.fuzzy = B.fuzzy
O.custom_speech_bubble = B.custom_speech_bubble
callHook("borgify", list(O))
SEND_GLOBAL_SIGNAL(COMSIG_GLOB_BORGIFY, O)
spawn(0) // Mobs still instantly del themselves, thus we need to spawn or O will never be returned
qdel(src)

View File

@@ -491,39 +491,41 @@
///////////////////
//The catching hook
/hook/death/proc/nif_soulcatcher(var/mob/living/L)
if(!istype(L) || !L.mind) return TRUE //Hooks must return TRUE
/mob/living/proc/soulcatcher_on_mob_death()
if(!mind)
return
if(isbelly(L.loc)) //Died in someone
var/obj/belly/B = L.loc
if(isbelly(loc)) //Died in someone
var/obj/belly/B = loc
var/mob/living/owner = B.owner
var/obj/soulgem/gem = owner.soulgem
if(gem && gem.flag_check(SOULGEM_ACTIVE | NIF_SC_CATCHING_OTHERS, TRUE))
var/to_use_custom_name = null
if(isanimal(L))
to_use_custom_name = L.name
gem.catch_mob(L, to_use_custom_name)
return TRUE
if(isanimal(src))
to_use_custom_name = name
gem.catch_mob(src, to_use_custom_name)
return
var/mob/living/carbon/human/HP = B.owner
var/mob/living/carbon/human/H = L
if(!istype(H)) return TRUE
var/mob/living/carbon/human/H = src
if(!istype(H))
return
if(istype(HP) && HP.nif && HP.nif.flag_check(NIF_O_SCOTHERS,NIF_FLAGS_OTHER))
var/datum/nifsoft/soulcatcher/SC = HP.nif.imp_check(NIF_SOULCATCHER)
SC.catch_mob(H)
else
var/obj/soulgem/gem = L.soulgem
var/obj/soulgem/gem = soulgem
if(gem && gem.flag_check(SOULGEM_ACTIVE | NIF_SC_CATCHING_ME, TRUE))
var/to_use_custom_name = null
if(isanimal(L))
to_use_custom_name = L.name
gem.catch_mob(L, to_use_custom_name)
return TRUE
var/mob/living/carbon/human/H = L
if(!istype(H)) return TRUE
if(isanimal(src))
to_use_custom_name = name
gem.catch_mob(src, to_use_custom_name)
return
var/mob/living/carbon/human/H = src
if(!istype(H))
return
if(H.nif && H.nif.flag_check(NIF_O_SCMYSELF,NIF_FLAGS_OTHER)) //They are caught in their own NIF
var/datum/nifsoft/soulcatcher/SC = H.nif.imp_check(NIF_SOULCATCHER)
SC.catch_mob(H)
return TRUE
///////////////////
//Verbs for humans

View File

@@ -125,7 +125,7 @@ GLOBAL_LIST_BOILERPLATE(all_brain_organs, /obj/item/organ/internal/brain)
brainmob.languages = H.languages
to_chat(brainmob, span_notice("You feel slightly disoriented. That's normal when you're just \a [initial(src.name)]."))
callHook("debrain", list(brainmob))
SEND_GLOBAL_SIGNAL(COMSIG_GLOB_BRAIN_REMOVED, brainmob)
/obj/item/organ/internal/brain/examine(mob/user) // -- TLE
. = ..()

View File

@@ -308,12 +308,6 @@ GLOBAL_LIST_EMPTY(solars_list)
connected_tracker.set_angle(SSsun.sun.angle)
set_panels(cdir)
// This would use LateInitialize(), however the powernet does not appear to exist during that time.
/hook/roundstart/proc/auto_start_solars()
for(var/obj/machinery/power/solar_control/SC as anything in GLOB.solars_list)
SC.auto_start()
return TRUE
/obj/machinery/power/solar_control/proc/add_panel(var/obj/machinery/power/solar/P)
var/sgen = P.get_power_supplied()
connected_power -= connected_panels[P] // Just in case it was already in there

View File

@@ -202,6 +202,7 @@ GLOBAL_LIST_EMPTY(active_autoresleevers)
new_character.default_language = def_lang
SEND_SIGNAL(new_character, COMSIG_HUMAN_DNA_FINALIZED)
SEND_GLOBAL_SIGNAL(COMSIG_GLOB_RESLEEVED_MIND, new_character, new_character.mind)
//If desired, apply equipment.
if(equip_body)

View File

@@ -480,6 +480,8 @@
if(new_imp.handle_implant(occupant, BP_HEAD))
new_imp.post_implant(occupant)
SEND_GLOBAL_SIGNAL(COMSIG_GLOB_RESLEEVED_MIND, occupant, MR.mind_ref)
//Inform them and make them a little dizzy.
if(confuse_amount + blur_amount <= 16)
to_chat(occupant, span_notice("You feel a small pain in your head as you're given a new backup implant. Your new body feels comfortable already, however."))

View File

@@ -155,13 +155,6 @@
/obj/machinery/computer/shuttle_control/emp_act()
return
GLOBAL_LIST_BOILERPLATE(papers_dockingcode, /obj/item/paper/dockingcodes)
/hook/roundstart/proc/populate_dockingcodes()
for(var/obj/item/paper/dockingcodes/dcp as anything in GLOB.papers_dockingcode)
dcp.populate_info()
return TRUE
/obj/item/paper/dockingcodes
name = "Docking Codes"
var/codes_from_z = null //So you can put codes from the station other places to give to antags or whatever

View File

@@ -29,11 +29,6 @@
// if(Sp_HOLDVAR)
// statpanel(S.panel,"[S.holder_var_type] [S.holder_var_amount]",S.connected_button)
/hook/clone/proc/restore_spells(var/mob/H)
if(H.mind && H.mind.learned_spells)
for(var/spell/spell_to_add in H.mind.learned_spells)
H.add_spell(spell_to_add)
/mob/proc/add_spell(var/spell/spell_to_add, var/spell_base = "wiz_spell_ready", var/master_type = /atom/movable/screen/movable/spell_master)
if(!spell_masters)
spell_masters = list()
@@ -43,6 +38,10 @@
if(spell_master.type == master_type)
spell_list.Add(spell_to_add)
spell_master.add_spell(spell_to_add)
if(mind)
if(!mind.learned_spells)
mind.learned_spells = list()
mind.learned_spells += spell_to_add
return 1
var/atom/movable/screen/movable/spell_master/new_spell_master = new master_type //we're here because either we didn't find our type, or we have no spell masters to attach to

View File

@@ -173,7 +173,7 @@
if(computer && program.can_run(ui.user, 1))
id_card.assignment = "Dismissed" //VOREStation Edit: setting adjustment
id_card.access = list()
callHook("terminate_employee", list(id_card))
SEND_GLOBAL_SIGNAL(COMSIG_GLOB_TERMINATE_EMPLOYEE_IDCARD, id_card)
. = TRUE
if("reg")
if(computer && program.can_run(ui.user, 1))
@@ -217,7 +217,7 @@
id_card.assignment = t1
id_card.rank = t1
callHook("reassign_employee", list(id_card))
SEND_GLOBAL_SIGNAL(COMSIG_GLOB_REASSIGN_EMPLOYEE_IDCARD, id_card)
. = TRUE
if("access")
if(computer && program.can_run(ui.user, 1))

View File

@@ -85,6 +85,7 @@ var/list/all_maps = list()
var/station_name = "BAD Station"
var/station_short = "Baddy"
var/facility_type = "facility"
var/dock_name = "THE PirateBay"
var/dock_type = "station" //VOREStation Edit - for a list of valid types see the switch block in air_traffic.dm at line 148
var/boss_name = "Captain Roger"

View File

@@ -16,6 +16,7 @@
station_name = "NSS Cetus"
station_short = "Cetus Station"
facility_type = "station"
dock_name = "NCS Northern Star"
boss_name = "Central Command"
boss_short = "Centcom"

View File

@@ -17,6 +17,7 @@
station_name = "NLS Soluna Nexus"
station_short = "Soluna Nexus"
facility_type = "station"
dock_name = "NCS Northern Star" // Now we're the centcom!
boss_name = "Central Command"
boss_short = "Centcom"

View File

@@ -18,6 +18,7 @@
station_name = "NLS Southern Cross"
station_short = "Southern Cross"
facility_type = "station"
dock_name = "NCS Northern Star" // Now we're the centcom!
boss_name = "Central Command"
boss_short = "Centcom"

View File

@@ -84,6 +84,7 @@ var/list/all_maps = list()
var/station_name = "BAD Station"
var/station_short = "Baddy"
var/facility_type = "station" //CHOMPEdit - Default to station instead of "facility"
var/dock_name = "THE PirateBay"
var/dock_type = "station" //VOREStation Edit - for a list of valid types see the switch block in air_traffic.dm at line 148
var/boss_name = "Captain Roger"