Fixed the signpost shuttle bug.

Critters have been added and livestock removed
Xbow damage raised to 30 a shot
Centcom Survival Kit is once again a box
Sec uniforms moved into their own locker

After IRC talk
Guns that are created in the protolathe now spawn inside of a lockbox
They can be unlocked by an ID with Armory access or an Emag.


git-svn-id: http://tgstation13.googlecode.com/svn/trunk@2045 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
mport2004@gmail.com
2011-08-24 04:00:45 +00:00
parent e3de8ddc34
commit 3cae06c9c3
45 changed files with 3425 additions and 3632 deletions

View File

@@ -6,7 +6,7 @@
log_admin("[key_name(usr)] has left build mode.") log_admin("[key_name(usr)] has left build mode.")
M.client.buildmode = 0 M.client.buildmode = 0
M.client.show_popup_menus = 1 M.client.show_popup_menus = 1
for(var/obj/buildholder/H) for(var/obj/bmode/buildholder/H)
if(H.cl == M.client) if(H.cl == M.client)
del(H) del(H)
else else
@@ -14,14 +14,14 @@
M.client.buildmode = 1 M.client.buildmode = 1
M.client.show_popup_menus = 0 M.client.show_popup_menus = 0
var/obj/buildholder/H = new/obj/buildholder() var/obj/bmode/buildholder/H = new/obj/bmode/buildholder()
var/obj/builddir/A = new/obj/builddir(H) var/obj/bmode/builddir/A = new/obj/bmode/builddir(H)
A.master = H A.master = H
var/obj/buildhelp/B = new/obj/buildhelp(H) var/obj/bmode/buildhelp/B = new/obj/bmode/buildhelp(H)
B.master = H B.master = H
var/obj/buildmode/C = new/obj/buildmode(H) var/obj/bmode/buildmode/C = new/obj/bmode/buildmode(H)
C.master = H C.master = H
var/obj/buildquit/D = new/obj/buildquit(H) var/obj/bmode/buildquit/D = new/obj/bmode/buildquit(H)
D.master = H D.master = H
H.builddir = A H.builddir = A
@@ -34,161 +34,154 @@
M.client.screen += D M.client.screen += D
H.cl = M.client H.cl = M.client
/obj/builddir /obj/bmode//Cleaning up the tree a bit
density = 1 density = 1
anchored = 1 anchored = 1
layer = 20 layer = 20
dir = NORTH dir = NORTH
icon = 'buildmode.dmi' icon = 'buildmode.dmi'
var/obj/bmode/buildholder/master = null
/obj/bmode/builddir
icon_state = "build" icon_state = "build"
screen_loc = "NORTH,WEST" screen_loc = "NORTH,WEST"
var/obj/buildholder/master = null Click()
/obj/buildhelp switch(dir)
density = 1 if(NORTH)
anchored = 1 dir = EAST
layer = 20 if(EAST)
dir = NORTH dir = SOUTH
if(SOUTH)
dir = WEST
if(WEST)
dir = NORTHWEST
if(NORTHWEST)
dir = NORTH
return
/obj/bmode/buildhelp
icon = 'buildmode.dmi' icon = 'buildmode.dmi'
icon_state = "buildhelp" icon_state = "buildhelp"
screen_loc = "NORTH,WEST+1" screen_loc = "NORTH,WEST+1"
var/obj/buildholder/master = null Click()
/obj/buildmode switch(master.cl.buildmode)
density = 1 if(1)
anchored = 1 usr << "\blue ***********************************************************"
layer = 20 usr << "\blue Left Mouse Button = Construct / Upgrade"
dir = NORTH usr << "\blue Right Mouse Button = Deconstruct / Delete / Downgrade"
icon = 'buildmode.dmi' usr << "\blue Left Mouse Button + ctrl = R-Window"
icon_state = "buildmode1" usr << "\blue Left Mouse Button + alt = Airlock"
screen_loc = "NORTH,WEST+2" usr << ""
var/obj/buildholder/master = null usr << "\blue Use the button in the upper left corner to"
var/varholder = "name" usr << "\blue change the direction of built objects."
var/valueholder = "derp" usr << "\blue ***********************************************************"
var/objholder = "/obj/closet" if(2)
/obj/buildquit usr << "\blue ***********************************************************"
density = 1 usr << "\blue Right Mouse Button on buildmode button = Set object type"
anchored = 1 usr << "\blue Left Mouse Button on turf/obj = Place objects"
layer = 20 usr << "\blue Right Mouse Button = Delete objects"
dir = NORTH usr << ""
icon = 'buildmode.dmi' usr << "\blue Use the button in the upper left corner to"
usr << "\blue change the direction of built objects."
usr << "\blue ***********************************************************"
if(3)
usr << "\blue ***********************************************************"
usr << "\blue Right Mouse Button on buildmode button = Select var(type) & value"
usr << "\blue Left Mouse Button on turf/obj/mob = Set var(type) & value"
usr << "\blue Right Mouse Button on turf/obj/mob = Reset var's value"
usr << "\blue ***********************************************************"
if(4)
usr << "\blue ***********************************************************"
usr << "\blue Left Mouse Button on turf/obj/mob = Throw"
usr << "\blue Right Mouse Button on turf/obj/mob = Select"
usr << "\blue ***********************************************************"
return
/obj/bmode/buildquit
icon_state = "buildquit" icon_state = "buildquit"
screen_loc = "NORTH,WEST+3" screen_loc = "NORTH,WEST+3"
var/obj/buildholder/master = null
/obj/buildquit/Click() Click()
togglebuildmode(master.cl.mob) togglebuildmode(master.cl.mob)
/obj/buildholder /obj/bmode/buildholder
density = 0 density = 0
anchored = 1 anchored = 1
var/client/cl = null var/client/cl = null
var/obj/builddir/builddir = null var/obj/bmode/builddir/builddir = null
var/obj/buildhelp/buildhelp = null var/obj/bmode/buildhelp/buildhelp = null
var/obj/buildmode/buildmode = null var/obj/bmode/buildmode/buildmode = null
var/obj/buildquit/buildquit = null var/obj/bmode/buildquit/buildquit = null
var/atom/movable/throw_atom = null
/obj/builddir/Click() /obj/bmode/buildmode
switch(dir) icon_state = "buildmode1"
if(NORTH) screen_loc = "NORTH,WEST+2"
dir = EAST var/varholder = "name"
if(EAST) var/valueholder = "derp"
dir = SOUTH var/objholder = "/obj/closet"
if(SOUTH)
dir = WEST
if(WEST)
dir = NORTHWEST
if(NORTHWEST)
dir = NORTH
/obj/buildhelp/Click() Click(location, control, params)
switch(master.cl.buildmode) var/list/pa = params2list(params)
if(1)
usr << "\blue ***********************************************************"
usr << "\blue Left Mouse Button = Construct / Upgrade"
usr << "\blue Right Mouse Button = Deconstruct / Delete / Downgrade"
usr << "\blue Left Mouse Button + ctrl = R-Window"
usr << "\blue Left Mouse Button + alt = Airlock"
usr << ""
usr << "\blue Use the button in the upper left corner to"
usr << "\blue change the direction of built objects."
usr << "\blue ***********************************************************"
if(2)
usr << "\blue ***********************************************************"
usr << "\blue Right Mouse Button on buildmode button = Set object type"
usr << "\blue Left Mouse Button on turf/obj = Place objects"
usr << "\blue Right Mouse Button = Delete objects"
usr << ""
usr << "\blue Use the button in the upper left corner to"
usr << "\blue change the direction of built objects."
usr << "\blue ***********************************************************"
if(3)
usr << "\blue ***********************************************************"
usr << "\blue Right Mouse Button on buildmode button = Select var(type) & value"
usr << "\blue Left Mouse Button on turf/obj/mob = Set var(type) & value"
usr << "\blue Right Mouse Button on turf/obj/mob = Reset var's value"
usr << "\blue ***********************************************************"
/obj/buildmode/Click(location, control, params) if(pa.Find("left"))
var/list/pa = params2list(params) switch(master.cl.buildmode)
if(1)
master.cl.buildmode = 2
src.icon_state = "buildmode2"
if(2)
master.cl.buildmode = 3
src.icon_state = "buildmode3"
if(3)
master.cl.buildmode = 4
src.icon_state = "buildmode4"
if(4)
master.cl.buildmode = 1
src.icon_state = "buildmode1"
if(pa.Find("left")) else if(pa.Find("right"))
switch(master.cl.buildmode) switch(master.cl.buildmode)
if(1) if(1)
master.cl.buildmode = 2
src.icon_state = "buildmode2"
if(2)
master.cl.buildmode = 3
src.icon_state = "buildmode3"
if(3)
master.cl.buildmode = 1
src.icon_state = "buildmode1"
else if(pa.Find("right"))
switch(master.cl.buildmode)
if(1)
return
if(2)
objholder = input(usr,"Enter typepath:" ,"Typepath","/obj/closet")
var/list/removed_paths = list("/obj/bhole")
if(objholder in removed_paths)
alert("That path is not allowed.")
objholder = "/obj/closet"
else if (dd_hasprefix(objholder, "/mob") && !(usr.client.holder.rank in list("Game Master", "Game Admin", "Badmin")))
objholder = "/obj/closet"
if(3)
var/list/locked = list("vars", "key", "ckey", "client", "firemut", "ishulk", "telekinesis", "xray", "virus", "viruses", "cuffed", "ka", "last_eaten", "urine")
master.buildmode.varholder = input(usr,"Enter variable name:" ,"Name", "name")
if(master.buildmode.varholder in locked && !(usr.client.holder.rank in list("Game Master", "Game Admin")))
return return
var/thetype = input(usr,"Select variable type:" ,"Type") in list("text","number","mob-reference","obj-reference","turf-reference") if(2)
if(!thetype) return objholder = input(usr,"Enter typepath:" ,"Typepath","/obj/closet")
switch(thetype) var/list/removed_paths = list("/obj/bhole")
if("text") if(objholder in removed_paths)
master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value", "value") as text alert("That path is not allowed.")
if("number") objholder = "/obj/closet"
master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value", 123) as num else if (dd_hasprefix(objholder, "/mob") && !(usr.client.holder.rank in list("Game Master", "Game Admin", "Badmin")))
if("mob-reference") objholder = "/obj/closet"
master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value") as mob in world if(3)
if("obj-reference") var/list/locked = list("vars", "key", "ckey", "client", "firemut", "ishulk", "telekinesis", "xray", "virus", "viruses", "cuffed", "ka", "last_eaten", "urine")
master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value") as obj in world
if("turf-reference") master.buildmode.varholder = input(usr,"Enter variable name:" ,"Name", "name")
master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value") as turf in world if(master.buildmode.varholder in locked && !(usr.client.holder.rank in list("Game Master", "Game Admin")))
return
var/thetype = input(usr,"Select variable type:" ,"Type") in list("text","number","mob-reference","obj-reference","turf-reference")
if(!thetype) return
switch(thetype)
if("text")
master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value", "value") as text
if("number")
master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value", 123) as num
if("mob-reference")
master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value") as mob in world
if("obj-reference")
master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value") as obj in world
if("turf-reference")
master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value") as turf in world
/proc/build_click(var/mob/user, buildmode, location, control, params, var/obj/object) /proc/build_click(var/mob/user, buildmode, location, control, params, var/obj/object)
var/obj/bmode/buildholder/holder = null
var/obj/buildholder/holder = null for(var/obj/bmode/buildholder/H)
for(var/obj/buildholder/H)
if(H.cl == user.client) if(H.cl == user.client)
holder = H holder = H
break break
if(!holder) return if(!holder) return
var/list/pa = params2list(params) var/list/pa = params2list(params)
switch(buildmode) switch(buildmode)
if(1) if(1)
if(istype(object,/turf) && pa.Find("left") && !pa.Find("alt") && !pa.Find("ctrl") ) if(istype(object,/turf) && pa.Find("left") && !pa.Find("alt") && !pa.Find("ctrl") )
if(istype(object,/turf/space)) if(istype(object,/turf/space))
@@ -203,7 +196,6 @@
var/turf/T = object var/turf/T = object
T.ReplaceWithRWall() T.ReplaceWithRWall()
return return
else if(pa.Find("right")) else if(pa.Find("right"))
if(istype(object,/turf/simulated/wall)) if(istype(object,/turf/simulated/wall))
var/turf/T = object var/turf/T = object
@@ -220,10 +212,8 @@
else if(istype(object,/obj)) else if(istype(object,/obj))
del(object) del(object)
return return
else if(istype(object,/turf) && pa.Find("alt") && pa.Find("left")) else if(istype(object,/turf) && pa.Find("alt") && pa.Find("left"))
new/obj/machinery/door/airlock(get_turf(object)) new/obj/machinery/door/airlock(get_turf(object))
else if(istype(object,/turf) && pa.Find("ctrl") && pa.Find("left")) else if(istype(object,/turf) && pa.Find("ctrl") && pa.Find("left"))
switch(holder.builddir.dir) switch(holder.builddir.dir)
if(NORTH) if(NORTH)
@@ -253,7 +243,6 @@
if(pa.Find("left")) //I cant believe this shit actually compiles. if(pa.Find("left")) //I cant believe this shit actually compiles.
if(object.vars.Find(holder.buildmode.varholder)) if(object.vars.Find(holder.buildmode.varholder))
log_admin("[key_name(usr)] modified [object.name]'s [holder.buildmode.varholder] to [holder.buildmode.valueholder]") log_admin("[key_name(usr)] modified [object.name]'s [holder.buildmode.varholder] to [holder.buildmode.valueholder]")
// message_admins("[key_name_admin(usr)] modified [object.name]'s [holder.buildmode.varholder] to [holder.buildmode.valueholder]", 1)
object.vars[holder.buildmode.varholder] = holder.buildmode.valueholder object.vars[holder.buildmode.varholder] = holder.buildmode.valueholder
blink(object) blink(object)
else else
@@ -261,14 +250,20 @@
if(pa.Find("right")) if(pa.Find("right"))
if(object.vars.Find(holder.buildmode.varholder)) if(object.vars.Find(holder.buildmode.varholder))
log_admin("[key_name(usr)] modified [object.name]'s [holder.buildmode.varholder] to [holder.buildmode.valueholder]") log_admin("[key_name(usr)] modified [object.name]'s [holder.buildmode.varholder] to [holder.buildmode.valueholder]")
// message_admins("[key_name_admin(usr)] modified [object.name]'s [holder.buildmode.varholder] to [holder.buildmode.valueholder]", 1)
object.vars[holder.buildmode.varholder] = initial(object.vars[holder.buildmode.varholder]) object.vars[holder.buildmode.varholder] = initial(object.vars[holder.buildmode.varholder])
blink(object) blink(object)
else else
usr << "\red [initial(object.name)] does not have a var called '[holder.buildmode.varholder]'" usr << "\red [initial(object.name)] does not have a var called '[holder.buildmode.varholder]'"
if(4)
if(pa.Find("left"))
holder.throw_atom = object
if(pa.Find("right"))
if(holder.throw_atom)
holder.throw_atom.throw_at(object, 10, 1)
/proc/blink(atom/A) /proc/blink(atom/A)
A.icon += rgb(0,75,75) A.icon += rgb(0,75,75)
spawn(10) spawn(5)
if(A) if(A)
A.icon = initial(A.icon) A.icon = initial(A.icon)

View File

