From 8104a69a512f83571aea14c9e6814aabe0e33712 Mon Sep 17 00:00:00 2001 From: IK3I Date: Sat, 7 May 2016 03:19:27 -0500 Subject: [PATCH 01/11] Moves pod code to modules where it belongs. --- .../vehicles => modules}/spacepods/construction.dm | 0 code/{game/vehicles => modules}/spacepods/equipment.dm | 0 code/{game/vehicles => modules}/spacepods/parts.dm | 0 .../vehicles => modules}/spacepods/pod_fabricator.dm | 0 code/{game/vehicles => modules}/spacepods/spacepod.dm | 0 paradise.dme | 10 +++++----- 6 files changed, 5 insertions(+), 5 deletions(-) rename code/{game/vehicles => modules}/spacepods/construction.dm (100%) rename code/{game/vehicles => modules}/spacepods/equipment.dm (100%) rename code/{game/vehicles => modules}/spacepods/parts.dm (100%) rename code/{game/vehicles => modules}/spacepods/pod_fabricator.dm (100%) rename code/{game/vehicles => modules}/spacepods/spacepod.dm (100%) diff --git a/code/game/vehicles/spacepods/construction.dm b/code/modules/spacepods/construction.dm similarity index 100% rename from code/game/vehicles/spacepods/construction.dm rename to code/modules/spacepods/construction.dm diff --git a/code/game/vehicles/spacepods/equipment.dm b/code/modules/spacepods/equipment.dm similarity index 100% rename from code/game/vehicles/spacepods/equipment.dm rename to code/modules/spacepods/equipment.dm diff --git a/code/game/vehicles/spacepods/parts.dm b/code/modules/spacepods/parts.dm similarity index 100% rename from code/game/vehicles/spacepods/parts.dm rename to code/modules/spacepods/parts.dm diff --git a/code/game/vehicles/spacepods/pod_fabricator.dm b/code/modules/spacepods/pod_fabricator.dm similarity index 100% rename from code/game/vehicles/spacepods/pod_fabricator.dm rename to code/modules/spacepods/pod_fabricator.dm diff --git a/code/game/vehicles/spacepods/spacepod.dm b/code/modules/spacepods/spacepod.dm similarity index 100% rename from code/game/vehicles/spacepods/spacepod.dm rename to code/modules/spacepods/spacepod.dm diff --git a/paradise.dme b/paradise.dme index 6e79b17f2d0..b609a2fc55f 100644 --- a/paradise.dme +++ b/paradise.dme @@ -977,11 +977,6 @@ #include "code\game\turfs\unsimulated\beach.dm" #include "code\game\turfs\unsimulated\floor.dm" #include "code\game\turfs\unsimulated\walls.dm" -#include "code\game\vehicles\spacepods\construction.dm" -#include "code\game\vehicles\spacepods\equipment.dm" -#include "code\game\vehicles\spacepods\parts.dm" -#include "code\game\vehicles\spacepods\pod_fabricator.dm" -#include "code\game\vehicles\spacepods\spacepod.dm" #include "code\game\verbs\ooc.dm" #include "code\game\verbs\suicide.dm" #include "code\game\verbs\who.dm" @@ -1970,6 +1965,11 @@ #include "code\modules\shuttle\supply.dm" #include "code\modules\shuttle\syndicate.dm" #include "code\modules\space_transition\space_transition.dm" +#include "code\modules\spacepods\construction.dm" +#include "code\modules\spacepods\equipment.dm" +#include "code\modules\spacepods\parts.dm" +#include "code\modules\spacepods\pod_fabricator.dm" +#include "code\modules\spacepods\spacepod.dm" #include "code\modules\store\items.dm" #include "code\modules\store\store.dm" #include "code\modules\surgery\bones.dm" From 6d8c7f67772d1200d9e00a8136d3e40c8e7ab405 Mon Sep 17 00:00:00 2001 From: IK3I Date: Sat, 7 May 2016 15:56:59 -0500 Subject: [PATCH 02/11] Cleans references to Occupant2 Prepares for list based occupancy --- code/modules/spacepods/spacepod.dm | 136 +++++------------------------ 1 file changed, 23 insertions(+), 113 deletions(-) diff --git a/code/modules/spacepods/spacepod.dm b/code/modules/spacepods/spacepod.dm index 707b8912460..01f9a82ae39 100644 --- a/code/modules/spacepods/spacepod.dm +++ b/code/modules/spacepods/spacepod.dm @@ -15,7 +15,6 @@ infra_luminosity = 15 var/mob/living/carbon/occupant - var/mob/living/carbon/occupant2 //two seaters var/datum/spacepod/equipment/equipment_system @@ -94,9 +93,6 @@ if(occupant) occupant.forceMove(get_turf(src)) occupant = null - if(occupant2) - occupant2.forceMove(get_turf(src)) - occupant2 = null spacepods_list -= src return ..() @@ -161,28 +157,19 @@ S.channel = 0 //Any channel S.volume = 50 to_chat(occupant, S) - if(occupant2) - to_chat(occupant2, S) if(occupant && oldhealth > health && !health) var/sound/S = sound('sound/effects/engine_alert1.ogg') S.wait = 0 S.channel = 0 S.volume = 50 to_chat(occupant, S) - if(occupant2) - to_chat(occupant2, S) if(!health) spawn(0) if(occupant) to_chat(occupant, "Critical damage to the vessel detected, core explosion imminent!") - if(occupant2) - to_chat(occupant2, "Critical damage to the vessel detected, core explosion imminent!") - for(var/i = 10, i >= 0; --i) if(occupant) to_chat(occupant, "[i]") - if(occupant2) - to_chat(occupant2, "[i]") if(i == 0) explosion(loc, 2, 4, 8) qdel(src) @@ -201,15 +188,10 @@ switch(severity) if(1) var/mob/living/carbon/human/H = occupant - var/mob/living/carbon/human/H2 = occupant2 if(H) H.forceMove(get_turf(src)) H.ex_act(severity + 1) to_chat(H, "You are forcefully thrown from \the [src]!") - if(H2) - H2.forceMove(get_turf(src)) - H2.ex_act(severity + 1) - to_chat(H2, "You are forcefully thrown from \the [src]!") qdel(ion_trail) qdel(src) if(2) @@ -224,8 +206,6 @@ if(1) if(occupant) to_chat(occupant, "The pod console flashes 'Heavy EMP WAVE DETECTED'.")//warn the occupants - if(occupant2) - to_chat(occupant2, "The pod console flashes 'Heavy EMP WAVE DETECTED'.")//warn the occupants if(battery) @@ -238,8 +218,6 @@ if(2) if(occupant) to_chat(occupant, "The pod console flashes 'EMP WAVE DETECTED'.")//warn the occupants - if(occupant2) - to_chat(occupant2, "The pod console flashes 'EMP WAVE DETECTED'.")//warn the occupants deal_damage(40) if(battery) @@ -544,6 +522,7 @@ . = t_air.return_temperature() return +/* Save for cargo refactor /obj/spacepod/proc/moved_other_inside(var/mob/living/carbon/human/H as mob) occupant_sanity_check() if(!occupant2) @@ -553,6 +532,7 @@ H.forceMove(src) playsound(src, 'sound/machines/windowdoor.ogg', 50, 1) return 1 +*/ /obj/spacepod/MouseDrop_T(atom/A, mob/user) if(istype(A,/mob)) @@ -562,6 +542,7 @@ occupant_sanity_check() +/* save for cargo refactor if(M != user && M.stat == DEAD && allow2enter) if(occupant2 && !occupant) to_chat(usr, "You can't put a corpse into the driver's seat!") @@ -570,6 +551,7 @@ visible_message("[user.name] starts loading [M.name] into the pod!") sleep(10) moved_other_inside(M) +*/ if(M == user) if(!equipment_system.lock_system || allow2enter) @@ -645,24 +627,10 @@ to_chat(user, "[occupant] was faster. Try better next time, loser.") else to_chat(user, "You stop entering \the [src].") - - else if(!occupant2) - visible_message("[user] starts to climb into \the [src].") - if(do_after(user, 40, target = src)) - if(!occupant2) - user.stop_pulling() - occupant2 = user - user.forceMove(src) - add_fingerprint(user) - playsound(src, 'sound/machines/windowdoor.ogg', 50, 1) - else - to_chat(user, "[occupant] was faster. Try better next time, loser.") - else - to_chat(user, "You stop entering \the [src].") else to_chat(user, "You can't fit in \the [src], it's full!") -/obj/spacepod/proc/occupant_sanity_check() +/obj/spacepod/proc/occupant_sanity_check() // going to have to adjust this later for cargo refactor if(occupant) if(!ismob(occupant)) occupant.forceMove(get_turf(src)) @@ -671,14 +639,6 @@ else if(occupant.loc != src) log_debug("##SPACEPOD WARNING: OCCUPANT [occupant] ESCAPED, TURF [get_turf(src)] | AREA [get_area(src)] | COORDS [x], [y], [z]") occupant = null - if(occupant2) - if(!ismob(occupant2)) - occupant2.forceMove(get_turf(src)) - log_debug("##SPACEPOD WARNING: NON-MOB OCCUPANT [occupant2], TURF [get_turf(src)] | AREA [get_area(src)] | COORDS [x], [y], [z]") - occupant2 = null - else if(occupant2.loc != src) - log_debug("##SPACEPOD WARNING: OCCUPANT [occupant2] ESCAPED, TURF [get_turf(src)] | AREA [get_area(src)] | COORDS [x], [y], [z]") - occupant2 = null /obj/spacepod/verb/exit_pod() set name = "Exit pod" @@ -693,55 +653,19 @@ occupant_sanity_check() if(occupant == user) spos = 1 - if(occupant2 == user) spos = 2 switch(spos) if(0) return if(1) - if(occupant2) - to_chat(occupant2, "[occupant.name] climbs out of the pod!") occupant.forceMove(src.loc) occupant = null to_chat(user, "You climb out of \the [src].") - if(2) - if(occupant) - to_chat(occupant, "[occupant2.name] climbs out of the pod!") - occupant2.forceMove(src.loc) - occupant2 = null - to_chat(user, "You climb out of \the [src].") - -/obj/spacepod/verb/exit_pod2() - set name = "Eject Secondary Seat" - set category = "Spacepod" - set src = usr.loc - - occupant_sanity_check() - - if(!occupant2) - to_chat(usr, "There is no one in the second seat.") - return - - if(usr == occupant2) - to_chat(usr, "How do you plan to do that? The eject button is out of reach.") - return - - if(usr == occupant) - to_chat(usr, "You eject [occupant2.name].") - to_chat(occupant2, "\The [src] ejects you forcefully!") - inertia_dir = 0 - occupant2.forceMove(src.loc) - occupant2 = null /obj/spacepod/verb/locksecondseat() set name = "Lock Doors" set category = "Spacepod" set src = usr.loc - if(CheckIfOccupant2(usr)) - if(!allow2enter) - to_chat(usr, "You can't [allow2enter ? "lock" : "unlock"] the doors from your seat.") - return - allow2enter = !allow2enter to_chat(usr, "You [allow2enter ? "unlock" : "lock"] the doors.") @@ -751,7 +675,6 @@ set category = "Spacepod" set src = usr.loc - if(CheckIfOccupant2(usr)) return for(var/obj/machinery/door/poddoor/multi_tile/P in orange(3,src)) var/mob/living/carbon/human/L = usr if(P.check_access(L.get_active_hand()) || P.check_access(L.wear_id)) @@ -769,33 +692,30 @@ /obj/spacepod/verb/fireWeapon() - if(!CheckIfOccupant2(usr)) - set name = "Fire Pod Weapons" - set desc = "Fire the weapons." - set category = "Spacepod" - set src = usr.loc - if(!equipment_system.weapon_system) - to_chat(usr, "\The [src] has no weapons!") - return - equipment_system.weapon_system.fire_weapons() + set name = "Fire Pod Weapons" + set desc = "Fire the weapons." + set category = "Spacepod" + set src = usr.loc + if(!equipment_system.weapon_system) + to_chat(usr, "\The [src] has no weapons!") + return + equipment_system.weapon_system.fire_weapons() /obj/spacepod/verb/unload() - if(!CheckIfOccupant2(usr)) - set name = "Unload Cargo" - set desc = "Unloads the cargo" - set category = "Spacepod" - set src = usr.loc - if(!equipment_system.cargo_system) - to_chat(usr, "\The [src] has no cargo system!") - return - equipment_system.cargo_system.unload() + set name = "Unload Cargo" + set desc = "Unloads the cargo" + set category = "Spacepod" + set src = usr.loc + if(!equipment_system.cargo_system) + to_chat(usr, "\The [src] has no cargo system!") + return + equipment_system.cargo_system.unload() /obj/spacepod/verb/toggleLights() set name = "Toggle Lights" set category = "Spacepod" set src = usr.loc - if(!CheckIfOccupant2(usr)) - lightsToggle() + lightsToggle() /obj/spacepod/proc/lightsToggle() lights = !lights @@ -861,8 +781,7 @@ return /obj/spacepod/relaymove(mob/user, direction) - if(!CheckIfOccupant2(user)) - handlerelaymove(user, direction) + handlerelaymove(user, direction) /obj/spacepod/proc/handlerelaymove(mob/user, direction) if(world.time < next_move) @@ -909,15 +828,6 @@ battery.charge = max(0, battery.charge - 1) next_move = world.time + move_delay -/obj/spacepod/proc/CheckIfOccupant2(mob/user) - if(!src.occupant2) - return 0 - if(src.occupant2) - if(user == src.occupant2) - return 1 - else - return 0 - /obj/effect/landmark/spacepod/random name = "spacepod spawner" invisibility = 101 From f63328262fab6de9e784e66cb51d325810224506 Mon Sep 17 00:00:00 2001 From: IK3I Date: Sun, 8 May 2016 04:24:48 -0500 Subject: [PATCH 03/11] Completes Stage One of Occupant Refactor Occupants are now members of a list with a maximum size and a special associative tag for pilots. Gating the verbs and testing is still needed. --- .../computer/pod_tracking_console.dm | 24 ++-- code/game/machinery/portable_turret.dm | 2 +- code/game/machinery/turrets.dm | 22 ++-- .../living/simple_animal/hostile/hostile.dm | 7 +- .../hostile/retaliate/retaliate.dm | 6 +- .../mob/living/simple_animal/simple_animal.dm | 2 +- code/modules/spacepods/spacepod.dm | 115 +++++++++++------- 7 files changed, 101 insertions(+), 77 deletions(-) diff --git a/code/game/machinery/computer/pod_tracking_console.dm b/code/game/machinery/computer/pod_tracking_console.dm index 5ac31a0f567..e759cc0357f 100644 --- a/code/game/machinery/computer/pod_tracking_console.dm +++ b/code/game/machinery/computer/pod_tracking_console.dm @@ -17,17 +17,21 @@ var/data[0] var/list/pods[0] for(var/obj/item/device/spacepod_equipment/misc/tracker/TR in world) - var/obj/spacepod/myPod = TR.my_atom + var/obj/spacepod/my_pod = TR.my_atom var/enabled = TR.enabled - if(myPod && enabled) - var/podname = capitalize(sanitize(myPod.name)) - var/occupant = "None" - var/occupant2 = "None" - if(myPod.occupant) - occupant = myPod.occupant.name - if(myPod.occupant2) - occupant2 = myPod.occupant2.name - pods.Add(list(list("pod" = "\ref[myPod]", "name" = podname, "occupant" = occupant, "occupant2" = occupant2, "x" = myPod.x, "y" = myPod.y, "z" = myPod.z))) + if(my_pod && enabled) + var/podname = capitalize(sanitize(my_pod.name)) + var/list/chairs = list() + if(my_pod.occupants) + var/mob/pilot = my_pod.occupants[PILOT] + if(my_pod.occupants[PILOT]) + chairs += list("pilot" = pilot.name) + for(var/mob/M in my_pod.occupants) + if(M == pilot) + continue + chairs += list("passenger" = M.name) + + pods.Add(list(list("pod" = "\ref[my_pod]", "name" = podname) + chairs + list("x" = my_pod.x, "y" = my_pod.y, "z" = my_pod.z))) data["pods"] = pods diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm index f916998e26b..c5cd700abaf 100644 --- a/code/game/machinery/portable_turret.dm +++ b/code/game/machinery/portable_turret.dm @@ -519,7 +519,7 @@ var/list/turret_icons assess_and_assign(ME.occupant, targets, secondarytargets) for(var/obj/spacepod/SP in view(7,src)) - assess_and_assign(SP.occupant, targets, secondarytargets) + assess_and_assign(SP.occupants[PILOT], targets, secondarytargets) for(var/obj/vehicle/T in view(7,src)) assess_and_assign(T.buckled_mob, targets, secondarytargets) diff --git a/code/game/machinery/turrets.dm b/code/game/machinery/turrets.dm index b1d92718104..022e0d2765e 100644 --- a/code/game/machinery/turrets.dm +++ b/code/game/machinery/turrets.dm @@ -21,7 +21,7 @@ turretTargets |= Mech else if( istype(O, /obj/spacepod) ) var/obj/spacepod/Pod = O - if( Pod.occupant || Pod.occupant2 ) + if( Pod.occupants ) turretTargets |= Pod else if(istype(O,/mob/living/simple_animal)) turretTargets |= O @@ -139,7 +139,7 @@ return 1 else if( istype(T, /obj/spacepod) ) var/obj/spacepod/SP = T - if( SP.occupant || SP.occupant2 ) + if( SP.occupants ) return 1 else if(istype(T,/mob/living/simple_animal)) var/mob/living/simple_animal/A = T @@ -159,8 +159,8 @@ if(M.occupant) new_targets += M for(var/obj/spacepod/M in protected_area.turretTargets) - if(M.occupant) - new_targets += M + if(M.occupants[PILOT]) + new_targets += M.occupants[PILOT] for(var/mob/living/simple_animal/M in protected_area.turretTargets) if(!M.stat) new_targets += M @@ -488,7 +488,7 @@ return 1 else if(istype(target, /obj/spacepod)) var/obj/spacepod/S = target - if(S.occupant || S.occupant2) + if(S.occupants) return 1 return 0 @@ -522,14 +522,12 @@ continue //Don't shoot at empty mechs. pos_targets += M for(var/obj/spacepod/M in oview(scan_range, src)) - if(M.occupant) - if(faction in M.occupant.faction) + if(M.occupants[PILOT]) + var/mob/P = M.occupants[PILOT] + if(faction in P.faction) continue - if(M.occupant2) - if(faction in M.occupant2.faction) - continue - if(!M.occupant && !M.occupant2) - continue //Don't shoot at empty mechs. + if(!M.occupants) + continue //Don't shoot at empty pods. pos_targets += M if(pos_targets.len) target = pick(pos_targets) diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index 757b72f3809..81a0828df14 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -118,9 +118,10 @@ return 1 if(istype(the_target, /obj/spacepod)) var/obj/spacepod/S = the_target - if(S.occupant || S.occupant2)//Just so we don't attack empty mechs - if(CanAttack(S.occupant) || CanAttack(S.occupant2)) - return 1 + if(S.occupants) //Just so we don't attack empty pods + for(var/mob/M in S.occupants) + if(CanAttack(M)) + return 1 if(isliving(the_target)) var/mob/living/L = the_target var/faction_check = 0 diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm index b9f04ec68ee..e6d373d7504 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm @@ -14,7 +14,7 @@ return A else if(istype(A, /obj/spacepod)) var/obj/spacepod/M = A - if(M.occupant || M.occupant2) + if(M.occupants) return A /mob/living/simple_animal/hostile/retaliate/ListTargets() @@ -47,9 +47,9 @@ enemies |= M.occupant else if(istype(A, /obj/spacepod)) var/obj/spacepod/M = A - if(M.occupant || M.occupant2) + if(M.occupants[PILOT]) enemies |= M - enemies |= M.occupant + enemies |= M.occupants[PILOT] for(var/mob/living/simple_animal/hostile/retaliate/H in around) var/retaliate_faction_check = 0 diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 23477c2fc18..09c82dbf1b2 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -529,7 +529,7 @@ return 0 if (istype(the_target,/obj/spacepod)) var/obj/spacepod/S = the_target - if (S.occupant || S.occupant2) + if (S.occupants) return 0 return 1 diff --git a/code/modules/spacepods/spacepod.dm b/code/modules/spacepods/spacepod.dm index 01f9a82ae39..512a8ff0d38 100644 --- a/code/modules/spacepods/spacepod.dm +++ b/code/modules/spacepods/spacepod.dm @@ -1,5 +1,6 @@ #define DAMAGE 1 #define FIRE 2 +#define PILOT "pilot" /obj/spacepod name = "\improper space pod" @@ -14,7 +15,8 @@ layer = 3.9 infra_luminosity = 15 - var/mob/living/carbon/occupant + var/list/mob/occupants = list() //uses [PILOT] index for pilot and numerics for passangers + var/max_occupants = 1 var/datum/spacepod/equipment/equipment_system @@ -90,9 +92,10 @@ qdel(ion_trail) ion_trail = null occupant_sanity_check() - if(occupant) - occupant.forceMove(get_turf(src)) - occupant = null + if(occupants) + for(var/mob/M in occupants) + M.forceMove(get_turf(src)) + occupants -= M spacepods_list -= src return ..() @@ -151,25 +154,29 @@ health = max(0, health - damage) var/percentage = (health / initial(health)) * 100 occupant_sanity_check() - if(occupant && oldhealth > health && percentage <= 25 && percentage > 0) + if(occupants && oldhealth > health && percentage <= 25 && percentage > 0) var/sound/S = sound('sound/effects/engine_alert2.ogg') S.wait = 0 //No queue S.channel = 0 //Any channel S.volume = 50 - to_chat(occupant, S) - if(occupant && oldhealth > health && !health) + for(var/mob/M in occupants) + to_chat(M, S) + if(occupants && oldhealth > health && !health) var/sound/S = sound('sound/effects/engine_alert1.ogg') S.wait = 0 S.channel = 0 S.volume = 50 - to_chat(occupant, S) + for(var/mob/M in occupants) + to_chat(M, S) if(!health) spawn(0) - if(occupant) - to_chat(occupant, "Critical damage to the vessel detected, core explosion imminent!") + if(occupants) + for(var/mob/M in occupants) + to_chat(M, "Critical damage to the vessel detected, core explosion imminent!") for(var/i = 10, i >= 0; --i) - if(occupant) - to_chat(occupant, "[i]") + if(occupants) + for(var/mob/M in occupants) + to_chat(M, "[i]") if(i == 0) explosion(loc, 2, 4, 8) qdel(src) @@ -187,11 +194,12 @@ occupant_sanity_check() switch(severity) if(1) - var/mob/living/carbon/human/H = occupant - if(H) - H.forceMove(get_turf(src)) - H.ex_act(severity + 1) - to_chat(H, "You are forcefully thrown from \the [src]!") + for(var/mob/M in occupants) + var/mob/living/carbon/human/H = M + if(H) + H.forceMove(get_turf(src)) + H.ex_act(severity + 1) + to_chat(H, "You are forcefully thrown from \the [src]!") qdel(ion_trail) qdel(src) if(2) @@ -204,8 +212,9 @@ occupant_sanity_check() switch(severity) if(1) - if(occupant) - to_chat(occupant, "The pod console flashes 'Heavy EMP WAVE DETECTED'.")//warn the occupants + if(occupants) + for(var/mob/M in occupants) + to_chat(M, "The pod console flashes 'Heavy EMP WAVE DETECTED'.")//warn the occupants if(battery) @@ -216,8 +225,9 @@ processing_objects.Add(src) if(2) - if(occupant) - to_chat(occupant, "The pod console flashes 'EMP WAVE DETECTED'.")//warn the occupants + if(occupants) + for(var/mob/M in occupants) + to_chat(M, "The pod console flashes 'EMP WAVE DETECTED'.")//warn the occupants deal_damage(40) if(battery) @@ -301,7 +311,7 @@ if(istype(W, /obj/item/device/spacepod_key) && istype(equipment_system.lock_system, /obj/item/device/spacepod_equipment/lock/keyed)) var/obj/item/device/spacepod_key/key = W if (key.id == equipment_system.lock_system.id) - locksecondseat() + lock_pod() else to_chat(user, "This is the wrong key!") return @@ -464,10 +474,11 @@ set category = "Spacepod" set src = usr.loc set popup_menu = 0 - if(usr!=src.occupant) + if(usr != src.occupants[PILOT]) return use_internal_tank = !use_internal_tank - to_chat(occupant, "Now taking air from [use_internal_tank?"internal airtank":"environment"].") + for(var/mob/M in occupants) + to_chat(M, "Now taking air from [use_internal_tank?"internal airtank":"environment"].") return /obj/spacepod/proc/add_cabin() @@ -614,31 +625,44 @@ occupant_sanity_check() - if(!occupant) + if(occupants.len < max_occupants) visible_message("[user] starts to climb into \the [src].") if(do_after(user, 40, target = src)) - if(!occupant) + if(occupants.len < max_occupants) user.stop_pulling() - occupant = user + if(!occupants[PILOT]) + occupants[PILOT] = user + else + occupants += user user.forceMove(src) add_fingerprint(user) playsound(src, 'sound/machines/windowdoor.ogg', 50, 1) else - to_chat(user, "[occupant] was faster. Try better next time, loser.") + to_chat(user, "You were too slow. Try better next time, loser.") else to_chat(user, "You stop entering \the [src].") else to_chat(user, "You can't fit in \the [src], it's full!") /obj/spacepod/proc/occupant_sanity_check() // going to have to adjust this later for cargo refactor - if(occupant) - if(!ismob(occupant)) - occupant.forceMove(get_turf(src)) - log_debug("##SPACEPOD WARNING: NON-MOB OCCUPANT [occupant], TURF [get_turf(src)] | AREA [get_area(src)] | COORDS [x], [y], [z]") - occupant = null - else if(occupant.loc != src) - log_debug("##SPACEPOD WARNING: OCCUPANT [occupant] ESCAPED, TURF [get_turf(src)] | AREA [get_area(src)] | COORDS [x], [y], [z]") - occupant = null + if(occupants) + if(occupants.len == max_occupants && !occupants[PILOT]) + occupants[PILOT] = occupants[1] + log_debug("##SPACEPOD WARNING: IMPOSSIBLE SEATING ARRANGEMENT: OCCUPANTS [english_list(occupants)], TURF [get_turf(src)] | AREA [get_area(src)] | COORDS [x], [y], [z]") + if(occupants.len > max_occupants) + for(var/i = occupants.len; i <= max_occupants; i--) + var/mob/occupant = occupants[i - 1] + occupant.forceMove(get_turf(src)) + log_debug("##SPACEPOD WARNING: OCCUPANTS EXCEED CAP: MAX OCCUPANTS [max_occupants], OCCUPANTS [english_list(occupants)], TURF [get_turf(src)] | AREA [get_area(src)] | COORDS [x], [y], [z]") + occupants[i - 1] = null + for(var/mob/M in occupants) + if(!ismob(M)) + M.forceMove(get_turf(src)) + log_debug("##SPACEPOD WARNING: NON-MOB OCCUPANT [M], TURF [get_turf(src)] | AREA [get_area(src)] | COORDS [x], [y], [z]") + occupants -= M + else if(M.loc != src) + log_debug("##SPACEPOD WARNING: OCCUPANT [M] ESCAPED, TURF [get_turf(src)] | AREA [get_area(src)] | COORDS [x], [y], [z]") + occupants -= M /obj/spacepod/verb/exit_pod() set name = "Exit pod" @@ -646,22 +670,18 @@ set src = usr.loc var/mob/user = usr - var/spos = 0 if(!istype(user)) return occupant_sanity_check() - if(occupant == user) spos = 1 - - switch(spos) - if(0) return - if(1) - occupant.forceMove(src.loc) - occupant = null + for(var/mob/M in occupants) + if(M == user) + M.forceMove(src.loc) + occupants -= M to_chat(user, "You climb out of \the [src].") -/obj/spacepod/verb/locksecondseat() +/obj/spacepod/verb/lock_pod() set name = "Lock Doors" set category = "Spacepod" set src = usr.loc @@ -723,7 +743,8 @@ set_light(lights_power) else set_light(0) - to_chat(occupant, "Toggled lights [lights ? "on" : "off"].") + for(var/mob/M in occupants) + to_chat(M, "Lights toggled [lights ? "on" : "off"].") return /obj/spacepod/proc/enter_after(delay as num, var/mob/user as mob, var/numticks = 5) @@ -839,4 +860,4 @@ ..() #undef DAMAGE -#undef FIRE +#undef FIRE \ No newline at end of file From f0520a2ed4dd7d9a826412b74869713561fa0599 Mon Sep 17 00:00:00 2001 From: IK3I Date: Sun, 8 May 2016 18:37:27 -0500 Subject: [PATCH 04/11] The first playable version of the Refactor Pods are single seat because nothing is in to expand max_occupants yet. Everything else works as intended however and there don't appear to be any runtimes in my testing. --- code/modules/spacepods/spacepod.dm | 52 +++++++++++++++++++++++------- 1 file changed, 40 insertions(+), 12 deletions(-) diff --git a/code/modules/spacepods/spacepod.dm b/code/modules/spacepods/spacepod.dm index 512a8ff0d38..36e9305258a 100644 --- a/code/modules/spacepods/spacepod.dm +++ b/code/modules/spacepods/spacepod.dm @@ -48,7 +48,7 @@ "pod_black" = "#3B8FE5", \ "pod_industrial" = "#CCCC00") - var/allow2enter = 1 + var/unlocked = 1 var/move_delay = 2 var/next_move = 0 @@ -238,7 +238,7 @@ /obj/spacepod/attackby(obj/item/W as obj, mob/user as mob, params) if(iscrowbar(W)) - if(!equipment_system.lock_system || allow2enter || hatch_open) + if(!equipment_system.lock_system || unlocked || hatch_open) hatch_open = !hatch_open playsound(loc, 'sound/items/Crowbar.ogg', 50, 1) to_chat(user, "You [hatch_open ? "open" : "close"] the maintenance hatch.") @@ -475,6 +475,7 @@ set src = usr.loc set popup_menu = 0 if(usr != src.occupants[PILOT]) + to_chat(usr, "You can't put a corpse into the driver's seat!") return 0 @@ -565,7 +566,7 @@ */ if(M == user) - if(!equipment_system.lock_system || allow2enter) + if(!equipment_system.lock_system || unlocked) enter_pod(user) else to_chat(user, "\The [src]'s doors are locked!") @@ -647,7 +648,9 @@ /obj/spacepod/proc/occupant_sanity_check() // going to have to adjust this later for cargo refactor if(occupants) if(occupants.len == max_occupants && !occupants[PILOT]) - occupants[PILOT] = occupants[1] + var/occ = occupants[1] + occupants -= occ + occupants[PILOT] = occ log_debug("##SPACEPOD WARNING: IMPOSSIBLE SEATING ARRANGEMENT: OCCUPANTS [english_list(occupants)], TURF [get_turf(src)] | AREA [get_area(src)] | COORDS [x], [y], [z]") if(occupants.len > max_occupants) for(var/i = occupants.len; i <= max_occupants; i--) @@ -673,21 +676,31 @@ if(!istype(user)) return + if (usr.stat != CONSCIOUS) // unconscious people can't let themselves out + return + occupant_sanity_check() - for(var/mob/M in occupants) - if(M == user) - M.forceMove(src.loc) - occupants -= M - to_chat(user, "You climb out of \the [src].") + if(user in occupants) + user.forceMove(get_turf(src)) + occupants -= user + to_chat(user, "You climb out of \the [src].") + if(user == occupants[PILOT]) + user.forceMove(get_turf(src)) + occupants[PILOT] = null + to_chat(user, "You climb out of \the [src].") /obj/spacepod/verb/lock_pod() set name = "Lock Doors" set category = "Spacepod" set src = usr.loc - allow2enter = !allow2enter - to_chat(usr, "You [allow2enter ? "unlock" : "lock"] the doors.") + if(usr in occupants && usr != src.occupants[PILOT]) + to_chat(usr, "You [unlocked ? "unlock" : "lock"] the doors.") /obj/spacepod/verb/toggleDoors() @@ -695,6 +708,10 @@ set category = "Spacepod" set src = usr.loc + if(usr != src.occupants[PILOT]) + to_chat(usr, "\The [src] has no weapons!") return @@ -726,6 +746,9 @@ set desc = "Unloads the cargo" set category = "Spacepod" set src = usr.loc + if(usr != src.occupants[PILOT]) + to_chat(usr, "\The [src] has no cargo system!") return @@ -735,6 +758,9 @@ set name = "Toggle Lights" set category = "Spacepod" set src = usr.loc + if(usr != src.occupants[PILOT]) + to_chat(usr, " Date: Wed, 11 May 2016 18:20:04 -0500 Subject: [PATCH 05/11] Cargo and Occupant Refactor with some cleaning Various code optimizations and bug fixes New cargo systems to make storage useful and test with Secondary cargo system is now the slot that your chair or loot box can go in --- .../research/designs/spacepod_designs.dm | 48 +++- code/modules/spacepods/equipment.dm | 78 +++++- code/modules/spacepods/spacepod.dm | 242 ++++++++++-------- 3 files changed, 254 insertions(+), 114 deletions(-) diff --git a/code/modules/research/designs/spacepod_designs.dm b/code/modules/research/designs/spacepod_designs.dm index c1927e47654..2a57f8399f6 100644 --- a/code/modules/research/designs/spacepod_designs.dm +++ b/code/modules/research/designs/spacepod_designs.dm @@ -12,6 +12,7 @@ ////////////////////////////////////////////////// /////////SPACEPOD PARTS/////////////////////////// ////////////////////////////////////////////////// + /datum/design/podframe_fp construction_time = 200 name = "Fore port pod frame" @@ -89,6 +90,7 @@ ////////////////////////////////////////// //////SPACEPOD GUNS/////////////////////// ////////////////////////////////////////// + /datum/design/pod_gun_taser construction_time = 200 name = "Spacepod Equipment (Taser)" @@ -157,6 +159,7 @@ materials = list(MAT_METAL = 10000, MAT_GLASS = 5000, MAT_SILVER = 4000, MAT_GOLD = 4000, MAT_DIAMOND = 4000) build_path = /obj/item/device/spacepod_equipment/weaponry/mining_laser_hyper category = list("Pod_Weaponry") + ////////////////////////////////////////// //////SPACEPOD MISC. ITEMS//////////////// ////////////////////////////////////////// @@ -172,16 +175,57 @@ build_path = /obj/item/device/spacepod_equipment/misc/tracker category = list("Pod_Parts") +////////////////////////////////////////// +//////SPACEPOD CARGO ITEMS//////////////// +////////////////////////////////////////// + /datum/design/pod_cargo_ore construction_time = 100 name = "Spacepod Ore Storage Module" desc = "Allows for the construction of a Space Pod Ore Storage Module." id = "podcargo_ore" - req_tech = list("materials" = 3) + req_tech = list("materials" = 3, "engineering" = 2) build_type = PODFAB materials = list(MAT_METAL=20000, MAT_GLASS=2000) build_path = /obj/item/device/spacepod_equipment/cargo/ore - category = list("Pod_Parts") + category = list("Cargo Systems") + +/datum/design/pod_cargo_crate + construction_time = 100 + name = "Spacepod Crate Storage Module" + desc = "Allows the construction of a Space Pod Crate Storage Module." + id = "podcargo_crate" + req_tech = list("materials" = 4, "engineering" = 2) //hollowing out this much of the pod without compromising structural integrity is hard + build_type = PODFAB + materials = list(MAT_METAL=25000) + build_path = /obj/item/device/spacepod_equipment/cargo/crate + category = list("Cargo Systems") + +////////////////////////////////////////// +//////SPACEPOD SEC CARGO ITEMS//////////// +////////////////////////////////////////// + +/datum/design/passenger_seat + construction_time = 100 + name = "Spacepod Passenger Seat" + desc = "Allows the construction of a Space Pod Passenger Seat Module." + id = "podcargo_sec_seat" + req_tech = list("materials" = 1) // Because rule number one of refactoring + build_type = PODFAB + materials = list(MAT_METAL=7500, MAT_GLASS=2500) + build_path = /obj/item/device/spacepod_equipment/sec_cargo/chair + category = list("Secondary Cargo Systems") + +/datum/design/loot_box + construction_time = 100 + name = "Spacepod Loot Storage Module" + desc = "Allows the construction of a Space Pod Crate Storage Module." + id = "podcargo_sec_lootbox" + req_tech = list("materials" = 1) //it's just a set of shelves, It's not that hard to make + build_type = PODFAB + materials = list(MAT_METAL=7500, MAT_GLASS=2500) + build_path = /obj/item/device/spacepod_equipment/sec_cargo/loot_box + category = list("Secondary Cargo Systems") ////////////////////////////////////////// //////SPACEPOD LOCK ITEMS//////////////// diff --git a/code/modules/spacepods/equipment.dm b/code/modules/spacepods/equipment.dm index 91588fa0a8b..7ff052d1e6e 100644 --- a/code/modules/spacepods/equipment.dm +++ b/code/modules/spacepods/equipment.dm @@ -49,6 +49,7 @@ var/obj/item/device/spacepod_equipment/weaponry/weapon_system // weapons system var/obj/item/device/spacepod_equipment/misc/misc_system // misc system var/obj/item/device/spacepod_equipment/cargo/cargo_system // cargo system + var/obj/item/device/spacepod_equipment/cargo/sec_cargo_system // secondary cargo system var/obj/item/device/spacepod_equipment/lock/lock_system // lock system //var/obj/item/device/spacepod_equipment/engine/engine_system // engine system //var/obj/item/device/spacepod_equipment/shield/shield_system // shielding system @@ -61,11 +62,17 @@ /obj/item/device/spacepod_equipment name = "equipment" var/obj/spacepod/my_atom + var/occupant_mod = 0 // so any module can modify occupancy + var/list/storage_mod = list("slots" = 0, "w_class" = 0) // so any module can modify storage slots /obj/item/device/spacepod_equipment/proc/removed(var/mob/user) // So that you can unload cargo when you remove the module return -// base item for spacepod weapons +/* +/////////////////////////////////////// +/////////Weapon System/////////////////// +/////////////////////////////////////// +*/ /obj/item/device/spacepod_equipment/weaponry name = "pod weapon" @@ -135,7 +142,12 @@ fire_delay = 8 fire_sound = 'sound/weapons/Kenetic_accel.ogg' -//base item for spacepod misc equipment (tracker) +/* +/////////////////////////////////////// +/////////Misc. System/////////////////// +/////////////////////////////////////// +*/ + /obj/item/device/spacepod_equipment/misc name = "pod misc" desc = "You shouldn't be seeing this" @@ -160,6 +172,12 @@ else ..() +/* +/////////////////////////////////////// +/////////Cargo System////////////////// +/////////////////////////////////////// +*/ + /obj/item/device/spacepod_equipment/cargo name = "pod cargo" desc = "You shouldn't be seeing this" @@ -169,11 +187,13 @@ /obj/item/device/spacepod_equipment/cargo/proc/passover(var/obj/item/I) return -/obj/item/device/spacepod_equipment/cargo/proc/unload() +/obj/item/device/spacepod_equipment/cargo/proc/unload() // called by unload verb return + +// Ore System /obj/item/device/spacepod_equipment/cargo/ore - name = "\improper spacepod ore storage system" + name = "spacepod ore storage system" desc = "An ore storage system for spacepods. Scoops up any ore you drive over." icon_state = "cargo_ore" var/obj/structure/ore_box/box @@ -191,6 +211,56 @@ . = ..() unload() +// Crate System +/obj/item/device/spacepod_equipment/cargo/crate + name = "spacepod crate storage system" + desc = "A heavy duty storage system for spacepods. Holds one crate." + icon_state = "cargo_ore" + var/obj/structure/closet/crate/crate + +/obj/item/device/spacepod_equipment/cargo/crate/unload() + if(crate) + crate.forceMove(get_turf(my_atom)) + crate = null + +/obj/item/device/spacepod_equipment/cargo/crate/removed(var/mob/user) + . = ..() + unload() + +/* +/////////////////////////////////////// +/////////Secondary Cargo System//////// +/////////////////////////////////////// +*/ + +//Storage system and inventory is handled in cargo_hold.dm + +/obj/item/device/spacepod_equipment/sec_cargo + name = "secondary cargo" + desc = "you shouldn't be seeing this" + icon = 'icons/vehicles/spacepod.dmi' + icon_state = "blank" + +// Passenger Seat +/obj/item/device/spacepod_equipment/sec_cargo/chair + name = "passanger seat" + desc = "A passenger seat for a spacepod" + icon_state = "cargo_ore" + occupant_mod = 1 + +// Loot Box +/obj/item/device/spacepod_equipment/sec_cargo/loot_box + name = "loot box" + desc = "A small compartment to store valuables" + icon_state = "cargo_ore" + storage_mod = list("slots" = 7, "w_class" = 14) + +/* +/////////////////////////////////////// +/////////Lock System/////////////////// +/////////////////////////////////////// +*/ + /obj/item/device/spacepod_equipment/lock name = "pod lock" desc = "You shouldn't be seeing this" diff --git a/code/modules/spacepods/spacepod.dm b/code/modules/spacepods/spacepod.dm index 36e9305258a..4fe925ac085 100644 --- a/code/modules/spacepods/spacepod.dm +++ b/code/modules/spacepods/spacepod.dm @@ -17,6 +17,7 @@ var/list/mob/occupants = list() //uses [PILOT] index for pilot and numerics for passangers var/max_occupants = 1 + var/obj/item/weapon/storage/internal/cargo_hold var/datum/spacepod/equipment/equipment_system @@ -73,12 +74,19 @@ pr_give_air = new /datum/global_iterator/pod_tank_give_air(list(src)) equipment_system = new(src) spacepods_list += src + cargo_hold = new/obj/item/weapon/storage/internal(src) + cargo_hold.w_class = 5 //so you can put bags in + cargo_hold.storage_slots = 0 //You need to install cargo modules to use it. + cargo_hold.max_w_class = 5 //fit almost anything + cargo_hold.max_combined_w_class = 0 //you can optimize your stash with larger items /obj/spacepod/Destroy() if (equipment_system.cargo_system) equipment_system.cargo_system.removed(null) qdel(equipment_system) equipment_system = null + qdel(cargo_hold) + cargo_hold = null qdel(battery) battery = null qdel(cabin_air) @@ -210,6 +218,7 @@ /obj/spacepod/emp_act(severity) occupant_sanity_check() + cargo_hold.emp_act(severity) switch(severity) if(1) if(occupants) @@ -244,6 +253,7 @@ to_chat(user, "You [hatch_open ? "open" : "close"] the maintenance hatch.") else to_chat(user, "The hatch is locked shut!") + return if(istype(W, /obj/item/weapon/stock_parts/cell)) if(!hatch_open) to_chat(user, "\red The maintenance hatch is closed!") @@ -260,61 +270,32 @@ to_chat(user, "\red The maintenance hatch is closed!") return if(!equipment_system) - to_chat(user, "The pod has no equipment datum, yell at pomf") + to_chat(user, "The pod has no equipment datum, yell at IK3I") return if(istype(W, /obj/item/device/spacepod_equipment/weaponry)) - if(equipment_system.weapon_system) - to_chat(user, "The pod already has a weapon system, remove it first.") - return - else - to_chat(user, "You insert \the [W] into the equipment system.") - user.drop_item(W) - W.forceMove(src) - equipment_system.weapon_system = W - equipment_system.weapon_system.my_atom = src - return - + add_equipment(user, W, "weapon_system") + return if(istype(W, /obj/item/device/spacepod_equipment/misc)) - if(equipment_system.misc_system) - to_chat(user, "The pod already has a miscellaneous system, remove it first.") - return - else - to_chat(user, "You insert \the [W] into the equipment system.") - user.drop_item(W) - W.forceMove(src) - equipment_system.misc_system = W - equipment_system.misc_system.my_atom = src - return + add_equipment(user, W, "misc_system") + return if(istype(W, /obj/item/device/spacepod_equipment/cargo)) - if(equipment_system.cargo_system) - to_chat(user, "The pod already has a cargo system, remove it first.") - return - else - to_chat(user, "You insert \the [W] into the cargo system.") - user.drop_item(W) - W.forceMove(src) - equipment_system.cargo_system = W - equipment_system.cargo_system.my_atom = src - return + add_equipment(user, W, "cargo_system") + return + if(istype(W, /obj/item/device/spacepod_equipment/sec_cargo)) + add_equipment(user, W, "sec_cargo_system") + return if(istype(W, /obj/item/device/spacepod_equipment/lock)) - if(equipment_system.lock_system) - to_chat(user, "The pod already has a lock system, remove it first.") - return - else - to_chat(user, "You insert \the [W] into the lock system.") - user.drop_item(W) - W.forceMove(src) - equipment_system.lock_system = W - equipment_system.lock_system.my_atom = src - return + add_equipment(user, W, "lock_system") + return if(istype(W, /obj/item/device/spacepod_key) && istype(equipment_system.lock_system, /obj/item/device/spacepod_equipment/lock/keyed)) var/obj/item/device/spacepod_key/key = W if (key.id == equipment_system.lock_system.id) lock_pod() + return else to_chat(user, "This is the wrong key!") - return + return if(istype(W, /obj/item/weapon/weldingtool)) if(!hatch_open) @@ -331,12 +312,38 @@ if(!src || !WT.remove_fuel(3, user)) return repair_damage(10) to_chat(user, "\blue You mend some [pick("dents","bumps","damage")] with \the [WT]") + return else to_chat(user, "\blue \The [src] is fully repaired!") + return + if(cargo_hold.storage_slots > 0 && !hatch_open && unlocked) // must be the last option as all items not listed prior will be stored + cargo_hold.attackby(W, user, params) + return + +obj/spacepod/proc/add_equipment(mob/user, var/obj/item/device/spacepod_equipment/SPE, var/slot) + if(equipment_system.vars[slot]) + to_chat(user, "The pod already has a [slot], remove it first.") + return + else + to_chat(user, "You insert \the [SPE] into the pod.") + user.drop_item(SPE) + SPE.forceMove(src) + equipment_system.vars[slot] = SPE + var/obj/item/device/spacepod_equipment/system = equipment_system.vars[slot] + system.my_atom = src + max_occupants += SPE.occupant_mod + cargo_hold.storage_slots += SPE.storage_mod["slots"] + cargo_hold.max_combined_w_class += SPE.storage_mod["w_class"] + return /obj/spacepod/attack_hand(mob/user as mob) if(!hatch_open) + if(cargo_hold.storage_slots > 0) + if(unlocked) + cargo_hold.open(user) + else + to_chat(user, "The storage compartment is locked") return ..() if(!equipment_system || !istype(equipment_system)) to_chat(user, "The pod has no equpment datum, or is the wrong type, yell at pomf.") @@ -350,75 +357,83 @@ possible.Add("Misc. System") if(equipment_system.cargo_system) possible.Add("Cargo System") + if(equipment_system.sec_cargo_system) + possible.Add("Secondary Cargo System") if(equipment_system.lock_system) possible.Add("Lock System") - /* Not yet implemented - if(equipment_system.engine_system) - possible.Add("Engine System") - if(equipment_system.shield_system) - possible.Add("Shield System") - */ - var/obj/item/device/spacepod_equipment/SPE switch(input(user, "Remove which equipment?", null, null) as null|anything in possible) if("Energy Cell") if(user.put_in_any_hand_if_possible(battery)) to_chat(user, "You remove \the [battery] from the space pod") battery = null + else + to_chat(user, "You need an open hand to do that.") + return if("Weapon System") - SPE = equipment_system.weapon_system - if(user.put_in_any_hand_if_possible(SPE)) - to_chat(user, "You remove \the [SPE] from the equipment system.") - SPE.removed(user) - SPE.my_atom = null - equipment_system.weapon_system = null - else - to_chat(user, "You need an open hand to do that.") + remove_equipment(user, equipment_system.weapon_system, "weapon_system") + return if("Misc. System") - SPE = equipment_system.misc_system - if(user.put_in_any_hand_if_possible(SPE)) - to_chat(user, "You remove \the [SPE] from the equipment system.") - SPE.removed(user) - SPE.my_atom = null - equipment_system.misc_system = null - else - to_chat(user, "You need an open hand to do that.") + remove_equipment(user, equipment_system.misc_system, "misc_system") + return if("Cargo System") - SPE = equipment_system.cargo_system - if(user.put_in_any_hand_if_possible(SPE)) - to_chat(user, "You remove \the [SPE] from the equipment system.") - SPE.removed(user) - SPE.my_atom = null - equipment_system.cargo_system = null - else - to_chat(user, "You need an open hand to do that.") + remove_equipment(user, equipment_system.cargo_system, "cargo_system") + return + if("Secondary Cargo System") + remove_equipment(user, equipment_system.sec_cargo_system, "sec_cargo_system") + return if("Lock System") - SPE = equipment_system.lock_system - if(user.put_in_any_hand_if_possible(SPE)) - to_chat(user, "You remove \the [SPE] from the equipment system.") - SPE.removed(user) - SPE.my_atom = null - equipment_system.lock_system = null - else - to_chat(user, "You need an open hand to do that.") - /* - if("engine system") - SPE = equipment_system.engine_system - if(user.put_in_any_hand_if_possible(SPE)) - to_chat(user, "You remove \the [SPE] from the equipment system.") - equipment_system.engine_system = null - else - to_chat(user, "You need an open hand to do that.") - if("shield system") - SPE = equipment_system.shield_system - if(user.put_in_any_hand_if_possible(SPE)) - to_chat(user, "You remove \the [SPE] from the equipment system.") - equipment_system.shield_system = null - else - to_chat(user, "You need an open hand to do that.") - */ - + remove_equipment(user, equipment_system.lock_system, "lock_system") + return return +/obj/spacepod/proc/remove_equipment(mob/user, var/obj/item/device/spacepod_equipment/SPE, var/slot) + + if(occupants.len > max_occupants - SPE.occupant_mod) + to_chat(user, "Someone is sitting in \the [SPE]!") + return + + var/sum_w_class = 0 + for(var/obj/item/I in cargo_hold.contents) + sum_w_class += I.w_class + if(cargo_hold.contents.len > cargo_hold.storage_slots - SPE.storage_mod["slots"] || sum_w_class > cargo_hold.max_combined_w_class - SPE.storage_mod["w_class"]) + to_chat(user, "Empty \the [SPE] first!") + return + + if(user.put_in_any_hand_if_possible(SPE)) + to_chat(user, "You remove \the [SPE] from the equipment system.") + max_occupants -= SPE.occupant_mod + cargo_hold.storage_slots -= SPE.storage_mod["slots"] + cargo_hold.max_combined_w_class -= SPE.storage_mod["w_class"] + SPE.removed(user) + SPE.my_atom = null + equipment_system.vars[slot] = null + else + to_chat(user, "You need an open hand to do that.") + return + + +/obj/spacepod/hear_talk/hear_talk(mob/M, var/msg) + cargo_hold.hear_talk(M, msg) + ..() + +/obj/spacepod/hear_message(mob/M, var/msg) + cargo_hold.hear_message(M, msg) + ..() + +/obj/spacepod/proc/return_inv() + + var/list/L = list( ) + + L += src.contents + + for(var/obj/item/weapon/storage/S in src) + L += S.return_inv() + for(var/obj/item/weapon/gift/G in src) + L += G.gift + if (istype(G.gift, /obj/item/weapon/storage)) + L += G.gift:return_inv() + return L + /obj/spacepod/civilian icon_state = "pod_civ" desc = "A sleek civilian space pod." @@ -566,11 +581,7 @@ */ if(M == user) - if(!equipment_system.lock_system || unlocked) - enter_pod(user) - else - to_chat(user, "\The [src]'s doors are locked!") - + enter_pod(user) if(istype(A, /obj/structure/ore_box)) // For loading ore boxes var/obj/structure/ore_box/O = A @@ -587,14 +598,29 @@ else to_chat(user, "\The [src] already has \an [C.box]") -/obj/spacepod/verb/enter_pod(mob/user = usr) - set category = "Object" - set name = "Enter Pod" - set src in oview(1) + if(istype(A, /obj/structure/closet/crate)) // For loading crates + var/obj/structure/closet/crate/O = A + if(equipment_system.cargo_system && istype(equipment_system.cargo_system, /obj/item/device/spacepod_equipment/cargo/crate)) + var/obj/item/device/spacepod_equipment/cargo/crate/C = equipment_system.cargo_system + if(!C.crate) + to_chat(user, "You begin loading \the [O] into \the [src]'s [equipment_system.cargo_system]") + if(do_after(user, 40, target = src)) + C.crate = O + O.forceMove(C) + to_chat(user, "You load \the [O] into \the [src]'s [equipment_system.cargo_system]!") + else + to_chat(user, "You fail to load \the [O] into \the [src]'s [equipment_system.cargo_system]") + else + to_chat(user, "\The [src] already has \an [C.crate]") +/obj/spacepod/proc/enter_pod(mob/user) if (usr.stat != CONSCIOUS) return + if(equipment_system.lock_system && !unlocked) + to_chat(user, "\The [src]'s doors are locked!") + return + if(get_dist(src, user) > 2 || get_dist(usr, user) > 1) to_chat(usr, "They are too far away to put inside") return From b169615080f383d8e748ebc6124bc2bb6ce4961b Mon Sep 17 00:00:00 2001 From: IK3I Date: Sat, 14 May 2016 19:50:07 -0500 Subject: [PATCH 06/11] Final changes of the refactor A couple bug fixes might be needed, but it /should/ be ready for live. --- .../computer/pod_tracking_console.dm | 11 +- code/game/machinery/portable_turret.dm | 2 +- code/game/machinery/turrets.dm | 16 +- .../living/simple_animal/hostile/hostile.dm | 4 +- .../hostile/retaliate/retaliate.dm | 6 +- .../mob/living/simple_animal/simple_animal.dm | 2 +- code/modules/spacepods/equipment.dm | 51 ++-- code/modules/spacepods/spacepod.dm | 265 ++++++++++-------- icons/vehicles/spacepod.dmi | Bin 3194 -> 4134 bytes 9 files changed, 194 insertions(+), 163 deletions(-) diff --git a/code/game/machinery/computer/pod_tracking_console.dm b/code/game/machinery/computer/pod_tracking_console.dm index e759cc0357f..371c3af366d 100644 --- a/code/game/machinery/computer/pod_tracking_console.dm +++ b/code/game/machinery/computer/pod_tracking_console.dm @@ -22,13 +22,10 @@ if(my_pod && enabled) var/podname = capitalize(sanitize(my_pod.name)) var/list/chairs = list() - if(my_pod.occupants) - var/mob/pilot = my_pod.occupants[PILOT] - if(my_pod.occupants[PILOT]) - chairs += list("pilot" = pilot.name) - for(var/mob/M in my_pod.occupants) - if(M == pilot) - continue + if(my_pod.pilot || my_pod.passengers) + if(my_pod.pilot) + chairs += list("pilot" = my_pod.pilot.name) + for(var/mob/M in my_pod.passengers) chairs += list("passenger" = M.name) pods.Add(list(list("pod" = "\ref[my_pod]", "name" = podname) + chairs + list("x" = my_pod.x, "y" = my_pod.y, "z" = my_pod.z))) diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm index c5cd700abaf..eab12bb22d5 100644 --- a/code/game/machinery/portable_turret.dm +++ b/code/game/machinery/portable_turret.dm @@ -519,7 +519,7 @@ var/list/turret_icons assess_and_assign(ME.occupant, targets, secondarytargets) for(var/obj/spacepod/SP in view(7,src)) - assess_and_assign(SP.occupants[PILOT], targets, secondarytargets) + assess_and_assign(SP.pilot, targets, secondarytargets) for(var/obj/vehicle/T in view(7,src)) assess_and_assign(T.buckled_mob, targets, secondarytargets) diff --git a/code/game/machinery/turrets.dm b/code/game/machinery/turrets.dm index 022e0d2765e..82060d47bc2 100644 --- a/code/game/machinery/turrets.dm +++ b/code/game/machinery/turrets.dm @@ -21,7 +21,7 @@ turretTargets |= Mech else if( istype(O, /obj/spacepod) ) var/obj/spacepod/Pod = O - if( Pod.occupants ) + if( Pod.pilot ) turretTargets |= Pod else if(istype(O,/mob/living/simple_animal)) turretTargets |= O @@ -139,7 +139,7 @@ return 1 else if( istype(T, /obj/spacepod) ) var/obj/spacepod/SP = T - if( SP.occupants ) + if( SP.pilot ) return 1 else if(istype(T,/mob/living/simple_animal)) var/mob/living/simple_animal/A = T @@ -159,8 +159,8 @@ if(M.occupant) new_targets += M for(var/obj/spacepod/M in protected_area.turretTargets) - if(M.occupants[PILOT]) - new_targets += M.occupants[PILOT] + if(M.pilot) + new_targets += M.pilot for(var/mob/living/simple_animal/M in protected_area.turretTargets) if(!M.stat) new_targets += M @@ -488,7 +488,7 @@ return 1 else if(istype(target, /obj/spacepod)) var/obj/spacepod/S = target - if(S.occupants) + if(S.pilot) return 1 return 0 @@ -522,11 +522,11 @@ continue //Don't shoot at empty mechs. pos_targets += M for(var/obj/spacepod/M in oview(scan_range, src)) - if(M.occupants[PILOT]) - var/mob/P = M.occupants[PILOT] + if(M.pilot) + var/mob/P = M.pilot if(faction in P.faction) continue - if(!M.occupants) + if(!M.pilot) continue //Don't shoot at empty pods. pos_targets += M if(pos_targets.len) diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index 81a0828df14..6e34ff4b8b0 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -118,8 +118,8 @@ return 1 if(istype(the_target, /obj/spacepod)) var/obj/spacepod/S = the_target - if(S.occupants) //Just so we don't attack empty pods - for(var/mob/M in S.occupants) + if(S.pilot) //Just so we don't attack empty pods + for(var/mob/M in S.pilot) if(CanAttack(M)) return 1 if(isliving(the_target)) diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm index e6d373d7504..a58223acb04 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm @@ -14,7 +14,7 @@ return A else if(istype(A, /obj/spacepod)) var/obj/spacepod/M = A - if(M.occupants) + if(M.pilot) return A /mob/living/simple_animal/hostile/retaliate/ListTargets() @@ -47,9 +47,9 @@ enemies |= M.occupant else if(istype(A, /obj/spacepod)) var/obj/spacepod/M = A - if(M.occupants[PILOT]) + if(M.pilot) enemies |= M - enemies |= M.occupants[PILOT] + enemies |= M.pilot for(var/mob/living/simple_animal/hostile/retaliate/H in around) var/retaliate_faction_check = 0 diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 09c82dbf1b2..45f2c6789c9 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -529,7 +529,7 @@ return 0 if (istype(the_target,/obj/spacepod)) var/obj/spacepod/S = the_target - if (S.occupants) + if (S.pilot) return 0 return 1 diff --git a/code/modules/spacepods/equipment.dm b/code/modules/spacepods/equipment.dm index 7ff052d1e6e..9b0655958c3 100644 --- a/code/modules/spacepods/equipment.dm +++ b/code/modules/spacepods/equipment.dm @@ -51,14 +51,19 @@ var/obj/item/device/spacepod_equipment/cargo/cargo_system // cargo system var/obj/item/device/spacepod_equipment/cargo/sec_cargo_system // secondary cargo system var/obj/item/device/spacepod_equipment/lock/lock_system // lock system - //var/obj/item/device/spacepod_equipment/engine/engine_system // engine system - //var/obj/item/device/spacepod_equipment/shield/shield_system // shielding system /datum/spacepod/equipment/New(var/obj/spacepod/SP) ..() if(istype(SP)) my_atom = SP +/datum/spacepod/equipment/proc/get_list() + var/list/stuff + for(var/obj/I in vars) + if(istype(I, /obj/item/device/spacepod_equipment)) + stuff += I + return stuff + /obj/item/device/spacepod_equipment name = "equipment" var/obj/spacepod/my_atom @@ -182,50 +187,36 @@ name = "pod cargo" desc = "You shouldn't be seeing this" icon = 'icons/vehicles/spacepod.dmi' - icon_state = "blank" + icon_state = "cargo_blank" + var/obj/storage = null /obj/item/device/spacepod_equipment/cargo/proc/passover(var/obj/item/I) return /obj/item/device/spacepod_equipment/cargo/proc/unload() // called by unload verb - return + if(storage) + storage.forceMove(get_turf(my_atom)) + storage = null +/obj/item/device/spacepod_equipment/cargo/removed(var/mob/user) // called when system removed + . = ..() + unload() // Ore System /obj/item/device/spacepod_equipment/cargo/ore name = "spacepod ore storage system" desc = "An ore storage system for spacepods. Scoops up any ore you drive over." icon_state = "cargo_ore" - var/obj/structure/ore_box/box /obj/item/device/spacepod_equipment/cargo/ore/passover(var/obj/item/I) - if(box && istype(I,/obj/item/weapon/ore)) - I.forceMove(box) - -/obj/item/device/spacepod_equipment/cargo/ore/unload() - if(box) - box.forceMove(get_turf(my_atom)) - box = null - -/obj/item/device/spacepod_equipment/cargo/ore/removed(var/mob/user) - . = ..() - unload() + if(storage && istype(I,/obj/item/weapon/ore)) + I.forceMove(storage) // Crate System /obj/item/device/spacepod_equipment/cargo/crate name = "spacepod crate storage system" desc = "A heavy duty storage system for spacepods. Holds one crate." - icon_state = "cargo_ore" - var/obj/structure/closet/crate/crate - -/obj/item/device/spacepod_equipment/cargo/crate/unload() - if(crate) - crate.forceMove(get_turf(my_atom)) - crate = null - -/obj/item/device/spacepod_equipment/cargo/crate/removed(var/mob/user) - . = ..() - unload() + icon_state = "cargo_crate" /* /////////////////////////////////////// @@ -233,8 +224,6 @@ /////////////////////////////////////// */ -//Storage system and inventory is handled in cargo_hold.dm - /obj/item/device/spacepod_equipment/sec_cargo name = "secondary cargo" desc = "you shouldn't be seeing this" @@ -245,14 +234,14 @@ /obj/item/device/spacepod_equipment/sec_cargo/chair name = "passanger seat" desc = "A passenger seat for a spacepod" - icon_state = "cargo_ore" + icon_state = "sec_cargo_chair" occupant_mod = 1 // Loot Box /obj/item/device/spacepod_equipment/sec_cargo/loot_box name = "loot box" desc = "A small compartment to store valuables" - icon_state = "cargo_ore" + icon_state = "sec_cargo_loot" storage_mod = list("slots" = 7, "w_class" = 14) /* diff --git a/code/modules/spacepods/spacepod.dm b/code/modules/spacepods/spacepod.dm index 4fe925ac085..c1c4fc3def9 100644 --- a/code/modules/spacepods/spacepod.dm +++ b/code/modules/spacepods/spacepod.dm @@ -1,6 +1,5 @@ #define DAMAGE 1 #define FIRE 2 -#define PILOT "pilot" /obj/spacepod name = "\improper space pod" @@ -15,8 +14,9 @@ layer = 3.9 infra_luminosity = 15 - var/list/mob/occupants = list() //uses [PILOT] index for pilot and numerics for passangers - var/max_occupants = 1 + var/list/mob/pilot //There is only ever one pilot and he gets all the privledge + var/list/mob/passengers = list() //passengers can't do anything and are variable in number + var/max_passengers = 0 var/obj/item/weapon/storage/internal/cargo_hold var/datum/spacepod/equipment/equipment_system @@ -100,10 +100,10 @@ qdel(ion_trail) ion_trail = null occupant_sanity_check() - if(occupants) - for(var/mob/M in occupants) + if(passengers) + for(var/mob/M in passengers) M.forceMove(get_turf(src)) - occupants -= M + passengers -= M spacepods_list -= src return ..() @@ -113,7 +113,6 @@ else processing_objects.Remove(src) - /obj/spacepod/proc/update_icons() if(!pod_overlays) pod_overlays = new/list(2) @@ -162,28 +161,28 @@ health = max(0, health - damage) var/percentage = (health / initial(health)) * 100 occupant_sanity_check() - if(occupants && oldhealth > health && percentage <= 25 && percentage > 0) + if(passengers && oldhealth > health && percentage <= 25 && percentage > 0) var/sound/S = sound('sound/effects/engine_alert2.ogg') S.wait = 0 //No queue S.channel = 0 //Any channel S.volume = 50 - for(var/mob/M in occupants) + for(var/mob/M in passengers) to_chat(M, S) - if(occupants && oldhealth > health && !health) + if(passengers && oldhealth > health && !health) var/sound/S = sound('sound/effects/engine_alert1.ogg') S.wait = 0 S.channel = 0 S.volume = 50 - for(var/mob/M in occupants) + for(var/mob/M in passengers) to_chat(M, S) if(!health) spawn(0) - if(occupants) - for(var/mob/M in occupants) + if(passengers) + for(var/mob/M in passengers) to_chat(M, "Critical damage to the vessel detected, core explosion imminent!") for(var/i = 10, i >= 0; --i) - if(occupants) - for(var/mob/M in occupants) + if(passengers) + for(var/mob/M in passengers) to_chat(M, "[i]") if(i == 0) explosion(loc, 2, 4, 8) @@ -202,7 +201,7 @@ occupant_sanity_check() switch(severity) if(1) - for(var/mob/M in occupants) + for(var/mob/M in passengers) var/mob/living/carbon/human/H = M if(H) H.forceMove(get_turf(src)) @@ -221,9 +220,11 @@ cargo_hold.emp_act(severity) switch(severity) if(1) - if(occupants) - for(var/mob/M in occupants) - to_chat(M, "The pod console flashes 'Heavy EMP WAVE DETECTED'.")//warn the occupants + if(pilot) + to_chat(pilot, "The pod console flashes 'Heavy EMP WAVE DETECTED'.") + if(passengers) + for(var/mob/M in passengers) + to_chat(M, "The pod console flashes 'Heavy EMP WAVE DETECTED'.")//warn the passengers if(battery) @@ -234,9 +235,11 @@ processing_objects.Add(src) if(2) - if(occupants) - for(var/mob/M in occupants) - to_chat(M, "The pod console flashes 'EMP WAVE DETECTED'.")//warn the occupants + if(pilot) + to_chat(pilot, "The pod console flashes 'EMP WAVE DETECTED'.") + if(passengers) + for(var/mob/M in passengers) + to_chat(M, "The pod console flashes 'EMP WAVE DETECTED'.")//warn the passengers deal_damage(40) if(battery) @@ -332,12 +335,33 @@ obj/spacepod/proc/add_equipment(mob/user, var/obj/item/device/spacepod_equipment equipment_system.vars[slot] = SPE var/obj/item/device/spacepod_equipment/system = equipment_system.vars[slot] system.my_atom = src - max_occupants += SPE.occupant_mod + max_passengers += SPE.occupant_mod cargo_hold.storage_slots += SPE.storage_mod["slots"] cargo_hold.max_combined_w_class += SPE.storage_mod["w_class"] return /obj/spacepod/attack_hand(mob/user as mob) + if(user.a_intent == I_GRAB && unlocked) + var/mob/target + if(pilot) + target = pilot + else if(passengers.len > 0) + target = passengers[1] + + if(target && istype(target)) + src.visible_message("[user] is trying to rip the door open and pull [target] out of the [src]!", + "You see [user] outside the door trying to rip it open!") + if(do_after(user, 50, target = src)) + target.forceMove(get_turf(src)) + target.Stun(1) + passengers -= target + target.visible_message("[user] flings the door open and tears [target] out of the [src]", + "The door flies open and you are thrown out of the [src] and to the ground!") + else + target.visible_message("[user] was unable to get the door open!", + "You manage to keep [user] out of the [src]!") + return + if(!hatch_open) if(cargo_hold.storage_slots > 0) if(unlocked) @@ -346,7 +370,7 @@ obj/spacepod/proc/add_equipment(mob/user, var/obj/item/device/spacepod_equipment to_chat(user, "The storage compartment is locked") return ..() if(!equipment_system || !istype(equipment_system)) - to_chat(user, "The pod has no equpment datum, or is the wrong type, yell at pomf.") + to_chat(user, "The pod has no equpment datum, or is the wrong type, yell at IK3I.") return var/list/possible = list() if(battery) @@ -388,7 +412,7 @@ obj/spacepod/proc/add_equipment(mob/user, var/obj/item/device/spacepod_equipment /obj/spacepod/proc/remove_equipment(mob/user, var/obj/item/device/spacepod_equipment/SPE, var/slot) - if(occupants.len > max_occupants - SPE.occupant_mod) + if(passengers.len > max_passengers - SPE.occupant_mod) to_chat(user, "Someone is sitting in \the [SPE]!") return @@ -401,7 +425,7 @@ obj/spacepod/proc/add_equipment(mob/user, var/obj/item/device/spacepod_equipment if(user.put_in_any_hand_if_possible(SPE)) to_chat(user, "You remove \the [SPE] from the equipment system.") - max_occupants -= SPE.occupant_mod + max_passengers -= SPE.occupant_mod cargo_hold.storage_slots -= SPE.storage_mod["slots"] cargo_hold.max_combined_w_class -= SPE.storage_mod["w_class"] SPE.removed(user) @@ -459,6 +483,11 @@ obj/spacepod/proc/add_equipment(mob/user, var/obj/item/device/spacepod_equipment equipment_system.misc_system = L equipment_system.misc_system.my_atom = src equipment_system.misc_system.enabled = 1 + var/obj/item/device/spacepod_equipment/sec_cargo/chair/C = new /obj/item/device/spacepod_equipment/sec_cargo/chair + C.loc = equipment_system + equipment_system.sec_cargo_system = C + equipment_system.sec_cargo_system.my_atom = src + max_passengers = 1 var/obj/item/device/spacepod_equipment/lock/keyed/K = new /obj/item/device/spacepod_equipment/lock/keyed K.loc = equipment_system equipment_system.lock_system = K @@ -489,12 +518,11 @@ obj/spacepod/proc/add_equipment(mob/user, var/obj/item/device/spacepod_equipment set category = "Spacepod" set src = usr.loc set popup_menu = 0 - if(usr != src.occupants[PILOT]) - to_chat(usr, "You can't reach the controls from your chair") return use_internal_tank = !use_internal_tank - for(var/mob/M in occupants) - to_chat(M, "Now taking air from [use_internal_tank?"internal airtank":"environment"].") + to_chat(usr, "Now taking air from [use_internal_tank?"internal airtank":"environment"].") return /obj/spacepod/proc/add_cabin() @@ -549,19 +577,20 @@ obj/spacepod/proc/add_equipment(mob/user, var/obj/item/device/spacepod_equipment . = t_air.return_temperature() return -/* Save for cargo refactor /obj/spacepod/proc/moved_other_inside(var/mob/living/carbon/human/H as mob) occupant_sanity_check() - if(!occupant2) + if(passengers.len < max_passengers) H.stop_pulling() H.forceMove(src) - occupant2 = H + passengers += H H.forceMove(src) playsound(src, 'sound/machines/windowdoor.ogg', 50, 1) return 1 -*/ /obj/spacepod/MouseDrop_T(atom/A, mob/user) + if(user == pilot || user in passengers) + return + if(istype(A,/mob)) var/mob/M = A if(!isliving(M)) @@ -569,61 +598,48 @@ obj/spacepod/proc/add_equipment(mob/user, var/obj/item/device/spacepod_equipment occupant_sanity_check() -/* save for cargo refactor - if(M != user && M.stat == DEAD && unlocked) - if(occupant2 && !occupant) - to_chat(usr, "You can't put a corpse into the driver's seat!") + if(M != user && unlocked && (M.stat == DEAD || M.incapacitated())) + if(passengers.len >= max_passengers && !pilot) + to_chat(usr, "That person can't fly the pod!") return 0 - if(!occupant2) + if(passengers.len < max_passengers) visible_message("[user.name] starts loading [M.name] into the pod!") - sleep(10) - moved_other_inside(M) -*/ + if(do_after(user, 50, M)) + moved_other_inside(M) if(M == user) enter_pod(user) - if(istype(A, /obj/structure/ore_box)) // For loading ore boxes - var/obj/structure/ore_box/O = A - if(equipment_system.cargo_system && istype(equipment_system.cargo_system,/obj/item/device/spacepod_equipment/cargo/ore)) - var/obj/item/device/spacepod_equipment/cargo/ore/C = equipment_system.cargo_system - if(!C.box) - to_chat(user, "You begin loading \the [O] into \the [src]'s [equipment_system.cargo_system]") - if(do_after(user, 40, target = src)) - C.box = O - O.forceMove(C) - to_chat(user, "You load \the [O] into \the [src]'s [equipment_system.cargo_system]!") - else - to_chat(user, "You fail to load \the [O] into \the [src]'s [equipment_system.cargo_system]") - else - to_chat(user, "\The [src] already has \an [C.box]") + if(istype(A, /obj/structure/ore_box) && equipment_system.cargo_system && istype(equipment_system.cargo_system,/obj/item/device/spacepod_equipment/cargo/ore)) // For loading ore boxes + load_cargo(user, A) - if(istype(A, /obj/structure/closet/crate)) // For loading crates - var/obj/structure/closet/crate/O = A - if(equipment_system.cargo_system && istype(equipment_system.cargo_system, /obj/item/device/spacepod_equipment/cargo/crate)) - var/obj/item/device/spacepod_equipment/cargo/crate/C = equipment_system.cargo_system - if(!C.crate) - to_chat(user, "You begin loading \the [O] into \the [src]'s [equipment_system.cargo_system]") - if(do_after(user, 40, target = src)) - C.crate = O - O.forceMove(C) - to_chat(user, "You load \the [O] into \the [src]'s [equipment_system.cargo_system]!") - else - to_chat(user, "You fail to load \the [O] into \the [src]'s [equipment_system.cargo_system]") - else - to_chat(user, "\The [src] already has \an [C.crate]") + if(istype(A, /obj/structure/closet/crate) && equipment_system.cargo_system && istype(equipment_system.cargo_system, /obj/item/device/spacepod_equipment/cargo/crate)) // For loading crates + load_cargo(user, A) + +/obj/spacepod/proc/load_cargo(mob/user, var/obj/O) + var/obj/item/device/spacepod_equipment/cargo/ore/C = equipment_system.cargo_system + if(!C.storage) + to_chat(user, "You begin loading \the [O] into \the [src]'s [equipment_system.cargo_system]") + if(do_after(user, 40, target = src)) + C.storage = O + O.forceMove(C) + to_chat(user, "You load \the [O] into \the [src]'s [equipment_system.cargo_system]!") + else + to_chat(user, "You fail to load \the [O] into \the [src]'s [equipment_system.cargo_system]") + else + to_chat(user, "\The [src] already has \an [C.storage]") /obj/spacepod/proc/enter_pod(mob/user) if (usr.stat != CONSCIOUS) - return + return 0 if(equipment_system.lock_system && !unlocked) to_chat(user, "\The [src]'s doors are locked!") - return + return 0 if(get_dist(src, user) > 2 || get_dist(usr, user) > 1) to_chat(usr, "They are too far away to put inside") - return + return 0 if(!istype(user)) return 0 @@ -652,15 +668,19 @@ obj/spacepod/proc/add_equipment(mob/user, var/obj/item/device/spacepod_equipment occupant_sanity_check() - if(occupants.len < max_occupants) + if(passengers.len <= max_passengers) visible_message("[user] starts to climb into \the [src].") if(do_after(user, 40, target = src)) - if(occupants.len < max_occupants) + if(!pilot || pilot == null) user.stop_pulling() - if(!occupants[PILOT]) - occupants[PILOT] = user - else - occupants += user + pilot = user + user.forceMove(src) + add_fingerprint(user) + playsound(src, 'sound/machines/windowdoor.ogg', 50, 1) + return + if(passengers.len < max_passengers) + user.stop_pulling() + passengers += user user.forceMove(src) add_fingerprint(user) playsound(src, 'sound/machines/windowdoor.ogg', 50, 1) @@ -672,26 +692,21 @@ obj/spacepod/proc/add_equipment(mob/user, var/obj/item/device/spacepod_equipment to_chat(user, "You can't fit in \the [src], it's full!") /obj/spacepod/proc/occupant_sanity_check() // going to have to adjust this later for cargo refactor - if(occupants) - if(occupants.len == max_occupants && !occupants[PILOT]) - var/occ = occupants[1] - occupants -= occ - occupants[PILOT] = occ - log_debug("##SPACEPOD WARNING: IMPOSSIBLE SEATING ARRANGEMENT: OCCUPANTS [english_list(occupants)], TURF [get_turf(src)] | AREA [get_area(src)] | COORDS [x], [y], [z]") - if(occupants.len > max_occupants) - for(var/i = occupants.len; i <= max_occupants; i--) - var/mob/occupant = occupants[i - 1] + if(passengers) + if(passengers.len > max_passengers) + for(var/i = passengers.len; i <= max_passengers; i--) + var/mob/occupant = passengers[i - 1] occupant.forceMove(get_turf(src)) - log_debug("##SPACEPOD WARNING: OCCUPANTS EXCEED CAP: MAX OCCUPANTS [max_occupants], OCCUPANTS [english_list(occupants)], TURF [get_turf(src)] | AREA [get_area(src)] | COORDS [x], [y], [z]") - occupants[i - 1] = null - for(var/mob/M in occupants) + log_debug("##SPACEPOD WARNING: passengers EXCEED CAP: MAX passengers [max_passengers], passengers [english_list(passengers)], TURF [get_turf(src)] | AREA [get_area(src)] | COORDS [x], [y], [z]") + passengers[i - 1] = null + for(var/mob/M in passengers) if(!ismob(M)) M.forceMove(get_turf(src)) log_debug("##SPACEPOD WARNING: NON-MOB OCCUPANT [M], TURF [get_turf(src)] | AREA [get_area(src)] | COORDS [x], [y], [z]") - occupants -= M + passengers -= M else if(M.loc != src) log_debug("##SPACEPOD WARNING: OCCUPANT [M] ESCAPED, TURF [get_turf(src)] | AREA [get_area(src)] | COORDS [x], [y], [z]") - occupants -= M + passengers -= M /obj/spacepod/verb/exit_pod() set name = "Exit pod" @@ -702,18 +717,18 @@ obj/spacepod/proc/add_equipment(mob/user, var/obj/item/device/spacepod_equipment if(!istype(user)) return - if (usr.stat != CONSCIOUS) // unconscious people can't let themselves out + if (user.stat != CONSCIOUS || user.incapacitated()) // unconscious and restrained people can't let themselves out return occupant_sanity_check() - if(user in occupants) + if(user == pilot) user.forceMove(get_turf(src)) - occupants -= user + pilot = null to_chat(user, "You climb out of \the [src].") - if(user == occupants[PILOT]) + if(user in passengers) user.forceMove(get_turf(src)) - occupants[PILOT] = null + passengers -= user to_chat(user, "You climb out of \the [src].") /obj/spacepod/verb/lock_pod() @@ -721,8 +736,8 @@ obj/spacepod/proc/add_equipment(mob/user, var/obj/item/device/spacepod_equipment set category = "Spacepod" set src = usr.loc - if(usr in occupants && usr != src.occupants[PILOT]) - to_chat(usr, "You can't reach the controls from your chair") return unlocked = !unlocked @@ -734,8 +749,8 @@ obj/spacepod/proc/add_equipment(mob/user, var/obj/item/device/spacepod_equipment set category = "Spacepod" set src = usr.loc - if(usr != src.occupants[PILOT]) - to_chat(usr, "You can't reach the controls from your chair") return for(var/obj/machinery/door/poddoor/multi_tile/P in orange(3,src)) @@ -747,6 +762,14 @@ obj/spacepod/proc/add_equipment(mob/user, var/obj/item/device/spacepod_equipment else P.close() return 1 + for(var/mob/living/carbon/human/O in passengers) + if(P.check_access(O.get_active_hand()) || P.check_access(O.wear_id)) + if(P.density) + P.open() + return 1 + else + P.close() + return 1 to_chat(usr, "Access denied.") return @@ -759,8 +782,8 @@ obj/spacepod/proc/add_equipment(mob/user, var/obj/item/device/spacepod_equipment set desc = "Fire the weapons." set category = "Spacepod" set src = usr.loc - if(usr != src.occupants[PILOT]) - to_chat(usr, "You can't reach the controls from your chair") return if(!equipment_system.weapon_system) to_chat(usr, "\The [src] has no weapons!") @@ -772,8 +795,8 @@ obj/spacepod/proc/add_equipment(mob/user, var/obj/item/device/spacepod_equipment set desc = "Unloads the cargo" set category = "Spacepod" set src = usr.loc - if(usr != src.occupants[PILOT]) - to_chat(usr, "You can't reach the controls from your chair") return if(!equipment_system.cargo_system) to_chat(usr, "\The [src] has no cargo system!") @@ -784,8 +807,8 @@ obj/spacepod/proc/add_equipment(mob/user, var/obj/item/device/spacepod_equipment set name = "Toggle Lights" set category = "Spacepod" set src = usr.loc - if(usr != src.occupants[PILOT]) - to_chat(usr, "You can't reach the controls from your chair") return lightsToggle() @@ -795,10 +818,32 @@ obj/spacepod/proc/add_equipment(mob/user, var/obj/item/device/spacepod_equipment set_light(lights_power) else set_light(0) - for(var/mob/M in occupants) + to_chat(usr, "Lights toggled [lights ? "on" : "off"].") + for(var/mob/M in passengers) to_chat(M, "Lights toggled [lights ? "on" : "off"].") return +/obj/spacepod/verb/checkSeat() + set name = "Check under Seat" + set category = "Spacepod" + set src = usr.loc + var/mob/user = usr + to_chat(user, "You start rooting around under the seat for lost items") + if(do_after(user, 40, src)) + var/obj/badlist = list(internal_tank, cargo_hold, pilot, battery) + equipment_system.get_list() + var/list/true_contents = contents - badlist + if(true_contents.len > 0) + var/obj/I = pick(true_contents) + if(user.put_in_any_hand_if_possible(I)) + src.contents -= I + to_chat(user, "You find a [I] [pick("under the seat", "under the console", "in the mainenance access")]!") + else + to_chat(user, "You think you saw something shiny, but you can't reach it!") + else + to_chat(user, "You fail to find anything of value.") + else + to_chat(user, "You decide against searching the [src]") + /obj/spacepod/proc/enter_after(delay as num, var/mob/user as mob, var/numticks = 5) var/delayfraction = delay/numticks @@ -854,7 +899,7 @@ obj/spacepod/proc/add_equipment(mob/user, var/obj/item/device/spacepod_equipment return /obj/spacepod/relaymove(mob/user, direction) - if(usr != src.occupants[PILOT]) + if(usr != src.pilot) return handlerelaymove(user, direction) diff --git a/icons/vehicles/spacepod.dmi b/icons/vehicles/spacepod.dmi index e55085622c9ad236c0b3fe4ba1eea300de26c9c5..54edb864aba2f28c995cfde7da069596d3991ed9 100644 GIT binary patch literal 4134 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 qcLSBw3xMw`GtaSp&VLA6#L(p;fiCUEgs literal 3194 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 From 007278a81567852b8c724118a4a4685b67770ec8 Mon Sep 17 00:00:00 2001 From: IK3I Date: Sat, 14 May 2016 22:07:23 -0500 Subject: [PATCH 07/11] Adds pod lock busters The CE and the Armory now have specialized drills for stubborn pod flying criminals. --- _maps/map_files/cyberiad/cyberiad.dmm | 4 ++-- code/modules/spacepods/lock_buster.dm | 13 +++++++++++++ code/modules/spacepods/spacepod.dm | 22 ++++++++++++++++++++-- icons/obj/device.dmi | Bin 34130 -> 34501 bytes paradise.dme | 1 + 5 files changed, 36 insertions(+), 4 deletions(-) create mode 100644 code/modules/spacepods/lock_buster.dm diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index 47df198e5b8..aab249117a5 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -464,7 +464,7 @@ "aiV" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/security/armoury) "aiW" = (/obj/structure/rack,/obj/item/weapon/storage/box/seccarts{pixel_x = 3; pixel_y = 2},/obj/item/weapon/storage/box/handcuffs,/obj/item/weapon/storage/box/flashbangs{pixel_x = -2; pixel_y = -2},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/weapon/storage/box/handcuffs,/obj/effect/decal/warning_stripes/red/hollow,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/armoury) "aiX" = (/obj/structure/rack,/obj/item/clothing/mask/gas{pixel_x = 3; pixel_y = 3},/obj/item/clothing/mask/gas{pixel_x = 3; pixel_y = 3},/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas{pixel_x = -3; pixel_y = -3},/obj/item/clothing/mask/gas{pixel_x = -3; pixel_y = -3},/obj/effect/decal/warning_stripes/red/hollow,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/armoury) -"aiY" = (/obj/structure/table,/obj/effect/decal/warning_stripes/red/hollow,/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/armoury) +"aiY" = (/obj/structure/table,/obj/effect/decal/warning_stripes/red/hollow,/obj/item/weapon/storage/toolbox/mechanical,/obj/item/device/lock_buster,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/armoury) "aiZ" = (/obj/machinery/recharger/wallcharger{pixel_x = -25; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/main) "aja" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plasteel,/area/security/main) "ajb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/plasteel,/area/security/main) @@ -7063,7 +7063,7 @@ "cFQ" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/rig/engineering,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/rig/engineering,/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor/plasteel,/area/engine/hardsuitstorage) "cFR" = (/obj/machinery/power/apc{dir = 4; name = "CE Office APC"; pixel_x = 24; pixel_y = 0; shock_proof = 1},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralfull"},/area/engine/chiefs_office) "cFS" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plating,/area/engine/chiefs_office) -"cFT" = (/obj/machinery/keycard_auth{pixel_x = 0; pixel_y = 24},/obj/structure/table/reinforced,/obj/item/weapon/rcd,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/obj/item/clothing/glasses/meson{pixel_y = 4},/obj/item/device/megaphone,/mob/living/simple_animal/parrot/Poly,/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralfull"},/area/engine/chiefs_office) +"cFT" = (/obj/machinery/keycard_auth{pixel_x = 0; pixel_y = 24},/obj/structure/table/reinforced,/obj/item/weapon/rcd,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/obj/item/clothing/glasses/meson{pixel_y = 4},/obj/item/device/megaphone,/obj/item/device/lock_buster,/mob/living/simple_animal/parrot/Poly,/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralfull"},/area/engine/chiefs_office) "cFU" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/structure/closet/firecloset,/obj/machinery/requests_console{department = "Atmospherics"; departmentType = 3; name = "Atmospherics Requests Console"; pixel_x = -30},/turf/simulated/floor/plasteel,/area/atmos) "cFV" = (/obj/machinery/door_control{id = "atmos"; name = "Atmospherics Lockdown"; pixel_x = 10; pixel_y = 24; req_access_txt = "24"},/obj/machinery/door_control{desc = "A remote control-switch for the engineering security doors."; id = "Engineering"; name = "Engineering Lockdown"; pixel_x = -10; pixel_y = 24; req_access_txt = "10"},/obj/machinery/door_control{desc = "A remote control-switch for secure storage."; id = "Secure Storage"; name = "Engineering Secure Storage"; pixel_x = 0; pixel_y = 24; req_access_txt = "11"},/obj/machinery/light_switch{pixel_y = 38},/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 101; on = 1; pressure_checks = 1},/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralfull"},/area/engine/chiefs_office) "cFW" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralfull"},/area/engine/chiefs_office) diff --git a/code/modules/spacepods/lock_buster.dm b/code/modules/spacepods/lock_buster.dm new file mode 100644 index 00000000000..276386d89a6 --- /dev/null +++ b/code/modules/spacepods/lock_buster.dm @@ -0,0 +1,13 @@ +/obj/item/device/lock_buster + name = "pod lock buster" + desc = "Destroys a podlock in mere seconds once applied. Waranty void if used." + icon_state = "lock_buster_off" + var/on = 0 + +/obj/item/device/lock_buster/attack_self(mob/user as mob) + on = !on + if(on) + icon_state = "lock_buster_on" + else + icon_state = "lock_buster_off" + to_chat(usr, "You turn the [src] [on ? "on" : "off"].") \ No newline at end of file diff --git a/code/modules/spacepods/spacepod.dm b/code/modules/spacepods/spacepod.dm index c1c4fc3def9..2f1a9e592d1 100644 --- a/code/modules/spacepods/spacepod.dm +++ b/code/modules/spacepods/spacepod.dm @@ -320,6 +320,24 @@ to_chat(user, "\blue \The [src] is fully repaired!") return + if(istype(W, /obj/item/device/lock_buster)) + var/obj/item/device/lock_buster/L = W + if(L.on & equipment_system.lock_system) + user.visible_message(user, "[user] is drilling through the [src]'s lock!", + "You start drilling through the [src]'s lock!") + if(do_after(user, 100, target = src)) + qdel(equipment_system.lock_system) + equipment_system.lock_system = null + user.visible_message(user, "[user] has destroyed the [src]'s lock!", + "You destroy the [src]'s lock!") + else + user.visible_message(user, "[user] fails to break through the [src]'s lock!", + "You were unable to break through the [src]'s lock!") + return + else + to_chat(user, "Turn the [L] on first.") + return + if(cargo_hold.storage_slots > 0 && !hatch_open && unlocked) // must be the last option as all items not listed prior will be stored cargo_hold.attackby(W, user, params) return @@ -604,7 +622,7 @@ obj/spacepod/proc/add_equipment(mob/user, var/obj/item/device/spacepod_equipment return 0 if(passengers.len < max_passengers) visible_message("[user.name] starts loading [M.name] into the pod!") - if(do_after(user, 50, M)) + if(do_after(user, 50, target = M)) moved_other_inside(M) if(M == user) @@ -829,7 +847,7 @@ obj/spacepod/proc/add_equipment(mob/user, var/obj/item/device/spacepod_equipment set src = usr.loc var/mob/user = usr to_chat(user, "You start rooting around under the seat for lost items") - if(do_after(user, 40, src)) + if(do_after(user, 40, target = src)) var/obj/badlist = list(internal_tank, cargo_hold, pilot, battery) + equipment_system.get_list() var/list/true_contents = contents - badlist if(true_contents.len > 0) diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi index 46a4a9743164a928d73eaf9cdb3a1ddf089e0773..3874da51a6470c19339c894fbdaf46489a65e729 100644 GIT binary patch delta 13654 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 diff --git a/paradise.dme b/paradise.dme index b609a2fc55f..8b24cc343ce 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1967,6 +1967,7 @@ #include "code\modules\space_transition\space_transition.dm" #include "code\modules\spacepods\construction.dm" #include "code\modules\spacepods\equipment.dm" +#include "code\modules\spacepods\lock_buster.dm" #include "code\modules\spacepods\parts.dm" #include "code\modules\spacepods\pod_fabricator.dm" #include "code\modules\spacepods\spacepod.dm" From 7f3af0a1ca66a7a656fd186ba13d47061e8dbf11 Mon Sep 17 00:00:00 2001 From: IK3I Date: Sat, 14 May 2016 22:07:23 -0500 Subject: [PATCH 08/11] Adds pod lock busters The CE and the Armory now have specialized drills for stubborn pod flying criminals. Also fixes a few bugs and oversights --- code/game/machinery/computer/pod_tracking_console.dm | 4 +++- code/modules/mob/living/simple_animal/hostile/hostile.dm | 5 ++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/code/game/machinery/computer/pod_tracking_console.dm b/code/game/machinery/computer/pod_tracking_console.dm index 371c3af366d..6817d265a0f 100644 --- a/code/game/machinery/computer/pod_tracking_console.dm +++ b/code/game/machinery/computer/pod_tracking_console.dm @@ -25,8 +25,10 @@ if(my_pod.pilot || my_pod.passengers) if(my_pod.pilot) chairs += list("pilot" = my_pod.pilot.name) + var/i = 1 for(var/mob/M in my_pod.passengers) - chairs += list("passenger" = M.name) + chairs += list("passenger [i]" = M.name) + i++ pods.Add(list(list("pod" = "\ref[my_pod]", "name" = podname) + chairs + list("x" = my_pod.x, "y" = my_pod.y, "z" = my_pod.z))) diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index 6e34ff4b8b0..53dd934cb6a 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -119,9 +119,8 @@ if(istype(the_target, /obj/spacepod)) var/obj/spacepod/S = the_target if(S.pilot) //Just so we don't attack empty pods - for(var/mob/M in S.pilot) - if(CanAttack(M)) - return 1 + if(CanAttack(S.pilot)) + return 1 if(isliving(the_target)) var/mob/living/L = the_target var/faction_check = 0 From c7eb997a5aa7de69d008351b4e69263667264bbf Mon Sep 17 00:00:00 2001 From: IK3I Date: Tue, 17 May 2016 01:37:08 -0500 Subject: [PATCH 09/11] Fixes some items not being craftable --- code/modules/research/designs/spacepod_designs.dm | 8 ++++---- code/modules/spacepods/pod_fabricator.dm | 1 + 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/code/modules/research/designs/spacepod_designs.dm b/code/modules/research/designs/spacepod_designs.dm index 2a57f8399f6..c49d64eddd4 100644 --- a/code/modules/research/designs/spacepod_designs.dm +++ b/code/modules/research/designs/spacepod_designs.dm @@ -188,7 +188,7 @@ build_type = PODFAB materials = list(MAT_METAL=20000, MAT_GLASS=2000) build_path = /obj/item/device/spacepod_equipment/cargo/ore - category = list("Cargo Systems") + category = list("Pod_Cargo") /datum/design/pod_cargo_crate construction_time = 100 @@ -199,7 +199,7 @@ build_type = PODFAB materials = list(MAT_METAL=25000) build_path = /obj/item/device/spacepod_equipment/cargo/crate - category = list("Cargo Systems") + category = list("Pod_Cargo") ////////////////////////////////////////// //////SPACEPOD SEC CARGO ITEMS//////////// @@ -214,7 +214,7 @@ build_type = PODFAB materials = list(MAT_METAL=7500, MAT_GLASS=2500) build_path = /obj/item/device/spacepod_equipment/sec_cargo/chair - category = list("Secondary Cargo Systems") + category = list("Pod_Cargo") /datum/design/loot_box construction_time = 100 @@ -225,7 +225,7 @@ build_type = PODFAB materials = list(MAT_METAL=7500, MAT_GLASS=2500) build_path = /obj/item/device/spacepod_equipment/sec_cargo/loot_box - category = list("Secondary Cargo Systems") + category = list("Pod_Cargo") ////////////////////////////////////////// //////SPACEPOD LOCK ITEMS//////////////// diff --git a/code/modules/spacepods/pod_fabricator.dm b/code/modules/spacepods/pod_fabricator.dm index 948491c6d29..ed7f421f33e 100644 --- a/code/modules/spacepods/pod_fabricator.dm +++ b/code/modules/spacepods/pod_fabricator.dm @@ -35,6 +35,7 @@ var/list/part_sets = list( "Pod_Weaponry", "Pod_Armor", + "Pod_Cargo", "Pod_Parts", "Pod_Frame", "Misc", From 02ad2bfe2497085c7498ab7d0c298a62a65007e1 Mon Sep 17 00:00:00 2001 From: IK3I Date: Mon, 23 May 2016 15:07:49 -0500 Subject: [PATCH 10/11] Fixes Merge Conflict with #4432 --- icons/obj/device.dmi | Bin 34361 -> 34730 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi index 338b56148ee502dec066f2a27358e3eac883024d..6e749fc11ec39905182986496d2920f1e5f905cd 100644 GIT binary patch delta 13977 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 P0DbOg>1!5f*oOWe3$R(X delta 13606 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 From 0dce120cf6266b229ff0da1a4ff85c03afe4c8b6 Mon Sep 17 00:00:00 2001 From: IK3I Date: Thu, 26 May 2016 02:34:47 -0500 Subject: [PATCH 11/11] Implements Code Suggestions --- .../research/designs/spacepod_designs.dm | 2 +- code/modules/spacepods/equipment.dm | 9 +--- code/modules/spacepods/spacepod.dm | 45 +++++++------------ 3 files changed, 19 insertions(+), 37 deletions(-) diff --git a/code/modules/research/designs/spacepod_designs.dm b/code/modules/research/designs/spacepod_designs.dm index c49d64eddd4..759af82404d 100644 --- a/code/modules/research/designs/spacepod_designs.dm +++ b/code/modules/research/designs/spacepod_designs.dm @@ -219,7 +219,7 @@ /datum/design/loot_box construction_time = 100 name = "Spacepod Loot Storage Module" - desc = "Allows the construction of a Space Pod Crate Storage Module." + desc = "Allows the construction of a Space Pod Auxillary Cargo Module." id = "podcargo_sec_lootbox" req_tech = list("materials" = 1) //it's just a set of shelves, It's not that hard to make build_type = PODFAB diff --git a/code/modules/spacepods/equipment.dm b/code/modules/spacepods/equipment.dm index 9b0655958c3..24c4fa5110b 100644 --- a/code/modules/spacepods/equipment.dm +++ b/code/modules/spacepods/equipment.dm @@ -46,6 +46,8 @@ /datum/spacepod/equipment var/obj/spacepod/my_atom + var/list/obj/item/device/spacepod_equipment/installed_modules // holds an easy to access list of installed modules + var/obj/item/device/spacepod_equipment/weaponry/weapon_system // weapons system var/obj/item/device/spacepod_equipment/misc/misc_system // misc system var/obj/item/device/spacepod_equipment/cargo/cargo_system // cargo system @@ -57,13 +59,6 @@ if(istype(SP)) my_atom = SP -/datum/spacepod/equipment/proc/get_list() - var/list/stuff - for(var/obj/I in vars) - if(istype(I, /obj/item/device/spacepod_equipment)) - stuff += I - return stuff - /obj/item/device/spacepod_equipment name = "equipment" var/obj/spacepod/my_atom diff --git a/code/modules/spacepods/spacepod.dm b/code/modules/spacepods/spacepod.dm index 2f1a9e592d1..4d6393b3348 100644 --- a/code/modules/spacepods/spacepod.dm +++ b/code/modules/spacepods/spacepod.dm @@ -273,7 +273,7 @@ to_chat(user, "\red The maintenance hatch is closed!") return if(!equipment_system) - to_chat(user, "The pod has no equipment datum, yell at IK3I") + to_chat(user, "The pod has no equipment datum, yell at the coders") return if(istype(W, /obj/item/device/spacepod_equipment/weaponry)) add_equipment(user, W, "weapon_system") @@ -316,9 +316,8 @@ repair_damage(10) to_chat(user, "\blue You mend some [pick("dents","bumps","damage")] with \the [WT]") return - else - to_chat(user, "\blue \The [src] is fully repaired!") - return + to_chat(user, "\blue \The [src] is fully repaired!") + return if(istype(W, /obj/item/device/lock_buster)) var/obj/item/device/lock_buster/L = W @@ -334,13 +333,11 @@ user.visible_message(user, "[user] fails to break through the [src]'s lock!", "You were unable to break through the [src]'s lock!") return - else - to_chat(user, "Turn the [L] on first.") + to_chat(user, "Turn the [L] on first.") return if(cargo_hold.storage_slots > 0 && !hatch_open && unlocked) // must be the last option as all items not listed prior will be stored cargo_hold.attackby(W, user, params) - return obj/spacepod/proc/add_equipment(mob/user, var/obj/item/device/spacepod_equipment/SPE, var/slot) if(equipment_system.vars[slot]) @@ -353,10 +350,10 @@ obj/spacepod/proc/add_equipment(mob/user, var/obj/item/device/spacepod_equipment equipment_system.vars[slot] = SPE var/obj/item/device/spacepod_equipment/system = equipment_system.vars[slot] system.my_atom = src + equipment_system.installed_modules += SPE max_passengers += SPE.occupant_mod cargo_hold.storage_slots += SPE.storage_mod["slots"] cargo_hold.max_combined_w_class += SPE.storage_mod["w_class"] - return /obj/spacepod/attack_hand(mob/user as mob) if(user.a_intent == I_GRAB && unlocked) @@ -375,10 +372,9 @@ obj/spacepod/proc/add_equipment(mob/user, var/obj/item/device/spacepod_equipment passengers -= target target.visible_message("[user] flings the door open and tears [target] out of the [src]", "The door flies open and you are thrown out of the [src] and to the ground!") - else - target.visible_message("[user] was unable to get the door open!", + return + target.visible_message("[user] was unable to get the door open!", "You manage to keep [user] out of the [src]!") - return if(!hatch_open) if(cargo_hold.storage_slots > 0) @@ -425,8 +421,6 @@ obj/spacepod/proc/add_equipment(mob/user, var/obj/item/device/spacepod_equipment return if("Lock System") remove_equipment(user, equipment_system.lock_system, "lock_system") - return - return /obj/spacepod/proc/remove_equipment(mob/user, var/obj/item/device/spacepod_equipment/SPE, var/slot) @@ -443,15 +437,15 @@ obj/spacepod/proc/add_equipment(mob/user, var/obj/item/device/spacepod_equipment if(user.put_in_any_hand_if_possible(SPE)) to_chat(user, "You remove \the [SPE] from the equipment system.") + equipment_system.installed_modules -= SPE max_passengers -= SPE.occupant_mod cargo_hold.storage_slots -= SPE.storage_mod["slots"] cargo_hold.max_combined_w_class -= SPE.storage_mod["w_class"] SPE.removed(user) SPE.my_atom = null equipment_system.vars[slot] = null - else - to_chat(user, "You need an open hand to do that.") - return + return + to_chat(user, "You need an open hand to do that.") /obj/spacepod/hear_talk/hear_talk(mob/M, var/msg) @@ -473,7 +467,8 @@ obj/spacepod/proc/add_equipment(mob/user, var/obj/item/device/spacepod_equipment for(var/obj/item/weapon/gift/G in src) L += G.gift if (istype(G.gift, /obj/item/weapon/storage)) - L += G.gift:return_inv() + var/obj/item/weapon/storage/inv = G.gift + L += inv.return_inv() return L /obj/spacepod/civilian @@ -511,7 +506,6 @@ obj/spacepod/proc/add_equipment(mob/user, var/obj/item/device/spacepod_equipment equipment_system.lock_system = K equipment_system.lock_system.my_atom = src equipment_system.lock_system.id = 100000 - return /obj/spacepod/random/New() ..() @@ -541,7 +535,6 @@ obj/spacepod/proc/add_equipment(mob/user, var/obj/item/device/spacepod_equipment return use_internal_tank = !use_internal_tank to_chat(usr, "Now taking air from [use_internal_tank?"internal airtank":"environment"].") - return /obj/spacepod/proc/add_cabin() cabin_air = new @@ -559,7 +552,6 @@ obj/spacepod/proc/add_equipment(mob/user, var/obj/item/device/spacepod_equipment var/turf/T = get_turf(src) if(T) . = T.return_air() - return /obj/spacepod/remove_air(amount) if(use_internal_tank) @@ -568,7 +560,6 @@ obj/spacepod/proc/add_equipment(mob/user, var/obj/item/device/spacepod_equipment var/turf/T = get_turf(src) if(T) return T.remove_air(amount) - return /obj/spacepod/return_air() if(use_internal_tank) @@ -583,7 +574,6 @@ obj/spacepod/proc/add_equipment(mob/user, var/obj/item/device/spacepod_equipment var/datum/gas_mixture/t_air = get_turf_air() if(t_air) . = t_air.return_pressure() - return /obj/spacepod/proc/return_temperature() . = 0 @@ -593,7 +583,6 @@ obj/spacepod/proc/add_equipment(mob/user, var/obj/item/device/spacepod_equipment var/datum/gas_mixture/t_air = get_turf_air() if(t_air) . = t_air.return_temperature() - return /obj/spacepod/proc/moved_other_inside(var/mob/living/carbon/human/H as mob) occupant_sanity_check() @@ -624,12 +613,15 @@ obj/spacepod/proc/add_equipment(mob/user, var/obj/item/device/spacepod_equipment visible_message("[user.name] starts loading [M.name] into the pod!") if(do_after(user, 50, target = M)) moved_other_inside(M) + return if(M == user) enter_pod(user) + return if(istype(A, /obj/structure/ore_box) && equipment_system.cargo_system && istype(equipment_system.cargo_system,/obj/item/device/spacepod_equipment/cargo/ore)) // For loading ore boxes load_cargo(user, A) + return if(istype(A, /obj/structure/closet/crate) && equipment_system.cargo_system && istype(equipment_system.cargo_system, /obj/item/device/spacepod_equipment/cargo/crate)) // For loading crates load_cargo(user, A) @@ -792,8 +784,6 @@ obj/spacepod/proc/add_equipment(mob/user, var/obj/item/device/spacepod_equipment return to_chat(usr, "You are not close to any pod doors.") - return - /obj/spacepod/verb/fireWeapon() set name = "Fire Pod Weapons" @@ -839,7 +829,6 @@ obj/spacepod/proc/add_equipment(mob/user, var/obj/item/device/spacepod_equipment to_chat(usr, "Lights toggled [lights ? "on" : "off"].") for(var/mob/M in passengers) to_chat(M, "Lights toggled [lights ? "on" : "off"].") - return /obj/spacepod/verb/checkSeat() set name = "Check under Seat" @@ -848,7 +837,7 @@ obj/spacepod/proc/add_equipment(mob/user, var/obj/item/device/spacepod_equipment var/mob/user = usr to_chat(user, "You start rooting around under the seat for lost items") if(do_after(user, 40, target = src)) - var/obj/badlist = list(internal_tank, cargo_hold, pilot, battery) + equipment_system.get_list() + var/obj/badlist = list(internal_tank, cargo_hold, pilot, battery) + passengers + equipment_system.installed_modules var/list/true_contents = contents - badlist if(true_contents.len > 0) var/obj/I = pick(true_contents) @@ -881,7 +870,6 @@ obj/spacepod/proc/add_equipment(mob/user, var/obj/item/device/spacepod_equipment if(spacepod.cabin_air && spacepod.cabin_air.return_volume() > 0) var/delta = spacepod.cabin_air.temperature - T20C spacepod.cabin_air.temperature -= max(-10, min(10, round(delta/4,0.1))) - return /datum/global_iterator/pod_tank_give_air delay = 15 @@ -914,7 +902,6 @@ obj/spacepod/proc/add_equipment(mob/user, var/obj/item/device/spacepod_equipment qdel(removed) else return stop() - return /obj/spacepod/relaymove(mob/user, direction) if(usr != src.pilot)