mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 10:12:45 +00:00
Merge pull request #6505 from CHOMPStation2/upstream-merge-15112
[MIRROR] Adds new Debris Field POI: Phoron Tanker!
This commit is contained in:
@@ -111,4 +111,131 @@
|
||||
icon_state = "yellow-1"
|
||||
catalogue_data = list(/datum/category_item/catalogue/information/objects/growthcanister)
|
||||
anchored = FALSE
|
||||
density = TRUE
|
||||
density = TRUE
|
||||
|
||||
|
||||
/obj/item/poi/broken_drone_circuit
|
||||
name = "Central Processing Strata" //Ideally we spawn this as loot for robotic enemies
|
||||
desc = "The pinnacle of artifical intelligence which can be achieved using classical computer science. \n \
|
||||
This one seems somewhat damaged. Perhaps a trained roboticist could extract its memories?"
|
||||
catalogue_data = list(/datum/category_item/catalogue/technology/drone/drones)
|
||||
icon = 'icons/obj/module.dmi'
|
||||
icon_state = "mainboard"
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
origin_tech = list(TECH_ENGINEERING = 4, TECH_MATERIAL = 3, TECH_DATA = 4)
|
||||
var/drone_name = "" //Randomly picked unless pre-defined. Used by tool examines
|
||||
var/examine_multitool = "TEST_multi - CONTACT DEV" //Read by attacking with multitool
|
||||
var/examine_canalyzer = "TEST_canalyzer spoken - CONTACT DEV" //Read by attacking with cyborg analyzer. Define in New() if using vars
|
||||
var/examine_canalyzer_printed = "" //If we want different formatting or more detals for printed. By default unused
|
||||
var/wirecutted = FALSE
|
||||
var/unscrewed = FALSE
|
||||
var/unlocked = FALSE
|
||||
var/fried = FALSE
|
||||
var/has_paper = FALSE
|
||||
|
||||
|
||||
/obj/item/poi/broken_drone_circuit/New()
|
||||
drone_name = "[pick(list("ADA","DOS","GNU","MAC","WIN","NJS","SKS","DRD","IOS","CRM","IBM","TEX","LVM","BSD",))]-[rand(1000, 9999)]]"
|
||||
var/new_canalyzer = "[drone_name] [examine_canalyzer]" //Only way I could think to dynamically insert drone name here
|
||||
examine_canalyzer = new_canalyzer
|
||||
|
||||
/obj/item/poi/broken_drone_circuit/attackby(obj/item/I as obj, mob/living/user as mob)
|
||||
if(!istype(user))
|
||||
return FALSE
|
||||
if(fried)
|
||||
to_chat(user, span_warning("[src] is covered in black marks. You feel there's nothing more you can do..."))
|
||||
return FALSE
|
||||
|
||||
var/turf/message_turf = get_turf(user) //We use this to ensure everyone can see it!
|
||||
if(istype(I, /obj/item/weapon/tool/screwdriver))
|
||||
unscrewed = !unscrewed
|
||||
to_chat(user, "You screw the blackbox panel [unscrewed ? "off" : "on"]")
|
||||
|
||||
if(istype(I, /obj/item/weapon/tool/wirecutters))
|
||||
wirecutted = !wirecutted
|
||||
to_chat(user, "You [wirecutted ? "cut" : "mend"] the power wire to the blackbox")
|
||||
|
||||
if(istype(I, /obj/item/weapon/paper) && unscrewed)
|
||||
if(!has_paper)
|
||||
to_chat(user, "You feed the debug printer some paper")
|
||||
has_paper = TRUE
|
||||
qdel(I)
|
||||
else
|
||||
to_chat(user, span_notice("[src] cannot hold more than 1 sheet of paper."))
|
||||
|
||||
if(istype(I, /obj/item/device/multitool))
|
||||
if(!unscrewed && !wirecutted)
|
||||
to_chat(user, span_notice("You cannot access the debug interface with the panel screwed on!"))
|
||||
else if(unscrewed && !wirecutted)
|
||||
message_turf.audible_message(message = examine_multitool,
|
||||
deaf_message = "<b>[src]</b> flashes red repeatedly", runemessage= "Beep! Beep!")
|
||||
to_chat(user, span_warning("The components spark from the multitool's unregulated pulse. \
|
||||
Perhaps it'd been better to use more sophisticated tools..."))
|
||||
fried = TRUE
|
||||
message_turf.visible_message(message = "<b>[src]</b> FLASHES VIOLENTLY!",
|
||||
blind_message = "ZAP!", runemessage = "CRACKLE!")
|
||||
var/used_hand = user.get_organ(user.get_active_hand())
|
||||
user.electrocute_act(10,def_zone = used_hand)
|
||||
else if(wirecutted) //The security circuit is accessible outside the special panel, so we don't care for screwdrivers
|
||||
to_chat(user, span_notice("You modify the security settings."))
|
||||
unlocked = TRUE
|
||||
|
||||
if(istype(I, /obj/item/device/robotanalyzer))
|
||||
if(!unscrewed)
|
||||
to_chat(user, span_notice("You cannot access the debug interface with the panel screwed on!"))
|
||||
else if(wirecutted)
|
||||
to_chat(user, span_notice("You only receive garbled data. Perhaps you should reconnect the wires?"))
|
||||
else if(!unlocked)
|
||||
to_chat(user, span_danger("Security protocols seemingly engage, purging and bricking the circuit!\n \
|
||||
Perhaps, it would've been a good idea to disconnect some wires while pulsing the security circuit..."))
|
||||
else
|
||||
if(!has_paper)
|
||||
message_turf.visible_message(message = "<b>[src]</b> displays, 'PAPER NOT BIN'",
|
||||
blind_message = "you hear VERY ANGRY beeping.", runemessage = "BEEP BEEP!")
|
||||
message_turf.audible_message(message = "<b>[src]</b> recites, \n '[examine_canalyzer]'",
|
||||
deaf_message = "<b>[src]</b> flashes green!", runemessage= "Ping!")
|
||||
else
|
||||
message_turf.audible_message(message = "<b>[src]</b> rattles loudly as it prints",
|
||||
deaf_message = "<b>[src]</b> flashes green!", runemessage= "RATTLE RATTLE")
|
||||
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(get_turf(src))
|
||||
P.name = "[drone_name] blackbox transcript"
|
||||
P.info = "[examine_canalyzer_printed ? examine_canalyzer_printed : examine_canalyzer]"
|
||||
has_paper = FALSE
|
||||
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/item/poi/broken_drone_circuit/attack_self(mob/living/user as mob)
|
||||
|
||||
|
||||
user.visible_message(message = "[user] is studiously examining [src]", self_message = "You take your time to analyze the circuit...")
|
||||
var/message = ""
|
||||
if(fried)
|
||||
message += "Amidst the scorch mark, you barely make out [drone_name] stenciled on the board... \n"
|
||||
to_chat(user, message)
|
||||
return FALSE
|
||||
else
|
||||
message += "You see [drone_name] stenciled onto the board on close inspection! This looks like a secure drone intelligence strata. \n"
|
||||
|
||||
|
||||
if(unlocked)
|
||||
message += "The power logic to the blackbox is scorched. Whatever secrets lie in the blackbox are yours for taking! \n"
|
||||
else if(wirecutted)
|
||||
message += "The power wire to the blackbox has been cut. It's safe to pulse the circuit with power, the blackbox won't fry. \n"
|
||||
|
||||
else if(!unscrewed && !wirecutted)
|
||||
message += "The blackbox is intact, it seems to have a direct wire into the PSU. Strange... \n"
|
||||
|
||||
else if(unscrewed && !wirecutted)
|
||||
message += "Some manner of hardwired logic seems to connect the PSU into the databanks. There is no step-down circuit. \n \
|
||||
It looks like a single pulse will fry this system for good\n"
|
||||
if(unscrewed && !has_paper)
|
||||
message += "Looks like there's a printer without any paper in it."
|
||||
|
||||
|
||||
if(do_after(user, delay = 5 SECONDS))
|
||||
to_chat(user, message)
|
||||
|
||||
|
||||
|
||||
..()
|
||||
|
||||
@@ -96,6 +96,108 @@
|
||||
name = "POI - Overrun Science Ship"
|
||||
requires_power = 0
|
||||
|
||||
/area/submap/debrisfield/phoron_tanker
|
||||
name = "POI - Hijacked Phoron Tanker"
|
||||
var/ic_name = ""
|
||||
requires_power = 0
|
||||
has_gravity = FALSE
|
||||
|
||||
|
||||
/area/submap/debrisfield/phoron_tanker/Initialize()
|
||||
. = ..()
|
||||
var/datum/lore/organization/O = loremaster.organizations[/datum/lore/organization/tsc/nanotrasen]
|
||||
ic_name = pick(O.ship_names)
|
||||
name = "NTV [ic_name]"
|
||||
if(!tag)
|
||||
tag = "POI_NT_TANKER_BOAT" //Can't define at compile time, this ensures the area has this if empty
|
||||
if(apc)
|
||||
apc.name = "[name] APC"
|
||||
air_vent_names = list()
|
||||
air_scrub_names = list()
|
||||
air_vent_info = list()
|
||||
air_scrub_info = list()
|
||||
for(var/obj/machinery/alarm/AA in src)
|
||||
AA.name = "[name] Air Alarm"
|
||||
|
||||
|
||||
/area/submap/debrisfield/luxury_boat
|
||||
secret_name = 0
|
||||
|
||||
/area/submap/debrisfield/luxury_boat/bridge
|
||||
name = "Captain's Quarters"
|
||||
|
||||
/area/submap/debrisfield/luxury_boat/crew
|
||||
name = "Passenger Compartment"
|
||||
|
||||
/area/submap/debrisfield/luxury_boat/engine
|
||||
name = "Engineering"
|
||||
|
||||
/area/submap/debrisfield/luxury_boat/cryo
|
||||
name = "Emergency Cryopods" //Separated out based on comments on Pull Request
|
||||
requires_power = 0 //Idea is to reinforce that this place SHOULD have its air retained.
|
||||
|
||||
/datum/shuttle/autodock/overmap/luxury_boat
|
||||
name = "Luxury Yacht"
|
||||
warmup_time = 0
|
||||
current_location = "debris_field_yacht_start"
|
||||
docking_controller_tag = "debris_yacht_docker"
|
||||
shuttle_area = list(/area/submap/debrisfield/luxury_boat/engine, /area/submap/debrisfield/luxury_boat/cryo, /area/submap/debrisfield/luxury_boat/crew, /area/submap/debrisfield/luxury_boat/bridge)
|
||||
fuel_consumption = 6 //wasteful decadent thing
|
||||
defer_initialisation = TRUE
|
||||
move_direction = WEST
|
||||
|
||||
/obj/effect/shuttle_landmark/shuttle_initializer/luxury_boat
|
||||
name = "Debris Field"
|
||||
base_area = /area/space
|
||||
base_turf = /turf/space
|
||||
landmark_tag = "debris_field_yacht_start"
|
||||
shuttle_type = /datum/shuttle/autodock/overmap/luxury_boat
|
||||
|
||||
/obj/effect/shuttle_landmark/shuttle_initializer/luxury_boat/Initialize()
|
||||
var/obj/effect/overmap/visitable/O = get_overmap_sector(get_z(src)) //make this into general system some other time
|
||||
LAZYINITLIST(O.initial_restricted_waypoints)
|
||||
O.initial_restricted_waypoints["Luxury Yacht"] = list(landmark_tag)
|
||||
. = ..()
|
||||
|
||||
/obj/effect/overmap/visitable/ship/landable/luxury_boat
|
||||
name = "TBD"
|
||||
scanner_desc = "TBD"
|
||||
vessel_mass = 20000 //10 000 is too low. It's incredibly speedy that way. This is supposed to be a crappy luxury yacht, not a racer!
|
||||
vessel_size = SHIP_SIZE_SMALL
|
||||
shuttle = "Luxury Yacht"
|
||||
|
||||
/obj/effect/overmap/visitable/ship/landable/luxury_boat/Initialize()
|
||||
. = ..()
|
||||
var/datum/lore/organization/O = loremaster.organizations[/datum/lore/organization/gov/elysia]
|
||||
var/newname = "ECS-T [pick(O.ship_names)]"
|
||||
name = newname
|
||||
scanner_desc = {"\[i\]Registration\[/i\]: [newname]
|
||||
\[i\]Class\[/i\]: Private Pleasure Yacht
|
||||
\[i\]Transponder\[/i\]: Transmitting (CIV), Weak Signal
|
||||
\[b\]Notice\[/b\]: Reported missing."}
|
||||
rename_areas(newname)
|
||||
|
||||
/obj/effect/overmap/visitable/ship/landable/luxury_boat/proc/rename_areas(newname)
|
||||
if(!SSshuttles.subsystem_initialized)
|
||||
spawn(300)
|
||||
rename_areas(newname)
|
||||
return
|
||||
var/datum/shuttle/S = SSshuttles.shuttles[shuttle]
|
||||
for(var/area/A in S.shuttle_area)
|
||||
A.name = "[newname] [initial(A.name)]"
|
||||
if(A.apc)
|
||||
A.apc.name = "[A.name] APC"
|
||||
A.air_vent_names = list()
|
||||
A.air_scrub_names = list()
|
||||
A.air_vent_info = list()
|
||||
A.air_scrub_info = list()
|
||||
for(var/obj/machinery/alarm/AA in A)
|
||||
AA.name = "[A.name] Air Alarm"
|
||||
|
||||
/obj/machinery/computer/shuttle_control/explore/luxury_boat
|
||||
shuttle_tag = "Luxury Yacht"
|
||||
req_one_access = list()
|
||||
|
||||
/area/submap/debrisfield/old_sat
|
||||
name = "POI - Old Satellite"
|
||||
|
||||
|
||||
@@ -211,6 +211,11 @@
|
||||
mappath = 'ship_sci_overrun.dmm'
|
||||
cost = 35
|
||||
allow_duplicates = FALSE
|
||||
/datum/map_template/debrisfield/phoron_tanker
|
||||
name = "Betrayed Phoron Tanker"
|
||||
mappath = 'ship_tanker_betrayed.dmm'
|
||||
cost = 35
|
||||
allow_duplicates = FALSE
|
||||
|
||||
/datum/map_template/debrisfield/oldshuttle
|
||||
name = "Old Expedition Shuttle"
|
||||
@@ -286,3 +291,10 @@
|
||||
cost = 35
|
||||
allow_duplicates = FALSE
|
||||
discard_prob = 25
|
||||
|
||||
/datum/map_template/debrisfield/phoron_tanker
|
||||
name = "Betrayed Phoron Tanker"
|
||||
mappath = 'ship_tanker_betrayed.dmm'
|
||||
cost = 35
|
||||
allow_duplicates = FALSE
|
||||
discard_prob = 25
|
||||
|
||||
@@ -206,3 +206,126 @@ hope nobody ever has to read this. has to find her.<br>\
|
||||
if you do, im sorry.<br>\
|
||||
i just hope whatever happens, she finds the mercy we werent equipped to give her.<br>\
|
||||
<i>The author's signature is smudged beyond recognition.</i>"}
|
||||
|
||||
/mob/living/simple_mob/humanoid/merc/melee/drone/tanker_escort
|
||||
name = "NED Sigma-Phi "
|
||||
desc = "A rudimentary combat drone! You might recognize this as an automated gamma escort for semi-autonomous NanoTrasen vessels."
|
||||
tt_desc = "Escort Gamma Drone"
|
||||
tt_desc = null
|
||||
health = 75
|
||||
maxHealth = 75
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/merc/tanker_escort
|
||||
say_list_type = /datum/say_list/merc/drone/tanker_escort
|
||||
corpse = /obj/effect/landmark/mobcorpse/syndicatesoldier/drone/tanker
|
||||
loot_list = list(/obj/item/poi/broken_drone_circuit/phoron_tanker = 100, /obj/item/weapon/material/knife/tacknife = 100)
|
||||
min_oxy = 0
|
||||
max_oxy = 0
|
||||
min_tox = 0
|
||||
max_tox = 0
|
||||
min_co2 = 0
|
||||
max_co2 = 0
|
||||
min_n2 = 0
|
||||
max_n2 = 0
|
||||
minbodytemp = 0
|
||||
|
||||
|
||||
/mob/living/simple_mob/humanoid/merc/melee/sword/drone/tanker_escort
|
||||
name = "NED Sigma-Delta "
|
||||
desc = "A rudimentary combat drone! You might recognize this as an automated gamma escort for semi-autonomous NanoTrasen vessels."
|
||||
tt_desc = "Escort Gamma Drone"
|
||||
health = 35 // Glass cannon
|
||||
maxHealth = 75
|
||||
tt_desc = null
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/merc/tanker_escort
|
||||
say_list_type = /datum/say_list/merc/drone/tanker_escort
|
||||
corpse = /obj/effect/landmark/mobcorpse/syndicatesoldier/drone/tanker
|
||||
loot_list = list(/obj/item/poi/broken_drone_circuit/phoron_tanker = 100,
|
||||
/obj/item/weapon/shield/energy = 100, /obj/item/weapon/melee/energy/sword/color = 20)
|
||||
min_oxy = 0
|
||||
max_oxy = 0
|
||||
min_tox = 0
|
||||
max_tox = 0
|
||||
min_co2 = 0
|
||||
max_co2 = 0
|
||||
min_n2 = 0
|
||||
max_n2 = 0
|
||||
minbodytemp = 0
|
||||
|
||||
/mob/living/simple_mob/humanoid/merc/ranged/smg/drone/tanker_escort
|
||||
name = "NED Rho-Phi"
|
||||
desc = "A rudimentary combat drone! You might recognize this as an automated gamma escort for semi-autonomous NanoTrasen vessels."
|
||||
tt_desc = "Escort Gamma Drone"
|
||||
health = 100 //Max health stays same, but our guy got hit with a mateba a few times..
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/merc/ranged/tanker_escort
|
||||
say_list_type = /datum/say_list/merc/drone/tanker_escort
|
||||
corpse = /obj/effect/landmark/mobcorpse/syndicatesoldier/drone/tanker
|
||||
loot_list = list(/obj/item/poi/broken_drone_circuit/phoron_tanker = 100, /obj/item/weapon/gun/projectile/automatic/c20r = 100)
|
||||
min_oxy = 0
|
||||
max_oxy = 0
|
||||
min_tox = 0
|
||||
max_tox = 0
|
||||
min_co2 = 0
|
||||
max_co2 = 0
|
||||
min_n2 = 0
|
||||
max_n2 = 0
|
||||
minbodytemp = 0
|
||||
|
||||
/obj/effect/landmark/mobcorpse/syndicatesoldier/drone/tanker
|
||||
corpsesynthbrand = "NanoTrasen"
|
||||
corpseidjob = "Tanker Security"
|
||||
|
||||
/obj/effect/landmark/mobcorpse/syndicatesoldier/drone/tanker/generateCorpseName()
|
||||
var/letter = "NED"
|
||||
var/number = rand(0,999)
|
||||
return "[letter]-[number] Guard Drone"
|
||||
|
||||
/datum/ai_holder/simple_mob/merc/tanker_escort
|
||||
threaten = FALSE //We're jumping from shadows!
|
||||
|
||||
/datum/ai_holder/simple_mob/merc/ranged/tanker_escort
|
||||
threaten_delay = 3 SECONDS //Bugged escort drones, we give a warning, take aim... FIRE!
|
||||
|
||||
/datum/say_list/merc/drone/tanker_escort
|
||||
speak = list( "Attempt Do-dock... Do-dock... Err-",
|
||||
"Re-resc . . . Rescind. Rescind Tanker!",
|
||||
"Evaluate Asteroid",
|
||||
"Report Al-Al-Al-Al...",
|
||||
"Find Fax!"
|
||||
)
|
||||
say_threaten = list("INTRU-INT-INT")
|
||||
say_escalate = list("Janitorial Engaged!", "Shoot to-ta-te stun!")
|
||||
|
||||
/obj/item/poi/broken_drone_circuit/phoron_tanker
|
||||
origin_tech = list(TECH_ENGINEERING = 4, TECH_MATERIAL = 3, TECH_DATA = 4, TECH_COMBAT = 6)
|
||||
var/static/area/submap/debrisfield/phoron_tanker/tanker //Doing this to save some perf
|
||||
examine_multitool = "ERR- ERR- KZZZHT \n \
|
||||
designation: <b>kzth!</b> \n assignment: <b>CRACKLE</b> \n \
|
||||
ZRRRRRRRRRRRRR \n \
|
||||
goal: RETURN HOME status: Successful \n \
|
||||
goal: PRO-PRO"
|
||||
|
||||
/obj/item/poi/broken_drone_circuit/phoron_tanker/New()
|
||||
drone_name = "NED-[pick(list("ADA","DOS","GNU","MAC","WIN","NJS","SKS","DRD","IOS","CRM","IBM","TEX","LVM","BSD",))]-[rand(1000, 9999)]]"
|
||||
tanker = locate("POI_NT_TANKER_BOAT") //actual .dmm area has this
|
||||
var/tankername = "Unknown Ship"
|
||||
if(tanker)
|
||||
tankername = tanker.ic_name
|
||||
|
||||
examine_canalyzer = "<b>UNIT DESIGNATION</b>: [drone_name] \n <b>UNIT ASSIGNMENT</b>: [tankername] \n \
|
||||
<b>TASKING</b>: Accompany & Protect <b>STATUS</b>: INTERRUPTED \n \
|
||||
<b>TASKING</b>: HIJACK DETECTED <b>STATUS</b>: RESOLVED \n \
|
||||
<b>TASKING</b>: RETURN HOME <b>STATUS</b>: SUCCESSFULLY RETURNED TO NSB ADEGAPHIA \n \
|
||||
<b>TASKING</b>: WAIT HANDOFF AUTHORITY <b>STATUS</b>: ACTIVE"
|
||||
examine_canalyzer_printed = "<b>UNIT DESIGNATION</b>: [drone_name] <br> <b>UNIT ASSIGNMENT</b>: [tankername] <br> \
|
||||
<b>TASKING</b>: Accompany & Protect <b>STATUS</b>: INTERRUPTED <br> \
|
||||
<b>EVENT</b>: POWER SURGE DETECTED <br><b>STATUS</b>: 069 082 082 079 082 <br> \
|
||||
<b>DIAG</b>: SENSORS <br> <b>STATUS</b>: 070 065 073 076 <br>\
|
||||
<b>EVENT</b>: POWER SURGE DETECTED <br> <b>STATUS</b>: RESE7 COMPLEvE <br> \
|
||||
<b>DIAG</b>: SENSORS <br> <b>STATUS</b>: PPAAS <br> \
|
||||
<b>TASKING</b>: HIJACK DETECTED <br> <b>STATUS</b>: RESsOLV3D <br> \
|
||||
<b>EVENT</b>: DISCHARGE <b>STATUS</b>: CONfIVED <br> \
|
||||
<b>DIAG</b>: PLATING <b>STATUS</b>: DENtED <br> \
|
||||
<b>TASKING</b>: RETURN HOME <br> <b>STATUS</b>: S8CCeSSFULLY RETURnED tO NSB AD3GAPhIA <br> \
|
||||
<b>EVENT</b> IMPACT <br> <b>STATUS</b>: NOTE HArD DOCkING <br> \
|
||||
<b>TASKING</b>: WAIT HANDOFF AUTHORITY <b>STATUS</b>: 4CTIVE <br> \
|
||||
<b>EVENT</b>: TRESPAS <b>STATUS</b>: 3Limited"
|
||||
|
||||
1267
maps/submaps/pois_vr/debris_field/ship_tanker_betrayed.dmm
Normal file
1267
maps/submaps/pois_vr/debris_field/ship_tanker_betrayed.dmm
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user