@@ -1,329 +0,0 @@
/obj/item/projectile/hivebotbullet
damage = 5
mobdamage = list(BRUTE = 5, BURN = 0, TOX = 0, OXY = 0, CLONE = 0)
/obj/hivebot
name = "Hivebot"
desc = "A small robot"
icon = 'Hivebot.dmi'
icon_state = "basic"
layer = 5.0
density = 1
anchored = 0
var
alive = 1
health = 10
task = "thinking"
aggressive = 1
wanderer = 1
opensdoors = 1
frustration = 0
last_found = null
target = null
oldtarget_name = null
target_lastloc = null
atkcarbon = 1
atksilicon = 0
attack = 0
attacking = 0
steps = 0
firevuln = 0.5
brutevuln = 1
seekrange = 8
basic_damage = 2
armor = 5
proc
patrol_step()
process()
seek_target()
Die()
ChaseAttack(mob/M)
RunAttack(mob/M)
Shoot(var/target, var/start, var/user, var/bullet = 0)
TakeDamage(var/damage = 0)
attackby(obj/item/weapon/W as obj, mob/living/user as mob)
..()
if (!src.alive) return
var/damage = 0
switch(W.damtype)
if("fire") damage = W.force * firevuln
if("brute") damage = W.force * brutevuln
TakeDamage(damage)
attack_hand(var/mob/user as mob)
if (!src.alive) return
if (user.a_intent == "hurt")
TakeDamage(2 * brutevuln)
for(var/mob/O in viewers(src, null))
O.show_message("\red <b>[user]</b> punches [src]!", 1)
playsound(src.loc, pick('punch1.ogg','punch2.ogg','punch3.ogg','punch4.ogg'), 100, 1)
patrol_step()
var/moveto = locate(src.x + rand(-1,1),src.y + rand(-1, 1),src.z)
if (istype(moveto, /turf/simulated/floor) || istype(moveto, /turf/simulated/shuttle/floor) || istype(moveto, /turf/unsimulated/floor)) step_towards(src, moveto)
if(src.aggressive) seek_target()
steps += 1
if (steps == rand(5,20)) src.task = "thinking"
Bump(M as mob|obj)
spawn(0)
if ((istype(M, /obj/machinery/door)))
var/obj/machinery/door/D = M
if (src.opensdoors)
D.open()
src.frustration = 0
else src.frustration ++
else if ((istype(M, /mob/living/)) && (!src.anchored))
src.loc = M:loc
src.frustration = 0
return
return
Bumped(M as mob|obj)
spawn(0)
var/turf/T = get_turf(src)
M:loc = T
bullet_act(var/obj/item/projectile/Proj)
TakeDamage(Proj.damage)
ex_act(severity)
switch(severity)
if(1.0)
src.Die()
return
if(2.0)
TakeDamage(20)
return
return
emp_act(serverity)
src.Die()//Currently why not
return
meteorhit()
src.Die()
return
blob_act()
if(prob(25))
src.Die()
return
process()
set background = 1
if (!src.alive) return
switch(task)
if("thinking")
src.attack = 0
src.target = null
sleep(15)
walk_to(src,0)
if (src.aggressive) seek_target()
if (src.wanderer && !src.target) src.task = "wandering"
if("chasing")
if (src.frustration >= 8)
src.target = null
src.last_found = world.time
src.frustration = 0
src.task = "thinking"
walk_to(src,0)
if (target)
if (get_dist(src, src.target) <= 1)
var/mob/living/carbon/M = src.target
ChaseAttack(M)
src.task = "attacking"
src.anchored = 1
src.target_lastloc = M.loc
else
var/turf/olddist = get_dist(src, src.target)
walk_to(src, src.target,1,4)
if ((get_dist(src, src.target)) >= (olddist))
src.frustration++
else
src.frustration = 0
sleep(5)
else src.task = "thinking"
if("attacking")
// see if he got away
if ((get_dist(src, src.target) > 1) || ((src.target:loc != src.target_lastloc)))
src.anchored = 0
src.task = "chasing"
else
if (get_dist(src, src.target) <= 1)
var/mob/living/carbon/M = src.target
if (!src.attacking) RunAttack(src.target)
if (!src.aggressive)
src.task = "thinking"
src.target = null
src.anchored = 0
src.last_found = world.time
src.frustration = 0
src.attacking = 0
else
if(M!=null)
if (M.health < 0)
src.task = "thinking"
src.target = null
src.anchored = 0
src.last_found = world.time
src.frustration = 0
src.attacking = 0
else
src.anchored = 0
src.attacking = 0
src.task = "chasing"
if("wandering")
patrol_step()
sleep(10)
spawn(8)
process()
return
New()
spawn(0) process()
..()
seek_target()
src.anchored = 0
for (var/mob/living/C in view(src.seekrange,src))
if (src.target)
src.task = "chasing"
break
if ((C.name == src.oldtarget_name) && (world.time < src.last_found + 100)) continue
if (istype(C, /mob/living/carbon/) && !src.atkcarbon) continue
if (istype(C, /mob/living/silicon/) && !src.atksilicon) continue
if (C.health < 0) continue
if (istype(C, /mob/living/carbon/) && src.atkcarbon) src.attack = 1
if (istype(C, /mob/living/silicon/) && src.atksilicon) src.attack = 1
if (src.attack)
src.target = C
src.oldtarget_name = C.name
src.task = "chasing"
break
else
continue
Die()
if (!src.alive) return
src.alive = 0
walk_to(src,0)
src.visible_message("<b>[src]</b> blows apart!")
var/turf/Ts = get_turf(src)
new /obj/decal/cleanable/robot_debris(Ts)
var/datum/effects/system/spark_spread/s = new /datum/effects/system/spark_spread
s.set_up(3, 1, src)
s.start()
del(src)
TakeDamage(var/damage = 0)
var/tempdamage = (damage-armor)
if(tempdamage > 0)
src.health -= tempdamage
else
src.health--
if(src.health <= 0)
src.Die()
ChaseAttack(mob/M)
for(var/mob/O in viewers(src, null))
O.show_message("\red <B>[src]</B> leaps at [src.target]!", 1)
RunAttack(mob/M)
src.attacking = 1
for(var/mob/O in viewers(src, null))
O.show_message("\red <B>[src]</B> claws at [src.target]!", 1)
src.target:bruteloss += basic_damage
spawn(25)
src.attacking = 0
Shoot(var/target, var/start, var/user, var/bullet = 0)
if(target == start)
return
var/obj/item/projectile/hivebotbullet/A = new /obj/item/projectile/hivebotbullet(user:loc)
playsound(user, 'Gunshot.ogg', 100, 1)
if(!A) return
if (!istype(target, /turf))
del(A)
return
A.current = target
A.yo = target:y - start:y
A.xo = target:x - start:x
spawn( 0 )
A.process()
return
/obj/hivebot/range
name = "Hivebot"
desc = "A smallish robot, this one is armed!"
var/rapid = 0
seek_target()
src.anchored = 0
for (var/mob/living/C in view(src.seekrange,src))
if (!src.alive) break
if (C.health < 0) continue
if (istype(C, /mob/living/carbon/) && src.atkcarbon) src.attack = 1
if (istype(C, /mob/living/silicon/) && src.atksilicon) src.attack = 1
if (src.attack)
src.target = C
src.oldtarget_name = C.name
for(var/mob/O in viewers(src, null))
O.show_message("\red <b>[src]</b> fires at [src.target]!", 1)
var/tturf = get_turf(target)
if(rapid)
spawn(1)
Shoot(tturf, src.loc, src)
spawn(4)
Shoot(tturf, src.loc, src)
spawn(6)
Shoot(tturf, src.loc, src)
else
Shoot(tturf, src.loc, src)
src.attack = 0
sleep(12)
seek_target()
src.task = "thinking"
break
else continue
/obj/hivebot/range/rapid
rapid = 1
/obj/hivebot/range/strong
name = "Strong Hivebot"
desc = "A robot, this one is armed and looks tough!"
health = 50
armor = 10
/obj/hivebot/range/borgkill
health = 20
atksilicon = 1

View File

@@ -1,72 +0,0 @@
/obj/hivebot/tele//this still needs work
name = "Beacon"
desc = "Some odd beacon thing"
icon = 'Hivebot.dmi'
icon_state = "def_radar-off"
health = 200
task = "thinking"
aggressive = 0
wanderer = 0
armor = 5
var
bot_type = "norm"
bot_amt = 10
spawn_delay = 600
set_spawn = 0
auto_spawn = 1
proc
warpbots()
New()
..()
var/datum/effects/system/harmless_smoke_spread/smoke = new /datum/effects/system/harmless_smoke_spread()
smoke.set_up(5, 0, src.loc)
smoke.start()
for(var/mob/O in viewers(src, null))
O.show_message("\red <B>The [src] warps in!</B>", 1)
playsound(src.loc, 'EMPulse.ogg', 25, 1)
if(auto_spawn)
spawn(spawn_delay)
warpbots()
warpbots()
icon_state = "def_radar"
for(var/mob/O in viewers(src, null))
O.show_message("\red The [src] turns on!", 1)
while(bot_amt > 0)
bot_amt--
switch(bot_type)
if("norm")
new /obj/hivebot(get_turf(src))
if("range")
new /obj/hivebot/range(get_turf(src))
if("rapid")
new /obj/hivebot/range/rapid(get_turf(src))
spawn(100)
del(src)
return
process()
if(set_spawn)
warpbots()
..()
/obj/hivebot/tele/massive
bot_type = "norm"
bot_amt = 30
auto_spawn = 0
/obj/hivebot/tele/range
bot_type = "range"
bot_amt = 10
/obj/hivebot/tele/rapid
bot_type = "rapid"
bot_amt = 10

View File

@@ -145,7 +145,7 @@
invocation_type = "shout" invocation_type = "shout"
range = 1 range = 1
summon_type = list("/obj/livestock/spesscarp/elite") summon_type = list("/obj/critter/spesscarp/elite")
/obj/proc_holder/spell/targeted/trigger/blind /obj/proc_holder/spell/targeted/trigger/blind
name = "Blind" name = "Blind"

View File

