From 6dc7045f8de4f83ff8b83a62a72b5ec09ced788b Mon Sep 17 00:00:00 2001 From: Sprok0 Date: Mon, 24 Oct 2016 06:11:59 -0400 Subject: [PATCH] Upgrades the hoverpod large artifact (#12288) * makes hoverpod artifact not awful * not always phazon speed * drifts if no power --- code/game/mecha/equipment/tools/tools.dm | 50 +++++++-------- code/game/mecha/mecha.dm | 10 +-- code/game/mecha/mecha_control_console.dm | 6 +- code/game/mecha/working/ripley.dm | 61 +------------------ code/game/mecha/working/working.dm | 59 ++++++++++++++++++ .../artifact/artifact_hoverpod.dm | 22 +++++++ 6 files changed, 115 insertions(+), 93 deletions(-) diff --git a/code/game/mecha/equipment/tools/tools.dm b/code/game/mecha/equipment/tools/tools.dm index c2f9b29ef47..2862a40a650 100644 --- a/code/game/mecha/equipment/tools/tools.dm +++ b/code/game/mecha/equipment/tools/tools.dm @@ -8,7 +8,7 @@ energy_drain = 10 var/dam_force = 20 -/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp/can_attach(obj/mecha/working/ripley/M as obj) +/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp/can_attach(obj/mecha/working/M as obj) if(..()) if(istype(M)) return 1 @@ -16,24 +16,24 @@ /obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp/attach(obj/mecha/M as obj) ..() - if(istype(chassis, /obj/mecha/working/ripley)) - var/obj/mecha/working/ripley/R = chassis - R.hydraulic_clamp = src + if(istype(chassis, /obj/mecha/working)) + var/obj/mecha/working/W = chassis + W.hydraulic_clamp = src return /obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp/detach() ..() - if(istype(chassis, /obj/mecha/working/ripley)) - var/obj/mecha/working/ripley/R = chassis - R.hydraulic_clamp = null + if(istype(chassis, /obj/mecha/working)) + var/obj/mecha/working/W = chassis + W.hydraulic_clamp = null return /obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp/action(atom/target) if(!action_checks(target)) return - if(!istype(chassis, /obj/mecha/working/ripley)) + if(!istype(chassis, /obj/mecha/working)) return - var/obj/mecha/working/ripley/R = chassis + var/obj/mecha/working/W = chassis if(istype(target,/obj/machinery/power/supermatter)) var/obj/machinery/power/supermatter/supermatter = target @@ -56,18 +56,18 @@ FD.force_open(chassis.occupant, src) return if(!O.anchored) - if(istype(O, /obj/item/weapon/ore) && R.ore_box) + if(istype(O, /obj/item/weapon/ore) && W.ore_box) var/count = 0 for(var/obj/item/weapon/ore/I in get_turf(target)) if(I.material) - R.ore_box.materials.addAmount(I.material, 1) + W.ore_box.materials.addAmount(I.material, 1) returnToPool(I) count++ if(count) log_message("Loaded [count] ore into compatible ore box.") occupant_message("[count] ore successfully loaded into cargo compartment.") chassis.visible_message("[chassis] scoops up the ore from the ground and loads it into cargo compartment.") - else if(R.cargo.len < R.cargo_capacity) + else if(W.cargo.len < W.cargo_capacity) occupant_message("You lift [target] and start to load it into cargo compartment.") chassis.visible_message("[chassis] lifts [target] and starts to load it into cargo compartment.") set_ready_state(0) @@ -79,13 +79,13 @@ if(oh_shit_new_living_in_target.len) return if(T == chassis.loc && src == chassis.selected) - R.cargo += O + W.cargo += O O.forceMove(chassis) - if(!R.ore_box && istype(O, /obj/structure/ore_box)) - R.ore_box = O + if(!W.ore_box && istype(O, /obj/structure/ore_box)) + W.ore_box = O O.anchored = 0 //Why? occupant_message("[target] succesfully loaded.") - log_message("Loaded [O]. Cargo compartment capacity: [R.cargo_capacity - R.cargo.len]") + log_message("Loaded [O]. Cargo compartment capacity: [W.cargo_capacity - W.cargo.len]") else occupant_message("You must hold still while handling objects.") O.anchored = initial(O.anchored) //WHY?? @@ -168,13 +168,13 @@ if(get_dir(chassis,M)&chassis.dir) M.GetDrilled() log_message("Drilled through [target]") - if(istype(chassis, /obj/mecha/working/ripley)) - var/obj/mecha/working/ripley/R = chassis - if(R.hydraulic_clamp && R.ore_box) + if(istype(chassis, /obj/mecha/working)) + var/obj/mecha/working/W = chassis + if(W.hydraulic_clamp && W.ore_box) var/count = 0 for(var/obj/item/weapon/ore/ore in range(chassis,1)) if(get_dir(chassis,ore)&chassis.dir && ore.material) - R.ore_box.materials.addAmount(ore.material,1) + W.ore_box.materials.addAmount(ore.material,1) returnToPool(ore) count++ if(count) @@ -185,10 +185,10 @@ var/count = 0 var/obj/structure/ore_box/ore_box var/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp/hydraulic_clamp - if(istype(chassis, /obj/mecha/working/ripley)) - var/obj/mecha/working/ripley/R = chassis - ore_box = R.ore_box - hydraulic_clamp = R.hydraulic_clamp + if(istype(chassis, /obj/mecha/working)) + var/obj/mecha/working/W = chassis + ore_box = W.ore_box + hydraulic_clamp = W.hydraulic_clamp for(var/turf/unsimulated/floor/asteroid/M in range(chassis,1)) //Get a 3x3 area around the mech if(get_dir(chassis,M)&chassis.dir || istype(src, /obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill)) //Only dig frontmost 1x3 unless the drill is diamond M.gets_dug() @@ -247,7 +247,7 @@ energy_drain = 15 var/dam_force = 20 -/obj/item/mecha_parts/mecha_equipment/tool/scythe/can_attach(obj/mecha/working/ripley/M as obj) +/obj/item/mecha_parts/mecha_equipment/tool/scythe/can_attach(obj/mecha/working/M as obj) if(..()) if(istype(M)) return 1 diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index ab171a37bf9..aa9f0e3f919 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -618,12 +618,12 @@ loc.Exited(src) loc = null if(T) - if(istype(src, /obj/mecha/working/ripley/)) - var/obj/mecha/working/ripley/R = src - if(R.cargo) - for(var/obj/O in R.cargo) //Dump contents of stored cargo + if(istype(src, /obj/mecha/working/)) + var/obj/mecha/working/W = src + if(W.cargo) + for(var/obj/O in W.cargo) //Dump contents of stored cargo O.forceMove(T) - R.cargo -= O + W.cargo -= O T.Entered(O) if(prob(30)) diff --git a/code/game/mecha/mecha_control_console.dm b/code/game/mecha/mecha_control_console.dm index 6b1e75290a9..7d1a29fff5d 100644 --- a/code/game/mecha/mecha_control_console.dm +++ b/code/game/mecha/mecha_control_console.dm @@ -110,9 +110,9 @@ Pilot: [M.occupant||"None"]
Location: [get_area(M)||"Unknown"]
Active equipment: [M.selected||"None"]"} - if(istype(M, /obj/mecha/working/ripley)) - var/obj/mecha/working/ripley/RM = M - answer += " Used cargo space: [RM.cargo.len/RM.cargo_capacity*100]%
" + if(istype(M, /obj/mecha/working)) + var/obj/mecha/working/WM = M + answer += " Used cargo space: [WM.cargo.len/WM.cargo_capacity*100]%
" return answer diff --git a/code/game/mecha/working/ripley.dm b/code/game/mecha/working/ripley.dm index 4d226f712aa..7d5f43e83ea 100644 --- a/code/game/mecha/working/ripley.dm +++ b/code/game/mecha/working/ripley.dm @@ -7,10 +7,6 @@ max_temperature = 20000 health = 200 wreckage = /obj/effect/decal/mecha_wreckage/ripley - var/list/cargo = new - var/cargo_capacity = 15 - var/obj/structure/ore_box/ore_box //to save on locate() - var/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp/hydraulic_clamp /* /obj/mecha/working/ripley/New() @@ -72,59 +68,4 @@ D.attach(src) var/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp/HC = new /obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp HC.attach(src) - src.hydraulic_clamp = HC - -/obj/mecha/working/ripley/Exit(atom/movable/O) - if(O in cargo) - return 0 - return ..() - -/obj/mecha/working/ripley/Topic(href, href_list) - ..() - if(href_list["drop_from_cargo"]) - var/obj/O = locate(href_list["drop_from_cargo"]) - if(O && O in src.cargo) - src.occupant_message("You unload [O].") - O.forceMove(get_turf(src)) - src.cargo -= O - if (ore_box == O) - ore_box = locate(/obj/structure/ore_box) in cargo //i'll fix this later - src.log_message("Unloaded [O]. Cargo compartment capacity: [cargo_capacity - src.cargo.len]") - return - - - -/obj/mecha/working/ripley/get_stats_part() - var/output = ..() - output += "Cargo Compartment Contents:
" - if(src.cargo.len) - for(var/obj/O in src.cargo) - output += "Unload : [O]
" - else - output += "Nothing" - output += "
" - return output - -/obj/mecha/working/ripley/empty_bad_contents() - for(var/obj/O in src) - if(O in cargo) //mom's spaghetti - continue - if(!is_type_in_list(O,mech_parts)) - O.forceMove(src.loc) - return - -/obj/mecha/working/ripley/Destroy() - for(var/mob/M in src) - if(M==src.occupant) - continue - M.forceMove(get_turf(src)) - M.loc.Entered(M) - step_rand(M) - for(var/atom/movable/A in src.cargo) - A.forceMove(get_turf(src)) - var/turf/T = get_turf(A) - if(T) - T.Entered(A) - step_rand(A) - ..() - return + src.hydraulic_clamp = HC \ No newline at end of file diff --git a/code/game/mecha/working/working.dm b/code/game/mecha/working/working.dm index 594c50d18a2..e1702644a85 100644 --- a/code/game/mecha/working/working.dm +++ b/code/game/mecha/working/working.dm @@ -1,5 +1,9 @@ /obj/mecha/working internal_damage_threshold = 60 + var/list/cargo = new + var/cargo_capacity = 15 + var/obj/structure/ore_box/ore_box //to save on locate() + var/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp/hydraulic_clamp /* /obj/mecha/working/melee_action(atom/target as obj|mob|turf) @@ -25,3 +29,58 @@ output += "" return output */ + +/obj/mecha/working/Exit(atom/movable/O) + if(O in cargo) + return 0 + return ..() + +/obj/mecha/working/Topic(href, href_list) + ..() + if(href_list["drop_from_cargo"]) + var/obj/O = locate(href_list["drop_from_cargo"]) + if(O && O in src.cargo) + src.occupant_message("You unload [O].") + O.forceMove(get_turf(src)) + src.cargo -= O + if (ore_box == O) + ore_box = locate(/obj/structure/ore_box) in cargo //i'll fix this later + src.log_message("Unloaded [O]. Cargo compartment capacity: [cargo_capacity - src.cargo.len]") + return + + + +/obj/mecha/working/get_stats_part() + var/output = ..() + output += "Cargo Compartment Contents:
" + if(src.cargo.len) + for(var/obj/O in src.cargo) + output += "Unload : [O]
" + else + output += "Nothing" + output += "
" + return output + +/obj/mecha/working/empty_bad_contents() + for(var/obj/O in src) + if(O in cargo) //mom's spaghetti + continue + if(!is_type_in_list(O,mech_parts)) + O.forceMove(src.loc) + return + +/obj/mecha/working/Destroy() + for(var/mob/M in src) + if(M==src.occupant) + continue + M.forceMove(get_turf(src)) + M.loc.Entered(M) + step_rand(M) + for(var/atom/movable/A in src.cargo) + A.forceMove(get_turf(src)) + var/turf/T = get_turf(A) + if(T) + T.Entered(A) + step_rand(A) + ..() + return diff --git a/code/modules/research/xenoarchaeology/artifact/artifact_hoverpod.dm b/code/modules/research/xenoarchaeology/artifact/artifact_hoverpod.dm index 838c26a87c9..2dc61e0a287 100644 --- a/code/modules/research/xenoarchaeology/artifact/artifact_hoverpod.dm +++ b/code/modules/research/xenoarchaeology/artifact/artifact_hoverpod.dm @@ -2,11 +2,15 @@ /obj/mecha/working/hoverpod name = "hover pod" icon_state = "engineering_pod" + initial_icon = "engineering_pod" desc = "Stubby and round, it has a human sized access hatch on the top." + step_energy_drain = 2 + step_in = 1 wreckage = /obj/effect/decal/mecha_wreckage/hoverpod //duplicate of parent proc, but without space drifting /obj/mecha/working/hoverpod/dyndomove(direction) + stopMechWalking() if(!can_move) return 0 if(src.pr_inertial_movement.active()) @@ -14,6 +18,7 @@ if(!has_charge(step_energy_drain)) return 0 var/move_result = 0 + startMechWalking() if(hasInternalDamage(MECHA_INT_CONTROL_LOST)) move_result = mechsteprand() else if(src.dir!=direction) @@ -32,6 +37,18 @@ return 1 return 0 +/obj/mecha/working/hoverpod/startMechWalking() + ..() + var/turf/mech_turf = get_turf(src) + if(!istype(mech_turf, /turf)) + return + var/datum/gas_mixture/environment = mech_turf.return_air() + var/pressure = environment.return_pressure() + if(pressure > 50) + step_in = 4 + else + step_in = 1 + //these three procs overriden to play different sounds /obj/mecha/working/hoverpod/mechturn(direction) dir = direction @@ -51,6 +68,11 @@ playsound(src,'sound/machines/hiss.ogg',40,1) return result +/obj/mecha/working/hoverpod/can_apply_inertia() + if(has_charge(step_energy_drain)) + return 0 //doesn't drift in space if it has power + return 1 + /obj/effect/decal/mecha_wreckage/hoverpod name = "Hover pod wreckage" icon_state = "engineering_pod-broken"