mirror of
https://github.com/goonstation/goonstation-2016.git
synced 2026-08-23 14:06:14 +01:00
Initial Commit
This commit is contained in:
@@ -0,0 +1,294 @@
|
||||
/obj/spawner
|
||||
name = "object spawner"
|
||||
|
||||
/obj/spawner/bomb
|
||||
name = "bomb"
|
||||
icon = 'icons/mob/screen1.dmi'
|
||||
icon_state = "x"
|
||||
var/btype = 0 //0 = radio, 1= prox, 2=time
|
||||
var/explosive = 1 // 0= firebomb
|
||||
var/btemp = 1000 // bomb temperature (degC)
|
||||
var/active = 0
|
||||
|
||||
/obj/spawner/bomb/radio
|
||||
btype = 0
|
||||
|
||||
/obj/spawner/bomb/proximity
|
||||
btype = 1
|
||||
|
||||
/obj/spawner/bomb/timer
|
||||
btype = 2
|
||||
|
||||
/obj/spawner/bomb/timer/syndicate
|
||||
btemp = 2000
|
||||
|
||||
//
|
||||
/obj/spawner/newbomb
|
||||
name = "bomb"
|
||||
icon = 'icons/mob/screen1.dmi'
|
||||
icon_state = "x"
|
||||
var/btype = 0 // 0=radio, 1=prox, 2=time
|
||||
var/btemp1 = 1500
|
||||
var/btemp2 = 1000 // tank temperatures
|
||||
|
||||
timer
|
||||
btype = 2
|
||||
|
||||
syndicate
|
||||
btemp1 = 1700
|
||||
btemp2 = 900
|
||||
|
||||
proximity
|
||||
btype = 1
|
||||
|
||||
radio
|
||||
btype = 0
|
||||
|
||||
/obj/spawner/bomb/New()
|
||||
..()
|
||||
|
||||
switch (src.btype)
|
||||
// radio
|
||||
if (0)
|
||||
var/obj/item/assembly/radio_bomb/R = new /obj/item/assembly/radio_bomb(src.loc)
|
||||
var/obj/item/tank/plasma/p3 = new /obj/item/tank/plasma(R)
|
||||
var/obj/item/device/radio/signaler/p1 = new /obj/item/device/radio/signaler(R)
|
||||
var/obj/item/device/igniter/p2 = new /obj/item/device/igniter(R)
|
||||
R.part1 = p1
|
||||
R.part2 = p2
|
||||
R.part3 = p3
|
||||
p1.master = R
|
||||
p2.master = R
|
||||
p3.master = R
|
||||
R.status = explosive
|
||||
p1.b_stat = 0
|
||||
p2.status = 1
|
||||
p3.air_contents.temperature = btemp + T0C
|
||||
|
||||
// proximity
|
||||
if (1)
|
||||
var/obj/item/assembly/proximity_bomb/R = new /obj/item/assembly/proximity_bomb(src.loc)
|
||||
var/obj/item/tank/plasma/p3 = new /obj/item/tank/plasma(R)
|
||||
var/obj/item/device/prox_sensor/p1 = new /obj/item/device/prox_sensor(R)
|
||||
var/obj/item/device/igniter/p2 = new /obj/item/device/igniter(R)
|
||||
R.part1 = p1
|
||||
R.part2 = p2
|
||||
R.part3 = p3
|
||||
p1.master = R
|
||||
p2.master = R
|
||||
p3.master = R
|
||||
R.status = explosive
|
||||
|
||||
p3.air_contents.temperature = btemp + T0C
|
||||
p2.status = 1
|
||||
|
||||
if(src.active)
|
||||
R.part1.armed = 1
|
||||
R.part1.icon_state = text("motion[]", 1)
|
||||
R.c_state(1, src)
|
||||
|
||||
// timer
|
||||
if (2)
|
||||
var/obj/item/assembly/time_bomb/R = new /obj/item/assembly/time_bomb(src.loc)
|
||||
var/obj/item/tank/plasma/p3 = new /obj/item/tank/plasma(R)
|
||||
var/obj/item/device/timer/p1 = new /obj/item/device/timer(R)
|
||||
var/obj/item/device/igniter/p2 = new /obj/item/device/igniter(R)
|
||||
R.part1 = p1
|
||||
R.part2 = p2
|
||||
R.part3 = p3
|
||||
p1.master = R
|
||||
p2.master = R
|
||||
p3.master = R
|
||||
R.status = explosive
|
||||
|
||||
p3.air_contents.temperature = btemp + T0C
|
||||
p2.status = 1
|
||||
|
||||
qdel(src)
|
||||
|
||||
/obj/spawner/newbomb/New()
|
||||
..()
|
||||
|
||||
switch (src.btype)
|
||||
// radio
|
||||
if (0)
|
||||
|
||||
var/obj/item/device/transfer_valve/V = new(src.loc)
|
||||
var/obj/item/tank/plasma/PT = new(V)
|
||||
var/obj/item/tank/oxygen/OT = new(V)
|
||||
|
||||
var/obj/item/device/radio/signaler/S = new(V)
|
||||
|
||||
V.tank_one = PT
|
||||
V.tank_two = OT
|
||||
V.attached_device = S
|
||||
|
||||
S.master = V
|
||||
PT.master = V
|
||||
OT.master = V
|
||||
|
||||
S.b_stat = 0
|
||||
|
||||
PT.air_contents.temperature = btemp1 + T0C
|
||||
OT.air_contents.temperature = btemp2 + T0C
|
||||
|
||||
V.update_icon()
|
||||
|
||||
// proximity
|
||||
if (1)
|
||||
|
||||
var/obj/item/device/transfer_valve/V = new(src.loc)
|
||||
var/obj/item/tank/plasma/PT = new(V)
|
||||
var/obj/item/tank/oxygen/OT = new(V)
|
||||
|
||||
var/obj/item/device/prox_sensor/P = new(V)
|
||||
|
||||
V.tank_one = PT
|
||||
V.tank_two = OT
|
||||
V.attached_device = P
|
||||
|
||||
P.master = V
|
||||
PT.master = V
|
||||
OT.master = V
|
||||
|
||||
|
||||
PT.air_contents.temperature = btemp1 + T0C
|
||||
OT.air_contents.temperature = btemp2 + T0C
|
||||
|
||||
V.update_icon()
|
||||
|
||||
|
||||
// timer
|
||||
if (2)
|
||||
var/obj/item/device/transfer_valve/V = new(src.loc)
|
||||
var/obj/item/tank/plasma/PT = new(V)
|
||||
var/obj/item/tank/oxygen/OT = new(V)
|
||||
|
||||
var/obj/item/device/timer/T = new(V)
|
||||
|
||||
V.tank_one = PT
|
||||
V.tank_two = OT
|
||||
V.attached_device = T
|
||||
|
||||
T.master = V
|
||||
PT.master = V
|
||||
OT.master = V
|
||||
T.time = 30
|
||||
|
||||
PT.air_contents.temperature = btemp1 + T0C
|
||||
OT.air_contents.temperature = btemp2 + T0C
|
||||
|
||||
V.update_icon()
|
||||
qdel(src)
|
||||
|
||||
|
||||
/obj/spawner/briefcasebomb/New()
|
||||
..()
|
||||
|
||||
var/obj/item/device/transfer_valve/briefcase/V = new(src.loc)
|
||||
var/obj/item/tank/plasma/PT = new(V)
|
||||
var/obj/item/tank/oxygen/OT = new(V)
|
||||
|
||||
var/obj/item/device/timer/T = new(V)
|
||||
|
||||
V.tank_one = PT
|
||||
V.tank_two = OT
|
||||
V.attached_device = T
|
||||
|
||||
T.master = V
|
||||
PT.master = V
|
||||
OT.master = V
|
||||
T.time = 30
|
||||
|
||||
PT.air_contents.temperature = 170 + T0C
|
||||
OT.air_contents.temperature = 20 + T0C
|
||||
|
||||
qdel(src)
|
||||
|
||||
/obj/bomberman
|
||||
name = "large cartoon bomb"
|
||||
desc = "It looks like it's gonna blow."
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
icon_state = "dumb_bomb"
|
||||
density = 1
|
||||
var/exploding = 0
|
||||
|
||||
New()
|
||||
..()
|
||||
if(!isturf(src.loc))
|
||||
dispose()
|
||||
return
|
||||
spawn(20)
|
||||
explode()
|
||||
|
||||
Bumped(atom/A)
|
||||
if(ismob(A))
|
||||
walk(src, get_dir(A, src), 1)
|
||||
|
||||
Bump(atom/O)
|
||||
walk(src, 0)
|
||||
|
||||
ex_act(severity)
|
||||
if(exploding)
|
||||
return
|
||||
explode()
|
||||
|
||||
proc/explode()
|
||||
exploding = 1
|
||||
|
||||
if(!isturf(src.loc))
|
||||
dispose()
|
||||
return
|
||||
src.icon = null
|
||||
src.anchored = 1
|
||||
src.density = 0
|
||||
var/list/atom/movable/overlay/boom = list()
|
||||
var/list/atom/movable/overlay/boom_tips = list()
|
||||
var/list/obj/affected_objs = list()
|
||||
var/list/mob/affected_mobs = list()
|
||||
var/atom/movable/overlay/animation = new /atom/movable/overlay( src.loc )
|
||||
animation.icon_state = "nothing"
|
||||
animation.icon = 'icons/effects/effects.dmi'
|
||||
for(var/turf/T in oview(3, src))
|
||||
if((T.x != src.x && T.y != src.y) || T.density)
|
||||
continue
|
||||
var/dist = get_dist(src.loc, T)
|
||||
var/rel_dir = get_dir(src.loc, T)
|
||||
if(dist <= 3)
|
||||
for(var/atom/A in T)
|
||||
if(istype(A, /mob/living))
|
||||
affected_mobs.Add(A)
|
||||
if(istype(A, /obj/window) || istype(A, /obj/grille))
|
||||
affected_objs.Add(A)
|
||||
if(istype(A, /obj/blob))
|
||||
affected_objs.Add(A)
|
||||
// TODO: Handle more object types?
|
||||
if(T.x == src.x && T.y == src.y)
|
||||
continue
|
||||
var/atom/movable/overlay/A = new /atom/movable/overlay( T )
|
||||
A.icon_state = "nothing"
|
||||
A.icon = 'icons/effects/effects.dmi'
|
||||
A.dir = rel_dir
|
||||
|
||||
if(dist == 3)
|
||||
boom_tips.Add(A)
|
||||
else
|
||||
boom.Add(A)
|
||||
|
||||
flick("boom_center", animation)
|
||||
for(var/atom/movable/overlay/A in boom)
|
||||
flick("boom_segment", A)
|
||||
for(var/atom/movable/overlay/A in boom_tips)
|
||||
flick("boom_tip", A)
|
||||
for(var/mob/M in affected_mobs)
|
||||
M.ex_act(3)
|
||||
for(var/obj/O in affected_objs)
|
||||
// drsingh for Cannot execute null.ex act()
|
||||
if (!isnull(O)) O.ex_act(rand(1,2))
|
||||
playsound(src.loc, "explosion", 100, 1)
|
||||
playsound(src.loc, "sound/effects/explosionfar.ogg", 100, 1, 14)
|
||||
sleep(10)
|
||||
animation.dispose()
|
||||
for(var/atom/movable/overlay/A in (boom + boom_tips))
|
||||
A.dispose()
|
||||
src.dispose()
|
||||
Reference in New Issue
Block a user