@@ -8,7 +8,7 @@
var/crit_fail = 0 var/crit_fail = 0
var/unacidable = 0 //universal "unacidabliness" var, here so you can use it in any obj. var/unacidable = 0 //universal "unacidabliness" var, here so you can use it in any obj.
animate_movement = 2 animate_movement = 2
var/throwforce = 0 var/throwforce = 1
proc proc
handle_internal_lifeform(mob/lifeform_inside_me, breath_request) handle_internal_lifeform(mob/lifeform_inside_me, breath_request)
//Return: (NONSTANDARD) //Return: (NONSTANDARD)
@@ -34,6 +34,7 @@
attack_hand(mob/user as mob) attack_hand(mob/user as mob)
switch(alert("Travel back to ss13?",,"Yes","No")) switch(alert("Travel back to ss13?",,"Yes","No"))
if("Yes") if("Yes")
if(user.z != src.z) return
user.loc.loc.Exited(user) user.loc.loc.Exited(user)
user.loc = pick(latejoin) user.loc = pick(latejoin)
if("No") if("No")
@@ -281,8 +282,8 @@
name = "item" name = "item"
icon = 'items.dmi' icon = 'items.dmi'
var/icon_old = null//For when weapons get bloodied this saves their old icon. var/icon_old = null//For when weapons get bloodied this saves their old icon.
var/abstract = 0.0 var/abstract = 0
var/force = null var/force = 0
var/item_state = null var/item_state = null
var/damtype = "brute" var/damtype = "brute"
var/r_speed = 1.0 var/r_speed = 1.0
@@ -982,18 +983,6 @@
src.pixel_x = rand(-5, 5) src.pixel_x = rand(-5, 5)
src.pixel_y = rand(-5, 5) src.pixel_y = rand(-5, 5)
/obj/item/weapon/storage
icon = 'storage.dmi'
name = "storage"
var/list/can_hold = new/list() //List of objects which this item can store (if set, it can't store anything else)
var/list/cant_hold = new/list() //List of objects which this item can't store (in effect only if can_hold isn't set)
var/max_w_class = 2 //Max size of objects that this object can store (in effect only if can_hold isn't set)
var/max_combined_w_class = 14 //The sum of the w_classes of all the items in this storage item.
var/storage_slots = 7 //The number of storage slots in this container.
var/obj/screen/storage/boxes = null
var/obj/screen/close/closer = null
w_class = 3.0
/* /*
/obj/item/weapon/storage/glassbox /obj/item/weapon/storage/glassbox

View File

@@ -1324,7 +1324,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/killertomato/attack_self(mob/user as mob) /obj/item/weapon/reagent_containers/food/snacks/grown/killertomato/attack_self(mob/user as mob)
if(istype(user.loc,/turf/space)) if(istype(user.loc,/turf/space))
return return
new /obj/livestock/killertomato(user.loc) new /obj/critter/killertomato(user.loc)
del(src) del(src)
@@ -1481,7 +1481,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/walkingmushroom/attack_self(mob/user as mob) /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/walkingmushroom/attack_self(mob/user as mob)
if(istype(user.loc,/turf/space)) if(istype(user.loc,/turf/space))
return return
new /obj/livestock/walkingmushroom(user.loc) new /obj/critter/walkingmushroom(user.loc)
del(src) del(src)

View File

@@ -89,14 +89,7 @@
icon_state = "box" icon_state = "box"
item_state = "syringe_kit" item_state = "syringe_kit"
/obj/item/weapon/storage/survival_kit /obj/item/weapon/storage/box/engineer
name = "Centcom Survival Kit"
desc = "How nice of CentCom to provide us with some stuff to make our lives easier."
icon_state = "box"
item_state = "syringe_kit"
/obj/item/weapon/storage/survival_kit/engineer
name = "Centcom Engineer Kit"
/obj/item/weapon/storage/box/syndicate /obj/item/weapon/storage/box/syndicate

View File

@@ -1118,44 +1118,10 @@
throw_range = 15 throw_range = 15
//layer = 4 //layer = 4
/obj/item/weapon/paper/Internal
name = "paper- 'Internal Atmosphere Operating Instructions'"
info = "Equipment:<BR>\n\t1+ Tank(s) with appropriate atmosphere<BR>\n\t1 Gas Mask w regulator (standard issue)<BR>\n<BR>\nProcedure:<BR>\n\t1. Wear mask<BR>\n\t2. Attach oxygen tank pipe to regulater (automatic))<BR>\n\t3. Set internal!<BR>\n<BR>\nNotes:<BR>\n\tDon't forget to stop internal when tank is low by<BR>\n\tremoving internal!<BR>\n<BR>\n\tDo not use a tank that has a high concentration of toxins.<BR>\n\tThe filters shut down on internal mode!<BR>\n<BR>\n\tWhen exiting a high danger environment it is advised<BR>\n\tthat you exit through a decontamination zone!<BR>\n<BR>\n\tRefill a tank at a oxygen canister by equiping the tank (Double Click)<BR>\n\tthen 'attacking' the canister (Double Click the canister)."
/obj/item/weapon/paper/Court /obj/item/weapon/paper/Court
name = "paper- 'Judgement'" name = "paper- 'Judgement'"
info = "For crimes against the station, the offender is sentenced to:<BR>\n<BR>\n" info = "For crimes against the station, the offender is sentenced to:<BR>\n<BR>\n"
/obj/item/weapon/paper/Map
name = "paper- 'Station Blueprint'"
var/map_graphic = 'map.png'
info = {"<IMG SRC="ss13mapd.png">
<BR>
CQ: Crew Quarters<BR>
L: Lounge<BR>
CH: Chapel<BR>
ENG: Engine Area<BR>
EC: Engine Control<BR>
ES: Engine Storage<BR>
GR: Generator Room<BR>
MB: Medical Bay<BR>
MR: Medical Research<BR>
TR: Toxin Research<BR>
TS: Toxin Storage<BR>
AC: Atmospheric Control<BR>
SEC: Security<BR>
SB: Shuttle Bay
SA: Shuttle Airlock<BR>
S: Storage<BR>
CR: Control Room<BR>
EV: EVA Storage<BR>
AE: Aux. Engine<BR>
P: Podbay<BR>
NA: North Airlock<BR>
SC: Solar Control<BR>
ASC: Aux. Solar Control<BR>
"}
/obj/item/weapon/paper/Toxin /obj/item/weapon/paper/Toxin
name = "paper- 'Chemical Information'" name = "paper- 'Chemical Information'"
@@ -1188,38 +1154,6 @@ ASC: Aux. Solar Control<BR>
name = "paper- 'Standard Operating Procedure'" name = "paper- 'Standard Operating Procedure'"
info = "Alert Levels:<BR>\nBlue- Emergency<BR>\n\t1. Caused by fire<BR>\n\t2. Caused by manual interaction<BR>\n\tAction:<BR>\n\t\tClose all fire doors. These can only be opened by reseting the alarm<BR>\nRed- Ejection/Self Destruct<BR>\n\t1. Caused by module operating computer.<BR>\n\tAction:<BR>\n\t\tAfter the specified time the module will eject completely.<BR>\n<BR>\nEngine Maintenance Instructions:<BR>\n\tShut off ignition systems:<BR>\n\tActivate internal power<BR>\n\tActivate orbital balance matrix<BR>\n\tRemove volatile liquids from area<BR>\n\tWear a fire suit<BR>\n<BR>\n\tAfter<BR>\n\t\tDecontaminate<BR>\n\t\tVisit medical examiner<BR>\n<BR>\nToxin Laboratory Procedure:<BR>\n\tWear a gas mask regardless<BR>\n\tGet an oxygen tank.<BR>\n\tActivate internal atmosphere<BR>\n<BR>\n\tAfter<BR>\n\t\tDecontaminate<BR>\n\t\tVisit medical examiner<BR>\n<BR>\nDisaster Procedure:<BR>\n\tFire:<BR>\n\t\tActivate sector fire alarm.<BR>\n\t\tMove to a safe area.<BR>\n\t\tGet a fire suit<BR>\n\t\tAfter:<BR>\n\t\t\tAssess Damage<BR>\n\t\t\tRepair damages<BR>\n\t\t\tIf needed, Evacuate<BR>\n\tMeteor Shower:<BR>\n\t\tActivate fire alarm<BR>\n\t\tMove to the back of ship<BR>\n\t\tAfter<BR>\n\t\t\tRepair damage<BR>\n\t\t\tIf needed, Evacuate<BR>\n\tAccidental Reentry:<BR>\n\t\tActivate fire alrms in front of ship.<BR>\n\t\tMove volatile matter to a fire proof area!<BR>\n\t\tGet a fire suit.<BR>\n\t\tStay secure until an emergency ship arrives.<BR>\n<BR>\n\t\tIf ship does not arrive-<BR>\n\t\t\tEvacuate to a nearby safe area!" info = "Alert Levels:<BR>\nBlue- Emergency<BR>\n\t1. Caused by fire<BR>\n\t2. Caused by manual interaction<BR>\n\tAction:<BR>\n\t\tClose all fire doors. These can only be opened by reseting the alarm<BR>\nRed- Ejection/Self Destruct<BR>\n\t1. Caused by module operating computer.<BR>\n\tAction:<BR>\n\t\tAfter the specified time the module will eject completely.<BR>\n<BR>\nEngine Maintenance Instructions:<BR>\n\tShut off ignition systems:<BR>\n\tActivate internal power<BR>\n\tActivate orbital balance matrix<BR>\n\tRemove volatile liquids from area<BR>\n\tWear a fire suit<BR>\n<BR>\n\tAfter<BR>\n\t\tDecontaminate<BR>\n\t\tVisit medical examiner<BR>\n<BR>\nToxin Laboratory Procedure:<BR>\n\tWear a gas mask regardless<BR>\n\tGet an oxygen tank.<BR>\n\tActivate internal atmosphere<BR>\n<BR>\n\tAfter<BR>\n\t\tDecontaminate<BR>\n\t\tVisit medical examiner<BR>\n<BR>\nDisaster Procedure:<BR>\n\tFire:<BR>\n\t\tActivate sector fire alarm.<BR>\n\t\tMove to a safe area.<BR>\n\t\tGet a fire suit<BR>\n\t\tAfter:<BR>\n\t\t\tAssess Damage<BR>\n\t\t\tRepair damages<BR>\n\t\t\tIf needed, Evacuate<BR>\n\tMeteor Shower:<BR>\n\t\tActivate fire alarm<BR>\n\t\tMove to the back of ship<BR>\n\t\tAfter<BR>\n\t\t\tRepair damage<BR>\n\t\t\tIf needed, Evacuate<BR>\n\tAccidental Reentry:<BR>\n\t\tActivate fire alrms in front of ship.<BR>\n\t\tMove volatile matter to a fire proof area!<BR>\n\t\tGet a fire suit.<BR>\n\t\tStay secure until an emergency ship arrives.<BR>\n<BR>\n\t\tIf ship does not arrive-<BR>\n\t\t\tEvacuate to a nearby safe area!"
/obj/item/weapon/paper/engine
name = "paper- 'Generator Startup Procedure'"
info = {"<B>Thermo-Electric Generator Startup Procedure for Mark I Plasma-Fired Engines</B>
<HR>
<i>Warning!</i> Improper engine and generator operation may cause exposure to hazardous gasses, extremes of heat and cold, and dangerous electrical voltages.<BR>
Only trained personnel should operate station systems. Follow all procedures carefully. Wear correct personal protective equipment at all times.<BR>
Refer to your supervisor or Head of Personnel for procedure updates and additional information.
<HR>
Standard checklist for engine and generator cold-start.<BR>
<ol>
<li>Perform visual inspection of external (cooling) and internal (heating) heat-exchange pipe loops.
Refer any breaks or cracks in the pipe to Station Maintenance for repair before continuing.
<li>Connect a CO<sub>2</sub> canister to the external (cooling) loop connector, and release the contents. Check loop pressurization is stable.<BR>
<i>Note:</i> Observe standard canister safety procedures.<BR>
<i>Note:</i> Other gasses may be substituted as a medium in the external (cooling) loop in the event that CO<sub>2</sub> is not available.
<li>Connect a CO<sub>2</sub> canister to the internal (heating) loop connector, and release the contents. Check loop pressurization is stable.<BR>
<i>Note:</i> Observe standard canister safety procedures.<BR>
<i>Note:</i> Nitrogen may be substituted as a medium in the internal (heating) loop in the event that CO<sub>2</sub> is not available.
<i>Do not use plasma in the internal (heating) pipe loop as an unsafe condition may result.</i>
<li>Using the thermo-electric generator (TEG) master control panel, engage the internal and external loop circulator pumps at 1% maximum rate.<BR>
<li>Ignite the engine. Refer to document NTRSN-113-H9-12939 for proper engine preparation, ignition, and plasma-oxygen loading procedures.<BR>
<i>Note:</i> Exceeding recommended plasma-oxygen concentrations can cause engine damage and potential hazards.
<li>Monitor engine temperatures until stable operation is achieved.
<li>Increase internal and external circulator pumps to 10% of maximum rate. Monitor the generated power output on the TEG control panel.<BR>
<i>Note:</i> Consult appendix A for expected electrical generation rates.
<li>Adjust circulator rates until required electrical demand is met.<BR>
<i>Note:</i> Generation rate varies with internal and external loop temperatures, exchange media pressure, and engine geometry. Refer to Appendix B or your supervisor for locally determined optimal settings.<BR>
<i>Note:</i> Do not exceed safety ratings for station power cabling and electrical equipment.
<li>With the power generation rate stable, engage charging of the superconducting magnetic energy storage (SMES) devices.
Total SMES charging rate should not exceed total power generation rate, or an overload condition may occur.
"}
/obj/item/weapon/paper_bin /obj/item/weapon/paper_bin
name = "Paper Bin" name = "Paper Bin"
desc = "This contains many papers." desc = "This contains many papers."

View File

@@ -146,9 +146,9 @@ proc/admin_spawn_room_at_pos()
return return
var/global/list/space_surprises = list(/obj/alien/facehugger, var/global/list/space_surprises = list(/obj/alien/facehugger,
/obj/livestock/spesscarp, /obj/critter/spesscarp,
/obj/livestock/spesscarp/elite, /obj/critter/spesscarp/elite,
/obj/creature, // /obj/creature,
/obj/item/weapon/rcd, /obj/item/weapon/rcd,
/obj/item/weapon/rcd_ammo, /obj/item/weapon/rcd_ammo,
/obj/item/weapon/spacecash, /obj/item/weapon/spacecash,

View File

@@ -341,9 +341,9 @@
for(var/obj/landmark/C in world) for(var/obj/landmark/C in world)
if(C.name == "carpspawn") if(C.name == "carpspawn")
if(prob(99)) if(prob(99))
new /obj/livestock/spesscarp(C.loc) new /obj/critter/spesscarp(C.loc)
else else
new /obj/livestock/spesscarp/elite(C.loc) new /obj/critter/spesscarp/elite(C.loc)
sleep(100) sleep(100)
command_alert("Unknown biological entities have been detected near [station_name()], please stand-by.", "Lifesign Alert") command_alert("Unknown biological entities have been detected near [station_name()], please stand-by.", "Lifesign Alert")
world << sound('commandreport.ogg') world << sound('commandreport.ogg')

View File

@@ -147,7 +147,7 @@ datum/hSB
continue continue
if(istype(O, /obj/item/device/shield)) if(istype(O, /obj/item/device/shield))
continue continue
if(istype(O, /obj/hivebot)) if(istype(O, /obj/critter))
continue continue
if(istype(O, /obj/structure)) if(istype(O, /obj/structure))
continue continue

View File

@@ -199,7 +199,7 @@
wizard_mob.equip_if_possible(new /obj/item/clothing/suit/wizrobe(wizard_mob), wizard_mob.slot_wear_suit) wizard_mob.equip_if_possible(new /obj/item/clothing/suit/wizrobe(wizard_mob), wizard_mob.slot_wear_suit)
wizard_mob.equip_if_possible(new /obj/item/clothing/head/wizard(wizard_mob), wizard_mob.slot_head) wizard_mob.equip_if_possible(new /obj/item/clothing/head/wizard(wizard_mob), wizard_mob.slot_head)
wizard_mob.equip_if_possible(new /obj/item/weapon/storage/backpack(wizard_mob), wizard_mob.slot_back) wizard_mob.equip_if_possible(new /obj/item/weapon/storage/backpack(wizard_mob), wizard_mob.slot_back)
wizard_mob.equip_if_possible(new /obj/item/weapon/storage/survival_kit(wizard_mob), wizard_mob.slot_in_backpack) wizard_mob.equip_if_possible(new /obj/item/weapon/storage/box(wizard_mob), wizard_mob.slot_in_backpack)
// wizard_mob.equip_if_possible(new /obj/item/weapon/scrying_gem(wizard_mob), wizard_mob.slot_l_store) For scrying gem. // wizard_mob.equip_if_possible(new /obj/item/weapon/scrying_gem(wizard_mob), wizard_mob.slot_l_store) For scrying gem.
wizard_mob.equip_if_possible(new /obj/item/weapon/teleportation_scroll(wizard_mob), wizard_mob.slot_r_store) wizard_mob.equip_if_possible(new /obj/item/weapon/teleportation_scroll(wizard_mob), wizard_mob.slot_r_store)
if(config.feature_object_spell_system) //if it's turned on (in config.txt), spawns an object spell spellbook if(config.feature_object_spell_system) //if it's turned on (in config.txt), spawns an object spell spellbook

View File

@@ -177,7 +177,7 @@
src.equip_if_possible(new /obj/item/clothing/under/rank/geneticist(src), slot_w_uniform) src.equip_if_possible(new /obj/item/clothing/under/rank/geneticist(src), slot_w_uniform)
src.equip_if_possible(new /obj/item/device/pda/medical(src), slot_belt) src.equip_if_possible(new /obj/item/device/pda/medical(src), slot_belt)
src.equip_if_possible(new /obj/item/weapon/storage/backpack/medic (src), slot_back) src.equip_if_possible(new /obj/item/weapon/storage/backpack/medic (src), slot_back)
src.equip_if_possible(new /obj/item/weapon/storage/survival_kit(src.back), slot_in_backpack) src.equip_if_possible(new /obj/item/weapon/storage/box(src.back), slot_in_backpack)
src.equip_if_possible(new /obj/item/clothing/shoes/white(src), slot_shoes) src.equip_if_possible(new /obj/item/clothing/shoes/white(src), slot_shoes)
src.equip_if_possible(new /obj/item/clothing/suit/labcoat/genetics(src), slot_wear_suit) src.equip_if_possible(new /obj/item/clothing/suit/labcoat/genetics(src), slot_wear_suit)
src.equip_if_possible(new /obj/item/device/flashlight/pen(src), slot_s_store) src.equip_if_possible(new /obj/item/device/flashlight/pen(src), slot_s_store)
@@ -196,7 +196,7 @@
if ("Clown") if ("Clown")
src.equip_if_possible(new /obj/item/weapon/storage/backpack/clown (src), slot_back) src.equip_if_possible(new /obj/item/weapon/storage/backpack/clown (src), slot_back)
src.equip_if_possible(new /obj/item/weapon/storage/survival_kit(src.back), slot_in_backpack) src.equip_if_possible(new /obj/item/weapon/storage/box(src.back), slot_in_backpack)
src.equip_if_possible(new /obj/item/clothing/under/rank/clown(src), slot_w_uniform) src.equip_if_possible(new /obj/item/clothing/under/rank/clown(src), slot_w_uniform)
src.equip_if_possible(new /obj/item/device/pda/clown(src), slot_belt) src.equip_if_possible(new /obj/item/device/pda/clown(src), slot_belt)
src.equip_if_possible(new /obj/item/clothing/shoes/clown_shoes(src), slot_shoes) src.equip_if_possible(new /obj/item/clothing/shoes/clown_shoes(src), slot_shoes)
@@ -210,7 +210,7 @@
if ("Mime") if ("Mime")
src.equip_if_possible(new /obj/item/weapon/storage/backpack(src), slot_back) src.equip_if_possible(new /obj/item/weapon/storage/backpack(src), slot_back)
src.equip_if_possible(new /obj/item/weapon/storage/survival_kit(src.back), slot_in_backpack) src.equip_if_possible(new /obj/item/weapon/storage/box(src.back), slot_in_backpack)
src.equip_if_possible(new /obj/item/clothing/under/mime(src), slot_w_uniform) src.equip_if_possible(new /obj/item/clothing/under/mime(src), slot_w_uniform)
src.equip_if_possible(new /obj/item/device/pda/mime(src), slot_belt) src.equip_if_possible(new /obj/item/device/pda/mime(src), slot_belt)
src.equip_if_possible(new /obj/item/clothing/shoes/black(src), slot_shoes) src.equip_if_possible(new /obj/item/clothing/shoes/black(src), slot_shoes)
@@ -228,7 +228,7 @@
if ("Station Engineer") if ("Station Engineer")
src.equip_if_possible(new /obj/item/weapon/storage/backpack/industrial (src), slot_back) src.equip_if_possible(new /obj/item/weapon/storage/backpack/industrial (src), slot_back)
src.equip_if_possible(new /obj/item/weapon/storage/survival_kit/engineer(src.back), slot_in_backpack) src.equip_if_possible(new /obj/item/weapon/storage/box/engineer(src.back), slot_in_backpack)
src.equip_if_possible(new /obj/item/device/radio/headset/headset_eng (src), slot_ears) // -- TLE src.equip_if_possible(new /obj/item/device/radio/headset/headset_eng (src), slot_ears) // -- TLE
src.equip_if_possible(new /obj/item/clothing/under/rank/engineer(src), slot_w_uniform) src.equip_if_possible(new /obj/item/clothing/under/rank/engineer(src), slot_w_uniform)
src.equip_if_possible(new /obj/item/device/pda/engineering(src), slot_belt) src.equip_if_possible(new /obj/item/device/pda/engineering(src), slot_belt)
@@ -240,7 +240,7 @@
if ("Shaft Miner") if ("Shaft Miner")
src.equip_if_possible(new /obj/item/weapon/storage/backpack/industrial (src), slot_back) src.equip_if_possible(new /obj/item/weapon/storage/backpack/industrial (src), slot_back)
src.equip_if_possible(new /obj/item/weapon/storage/survival_kit(src.back), slot_in_backpack) src.equip_if_possible(new /obj/item/weapon/storage/box(src.back), slot_in_backpack)
src.equip_if_possible(new /obj/item/device/radio/headset/headset_mine (src), slot_ears) src.equip_if_possible(new /obj/item/device/radio/headset/headset_mine (src), slot_ears)
src.equip_if_possible(new /obj/item/clothing/under/rank/miner(src), slot_w_uniform) src.equip_if_possible(new /obj/item/clothing/under/rank/miner(src), slot_w_uniform)
src.equip_if_possible(new /obj/item/clothing/shoes/black(src), slot_shoes) src.equip_if_possible(new /obj/item/clothing/shoes/black(src), slot_shoes)
@@ -255,7 +255,7 @@
if ("Detective") if ("Detective")
src.equip_if_possible(new /obj/item/device/radio/headset/headset_sec (src), slot_ears) // -- TLE src.equip_if_possible(new /obj/item/device/radio/headset/headset_sec (src), slot_ears) // -- TLE
src.equip_if_possible(new /obj/item/weapon/storage/backpack(src), slot_back) src.equip_if_possible(new /obj/item/weapon/storage/backpack(src), slot_back)
src.equip_if_possible(new /obj/item/weapon/storage/survival_kit(src.back), slot_in_backpack) src.equip_if_possible(new /obj/item/weapon/storage/box(src.back), slot_in_backpack)
src.equip_if_possible(new /obj/item/clothing/under/det(src), slot_w_uniform) src.equip_if_possible(new /obj/item/clothing/under/det(src), slot_w_uniform)
src.equip_if_possible(new /obj/item/device/pda/detective(src), slot_belt) src.equip_if_possible(new /obj/item/device/pda/detective(src), slot_belt)
src.equip_if_possible(new /obj/item/clothing/shoes/brown(src), slot_shoes) src.equip_if_possible(new /obj/item/clothing/shoes/brown(src), slot_shoes)
@@ -274,7 +274,7 @@
if ("Medical Doctor") if ("Medical Doctor")
src.equip_if_possible(new /obj/item/device/radio/headset/headset_med (src), slot_ears) // -- TLE src.equip_if_possible(new /obj/item/device/radio/headset/headset_med (src), slot_ears) // -- TLE
src.equip_if_possible(new /obj/item/weapon/storage/backpack/medic (src), slot_back) src.equip_if_possible(new /obj/item/weapon/storage/backpack/medic (src), slot_back)
src.equip_if_possible(new /obj/item/weapon/storage/survival_kit(src.back), slot_in_backpack) src.equip_if_possible(new /obj/item/weapon/storage/box(src.back), slot_in_backpack)
src.equip_if_possible(new /obj/item/clothing/under/rank/medical(src), slot_w_uniform) src.equip_if_possible(new /obj/item/clothing/under/rank/medical(src), slot_w_uniform)
src.equip_if_possible(new /obj/item/clothing/shoes/white(src), slot_shoes) src.equip_if_possible(new /obj/item/clothing/shoes/white(src), slot_shoes)
src.equip_if_possible(new /obj/item/clothing/suit/labcoat(src), slot_wear_suit) src.equip_if_possible(new /obj/item/clothing/suit/labcoat(src), slot_wear_suit)
@@ -285,7 +285,7 @@
if ("Captain") if ("Captain")
src.equip_if_possible(new /obj/item/device/radio/headset/heads/captain (src), slot_ears) src.equip_if_possible(new /obj/item/device/radio/headset/heads/captain (src), slot_ears)
src.equip_if_possible(new /obj/item/weapon/storage/backpack(src), slot_back) src.equip_if_possible(new /obj/item/weapon/storage/backpack(src), slot_back)
src.equip_if_possible(new /obj/item/weapon/storage/survival_kit(src.back), slot_in_backpack) src.equip_if_possible(new /obj/item/weapon/storage/box(src.back), slot_in_backpack)
src.equip_if_possible(new /obj/item/clothing/under/rank/captain(src), slot_w_uniform) src.equip_if_possible(new /obj/item/clothing/under/rank/captain(src), slot_w_uniform)
src.equip_if_possible(new /obj/item/device/pda/captain(src), slot_belt) src.equip_if_possible(new /obj/item/device/pda/captain(src), slot_belt)
src.equip_if_possible(new /obj/item/clothing/suit/armor/captain(src), slot_wear_suit) src.equip_if_possible(new /obj/item/clothing/suit/armor/captain(src), slot_wear_suit)
@@ -298,7 +298,7 @@
if ("Security Officer") if ("Security Officer")
src.equip_if_possible(new /obj/item/device/radio/headset/headset_sec (src), slot_ears) // -- TLE src.equip_if_possible(new /obj/item/device/radio/headset/headset_sec (src), slot_ears) // -- TLE
src.equip_if_possible(new /obj/item/weapon/storage/backpack/security (src), slot_back) src.equip_if_possible(new /obj/item/weapon/storage/backpack/security (src), slot_back)
src.equip_if_possible(new /obj/item/weapon/storage/survival_kit(src.back), slot_in_backpack) src.equip_if_possible(new /obj/item/weapon/storage/box(src.back), slot_in_backpack)
src.equip_if_possible(new /obj/item/clothing/under/rank/security(src), slot_w_uniform) src.equip_if_possible(new /obj/item/clothing/under/rank/security(src), slot_w_uniform)
src.equip_if_possible(new /obj/item/device/pda/security(src), slot_belt) src.equip_if_possible(new /obj/item/device/pda/security(src), slot_belt)
src.equip_if_possible(new /obj/item/clothing/suit/armor/vest(src), slot_wear_suit) src.equip_if_possible(new /obj/item/clothing/suit/armor/vest(src), slot_wear_suit)
@@ -310,7 +310,7 @@
if ("Warden") if ("Warden")
src.equip_if_possible(new /obj/item/device/radio/headset/headset_sec (src), slot_ears) // -- TLE src.equip_if_possible(new /obj/item/device/radio/headset/headset_sec (src), slot_ears) // -- TLE
src.equip_if_possible(new /obj/item/weapon/storage/backpack/security (src), slot_back) src.equip_if_possible(new /obj/item/weapon/storage/backpack/security (src), slot_back)
src.equip_if_possible(new /obj/item/weapon/storage/survival_kit(src.back), slot_in_backpack) src.equip_if_possible(new /obj/item/weapon/storage/box(src.back), slot_in_backpack)
src.equip_if_possible(new /obj/item/clothing/under/rank/warden(src), slot_w_uniform) src.equip_if_possible(new /obj/item/clothing/under/rank/warden(src), slot_w_uniform)
src.equip_if_possible(new /obj/item/device/pda/security(src), slot_belt) src.equip_if_possible(new /obj/item/device/pda/security(src), slot_belt)
src.equip_if_possible(new /obj/item/clothing/suit/armor/vest(src), slot_wear_suit) src.equip_if_possible(new /obj/item/clothing/suit/armor/vest(src), slot_wear_suit)
@@ -342,7 +342,7 @@
src.equip_if_possible(new /obj/item/clothing/head/helmet/HoS(src), slot_head) src.equip_if_possible(new /obj/item/clothing/head/helmet/HoS(src), slot_head)
src.equip_if_possible(new /obj/item/clothing/mask/gas/emergency(src), slot_wear_mask) src.equip_if_possible(new /obj/item/clothing/mask/gas/emergency(src), slot_wear_mask)
src.equip_if_possible(new /obj/item/weapon/storage/backpack/security (src), slot_back) src.equip_if_possible(new /obj/item/weapon/storage/backpack/security (src), slot_back)
src.equip_if_possible(new /obj/item/weapon/storage/survival_kit(src.back), slot_in_backpack) src.equip_if_possible(new /obj/item/weapon/storage/box(src.back), slot_in_backpack)
src.equip_if_possible(new /obj/item/clothing/glasses/sunglasses(src), slot_glasses) src.equip_if_possible(new /obj/item/clothing/glasses/sunglasses(src), slot_glasses)
src.equip_if_possible(new /obj/item/weapon/handcuffs(src), slot_in_backpack) src.equip_if_possible(new /obj/item/weapon/handcuffs(src), slot_in_backpack)
src.equip_if_possible(new /obj/item/weapon/gun/energy(src), slot_s_store) src.equip_if_possible(new /obj/item/weapon/gun/energy(src), slot_s_store)
@@ -351,7 +351,7 @@
if ("Head of Personnel") if ("Head of Personnel")
src.equip_if_possible(new /obj/item/device/radio/headset/heads/hop (src), slot_ears) // -- TLE src.equip_if_possible(new /obj/item/device/radio/headset/heads/hop (src), slot_ears) // -- TLE
src.equip_if_possible(new /obj/item/weapon/storage/backpack(src), slot_back) src.equip_if_possible(new /obj/item/weapon/storage/backpack(src), slot_back)
src.equip_if_possible(new /obj/item/weapon/storage/survival_kit(src.back), slot_in_backpack) src.equip_if_possible(new /obj/item/weapon/storage/box(src.back), slot_in_backpack)
src.equip_if_possible(new /obj/item/clothing/under/rank/head_of_personnel(src), slot_w_uniform) src.equip_if_possible(new /obj/item/clothing/under/rank/head_of_personnel(src), slot_w_uniform)
src.equip_if_possible(new /obj/item/device/pda/heads/hop(src), slot_belt) src.equip_if_possible(new /obj/item/device/pda/heads/hop(src), slot_belt)
src.equip_if_possible(new /obj/item/clothing/suit/armor/vest(src), slot_wear_suit) src.equip_if_possible(new /obj/item/clothing/suit/armor/vest(src), slot_wear_suit)
@@ -370,7 +370,7 @@
src.equip_if_possible(new /obj/item/clothing/shoes/black(src), slot_shoes) src.equip_if_possible(new /obj/item/clothing/shoes/black(src), slot_shoes)
src.equip_if_possible(new /obj/item/clothing/suit/armor/vest(src), slot_wear_suit) src.equip_if_possible(new /obj/item/clothing/suit/armor/vest(src), slot_wear_suit)
src.equip_if_possible(new /obj/item/weapon/storage/backpack(src), slot_back) src.equip_if_possible(new /obj/item/weapon/storage/backpack(src), slot_back)
src.equip_if_possible(new /obj/item/weapon/storage/survival_kit(src.back), slot_in_backpack) src.equip_if_possible(new /obj/item/weapon/storage/box(src.back), slot_in_backpack)
src.equip_if_possible(new /obj/item/ammo_casing/shotgun/beanbag(src), slot_in_backpack) src.equip_if_possible(new /obj/item/ammo_casing/shotgun/beanbag(src), slot_in_backpack)
src.equip_if_possible(new /obj/item/ammo_casing/shotgun/beanbag(src), slot_in_backpack) src.equip_if_possible(new /obj/item/ammo_casing/shotgun/beanbag(src), slot_in_backpack)
src.equip_if_possible(new /obj/item/ammo_casing/shotgun/beanbag(src), slot_in_backpack) src.equip_if_possible(new /obj/item/ammo_casing/shotgun/beanbag(src), slot_in_backpack)
@@ -388,7 +388,7 @@
src.equip_if_possible(new /obj/item/device/pda/engineering(src), slot_belt) src.equip_if_possible(new /obj/item/device/pda/engineering(src), slot_belt)
src.equip_if_possible(new /obj/item/clothing/shoes/black(src), slot_shoes) src.equip_if_possible(new /obj/item/clothing/shoes/black(src), slot_shoes)
src.equip_if_possible(new /obj/item/weapon/storage/backpack(src), slot_back) src.equip_if_possible(new /obj/item/weapon/storage/backpack(src), slot_back)
src.equip_if_possible(new /obj/item/weapon/storage/survival_kit(src.back), slot_in_backpack) src.equip_if_possible(new /obj/item/weapon/storage/box(src.back), slot_in_backpack)
src.equip_if_possible(new /obj/item/clothing/suit/labcoat(src), slot_wear_suit) src.equip_if_possible(new /obj/item/clothing/suit/labcoat(src), slot_wear_suit)
src.equip_if_possible(new /obj/item/clothing/gloves/black(src), slot_gloves) src.equip_if_possible(new /obj/item/clothing/gloves/black(src), slot_gloves)
src.equip_if_possible(new /obj/item/weapon/storage/toolbox/mechanical(src), slot_l_hand) src.equip_if_possible(new /obj/item/weapon/storage/toolbox/mechanical(src), slot_l_hand)
@@ -411,7 +411,7 @@
src.equip_if_possible(new /obj/item/clothing/shoes/brown(src), slot_shoes) src.equip_if_possible(new /obj/item/clothing/shoes/brown(src), slot_shoes)
src.equip_if_possible(new /obj/item/clothing/suit/suit(src), slot_wear_suit) src.equip_if_possible(new /obj/item/clothing/suit/suit(src), slot_wear_suit)
src.equip_if_possible(new /obj/item/weapon/storage/backpack(src), slot_back) src.equip_if_possible(new /obj/item/weapon/storage/backpack(src), slot_back)
src.equip_if_possible(new /obj/item/weapon/storage/survival_kit(src.back), slot_in_backpack) src.equip_if_possible(new /obj/item/weapon/storage/box(src.back), slot_in_backpack)
src.equip_if_possible(new /obj/item/device/detective_scanner(src), slot_in_backpack) src.equip_if_possible(new /obj/item/device/detective_scanner(src), slot_in_backpack)
src.equip_if_possible(new /obj/item/weapon/storage/briefcase(src), slot_l_hand) src.equip_if_possible(new /obj/item/weapon/storage/briefcase(src), slot_l_hand)
@@ -433,7 +433,7 @@
if ("Chief Engineer") if ("Chief Engineer")
src.equip_if_possible(new /obj/item/weapon/storage/backpack/industrial (src), slot_back) src.equip_if_possible(new /obj/item/weapon/storage/backpack/industrial (src), slot_back)
src.equip_if_possible(new /obj/item/weapon/storage/survival_kit/engineer(src.back), slot_in_backpack) src.equip_if_possible(new /obj/item/weapon/storage/box/engineer(src.back), slot_in_backpack)
src.equip_if_possible(new /obj/item/device/radio/headset/heads/ce (src), slot_ears) src.equip_if_possible(new /obj/item/device/radio/headset/heads/ce (src), slot_ears)
src.equip_if_possible(new /obj/item/clothing/gloves/black(src), slot_gloves) //changed to black as part of dangercon 2011, approved by Urist_McDorf --Errorage src.equip_if_possible(new /obj/item/clothing/gloves/black(src), slot_gloves) //changed to black as part of dangercon 2011, approved by Urist_McDorf --Errorage
src.equip_if_possible(new /obj/item/clothing/shoes/brown(src), slot_shoes) src.equip_if_possible(new /obj/item/clothing/shoes/brown(src), slot_shoes)
@@ -459,7 +459,7 @@
if ("Chief Medical Officer") if ("Chief Medical Officer")
src.equip_if_possible(new /obj/item/device/radio/headset/heads/cmo (src), slot_ears) src.equip_if_possible(new /obj/item/device/radio/headset/heads/cmo (src), slot_ears)
src.equip_if_possible(new /obj/item/weapon/storage/backpack/medic (src), slot_back) src.equip_if_possible(new /obj/item/weapon/storage/backpack/medic (src), slot_back)
src.equip_if_possible(new /obj/item/weapon/storage/survival_kit(src.back), slot_in_backpack) src.equip_if_possible(new /obj/item/weapon/storage/box(src.back), slot_in_backpack)
src.equip_if_possible(new /obj/item/clothing/shoes/brown(src), slot_shoes) src.equip_if_possible(new /obj/item/clothing/shoes/brown(src), slot_shoes)
src.equip_if_possible(new /obj/item/clothing/under/rank/chief_medical_officer(src), slot_w_uniform) src.equip_if_possible(new /obj/item/clothing/under/rank/chief_medical_officer(src), slot_w_uniform)
src.equip_if_possible(new /obj/item/device/pda/heads/cmo(src), slot_belt) src.equip_if_possible(new /obj/item/device/pda/heads/cmo(src), slot_belt)
@@ -470,7 +470,7 @@
if ("Virologist") if ("Virologist")
src.equip_if_possible(new /obj/item/device/radio/headset/headset_medsci (src), slot_ears) // -- TLE src.equip_if_possible(new /obj/item/device/radio/headset/headset_medsci (src), slot_ears) // -- TLE
src.equip_if_possible(new /obj/item/weapon/storage/backpack/medic (src), slot_back) src.equip_if_possible(new /obj/item/weapon/storage/backpack/medic (src), slot_back)
src.equip_if_possible(new /obj/item/weapon/storage/survival_kit(src.back), slot_in_backpack) src.equip_if_possible(new /obj/item/weapon/storage/box(src.back), slot_in_backpack)
src.equip_if_possible(new /obj/item/clothing/under/rank/medical(src), slot_w_uniform) src.equip_if_possible(new /obj/item/clothing/under/rank/medical(src), slot_w_uniform)
src.equip_if_possible(new /obj/item/device/pda/medical(src), slot_belt) src.equip_if_possible(new /obj/item/device/pda/medical(src), slot_belt)
src.equip_if_possible(new /obj/item/clothing/mask/surgical(src), slot_wear_mask) src.equip_if_possible(new /obj/item/clothing/mask/surgical(src), slot_wear_mask)
@@ -532,7 +532,7 @@
else else
src.equip_if_possible(new /obj/item/device/radio/headset(src), slot_ears) src.equip_if_possible(new /obj/item/device/radio/headset(src), slot_ears)
var/obj/item/weapon/storage/backpack/BPK = new/obj/item/weapon/storage/backpack(src) var/obj/item/weapon/storage/backpack/BPK = new/obj/item/weapon/storage/backpack(src)
new /obj/item/weapon/storage/survival_kit(BPK) new /obj/item/weapon/storage/box(BPK)
src.equip_if_possible(BPK, slot_back,1) src.equip_if_possible(BPK, slot_back,1)

View File

@@ -200,7 +200,7 @@ proc/dress_for_job_default(var/mob/living/carbon/human/employee as mob, var/job_
/* /*
src.equip_if_possible(new /obj/item/weapon/storage/backpack/industrial (src), slot_back) src.equip_if_possible(new /obj/item/weapon/storage/backpack/industrial (src), slot_back)
src.equip_if_possible(new /obj/item/weapon/storage/survival_kit/engineer(src), slot_in_backpack) src.equip_if_possible(new /obj/item/weapon/storage/box/engineer(src), slot_in_backpack)
src.equip_if_possible(new /obj/item/device/radio/headset/headset_eng (src), slot_ears) // -- TLE src.equip_if_possible(new /obj/item/device/radio/headset/headset_eng (src), slot_ears) // -- TLE
src.equip_if_possible(new /obj/item/device/pda/engineering(src), slot_belt) src.equip_if_possible(new /obj/item/device/pda/engineering(src), slot_belt)
src.equip_if_possible(new /obj/item/clothing/under/rank/engineer(src), slot_w_uniform) src.equip_if_possible(new /obj/item/clothing/under/rank/engineer(src), slot_w_uniform)

View File

@@ -10,11 +10,11 @@
if(src.check_access(bot.botcard)) if(src.check_access(bot.botcard))
if(density) if(density)
open() open()
else if(istype(AM, /obj/livestock)) // else if(istype(AM, /obj/livestock))currently all access will fix later
var/obj/livestock/ani =AM // var/obj/livestock/ani =AM
if(src.check_access(ani.anicard)) // if(src.check_access(ani.anicard))
if(density) // if(density)
open() // open()
else if(istype(AM, /obj/alien/facehugger)) else if(istype(AM, /obj/alien/facehugger))
if(src.check_access(null)) if(src.check_access(null))
if(density) if(density)
@@ -326,11 +326,6 @@
if(src.check_access(bot.botcard)) if(src.check_access(bot.botcard))
if(density) if(density)
open() open()
else if(istype(AM, /obj/livestock))
var/obj/livestock/ani =AM
if(src.check_access(ani.anicard))
if(density)
open()
else if(istype(AM, /obj/alien/facehugger)) else if(istype(AM, /obj/alien/facehugger))
if(src.check_access(null)) if(src.check_access(null))
if(density) if(density)

View File

@@ -297,11 +297,10 @@ Neutralize All Unidentified Life Signs: []<BR>"},
var/list/targets = list() // list of primary targets var/list/targets = list() // list of primary targets
var/list/secondarytargets = list() // targets that are least important var/list/secondarytargets = list() // targets that are least important
if(src.check_anomalies) // if its set to check for xenos/carps, check for non-mob "livestock" if(src.check_anomalies) // if its set to check for xenos/carps, check for non-mob "crittersssss"
for (var/obj/livestock/L in view(12,src)) for (var/obj/critter/L in view(12,src))
if(istype(L, /obj/livestock/spesscarp)) // git dose fukken space carps if(L.alive)
if(L.alive) targets += L
targets += L
for (var/mob/living/carbon/C in view(12,src)) // loops through all living carbon-based lifeforms in view(12) for (var/mob/living/carbon/C in view(12,src)) // loops through all living carbon-based lifeforms in view(12)
if(istype(C, /mob/living/carbon/alien) && src.check_anomalies) // git those fukken xenos if(istype(C, /mob/living/carbon/alien) && src.check_anomalies) // git those fukken xenos
@@ -346,8 +345,8 @@ Neutralize All Unidentified Life Signs: []<BR>"},
spawn() shootAt(M) // shoot the target, finally spawn() shootAt(M) // shoot the target, finally
else else
if (istype(t, /obj/livestock)) // shoot other things, same process as above if (istype(t, /obj/critter)) // shoot other things, same process as above
var/obj/livestock/L = t var/obj/critter/L = t
if (L.alive==1) if (L.alive==1)
spawn() popUp() spawn() popUp()
dir=get_dir(src,L) dir=get_dir(src,L)

View File

@@ -5,7 +5,7 @@
// Returns the surrounding cardinal turfs with open links // Returns the surrounding cardinal turfs with open links
// Including through doors openable with the ID // Including through doors openable with the ID
// Includes spacetiles // Includes spacetiles
/*
/obj/creature /obj/creature
@@ -294,3 +294,4 @@
if (src.health <= 0) if (src.health <= 0)
src.death() src.death()
*/

