Merge pull request #8515 from Kyep/depot

Reworks Syndicate Supply Depot
This commit is contained in:
Crazy Lemon
2018-08-07 09:34:02 -07:00
committed by GitHub
39 changed files with 2244 additions and 186 deletions
+4 -4
View File
@@ -17,8 +17,8 @@
if(announce)
event_announcement.Announce("Abnormal activity detected in [station_name()]'s powernet. As a precautionary measure, the station's power will be shut off for an indeterminate duration.", "Critical Power Failure", new_sound = 'sound/AI/poweroff.ogg')
var/list/skipped_areas = list(/area/turret_protected/ai)
var/list/skipped_areas_apc = list(/area/engine/engineering)
var/list/skipped_areas = list(/area/turret_protected/ai, /area/syndicate_depot)
var/list/skipped_areas_apc = list(/area/engine/engineering, /area/syndicate_depot)
for(var/obj/machinery/power/smes/S in machines)
var/area/current_area = get_area(S)
@@ -41,8 +41,8 @@
C.cell.charge = 0
/proc/power_restore(var/announce = 1)
var/list/skipped_areas = list(/area/turret_protected/ai)
var/list/skipped_areas_apc = list(/area/engine/engineering)
var/list/skipped_areas = list(/area/turret_protected/ai, /area/syndicate_depot)
var/list/skipped_areas_apc = list(/area/engine/engineering, /area/syndicate_depot)
if(announce)
event_announcement.Announce("Power has been restored to [station_name()]. We apologize for the inconvenience.", "Power Systems Nominal", new_sound = 'sound/AI/poweron.ogg')
+3 -2
View File
@@ -95,8 +95,9 @@
sideslist = list("valid", "salad")
credits = 20
/obj/item/coin/antagtoken/New()
return
/obj/item/coin/antagtoken/syndicate
name = "syndicate coin"
credits = 160
/obj/item/coin/attackby(obj/item/W as obj, mob/user as mob, params)
if(istype(W, /obj/item/stack/cable_coil))
@@ -1,10 +1,10 @@
/mob/living/silicon/decoy/death(gibbed)
if(stat == DEAD) return
if(stat == DEAD)
return
stat = DEAD
icon_state = "ai-crash"
spawn(10)
explosion(loc, 3, 6, 12, 15)
for(var/obj/machinery/ai_status_display/O in world) //change status
O.mode = 2
return ..(gibbed)
if(atoms_share_level(O, src))
O.mode = 2
..(0)
gib()
+46 -1
View File
@@ -4,9 +4,54 @@
icon_state = "ai"
anchored = 1 // -- TLE
canmove = 0
a_intent = INTENT_HARM // This is apparently the only thing that stops other mobs walking through them as if they were thin air.
/mob/living/silicon/decoy/New()
src.icon = 'icons/mob/AI.dmi'
src.icon_state = "ai"
src.anchored = 1
src.canmove = 0
src.canmove = 0
/mob/living/silicon/decoy/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/aicard))
to_chat(user, "<span class='warning'>You cannot find an intellicard slot on [src].</span>")
return TRUE
else
return ..()
/mob/living/silicon/decoy/syndicate
faction = list("syndicate")
name = "R.O.D.G.E.R"
desc = "Red Operations, Depot General Emission Regulator"
icon_state = "ai-magma"
/mob/living/silicon/decoy/syndicate/New()
. = ..()
icon_state = "ai-magma"
/mob/living/silicon/decoy/syndicate/depot
var/raised_alert = FALSE
/mob/living/silicon/decoy/syndicate/depot/proc/raise_alert()
raised_alert = TRUE
var/area/syndicate_depot/core/depotarea = get_area(src) // Cannot use myArea or areaMaster as neither will be defined for this mob type
if(istype(depotarea))
depotarea.increase_alert("AI Unit Offline")
else
say("Connection failure!")
/mob/living/silicon/decoy/syndicate/depot/death(pass)
if(!raised_alert)
raise_alert()
. = ..(pass)
/mob/living/silicon/decoy/syndicate/depot/adjustBruteLoss(dmg)
. = ..(dmg)
updatehealth()
/mob/living/silicon/decoy/syndicate/depot/adjustFireLoss(dmg)
. = ..(dmg)
updatehealth()
/mob/living/silicon/decoy/syndicate/depot/ex_act(severity)
adjustBruteLoss(250)
@@ -1,10 +1,5 @@
/mob/living/silicon/decoy/Life(seconds, times_fired)
if(src.stat == 2)
return
else
if(src.health <= config.health_threshold_dead && src.stat != 2)
death()
return
return
/mob/living/silicon/decoy/updatehealth()
@@ -13,3 +8,11 @@
stat = CONSCIOUS
else
health = 100 - getOxyLoss() - getToxLoss() - getFireLoss() - getBruteLoss()
update_stat()
/mob/living/silicon/decoy/update_stat()
if(stat == DEAD)
return
if(health <= 0)
death()
@@ -204,6 +204,10 @@
if(disabled)
return
ed209_ai()
/mob/living/simple_animal/bot/ed209/proc/ed209_ai()
var/list/targets = list()
for(var/mob/living/carbon/C in view(7, src)) //Let's find us a target
var/threatlevel = 0
@@ -45,6 +45,7 @@
var/treat_virus = 1 //If on, the bot will attempt to treat viral infections, curing them if possible.
var/shut_up = 0 //self explanatory :)
var/syndicate_aligned = FALSE // Will it only treat operatives?
var/drops_parts = TRUE
/mob/living/simple_animal/bot/medbot/tox
skin = "tox"
@@ -77,6 +78,7 @@
name = "Suspicious Medibot"
desc = "You'd better have insurance!"
skin = "bezerk"
faction = list("syndicate")
treatment_oxy = "perfluorodecalin"
treatment_brute = "bicaridine"
treatment_fire = "kelotane"
@@ -91,6 +93,11 @@
..()
Radio.syndie = 1
/mob/living/simple_animal/bot/medbot/syndicate/emagged
emagged = 2
declare_crit = 0
drops_parts = FALSE
/mob/living/simple_animal/bot/medbot/update_icon()
overlays.Cut()
if(skin)
@@ -554,36 +561,37 @@
visible_message("<span class='userdanger'>[src] blows apart!</span>")
var/turf/Tsec = get_turf(src)
switch(skin)
if("ointment")
new /obj/item/storage/firstaid/fire/empty(Tsec)
if("tox")
new /obj/item/storage/firstaid/toxin/empty(Tsec)
if("o2")
new /obj/item/storage/firstaid/o2/empty(Tsec)
if("brute")
new /obj/item/storage/firstaid/brute/empty(Tsec)
if("adv")
new /obj/item/storage/firstaid/adv/empty(Tsec)
if("bezerk")
var/obj/item/storage/firstaid/tactical/empty/T = new(Tsec)
T.syndicate_aligned = syndicate_aligned //This is a special case since Syndicate medibots and the mysterious medibot look the same; we also dont' want crew building Syndicate medibots if the mysterious medibot blows up.
if("fish")
new /obj/item/storage/firstaid/aquatic_kit(Tsec)
else
new /obj/item/storage/firstaid(Tsec)
if(drops_parts)
switch(skin)
if("ointment")
new /obj/item/storage/firstaid/fire/empty(Tsec)
if("tox")
new /obj/item/storage/firstaid/toxin/empty(Tsec)
if("o2")
new /obj/item/storage/firstaid/o2/empty(Tsec)
if("brute")
new /obj/item/storage/firstaid/brute/empty(Tsec)
if("adv")
new /obj/item/storage/firstaid/adv/empty(Tsec)
if("bezerk")
var/obj/item/storage/firstaid/tactical/empty/T = new(Tsec)
T.syndicate_aligned = syndicate_aligned //This is a special case since Syndicate medibots and the mysterious medibot look the same; we also dont' want crew building Syndicate medibots if the mysterious medibot blows up.
if("fish")
new /obj/item/storage/firstaid/aquatic_kit(Tsec)
else
new /obj/item/storage/firstaid(Tsec)
new /obj/item/assembly/prox_sensor(Tsec)
new /obj/item/assembly/prox_sensor(Tsec)
new /obj/item/healthanalyzer(Tsec)
new /obj/item/healthanalyzer(Tsec)
if(prob(50))
new /obj/item/robot_parts/l_arm(Tsec)
if(reagent_glass)
reagent_glass.forceMove(Tsec)
reagent_glass = null
if(prob(50))
new /obj/item/robot_parts/l_arm(Tsec)
if(emagged && prob(25))
playsound(loc, 'sound/voice/minsult.ogg', 50, 0)
@@ -0,0 +1,216 @@
/mob/living/simple_animal/bot/ed209/syndicate
name = "Syndicate Sentry Bot"
desc = "A syndicate security bot."
model = "Guardian"
icon = 'icons/mecha/mecha.dmi'
icon_state = "darkgygax"
radio_channel = "Syndicate"
health = 300
maxHealth = 300
declare_arrests = 0
idcheck = 1
arrest_type = 1
auto_patrol = 1
emagged = 2
faction = list("syndicate")
shoot_sound = 'sound/weapons/wave.ogg'
anchored = 1
pressure_resistance = 100 //100 kPa difference required to push
throw_pressure_limit = 120
window_id = "syndiebot"
window_name = "Syndicate Bot Interface"
var/turf/saved_turf
var/stepsound = 'sound/mecha/mechstep.ogg'
var/area/syndicate_depot/core/depotarea
var/raised_alert = FALSE
var/pathing_failed = FALSE
var/turf/spawn_turf
/mob/living/simple_animal/bot/ed209/syndicate/New()
..()
if(access_card)
access_card.access = list(access_syndicate, access_syndicate_leader)
set_weapon()
update_icon()
spawn_turf = get_turf(src)
/mob/living/simple_animal/bot/ed209/syndicate/update_icon()
icon_state = initial(icon_state)
/mob/living/simple_animal/bot/ed209/syndicate/turn_on()
. = ..()
update_icon()
/mob/living/simple_animal/bot/ed209/syndicate/turn_off()
..()
update_icon()
/mob/living/simple_animal/bot/ed209/syndicate/get_controls(mob/user)
to_chat(user, "<span class='warning'>[src] has no accessible control panel!</span>")
return
/mob/living/simple_animal/bot/ed209/syndicate/show_controls(mob/M)
return
/mob/living/simple_animal/bot/ed209/syndicate/Topic(href, href_list)
return
/mob/living/simple_animal/bot/ed209/syndicate/retaliate(mob/living/carbon/human/H)
if(!H)
return
target = H
mode = BOT_HUNT
/mob/living/simple_animal/bot/ed209/syndicate/emag_act(mob/user)
to_chat(user, "<span class='warning'>[src] has no card reader slot!</span>")
/mob/living/simple_animal/bot/ed209/syndicate/ed209_ai()
var/turf/current_turf = get_turf(src)
if(saved_turf && current_turf != saved_turf)
playsound(loc, stepsound, 40, 1)
if(spawn_turf && !atoms_share_level(src, spawn_turf))
raise_alert("[src] lost in space.")
raised_alert = FALSE
raise_alert("[src] activated self-destruct.")
qdel(src)
saved_turf = current_turf
switch(mode)
if(BOT_IDLE)
walk_to(src,0)
look_for_perp()
if(!mode && auto_patrol)
mode = BOT_START_PATROL
if(BOT_HUNT)
if(frustration >= 8)
walk_to(src,0)
back_to_idle()
if(target)
if(isliving(target))
if(target.stat == DEAD)
back_to_idle()
return
shootAt(target)
var/turf/olddist = get_dist(src, target)
walk_to(src, target,1,4)
if((get_dist(src, target)) >= (olddist))
frustration++
else
frustration = 0
else
back_to_idle()
if(BOT_START_PATROL)
look_for_perp()
start_patrol()
if(BOT_PATROL)
look_for_perp()
bot_patrol()
else
back_to_idle()
return
/mob/living/simple_animal/bot/ed209/syndicate/look_for_perp()
if(disabled)
return
for(var/mob/M in view(7, src))
if(M.invisibility > see_invisible)
continue
if("syndicate" in M.faction)
continue
if(M.stat == DEAD)
continue
if((M.name == oldtarget_name) && (world.time < last_found + 100))
continue
target = M
oldtarget_name = M.name
mode = BOT_HUNT
spawn(0)
handle_automated_action()
break
for(var/obj/spacepod/P in view(7, src))
if((P.name == oldtarget_name) && (world.time < last_found + 100))
continue
if(!P.pilot)
continue
if("syndicate" in P.pilot.faction)
continue
if(P.pilot.stat == DEAD)
continue
target = P
oldtarget_name = P.name
mode = BOT_HUNT
spawn(0)
handle_automated_action()
break
/mob/living/simple_animal/bot/ed209/syndicate/shootAt(atom/target)
if(lastfired && world.time - lastfired < shot_delay)
return
lastfired = world.time
var/obj/item/projectile/P = new projectile(loc)
playsound(loc, shoot_sound, 100, 1)
P.current = loc
P.starting = loc
P.firer = src
P.yo = target.y - loc.y
P.xo = target.x - loc.x
P.original = target
P.fire()
/mob/living/simple_animal/bot/ed209/syndicate/explode()
if (!QDELETED(src))
if(depotarea)
depotarea.list_remove(src, depotarea.guard_list)
walk_to(src,0)
visible_message("<span class='userdanger'>[src] blows apart!</span>")
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(3, 1, src)
s.start()
new /obj/effect/decal/cleanable/blood/oil(loc)
var/obj/effect/decal/mecha_wreckage/gygax/dark/wreck = new /obj/effect/decal/mecha_wreckage/gygax/dark(loc)
wreck.name = "sentry bot wreckage"
raise_alert("[src] destroyed.")
qdel(src)
/mob/living/simple_animal/bot/ed209/syndicate/set_weapon()
projectile = /obj/item/projectile/bullet/a40mm
/mob/living/simple_animal/bot/ed209/syndicate/emp_act(severity)
return
/mob/living/simple_animal/bot/ed209/UnarmedAttack(atom/A)
if(!on)
return
shootAt(A)
/mob/living/simple_animal/bot/ed209/syndicate/cuff(mob/living/carbon/C)
shootAt(C)
/mob/living/simple_animal/bot/ed209/syndicate/stun_attack(mob/living/carbon/C)
shootAt(C)
/mob/living/simple_animal/bot/ed209/syndicate/speak()
return
/mob/living/simple_animal/bot/ed209/syndicate/Process_Spacemove(movement_dir = 0)
return 1
/mob/living/simple_animal/bot/ed209/syndicate/start_patrol()
if(tries >= BOT_STEP_MAX_RETRIES)
if(!pathing_failed)
pathing_failed = TRUE
var/failmsg = "Depot: [src] at [loc.x],[loc.y],[loc.z] lacks patrol target."
if(istype(patrol_target))
failmsg = "Depot: [src] at [loc.x],[loc.y],[loc.z] cannot reach [patrol_target.x],[patrol_target.y]"
log_debug(failmsg)
return ..()
/mob/living/simple_animal/bot/ed209/syndicate/proc/raise_alert(reason)
if(raised_alert)
return
raised_alert = TRUE
if(depotarea)
depotarea.increase_alert(reason)
@@ -115,6 +115,11 @@
corpseidjob = "Operative"
corpseidaccess = "Syndicate"
/obj/effect/landmark/mobcorpse/syndicateautogib/createCorpse()
var/mob/living/carbon/human/M = new /mob/living/carbon/human(loc)
M.real_name = src.name
M.gib()
qdel(src)
/obj/effect/landmark/mobcorpse/clown
@@ -39,17 +39,20 @@
armour_penetration = 28
status_flags = 0
loot = list(/obj/effect/landmark/mobcorpse/syndicatesoldier, /obj/item/melee/energy/sword/saber/red, /obj/item/shield/energy)
var/melee_block_chance = 20
/mob/living/simple_animal/hostile/syndicate/melee/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
user.changeNext_move(CLICK_CD_MELEE)
user.do_attack_animation(src)
if(O.force)
if(prob(80))
if(prob(melee_block_chance))
visible_message("<span class='boldwarning'>[src] blocks the [O] with its shield! </span>")
else
var/damage = O.force
if(O.damtype == STAMINA)
damage = 0
health -= damage
visible_message("<span class='boldwarning'>[src] has been attacked with the [O] by [user]. </span>")
else
visible_message("<span class='boldwarning'>[src] blocks the [O] with its shield! </span>")
playsound(loc, O.hitsound, 25, 1, -1)
else
to_chat(usr, "<span class='warning'>This weapon is ineffective, it does no damage.</span>")
@@ -65,19 +68,182 @@
visible_message("<span class='danger'>[src] blocks [Proj] with its shield!</span>")
return 0
/mob/living/simple_animal/hostile/syndicate/melee/autogib
loot = list(/obj/effect/landmark/mobcorpse/syndicateautogib)
/mob/living/simple_animal/hostile/syndicate/melee/space
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot
name = "Syndicate Operative"
force_threshold = 6 // Prevents people using punches to bypass eshield
robust_searching = 1 // Together with stat_attack, ensures dionae/etc that regen are killed properly
stat_attack = 1
universal_speak = 1
melee_block_chance = 40
var/area/syndicate_depot/core/depotarea
var/raised_alert = FALSE
var/alert_on_death = FALSE
var/alert_on_timeout = FALSE
var/alert_on_spacing = TRUE
var/alert_on_shield_breach = FALSE
var/seen_enemy = FALSE
var/seen_enemy_name = null
var/seen_revived_enemy = FALSE
var/aggro_cycles = 0
var/scan_cycles = 0
var/shield_key = FALSE
var/turf/spawn_turf
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/New()
..()
name = "[name] [pick(last_names)]"
depotarea = areaMaster
spawn_turf = get_turf(src)
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/Aggro()
. = ..()
if(target && istype(depotarea))
if(!seen_enemy)
seen_enemy = TRUE
playsound(loc, 'sound/weapons/saberon.ogg', 35, 1)
if(alert_on_shield_breach)
if(depotarea.shield_list.len)
raise_alert("[name] reports that an intruder is trying to breach the armory shield!")
alert_on_shield_breach = FALSE
raised_alert = FALSE
alert_on_death = TRUE
if(isliving(target))
var/mob/living/M = target
depotarea.list_add(M, depotarea.hostile_list)
if(M.mind && M.mind.special_role == SPECIAL_ROLE_TRAITOR)
depotarea.saw_double_agent(M)
depotarea.declare_started()
seen_enemy_name = target.name
if(istype(target, /obj/mecha))
depotarea.saw_mech(target)
if(istype(target, /obj/spacepod))
depotarea.saw_pod(target)
if(depotarea.list_includes(target, depotarea.dead_list))
seen_revived_enemy = TRUE
raise_alert("[name] reports intruder [target] has returned from death!")
depotarea.list_remove(target, depotarea.dead_list)
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/handle_automated_action()
if(seen_enemy)
aggro_cycles++
if(alert_on_timeout && !raised_alert && aggro_cycles >= 60)
raise_alert("[name] has reported contact with hostile entity: [seen_enemy_name]")
if(scan_cycles >= 15 && istype(depotarea))
scan_cycles = 0
if(!atoms_share_level(src, spawn_turf))
if(alert_on_spacing)
raise_alert("[src] lost in space.")
death()
return
for(var/mob/living/body in hearers(vision_range, targets_from))
if(body.stat != DEAD)
continue
if(depotarea.list_includes(body, depotarea.dead_list))
continue
if(faction_check(body))
continue
say("Target [body]... terminated.")
depotarea.list_add(body, depotarea.dead_list)
pointed(body)
else
scan_cycles++
..()
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/proc/raise_alert(var/reason)
if(istype(depotarea) && (!raised_alert || seen_revived_enemy) && !depotarea.used_self_destruct)
raised_alert = TRUE
say("Intruder!")
depotarea.increase_alert(reason)
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/death()
if(alert_on_death)
if(seen_enemy_name)
raise_alert("[name] has died in combat with [seen_enemy_name].")
else
raise_alert("[name] has died.")
if(shield_key && depotarea)
depotarea.shields_key_check()
if(depotarea)
depotarea.list_remove(src, depotarea.guard_list)
return ..()
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/CanPass(atom/movable/mover, turf/target, height=0)
if(isliving(mover))
var/mob/living/blocker = mover
if(faction_check(blocker))
return 1
return ..(mover, target, height)
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/officer
name = "Syndicate Officer"
alert_on_death = TRUE
alert_on_timeout = TRUE
melee_block_chance = 60
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/armory
name = "Syndicate Quartermaster"
icon_state = "syndicatemeleespace"
icon_living = "syndicatemeleespace"
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0
maxHealth = 250
health = 250
melee_block_chance = 80
alert_on_timeout = TRUE
alert_on_shield_breach = TRUE
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/armory/death()
if(depotarea)
depotarea.declare_finished()
return ..()
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/armory/Initialize()
. = ..()
if(istype(depotarea))
var/list/key_candidates = list()
for(var/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/officer/O in living_mob_list)
if(O == src)
continue
key_candidates += O
if(key_candidates.len)
var/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/officer/O = pick(key_candidates)
O.shield_key = TRUE
depotarea.shields_up()
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/space
name = "Syndicate Backup"
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0
icon_state = "syndicatemeleespace"
icon_living = "syndicatemeleespace"
speed = 1
wander = 0
alert_on_spacing = FALSE
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/space/Process_Spacemove(var/movement_dir = 0)
return
/mob/living/simple_animal/hostile/syndicate/melee/space
name = "Syndicate Commando"
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0
icon_state = "syndicatemeleespace"
icon_living = "syndicatemeleespace"
speed = 1
loot = list(/obj/effect/landmark/mobcorpse/syndicatecommando, /obj/item/melee/energy/sword/saber/red, /obj/item/shield/energy)
/mob/living/simple_animal/hostile/syndicate/melee/space/Process_Spacemove(var/movement_dir = 0)
return
/mob/living/simple_animal/hostile/syndicate/ranged
ranged = 1
rapid = 1
@@ -97,10 +263,11 @@
speed = 1
loot = list(/obj/effect/landmark/mobcorpse/syndicatecommando, /obj/item/gun/projectile/automatic/c20r)
/mob/living/simple_animal/hostile/syndicate/ranged/space/Process_Spacemove(var/movement_dir = 0)
return
/mob/living/simple_animal/hostile/syndicate/ranged/space/autogib
loot = list(/obj/effect/landmark/mobcorpse/syndicateautogib)
/mob/living/simple_animal/hostile/viscerator
+9
View File
@@ -121,3 +121,12 @@
..()
new /obj/item/documents/syndicate/blue(src)
update_icon()
/obj/item/folder/syndicate/yellow
icon_state = "folder_syellow"
/obj/item/folder/syndicate/yellow/full/New()
..()
new /obj/item/documents/syndicate/yellow(src)
update_icon()
@@ -198,7 +198,7 @@
..()
select_fire(usr)
/obj/item/gun/energy/wormhole_projector/proc/portal_destroyed(obj/effect/portal/P)
/obj/item/gun/energy/wormhole_projector/portal_destroyed(obj/effect/portal/P)
if(P.icon_state == "portal")
blue = null
if(orange)
+4 -1
View File
@@ -557,11 +557,14 @@ obj/spacepod/proc/add_equipment(mob/user, var/obj/item/spacepod_equipment/SPE, v
/obj/spacepod/syndi
name = "syndicate spacepod"
desc = "An armed spacepod painted in syndicate colors."
desc = "A spacepod painted in syndicate colors."
icon_state = "pod_synd"
health = 400
unlocked = FALSE
/obj/spacepod/syndi/unlocked
unlocked = TRUE
/obj/spacepod/sec/New()
..()
var/obj/item/spacepod_equipment/weaponry/burst_taser/T = new /obj/item/spacepod_equipment/weaponry/taser