From 0ab1a02ac8f5615500481b4a08a7ee7c2e58c3e3 Mon Sep 17 00:00:00 2001 From: Tigercat2000 Date: Sun, 15 Mar 2015 17:59:22 +0100 Subject: [PATCH 1/2] EMP_Act for spacepods, disables movement, eats cell charge, largely impacts health, also makes ion rifles work correctly against pods --- code/game/vehicles/spacepods/spacepod.dm | 52 +++++++++++++++++++++--- 1 file changed, 46 insertions(+), 6 deletions(-) diff --git a/code/game/vehicles/spacepods/spacepod.dm b/code/game/vehicles/spacepods/spacepod.dm index 91d3b5935a0..0d3102c1d00 100644 --- a/code/game/vehicles/spacepods/spacepod.dm +++ b/code/game/vehicles/spacepods/spacepod.dm @@ -30,6 +30,7 @@ var/lights = 0 var/lights_power = 6 var/allow2enter = 1 + var/empcounter = 0 //Used for disabling movement when hit by an EMP /obj/spacepod/New() . = ..() @@ -56,6 +57,13 @@ spacepods_list -= src ..() +/obj/spacepod/process() + if(src.empcounter > 0) + src.empcounter-- + else + processing_objects.Remove(src) + + /obj/spacepod/proc/update_icons() if(!pod_overlays) pod_overlays = new/list(2) @@ -72,6 +80,8 @@ /obj/spacepod/bullet_act(var/obj/item/projectile/P) if(P.damage && !P.nodamage) deal_damage(P.damage) + else if(P.flag == "energy" && istype(P,/obj/item/projectile/ion)) //needed to make sure ions work properly + empulse(src, 1, 1) /obj/spacepod/blob_act() deal_damage(30) @@ -159,6 +169,36 @@ if(prob(40)) deal_damage(50) +/obj/spacepod/emp_act(severity) + switch(severity) + if(1) + if(src.occupant) + src.occupant << "The pod console flashes 'Heavy EMP WAVE DETECTED'." //warn the occupants + if(src.occupant2) + src.occupant2 << "The pod console flashes 'EMP WAVE DETECTED'." //warn the occupants + + if(battery) + battery.charge = max(0, battery.charge - 5000) //Cell EMP act is too weak, this pod needs to be sapped. + src.deal_damage(100) + if(src.empcounter < 40) + src.empcounter = 40 //Disable movement for 40 ticks. Plenty long enough. + processing_objects.Add(src) + + if(2) + if(src.occupant) + src.occupant << "The pod console flashes 'EMP WAVE DETECTED'." //warn the occupants + if(src.occupant2) + src.occupant2 << "The pod console flashes 'EMP WAVE DETECTED'." //warn the occupants + + src.deal_damage(40) + if(battery) + battery.charge = max(0, battery.charge - 2500) //Cell EMP act is too weak, this pod needs to be sapped. + if(src.empcounter < 20) + src.empcounter = 20 //Disable movement for 20 ticks. + processing_objects.Add(src) + + + /obj/spacepod/attackby(obj/item/W as obj, mob/user as mob, params) if(iscrowbar(W)) hatch_open = !hatch_open @@ -454,10 +494,6 @@ else if(src.occupant2 && !src.occupant) usr << "\red You can't put a corpse into the driver's seat!" return - else - return - else - return else return else @@ -841,7 +877,7 @@ obj/spacepod/verb/toggleLights() if(src.occupant2) if(user.ckey != src.occupant2.ckey) var/moveship = 1 - if(battery && battery.charge >= 3 && health) + if(battery && battery.charge >= 3 && health && empcounter == 0) src.dir = direction switch(direction) if(1) @@ -871,6 +907,8 @@ obj/spacepod/verb/toggleLights() user << "Not enough charge left." else if(!health) user << "She's dead, Jim" + else if(empcounter != 0) + user << "The pod control interface isn't responding. The console indicates [empcounter] seconds before reboot." else user << "Unknown error has occurred, yell at pomf." return 0 @@ -880,7 +918,7 @@ obj/spacepod/verb/toggleLights() else var/moveship = 1 - if(battery && battery.charge >= 3 && health) + if(battery && battery.charge >= 3 && health && empcounter == 0) src.dir = direction switch(direction) if(1) @@ -910,6 +948,8 @@ obj/spacepod/verb/toggleLights() user << "Not enough charge left." else if(!health) user << "She's dead, Jim" + else if(empcounter != 0) + user << "The pod control interface isn't responding. The console indicates [empcounter] seconds before reboot." else user << "Unknown error has occurred, yell at pomf." return 0 From 47d5fbaa4de8a24b13931d0158709d159423f70c Mon Sep 17 00:00:00 2001 From: Tigercat2000 Date: Sun, 15 Mar 2015 20:55:47 +0100 Subject: [PATCH 2/2] Optimizing code, WIP --- code/game/vehicles/spacepods/spacepod.dm | 178 ++++++++--------------- 1 file changed, 64 insertions(+), 114 deletions(-) diff --git a/code/game/vehicles/spacepods/spacepod.dm b/code/game/vehicles/spacepods/spacepod.dm index 0d3102c1d00..aea443181fd 100644 --- a/code/game/vehicles/spacepods/spacepod.dm +++ b/code/game/vehicles/spacepods/spacepod.dm @@ -754,16 +754,7 @@ return /obj/spacepod/verb/fireWeapon() - if(src.occupant2) - if(usr.ckey != src.occupant2.ckey) - set name = "Fire Pod Weapons" - set desc = "Fire the weapons." - set category = "Spacepod" - set src = usr.loc - equipment_system.weapon_system.fire_weapons() - else - return - else + if(!CheckIfOccupant2(usr)) set name = "Fire Pod Weapons" set desc = "Fire the weapons." set category = "Spacepod" @@ -771,35 +762,20 @@ equipment_system.weapon_system.fire_weapons() obj/spacepod/verb/toggleLights() - if(src.occupant2) - if(usr.ckey != src.occupant2.ckey) - set name = "Toggle Lights" - set category = "Spacepod" - set src = usr.loc - if (usr != occupant) - return - lights = !lights - if(lights) - SetLuminosity(luminosity + lights_power) - else - SetLuminosity(luminosity - lights_power) - occupant << "Toggled lights [lights?"on":"off"]." - return - else - return + set name = "Toggle Lights" + set category = "Spacepod" + set src = usr.loc + if(!CheckIfOccupant2(usr)) + lightsToggle() + +/obj/spacepod/proc/lightsToggle() + lights = !lights + if(lights) + SetLuminosity(luminosity + lights_power) else - set name = "Toggle Lights" - set category = "Spacepod" - set src = usr.loc - if (usr != occupant) - return - lights = !lights - if(lights) - SetLuminosity(luminosity + lights_power) - else - SetLuminosity(luminosity - lights_power) - occupant << "Toggled lights [lights?"on":"off"]." - return + SetLuminosity(luminosity - lights_power) + occupant << "Toggled lights [lights?"on":"off"]." + return /obj/spacepod/proc/enter_after(delay as num, var/mob/user as mob, var/numticks = 5) var/delayfraction = delay/numticks @@ -874,86 +850,60 @@ obj/spacepod/verb/toggleLights() return 1 /obj/spacepod/relaymove(mob/user, direction) - if(src.occupant2) - if(user.ckey != src.occupant2.ckey) - var/moveship = 1 - if(battery && battery.charge >= 3 && health && empcounter == 0) - src.dir = direction - switch(direction) - if(1) - if(inertia_dir == 2) - inertia_dir = 0 - moveship = 0 - if(2) - if(inertia_dir == 1) - inertia_dir = 0 - moveship = 0 - if(4) - if(inertia_dir == 8) - inertia_dir = 0 - moveship = 0 - if(8) - if(inertia_dir == 4) - inertia_dir = 0 - moveship = 0 - if(moveship) - step(src, direction) - if(istype(src.loc, /turf/space)) - inertia_dir = direction - else - if(!battery) - user << "No energy cell detected." - else if(battery.charge < 3) - user << "Not enough charge left." - else if(!health) - user << "She's dead, Jim" - else if(empcounter != 0) - user << "The pod control interface isn't responding. The console indicates [empcounter] seconds before reboot." - else - user << "Unknown error has occurred, yell at pomf." - return 0 - battery.charge = max(0, battery.charge - 3) - else - return + if(!CheckIfOccupant2(user)) + handlerelaymove(user, direction) else - var/moveship = 1 - if(battery && battery.charge >= 3 && health && empcounter == 0) - src.dir = direction - switch(direction) - if(1) - if(inertia_dir == 2) - inertia_dir = 0 - moveship = 0 - if(2) - if(inertia_dir == 1) - inertia_dir = 0 - moveship = 0 - if(4) - if(inertia_dir == 8) - inertia_dir = 0 - moveship = 0 - if(8) - if(inertia_dir == 4) - inertia_dir = 0 - moveship = 0 - if(moveship) - step(src, direction) - if(istype(src.loc, /turf/space)) - inertia_dir = direction + return + +/obj/spacepod/proc/handlerelaymove(mob/user, direction) + var/moveship = 1 + if(battery && battery.charge >= 3 && health && empcounter == 0) + src.dir = direction + switch(direction) + if(1) + if(inertia_dir == 2) + inertia_dir = 0 + moveship = 0 + if(2) + if(inertia_dir == 1) + inertia_dir = 0 + moveship = 0 + if(4) + if(inertia_dir == 8) + inertia_dir = 0 + moveship = 0 + if(8) + if(inertia_dir == 4) + inertia_dir = 0 + moveship = 0 + if(moveship) + step(src, direction) + if(istype(src.loc, /turf/space)) + inertia_dir = direction + else + if(!battery) + user << "No energy cell detected." + else if(battery.charge < 3) + user << "Not enough charge left." + else if(!health) + user << "She's dead, Jim" + else if(empcounter != 0) + user << "The pod control interface isn't responding. The console indicates [empcounter] seconds before reboot." + else + user << "Unknown error has occurred, yell at pomf." + return 0 + battery.charge = max(0, battery.charge - 3) + +/obj/spacepod/proc/CheckIfOccupant2(mob/user) + if(!src.occupant2) + return 0 + if(src.occupant2) + if(user == src.occupant2) + return 1 else - if(!battery) - user << "No energy cell detected." - else if(battery.charge < 3) - user << "Not enough charge left." - else if(!health) - user << "She's dead, Jim" - else if(empcounter != 0) - user << "The pod control interface isn't responding. The console indicates [empcounter] seconds before reboot." - else - user << "Unknown error has occurred, yell at pomf." return 0 - battery.charge = max(0, battery.charge - 3) + /obj/effect/landmark/spacepod/random name = "spacepod spawner"