View File

@@ -1,26 +1,22 @@
/obj/secure_closet/security1/New() /obj/secure_closet/security1/New()
..() ..()
sleep(2) sleep(2)
//new /obj/item/weapon/storage/flashbang_kit(src)
// Seriously gimping the number of flashes security get, will probably change later -- TLE
new /obj/item/device/radio/headset/headset_sec(src) new /obj/item/device/radio/headset/headset_sec(src)
new /obj/item/weapon/flashbang(src) new /obj/item/weapon/flashbang(src)
new /obj/item/weapon/handcuffs(src) new /obj/item/weapon/handcuffs(src)
new /obj/item/weapon/gun/energy/taser(src) new /obj/item/weapon/gun/energy/taser(src)
new /obj/item/device/flash(src) new /obj/item/device/flash(src)
new /obj/item/clothing/under/rank/security(src)
new /obj/item/clothing/shoes/jackboots(src)
new /obj/item/clothing/suit/armor/vest(src) new /obj/item/clothing/suit/armor/vest(src)
new /obj/item/clothing/head/helmet(src) new /obj/item/clothing/head/helmet(src)
new /obj/item/clothing/glasses/sunglasses(src) new /obj/item/clothing/glasses/sunglasses(src)
new /obj/item/weapon/melee/baton(src) new /obj/item/weapon/melee/baton(src)
new /obj/item/clothing/head/secsoft(src)
return return
/obj/secure_closet/security1/proc/prison_break() /obj/secure_closet/security1/proc/prison_break()
src.locked = 0 src.locked = 0
src.icon_state = src.icon_closed src.icon_state = src.icon_closed
/obj/secure_closet/security2/New() /obj/secure_closet/security2/New()
..() ..()
sleep(2) sleep(2)
@@ -31,15 +27,9 @@
new /obj/item/clothing/suit/det_suit( src ) new /obj/item/clothing/suit/det_suit( src )
new /obj/item/clothing/suit/det_suit/armor( src ) new /obj/item/clothing/suit/det_suit/armor( src )
new /obj/item/weapon/storage/fcard_kit( src ) new /obj/item/weapon/storage/fcard_kit( src )
new /obj/item/weapon/storage/fcard_kit( src )
new /obj/item/weapon/storage/fcard_kit( src )
new /obj/item/clothing/gloves/black( src ) new /obj/item/clothing/gloves/black( src )
new /obj/item/weapon/storage/lglo_kit( src ) new /obj/item/weapon/storage/lglo_kit( src )
new /obj/item/weapon/fcardholder( src ) new /obj/item/weapon/fcardholder( src )
new /obj/item/weapon/fcardholder( src )
new /obj/item/weapon/fcardholder( src )
new /obj/item/weapon/fcardholder( src )
new /obj/item/device/detective_scanner( src )
new /obj/item/device/detective_scanner( src ) new /obj/item/device/detective_scanner( src )
return return
@@ -64,13 +54,11 @@
new /obj/item/weapon/shield/riot(src) new /obj/item/weapon/shield/riot(src)
new /obj/item/weapon/gun/energy( src ) new /obj/item/weapon/gun/energy( src )
new /obj/item/device/flash( src ) new /obj/item/device/flash( src )
new /obj/item/weapon/storage/id_kit( src )
new /obj/item/clothing/under/rank/head_of_security( src ) new /obj/item/clothing/under/rank/head_of_security( src )
new /obj/item/clothing/shoes/brown( src ) new /obj/item/clothing/shoes/brown( src )
new /obj/item/clothing/glasses/sunglasses( src ) new /obj/item/clothing/glasses/sunglasses( src )
new /obj/item/clothing/suit/armor/hos( src ) new /obj/item/clothing/suit/armor/hos( src )
new /obj/item/clothing/head/helmet( src ) new /obj/item/clothing/head/helmet( src )
new /obj/item/weapon/storage/id_kit( src )
new /obj/item/weapon/storage/flashbang_kit(src) new /obj/item/weapon/storage/flashbang_kit(src)
new /obj/item/weapon/handcuffs(src) new /obj/item/weapon/handcuffs(src)
new /obj/item/weapon/melee/baton(src) new /obj/item/weapon/melee/baton(src)

