Spacepod Cargo Bay Equipment and Pod Fabricator Spruce Up (#37208)

* pod updates

* resist escape
This commit is contained in:
jwhitak
2024-10-10 10:17:48 -05:00
committed by GitHub
parent 074c6b032e
commit 82f1fd59e1
7 changed files with 349 additions and 239 deletions

View File

@@ -626,6 +626,8 @@ steam.start() -- spawns the effect
if(src.processing)
src.processing = 0
spawn(0)
if(!holder)
return
var/turf/T = get_turf(src.holder)
if(currloc != T)
switch(holder.dir)

View File

@@ -1022,6 +1022,11 @@ Thanks.
var/obj/structure/rack/crate_shelf/CS = C.loc
CS.relay_container_resist_act(src,R)
return
if(istype(C.loc, /obj/spacepod/) && istype(C,/obj/structure/closet/crate)) //todo - make this generic for future space pod cargo systems
var/obj/structure/closet/crate/R = C
var/obj/spacepod/speesepod = C.loc
speesepod.attempt_cargo_resist(src,R)
return
if(!istype(C.loc, /obj/item/delivery/large)) //Wouldn't want to interrupt escaping being wrapped over the next few trivial checks
if(istype(C, /obj/structure/closet/secure_closet))
var/obj/structure/closet/secure_closet/SC = L.loc

View File

@@ -29,6 +29,16 @@
materials = list(MAT_IRON = 15000)
locked = 1
/datum/design/pod_cargo_crate
name = "Spacepod Cargo Bay (Crate)"
desc = "Allows a space pod to hold a crate."
id = "pod_crate"
build_type = PODFAB
build_path = /obj/item/device/spacepod_equipment/cargo/crate
req_tech = list(Tc_MATERIALS = 2)
category = "Pod_Parts"
materials = list(MAT_IRON = 15000)
/datum/design/pod_lock
name = "Spacepod Equipment (Toggle Lock)"
desc = "Allows for the construction of a spacepod mounted locking system."
@@ -36,7 +46,7 @@
build_type = PODFAB
build_path = /obj/item/device/spacepod_equipment/locking/lock
req_tech = list(Tc_MATERIALS = 2, Tc_BLUESPACE = 2)
category = "Misc"
category = "Pod_Parts"
materials = list(MAT_IRON = 3500)
/datum/design/pod_key
@@ -46,5 +56,5 @@
build_type = PODFAB
build_path = /obj/item/device/pod_key
req_tech = list(Tc_MATERIALS = 2, Tc_BLUESPACE = 2)
category = "Misc"
category = "Pod_Parts"
materials = list(MAT_IRON = 1500)

View File

@@ -382,7 +382,7 @@
break
var/datum/design/D = set_parts[i]
add_to_queue(D)
visible_message("[bicon(src)] <b>[src]</b> beeps: \"[set_name] parts were added to the queue\".")
visible_message("[bicon(src)] <b>[src]</b> beeps: \"[replacetext(set_name, "_", " ")] parts were added to the queue\".")
return
/obj/machinery/r_n_d/fabricator/proc/add_to_queue(var/datum/design/part)

View File

@@ -59,6 +59,7 @@
//var/obj/item/device/spacepod_equipment/engine/engine_system // engine system
//var/obj/item/device/spacepod_equipment/shield/shield_system // shielding system
var/obj/item/device/spacepod_equipment/locking/locking_system // locking system
var/obj/item/device/spacepod_equipment/cargo/cargo_system // cargo bay system
/datum/spacepod/equipment/New(var/obj/spacepod/SP)
..()
@@ -197,3 +198,18 @@
if(i < their_code.len && char == their_code[i])
correct_positions++
to_chat(user, "<span class = 'notice'>[found_values] correct values, [correct_positions] correct positions.</span>")
/obj/item/device/spacepod_equipment/cargo
name = "pod cargo system"
desc = "You shouldn't be seeing this."
icon = 'icons/pods/ship.dmi'
icon_state = "blank"
var/list/allowed_types
var/atom/movable/stored
/obj/item/device/spacepod_equipment/cargo/crate
name = "pod cargo system"
desc = "A pod system that allows a space pod to hold a single crate."
icon = 'icons/obj/objects.dmi'
icon_state = "shelf_base"
allowed_types = list( /obj/structure/closet/crate)

View File

@@ -92,6 +92,8 @@
for(var/mob/living/L in occupants)
move_outside(L)
L.gib()
if(ES && ES.cargo_system)
QDEL_NULL(ES.cargo_system.stored)
QDEL_LIST_NULL(actions)
QDEL_NULL(pr_int_temp_processor)
QDEL_NULL(pr_give_air)
@@ -140,10 +142,13 @@
spawn(0)
var/mob/living/L = get_pilot()
if(L)
to_chat(L, "<big><span class='warning'>Critical damage to the vessel detected, core explosion imminent!</span></big>")
for(var/i = 10, i >= 0; --i)
if(ES && ES.cargo_system && ES.cargo_system.stored)
ES.cargo_system.stored.forceMove(get_turf(src))
if(L)
to_chat(L, "<span class='warning'>Automatically jettisoning cargo.</span>")
for(var/i = 10, i >= 0; --i)
if(L && L == get_pilot())
to_chat(L, "<span class='warning'>[i]</span>")
if(i == 0)
explosion(loc, 2, 4, 8)
@@ -164,6 +169,9 @@
move_outside(H, get_turf(src))
H.ex_act(severity + 1)
to_chat(H, "<span class='warning'>You are forcefully thrown from \the [src]!</span>")
if(ES && ES.cargo_system && ES.cargo_system.stored)
ES.cargo_system.stored.forceMove(get_turf(src))
ES.cargo_system.stored.ex_act(severity + 1)
QDEL_NULL(ion_trail) // Should be nulled by qdel src in next line but OH WELL
qdel(src)
if(2)
@@ -182,6 +190,8 @@
if(istype(AM,/obj/item))
if(AM == battery || istype(AM, /obj/item/device/spacepod_equipment))
continue //don't eject this particular item!
if(ES && ES.cargo_system && istype(AM, ES.cargo_system.allowed_types))
continue //it's a crate, probably!
anyitem++
AM.forceMove(get_turf(user))
if(anyitem)
@@ -232,6 +242,15 @@
ES.locking_system = W
ES.locking_system.my_atom = src
return
if(istype(W, /obj/item/device/spacepod_equipment/cargo))
if(ES.cargo_system)
to_chat(user, "<span class = 'notice'>\The [src] already has a cargo system.</span>")
return
else if(user.drop_item(W, src))
to_chat(user, "<span class='notice'>You insert \the [W] into the equipment system.</span>")
ES.cargo_system = W
ES.cargo_system.my_atom = src
return
if(W.force)
visible_message("<span class = 'warning'>\The [user] hits \the [src] with \the [W]</span>")
adjust_health(W.force)
@@ -260,6 +279,8 @@
*/
if(ES.locking_system)
possible.Add("Locking System")
if(ES.cargo_system)
possible.Add("Cargo System")
var/obj/item/device/spacepod_equipment/SPE
switch(input(user, "Remove which equipment?", null, null) as null|anything in possible)
if("Energy Cell")
@@ -283,6 +304,17 @@
ES.locking_system = null
else
to_chat(user, "<span class='warning'>You need an open hand to do that.</span>")
if("Cargo System")
var/obj/item/device/spacepod_equipment/cargo/CARGOSYS = ES.cargo_system
if(CARGOSYS.stored)
to_chat(user, "<span class='warning'>The cargo bay is loaded, you need to empty it first.</span>")
return
if(user.put_in_any_hand_if_possible(CARGOSYS))
to_chat(user, "<span class='notice'>You remove \the [CARGOSYS] from the equipment system.</span>")
CARGOSYS.my_atom = null
ES.cargo_system = null
else
to_chat(user, "<span class='warning'>You need an open hand to do that.</span>")
/*
if("engine system")
SPE = ES.engine_system
@@ -393,12 +425,14 @@
. = t_air.return_temperature()
return
/obj/spacepod/MouseDropTo(mob/M, mob/user)
if(M != user)
/obj/spacepod/MouseDropTo(atom/moved, mob/user)
if(!Adjacent(moved) || !Adjacent(user))
return
if(!Adjacent(M) || !Adjacent(user))
if(ES && ES.cargo_system && is_type_in_list(moved, ES.cargo_system.allowed_types))
attempt_load_cargo(moved, user)
if(moved != user)
return
attempt_move_inside(M, user)
attempt_move_inside(moved, user)
/obj/spacepod/MouseDropFrom(atom/over)
if(!usr || !over)
@@ -463,6 +497,94 @@
to_chat(usr, "You stop entering the pod.")
return
/obj/spacepod/proc/attempt_load_cargo(atom/movable/moved, mob/user)
if(!ES || !istype(ES))
to_chat(user, "<span class='warning'>The pod has no equipment datum, or is the wrong type, yell at pomf.</span>")
return
if(!ES.cargo_system)
to_chat(user, "<span class='warning'>The pod has no cargo system.</span>")
return
if(locked)
to_chat(usr, "<span class = 'warning'>\The [src] is locked.</span>")
return
if(usr.incapacitated() || usr.lying) //are you cuffed, dying, lying, stunned or other
return
if (!ishigherbeing(usr))
return
if(ES.cargo_system.stored)
to_chat(user, "<span class='warning'>The pod has no room in its cargo bay.</span>")
visible_message("<span class='notice'>[usr] starts to load \the [moved] into \the [src].</span>")
if(do_after(usr, src, 4 SECONDS))
if(ES.cargo_system.stored)
//Something loaded when you weren't looking!
to_chat(user, "<span class='warning'>The pod has no room in its cargo bay.</span>")
return
moved.forceMove(src)
ES.cargo_system.stored = moved
src.add_fingerprint(usr)
moved.add_fingerprint(usr)
to_chat(usr, "<span class = 'notice'>You load \the [moved] into \the [src].</span>")
else
to_chat(usr, "You stop loading the pod.")
return
/obj/spacepod/verb/attempt_unload_cargo()
set category = "Spacepod"
set name = "Unload Cargo"
set src in oview(1)
if(!ES || !istype(ES))
to_chat(usr, "<span class='warning'>The pod has no equipment datum, or is the wrong type, yell at pomf.</span>")
return
if(!ES.cargo_system)
to_chat(usr, "<span class='warning'>The pod has no cargo system.</span>")
return
if(locked)
to_chat(usr, "<span class = 'warning'>\The [src] is locked.</span>")
return
if(usr.incapacitated() || usr.lying) //are you cuffed, dying, lying, stunned or other
return
if (!ishigherbeing(usr))
return
if(!ES.cargo_system.stored)
to_chat(usr, "<span class='warning'>The pod has nothing in the cargo bay.</span>")
return
visible_message("<span class='notice'>[usr] starts to unload \the [src].</span>")
if(do_after(usr, src, 4 SECONDS))
if(!ES.cargo_system.stored)
//Something unloaded when you weren't looking!
return
ES.cargo_system.stored.forceMove(get_turf(src))
src.add_fingerprint(usr)
ES.cargo_system.stored.add_fingerprint(usr)
to_chat(usr, "<span class = 'notice'>You unload \the [ES.cargo_system.stored] from \the [src].</span>")
ES.cargo_system.stored = null
else
to_chat(usr, "You stop unloading the pod.")
return
/obj/spacepod/proc/attempt_cargo_resist(var/mob/living/user, var/obj/contained)
if(!ES || !istype(ES))
to_chat(user, "<span class='warning'>The pod has no equipment datum, or is the wrong type, yell at pomf.</span>")
return
if(!ES.cargo_system)
to_chat(user, "<span class='warning'>Something's resisting in a spacepod's cargo bay with no cargo bay. Tell your local coder...</span>")
return
user.visible_message("<span class='danger'>\The [src]'s cargo hatch begins to make banging sounds!</span>",
"<span class='warning'>You slam on the back of \the [contained] and start trying to bust out of \the [src]'s cargo bay! (This will take about 30 seconds)</span>")
if(do_after(user, src, 30 SECONDS))
if(!ES.cargo_system.stored)
//Something unloaded when you weren't looking!
return
ES.cargo_system.stored.forceMove(get_turf(src))
user.visible_message("<span class='danger'>\The [src]'s cargo hatch pops open, and \the [contained] inside pops out!</span>",
"<span class='warning'>You manage to pop \the [src]'s cargo door open!</span>")
ES.cargo_system.stored = null
/datum/global_iterator/pod_preserve_temp //normalizing cabin air temperature to 20 degrees celsium
delay = 20
/datum/global_iterator/pod_preserve_temp/process(var/obj/spacepod/spacepod)

View File

@@ -5,35 +5,52 @@ Used In File(s): \code\game\mecha\mech_fabricator.dm
<!--
#define POD_SCREEN_MAIN 1
#define POD_SCREEN_QUEUE 2
#define POD_SCREEN_FRAME 3
#define POD_SCREEN_ARMOR 4
#define POD_SCREEN_PARTS 5
#define POD_SCREEN_GUNS 6
#define POD_SCREEN_GEAR 7
#define MECH_SCREEN_MISC 10
-->
<div class="item">
<div style="float: right; width: 63%;">
<div class="itemLabel">
Commands:
Queue
</div>
<div class="itemContent">
<div class="itemContentWide" style="width: 90%;">
<div class="statusDisplay">
<div class="line" style="overflow-y: auto; overflow-x: hidden; scrollbar-base-color: #336699; scrollbar-arrow-color: #ffffff; height: 184px">
{{for data.queue}}
<div class="statusValue">
{{:helper.link(value.name, 'gear', null, null, null, 'misc')}}
{{:helper.link("Remove", 'circle-arrow-s', value.commands, null, 'fixedLeftWide')}}
</div>
{{empty}}
<i>No parts in memory</i>
{{/for}}
</div>
<br>
<div class="line">
{{:helper.link('Process Queue', 'circle-arrow-s', {'process_queue':null}, null, null, 'misc')}}
{{:helper.link('Clear Queue', 'circle-arrow-s', {'clear_queue':null}, null, 'fixedLeftWide')}}
</div>
</div>
</div>
</div>
<div style="float: left; width: 37%;">
<div class="itemLabel" style="float: left; width: 117px;">
Commands
</div>
<div class="itemLabel" style="float: left; width: 17px;">
{{:helper.link('Sync', 'transferthick-e-w', {'sync':1}, null, 'fixedLeft')}}
</div>
<br>
</div>
<div class="item">&nbsp;</div>
<div class="item">
<div class="itemLabel">Type</div>
<div class="line">
<div class="itemContents">
<div class="line">
{{:helper.link('Main', 'gear',{'screen':1},(data.screen==1)?'linkOn':'', 'fixedLeft')}}
{{:helper.link('Queue', 'gear',{'screen':2},(data.screen==2)?'linkOn':'', 'fixedLeft')}}
<div style="float: left; width: 37%;">
<div class="itemLabel">
Type
</div>
<div class="line">&nbsp;</div>
<div class="line">
{{:helper.link('Pod Frame', 'gear',{'screen':3},(data.screen==3)?'linkOn':'', 'fixedLeft')}}
{{:helper.link('Pod Armor', 'gear',{'screen':4},(data.screen==4)?'linkOn':'', 'fixedLeft')}}
@@ -41,35 +58,24 @@ Used In File(s): \code\game\mecha\mech_fabricator.dm
<div class="line">
{{:helper.link('Pod Parts', 'gear',{'screen':5},(data.screen==5)?'linkOn':'', 'fixedLeft')}}
{{:helper.link('Pod Weapons', 'gear',{'screen':6},(data.screen==6)?'linkOn':'', 'fixedLeft')}}
</div>
<div class="line">
{{:helper.link('Misc', 'gear',{'screen':10},(data.screen==10)?'linkOn':'', 'fixedLeft')}}
</div>
</div>
</div>
<div class="item">&nbsp;</div>
{{if data.screen == 1}}
<div class="item">
<div class="itemLabel">
Information
</div>
<div class="line">
{{:helper.link('Materials', 'gear',{'screen':14},(data.screen==14)?'linkOn':'', 'fixedLeft')}}
{{:helper.link('Parts', 'gear', {'screen':15},(data.screen==15)?'linkOn':'', 'fixedLeft')}}
</div>
</div>
{{/if}}
</div>
{{if data.screen == 14}}
<div class="item">
<div class="itemLabel">
Information
</div>
<div class="line">
{{:helper.link('Materials', 'gear',{'screen':14},(data.screen==14)?'linkOn':'', 'fixedLeft')}}
{{:helper.link('Parts', 'gear', {'screen':15},(data.screen==15)?'linkOn':'', 'fixedLeft')}}
</div>
<h3>Material Storage</h3>
</div>
<div class="itemContentWide">
<div class="statusDisplay">
@@ -91,59 +97,13 @@ Used In File(s): \code\game\mecha\mech_fabricator.dm
</div>
{{/if}}
{{if data.screen == 15}}
<div class="item">
<div class="itemLabel">
Information
</div>
<div class="line">
{{:helper.link('Materials', 'gear',{'screen':14},(data.screen==14)?'linkOn':'', 'fixedLeft')}}
{{:helper.link('Parts', 'gear', {'screen':15},(data.screen==15)?'linkOn':'', 'fixedLeft')}}
</div>
</div>
<div class="itemContentWide">
<div class="statusDisplay">
<div class="line">
<i>No information is available</i>
</div>
</div>
</div>
</div>
{{/if}}
{{if data.screen == 2}}
<div class="item">
<div class="itemLabel">
Queue
</div>
<div class="itemContentWide">
<div class="statusDisplay">
<div class="line">
{{for data.queue}}
<div class="line">
<div class="statusValue">
{{:helper.link(value.name, 'gear', null, null, null, 'misc')}}
{{:helper.link("Remove", 'circle-arrow-s', value.commands, null, 'fixedLeftWide')}}
</div>
</div>
{{empty}}
<i>No parts in memory</i>
{{/for}}
</div>
<div class="item">&nbsp;</div>
<div class="line">
{{:helper.link('Process Queue', 'circle-arrow-s', {'process_queue':null}, null, null, 'misc')}}
{{:helper.link('Clear Queue', 'circle-arrow-s', {'clear_queue':null}, null, 'fixedLeftWide')}}
</div>
</div>
</div>
</div>
{{/if}}
{{if data.screen == 3}}
<div class="item">
<div class="itemLabel">
Pod Frame Parts
<h3>Pod Frame Parts</h3>
</div>
<div class="line">
{{:helper.link('Quick Pod', 'gear', {'queue_part_set':'Pod_Frame'}, null, 'fixedLeftWidest')}}
</div>
<div class="itemContentWide" style="width:100%;">
<div class="statusDisplay">
@@ -151,9 +111,8 @@ Used In File(s): \code\game\mecha\mech_fabricator.dm
{{for data.parts.Pod_Frame}}
<div class="line">
<div class="statusValue">
{{:helper.link(value.name, 'gear', null, null, 'fixedLeftWidest')}}
{{:helper.link(value.name, 'gear', value.command2, null, null, 'misc')}}
{{:helper.link(value.cost, null, null, null, null, 'cost')}}
{{:helper.link('Build', 'gear', value.command2, null, 'fixedLeft')}}
{{:helper.link('Queue', 'gear', value.command1, null, 'fixedLeft')}}
</div>
</div>
@@ -169,7 +128,7 @@ Used In File(s): \code\game\mecha\mech_fabricator.dm
{{if data.screen == 4}}
<div class="item">
<div class="itemLabel">
Pod Armor
<h3>Pod Armor</h3>
</div>
<div class="itemContentWide" style="width:100%;">
<div class="statusDisplay">
@@ -177,9 +136,8 @@ Used In File(s): \code\game\mecha\mech_fabricator.dm
{{for data.parts.Pod_Armor}}
<div class="line">
<div class="statusValue">
{{:helper.link(value.name, 'gear', null, null, 'fixedLeftWide')}}
{{:helper.link(value.name, 'gear', value.command2, null, null, 'misc')}}
{{:helper.link(value.cost, null, null, null, null, 'cost')}}
{{:helper.link('Build', 'gear', value.command2, null, 'fixedLeft')}}
{{:helper.link('Queue', 'gear', value.command1, null, 'fixedLeft')}}
</div>
</div>
@@ -195,7 +153,7 @@ Used In File(s): \code\game\mecha\mech_fabricator.dm
{{if data.screen == 5}}
<div class="item">
<div class="itemLabel">
Pod Components
<h3>Pod Components</h3>
</div>
<div class="itemContentWide" style="width:100%;">
<div class="statusDisplay">
@@ -203,9 +161,8 @@ Used In File(s): \code\game\mecha\mech_fabricator.dm
{{for data.parts.Pod_Parts}}
<div class="line">
<div class="statusValue">
{{:helper.link(value.name, 'gear', null, null, 'fixedLeftWide')}}
{{:helper.link(value.name, 'gear', value.command2, null, null, 'misc')}}
{{:helper.link(value.cost, null, null, null, null, 'cost')}}
{{:helper.link('Build', 'gear', value.command2, null, 'fixedLeft')}}
{{:helper.link('Queue', 'gear', value.command1, null, 'fixedLeft')}}
</div>
</div>
@@ -221,7 +178,7 @@ Used In File(s): \code\game\mecha\mech_fabricator.dm
{{if data.screen == 6}}
<div class="item">
<div class="itemLabel">
Pod Weaponry
<h3>Pod Weaponry</h3>
</div>
<div class="itemContentWide" style="width:100%;">
<div class="statusDisplay">
@@ -229,9 +186,8 @@ Used In File(s): \code\game\mecha\mech_fabricator.dm
{{for data.parts.Pod_Weaponry}}
<div class="line">
<div class="statusValue">
{{:helper.link(value.name, 'gear', null, null, 'fixedLeftWide')}}
{{:helper.link(value.name, 'gear', value.command2, null, null, 'misc')}}
{{:helper.link(value.cost, null, null, null, null, 'cost')}}
{{:helper.link('Build', 'gear', value.command2, null, 'fixedLeft')}}
{{:helper.link('Queue', 'gear', value.command1, null, 'fixedLeft')}}
</div>
</div>
@@ -256,9 +212,8 @@ Used In File(s): \code\game\mecha\mech_fabricator.dm
{{for data.parts.Misc}}
<div class="line">
<div class="statusValue">
{{:helper.link(value.name, 'gear', null, null, null, 'misc')}}
{{:helper.link(value.name, 'gear', value.command2, null, null, 'misc')}}
{{:helper.link(value.cost, null, null, null, null, 'cost')}}
{{:helper.link('Build', 'gear', value.command2, null, 'fixedLeft')}}
{{:helper.link('Queue', 'gear', value.command1, null, 'fixedLeft')}}
</div>
</div>