mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-10 18:32:03 +00:00
Upgrades the hoverpod large artifact (#12288)
* makes hoverpod artifact not awful * not always phazon speed * drifts if no power
This commit is contained in:
@@ -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("<font color='blue'>[count] ore successfully loaded into cargo compartment.</font>")
|
||||
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("<font color='blue'>[target] succesfully loaded.</font>")
|
||||
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("<font color='red'>You must hold still while handling objects.</font>")
|
||||
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
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -110,9 +110,9 @@
|
||||
<b>Pilot:</b> [M.occupant||"None"]<br>
|
||||
<b>Location:</b> [get_area(M)||"Unknown"]<br>
|
||||
<b>Active equipment:</b> [M.selected||"None"]"}
|
||||
if(istype(M, /obj/mecha/working/ripley))
|
||||
var/obj/mecha/working/ripley/RM = M
|
||||
answer += "<b> Used cargo space:</b> [RM.cargo.len/RM.cargo_capacity*100]%<br>"
|
||||
if(istype(M, /obj/mecha/working))
|
||||
var/obj/mecha/working/WM = M
|
||||
answer += "<b> Used cargo space:</b> [WM.cargo.len/WM.cargo_capacity*100]%<br>"
|
||||
|
||||
return answer
|
||||
|
||||
|
||||
@@ -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("<span class='notice'>You unload [O].</span>")
|
||||
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 += "<b>Cargo Compartment Contents:</b><div style=\"margin-left: 15px;\">"
|
||||
if(src.cargo.len)
|
||||
for(var/obj/O in src.cargo)
|
||||
output += "<a href='?src=\ref[src];drop_from_cargo=\ref[O]'>Unload</a> : [O]<br>"
|
||||
else
|
||||
output += "Nothing"
|
||||
output += "</div>"
|
||||
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
|
||||
@@ -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 += "</div>"
|
||||
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("<span class='notice'>You unload [O].</span>")
|
||||
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 += "<b>Cargo Compartment Contents:</b><div style=\"margin-left: 15px;\">"
|
||||
if(src.cargo.len)
|
||||
for(var/obj/O in src.cargo)
|
||||
output += "<a href='?src=\ref[src];drop_from_cargo=\ref[O]'>Unload</a> : [O]<br>"
|
||||
else
|
||||
output += "Nothing"
|
||||
output += "</div>"
|
||||
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
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user