View File

@@ -14,32 +14,18 @@
return return
/obj/closet/wardrobe/red/New() /obj/closet/wardrobe/red/New()
new /obj/item/clothing/under/color/red( src ) new /obj/item/clothing/under/rank/security(src)
new /obj/item/clothing/under/color/red( src ) new /obj/item/clothing/under/rank/security(src)
new /obj/item/clothing/under/color/red( src ) new /obj/item/clothing/under/rank/security(src)
new /obj/item/clothing/under/color/red( src ) new /obj/item/clothing/under/rank/security(src)
new /obj/item/clothing/under/color/red( src ) new /obj/item/clothing/shoes/jackboots(src)
new /obj/item/clothing/under/color/red( src ) new /obj/item/clothing/shoes/jackboots(src)
new /obj/item/clothing/shoes/brown( src ) new /obj/item/clothing/shoes/jackboots(src)
new /obj/item/clothing/shoes/brown( src ) new /obj/item/clothing/shoes/jackboots(src)
new /obj/item/clothing/shoes/brown( src ) new /obj/item/clothing/head/secsoft(src)
new /obj/item/clothing/shoes/brown( src ) new /obj/item/clothing/head/secsoft(src)
new /obj/item/clothing/shoes/brown( src ) new /obj/item/clothing/head/secsoft(src)
new /obj/item/clothing/shoes/brown( src ) new /obj/item/clothing/head/secsoft(src)
return
/obj/closet/wardrobe/forensics_red/New()
new /obj/item/clothing/under/rank/forensic_technician( src )
new /obj/item/clothing/under/rank/forensic_technician( src )
new /obj/item/clothing/under/rank/forensic_technician( src )
new /obj/item/clothing/under/rank/forensic_technician( src )
new /obj/item/clothing/under/rank/forensic_technician( src )
new /obj/item/clothing/under/rank/forensic_technician( src )
new /obj/item/clothing/shoes/brown( src )
new /obj/item/clothing/shoes/brown( src )
new /obj/item/clothing/shoes/brown( src )
new /obj/item/clothing/shoes/brown( src )
new /obj/item/clothing/shoes/brown( src )
new /obj/item/clothing/shoes/brown( src )
return return
/obj/closet/wardrobe/pink/New() /obj/closet/wardrobe/pink/New()

View File

@@ -182,8 +182,8 @@
nodamage = 1 nodamage = 1
New() New()
..() ..()
effects["radiation"] = 20 effects["radiation"] = 30
effectprob["radiation"] = 95 effectprob["radiation"] = 99
effects["drowsyness"] = 5 effects["drowsyness"] = 5
effectprob["drowsyness"] = 10 effectprob["drowsyness"] = 10
effectmod["radiation"] = ADD effectmod["radiation"] = ADD

View File

@@ -33,21 +33,6 @@ CLIPBOARDS
onclose(usr, "[src.name]") onclose(usr, "[src.name]")
return return
/obj/item/weapon/paper/Map/examine()
set src in view()
..()
usr << browse_rsc(map_graphic)
if (!( istype(usr, /mob/living/carbon/human) || istype(usr, /mob/dead/observer) || istype(usr, /mob/living/silicon) ))
usr << browse(text("<HTML><HEAD><TITLE>[]</TITLE></HEAD><BODY><TT>[]</TT></BODY></HTML>", src.name, stars(src.info)), text("window=[]", src.name))
onclose(usr, "[src.name]")
else
usr << browse(text("<HTML><HEAD><TITLE>[]</TITLE></HEAD><BODY><TT>[]</TT></BODY></HTML>", src.name, src.info), text("window=[]", src.name))
onclose(usr, "[src.name]")
return
/obj/item/weapon/pen/proc/formatText(var/s) /obj/item/weapon/pen/proc/formatText(var/s)
if (text_size < 2 || text_size > 7) if (text_size < 2 || text_size > 7)
text_size = 3 text_size = 3

View File

