Skip to content

Commit 4aa2915

Browse files
authored
Aetherening (#1121)
* base impl * particles! * slight particle adjustments * particle tweak * improve rune code a bit * exchange rune * organ bug fixes * target must be lying down * exchange rune failures * heal rune * job name swap * tome + reorganize * spells early * fixes * fixes * cleanup * empyrean * pagers * more pager stuff * hard del smiles * using a syringe leaves trace dna * dirty syringes * merge master * add overlay, inject one person at a time * forensic analysis of syringes * syringe box change * words * ranged aether runes * add adenosine to autoinjectors * small tweak to debughealth * autoinjector changes * rename medbay to ward * flavah (and adjusts sprinting cost to account for slower speed) * FIX WARDROBE AND INVENTORY CODE * probably better * this is kind of fucked up * reduce odds * sterilize syringes with a welding tool * liver death gives the concussed effect * fix runtime * this bugs me * not yet * impliment revival rune and unit test it * fixes * exchange rune * whoops, include file * bruh * i forgot * rewrite heal, add unit test * properly clear reagents * impliment bimmer's runes * rename to sigil * update * round organ damage * revival rune heals organs * reduce max pain slowdown * aetherite trait * aether dream framework * dreams * augur reflavor + minor fix * acolyte reflavor * aether language * screenshot tests * make pushable * finalize(?)
1 parent 01c9eb6 commit 4aa2915

File tree

125 files changed

+2251
-417
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

125 files changed

+2251
-417
lines changed

_maps/map_files/Theseus/Theseus.dmm

+3-3
Original file line numberDiff line numberDiff line change
@@ -18108,9 +18108,6 @@
1810818108
/turf/open/floor/plating,
1810918109
/area/station/medical/virology)
1811018110
"gHq" = (
18111-
/obj/machinery/modular_computer/console/preset/command{
18112-
dir = 8
18113-
},
1811418111
/obj/structure/disposalpipe/segment{
1811518112
dir = 4
1811618113
},
@@ -18120,6 +18117,9 @@
1812018117
/obj/structure/cable/yellow{
1812118118
icon_state = "9"
1812218119
},
18120+
/obj/machinery/computer/pager/aether{
18121+
dir = 8
18122+
},
1812318123
/turf/open/floor/carpet/blue,
1812418124
/area/station/command/heads_quarters/cmo)
1812518125
"gHx" = (

code/__DEFINES/aether_runes.dm

+44
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
// Generic BB keys
2+
#define RUNE_BB_INVOKER "user"
3+
#define RUNE_BB_TOME "tome"
4+
#define RUNE_BB_CANCEL_REASON "cancel_reason"
5+
#define RUNE_BB_CANCEL_SOURCE "cancel_source"
6+
#define RUNE_BB_TARGET_MOB "target_mob"
7+
/// The reagent container containing the blood required.
8+
#define RUNE_BB_BLOOD_CONTAINER "revival_blood_container"
9+
10+
// Exchange rune
11+
/// The list of parts to exchange for the exchange rune.
12+
#define RUNE_BB_EXCHANGE_PARTS "exchange_parts"
13+
14+
// Revival rune
15+
/// The heart used.
16+
#define RUNE_BB_REVIVAL_HEART "revival_heart"
17+
/// The reagent container containing Woundseal used.
18+
#define RUNE_BB_REVIVAL_WOUNDSEAL_CONTAINER "revival_woundseal_container"
19+
20+
// Heal rune
21+
/// List of reagents containers containing tinctures.
22+
#define RUNE_BB_HEAL_REAGENT_CONTAINERS "heal_reagent_containers"
23+
24+
/// Graceful fails should have NO SIDE EFFECTS.
25+
#define RUNE_FAIL_GRACEFUL "graceful_fail"
26+
27+
// ~& Global failure states, handle these always! &~//
28+
#define RUNE_FAIL_INVOKER_INCAP "invoker_incap"
29+
/// Helper removed their hand from the rune.
30+
#define RUNE_FAIL_HELPER_REMOVED_HAND "helper_incap"
31+
/// Target mob moved off the center.
32+
#define RUNE_FAIL_TARGET_MOB_MOVED "target_mob_moved"
33+
/// Target stood up.
34+
#define RUNE_FAIL_TARGET_STOOD_UP "target_stood_up"
35+
#define RUNE_FAIL_TOME_GONE "tome_gone"
36+
/// An item has moved out of the rune.
37+
#define RUNE_FAIL_TARGET_ITEM_OUT_OF_RUNE "item_out_of_rune"
38+
39+
/// Special failure condition where the revival target was revived mid ritual.
40+
#define RUNE_FAIL_REVIVAL_TARGET_ALIVE "revival_target_alive"
41+
42+
#define RUNE_INVOKING_PENDING_CANCEL -1
43+
#define RUNE_INVOKING_IDLE 0
44+
#define RUNE_INVOKING_ACTIVE 1

code/__DEFINES/dream.dm

+8-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
1-
/// Dream is generic, and rollable by anyone.
2-
#define DREAM_GENERIC (1<<0)
31
/// Dream can only be dreampt once per round per mind.
4-
#define DREAM_ONCE_PER_ROUND (1<<1)
2+
#define DREAM_ONCE_PER_ROUND (1<<0)
53
/// Dream is considered complete even if cut short.
6-
#define DREAM_CUT_SHORT_IS_COMPLETE (1<<2)
4+
#define DREAM_CUT_SHORT_IS_COMPLETE (1<<1)
5+
6+
/// Rollable by anyone
7+
#define DREAM_CLASS_GENERIC "generic_dream"
8+
#define DREAM_CLASS_DETECTIVE "detective_dream"
9+
#define DREAM_CLASS_AETHERITE "aether_dream"
10+
#define DREAM_CLASS_VAMPIRE "vampire_dream"

code/__DEFINES/economy.dm

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
#define ACCOUNT_ENG "ENG"
2222
#define ACCOUNT_ENG_NAME "Daedalus Industries Funds"
2323
#define ACCOUNT_MED "MED"
24-
#define ACCOUNT_MED_NAME "Aether Pharmaceuticals Funds"
24+
#define ACCOUNT_MED_NAME "Aether Association Funds"
2525
#define ACCOUNT_SRV "SRV"
2626
#define ACCOUNT_CAR "CAR"
2727
#define ACCOUNT_CAR_NAME "Hermes Galactic Freight Funds"

code/__DEFINES/jobs.dm

+3-3
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,8 @@
5252
#define JOB_STATION_ENGINEER "Station Engineer"
5353
#define JOB_ATMOSPHERIC_TECHNICIAN "Atmospheric Technician"
5454
//Medical
55-
#define JOB_MEDICAL_DIRECTOR "Medical Director"
56-
#define JOB_MEDICAL_DOCTOR "General Practitioner"
55+
#define JOB_AUGUR "Augur"
56+
#define JOB_ACOLYTE "Acolyte"
5757
#define JOB_PARAMEDIC "Paramedic"
5858
#define JOB_CHEMIST "Chemist"
5959
#define JOB_VIROLOGIST "Virologist"
@@ -109,7 +109,7 @@
109109
#define DEPARTMENT_BITFLAG_SCIENCE (1<<5)
110110
#define DEPARTMENT_SCIENCE "Science"
111111
#define DEPARTMENT_BITFLAG_MEDICAL (1<<6)
112-
#define DEPARTMENT_MEDICAL "Aether Pharmaceuticals"
112+
#define DEPARTMENT_MEDICAL "Aether Association"
113113
#define DEPARTMENT_BITFLAG_SILICON (1<<7)
114114
#define DEPARTMENT_SILICON "Silicon"
115115
#define DEPARTMENT_BITFLAG_ASSISTANT (1<<8)

code/__DEFINES/magic.dm

+2
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
#define SCHOOL_NECROMANCY "necromancy"
2727
/// Other forbidden magics, such as heretic spells
2828
#define SCHOOL_FORBIDDEN "forbidden"
29+
/// Blood magic
30+
#define SCHOOL_BLOOD "blood"
2931

3032
// Invocation types - what does the wizard need to do to invoke (cast) the spell?
3133
/// Allows being able to cast the spell without saying or doing anything.

code/__DEFINES/packetnet.dm

+6
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,12 @@
3838
/// Network Class of a device, used as part of ping replies.
3939
#define PACKET_NETCLASS "netclass"
4040

41+
// Pagers
42+
/// Packet arg for pager types
43+
#define PACKET_ARG_PAGER_CLASS "pager_class"
44+
/// Packet arg for the message sent
45+
#define PACKET_ARG_PAGER_MESSAGE "pager_message"
46+
4147
// Special addresses
4248
#define NET_ADDRESS_PING "ping"
4349

code/__DEFINES/pager_defines.dm

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
#define PAGER_CLASS_AETHER "aetherpager"
2+
#define PAGER_CLASS_MARS "marspager"
3+
#define PAGER_CLASS_MANAGEMENT "managementpager"

code/__DEFINES/pain.dm

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424

2525
/// The amount of pain where movement slowdown beings
2626
#define PAIN_AMT_BEGIN_SLOWDOWN (PAIN_AMT_PASSOUT * 0.075)
27-
#define PAIN_MAX_SLOWDOWN 5
27+
#define PAIN_MAX_SLOWDOWN 3
2828

2929
#define PAIN_AMT_LOW (PAIN_AMT_PASSOUT * 0.05)
3030
#define PAIN_AMT_MEDIUM (PAIN_AMT_PASSOUT * 0.35)

code/__DEFINES/radio.dm

+1
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@
107107
#define RADIO_AIRLOCK "airlock"
108108
#define RADIO_MAGNETS "magnets"
109109
#define RADIO_PDAMESSAGE "pdamessage"
110+
#define RADIO_PAGER_MESSAGE "pager_message"
110111

111112
#define DEFAULT_SIGNALER_CODE 30
112113

code/__DEFINES/stamina.dm

+1-1
Original file line numberDiff line numberDiff line change
@@ -70,4 +70,4 @@
7070
///The amount of stamina required to sprint
7171
#define STAMINA_MIN2SPRINT_MODIFER 0.4 //Same as exhaustion threshold
7272
///How much stamina is taken per tile while sprinting
73-
#define STAMINA_SPRINT_COST 4
73+
#define STAMINA_SPRINT_COST 8

code/__DEFINES/status_effects.dm

+4
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,11 @@
4343

4444
#define STASIS_DEBUG_HEALTH "stasis_debug_health"
4545

46+
/// Head fracture
4647
#define BROKEN_SKULL_EFFECT "broken_head"
48+
/// Missing or dead liver.
49+
#define DEAD_LIVER_EFFECT "dead_liver"
50+
4751
#define VAMPIRE_EFFECT "vampire_effect"
4852

4953
// Status effect application helpers.

code/__DEFINES/traits.dm

+6-1
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,9 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
270270
/// Stops all slipping and sliding from ocurring
271271
#define TRAIT_NO_SLIP_ALL "noslip_all"
272272

273+
/// Invoking a Miracle rune
274+
#define TRAIT_INVOKING_MIRACLE "invokingmiracle"
275+
273276
#define TRAIT_NODEATH "nodeath"
274277
#define TRAIT_NOHARDCRIT "nohardcrit"
275278
#define TRAIT_NOSOFTCRIT "nosoftcrit"
@@ -470,6 +473,9 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
470473
/// Maybe worth generalizing into a general "is sneaky" / "is stealth" trait in the future.
471474
#define TRAIT_ALIEN_SNEAK "sneaking_alien"
472475

476+
/// Smoke temporarily cannot affect this mob.
477+
#define TRAIT_AFFECTED_BY_SMOKE_RECENTLY "affected_by_smoke_recently"
478+
473479
// METABOLISMS
474480
// Various jobs on the station have historically had better reactions
475481
// to various drinks and foodstuffs. Security liking donuts is a classic
@@ -507,7 +513,6 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
507513
#define TRAIT_LIGHTBULB_REMOVER "lightbulb_remover"
508514
#define TRAIT_KNOW_CYBORG_WIRES "know_cyborg_wires"
509515
#define TRAIT_KNOW_ENGI_WIRES "know_engi_wires"
510-
#define TRAIT_ENTRAILS_READER "entrails_reader"
511516
/// this skillchip trait lets you wash brains in washing machines to heal them
512517
#define TRAIT_BRAINWASHING "brainwashing"
513518

code/__DEFINES/traits_job.dm

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
/// A trait given to Aether members on job spawn.
2+
#define TRAIT_AETHERITE "aetherite"

code/__HELPERS/global_lists.dm

-2
Original file line numberDiff line numberDiff line change
@@ -111,8 +111,6 @@
111111

112112
init_employers()
113113

114-
init_dreams()
115-
116114
/// Inits the crafting recipe list, sorting crafting recipe requirements in the process.
117115
/proc/init_crafting_recipes(list/crafting_recipes)
118116
for(var/path in subtypesof(/datum/crafting_recipe))

code/controllers/subsystem/id_access.dm

+1-1
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ SUBSYSTEM_DEF(id_access)
172172
),
173173
"[ACCESS_CMO]" = list(
174174
"regions" = list(REGION_MEDBAY),
175-
"head" = JOB_MEDICAL_DIRECTOR,
175+
"head" = JOB_AUGUR,
176176
"templates" = list(),
177177
"pdas" = list(),
178178
),

