Merge remote-tracking branch 'upstream/master' into LINDA-Fixes

This commit is contained in:
Fox-McCloud
2015-05-21 19:35:35 -04:00
42 changed files with 1303 additions and 925 deletions
+2 -2
View File
@@ -84,8 +84,8 @@ datum/controller/air_system
if(istype(S))
air_master.add_to_active(S)
/datum/controller/air_system/proc/setup_allturfs()
for(var/turf/simulated/T in world)
/datum/controller/air_system/proc/setup_allturfs(var/turfs_in = world)
for(var/turf/simulated/T in turfs_in)
T.CalculateAdjacentTurfs()
if(!T.blocks_air)
if(T.air.check_tile_graphic())
+5
View File
@@ -60,6 +60,11 @@
#define HAS_SKIN_COLOR 32
#define TAIL_WAGGING 64
//Species Diet Flags
#define DIET_CARN 1
#define DIET_OMNI 2
#define DIET_HERB 4
//bitflags for door switches.
#define OPEN 1
+14 -1
View File
@@ -3,13 +3,26 @@
icon = 'icons/obj/objects.dmi'
icon_state = "launcherbtt"
desc = "A remote control switch for a mass driver."
var/id = null
var/id_tag = "default"
var/active = 0
settagwhitelist = list("id_tag")
anchored = 1.0
use_power = 1
idle_power_usage = 2
active_power_usage = 4
/obj/machinery/driver_button/New(turf/loc, var/w_dir=null)
..()
switch(w_dir)
if(NORTH)
pixel_y = 25
if(SOUTH)
pixel_y = -25
if(EAST)
pixel_x = 25
if(WEST)
pixel_x = -25
/obj/machinery/ignition_switch
name = "ignition switch"
icon = 'icons/obj/objects.dmi'
@@ -99,6 +99,9 @@
/obj/item/weapon/circuitboard/pod
name = "Circuit board (Massdriver Control)"
build_path = "/obj/machinery/computer/pod"
/obj/item/weapon/circuitboard/pod/deathsquad
name = "Circuit board (Deathsquad Massdriver control)"
build_path = "/obj/machinery/computer/pod/deathsquad"
/obj/item/weapon/circuitboard/robotics
name = "Circuit board (Robotics Control Console)"
build_path = "/obj/machinery/computer/robotics"
+288 -128
View File
@@ -1,114 +1,122 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
/obj/machinery/computer/pod
name = "Pod Launch Control"
name = "Mass Drivers and Pod Doors Control"
desc = "A controll for launching pods. Some people prefer firing Mechas."
icon_state = "computer_generic"
light_color = LIGHT_COLOR_GREEN
icon_state = "mass_drivers"
light_color = "#555555"
circuit = /obj/item/weapon/circuitboard/pod
var/id = 1.0
var/obj/machinery/mass_driver/connected = null
var/timing = 0.0
var/time = 30.0
var/title = "Mass Driver Controls"
var/list/id_tags = list()
var/list/door_only_tags = list()
var/list/synced = list()
var/list/timings = list()
var/list/times = list()
var/list/maxtimes = list()
var/list/powers = list()
var/list/loopings = list()
/obj/machinery/computer/pod/New()
..()
spawn( 5 )
for(var/obj/machinery/mass_driver/M in world)
if(M.id == id)
connected = M
else
return
spawn(5)
driver_sync()
machines += src
return
/obj/machinery/computer/pod/proc/alarm()
/obj/machinery/computer/pod/proc/driver_sync()
timings = list()
times = list()
synced = list()
for(var/obj/machinery/mass_driver/M in world)
if(M.z != src.z) continue
for(var/ident_tag in id_tags)
if((M.id_tag == ident_tag) && !(ident_tag in synced))
synced += ident_tag
timings += ident_tag
timings[ident_tag] = 0.0
times += ident_tag
times[ident_tag] = 30.0
maxtimes += ident_tag
maxtimes[ident_tag] = 30.0
powers += ident_tag
powers[ident_tag] = 1.0
loopings += ident_tag
loopings[ident_tag] = 0
break
for(var/obj/machinery/door/poddoor/M in world)
if(M.z != src.z) continue
for(var/ident_tag in id_tags)
if((M.id_tag == ident_tag) && !(ident_tag in synced) && !(ident_tag in door_only_tags))
door_only_tags += ident_tag
break
return
/obj/machinery/computer/pod/proc/solo_sync(var/ident_tag)
for(var/obj/machinery/mass_driver/M in world)
if(M.z != src.z) continue
if((M.id_tag == ident_tag) && !(ident_tag in synced))
synced += ident_tag
timings += ident_tag
timings[ident_tag] = 0.0
times += ident_tag
times[ident_tag] = 30.0
maxtimes += ident_tag
maxtimes[ident_tag] = 30.0
powers += ident_tag
powers[ident_tag] = 1.0
loopings += ident_tag
loopings[ident_tag] = 0
break
if(!(ident_tag in synced))
for(var/obj/machinery/door/poddoor/M in world)
if(M.z != src.z) continue
if((M.id_tag == ident_tag) && !(ident_tag in synced) && !(ident_tag in door_only_tags))
door_only_tags += ident_tag
break
return
/obj/machinery/computer/pod/proc/launch_sequence(var/ident_tag)
if(stat & (NOPOWER|BROKEN))
return
if(!( connected ))
viewers(null, null) << "Cannot locate mass driver connector. Cancelling firing sequence!"
var/anydriver = 0
for(var/obj/machinery/mass_driver/M in world)
if(M.z != src.z) continue
if(M.id_tag == ident_tag)
anydriver = 1
if(!anydriver)
visible_message("Cannot locate any mass driver of that ID. Cancelling firing sequence!")
return
if(icon_state != "old")
flick("mass_drivers_timing", src)
for(var/obj/machinery/door/poddoor/M in world)
if(M.id == id)
M.open()
return
if(M.z != src.z) continue
if(M.id_tag == ident_tag)
spawn()
M.open()
sleep(20)
for(var/obj/machinery/mass_driver/M in world)
if(M.id == id)
M.power = connected.power
if(M.z != src.z) continue
if(M.id_tag == ident_tag)
M.drive()
sleep(50)
for(var/obj/machinery/door/poddoor/M in world)
if(M.id == id)
M.close()
return
if(M.z != src.z) continue
if(M.id_tag == ident_tag)
spawn()
M.close()
return
/*
/obj/machinery/computer/pod/attackby(I as obj, user as mob, params)
if(istype(I, /obj/item/weapon/screwdriver))
playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1)
if(do_after(user, 20))
if(stat & BROKEN)
user << "\blue The broken glass falls out."
var/obj/structure/computerframe/A = new /obj/structure/computerframe( loc )
getFromPool(/obj/item/weapon/shard, loc)
//generate appropriate circuitboard. Accounts for /pod/old computer types
var/obj/item/weapon/circuitboard/pod/M = null
if(istype(src, /obj/machinery/computer/pod/old))
M = new /obj/item/weapon/circuitboard/olddoor( A )
if(istype(src, /obj/machinery/computer/pod/old/syndicate))
M = new /obj/item/weapon/circuitboard/syndicatedoor( A )
if(istype(src, /obj/machinery/computer/pod/old/swf))
M = new /obj/item/weapon/circuitboard/swfdoor( A )
else //it's not an old computer. Generate standard pod circuitboard.
M = new /obj/item/weapon/circuitboard/pod( A )
for (var/obj/C in src)
C.loc = loc
M.id = id
A.circuit = M
A.state = 3
A.icon_state = "3"
A.anchored = 1
del(src)
else
user << "\blue You disconnect the monitor."
var/obj/structure/computerframe/A = new /obj/structure/computerframe( loc )
//generate appropriate circuitboard. Accounts for /pod/old computer types
var/obj/item/weapon/circuitboard/pod/M = null
if(istype(src, /obj/machinery/computer/pod/old))
M = new /obj/item/weapon/circuitboard/olddoor( A )
if(istype(src, /obj/machinery/computer/pod/old/syndicate))
M = new /obj/item/weapon/circuitboard/syndicatedoor( A )
if(istype(src, /obj/machinery/computer/pod/old/swf))
M = new /obj/item/weapon/circuitboard/swfdoor( A )
else //it's not an old computer. Generate standard pod circuitboard.
M = new /obj/item/weapon/circuitboard/pod( A )
for (var/obj/C in src)
C.loc = loc
M.id = id
A.circuit = M
A.state = 4
A.icon_state = "4"
A.anchored = 1
del(src)
else
attack_hand(user)
return
*/
/obj/machinery/computer/pod/attack_ai(var/mob/user as mob)
src.add_hiddenprint(user)
return attack_hand(user)
@@ -120,73 +128,146 @@
if(..())
return
var/dat = "<HTML><BODY><TT><B>[title]</B>"
var/dat = "<HTML><BODY><TT><B>[name]</B>(<A href='?src=\ref[src];rename=1'>rename</A>)"
user.set_machine(src)
if(connected)
var/d2
if(timing) //door controls do not need timers.
d2 = "<A href='?src=\ref[src];time=0'>Stop Time Launch</A>"
else
d2 = "<A href='?src=\ref[src];time=1'>Initiate Time Launch</A>"
var/second = time % 60
var/minute = (time - second) / 60
dat += "<HR>\nTimer System: [d2]\nTime Left: [minute ? "[minute]:" : null][second] <A href='?src=\ref[src];tp=-30'>-</A> <A href='?src=\ref[src];tp=-1'>-</A> <A href='?src=\ref[src];tp=1'>+</A> <A href='?src=\ref[src];tp=30'>+</A>"
var/temp = ""
var/list/L = list( 0.25, 0.5, 1, 2, 4, 8, 16 )
for(var/t in L)
if(t == connected.power)
temp += "[t] "
dat += "<BR><A href = '?src=\ref[src];sync=1'>Reset Connections</A><BR>"
if(synced.len)
dat += "<BR><A href = '?src=\ref[src];massfire=1'><B>Fire All Connected Drivers</B></A><BR>"
if(istype(src,/obj/machinery/computer/pod/deathsquad))
dat += "<BR><A href = '?src=\ref[src];dstele=1'><B>Set Teleporter Destination Z-Level</B></A><BR>"
for(var/ident_tag in id_tags)
if(!(ident_tag in door_only_tags))
dat += "<BR><BR><B>[ident_tag]</B> <A href='?src=\ref[src];remove=1;driver=[ident_tag]'>remove</A>"
if(ident_tag in synced)
var/d2 = ""
if(timings[ident_tag]) //door controls do not need timers.
d2 = "<A href='?src=\ref[src];time=0;driver=[ident_tag]'>Stop Time Launch</A>"
else
temp += "<A href = '?src=\ref[src];power=[t]'>[t]</A> "
dat += "<HR>\nPower Level: [temp]<BR>\n<A href = '?src=\ref[src];alarm=1'>Firing Sequence</A><BR>\n<A href = '?src=\ref[src];drive=1'>Test Fire Driver</A><BR>\n<A href = '?src=\ref[src];door=1'>Toggle Outer Door</A><BR>"
else
dat += "<BR>\n<A href = '?src=\ref[src];door=1'>Toggle Outer Door</A><BR>"
d2 = "<A href='?src=\ref[src];time=1;driver=[ident_tag]'>Initiate Time Launch</A>"
var/second = times[ident_tag] % 60
var/minute = (times[ident_tag] - second) / 60
var/maxsecond = maxtimes[ident_tag] % 60
var/maxminute = (maxtimes[ident_tag] - maxsecond) / 60
dat += "<HR>\nTimer System: [d2]\nTime Left: [minute ? "[minute]:" : null][second]/[maxminute ? "[maxminute]:" : null][maxsecond] <A href='?src=\ref[src];tp=-30;driver=[ident_tag]'>-</A> <A href='?src=\ref[src];tp=-1;driver=[ident_tag]'>-</A> <A href='?src=\ref[src];tp=1;driver=[ident_tag]'>+</A> <A href='?src=\ref[src];tp=30;driver=[ident_tag]'>+</A>"
dat += "<BR>Set timer to loop: [loopings[ident_tag] ? "<A href = '?src=\ref[src];loop=0;driver=[ident_tag]'>Yes</A>" : "<A href = '?src=\ref[src];loop=1;driver=[ident_tag]'>No</A>"]"
var/temp = ""
var/list/L = list( 0.25, 0.5, 1, 2, 4, 8, 16 )
for(var/t in L)
if( powers[ident_tag] == t)
temp += "<B><A href = '?src=\ref[src];power=[t];driver=[ident_tag]'>[t]</A></B> "
else
temp += "<A href = '?src=\ref[src];power=[t];driver=[ident_tag]'>[t]</A> "
dat += "<HR>\nPower Level: [temp]<BR>\n<A href = '?src=\ref[src];launch=1;driver=[ident_tag]'><B>Fire Drive!</B></A><BR>\n<A href = '?src=\ref[src];door=1;driver=[ident_tag]'>Toggle Pod Doors</A><BR>"
for(var/ident_tag in door_only_tags)
dat += "<BR><BR><B>[ident_tag]</B> <A href='?src=\ref[src];remove=1;driver=[ident_tag]'>remove</A>"
dat += "<BR>\n<A href = '?src=\ref[src];door=1;driver=[ident_tag]'>Toggle Pod Doors</A><BR>"
dat += "<BR><A href='?src=\ref[src];add=1'>add another id_tag</A>"
dat += "<BR><BR><A href='?src=\ref[user];mach_close=computer'>Close</A></TT></BODY></HTML>"
user << browse(dat, "window=computer;size=400x500")
add_fingerprint(usr)
onclose(user, "computer")
return
/obj/machinery/computer/pod/process()
if(!..())
return
if(timing)
if(time > 0)
time = round(time) - 1
var/timing = 0
for(var/ident_tag in id_tags)
if(timings[ident_tag])
if(times[ident_tag] > 0)
times[ident_tag] = round(times[ident_tag]) - 1
timing = 1
else
spawn()
launch_sequence(ident_tag)
if(loopings[ident_tag])
times[ident_tag] = maxtimes[ident_tag]
else
times[ident_tag] = 0
timings[ident_tag] = 0
else
alarm()
time = 0
timing = 0
times[ident_tag] = maxtimes[ident_tag]
updateDialog()
if(icon_state != "old")
if(timing)
icon_state = "mass_drivers_timing"
else
icon_state = "mass_drivers"
return
/obj/machinery/computer/pod/Topic(href, href_list)
if(..())
return 1
if((usr.contents.Find(src) || (in_range(src, usr) && istype(loc, /turf))) || (istype(usr, /mob/living/silicon)))
else
usr.set_machine(src)
if(href_list["add"])
var/new_id_tag = input("Enter a new id_tag", "Mass Driver Controls", "id_tag")
if(!(new_id_tag in id_tags))
id_tags += new_id_tag
solo_sync(new_id_tag)
if(href_list["remove"])
var/ident_tag = href_list["driver"]
if(ident_tag in synced)
synced -= ident_tag
if(ident_tag in door_only_tags)
door_only_tags -= ident_tag
timings -= ident_tag
times -= ident_tag
powers -= ident_tag
loopings -= ident_tag
id_tags -= ident_tag
if(href_list["dstele"])
var/choices = list(0)
choices += accessable_z_levels
var/obj/machinery/computer/pod/deathsquad/D = src
var/input = input("Enter the destination Z-Level. The mechs will arrive from the East. Leave 0 if you don't want to set a specific ZLevel", "Mass Driver Controls", 0) in choices
D.teleporter_dest = input
if(href_list["massfire"])
for(var/ident_tag in synced)
spawn()
launch_sequence(ident_tag)
if(href_list["power"])
var/ident_tag = href_list["driver"]
var/t = text2num(href_list["power"])
t = min(max(0.25, t), 16)
if(connected)
connected.power = t
if(href_list["alarm"])
alarm()
for(var/obj/machinery/mass_driver/M in world)
if(M.id_tag == ident_tag)
M.power = t
powers[ident_tag] = t
if(href_list["launch"])
launch_sequence(href_list["driver"])
if(href_list["time"])
timing = text2num(href_list["time"])
var/ident_tag = href_list["driver"]
timings[ident_tag] = text2num(href_list["time"])
if(href_list["loop"])
var/ident_tag = href_list["driver"]
loopings[ident_tag] = text2num(href_list["loop"])
if(href_list["sync"])
driver_sync()
if(href_list["tp"])
var/ident_tag = href_list["driver"]
var/tp = text2num(href_list["tp"])
time += tp
time = min(max(round(time), 0), 120)
maxtimes[ident_tag] += tp
maxtimes[ident_tag] = min(max(round(maxtimes[ident_tag]), 0), 120)
if(href_list["door"])
var/ident_tag = href_list["driver"]
for(var/obj/machinery/door/poddoor/M in world)
if(M.id == id)
if(M.density)
M.open()
else
M.close()
if(M.z != src.z) continue
if(M.id_tag == ident_tag)
spawn()
if(M.density)
M.open()
else
M.close()
if(href_list["rename"])
var/new_title = input("Enter a new title", "[name]", "[name]")
if(new_title)
name = new_title
updateUsrDialog()
return
@@ -195,19 +276,19 @@
/obj/machinery/computer/pod/old
icon_state = "old"
name = "DoorMex Control Computer"
title = "Door Controls"
circuit = /obj/item/weapon/circuitboard/olddoor
/obj/machinery/computer/pod/old/syndicate
name = "ProComp Executive IIc"
name = "External Airlock Controls"
desc = "The Syndicate operate on a tight budget. Operates external airlocks."
title = "External Airlock Controls"
req_access = list(access_syndicate)
circuit = /obj/item/weapon/circuitboard/syndicatedoor
light_color = "#00FFFF"
/obj/machinery/computer/pod/old/syndicate/attack_hand(var/mob/user as mob)
if(!allowed(user))
user << "\red Access Denied"
user << "<span class='warning'>Access Denied</span>"
return
else
..()
@@ -215,3 +296,82 @@
/obj/machinery/computer/pod/old/swf
name = "Magix System IV"
desc = "An arcane artifact that holds much magic. Running E-Knock 2.2: Sorceror's Edition"
circuit = /obj/item/weapon/circuitboard/swfdoor
/obj/machinery/computer/pod/deathsquad
id_tags = list("ASSAULT0","ASSAULT1","ASSAULT2","ASSAULT3")
var/teleporter_dest = 0
circuit = /obj/item/weapon/circuitboard/pod/deathsquad
/obj/machinery/computer/pod/deathsquad/launch_sequence(var/ident_tag)
if(stat & (NOPOWER|BROKEN))
return
var/anydriver = 0
for(var/obj/machinery/mass_driver/M in world)
if(M.z != src.z) continue
if(M.id_tag == ident_tag)
anydriver = 1
if(!anydriver)
visible_message("Cannot locate any mass driver of that ID. Cancelling firing sequence!")
return
if(icon_state != "old")
flick("mass_drivers_timing", src)
if(teleporter_dest)
for(var/obj/structure/deathsquad_tele/D in world)
if(D.z != src.z) continue
if(D.id_tag == ident_tag)
D.icon_state = "tele1"
D.ztarget = teleporter_dest
D.density = 1
for(var/obj/machinery/door/poddoor/M in world)
if(M.z != src.z) continue
if(M.id_tag == ident_tag)
spawn()
M.open()
sleep(20)
for(var/obj/machinery/mass_driver/M in world)
if(M.z != src.z) continue
if(M.id_tag == ident_tag)
M.drive()
sleep(50)
for(var/obj/machinery/door/poddoor/M in world)
if(M.z != src.z) continue
if(M.id_tag == ident_tag)
spawn()
M.close()
for(var/obj/structure/deathsquad_tele/D in world)
if(D.z != src.z) continue
if(D.id_tag == ident_tag)
D.icon_state = "tele0"
D.density = 0
return
/obj/structure/deathsquad_tele
name = "Mech Teleporter"
density = 0
anchored = 1
icon = 'icons/obj/stationobjs.dmi'
icon_state = "tele0"
var/ztarget = 0
var/id_tag = ""
/obj/structure/deathsquad_tele/Bumped(var/atom/movable/AM)
if(!ztarget) return ..()
var/y = AM.y
spawn()
AM.z = ztarget
AM.y = y
AM.x = world.maxx - TRANSITIONEDGE - 2
AM.dir = 8
var/atom/target = get_edge_target_turf(AM, AM.dir)
AM.throw_at(target, 50, 1)
return
@@ -142,7 +142,7 @@ var/specops_shuttle_timeleft = 0
//Begin Marauder launchpad.
spawn(0)//So it parallel processes it.
for(var/obj/machinery/door/poddoor/M in special_ops)
switch(M.id)
switch(M.id_tag)
if("ASSAULT0")
spawn(10)//1 second delay between each.
M.open()
@@ -173,7 +173,7 @@ var/specops_shuttle_timeleft = 0
sleep(10)
for(var/obj/machinery/mass_driver/M in special_ops)
switch(M.id)
switch(M.id_tag)
if("ASSAULT0")
spawn(10)
M.drive()
@@ -190,7 +190,7 @@ var/specops_shuttle_timeleft = 0
sleep(50)//Doors remain open for 5 seconds.
for(var/obj/machinery/door/poddoor/M in special_ops)
switch(M.id)//Doors close at the same time.
switch(M.id_tag)//Doors close at the same time.
if("ASSAULT0")
spawn(0)
M.close()
+33 -12
View File
@@ -58,7 +58,7 @@
if(istype(W, /obj/item/device/detective_scanner))
return
return src.attack_hand(user)
/obj/machinery/door_control/emag_act(user as mob)
if(!emagged)
emagged = 1
@@ -113,7 +113,7 @@
else
for(var/obj/machinery/door/poddoor/M in world)
if (M.id == src.id)
if (M.id_tag == src.id)
if (M.density)
spawn( 0 )
M.open()
@@ -145,8 +145,27 @@
if(istype(W, /obj/item/device/detective_scanner))
return
if(istype(W, /obj/item/device/multitool))
update_multitool_menu(user)
return 1
if(istype(W, /obj/item/weapon/wrench))
playsound(get_turf(src), 'sound/items/Ratchet.ogg', 50, 1)
if(do_after(user, 30))
user << "<span class='notice'>You detach \the [src] from the wall.</span>"
new/obj/item/mounted/frame/driver_button(get_turf(src))
del(src)
return 1
return src.attack_hand(user)
/obj/machinery/driver_button/multitool_menu(var/mob/user, var/obj/item/device/multitool/P)
return {"
<ul>
<li>[format_tag("ID Tag","id_tag")]</li>
</ul>"}
/obj/machinery/driver_button/attack_hand(mob/user as mob)
src.add_fingerprint(usr)
@@ -158,30 +177,32 @@
use_power(5)
launch_sequence()
return
/obj/machinery/driver_button/proc/launch_sequence()
active = 1
icon_state = "launcheract"
for(var/obj/machinery/door/poddoor/M in world)
if (M.id == src.id)
spawn( 0 )
for(var/obj/machinery/door/poddoor/M in range(src,7))
if (M.id_tag == src.id_tag)
spawn()
M.open()
return
sleep(20)
for(var/obj/machinery/mass_driver/M in world)
if(M.id == src.id)
if(M.id_tag == src.id_tag)
M.drive()
sleep(50)
for(var/obj/machinery/door/poddoor/M in world)
if (M.id == src.id)
spawn( 0 )
if (M.id_tag == src.id_tag)
spawn()
M.close()
return
icon_state = "launcherbtt"
active = 0
return
active = 0
+1 -1
View File
@@ -3,7 +3,7 @@
desc = "That looks like it doesn't open easily."
icon = 'icons/obj/doors/rapid_pdoor.dmi'
icon_state = "pdoor1"
var/id = 1.0
var/id_tag = 1.0
explosion_block = 3
/obj/machinery/door/poddoor/preopen
+202 -26
View File
@@ -1,9 +1,7 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
/obj/machinery/mass_driver
name = "mass driver"
desc = "Shoots things into space."
icon = 'icons/obj/stationobjs.dmi'
icon = 'icons/obj/objects.dmi'
icon_state = "mass_driver"
anchored = 1.0
use_power = 1
@@ -12,31 +10,209 @@
var/power = 1.0
var/code = 1.0
var/id = 1.0
var/id_tag = "default"
settagwhitelist = list("id_tag")
var/drive_range = 50 //this is mostly irrelevant since current mass drivers throw into space, but you could make a lower-range mass driver for interstation transport or something I guess.
/obj/machinery/mass_driver/attackby(obj/item/weapon/W, mob/user as mob)
proc/drive(amount)
if(stat & (BROKEN|NOPOWER))
return
use_power(500)
var/O_limit
var/atom/target = get_edge_target_turf(src, dir)
for(var/atom/movable/O in loc)
if(!O.anchored||istype(O, /obj/mecha))//Mechs need their launch platforms.
O_limit++
if(O_limit >= 20)
for(var/mob/M in hearers(src, null))
M << "\blue The mass driver lets out a screech, it mustn't be able to handle any more items."
break
use_power(500)
spawn( 0 )
O.throw_at(target, drive_range * power, power)
flick("mass_driver1", src)
if(istype(W, /obj/item/device/multitool))
update_multitool_menu(user)
return 1
if(istype(W, /obj/item/weapon/screwdriver))
user << "You begin to unscrew the bolts off the [src]..."
playsound(get_turf(src), 'sound/items/Screwdriver.ogg', 50, 1)
if(do_after(user, 30))
var/obj/machinery/mass_driver_frame/F = new(get_turf(src))
F.dir = src.dir
F.anchored = 1
F.build = 4
F.update_icon()
del(src)
return 1
return ..()
/obj/machinery/mass_driver/multitool_menu(var/mob/user, var/obj/item/device/multitool/P)
return {"
<ul>
<li>[format_tag("ID Tag","id_tag")]</li>
</ul>"}
/obj/machinery/mass_driver/proc/drive(amount)
if(stat & (BROKEN|NOPOWER))
return
use_power(500*power)
var/O_limit = 0
var/atom/target = get_edge_target_turf(src, dir)
for(var/atom/movable/O in loc)
if(!O.anchored||istype(O, /obj/mecha))//Mechs need their launch platforms.
O_limit++
if(O_limit >= 20)//so no more than 20 items are sent at a time, probably for counter-lag purposes
break
use_power(500)
spawn()
var/coef = 1
if(emagged)
coef = 5
O.throw_at(target, drive_range * power * coef, power * coef)
flick("mass_driver1", src)
return
/obj/machinery/mass_driver/emp_act(severity)
if(stat & (BROKEN|NOPOWER))
return
drive()
..(severity)
/obj/machinery/mass_driver/emag_act(mob/user)
if(!emagged)
emagged = 1
user << "You hack the Mass Driver, radically increasing the force at which it'll throw things. Better not stand in its way."
return 1
return -1
////////////////MASS BUMPER///////////////////
/obj/machinery/mass_driver/bumper
name = "mass bumper"
desc = "Now you're here, now you're over there."
density = 1
/obj/machinery/mass_driver/bumper/Bumped(M as mob|obj)
density = 0
step(M, get_dir(M,src))
spawn(1)
density = 1
drive()
return
////////////////MASS DRIVER FRAME///////////////////
/obj/machinery/mass_driver_frame
name = "mass driver frame"
icon = 'icons/obj/objects.dmi'
icon_state = "mass_driver_b0"
density = 0
anchored = 0
var/build = 0
/obj/machinery/mass_driver_frame/attackby(var/obj/item/W as obj, var/mob/user as mob)
switch(build)
if(0) // Loose frame
if(istype(W, /obj/item/weapon/weldingtool))
var/obj/item/weapon/weldingtool/WT = W
if(!WT.remove_fuel(0, user))
user << "The welding tool must be on to complete this task."
return 1
playsound(get_turf(src), 'sound/items/Welder.ogg', 50, 1)
user << "You begin to cut the frame apart..."
if(do_after(user, 30) && (build == 0))
user << "<span class='notice'>You detach the plasteel sheets from each others.</span>"
new /obj/item/stack/sheet/plasteel(get_turf(src),3)
del(src)
return 1
if(istype(W, /obj/item/weapon/wrench))
user << "You begin to anchor \the [src] on the floor."
playsound(get_turf(src), 'sound/items/Ratchet.ogg', 50, 1)
if(do_after(user, 10) && (build == 0))
user << "<span class='notice'>You anchor \the [src]!</span>"
anchored = 1
build++
update_icon()
return 1
if(1) // Fixed to the floor
if(istype(W, /obj/item/weapon/wrench))
user << "You begin to de-anchor \the [src] from the floor."
playsound(get_turf(src), 'sound/items/Ratchet.ogg', 50, 1)
if(do_after(user, 10) && (build == 1))
build--
update_icon()
anchored = 0
user << "<span class='notice'>You de-anchored \the [src]!</span>"
return 1
if(istype(W, /obj/item/weapon/weldingtool))
var/obj/item/weapon/weldingtool/WT = W
if(!WT.remove_fuel(0, user))
user << "The welding tool must be on to complete this task."
return 1
playsound(get_turf(src), 'sound/items/Welder.ogg', 50, 1)
user << "You begin to weld \the [src] to the floor..."
if(do_after(user, 40) && (build == 1))
user << "<span class='notice'>You welded \the [src] to the floor.</span>"
build++
update_icon()
return 1
if(2) // Welded to the floor
if(istype(W, /obj/item/weapon/weldingtool))
var/obj/item/weapon/weldingtool/WT = W
if(!WT.remove_fuel(0, user))
user << "The welding tool must be on to complete this task."
return 1
playsound(get_turf(src), 'sound/items/Welder.ogg', 50, 1)
user << "You begin to unweld \the [src] to the floor..."
if(do_after(user, 40) && (build == 2))
user << "<span class='notice'>You unwelded \the [src] to the floor.</span>"
build--
update_icon()
if(istype(W, /obj/item/stack/cable_coil))
var/obj/item/stack/cable_coil/C=W
user << "You start adding cables to \the [src]..."
playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1)
if(do_after(user, 20) && (C.amount >= 3) && (build == 2))
C.use(3)
user << "<span class='notice'>You've added cables to \the [src].</span>"
build++
update_icon()
if(3) // Wired
if(istype(W, /obj/item/weapon/wirecutters))
user << "You begin to remove the wiring from \the [src]."
if(do_after(user, 10) && (build == 3))
new /obj/item/stack/cable_coil(loc,3)
playsound(get_turf(src), 'sound/items/Wirecutter.ogg', 50, 1)
user << "<span class='notice'>You've removed the cables from \the [src].</span>"
build--
update_icon()
return 1
if(istype(W, /obj/item/stack/rods))
var/obj/item/stack/rods/R=W
user << "You begin to complete \the [src]..."
playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1)
if(do_after(user, 20) && (R.amount >= 3) && (build == 3))
R.use(3)
user << "<span class='notice'>You've added the grille to \the [src].</span>"
build++
update_icon()
return 1
if(4) // Grille in place
if(istype(W, /obj/item/weapon/crowbar))
user << "You begin to pry off the grille from \the [src]..."
playsound(get_turf(src), 'sound/items/Crowbar.ogg', 50, 1)
if(do_after(user, 30) && (build == 4))
new /obj/item/stack/rods(loc,2)
build--
update_icon()
return 1
if(istype(W, /obj/item/weapon/screwdriver))
user << "You finalize the Mass Driver..."
playsound(get_turf(src), 'sound/items/Screwdriver.ogg', 50, 1)
var/obj/machinery/mass_driver/M = new(get_turf(src))
M.dir = src.dir
del(src)
return 1
..()
/obj/machinery/mass_driver_frame/update_icon()
icon_state = "mass_driver_b[build]"
/obj/machinery/mass_driver_frame/verb/rotate()
set category = "Object"
set name = "Rotate Frame"
set src in view(1)
if ( usr.stat || usr.restrained() || (usr.status_flags & FAKEDEATH))
return
emp_act(severity)
if(stat & (BROKEN|NOPOWER))
return
drive()
..(severity)
src.dir = turn(src.dir, -90)
return
+1 -1
View File
@@ -736,7 +736,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
if("Toggle Door")
if(cartridge && cartridge.access_remote_door)
for(var/obj/machinery/door/poddoor/M in world)
if(M.id == cartridge.remote_door_id)
if(M.id_tag == cartridge.remote_door_id)
if(M.density)
M.open()
else
@@ -0,0 +1,10 @@
/obj/item/mounted/frame/driver_button
name = "mass driver button frame"
desc = "Used for repairing or building mass driver buttons"
icon = 'icons/obj/objects.dmi'
icon_state = "launcherbtt_frame"
mount_reqs = list("simfloor")
/obj/item/mounted/frame/driver_button/do_build(turf/on_wall, mob/user)
new /obj/machinery/driver_button(get_turf(user), get_dir(user, on_wall))
qdel(src)
@@ -67,6 +67,8 @@ var/global/list/datum/stack_recipe/metal_recipes = list ( \
new/datum/stack_recipe("multi-tile airlock assembly", /obj/structure/door_assembly/multi_tile, 4, time = 50, one_per_turf = 1, on_floor = 1), \
), 4), \
null, \
new/datum/stack_recipe("mass driver button frame", /obj/item/mounted/frame/driver_button, 1, time = 50, one_per_turf = 0, on_floor = 1), \
null, \
new/datum/stack_recipe("grenade casing", /obj/item/weapon/grenade/chem_grenade), \
new/datum/stack_recipe("light fixture frame", /obj/item/mounted/frame/light_fixture, 2), \
new/datum/stack_recipe("small light fixture frame", /obj/item/mounted/frame/light_fixture/small, 1), \
@@ -113,6 +115,7 @@ var/global/list/datum/stack_recipe/plasteel_recipes = list ( \
new/datum/stack_recipe("AI core", /obj/structure/AIcore, 4, time = 50, one_per_turf = 1), \
new/datum/stack_recipe("Surgery Table", /obj/machinery/optable, 5, time = 50, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("Metal crate", /obj/structure/closet/crate, 10, time = 50, one_per_turf = 1), \
new/datum/stack_recipe("Mass Driver frame", /obj/machinery/mass_driver_frame, 3, time = 50, one_per_turf = 1), \
// new/datum/stack_recipe("RUST fuel assembly port frame", /obj/item/rust_fuel_assembly_port_frame, 12, time = 50, one_per_turf = 1), \
// new/datum/stack_recipe("RUST fuel compressor frame", /obj/item/rust_fuel_compressor_frame, 12, time = 50, one_per_turf = 1), \
+137 -241
View File
@@ -7,30 +7,48 @@
icon = 'icons/48x48/pods.dmi'
density = 1 //Dense. To raise the heat.
opacity = 0
anchored = 1
unacidable = 1
layer = 3.9
infra_luminosity = 15
var/mob/living/carbon/occupant
var/mob/living/carbon/occupant2 //two seaters
var/datum/spacepod/equipment/equipment_system
var/battery_type = "/obj/item/weapon/stock_parts/cell/high"
var/obj/item/weapon/stock_parts/cell/battery
var/datum/gas_mixture/cabin_air
var/obj/machinery/portable_atmospherics/canister/internal_tank
var/datum/effect/effect/system/ion_trail_follow/space_trail/ion_trail
var/use_internal_tank = 0
var/datum/global_iterator/pr_int_temp_processor //normalizes internal air mixture temperature
var/datum/global_iterator/pr_give_air //moves air from tank to cabin
var/datum/effect/effect/system/ion_trail_follow/space_trail/ion_trail
var/inertia_dir = 0
var/hatch_open = 0
var/next_firetime = 0
var/list/pod_overlays
var/health = 250
var/empcounter = 0 //Used for disabling movement when hit by an EMP
var/lights = 0
var/lights_power = 6
var/list/icon_light_color = list("pod_civ" = LIGHT_COLOR_WHITE, \
"pod_mil" = "#BBF093", \
"pod_synd" = LIGHT_COLOR_RED, \
"pod_gold" = LIGHT_COLOR_WHITE, \
"pod_black" = "#3B8FE5", \
"pod_industrial" = "#CCCC00")
var/allow2enter = 1
var/empcounter = 0 //Used for disabling movement when hit by an EMP
/obj/spacepod/New()
. = ..()
@@ -77,6 +95,8 @@
if(health <= round(initial(health)/4))
overlays += pod_overlays[FIRE]
light_color = icon_light_color[src.icon_state]
/obj/spacepod/bullet_act(var/obj/item/projectile/P)
if(P.damage && !P.nodamage)
deal_damage(P.damage)
@@ -101,7 +121,7 @@
user.changeNext_move(CLICK_CD_MELEE)
deal_damage(15)
playsound(src.loc, 'sound/weapons/slash.ogg', 50, 1, -1)
user << "\red You slash at the armored suit!"
user << "\red You slash at \the [src]!"
visible_message("\red The [user] slashes at [src.name]'s armor!")
return
@@ -127,19 +147,16 @@
occupant2 << S
if(!health)
spawn(0)
if(occupant)
if(occupant2)
occupant2 << "<big><span class='warning'>Critical damage to the vessel detected, core explosion imminent!</span></big>"
occupant << "<big><span class='warning'>Critical damage to the vessel detected, core explosion imminent!</span></big>"
for(var/i = 10, i >= 0; --i)
if(occupant)
occupant << "<span class='warning'>[i]</span>"
if(occupant2)
occupant2 << "<span class='warning'>[i]</span>"
if(i == 0)
explosion(loc, 2, 4, 8)
qdel(src)
sleep(10)
if(occupant) occupant << "<span class='userdanger'>Critical damage to the vessel detected, core explosion imminent!</span>"
if(occupant2) occupant2 << "<span class='userdanger'>Critical damage to the vessel detected, core explosion imminent!</span>"
for(var/i = 10, i >= 0; --i)
if(occupant) occupant << "<span class='warning'>[i]</span>"
if(occupant2) occupant2 << "<span class='warning'>[i]</span>"
if(i == 0)
explosion(loc, 2, 4, 8)
qdel(src)
sleep(10)
update_icons()
@@ -155,11 +172,11 @@
var/mob/living/carbon/human/H = occupant
var/mob/living/carbon/human/H2 = occupant2
if(H)
H.loc = get_turf(src)
H.forceMove(get_turf(src))
H.ex_act(severity + 1)
H << "<span class='warning'>You are forcefully thrown from \the [src]!</span>"
if(H2)
H2.loc = get_turf(src)
H2.forceMove(get_turf(src))
H2.ex_act(severity + 1)
H2 << "<span class='warning'>You are forcefully thrown from \the [src]!</span>"
del(ion_trail)
@@ -173,10 +190,8 @@
/obj/spacepod/emp_act(severity)
switch(severity)
if(1)
if(src.occupant)
src.occupant << "<span class='warning'>The pod console flashes 'Heavy EMP WAVE DETECTED'.</span>" //warn the occupants
if(src.occupant2)
src.occupant2 << "<span class='warning'>The pod console flashes 'EMP WAVE DETECTED'.</span>" //warn the occupants
if(src.occupant) src.occupant << "<span class='warning'>The pod console flashes 'Heavy EMP WAVE DETECTED'.</span>" //warn the occupants
if(src.occupant2) src.occupant2 << "<span class='warning'>The pod console flashes 'Heavy EMP WAVE DETECTED'.</span>" //warn the occupants
if(battery)
battery.charge = max(0, battery.charge - 5000) //Cell EMP act is too weak, this pod needs to be sapped.
@@ -186,10 +201,8 @@
processing_objects.Add(src)
if(2)
if(src.occupant)
src.occupant << "<span class='warning'>The pod console flashes 'EMP WAVE DETECTED'.</span>" //warn the occupants
if(src.occupant2)
src.occupant2 << "<span class='warning'>The pod console flashes 'EMP WAVE DETECTED'.</span>" //warn the occupants
if(src.occupant) src.occupant << "<span class='warning'>The pod console flashes 'EMP WAVE DETECTED'.</span>" //warn the occupants
if(src.occupant2) src.occupant2 << "<span class='warning'>The pod console flashes 'EMP WAVE DETECTED'.</span>" //warn the occupants
src.deal_damage(40)
if(battery)
@@ -198,8 +211,6 @@
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
@@ -214,7 +225,7 @@
return
user.drop_item(W)
battery = W
W.loc = src
W.forceMove(src)
return
if(istype(W, /obj/item/device/spacepod_equipment))
if(!hatch_open)
@@ -230,7 +241,7 @@
else
user << "<span class='notice'>You insert \the [W] into the equipment system.</span>"
user.drop_item(W)
W.loc = equipment_system
W.forceMove(equipment_system)
equipment_system.weapon_system = W
equipment_system.weapon_system.my_atom = src
return
@@ -242,7 +253,7 @@
else
user << "<span class='notice'>You insert \the [W] into the equipment system.</span>"
user.drop_item(W)
W.loc = equipment_system
W.forceMove(equipment_system)
equipment_system.misc_system = W
equipment_system.misc_system.my_atom = src
return
@@ -331,6 +342,7 @@
/obj/spacepod/civilian
icon_state = "pod_civ"
desc = "A sleek civilian space pod."
/obj/spacepod/random
icon_state = "pod_civ"
// placeholder
@@ -370,6 +382,7 @@
desc = "A civilian space pod with a gold body, must have cost somebody a pretty penny"
if("pod_industrial")
desc = "A rough looking space pod meant for industrial work"
update_icons()
/obj/spacepod/verb/toggle_internal_tank()
set name = "Toggle internal airtank usage"
@@ -446,50 +459,26 @@
return
if(src.occupant && !src.occupant2)
if(src.occupant.ckey == H.ckey)
if(src.occupant == H)
H.visible_message("You climb over the console and drop down into the secondary seat.")
H.reset_view(src)
/*
H.client.perspective = EYE_PERSPECTIVE
H.client.eye = src
*/
H.stop_pulling()
H.forceMove(src)
src.occupant = null
src.occupant2 = H
src.add_fingerprint(H)
src.forceMove(src.loc)
//dir = dir_in
playsound(src, 'sound/machines/windowdoor.ogg', 50, 1)
return 1
else
H.reset_view(src)
/*
H.client.perspective = EYE_PERSPECTIVE
H.client.eye = src
*/
H.stop_pulling()
H.forceMove(src)
src.occupant2 = H
src.add_fingerprint(H)
src.forceMove(src.loc)
//dir = dir_in
playsound(src, 'sound/machines/windowdoor.ogg', 50, 1)
return 1
H.reset_view(src)
H.stop_pulling()
H.forceMove(src)
if(src.occupant == H) occupant = null
src.occupant2 = H
src.add_fingerprint(H)
src.forceMove(src.loc)
playsound(src, 'sound/machines/windowdoor.ogg', 50, 1)
return 1
else
if(!src.occupant)
H.reset_view(src)
/*
H.client.perspective = EYE_PERSPECTIVE
H.client.eye = src
*/
H.stop_pulling()
H.forceMove(src)
src.occupant = H
src.add_fingerprint(H)
src.forceMove(src.loc)
//dir = dir_in
playsound(src, 'sound/machines/windowdoor.ogg', 50, 1)
return 1
else
@@ -513,203 +502,119 @@
/obj/spacepod/MouseDrop_T(mob/M as mob, mob/user as mob)
if(!isliving(M)) return
if(M != user)
if(M.stat != 0)
if(allow2enter)
if(!src.occupant2)
visible_message("\red [user.name] starts loading [M.name] into the pod!")
sleep(10)
moved_other_inside(M)
else if(src.occupant2 && !src.occupant)
usr << "\red <b>You can't put a corpse into the driver's seat!</b>"
return
else
if(M != user && M.stat == DEAD && allow2enter)
if(src.occupant2 && !src.occupant)
usr << "<span class='danger'><b>You can't put a corpse into the driver's seat!</b></span>"
return
else
move_inside(M, user)
if(!src.occupant2)
visible_message("<span class='danger'>[user.name] starts loading [M.name] into the pod!</span>")
sleep(10)
moved_other_inside(M)
if(M == user)
move_inside(user)
/obj/spacepod/verb/move_inside()
/obj/spacepod/verb/move_inside(var/mob/user)
set category = "Object"
set name = "Enter Pod"
set src in oview(1)
var/fukkendisk = usr.GetTypeInAllContents(/obj/item/weapon/disk/nuclear)
if(usr.restrained() || usr.stat || usr.weakened || usr.stunned || usr.paralysis || usr.resting) //are you cuffed, dying, lying, stunned or other
return
if (usr.stat || !ishuman(usr))
if(user.restrained() || user.stat || user.weakened || user.stunned || user.paralysis || user.resting) //are you cuffed, dying, lying, stunned or other
return
if (!ishuman(user)) return
if(fukkendisk)
usr << "\red <B>The nuke-disk is locking the door every time you try to open it. You get the feeling that it doesn't want to go into the spacepod.</b>"
user << "<span class='warning'><B>The nuke-disk is locking the door every time you try to open it. You get the feeling that it doesn't want to go into the spacepod.</b></span>"
return
for(var/mob/living/carbon/slime/M in range(1,usr))
if(M.Victim == usr)
usr << "You're too busy getting your life sucked out of you."
for(var/mob/living/carbon/slime/S in range(1,usr))
if(S.Victim == user)
user << "You're too busy getting your life sucked out of you."
return
if(src.occupant)
if(allow2enter)
if(!src.occupant2)
usr << "\blue <B>You start climbing into the secondary seat.</B>"
visible_message("\blue [usr] starts to climb into [src.name].")
if(enter_after(40,usr))
moved_inside(usr)
else
usr << "You stop entering the spacepod."
return
else
usr << "\red <b>You can't fit!</b>"
else
usr << "\red <b>The door is locked!</b>"
try_user_enter(user)
else if(!src.occupant && src.occupant2)
if(allow2enter)
usr << "\blue <B>You start climbing into the primary seat.</B>"
visible_message("\blue [usr] starts to climb into [src.name].")
if(enter_after(40,usr))
moved_inside(usr)
else
usr << "You stop entering the spacepod."
return
else
usr << "\red <b>The door is locked!</b>"
else if(!src.occupant && !src.occupant2)
visible_message("\blue [usr] starts to climb into [src.name].")
if(enter_after(40,usr))
/obj/spacepod/proc/try_user_enter(var/mob/user)
if(!src.occupant && !src.occupant2)
visible_message("<span class='notice'>[user] starts to climb into [src.name]</span>")
if(enter_after(40,user))
if(!src.occupant)
moved_inside(usr)
else if(src.occupant!=usr)
usr << "[src.occupant] was faster. Try better next time, loser."
else
usr << "You stop entering the spacepod."
moved_inside(user)
else if(src.occupant != user)
user << "<span class='notice'>[src.occupant] was faster. Try better next time, loser.</span>"
else user << "<span class='notice'>You stop entering the spacepod.</span>"
return
/* !!OLD BROKEN SYSTEM!! - tiger
/obj/spacepod/verb/move_inside()
set category = "Object"
set name = "Enter Pod"
set src in oview(1)
var/fukkendisk = usr.GetTypeInAllContents(/obj/item/weapon/disk/nuclear)
if(fukkendisk)
usr << "\red <B>The nuke-disk is locking the door every time you try to open it. You get the feeling that it doesn't want to go into the spacepod.</b>"
if(!allow2enter)
user << "<span class='danger'>The door is locked!</span>"
return
if(usr.restrained() || usr.stat || usr.weakened || usr.stunned || usr.paralysis || usr.resting) //are you cuffed, dying, lying, stunned or other
return
if (usr.stat || !ishuman(usr))
if(occupant && occupant2)
user << "<span class='danger'>You can't fit in \the [src], it's full!</span>"
return
if (src.occupant)
if(allow2enter)
if(src.occupant2)
usr << "\blue <B>You can't fit!</b"
return
usr << "\blue <B>You starts climbing into the secondary seat.</B>"
visible_message("\blue [usr] starts to climb into [src.name]")
if(enter_after(40,usr))
moved_inside(usr)
else
usr << "You stop entering the spacepod."
return
else
usr << "\red <B>The [src.name]'s doors are locked.</B>"
return
if(occupant && !occupant2)
user << "<span class='notice'><b>You start climbing into the passenger bay.</b></span>"
user_enter(user)
if(src.occupant2)
if(src.occupant)
usr << "\red <B>The spacepod is full! Are you going to sit on [src.occupant2.name]'s lap?</b>"
return
else
for(var/mob/living/carbon/slime/M in range(1,usr))
if(M.Victim == usr)
usr << "You're too busy getting your life sucked out of you."
return
// usr << "You start climbing into [src.name]"
if(!occupant && occupant2)
user << "<span class='notice'><b>You start climbing into the pilot's seat.</b></span>"
user_enter(user)
visible_message("\blue [usr] starts to climb into [src.name]")
if(enter_after(40,usr))
if(!src.occupant)
moved_inside(usr)
else if(src.occupant!=usr)
usr << "[src.occupant] was faster. Try better next time, loser."
else
usr << "You stop entering the exosuit."
return
/*
if (usr.abiotic())
usr << "\blue <B>Subject cannot have abiotic items on.</B>"
return
*/
for(var/mob/living/carbon/slime/M in range(1,usr))
if(M.Victim == usr)
usr << "You're too busy getting your life sucked out of you."
return
// usr << "You start climbing into [src.name]"
visible_message("\blue [usr] starts to climb into [src.name]")
if(enter_after(40,usr))
if(!src.occupant)
moved_inside(usr)
else if(src.occupant!=usr)
usr << "[src.occupant] was faster. Try better next time, loser."
/obj/spacepod/proc/user_enter(var/mob/user)
visible_message("<span class='notice'>[user] starts to climb into \the [src.name].</span>")
if(enter_after(40,user))
moved_inside(user)
else
usr << "You stop entering the exosuit."
return
*/
user << "You stop entering the spacepod."
/obj/spacepod/verb/exit_pod()
set name = "Exit pod"
set category = "Spacepod"
set src = usr.loc
if(CheckIfOccupant2(usr))
if(src.occupant)
src.occupant.visible_message("<span class='notice'>[src.occupant2.name] climbs out of the pod!</span>") //Inform the remaining occupant that someone ejected.
inertia_dir = 0 // engage reverse thruster and power down pod
src.occupant2.loc = src.loc
src.occupant2 = null
usr << "<span class='notice'>You climb out of the pod.</span>"
var/mob/user = usr
var/spos = 0
if(!ismob(user)) return
else
if(src.occupant2)
src.occupant2.visible_message("<span class='notice'>[src.occupant2.name] climbs out of the pod!</span>") //Inform the remaining occupant that someone ejected.
inertia_dir = 0 // engage reverse thruster and power down pod
src.occupant.loc = src.loc
src.occupant = null
usr << "<span class='notice'>You climb out of the pod.</span>"
return
if(occupant == user) spos = 1
if(occupant2 == user) spos = 2
switch(spos)
if(0) return
if(1)
if(occupant2) occupant2 << "<span class='notice'>[occupant.name] climbs out of the pod!</span>"
occupant.forceMove(src.loc)
occupant = null
user << "<span class='notice'>You climb out of \the [src].</span>"
if(2)
if(occupant) occupant << "<span class='notice'>[occupant2.name] climbs out of the pod!</span>"
occupant2.forceMove(src.loc)
occupant2 = null
user << "<span class='notice'>You climb out of \the [src].</span>"
/obj/spacepod/verb/exit_pod2()
if(!src.occupant2)
set hidden = 1
set name = "Eject Secondary Seat"
set category = "Spacepod"
set src = usr.loc
if(!occupant2)
usr << "<span class='notice'>There is no one in the second seat.</span>"
return
else
set name = "Eject Secondary Seat"
set category = "Spacepod"
set src = usr.loc
set hidden = 0
if(usr == src.occupant2)
usr << "<span class='notice'>Use 'Exit Pod'</span>"
return
else
usr << "<span class='notice'>You eject [src.occupant2.name].</span>"
src.occupant2.visible_message("<span class='warning'>You were ejected from the pod!</span>")
inertia_dir = 0 // engage reverse thruster and power down pod
src.occupant2.loc = src.loc
src.occupant2 = null
if(usr == occupant2)
usr << "<span class='notice'>How do you plan to do that? The eject button is out of reach.</span>"
return
if(usr == occupant)
usr << "<span class='notice'>You eject [occupant2.name].</span>"
occupant2 << "<span class='danger'>\The [src] ejects you forcefully!</span>"
inertia_dir = 0
occupant2.forceMove(src.loc)
occupant2 = null
/obj/spacepod/verb/locksecondseat()
set name = "Lock Doors"
@@ -718,18 +623,12 @@
if(CheckIfOccupant2(usr))
if(!allow2enter)
usr << "<span class='notice'>You can't unlock the doors from your seat.</span>"
return
else
usr << "<span class='notice'>You can't lock the doors from your seat.</span>"
usr << "<span class='notice'>You can't [allow2enter ? "lock" : "unlock"] the doors from your seat.</span>"
return
if(src.allow2enter)
src.allow2enter = 0
usr << "<span class='notice'>You lock the doors.</span>"
else
src.allow2enter = 1
usr << "<span class='notice'>You unlock the doors.</span>"
allow2enter = !allow2enter
usr << "<span class='warning'>You [allow2enter ? "unlock" : "lock"] the doors.</span>"
/obj/spacepod/verb/toggleDoors()
set name = "Toggle Nearby Pod Doors"
@@ -779,10 +678,10 @@ obj/spacepod/verb/toggleLights()
/obj/spacepod/proc/lightsToggle()
lights = !lights
if(lights)
set_light(luminosity + lights_power)
set_light(lights_power)
else
set_light(luminosity - lights_power)
occupant << "Toggled lights [lights?"on":"off"]."
set_light(0)
occupant << "Toggled lights [lights ? "on" : "off"]."
return
/obj/spacepod/proc/enter_after(delay as num, var/mob/user as mob, var/numticks = 5)
@@ -843,6 +742,7 @@ obj/spacepod/verb/toggleLights()
..()
if(dir == 1 || dir == 4)
src.loc.Entered(src)
/obj/spacepod/proc/Process_Spacemove(var/check_drift = 0, mob/user)
var/dense_object = 0
if(!user)
@@ -861,9 +761,6 @@ obj/spacepod/verb/toggleLights()
if(!CheckIfOccupant2(user))
handlerelaymove(user, direction)
else
return
/obj/spacepod/proc/handlerelaymove(mob/user, direction)
var/moveship = 1
if(battery && battery.charge >= 3 && health && empcounter == 0)
@@ -912,7 +809,6 @@ obj/spacepod/verb/toggleLights()
else
return 0
/obj/effect/landmark/spacepod/random
name = "spacepod spawner"
invisibility = 101
+3
View File
@@ -40,6 +40,9 @@ proc/createRandomZlevel()
var/file = file(map)
if(isfile(file))
maploader.load_map(file)
// Initialize air for the away mission's turfs
if(air_master)
air_master.setup_allturfs(block(locate(1, 1, world.maxz), locate(world.maxx, world.maxy, world.maxz)))
world.log << "away mission loaded: [map]"
for(var/obj/effect/landmark/L in landmarks_list)
+55 -55
View File
@@ -3,7 +3,7 @@
name = "chili"
seed_name = "chili"
display_name = "chili plants"
chems = list("capsaicin" = list(3,5), "nutriment" = list(1,25))
chems = list("capsaicin" = list(3,5), "plantmatter" = list(1,25))
mutants = list("icechili")
kitchen_tag = "chili"
@@ -23,7 +23,7 @@
seed_name = "ice pepper"
display_name = "ice-pepper plants"
mutants = null
chems = list("frostoil" = list(3,5), "nutriment" = list(1,50))
chems = list("frostoil" = list(3,5), "plantmatter" = list(1,50))
kitchen_tag = "icechili"
/datum/seed/chili/ice/New()
@@ -38,7 +38,7 @@
seed_name = "berry"
display_name = "berry bush"
mutants = list("glowberries","poisonberries")
chems = list("nutriment" = list(1,10))
chems = list("plantmatter" = list(1,10))
kitchen_tag = "berries"
/datum/seed/berry/New()
@@ -58,7 +58,7 @@
seed_name = "glowberry"
display_name = "glowberry bush"
mutants = null
chems = list("nutriment" = list(1,10), "uranium" = list(3,5))
chems = list("plantmatter" = list(1,10), "uranium" = list(3,5))
/datum/seed/berry/glow/New()
..()
@@ -76,7 +76,7 @@
seed_name = "poison berry"
display_name = "poison berry bush"
mutants = list("deathberries")
chems = list("nutriment" = list(1), "toxin" = list(3,5))
chems = list("plantmatter" = list(1), "toxin" = list(3,5))
kitchen_tag = "poisonberries"
/datum/seed/berry/poison/New()
@@ -88,7 +88,7 @@
seed_name = "death berry"
display_name = "death berry bush"
mutants = null
chems = list("nutriment" = list(1), "toxin" = list(3,3), "lexorin" = list(1,5))
chems = list("plantmatter" = list(1), "toxin" = list(3,3), "lexorin" = list(1,5))
/datum/seed/berry/poison/death/New()
..()
@@ -102,7 +102,7 @@
seed_name = "nettle"
display_name = "nettles"
mutants = list("deathnettle")
chems = list("nutriment" = list(1,50), "sacid" = list(0,1))
chems = list("plantmatter" = list(1,50), "sacid" = list(0,1))
kitchen_tag = "nettle"
/datum/seed/nettle/New()
@@ -122,7 +122,7 @@
seed_name = "death nettle"
display_name = "death nettles"
mutants = null
chems = list("nutriment" = list(1,50), "facid" = list(0,1))
chems = list("plantmatter" = list(1,50), "facid" = list(0,1))
kitchen_tag = "deathnettle"
/datum/seed/nettle/death/New()
@@ -138,7 +138,7 @@
seed_name = "tomato"
display_name = "tomato plant"
mutants = list("bluetomato","bloodtomato")
chems = list("nutriment" = list(1,10))
chems = list("plantmatter" = list(1,10))
kitchen_tag = "tomato"
/datum/seed/tomato/New()
@@ -157,8 +157,8 @@
name = "bloodtomato"
seed_name = "blood tomato"
display_name = "blood tomato plant"
mutants = list("killer")
chems = list("nutriment" = list(1,10), "blood" = list(1,5))
mutants = list("killertomato")
chems = list("protein" = list(1,10), "blood" = list(1,5))
splat_type = /obj/effect/decal/cleanable/blood/splatter
kitchen_tag = "bloodtomato"
@@ -185,7 +185,7 @@
seed_name = "blue tomato"
display_name = "blue tomato plant"
mutants = list("bluespacetomato")
chems = list("nutriment" = list(1,20), "lube" = list(1,5))
chems = list("plantmatter" = list(1,20), "lube" = list(1,5))
/datum/seed/tomato/blue/New()
..()
@@ -197,7 +197,7 @@
seed_name = "bluespace tomato"
display_name = "bluespace tomato plant"
mutants = null
chems = list("nutriment" = list(1,20), "singulo" = list(10,5))
chems = list("plantmatter" = list(1,20), "singulo" = list(10,5))
/datum/seed/tomato/blue/teleport/New()
..()
@@ -212,7 +212,7 @@
seed_name = "eggplant"
display_name = "eggplants"
mutants = list("realeggplant")
chems = list("nutriment" = list(1,10))
chems = list("plantmatter" = list(1,10))
kitchen_tag = "eggplant"
/datum/seed/eggplant/New()
@@ -232,7 +232,7 @@
seed_name = "apple"
display_name = "apple tree"
mutants = list("poisonapple","goldapple")
chems = list("nutriment" = list(1,10))
chems = list("plantmatter" = list(1,10))
kitchen_tag = "apple"
/datum/seed/apple/New()
@@ -256,7 +256,7 @@
seed_name = "golden apple"
display_name = "gold apple tree"
mutants = null
chems = list("nutriment" = list(1,10), "gold" = list(1,5))
chems = list("plantmatter" = list(1,10), "gold" = list(1,5))
kitchen_tag = "goldapple"
/datum/seed/apple/gold/New()
@@ -273,7 +273,7 @@
seed_name = "ambrosia vulgaris"
display_name = "ambrosia vulgaris"
mutants = list("ambrosiadeus")
chems = list("nutriment" = list(1), "thc" = list(1,8), "silver_sulfadiazine" = list(1,8,1), "styptic_powder" = list(1,10,1), "toxin" = list(1,10))
chems = list("plantmatter" = list(1), "thc" = list(1,8), "silver_sulfadiazine" = list(1,8,1), "styptic_powder" = list(1,10,1), "toxin" = list(1,10))
kitchen_tag = "ambrosia"
/datum/seed/ambrosia/New()
@@ -292,7 +292,7 @@
seed_name = "ambrosia deus"
display_name = "ambrosia deus"
mutants = null
chems = list("nutriment" = list(1), "styptic_powder" = list(1,8), "synaptizine" = list(1,8,1), "methamphetamine" = list(1,10,1), "thc" = list(1,10))
chems = list("plantmatter" = list(1), "styptic_powder" = list(1,8), "synaptizine" = list(1,8,1), "methamphetamine" = list(1,10,1), "thc" = list(1,10))
kitchen_tag = "ambrosiadeus"
//Tobacco/varieties
@@ -301,7 +301,7 @@
seed_name = "tobacco"
display_name = "tobacco"
mutants = list("stobacco")
chems = list("nutriment" = list(1,40), "nicotine" = list(1,40))
chems = list("plantmatter" = list(1,40), "nicotine" = list(1,40))
kitchen_tag = "tobacco"
/datum/seed/tobacco/New()
@@ -320,7 +320,7 @@
seed_name = "space tobacco"
display_name = "space tobacco"
mutants = null
chems = list("nutriment" = list(1,40), "nicotine" = list(1,20), "epinephrine" = list(1,30))
chems = list("plantmatter" = list(1,40), "nicotine" = list(1,20), "epinephrine" = list(1,30))
kitchen_tag = "stobacco"
/datum/seed/tobacco/space/New()
@@ -412,7 +412,7 @@
seed_noun = "spores"
display_name = "chanterelle mushrooms"
mutants = list("reishi","amanita","plumphelmet")
chems = list("nutriment" = list(1,25), "fungus" = list(1,10))
chems = list("plantmatter" = list(1,25), "fungus" = list(1,10))
splat_type = /obj/effect/plant
kitchen_tag = "mushroom"
@@ -448,7 +448,7 @@
seed_name = "plump helmet"
display_name = "plump helmet mushrooms"
mutants = list("walkingmushroom","towercap")
chems = list("nutriment" = list(2,10))
chems = list("plantmatter" = list(2,10))
kitchen_tag = "plumphelmet"
/datum/seed/mushroom/plump/New()
@@ -481,7 +481,7 @@
seed_name = "reishi"
display_name = "reishi"
mutants = list("libertycap","glowshroom")
chems = list("nutriment" = list(1,50), "psilocybin" = list(3,5))
chems = list("plantmatter" = list(1,50), "psilocybin" = list(3,5))
/datum/seed/mushroom/hallucinogenic/New()
..()
@@ -499,7 +499,7 @@
seed_name = "liberty cap"
display_name = "liberty cap mushrooms"
mutants = null
chems = list("nutriment" = list(1), "morphine" = list(3,3), "space_drugs" = list(1,25))
chems = list("plantmatter" = list(1), "morphine" = list(3,3), "space_drugs" = list(1,25))
kitchen_tag = "libertycap"
/datum/seed/mushroom/hallucinogenic/strong/New()
@@ -516,7 +516,7 @@
seed_name = "fly amanita"
display_name = "fly amanita mushrooms"
mutants = list("destroyingangel","plastic")
chems = list("nutriment" = list(1), "amanitin" = list(3,3), "psilocybin" = list(1,25))
chems = list("plantmatter" = list(1), "amanitin" = list(3,3), "psilocybin" = list(1,25))
kitchen_tag = "amanita"
/datum/seed/mushroom/poison/New()
@@ -535,7 +535,7 @@
seed_name = "destroying angel"
display_name = "destroying angel mushrooms"
mutants = null
chems = list("nutriment" = list(1,50), "amanitin" = list(13,3), "psilocybin" = list(1,25))
chems = list("plantmatter" = list(1,50), "amanitin" = list(13,3), "psilocybin" = list(1,25))
/datum/seed/mushroom/poison/death/New()
..()
@@ -605,7 +605,7 @@
name = "harebells"
seed_name = "harebell"
display_name = "harebells"
chems = list("nutriment" = list(1,20))
chems = list("plantmatter" = list(1,20))
/datum/seed/flower/New()
..()
@@ -621,7 +621,7 @@
name = "poppies"
seed_name = "poppy"
display_name = "poppies"
chems = list("nutriment" = list(1,20), "styptic_powder" = list(1,10))
chems = list("plantmatter" = list(1,20), "styptic_powder" = list(1,10))
kitchen_tag = "poppy"
/datum/seed/flower/poppy/New()
@@ -652,7 +652,7 @@
seed_name = "grape"
display_name = "grapevines"
mutants = list("greengrapes")
chems = list("nutriment" = list(1,10), "sugar" = list(1,5))
chems = list("plantmatter" = list(1,10), "sugar" = list(1,5))
/datum/seed/grapes/New()
..()
@@ -671,7 +671,7 @@
seed_name = "green grape"
display_name = "green grapevines"
mutants = null
chems = list("nutriment" = list(1,10), "silver_sulfadiazine" = list(3,5))
chems = list("plantmatter" = list(1,10), "silver_sulfadiazine" = list(3,5))
/datum/seed/grapes/green/New()
..()
@@ -682,7 +682,7 @@
name = "peanut"
seed_name = "peanut"
display_name = "peanut vines"
chems = list("nutriment" = list(1,10))
chems = list("plantmatter" = list(1,10))
/datum/seed/peanuts/New()
..()
@@ -699,7 +699,7 @@
name = "cabbage"
seed_name = "cabbage"
display_name = "cabbages"
chems = list("nutriment" = list(1,10))
chems = list("plantmatter" = list(1,10))
kitchen_tag = "cabbage"
/datum/seed/cabbage/New()
@@ -737,7 +737,7 @@
name = "corn"
seed_name = "corn"
display_name = "ears of corn"
chems = list("nutriment" = list(1,10), "corn_starch" = list(3,5))
chems = list("plantmatter" = list(1,10), "corn_starch" = list(3,5))
kitchen_tag = "corn"
trash_type = /obj/item/weapon/corncob
@@ -756,7 +756,7 @@
name = "potato"
seed_name = "potato"
display_name = "potatoes"
chems = list("nutriment" = list(1,10))
chems = list("plantmatter" = list(1,10))
kitchen_tag = "potato"
/datum/seed/potato/New()
@@ -774,7 +774,7 @@
name = "soybean"
seed_name = "soybean"
display_name = "soybeans"
chems = list("nutriment" = list(1,20), "soybeanoil" = list(1,20))
chems = list("plantmatter" = list(1,20), "soybeanoil" = list(1,20))
kitchen_tag = "soybeans"
/datum/seed/soybean/New()
@@ -792,7 +792,7 @@
name = "wheat"
seed_name = "wheat"
display_name = "wheat stalks"
chems = list("nutriment" = list(1,25))
chems = list("plantmatter" = list(1,25))
kitchen_tag = "wheat"
/datum/seed/wheat/New()
@@ -810,7 +810,7 @@
name = "rice"
seed_name = "rice"
display_name = "rice stalks"
chems = list("nutriment" = list(1,25))
chems = list("plantmatter" = list(1,25))
kitchen_tag = "rice"
/datum/seed/rice/New()
@@ -828,7 +828,7 @@
name = "carrot"
seed_name = "carrot"
display_name = "carrots"
chems = list("nutriment" = list(1,20), "oculine" = list(3,5))
chems = list("plantmatter" = list(1,20), "oculine" = list(3,5))
kitchen_tag = "carrot"
/datum/seed/carrots/New()
@@ -862,7 +862,7 @@
name = "whitebeet"
seed_name = "white-beet"
display_name = "white-beets"
chems = list("nutriment" = list(0,20), "sugar" = list(1,5))
chems = list("plantmatter" = list(0,20), "sugar" = list(1,5))
kitchen_tag = "whitebeet"
/datum/seed/whitebeets/New()
@@ -898,7 +898,7 @@
name = "watermelon"
seed_name = "watermelon"
display_name = "watermelon vine"
chems = list("nutriment" = list(1,6))
chems = list("plantmatter" = list(1,6))
kitchen_tag = "watermelon"
/datum/seed/watermelon/New()
@@ -918,7 +918,7 @@
name = "pumpkin"
seed_name = "pumpkin"
display_name = "pumpkin vine"
chems = list("nutriment" = list(1,6))
chems = list("plantmatter" = list(1,6))
kitchen_tag = "pumpkin"
/datum/seed/pumpkin/New()
@@ -937,7 +937,7 @@
name = "lime"
seed_name = "lime"
display_name = "lime trees"
chems = list("nutriment" = list(1,20))
chems = list("plantmatter" = list(1,20))
kitchen_tag = "lime"
/datum/seed/citrus/New()
@@ -956,7 +956,7 @@
name = "lemon"
seed_name = "lemon"
display_name = "lemon trees"
chems = list("nutriment" = list(1,20))
chems = list("plantmatter" = list(1,20))
kitchen_tag = "lemon"
/datum/seed/citrus/lemon/New()
@@ -969,7 +969,7 @@
seed_name = "orange"
display_name = "orange trees"
kitchen_tag = "orange"
chems = list("nutriment" = list(1,20))
chems = list("plantmatter" = list(1,20))
/datum/seed/citrus/orange/New()
..()
@@ -979,7 +979,7 @@
name = "grass"
seed_name = "grass"
display_name = "grass"
chems = list("nutriment" = list(1,20))
chems = list("plantmatter" = list(1,20))
kitchen_tag = "grass"
/datum/seed/grass/New()
@@ -997,7 +997,7 @@
name = "cocoa"
seed_name = "cacao"
display_name = "cacao tree"
chems = list("nutriment" = list(1,10), "coco" = list(4,5))
chems = list("plantmatter" = list(1,10), "coco" = list(4,5))
/datum/seed/cocoa/New()
..()
@@ -1015,7 +1015,7 @@
seed_name = "cherry"
seed_noun = "pits"
display_name = "cherry tree"
chems = list("nutriment" = list(1,15), "sugar" = list(1,15))
chems = list("plantmatter" = list(1,15), "sugar" = list(1,15))
kitchen_tag = "cherries"
/datum/seed/cherries/New()
@@ -1035,7 +1035,7 @@
name = "kudzu"
seed_name = "kudzu"
display_name = "kudzu vines"
chems = list("nutriment" = list(1,50), "charcoal" = list(1,25))
chems = list("plantmatter" = list(1,50), "charcoal" = list(1,25))
/datum/seed/kudzu/New()
..()
@@ -1130,7 +1130,7 @@
name = "telriis"
seed_name = "telriis"
display_name = "telriis grass"
chems = list("wine" = list(1,5), "toxin" = list(1,5), "nutriment" = list(1,6))
chems = list("wine" = list(1,5), "toxin" = list(1,5), "plantmatter" = list(1,6))
/datum/seed/telriis/New()
..()
@@ -1145,7 +1145,7 @@
name = "thaadra"
seed_name = "thaa'dra"
display_name = "thaa'dra lichen"
chems = list("frostoil" = list(1,5),"nutriment" = list(1,5))
chems = list("frostoil" = list(1,5),"plantmatter" = list(1,5))
/datum/seed/thaadra/New()
..()
@@ -1160,7 +1160,7 @@
name = "jurlmah"
seed_name = "jurl'mah"
display_name = "jurl'mah reeds"
chems = list("serotrotium" = list(1,5),"nutriment" = list(1,5))
chems = list("serotrotium" = list(1,5),"plantmatter" = list(1,5))
/datum/seed/jurlmah/New()
..()
@@ -1175,7 +1175,7 @@
name = "amauri"
seed_name = "amauri"
display_name = "amauri plant"
chems = list("condensedcapsaicin" = list(1,5),"nutriment" = list(1,5))
chems = list("condensedcapsaicin" = list(1,5),"plantmatter" = list(1,5))
/datum/seed/amauri/New()
..()
@@ -1190,7 +1190,7 @@
name = "gelthi"
seed_name = "gelthi"
display_name = "gelthi plant"
chems = list("morphine" = list(1,5),"capsaicin" = list(1,5),"nutriment" = list(1,5))
chems = list("morphine" = list(1,5),"capsaicin" = list(1,5),"plantmatter" = list(1,5))
/datum/seed/gelthi/New()
..()
@@ -1205,7 +1205,7 @@
name = "vale"
seed_name = "vale"
display_name = "vale bush"
chems = list("sal_acid" = list(1,5),"salbutamol" = list(1,2),"nutriment"= list(1,5))
chems = list("sal_acid" = list(1,5),"salbutamol" = list(1,2),"plantmatter"= list(1,5))
/datum/seed/vale/New()
..()
@@ -1220,7 +1220,7 @@
name = "surik"
seed_name = "surik"
display_name = "surik vine"
chems = list("haloperidol" = list(1,3),"synaptizine" = list(1,2),"nutriment" = list(1,5))
chems = list("haloperidol" = list(1,3),"synaptizine" = list(1,2),"plantmatter" = list(1,5))
/datum/seed/surik/New()
..()
@@ -35,7 +35,7 @@
)
flags = IS_WHITELISTED | HAS_LIPS | HAS_UNDERWEAR | NO_BREATHE | HAS_SKIN_COLOR | NO_SCAN | NO_SCAN | HIVEMIND
dietflags = DIET_HERB //bees feed off nectar, so bee people feed off plants too
base_color = "#704300"
flesh_color = "#704300"
@@ -88,6 +88,7 @@
burn_mod = 4 // holy shite, poor guys wont survive half a second cooking smores
brute_mod = 2 // damn, double wham, double dam
flags = IS_WHITELISTED | NO_BREATHE | NO_BLOOD | NO_PAIN | HAS_LIPS | NO_SCAN
dietflags = DIET_OMNI //still human at their core, so they maintain their eating habits and diet
has_organ = list(
"heart" = /obj/item/organ/heart,
@@ -6,6 +6,7 @@
default_language = "Galactic Common"
flags = NO_BREATHE | NO_PAIN | NO_BLOOD | NO_SCAN
dietflags = DIET_OMNI //golems can eat anything because they are magic or something
blood_color = "#515573"
flesh_color = "#137E8F"
@@ -6,6 +6,7 @@
unarmed_type = /datum/unarmed_attack/punch
flags = IS_WHITELISTED | NO_BLOOD
dietflags = DIET_OMNI
//default_mutations=list(SKELETON) // This screws things up
@@ -18,6 +18,7 @@
flags = NO_BLOOD | NO_BREATHE | NO_SCAN
bodyflags = FEET_NOSLIP
dietflags = DIET_OMNI //the mutation process allowed you to now digest all foods regardless of initial race
/datum/species/shadow/handle_death(var/mob/living/carbon/human/H)
H.dust()
+12
View File
@@ -53,6 +53,7 @@
var/flags = 0 // Various specific features.
var/bloodflags=0
var/bodyflags=0
var/dietflags = 0 // Make sure you set this, otherwise it won't be able to digest a lot of foods
var/list/abilities = list() // For species-derived or admin-given powers
@@ -322,6 +323,7 @@
language = "Sol Common"
flags = HAS_LIPS | HAS_UNDERWEAR | CAN_BE_FAT
bodyflags = HAS_SKIN_TONE
dietflags = DIET_OMNI
unarmed_type = /datum/unarmed_attack/punch
blurb = "Humanity originated in the Sol system, and over the last five centuries has spread \
colonies across a wide swathe of space. They hold a wide range of forms and creeds.<br/><br/> \
@@ -349,6 +351,7 @@
flags = HAS_LIPS | HAS_UNDERWEAR
bodyflags = FEET_CLAWS | HAS_TAIL | HAS_SKIN_COLOR | TAIL_WAGGING
dietflags = DIET_CARN
cold_level_1 = 280 //Default 260 - Lower is better
cold_level_2 = 220 //Default 200
@@ -398,6 +401,7 @@
flags = HAS_LIPS | HAS_UNDERWEAR | CAN_BE_FAT
bodyflags = FEET_PADDED | HAS_TAIL | HAS_SKIN_COLOR | TAIL_WAGGING
dietflags = DIET_OMNI
flesh_color = "#AFA59E"
base_color = "#333333"
@@ -424,6 +428,7 @@
flags = HAS_LIPS | HAS_UNDERWEAR
bodyflags = HAS_SKIN_COLOR
dietflags = DIET_HERB
flesh_color = "#8CD7A3"
blood_color = "#1D2CBF"
@@ -462,6 +467,7 @@
poison_type = "oxygen"
flags = NO_SCAN | IS_WHITELISTED
dietflags = DIET_OMNI
blood_color = "#2299FC"
flesh_color = "#808D11"
@@ -515,6 +521,7 @@
poison_type = "oxygen"
flags = NO_SCAN | NO_BLOOD | HAS_TAIL | NO_PAIN | IS_WHITELISTED
dietflags = DIET_OMNI //should inherit this from vox, this is here just in case
blood_color = "#2299FC"
flesh_color = "#808D11"
@@ -547,6 +554,7 @@
flags = IS_WHITELISTED
bodyflags = FEET_CLAWS
dietflags = DIET_HERB
blood_color = "#FB9800"
@@ -564,6 +572,7 @@
flags = IS_WHITELISTED | NO_BREATHE | HAS_LIPS | NO_INTORGANS | NO_SCAN
bodyflags = HAS_SKIN_COLOR
bloodflags = BLOOD_SLIME
dietflags = DIET_CARN
//ventcrawler = 1 //ventcrawling commented out
@@ -588,6 +597,7 @@
primitive = /mob/living/carbon/monkey // TODO
flags = IS_WHITELISTED | HAS_LIPS | HAS_UNDERWEAR | CAN_BE_FAT
dietflags = DIET_HERB
blood_color = "#A200FF"
@@ -635,6 +645,7 @@
water and other radiation."
flags = NO_BREATHE | REQUIRE_LIGHT | IS_PLANT | RAD_ABSORB | NO_BLOOD | NO_PAIN
dietflags = 0 //Diona regenerate nutrition in light, no diet necessary
body_temperature = T0C + 15 //make the plant people have a bit lower body temperature, why not
@@ -720,6 +731,7 @@
synth_temp_gain = 10 //this should cause IPCs to stabilize at ~80 C in a 20 C environment.
flags = IS_WHITELISTED | NO_BREATHE | NO_SCAN | NO_BLOOD | NO_PAIN | IS_SYNTHETIC | NO_INTORGANS
dietflags = 0 //IPCs can't eat, so no diet
blood_color = "#1F181F"
flesh_color = "#AAAAAA"
+1 -1
View File
@@ -218,7 +218,7 @@
compressor = C
doors = new /list()
for(var/obj/machinery/door/poddoor/P in machines)
if(P.id == id)
if(P.id_tag == id)
doors += P
/*
+51 -4
View File
@@ -1485,10 +1485,31 @@ datum
/////////////////////////Food Reagents////////////////////////////
// Part of the food code. Nutriment is used instead of the old "heal_amt" code. Also is where all the food
// condiments, additives, and such go.
nutriment
nutriment // Pure nutriment, universally digestable and thus slightly less effective
name = "Nutriment"
id = "nutriment"
description = "All the vitamins, minerals, and carbohydrates the body needs in pure form."
description = "A questionable mixture of various pure nutrients commonly found in processed foods."
reagent_state = SOLID
nutriment_factor = 12 * REAGENTS_METABOLISM
color = "#664330" // rgb: 102, 67, 48
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(!(M.mind in ticker.mode.vampires))
if(ishuman(M))
var/mob/living/carbon/human/H = M
if(H.species && H.species.dietflags) //Make sure the species has it's dietflag set, otherwise it can't digest any nutrients
H.nutrition += nutriment_factor // For hunger and fatness
if(prob(50)) M.heal_organ_damage(1,0)
if(istype(M,/mob/living/simple_animal)) //Any nutrients can heal simple animals
if(prob(50)) M.heal_organ_damage(1,0)
..()
return
protein // Meat-based protein, digestable by carnivores and omnivores, worthless to herbivores
name = "Protein"
id = "protein"
description = "Various essential proteins and fats commonly found in animal flesh and blood."
reagent_state = SOLID
nutriment_factor = 15 * REAGENTS_METABOLISM
color = "#664330" // rgb: 102, 67, 48
@@ -1496,8 +1517,34 @@ datum
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(!(M.mind in ticker.mode.vampires))
M.nutrition += nutriment_factor // For hunger and fatness
if(prob(50)) M.heal_organ_damage(1,0)
if(ishuman(M))
var/mob/living/carbon/human/H = M
if(H.species && H.species.dietflags && !(H.species.dietflags & DIET_HERB)) //Make sure the species has it's dietflag set, and that it is not a herbivore
H.nutrition += nutriment_factor // For hunger and fatness
if(prob(50)) M.heal_organ_damage(1,0)
if(istype(M,/mob/living/simple_animal)) //Any nutrients can heal simple animals
if(prob(50)) M.heal_organ_damage(1,0)
..()
return
plantmatter // Plant-based biomatter, digestable by herbivores and omnivores, worthless to carnivores
name = "Plant-matter"
id = "plantmatter"
description = "Vitamin-rich fibers and natural sugars commonly found in fresh produce."
reagent_state = SOLID
nutriment_factor = 15 * REAGENTS_METABOLISM
color = "#664330" // rgb: 102, 67, 48
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(!(M.mind in ticker.mode.vampires))
if(ishuman(M))
var/mob/living/carbon/human/H = M
if(H.species && H.species.dietflags && !(H.species.dietflags & DIET_CARN)) //Make sure the species has it's dietflag set, and that it is not a carnivore
H.nutrition += nutriment_factor // For hunger and fatness
if(prob(50)) M.heal_organ_damage(1,0)
if(istype(M,/mob/living/simple_animal)) //Any nutrients can heal simple animals
if(prob(50)) M.heal_organ_damage(1,0)
..()
return
@@ -44,7 +44,7 @@
return 0
if(istype(M, /mob/living/carbon))
var/fullness = M.nutrition + (M.reagents.get_reagent_amount("nutriment") * 25)
var/fullness = M.nutrition + (M.reagents.get_reagent_amount("nutriment") * 20) + (M.reagents.get_reagent_amount("protein") * 25) + (M.reagents.get_reagent_amount("plantmatter") * 25)
if(M == user) //If you're eating it yourself
if(istype(M,/mob/living/carbon/human))
var/mob/living/carbon/human/H = M
@@ -535,7 +535,7 @@
New()
..()
reagents.add_reagent("nutriment", 1)
reagents.add_reagent("protein", 1)
reagents.add_reagent("egg", 5)
throw_impact(atom/hit_atom)
@@ -635,7 +635,7 @@
New()
..()
reagents.add_reagent("nutriment", 4)
reagents.add_reagent("protein", 4)
src.bitesize = 3
/obj/item/weapon/reagent_containers/food/snacks/appendix
@@ -648,7 +648,7 @@
New()
..()
reagents.add_reagent("nutriment", 3)
reagents.add_reagent("protein", 3)
src.bitesize = 3
/obj/item/weapon/reagent_containers/food/snacks/appendix/inflamed
@@ -699,7 +699,7 @@
New()
..()
reagents.add_reagent("nutriment", 3)
reagents.add_reagent("protein", 3)
reagents.add_reagent("carpotoxin", 3)
src.bitesize = 6
@@ -723,7 +723,7 @@
New()
..()
reagents.add_reagent("nutriment", 3)
reagents.add_reagent("plantmatter", 3)
reagents.add_reagent("psilocybin", 3)
src.bitesize = 6
@@ -735,7 +735,7 @@
New()
..()
reagents.add_reagent("nutriment", 3)
reagents.add_reagent("protein", 3)
src.bitesize = 6
/obj/item/weapon/reagent_containers/food/snacks/bearmeat
@@ -746,7 +746,7 @@
New()
..()
reagents.add_reagent("nutriment", 12)
reagents.add_reagent("protein", 12)
reagents.add_reagent("methamphetamine", 5)
src.bitesize = 3
@@ -758,7 +758,7 @@
New()
..()
reagents.add_reagent("nutriment", 3)
reagents.add_reagent("protein", 3)
src.bitesize = 6
/obj/item/weapon/reagent_containers/food/snacks/spidermeat
@@ -767,7 +767,7 @@
icon_state = "spidermeat"
New()
..()
reagents.add_reagent("nutriment", 3)
reagents.add_reagent("protein", 3)
reagents.add_reagent("toxin", 3)
bitesize = 3
@@ -777,7 +777,7 @@
icon_state = "spiderleg"
New()
..()
reagents.add_reagent("nutriment", 2)
reagents.add_reagent("protein", 2)
reagents.add_reagent("toxin", 2)
bitesize = 2
@@ -788,7 +788,7 @@
filling_color = "#DB0000"
New()
..()
reagents.add_reagent("nutriment", 3)
reagents.add_reagent("protein", 3)
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/sausage
@@ -799,7 +799,7 @@
New()
..()
reagents.add_reagent("nutriment", 6)
reagents.add_reagent("protein", 6)
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/donkpocket
@@ -1244,7 +1244,7 @@
New()
..()
reagents.add_reagent("nutriment", 4)
reagents.add_reagent("protein", 4)
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/no_raisin
@@ -1256,7 +1256,7 @@
New()
..()
reagents.add_reagent("nutriment", 6)
reagents.add_reagent("plantmatter", 6)
/obj/item/weapon/reagent_containers/food/snacks/spacetwinkie
name = "Space Twinkie"
@@ -1297,7 +1297,8 @@
icon_state = "chinese2"
New()
..()
reagents.add_reagent("nutriment", 6)
reagents.add_reagent("nutriment", 4)
reagents.add_reagent("protein", 2)
reagents.add_reagent("msg",4)
bitesize = 2
@@ -1672,7 +1673,7 @@
New()
..()
reagents.add_reagent("nutriment",10)
reagents.add_reagent("protein",10)
afterattack(obj/O as obj, mob/user as mob, proximity)
if(!proximity) return
@@ -2074,7 +2075,7 @@
New()
..()
reagents.add_reagent("nutriment", 3)
reagents.add_reagent("plantmatter", 3)
reagents.add_reagent("oculine", 3)
bitesize = 2
@@ -2332,7 +2333,8 @@
filling_color = "#FF7575"
New()
..()
reagents.add_reagent("nutriment", 30)
reagents.add_reagent("protein", 20)
reagents.add_reagent("nutriment", 10)
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/meatbreadslice
@@ -2352,7 +2354,8 @@
filling_color = "#8AFF75"
New()
..()
reagents.add_reagent("nutriment", 30)
reagents.add_reagent("protein", 20)
reagents.add_reagent("nutriment", 10)
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/xenomeatbreadslice
@@ -2371,7 +2374,8 @@
slices_num = 5
New()
..()
reagents.add_reagent("nutriment", 30)
reagents.add_reagent("protein", 20)
reagents.add_reagent("nutriment", 10)
reagents.add_reagent("toxin", 15)
bitesize = 2
@@ -2457,7 +2461,8 @@
filling_color = "#E6AEDB"
New()
..()
reagents.add_reagent("nutriment", 25)
reagents.add_reagent("protein", 15)
reagents.add_reagent("nutriment", 10)
reagents.add_reagent("mannitol", 10)
bitesize = 2
@@ -2777,7 +2782,8 @@
slices_num = 6
New()
..()
reagents.add_reagent("nutriment", 50)
reagents.add_reagent("protein", 30)
reagents.add_reagent("nutriment", 20)
reagents.add_reagent("tomatojuice", 6)
bitesize = 2
@@ -2796,7 +2802,8 @@
slices_num = 6
New()
..()
reagents.add_reagent("nutriment", 35)
reagents.add_reagent("plantmatter", 25)
reagents.add_reagent("nutriment", 10)
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/mushroompizzaslice
@@ -2814,7 +2821,8 @@
slices_num = 6
New()
..()
reagents.add_reagent("nutriment", 30)
reagents.add_reagent("plantmatter", 20)
reagents.add_reagent("nutriment", 10)
reagents.add_reagent("tomatojuice", 6)
reagents.add_reagent("oculine", 12)
bitesize = 2
@@ -3119,7 +3127,8 @@
New()
..()
reagents.add_reagent("nutriment", 6)
reagents.add_reagent("plantmatter", 4)
reagents.add_reagent("nutriment", 2)
reagents.add_reagent("radium", 2)
bitesize = 2
@@ -3140,7 +3149,7 @@
icon_state = "spidereggs"
New()
..()
reagents.add_reagent("nutriment", 2)
reagents.add_reagent("protein", 2)
reagents.add_reagent("toxin", 3)
bitesize = 2
@@ -3317,7 +3326,7 @@
bitesize = 1
New()
..()
reagents.add_reagent("nutriment", 1)
reagents.add_reagent("protein", 1)
/obj/item/weapon/reagent_containers/food/snacks/cutlet
name = "cutlet"
@@ -3327,7 +3336,7 @@
bitesize = 2
New()
..()
reagents.add_reagent("nutriment", 2)
reagents.add_reagent("protein", 2)
/obj/item/weapon/reagent_containers/food/snacks/rawmeatball
name = "raw meatball"
@@ -3337,7 +3346,7 @@
bitesize = 2
New()
..()
reagents.add_reagent("nutriment", 2)
reagents.add_reagent("protein", 2)
/obj/item/weapon/reagent_containers/food/snacks/hotdog
name = "hotdog"
@@ -3346,7 +3355,7 @@
bitesize = 2
New()
..()
reagents.add_reagent("nutriment", 6)
reagents.add_reagent("protein", 6)
/obj/item/weapon/reagent_containers/food/snacks/flatbread
name = "flatbread"
@@ -3375,7 +3384,7 @@
bitesize = 2
New()
..()
reagents.add_reagent("nutriment", 3)
reagents.add_reagent("plantmatter", 3)
/obj/item/weapon/reagent_containers/food/snacks/ectoplasm
name = "ectoplasm"
@@ -6,7 +6,7 @@
filling_color = "#FF1C1C"
New()
..()
reagents.add_reagent("nutriment", 3)
reagents.add_reagent("protein", 3)
src.bitesize = 3
/obj/item/weapon/reagent_containers/food/snacks/meat/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
@@ -320,4 +320,14 @@
build_type = IMPRINTER
materials = list("$glass" = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/vendor
category = list("Misc. Machinery")
/datum/design/pod
name = "Machine Board (Mass Driver and Pod Doors Control)"
desc = "Allows for the construction of circuit boards used to build a Mass Driver and Pod Doors Control."
id = "pod"
req_tech = list("programming" = 2,"engineering" = 4)
build_type = IMPRINTER
materials = list("$glass" = 2000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/pod
category = list("Misc. Machinery")
+3 -3
View File
@@ -144,7 +144,7 @@
//Begin Marauder launchpad.
spawn(0)//So it parallel processes it.
for(var/obj/machinery/door/poddoor/M in special_ops)
switch(M.id)
switch(M.id_tag)
if("ASSAULT0")
spawn(10)//1 second delay between each.
M.open()
@@ -175,7 +175,7 @@
sleep(10)
for(var/obj/machinery/mass_driver/M in special_ops)
switch(M.id)
switch(M.id_tag)
if("ASSAULT0")
spawn(10)
M.drive()
@@ -192,7 +192,7 @@
sleep(50)//Doors remain open for 5 seconds.
for(var/obj/machinery/door/poddoor/M in special_ops)
switch(M.id)//Doors close at the same time.
switch(M.id_tag)//Doors close at the same time.
if("ASSAULT0")
spawn(0)
M.close()
+2 -1
View File
@@ -49,6 +49,7 @@
var/automode = 0
var/list/blacklist = list(/obj/tram/rail,/atom/movable/lighting_overlay)
var/list/ancwhitelist = list(/obj/tram, /obj/vehicle, /obj/structure/stool/bed/chair, /obj/structure/grille, /obj/structure/window)
/obj/tram/tram_controller/New()
spawn(1)
@@ -144,7 +145,7 @@
if(is_type_in_list(AM, blacklist)) return 0
if(!AM.simulated) return 0
if(AM.anchored)
if(istype(AM,/obj/tram) || istype(AM,/obj/vehicle))
if(is_type_in_list(AM, ancwhitelist))
return 1
return 0
return 1
+1 -1
View File
@@ -3,8 +3,8 @@
desc = "Controls a tram."
icon = 'icons/obj/airlock_machines.dmi'
icon_state = "airlock_control_standby"
anchored = 1
var/obj/tram/tram_controller/tram_linked
var/list/cdir2readable = list("North","South",null,"East",null,null,null,"West")
/obj/tram/controlpad/attack_hand(var/mob/user)
usr.set_machine(src)