@@ -1,574 +0,0 @@
//Blatently copy/pasted from facehugger code + a few changes.
/obj/livestock
name = "animal thing"
desc = "This doesn't seem so bad..."
icon = 'livestock.dmi'
layer = 5.0
density = 1
anchored = 0
unacidable = 1//While not technically mobs, these objects should not be affected by alien acid.
var/state = 0 //0 = null, 1 = attack, 2 = idle
var/list/path = new/list()
var/frustration = 0 //How long it's gone without reaching it's target.
var/patience = 35 //The maximum time it'll chase a target.
var/mob/living/carbon/target //Its combat target.
var/list/mob/living/carbon/flee_from = new/list()
var/list/path_target = new/list() //The path to the combat target.
var/turf/trg_idle //It's idle target, the one it's following but not attacking.
var/list/path_idle = new/list() //The path to the idle target.
var/alive = 1 //1 alive, 0 dead
var/maxhealth = 25
var/health = 25
var/aggressive = 0
var/cowardly = 0 //PLEASE do not mix with agressive, I have no idea what its behaviour will be then
flags = 258.0
var/strength = 10 //The damage done by the creature if it attacks something.
var/cycle_pause = 5
var/view_range = 7 //How far it can see.
var/obj/item/weapon/card/id/anicard //By default, animals can open doors but not any with access restrictions.
var/intelligence = null // the intelligence var allows for additional access (by job).
var/species = "animal" //affects icon_state
New() //Initializes the livestock's AI and access
..()
anicard = new(src)
if(!isnull(src.intelligence))
anicard.access = get_access(intelligence)
else
anicard.access = null
src.process()
examine()
set src in view()
..()
if(!alive)
usr << text("\red <B>The animal is not moving</B>")
else if (src.health == src.health)
usr << text("\red <B>The animal looks healthy.</B>")
else
usr << text("\red <B>The animal looks beat up</B>")
if (aggressive && alive)
usr << text("\red <B>Looks fierce!</B>")
return
proc/gib() //Will move this to a generic livestock proc once I get some gib animations for the others -- Darem.
var/atom/movable/overlay/animation = null
src.icon = null
src.invisibility = 101
animation = new(src.loc)
animation.icon = 'livestock.dmi'
animation.icon_state = "blank"
animation.master = src
if(istype(src, /obj/livestock/spesscarp)) flick("spesscarp_g", animation)
sleep(11)
src.death(1)
del(animation)
return
attack_hand(user as mob)
return
attack_alien(var/mob/living/carbon/alien/user as mob) //So aliums can attack and potentially eat space carp.
if(src.alive)
if (user.a_intent == "help")
for(var/mob/O in viewers(src, null))
if ((O.client && !( O.blinded )))
O.show_message(text("\blue [user] caresses [src.name] with its scythe like arm."), 1)
else
src.health -= rand(15,30)
if(src.aggressive)
src.target = user
src.state = 1
for(var/mob/O in viewers(src, null))
if ((O.client && !( O.blinded )))
O.show_message(text("\red <B>[] has slashed [src.name]!</B>", user), 1)
playsound(src.loc, 'slice.ogg', 25, 1, -1)
if(prob(10)) new /obj/decal/cleanable/blood(src.loc)
if (src.health <= 0)
src.death()
else
if (user.a_intent == "grab")
for(var/mob/N in viewers(user, null))
if(N.client)
N.show_message(text("\red <B>[user] is attempting to devour the carp!</B>"), 1)
if(!do_after(user, 50)) return
for(var/mob/N in viewers(user, null))
if(N.client)
N.show_message(text("\red <B>[user] hungrily devours the carp!</B>"), 1)
user.health += rand(10,25)
del(src)
else
user << "\green The creature is already dead."
return
attackby(obj/item/weapon/W as obj, mob/user as mob)
if(src.alive)
switch(W.damtype)
if("fire")
src.health -= W.force * 0.75
if("brute")
src.health -= W.force * 0.5
else
if (src.health <= 0)
src.death()
else if (W.force)
if(src.aggressive && (ishuman(user) || ismonkey(user) || isrobot(user)))
src.target = user
src.state = 1
if(prob(10)) new /obj/decal/cleanable/blood(src.loc)
else if(istype(W, /obj/item/weapon/kitchenknife))
user << "\red You slice open the [src.name]!"
for (var/obj/item/I in src)
I.loc = src.loc
del(src)
return
else if(istype(W, /obj/item/weapon/butch))
user << "\red You butcher open the [src.name]!"
for (var/obj/item/I in src)
I.loc = src.loc
del(src)
return
..()
bullet_act(var/obj/item/projectile/Proj)
health -= Proj.damage
if(istype(Proj, /obj/item/projectile/beam/pulse))
if(prob(30))
gib()
if(prob(10)) new /obj/decal/cleanable/blood(src.loc)
healthcheck()
ex_act(severity)
switch(severity)
if(1.0)
src.death(1)
if(2.0)
src.health -= 15
healthcheck()
return
meteorhit()
src.gib()
return
blob_act()
if(prob(50))
src.death()
return
Bumped(AM as mob|obj)
if(ismob(AM) && src.aggressive && (ishuman(AM) || ismonkey(AM)) )
src.target = AM
set_attack()
else if(ismob(AM))
spawn(0)
var/turf/T = get_turf(src)
AM:loc = T
Bump(atom/A)
if(ismob(A) && src.aggressive && (ishuman(A) || ismonkey(A)))
src.target = A
set_attack()
else if(ismob(A))
src.loc = A:loc
..()
temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
if(exposed_temperature > 300)
health -= 5
healthcheck()
proc/set_attack()
state = 1
if(path_idle.len) path_idle = new/list()
trg_idle = null
proc/set_idle()
state = 2
if (path_target.len) path_target = new/list()
target = null
frustration = 0
proc/set_null()
state = 0
if (path_target.len) path_target = new/list()
if (path_idle.len) path_idle = new/list()
target = null
trg_idle = null
frustration = 0
proc/special_extra() //Placeholder for animal specific effects such as cow milk or spess carp breathing.
proc/special_attack() //Placeholder for extra effects from the attack such as the carp's stun.
proc/special_target() //Placeholder for extra targeting protocol
proc/random_movement() //Unlike pick(cardinal), it has a bias towards continuing on in it's
var/temp_move = null // original direction.
switch(roll(1,20)) //50% => Foreward, 20% turn left, 20% turn right, 10% don't move.
if(1 to 10)
temp_move = src.dir
if(11 to 14)
temp_move = turn(src.dir, -90)
if(15 to 18)
temp_move = turn(src.dir, 90)
if(!isnull(temp_move))
step(src,temp_move)
proc/process() //Master AI proc.
set background = 1
if (!alive) //If it isn't alive, it shouldn't be doing anything.
return
if (cowardly) //cowardly = 1 stuff
var/view = view_range-2 //Actual sight slightly lower then it's total sight.
for (var/mob/living/carbon/C in range(view,src.loc)) //checking for threats
if (((get_dir(src,C) & dir) || (C.m_intent=="run" && C.moved_recently)) && !(C in flee_from)) //if it can see or hear anyone nearby, start fleeing
flee_from += C
if (flee_from.len) //ohgodrun
var/viable_dirs = 0
for(var/mob/living/carbon/C in flee_from)
if(!(C in view(src,view_range))) //first, see if someone who it has been fleeing from is still there. if not, delete that guy from the list
flee_from -= C
else
viable_dirs |= get_dir(src,C)
viable_dirs = 15 - viable_dirs //so it runs AWAY from those directions, not TOWARDS them
if(viable_dirs) //if there is somewhere to run, DO IT DAMNIT
var/list/turfs_to_move_to = new/list()
for(var/turf/T in orange(src,1))
if(((get_dir(src,T) & viable_dirs) == get_dir(src,T)) && !T.density)
turfs_to_move_to += T
src.Move(pick(turfs_to_move_to))
if (aggressive) //aggressive = 1 stuff
if (!target)
if (path_target.len) path_target = new/list() //No target but there's still path data? reset it.
var/last_health = INFINITY //Set as high as possible as an initial value.
var/view = view_range-2 //Actual sight slightly lower then it's total sight.
for (var/mob/living/carbon/C in range(view,src.loc)) //Checks all carbon creatures in range.
if (!aggressive) //Is this animal angry? If not, what the fuck are you doing?
break
if (C.stat == 2 || !can_see(src,C,view_range) || (!can_see(src,C,(view_range / 2)) && C.invisibility >= 1))
continue
if(C:stunned || C:paralysis || C:weakened)
target = C
break
if(C:health < last_health) //Selects the target but does NOT break the FOR loop.
last_health = C:health // As such, it'll keep going until it finds the one with the
target = C // lowest health.
if(target) //Does it have a target NOW?
if (aggressive) //Double checking if it is aggressive or not.
set_attack()
else if(state != 2) //If it doesn't have a target and it isn't idling already, idle.
set_idle()
idle()
else if(target) //It already has a target? YAY!
var/turf/distance = get_dist(src, target)
if (src.aggressive) //I probably don't need this check, but just in case.
set_attack()
else
set_idle()
idle()
if(can_see(src,target,view_range )) //Can I see it?
if(distance <= 1) //Am I close enough to attack it?
for(var/mob/O in viewers(world.view,src))
O.show_message("\red <B>[src.target] has been attacked by [src.name]!</B>", 1, "\red You hear someone fall.", 2)
target.take_organ_damage(strength)
special_attack()
src.loc = target.loc
set_null()
step_towards(src,get_step_towards2(src , target)) // Move towards the target.
else
if( !path_target.len ) //Don't have a path yet but do have a target?
path_attack(target) //Find a path!
if(!path_target.len) //Still no path?
set_null() //Fuck this shit.
if( path_target.len ) //Ok, I DO have a path
var/turf/next = path_target[1] //Select the next square to move to.
if(next in range(1,src)) //Is it next to it?
path_attack(target) //Re-find path.
if(!path_target.len) //If can't path to the target, it gets really angry.
src.frustration += 5
else
next = path_target[1] //If it CAN path to the target, select the next move point
path_target -= next
step_towards(src,next) //And move in that direction.
if (get_dist(src, src.target) >= distance) src.frustration++ //If it hasn't reached the target yet, get a little angry.
else src.frustration-- //It reached the target! Get less angry.
if(frustration >= patience) set_null() //If too angry? Fuck this shit.
special_extra()
if(target || flee_from.len)
spawn(cycle_pause / 3)
src.process()
else
spawn(cycle_pause)
src.process()
proc/idle() //Idle proc for when it isn't in combat mode. Called by itself and process()
set background = 1
if(state != 2 || !alive || target) return //If you arne't idling, aren't alive, or have a target, you shouldn't be here.
if(prob(5) && health < maxhealth) //5% chance of healing every cycle.
health++
special_extra()
if(isnull(trg_idle)) //No one to follow? Find one.
for(var/mob/living/O in viewers(world.view,src))
if(O.mutations == (0 || CLOWN)) //Hates mutants and fatties.
trg_idle = O
break
if(isnull(trg_idle)) //Still no one to follow? Step in a random direction.
random_movement()
else if(!path_idle.len) //Has a target but no path?
if(can_see(src,trg_idle,view_range)) //Can see it? Then move towards it.
step_towards(src,get_step_towards2(src , trg_idle))
else
path_idle(trg_idle) //Can't see it? Find a path.
if(!path_idle.len) //Still no path? Stop trying to follow it.
trg_idle = null
random_movement()
else
if(can_see(src,trg_idle,view_range)) //Has a path and can see the target?
if(get_dist(src, trg_idle) >= 2) //If 2 or more squares away, re-find path and move towards it.
step_towards(src,get_step_towards2(src , trg_idle))
if(path_idle.len) path_idle = new/list()
else
var/turf/next = path_idle[1] //Has a target and a path but can't see it?
if(!next in range(1,src)) //If end of path and not next to target, find new path.
path_idle(trg_idle)
if(path_idle.len) //If still some path left, move along path.
next = path_idle[1]
path_idle -= next
step_towards(src,next)
spawn(cycle_pause)
idle()
proc/path_idle(var/atom/trg)
path_idle = AStar(src.loc, get_turf(trg), /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 250, anicard, null)
path_idle = reverselist(path_idle)
proc/path_attack(var/atom/trg)
path_target = AStar(src.loc, trg.loc, /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 250, anicard, null)
path_target = reverselist(path_target)
proc/death(var/messy = 0)
if(!alive) return
alive = 0
density = 0
icon_state = "[species]_d"
set_null()
if(!messy)
for(var/mob/O in hearers(src, null))
O.show_message("\red <B>[src]'s eyes glass over!</B>", 1)
else
for (var/obj/item/I in src)
if(!istype(I, /obj/item/weapon/card)) I.loc = src.loc
del(src)
proc/healthcheck()
if (src.health <= 0)
src.death()
//////////////////////////////////////////////////////////////////////////////
/////////////////////////Specific Creature Entries////////////////////////////
//////////////////////////////////////////////////////////////////////////////
/*/obj/livestock/chick
name = "Chick"
desc = "A harmless little baby chicken, it's so cute!"
icon_state = "chick"
health = 10
maxhealth = 10
strength = 5
cycle_pause = 15
patience = 25
var/obj/item/weapon/reagent_containers/food/snacks/egg_holder
special_extra()
if(prob(5))
for(var/mob/O in hearers(src, null))
O << "\green Chick: Cluck."
src.egg_holder = new /obj/item/weapon/reagent_containers/food/snacks/egg(src)
src.egg_holder.loc = src.loc
src.egg_holder = null
for(var/mob/living/carbon/human/V in viewers(world.view,src))
if(V.mind.special_role == "wizard")
for(var/mob/H in hearers(src, null))
H << "\green Chick clucks in an angry manner at [V.name]."
*/
/obj/livestock/spesscarp
name = "Spess Carp"
desc = "Oh shit, you're really fucked now."
icon_state = "spesscarp"
species = "spesscarp"
aggressive = 1
health = 25
maxhealth = 25
strength = 10
cycle_pause = 10
patience = 25
view_range = 8
var/stun_chance = 5 // determines the prob of a stun
New()
..()
new /obj/item/weapon/reagent_containers/food/snacks/carpmeat(src)
new /obj/item/weapon/reagent_containers/food/snacks/carpmeat(src)
new /obj/item/weapon/reagent_containers/food/snacks/carpmeat(src)
special_attack()
if (prob(stun_chance))
target:stunned = max(target:stunned, (strength / 2))
/obj/livestock/spesscarp/elite
desc = "Oh shit, you're really fucked now. It has an evil gleam in it's eye."
health = 50
maxhealth = 50
view_range = 14
stun_chance = 40
intelligence = "Assistant"
/obj/livestock/killertomato
name = "Killer Tomato"
desc = "Oh shit, you're really fucked now."
icon_state = "killertomato"
species = "killertomato"
cowardly = 1
health = 75
maxhealth = 75
cycle_pause = 10
patience = 10
view_range = 14
intelligence = "Captain"
var/stun_chance = 10 // determines the prob of a stun
New()
..()
new /obj/item/weapon/reagent_containers/food/snacks/tomatomeat(src)
new /obj/item/weapon/reagent_containers/food/snacks/tomatomeat(src)
new /obj/item/weapon/reagent_containers/food/snacks/tomatomeat(src)
/obj/livestock/walkingmushroom
name = "Walking Mushroom"
desc = "A...huge...mushroom...with legs!?"
icon_state = "walkingmushroom"
species = "walkingmushroom"
cowardly = 1
health = 50
maxhealth = 50
strength = 0
cycle_pause = 10
patience = 25
view_range = 8
intelligence = "Captain"
var/stun_chance = 0
New()
..()
new /obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice(src)
new /obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice(src)
new /obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice(src)
/obj/livestock/lizard
name = "Lizard"
desc = "A cute tiny lizard."
icon_state = "lizard"
species = "lizard"
cowardly = 1
health = 10
maxhealth = 10
strength = 2
cycle_pause = 10
patience = 50
view_range = 7
/obj/livestock/roach
name = "Roach"
desc = "A cute large roach."
icon_state = "roach"
species = "roach"
aggressive = 1
health = 15
maxhealth = 15
strength = 2
cycle_pause = 10
patience = 50
view_range = 7
/obj/livestock/bear
name = "ninja space bear"
desc = "Its sight is unbearable to your eye."
icon_state = "bear"
species = "bear"
aggressive = 1
health = 100
maxhealth = 100
cycle_pause = 15
patience = 75
strength = 30
intelligence = "Captain"
var/adaptationChance = 10 //the chance per tick the bear will change its camouflage
var/camouflage = "space" //"", "space" or "floor"
New()
..()
//new /obj/item/clothing/suit/bearpelt(src)
new /obj/item/weapon/reagent_containers/food/snacks/bearmeat(src)
new /obj/item/weapon/reagent_containers/food/snacks/bearmeat(src)
new /obj/item/weapon/reagent_containers/food/snacks/bearmeat(src)
new /obj/item/weapon/reagent_containers/food/snacks/bearmeat(src)
new /obj/item/weapon/reagent_containers/food/snacks/bearmeat(src)
//new /obj/item/weapon/reagent_containers/food/snacks/bearinnards(src)
special_extra() //camouflage check
if(prob(adaptationChance))
if(istype(loc,/turf/simulated/floor))
if(camouflage != "floor")
camouflage = "floor"
else if(istype(loc,/turf/space))
if(camouflage != "space")
camouflage = "space"
else if(camouflage != "")
camouflage = ""
update_icon()
update_icon()
icon_state = "[species][camouflage][alive?"":"_d"]"
/* Commented out because of Filthy Xeno-lovers.
/obj/livestock/cow
name = "Pigmy Cow"
desc = "That's not my cow!"
icon_state = "cow"
health = 100
maxhealth = 100
strength = 20
cycle_pause = 20
patience = 50
view_range = 10
New()
..()
new /obj/item/weapon/reagent_containers/food/snacks/monkeymeat(src)
new /obj/item/weapon/reagent_containers/food/snacks/monkeymeat(src)
new /obj/item/weapon/reagent_containers/food/snacks/monkeymeat(src)
special_extra()
if(prob(20))
for(var/mob/O in hearers(src, null))
O << "\green Cow: Moo."
src.reagents.add_reagent("milk", 1)
if(src.reagents.get_reagent_amount("milk") >= 100)
gib()
examine()
..()
switch(src.reagents.get_reagent_amount("milk"))
if(0 to 10)
usr << text("\red The cow looks content.")
if(11 to 80)
usr << text("\red The cow looks uncomfortable.")
if(81 to INFINITY)
usr << text("\red The cow looks as if it could burst at any minute!")
*/

View File

@@ -0,0 +1,65 @@
/obj/item/weapon/storage/lockbox
name = "Lockbox"
desc = "A locked box."
icon_state = "lockbox+l"
item_state = "syringe_kit"
w_class = 4
max_w_class = 3
max_combined_w_class = 14 //The sum of the w_classes of all the items in this storage item.
storage_slots = 4
req_access = list(access_armory)
var
locked = 1
broken = 0
icon_locked = "lockbox+l"
icon_closed = "lockbox"
icon_broken = "lockbox+b"
attackby(obj/item/weapon/W as obj, mob/user as mob)
if (istype(W, /obj/item/weapon/card/id))
if(src.broken)
user << "\red It appears to be broken."
return
if(src.allowed(user))
src.locked = !( src.locked )
if(src.locked)
src.icon_state = src.icon_locked
user << "\red You lock the [src.name]!"
return
else
src.icon_state = src.icon_closed
user << "\red You unlock the [src.name]!"
return
else
user << "\red Access Denied"
else if((istype(W, /obj/item/weapon/card/emag)||istype(W, /obj/item/weapon/melee/energy/blade)) && !src.broken)
broken = 1
locked = 0
desc = "It appears to be broken."
icon_state = src.icon_broken
if(istype(W, /obj/item/weapon/melee/energy/blade))
var/datum/effects/system/spark_spread/spark_system = new /datum/effects/system/spark_spread()
spark_system.set_up(5, 0, src.loc)
spark_system.start()
playsound(src.loc, 'blade1.ogg', 50, 1)
playsound(src.loc, "sparks", 50, 1)
for(var/mob/O in viewers(user, 3))
O.show_message(text("\blue The locker has been sliced open by [] with an energy blade!", user), 1, text("\red You hear metal being sliced and sparks flying."), 2)
else
for(var/mob/O in viewers(user, 3))
O.show_message(text("\blue The locker has been broken by [] with an electromagnetic card!", user), 1, text("You hear a faint electrical spark."), 2)
if(!locked)
..()
else
user << "\red Its locked!"
return
show_to(mob/user as mob)
if(locked)
user << "\red Its locked!"
else
..()
return

View File

@@ -1,3 +1,15 @@
/obj/item/weapon/storage
icon = 'storage.dmi'
name = "storage"
var/list/can_hold = new/list() //List of objects which this item can store (if set, it can't store anything else)
var/list/cant_hold = new/list() //List of objects which this item can't store (in effect only if can_hold isn't set)
var/max_w_class = 2 //Max size of objects that this object can store (in effect only if can_hold isn't set)
var/max_combined_w_class = 14 //The sum of the w_classes of all the items in this storage item.
var/storage_slots = 7 //The number of storage slots in this container.
var/obj/screen/storage/boxes = null
var/obj/screen/close/closer = null
w_class = 3.0
/obj/item/weapon/storage/proc/return_inv() /obj/item/weapon/storage/proc/return_inv()
var/list/L = list( ) var/list/L = list( )
@@ -200,14 +212,14 @@
src.master.attackby(W, user) src.master.attackby(W, user)
return return
/obj/item/weapon/storage/survival_kit/New() /obj/item/weapon/storage/box/New()
sleep(1) sleep(1)
new /obj/item/clothing/mask/breath( src ) new /obj/item/clothing/mask/breath( src )
new /obj/item/weapon/tank/emergency_oxygen( src ) new /obj/item/weapon/tank/emergency_oxygen( src )
..() ..()
return return
/obj/item/weapon/storage/survival_kit/engineer/New() /obj/item/weapon/storage/box/engineer/New()
..() ..()
contents = list() contents = list()
sleep(1) sleep(1)

View File

@@ -1466,6 +1466,6 @@ turf/simulated/floor/return_siding_icon_state()
for(var/obj/alien/facehugger/M in src)//These really need to be mobs. for(var/obj/alien/facehugger/M in src)//These really need to be mobs.
spawn(0) spawn(0)
M.death() M.death()
for(var/obj/livestock/M in src) for(var/obj/critter/M in src)
spawn(0) spawn(0)
M.gib() M.Die()

View File