code/controllers/subsystem/job.dm

+1-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ SUBSYSTEM_DEF(job)
4747
JOB_CAPTAIN = 1,
4848
JOB_HEAD_OF_PERSONNEL = 2,
4949
JOB_CHIEF_ENGINEER = 3,
50-
JOB_MEDICAL_DIRECTOR = 4,
50+
JOB_AUGUR = 4,
5151
JOB_SECURITY_MARSHAL = 5,
5252
JOB_QUARTERMASTER = 6,
5353
)

code/controllers/subsystem/tgui.dm

+13
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,19 @@ SUBSYSTEM_DEF(tgui)
181181
return ui
182182
return null
183183

184+
/**
185+
* public
186+
*
187+
* Get a open UI given a user and src_object.
188+
*
189+
* required src_object datum The object/datum which owns the UIs.
190+
*
191+
* return list of datum/tguis belonging to src_object
192+
*/
193+
/datum/controller/subsystem/tgui/proc/get_open_uis(datum/src_object)
194+
var/key = "[REF(src_object)]"
195+
return open_uis_by_src[key]
196+
184197
/**
185198
* public
186199
*

code/controllers/subsystem/wardrobe.dm

+14
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,13 @@ SUBSYSTEM_DEF(wardrobe)
5656
stock_hit = 0
5757
stock_miss = 0
5858

59+
/// Returns TRUE if the atom is already stashed inside the wardrobe.
60+
/datum/controller/subsystem/wardrobe/proc/contains_object(atom/test_for)
61+
var/list/stock_info = preloaded_stock[test_for.type]
62+
if(stock_info)
63+
return test_for in stock_info[WARDROBE_STOCK_CONTENTS]
64+
return FALSE
65+
5966
/// Resets the load queue to the master template, accounting for the existing stock
6067
/datum/controller/subsystem/wardrobe/proc/hard_refresh_queue()
6168
for(var/datum/type_to_queue as anything in canon_minimum)
@@ -217,6 +224,12 @@ SUBSYSTEM_DEF(wardrobe)
217224
/datum/controller/subsystem/wardrobe/proc/stash_object(atom/movable/object)
218225
var/object_type = object.type
219226
var/list/master_info = canon_minimum[object_type]
227+
228+
#ifdef UNIT_TESTS
229+
if(contains_object(object))
230+
CRASH("Tried to stash an atom we already have.")
231+
#endif
232+
220233
// I will not permit objects you didn't reserve ahead of time
221234
if(!master_info)
222235
qdel(object)
@@ -232,6 +245,7 @@ SUBSYSTEM_DEF(wardrobe)
232245
if(amount_held - stock_target >= overflow_lienency)
233246
qdel(object)
234247
return
248+
235249
// Fuck off
236250
if(QDELETED(object))
237251
stack_trace("We tried to stash a qdeleted object, what did you do")

code/datums/forensics.dm

+5
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,11 @@
278278
LAZYNULL(fibers)
279279
return TRUE
280280

281+
/// Clear the trace DNA list
282+
/datum/forensics/proc/wipe_trace_DNA()
283+
LAZYNULL(trace_DNA)
284+
return TRUE
285+
281286
/// Clear the gunshot residue list.
282287
/datum/forensics/proc/wipe_gunshot_residue()
283288
LAZYNULL(gunshot_residue)

code/datums/id_trim/jobs.dm

+9-7
Original file line numberDiff line numberDiff line change
@@ -193,19 +193,21 @@
193193
job = /datum/job/chief_engineer
194194

195195
/datum/id_trim/job/chief_medical_officer
196-
assignment = "Medical Director"
196+
assignment = JOB_AUGUR
197197
intern_alt_name = "Medical Director-in-Training"
198198
trim_state = "trim_chiefmedicalofficer"
199199
sechud_icon_state = SECHUD_CHIEF_MEDICAL_OFFICER
200200
extra_access = list(ACCESS_TELEPORTER)
201201
extra_wildcard_access = list()
202-
minimal_access = list(ACCESS_CHEMISTRY, ACCESS_EVA, ACCESS_KEYCARD_AUTH, ACCESS_MAINT_TUNNELS, ACCESS_MECH_MEDICAL,
203-
ACCESS_MEDICAL, ACCESS_MINERAL_STOREROOM, ACCESS_MORGUE, ACCESS_PHARMACY, ACCESS_PSYCHOLOGY, ACCESS_RC_ANNOUNCE,
204-
ACCESS_BRIG_ENTRANCE, ACCESS_SURGERY, ACCESS_VIROLOGY, ACCESS_ROBOTICS)
202+
minimal_access = list(
203+
ACCESS_CHEMISTRY, ACCESS_EVA, ACCESS_KEYCARD_AUTH, ACCESS_MAINT_TUNNELS, ACCESS_MECH_MEDICAL,
204+
ACCESS_MEDICAL, ACCESS_MINERAL_STOREROOM, ACCESS_MORGUE, ACCESS_PHARMACY, ACCESS_PSYCHOLOGY, ACCESS_RC_ANNOUNCE,
205+
ACCESS_BRIG_ENTRANCE, ACCESS_SURGERY, ACCESS_VIROLOGY, ACCESS_ROBOTICS
206+
)
205207
minimal_wildcard_access = list(ACCESS_CMO)
206208
config_job = "chief_medical_officer"
207209
template_access = list(ACCESS_CAPTAIN, ACCESS_CHANGE_IDS)
208-
job = /datum/job/chief_medical_officer
210+
job = /datum/job/augur
209211

210212
/datum/id_trim/job/clown
211213
assignment = "Clown"
@@ -332,14 +334,14 @@
332334
job = /datum/job/lawyer
333335

334336
/datum/id_trim/job/medical_doctor
335-
assignment = JOB_MEDICAL_DOCTOR
337+
assignment = JOB_ACOLYTE
336338
trim_state = "trim_medicaldoctor"
337339
sechud_icon_state = SECHUD_MEDICAL_DOCTOR
338340
extra_access = list(ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_ROBOTICS)
339341
minimal_access = list(ACCESS_MECH_MEDICAL, ACCESS_MEDICAL, ACCESS_MINERAL_STOREROOM, ACCESS_MORGUE, ACCESS_PHARMACY, ACCESS_SURGERY)
340342
config_job = "medical_doctor"
341343
template_access = list(ACCESS_CAPTAIN, ACCESS_CMO, ACCESS_CHANGE_IDS)
342-
job = /datum/job/doctor
344+
job = /datum/job/acolyte
343345

344346
/datum/id_trim/job/mime
345347
assignment = JOB_CLOWN

code/datums/outfit.dm

+8
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,9 @@
116116
*/
117117
var/list/skillchips = null
118118

119+
/// List of languages to grant upon equipping.
120+
var/list/grant_languages
121+
119122
///Should we preload some of this job's items?
120123
var/preload = FALSE
121124

@@ -258,8 +261,10 @@
258261

259262
if(!visualsOnly)
260263
apply_fingerprints(H)
264+
261265
if(internals_slot)
262266
H.open_internals(H.get_item_by_slot(internals_slot))
267+
263268
if(implants)
264269
for(var/implant_type in implants)
265270
var/obj/item/implant/I = SSwardrobe.provide_type(implant_type, H)
@@ -279,6 +284,9 @@
279284
if(activate_msg)
280285
CRASH("Failed to activate [H]'s [skillchip_instance], on job [src]. Failure message: [activate_msg]")
281286

287+
if(LAZYLEN(grant_languages))
288+
for(var/language_path in grant_languages)
289+
H.grant_language(language_path)
282290

283291
H.update_body()
284292
return TRUE

0 commit comments

Comments
 (0)