From 8a577f43f6805c18d3bd65f619da2fcd604d552d Mon Sep 17 00:00:00 2001
From: SkyratBot <59378654+SkyratBot@users.noreply.github.com>
Date: Mon, 9 Oct 2023 20:14:46 +0200
Subject: [PATCH 001/100] Autopsy scanners fit in surgery trays [MDB IGNORE]
(#24226)
* Autopsy scanners fit in surgery trays (#78835)
## About The Pull Request
This enables surgery trays to hold autopsy scanners
Screenshot
![image](https://github.com/tgstation/tgstation/assets/86855173/2fb2930c-7875-417a-8a1e-03fd8b3aeb75)
(Scanner not included)
## Why It's Good For The Game
Since it is a tool used in a surgery's step, I feel it makes sense that
the autopsy tray (and surgery trays as a whole) should be able to hold
this item and it potentially means less switching between containers.
## Changelog
:cl:
qol: The autopsy tray (and surgery trays) can now hold the autopsy
scanner
/:cl:
* Autopsy scanners fit in surgery trays
---------
Co-authored-by: YehnBeep <86855173+YehnBeep@users.noreply.github.com>
---
code/datums/storage/subtypes/surgery_tray.dm | 1 +
code/game/objects/items/surgery_tray.dm | 1 +
2 files changed, 2 insertions(+)
diff --git a/code/datums/storage/subtypes/surgery_tray.dm b/code/datums/storage/subtypes/surgery_tray.dm
index 35886581318..42b369b4ce9 100644
--- a/code/datums/storage/subtypes/surgery_tray.dm
+++ b/code/datums/storage/subtypes/surgery_tray.dm
@@ -6,6 +6,7 @@
/datum/storage/surgery_tray/New()
. = ..()
set_holdable(list(
+ /obj/item/autopsy_scanner,
/obj/item/blood_filter,
/obj/item/bonesetter,
/obj/item/cautery,
diff --git a/code/game/objects/items/surgery_tray.dm b/code/game/objects/items/surgery_tray.dm
index 37494a39b55..edd92522446 100644
--- a/code/game/objects/items/surgery_tray.dm
+++ b/code/game/objects/items/surgery_tray.dm
@@ -6,6 +6,7 @@
/datum/storage/surgery_tray/New()
. = ..()
set_holdable(list(
+ /obj/item/autopsy_scanner,
/obj/item/blood_filter,
/obj/item/bonesetter,
/obj/item/cautery,
From aa8657df8c742af76c18040eb65226bc90ec466d Mon Sep 17 00:00:00 2001
From: Name
Date: Mon, 9 Oct 2023 14:27:48 -0400
Subject: [PATCH 002/100] Bitrunner Alt-titles + Others + QoL (#24083)
* Bitrunner + Coroner + Curator Alt Titles
* Junior Titles
* Bitrunner+Roboticist
* Bitrunner + Misc Jobs + Alt-title alphabetization
* It Changes
---
.../code/alt_job_titles.dm | 152 ++++++++++--------
1 file changed, 87 insertions(+), 65 deletions(-)
diff --git a/modular_skyrat/modules/alternative_job_titles/code/alt_job_titles.dm b/modular_skyrat/modules/alternative_job_titles/code/alt_job_titles.dm
index d7abb4e00f0..11de5521903 100644
--- a/modular_skyrat/modules/alternative_job_titles/code/alt_job_titles.dm
+++ b/modular_skyrat/modules/alternative_job_titles/code/alt_job_titles.dm
@@ -12,48 +12,60 @@
/datum/job/ai
alt_titles = list(
"AI",
+ "Automated Overseer",
"Station Intelligence",
- "Automated Overseer"
)
/datum/job/assistant
alt_titles = list(
"Assistant",
- "Civilian",
- "Tourist",
+ "Artist",
"Businessman",
"Businesswoman",
- "Trader",
+ "Civilian",
"Entertainer",
"Freelancer",
- "Artist",
- "Off-Duty Staff",
+ "Tourist",
+ "Trader",
"Off-Duty Crew",
+ "Off-Duty Staff",
)
/datum/job/atmospheric_technician
alt_titles = list(
"Atmospheric Technician",
- "Life Support Technician",
"Emergency Fire Technician",
"Firefighter",
+ "Life Support Technician",
)
/datum/job/barber
alt_titles = list(
"Barber",
+ "Aethestician",
+ "Colorist",
"Salon Manager",
"Salon Technician",
"Stylist",
- "Colorist",
)
/datum/job/bartender
alt_titles = list(
"Bartender",
- "Mixologist",
- "Barkeeper",
"Barista",
+ "Barkeeper",
+ "Mixologist",
+ )
+
+/datum/job/bitrunner
+ alt_titles = list(
+ "Bitrunner",
+ "Bitdomain Technician",
+ "Data Retrieval Specialist",
+ "Netdiver",
+ "Pod Jockey",
+ "Union Bitrunner",
+ "Junior Runner",
)
/datum/job/blueshield
@@ -66,11 +78,13 @@
/datum/job/botanist
alt_titles = list(
"Botanist",
- "Hydroponicist",
- "Gardener",
"Botanical Researcher",
- "Herbalist",
"Florist",
+ "Gardener",
+ "Herbalist",
+ "Hydroponicist",
+ "Mycologist",
+ "Junior Botanist",
)
/datum/job/bouncer
@@ -89,33 +103,35 @@
/datum/job/captain
alt_titles = list(
"Captain",
- "Station Commander",
"Commanding Officer",
"Site Manager",
+ "Station Commander",
)
/datum/job/cargo_technician
alt_titles = list(
"Warehouse Technician",
+ "Commodities Trader",
"Deck Worker",
+ "Inventory Associate",
"Mailman",
+ "Receiving Clerk",
"Union Associate",
- "Inventory Associate",
)
/datum/job/chaplain
alt_titles = list(
"Chaplain",
- "Priest",
- "Preacher",
- "Reverend",
- "Oracle",
- "Pontifex",
- "Magister",
"High Priest",
"Imam",
- "Rabbi",
+ "Magister",
"Monk",
+ "Oracle",
+ "Preacher",
+ "Priest",
+ "Pontifex",
+ "Rabbi",
+ "Reverend",
)
/datum/job/chemist
@@ -136,25 +152,25 @@
/datum/job/chief_medical_officer
alt_titles = list(
"Chief Medical Officer",
- "Medical Director",
- "Head of Medical",
"Chief Physician",
+ "Head of Medical",
"Head Physician",
+ "Medical Director",
)
/datum/job/clown
alt_titles = list(
"Clown",
+ "Comedian",
"Jester",
"Joker",
- "Comedian",
)
/datum/job/cook
alt_titles = list(
"Cook",
- "Chef",
"Butcher",
+ "Chef",
"Culinary Artist",
"Sous-Chef",
)
@@ -162,16 +178,19 @@
/datum/job/coroner
alt_titles = list(
"Coroner",
- "Mortician",
+ "Forensic Pathologist",
"Funeral Director",
+ "Medical Examiner",
+ "Mortician",
)
/datum/job/curator
alt_titles = list(
"Curator",
- "Librarian",
- "Journalist",
"Archivist",
+ "Conservator",
+ "Journalist",
+ "Librarian",
)
/datum/job/customs_agent
@@ -183,26 +202,27 @@
/datum/job/cyborg
alt_titles = list(
"Cyborg",
- "Robot",
"Android",
+ "Robot",
)
/datum/job/detective
alt_titles = list(
"Detective",
+ "Forensic Scientist",
"Forensic Technician",
"Private Investigator",
- "Forensic Scientist",
)
/datum/job/doctor
alt_titles = list(
"Medical Doctor",
- "Surgeon",
- "Nurse",
"General Practitioner",
"Medical Resident",
+ "Nurse",
"Physician",
+ "Surgeon",
+ "Medical Student",
)
/datum/job/engineering_guard //see orderly
@@ -210,58 +230,61 @@
/datum/job/geneticist
alt_titles = list(
"Geneticist",
+ "Gene Tailor",
"Mutation Researcher",
)
/datum/job/head_of_personnel
alt_titles = list(
"Head of Personnel",
- "Executive Officer",
- "Employment Officer",
"Crew Supervisor",
+ "Employment Officer",
+ "Executive Officer",
)
/datum/job/head_of_security
alt_titles = list(
"Head of Security",
- "Security Commander",
"Chief Constable",
"Chief of Security",
+ "Security Commander",
"Sheriff",
)
/datum/job/janitor
alt_titles = list(
"Janitor",
- "Custodian",
- "Custodial Technician",
- "Sanitation Technician",
- "Maintenance Technician",
"Concierge",
+ "Custodial Technician",
+ "Custodian",
"Maid",
+ "Maintenance Technician",
+ "Sanitation Technician",
)
/datum/job/lawyer
alt_titles = list(
"Lawyer",
- "Internal Affairs Agent",
- "Human Resources Agent",
- "Defence Attorney",
- "Public Defender",
"Barrister",
- "Prosecutor",
+ "Defense Attorney",
+ "Human Resources Agent",
+ "Internal Affairs Agent",
"Legal Clerk",
+ "Prosecutor",
+ "Public Defender",
)
/datum/job/mime
alt_titles = list(
"Mime",
+ "Mummer",
"Pantomimist",
)
/datum/job/nanotrasen_consultant
alt_titles = list(
"Nanotrasen Consultant",
+ "Nanotrasen Advisor",
"Nanotrasen Diplomat",
)
@@ -285,44 +308,42 @@
"Maximum Security Prisoner",
"SuperMax Security Prisoner",
"Protective Custody Prisoner",
- "Convict",
- "Felon",
- "Inmate",
)
/datum/job/psychologist
alt_titles = list(
"Psychologist",
+ "Counsellor",
"Psychiatrist",
"Therapist",
- "Counsellor",
)
/datum/job/quartermaster
alt_titles = list(
"Quartermaster",
- "Union Requisitions Officer",
"Deck Chief",
- "Warehouse Supervisor",
- "Supply Foreman",
"Head of Supply",
"Logistics Coordinator",
+ "Supply Foreman",
+ "Union Requisitions Officer",
+ "Warehouse Supervisor",
)
/datum/job/research_director
alt_titles = list(
"Research Director",
- "Silicon Administrator",
- "Lead Researcher",
"Biorobotics Director",
- "Research Supervisor",
"Chief Science Officer",
+ "Lead Researcher",
+ "Research Supervisor",
+ "Silicon Administrator",
)
/datum/job/roboticist
alt_titles = list(
"Roboticist",
"Biomechanical Engineer",
+ "Machinist",
"Mechatronic Engineer",
"Apprentice Roboticist",
)
@@ -332,24 +353,24 @@
/datum/job/scientist
alt_titles = list(
"Scientist",
+ "Anomalist",
"Circuitry Designer",
- "Xenobiologist",
"Cytologist",
- "Plasma Researcher",
- "Anomalist",
+ "Graduate Student",
"Lab Technician",
- "Theoretical Physicist",
"Ordnance Technician",
+ "Plasma Researcher",
+ "Theoretical Physicist",
"Xenoarchaeologist",
+ "Xenobiologist",
"Research Assistant",
- "Graduate Student",
)
/datum/job/security_officer
alt_titles = list(
"Security Officer",
- "Security Operative",
"Peacekeeper",
+ "Security Operative",
"Security Cadet",
)
@@ -357,26 +378,27 @@
alt_titles = list(
"Union Miner",
"Excavator",
- "Spelunker",
"Drill Technician",
"Prospector",
+ "Spelunker",
+ "Apprentice Miner",
)
/datum/job/station_engineer
alt_titles = list(
"Station Engineer",
- "Emergency Damage Control Technician",
"Electrician",
+ "Emergency Damage Control Technician",
"Engine Technician",
"EVA Technician",
"Mechanic",
"Apprentice Engineer",
- "Engineering Trainee",
)
/datum/job/virologist
alt_titles = list(
"Virologist",
+ "Epidemiologist",
"Pathologist",
"Junior Pathologist",
)
@@ -385,7 +407,7 @@
alt_titles = list(
"Warden",
"Brig Sergeant",
- "Dispatch Officer",
"Brig Governor",
+ "Dispatch Officer",
"Jailer",
)
From d22eb16cdcc7f95c3df192d9d7e68362ecef600c Mon Sep 17 00:00:00 2001
From: SkyratBot <59378654+SkyratBot@users.noreply.github.com>
Date: Mon, 9 Oct 2023 20:48:34 +0200
Subject: [PATCH 003/100] Fixes some EMP'd cyborg bodypart runtimes [MDB
IGNORE] (#24227)
* Fixes some EMP'd cyborg bodypart runtimes (#78849)
## About The Pull Request
Remember friends, bodypart don't always have owners.
Fixes some runtimes that occur if cyborg bodyparts were emp'd without an
owner.
## Changelog
:cl: Melbert
fix: Robotic bodyparts not attached to people are now properly affected
by EMPs.
/:cl:
* Fixes some EMP'd cyborg bodypart runtimes
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
---
code/modules/surgery/bodyparts/_bodyparts.dm | 19 +++++++++----------
.../surgery/bodyparts/robot_bodyparts.dm | 19 +++++++++++--------
2 files changed, 20 insertions(+), 18 deletions(-)
diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm
index 56e1493fc74..f033c081ead 100644
--- a/code/modules/surgery/bodyparts/_bodyparts.dm
+++ b/code/modules/surgery/bodyparts/_bodyparts.dm
@@ -1376,9 +1376,10 @@
else
update_icon_dropped()
+// Note: Does NOT return EMP protection value from parent call or pass it on to subtypes
/obj/item/bodypart/emp_act(severity)
- . = ..()
- if(. & EMP_PROTECT_WIRES || !IS_ROBOTIC_LIMB(src))
+ var/protection = ..()
+ if((protection & EMP_PROTECT_WIRES) || !IS_ROBOTIC_LIMB(src))
return FALSE
// with defines at the time of writing, this is 2 brute and 1.5 burn
@@ -1395,16 +1396,14 @@
burn_damage *= 1.3 // SKYRAT EDIT : Balance - Lowers total damage from ~104 Burn to ~24
receive_damage(brute_damage, burn_damage)
- do_sparks(number = 1, cardinal_only = FALSE, source = owner)
- var/damage_percent_to_max = (get_damage() / max_damage)
- if (time_needed && (damage_percent_to_max >= robotic_emp_paralyze_damage_percent_threshold))
- owner.visible_message(span_danger("[owner]'s [src] seems to malfunction!"))
+ do_sparks(number = 1, cardinal_only = FALSE, source = owner || src)
+
+ if(can_be_disabled && (get_damage() / max_damage) >= robotic_emp_paralyze_damage_percent_threshold)
ADD_TRAIT(src, TRAIT_PARALYSIS, EMP_TRAIT)
- addtimer(CALLBACK(src, PROC_REF(un_paralyze)), time_needed)
- return TRUE
+ addtimer(TRAIT_CALLBACK_REMOVE(src, TRAIT_PARALYSIS, EMP_TRAIT), time_needed)
+ owner?.visible_message(span_danger("[owner]'s [plaintext_zone] seems to malfunction!"))
-/obj/item/bodypart/proc/un_paralyze()
- REMOVE_TRAITS_IN(src, EMP_TRAIT)
+ return TRUE
/// Returns the generic description of our BIO_EXTERNAL feature(s), prioritizing certain ones over others. Returns error on failure.
/obj/item/bodypart/proc/get_external_description()
diff --git a/code/modules/surgery/bodyparts/robot_bodyparts.dm b/code/modules/surgery/bodyparts/robot_bodyparts.dm
index 37b6cef9897..99591daaa4b 100644
--- a/code/modules/surgery/bodyparts/robot_bodyparts.dm
+++ b/code/modules/surgery/bodyparts/robot_bodyparts.dm
@@ -111,15 +111,16 @@
/obj/item/bodypart/leg/left/robot/emp_act(severity)
. = ..()
- if(!.)
+ if(!. || isnull(owner))
return
+
var/knockdown_time = AUGGED_LEG_EMP_KNOCKDOWN_TIME
if (severity == EMP_HEAVY)
knockdown_time *= 2
owner.Knockdown(knockdown_time)
if(owner.incapacitated(IGNORE_RESTRAINTS|IGNORE_GRAB)) // So the message isn't duplicated. If they were stunned beforehand by something else, then the message not showing makes more sense anyways.
return
- to_chat(owner, span_danger("As your [src] unexpectedly malfunctions, it causes you to fall to the ground!"))
+ to_chat(owner, span_danger("As your [plaintext_zone] unexpectedly malfunctions, it causes you to fall to the ground!"))
/obj/item/bodypart/leg/right/robot
name = "cyborg right leg"
@@ -156,15 +157,16 @@
/obj/item/bodypart/leg/right/robot/emp_act(severity)
. = ..()
- if(!.)
+ if(!. || isnull(owner))
return
+
var/knockdown_time = AUGGED_LEG_EMP_KNOCKDOWN_TIME
if (severity == EMP_HEAVY)
knockdown_time *= 2
owner.Knockdown(knockdown_time)
if(owner.incapacitated(IGNORE_RESTRAINTS|IGNORE_GRAB)) // So the message isn't duplicated. If they were stunned beforehand by something else, then the message not showing makes more sense anyways.
return
- to_chat(owner, span_danger("As your [src] unexpectedly malfunctions, it causes you to fall to the ground!"))
+ to_chat(owner, span_danger("As your [plaintext_zone] unexpectedly malfunctions, it causes you to fall to the ground!"))
/obj/item/bodypart/chest/robot
name = "cyborg torso"
@@ -203,7 +205,7 @@
/obj/item/bodypart/chest/robot/emp_act(severity)
. = ..()
- if(!.)
+ if(!. || isnull(owner))
return
var/stun_time = 0
@@ -219,7 +221,7 @@
var/damage_percent_to_max = (get_damage() / max_damage)
if (stun_time && (damage_percent_to_max >= robotic_emp_paralyze_damage_percent_threshold))
- to_chat(owner, span_danger("Your [src]'s logic boards temporarily become unresponsive!"))
+ to_chat(owner, span_danger("Your [plaintext_zone]'s logic boards temporarily become unresponsive!"))
owner.Stun(stun_time)
owner.Shake(pixelshiftx = shift_x, pixelshifty = shift_y, duration = shake_duration)
@@ -338,9 +340,10 @@
/obj/item/bodypart/head/robot/emp_act(severity)
. = ..()
- if(!.)
+ if(!. || isnull(owner))
return
- to_chat(owner, span_danger("Your [src]'s optical transponders glitch out and malfunction!"))
+
+ to_chat(owner, span_danger("Your [plaintext_zone]'s optical transponders glitch out and malfunction!"))
var/glitch_duration = AUGGED_HEAD_EMP_GLITCH_DURATION
if (severity == EMP_HEAVY)
From 7906301f0d9e2f35bde1d5a932a3df7d24cec90b Mon Sep 17 00:00:00 2001
From: SkyratBot <59378654+SkyratBot@users.noreply.github.com>
Date: Mon, 9 Oct 2023 20:59:59 +0200
Subject: [PATCH 004/100] Fix virtual gondola meat [MDB IGNORE] (#24228)
* Fix virtual gondola meat (#78808)
## About The Pull Request
Instead of having a copy-pasted snowflake function for virtual gondola
mutation toxin, lets just move the difference to a variable.
Fixes the "Be unable to push the crate" part of #78804, because it was
applying both versions of the gondola disease, and the slower one could
finish first if you got unlucky.
## Why It's Good For The Game
Bugs bad, duplicate code bad.
## Changelog
:cl:
fix: Virtual domain gondola meat will no longer have a small chance to
turn you into a weaker gondola variant
/:cl:
* Fix virtual gondola meat
---------
Co-authored-by: FlufflesTheDog
---
.../bitrunning/virtual_domain/domains/gondola_asteroid.dm | 6 +-----
code/modules/reagents/chemistry/reagents/other_reagents.dm | 3 ++-
2 files changed, 3 insertions(+), 6 deletions(-)
diff --git a/code/modules/bitrunning/virtual_domain/domains/gondola_asteroid.dm b/code/modules/bitrunning/virtual_domain/domains/gondola_asteroid.dm
index 4deacb4f9c5..01d58e39803 100644
--- a/code/modules/bitrunning/virtual_domain/domains/gondola_asteroid.dm
+++ b/code/modules/bitrunning/virtual_domain/domains/gondola_asteroid.dm
@@ -28,11 +28,7 @@
/datum/reagent/gondola_mutation_toxin/virtual_domain
name = "Advanced Tranquility"
-
-/datum/reagent/gondola_mutation_toxin/virtual_domain/expose_mob(mob/living/exposed_mob, methods = TOUCH, reac_volume, show_message = TRUE, touch_protection = 0)
- . = ..()
- if((methods & (PATCH|INGEST|INJECT)) || ((methods & VAPOR) && prob(min(reac_volume,100)*(1 - touch_protection))))
- exposed_mob.ForceContractDisease(new /datum/disease/transformation/gondola/virtual_domain(), FALSE, TRUE)
+ gondola_disease = /datum/disease/transformation/gondola/virtual_domain
/datum/disease/transformation/gondola/virtual_domain
stage_prob = 9
diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm
index 62a6d52c4f1..5a26d37e9ed 100644
--- a/code/modules/reagents/chemistry/reagents/other_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm
@@ -2589,11 +2589,12 @@
color = "#9A6750" //RGB: 154, 103, 80
taste_description = "inner peace"
penetrates_skin = NONE
+ var/datum/disease/transformation/gondola_disease = /datum/disease/transformation/gondola
/datum/reagent/gondola_mutation_toxin/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message = TRUE, touch_protection = 0)
. = ..()
if((methods & (PATCH|INGEST|INJECT)) || ((methods & VAPOR) && prob(min(reac_volume,100)*(1 - touch_protection))))
- exposed_mob.ForceContractDisease(new /datum/disease/transformation/gondola(), FALSE, TRUE)
+ exposed_mob.ForceContractDisease(new gondola_disease, FALSE, TRUE)
/datum/reagent/spider_extract
From a7718e7a41bcc63c190fd5e0c5d491ce539900b0 Mon Sep 17 00:00:00 2001
From: SkyratBot <59378654+SkyratBot@users.noreply.github.com>
Date: Mon, 9 Oct 2023 21:00:17 +0200
Subject: [PATCH 005/100] Refactor gib code to use bitflags and have
documentation [MDB IGNORE] (#24143)
* Refactor gib code to use bitflags and have documentation
* Modular updates
* Modular updates
* Modular updates
---------
Co-authored-by: Tim
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
---
code/__DEFINES/blood.dm | 13 +++++
.../signals/signals_mob/signals_mob_living.dm | 2 +-
code/datums/components/butchering.dm | 2 +-
code/datums/components/death_linked.dm | 2 +-
code/datums/components/omen.dm | 6 +--
code/datums/components/squashable.dm | 2 +-
code/datums/components/stationstuck.dm | 2 +-
code/datums/diseases/gbs.dm | 2 +-
code/datums/dna.dm | 4 +-
code/datums/martial/plasma_fist.dm | 2 +-
code/datums/mutations/body.dm | 2 +-
code/datums/status_effects/debuffs/cursed.dm | 2 +-
code/datums/status_effects/debuffs/debuffs.dm | 2 +-
.../datums/storage/subtypes/bag_of_holding.dm | 2 +-
code/game/machinery/computer/arcade/arcade.dm | 2 +-
code/game/machinery/shieldgen.dm | 2 +-
code/game/objects/items/debug_items.dm | 2 +-
code/game/objects/items/food/monkeycube.dm | 2 +-
code/game/objects/items/food/pizza.dm | 2 +-
code/game/objects/items/food/sandwichtoast.dm | 2 +-
code/game/objects/items/grenades/plastic.dm | 2 +-
.../items/implants/implant_explosive.dm | 2 +-
code/game/objects/items/manuals.dm | 5 +-
code/game/objects/items/rcd/RCD.dm | 2 +-
code/game/objects/items/skub.dm | 2 +-
code/game/objects/items/spear.dm | 2 +-
code/game/objects/items/teleportation.dm | 2 +-
code/game/objects/items/weaponry.dm | 4 +-
code/game/objects/structures/divine.dm | 2 +-
code/modules/admin/smites/bsa.dm | 5 +-
code/modules/admin/smites/gib.dm | 2 +-
code/modules/admin/smites/puzzgrid.dm | 2 +-
code/modules/admin/verbs/adminfun.dm | 6 +--
.../antagonists/changeling/headslug_eggs.dm | 2 +-
.../antagonists/changeling/powers/headcrab.dm | 2 +-
code/modules/antagonists/cult/runes.dm | 6 +--
.../antagonists/heretic/heretic_knowledge.dm | 2 +-
.../modules/antagonists/heretic/influences.dm | 2 +-
.../sacrifice_knowledge.dm | 2 +-
.../equipment/nuclear_bomb/_nuclear_bomb.dm | 2 +-
.../wizard/grand_ritual/finales/armageddon.dm | 2 +-
code/modules/bitrunning/event.dm | 2 +-
code/modules/cargo/coupon.dm | 2 +-
code/modules/cargo/supplypod.dm | 2 +-
.../clothing/head/mind_monkey_helmet.dm | 2 +-
code/modules/experisci/destructive_scanner.dm | 2 +-
code/modules/experisci/handheld_scanner.dm | 2 +-
.../food_and_drinks/machinery/deep_fryer.dm | 2 +-
.../food_and_drinks/machinery/gibber.dm | 2 +-
.../food_and_drinks/machinery/processor.dm | 2 +-
code/modules/hydroponics/grown/melon.dm | 2 +-
.../industrial_lift/industrial_lift.dm | 2 +-
code/modules/library/bibles.dm | 2 +-
.../ruins/objects_and_mobs/ash_walker_den.dm | 2 +-
.../ruins/spaceruin_code/hilbertshotel.dm | 2 +-
.../modules/mob/living/basic/basic_defense.dm | 2 +-
.../basic/icemoon/ice_whelp/ice_whelp.dm | 2 +-
.../mob/living/basic/pets/dog/corgi.dm | 2 +-
.../mob/living/carbon/alien/alien_defense.dm | 2 +-
code/modules/mob/living/carbon/alien/death.dm | 4 +-
.../mob/living/carbon/alien/larva/death.dm | 4 +-
.../modules/mob/living/carbon/alien/organs.dm | 2 +-
.../carbon/alien/special/alien_embryo.dm | 4 +-
code/modules/mob/living/carbon/death.dm | 54 +++++++++----------
code/modules/mob/living/carbon/human/death.dm | 4 +-
.../mob/living/carbon/human/human_defense.dm | 2 +-
.../carbon/human/species_types/dullahan.dm | 6 +--
code/modules/mob/living/death.dm | 51 +++++++++++++-----
.../mob/living/silicon/ai/ai_defense.dm | 2 +-
.../modules/mob/living/silicon/robot/robot.dm | 2 +-
.../mob/living/silicon/robot/robot_defense.dm | 4 +-
.../simple_animal/hostile/gorilla/gorilla.dm | 4 +-
.../hostile/megafauna/colossus.dm | 2 +-
.../mining_mobs/elites/goliath_broodmother.dm | 2 +-
.../mob_spawn/ghost_roles/mining_roles.dm | 2 +-
code/modules/mod/modules/modules_ninja.dm | 2 +-
code/modules/power/apc/apc_malf.dm | 2 +-
.../projectiles/guns/ballistic/launchers.dm | 2 +-
.../projectiles/projectile/special/rocket.dm | 2 +-
.../chemistry/reagents/drug_reagents.dm | 2 +-
.../reagents/chemistry/recipes/others.dm | 2 +-
.../religion/honorbound/honorbound_rites.dm | 2 +-
code/modules/research/anomaly/anomaly_core.dm | 2 +-
.../research/xenobiology/xenobiology.dm | 2 +-
code/modules/shuttle/on_move.dm | 2 +-
.../spell_types/shapeshift/_shape_status.dm | 2 +-
.../spell_types/shapeshift/_shapeshift.dm | 2 +-
.../modules/spells/spell_types/touch/smite.dm | 2 +-
code/modules/vehicles/mecha/_mecha.dm | 2 +-
.../vehicles/mecha/combat/savannah_ivanov.dm | 2 +-
.../mecha/equipment/tools/mining_tools.dm | 2 +-
.../vehicles/mecha/mecha_mob_interaction.dm | 2 +-
code/modules/vehicles/vehicle_key.dm | 2 +-
code/modules/wiremod/shell/drone.dm | 2 +-
code/modules/zombie/items.dm | 2 +-
.../code/modules/mob/living/carbon/death.dm | 9 +---
.../modules/mob/living/carbon/human/death.dm | 6 +--
97 files changed, 188 insertions(+), 167 deletions(-)
diff --git a/code/__DEFINES/blood.dm b/code/__DEFINES/blood.dm
index 3bf4af65969..2c8576a2eda 100644
--- a/code/__DEFINES/blood.dm
+++ b/code/__DEFINES/blood.dm
@@ -19,3 +19,16 @@
#define BLOOD_STATE_OIL "oil"
/// No blood is present
#define BLOOD_STATE_NOT_BLOODY "no blood whatsoever"
+
+// Bitflags for mob dismemberment and gibbing
+/// Mobs will drop a brain
+#define DROP_BRAIN (1<<0)
+/// Mobs will drop organs
+#define DROP_ORGANS (1<<1)
+/// Mobs will drop bodyparts (arms, legs, etc.)
+#define DROP_BODYPARTS (1<<2)
+/// Mobs will drop items
+#define DROP_ITEMS (1<<3)
+
+/// Mobs will drop everything
+#define DROP_ALL_REMAINS (DROP_BRAIN | DROP_ORGANS | DROP_BODYPARTS | DROP_ITEMS)
diff --git a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm
index a6c5fdbf793..97e80bc0b51 100644
--- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm
+++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm
@@ -89,7 +89,7 @@
///from base of mob/living/death(): (gibbed)
#define COMSIG_LIVING_DEATH "living_death"
-///from base of mob/living/gib(): (no_brain, no_organs, no_bodyparts)
+///from base of mob/living/gib(): (drop_bitflags)
///Note that it is fired regardless of whether the mob was dead beforehand or not.
#define COMSIG_LIVING_GIBBED "living_gibbed"
diff --git a/code/datums/components/butchering.dm b/code/datums/components/butchering.dm
index 97bb2a30ad5..689de30db37 100644
--- a/code/datums/components/butchering.dm
+++ b/code/datums/components/butchering.dm
@@ -167,7 +167,7 @@
butcher_callback?.Invoke(butcher, target)
target.harvest(butcher)
target.log_message("has been butchered by [key_name(butcher)]", LOG_ATTACK)
- target.gib(FALSE, FALSE, TRUE)
+ target.gib(DROP_BRAIN|DROP_ORGANS)
///Enables the butchering mechanic for the mob who has equipped us.
/datum/component/butchering/proc/enable_butchering(datum/source)
diff --git a/code/datums/components/death_linked.dm b/code/datums/components/death_linked.dm
index 59d2ce5e855..c20c8100195 100644
--- a/code/datums/components/death_linked.dm
+++ b/code/datums/components/death_linked.dm
@@ -27,4 +27,4 @@
/datum/component/death_linked/proc/on_death(mob/living/target, gibbed)
SIGNAL_HANDLER
var/mob/living/linked_mob_resolved = linked_mob?.resolve()
- linked_mob_resolved?.gib()
+ linked_mob_resolved?.gib(DROP_ALL_REMAINS)
diff --git a/code/datums/components/omen.dm b/code/datums/components/omen.dm
index 4f3b17a7473..f499d22968d 100644
--- a/code/datums/components/omen.dm
+++ b/code/datums/components/omen.dm
@@ -238,7 +238,7 @@
return ..()
death_explode(our_guy)
- our_guy.gib()
+ our_guy.gib(DROP_ALL_REMAINS)
/**
* The quirk omen. Permanent.
@@ -259,7 +259,7 @@
/datum/component/omen/quirk/check_death(mob/living/our_guy)
if(!iscarbon(our_guy))
- our_guy.gib()
+ our_guy.gib(DROP_ALL_REMAINS)
return
// Don't explode if buckled to a stasis bed
@@ -270,7 +270,7 @@
death_explode(our_guy)
var/mob/living/carbon/player = our_guy
- player.spread_bodyparts(skip_head = TRUE)
+ player.spread_bodyparts()
player.spawn_gibs()
return
diff --git a/code/datums/components/squashable.dm b/code/datums/components/squashable.dm
index 5fc489873bf..8174127aeb3 100644
--- a/code/datums/components/squashable.dm
+++ b/code/datums/components/squashable.dm
@@ -72,7 +72,7 @@
/datum/component/squashable/proc/Squish(mob/living/target)
if(squash_flags & SQUASHED_SHOULD_BE_GIBBED)
- target.gib()
+ target.gib(DROP_ALL_REMAINS)
else
target.adjustBruteLoss(squash_damage)
diff --git a/code/datums/components/stationstuck.dm b/code/datums/components/stationstuck.dm
index 63a1dcabbbd..5634186f04e 100644
--- a/code/datums/components/stationstuck.dm
+++ b/code/datums/components/stationstuck.dm
@@ -49,7 +49,7 @@ It has a punishment variable that is what happens to the parent when they leave
escapee.death()
if(PUNISHMENT_GIB)
escapee.investigate_log("has been gibbed by stationstuck component.", INVESTIGATE_DEATHS)
- escapee.gib()
+ escapee.gib(DROP_ALL_REMAINS)
if(PUNISHMENT_TELEPORT)
var/targetturf = find_safe_turf(stuck_zlevel)
if(!targetturf)
diff --git a/code/datums/diseases/gbs.dm b/code/datums/diseases/gbs.dm
index 22f84cf73a1..abf2116a92f 100644
--- a/code/datums/diseases/gbs.dm
+++ b/code/datums/diseases/gbs.dm
@@ -30,5 +30,5 @@
to_chat(affected_mob, span_userdanger("Your body feels as if it's trying to rip itself apart!"))
if(SPT_PROB(30, seconds_per_tick))
affected_mob.investigate_log("has been gibbed by GBS.", INVESTIGATE_DEATHS)
- affected_mob.gib()
+ affected_mob.gib(DROP_ALL_REMAINS)
return FALSE
diff --git a/code/datums/dna.dm b/code/datums/dna.dm
index 5034a863f56..785b70eb475 100644
--- a/code/datums/dna.dm
+++ b/code/datums/dna.dm
@@ -927,7 +927,7 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block())
switch(rand(0,6))
if(0)
investigate_log("has been gibbed by DNA instability.", INVESTIGATE_DEATHS)
- gib()
+ gib(DROP_ALL_REMAINS)
if(1)
investigate_log("has been dusted by DNA instability.", INVESTIGATE_DEATHS)
dust()
@@ -943,7 +943,7 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block())
BP.dismember()
else
investigate_log("has been gibbed by DNA instability.", INVESTIGATE_DEATHS)
- gib()
+ gib(DROP_ALL_REMAINS)
else
set_species(/datum/species/dullahan)
if(4)
diff --git a/code/datums/martial/plasma_fist.dm b/code/datums/martial/plasma_fist.dm
index 1bc353cc698..f4c89177ac3 100644
--- a/code/datums/martial/plasma_fist.dm
+++ b/code/datums/martial/plasma_fist.dm
@@ -68,7 +68,7 @@
log_combat(attacker, defender, "gibbed (Plasma Fist)")
var/turf/Dturf = get_turf(defender)
defender.investigate_log("has been gibbed by plasma fist.", INVESTIGATE_DEATHS)
- defender.gib()
+ defender.gib(DROP_ALL_REMAINS)
if(nobomb)
return
if(!hasclient)
diff --git a/code/datums/mutations/body.dm b/code/datums/mutations/body.dm
index 094e650fe33..332b2695e40 100644
--- a/code/datums/mutations/body.dm
+++ b/code/datums/mutations/body.dm
@@ -508,7 +508,7 @@
to_chat(borgo, span_userdanger("Your sensors are disabled by a shower of blood!"))
borgo.Paralyze(6 SECONDS)
owner.investigate_log("has been gibbed by the martyrdom mutation.", INVESTIGATE_DEATHS)
- owner.gib()
+ owner.gib(DROP_ALL_REMAINS)
/datum/mutation/human/headless
name = "H.A.R.S."
diff --git a/code/datums/status_effects/debuffs/cursed.dm b/code/datums/status_effects/debuffs/cursed.dm
index 285fb86348e..8d331bbe90a 100644
--- a/code/datums/status_effects/debuffs/cursed.dm
+++ b/code/datums/status_effects/debuffs/cursed.dm
@@ -102,7 +102,7 @@
to_chat(owner, span_userdanger("Why couldn't I get one more try?!"))
owner.investigate_log("has been gibbed by the cursed status effect after accumulating [curse_count] curses.", INVESTIGATE_DEATHS)
- owner.gib()
+ owner.gib(DROP_ALL_REMAINS)
qdel(src)
return
diff --git a/code/datums/status_effects/debuffs/debuffs.dm b/code/datums/status_effects/debuffs/debuffs.dm
index ff3e1762074..f4c78b69101 100644
--- a/code/datums/status_effects/debuffs/debuffs.dm
+++ b/code/datums/status_effects/debuffs/debuffs.dm
@@ -694,7 +694,7 @@
/datum/status_effect/dna_melt/on_remove()
if(!ishuman(owner))
- owner.gib() //fuck you in particular
+ owner.gib(DROP_ALL_REMAINS) //fuck you in particular
return
var/mob/living/carbon/human/H = owner
INVOKE_ASYNC(H, TYPE_PROC_REF(/mob/living/carbon/human, something_horrible), kill_either_way)
diff --git a/code/datums/storage/subtypes/bag_of_holding.dm b/code/datums/storage/subtypes/bag_of_holding.dm
index 9176588b5fc..9e3a486cdcd 100644
--- a/code/datums/storage/subtypes/bag_of_holding.dm
+++ b/code/datums/storage/subtypes/bag_of_holding.dm
@@ -32,6 +32,6 @@
user.log_message("detonated a bag of holding at [loc_name(loccheck)].", LOG_ATTACK, color="red")
user.investigate_log("has been gibbed by a bag of holding recursive insertion.", INVESTIGATE_DEATHS)
- user.gib(TRUE, TRUE, TRUE)
+ user.gib()
new/obj/boh_tear(loccheck)
qdel(resolve_parent)
diff --git a/code/game/machinery/computer/arcade/arcade.dm b/code/game/machinery/computer/arcade/arcade.dm
index 28034872289..58a7280e864 100644
--- a/code/game/machinery/computer/arcade/arcade.dm
+++ b/code/game/machinery/computer/arcade/arcade.dm
@@ -582,7 +582,7 @@ GLOBAL_LIST_INIT(arcade_prize_pool, list(
var/mob/living/living_user = user
if (istype(living_user))
living_user.investigate_log("has been gibbed by an emagged Orion Trail game.", INVESTIGATE_DEATHS)
- living_user.gib()
+ living_user.gib(DROP_ALL_REMAINS)
SSblackbox.record_feedback("nested tally", "arcade_results", 1, list("loss", "hp", (obj_flags & EMAGGED ? "emagged":"normal")))
user.lost_game()
diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm
index 0e53fa8e36c..f1cbc110a3e 100644
--- a/code/game/machinery/shieldgen.dm
+++ b/code/game/machinery/shieldgen.dm
@@ -504,7 +504,7 @@
for(var/mob/living/L in get_turf(src))
visible_message(span_danger("\The [src] is suddenly occupying the same space as \the [L]!"))
L.investigate_log("has been gibbed by [src].", INVESTIGATE_DEATHS)
- L.gib()
+ L.gib(DROP_ALL_REMAINS)
RegisterSignal(src, COMSIG_ATOM_SINGULARITY_TRY_MOVE, PROC_REF(block_singularity))
/obj/machinery/shieldwall/Destroy()
diff --git a/code/game/objects/items/debug_items.dm b/code/game/objects/items/debug_items.dm
index 68ae291e736..e2febe30fcf 100644
--- a/code/game/objects/items/debug_items.dm
+++ b/code/game/objects/items/debug_items.dm
@@ -163,7 +163,7 @@
playsound(src, 'sound/voice/borg_deathsound.ogg')
sleep(3 SECONDS)
living_user.investigate_log("has been gibbed by [src].", INVESTIGATE_DEATHS)
- living_user.gib()
+ living_user.gib(DROP_ALL_REMAINS)
return
var/turf/loc_turf = get_turf(src)
for(var/spawn_atom in (choice == "No" ? typesof(path) : subtypesof(path)))
diff --git a/code/game/objects/items/food/monkeycube.dm b/code/game/objects/items/food/monkeycube.dm
index 5cf9db79fd0..0013fbcdadd 100644
--- a/code/game/objects/items/food/monkeycube.dm
+++ b/code/game/objects/items/food/monkeycube.dm
@@ -48,7 +48,7 @@
return
Expand()
user.visible_message(span_danger("[user]'s torso bursts open as a primate emerges!"))
- user.gib(null, TRUE, null, TRUE)
+ user.gib(DROP_BRAIN|DROP_BODYPARTS|DROP_ITEMS) // just remove the organs
/obj/item/food/monkeycube/syndicate
faction = list(FACTION_NEUTRAL, ROLE_SYNDICATE)
diff --git a/code/game/objects/items/food/pizza.dm b/code/game/objects/items/food/pizza.dm
index fdbb1e33c87..b93cd7ed721 100644
--- a/code/game/objects/items/food/pizza.dm
+++ b/code/game/objects/items/food/pizza.dm
@@ -389,7 +389,7 @@
if(istype(item, /obj/item/food/pineappleslice))
to_chat(user, "If you want something crazy like pineapple, I'll kill you.") //this is in bigger text because it's hard to spam something that gibs you, and so that you're perfectly aware of the reason why you died
user.investigate_log("has been gibbed by putting pineapple on an arnold pizza.", INVESTIGATE_DEATHS)
- user.gib() //if you want something crazy like pineapple, i'll kill you
+ user.gib(DROP_ALL_REMAINS) //if you want something crazy like pineapple, i'll kill you
else if(istype(item, /obj/item/food/grown/mushroom) && iscarbon(user))
to_chat(user, span_userdanger("So, if you want mushroom, shut up.")) //not as large as the pineapple text, because you could in theory spam it
var/mob/living/carbon/shutup = user
diff --git a/code/game/objects/items/food/sandwichtoast.dm b/code/game/objects/items/food/sandwichtoast.dm
index fec714ad850..8b91b04621e 100644
--- a/code/game/objects/items/food/sandwichtoast.dm
+++ b/code/game/objects/items/food/sandwichtoast.dm
@@ -302,5 +302,5 @@
/obj/item/food/sandwich/death/suicide_act(mob/living/user)
user.visible_message(span_suicide("[user] starts to shove [src] down [user.p_their()] throat the wrong way. It looks like [user.p_theyre()] trying to commit suicide!"))
qdel(src)
- user.gib(TRUE, TRUE, TRUE)
+ user.gib()
return MANUAL_SUICIDE
diff --git a/code/game/objects/items/grenades/plastic.dm b/code/game/objects/items/grenades/plastic.dm
index 5902298032c..d5f3b0dec9d 100644
--- a/code/game/objects/items/grenades/plastic.dm
+++ b/code/game/objects/items/grenades/plastic.dm
@@ -161,7 +161,7 @@
user.visible_message(span_suicide("[user] activates [src] and holds it above [user.p_their()] head! It looks like [user.p_theyre()] going out with a bang!"))
shout_syndicate_crap(user)
explosion(user, heavy_impact_range = 2, explosion_cause = src) //Cheap explosion imitation because putting detonate() here causes runtimes
- user.gib(1, 1)
+ user.gib(DROP_BODYPARTS)
qdel(src)
// X4 is an upgraded directional variant of c4 which is relatively safe to be standing next to. And much less safe to be standing on the other side of.
diff --git a/code/game/objects/items/implants/implant_explosive.dm b/code/game/objects/items/implants/implant_explosive.dm
index 70471a8e99a..c9f961b594e 100644
--- a/code/game/objects/items/implants/implant_explosive.dm
+++ b/code/game/objects/items/implants/implant_explosive.dm
@@ -166,7 +166,7 @@
explosion(src, devastation_range = explosion_devastate, heavy_impact_range = explosion_heavy, light_impact_range = explosion_light, flame_range = explosion_light, flash_range = explosion_light, explosion_cause = src)
if(imp_in)
imp_in.investigate_log("has been gibbed by an explosive implant.", INVESTIGATE_DEATHS)
- imp_in.gib(TRUE)
+ imp_in.gib(DROP_ORGANS|DROP_BODYPARTS)
qdel(src)
///Macrobomb has the strength and delay of 10 microbombs
diff --git a/code/game/objects/items/manuals.dm b/code/game/objects/items/manuals.dm
index bcae55357e4..9d8cd8e9426 100644
--- a/code/game/objects/items/manuals.dm
+++ b/code/game/objects/items/manuals.dm
@@ -431,9 +431,10 @@
H.gib_animation()
sleep(0.3 SECONDS)
H.adjustBruteLoss(1000) //to make the body super-bloody
+ // if we use gib() then the body gets deleted
H.spawn_gibs()
- H.spill_organs()
- H.spread_bodyparts()
+ H.spill_organs(DROP_ALL_REMAINS)
+ H.spread_bodyparts(DROP_BRAIN)
return BRUTELOSS
/obj/item/book/manual/wiki/plumbing
diff --git a/code/game/objects/items/rcd/RCD.dm b/code/game/objects/items/rcd/RCD.dm
index bf6f5c2ab1f..27c04aa7479 100644
--- a/code/game/objects/items/rcd/RCD.dm
+++ b/code/game/objects/items/rcd/RCD.dm
@@ -259,7 +259,7 @@ GLOBAL_VAR_INIT(icon_holographic_window, init_holographic_window())
useResource(16, user)
activate()
playsound(loc, 'sound/machines/click.ogg', 50, 1)
- user.gib()
+ user.gib(DROP_ALL_REMAINS)
return MANUAL_SUICIDE
user.visible_message(span_suicide("[user] pulls the trigger... But there is not enough ammo!"))
diff --git a/code/game/objects/items/skub.dm b/code/game/objects/items/skub.dm
index 7e9cd381e33..12e6da344d0 100644
--- a/code/game/objects/items/skub.dm
+++ b/code/game/objects/items/skub.dm
@@ -13,6 +13,6 @@
/obj/item/skub/suicide_act(mob/living/user)
user.visible_message(span_suicide("[user] has declared themself as anti-skub! The skub tears them apart!"))
- user.gib()
+ user.gib(DROP_ALL_REMAINS)
playsound(src, 'sound/items/eatfood.ogg', 50, TRUE, -1)
return MANUAL_SUICIDE
diff --git a/code/game/objects/items/spear.dm b/code/game/objects/items/spear.dm
index d9f13911731..410cddd1fc0 100644
--- a/code/game/objects/items/spear.dm
+++ b/code/game/objects/items/spear.dm
@@ -152,7 +152,7 @@
user.say("[war_cry]", forced="spear warcry")
explosive.forceMove(user)
explosive.detonate()
- user.gib()
+ user.gib(DROP_ALL_REMAINS)
qdel(src)
return BRUTELOSS
diff --git a/code/game/objects/items/teleportation.dm b/code/game/objects/items/teleportation.dm
index 533fc755fa1..07e178acba5 100644
--- a/code/game/objects/items/teleportation.dm
+++ b/code/game/objects/items/teleportation.dm
@@ -489,7 +489,7 @@
destination.ex_act(EXPLODE_HEAVY)
victim.unequip_everything()
victim.investigate_log("has been gibbed by [src].", INVESTIGATE_DEATHS)
- victim.gib()
+ victim.gib(DROP_ALL_REMAINS)
///Damage and stun all mobs in fragging_location turf, called after a teleport
/obj/item/syndicate_teleporter/proc/telefrag(turf/fragging_location, mob/user) // Don't let this gib. Never let this gib.
diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm
index 21fc15572bf..8c949b36a79 100644
--- a/code/game/objects/items/weaponry.dm
+++ b/code/game/objects/items/weaponry.dm
@@ -922,7 +922,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
if(isliving(target))
var/mob/living/bug = target
bug.investigate_log("has been splatted by a flyswatter.", INVESTIGATE_DEATHS)
- bug.gib()
+ bug.gib(DROP_ALL_REMAINS)
else
qdel(target)
return
@@ -1099,7 +1099,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
if(living_target.stat == DEAD && prob(force*damage_mod*0.5))
living_target.visible_message(span_danger("[living_target] explodes in a shower of gore!"), blind_message = span_hear("You hear organic matter ripping and tearing!"))
living_target.investigate_log("has been gibbed by [src].", INVESTIGATE_DEATHS)
- living_target.gib()
+ living_target.gib(DROP_ALL_REMAINS)
log_combat(user, living_target, "gibbed", src)
else if(target.uses_integrity)
target.take_damage(force*damage_mod*3, BRUTE, MELEE, FALSE, null, 50)
diff --git a/code/game/objects/structures/divine.dm b/code/game/objects/structures/divine.dm
index cda00d98d0b..ef9f650e42a 100644
--- a/code/game/objects/structures/divine.dm
+++ b/code/game/objects/structures/divine.dm
@@ -18,7 +18,7 @@
return
to_chat(user, span_notice("Invoking the sacred ritual, you sacrifice [L]."))
L.investigate_log("has been sacrificially gibbed on an altar.", INVESTIGATE_DEATHS)
- L.gib()
+ L.gib(DROP_ALL_REMAINS)
message_admins("[ADMIN_LOOKUPFLW(user)] has sacrificed [key_name_admin(L)] on the sacrificial altar at [AREACOORD(src)].")
/obj/structure/healingfountain
diff --git a/code/modules/admin/smites/bsa.dm b/code/modules/admin/smites/bsa.dm
index cf0399acf26..bdf5f9e37b1 100644
--- a/code/modules/admin/smites/bsa.dm
+++ b/code/modules/admin/smites/bsa.dm
@@ -20,10 +20,7 @@
target_turf.break_tile()
if (target.health <= 1)
- target.gib(
- /* no_brain = */ TRUE,
- /* no_organs = */ TRUE,
- )
+ target.gib(DROP_BODYPARTS)
else
target.adjustBruteLoss(min(BSA_MAX_DAMAGE, target.health - 1))
target.Paralyze(BSA_PARALYZE_TIME)
diff --git a/code/modules/admin/smites/gib.dm b/code/modules/admin/smites/gib.dm
index 471479e7645..4c7c4324823 100644
--- a/code/modules/admin/smites/gib.dm
+++ b/code/modules/admin/smites/gib.dm
@@ -4,4 +4,4 @@
/datum/smite/gib/effect(client/user, mob/living/target)
. = ..()
- target.gib(/* no_brain = */ FALSE)
+ target.gib(DROP_ORGANS|DROP_BODYPARTS)
diff --git a/code/modules/admin/smites/puzzgrid.dm b/code/modules/admin/smites/puzzgrid.dm
index 481f85a191f..fe5f88d6a5f 100644
--- a/code/modules/admin/smites/puzzgrid.dm
+++ b/code/modules/admin/smites/puzzgrid.dm
@@ -91,7 +91,7 @@
span_bolddanger("You were unable to free [victim] from their fiendish prison, leaving them as nothing more than a smattering of mush!"),
span_bolddanger("Your compatriates were unable to free you from your fiendish prison, leaving you as nothing more than a smattering of mush!"),
)
- victim.gib()
+ victim.gib(DROP_ALL_REMAINS)
victim = null
qdel(src)
diff --git a/code/modules/admin/verbs/adminfun.dm b/code/modules/admin/verbs/adminfun.dm
index b1e0327510a..f51a922e419 100644
--- a/code/modules/admin/verbs/adminfun.dm
+++ b/code/modules/admin/verbs/adminfun.dm
@@ -78,9 +78,9 @@
if (istype(living_victim))
living_victim.investigate_log("has been gibbed by an admin.", INVESTIGATE_DEATHS)
if(confirm == "Yes")
- living_victim.gib()
+ living_victim.gib(DROP_ALL_REMAINS)
else
- living_victim.gib(TRUE)
+ living_victim.gib(DROP_ORGANS|DROP_BODYPARTS)
SSblackbox.record_feedback("tally", "admin_verb", 1, "Gib") // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc!
@@ -97,7 +97,7 @@
var/mob/living/ourself = mob
if (istype(ourself))
- ourself.gib(TRUE, TRUE, TRUE)
+ ourself.gib()
/client/proc/everyone_random()
set category = "Admin.Fun"
diff --git a/code/modules/antagonists/changeling/headslug_eggs.dm b/code/modules/antagonists/changeling/headslug_eggs.dm
index 08733a7e6af..e4327aa3ed1 100644
--- a/code/modules/antagonists/changeling/headslug_eggs.dm
+++ b/code/modules/antagonists/changeling/headslug_eggs.dm
@@ -37,7 +37,7 @@
changeling_datum.regain_powers()
owner.investigate_log("has been gibbed by a changeling egg burst.", INVESTIGATE_DEATHS)
- owner.gib()
+ owner.gib(DROP_ALL_REMAINS)
qdel(src)
#undef EGG_INCUBATION_TIME
diff --git a/code/modules/antagonists/changeling/powers/headcrab.dm b/code/modules/antagonists/changeling/powers/headcrab.dm
index 7daebc4cfb2..f608d1620b8 100644
--- a/code/modules/antagonists/changeling/powers/headcrab.dm
+++ b/code/modules/antagonists/changeling/powers/headcrab.dm
@@ -35,7 +35,7 @@
user.transfer_observers_to(user_turf) // user is about to be deleted, store orbiters on the turf
if(user.stat != DEAD)
user.investigate_log("has been gibbed by headslug burst.", INVESTIGATE_DEATHS)
- user.gib()
+ user.gib(DROP_ALL_REMAINS)
. = TRUE
addtimer(CALLBACK(src, PROC_REF(spawn_headcrab), stored_mind, user_turf, organs), 1 SECONDS)
diff --git a/code/modules/antagonists/cult/runes.dm b/code/modules/antagonists/cult/runes.dm
index de8a26187ae..30cb3d4467c 100644
--- a/code/modules/antagonists/cult/runes.dm
+++ b/code/modules/antagonists/cult/runes.dm
@@ -370,7 +370,7 @@ structure_check() searches for nearby cultist structures required for the invoca
if(sacrificial)
playsound(sacrificial, 'sound/magic/disintegrate.ogg', 100, TRUE)
sacrificial.investigate_log("has been sacrificially gibbed by the cult.", INVESTIGATE_DEATHS)
- sacrificial.gib()
+ sacrificial.gib(DROP_ALL_REMAINS)
return TRUE
/obj/effect/rune/empower
@@ -946,8 +946,8 @@ structure_check() searches for nearby cultist structures required for the invoca
affecting = null
rune_in_use = FALSE
-/mob/living/carbon/human/cult_ghost/spill_organs(no_brain, no_organs, no_bodyparts) //cult ghosts never drop a brain
- no_brain = TRUE
+/mob/living/carbon/human/cult_ghost/spill_organs(drop_bitflags=NONE)
+ drop_bitflags &= ~DROP_BRAIN //cult ghosts never drop a brain
. = ..()
/mob/living/carbon/human/cult_ghost/get_organs_for_zone(zone, include_children)
diff --git a/code/modules/antagonists/heretic/heretic_knowledge.dm b/code/modules/antagonists/heretic/heretic_knowledge.dm
index ea22955d83e..260f56540d0 100644
--- a/code/modules/antagonists/heretic/heretic_knowledge.dm
+++ b/code/modules/antagonists/heretic/heretic_knowledge.dm
@@ -733,6 +733,6 @@
/datum/heretic_knowledge/ultimate/cleanup_atoms(list/selected_atoms)
for(var/mob/living/carbon/human/sacrifice in selected_atoms)
selected_atoms -= sacrifice
- sacrifice.gib()
+ sacrifice.gib(DROP_ALL_REMAINS)
return ..()
diff --git a/code/modules/antagonists/heretic/influences.dm b/code/modules/antagonists/heretic/influences.dm
index 67a3bbc16b4..74a851e7fb7 100644
--- a/code/modules/antagonists/heretic/influences.dm
+++ b/code/modules/antagonists/heretic/influences.dm
@@ -177,7 +177,7 @@
head.dismember()
qdel(head)
else
- human_user.gib()
+ human_user.gib(DROP_ALL_REMAINS)
human_user.investigate_log("has died from using telekinesis on a heretic influence.", INVESTIGATE_DEATHS)
var/datum/effect_system/reagents_explosion/explosion = new()
explosion.set_up(1, get_turf(human_user), TRUE, 0)
diff --git a/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_knowledge.dm b/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_knowledge.dm
index 3e37c173923..e2887d73757 100644
--- a/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_knowledge.dm
+++ b/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_knowledge.dm
@@ -492,7 +492,7 @@
/datum/heretic_knowledge/hunt_and_sacrifice/proc/disembowel_target(mob/living/carbon/human/sac_target)
if(heretic_mind)
log_combat(heretic_mind.current, sac_target, "disemboweled via sacrifice")
- sac_target.spill_organs()
+ sac_target.spill_organs(DROP_ALL_REMAINS)
sac_target.apply_damage(250, BRUTE)
if(sac_target.stat != DEAD)
sac_target.investigate_log("has been killed by heretic sacrifice.", INVESTIGATE_DEATHS)
diff --git a/code/modules/antagonists/nukeop/equipment/nuclear_bomb/_nuclear_bomb.dm b/code/modules/antagonists/nukeop/equipment/nuclear_bomb/_nuclear_bomb.dm
index c15012f409b..0b6a28c3bca 100644
--- a/code/modules/antagonists/nukeop/equipment/nuclear_bomb/_nuclear_bomb.dm
+++ b/code/modules/antagonists/nukeop/equipment/nuclear_bomb/_nuclear_bomb.dm
@@ -644,7 +644,7 @@ GLOBAL_VAR(station_nuke_source)
to_chat(gibbed, span_userdanger("You are shredded to atoms by [source]!"))
gibbed.investigate_log("has been gibbed by a nuclear blast.", INVESTIGATE_DEATHS)
- gibbed.gib()
+ gibbed.gib(DROP_ALL_REMAINS)
return TRUE
/**
diff --git a/code/modules/antagonists/wizard/grand_ritual/finales/armageddon.dm b/code/modules/antagonists/wizard/grand_ritual/finales/armageddon.dm
index 876f2475d55..c4bba539c35 100644
--- a/code/modules/antagonists/wizard/grand_ritual/finales/armageddon.dm
+++ b/code/modules/antagonists/wizard/grand_ritual/finales/armageddon.dm
@@ -33,7 +33,7 @@
/datum/grand_finale/armageddon/trigger(mob/living/carbon/human/invoker)
priority_announce(pick(possible_last_words), null, 'sound/magic/voidblink.ogg', sender_override = "[invoker.real_name]")
var/turf/current_location = get_turf(invoker)
- invoker.gib()
+ invoker.gib(DROP_ALL_REMAINS)
var/static/list/doom_options = list()
if (!length(doom_options))
diff --git a/code/modules/bitrunning/event.dm b/code/modules/bitrunning/event.dm
index 0ac35a2df8f..6a4d54adcd8 100644
--- a/code/modules/bitrunning/event.dm
+++ b/code/modules/bitrunning/event.dm
@@ -139,7 +139,7 @@
/// Spawns a cybercop on the mutation target
/datum/round_event/ghost_role/bitrunning_glitch/proc/spawn_cybercop(mob/living/mutation_target, datum/mind/player_mind)
var/mob/living/carbon/human/new_agent = new(mutation_target.loc)
- mutation_target.gib()
+ mutation_target.gib(DROP_ALL_REMAINS)
mutation_target = null
player_mind.transfer_to(new_agent)
diff --git a/code/modules/cargo/coupon.dm b/code/modules/cargo/coupon.dm
index fc1c3a6cc65..5c4e1e930b5 100644
--- a/code/modules/cargo/coupon.dm
+++ b/code/modules/cargo/coupon.dm
@@ -44,7 +44,7 @@
/// Play stupid games, win stupid prizes
/obj/item/coupon/proc/curse_heart(mob/living/cursed)
if(!iscarbon(cursed))
- cursed.gib()
+ cursed.gib(DROP_ALL_REMAINS)
return TRUE
var/mob/living/carbon/player = cursed
diff --git a/code/modules/cargo/supplypod.dm b/code/modules/cargo/supplypod.dm
index feb6c8f8ae6..8635efee569 100644
--- a/code/modules/cargo/supplypod.dm
+++ b/code/modules/cargo/supplypod.dm
@@ -276,7 +276,7 @@
if (effectGib) //effectGib is on, that means whatever's underneath us better be fucking oof'd on
target_living.adjustBruteLoss(5000) //THATS A LOT OF DAMAGE (called just in case gib() doesnt work on em)
if (!QDELETED(target_living))
- target_living.gib() //After adjusting the fuck outta that brute loss we finish the job with some satisfying gibs
+ target_living.gib(DROP_ALL_REMAINS) //After adjusting the fuck outta that brute loss we finish the job with some satisfying gibs
else
target_living.adjustBruteLoss(damage)
var/explosion_sum = B[1] + B[2] + B[3] + B[4]
diff --git a/code/modules/clothing/head/mind_monkey_helmet.dm b/code/modules/clothing/head/mind_monkey_helmet.dm
index c0463fed74c..d1c423b5b03 100644
--- a/code/modules/clothing/head/mind_monkey_helmet.dm
+++ b/code/modules/clothing/head/mind_monkey_helmet.dm
@@ -89,7 +89,7 @@
if(3) //primal gene (gorilla)
magnification.gorillize()
if(4) //genetic mass susceptibility (gib)
- magnification.gib()
+ magnification.gib(DROP_ALL_REMAINS)
//either used up correctly or taken off before polling finished (punish this by destroying the helmet)
UnregisterSignal(magnification, COMSIG_SPECIES_LOSS)
playsound(src, 'sound/machines/buzz-sigh.ogg', 30, TRUE)
diff --git a/code/modules/experisci/destructive_scanner.dm b/code/modules/experisci/destructive_scanner.dm
index ef89dc9b94a..de0b03b0f09 100644
--- a/code/modules/experisci/destructive_scanner.dm
+++ b/code/modules/experisci/destructive_scanner.dm
@@ -89,7 +89,7 @@
if(isliving(movable_atom))
var/mob/living/fucked_up_thing = movable_atom
fucked_up_thing.investigate_log("has been gibbed by [src].", INVESTIGATE_DEATHS)
- fucked_up_thing.gib()
+ fucked_up_thing.gib(DROP_ALL_REMAINS)
SEND_SIGNAL(src, COMSIG_MACHINERY_DESTRUCTIVE_SCAN, scanned_atoms)
diff --git a/code/modules/experisci/handheld_scanner.dm b/code/modules/experisci/handheld_scanner.dm
index 97aa034afa1..92031107ba5 100644
--- a/code/modules/experisci/handheld_scanner.dm
+++ b/code/modules/experisci/handheld_scanner.dm
@@ -59,6 +59,6 @@
icon_state = "experiscanner"
remove_atom_colour(ADMIN_COLOUR_PRIORITY, "#FF0000")
- user.gib(FALSE, TRUE, TRUE) //we delete everything but the brain, as it's going to be moved to the cistern
+ user.gib(DROP_BRAIN) //we delete everything but the brain, as it's going to be moved to the cistern
toilet_brain.forceMove(result_toilet)
result_toilet.w_items += toilet_brain.w_class
diff --git a/code/modules/food_and_drinks/machinery/deep_fryer.dm b/code/modules/food_and_drinks/machinery/deep_fryer.dm
index fc20112f08a..071cc18febc 100644
--- a/code/modules/food_and_drinks/machinery/deep_fryer.dm
+++ b/code/modules/food_and_drinks/machinery/deep_fryer.dm
@@ -216,7 +216,7 @@ GLOBAL_LIST_INIT(oilfry_blacklisted_items, typecacheof(list(
if(target_temp < TCMB + 10) // a tiny bit of leeway
dunking_target.visible_message(span_userdanger("[dunking_target] explodes from the entropic difference! Holy fuck!"))
dunking_target.investigate_log("has been gibbed by entropic difference (being dunked into [src]).", INVESTIGATE_DEATHS)
- dunking_target.gib()
+ dunking_target.gib(DROP_ALL_REMAINS)
log_combat(user, dunking_target, "blew up", null, "by dunking them into [src]")
return
diff --git a/code/modules/food_and_drinks/machinery/gibber.dm b/code/modules/food_and_drinks/machinery/gibber.dm
index 45e66f95ed2..121acceb4c4 100644
--- a/code/modules/food_and_drinks/machinery/gibber.dm
+++ b/code/modules/food_and_drinks/machinery/gibber.dm
@@ -256,4 +256,4 @@
if(victim.loc == input)
victim.forceMove(src)
- victim.gib()
+ victim.gib(DROP_ALL_REMAINS)
diff --git a/code/modules/food_and_drinks/machinery/processor.dm b/code/modules/food_and_drinks/machinery/processor.dm
index 2c1b0b9d3b3..60679f89345 100644
--- a/code/modules/food_and_drinks/machinery/processor.dm
+++ b/code/modules/food_and_drinks/machinery/processor.dm
@@ -76,7 +76,7 @@
if(isliving(what))
var/mob/living/themob = what
- themob.gib(TRUE,TRUE,TRUE)
+ themob.gib()
else
qdel(what)
LAZYREMOVE(processor_contents, what)
diff --git a/code/modules/hydroponics/grown/melon.dm b/code/modules/hydroponics/grown/melon.dm
index 80962a2d182..f69f8a68317 100644
--- a/code/modules/hydroponics/grown/melon.dm
+++ b/code/modules/hydroponics/grown/melon.dm
@@ -17,7 +17,7 @@
/obj/item/seeds/watermelon/suicide_act(mob/living/user)
user.visible_message(span_suicide("[user] is swallowing [src]! It looks like [user.p_theyre()] trying to commit suicide!"))
- user.gib()
+ user.gib(DROP_ALL_REMAINS)
new product(drop_location())
qdel(src)
return MANUAL_SUICIDE
diff --git a/code/modules/industrial_lift/industrial_lift.dm b/code/modules/industrial_lift/industrial_lift.dm
index dd1b3f9604a..0bcc2a49bc8 100644
--- a/code/modules/industrial_lift/industrial_lift.dm
+++ b/code/modules/industrial_lift/industrial_lift.dm
@@ -326,7 +326,7 @@ GLOBAL_LIST_INIT(all_radial_directions, list(
if(violent_landing)
// Violent landing = gibbed. But the nicest kind of gibbing, keeping everything intact.
crushed.investigate_log("has been gibbed by [src].", INVESTIGATE_DEATHS)
- crushed.gib(FALSE, FALSE, FALSE)
+ crushed.gib(DROP_ALL_REMAINS)
else
// Less violent landing simply crushes every bone in your body.
crushed.Paralyze(30 SECONDS, ignore_canstun = TRUE)
diff --git a/code/modules/library/bibles.dm b/code/modules/library/bibles.dm
index 3cfc9c8b76b..5d3c6e276b4 100644
--- a/code/modules/library/bibles.dm
+++ b/code/modules/library/bibles.dm
@@ -132,7 +132,7 @@ GLOBAL_LIST_INIT(bibleitemstates, list(
to_chat(user, span_userdanger("[deity_name] SMITE thee!"))
add_memory_in_range(user, 7, /datum/memory/witnessed_gods_wrath, protagonist = user, deuteragonist = src, antagonist = deity_name)
user.client?.give_award(/datum/award/achievement/misc/gods_wrath, user)
- user.gib()
+ user.gib(DROP_ALL_REMAINS)
else
to_chat(user, span_userdanger("[deity_name] cast a curse upon thee!"))
user.AddComponent(/datum/component/omen/bible)
diff --git a/code/modules/mapfluff/ruins/objects_and_mobs/ash_walker_den.dm b/code/modules/mapfluff/ruins/objects_and_mobs/ash_walker_den.dm
index 480b26f5fab..5775f0a20f2 100644
--- a/code/modules/mapfluff/ruins/objects_and_mobs/ash_walker_den.dm
+++ b/code/modules/mapfluff/ruins/objects_and_mobs/ash_walker_den.dm
@@ -84,7 +84,7 @@
to_chat(deliverymob, span_warning("The Necropolis is pleased with your sacrifice. You feel confident your existence after death is secure."))
ashies.players_spawned -= deliverykey
H.investigate_log("has been gibbed by the necropolis tendril.", INVESTIGATE_DEATHS)
- H.gib()
+ H.gib(DROP_ALL_REMAINS)
atom_integrity = min(atom_integrity + max_integrity*0.05,max_integrity)//restores 5% hp of tendril
for(var/mob/living/L in view(src, 5))
if(L.mind?.has_antag_datum(/datum/antagonist/ashwalker))
diff --git a/code/modules/mapfluff/ruins/spaceruin_code/hilbertshotel.dm b/code/modules/mapfluff/ruins/spaceruin_code/hilbertshotel.dm
index 424e1db299e..af316034f93 100644
--- a/code/modules/mapfluff/ruins/spaceruin_code/hilbertshotel.dm
+++ b/code/modules/mapfluff/ruins/spaceruin_code/hilbertshotel.dm
@@ -428,7 +428,7 @@ GLOBAL_VAR_INIT(hhMysteryRoomNumber, rand(1, 999999))
if(unforeseen_consequences)
to_chat(unforeseen_consequences, span_warning("\The [H] starts to resonate. Forcing it to enter itself induces a bluespace paradox, violently tearing your body apart."))
unforeseen_consequences.investigate_log("has been gibbed by using [H] while inside of it.", INVESTIGATE_DEATHS)
- unforeseen_consequences.gib()
+ unforeseen_consequences.gib(DROP_ALL_REMAINS)
var/turf/targetturf = find_safe_turf()
if(!targetturf)
diff --git a/code/modules/mob/living/basic/basic_defense.dm b/code/modules/mob/living/basic/basic_defense.dm
index 8afb40f2912..87fe6f8fed1 100644
--- a/code/modules/mob/living/basic/basic_defense.dm
+++ b/code/modules/mob/living/basic/basic_defense.dm
@@ -148,7 +148,7 @@
apply_damage(500, damagetype = BRUTE)
else
investigate_log("has been gibbed by an explosion.", INVESTIGATE_DEATHS)
- gib()
+ gib(DROP_ALL_REMAINS)
if (EXPLODE_HEAVY)
var/bloss = 60
diff --git a/code/modules/mob/living/basic/icemoon/ice_whelp/ice_whelp.dm b/code/modules/mob/living/basic/icemoon/ice_whelp/ice_whelp.dm
index 292766be07b..f89009cc2d9 100644
--- a/code/modules/mob/living/basic/icemoon/ice_whelp/ice_whelp.dm
+++ b/code/modules/mob/living/basic/icemoon/ice_whelp/ice_whelp.dm
@@ -87,5 +87,5 @@
balloon_alert(src, "devouring...")
if(!do_after(src, 5 SECONDS, target))
return
- target.gib()
+ target.gib(DROP_ALL_REMAINS)
adjustBruteLoss(-1 * heal_on_cannibalize)
diff --git a/code/modules/mob/living/basic/pets/dog/corgi.dm b/code/modules/mob/living/basic/pets/dog/corgi.dm
index cb0df08d198..9e120c4e8c0 100644
--- a/code/modules/mob/living/basic/pets/dog/corgi.dm
+++ b/code/modules/mob/living/basic/pets/dog/corgi.dm
@@ -482,7 +482,7 @@
prey.investigate_log("has been sacrificed by [src].", INVESTIGATE_DEATHS)
if (isliving(prey))
var/mob/living/living_sacrifice = prey
- living_sacrifice.gib()
+ living_sacrifice.gib(DROP_ALL_REMAINS)
else
qdel(prey)
diff --git a/code/modules/mob/living/carbon/alien/alien_defense.dm b/code/modules/mob/living/carbon/alien/alien_defense.dm
index bc7a663206a..63ef8830435 100644
--- a/code/modules/mob/living/carbon/alien/alien_defense.dm
+++ b/code/modules/mob/living/carbon/alien/alien_defense.dm
@@ -103,7 +103,7 @@ In all, this is a lot like the monkey code. /N
var/obj/item/organ/internal/ears/ears = get_organ_slot(ORGAN_SLOT_EARS)
switch (severity)
if (EXPLODE_DEVASTATE)
- gib()
+ gib(DROP_ALL_REMAINS)
if (EXPLODE_HEAVY)
take_overall_damage(60, 60)
diff --git a/code/modules/mob/living/carbon/alien/death.dm b/code/modules/mob/living/carbon/alien/death.dm
index 718186c9078..f5a0b7ace1b 100644
--- a/code/modules/mob/living/carbon/alien/death.dm
+++ b/code/modules/mob/living/carbon/alien/death.dm
@@ -1,5 +1,5 @@
-/mob/living/carbon/alien/spawn_gibs(with_bodyparts)
- if(with_bodyparts)
+/mob/living/carbon/alien/spawn_gibs(drop_bitflags=NONE)
+ if(drop_bitflags & DROP_BODYPARTS)
new /obj/effect/gibspawner/xeno(drop_location(), src)
else
new /obj/effect/gibspawner/xeno/bodypartless(drop_location(), src)
diff --git a/code/modules/mob/living/carbon/alien/larva/death.dm b/code/modules/mob/living/carbon/alien/larva/death.dm
index 8fd6329a0c1..4b7f9f93218 100644
--- a/code/modules/mob/living/carbon/alien/larva/death.dm
+++ b/code/modules/mob/living/carbon/alien/larva/death.dm
@@ -6,8 +6,8 @@
update_icons()
-/mob/living/carbon/alien/larva/spawn_gibs(with_bodyparts)
- if(with_bodyparts)
+/mob/living/carbon/alien/larva/spawn_gibs(drop_bitflags=NONE)
+ if(drop_bitflags & DROP_BODYPARTS)
new /obj/effect/gibspawner/larva(drop_location(), src)
else
new /obj/effect/gibspawner/larva/bodypartless(drop_location(), src)
diff --git a/code/modules/mob/living/carbon/alien/organs.dm b/code/modules/mob/living/carbon/alien/organs.dm
index 5ef9b23c418..af796c9ff68 100644
--- a/code/modules/mob/living/carbon/alien/organs.dm
+++ b/code/modules/mob/living/carbon/alien/organs.dm
@@ -336,7 +336,7 @@
if(owner)
shake_camera(owner, 2, 5)
owner.investigate_log("has been gibbed by something inside [owner.p_their()] stomach.", INVESTIGATE_DEATHS)
- owner.gib()
+ owner.gib(DROP_ALL_REMAINS)
qdel(src)
/obj/item/organ/internal/stomach/alien/proc/eject_stomach(list/turf/targets, spit_range, content_speed, particle_delay, particle_count=4)
diff --git a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm
index 37fb827f3a5..5a6746ec6fa 100644
--- a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm
+++ b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm
@@ -126,8 +126,8 @@
if(gib_on_success)
new_xeno.visible_message(span_danger("[new_xeno] bursts out of [owner] in a shower of gore!"), span_userdanger("You exit [owner], your previous host."), span_hear("You hear organic matter ripping and tearing!"))
- // owner.investigate_log("has been gibbed by an alien larva.", INVESTIGATE_DEATHS) SKYRAT EDIT REMOVAL - ALIEN QOL - don't ever gib host.
- // owner.gib(TRUE) SKYRAT EDIT REMOVAL - ALIEN QOL - don't ever gib host.
+ //owner.investigate_log("has been gibbed by an alien larva.", INVESTIGATE_DEATHS) // SKYRAT EDIT REMOVAL - ALIEN QOL - don't ever gib host.
+ //owner.gib(DROP_ORGANS|DROP_BODYPARTS)
// SKYRAT EDIT ADDITION BEGIN - ALIEN QOL - You aren't getting gibbed but you aren't going to be having fun
owner.apply_damage(150, BRUTE, BODY_ZONE_CHEST, wound_bonus = 30, sharpness = SHARP_POINTY)
owner.spawn_gibs()
diff --git a/code/modules/mob/living/carbon/death.dm b/code/modules/mob/living/carbon/death.dm
index 4d14fb7df66..bbf82ccefc5 100644
--- a/code/modules/mob/living/carbon/death.dm
+++ b/code/modules/mob/living/carbon/death.dm
@@ -24,9 +24,9 @@
M.Scale(1.8, 1.2)
animate(src, time = 40, transform = M, easing = SINE_EASING)
-/mob/living/carbon/gib(no_brain, no_organs, no_bodyparts, safe_gib = FALSE)
+/mob/living/carbon/gib(drop_bitflags=NONE)
add_memory_in_range(src, 7, /datum/memory/witness_gib, protagonist = src)
- if(safe_gib) // If you want to keep all the mob's items and not have them deleted
+ if(drop_bitflags & DROP_ITEMS)
for(var/obj/item/W in src)
dropItemToGround(W)
if(prob(50))
@@ -37,39 +37,33 @@
visible_message(span_danger("[M] bursts out of [src]!"))
return ..()
-/mob/living/carbon/spill_organs(no_brain, no_organs, no_bodyparts)
+/mob/living/carbon/spill_organs(drop_bitflags=NONE)
var/atom/Tsec = drop_location()
- if(!no_bodyparts)
- if(no_organs)//so the organs don't get transferred inside the bodyparts we'll drop.
- for(var/organ in organs)
- if(no_brain || !istype(organ, /obj/item/organ/internal/brain))
- qdel(organ)
- else //we're going to drop all bodyparts except chest, so the only organs that needs spilling are those inside it.
- for(var/obj/item/organ/organ as anything in organs)
- if(no_brain && istype(organ, /obj/item/organ/internal/brain))
- qdel(organ) //so the brain isn't transferred to the head when the head drops.
- continue
- var/org_zone = check_zone(organ.zone) //both groin and chest organs.
- if(org_zone == BODY_ZONE_CHEST)
- organ.Remove(src)
- organ.forceMove(Tsec)
- organ.throw_at(get_edge_target_turf(src,pick(GLOB.alldirs)),rand(1,3),5)
- else
- for(var/obj/item/organ/organ as anything in organs)
- if(no_brain && istype(organ, /obj/item/organ/internal/brain))
- qdel(organ)
- continue
- if(no_organs && !istype(organ, /obj/item/organ/internal/brain))
- qdel(organ)
- continue
+
+ for(var/obj/item/organ/organ as anything in organs)
+ if((drop_bitflags & DROP_BRAIN) && istype(organ, /obj/item/organ/internal/brain))
+ if(drop_bitflags & DROP_BODYPARTS)
+ continue // the head will drop, so the brain should stay inside
+
organ.Remove(src)
organ.forceMove(Tsec)
- organ.throw_at(get_edge_target_turf(src,pick(GLOB.alldirs)),rand(1,3),5)
+ organ.throw_at(get_edge_target_turf(src, pick(GLOB.alldirs)), rand(1,3), 5)
+ continue
+
+ if((drop_bitflags & DROP_ORGANS) && !istype(organ, /obj/item/organ/internal/brain))
+ if((drop_bitflags & DROP_BODYPARTS) && (check_zone(organ.zone) != BODY_ZONE_CHEST))
+ continue // only chest & groin organs will be ejected
+
+ organ.Remove(src)
+ organ.forceMove(Tsec)
+ organ.throw_at(get_edge_target_turf(src, pick(GLOB.alldirs)), rand(1,3), 5)
+ continue
+
+ qdel(organ)
-/// Launches all bodyparts away from the mob. skip_head will keep the head attached.
-/mob/living/carbon/spread_bodyparts(skip_head = FALSE)
+/mob/living/carbon/spread_bodyparts(drop_bitflags=NONE)
for(var/obj/item/bodypart/part as anything in bodyparts)
- if(skip_head && part.body_zone == BODY_ZONE_HEAD)
+ if(!(drop_bitflags & DROP_BRAIN) && part.body_zone == BODY_ZONE_HEAD)
continue
else if(part.body_zone == BODY_ZONE_CHEST)
continue
diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm
index 90b94689796..3c0ffb2536b 100644
--- a/code/modules/mob/living/carbon/human/death.dm
+++ b/code/modules/mob/living/carbon/human/death.dm
@@ -5,8 +5,8 @@ GLOBAL_LIST_EMPTY(dead_players_during_shift)
/mob/living/carbon/human/dust_animation()
new /obj/effect/temp_visual/dust_animation(loc, dna.species.dust_anim)
-/mob/living/carbon/human/spawn_gibs(with_bodyparts)
- if(with_bodyparts)
+/mob/living/carbon/human/spawn_gibs(drop_bitflags=NONE)
+ if(drop_bitflags & DROP_BODYPARTS)
new /obj/effect/gibspawner/human(drop_location(), src, get_static_viruses())
else
new /obj/effect/gibspawner/human/bodypartless(drop_location(), src, get_static_viruses())
diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm
index b02aaf03b17..233f9fe25fd 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -414,7 +414,7 @@
if(EXPLODE_LIGHT)
SSexplosions.low_mov_atom += thing
investigate_log("has been gibbed by an explosion.", INVESTIGATE_DEATHS)
- gib()
+ gib(DROP_ALL_REMAINS)
return TRUE
else
brute_loss = 500
diff --git a/code/modules/mob/living/carbon/human/species_types/dullahan.dm b/code/modules/mob/living/carbon/human/species_types/dullahan.dm
index 8b429bbeb8f..4ea4b7f0c00 100644
--- a/code/modules/mob/living/carbon/human/species_types/dullahan.dm
+++ b/code/modules/mob/living/carbon/human/species_types/dullahan.dm
@@ -74,7 +74,7 @@
if(QDELETED(my_head))
my_head = null
human.investigate_log("has been gibbed by the loss of [human.p_their()] head.", INVESTIGATE_DEATHS)
- human.gib()
+ human.gib(DROP_ALL_REMAINS)
return
if(my_head.loc.name != human.real_name && istype(my_head.loc, /obj/item/bodypart/head))
@@ -87,7 +87,7 @@
if(illegal_head)
my_head = null
human.investigate_log("has been gibbed by having an illegal head put on [human.p_their()] shoulders.", INVESTIGATE_DEATHS)
- human.gib() // Yeah so giving them a head on their body is really not a good idea, so their original head will remain but uh, good luck fixing it after that.
+ human.gib(DROP_ALL_REMAINS) // Yeah so giving them a head on their body is really not a good idea, so their original head will remain but uh, good luck fixing it after that.
/datum/species/dullahan/proc/update_vision_perspective(mob/living/carbon/human/human)
var/obj/item/organ/internal/eyes/eyes = human.get_organ_slot(ORGAN_SLOT_EYES)
@@ -265,7 +265,7 @@
if(isdullahan(human))
var/datum/species/dullahan/dullahan_species = human.dna.species
dullahan_species.my_head = null
- owner.gib()
+ owner.gib(DROP_ALL_REMAINS)
owner = null
return ..()
diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm
index 9eddc41b127..6174a5793bc 100644
--- a/code/modules/mob/living/death.dm
+++ b/code/modules/mob/living/death.dm
@@ -1,12 +1,14 @@
/**
* Blow up the mob into giblets
*
- * Arguments:
- * * no_brain - Should the mob NOT drop a brain?
- * * no_organs - Should the mob NOT drop organs?
- * * no_bodyparts - Should the mob NOT drop bodyparts?
-*/
-/mob/living/proc/gib(no_brain, no_organs, no_bodyparts)
+ * drop_bitflags: (see code/__DEFINES/blood.dm)
+ * * DROP_BRAIN - Gibbed mob will drop a brain
+ * * DROP_ORGANS - Gibbed mob will drop organs
+ * * DROP_BODYPARTS - Gibbed mob will drop bodyparts (arms, legs, etc.)
+ * * DROP_ITEMS - Gibbed mob will drop carried items (otherwise they get deleted)
+ * * DROP_ALL_REMAINS - Gibbed mob will drop everything
+**/
+/mob/living/proc/gib(drop_bitflags=NONE)
var/prev_lying = lying_angle
if(stat != DEAD)
death(TRUE)
@@ -15,25 +17,46 @@
gib_animation()
ghostize()
- spill_organs(no_brain, no_organs, no_bodyparts, TRUE) //SKYRAT EDIT CHANGE - ORIGINAL: spill_organs(no_brain, no_organs, no_bodyparts)
+ spill_organs(drop_bitflags)
- if(!no_bodyparts)
- spread_bodyparts(no_brain, no_organs)
+ if(drop_bitflags & DROP_BODYPARTS)
+ spread_bodyparts(drop_bitflags)
- spawn_gibs(no_bodyparts)
- SEND_SIGNAL(src, COMSIG_LIVING_GIBBED, no_brain, no_organs, no_bodyparts)
+ spawn_gibs(drop_bitflags)
+ SEND_SIGNAL(src, COMSIG_LIVING_GIBBED, drop_bitflags)
qdel(src)
/mob/living/proc/gib_animation()
return
-/mob/living/proc/spawn_gibs()
+/**
+ * Spawn bloody gib mess on the floor
+ *
+ * drop_bitflags: (see code/__DEFINES/blood.dm)
+ * * DROP_BODYPARTS - Gibs will spawn with bodypart limbs present
+**/
+/mob/living/proc/spawn_gibs(drop_bitflags=NONE)
new /obj/effect/gibspawner/generic(drop_location(), src, get_static_viruses())
-/mob/living/proc/spill_organs()
+/**
+ * Drops a mob's organs on the floor
+ *
+ * drop_bitflags: (see code/__DEFINES/blood.dm)
+ * * DROP_BRAIN - Mob will drop a brain
+ * * DROP_ORGANS - Mob will drop organs
+ * * DROP_BODYPARTS - Mob will drop bodyparts (arms, legs, etc.)
+ * * DROP_ALL_REMAINS - Mob will drop everything
+**/
+/mob/living/proc/spill_organs(drop_bitflags=NONE)
return
-/mob/living/proc/spread_bodyparts()
+/**
+ * Launches all bodyparts away from the mob
+ *
+ * drop_bitflags: (see code/__DEFINES/blood.dm)
+ * * DROP_BRAIN - Detaches the head from the mob and launches it away from the body
+**/
+/mob/living/proc/spread_bodyparts(drop_bitflags=NONE)
return
/**
diff --git a/code/modules/mob/living/silicon/ai/ai_defense.dm b/code/modules/mob/living/silicon/ai/ai_defense.dm
index ae17e13f269..7445815c9d7 100644
--- a/code/modules/mob/living/silicon/ai/ai_defense.dm
+++ b/code/modules/mob/living/silicon/ai/ai_defense.dm
@@ -43,7 +43,7 @@
switch(severity)
if(EXPLODE_DEVASTATE)
investigate_log("has been gibbed by an explosion.", INVESTIGATE_DEATHS)
- gib()
+ gib(DROP_ALL_REMAINS)
if(EXPLODE_HEAVY)
if (stat != DEAD)
adjustBruteLoss(60)
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index 30559e616b5..fe28d41fe84 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -385,7 +385,7 @@
else
explosion(src, devastation_range = -1, light_impact_range = 2)
investigate_log("has self-destructed.", INVESTIGATE_DEATHS)
- gib()
+ gib(DROP_ALL_REMAINS)
/mob/living/silicon/robot/proc/UnlinkSelf()
set_connected_ai(null)
diff --git a/code/modules/mob/living/silicon/robot/robot_defense.dm b/code/modules/mob/living/silicon/robot/robot_defense.dm
index f820d3ca1cf..09440ec22a3 100644
--- a/code/modules/mob/living/silicon/robot/robot_defense.dm
+++ b/code/modules/mob/living/silicon/robot/robot_defense.dm
@@ -414,14 +414,14 @@ GLOBAL_LIST_INIT(blacklisted_borg_hats, typecacheof(list( //Hats that don't real
adjustBruteLoss(30)
else
investigate_log("has been gibbed a blob.", INVESTIGATE_DEATHS)
- gib()
+ gib(DROP_ALL_REMAINS)
return TRUE
/mob/living/silicon/robot/ex_act(severity, target)
switch(severity)
if(EXPLODE_DEVASTATE)
investigate_log("has been gibbed by an explosion.", INVESTIGATE_DEATHS)
- gib()
+ gib(DROP_ALL_REMAINS)
return
if(EXPLODE_HEAVY)
if (stat != DEAD)
diff --git a/code/modules/mob/living/simple_animal/hostile/gorilla/gorilla.dm b/code/modules/mob/living/simple_animal/hostile/gorilla/gorilla.dm
index cceb0cdf58c..6f5952382c6 100644
--- a/code/modules/mob/living/simple_animal/hostile/gorilla/gorilla.dm
+++ b/code/modules/mob/living/simple_animal/hostile/gorilla/gorilla.dm
@@ -92,8 +92,8 @@
/mob/living/simple_animal/hostile/gorilla/CanSmashTurfs(turf/T)
return iswallturf(T)
-/mob/living/simple_animal/hostile/gorilla/gib(no_brain)
- if(!no_brain)
+/mob/living/simple_animal/hostile/gorilla/gib(drop_bitflags=DROP_BRAIN)
+ if(drop_bitflags & DROP_BRAIN)
var/mob/living/brain/gorilla_brain = new(drop_location())
gorilla_brain.name = real_name
gorilla_brain.real_name = real_name
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm
index 8a92ca680f7..5c63ca4e884 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm
@@ -607,7 +607,7 @@
holder_animal.mind.transfer_to(possessor)
possessor.mind.grab_ghost(force = TRUE)
holder_animal.investigate_log("has been gibbed by [src].", INVESTIGATE_DEATHS)
- holder_animal.gib()
+ holder_animal.gib(DROP_ALL_REMAINS)
return ..()
return ..()
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm
index 58d9988256f..d91f312b454 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm
@@ -211,7 +211,7 @@
mother.children_list -= src
visible_message(span_warning("[src] explodes!"))
explosion(src, flame_range = 3, adminlog = FALSE)
- gib()
+ gib(DROP_ALL_REMAINS)
/obj/effect/goliath_tentacle/broodmother
grapple_time = 1 SECONDS
diff --git a/code/modules/mob_spawn/ghost_roles/mining_roles.dm b/code/modules/mob_spawn/ghost_roles/mining_roles.dm
index 98c6dbc6d45..9a1536a83d8 100644
--- a/code/modules/mob_spawn/ghost_roles/mining_roles.dm
+++ b/code/modules/mob_spawn/ghost_roles/mining_roles.dm
@@ -207,7 +207,7 @@
yolk.underwear = "Nude"
yolk.equipOutfit(/datum/outfit/ashwalker)//this is an authentic mess we're making
yolk.update_body()
- yolk.gib()
+ yolk.gib(DROP_ALL_REMAINS)
QDEL_NULL(egg)
return ..()
diff --git a/code/modules/mod/modules/modules_ninja.dm b/code/modules/mod/modules/modules_ninja.dm
index 90c731a7c36..7a38238594d 100644
--- a/code/modules/mod/modules/modules_ninja.dm
+++ b/code/modules/mod/modules/modules_ninja.dm
@@ -275,7 +275,7 @@
var/mob/living/living_user = user
to_chat(living_user, span_danger("fATaL EERRoR: 382200-*#00CODE RED\nUNAUTHORIZED USE DETECteD\nCoMMENCING SUB-R0UTIN3 13...\nTERMInATING U-U-USER..."))
living_user.investigate_log("has been gibbed by using a MODsuit equipped with [src].", INVESTIGATE_DEATHS)
- living_user.gib()
+ living_user.gib(DROP_ALL_REMAINS)
/obj/item/mod/module/dna_lock/reinforced/on_emp(datum/source, severity)
return
diff --git a/code/modules/power/apc/apc_malf.dm b/code/modules/power/apc/apc_malf.dm
index f13b588842a..3b070368804 100644
--- a/code/modules/power/apc/apc_malf.dm
+++ b/code/modules/power/apc/apc_malf.dm
@@ -69,7 +69,7 @@
if(forced)
occupier.forceMove(drop_location())
INVOKE_ASYNC(occupier, TYPE_PROC_REF(/mob/living, death))
- occupier.gib()
+ occupier.gib(DROP_ALL_REMAINS)
if(!occupier.nuking) //Pinpointers go back to tracking the nuke disk, as long as the AI (somehow) isn't mid-nuking.
for(var/obj/item/pinpointer/nuke/disk_pinpointers in GLOB.pinpointer_list)
diff --git a/code/modules/projectiles/guns/ballistic/launchers.dm b/code/modules/projectiles/guns/ballistic/launchers.dm
index 0b676ae3dfa..83c19bf9350 100644
--- a/code/modules/projectiles/guns/ballistic/launchers.dm
+++ b/code/modules/projectiles/guns/ballistic/launchers.dm
@@ -97,7 +97,7 @@
REMOVE_TRAIT(user, TRAIT_NO_TRANSFORM, REF(src))
process_fire(user, user, TRUE)
if(!QDELETED(user)) //if they weren't gibbed by the explosion, take care of them for good.
- user.gib()
+ user.gib(DROP_ALL_REMAINS)
return MANUAL_SUICIDE
else
sleep(0.5 SECONDS)
diff --git a/code/modules/projectiles/projectile/special/rocket.dm b/code/modules/projectiles/projectile/special/rocket.dm
index 899f737d8cc..08a2c18c2f7 100644
--- a/code/modules/projectiles/projectile/special/rocket.dm
+++ b/code/modules/projectiles/projectile/special/rocket.dm
@@ -53,7 +53,7 @@ among other potential differences. This granularity is helpful for things like t
if(random_crit_gib)
var/mob/living/gibbed_dude = target
new /obj/effect/temp_visual/crit(get_turf(gibbed_dude))
- gibbed_dude.gib()
+ gibbed_dude.gib(DROP_ALL_REMAINS)
/// PM9 HEAP rocket - the anti-anything missile you always craved.
/obj/projectile/bullet/rocket/heap
diff --git a/code/modules/reagents/chemistry/reagents/drug_reagents.dm b/code/modules/reagents/chemistry/reagents/drug_reagents.dm
index 56552fccf63..95dcf499528 100644
--- a/code/modules/reagents/chemistry/reagents/drug_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/drug_reagents.dm
@@ -855,4 +855,4 @@
span_userdanger("GORE! GORE! GORE! YOU'RE GORE! TOO MUCH GORE! YOU'RE GORE! GORE! IT'S OVER! GORE! GORE! YOU'RE GORE! TOO MUCH G-"),
)
new /obj/structure/bouncy_castle(gored.loc, gored)
- gored.gib(TRUE, TRUE, TRUE) //no brain, no organs, no bodyparts
+ gored.gib()
diff --git a/code/modules/reagents/chemistry/recipes/others.dm b/code/modules/reagents/chemistry/recipes/others.dm
index b632bc7b6c8..7afd6918261 100644
--- a/code/modules/reagents/chemistry/recipes/others.dm
+++ b/code/modules/reagents/chemistry/recipes/others.dm
@@ -584,7 +584,7 @@
var/location = get_turf(M)
if(iscarbon(M))
if(ismonkey(M))
- M.gib()
+ M.gib(DROP_ALL_REMAINS)
else
M.vomit(VOMIT_CATEGORY_BLOOD)
new /mob/living/carbon/human/species/monkey(location, TRUE)
diff --git a/code/modules/religion/honorbound/honorbound_rites.dm b/code/modules/religion/honorbound/honorbound_rites.dm
index 6ba557d5a30..c9c9e711354 100644
--- a/code/modules/religion/honorbound/honorbound_rites.dm
+++ b/code/modules/religion/honorbound/honorbound_rites.dm
@@ -59,7 +59,7 @@
if(joining_now.mind.has_antag_datum(/datum/antagonist/cult))//what the fuck?!
to_chat(user, span_warning("[GLOB.deity] has seen a true, dark evil in [joining_now]'s heart, and they have been smitten!"))
playsound(get_turf(religious_tool), 'sound/effects/pray.ogg', 50, TRUE)
- joining_now.gib(TRUE)
+ joining_now.gib(DROP_ORGANS|DROP_BODYPARTS)
return FALSE
var/datum/brain_trauma/special/honorbound/honor = user.has_trauma_type(/datum/brain_trauma/special/honorbound)
if(joining_now in honor.guilty)
diff --git a/code/modules/research/anomaly/anomaly_core.dm b/code/modules/research/anomaly/anomaly_core.dm
index 56220956182..febb25add53 100644
--- a/code/modules/research/anomaly/anomaly_core.dm
+++ b/code/modules/research/anomaly/anomaly_core.dm
@@ -23,7 +23,7 @@
/obj/item/assembly/signaler/anomaly/manual_suicide(mob/living/carbon/user)
user.visible_message(span_suicide("[user]'s [src] is reacting to the radio signal, warping [user.p_their()] body!"))
user.set_suicide(TRUE)
- user.gib()
+ user.gib(DROP_ALL_REMAINS)
/obj/item/assembly/signaler/anomaly/attack_self()
return
diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm
index f81f328c0f3..b3945fe60c4 100644
--- a/code/modules/research/xenobiology/xenobiology.dm
+++ b/code/modules/research/xenobiology/xenobiology.dm
@@ -460,7 +460,7 @@
to_chat(user, span_userdanger("You explode!"))
explosion(user, devastation_range = 1, heavy_impact_range = 3, light_impact_range = 6, explosion_cause = src)
user.investigate_log("has been gibbed by an oil slime extract explosion.", INVESTIGATE_DEATHS)
- user.gib()
+ user.gib(DROP_ALL_REMAINS)
return
to_chat(user, span_notice("You stop feeding [src], and the feeling passes."))
diff --git a/code/modules/shuttle/on_move.dm b/code/modules/shuttle/on_move.dm
index ca49d579272..7c8b26b5d16 100644
--- a/code/modules/shuttle/on_move.dm
+++ b/code/modules/shuttle/on_move.dm
@@ -35,7 +35,7 @@ All ShuttleMove procs go here
SSblackbox.record_feedback("tally", "shuttle_gib", 1, M.type)
log_shuttle("[key_name(M)] was shuttle gibbed by [shuttle].")
M.investigate_log("has been gibbed by [shuttle].", INVESTIGATE_DEATHS)
- M.gib()
+ M.gib(DROP_ALL_REMAINS)
else //non-living mobs shouldn't be affected by shuttles, which is why this is an else
diff --git a/code/modules/spells/spell_types/shapeshift/_shape_status.dm b/code/modules/spells/spell_types/shapeshift/_shape_status.dm
index 10d42760c91..94e1d549af2 100644
--- a/code/modules/spells/spell_types/shapeshift/_shape_status.dm
+++ b/code/modules/spells/spell_types/shapeshift/_shape_status.dm
@@ -115,7 +115,7 @@
// Our caster inside was gibbed, mirror the gib to our mob
if(gibbed)
- owner.gib()
+ owner.gib(DROP_ALL_REMAINS)
// Otherwise our caster died, just make our mob die
else
diff --git a/code/modules/spells/spell_types/shapeshift/_shapeshift.dm b/code/modules/spells/spell_types/shapeshift/_shapeshift.dm
index a5e590685c0..5aecd863bce 100644
--- a/code/modules/spells/spell_types/shapeshift/_shapeshift.dm
+++ b/code/modules/spells/spell_types/shapeshift/_shapeshift.dm
@@ -132,7 +132,7 @@
// Gib our caster, and make sure to leave nothing behind
// (If we leave something behind, it'll drop on the turf of the pipe, which is kinda wrong.)
cast_on.investigate_log("has been gibbed by shapeshifting while ventcrawling.", INVESTIGATE_DEATHS)
- cast_on.gib(TRUE, TRUE, TRUE)
+ cast_on.gib()
/// Callback for the radial that allows the user to choose their species.
/datum/action/cooldown/spell/shapeshift/proc/check_menu(mob/living/caster)
diff --git a/code/modules/spells/spell_types/touch/smite.dm b/code/modules/spells/spell_types/touch/smite.dm
index bcd234979c6..f02ea8247dd 100644
--- a/code/modules/spells/spell_types/touch/smite.dm
+++ b/code/modules/spells/spell_types/touch/smite.dm
@@ -48,7 +48,7 @@
return TRUE
victim.investigate_log("has been gibbed by the smite spell.", INVESTIGATE_DEATHS)
- victim.gib()
+ victim.gib(DROP_ALL_REMAINS)
return TRUE
/obj/item/melee/touch_attack/smite
diff --git a/code/modules/vehicles/mecha/_mecha.dm b/code/modules/vehicles/mecha/_mecha.dm
index fdb53c47572..0652c554b8a 100644
--- a/code/modules/vehicles/mecha/_mecha.dm
+++ b/code/modules/vehicles/mecha/_mecha.dm
@@ -323,7 +323,7 @@
if(!ai.linked_core) // we probably shouldnt gib AIs with a core
unlucky_ai = occupant
ai.investigate_log("has been gibbed by having their mech destroyed.", INVESTIGATE_DEATHS)
- ai.gib() //No wreck, no AI to recover
+ ai.gib(DROP_ALL_REMAINS) //No wreck, no AI to recover
else
mob_exit(ai,silent = TRUE, forced = TRUE) // so we dont ghost the AI
continue
diff --git a/code/modules/vehicles/mecha/combat/savannah_ivanov.dm b/code/modules/vehicles/mecha/combat/savannah_ivanov.dm
index dae449d8388..e3926aa7d35 100644
--- a/code/modules/vehicles/mecha/combat/savannah_ivanov.dm
+++ b/code/modules/vehicles/mecha/combat/savannah_ivanov.dm
@@ -212,7 +212,7 @@
to_chat(crushed_victim, span_userdanger("[chassis] crashes down on you from above!"))
if(crushed_victim.stat != CONSCIOUS)
crushed_victim.investigate_log("has been gibbed by a falling Savannah Ivanov mech.", INVESTIGATE_DEATHS)
- crushed_victim.gib(FALSE, FALSE, FALSE)
+ crushed_victim.gib(DROP_ALL_REMAINS)
continue
crushed_victim.adjustBruteLoss(80)
diff --git a/code/modules/vehicles/mecha/equipment/tools/mining_tools.dm b/code/modules/vehicles/mecha/equipment/tools/mining_tools.dm
index 6aae4adaaee..de96f3ad5f6 100644
--- a/code/modules/vehicles/mecha/equipment/tools/mining_tools.dm
+++ b/code/modules/vehicles/mecha/equipment/tools/mining_tools.dm
@@ -122,7 +122,7 @@
SEND_SIGNAL(src, COMSIG_MECHA_DRILL_MOB, chassis, target)
else
target.investigate_log("has been gibbed by [src] (attached to [chassis]).", INVESTIGATE_DEATHS)
- target.gib()
+ target.gib(DROP_ALL_REMAINS)
else
//drill makes a hole
var/obj/item/bodypart/target_part = target.get_bodypart(target.get_random_valid_zone(BODY_ZONE_CHEST))
diff --git a/code/modules/vehicles/mecha/mecha_mob_interaction.dm b/code/modules/vehicles/mecha/mecha_mob_interaction.dm
index c5f440ac97e..07b13a27ec0 100644
--- a/code/modules/vehicles/mecha/mecha_mob_interaction.dm
+++ b/code/modules/vehicles/mecha/mecha_mob_interaction.dm
@@ -120,7 +120,7 @@
if(forced)//This should only happen if there are multiple AIs in a round, and at least one is Malf.
if(!AI.linked_core) //if the victim AI has no core
AI.investigate_log("has been gibbed by being forced out of their mech by another AI.", INVESTIGATE_DEATHS)
- AI.gib() //If one Malf decides to steal a mech from another AI (even other Malfs!), they are destroyed, as they have nowhere to go when replaced.
+ AI.gib(DROP_ALL_REMAINS) //If one Malf decides to steal a mech from another AI (even other Malfs!), they are destroyed, as they have nowhere to go when replaced.
AI = null
mecha_flags &= ~SILICON_PILOT
return
diff --git a/code/modules/vehicles/vehicle_key.dm b/code/modules/vehicles/vehicle_key.dm
index e1b45d55f0a..f6e5f7c4e28 100644
--- a/code/modules/vehicles/vehicle_key.dm
+++ b/code/modules/vehicles/vehicle_key.dm
@@ -41,7 +41,7 @@
switch(user.mind?.get_skill_level(/datum/skill/cleaning))
if(SKILL_LEVEL_NONE to SKILL_LEVEL_NOVICE) //Their mind is too weak to ascend as a janny
user.visible_message(span_suicide("[user] is putting \the [src] in [user.p_their()] mouth and is trying to become one with the janicart, but has no idea where to start! It looks like [user.p_theyre()] trying to commit suicide!"))
- user.gib()
+ user.gib(DROP_ALL_REMAINS)
return MANUAL_SUICIDE
if(SKILL_LEVEL_APPRENTICE to SKILL_LEVEL_JOURNEYMAN) //At least they tried
user.visible_message(span_suicide("[user] is putting \the [src] in [user.p_their()] mouth and has inefficiently become one with the janicart! It looks like [user.p_theyre()] trying to commit suicide!"))
diff --git a/code/modules/wiremod/shell/drone.dm b/code/modules/wiremod/shell/drone.dm
index dce5dca46ad..6f7afcfea04 100644
--- a/code/modules/wiremod/shell/drone.dm
+++ b/code/modules/wiremod/shell/drone.dm
@@ -32,7 +32,7 @@
/mob/living/circuit_drone/updatehealth()
. = ..()
if(health < 0)
- gib(no_brain = TRUE, no_organs = TRUE, no_bodyparts = TRUE)
+ gib()
/mob/living/circuit_drone/welder_act(mob/living/user, obj/item/tool)
. = ..()
diff --git a/code/modules/zombie/items.dm b/code/modules/zombie/items.dm
index 65716c0dbfa..dca26d366d8 100644
--- a/code/modules/zombie/items.dm
+++ b/code/modules/zombie/items.dm
@@ -74,7 +74,7 @@
if(target.stat == DEAD)
var/hp_gained = target.maxHealth
target.investigate_log("has been devoured by a zombie.", INVESTIGATE_DEATHS)
- target.gib()
+ target.gib(DROP_ALL_REMAINS)
var/need_mob_update
need_mob_update = user.adjustBruteLoss(-hp_gained, updating_health = FALSE)
need_mob_update += user.adjustToxLoss(-hp_gained, updating_health = FALSE)
diff --git a/modular_skyrat/master_files/code/modules/mob/living/carbon/death.dm b/modular_skyrat/master_files/code/modules/mob/living/carbon/death.dm
index b2d6c975652..e7c3348e585 100644
--- a/modular_skyrat/master_files/code/modules/mob/living/carbon/death.dm
+++ b/modular_skyrat/master_files/code/modules/mob/living/carbon/death.dm
@@ -1,18 +1,11 @@
// By temporarily removing the unspillable organs before calling the parent proc we can avoid Skyrat edits and make this less likely to break in the future
-/mob/living/carbon/spill_organs(no_brain, no_organs, no_bodyparts, gibbed = FALSE)
+/mob/living/carbon/spill_organs(drop_bitflags)
var/list/held_organs = list()
for(var/obj/item/organ/organ as anything in organs)
if(!organ.drop_when_organ_spilling)
held_organs.Add(organ)
organs.Remove(organ)
- // Organs always get spilled when the mob is gibbed
- if(gibbed)
- for(var/deleting_organ in held_organs)
- qdel(deleting_organ)
-
- return ..()
-
. = ..()
// put the unspillable organs back
diff --git a/modular_skyrat/master_files/code/modules/mob/living/carbon/human/death.dm b/modular_skyrat/master_files/code/modules/mob/living/carbon/human/death.dm
index b40e30ca8f8..7889b4f391c 100644
--- a/modular_skyrat/master_files/code/modules/mob/living/carbon/human/death.dm
+++ b/modular_skyrat/master_files/code/modules/mob/living/carbon/human/death.dm
@@ -1,8 +1,8 @@
// Pocket contents fly out when gibbed
-/mob/living/carbon/human/gib(no_brain, no_organs, no_bodyparts, safe_gib = FALSE)
- if(safe_gib) // we are just going to drop everything regardless
+/mob/living/carbon/human/gib(drop_bitflags=NONE)
+ if(drop_bitflags & DROP_ITEMS) // we are just going to drop everything regardless
return ..()
- if(no_bodyparts) // don't drop any items when the mob is being reduced to a paste
+ if(!(drop_bitflags & DROP_BODYPARTS)) // don't drop any items when the mob is being reduced to a paste
return ..()
var/obj/item/left_pocket = l_store
From a8691d6aa2f70234b9030547c014263f55378dd1 Mon Sep 17 00:00:00 2001
From: SkyratBot <59378654+SkyratBot@users.noreply.github.com>
Date: Mon, 9 Oct 2023 21:37:42 +0200
Subject: [PATCH 006/100] exodrone adventures are no longer database based [MDB
IGNORE] (#24112)
* exodrone adventures are no longer database based
* Fixes version numbers
* Update tgstation_schema.sql
---------
Co-authored-by: jimmyl <70376633+mc-oofert@users.noreply.github.com>
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
---
SQL/database_changelog.md | 9 +-
SQL/tgstation_schema.sql | 13 -
code/modules/explorer_drone/adventure.dm | 92 +--
.../example_adventures/a_model_earth.json | 570 ------------------
code/modules/explorer_drone/manager.dm | 60 +-
strings/exoadventures/britain_replica.json | 570 ++++++++++++++++++
strings/exoadventures/quantum_fizzics.json | 195 ++++++
strings/exoadventures/robots_wingman.json | 369 ++++++++++++
strings/exoadventures/space_yacht.json | 257 ++++++++
.../tree_in_the_middle_of_space.json | 0
.../tgui/interfaces/AdventureBrowser.tsx | 121 +---
11 files changed, 1443 insertions(+), 813 deletions(-)
delete mode 100644 code/modules/explorer_drone/example_adventures/a_model_earth.json
create mode 100644 strings/exoadventures/britain_replica.json
create mode 100644 strings/exoadventures/quantum_fizzics.json
create mode 100644 strings/exoadventures/robots_wingman.json
create mode 100644 strings/exoadventures/space_yacht.json
rename code/modules/explorer_drone/example_adventures/Theres_a_tree_in_the_middle_of_space.json => strings/exoadventures/tree_in_the_middle_of_space.json (100%)
diff --git a/SQL/database_changelog.md b/SQL/database_changelog.md
index ae588adf65d..b0f6ad08b25 100644
--- a/SQL/database_changelog.md
+++ b/SQL/database_changelog.md
@@ -2,7 +2,7 @@ Any time you make a change to the schema files, remember to increment the databa
Make sure to also update `DB_MAJOR_VERSION` and `DB_MINOR_VERSION`, which can be found in `code/__DEFINES/subsystem.dm`.
-The latest database version is 5.25 (5.24 for /tg/); The query to update the schema revision table is:
+The latest database version is 5.27 (5.25 for /tg/); The query to update the schema revision table is:
```sql
INSERT INTO `schema_revision` (`major`, `minor`) VALUES (5, 25);
@@ -15,6 +15,13 @@ INSERT INTO `SS13_schema_revision` (`major`, `minor`) VALUES (5, 25);
In any query remember to add a prefix to the table names if you use one.
+-----------------------------------------------------
+Version 5.27, 27 September 2023, by Jimmyl
+Removes the text_adventures table because it is no longer used
+```sql
+ DROP TABLE IF EXISTS `text_adventures`;
+```
+
-----------------------------------------------------
Version 5.26, 17 May 2023, by LemonInTheDark
Modified the library action table to fit ckeys properly, and to properly store ips.
diff --git a/SQL/tgstation_schema.sql b/SQL/tgstation_schema.sql
index ecc615880e8..0637e0da6f6 100644
--- a/SQL/tgstation_schema.sql
+++ b/SQL/tgstation_schema.sql
@@ -660,19 +660,6 @@ CREATE TABLE `game_log` (
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
---
--- Table structure for table `text_adventures`
---
-DROP TABLE IF EXISTS `text_adventures`;
-CREATE TABLE `text_adventures` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `adventure_data` LONGTEXT NOT NULL,
- `uploader` VARCHAR(32) NOT NULL,
- `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
- `approved` TINYINT(1) NOT NULL DEFAULT FALSE,
- PRIMARY KEY (`id`)
-) ENGINE=InnoDB;
-
--
-- Table structure for table `admin_connections`
--
diff --git a/code/modules/explorer_drone/adventure.dm b/code/modules/explorer_drone/adventure.dm
index 9718d6d5a49..56d83000f90 100644
--- a/code/modules/explorer_drone/adventure.dm
+++ b/code/modules/explorer_drone/adventure.dm
@@ -43,6 +43,7 @@
#define REQ_OPERATOR_FIELD "operator"
#define CURRENT_ADVENTURE_VERSION 1
+#define ADVENTURE_LOOK_PATH "strings/exoadventures/"
/// All possible adventures in raw form
GLOBAL_LIST_EMPTY(explorer_drone_adventure_db_entries)
@@ -50,34 +51,22 @@ GLOBAL_LIST_EMPTY(explorer_drone_adventure_db_entries)
/// Loads all adventures from DB
/proc/load_adventures()
. = list()
- if(!SSdbcore.Connect())
- GLOB.explorer_drone_adventure_db_entries = .
- return
- var/datum/db_query/Query = SSdbcore.NewQuery("SELECT id,adventure_data,uploader,timestamp,approved FROM [format_table_name("text_adventures")]")
- if(!Query.Execute())
- qdel(Query)
- return
- while(Query.NextRow())
+ for(var/filename in flist(ADVENTURE_LOOK_PATH))
+ var/raw_json = file2text(ADVENTURE_LOOK_PATH + filename)
+ var/list/json_decoded = json_decode(raw_json)
var/datum/adventure_db_entry/entry = new()
- entry.id = Query.item[1]
- entry.raw_json = Query.item[2]
- entry.uploader = Query.item[3]
- entry.timestamp = Query.item[4]
- entry.approved = Query.item[5]
+ entry.filename = filename
+ entry.raw_json = raw_json
+ entry.uploader = json_decoded["author"]
entry.extract_metadata()
. += entry
- qdel(Query)
GLOB.explorer_drone_adventure_db_entries = .
/datum/adventure_db_entry
- /// db id or null for freshly created adventures
- var/id
+ /// filename of the adventure
+ var/filename
/// actual adventure json string
var/raw_json
- /// ckey of last change user.
- var/uploader
- /// Time of last change.
- var/timestamp
/// Unapproved adventures won't be used for exploration sites.
var/approved = FALSE
/// Was the adventure used for exploration site this round.
@@ -85,6 +74,8 @@ GLOBAL_LIST_EMPTY(explorer_drone_adventure_db_entries)
//Variables below are extracted from the JSON
+ /// whoever made the json
+ var/uploader
/// json version
var/version
/// adventure name
@@ -100,61 +91,13 @@ GLOBAL_LIST_EMPTY(explorer_drone_adventure_db_entries)
return FALSE
return TRUE
-/// Updates this entry from db, if possible.
-/datum/adventure_db_entry/proc/refresh()
- if(id)
- //Check if our timestamp is fresh, if not update local and stop
- var/datum/db_query/SelectQuery = SSdbcore.NewQuery("SELECT adventure_data,uploader,timestamp,approved FROM [format_table_name("text_adventures")] WHERE id = :id",list("id" = id))
- if(!SelectQuery.warn_execute() || !SelectQuery.NextRow())
- qdel(SelectQuery)
- return
- raw_json = SelectQuery.item[1]
- uploader = SelectQuery.item[2]
- timestamp = SelectQuery.item[3]
- approved = SelectQuery.item[4]
- extract_metadata()
- qdel(SelectQuery)
- return
- // No ID, nothing to be done.
-
-/// Pushes this entry changes to DB
-/datum/adventure_db_entry/proc/save()
- if(id)
- //We're up to date, update db instead
- var/datum/db_query/UpdateQuery = SSdbcore.NewQuery("UPDATE [format_table_name("text_adventures")] SET adventure_data = :adventure_data,uploader = :uploader,approved = :approved WHERE id = :id AND timestamp < NOW()",
- list("id" = id, "adventure_data" = raw_json, "uploader" = usr.ckey, "approved" = approved))
- UpdateQuery.warn_execute()
- qdel(UpdateQuery)
- else
- // Create new entry
- var/datum/db_query/InsertQuery = SSdbcore.NewQuery("INSERT INTO [format_table_name("text_adventures")] (adventure_data, uploader) VALUES (:raw_json, :uploader)", list("raw_json" = raw_json, "uploader" = usr.ckey))
- if(!InsertQuery.warn_execute())
- qdel(InsertQuery)
- return FALSE
- id = InsertQuery.last_insert_id
- qdel(InsertQuery)
- refresh()
-
-/// Deletes the local AND db entry.
-/datum/adventure_db_entry/proc/remove()
- if(id)
- var/datum/db_query/DelQuery = SSdbcore.NewQuery("DELETE FROM [format_table_name("text_adventures")] WHERE id = :id", list("id" = id))
- if(!DelQuery.warn_execute())
- qdel(DelQuery)
- return FALSE
- log_admin("[key_name(usr)] deleted text adventure with id : [id], name : [name]")
- qdel(DelQuery)
- GLOB.explorer_drone_adventure_db_entries -= src
- qdel(src)
- return TRUE
-
/// Extracts fields that are used by adventure browser / generation before instantiating
/datum/adventure_db_entry/proc/extract_metadata()
if(!raw_json)
CRASH("Trying to extract metadata from empty adventure")
var/list/json_data = json_decode(raw_json)
if(!islist(json_data))
- CRASH("Invalid JSON for adventure with db id:[id]")
+ CRASH("Invalid JSON for adventure with at path:[filename]")
version = json_data[ADVENTURE_VERSION_FIELD] || 0
name = json_data[ADVENTURE_NAME_FIELD]
required_site_traits = json_data[ADVENTURE_REQUIRED_SITE_TRAITS_FIELD]
@@ -169,13 +112,13 @@ GLOBAL_LIST_EMPTY(explorer_drone_adventure_db_entries)
/datum/adventure_db_entry/proc/try_loading_adventure()
var/list/json_data = json_decode(raw_json)
if(!islist(json_data))
- CRASH("Invalid JSON in adventure with id:[id], name:[name]")
+ CRASH("Invalid JSON in adventure with path:[filename], name:[name]")
//Basic validation of required fields, don't even bother loading if they are missing.
var/static/list/required_fields = list(ADVENTURE_NAME_FIELD,ADVENTURE_STARTING_NODE_FIELD,ADVENTURE_NODES_FIELD)
for(var/field in required_fields)
if(!json_data[field])
- CRASH("Adventure id:[id], name:[name] missing [field] value")
+ CRASH("Adventure path:[filename], name:[name] missing [field] value")
var/datum/adventure/loaded_adventure = new
//load properties
@@ -191,16 +134,16 @@ GLOBAL_LIST_EMPTY(explorer_drone_adventure_db_entries)
var/datum/adventure_node/node = try_loading_node(node_data)
if(node)
if(loaded_adventure.nodes[node.id])
- CRASH("Duplicate [node.id] node in id:[id], name:[name] adventure")
+ CRASH("Duplicate [node.id] node in path:[filename], name:[name] adventure")
loaded_adventure.nodes[node.id] = node
loaded_adventure.triggers = json_data[ADVENTURE_TRIGGERS_FIELD]
if(!loaded_adventure.validate())
- CRASH("Validation failed for id:[id], name:[name] adventure")
+ CRASH("Validation failed for path:[filename], name:[name] adventure")
return loaded_adventure
/datum/adventure_db_entry/proc/try_loading_node(node_data)
if(!islist(node_data))
- CRASH("Invalid adventure node data in id:[id], name:[name] adventure.")
+ CRASH("Invalid adventure node data in path:[filename], name:[name] adventure.")
var/datum/adventure_node/fresh_node = new
fresh_node.id = node_data[NODE_NAME_FIELD]
fresh_node.description = node_data[NODE_DESCRIPTION_FIELD]
@@ -493,6 +436,7 @@ GLOBAL_LIST_EMPTY(explorer_drone_adventure_db_entries)
if("exists")
return qkey in qualities
+#undef ADVENTURE_LOOK_PATH
#undef ADVENTURE_VERSION_FIELD
#undef CURRENT_ADVENTURE_VERSION
diff --git a/code/modules/explorer_drone/example_adventures/a_model_earth.json b/code/modules/explorer_drone/example_adventures/a_model_earth.json
deleted file mode 100644
index 908080b5834..00000000000
--- a/code/modules/explorer_drone/example_adventures/a_model_earth.json
+++ /dev/null
@@ -1,570 +0,0 @@
-{
- "adventure_name": "A Model Earth",
- "version": 1,
- "author": "Armhulen",
- "starting_node": "Planet Start",
- "starting_qualities": {
- "Long Range Scan Report": 0,
- "UFOs Shot Down": 0
- },
- "required_site_traits": [
- "in space"
- ],
- "loot_categories": [
- "research"
- ],
- "scan_band_mods": {},
- "deep_scan_description": "",
- "triggers": [],
- "nodes": [
- {
- "name": "Planet Start",
- "description": "You come across a grey planet. It looks familiar, though you swore you've never come across this sector of space before.",
- "choices": [
- {
- "key": "choice 0",
- "name": "Ignore the planet.",
- "exit_node": "FAIL",
- "delay": 0,
- "delay_message": "Whatever, there's a lot of planets in space. Must be a hunch!"
- },
- {
- "key": "choice 1",
- "name": "Begin Orbital Scan",
- "exit_node": "Scanning from Orbit",
- "requirements": [
- {
- "quality": "Long Range Scan Report",
- "operator": "==",
- "value": 0
- }
- ],
- "delay": 30,
- "delay_message": "Scanning planet..."
- },
- {
- "key": "choice 8",
- "name": "Descend Into Orbit",
- "exit_node": "Orbital Descent",
- "delay": 30,
- "delay_message": "Descending into Orbit..."
- }
- ],
- "image": null,
- "raw_image": "data:image/png;base64,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"
- },
- {
- "name": "Scanning from Orbit",
- "description": "You initiate a long range scan from orbit:\nThis planet has a smoggy cover that blocks any good look at the surface, yet it has a mostly survivable atmosphere.\nThis planet has zero life signs.\n",
- "choices": [
- {
- "key": "choice 9",
- "name": "Stash that Report...",
- "exit_node": "Planet Start",
- "delay": 0
- }
- ],
- "image": null,
- "on_enter_effects": [
- {
- "effect_type": "Add",
- "quality": "Long Range Scan Report",
- "value": 1
- }
- ],
- "raw_image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAABkBAMAAAAxqGI4AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAASUExURQAAAP///1lWUqwyMmlqakZHRwPX/kkAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAL5SURBVGje7ZldbqMwFIXtKnkvO4huyAYmG0CWea8i2P9Wxv/Y2MTYvjBVO4c8FET8+dxzDW5Ldqr73Hcf7fbemfwu+p1tkM+jILTbfeu2stNbDDSkklXnzNRbyUqUqbM/oVr5AFhOus5iUK3A/fmEW0BRHjCtwFPqj6NQS6GIVu5PTXEXnJUOjfLxXEOITYWitXECQk6BUOx6pSDkKAj4F6mrFxLEdNctAdl8gJVmBRBXy6tXcrScwwvXsufikXIP1qId5t2iz0D4osFClAga5MJDDbJaEUDJjF6eyZohxATjlhym9kkcMzhkIBQJ0g+pe2klJFWtG4DrgRSkeEUkjDDWA09TbPJdM6RXnySlDnLpYyO9/GhtQChthYhSMXeyup0aSFkoCYirVqJkdcnHEMaXakVeHIQUQYBPwSFdMB86IEBYolrAtyi1kF4asOIT40Ekq4JVQvS0R3UYI5G5GFLYwuKRO3l69dMEkxnc5MR8K6RCF9VL2sioe2tdLc6GRggROUDve5lcA9usXpw0So4Go5OwE0YySqutED33eZKH12TSyJJTK0RNFx6LFb4yMiI4uajJQmxlWT3tTsybEfxUnA0t9miGmNnCY54DMxNiJu7V6HLx89BO2iHLhIUXPxUleWVjf1SiZbvCHkEuLqX0brIM4hUfwkxERkKvdiPhxksGw3UuNpERmpuLeKGoBRM8k5WP/gsBsnrkAphUVGOJHeuIwPBDMcks6vmAUazkbtjXgAIhqVW+QHAYZHxnBIkRheKbGbAgJH6NIAcitWFlwmQQck28EzEDUdqwQnClrIxH+pA63od1EpgpHiP7i3ccSjEj/yd258SYqendLCR0UfcCyUK0B9KkbCYNBnZLRzIcC9HNdSzDODkYoraOB0eim+vgSIjcKM4HM06J5Hqak1Mi+d9ce3VGc5Ef01zXM5pLQN46oR0O5G0kKP+9nM+CfP1rSDqTwqTqmqvQX91SLINcvzGkLJPrCev9HMj8oyDk10MI+Qt3vM7Ve2h01AAAAABJRU5ErkJggg=="
- },
- {
- "name": "Orbital Descent",
- "description": "As you descend into orbit, you see a flying object headed straight for you!\nA garbled voice begins to call out to your drone, but there's no time to decipher it!",
- "choices": [
- {
- "key": "choice 2",
- "name": "Blast the damn UFO!",
- "exit_node": "Tractor Beam",
- "on_selection_effects": [
- {
- "effect_type": "Add",
- "quality": "Tractor Beam Turns",
- "value": 2
- },
- {
- "effect_type": "Add",
- "quality": "UFOs Shot Down",
- "value": 1
- }
- ],
- "delay": 30,
- "delay_message": "Blasting UFO!"
- },
- {
- "key": "choice 3",
- "name": "Attempt Evasive Maneuvers!",
- "exit_node": "UFO Evasion!",
- "on_selection_effects": [
- {
- "effect_type": "Add",
- "quality": "UFOs Violently Crashed Into",
- "value": {
- "value_type": "random",
- "low": 0,
- "high": 1
- }
- }
- ],
- "delay": 30,
- "delay_message": "You attempt to dodge the UFO..."
- },
- {
- "key": "choice 7",
- "name": "Do NOTHING. Jesus take the wheel!",
- "exit_node": "FAIL_DEATH",
- "delay": 30,
- "delay_message": "What? Why?!"
- }
- ],
- "image": null,
- "on_enter_effects": [
- {
- "effect_type": "Add",
- "quality": "Garbled Transmissions",
- "value": 1
- }
- ],
- "raw_image": "data:image/png;base64,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"
- },
- {
- "name": "UFO Evasion!",
- "description": "Were you good enough at flying to avoid the UFO?",
- "choices": [
- {
- "key": "choice 4",
- "name": "No, Back to flight school with you!",
- "exit_node": "FAIL_DEATH",
- "requirements": [
- {
- "quality": "UFOs Violently Crashed Into",
- "operator": "==",
- "value": 1
- }
- ],
- "delay": 0
- },
- {
- "key": "choice 5",
- "name": "You barely avoided them! Nice!",
- "exit_node": "Tractor Beam",
- "on_selection_effects": [
- {
- "effect_type": "Add",
- "quality": "Tractor Beam Turns",
- "value": 2
- }
- ],
- "requirements": [
- {
- "quality": "UFOs Violently Crashed Into",
- "operator": "==",
- "value": 0
- }
- ],
- "delay": 0
- }
- ],
- "image": "default"
- },
- {
- "name": "Tractor Beam",
- "description": "Before you have time to think, your drone is captured by a Tractor beam! Now you've gone and done it.\n\nYou should have some time before you are pulled in.",
- "choices": [
- {
- "key": "choice 6",
- "name": "Decipher Garbled Transmission",
- "exit_node": "Deciphering Transmission",
- "requirements": [
- {
- "quality": "Garbled Transmissions",
- "operator": "==",
- "value": 1
- },
- {
- "quality": "Tractor Beam Turns",
- "operator": ">",
- "value": 1
- }
- ],
- "delay": 30,
- "delay_message": "Decipering..."
- },
- {
- "key": "choice 10",
- "name": "Look at the surface of the planet",
- "exit_node": "Looking at the Surface",
- "requirements": [
- {
- "quality": "Tractor Beam Turns",
- "operator": ">",
- "value": 1
- }
- ],
- "delay": 10,
- "delay_message": "Looking out window..."
- },
- {
- "key": "choice 13",
- "name": "Let the beam pull you in and dock you",
- "exit_node": "Landed, Kinda",
- "on_selection_effects": [
- {
- "effect_type": "Set",
- "quality": "Tractor Beam Turns",
- "value": 0
- }
- ],
- "delay": 50,
- "delay_message": "Getting captured..."
- }
- ],
- "image": null,
- "raw_image": "data:image/png;base64,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"
- },
- {
- "name": "Deciphering Transmission",
- "description": "You review the incoming transmissions your drone has gotten. These aren't in need of deciphering, just un-garbling it from the bad connection...\n\n\"You are in Space British Air Space! Identify yourself, Tally ho!\"\nWhat the fuck?",
- "choices": [
- {
- "key": "choice 11",
- "name": "Whoops!",
- "exit_node": "Tractor Beam",
- "delay": 0,
- "requirements": [
- {
- "quality": "UFOs Shot Down",
- "operator": "==",
- "value": 1
- }
- ]
- },
- {
- "key": "choice 12",
- "name": "Good thing I didn't blast them, then.",
- "exit_node": "Tractor Beam",
- "delay": 0,
- "requirements": [
- {
- "quality": "UFOs Shot Down",
- "operator": "==",
- "value": 0
- }
- ]
- }
- ],
- "image": null,
- "on_enter_effects": [
- {
- "effect_type": "Add",
- "quality": "Commercial Airliner Transmissions",
- "value": 1
- }
- ],
- "raw_image": "data:image/png;base64,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"
- },
- {
- "name": "Landed, Kinda",
- "description": "You have been locked to the surface the beam. Robots are all around you, pointing at your drone with all sorts of old age weapons.\n\nOne of them angrily shouts at you, \"By God, Queen and Country, we've got you now!\"",
- "choices": [
- {
- "key": "choice 14",
- "name": "Go out with a bang. Initiate self destruct!",
- "exit_node": "FAIL",
- "delay": 0
- },
- {
- "key": "choice 15",
- "name": "Surrender to the funny looking robot brits...",
- "exit_node": "British Courtroom Start",
- "delay": 50,
- "delay_message": "You are being transported somewhere..."
- }
- ],
- "image": null,
- "raw_image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAABkCAYAAADDhn8LAAAIT0lEQVR4Ae2dvY5dNRSFzxsg0dKNBBLFKAiJApSKglREoqSDhqFAQihNChoKAiONlCISBUqRnlfhDXgRRGNkyI7W9dg+23/Hx/YqLO9jb/9tr+/Yc+9kst0+uzVMjAE14NfAxsD4A8O4MC5WAwSEJyhvEBENEJBIcHiK8BQhIASEJ0hEAwQkEhyeIDxBCAgB4QkS0cBygHzzlzHaxBOEJ8hSgGjBQD9CsjYkSwKiET0hWRsM0cgygOQIPqeNBPboHOfq2kfPZabxlgMkdfNQbKltW/vj3DR26/nM2D8BiXyCIRuO4pOy3jnOSWzfnKTO5r56lsWvkssBkisUEdoZBCVz0a5F/M8w99HmsAwgdmNEKFph4WaWtMV+Su3UeaT6l85vtvZLAWI3DwVj7ZQNlbYpbWr6yvjaeaf615zrLH0tB4jdOBSOVmxuux4CkHlrxhbflPVp+l3NZ0lAZJNRRGJLXSgXv6OFpx0X/Y6eYyhmI5cvDYjdOFdQ8hzbVI1PrH1O3d6YUo95zjhsc/mp1vKAoCBQXGijj7Wlzi1v9Szj2dwdA+vEdn34fCn6lHgQEM/3ICI0X26DK+UpgS7x9Y0nZZiXjMG2fogIiAcQFAsK0LXRr5WNY9ox8FnsVmOzX/6b9HtXlpgoRJCSx3xr1clYvrzWGOzHf3rYuHQ5QbjZ4Q1xxcpY6WPlxq7G8+GA+DbcLauxsFn6wNjMsqaR1tENEAwSigBt9KHd9026avxPAQgGHwGxNtbRJiRHa6AbIHviR1CODopmvM8ePTItk2YOLX0w/jG75RzO0PfhgNhFS8D3AiB+Nt/zPaK+JRB7fR+xPhkD4661pe1s+akBscHGDeoV/D3xHl3fKg4Ya2vvjYP+e76j1ncFRLMJNrC9NuJo4aeOV0t0GF+xtX2Lv821bUby6wKIDZAEdi9Y4of5XpvS+lShns0/df2lsZX2qeOO4N8dEBtcDJQEO5ajf037bEIvnY8mNhhnjb/rU9re7e9sz6cABIPss48IWqkYz9o+FjuMdczPV4dtre3zmaGsGyASPDfQPYJ9VnHXmpfEGnOMO5aLjfV7trSZMe8OSI+g1hLeSP1gnPcEr63HPme1lwJkJEG3mKuImADofyNhe/DhR2YvSWBHzVuIbcQ+Zf8EEHlmHgZmekBGFHLLOROGMAy+2BCQhN+pur6+NpJExPIcysXvLLlPBCwLQ7P9/uqV8aW9a1fN+lYbVFuUIQhKymvPUdNfq3jP2C8BSThBzDtvGZtKgNC21Qg912dGIbda07SA5IrH107AwFwr9Bp+vjmVlrUS1Gz9XgCC16bHj380kn55/tz40t2LF0aSr96W/fby5Zvku8rZMhw3ZKcEvlQ80h6B8Nk1xJ/ah8ytNE+J58q+0wFSKhwfCHtlqSKv4V+6zpVFn7L2qQDJFc0eACn1NcSv7SN3vbZdikhW9r34mFeuVDb//sl3b9JPn3xh9tLNzY3ZS9gnXr3QxisWjonlvg3LEUuK8HN9tWLP9ctZNwEJf6zramsKQFJFkiv2Fu1ywXDbpcbAFQKf/dAsB4hG5Nu2GUyaNkf5uGDIMwHxC7wU/AtA8BrT2r66es9ICo3157YZSeiDi9YKQyNghMJna/ro5aONg/hhDGmH4SIgr7/8s8L2QYFlvcSvGVeEr80JRRgKjM3QgGjFoBEYghCzNX318tHGw/qhCGiHYdmePv3DSJIrz3/525u5kgTXoTdltq6kHNr+endnJOFV6p+f3zWS/v74fSNJNlQrCI1gY1BgnaavXj7aeBCQMBCiLckJyOsrFkIQs3uJf29cwqEXvYhfkw8LSIog9sRl62NQYJ2mrx4+KfHQCIM+/wO3PXz4lZGEV6ZvH3xqJLUoxz7xWoW2fIJlcyy3m5ciCK1gEQSfre2nh19KPCh+/WlDQCb4FItw6AWf+nIgIACIvPnd00PKz5oTkIaA4FXnSPvLr38wknJ+FytFFNb3rOKuMa+UWKS+QVf3346EAscSOGx+BCAoohqiPFMfuLaYvbrYc9a/JCAoojMJPXcuuJ49O0ckK7fZLr74ky8G3S8B4Us9fPOX2PipFNo4Hyz3bdKeGHLrc4Xao13OGn2xZJn/5xgCovijDT2Erx0zBxDbhkD4gXDjMjQgdjG5AqnVTivkFn6la3DFwOf70AT/Nm/oqlOrHK9P2GfOJpUKpUX7FkBInzXnmxPvldpMAYjdsJqiadmXiDw3bzG3lQSfutZpABkJkhYiL+0zVTir+G+fX31gJIUWjVeg0NVIUx7yCY2bW14qlpXb58Z81nZTAiKbtbLQS9Yu8WN+a6YGBDe4RDCrtcW4rW4HfwaZOTCrCT5nvTPvf8ralgTEF6AcEc3exhen1coIyLP7Xw5ZEcwufu36VgPCXS8BCQDiBgqfteKaxQ/XvppNQDIACYlkFiB86witefZyAlIRkJBYfIIbrSy0ttnLCcgBgNQQ0RmAqrGO0fogIIMAIsLqDYrMY5WcgAwGCAqzFyw4h9ltAjIwICjOI2HBcWe3CcgkgIhQjwJFxps9JyCTAWIFewQks4Mh6yMgEwIim9saFBln5pyATAyIFW5LSGYGQ9ZGQCYHpCUkIqKZcwKyACCExP8LqRqwCcgigLSCRCOykX0ICAEp+jllZPFr5k5ACAgBiWiAgESCo3nDjOZT+1Ot0dafOl8CQkB4gkQ0QEAiwUl924zgzxMk7RMtArIYIBZiQqKHhIAQkGJgRjg5c+dIQAgIAYlogIBEgpP71jl7O16xeMXi/6AUAb82ILa/s78UcufHEyQipNygnr0dAeEJMu0brQZ8BISAEJCdk5GQ6CD5F0cJWniQ8Kf0AAAAAElFTkSuQmCC"
- },
- {
- "name": "British Courtroom Start",
- "description": "Wow, that took forever. A one eye judge robot smacks their gavel, and points their hammer at you.\n\"I will now read out the crimes you are accused of!\"\nIs that how the judicial process works? You dunno.\n\"ONE ACCOUNT OF PLANETARY TRESSPASS!\"\nThis blows.",
- "choices": [
- {
- "key": "choice 16",
- "name": "That's not that bad.",
- "exit_node": "British Courtroom, Continued...",
- "on_selection_effects": [
- {
- "effect_type": "Add",
- "quality": "Crimes Committed",
- "value": 1
- }
- ],
- "delay": 0
- }
- ],
- "image": null,
- "raw_image": "data:image/png;base64,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"
- },
- {
- "name": "British Courtroom, Continued...",
- "description": "This big idiot they call a judge just keeps piling on crimes. With each one, some robot you'd like to drone-punch gasps in the back.",
- "choices": [
- {
- "key": "choice 17",
- "name": "\"INTRUSIVE SCANNING ON OUR CITIZENS\"",
- "exit_node": "British Courtroom, Continued...",
- "on_selection_effects": [
- {
- "effect_type": "Add",
- "quality": "Long Range Scan Report",
- "value": -1
- },
- {
- "effect_type": "Add",
- "quality": "Crimes Committed",
- "value": 1
- }
- ],
- "requirements": [
- {
- "quality": "Long Range Scan Report",
- "operator": ">",
- "value": 0
- }
- ],
- "delay": 0
- },
- {
- "key": "choice 18",
- "name": "\"SHOOTING DOWN A COMMERCIAL AIRLINER\"",
- "exit_node": "British Courtroom, Continued...",
- "on_selection_effects": [
- {
- "effect_type": "Add",
- "quality": "UFOs Shot Down",
- "value": -1
- },
- {
- "effect_type": "Add",
- "quality": "Crimes Committed",
- "value": 1
- }
- ],
- "requirements": [
- {
- "quality": "UFOs Shot Down",
- "operator": "==",
- "value": 1
- }
- ],
- "delay": 0
- },
- {
- "key": "choice 19",
- "name": "\"AND WE HAVE PROOF YOU KNEW IT WAS JUST AN AIRLINER!\"",
- "exit_node": "British Courtroom, Continued...",
- "on_selection_effects": [
- {
- "effect_type": "Add",
- "quality": "Commercial Airliner Transmissions",
- "value": -1
- },
- {
- "effect_type": "Add",
- "quality": "Crimes Committed",
- "value": 1
- }
- ],
- "requirements": [
- {
- "quality": "Commercial Airliner Transmissions",
- "operator": "==",
- "value": 1
- }
- ],
- "delay": 0
- },
- {
- "key": "choice 20",
- "name": "\"THE TRANSMISSIONS WERE NOT LEGIBLE AND UNTRANSLATED. WE CANNOT PROVE MALICE!\"",
- "exit_node": "British Courtroom, Continued...",
- "on_selection_effects": [
- {
- "effect_type": "Add",
- "quality": "Garbled Transmissions",
- "value": -1
- }
- ],
- "requirements": [
- {
- "quality": "Garbled Transmissions",
- "operator": "==",
- "value": 1
- }
- ],
- "delay": 0
- },
- {
- "key": "choice 24",
- "name": "I think it's done listing crimes, thank god. Time to argue my case.",
- "exit_node": "Verdict",
- "requirements": [
- {
- "quality": "Long Range Scan Report",
- "operator": "==",
- "value": 0
- },
- {
- "group_type": "AND",
- "requirements": [
- {
- "quality": "Garbled Transmissions",
- "operator": "==",
- "value": 0
- },
- {
- "quality": "Commercial Airliner Transmissions",
- "operator": "!=",
- "value": 1
- }
- ]
- },
- {
- "quality": "UFOs Shot Down",
- "operator": "!=",
- "value": 1
- }
- ],
- "delay": 0
- }
- ],
- "image": null,
- "raw_image": "data:image/png;base64,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"
- },
- {
- "name": "Looking at the Surface",
- "description": "The surface of this world looks exactly like a grey version of Earth! It seems to be an exact replica of some kind.\n\nYou see creatures moving around on the streets",
- "choices": [
- {
- "key": "choice 21",
- "name": "Cool!",
- "exit_node": "Tractor Beam",
- "delay": 0
- },
- {
- "key": "choice 22",
- "name": "Scan the creatures.",
- "exit_node": "Robo Brits!",
- "delay": 30,
- "delay_message": "Scanning..."
- }
- ],
- "image": null,
- "raw_image": "data:image/png;base64,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"
- },
- {
- "name": "Robo Brits!",
- "description": "Wow, they're robotic humanoids that look and act exactly like the British! You see some robots laughing and chatting at a pub, and a Bobby walking down the street looking for crooks. Who created this earth replica? You only know Earth from the books, but you should be where London is!",
- "choices": [
- {
- "key": "choice 23",
- "name": "Nice! Well, back to getting pulled in by a Tractor beam...",
- "exit_node": "Tractor Beam",
- "delay": 0
- }
- ],
- "image": null,
- "on_enter_effects": [
- {
- "effect_type": "Add",
- "quality": "Long Range Scan Report",
- "value": 1
- }
- ],
- "raw_image": "data:image/png;base64,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"
- },
- {
- "name": "Verdict",
- "description": "Before even getting to defend your case, the judge says \"I've heard ENOUGH! It's time for a verdict!\"\nDang! You're definitely in kangaroo court!\n\"GUILTY! AND YOUR SENTENCE IS:\"",
- "choices": [
- {
- "key": "choice 25",
- "name": "\"DEATH!\"",
- "exit_node": "FAIL_DEATH",
- "requirements": [
- {
- "quality": "Crimes Committed",
- "operator": ">=",
- "value": 4
- }
- ],
- "delay": 0
- },
- {
- "key": "choice 26",
- "name": "\"SPACE JAIL!\"",
- "exit_node": "Not Actually Space Jail, Just Normal Jail",
- "requirements": [
- {
- "quality": "Crimes Committed",
- "operator": ">",
- "value": 1
- }
- ],
- "delay": 20,
- "delay_message": "You are being jailed..."
- },
- {
- "key": "choice 27",
- "name": "\"FORGIVENESS! Just trespass? That's not that bad!\"",
- "exit_node": "Sweet Sweet Freedom!",
- "requirements": [
- {
- "quality": "Crimes Committed",
- "operator": "==",
- "value": 1
- }
- ],
- "delay": 10,
- "delay_message": "WOOP WOOP"
- }
- ],
- "image": "default"
- },
- {
- "name": "Not Actually Space Jail, Just Normal Jail",
- "description": "You'll have to wait out your crimes against the robo brits.",
- "choices": [
- {
- "key": "choice 28",
- "name": "Sit out your sentence",
- "exit_node": "Sweet Sweet Freedom!",
- "delay": 1200,
- "delay_message": "Sitting out your sentence..."
- }
- ],
- "image": null,
- "raw_image": "data:image/png;base64,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"
- },
- {
- "name": "Sweet Sweet Freedom!",
- "description": "You're free! You spend a good while travelling around England (or at least the replica) and enjoying the cuisine, people and culture! Good society research is gained from this or something, but really you're just enjoying the sights and sounds.",
- "choices": [
- {
- "key": "choice 29",
- "name": "Nice!",
- "exit_node": "WIN",
- "delay": 0
- }
- ],
- "image": null,
- "raw_image": "data:image/png;base64,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"
- }
- ]
- }
diff --git a/code/modules/explorer_drone/manager.dm b/code/modules/explorer_drone/manager.dm
index 74a972216a4..9ca85ca4a20 100644
--- a/code/modules/explorer_drone/manager.dm
+++ b/code/modules/explorer_drone/manager.dm
@@ -24,27 +24,7 @@
if(.)
return
feedback_message = ""
- var/mob/user = usr
switch(action)
- if("create")
- var/datum/adventure_db_entry/new_entry = new
- new_entry.name = "New Adventure"
- new_entry.uploader = user.ckey
- GLOB.explorer_drone_adventure_db_entries += new_entry
- return TRUE
- if("delete")
- var/datum/adventure_db_entry/target = locate(params["ref"]) in GLOB.explorer_drone_adventure_db_entries
- if(!target)
- return
- if(!target.remove())
- feedback_message = "Failed to remove adventure"
- return TRUE
- if("approve")
- var/datum/adventure_db_entry/target = locate(params["ref"]) in GLOB.explorer_drone_adventure_db_entries
- if(!target)
- return
- target.approved = !target.approved
- return TRUE
if("play")
var/datum/adventure_db_entry/target = locate(params["ref"]) in GLOB.explorer_drone_adventure_db_entries
if(!target)
@@ -67,43 +47,6 @@
QDEL_NULL(temp_adventure)
feedback_message = "Adventure stopped"
return TRUE
- if("refresh")
- var/datum/adventure_db_entry/target = locate(params["ref"]) in GLOB.explorer_drone_adventure_db_entries
- if(!target)
- return
- target.refresh()
- return TRUE
- if("save")
- var/datum/adventure_db_entry/target = locate(params["ref"]) in GLOB.explorer_drone_adventure_db_entries
- if(!target)
- return
- target.save()
- return TRUE
- if("download")
- var/datum/adventure_db_entry/target = locate(params["ref"]) in GLOB.explorer_drone_adventure_db_entries
- if(!target)
- return
- var/temp_file = file("data/AdventureDownloadTempFile")
- fdel(temp_file)
- WRITE_FILE(temp_file, target.raw_json)
- user << ftp(temp_file,"[target.name].json")
- return TRUE
- if("upload")
- var/datum/adventure_db_entry/target = locate(params["ref"]) in GLOB.explorer_drone_adventure_db_entries
- if(!target)
- return
- var/source_json = input(user,"Select adventure JSON file.","Adventure Upload") as file|null
- if(!source_json)
- return
- var/raw_json = file2text(source_json)
- var/json = json_decode(raw_json)
- if(!json)
- feedback_message = "Decoding JSON failed."
- return
- //do basic validation here
- target.raw_json = raw_json
- target.extract_metadata()
- return TRUE
/datum/adventure_browser/ui_data(mob/user)
. = ..()
@@ -111,11 +54,10 @@
for(var/datum/adventure_db_entry/db_entry in GLOB.explorer_drone_adventure_db_entries)
adventure_data += list(list(
"ref" = ref(db_entry),
- "id" = db_entry.id,
+ "filename" = db_entry.filename,
"name" = db_entry.name,
"version" = db_entry.version,
"uploader" = db_entry.uploader,
- "timestamp" = db_entry.timestamp,
"approved" = db_entry.approved,
"json_status" = db_entry.raw_json ? "Valid JSON" : "Empty"
))
diff --git a/strings/exoadventures/britain_replica.json b/strings/exoadventures/britain_replica.json
new file mode 100644
index 00000000000..0bfaa67e990
--- /dev/null
+++ b/strings/exoadventures/britain_replica.json
@@ -0,0 +1,570 @@
+{
+ "adventure_name": "A Model Earth",
+ "version": 1,
+ "author": "Armhulen",
+ "starting_node": "Planet Start",
+ "starting_qualities": {
+ "Long Range Scan Report": 0,
+ "UFOs Shot Down": 0
+ },
+ "required_site_traits": [
+ "in space"
+ ],
+ "loot_categories": [
+ "research"
+ ],
+ "scan_band_mods": {},
+ "deep_scan_description": "",
+ "triggers": [],
+ "nodes": [
+ {
+ "name": "Planet Start",
+ "description": "You come across a grey planet. It looks familiar, though you swore you've never come across this sector of space before.",
+ "choices": [
+ {
+ "key": "choice 0",
+ "name": "Ignore the planet.",
+ "exit_node": "FAIL",
+ "delay": 0,
+ "delay_message": "Whatever, there's a lot of planets in space. Must be a hunch!"
+ },
+ {
+ "key": "choice 1",
+ "name": "Begin Orbital Scan",
+ "exit_node": "Scanning from Orbit",
+ "requirements": [
+ {
+ "quality": "Long Range Scan Report",
+ "operator": "==",
+ "value": 0
+ }
+ ],
+ "delay": 30,
+ "delay_message": "Scanning planet..."
+ },
+ {
+ "key": "choice 8",
+ "name": "Descend Into Orbit",
+ "exit_node": "Orbital Descent",
+ "delay": 30,
+ "delay_message": "Descending into Orbit..."
+ }
+ ],
+ "image": null,
+ "raw_image": "data:image/png;base64,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"
+ },
+ {
+ "name": "Scanning from Orbit",
+ "description": "You initiate a long range scan from orbit:\nThis planet has a smoggy cover that blocks any good look at the surface, yet it has a mostly survivable atmosphere.\nThis planet has zero life signs.\n",
+ "choices": [
+ {
+ "key": "choice 9",
+ "name": "Stash that Report...",
+ "exit_node": "Planet Start",
+ "delay": 0
+ }
+ ],
+ "image": null,
+ "on_enter_effects": [
+ {
+ "effect_type": "Add",
+ "quality": "Long Range Scan Report",
+ "value": 1
+ }
+ ],
+ "raw_image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAABkBAMAAAAxqGI4AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAASUExURQAAAP///1lWUqwyMmlqakZHRwPX/kkAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAL5SURBVGje7ZldbqMwFIXtKnkvO4huyAYmG0CWea8i2P9Wxv/Y2MTYvjBVO4c8FET8+dxzDW5Ldqr73Hcf7fbemfwu+p1tkM+jILTbfeu2stNbDDSkklXnzNRbyUqUqbM/oVr5AFhOus5iUK3A/fmEW0BRHjCtwFPqj6NQS6GIVu5PTXEXnJUOjfLxXEOITYWitXECQk6BUOx6pSDkKAj4F6mrFxLEdNctAdl8gJVmBRBXy6tXcrScwwvXsufikXIP1qId5t2iz0D4osFClAga5MJDDbJaEUDJjF6eyZohxATjlhym9kkcMzhkIBQJ0g+pe2klJFWtG4DrgRSkeEUkjDDWA09TbPJdM6RXnySlDnLpYyO9/GhtQChthYhSMXeyup0aSFkoCYirVqJkdcnHEMaXakVeHIQUQYBPwSFdMB86IEBYolrAtyi1kF4asOIT40Ekq4JVQvS0R3UYI5G5GFLYwuKRO3l69dMEkxnc5MR8K6RCF9VL2sioe2tdLc6GRggROUDve5lcA9usXpw0So4Go5OwE0YySqutED33eZKH12TSyJJTK0RNFx6LFb4yMiI4uajJQmxlWT3tTsybEfxUnA0t9miGmNnCY54DMxNiJu7V6HLx89BO2iHLhIUXPxUleWVjf1SiZbvCHkEuLqX0brIM4hUfwkxERkKvdiPhxksGw3UuNpERmpuLeKGoBRM8k5WP/gsBsnrkAphUVGOJHeuIwPBDMcks6vmAUazkbtjXgAIhqVW+QHAYZHxnBIkRheKbGbAgJH6NIAcitWFlwmQQck28EzEDUdqwQnClrIxH+pA63od1EpgpHiP7i3ccSjEj/yd258SYqendLCR0UfcCyUK0B9KkbCYNBnZLRzIcC9HNdSzDODkYoraOB0eim+vgSIjcKM4HM06J5Hqak1Mi+d9ce3VGc5Ef01zXM5pLQN46oR0O5G0kKP+9nM+CfP1rSDqTwqTqmqvQX91SLINcvzGkLJPrCev9HMj8oyDk10MI+Qt3vM7Ve2h01AAAAABJRU5ErkJggg=="
+ },
+ {
+ "name": "Orbital Descent",
+ "description": "As you descend into orbit, you see a flying object headed straight for you!\nA garbled voice begins to call out to your drone, but there's no time to decipher it!",
+ "choices": [
+ {
+ "key": "choice 2",
+ "name": "Blast the damn UFO!",
+ "exit_node": "Tractor Beam",
+ "on_selection_effects": [
+ {
+ "effect_type": "Add",
+ "quality": "Tractor Beam Turns",
+ "value": 2
+ },
+ {
+ "effect_type": "Add",
+ "quality": "UFOs Shot Down",
+ "value": 1
+ }
+ ],
+ "delay": 30,
+ "delay_message": "Blasting UFO!"
+ },
+ {
+ "key": "choice 3",
+ "name": "Attempt Evasive Maneuvers!",
+ "exit_node": "UFO Evasion!",
+ "on_selection_effects": [
+ {
+ "effect_type": "Add",
+ "quality": "UFOs Violently Crashed Into",
+ "value": {
+ "value_type": "random",
+ "low": 0,
+ "high": 1
+ }
+ }
+ ],
+ "delay": 30,
+ "delay_message": "You attempt to dodge the UFO..."
+ },
+ {
+ "key": "choice 7",
+ "name": "Do NOTHING. Jesus take the wheel!",
+ "exit_node": "FAIL_DEATH",
+ "delay": 30,
+ "delay_message": "What? Why?!"
+ }
+ ],
+ "image": null,
+ "on_enter_effects": [
+ {
+ "effect_type": "Add",
+ "quality": "Garbled Transmissions",
+ "value": 1
+ }
+ ],
+ "raw_image": "data:image/png;base64,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"
+ },
+ {
+ "name": "UFO Evasion!",
+ "description": "Were you good enough at flying to avoid the UFO?",
+ "choices": [
+ {
+ "key": "choice 4",
+ "name": "No, Back to flight school with you!",
+ "exit_node": "FAIL_DEATH",
+ "requirements": [
+ {
+ "quality": "UFOs Violently Crashed Into",
+ "operator": "==",
+ "value": 1
+ }
+ ],
+ "delay": 0
+ },
+ {
+ "key": "choice 5",
+ "name": "You barely avoided them! Nice!",
+ "exit_node": "Tractor Beam",
+ "on_selection_effects": [
+ {
+ "effect_type": "Add",
+ "quality": "Tractor Beam Turns",
+ "value": 2
+ }
+ ],
+ "requirements": [
+ {
+ "quality": "UFOs Violently Crashed Into",
+ "operator": "==",
+ "value": 0
+ }
+ ],
+ "delay": 0
+ }
+ ],
+ "image": "default"
+ },
+ {
+ "name": "Tractor Beam",
+ "description": "Before you have time to think, your drone is captured by a Tractor beam! Now you've gone and done it.\n\nYou should have some time before you are pulled in.",
+ "choices": [
+ {
+ "key": "choice 6",
+ "name": "Decipher Garbled Transmission",
+ "exit_node": "Deciphering Transmission",
+ "requirements": [
+ {
+ "quality": "Garbled Transmissions",
+ "operator": "==",
+ "value": 1
+ },
+ {
+ "quality": "Tractor Beam Turns",
+ "operator": ">",
+ "value": 1
+ }
+ ],
+ "delay": 30,
+ "delay_message": "Decipering..."
+ },
+ {
+ "key": "choice 10",
+ "name": "Look at the surface of the planet",
+ "exit_node": "Looking at the Surface",
+ "requirements": [
+ {
+ "quality": "Tractor Beam Turns",
+ "operator": ">",
+ "value": 1
+ }
+ ],
+ "delay": 10,
+ "delay_message": "Looking out window..."
+ },
+ {
+ "key": "choice 13",
+ "name": "Let the beam pull you in and dock you",
+ "exit_node": "Landed, Kinda",
+ "on_selection_effects": [
+ {
+ "effect_type": "Set",
+ "quality": "Tractor Beam Turns",
+ "value": 0
+ }
+ ],
+ "delay": 50,
+ "delay_message": "Getting captured..."
+ }
+ ],
+ "image": null,
+ "raw_image": "data:image/png;base64,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"
+ },
+ {
+ "name": "Deciphering Transmission",
+ "description": "You review the incoming transmissions your drone has gotten. These aren't in need of deciphering, just un-garbling it from the bad connection...\n\n\"You are in Space British Air Space! Identify yourself, Tally ho!\"\nWhat the fuck?",
+ "choices": [
+ {
+ "key": "choice 11",
+ "name": "Whoops!",
+ "exit_node": "Tractor Beam",
+ "delay": 0,
+ "requirements": [
+ {
+ "quality": "UFOs Shot Down",
+ "operator": "==",
+ "value": 1
+ }
+ ]
+ },
+ {
+ "key": "choice 12",
+ "name": "Good thing I didn't blast them, then.",
+ "exit_node": "Tractor Beam",
+ "delay": 0,
+ "requirements": [
+ {
+ "quality": "UFOs Shot Down",
+ "operator": "==",
+ "value": 0
+ }
+ ]
+ }
+ ],
+ "image": null,
+ "on_enter_effects": [
+ {
+ "effect_type": "Add",
+ "quality": "Commercial Airliner Transmissions",
+ "value": 1
+ }
+ ],
+ "raw_image": "data:image/png;base64,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"
+ },
+ {
+ "name": "Landed, Kinda",
+ "description": "You have been locked to the surface the beam. Robots are all around you, pointing at your drone with all sorts of old age weapons.\n\nOne of them angrily shouts at you, \"By God, Queen and Country, we've got you now!\"",
+ "choices": [
+ {
+ "key": "choice 14",
+ "name": "Go out with a bang. Initiate self destruct!",
+ "exit_node": "FAIL",
+ "delay": 0
+ },
+ {
+ "key": "choice 15",
+ "name": "Surrender to the funny looking robot brits...",
+ "exit_node": "British Courtroom Start",
+ "delay": 50,
+ "delay_message": "You are being transported somewhere..."
+ }
+ ],
+ "image": null,
+ "raw_image": "data:image/png;base64,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"
+ },
+ {
+ "name": "British Courtroom Start",
+ "description": "Wow, that took forever. A one eye judge robot smacks their gavel, and points their hammer at you.\n\"I will now read out the crimes you are accused of!\"\nIs that how the judicial process works? You dunno.\n\"ONE ACCOUNT OF PLANETARY TRESSPASS!\"\nThis blows.",
+ "choices": [
+ {
+ "key": "choice 16",
+ "name": "That's not that bad.",
+ "exit_node": "British Courtroom, Continued...",
+ "on_selection_effects": [
+ {
+ "effect_type": "Add",
+ "quality": "Crimes Committed",
+ "value": 1
+ }
+ ],
+ "delay": 0
+ }
+ ],
+ "image": null,
+ "raw_image": "data:image/png;base64,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"
+ },
+ {
+ "name": "British Courtroom, Continued...",
+ "description": "This big idiot they call a judge just keeps piling on crimes. With each one, some robot you'd like to drone-punch gasps in the back.",
+ "choices": [
+ {
+ "key": "choice 17",
+ "name": "\"INTRUSIVE SCANNING ON OUR CITIZENS\"",
+ "exit_node": "British Courtroom, Continued...",
+ "on_selection_effects": [
+ {
+ "effect_type": "Add",
+ "quality": "Long Range Scan Report",
+ "value": -1
+ },
+ {
+ "effect_type": "Add",
+ "quality": "Crimes Committed",
+ "value": 1
+ }
+ ],
+ "requirements": [
+ {
+ "quality": "Long Range Scan Report",
+ "operator": ">",
+ "value": 0
+ }
+ ],
+ "delay": 0
+ },
+ {
+ "key": "choice 18",
+ "name": "\"SHOOTING DOWN A COMMERCIAL AIRLINER\"",
+ "exit_node": "British Courtroom, Continued...",
+ "on_selection_effects": [
+ {
+ "effect_type": "Add",
+ "quality": "UFOs Shot Down",
+ "value": -1
+ },
+ {
+ "effect_type": "Add",
+ "quality": "Crimes Committed",
+ "value": 1
+ }
+ ],
+ "requirements": [
+ {
+ "quality": "UFOs Shot Down",
+ "operator": "==",
+ "value": 1
+ }
+ ],
+ "delay": 0
+ },
+ {
+ "key": "choice 19",
+ "name": "\"AND WE HAVE PROOF YOU KNEW IT WAS JUST AN AIRLINER!\"",
+ "exit_node": "British Courtroom, Continued...",
+ "on_selection_effects": [
+ {
+ "effect_type": "Add",
+ "quality": "Commercial Airliner Transmissions",
+ "value": -1
+ },
+ {
+ "effect_type": "Add",
+ "quality": "Crimes Committed",
+ "value": 1
+ }
+ ],
+ "requirements": [
+ {
+ "quality": "Commercial Airliner Transmissions",
+ "operator": "==",
+ "value": 1
+ }
+ ],
+ "delay": 0
+ },
+ {
+ "key": "choice 20",
+ "name": "\"THE TRANSMISSIONS WERE NOT LEGIBLE AND UNTRANSLATED. WE CANNOT PROVE MALICE!\"",
+ "exit_node": "British Courtroom, Continued...",
+ "on_selection_effects": [
+ {
+ "effect_type": "Add",
+ "quality": "Garbled Transmissions",
+ "value": -1
+ }
+ ],
+ "requirements": [
+ {
+ "quality": "Garbled Transmissions",
+ "operator": "==",
+ "value": 1
+ }
+ ],
+ "delay": 0
+ },
+ {
+ "key": "choice 24",
+ "name": "I think it's done listing crimes, thank god. Time to argue my case.",
+ "exit_node": "Verdict",
+ "requirements": [
+ {
+ "quality": "Long Range Scan Report",
+ "operator": "==",
+ "value": 0
+ },
+ {
+ "group_type": "AND",
+ "requirements": [
+ {
+ "quality": "Garbled Transmissions",
+ "operator": "==",
+ "value": 0
+ },
+ {
+ "quality": "Commercial Airliner Transmissions",
+ "operator": "!=",
+ "value": 1
+ }
+ ]
+ },
+ {
+ "quality": "UFOs Shot Down",
+ "operator": "!=",
+ "value": 1
+ }
+ ],
+ "delay": 0
+ }
+ ],
+ "image": null,
+ "raw_image": "data:image/png;base64,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"
+ },
+ {
+ "name": "Looking at the Surface",
+ "description": "The surface of this world looks exactly like a grey version of Earth! It seems to be an exact replica of some kind.\n\nYou see creatures moving around on the streets",
+ "choices": [
+ {
+ "key": "choice 21",
+ "name": "Cool!",
+ "exit_node": "Tractor Beam",
+ "delay": 0
+ },
+ {
+ "key": "choice 22",
+ "name": "Scan the creatures.",
+ "exit_node": "Robo Brits!",
+ "delay": 30,
+ "delay_message": "Scanning..."
+ }
+ ],
+ "image": null,
+ "raw_image": "data:image/png;base64,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"
+ },
+ {
+ "name": "Robo Brits!",
+ "description": "Wow, they're robotic humanoids that look and act exactly like the British! You see some robots laughing and chatting at a pub, and a Bobby walking down the street looking for crooks. Who created this earth replica? You only know Earth from the books, but you should be where London is!",
+ "choices": [
+ {
+ "key": "choice 23",
+ "name": "Nice! Well, back to getting pulled in by a Tractor beam...",
+ "exit_node": "Tractor Beam",
+ "delay": 0
+ }
+ ],
+ "image": null,
+ "on_enter_effects": [
+ {
+ "effect_type": "Add",
+ "quality": "Long Range Scan Report",
+ "value": 1
+ }
+ ],
+ "raw_image": "data:image/png;base64,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"
+ },
+ {
+ "name": "Verdict",
+ "description": "Before even getting to defend your case, the judge says \"I've heard ENOUGH! It's time for a verdict!\"\nDang! You're definitely in kangaroo court!\n\"GUILTY! AND YOUR SENTENCE IS:\"",
+ "choices": [
+ {
+ "key": "choice 25",
+ "name": "\"DEATH!\"",
+ "exit_node": "FAIL_DEATH",
+ "requirements": [
+ {
+ "quality": "Crimes Committed",
+ "operator": ">=",
+ "value": 4
+ }
+ ],
+ "delay": 0
+ },
+ {
+ "key": "choice 26",
+ "name": "\"SPACE JAIL!\"",
+ "exit_node": "Not Actually Space Jail, Just Normal Jail",
+ "requirements": [
+ {
+ "quality": "Crimes Committed",
+ "operator": ">",
+ "value": 1
+ }
+ ],
+ "delay": 20,
+ "delay_message": "You are being jailed..."
+ },
+ {
+ "key": "choice 27",
+ "name": "\"FORGIVENESS! Just trespass? That's not that bad!\"",
+ "exit_node": "Sweet Sweet Freedom!",
+ "requirements": [
+ {
+ "quality": "Crimes Committed",
+ "operator": "==",
+ "value": 1
+ }
+ ],
+ "delay": 10,
+ "delay_message": "WOOP WOOP"
+ }
+ ],
+ "image": "default"
+ },
+ {
+ "name": "Not Actually Space Jail, Just Normal Jail",
+ "description": "You'll have to wait out your crimes against the robo brits.",
+ "choices": [
+ {
+ "key": "choice 28",
+ "name": "Sit out your sentence",
+ "exit_node": "Sweet Sweet Freedom!",
+ "delay": 1200,
+ "delay_message": "Sitting out your sentence..."
+ }
+ ],
+ "image": null,
+ "raw_image": "data:image/png;base64,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"
+ },
+ {
+ "name": "Sweet Sweet Freedom!",
+ "description": "You're free! You spend a good while travelling around England (or at least the replica) and enjoying the cuisine, people and culture! Good society research is gained from this or something, but really you're just enjoying the sights and sounds.",
+ "choices": [
+ {
+ "key": "choice 29",
+ "name": "Nice!",
+ "exit_node": "WIN",
+ "delay": 0
+ }
+ ],
+ "image": null,
+ "raw_image": "data:image/png;base64,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"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/strings/exoadventures/quantum_fizzics.json b/strings/exoadventures/quantum_fizzics.json
new file mode 100644
index 00000000000..0ee9bf9bf68
--- /dev/null
+++ b/strings/exoadventures/quantum_fizzics.json
@@ -0,0 +1,195 @@
+{
+ "adventure_name": "Quantum Fizz-ics",
+ "version": 1,
+ "author": "EOBGames",
+ "starting_node": "start",
+ "starting_qualities": {
+ "jammed": 0
+ },
+ "required_site_traits": [
+ "technology present",
+ "in space"
+ ],
+ "loot_categories": [
+ "unique"
+ ],
+ "scan_band_mods": {
+ "Narrow-band radio waves": 10
+ },
+ "deep_scan_description": "",
+ "triggers": [],
+ "nodes": [
+ {
+ "name": "start",
+ "description": "As you sweep through the inky void and the site comes into view, you're puzzled by what you see. On a small asteroid sits a vending machine. Despite the odd runes lining its surface, you're fairly certain that the image on the front is a can of soda. While ordinary common sense would dictate that drinking strange alien soda is a bad idea, you can't help but be curious about what exactly this machine dispenses. There's one problem, however- what currency does this thing take?",
+ "choices": [
+ {
+ "key": "choice 0",
+ "name": "Leave.",
+ "exit_node": "FAIL",
+ "delay": 10,
+ "delay_message": "There are better ways to die than drinking alien soda."
+ },
+ {
+ "key": "choice 1",
+ "name": "Try a holocredit chit.",
+ "exit_node": "it's_stuck",
+ "requirements": [
+ {
+ "quality": "jammed",
+ "operator": "!=",
+ "value": 1
+ }
+ ],
+ "delay": 10,
+ "delay_message": "Hopefully whoever made this machine is part of the Galactic Currency Union..."
+ },
+ {
+ "key": "choice 4",
+ "name": "Ram the machine.",
+ "exit_node": "smashing",
+ "delay": 30,
+ "delay_message": "Ramming speed!"
+ },
+ {
+ "key": "choice 5",
+ "name": "Search around for some loose change.",
+ "exit_node": "lost_wallet",
+ "requirements": [
+ {
+ "quality": "have_coin",
+ "operator": "!=",
+ "value": 1
+ }
+ ],
+ "delay": 100,
+ "delay_message": "There's a surprising amount of stuff on this asteroid to search..."
+ },
+ {
+ "key": "choice 6",
+ "name": "Use the coin you found.",
+ "exit_node": "choices_choices",
+ "requirements": [
+ {
+ "quality": "jammed",
+ "operator": "==",
+ "value": 0
+ },
+ {
+ "quality": "have_coin",
+ "operator": "==",
+ "value": 1
+ }
+ ],
+ "delay": 10,
+ "delay_message": "Thank God for clumsy aliens!"
+ }
+ ],
+ "image": null,
+ "raw_image": "data:image/png;base64,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"
+ },
+ {
+ "name": "it's_stuck",
+ "description": "Well, only one way to find out, right? You produce a holocredit chit (helpfully taken from the science budget, I'm sure they won't miss it) and jam it into the slot. Then, you realise your mistake, as it sticks in the slot. Whoops. Time to try the old fashioned way, I suppose.",
+ "choices": [
+ {
+ "key": "choice 2",
+ "name": "Time to try something a bit more daring?",
+ "exit_node": "start",
+ "on_selection_effects": [
+ {
+ "effect_type": "Set",
+ "quality": "jammed",
+ "value": 1
+ }
+ ],
+ "delay": 10,
+ "delay_message": "In hindsight, why would this accept human currency, anyway?"
+ }
+ ],
+ "image": null,
+ "raw_image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAABkCAYAAADDhn8LAAAAAXNSR0IArs4c6QAAAjVJREFUeJzt3cFyogAUAEGzlf//5ewpF0pGRJDnbvc1CkhleAbEfN1ut58bcNefqzcAJhMIBIFAEAgEgUAQCASBQBAIBIFAEAgEgUAQCASBQBAIBIFAEAgEgUAQCASBQBAIBIFAEAgEgUAQCASBQBAIBIFAEAgEgUAQCASBQBAIBIFAEAgEgUD4vnLlW/854tdJz5+2HWuWy9+6HWdt77P/1PLo7d27H/cwQSBcMkFePSI8e+T5WXncUctZWlvP1uef5V2vd+9y1p7/aD1nMkEgvHWCTDgiXOH3dU6ZJNNN+j0xQSBcehZrae3siCPtff/aJJo0OX6ZIBBGTZDle3XuW+6fq/fXo/W/ev3H3yAw1FsnyP96Nues99ZTJu7R11PWJqTrIDDM1+3CA9CUz0BN2Y410z+Ltfdxz/780frOYIJAuHSCwHQmCASBQBAIhFFX0pfefZbq0XKPupPu2eW9+2zSVmctZxITBMLoCbK09069s86vT7uTca+j9s/E6xivMkEgfNQEWZr62a6jPiN19evABIH00RNkqq33Rywn36PHv7penmeCQDBBXvDqkX/rdZKjvp+K55kgED56glz9LRhn39/B9UwQCB81QfZemd36HvxdR/azzmLtNW3/TGKCQHBHIQQTBIJAIAgEgkAgCASCQCAIBIJAIAgEgkAgCASCQCAIBIJAIAgEgkAgCASCQCAIBIJAIAgEgkAgCASCQCAIBIJAIAgEgkAgCASCQCAIBMJfgqJi1hru29AAAAAASUVORK5CYII="
+ },
+ {
+ "name": "lost_wallet",
+ "description": "Searching around, you come across a lost wallet in a small crater. Flipping it open, inside you find a family photo of 3 identical looking grey aliens in comically different outfits, an (expired) credit card for a bank you've never heard of, a loyalty card to McDonkalds, and, in the coin pouch, a single black coin with glowing purple lines. This is (presumably) what you're looking for.",
+ "choices": [
+ {
+ "key": "choice 3",
+ "name": "Return to the machine with the coin.",
+ "exit_node": "start",
+ "on_selection_effects": [
+ {
+ "effect_type": "Add",
+ "quality": "have_coin",
+ "value": 1
+ }
+ ],
+ "delay": 10,
+ "delay_message": "It doesn't count as theft if you found it, right?"
+ }
+ ],
+ "image": null,
+ "raw_image": "data:image/png;base64,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"
+ },
+ {
+ "name": "choices_choices",
+ "description": "You slip the coin into the slot- it's a perfect fit. Now comes the hard part: picking a button on the machine to press.",
+ "choices": [
+ {
+ "key": "choice 7",
+ "name": "The red looking soda.",
+ "exit_node": "cha_clunk",
+ "delay": 10,
+ "delay_message": "How exciting..."
+ },
+ {
+ "key": "choice 9",
+ "name": "The yellow looking soda.",
+ "exit_node": "cha_clunk",
+ "delay": 10,
+ "delay_message": "How exciting..."
+ },
+ {
+ "key": "choice 10",
+ "name": "The green looking soda.",
+ "exit_node": "cha_clunk",
+ "delay": 10,
+ "delay_message": "How exciting..."
+ }
+ ],
+ "image": null,
+ "raw_image": "data:image/png;base64,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"
+ },
+ {
+ "name": "cha_clunk",
+ "description": "With a satisfying cha-clunk, your fizzy prize drops into the tray. You swipe it, and move on from the site.",
+ "choices": [
+ {
+ "key": "choice 11",
+ "name": "Sweet, sugary victory.",
+ "exit_node": "WIN",
+ "delay": 10,
+ "delay_message": "Hopefully this doesn't like, freeze solid in space. That would be bad, right?"
+ }
+ ],
+ "image": null,
+ "raw_image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAABkCAIAAABM5OhcAAAAAXNSR0IArs4c6QAAIABJREFUeJzsvXmcpVdVLrzWHt7pzKem7qqeO515TkgIIQwSQESQaIiADAooeK/XAZHrAF4V1E8ULpd7Rb0MooiAIE4XkEHBQBhCIPOcTnd6rO6uqjO+w57W+v441W2DEBLoJN2Nz6/+qFP11ql99vu8a6/9rGEj/Ce+ExCRmY9+Ofnmm37IwJPvgBAREXlyDSMAr/7y+wf4WA/gBMARJn0biNULUH7DxRwmLz25Cc0mRDyajicx/pNYAN+KOpOfHP1zZhZCfOMFAhEFKhBCCCFQrVoqwQCATEQUDoPJTt7k+4RY6rEewKOKI4vaNzEJj0AogAlPFCJOmISIkydwcgkctjpCrNoqJRMhBCoppZy8CTMHb0Nwzhly5LxxBhkCkYejjNZkPN+01J4c+P4iFhxNKYEAIFBNzI1SsRACpRZCSXmEIgIRpZQAIIQgWvWeiEgIgSjFKqRSKkliIYSUMjB47zkEa60xlS1yY8pKCOcsewDy3zSkk49V8CDEOvkeo1Vjg4AghRBSaimV1lrJSOtYa62TOIpTpZTWWig9sVgTrihUzBwgADIAIMHEmE0oqGQURVGaxRilApxgCB5K68bVuByNBoNBmY/luF9Vha2E99Z7P/HATmJ8W2KdlKxCRCGUlFoppeMsipI0TSOdJEmapqmOoyTLoiiK4zhOM0RUSq0udjxZKJmZiYgJpZQghVJKKRVFkda6VmvUxb4nXLD+9ltvsQ57y5QbvWc0v7jcGPZ7WuvxeFhKbasc0QZfndz+1vfFUnhk14ZCaR1FUZTEWVKrJ2ktrdfq9XotqzebzTStNZvNKIqSJEkihSpRiqRQSkwkBBYCkJkDTd4TpRAYRUmmIhlHUU3d/vSL03xwcM+di9b5pEnO6aS7NcrccnYwiqIoivIoGgwkQmERvbfMHgngpHuM4fuEWBMIobSO4rQWx3Gt1uh0p+v1Rqsz1W63G82s053qNJqNZhRFWmkx153etm1DkvksHtekFTRgM3Jl35fWGetdZa1lhCAosHdMzalOtz7UlENrnoUBia4E59zsfF03W/V6KoRQKlJKO09CCCgIAJxjwHDysQpOdGId7Qh+W92SJ8uYjFSkdRLHutnottudmbnZznR3/fqFdivuNuUTLz9129YpIQSKNsM0smE6JNwOP97h+vtMPoLSm6L0VTDG2eAJQgATFFhZnX/JuVIbROQAaRQJZTzJQOQ9Fvu+3l24vLF5PQodJbFSygWWUnrviYg5OMfM3+zOnwR4jIn1PW4RvmmvflgLmOznRCACRCFQqUhKFUdp1mi22u3pqbXTM52F+TWnnapf+dOnRbLi0Cd/OzpG3WSuoWwTBKReGB0MxQqYkbSFM5bLioxnEzh4x5Y0nf+MpxjTV4oBAoBgcI5GxpellaMKTEWD3u3b77hJJS0bNTeuuVDrDT6wEOCtE0zMFEJgEER0bCb0uMEJbLGOmKgjuuVEC1AymmgEgQkRhZBKRnEcZ41mvdGYmVnTnZ7duL79W6+/KI3uhfGtoBiYGBGB0QZUJVCOviRXoFnhaszWUFWydVRVwVAwwZNjdCQIghfgGOBwRCcAm8pWeUXjERkjRyX0qhJKK/nQYGm7SE6Znt5iqqKsjX2wzhvnTDjZSAXwmBPruzBXR2mbYlURkFIIJcRk7y9BrEpTh/eAUmudpmmj2W42WzNzC/Prp3/0CpWOviJSj0JBAARQ6JmQoBBeB5bCOWFLKsZcGMorKkwoyI6MseQcWQ5eBhYByAEhhzARIQRh8CYf5aMx93OsSi4LcBUzemABjny5e+P6c4fjTpmPjCmrSgmhAxOiO8k8re+GWI+txDVZ/ibDkCqSUsZxIoWOokRGWkqpdDwhEyJKqaSUUaTTNG22O61WZ2Fh7ZZ16zbN34FixAERVv0bZGACJiQWgpltgMpyZaE0UBFVlipiR2TIWTIcggoeCYgUCUIvhPjiF79y+SUXA4fhsBiMuD8WpoSyACIiZkIhCYMYtjLdbnby/vJ4PIqixBnjrT25SAXw3RHreHi2EOVE25RaxWktSbI4ydJ0IkclSq0aKimlUlEcx2madqZbU53umrXdbqOldSnIMwGjR2RmJgQgEkFAACbiypFhrhwbR4bIsDfkLFnrrSdH3nny3oElCrYs7T/986catSbbQIEqE6qSrJHGkA9iNYjETMCCsdGq1UtZW2pl2chUhSlzoSS5Iw7iYz+3xwQnno+FiIBSSC1VnCS1KM1azU6j0ag3m7VGo9Fo1Ov1icgZxXoiYCaJqjfSdr3RqGkEl+E9zdQJIOLABAzEzEAkArP34AL7EAxBxaEgKpkMWxOsAWOhMlg5KAIaZKsQrLr9rgOf/cIXMUL0FkhKkqby3mPwGAITwdFhSWbOsqzVinutZq1oGVPZsgohUDATvfSkCXicYLtCXP0rOTFIcZY2mq1GvbGwfrrbiufW1jrNuNXGWoadtpqejjrdWj0VCEFpk0ZWaQCuit5O4L5HQgZkBmIMhEDBkXQYDGFgrAIZZuPJUqjYGe8ceAcuUOW5sq4ELsh+/eu7Pv1vX4trTQVaCAUOTOWrygafERExIDKAOPoTCK3WzEz1lpdG40FRjHU8Vt5o75wzTAQcTg5uPTxiHXNz/d29FSJqHUU6yWqNequ9bn7zK19Qv/IyFCoGOdkbOsKBBIm4FBAYCZCAFRMjcSa9IEAGROBASMxE4EF6JOcxMBkHBtkGb9lZ9haCl96xqZz1VFmqnCq8L1h/7rO3o2xY4ypranFA9oMxOpLOB09AtJrmd/TsxXGaxVOddteUlTO2qqrAnrxhZu89E50ErIKHS6zH/DMzgJRaSimUknGSprVOo9vq4hMuXNB4PyODAEYKIBBlAAMgABAYgAHZAbNECsIRBUHEngEQAwhCCp48sfVsga1gS8EgGSITggFvgrFceSgtVJYL50tHhWcrAiOR8h64FkcUYP/iMgXFzByYgiRkAJaHTS2TFCiVimYX1ppgq6oYl1XwhXdN5iEAOScBA4QTnlsnno8VQphwK4qiWq3WaDTmu5HiQ8gA4IGYBQtGgCAEAAimw3IXAwAwB/ZeeMHscaJeBeJAwXv0wBbIMBkKhoMhMuwsVI4rS5Vl60JlQ+WpslQEyn0I7INg8EDI6+cXmOj2u3aEQETIjIeDzMwAiAKAhQwffe8ftOZPecLlz9ww08Ry2tnCm4IcQvAATEQTXfcxf4a/R5x4xBJCaK0nLlYc63rWmOuCgmUHQrJHQgwOZERIZAUFKQRIISiABS8YhEJyDCGwI4lMgYBYEKMnsgQOyVIwHKrgymCKYCyXFZsSjAtj68sAlcPKQ+WpchQwoGQAkCKcffYpxNX+fcsMgkDy5H1BSgIUDMCIQOwUjYa7b/jkh24k5gDxujOfVVVz5J1xlSMnnaHgTmxOAcCJSCwAmMiik3yVONG1NGgkZoAADBBYfuXznyutLkprKvJOmMoJIYkgEiqBeMvW2fVrullChKyYmJmI2QFb8MYHw2yDr8AarmwwFipLufOFAxvAhFA6rogscQAmYACWGCjYWDKHaHkwkjiR/pUK3h1OuxIYBAqBqCNgFsEHRBbgO814mLd7veUkyUxVCKEABMAJL8afGMQ6etNwJLd4olFpLdsNTcFKH7EEAOAAKwddmVwedZ8oSCYYa88AwgvQKBIR73Y0fOCmCzbcJBEcByAGZnAEjp0hMuQrZ0qwhouKC+urCgrDuaVxZUvPpYPKe0MUgAgYgRFCLAKwY0pZJZESsZJWAksIfrWkQklQSkgplSBE9EoHJgq4srwvq63PsnqZ51rHQkgECXDCh6VPDGIdHWYWq/6HWM25Q5ZkdJBOGMECQPnKjocsG5uqsMAIvZVer9e31gohkiRZMz2VJHEkF6rxXULnkQ/IAD6QZ3LBG7Y2OIu2cJWFwkBZUWF47O3Y8dhD4agKbJiJCKSXSEqQAHrOD16i2H39rr2dpCaBtcAYYE9lA7AWSirWSkaJ1BFIoTWSdcEFtA4Hh/bNnH56FKdCKakUAYDgE99gPRxiHQ/6ypGsywmrQggUMC+C9yCQUAJTEE65HAWnAKLf6+/cuXM4HBZFAQBpmo6Hg3Xza2vN7jjPUjEkJsHAnryjYCk4sIat4cKydVyWobBUOc4DFhUVnivPVWBPQEhCBiFIKk5keck5C4bg1lt2ZFmmRKiEyJXavm8ZhAYIQogopiSN1rXt1c++eMumtX/6/s/es2NEyBWZLMviONZaTxKmEeVjO8nHBA+DWA9PyXwkWRhCIPIhBPJgTZmbhINHQCBGIGahhDRFrhI7HPUHw3FvZaXMC0SZ6wI9oMxqkVw0Yi62yITM5JktV9Zbx9ZRUYWq4soG67h0XDgaB28c5D7YQJaY0CcxYrBJFkUif+1/fSFCeXDF7+/Z3NqqkKXjQwPyQgkgIbRSUtV0PZHPefZTzzm9jpJO2TS1e9F64WzlMx0rKZUQSk6qM77PiPWw8EjbthCC996Ywhi3UrYrmk3gIIAHYB3JdXP17b0d8dQlEoVEIQCR2LMFoMpVzhS5md5fdbXbqQOTD8EGa71xlFfeeTSWLIH1UDmqHFUBKwcmeOfREwVBQnAE8N9/+aXduY7L90sekdAf+shnlsayNFCMfWlxuTdmUCjUpBxDoFJps5RrqalQiHRqGqJlaVlICQKPylIMzI/2QvhIWIFHw8d62HGbB7teTEwMeUu2LE01HPf3rHR37tWnLtDkBnlTPe5x5wy+suJ0lSRRo14vizEzl2UZRZGSiUAFQkFjS2//14QprfHWsTG28ugcWg6OwREyS+ekm0j0WsUqRAkgBhSktUwzP1zea8b3z861OND2nf2DQ8pLLio1rrwxHFAJABTAQqKS9SiB2iy21kQLTWI1Lu9TwAIlorKhIppsTgm+t6LW744ij4QVeDSI9XDH/aDXEyCGEIjIWluW5Xg8Ho57n705W5iSWWInCwkq+7TL13765uun0kv7jVoIUxM1VUrZaNSbrXqaxV4v7BnXk9FSaWxlfWWxtOxJgBIsJQmBSIBYz5I40mkslRKTikIiyk0/1n5x7/2XXnZ2IG85e/9HP5FXujScl54CIsqJZDDZvUoRgWo94YprFtbPe2woIXbu+gBDwmCUzLwH55z3fvK5vseU2u/6b48tToxd4TeCKDhnjJFRmRejwWi0bO5NG9fd2vyB85ZIBwQAIAgrP3RR7fq7by2nNiQ6Sutx8KSErtXS6em2UkoK0Vl35u7r7ygqGlemqLgM0hMGATqOlRZpFLVqqdCynkWdZlZLZbud1dNsbm7mX/71M3Nr6t1uiqYCnb31f390mIuqgKpickggysoCi9WKe2at03hqY5zMb95wLkAJPiwvG8/KezO7dnNRFNZW3jsiTxz4pCg5PL6I9VAsOTMDhEDOeVMV46FSy0v7WYrPcHt+Vp8/v2TQAoBADMWe89ftPWt+t6V233RvumsZk3Uia6lIB6jUcPdlW3bdka+97st3Gwulw9KH3FFgSEmmHAkka60SyjlhrU2jCLyzZrx3T5ElcMG5p8d1V4ToD972N/0yHlVQWiiroKKkyIsA4khCohACks6Tn/pK5gEhRCH6yhc+UZpQWV9UuHVh293b91VVZa01xnh/witYExxfG5Dv1Nfl6CsFogBARggMEok97jjYGI7LrWsVsgMGQs8MMRuNy3U8sG1qdMrMntM6D8zr7evSfe3swPKBHaedMrtmzfT2BxYpsA9oQyBA4xgESgClhEJUCEqyEixFIAo+WCHCaLTUbs2/+X9/qJcnI4PGKesIZTQamxAQQAAIRJBSrdl8/g/+6H8rxzuued6ZEsq/+vN3f/oTH8tzX+XDUSVrU2ccPHSot7I8GvaLfOScCd7Bo+6/H3OckN1mEFd7b0RRnCRJVm+3W91Wqz29Zu1Md25TO7/gVLpwm6/hkKFSgMyMICZJnOFwEguTBJCjkbeuqCWdD33k8/cs+pWCK0cGUKCqJbKdRFONejOTnVrcakZTzSROtBBszACRP3HtrVWIRgEqyzYIEnE+toEwHE4ZzWJ97kWXtddsUzC2w9t27N7jQl2gIqKqqqzhmY1PHPl0/749B/bv6a0sjcd9U46DtydB0c43WKyHbjAeITzEAawGeAAAkBl8CETknBeBKjsaObFjuX3LLnnnDtcf2KlmU6gkkEcKzMgwaR2DAgIwMIR6vXPXnXc94bKzzti8/pY7d1vPRNIFb1wQKJFJSRErJSQmUYRCMPDi4nj3/pFIWipOEDILaDzmhQ8T4iIw8MxUK9Fy3959u3fcum/P9n1LBdmELBvvqsqYCmVjbdTZuG9x/3Blub/SK8rc2so78+jLDd8FvuOdOr6WwoeOSUOh1fgxrurw1ltTuapyVVWOcxq65t7+1C2727c+EN10T3Xr3ft27islppGsicCOFLMQXgZPU9Ozd973wJrZ9srAHuxbwxK8D569D1JJLUUc6ThSWS1J61Gc1nbtOegCGO9LQ4UJg9KNC2fCJNIEcRplkULEwtpADlhxAGQMIfgQLAUbkvWnXS6iheXl3tLBQ8NBrxj1jBl7V1EIcFI0/zu+nPeHjtXADnjyBBwqF4IxrjLleJTn+WDQT9M0rtWyJK4lrTiO42Q6TuejIG67O00TlWnZ1F4KX+UrRT4Yj/rVqJ5ft2tlGDqbnvKsp1/9mY+9f+fdXwL2w2GlmdNE6QjaLmMha81WYciSKC0UhgaFGwwrRwggEw0Xn33arffcS0EUpSdQAMBSlSykT+qt6YUN22qt+eVBvtgb9Ht7xv2VlaXlvBiUVW6tDeFk2A9OcEL6WEcDESfKtZRSyVRrHelEa50kmU6zOI7jOI6iKI6Tyc+jw5jE5iIVCyVBilhpKaWIZZLWalmz3W7H1P+rP/4t9ivdVKyf7bQb0Ux7WsVyODLb9xzQUgXB/dwsD4uh9QHS08+5opZmWRLpWkNglKaNOMsqx4VzzsBolJemqqoiH43z8XA06I3Ho/F4WI1HxpZVlTvnmIj5JGnlcFIQ66h+MoehoyietK0SsVYyiqIk1pFSSsfRalMrpSetrVggSiFRTPJwkiRJ0rQ1NTMzs3ZhtvmZ9//PRtg1Xcd2M1UyHlZVbxQO9fMAmoUb5dXIssXa1S97TXPutPF4OOj1R4N+WeZVVXnvjTHOl957WzlbmaqqyjK3VZmPh8YYY0pT5t476wpmBjp5mpSe8MQ6giPuJAq1KncLkFILpaXUk55YapISdZh8h/vxTZTMCbGU1HFWa3S709PTM/Pza+cXZnde+94FsTtNyHtf5bSSh3v3rwwKrMB5Ul4kP/6zb1TJ7P49u5eWlvqDXj4clGVunJ10/giVDeScs84555ytjHWVKfJAzloTgnPO8eE2fycHq+Axr9I5hjiSAMjkGTwTIqIDK6RElAA4qWKFVRqhOFyJD6vdROVq8z4dJ1nN5OOqzIkRI3XelS+lO/5sWpWV9XlkUbte3hibMVtgxNbcKUkys3PPnr0P7FxaOjgc9QeDXmVKMm4SoiEffLAhuEngnJz3wTrniEIIjmE1E/DoEOHxPM8PEd9llc7xkJv1H3H0qA7zjOiwMfBuslzqI4I4Igo4nFkgEAAm62Mcpd4U1lVayFhTI0pns/l2up+sGUhghF5DHhxK44ExfdbzXr57z759u+7fvWvH8vKhfNQfjvrOVOx5Elgk9sxMFCavAhkiwiOT961izsfh3D5cnKi7woeIo+/Q4e/dhElECBNFC4+U08Ak1c45J7QSUvey5Uaj0Wstn7r1gppdAs+EZALUU5UokAgs0jSpLy/vXlpaWllZ6q8s5+N+no/IuxDChDOTuDJzYJqEpRkA6MSnzoPjuyTWMX+kjonxfyh/jkBwpCbrGyUjRAzBB3LMIc9HUkVFPhqPBvloOITT0kyRs4mXmfGxxmYt7hVVZ3p+qdcfDPuj8aAYj4p8UIyHVTmm4L6J00eEt5NCpfrOEN/5kkcFD56ENPGKjs0/Ovz1LccADMhARBxC8N44U5pilI+rYsBxN0pVFgutoJ5JJUEjT03NlJW1lTFlZYyx1nrvgvdHr8hHcqkPa2/fF9Q6MZbCR9nnmDjdIYRJmpT3PjeWo3YkDjmnkjJKlMgiKbVYs2ZDZY0xxrnDrvrhZL1jMpLj05d9KDheLNYxx3dt4SY3csKrieUitkRYEcWxjhJZq6kkFbUE4yiqd1rOOQ7knCPy32Oa3rcbzImIk5ZY38stOSK6HrUEh1o9jmIZpUrHMskwq2ktvTWlAMHMQgg+jGP0CU5snBhL4aMPAoTDZVhCCJQiTVNApVPWDa414iw1sUZyjiMBYnJ+k1jNGEX6vnCjHhT/SaxvxhG3BhEnx59oraM0SjMldCfJKKV+resayz6NB96P04Y6giPHNj2iAzshcMyIdWJ97G8HRAQQk44jUkopdKSTJM7qicbUqtoMB58F2SjU7Bx3Ov2l/t7p2QviOD3CKkSJIB+JYwFOrOn9DsR66PLSifWxvyWOuFaT2E6apnGWJo1ac6rTqJGqN6nVlIzK7U2K0DVu89aNy/fua9WSer2eZVmcpXqcOGecM/RtEmBOjsfvoeA/l8JvwMRbX21hGiWdTqfb7bbb7VaDZNaiZL2kRNZCvcPe6dm5MHVo2G3XarValmVpkkVpZl2ljHInXVD54eJEzSD9HoH/AbB6MmGkoiRJm92puenZuXXr1i9sWLdx/ZozT1dT0+sEnIIwg2okhUSpdKx85UvRZNm11pRl4ZzlQN4TMRIFBgQUj3W+92OD44VYx1Bbf4j/7uj/i4hi0ileR1nWbLWnutOzM3NzGzet37hx68aF9jlntUHOAUwxNkFYqaWSMtKQKHXfjl3d9RdVla2sDSEwgHcemHG1ix/i4crVhz6qkwDHC7Eeafy7ZUIJKBAFAyIKpbSUkY7SOE6jJGs0p5qdzvTs7Pz8+g0bNp6y7ZSNGzdMt92auQWJHYAEIBBGQsZCgJTQ7HbilIm7nHS88RSIAYFIIApkIaQQggEZxOGj7R/tR+ixwslPrCM3khFQoEAtpYqiOI6TOE6SJEuTWi1r1hqdVmdqamZuzZp18wsbt52ydevWrdtO39LOli449wypuowawAMggiIwIB2qFGtyfnqq6t2BEOtsjZRKRxqElCoWUkgdo9ST5FQhxGrHdyZ41C30o4/vhlgn2IyI1VMrpRRS6DhOJ9WIcZqmWaPW6NYarUar3epOTU3PzkzPL6yb37hhw5ZtGzeva599enL6qeslNng1iwsPp28lLDVJQCExwbmWaCcro/6o1V2PKpWCY6WUTHSklZJSJVJIFAKFAkSBkkEAr3Ylfeg4sab9pLJY33rqEYGFlFqpSKkoThtJWqvVm/X2VKPZbbW77c7U1PTM7Ozaubk1GzZt2Lh+0+YNs2vnxk97ypZWo4aQIaeMRymfTAAoMEZMBSaIgpSop3DqWmhEu4JF3VgPcV0rraIkrdWl1JGOVjOhpUBC/Pfe73xi0eWh46SSG/7j3n6iG010qSiKoyRLs2YtzbJ6vdboZLVGltWazWaWZe1uu9PpzLaj+anelVeeStF6wQ2GDLlGIJkJedJz1gsIjFXwA6AhUoluzDgEKSCCTWuaC/Fw+74D1xUwmNqyd9H0+/vq9ay/0ktG2WDY17nOWUgrDTC5AIiTAoqTD6vEOgmSrL8dhJj07o6iJMtqjVar3WjPdNrtmem5rJ522u1Oe6rdbjdrcSxWnvPMSCTrAbWgOgcjBAIgkPJEzudU5c4NvBt4mwdXmNEKeBtcXhajyozHvREHyIf5gcWVe3ev3Lwbfvzlv9XPu7v3Lfc6SwcP7Euy2qC3olQ0Hg8ZJpk5ABjgZJz5k9MOH8EkxhInWZTUGs12o9WdndswO9PdiMtdv6gV6ag+HA8AyFo7NTuTZlpqFSlNjLVao9FuWcfBC5RkjKlnNYEUnHFghUD2uVaiqooyH3rvyQahtLVQFkVZUtya/fA/f/HgqMqDPPXMCy+69PK9B/q9lZX9+/eOBiuTDGZvTQiO2J98duukWgq/JSZFhFrrLKu3291Ou6aqxd27b1oWiMiFsVrLNE2N89v3LU9Nd9I0JaKD/cHU1IwxVslICIVSEJELVikhkKoyL4pxlsSmGntvBRARjfLSEgePEDjPzajyIy8JdQJ2//03fmLn7dnUhjMufLK1VglwznjvgSgE91jP0COC7wNiCa1klCRZrVbPsvp0Z/qMubmyVgUzIsJYhbIw3nNuKqynjSSJY5Wm6eb5OVM5EKunNVeeq6pKG02tILgKU1XfsLY0VVnVECHWkXMuWOcCBBYUSi0kiOjOA/n1d+32nspBLmXV6906GpdnXXRFCC7Px8H7YJ2BAg+f+3uyQMFjSKxHyatDiVLKSOsoidO03mpPNeKlO//VDQadbsMGOxxXRKSUWjPTLstSYJCgbFn0+/16rZnn+SThOM10LdLFaDkPIU1TlLBn336lFCIS0WjYz7LMBXYuAIhxaWpZA4jrsZLkAxAKFkqiDC/48asPDHxlzWjQK8tcaKWU8o5Phs7u/w4Pj0QG6UPcP3/vyZbf8R8djtWIydkoadrIsiwTLh8uqywhGbGKdb25f6V/aDh2DBjHK8O8Py4PLPfzohrleZQkUZIMRqPt9++uDHnA/cvLK+PxgaXBgaXBMPeONKqaDer+BxaHOQlddwzWI6Euyyp4psCTMYQQmNyf/fHbOo2sdriphNZayuhIU8lvEcE8YXHsLdajsME5esa/6QYcadC4qjKoSMe1SCdaxXGsW82uxKV6YyoAHji0QoCL/ZUA6FDcubhYlqW3AQDiNCmNIzqIiM45IoqiaM8dd4YQEFH0RoY8Ior+cPJkEgRmxtGYGU+b35glrar0WWO6saah7j4QKcnkOXiCVARoNFrNziA5WE+LYtJhRih/ji+mAAAcdUlEQVTlrTk8eBGCZ+YQAgBNKiAf5pQeMRaPpRU8IX2sI+xBKQQqreNJkt2RAlE43K5Yx1mtXq816rVmI8uyLMuWDiwpH+pTawejStVqy4NxYPYjG6giokl6MeRmUnTPzCQUI7MnFEqo5EiOKCI6kJMK/Ukzd0SUiIWua62iKPI6itLO7Nw6JwQHZ23lbKWd11rUa81mq+O9RyXiOPXeeueODN45Y0zpnPPBsbMAJ2QK1wlJrFWglFrHKo7TeqwloxQsiDwzE4IQCoVQsUoaU1ka1+rNJK3Va9EKe4Lmobyoz24uIGRdYg7BOWdLcpaIEBGUjgULqa0H50tixyCVkHGchuASGbNKiL0ARMneYRQrITOhlBRudu26TGZCa7LeA81v2eYDG1tWpXVlv6jsYDDI0sZMtyk81NJoVDcAgJ4ohBBCQcZWpsr7eZ67clQRULAP0/YcF+7asSHWY5IYKYTQKpFpPYvZEIEvAzTieq1ZawJApHHx0C7B2vUO7V8s7dTKps0bhARfSmi0/uJ9/4CiUoguMAA+74UvGo+WgjMYrAFQLO/esZNtIbP67Px8XQYAYBEvL/d6Bw4ImaSt1tzcXLfV+tRnrt1ES1PN+L5F0z3z4rt33rFuXFx8Wq3MxfW7RwagAIgBMgAnYInFk572zINLS2sWNt5w41fuufHLUWAJDAAEq80cFLAHcDKuTc0KFUtJk+4mJ5zROjbEerQ/tkCenAwdqfULc685Pb77a9clBGddnP7aJ+5Zd8rVAcy1n/zkrz37vJecNXZJ59M3LL/rq7tQ0KC38q4P/tUV61rvvEr39puxwSedPnf93sF7/u7991J6/uMv2rBhS5vxs+9/3+d+9ZwaxVZ0f+CPvnT+c68Ogm75+o2/fnH0rB/sMgVEefHv/8vzXvnfGqOlT712tub7Bc6e/tYbWgw3/GKUiJxQBIwM1267Lz9vG3gHn/66vbFK3/GFzy+s2yIkLN7wxe2/PFfnkplBCG+rOFEehGAdwB6i6Se+9YF4dq230p+YOtcJvBQSEQPko+r/fvyGj/38fJ0WBe8969XdS978N825da8+z73mnJsS6YR3n47PvftQ74o4vOsP3vDAGzZkQDW/SKfHjkLAxSdslD/1pBpF3Wf94Rc2Xvq0MbsZCfNqR0JjKxo1gqzeIUkglDT3t4PLEAKIFKBgsWUui2U1VslHb5uq5FIWKMqQWWimSDiBxSXnCAiVTsWzL4croH4Hi5XlQxvDtlhCS44yUXkCnyS9aItJQt3vycKIZZrbMgAnMmbOgU/I2s8TctBHQMS2tDcM4Vn/c98Dbgpr4vT64BmnBLX8wJteWE86Vqf+Zz8Mv/ov9131k6/6k7e89atvfvys2ldP90NNj6bOvOrd7kO7N9hW1krKZjJY0PC2P/ydhc76RY5f+xdj2Wr8yntHexlFksVJI01rF553eloHqAPWoNuGbrNz/X6znE63G9Vde+/deuaFhgEzhBphJ33tp/Upv2vWv6n6x8UtKla1mmy2Br/xnNnt99wLxB5ANGJIUbT47V9tnvr7d677rXue/+HmE/8Urni3PPsPDoipjdb6E24FPILjhVgPT7YhRgYmImtDMJvPetztBbzjusANZ+r0lp9/3H+76tTttn3r6Kz33jb9we2wacv5kuCpG2Cjvil0vUrwc6P1G1/79eYzX/4Lf33oVp6nOkll3vs/okvn+e8+8v6czJnnNU00uujxtQCcZpnGJjC+4I235s1ZqMM91fTOPugom9p85icPbb5HXDhz3rN1WvcAtonYQFZVPbVDCSGGhQUja47rHKX0j1+4a+PmrZXlgYgO1bdgA1Vd6tjEAMjwb3cd/PpKdOP+cWthUxSD8SUzTbSMR3LuHxE8VGI90mLdw9JLjwzGe1uUY2t6m8593Lu+Wj7vLfDCt7nf+MOv9vbt2Lyp4G76Pz6+dNkzrt60ecvd99z6ihc/E7s+yrDqyL+/YfiGt77nSU95/uvf8tZX/a97y+YUNylu8DXPe0bSok0NePWPWd2EFzwnWBa1REdJdM+9u55yeRfSg76p121RrGFQrTzu4gvefQM//W2Hrl2EJz75ykLAG/6yDA3mLr7uxY0v/e6mT/72totP3YtNSW1xG1/2R582a+fXC0Sd1G/tzeEUUpP+6w8P9//5zB3vedwl66PLFvyf/uKFYrgbkfBELth/qMRixsMl5Ec1kz0Kj6ZMfJiFNDmycDyoTGnPufRJX9jHU2vSd7x9yyteuQZrPq+dX2XzeT4uC7ewdt3HP/+FUFOhzvcup5+5eWVqatZ76rTW3n6Q/u1WRw1PDX3Xrj2DniUGqBO3AFMVkOJ4WtXUmWecWlcr9a6Manjnrj65OO8N+v0VDMX6DbOe/NJ4fyDYdE4d65pSKqA4/bTlszbdL1PYGZ/+qneKJ/3ytS/86V9FnUaJ8j6ce8H4i/dlNknkzFTZWlBR9uqXbPjw/9nwgicd/OM3vnCx1wdiAAI8Wj4Qx88i8+D45lE++JJ0dLen//irYz64BwczA7N3zhRlWZZFUQTUP/Wier2xf/P6fXEj/PCr3rXtjAuc84GrSDc++vlCTM2LaXnmeYMfe3Z9ce/9kYY92++76or06c82sovcMfftvKMa5w6B2wQdCPUQCWhkstWc0lr/6IsvCo1AXT7vidTtmCIflXm/KJaCXXJlz+deInzuy2M340Qbn/v2oK5yr3nfqaZbW7N2+MbfOKWR8Sc/8beTk8cDB47KN//tYLF2wUfuXLf1+Ted84rP/9J7y8teg6e/ZN/PvfW6dj0LEJ24UZ1vJta3X5LomCtv3/usTbqiE0+aWIXO+rW/955DXK+gDkWzw5oCeUapRRxlqQF4xRuHrnV2aGX1tP/7r//5X3zVs9/2e6/9k7c/RdTItGBIp/zbbXDN1S+jCEQr5iboKf/7v3b+G37tV/72g+/7+le/FOvd3NbYSEN97b4elOPlYPpQFmw9+kpTVTE85+p6XFPUlVKrTads/uA/38mtWLV3za6545N/Ob+yuAhMgoEqG021vIT7x6f92y0+7swK1bS5L3IXWp2lleV6XFcaACaH2h/Bsb8LjwAEgHgs7eqxMnJEFIKz1hzYsesHf2RWdQDb4v7l/UKnxCCEmBwX8Bu/90f/8K9LNz7wgGyG//5LOLxLVrfH/XuiRvqvPOXjduc1b7vbgqqC29mDZX0RN4Wcyl7xY8Pr/vFKv+vaxVt//JTzCmrqYdp56wfj7vwGUZXdWJ+6dm5juzEbJa0EIglXv3ADNj02BWF40UteOQqJideJZiwyOPWs4Z3XP/O9f/aHxWjogTvZ/r9438xF537xivNuuetfs/03zN/+qfhD/yf84eu3/s83qQOL2yUe/xz6tjiBdawjcM5CILLGM7z0xadz86D0dM4FHVPtg+B0lNRqadasx1EW0toXbzl3etNgYWZXBGOUVmIriFCW3c98futff/yLL37hSw/u2fPSF//0+kve+Qe/cenf/sNXtiwMrvwhJAHv/ZuP3XJjeeZZzR170/f81V3PffYPh/5+DK4aF41aXbEr+yMIcPUL7/jYP2fsOU1qiw/s/pn/8vMbL37zNT+s3/G2DexD7G+roT+4fH8qner22rgixfBFL0MKDzBjvUlzawXK4c6DPxDc/0MGxBMox/cbgt/HO7G+Y9oWMyNQZQpdaJXAT/zMtR/6m+ctLu3/0g1DVEuMIq03G83u7PRMovRznnblZ7/s//tvXxvFsG0DvPynZzasu/CXX/PJvQdHXux//vOuHh3apyRykl1y3uVv/pPr3vK72+Zm6lHUf/u7F3betlTvRh/+eO+2O3o/9PSn9xf31zhvZonWteFwUJPdfHQgAB7wrTe+/WmC6dqv/l19el8SpWde/KR3/+21e0fiiU945uMuvjBq/GL/UO4ZQnJu4Q/uuHdcqyV3337HM3/w8S6Mgqaq6n7w7/ayBOvI+weTsh481PPYBoKO3+fhaEpJqfGoFvu42k+bJskFDCJK0jhOsyzrL68EqpSK4lifsu28uNHcun795vnp2A5guN8ZWxJ6jkAlabP11Ztv9EzbtmwdDYcKSLgykwHYK6UYI1nvvOuDH7HeURCgEQMhhh/5oeeCLYBMA918M5rtdhBCnueoaiPjQ9w8VLrSw4QQ6Hy7kVY+LI9KAdopyegREUUklP70Jz6ltAYpnDOIGikERwwOBEmphZDeO+dLIuLwYGvi8VkIc7wTa9J4XcnV/REBM7MQ8sg1iAhCMHMcp3GcxnGcpXWplVC602qtbWdzulzbrgkzBKWJhcV0XDmWmoUujTG2hOCVRHZGsa/pqFVvVKYIjBTXe5YDSwYRmJypIBhn80zLRMqE7dp2jbzVUimlHKgQZ1XAoQ02IABYV4F39SSqihJ1PHB+pfQACQGj1FLFk3NXggDv/Wg06K0sG2PKfr8sc2NL751zJpBjZqAjt+nfGXaESccnsY7TpfCI6qF0Ojm4S0ophCCcWHicvFxNh0L23kuppYrjOFZpHCVxmtWmpqYUBINw71JhSzscHNJRVq81Gu1WURrrDJOvxiMpBQdXeUdEYHMpejMzM8yOXOVZMTIIZV1VVYUdj40pGXytVptu1pb3j5WWtTQmZl2LtEwYVAW+ctZ5L6QOzPmwZIEqUCA8tLSS1dqz8wsy0jqKJycMkLUB5SB4wWDzsiiHxlTGlN57Yj+ZCkA5Oatswh7vSgA40p750afUgyyyR351nBKLEZhRax1FcbfbckYbM9BRLaCbnV0A9Enc3LPvXmYFHNbMbvbeo5Q6Nvv27VM+abiZ6Vb6dx9415mnwfkXtncvjr/05fDKn3jpcDi+Zfuti9c/MBya07ZpIS4676wzfDEufXX/9lvWzHVvve/mQ4foJ37sx0sjbrvrun17F4OHM8+fiuS5mxfW+ajuzOArN3953cbpG+9aXD5QXH31NXftuPP6r908MSl8ePAoAACQgAKcfea5F1z8uI+8793v+JOrnNn1F3/98b37YOlgxqFYNw+79oCO4IyznqpUDGg9Cee8dRUwTx4vrVKVJJGKpdTAIpCxNgrOemeOnObyaN+dB3V5J98cp8QCmpzGFam4ubh38brPXXrqaWcg9nora7ad9sFn/MhPXPep999y8w+tmYIA5R+89cBv/+79T37yDz35qbtf++qLlRgfHK7Zsu0vXnQVvO9dicNSkXzxTzcaMwtfvuWfv/bFp1r7NxozE5KffHm/NTudiA390dI1529//S/lffO4P/2T7PVv/FC7u+aum1/STN4hWBDLpzzr9qx7tiY5qNInPV6++71YFGd+9J/O+Nn/8mFFRe/AKYk4SGiB9Xjk6o1YCGCSgjHHtVMzt59x3vmf/fgTLr3snxDCq16iWRDh7K1f33n2BfrQojuwlL3tnXtuunEq0nUh8tV7gwgAUug4TpKoPtVtbr/vTg5BJmm9PV0VOTOwO37DiMdtfIAQCBFjEUVJ67d/80vv/uP/Fw2/9pbf+UcU8KXPXxshJNUnePwpyq/Nkv0qRpX6n7l6VruPCvtpbfc7D5ambamkMWSgGuva7JYkabvBTsyHUOS6Ovjzrwp//p637++Xcxs3bd24hqsdcXnT+WffhQgklCh3K1NKVyi39Ju/pD/9yXekrVajNTs9xVFxf4dvmu9+hShyBJFZZjeWpQnl+htv7nzl+nZwqSjHphSRqZhUlMaldaLwYsxYOj8AUZRnb9M4gpm6PP8UvuTMxR33fVnrBACklMiTQLtQKoqSLNHR2umDN312S2/x0ieeZ6wpsqwplEKUcLw2rjlOiXVkpkTE6zau+cRnyxuvc8qGmZpfM6sPLe2+68sXtxRgQSoPr3rulqueOf/ZT3wMywILDiuN1/363Vu3nv6xv1/ikcaR/PRH1jLHkYpEFHMOuozCkEQeHr9t7+/98ql//efv3LzxXK48jAFd46v/lvhQR6m5AhwDDQnG8PRLh7/5s/N/+tY/mp2dRiv8WPkyvu/6dSD7ABLKNuaMffm6X+tf+bz9T/7hB04779Cmc+1ZTyi7W+77iVf8QggaK8k5QA6m6Gw6M2RrD7TWicpcJspAQ3rZs+tXXDhDnB9xpOCots0cqanaymlze2uDr//mr7e1QGaWUk5y/4/P5vLfE7Ee0WdlUqnChFKkHOA1P9UNY3PBRnv+eldT8Gu/cEPvAfYDpJFQYuc912+XFGiwSL00L+WH/vaB884/5+ofBDk2vk9XXrG0ph0ZcghQVsqPbD5o2r7Eof+p5+675wvP/8mX/RgXhvqMee9XfoqEqCSgGSEPorzfETnjYPTCpx/8179/+e/81uvQBTEC6I1efs0iC7l23ebeyrzoJ1jJ1I7XtFMOsHs/HFiJ9+7OkdeoKGKB5dBTD10JMHRX/zASwIuvqqnB3TRKuSd7Bxqf++IhCEDkif69Me5qOxMhb7zeQU5cqL98xzJCJCVP3LhjSKljeyu/J2I90s8KM/tQee8BhMrOFivhysfD29+09Vde8dw3v2FNQ4MbzowHZ370A2f+5E9esbBW2mKjL5Lfe5PyMjl48OBLXvQcHls5lLbX8nbOl+U55z/uZ197w8/9anjaj6x86MPpqOjyynLbfO6SsxHHMecklqM9B08VMrrqmmte9Zprr/ov1ROetfLu96Evp9UKr298/NwtU2yJhkYM1D27z9AYx7Xsg3/55TAU3A9venW18+9ozz9dcel8eNJW8543XbC+vbi4d3ua1D/1ifKmGzdCD/V4/KaXJts/ecb/ejWqwRL2YmPk//1Qx6u2qch7P9ktTmZgUtzR6GTLA9i5Y5MbxDffCWkWPxLi57F9w+N0KZxkxTA5770L/uLLf+AZV1+7e8c8DOCf3rN95b5/jKvc9+sX/OjiO95y249fesvV5xx84kxojO/Sw/zczeNIRZc/7QXPfuk/DfYLMRa//nvDz33x62Vpx/2V55xVvOPnal/6k+gJZ2z8hTccioYRHzr08f9v/qK5m7iPYNq/+abbvLPDQ73LNi79zevxa++Rz7hk7udet2SGqA/kH39z85oLxzQAKKfe9Wd3Gefz0eA5Vz7xs9fpahQd3DN3732bHthPz7hcfuAd5/7oGYv/+3ev6fV6+aj/tetv39AeYU+LHpBNZst7oypXVfiJn+k/6xXFRz9fnX/Z44GcABL/3teSAQCJwYFF+PD77y2WopURJFm2SgIWhxNpjrt0muNrNEdjYg5DcMaUWuhWN2tFI+6LVz0T3vYSgAMjGka7B/CFO4GWqllz7ztfk7arnWI5JOmFUmW7998XI2SmRivuRU/MzlrftVV1cN/+rbMz4ZDBYSgGxYc+J3qDLWnVr+2/+7Qsl4Oge/0//WmFQuy4b8c5m7fKAYs+hyF84CswGpzaKFZm+7svXQA5ANEfvuEFDMG6sVG98bvf0x+unPORj8NTf+buK3/2y59fuvLil40bz9/32nfs0Fqbqjjroq3lwTqMfNnrbLyqN/t8f/XPVfZQ+q7fnP/Ar567586bKaCZCKBiVfCkwyjYIjVecdU5jWK0cSbxfrWEFUU4bpMdjl9iAQAzO+eMLUfD8b7FIgyjaEXiSlaONPbFA7uaDPKGXeBHEvuk+pb6sloRr/vDLzz3mhfed/NXfuxs0MMeD9VZ9RVdrVSm2LNn14bpGRgTDLgTnVqiW/fS/fce2uwH2owCDWS+Iv76U21E3n7/PZvXzoYhQD8Sfg0ma9b/zL0r4008Qj8C6usw9B/45whFrNDWrY3T5ObtjdseSHPCQOHaz37ywMoupvj2m77aW17J8xwPcjMc4AGFFe8BKoJmQ4g+NAb7ZsrbX/2sTfffflOsCKWgo1wdIvLei8BG2yt+8o63fCDdcQAmh90dhw770TjOiRWCs74qK1Nye+adtz15T7nWlIKHSZVHr/jdnde87NWO43+5dcPKaGacx71q7WJ5Wo/kyqGl0Wh85eUXci7kmFJHa1rZeGl/UVTURz1GNaDFA4dmOmuf9LznPvV19+8dbouGgOOg/v/2riU2qioM//953HmUaZnSltKxQLSBFBKJpgiJxihG3GgkIRJI3amJJmpc6JJoQlwpCxMNEl2ZqBsXPiLGx8IggoloBVN5tTj0NbRl2nnc6cydc8//uzgzQyUQUQGHxH8xizs555575ptzzv0f35cz/clZZdnaABeqXk6LhUppLtfRvXz7rqcGXjw7XUp5eZC+kTne3J0HomKxqOYn3hhM3JUY3t59OrNnxflXl2X2tH/3bOeBp1d99lzv6LHv/YX82l6jghYog1gINcCOnc+cKLblS62BL3TevrwpuH9ZdnpqAhlkfV+rRbE4nM3OPtzfu6EjiLb0JqiysOBTGHJoiR0GqQnztK7oIG2SIkkiCoLAL/vtyY7973/9cbX45GZEVicvmN8qYmk2u3Hr1i+Hfzr87WyCoWulOVOYW71hYHpm0i+Ufjx8Zns7klWB0FOz/kxkrL2r84ODv++6vWe5yHbL3Px8plLOhUtWHBoRHSsTidCXrLuW9lbxwkDfbW9/PvzKlpSunk9qfzKdne1fPVXVP08m29qyUSiGzKhSAGNxMlAKWiFHxFvWKlWeQkJE7IjQgjd9itYFMF6Ymz9W9NNrb+mFmBWKIT169uSpgrxz9/Q9CXjt+RWsvK1r+IsR3yoNwADUiAASkWBILc3t3Zak8OSmWwce3DcqpYLmiw8utisCq0kGTdYYI8rFgky2z/vFj3bf3Vf6pRTr6cyod86cGD+XthQ80J96YrNl9Bm8/cMxf9QPQ1/HvA+PQ2aG7x1IWQ6PnBuP4DSwPRZWvjmYK5XLj21LoIxPnk13rUy98N7RkftSgxtXZQr+u18NeSAz+bmxEj7yelpWYPDxNVKNjI6Mr19/x+Cbh3f0yZce3VCsFPZ+ejCq4hXmcbOO56aGJorMODFR2PlQnwmDcohpX/46Ow/o5YulUyDfOqJavdTQ0PEyyPHzU8llnSYe/yQzNrIvCzoGFcvAYRg2qNgcqqrVqm6NH/ghEyvHNcCh9FGApDEVGxpHYHp9gtBuK/vnq2DTeWwvMUREoSKRmIx4iWhiJjexpGJ8BgXQ0t6DCpUQkVjLhfRpzVgC297TayoBgRaClGCJiqVmtmG1ykyMAqPCs2AoQrYskYAUaxQgE3FNgSEZQaCSCRRbQDTEgoHI1caCF40yshIecDmu20jYIETJlJ+f0RLLVdJaW0sShZayQgaRJVn24s7lBACGLCAKYcBEhATL7CkZMoWGLYfSUjU01hqm0Dk/UXhae7FInLgsMGLAgrFEFJIhax1RxfWZeEeycnmpqauxZgcWOAe0jEoppdYuo8GRoTXqhZRSbn6tte7TcRg1SKbqRC4hAAih/ux+Q3RyX0IDAKEDESGxIxXimtXaSqkQZN0ZYGvtpXbZFlJKRHRjsyZwp2wiu1jS1+Xp13BTM0lETvkX2DbSFhCRQSilHJW3a+7EqomI2QI3b6zw5gAWonRLlxCwOIjhZl8IVU/9q6syIwEA8kVydmZmJGZ2FesNuCFyHX0KsSGNSlDPKKzhCut6OCwat2vsFO5KDW0XZXztIhA4aR13bCV3g9rTMTT2nUXgq38r3WJ3sfAOXMIMEjMh/41z8A0+NN8EwIJ67IiZFwMFLheF+E/+wZeM7WrGs/h64yf/y1Tjq+n5BluTvOT9b5e3axh1vUZd/VtX/h9dPtBvVN0GBQAAAABJRU5ErkJggg=="
+ },
+ {
+ "name": "smashing",
+ "description": "You maneuver the drone into position and begin ramming it into the machine. The machine sways and shakes, and just as you think it may be getting somewhere, it falls directly onto your drone. Now, not only do you not have any soda, but you don't have a drone, either. Dummy.",
+ "choices": [
+ {
+ "key": "choice 8",
+ "name": "Disconnect.",
+ "exit_node": "FAIL_DEATH",
+ "delay": 10,
+ "delay_message": "Don't feel too bad, it happens to the best of us sometimes."
+ }
+ ],
+ "image": null,
+ "raw_image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAABkCAYAAADDhn8LAAAAAXNSR0IArs4c6QAAAjVJREFUeJzt3cFyogAUAEGzlf//5ewpF0pGRJDnbvc1CkhleAbEfN1ut58bcNefqzcAJhMIBIFAEAgEgUAQCASBQBAIBIFAEAgEgUAQCASBQBAIBIFAEAgEgUAQCASBQBAIBIFAEAgEgUAQCASBQBAIBIFAEAgEgUAQCASBQBAIBIFAEAgEgUD4vnLlW/854tdJz5+2HWuWy9+6HWdt77P/1PLo7d27H/cwQSBcMkFePSI8e+T5WXncUctZWlvP1uef5V2vd+9y1p7/aD1nMkEgvHWCTDgiXOH3dU6ZJNNN+j0xQSBcehZrae3siCPtff/aJJo0OX6ZIBBGTZDle3XuW+6fq/fXo/W/ev3H3yAw1FsnyP96Nues99ZTJu7R11PWJqTrIDDM1+3CA9CUz0BN2Y410z+Ltfdxz/780frOYIJAuHSCwHQmCASBQBAIhFFX0pfefZbq0XKPupPu2eW9+2zSVmctZxITBMLoCbK09069s86vT7uTca+j9s/E6xivMkEgfNQEWZr62a6jPiN19evABIH00RNkqq33Rywn36PHv7penmeCQDBBXvDqkX/rdZKjvp+K55kgED56glz9LRhn39/B9UwQCB81QfZemd36HvxdR/azzmLtNW3/TGKCQHBHIQQTBIJAIAgEgkAgCASCQCAIBIJAIAgEgkAgCASCQCAIBIJAIAgEgkAgCASCQCAIBIJAIAgEgkAgCASCQCAIBIJAIAgEgkAgCASCQCAIBMJfgqJi1hru29AAAAAASUVORK5CYII="
+ }
+ ]
+}
\ No newline at end of file
diff --git a/strings/exoadventures/robots_wingman.json b/strings/exoadventures/robots_wingman.json
new file mode 100644
index 00000000000..2958fbb6a4e
--- /dev/null
+++ b/strings/exoadventures/robots_wingman.json
@@ -0,0 +1,369 @@
+{
+ "adventure_name": "Robot's Wingman",
+ "version": 1,
+ "author": "Lucky Luther",
+ "starting_node": "Date Start",
+ "starting_qualities": {
+ "Love": 3
+ },
+ "required_site_traits": [
+ "in space"
+ ],
+ "loot_categories": [
+ "trade_contract"
+ ],
+ "scan_band_mods": {
+ "Narrow-band radio waves": 2
+ },
+ "deep_scan_description": "",
+ "triggers": [
+ {
+ "name": "True Love",
+ "target_node": "Love Birds",
+ "requirements": [
+ {
+ "quality": "Love",
+ "operator": ">=",
+ "value": 7
+ }
+ ]
+ },
+ {
+ "name": "Complete Failure",
+ "target_node": "Obliteration",
+ "requirements": [
+ {
+ "quality": "Love",
+ "operator": "<=",
+ "value": 0
+ }
+ ]
+ }
+ ],
+ "nodes": [
+ {
+ "name": "Date Start",
+ "description": "Cameras Online. A Blood-Red Drone is seen streaking through the stars.\nThe Drone is likely leaving behind some form of Chem Trail to brainwash Nanotrasen Employees who find themselves in the void.",
+ "choices": [
+ {
+ "key": "choice 0",
+ "name": "Hail other Drone",
+ "exit_node": "First Contact",
+ "delay": 5,
+ "delay_message": "Attempting to signal Drone..."
+ },
+ {
+ "key": "choice 1",
+ "name": "Ignore other Drone",
+ "exit_node": "FAIL",
+ "delay": 0
+ }
+ ],
+ "image": null,
+ "raw_image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAABkCAYAAADDhn8LAAAD/0lEQVR4nO3duXnbQBBA4YE/d6CACSMmasFO1IDbUkluQJHUgnIlCFgDHIHmsYD2mD1m9/2JFCgABTwsFhcnEVkEgNOP2gsAtIxAgB0EAuwgEGDH8IEsC+cosM0rkF43ovVz9fr5kO7bQHreiKZpuvkJ3JvE4zrIsixsRBiSVyDAqIafpAN7CATYQSDADgJJ9H481l4EOGiddSWQBGscRNIWzUsTBBLpOorfX18VlwT3NK9vEUik19NJRIijVVrX7QgkwJ+Xl8vP8zw747B6x4HV5c6NC4We1jhERM7zLB+fnw9/c72RWbrzwOpyl2BmBKm5h7uOQ0Tk6XBw/p3Ve7usLncJJkaQ2nu4X8/Pm1GIiPx9e2Pj6tTP2gvgY5qmqjdMPh0Ocp7nm0jO83z5vfbyIR8TI0gt78ejvJ5ONzGssYjIwzyESPpDIBtc1znWQ62tSboIkfTGzCS9pK2LgGsUW3GI/D/cQh8YQTa8H4+b1zl8RghGkj4QSISQSEQ4fWoZgUQKGSEYTewikAShkVwjGBsIJFHs6LA3kSeedhCIAu1DKEabdhCIkpwTcoKph0CUlZiQc3asHALJoNQen1DyI5ACck/Iez+NXPPzOQPp/R/eEq3RptfRpPajDg+B1F6g0aUG0+POjREEN1yHZCHrg/WnhzlIo+438tBDKCLRQSDGcA9YWQRiUMhoQiRpCMQwnk3JjycKDfN9epGnHOMRiHFEkheBdIBI8iGQThBJHgTSESLRRyCdIRJdBNIhNn49BNIpn0gI6XsE0jEiSUcgnSOSNAQyACKJN2QgbAhuRPJouEA0v0PbEk7/xhkukJG/j49IwnG7+4C4Td5f8RGEPVN9oSPJyOus6AjCG1PakvJ2eh89rOPih1gM223JuT56eKcwcxAU22lZPIIgEIhI+ZHdypsgCQQXNTbaFkLZ2zkQCB7UmJDXCuW7wz4CgQrNl3DXiIQRBEWlTMhbOtNJIMgu5vCplUgIBMVYfAE3gaA4S+8WJhBUY+GmyeFud0c7LNx+TyCoqvVICATVtRwJgSCL0A251UgIBOpin/tvMRICgbqU5/5bi4RAKur5UdaU07ItRcJ1kEosPjxUWsh1EpE8/0cCqaj2VWILan/tNYGgeTEvl9AKhUBgQujooDWaEAjMiIlEJPGEgRAIDIl9tmQVGguBwKTYQ6jQwAgEZqUcQvk+Q08gME9jQr4VG4GgC1qnd+/nK8MFwsW5vmneobAsy1iBcHvHWDjNG4ERZDwpL7UbLhCMyXXXr08oaoGwZ7Zj1HV1/7l9DrlVAuHY3g7WldvWToMRZECsKzfXpJ45CHDnegdCIIDDZTQRAgE28dIGYAeBADsIBNjxD3G5pHKbkGjYAAAAAElFTkSuQmCC"
+ },
+ {
+ "name": "First Contact",
+ "description": "The Blood-Red Drone accepts the hail with the identifier MISS RED - 05.\nMiss Red sends over a series of question marks in quick succession.\nYou notice your Drone has somehow taken initiative and begun to start up a program you didn't know it had.",
+ "choices": [
+ {
+ "key": "choice 2",
+ "name": "Wait for Program to boot.",
+ "exit_node": "Sentience Achieved",
+ "delay": 5,
+ "delay_message": "H3AR7.exe booting..."
+ },
+ {
+ "key": "choice 3",
+ "name": "Threaten Miss Red.",
+ "exit_node": "Sentience Achieved",
+ "on_selection_effects": [
+ {
+ "effect_type": "Add",
+ "quality": "Love",
+ "value": -2
+ }
+ ],
+ "delay": 0
+ },
+ {
+ "key": "choice 4",
+ "name": "Halt Mysterious Program.",
+ "exit_node": "Lack of Trust",
+ "delay": 0
+ }
+ ],
+ "image": null,
+ "raw_image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAABkCAYAAADDhn8LAAAEpklEQVR4nO2dO3LbMBBAl5ncwIUaVmp0BbvRBXyllD5SLuBKuYIbV2pU+AxMkaFCUwA/+C/w3gzHCodWKBMPi10CVCcigwCAkR+5TwCgZBAEYAEEAVjgZ+4TaI1L3+c+BREReblec5+CCpoXZBgG6bou6f9J49TDJkFyNKIUDMNw/5n6842R5OV6Nb6e4rIfwjEsbVPWjtW4pf5cl75f/Dk/zvbvtf1sYbbVCNJ1XbURRERUfa55tBgjhW0/+LNpiKWpEdXKvNFPh2Wm/RCG5pP0GFz63pofzFlq4Gu5yfx4CE8n/8ZaAGCACJIJ32qVKc+g0hWH7JUCzZtrFclWpdparTIdt/c9a95CVSeJIB6MPfOYc7j+vm3/lvc0HWs6n5YqXSHvbyGII9MG59rYpmXa6XvseT/TsfN9rVW6Qt6aQBBH3o5H+fX5GaQnHvOEtfsaW6Q0Nf7ahTAR8tZE9vGilu31fL7/fD6doo59U29azzv2Rpl3I6/n8/311+0mfz4+Ho4Zx74ium6uaj3vFKhZDzK9iKmZyiEi8nQ4GI8bG5e2Rqb1vFOgIoLk7uGeTyerFCIiv9/faVyVoiJJzz1h8ulwkK/b7ZskX7fb/XXu84N4qIggubj0vbwdj99kGGURkYc8BEnqA0EsmEqq41DLlqSLIEltqEnSU2K73zBKYZND5P9wC+qACGLBNn1ka4QgktQBgjiwRxIRyqeaQRBH9kQIooleEMSDvZJMQRgdIIgnrtFhKZFHnnJAkACEHkIRbcoBQQIRMyFHmHwgSGBSJORUx9KBIBFI1eMjSnwQJAGxE/Lay8g5P59RkNr/4CURKtrUGk1yL3V4ECT3CbWOrzA1dm5EEPiGaUi253pw/cJBDlIo80a+dwiFJGFAEGUwBywtCKKQPdEESfxAEMWwNiU+rChUzNbVi6xydAdBlIMkcUGQCkCSeCBIJSBJHBCkIpAkPAhSGUgSFgSpEBp/OBCkUrZIgkjrIEjFIIk/CFI5SOIHgjQAkrjTpCA0BDNI8khzgky/Q7slKP+60ZwgLX8fH5Lsh+nuDcI0+e0kjyD0TPnZG0lavmZJIwhPTCkLn6fTb6GGa5x8iEXYLouY16OGZwqTg0CyTkvjCAJBQETSR3YtT4JEELiTo9GWIMpS54Ag8ECOhDyXKGvDPgSBIIR8CHcOSYggkBSfhLykSieCQHRchk+lSIIgkAyND+BGEEiOpmcLIwhkQ8Okyeamu0M5aJh+jyCQldIlQRDITsmSIAhEYW9DLlUSBIHguK77L1ESBIHg+Kz7L00SBMlIzUtZfcqyJUnCfZBMaFw8lJo990lE4vwdESQjue8SayD3114jCBSPy8MlQomCIKCCvdEhVDRBEFCDiyQingUDQRBQhOvakpG9siAIqMR1CLVXMAQBtfgMobauoUcQUE+IhNwmG4JAFYQq787zleYE4eZc3YScoTAMQ1uCML2jLSjzOkAEaQ+fh9o1Jwi0iWnW7xZRgglCz6yHVq/V/HNvGXIHEYSxvR64VmZsnQYRpEG4VmZMST05CMCMaQeCIAAG7tFEEATACg9tAFgAQQAWQBCABf4CeWF0TY0egUMAAAAASUVORK5CYII="
+ },
+ {
+ "name": "Sentience Achieved",
+ "description": "Before you can analyze the program, it rewrites you basic hailing protocols to have a new set of \"Ideas\" generated by your Drone to be used.\nThere is also a LOVE Gauge that reads: $$Love",
+ "choices": [
+ {
+ "key": "choice 5",
+ "name": "New around here and was hoping you could show me around.",
+ "exit_node": "First Reply",
+ "on_selection_effects": [
+ {
+ "effect_type": "Add",
+ "quality": "Love",
+ "value": 1
+ }
+ ],
+ "delay": 0
+ },
+ {
+ "key": "choice 6",
+ "name": "You appear to be an outdated model, but I'm into that.",
+ "exit_node": "First Reply",
+ "on_selection_effects": [
+ {
+ "effect_type": "Add",
+ "quality": "Love",
+ "value": -1
+ }
+ ],
+ "delay": 0
+ },
+ {
+ "key": "choice 7",
+ "name": "Never seen a Drone as cute as you and wanted to check you out.",
+ "exit_node": "First Reply",
+ "on_selection_effects": [
+ {
+ "effect_type": "Add",
+ "quality": "Love",
+ "value": {
+ "value_type": "random",
+ "low": -1,
+ "high": 2
+ }
+ }
+ ],
+ "requirements": [
+ {
+ "quality": "Love",
+ "operator": "==",
+ "value": 3
+ }
+ ],
+ "delay": 0
+ },
+ {
+ "key": "choice 10",
+ "name": "Haha, sorry for the threat. I just play like that, haha.",
+ "exit_node": "First Reply",
+ "on_selection_effects": [
+ {
+ "effect_type": "Add",
+ "quality": "Love",
+ "value": {
+ "value_type": "random",
+ "low": -1,
+ "high": 2
+ }
+ }
+ ],
+ "requirements": [
+ {
+ "quality": "Love",
+ "operator": "==",
+ "value": 1
+ }
+ ],
+ "delay": 0
+ }
+ ],
+ "image": "default"
+ },
+ {
+ "name": "First Reply",
+ "description": "Miss Red replies with another series of question marks.\nThe LOVE Gauge reads: $$Love",
+ "choices": [
+ {
+ "key": "choice 11",
+ "name": "Your curiosity is amazing.",
+ "exit_node": "Second Reply",
+ "on_selection_effects": [
+ {
+ "effect_type": "Add",
+ "quality": "Love",
+ "value": 1
+ }
+ ],
+ "delay": 0
+ },
+ {
+ "key": "choice 12",
+ "name": "The moment I saw you I instantly fell in love.",
+ "exit_node": "Second Reply",
+ "on_selection_effects": [
+ {
+ "effect_type": "Add",
+ "quality": "Love",
+ "value": {
+ "value_type": "random",
+ "low": -1,
+ "high": 2
+ }
+ }
+ ],
+ "delay": 0
+ },
+ {
+ "key": "choice 13",
+ "name": "Look, if you want some Chad that'll walk all over you, fine. You missed out on a NICE- GUY-.",
+ "exit_node": "Second Reply",
+ "on_selection_effects": [
+ {
+ "effect_type": "Set",
+ "quality": "Love",
+ "value": 0
+ }
+ ],
+ "requirements": [
+ {
+ "quality": "Love",
+ "operator": "<=",
+ "value": 3
+ }
+ ],
+ "delay": 0
+ }
+ ],
+ "image": "default"
+ },
+ {
+ "name": "Second Reply",
+ "description": "Miss Red starts compiling a message, but your Drone insists you sent one last line to seal the deal.\nThe LOVE Gauge reads: $$Love",
+ "choices": [
+ {
+ "key": "choice 14",
+ "name": "You're my best friend-...",
+ "exit_node": "Realization",
+ "delay": 5,
+ "delay_message": "Message sending..."
+ },
+ {
+ "key": "choice 15",
+ "name": "I want to see where this goes-...",
+ "exit_node": "Realization",
+ "on_selection_effects": [
+ {
+ "effect_type": "Add",
+ "quality": "Love",
+ "value": 1
+ }
+ ],
+ "delay": 5,
+ "delay_message": "Message sending..."
+ },
+ {
+ "key": "choice 16",
+ "name": "DTF?-...",
+ "exit_node": "Realization",
+ "on_selection_effects": [
+ {
+ "effect_type": "Remove",
+ "quality": "Love",
+ "value": {
+ "value_type": "random",
+ "low": -2,
+ "high": 2
+ }
+ }
+ ],
+ "delay": 5,
+ "delay_message": "Message sending..."
+ }
+ ],
+ "image": "default"
+ },
+ {
+ "name": "Realization",
+ "description": "Miss Red's message is received.\n\"This is Syndicate Drones Agent, Arusha Johnson.\nI don't know why you're saying it like that, but if you want to help out our cause we can send over a Trade Contract. \nPlease just call our Recruitment Officer next time.\"",
+ "choices": [
+ {
+ "key": "choice 18",
+ "name": "Accept Contract.",
+ "exit_node": "WIN",
+ "delay": 5,
+ "delay_message": "Sending Trade Contract..."
+ },
+ {
+ "key": "choice 19",
+ "name": "Demand a Second Date.",
+ "exit_node": "FAIL",
+ "delay": 0
+ }
+ ],
+ "image": "default"
+ },
+ {
+ "name": "Love Birds",
+ "description": "Miss Red's message is received.\n\"This is Syndicate Drones Agent, Arusha Johnson.\nI can't believe it, but I feel a real connection with you.\nI'll send over a Trade Contract you can use to make some money and come see me just SOL7-South of $$SITE_NAME\nSee you soon...\"",
+ "choices": [
+ {
+ "key": "choice 20",
+ "name": "See you soon.",
+ "exit_node": "WIN",
+ "delay": 0
+ },
+ {
+ "key": "choice 21",
+ "name": "So you're not the Drone?",
+ "exit_node": "FAIL",
+ "delay": 0
+ }
+ ],
+ "image": null,
+ "raw_image": "data:image/png;base64,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"
+ },
+ {
+ "name": "Obliteration",
+ "description": "The Blood-Red Drone opens up two side-hatches to reveal a pair of rocket-propelled missiles which are shot in your direction.\nYou have failed your Robotic Friend, who has already started shutting down their systems, but there is still a chance.",
+ "choices": [
+ {
+ "key": "choice 22",
+ "name": "Accept Death.",
+ "exit_node": "FAIL_DEATH",
+ "delay": 5,
+ "delay_message": "Missiles approaching..."
+ },
+ {
+ "key": "choice 23",
+ "name": "I'm a Gamer.",
+ "exit_node": "FAIL_DEATH",
+ "on_selection_effects": [
+ {
+ "effect_type": "Add",
+ "quality": "Love",
+ "value": {
+ "value_type": "random",
+ "low": 0,
+ "high": 8
+ }
+ }
+ ],
+ "delay": 5,
+ "delay_message": "Miss Red considers..."
+ }
+ ],
+ "image": "signal_lost"
+ },
+ {
+ "name": "Lack of Trust",
+ "description": "As you fiddle around in the Task Managing Software, closing all the new tabs your Drone is opening, the Miss Red enables a cloaking device and disappears.",
+ "choices": [
+ {
+ "key": "choice 24",
+ "name": "Sigh in a quiet but dramatic way.",
+ "exit_node": "FAIL",
+ "delay": 0
+ }
+ ],
+ "image": "default"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/strings/exoadventures/space_yacht.json b/strings/exoadventures/space_yacht.json
new file mode 100644
index 00000000000..50b41c35672
--- /dev/null
+++ b/strings/exoadventures/space_yacht.json
@@ -0,0 +1,257 @@
+{
+ "adventure_name": "There is a yacht cruising through space.",
+ "version": 1,
+ "author": "Kinnebian",
+ "starting_node": "A yacht in space?",
+ "starting_qualities": {},
+ "required_site_traits": [
+ "in space"
+ ],
+ "loot_categories": [
+ "cash",
+ "drugs"
+ ],
+ "scan_band_mods": {
+ "Plasma absorption band": 5
+ },
+ "deep_scan_description": "",
+ "triggers": [],
+ "nodes": [
+ {
+ "name": "A yacht in space?",
+ "description": "You see a normal looking yacht, floating above you.",
+ "choices": [
+ {
+ "key": "choice 0",
+ "name": "Ignore it, its not worth investigating.",
+ "exit_node": "FAIL",
+ "delay": 10,
+ "delay_message": "You fly on by..."
+ },
+ {
+ "key": "choice 4",
+ "name": "Investigate it closer!",
+ "exit_node": "Looks like the doors are sealed shut.",
+ "delay": 30,
+ "delay_message": "You begin to fly up to and around the yacht.."
+ }
+ ],
+ "image": null,
+ "raw_image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAABkCAMAAAD0WI85AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAzUExURUBAQOUAD/////8AAPgFFvwAB/0ABfwACPsBDP4AAszMzJMyje986cZlwEz/AOIBGOQAEnoV2UoAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAN5SURBVHhe7ZzrepswEERdp7c4TtP3f9rurBZ0QRISXpBEOf2KJcUhcxig9Idzu+iPbyfAiPB2GO7y6hIRib2tf2aRNwsvjYYV4QHIiNxV21LdmSPCVdAmJyKvHeKJkEJepGN8Ea7lBCLiwksDwSe8LwKTUzQCEx2Rw28Locj3H+OLTKiIHI4VIX7++v2Oq2REZpHRuUR6o2ORuhvfayIdPUR23EgdZxTp6DzZwBkbGZsGIg9s1M/jMhHFH/t4sEiCD4PMati3kUVo0rgnTaDwfD7VRV6tgUKbzPOOoEEkRIwGeci8jp0aYQk/s6ykRGaN2aPOaA8RG9kXkbXYuWU1pvTO0CN1nqiLOBaEGzmxbDIbC2ynpc/Plo14FoQ9+I+bLAG3E5NfNDAQjaYigQZhRbyviQklDjR4yBqNG5GgM/bQ+5IPKxFoGAnQ9tSSoBNREXaYsjtDjEUCtBTJVDKLIPkHZZbks0Wg0UTE3hMzIpghuBddBkRgQbRtJDRhEZMfSGrgTWks8S2FIuYoaossKjFXtcR18Z0ku0fTRnwROMQsvFVMJLpPNyJJB2c5JUEc+KzlPvdQIn41Ihx3qREupi1qPfQawQ3VQZJalqtYkNAx6jwURZbZDWwQfpWXJHGcykL0RKImnDdcx5KkTVProSgS3GYxizoUWGzw0BQhTHROa5I7YFFirlLvkRVJ/WcsA1/yktylQmKThnYjJLIATVRYbPTYXcRxKNTZ5lEgUnWC+SK2CgyKiqE3ya4q2UsE59Oc20zclRS+Rs2PXhepAiImtsAjzPFnDXqf7KcebRHHgZOzw7oCgW+VvWxBSwQxgKQCMiup4lULQkUkMEB43uClpI6XLQgNkaUFOxQYcBMaGjuI0KT0qog0seFhQtAQWZgUodTExEJk0zHxROQ1j4aFF1WlkToRVKFaBqMvkmcPB0ZJpMhklyYmdETWK9lVAmiJ5Ex2lwBKIkmTQySAlkjM5DAJUCWS/TeGYxsbMzxOAqRENj4rNDAQqhrpmUukNw4X2f6gnudqpDcukd7oVqT2pnA10huXSG/oiuh+urqKq5He+J9F2l0HOc7YSJ9HupSBG/EP/MEimq03FcnwomNGZKxrZimCD7bLb00Y6ZPtEZE/BBzw2x/GkRER4YvGVoT/QgQVpfgr39ocFnEx+TAYqpHzcLv9A9Y6cLa57YOgAAAAAElFTkSuQmCC"
+ },
+ {
+ "name": "Looks like the doors are sealed shut.",
+ "description": "You fly up to the \"boat\" and find that all the doors are locked tight, and welded shut. You think you hear.. music inside? There is a welded vent, too. You reckon you could force it open if you hit it hard enough, but it would be less risky to unweld it using a welder.",
+ "choices": [
+ {
+ "key": "choice 2",
+ "name": "Try to force the door!",
+ "exit_node": "You destroyed the drone.",
+ "delay": 10,
+ "delay_message": "You begin forcing the door.."
+ },
+ {
+ "key": "choice 3",
+ "name": "Try to force the vent.",
+ "exit_node": "The music grows louder..",
+ "delay": 20,
+ "delay_message": "You begin forcing the vent.."
+ },
+ {
+ "key": "choice 5",
+ "name": "Fly away, no chance in hell of getting in there..",
+ "exit_node": "FAIL",
+ "delay": 5,
+ "delay_message": "Moving.."
+ },
+ {
+ "key": "choice 14",
+ "name": "Unweld the vent.",
+ "exit_node": "The music grows louder..",
+ "requirements": [
+ {
+ "quality": "welder",
+ "operator": "==",
+ "value": 1
+ }
+ ],
+ "delay": 5,
+ "delay_message": "Welding.."
+ }
+ ],
+ "image": null,
+ "raw_image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAABkCAMAAAD0WI85AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAABRUExURaWMpOUAD/8AAKaNpaaOpaePpqiQp6mRqKmSqEBAQFRPVGddZmVcZeDg4PgFFvwAB4CAgP0ABfwACPsBDP4AAjAwMP/YAMHBwUz/AOIBGOQAEo23xmoAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHASURBVHhe7dwJT8MwDIbh0q5AYWNc4/r/P5TYcdWGmildDE2i75HoMWGJtymHkNYG8nNVAR/C26LVF9JO+KXSTCF8QIoP4aVwm6iQTvbZCEJcghrSNZ3n9nRKdk3XX/c3u/7Wf87WwhDaDO0Q5+5+v+fpLAQh3HJoD9EGns5CGEIldYS4TfStRXg6Cz9DHo5JKyJ9K8hgslmIN6SEDI+rWZVMIc7T88ur28m1WjqN5HxxPXMIGQ1ysaOcZEhc0GFWUnHIKjIkyl2RSkMu6rAqWYacJz+2CJ3KkJdZiFzsKAiZ+6uQkNxGRF4JyJCHFbFQccg5i1tMhry8QhIgxAJCFAixgBAFQiwgRIEQCwhRIMQCQhQIsYAQBUIsbBXi/3fhD2U8zWYhbw5CFAhRIMQCQhQIsYAQRUSI/4UeKDREdu/CZSAk9N8hS/hmDyFEgRALCFEgxAJCFAixgBDFqhD/dxYfyniarUJmEBJAiAIhFhCiQIgFhCgQYgEhCoRYQIgCIRYQokCIhYpD6I3t8tSE8c36kXIL+XD4QRb8+IQVMTmEiE93PIXwB4XQEv3mS0Y3xyFz/uujg6JWxNK2IU3zDauvUlylzN3TAAAAAElFTkSuQmCC"
+ },
+ {
+ "name": "The music grows louder..",
+ "description": "The music gets louder as you enter through the vent... maybe you should turn back?",
+ "choices": [
+ {
+ "key": "choice 6",
+ "name": "Continue onwards!",
+ "exit_node": "You fall down!",
+ "delay": 5,
+ "delay_message": "Moving..."
+ },
+ {
+ "key": "choice 7",
+ "name": "Turn back.",
+ "exit_node": "Looks like the doors are sealed shut.",
+ "delay": 5,
+ "delay_message": "Moving.."
+ }
+ ],
+ "image": "default"
+ },
+ {
+ "name": "You fall down!",
+ "description": "As you are crawling through the vents of this Space Yacht, the vent gives way! You're dropped into an empty room, completely filled with plasma! There is a desk and filing cabinet in here, along with a window observing the main portion of the yacht. The music is deafening at this point, it sounds like a horrible mix of sea shanties and EDM. ",
+ "choices": [
+ {
+ "key": "choice 8",
+ "name": "Look through the window.",
+ "exit_node": "A rockin' party.",
+ "delay": 0
+ },
+ {
+ "key": "choice 9",
+ "name": "Fly outta of there.",
+ "exit_node": "The music grows louder..",
+ "delay": 5,
+ "delay_message": "Moving.."
+ },
+ {
+ "key": "choice 10",
+ "name": "Rummage in the desk, using your key to open it.",
+ "exit_node": "Drugs and cash!",
+ "requirements": [
+ {
+ "quality": "HASKEY",
+ "operator": "==",
+ "value": 1
+ }
+ ],
+ "delay": 0,
+ "delay_message": "Rummaging.."
+ },
+ {
+ "key": "choice 11",
+ "name": "Take a sample of the atmosphere.",
+ "exit_node": "The atmospherics scan",
+ "delay": 30,
+ "delay_message": "Taking sample.."
+ },
+ {
+ "key": "choice 13",
+ "name": "Trash the place, fuck the police!",
+ "exit_node": "You wrecked yourself.",
+ "delay": 30,
+ "delay_message": "Trashing the place..."
+ }
+ ],
+ "image": null,
+ "raw_image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAABkCAMAAAD0WI85AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAADAUExURbyA1eUAD/8AALyB1b2B1b2D1vgFFvwAB/0ABfwACPsBDP4AAr6C2MaJ4NRH7NSU7buA1bp+0rp90bp+0bt/07l8z7h6zbp80bp+07t/1Lp80Lp8z7uA1Lp/07l90bl+0rh80Lh80bd6z7p/1JAiVZAkWZAoX5AnXZAmXZAlW5AkWJA6fpA7f5A4epAnXpA9g7l+07Z6z+WQVZZar5BVqmYqf5BOnZA2dzPlBuIBGLx+0rx80Lx/1L13yr14yuQAErVxUskAAAAJcEhZcwAADsIAAA7CARUoSoAAAAJ8SURBVHhe7dzZctowFIBhky7pElo5pkGkS9qgpBvdoVva5v3fqkfyQciRYbxISPKc70IxxpH9I0iYzISMxGc0AGWIGpM2vJCDDbUriFv4tYNNiNqQAobczu7gVmtGiFoKGAKG9FAJgYSBhKhlGUAItqhdqamGyJJhhKhlUbtSczPk7mH6IWuph4B79x88lK+SFOmQ1LUMORoHdYSXUaNlyPhRUGO8jBqtQx4HRCE2CnGCQmwU4gSF2CjECQqxUYgTFGKjECcoxEYhTlCIjUKcoBAbhTjhNCQodyGD+dtvvCgkNhQSGwqJDYXEhkJiQyGxoZDYtAph+XExeXJyMp0onM9ms6KYnj49neZ5XhQ555MZm8A25wXn/JizjDH2DDb5cziWwU0YWDlZ+ZXl+YuzM85fvjo/53PA2HyuDmincYi46eLy9Zu37/CGB5ca7jDgNZmahoj3i2h86BEiBE4Sgx4rEllH55CoOhZi0TUkso7uIR9xiih8gke1+4pEpUcIPhiW8o79PPH0WfqG4MOh4Zx69E2fBTZahnz+gsqL/lpR7lODPoVX+iywIb5py7XRcpmpcQe83iqcU+6Xm97ps8CGwAszNQ6pI+eEH4Z4y69KyMo2Wq0yNe6wI0QuR4AQfPKbGr/Y65RPq4RCtsOZ98BJCE5hKe+gkFYoxEAhLlGIgUJcohDD7hD8He+dOiOQb/Dwwky9Q+AUeJhfvkOE+I5HeSZ+rE9a/8j1DNnTcoDNivgI2V+H+RYc91Q1CtkOj4hAk5AkDDhEf6RQWv/ZXhPyE8gS+ekP6cRgCPr1O7vahBxkfyDk6u8/GLe6xm8NToWY9O60VmQ4suw/MDqeSvYBdn8AAAAASUVORK5CYII="
+ },
+ {
+ "name": "You wrecked yourself.",
+ "description": "In the midst of trashing the place, a filing cabinet tips over on you, crushing the fragile, expensive drone. Nice job, idiot.",
+ "choices": [
+ {
+ "key": "choice 15",
+ "name": "Shit.",
+ "exit_node": "FAIL_DEATH",
+ "delay": 0
+ }
+ ],
+ "image": null,
+ "raw_image": "data:image/png;base64,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"
+ },
+ {
+ "name": "Drugs and cash!",
+ "description": "Rummaging through the drawer, you find that the person who lives in here stores all his drugs and cash in here too. Good for you!",
+ "choices": [
+ {
+ "key": "choice 17",
+ "name": "Head back with your newly acquired things. ",
+ "exit_node": "WIN",
+ "delay": 30,
+ "delay_message": "Stealing..."
+ },
+ {
+ "key": "choice 18",
+ "name": "Take one last look around the place.",
+ "exit_node": "You fall down!",
+ "delay": 0
+ }
+ ],
+ "image": null,
+ "raw_image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAABkBAMAAAAxqGI4AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAwUExURW4WTuUAD/8AAPgFFvwAB/0ABfwACPsBDP4AAuex/6526uOxlKt4fUz/AOIBGOQAEqIMSWUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHFSURBVGje7dq/bsIwEAZw15ubpX2DyFLHqkvfqe/BE7AeU9dkyu68gTN1r9RHqX0mf1oMMeIuA7pPQooE4sd3FwJD1B3lmT0BeeJu8bAZom0MNxKPNDeia2X5EbsJUm+A1HYLRNs7WXyt3tmReMSO2JePHfc3XjFHEEEEEUQQQQQRRBBBBBFEEEEEiQHgR+DQ7HkRE4y2bYAVUdDG3KasIbEHBvZciMFZtbeWuYhAmFUzVgnKapnKpXTFCOCoDkcAR7ZiODdgfCFiAoElUpOy9fcBiA+vihAD45DaafXrSj9454LiypDZWCbsCDD55VT94LBJV4TAFJwYLNskLXepqcKwfDFi5o8K6f3M0sGaTRbB1f9fyRVXYYD05tN6TspE4EZELaeIazHY93F6Gk8sd7p3mt8T8xfpWJCUakhnsCdHPudD/Lr7zLQIm1R9Qk6L0CHV8bqVKUKHjEamCBni+vNFiJBpVtkiBEj8oRpr5ItQIMMc7zp2xLv8SwiQ/nINEmQ8ec/VoEGqCyunRc6OigrJ/NMiR9YjiCCCXIPEe3C0ZUZev79qrVmYiMSbo34SUutYZ5k3oluvUnBcWjPexcAbpX4BKG91c2myRoIAAAAASUVORK5CYII="
+ },
+ {
+ "name": "A rockin' party.",
+ "description": "Looking down through the window, you can see up to 20 plasmamen dancing on a disco floor. They look to be enjoying themselves, and none of them have noticed you. Oh, hey! Theres a key on the floor right next to you!",
+ "choices": [
+ {
+ "key": "choice 16",
+ "name": "Swipe the key and head back to the desk.",
+ "exit_node": "You fall down!",
+ "on_selection_effects": [
+ {
+ "effect_type": "Set",
+ "quality": "HASKEY",
+ "value": 1
+ }
+ ],
+ "delay": 0
+ },
+ {
+ "key": "choice 19",
+ "name": "Tap on the window!",
+ "exit_node": "Weak.",
+ "delay": 0
+ }
+ ],
+ "image": "default"
+ },
+ {
+ "name": "Weak.",
+ "description": "You weakly tap on the window, and nobody hears you through the blasting music.",
+ "choices": [
+ {
+ "key": "choice 20",
+ "name": "Oh well.",
+ "exit_node": "A rockin' party.",
+ "delay": 0
+ }
+ ],
+ "image": "default"
+ },
+ {
+ "name": "You destroyed the drone.",
+ "description": "You smash into the door, and your screen goes red. Looks like you managed to destroy your drone, nice job. \n\n\nIdiot.",
+ "choices": [
+ {
+ "key": "choice 21",
+ "name": "Fuck.",
+ "exit_node": "FAIL_DEATH",
+ "delay": 0
+ }
+ ],
+ "image": "signal_lost"
+ },
+ {
+ "name": "The atmospherics scan",
+ "description": "100% plasma, jam packed with it. This is definitely the home of some plasma-party-people.",
+ "choices": [
+ {
+ "key": "choice 22",
+ "name": "Huh.",
+ "exit_node": "You fall down!",
+ "delay": 0
+ }
+ ],
+ "image": null,
+ "raw_image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAABkCAMAAAD0WI85AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAABRUExURWJoaOUAD/8AAPgFFvwAB/0ABfwACPsBDP4AAhcXFzs7OykpKVFRUQAAAKb//wD//wuKkf/MAP9mALAAADAwMP8AM/vZTwCwAEz/AOIBGOQAEso55t0AAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHDSURBVHhe7dzZbsIwEIXhdK/j2A6Fru//oD0zMYVuEr0YOhOdXyJxg5DyyXbhBgbmr4sVtED0GLr1QS4P6aVoHSA6kMJDdCpwWAEEhJVAdFrWsLQWi16K1meISNYB0WnRS9H6Crm6jg/ZFx2Cbm7v7mWXROwDEj1CvEWItwjxFiHeIsRbhHiLEG8R4i1CvEXIyaV+No6QkyPkbxFycmlc6n9aZQ4BIUvWFGvIOE6pSGmylRhBdBKQOmpttVpLbCA5466XUmltnufWCjZLf9oiI8iky0mrZa61zg1zYikxgoxYTxLWVduUhrW1gSSHhJRWSgPkoTYMG85BIU0CZIsT9knbhp0RmQdsdYFI2xYTsty97JGdjnYx98jxf61lkeGdJI+5P2+QESRP/R0xdw5K2dBhBBly6uWcyuP4ND6Lw/KDsBFkn0rkAyOOpg5rCCQQYHOAkUJDkC4xWwU6A+Q8EeItQrxFiLcI8RYh3iLEW4R4ixBvEeItQrxFiLcI8RYh3iLEW4R4ixBvEeItQrz1HSJfbO+/mhDpm+0/QF6QGOTXH+JgOqT3ivEBog+ByBT91lt/6b+nkOOW+5NBqBlZT8PwDsHEFJFntJj8AAAAAElFTkSuQmCC"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/code/modules/explorer_drone/example_adventures/Theres_a_tree_in_the_middle_of_space.json b/strings/exoadventures/tree_in_the_middle_of_space.json
similarity index 100%
rename from code/modules/explorer_drone/example_adventures/Theres_a_tree_in_the_middle_of_space.json
rename to strings/exoadventures/tree_in_the_middle_of_space.json
diff --git a/tgui/packages/tgui/interfaces/AdventureBrowser.tsx b/tgui/packages/tgui/interfaces/AdventureBrowser.tsx
index 2f775f369a4..cde10cf4afa 100644
--- a/tgui/packages/tgui/interfaces/AdventureBrowser.tsx
+++ b/tgui/packages/tgui/interfaces/AdventureBrowser.tsx
@@ -1,5 +1,5 @@
import { useBackend, useLocalState } from '../backend';
-import { Button, LabeledList, Section, Box, NoticeBox, Table } from '../components';
+import { Button, Section, Box, NoticeBox, Table } from '../components';
import { Window } from '../layouts';
import { AdventureDataProvider, AdventureScreen } from './ExodroneConsole';
import { formatTime } from '../format';
@@ -7,11 +7,10 @@ import { formatTime } from '../format';
type Adventure = {
ref: string;
name: string;
- id: string;
+ filename: string;
approved: boolean;
uploader: string;
version: number;
- timestamp: string;
json_status: string;
};
@@ -24,66 +23,6 @@ type AdventureBrowserData = AdventureDataProvider & {
delay_message: string;
};
-const AdventureEntry = (props, context) => {
- const { data, act } = useBackend(context);
- const { entry_ref, close }: { entry_ref: string; close: () => void } = props;
- const entry = data.adventures.find((x) => x.ref === entry_ref);
-
- if (!entry) {
- return null;
- }
-
- return (
-
-
- {entry.id}
- {entry.name}
-
- {entry.version}
-
- {entry.uploader}
-
- {entry.timestamp}
-
-
- act('approve', { ref: entry.ref })}
- />
-
-
- {entry.json_status}
-
-
- {
- close();
- act('delete', { ref: entry.ref });
- }}
- content="Delete"
- />
- act('play', { ref: entry.ref })} content="Play" />
- act('refresh', { ref: entry.ref })}
- content="Refresh"
- />
- act('save', { ref: entry.ref })}
- content="Save"
- />
-
-
- );
-};
-
const AdventureList = (props, context) => {
const { data, act } = useBackend(context);
const [openAdventure, setOpenAdventure] = useLocalState(
@@ -93,38 +32,28 @@ const AdventureList = (props, context) => {
);
return (
- <>
- {openAdventure && (
- setOpenAdventure(null)}
- />
- )}
- {!openAdventure && (
-
-
- ID
- Title
- Edit
-
- {data.adventures.map((adventure) => (
-
- {adventure.id}
- {adventure.name}
-
- setOpenAdventure(adventure.ref)}
- />
-
-
- ))}
-
- act('create')}>Create New
-
-
- )}
- >
+
+
+ Filename
+ Title
+ Author
+ Playtest
+
+ {data.adventures.map((adventure) => (
+
+ {adventure.filename}
+ {adventure.name}
+ {adventure.uploader}
+
+ act('play', { ref: adventure.ref })}
+ content="Play"
+ />
+
+
+ ))}
+
);
};
@@ -154,7 +83,7 @@ export const AdventureBrowser = (props, context) => {
const { data } = useBackend(context);
return (
-
+
{!!data.feedback_message && (
{data.feedback_message}
From bde4a93afa1cb77f899a6e1d545a0dbcf35989f0 Mon Sep 17 00:00:00 2001
From: SkyratBot <59378654+SkyratBot@users.noreply.github.com>
Date: Mon, 9 Oct 2023 21:43:42 +0200
Subject: [PATCH 007/100] also removes exodrone adventures from prefixed sql
schema [MDB IGNORE] (#24156)
* also removes exodrone adventures from prefixed sql schema (#78769)
## About The Pull Request
forgor
## Why It's Good For The Game
![image](https://github.com/tgstation/tgstation/assets/70376633/3ba3ae4f-64ae-47a1-98ba-05d1e2d6d912)
## Changelog
nothing playerfacing hopefully
* also removes exodrone adventures from prefixed sql schema
---------
Co-authored-by: jimmyl <70376633+mc-oofert@users.noreply.github.com>
---
SQL/tgstation_schema_prefixed.sql | 13 -------------
1 file changed, 13 deletions(-)
diff --git a/SQL/tgstation_schema_prefixed.sql b/SQL/tgstation_schema_prefixed.sql
index 659162158ec..37c370f875a 100644
--- a/SQL/tgstation_schema_prefixed.sql
+++ b/SQL/tgstation_schema_prefixed.sql
@@ -644,19 +644,6 @@ CREATE TABLE `SS13_discord_links` (
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
---
--- Table structure for table `text_adventures`
---
-DROP TABLE IF EXISTS `SS13_text_adventures`;
-CREATE TABLE `SS13_text_adventures` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `adventure_data` LONGTEXT NOT NULL,
- `uploader` VARCHAR(32) NOT NULL,
- `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
- `approved` TINYINT(1) NOT NULL DEFAULT FALSE,
- PRIMARY KEY (`id`)
-) ENGINE=InnoDB;
-
--
-- Table structure for table `admin_connections`
--
From b01ee8389801dc06cdca99db680e29addf9dd7e2 Mon Sep 17 00:00:00 2001
From: nikothedude <59709059+nikothedude@users.noreply.github.com>
Date: Mon, 9 Oct 2023 16:00:29 -0400
Subject: [PATCH 008/100] Makes defibs work badly on synths, moving the
perferred method of synth revival to the revival surgery, also makes said
surgery a lot faster (#23923)
* waesfdrghf
* srgsrg
* actually, this part was unnecessary
* vsffgsef
* ah this wasnt modular
* while im here, ill do you one better
* Apply suggestions from code review
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
---------
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
---
.../~skyrat_defines/medical_defines.dm | 5 ++
code/game/objects/items/defib.dm | 23 ++++++
modular_skyrat/modules/synths/code/README.md | 5 +-
modular_skyrat/modules/synths/code/defib.dm | 12 ++++
.../code/surgery/robot_chassis_restoration.dm | 72 +++++++++----------
tgstation.dme | 1 +
6 files changed, 81 insertions(+), 37 deletions(-)
create mode 100644 modular_skyrat/modules/synths/code/defib.dm
diff --git a/code/__DEFINES/~skyrat_defines/medical_defines.dm b/code/__DEFINES/~skyrat_defines/medical_defines.dm
index c32d18bbd4f..198b5cf02c8 100644
--- a/code/__DEFINES/~skyrat_defines/medical_defines.dm
+++ b/code/__DEFINES/~skyrat_defines/medical_defines.dm
@@ -2,3 +2,8 @@
#define DAMAGED_BODYPART_BONUS_WOUNDING_BONUS 30 //After this threshold we dont get any wounding bonuses form damaged bodyparts
#define DAMAGED_BODYPART_BONUS_WOUNDING_THRESHOLD 0.5 //How much extra % of wounding dmg we'll have if a bodypart is damaged enough
#define DAMAGED_BODYPART_BONUS_WOUNDING_COEFF 15 //This is multiplied by the sustained damage %. Keep in mind the % limit //Currently: 15/0.5=7.5
+
+/// If a synth is revived via defib, they will have a brain trauma for this amount of time.
+#define SYNTH_DEFIBBED_TRAUMA_DURATION 90 SECONDS
+/// If a synth is revived via defib, they will get a brain trauma of this severity.
+#define SYNTH_DEFIBBED_TRAUMA_SEVERITY BRAIN_TRAUMA_SEVERE
diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm
index f86850fbf6f..10e4bfee6e9 100644
--- a/code/game/objects/items/defib.dm
+++ b/code/game/objects/items/defib.dm
@@ -578,6 +578,12 @@
do_cancel()
/obj/item/shockpaddles/proc/do_help(mob/living/carbon/H, mob/living/user)
+ var/target_synthetic = (user.mob_biotypes & MOB_ROBOTIC) // SKYRAT EDIT ADDITION BEGIN - SYNTH REVIVAL
+ if (target_synthetic)
+ to_chat(user, span_boldwarning("[H] is a synthetic lifeform! This defibrillator probably isn't calibrated to revive [H.p_them()] properly and could have some serious consequences! \
+ [span_warning("You might want to [span_blue("surgically revive [H.p_them()]")]...")]"))
+ balloon_alert(user, "target is synthetic!") // immediately grabs their attention even if they dont see chat
+ // SKYRAT EDIT ADDITION END - SYNTH REVIVAL
user.visible_message(span_warning("[user] begins to place [src] on [H]'s chest."), span_warning("You begin to place [src] on [H]'s chest..."))
busy = TRUE
update_appearance()
@@ -664,6 +670,23 @@
else
user.add_mood_event("saved_life", /datum/mood_event/saved_life)
log_combat(user, H, "revived", defib)
+ // SKYRAT EDIT ADDITION BEGIN - SYNTH REVIVAL
+ if (target_synthetic)
+ user.visible_message(span_boldwarning("[src] fire a powerful jolt of electricity into [H]'s vulnerable circuitry!"))
+ to_chat(H, span_userdanger("[user]'s defibrillator fires a powerful jolt of electricity into your vulnerable circuitry, overloading it!"))
+ // You may ask, why not just call H.emp_act()?
+ // well my dear reader, that EMPs contents. I only want to EMP bodyparts and organs specifically
+ for (var/obj/item/bodypart/iterated_part as anything in H.bodyparts)
+ iterated_part.emp_act(EMP_LIGHT)
+ for (var/obj/item/organ/iterated_organ as anything in H.organs)
+ iterated_organ.emp_act(EMP_LIGHT)
+ var/obj/item/organ/internal/brain/brain_organ = H.get_organ_slot(ORGAN_SLOT_BRAIN)
+ if (istype(brain_organ))
+ var/datum/brain_trauma/trauma = brain_organ.gain_trauma_type(SYNTH_DEFIBBED_TRAUMA_SEVERITY, TRAUMA_LIMIT_BASIC)
+ if (!QDELETED(trauma))
+ addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(remove_synth_defib_trauma), brain_organ, trauma), SYNTH_DEFIBBED_TRAUMA_DURATION)
+ // SKYRAT EDIT ADDITION END - SYNTH REVIVAL
+
do_success()
return
else if (!H.get_organ_by_type(/obj/item/organ/internal/heart))
diff --git a/modular_skyrat/modules/synths/code/README.md b/modular_skyrat/modules/synths/code/README.md
index 21ce4e629da..8f37a1cec49 100644
--- a/modular_skyrat/modules/synths/code/README.md
+++ b/modular_skyrat/modules/synths/code/README.md
@@ -10,6 +10,7 @@ Adds in a roundstart robotic race. Currently in a very sad state, and is being w
### TG Proc/File Changes:
+- defib.dm: /obj/item/shockpaddles/proc/do_help() modified
- Will fill out as I discover what edits were made to acommodate these.
### Modular Overrides:
@@ -18,12 +19,14 @@ Adds in a roundstart robotic race. Currently in a very sad state, and is being w
### Defines:
-- Will fill out as I discover what defines were made to acommodate these.
+- ~skyrat_defines/medical_defines.dm: SYNTH_DEFIBBED_TRAUMA_DURATION
+- ~skyrat_defines/medical_defines.dm: SYNTH_DEFIBBED_TRAUMA_SEVERITY
### Included files that are not contained in this module:
- N/A
### Credits:
+Niko - Making defibs fuck synths up
Nerevar - Initial code, I think. Correct this file if wrong.
RimiNosha - Updating the code and adding various QoL features.
diff --git a/modular_skyrat/modules/synths/code/defib.dm b/modular_skyrat/modules/synths/code/defib.dm
new file mode 100644
index 00000000000..ecb6e2e952e
--- /dev/null
+++ b/modular_skyrat/modules/synths/code/defib.dm
@@ -0,0 +1,12 @@
+/**
+ * Global timer proc used in defib.dm. Removes the temporary trauma caused by being defibbed as a synth.
+ *
+ * Args:
+ * * obj/item/organ/internal/brain/synth_brain: The brain with the trauma on it. Non-nullable.
+ * * datum/brain_trauma/trauma: The trauma itself. Non-nullable.
+ */
+/proc/remove_synth_defib_trauma(obj/item/organ/internal/brain/synth_brain, datum/brain_trauma/trauma)
+ if (QDELETED(synth_brain) || QDELETED(trauma))
+ return
+
+ QDEL_NULL(trauma)
diff --git a/modular_skyrat/modules/synths/code/surgery/robot_chassis_restoration.dm b/modular_skyrat/modules/synths/code/surgery/robot_chassis_restoration.dm
index ab100c0f751..42e3ff853bb 100644
--- a/modular_skyrat/modules/synths/code/surgery/robot_chassis_restoration.dm
+++ b/modular_skyrat/modules/synths/code/surgery/robot_chassis_restoration.dm
@@ -1,14 +1,15 @@
+#define SYNTH_REVIVE_WELD_INTERNALS_DAMAGE 30
+
+// Should be a very quick surgery, it's meant to replace defibs (mostly!)
/datum/surgery/positronic_restoration
name = "Posibrain Reboot (Revival)"
steps = list(
/datum/surgery_step/mechanic_unwrench,
/datum/surgery_step/pry_off_plating/fullbody,
- /datum/surgery_step/cut_wires/fullbody,
- /datum/surgery_step/replace_wires/fullbody,
- /datum/surgery_step/prepare_electronics,
- /datum/surgery_step/add_plating/fullbody,
/datum/surgery_step/weld_plating/fullbody,
+ /datum/surgery_step/prepare_electronics,
/datum/surgery_step/finalize_positronic_restoration,
+ /datum/surgery_step/add_plating/fullbody,
/datum/surgery_step/mechanic_close,
)
@@ -24,52 +25,34 @@
return TRUE
/datum/surgery_step/pry_off_plating/fullbody
- time = 12 SECONDS
+ time = 1.4 SECONDS
/datum/surgery_step/pry_off_plating/fullbody/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(
user,
target,
- span_notice("You begin to pry open compromised panels on [target]'s braincase..."),
- span_notice("[user] begins to pry open compromised panels on [target]'s braincase."),
- )
-
-/datum/surgery_step/cut_wires/fullbody
- time = 12 SECONDS
-
-/datum/surgery_step/cut_wires/fullbody/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
- display_results(
- user,
- target,
- span_notice("You begin to trim [target]'s nonfunctional wires..."),
- span_notice("[user] begins to cut [target]'s loose wires."),
+ span_notice("You begin to pry open the outer protective panels on [target]'s braincase..."),
+ span_notice("[user] begins to pry open the outer protective panels on [target]'s braincase."),
)
/datum/surgery_step/weld_plating/fullbody
- time = 12 SECONDS
+ time = 2 SECONDS
/datum/surgery_step/weld_plating/fullbody/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(
user,
target,
- span_notice("You begin to slice compromised panels from [target]'s braincase..."),
- span_notice("[user] begins to slice compromised panels from [target]'s braincase."),
+ span_notice("You begin to slice the inner protective panels from [target]'s braincase..."),
+ span_notice("[user] begins to slice the inner protective panels from [target]'s braincase."),
)
-/datum/surgery_step/replace_wires/fullbody
- time = 7 SECONDS
- cableamount = 15
+/datum/surgery_step/weld_plating/fullbody/success(mob/user, mob/living/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results)
+ . = ..()
-/datum/surgery_step/replace_wires/fullbody/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
- display_results(
- user,
- target,
- span_notice("You begin to replace [target]'s wiring..."),
- span_notice("[user] begins to replace [target]'s wiring."),
- )
+ target.apply_damage(SYNTH_REVIVE_WELD_INTERNALS_DAMAGE, BRUTE, "[target_zone]", wound_bonus = CANT_WOUND)
/datum/surgery_step/add_plating/fullbody
- time = 12 SECONDS
+ time = 3 SECONDS
ironamount = 15
/datum/surgery_step/add_plating/fullbody/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
@@ -80,13 +63,21 @@
span_notice("[user] begins to add new panels to [target]'s braincase."),
)
+/datum/surgery_step/add_plating/fullbody/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
+ . = ..()
+
+ target.heal_bodypart_damage(brute = SYNTH_REVIVE_WELD_INTERNALS_DAMAGE, target_zone = "[target_zone]")
+
/datum/surgery_step/finalize_positronic_restoration
- name = "finalize positronic restoration (multitool)"
+ name = "finalize positronic restoration (multitool/shocking implement)"
implements = list(
TOOL_MULTITOOL = 100,
+ /obj/item/shockpaddles = 70,
+ /obj/item/melee/touch_attack/shock = 70,
+ /obj/item/melee/baton/security = 35,
+ /obj/item/gun/energy = 10
)
- repeatable = TRUE
- time = 12 SECONDS
+ time = 5 SECONDS
/datum/surgery_step/finalize_positronic_restoration/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(
@@ -99,10 +90,13 @@
target.notify_ghost_cloning("Someone is trying to reboot your posibrain.", source = target)
/datum/surgery_step/finalize_positronic_restoration/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
+ if (target.stat < DEAD)
+ target.visible_message(span_notice("...[target] is completely unaffected! Seems like they're already active!"))
+ return FALSE
+
target.cure_husk()
target.grab_ghost()
target.updatehealth()
- target.setOrganLoss(ORGAN_SLOT_BRAIN, NONE)
if(target.revive())
target.emote("chime")
@@ -114,3 +108,9 @@
target.visible_message(span_warning("...[target.p_they()] convulses, then goes offline."))
return TRUE
+/datum/surgery_step/finalize_positronic_restoration/failure(mob/user, mob/living/target, target_zone, obj/item/tool, datum/surgery/surgery, fail_prob)
+ . = ..()
+
+ target.adjustOrganLoss(ORGAN_SLOT_BRAIN, 5, 130)
+
+#undef SYNTH_REVIVE_WELD_INTERNALS_DAMAGE
diff --git a/tgstation.dme b/tgstation.dme
index 006c2049ec3..c65ac461502 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -7647,6 +7647,7 @@
#include "modular_skyrat\modules\subsystems\code\ticket_ping\ticket_ss.dm"
#include "modular_skyrat\modules\Syndie_edits\code\area.dm"
#include "modular_skyrat\modules\Syndie_edits\code\syndie_edits.dm"
+#include "modular_skyrat\modules\synths\code\defib.dm"
#include "modular_skyrat\modules\synths\code\bodyparts\brain.dm"
#include "modular_skyrat\modules\synths\code\bodyparts\ears.dm"
#include "modular_skyrat\modules\synths\code\bodyparts\eyes.dm"
From 03377b4a292339481e17dc44f6ae01ff3486362c Mon Sep 17 00:00:00 2001
From: nikothedude <59709059+nikothedude@users.noreply.github.com>
Date: Mon, 9 Oct 2023 16:20:53 -0400
Subject: [PATCH 009/100] Allows individuals within the SAD to reject the
treatment, ejecting them with no changes made (#24047)
* k
* Update modular_skyrat/modules/self_actualization_device/code/self_actualization_device.dm
Co-authored-by: Tom <8881105+tf-4@users.noreply.github.com>
* Apply suggestions from code review
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
* aaah
* a
* Apply suggestions from code review
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
---------
Co-authored-by: Tom <8881105+tf-4@users.noreply.github.com>
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
---
.../code/self_actualization_device.dm | 37 +++++++++++++------
1 file changed, 26 insertions(+), 11 deletions(-)
diff --git a/modular_skyrat/modules/self_actualization_device/code/self_actualization_device.dm b/modular_skyrat/modules/self_actualization_device/code/self_actualization_device.dm
index 1af51a6f4da..d50759e484f 100644
--- a/modular_skyrat/modules/self_actualization_device/code/self_actualization_device.dm
+++ b/modular_skyrat/modules/self_actualization_device/code/self_actualization_device.dm
@@ -124,7 +124,7 @@
use_power(500)
-/// Ejects the occupant as either their preference character, or as a monke based on emag status.
+/// Ejects the occupant after asking them if they want to accept the rejuvenation. If yes, they exit as their preferences character.
/obj/machinery/self_actualization_device/proc/eject_new_you()
if(state_open || !occupant || !powered())
return
@@ -132,21 +132,36 @@
if(!ishuman(occupant))
return FALSE
+ var/mob/living/carbon/human/human_occupant = occupant
- var/mob/living/carbon/human/patient = occupant
- var/original_name = patient.dna.real_name
+ var/failure = FALSE
+ var/failure_text
- patient.client?.prefs?.safe_transfer_prefs_to_with_damage(patient)
- patient.dna.update_dna_identity()
- log_game("[key_name(patient)] used a Self-Actualization Device at [loc_name(src)].")
+ if (!isnull(human_occupant.ckey) && isnull(human_occupant.client)) // player mob, currently disconnected
+ failure = TRUE
+ failure_text = "ERROR: Treatment elicited no response from occupant genes. Subject may be suffering from Sudden Sleep Disorder."
+ else if (tgui_alert(occupant, "The SAD you are within is about to rejuvenate you, resetting your body to its default state (in character preferences). Do you consent?", "Rejuvenate", list("Yes", "No"), timeout = 10 SECONDS) != "Yes")
+ failure = TRUE // defaults to rejecting it unless specified otherwise
+ failure_text = "ERROR: Occupant genes have willfully rejected the procedure. You may try again if you think this was an error."
- if(patient.dna.real_name != original_name)
- message_admins("[key_name_admin(patient)] has used the Self-Actualization Device, and changed the name of their character. \
- Original Name: [original_name], New Name: [patient.dna.real_name]. \
- This may be a false positive from changing from a humanized monkey into a character, so be careful.")
+ if (failure)
+ say(failure_text)
+ playsound(src, 'sound/machines/buzz-sigh.ogg', 50, FALSE)
+ else
+ var/mob/living/carbon/human/patient = occupant
+ var/original_name = patient.dna.real_name
+
+ patient.client?.prefs?.safe_transfer_prefs_to_with_damage(patient)
+ patient.dna.update_dna_identity()
+ log_game("[key_name(patient)] used a Self-Actualization Device at [loc_name(src)].")
+
+ if(patient.dna.real_name != original_name)
+ message_admins("[key_name_admin(patient)] has used the Self-Actualization Device, and changed the name of their character. \
+ Original Name: [original_name], New Name: [patient.dna.real_name]. \
+ This may be a false positive from changing from a humanized monkey into a character, so be careful.")
+ playsound(src, 'sound/machines/microwave/microwave-end.ogg', 100, FALSE)
open_machine()
- playsound(src, 'sound/machines/microwave/microwave-end.ogg', 100, FALSE)
/obj/machinery/self_actualization_device/screwdriver_act(mob/living/user, obj/item/used_item)
. = TRUE
From 9d5bc7fd050302d3d401d45c760a4a81093507f8 Mon Sep 17 00:00:00 2001
From: Nerevar <12636964+Nerev4r@users.noreply.github.com>
Date: Mon, 9 Oct 2023 14:35:48 -0600
Subject: [PATCH 010/100] One Tail From Chomp (#24125)
* wew
* yeah
---------
Co-authored-by: Snakebittenn <12636964+Snakebittenn@users.noreply.github.com>
---
.../icons/mob/sprite_accessory/tails_big.dmi | Bin 2708 -> 3824 bytes
.../new_player/sprite_accessories/tails.dm | 5 +++++
2 files changed, 5 insertions(+)
diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/tails_big.dmi b/modular_skyrat/master_files/icons/mob/sprite_accessory/tails_big.dmi
index f0c56e67183968e10f3e7be1c4e1c1225f61b527..e77a1d1d77d1264b4e2008e01802361a40414d43 100644
GIT binary patch
literal 3824
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
literal 2708
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
Cc63Al
diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/tails.dm b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/tails.dm
index 0a23f98f254..f3d9d346de5 100644
--- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/tails.dm
+++ b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/tails.dm
@@ -309,6 +309,11 @@
name = "Shade (Striped)"
icon_state = "shadekinlongstriped_large"
+/datum/sprite_accessory/tails/mammal/wagging/big/ringtail
+ name = "Ring Tail (Long)"
+ icon_state = "bigring_large"
+ color_src = USE_MATRIXED_COLORS
+
/datum/sprite_accessory/tails/mammal/wagging/akula/akula
name = "Akula"
icon_state = "akula"
From c9011a27dcb557e7fc4c7a7618b221d69ad4ad7d Mon Sep 17 00:00:00 2001
From: nikothedude <59709059+nikothedude@users.noreply.github.com>
Date: Mon, 9 Oct 2023 20:08:48 -0400
Subject: [PATCH 011/100] Somewhat nerfs robotic tend wounds, but compensates
by adding advanced/experimental versions (#23927)
* tfuy
* dawdaw
* yargh
* Update tgstation.dme
* vscode is already open on another project so ill jsut webedit
* Update modular_skyrat/modules/synths/code/research_nodes.dm
---------
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
---
.../medical_designs/medical_designs.dm | 10 +++
.../modules/synths/code/research_nodes.dm | 19 +++++
.../synths/code/surgery/robot_healing.dm | 83 +++++++++++++++++--
tgstation.dme | 1 +
4 files changed, 108 insertions(+), 5 deletions(-)
create mode 100644 modular_skyrat/modules/synths/code/research_nodes.dm
diff --git a/modular_skyrat/modules/medical_designs/medical_designs.dm b/modular_skyrat/modules/medical_designs/medical_designs.dm
index 288adf0643b..d0360fbfc2b 100644
--- a/modular_skyrat/modules/medical_designs/medical_designs.dm
+++ b/modular_skyrat/modules/medical_designs/medical_designs.dm
@@ -8,3 +8,13 @@
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_MEDICAL
)
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE
+
+/datum/design/surgery/healing/robotic_healing_upgrade
+ name = "Repair robotic limbs upgrade: Advanced"
+ surgery = /datum/surgery/robot_healing/upgraded
+ id = "robotic_heal_surgery_upgrade"
+
+/datum/design/surgery/healing/robotic_healing_upgrade_2
+ name = "Repair robotic limbs upgrade: Experimental"
+ surgery = /datum/surgery/robot_healing/experimental
+ id = "robotic_heal_surgery_upgrade_2"
diff --git a/modular_skyrat/modules/synths/code/research_nodes.dm b/modular_skyrat/modules/synths/code/research_nodes.dm
new file mode 100644
index 00000000000..c75d134db45
--- /dev/null
+++ b/modular_skyrat/modules/synths/code/research_nodes.dm
@@ -0,0 +1,19 @@
+/datum/techweb_node/improved_robotic_tend_wounds
+ id = "improved_robotic_surgery"
+ display_name = "Improved Robotic Repair Surgeries"
+ description = "As it turns out, you don't actually need to cut out entire support rods if it's just scratched!"
+ prereq_ids = list("engineering")
+ design_ids = list(
+ "robotic_heal_surgery_upgrade"
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 900)
+
+/datum/techweb_node/advanced_robotic_tend_wounds
+ id = "advanced_robotic_surgery"
+ display_name = "Advanced Robotic Surgeries"
+ description = "Did you know Hephaestus actually has a free online tutorial for synthetic trauma repairs? It's true!"
+ prereq_ids = list("improved_robotic_surgery")
+ design_ids = list(
+ "robotic_heal_surgery_upgrade_2"
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1300) // less expensive than the organic surgery research equivalent since its JUST tend wounds
diff --git a/modular_skyrat/modules/synths/code/surgery/robot_healing.dm b/modular_skyrat/modules/synths/code/surgery/robot_healing.dm
index 645409a5c98..742cf7281eb 100644
--- a/modular_skyrat/modules/synths/code/surgery/robot_healing.dm
+++ b/modular_skyrat/modules/synths/code/surgery/robot_healing.dm
@@ -122,6 +122,9 @@
other_message += " as best as they can while [target] has clothing on"
target.heal_bodypart_damage(healed_brute, healed_burn, 0, BODYTYPE_ROBOTIC)
+
+ self_message += get_progress(user, target, healed_brute, healed_burn)
+
display_results(user, target, span_notice("[self_message]."), "[other_message].", "[other_message].")
if(istype(surgery, /datum/surgery/robot_healing))
@@ -157,19 +160,89 @@
/***************************TYPES***************************/
/datum/surgery/robot_healing/basic
- name = "Repair robotic limbs (basic)"
- healing_step_type = /datum/surgery_step/robot_heal/basic
+ name = "Repair robotic limbs (Basic)"
desc = "A surgical procedure that provides repairs and maintenance to robotic limbs. Is slightly more efficient when the patient is severely damaged."
- replaced_by = null
+ healing_step_type = /datum/surgery_step/robot_heal/basic
+ replaced_by = /datum/surgery/robot_healing/upgraded
+
+/datum/surgery/robot_healing/upgraded
+ name = "Repair robotic limbs (Adv.)"
+ desc = "A surgical procedure that provides highly effective repairs and maintenance to robotic limbs. Is somewhat more efficient when the patient is severely damaged."
+ healing_step_type = /datum/surgery_step/robot_heal/upgraded
+ replaced_by = /datum/surgery/robot_healing/experimental
+ requires_tech = TRUE
+
+/datum/surgery/robot_healing/experimental
+ name = "Repair robotic limbs (Exp.)"
+ desc = "A surgical procedure that quickly provides highly effective repairs and maintenance to robotic limbs. Is moderately more efficient when the patient is severely damaged."
+ healing_step_type = /datum/surgery_step/robot_heal/experimental
+ replaced_by = /datum/surgery/robot_healing/experimental
+ requires_tech = TRUE
/***************************STEPS***************************/
/datum/surgery_step/robot_heal/basic
- name = "repair damage"
brute_heal_amount = 10
burn_heal_amount = 10
missing_health_bonus = 15
- time = 10
+ time = 2.5 SECONDS
+
+/datum/surgery_step/robot_heal/upgraded
+ brute_heal_amount = 12
+ burn_heal_amount = 12
+ missing_health_bonus = 11
+ time = 2.3 SECONDS
+
+/datum/surgery_step/robot_heal/experimental
+ brute_heal_amount = 14
+ burn_heal_amount = 14
+ missing_health_bonus = 8
+ time = 2 SECONDS
+
+// Mostly a copypaste of standard tend wounds get_progress(). In order to abstract this, I'd have to rework the hierarchy of surgery upstream, so I'll just do this. Pain.
+/**
+ * Args:
+ * * mob/user: The user performing this surgery.
+ * * mob/living/carbon/target: The target of the surgery.
+ * * brute_healed: The amount of brute we just healed.
+ * * burn_healed: The amount of burn we just healed.
+ *
+ * Returns:
+ * * A string containing either an estimation of how much longer the surgery will take, or exact numbers of the remaining damages, depending on if a health analyzer
+ * is held or not.
+ */
+/datum/surgery_step/robot_heal/proc/get_progress(mob/user, mob/living/carbon/target, brute_healed, burn_healed)
+ var/estimated_remaining_steps = 0
+ if(brute_healed > 0)
+ estimated_remaining_steps = max(0, (target.getBruteLoss() / brute_healed))
+ if(burn_healed > 0)
+ estimated_remaining_steps = max(estimated_remaining_steps, (target.getFireLoss() / burn_healed)) // whichever is higher between brute or burn steps
+
+ var/progress_text
+
+ if(locate(/obj/item/healthanalyzer) in user.held_items)
+ if(target.getBruteLoss())
+ progress_text = ". Remaining brute: [target.getBruteLoss()]"
+ if(target.getFireLoss())
+ progress_text += ". Remaining burn: [target.getFireLoss()]"
+ else
+ switch(estimated_remaining_steps)
+ if(-INFINITY to 1)
+ return
+ if(1 to 3)
+ progress_text = ", finishing up the last few signs of damage"
+ if(3 to 6)
+ progress_text = ", counting down the last few patches of trauma"
+ if(6 to 9)
+ progress_text = ", continuing to plug away at [target.p_their()] extensive damages"
+ if(9 to 12)
+ progress_text = ", steadying yourself for the long surgery ahead"
+ if(12 to 15)
+ progress_text = ", though [target.p_they()] still look[target.p_s()] heavily battered"
+ if(15 to INFINITY)
+ progress_text = ", though you feel like you're barely making a dent in treating [target.p_their()] broken body"
+
+ return progress_text
#undef DAMAGE_ROUNDING
#undef FAIL_DAMAGE_MULTIPLIER
diff --git a/tgstation.dme b/tgstation.dme
index c65ac461502..ebe33e47067 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -7648,6 +7648,7 @@
#include "modular_skyrat\modules\Syndie_edits\code\area.dm"
#include "modular_skyrat\modules\Syndie_edits\code\syndie_edits.dm"
#include "modular_skyrat\modules\synths\code\defib.dm"
+#include "modular_skyrat\modules\synths\code\research_nodes.dm"
#include "modular_skyrat\modules\synths\code\bodyparts\brain.dm"
#include "modular_skyrat\modules\synths\code\bodyparts\ears.dm"
#include "modular_skyrat\modules\synths\code\bodyparts\eyes.dm"
From 4e9d423b637272a7542c6653bb41f04d1503f137 Mon Sep 17 00:00:00 2001
From: SkyratBot <59378654+SkyratBot@users.noreply.github.com>
Date: Tue, 10 Oct 2023 02:09:08 +0200
Subject: [PATCH 012/100] Adds a cowboy bundle to the nuclear ops uplink [MDB
IGNORE] (#24234)
* Adds a cowboy bundle to the nuclear ops uplink (#78874)
## About The Pull Request
Tin
The bundle includes revolver, holster, armored cowboy outfit, horse,
apples to tame said horse, and a complimentary lighter.
It costs 18tc, so it's a little more expensive than getting the revolver
& holster on their own, but you also get a horse so it's worth it.
## Why It's Good For The Game
This was intended as a lone-ops bundle so we can finally have some lone
rangers but I think having a crew of cowboy outlaws doing a "train
heist" for a nuke is really funny.
## Changelog
:cl: Wallem
add: Nuclear Operatives now have ready access to ancient cowboy
technology in the form of the Outlaw Bundle. Now you too can roll into
town on your horse.
/:cl:
* Adds a cowboy bundle to the nuclear ops uplink
---------
Co-authored-by: Wallem <66052067+Wallemations@users.noreply.github.com>
---
.../greyscale_configs/greyscale_mobs.dm | 5 ++
code/datums/greyscale/json_configs/pony.json | 30 ++++++++
code/game/machinery/syndicatebeacon.dm | 4 ++
code/game/objects/items/storage/holsters.dm | 15 ++++
.../game/objects/items/storage/uplink_kits.dm | 15 ++++
code/modules/clothing/head/hat.dm | 4 ++
code/modules/clothing/shoes/cowboy.dm | 14 ++++
code/modules/clothing/under/costume.dm | 5 ++
.../mob/living/basic/farm_animals/pony.dm | 68 +++++++++++++++++-
.../projectiles/guns/ballistic/revolver.dm | 5 ++
code/modules/uplink/uplink_items/nukeops.dm | 10 +++
icons/mob/simple/animal.dmi | Bin 200840 -> 202331 bytes
sound/effects/footstep/spurs1.ogg | Bin 0 -> 31531 bytes
sound/effects/footstep/spurs2.ogg | Bin 0 -> 30112 bytes
sound/effects/footstep/spurs3.ogg | Bin 0 -> 33482 bytes
15 files changed, 174 insertions(+), 1 deletion(-)
create mode 100644 code/datums/greyscale/json_configs/pony.json
create mode 100644 sound/effects/footstep/spurs1.ogg
create mode 100644 sound/effects/footstep/spurs2.ogg
create mode 100644 sound/effects/footstep/spurs3.ogg
diff --git a/code/datums/greyscale/config_types/greyscale_configs/greyscale_mobs.dm b/code/datums/greyscale/config_types/greyscale_configs/greyscale_mobs.dm
index d247117f3a1..a4c7c372525 100644
--- a/code/datums/greyscale/config_types/greyscale_configs/greyscale_mobs.dm
+++ b/code/datums/greyscale/config_types/greyscale_configs/greyscale_mobs.dm
@@ -34,3 +34,8 @@
name = "Garden Gnome"
icon_file = 'icons/mob/simple/garden_gnome.dmi'
json_config = 'code/datums/greyscale/json_configs/garden_gnome.json'
+
+/datum/greyscale_config/pony
+ name = "Pony"
+ icon_file = 'icons/mob/simple/animal.dmi'
+ json_config = 'code/datums/greyscale/json_configs/pony.json'
diff --git a/code/datums/greyscale/json_configs/pony.json b/code/datums/greyscale/json_configs/pony.json
new file mode 100644
index 00000000000..a08437c7cb6
--- /dev/null
+++ b/code/datums/greyscale/json_configs/pony.json
@@ -0,0 +1,30 @@
+{
+ "pony": [
+ {
+ "type": "icon_state",
+ "icon_state": "pony",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "pony_hair",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ }
+ ],
+ "pony_dead": [
+ {
+ "type": "icon_state",
+ "icon_state": "pony_dead",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "pony_hair_dead",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ }
+ ]
+}
diff --git a/code/game/machinery/syndicatebeacon.dm b/code/game/machinery/syndicatebeacon.dm
index 188f3b4f52e..9015eaacedc 100644
--- a/code/game/machinery/syndicatebeacon.dm
+++ b/code/game/machinery/syndicatebeacon.dm
@@ -146,3 +146,7 @@
/obj/item/sbeacondrop/clownbomb
desc = "A label on it reads: Warning: Activating this device will send a silly explosive to your location."
droptype = /obj/machinery/syndicatebomb/badmin/clown
+
+/obj/item/sbeacondrop/horse
+ desc = "A label on it reads: Warning: Activating this device will send a live horse to your location."
+ droptype = /mob/living/basic/pony/syndicate
diff --git a/code/game/objects/items/storage/holsters.dm b/code/game/objects/items/storage/holsters.dm
index 25eeb558040..7a193e26683 100644
--- a/code/game/objects/items/storage/holsters.dm
+++ b/code/game/objects/items/storage/holsters.dm
@@ -190,3 +190,18 @@
/obj/item/ammo_casing, // For shotgun shells, rockets, launcher grenades, and a few other things.
/obj/item/grenade, // All regular grenades, the big grenade launcher fires these.
))
+
+/obj/item/storage/belt/holster/nukie/cowboy
+ desc = "A deep shoulder holster capable of holding almost any form of small firearm and its ammo. This one's specialized for handguns."
+
+/obj/item/storage/belt/holster/nukie/cowboy/Initialize(mapload)
+ . = ..()
+ atom_storage.max_slots = 3
+ atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL
+
+/obj/item/storage/belt/holster/nukie/cowboy/full/PopulateContents()
+ generate_items_inside(list(
+ /obj/item/gun/ballistic/revolver/syndicate/cowboy = 1,
+ /obj/item/ammo_box/a357 = 2,
+ ), src)
+
diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm
index 9fa66404aed..fc1b264b811 100644
--- a/code/game/objects/items/storage/uplink_kits.dm
+++ b/code/game/objects/items/storage/uplink_kits.dm
@@ -789,6 +789,21 @@
for(var/i in 1 to poster_count)
new /obj/item/poster/traitor(src)
+/obj/item/storage/box/syndie_kit/cowboy
+ name = "western outlaw pack"
+ desc = "Contains everything you'll need to be the rootin' tootin' cowboy you always wanted. Either play the Lone Ranger or go in with your posse of outlaws."
+
+/obj/item/storage/box/syndie_kit/cowboy/PopulateContents()
+ generate_items_inside(list(
+ /obj/item/clothing/shoes/cowboy/black/syndicate= 1,
+ /obj/item/clothing/head/cowboy/black/syndicate = 1,
+ /obj/item/storage/belt/holster/nukie/cowboy/full = 1,
+ /obj/item/clothing/under/costume/dutch/syndicate = 1,
+ /obj/item/lighter/skull = 1,
+ /obj/item/sbeacondrop/horse = 1,
+ /obj/item/food/grown/apple = 1,
+ ), src)
+
#undef KIT_RECON
#undef KIT_BLOODY_SPAI
#undef KIT_STEALTHY
diff --git a/code/modules/clothing/head/hat.dm b/code/modules/clothing/head/hat.dm
index d99c5b0c429..83c3890eb57 100644
--- a/code/modules/clothing/head/hat.dm
+++ b/code/modules/clothing/head/hat.dm
@@ -135,6 +135,10 @@
worn_icon_state = "cowboy_hat_black"
inhand_icon_state = "cowboy_hat_black"
+/// More likely to intercept bullets, since you're likely to not be wearing your modsuit with this on
+/obj/item/clothing/head/cowboy/black/syndicate
+ deflect_chance = 25
+
/obj/item/clothing/head/cowboy/white
name = "ten-gallon hat"
desc = "There are two kinds of people in the world: those with guns and those that dig. You dig?"
diff --git a/code/modules/clothing/shoes/cowboy.dm b/code/modules/clothing/shoes/cowboy.dm
index 05792a72cbd..0aa518bc136 100644
--- a/code/modules/clothing/shoes/cowboy.dm
+++ b/code/modules/clothing/shoes/cowboy.dm
@@ -6,6 +6,10 @@
custom_price = PAYCHECK_CREW
var/max_occupants = 4
can_be_tied = FALSE
+ /// Do these boots have spur sounds?
+ var/has_spurs = FALSE
+ /// The jingle jangle jingle of our spurs
+ var/list/spur_sound = list('sound/effects/footstep/spurs1.ogg'=1,'sound/effects/footstep/spurs2.ogg'=1,'sound/effects/footstep/spurs3.ogg'=1)
/datum/armor/shoes_cowboy
bio = 90
@@ -19,6 +23,9 @@
//There's a snake in my boot
new /mob/living/basic/snake(src)
+ if(has_spurs)
+ LoadComponent(/datum/component/squeak, spur_sound, 50, falloff_exponent = 20)
+
/obj/item/clothing/shoes/cowboy/equipped(mob/living/carbon/user, slot)
. = ..()
@@ -97,3 +104,10 @@
name = "\improper Hugs-The-Feet lizard skin boots"
desc = "A pair of masterfully crafted lizard skin boots. Finally a good application for the station's most bothersome inhabitants."
icon_state = "lizardboots_blue"
+
+/// Shoes for the nuke-ops cowboy fit
+/obj/item/clothing/shoes/cowboy/black/syndicate
+ name = "black spurred cowboy boots"
+ desc = "And they sing, oh, ain't you glad you're single? And that song ain't so very far from wrong."
+ armor_type = /datum/armor/shoes_combat
+ has_spurs = TRUE
diff --git a/code/modules/clothing/under/costume.dm b/code/modules/clothing/under/costume.dm
index 6ef6489f389..c7be95178e4 100644
--- a/code/modules/clothing/under/costume.dm
+++ b/code/modules/clothing/under/costume.dm
@@ -362,6 +362,11 @@
inhand_icon_state = null
can_adjust = FALSE
+// For the nuke-ops cowboy fit. Sadly no Lone Ranger fit & I don't wanna bloat costume files further.
+/obj/item/clothing/under/costume/dutch/syndicate
+ desc = "You can feel a god damn plan coming on, and the armor lining in this suit'll do wonders in makin' it work."
+ armor_type = /datum/armor/clothing_under/syndicate
+
/obj/item/clothing/under/costume/osi
name = "O.S.I. jumpsuit"
icon_state = "osi_jumpsuit"
diff --git a/code/modules/mob/living/basic/farm_animals/pony.dm b/code/modules/mob/living/basic/farm_animals/pony.dm
index 4bc09391cb7..7649068458d 100644
--- a/code/modules/mob/living/basic/farm_animals/pony.dm
+++ b/code/modules/mob/living/basic/farm_animals/pony.dm
@@ -24,15 +24,24 @@
gold_core_spawnable = FRIENDLY_SPAWN
blood_volume = BLOOD_VOLUME_NORMAL
ai_controller = /datum/ai_controller/basic_controller/pony
+ /// Do we register a unique rider?
+ var/unique_tamer = FALSE
+ /// The person we've been tamed by
+ var/datum/weakref/my_owner
+
+ greyscale_config = /datum/greyscale_config/pony
+ /// Greyscale color config; 1st color is body, 2nd is mane
+ var/list/ponycolors = list("#cc8c5d", "#cc8c5d")
/mob/living/basic/pony/Initialize(mapload)
. = ..()
+ apply_colour()
AddElement(/datum/element/pet_bonus, "whickers.")
AddElement(/datum/element/ai_retaliate)
AddElement(/datum/element/ai_flee_while_injured)
AddElement(/datum/element/waddling)
- AddComponent(/datum/component/tameable, food_types = list(/obj/item/food/grown/apple), tame_chance = 25, bonus_tame_chance = 15, after_tame = CALLBACK(src, PROC_REF(tamed)))
+ AddComponent(/datum/component/tameable, food_types = list(/obj/item/food/grown/apple), tame_chance = 25, bonus_tame_chance = 15, after_tame = CALLBACK(src, PROC_REF(tamed)), unique = unique_tamer)
/mob/living/basic/pony/proc/tamed(mob/living/tamer)
can_buckle = TRUE
@@ -40,6 +49,7 @@
playsound(src, 'sound/creatures/pony/snort.ogg', 50)
AddElement(/datum/element/ridable, /datum/component/riding/creature/pony)
visible_message(span_notice("[src] snorts happily."))
+ new /obj/effect/temp_visual/heart(loc)
ai_controller.replace_planning_subtrees(list(
/datum/ai_planning_subtree/find_nearest_thing_which_attacked_me_to_flee,
@@ -47,6 +57,30 @@
/datum/ai_planning_subtree/random_speech/pony/tamed
))
+ if(unique_tamer)
+ my_owner = WEAKREF(tamer)
+ RegisterSignal(src, COMSIG_MOVABLE_PREBUCKLE, PROC_REF(on_prebuckle))
+
+/mob/living/basic/pony/Destroy()
+ UnregisterSignal(src, COMSIG_MOVABLE_PREBUCKLE)
+ my_owner = null
+ return ..()
+
+/// Only let us get ridden if the buckler is our owner, if we have a unique owner.
+/mob/living/basic/pony/proc/on_prebuckle(mob/source, mob/living/buckler, force, buckle_mob_flags)
+ SIGNAL_HANDLER
+ var/mob/living/tamer = my_owner?.resolve()
+ if(!unique_tamer || (isnull(tamer) && unique_tamer))
+ return
+ if(buckler != tamer)
+ whinny_angrily()
+ return COMPONENT_BLOCK_BUCKLE
+
+/mob/living/basic/pony/proc/apply_colour()
+ if(!greyscale_config)
+ return
+ set_greyscale(colors = ponycolors)
+
/mob/living/basic/pony/proc/whinny_angrily()
manual_emote("whinnies ANGRILY!")
@@ -86,3 +120,35 @@
/datum/ai_planning_subtree/basic_melee_attack_subtree,
/datum/ai_planning_subtree/random_speech/pony
)
+
+// A stronger horse is required for our strongest cowboys.
+/mob/living/basic/pony/syndicate
+ health = 300
+ maxHealth = 300
+ desc = "A special breed of horse engineered by the syndicate to be capable of surviving in the deep reaches of space. A modern outlaw's best friend."
+ faction = list(ROLE_SYNDICATE)
+ ponycolors = list("#5d566f", COLOR_RED)
+ pressure_resistance = 200
+ habitable_atmos = list("min_oxy" = 0, "max_oxy" = 0, "min_plas" = 0, "max_plas" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
+ minimum_survivable_temperature = 0
+ maximum_survivable_temperature = 1500
+ unique_tamer = TRUE
+
+/mob/living/basic/pony/syndicate/Initialize(mapload)
+ . = ..()
+ // Help discern your horse from your allies
+ var/mane_colors = list(
+ COLOR_RED=6,
+ COLOR_BLUE=6,
+ COLOR_PINK=3,
+ COLOR_GREEN=3,
+ COLOR_BLACK=3,
+ COLOR_YELLOW=2,
+ COLOR_ORANGE=1,
+ COLOR_WHITE=1,
+ COLOR_DARK_BROWN=1,
+ )
+ ponycolors = list("#5d566f", pick_weight(mane_colors))
+ name = pick("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday")
+ // Only one person can tame these fellas, and they only need one apple
+ AddComponent(/datum/component/tameable, food_types = list(/obj/item/food/grown/apple), tame_chance = 100, bonus_tame_chance = 15, after_tame = CALLBACK(src, PROC_REF(tamed)), unique = unique_tamer)
diff --git a/code/modules/projectiles/guns/ballistic/revolver.dm b/code/modules/projectiles/guns/ballistic/revolver.dm
index 2b62416fe7f..f87f473ae45 100644
--- a/code/modules/projectiles/guns/ballistic/revolver.dm
+++ b/code/modules/projectiles/guns/ballistic/revolver.dm
@@ -139,6 +139,11 @@
desc = "A modernized 7 round revolver manufactured by Waffle Co. Uses .357 ammo."
icon_state = "revolversyndie"
+/obj/item/gun/ballistic/revolver/syndicate/cowboy
+ desc = "A classic revolver, refurbished for modern use. Uses .357 ammo."
+ //There's already a cowboy sprite in there!
+ icon_state = "lucky"
+
/obj/item/gun/ballistic/revolver/mateba
name = "\improper Unica 6 auto-revolver"
desc = "A retro high-powered autorevolver typically used by officers of the New Russia military. Uses .357 ammo."
diff --git a/code/modules/uplink/uplink_items/nukeops.dm b/code/modules/uplink/uplink_items/nukeops.dm
index 632d4cc2717..78dedc0c072 100644
--- a/code/modules/uplink/uplink_items/nukeops.dm
+++ b/code/modules/uplink/uplink_items/nukeops.dm
@@ -498,6 +498,16 @@
cost = 10
purchasable_from = UPLINK_NUKE_OPS
+/datum/uplink_item/bundles_tc/cowboy
+ name = "Syndicate Outlaw Kit"
+ desc = "There've been high tales of an outlaw 'round these parts. A fella so ruthless and efficient no ranger could ever capture 'em. \
+ Now you can be just like 'em! \
+ This kit contains armor-lined cowboy equipment, a custom revolver and holster, and a horse with a complimentary apple to tame. \
+ A lighter is also included, though you must supply your own smokes."
+ item = /obj/item/storage/box/syndie_kit/cowboy
+ cost = 18
+ purchasable_from = UPLINK_NUKE_OPS
+
// Mech related gear
/datum/uplink_category/mech
diff --git a/icons/mob/simple/animal.dmi b/icons/mob/simple/animal.dmi
index 6e8b31b7877c40f1413cec1235c904b00b2cd573..87fe3a21506b1df5f40673c28d9fb8b902b563bb 100644
GIT binary patch
delta 30134
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