@@ -650,7 +650,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
M.equip_if_possible(new /obj/item/weapon/spellbook(M), M.slot_r_hand) M.equip_if_possible(new /obj/item/weapon/spellbook(M), M.slot_r_hand)
M.equip_if_possible(new /obj/item/weapon/staff(M), M.slot_l_hand) M.equip_if_possible(new /obj/item/weapon/staff(M), M.slot_l_hand)
M.equip_if_possible(new /obj/item/weapon/storage/backpack(M), M.slot_back) M.equip_if_possible(new /obj/item/weapon/storage/backpack(M), M.slot_back)
M.equip_if_possible(new /obj/item/weapon/storage/survival_kit(M), M.slot_in_backpack) M.equip_if_possible(new /obj/item/weapon/storage/box(M), M.slot_in_backpack)
if("red wizard") if("red wizard")
M.equip_if_possible(new /obj/item/clothing/under/lightpurple(M), M.slot_w_uniform) M.equip_if_possible(new /obj/item/clothing/under/lightpurple(M), M.slot_w_uniform)
@@ -662,7 +662,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
M.equip_if_possible(new /obj/item/weapon/spellbook(M), M.slot_r_hand) M.equip_if_possible(new /obj/item/weapon/spellbook(M), M.slot_r_hand)
M.equip_if_possible(new /obj/item/weapon/staff(M), M.slot_l_hand) M.equip_if_possible(new /obj/item/weapon/staff(M), M.slot_l_hand)
M.equip_if_possible(new /obj/item/weapon/storage/backpack(M), M.slot_back) M.equip_if_possible(new /obj/item/weapon/storage/backpack(M), M.slot_back)
M.equip_if_possible(new /obj/item/weapon/storage/survival_kit(M), M.slot_in_backpack) M.equip_if_possible(new /obj/item/weapon/storage/box(M), M.slot_in_backpack)
if("marisa wizard") if("marisa wizard")
M.equip_if_possible(new /obj/item/clothing/under/lightpurple(M), M.slot_w_uniform) M.equip_if_possible(new /obj/item/clothing/under/lightpurple(M), M.slot_w_uniform)
@@ -674,7 +674,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
M.equip_if_possible(new /obj/item/weapon/spellbook(M), M.slot_r_hand) M.equip_if_possible(new /obj/item/weapon/spellbook(M), M.slot_r_hand)
M.equip_if_possible(new /obj/item/weapon/staff(M), M.slot_l_hand) M.equip_if_possible(new /obj/item/weapon/staff(M), M.slot_l_hand)
M.equip_if_possible(new /obj/item/weapon/storage/backpack(M), M.slot_back) M.equip_if_possible(new /obj/item/weapon/storage/backpack(M), M.slot_back)
M.equip_if_possible(new /obj/item/weapon/storage/survival_kit(M), M.slot_in_backpack) M.equip_if_possible(new /obj/item/weapon/storage/box(M), M.slot_in_backpack)
M.update_clothing() M.update_clothing()
return return

View File

@@ -158,7 +158,7 @@ var/global/sent_strike_team = 0
equip_if_possible(new /obj/item/clothing/glasses/thermal(src), slot_glasses) equip_if_possible(new /obj/item/clothing/glasses/thermal(src), slot_glasses)
equip_if_possible(new /obj/item/weapon/storage/backpack/security(src), slot_back) equip_if_possible(new /obj/item/weapon/storage/backpack/security(src), slot_back)
equip_if_possible(new /obj/item/weapon/storage/survival_kit(src), slot_in_backpack) equip_if_possible(new /obj/item/weapon/storage/box(src), slot_in_backpack)
equip_if_possible(new /obj/item/ammo_magazine(src), slot_in_backpack) equip_if_possible(new /obj/item/ammo_magazine(src), slot_in_backpack)
equip_if_possible(new /obj/item/weapon/storage/firstaid/regular(src), slot_in_backpack) equip_if_possible(new /obj/item/weapon/storage/firstaid/regular(src), slot_in_backpack)

View File

@@ -161,7 +161,7 @@ var/global/sent_syndicate_strike_team = 0
equip_if_possible(new /obj/item/clothing/glasses/thermal(src), slot_glasses) equip_if_possible(new /obj/item/clothing/glasses/thermal(src), slot_glasses)
equip_if_possible(new /obj/item/weapon/storage/backpack/security(src), slot_back) equip_if_possible(new /obj/item/weapon/storage/backpack/security(src), slot_back)
equip_if_possible(new /obj/item/weapon/storage/survival_kit(src), slot_in_backpack) equip_if_possible(new /obj/item/weapon/storage/box(src), slot_in_backpack)
equip_if_possible(new /obj/item/ammo_magazine/c45(src), slot_in_backpack) equip_if_possible(new /obj/item/ammo_magazine/c45(src), slot_in_backpack)
equip_if_possible(new /obj/item/weapon/storage/firstaid/regular(src), slot_in_backpack) equip_if_possible(new /obj/item/weapon/storage/firstaid/regular(src), slot_in_backpack)

View File

@@ -0,0 +1,117 @@
/obj/critter
name = "Critter"
desc = "Generic critter."
icon = 'critter.dmi'
icon_state = "basic"
layer = 5.0
density = 1
anchored = 0
var
alive = 1
health = 10
max_health = 10
//AI things
task = "thinking"
//Attacks at will
aggressive = 1
//Will target an attacker
defensive = 0
//Will randomly move about
wanderer = 1
//Will open doors it bumps
opensdoors = 1
//Internal tracking ignore
frustration = 0
max_frustration = 8
attack = 0
attacking = 0
steps = 0
last_found = null
target = null
oldtarget_name = null
target_lastloc = null
//The last guy who attacked it
attacker = null
//Will not attack this thing
friend = null
//How far to look for things dont set this overly high
seekrange = 7
//If true will attack these things
atkcarbon = 1
atksilicon = 0
atkcritter = 0
//Attacks critters of the same type
atksame = 0
atkmech = 0
//Damage multipliers
brutevuln = 1
firevuln = 1
//DR
armor = 0
//How much damage it does it melee
melee_damage_lower = 1
melee_damage_upper = 2
//Basic attack message when they move to attack and attack
angertext = "charges at"
attacktext = "attacks"
proc
patrol_step()
process()
seek_target()
Die()
ChaseAttack()
RunAttack()
TakeDamage(var/damage = 0)
Target_Attacker(var/target)
/* TODO:Go over these and see how/if to add them
proc/set_attack()
state = 1
if(path_idle.len) path_idle = new/list()
trg_idle = null
proc/set_idle()
state = 2
if (path_target.len) path_target = new/list()
target = null
frustration = 0
proc/set_null()
state = 0
if (path_target.len) path_target = new/list()
if (path_idle.len) path_idle = new/list()
target = null
trg_idle = null
frustration = 0
proc/path_idle(var/atom/trg)
path_idle = AStar(src.loc, get_turf(trg), /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 250, anicard, null)
path_idle = reverselist(path_idle)
proc/path_attack(var/atom/trg)
path_target = AStar(src.loc, trg.loc, /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 250, anicard, null)
path_target = reverselist(path_target)
//Look these over
var/list/path = new/list()
var/patience = 35 //The maximum time it'll chase a target.
var/list/mob/living/carbon/flee_from = new/list()
var/list/path_target = new/list() //The path to the combat target.
var/turf/trg_idle //It's idle target, the one it's following but not attacking.
var/list/path_idle = new/list() //The path to the idle target.
*/

View File

@@ -0,0 +1,186 @@
/obj/critter
New()
spawn(0) process()//I really dont like this much but it seems to work well
..()
process()
set background = 1
if (!src.alive) return
switch(task)
if("thinking")
src.attack = 0
src.target = null
sleep(15)
walk_to(src,0)
if (src.aggressive) seek_target()
if (src.wanderer && !src.target) src.task = "wandering"
if("chasing")
if (src.frustration >= max_frustration)
src.target = null
src.last_found = world.time
src.frustration = 0
src.task = "thinking"
walk_to(src,0)
if (target)
if (get_dist(src, src.target) <= 1)
var/mob/living/carbon/M = src.target
ChaseAttack()
src.task = "attacking"
src.anchored = 1
src.target_lastloc = M.loc
else
var/turf/olddist = get_dist(src, src.target)
walk_to(src, src.target,1,4)
if ((get_dist(src, src.target)) >= (olddist))
src.frustration++
else
src.frustration = 0
sleep(5)
else src.task = "thinking"
if("attacking")
// see if he got away
if ((get_dist(src, src.target) > 1) || ((src.target:loc != src.target_lastloc)))
src.anchored = 0
src.task = "chasing"
else
if (get_dist(src, src.target) <= 1)
var/mob/living/carbon/M = src.target
if(!src.attacking) RunAttack()
if(!src.aggressive)
src.task = "thinking"
src.target = null
src.anchored = 0
src.last_found = world.time
src.frustration = 0
src.attacking = 0
else
if(M!=null)
if(M.health < 0)
src.task = "thinking"
src.target = null
src.anchored = 0
src.last_found = world.time
src.frustration = 0
src.attacking = 0
else
src.anchored = 0
src.attacking = 0
src.task = "chasing"
if("wandering")
patrol_step()
sleep(10)
spawn(8)
process()
return
patrol_step()
var/moveto = locate(src.x + rand(-1,1),src.y + rand(-1, 1),src.z)
if (istype(moveto, /turf/simulated/floor) || istype(moveto, /turf/simulated/shuttle/floor) || istype(moveto, /turf/unsimulated/floor)) step_towards(src, moveto)
if(src.aggressive) seek_target()
steps += 1
if (steps == rand(5,20)) src.task = "thinking"
Bump(M as mob|obj)//TODO: Add access levels here
spawn(0)
if ((istype(M, /obj/machinery/door)))
var/obj/machinery/door/D = M
if (src.opensdoors)
D.open()
src.frustration = 0
else src.frustration ++
else if ((istype(M, /mob/living/)) && (!src.anchored))
src.loc = M:loc
src.frustration = 0
return
return
Bumped(M as mob|obj)
spawn(0)
var/turf/T = get_turf(src)
M:loc = T
seek_target()
src.anchored = 0
var/T = null
for(var/mob/living/C in view(src.seekrange,src))//TODO: mess with this
if (src.target)
src.task = "chasing"
break
if((C.name == src.oldtarget_name) && (world.time < src.last_found + 100)) continue
if(istype(C, /mob/living/carbon/) && !src.atkcarbon) continue
if(istype(C, /mob/living/silicon/) && !src.atksilicon) continue
if(C.health < 0) continue
if(istype(C, /mob/living/carbon/) && src.atkcarbon) src.attack = 1
if(istype(C, /mob/living/silicon/) && src.atksilicon) src.attack = 1
if(src.attack)
T = C
break
if(!src.attack)
for(var/obj/critter/C in view(src.seekrange,src))
if(istype(C, /obj/critter) && !src.atkcritter) continue
if(istype(C, /obj/mecha) && !src.atkmech) continue
if(C.health < 0) continue
if(istype(C, /obj/critter) && src.atkcritter)
if(istype(C, src.type) && !src.atksame) continue
src.attack = 1
if(istype(C, /obj/mecha) && src.atkmech) src.attack = 1
if(src.attack)
T = C
break
if(src.attack)
src.target = T
src.oldtarget_name = T:name
src.task = "chasing"
return
ChaseAttack()
for(var/mob/O in viewers(src, null))
O.show_message("\red <B>[src]</B> [src.angertext] at [src.target]!", 1)
return
RunAttack()
src.attacking = 1
for(var/mob/O in viewers(src, null))
O.show_message("\red <B>[src]</B> [src.attacktext] [src.target]!", 1)
if(ismob(src.target))
src.target:bruteloss += rand(melee_damage_lower,melee_damage_upper)
if(isobj(src.target))
if(istype(target, /obj/mecha))
src.target:take_damage(rand(melee_damage_lower,melee_damage_upper))
else
src.target:TakeDamage(rand(melee_damage_lower,melee_damage_upper))
spawn(25)
src.attacking = 0
return
/*TODO: Figure out how to handle special things like this dont really want to give it to every critter
/obj/critter/proc/CritterTeleport(var/telerange, var/dospark, var/dosmoke)
if (!src.alive) return
var/list/randomturfs = new/list()
for(var/turf/T in orange(src, telerange))
if(istype(T, /turf/space) || T.density) continue
randomturfs.Add(T)
src.loc = pick(randomturfs)
if (dospark)
var/datum/effects/system/spark_spread/s = new /datum/effects/system/spark_spread
s.set_up(5, 1, src)
s.start()
if (dosmoke)
var/datum/effects/system/harmless_smoke_spread/smoke = new /datum/effects/system/harmless_smoke_spread()
smoke.set_up(10, 0, src.loc)
smoke.start()
src.task = "thinking"
*/

View File

@@ -0,0 +1,166 @@
/obj/critter/creature
name = "creature"
desc = "A sanity-destroying otherthing."
icon = 'otherthing.dmi'
icon_state = "otherthing"
health = 80
max_health = 80
aggressive = 1
defensive = 1
wanderer = 1
opensdoors = 1
atkcarbon = 1
atksilicon = 1
atkcritter = 1
atkmech = 1
atksame = 1
firevuln = 1
brutevuln = 1
melee_damage_lower = 25
melee_damage_upper = 50
angertext = "runs at"
attacktext = "chomps"
/obj/critter/roach
name = "cockroach"
desc = "An unpleasant insect that lives in filthy places."
icon_state = "roach"
health = 5
max_health = 5
aggressive = 0
defensive = 1
wanderer = 1
opensdoors = 0
atkcarbon = 1
atksilicon = 0
attacktext = "bites"
Die()
..()
del(src)
/obj/critter/killertomato
name = "killer tomato"
desc = "Oh shit, you're really fucked now."
icon_state = "killertomato"
health = 15
max_health = 15
aggressive = 1
defensive = 0
wanderer = 1
opensdoors = 1
atkcarbon = 1
atksilicon = 1
firevuln = 2
brutevuln = 2
Die()
..()
new /obj/item/weapon/reagent_containers/food/snacks/tomatomeat(src)
if(prob(50))
new /obj/item/weapon/reagent_containers/food/snacks/tomatomeat(src)
new /obj/item/weapon/reagent_containers/food/snacks/tomatomeat(src)
/obj/critter/spore
name = "plasma spore"
desc = "A barely intelligent colony of organisms. Very volatile."
icon_state = "spore"
density = 1
health = 1
max_health = 1
aggressive = 0
defensive = 0
wanderer = 1
opensdoors = 0
atkcarbon = 0
atksilicon = 0
firevuln = 2
brutevuln = 2
Die()
src.visible_message("<b>[src]</b> ruptures and explodes!")
src.alive = 0
var/turf/T = get_turf(src.loc)
if(T)
T.hotspot_expose(700,125)
explosion(T, -1, -1, 2, 3)
del src
ex_act(severity)
src.Die()
/obj/critter/spesscarp
name = "Spess Carp"
desc = "Oh shit, you're really fucked now."
icon_state = "spesscarp"
health = 25
max_health = 25
aggressive = 1
defensive = 1
wanderer = 1
opensdoors = 1
atkcarbon = 1
atksilicon = 1
atkcritter = 1
atkmech = 1
firevuln = 2
brutevuln = 1
melee_damage_lower = 5
melee_damage_upper = 10
angertext = "swims at"
attacktext = "bites"
Die()
..()
new/obj/item/weapon/reagent_containers/food/snacks/carpmeat(src.loc)
if(prob(50))
new /obj/item/weapon/reagent_containers/food/snacks/carpmeat(src)
new /obj/item/weapon/reagent_containers/food/snacks/carpmeat(src)
/obj/critter/spesscarp/elite
desc = "Oh shit, you're really fucked now. It has an evil gleam in it's eye."
health = 50
max_health = 50
melee_damage_lower = 10
melee_damage_upper = 20
/obj/critter/walkingmushroom
name = "Walking Mushroom"
desc = "A...huge...mushroom...with legs!?"
icon_state = "walkingmushroom"
health = 15
max_health = 15
aggressive = 0
defensive = 0
wanderer = 1
opensdoors = 0
atkcarbon = 0
atksilicon = 0
firevuln = 2
brutevuln = 1
Die()
..()
new /obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice(src.loc)
if(prob(50))
new /obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice(src.loc)
new /obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice(src.loc)
/obj/critter/lizard
name = "Lizard"
desc = "A cute tiny lizard."
icon_state = "lizard"
health = 5
max_health = 5
aggressive = 0
defensive = 1
wanderer = 1
opensdoors = 0
atkcarbon = 1
atksilicon = 1
attacktext = "bites"

View File

@@ -0,0 +1,95 @@
/*
Contains the procs that control attacking critters
*/
/obj/critter
attackby(obj/item/weapon/W as obj, mob/living/user as mob)
..()
if (!src.alive) return
var/damage = 0
switch(W.damtype)
if("fire") damage = W.force * firevuln
if("brute") damage = W.force * brutevuln
TakeDamage(damage)
if(src.defensive) Target_Attacker(user)
return
attack_hand(var/mob/user as mob)
if (!src.alive) ..()
if (user.a_intent == "hurt")
TakeDamage(rand(1,2) * brutevuln)
for(var/mob/O in viewers(src, null))
O.show_message("\red <b>[user]</b> punches [src]!", 1)
playsound(src.loc, pick('punch1.ogg','punch2.ogg','punch3.ogg','punch4.ogg'), 100, 1)
if(src.defensive) Target_Attacker(user)
else
for(var/mob/O in viewers(src, null))
O.show_message("\red <b>[user]</b> touches [src]!", 1)
Target_Attacker(var/target)
if(!target) return
src.target = target
src.oldtarget_name = target:name
for(var/mob/O in viewers(src, null))
O.show_message("\red <b>[src]</b> [src.angertext] [target:name]!", 1)
src.task = "chasing"
return
TakeDamage(var/damage = 0)
var/tempdamage = (damage-armor)
if(tempdamage > 0)
src.health -= tempdamage
else
src.health--
if(src.health <= 0)
src.Die()
Die()//Might be more effective to del them and create a dummy item of some sorts
if (!src.alive) return
src.icon_state += "-dead"
src.alive = 0
src.anchored = 0
src.density = 0
walk_to(src,0)
src.visible_message("<b>[src]</b> dies!")
bullet_act(var/obj/item/projectile/Proj)
TakeDamage(Proj.damage)
ex_act(severity)
switch(severity)
if(1.0)
src.Die()
return
if(2.0)
TakeDamage(20)
return
return
emp_act(serverity)
switch(serverity)
if(1.0)
src.Die()
return
if(2.0)
TakeDamage(20)
return
return
meteorhit()
src.Die()
return
blob_act()
if(prob(25))
src.Die()
return

View File

@@ -0,0 +1,244 @@
/obj/item/projectile/hivebotbullet
damage = 5
mobdamage = list(BRUTE = 5, BURN = 0, TOX = 0, OXY = 0, CLONE = 0)
/obj/critter/hivebot
name = "Hivebot"
desc = "A small robot"
icon = 'hivebot.dmi'
icon_state = "basic"
health = 10
max_health = 10
aggressive = 1
wanderer = 1
opensdoors = 1
atkcarbon = 1
atksilicon = 0
atkcritter = 1
atksame = 0
atkmech = 1
firevuln = 0.5
brutevuln = 1
seekrange = 8
armor = 5
melee_damage_lower = 2
melee_damage_upper = 3
angertext = "leaps at"
attacktext = "claws"
var
ranged = 0
rapid = 0
proc
Shoot(var/target, var/start, var/user, var/bullet = 0)
OpenFire(var/thing)//bluh ill rename this later or somethin
Die()
if (!src.alive) return
src.alive = 0
walk_to(src,0)
src.visible_message("<b>[src]</b> blows apart!")
var/turf/Ts = get_turf(src)
new /obj/decal/cleanable/robot_debris(Ts)
var/datum/effects/system/spark_spread/s = new /datum/effects/system/spark_spread
s.set_up(3, 1, src)
s.start()
del(src)
seek_target()
src.anchored = 0
var/T = null
for(var/mob/living/C in view(src.seekrange,src))//TODO: mess with this
if (src.target)
src.task = "chasing"
break
if((C.name == src.oldtarget_name) && (world.time < src.last_found + 100)) continue
if(istype(C, /mob/living/carbon/) && !src.atkcarbon) continue
if(istype(C, /mob/living/silicon/) && !src.atksilicon) continue
if(C.health < 0) continue
if(istype(C, /mob/living/carbon/) && src.atkcarbon)
if(C:mind)
if(C:mind:special_role == "H.I.V.E")
continue
src.attack = 1
if(istype(C, /mob/living/silicon/) && src.atksilicon)
if(C:mind)
if(C:mind:special_role == "H.I.V.E")
continue
src.attack = 1
if(src.attack)
T = C
break
if(!src.attack)
for(var/obj/critter/C in view(src.seekrange,src))
if(istype(C, /obj/critter) && !src.atkcritter) continue
if(istype(C, /obj/mecha) && !src.atkmech) continue
if(C.health < 0) continue
if(istype(C, /obj/critter) && src.atkcritter)
if(istype(C, /obj/critter/hivebot) && !src.atksame) continue
src.attack = 1
if(istype(C, /obj/mecha) && src.atkmech) src.attack = 1
if(src.attack)
T = C
break
if(src.attack)
src.target = T
src.oldtarget_name = T:name
if(src.ranged)
OpenFire(T)
return
src.task = "chasing"
return
OpenFire(var/thing)
src.target = thing
src.oldtarget_name = thing:name
for(var/mob/O in viewers(src, null))
O.show_message("\red <b>[src]</b> fires at [src.target]!", 1)
var/tturf = get_turf(target)
if(rapid)
spawn(1)
Shoot(tturf, src.loc, src)
spawn(4)
Shoot(tturf, src.loc, src)
spawn(6)
Shoot(tturf, src.loc, src)
else
Shoot(tturf, src.loc, src)
src.attack = 0
sleep(12)
seek_target()
src.task = "thinking"
return
Shoot(var/target, var/start, var/user, var/bullet = 0)
if(target == start)
return
var/obj/item/projectile/hivebotbullet/A = new /obj/item/projectile/hivebotbullet(user:loc)
playsound(user, 'Gunshot.ogg', 100, 1)
if(!A) return
if (!istype(target, /turf))
del(A)
return
A.current = target
A.yo = target:y - start:y
A.xo = target:x - start:x
spawn( 0 )
A.process()
return
/obj/critter/hivebot/range
name = "Hivebot"
desc = "A smallish robot, this one is armed!"
ranged = 1
/obj/critter/hivebot/rapid
ranged = 1
rapid = 1
/obj/critter/hivebot/strong
name = "Strong Hivebot"
desc = "A robot, this one is armed and looks tough!"
health = 50
armor = 10
ranged = 1
/obj/critter/hivebot/borg
health = 20
atksilicon = 1
ranged = 1
rapid = 1
/obj/critter/hivebot/tele//this still needs work
name = "Beacon"
desc = "Some odd beacon thing"
icon = 'Hivebot.dmi'
icon_state = "def_radar-off"
health = 100
max_health = 100
aggressive = 0
wanderer = 0
opensdoors = 0
atkcarbon = 0
atksilicon = 0
atkcritter = 0
atksame = 0
atkmech = 0
firevuln = 0.5
brutevuln = 1
seekrange = 2
armor = 10
var
bot_type = "norm"
bot_amt = 10
spawn_delay = 600
turn_on = 0
auto_spawn = 1
proc
warpbots()
New()
..()
var/datum/effects/system/harmless_smoke_spread/smoke = new /datum/effects/system/harmless_smoke_spread()
smoke.set_up(5, 0, src.loc)
smoke.start()
for(var/mob/O in viewers(src, null))
O.show_message("\red <B>The [src] warps in!</B>", 1)
playsound(src.loc, 'EMPulse.ogg', 25, 1)
if(auto_spawn)
spawn(spawn_delay)
turn_on = 1
warpbots()
icon_state = "def_radar"
for(var/mob/O in viewers(src, null))
O.show_message("\red The [src] turns on!", 1)
while(bot_amt > 0)
bot_amt--
switch(bot_type)
if("norm")
new /obj/critter/hivebot(get_turf(src))
if("range")
new /obj/critter/hivebot/range(get_turf(src))
if("rapid")
new /obj/critter/hivebot/rapid(get_turf(src))
spawn(100)
del(src)
return
process()
if(health < (max_health/2))
turn_on = 1
if(turn_on)
warpbots()
turn_on = 0
..()
/obj/critter/hivebot/tele/massive
bot_type = "norm"
bot_amt = 30
auto_spawn = 0
/obj/critter/hivebot/tele/ranged
bot_type = "range"
/obj/critter/hivebot/tele/rapid
bot_type = "rapid"
spawn_delay = 800

View File

@@ -50,6 +50,7 @@ datum
build_type = null //Flag as to what kind machine the design is built in. See defines. build_type = null //Flag as to what kind machine the design is built in. See defines.
list/materials = list() //List of materials. Format: "id" = amount. list/materials = list() //List of materials. Format: "id" = amount.
build_path = "" //The file path of the object that gets created build_path = "" //The file path of the object that gets created
locked = 0 //If true it will spawn inside a lockbox with currently sec access
proc proc
//A proc to calculate the reliability of a design based on tech levels and innate modifiers. //A proc to calculate the reliability of a design based on tech levels and innate modifiers.
@@ -1000,6 +1001,7 @@ datum
materials = list("$metal" = 5000, "$glass" = 1000, "$uranium" = 500) materials = list("$metal" = 5000, "$glass" = 1000, "$uranium" = 500)
reliability_base = 76 reliability_base = 76
build_path = "/obj/item/weapon/gun/energy/nuclear" build_path = "/obj/item/weapon/gun/energy/nuclear"
locked = 1
stunrevolver stunrevolver
name = "Stun Revolver" name = "Stun Revolver"
@@ -1009,6 +1011,7 @@ datum
build_type = PROTOLATHE build_type = PROTOLATHE
materials = list("$metal" = 4000) materials = list("$metal" = 4000)
build_path = "/obj/item/weapon/gun/energy/stunrevolver" build_path = "/obj/item/weapon/gun/energy/stunrevolver"
locked = 1
lasercannon lasercannon
name = "Laser Cannon" name = "Laser Cannon"
@@ -1018,6 +1021,7 @@ datum
build_type = PROTOLATHE build_type = PROTOLATHE
materials = list("$metal" = 10000, "$glass" = 1000, "$diamond" = 2000) materials = list("$metal" = 10000, "$glass" = 1000, "$diamond" = 2000)
build_path = "/obj/item/weapon/gun/energy/lasercannon" build_path = "/obj/item/weapon/gun/energy/lasercannon"
locked = 1
shockgun shockgun
name = "Shock Gun" name = "Shock Gun"
@@ -1027,6 +1031,7 @@ datum
build_type = PROTOLATHE build_type = PROTOLATHE
materials = list("$metal" = 8000, "$silver" = 3000, "$gold" = 500) materials = list("$metal" = 8000, "$silver" = 3000, "$gold" = 500)
build_path = "/obj/item/weapon/gun/energy/shockgun" build_path = "/obj/item/weapon/gun/energy/shockgun"
locked = 1
decloner decloner
name = "Decloner" name = "Decloner"
@@ -1036,6 +1041,7 @@ datum
build_type = PROTOLATHE build_type = PROTOLATHE
materials = list("$gold" = 5000,"$uranium" = 10000, "mutagen" = 40) materials = list("$gold" = 5000,"$uranium" = 10000, "mutagen" = 40)
build_path = "/obj/item/weapon/gun/energy/decloner" build_path = "/obj/item/weapon/gun/energy/decloner"
locked = 1
chemsprayer chemsprayer
name = "Chem Sprayer" name = "Chem Sprayer"
@@ -1073,6 +1079,7 @@ datum
build_type = PROTOLATHE build_type = PROTOLATHE
materials = list("$metal" = 5000, "$glass" = 500, "$silver" = 3000) materials = list("$metal" = 5000, "$glass" = 500, "$silver" = 3000)
build_path = "/obj/item/weapon/gun/energy/freeze" build_path = "/obj/item/weapon/gun/energy/freeze"
locked = 1
large_grenade large_grenade
name = "Large Grenade" name = "Large Grenade"
@@ -1092,6 +1099,7 @@ datum
build_type = PROTOLATHE build_type = PROTOLATHE
materials = list("$metal" = 8000, "$silver" = 2000, "$diamond" = 1000) materials = list("$metal" = 8000, "$silver" = 2000, "$diamond" = 1000)
build_path = "/obj/item/weapon/gun/projectile/automatic" build_path = "/obj/item/weapon/gun/projectile/automatic"
locked = 1
ammo_9mm ammo_9mm
name = "Ammunition Box (9mm)" name = "Ammunition Box (9mm)"
@@ -1206,6 +1214,7 @@ datum
build_type = PROTOLATHE build_type = PROTOLATHE
materials = list("$metal" = 50, "$glass" = 50) materials = list("$metal" = 50, "$glass" = 50)
build_path = "/obj/item/clothing/glasses/hud/security" build_path = "/obj/item/clothing/glasses/hud/security"
locked = 1
///////////////////////////////////////// /////////////////////////////////////////
//////////////////Test/////////////////// //////////////////Test///////////////////

View File

@@ -370,7 +370,12 @@ won't update every console in existence) but it's more of a hassle to do. Also,
var/obj/new_item = new being_built.build_path(src) var/obj/new_item = new being_built.build_path(src)
new_item.reliability = being_built.reliability new_item.reliability = being_built.reliability
if(linked_lathe.hacked) being_built.reliability = max((reliability / 2), 0) if(linked_lathe.hacked) being_built.reliability = max((reliability / 2), 0)
new_item.loc = linked_lathe.loc if(being_built.locked)
var/obj/item/weapon/storage/lockbox/L = new/obj/item/weapon/storage/lockbox(linked_lathe.loc)
new_item.loc = L
L.name += " ([new_item.name])"
else
new_item.loc = linked_lathe.loc
linked_lathe.busy = 0 linked_lathe.busy = 0
screen = 3.1 screen = 3.1
updateUsrDialog() updateUsrDialog()

Binary file not shown.

Before

Width:  |  Height:  |  Size: 788 B

After

Width:  |  Height:  |  Size: 911 B

BIN
icons/mob/critter.dmi Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 167 KiB

After

Width:  |  Height:  |  Size: 170 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 30 KiB

File diff suppressed because it is too large Load Diff

View File

@@ -78,6 +78,8 @@
#define FILE_DIR "code/modules/admin/verbs" #define FILE_DIR "code/modules/admin/verbs"
#define FILE_DIR "code/modules/assembly" #define FILE_DIR "code/modules/assembly"
#define FILE_DIR "code/modules/chemical" #define FILE_DIR "code/modules/chemical"
#define FILE_DIR "code/modules/critters"
#define FILE_DIR "code/modules/critters/hivebots"
#define FILE_DIR "code/modules/food" #define FILE_DIR "code/modules/food"
#define FILE_DIR "code/modules/mining" #define FILE_DIR "code/modules/mining"
#define FILE_DIR "code/modules/mob" #define FILE_DIR "code/modules/mob"
@@ -493,7 +495,6 @@
#include "code\game\objects\items.dm" #include "code\game\objects\items.dm"
#include "code\game\objects\kitchen.dm" #include "code\game\objects\kitchen.dm"
#include "code\game\objects\lamarr.dm" #include "code\game\objects\lamarr.dm"
#include "code\game\objects\livestock.dm"
#include "code\game\objects\mineral_doors.dm" #include "code\game\objects\mineral_doors.dm"
#include "code\game\objects\new_year.dm" #include "code\game\objects\new_year.dm"
#include "code\game\objects\noticeboard.dm" #include "code\game\objects\noticeboard.dm"
@@ -617,6 +618,7 @@
#include "code\game\objects\storage\crates.dm" #include "code\game\objects\storage\crates.dm"
#include "code\game\objects\storage\firstaid.dm" #include "code\game\objects\storage\firstaid.dm"
#include "code\game\objects\storage\kit.dm" #include "code\game\objects\storage\kit.dm"
#include "code\game\objects\storage\lockbox.dm"
#include "code\game\objects\storage\storage.dm" #include "code\game\objects\storage\storage.dm"
#include "code\game\objects\storage\toolbox.dm" #include "code\game\objects\storage\toolbox.dm"
#include "code\game\verbs\AI_status.dm" #include "code\game\verbs\AI_status.dm"
@@ -667,6 +669,11 @@
#include "code\modules\chemical\Chemistry-Reagents.dm" #include "code\modules\chemical\Chemistry-Reagents.dm"
#include "code\modules\chemical\Chemistry-Recipes.dm" #include "code\modules\chemical\Chemistry-Recipes.dm"
#include "code\modules\chemical\Chemistry-Tools.dm" #include "code\modules\chemical\Chemistry-Tools.dm"
#include "code\modules\critters\adefine.dm"
#include "code\modules\critters\critterAI.dm"
#include "code\modules\critters\critters.dm"
#include "code\modules\critters\defenses.dm"
#include "code\modules\critters\hivebots\hivebot.dm"
#include "code\modules\food\food.dm" #include "code\modules\food\food.dm"
#include "code\modules\food\recipes_microwave.dm" #include "code\modules\food\recipes_microwave.dm"
#include "code\modules\mining\datum_processing_recipe.dm" #include "code\modules\mining\datum_processing_recipe.dm"
@@ -832,8 +839,6 @@
#include "code\WorkInProgress\recycling\disposal-construction.dm" #include "code\WorkInProgress\recycling\disposal-construction.dm"
#include "code\WorkInProgress\recycling\disposal.dm" #include "code\WorkInProgress\recycling\disposal.dm"
#include "code\WorkInProgress\recycling\sortingmachinery.dm" #include "code\WorkInProgress\recycling\sortingmachinery.dm"
#include "code\WorkInProgress\thehive\mhivebot.dm"
#include "code\WorkInProgress\thehive\transport.dm"
#include "code\WorkInProgress\virus2\Prob.dm" #include "code\WorkInProgress\virus2\Prob.dm"
#include "code\WorkInProgress\virus2\Disease2\analyser.dm" #include "code\WorkInProgress\virus2\Disease2\analyser.dm"
#include "code\WorkInProgress\virus2\Disease2\base.dm" #include "code\WorkInProgress\virus2\Disease2\base.dm"