Merge branch 'master' into patch-135

This commit is contained in:
Trilbyspaceclone
2019-05-25 16:12:37 -04:00
committed by GitHub
110 changed files with 2356 additions and 1404 deletions
+2
View File
@@ -79,6 +79,8 @@
#define ATTACK_EFFECT_SMASH "smash"
#define ATTACK_EFFECT_CLAW "claw"
#define ATTACK_EFFECT_DISARM "disarm"
#define ATTACK_EFFECT_ASS_SLAP "ass_slap"
#define ATTACK_EFFECT_FACE_SLAP "face_slap"
#define ATTACK_EFFECT_BITE "bite"
#define ATTACK_EFFECT_MECHFIRE "mech_fire"
#define ATTACK_EFFECT_MECHTOXIN "mech_toxin"
+109 -1
View File
@@ -6,6 +6,14 @@
#define FOOTSTEP_GRASS "grass"
#define FOOTSTEP_WATER "water"
#define FOOTSTEP_LAVA "lava"
//barefoot sounds
#define FOOTSTEP_WOOD_BAREFOOT "woodbarefoot"
#define FOOTSTEP_WOOD_CLAW "woodclaw"
#define FOOTSTEP_HARD_BAREFOOT "hardbarefoot"
#define FOOTSTEP_HARD_CLAW "hardclaw"
#define FOOTSTEP_CARPET_BAREFOOT "carpetbarefoot"
//misc footstep sounds
#define FOOTSTEP_GENERIC_HEAVY "heavy"
/*
@@ -63,4 +71,104 @@ GLOBAL_LIST_INIT(footstep, list(
'sound/effects/footstep/lava1.ogg',
'sound/effects/footstep/lava2.ogg',
'sound/effects/footstep/lava3.ogg'), 100, 0),
))
))
//bare footsteps lists
GLOBAL_LIST_INIT(barefootstep, list(
FOOTSTEP_WOOD_BAREFOOT = list(list(
'sound/effects/footstep/woodbarefoot1.ogg',
'sound/effects/footstep/woodbarefoot2.ogg',
'sound/effects/footstep/woodbarefoot3.ogg',
'sound/effects/footstep/woodbarefoot4.ogg',
'sound/effects/footstep/woodbarefoot5.ogg'), 80, -1),
FOOTSTEP_HARD_BAREFOOT = list(list(
'sound/effects/footstep/hardbarefoot1.ogg',
'sound/effects/footstep/hardbarefoot2.ogg',
'sound/effects/footstep/hardbarefoot3.ogg',
'sound/effects/footstep/hardbarefoot4.ogg',
'sound/effects/footstep/hardbarefoot5.ogg'), 80, -1),
FOOTSTEP_CARPET_BAREFOOT = list(list(
'sound/effects/footstep/carpetbarefoot1.ogg',
'sound/effects/footstep/carpetbarefoot2.ogg',
'sound/effects/footstep/carpetbarefoot3.ogg',
'sound/effects/footstep/carpetbarefoot4.ogg',
'sound/effects/footstep/carpetbarefoot5.ogg'), 75, -2),
FOOTSTEP_SAND = list(list(
'sound/effects/footstep/asteroid1.ogg',
'sound/effects/footstep/asteroid2.ogg',
'sound/effects/footstep/asteroid3.ogg',
'sound/effects/footstep/asteroid4.ogg',
'sound/effects/footstep/asteroid5.ogg'), 75, 0),
FOOTSTEP_GRASS = list(list(
'sound/effects/footstep/grass1.ogg',
'sound/effects/footstep/grass2.ogg',
'sound/effects/footstep/grass3.ogg',
'sound/effects/footstep/grass4.ogg'), 75, 0),
FOOTSTEP_WATER = list(list(
'sound/effects/footstep/water1.ogg',
'sound/effects/footstep/water2.ogg',
'sound/effects/footstep/water3.ogg',
'sound/effects/footstep/water4.ogg'), 100, 1),
FOOTSTEP_LAVA = list(list(
'sound/effects/footstep/lava1.ogg',
'sound/effects/footstep/lava2.ogg',
'sound/effects/footstep/lava3.ogg'), 100, 0),
))
//claw footsteps lists
GLOBAL_LIST_INIT(clawfootstep, list(
FOOTSTEP_WOOD_CLAW = list(list(
'sound/effects/footstep/woodclaw1.ogg',
'sound/effects/footstep/woodclaw2.ogg',
'sound/effects/footstep/woodclaw3.ogg',
'sound/effects/footstep/woodclaw2.ogg',
'sound/effects/footstep/woodclaw1.ogg'), 90, 1),
FOOTSTEP_HARD_CLAW = list(list(
'sound/effects/footstep/hardclaw1.ogg',
'sound/effects/footstep/hardclaw2.ogg',
'sound/effects/footstep/hardclaw3.ogg',
'sound/effects/footstep/hardclaw4.ogg',
'sound/effects/footstep/hardclaw1.ogg'), 90, 1),
FOOTSTEP_CARPET_BAREFOOT = list(list(
'sound/effects/footstep/carpetbarefoot1.ogg',
'sound/effects/footstep/carpetbarefoot2.ogg',
'sound/effects/footstep/carpetbarefoot3.ogg',
'sound/effects/footstep/carpetbarefoot4.ogg',
'sound/effects/footstep/carpetbarefoot5.ogg'), 75, -2),
FOOTSTEP_SAND = list(list(
'sound/effects/footstep/asteroid1.ogg',
'sound/effects/footstep/asteroid2.ogg',
'sound/effects/footstep/asteroid3.ogg',
'sound/effects/footstep/asteroid4.ogg',
'sound/effects/footstep/asteroid5.ogg'), 75, 0),
FOOTSTEP_GRASS = list(list(
'sound/effects/footstep/grass1.ogg',
'sound/effects/footstep/grass2.ogg',
'sound/effects/footstep/grass3.ogg',
'sound/effects/footstep/grass4.ogg'), 75, 0),
FOOTSTEP_WATER = list(list(
'sound/effects/footstep/water1.ogg',
'sound/effects/footstep/water2.ogg',
'sound/effects/footstep/water3.ogg',
'sound/effects/footstep/water4.ogg'), 100, 1),
FOOTSTEP_LAVA = list(list(
'sound/effects/footstep/lava1.ogg',
'sound/effects/footstep/lava2.ogg',
'sound/effects/footstep/lava3.ogg'), 100, 0),
))
//heavy footsteps list
GLOBAL_LIST_INIT(heavyfootstep, list(
FOOTSTEP_GENERIC_HEAVY = list(list(
'sound/effects/footstep/heavy1.ogg',
'sound/effects/footstep/heavy2.ogg'), 100, 2),
FOOTSTEP_WATER = list(list(
'sound/effects/footstep/water1.ogg',
'sound/effects/footstep/water2.ogg',
'sound/effects/footstep/water3.ogg',
'sound/effects/footstep/water4.ogg'), 100, 2),
FOOTSTEP_LAVA = list(list(
'sound/effects/footstep/lava1.ogg',
'sound/effects/footstep/lava2.ogg',
'sound/effects/footstep/lava3.ogg'), 100, 0),
))
+51 -1
View File
@@ -67,7 +67,7 @@
#define islarva(A) (istype(A, /mob/living/carbon/alien/larva))
#define isalienadult(A) (istype(A, /mob/living/carbon/alien/humanoid))
#define isalienadult(A) (istype(A, /mob/living/carbon/alien/humanoid) || istype(A, /mob/living/simple_animal/hostile/alien))
#define isalienhunter(A) (istype(A, /mob/living/carbon/alien/humanoid/hunter))
@@ -123,6 +123,47 @@
#define isclown(A) (istype(A, /mob/living/simple_animal/hostile/retaliate/clown))
GLOBAL_LIST_INIT(shoefootmob, typecacheof(list(
/mob/living/carbon/human/,
/mob/living/simple_animal/cow,
/mob/living/simple_animal/hostile/cat_butcherer,
/mob/living/simple_animal/hostile/faithless,
/mob/living/simple_animal/hostile/nanotrasen,
/mob/living/simple_animal/hostile/pirate,
/mob/living/simple_animal/hostile/russian,
/mob/living/simple_animal/hostile/syndicate,
/mob/living/simple_animal/hostile/wizard,
/mob/living/simple_animal/hostile/zombie,
/mob/living/simple_animal/hostile/retaliate/clown,
/mob/living/simple_animal/hostile/retaliate/spaceman,
/mob/living/simple_animal/hostile/retaliate/nanotrasenpeace,
/mob/living/simple_animal/hostile/retaliate/goat,
/mob/living/carbon/true_devil,
)))
GLOBAL_LIST_INIT(clawfootmob, typecacheof(list(
/mob/living/carbon/alien/humanoid,
/mob/living/simple_animal/hostile/alien,
/mob/living/simple_animal/pet/cat,
/mob/living/simple_animal/pet/dog,
/mob/living/simple_animal/pet/fox,
/mob/living/simple_animal/chicken,
/mob/living/simple_animal/hostile/bear,
/mob/living/simple_animal/hostile/jungle/mega_arachnid
)))
GLOBAL_LIST_INIT(barefootmob, typecacheof(list(
/mob/living/carbon/monkey,
/mob/living/simple_animal/pet/penguin,
/mob/living/simple_animal/hostile/gorilla,
/mob/living/simple_animal/hostile/jungle/mook
)))
GLOBAL_LIST_INIT(heavyfootmob, typecacheof(list(
/mob/living/simple_animal/hostile/megafauna,
/mob/living/simple_animal/hostile/jungle/leaper
)))
//Misc mobs
#define isobserver(A) (istype(A, /mob/dead/observer))
@@ -136,6 +177,15 @@
#define iseminence(A) (istype(A, /mob/camera/eminence))
//Footstep helpers
#define isshoefoot(A) (is_type_in_typecache(A, GLOB.shoefootmob))
#define isclawfoot(A) (is_type_in_typecache(A, GLOB.clawfootmob))
#define isbarefoot(A) (is_type_in_typecache(A, GLOB.barefootmob))
#define isheavyfoot(A) (is_type_in_typecache(A, GLOB.heavyfootmob))
//Objects
#define isobj(A) istype(A, /obj) //override the byond proc because it returns true on children of /atom/movable that aren't objs
+1
View File
@@ -35,6 +35,7 @@
#define CLEAN_BOT (1<<3) // Cleanbots
#define MED_BOT (1<<4) // Medibots
#define HONK_BOT (1<<5) // Honkbots & ED-Honks
#define FIRE_BOT (1<<6) // Firebots
//AI notification defines
#define NEW_BORG 1
+105 -39
View File
@@ -1,39 +1,105 @@
/datum/component/footstep
var/steps = 0
var/volume
var/e_range
/datum/component/footstep/Initialize(volume_ = 0.5, e_range_ = -1)
if(!isliving(parent))
return COMPONENT_INCOMPATIBLE
volume = volume_
e_range = e_range_
RegisterSignal(parent, list(COMSIG_MOVABLE_MOVED), .proc/play_footstep)
/datum/component/footstep/proc/play_footstep()
var/turf/open/T = get_turf(parent)
if(!istype(T))
return
var/mob/living/LM = parent
var/v = volume
var/e = e_range
if(!T.footstep || LM.lying || !LM.canmove || LM.resting || LM.buckled || LM.throwing || LM.movement_type & (VENTCRAWLING | FLYING))
return
if(iscarbon(LM))
var/mob/living/carbon/C = LM
if(!C.get_bodypart(BODY_ZONE_L_LEG) && !C.get_bodypart(BODY_ZONE_R_LEG))
return
if(ishuman(C) && C.m_intent == MOVE_INTENT_WALK)
v /= 2
e -= 5
steps++
if(steps >= 3)
steps = 0
else
return
if(prob(80) && !LM.has_gravity(T)) // don't need to step as often when you hop around
return
playsound(T, pick(GLOB.footstep[T.footstep][1]),
GLOB.footstep[T.footstep][2] * v,
TRUE,
GLOB.footstep[T.footstep][3] + e)
/datum/component/footstep
var/steps = 0
var/volume
var/e_range
/datum/component/footstep/Initialize(volume_ = 0.5, e_range_ = -1)
if(!isliving(parent))
return COMPONENT_INCOMPATIBLE
volume = volume_
e_range = e_range_
RegisterSignal(parent, list(COMSIG_MOVABLE_MOVED), .proc/play_footstep)
/datum/component/footstep/proc/play_footstep()
var/turf/open/T = get_turf(parent)
if(!istype(T))
return
var/mob/living/LM = parent
var/v = volume
var/e = e_range
if(!T.footstep || LM.buckled || LM.lying || !LM.canmove || LM.resting || LM.buckled || LM.throwing || LM.movement_type & (VENTCRAWLING | FLYING))
if (LM.lying && !(!T.footstep || LM.movement_type & (VENTCRAWLING | FLYING))) //play crawling sound if we're lying
playsound(T, 'sound/effects/footstep/crawl1.ogg', 15 * v)
return
if(iscarbon(LM))
var/mob/living/carbon/C = LM
if(!C.get_bodypart(BODY_ZONE_L_LEG) && !C.get_bodypart(BODY_ZONE_R_LEG))
return
if(ishuman(C) && C.m_intent == MOVE_INTENT_WALK)
v /= 2
e -= 5
steps++
if(steps >= 3)
steps = 0
else
return
if(prob(80) && !LM.has_gravity(T)) // don't need to step as often when you hop around
return
//begin playsound shenanigans//
//for barefooted non-clawed mobs like monkeys
if(isbarefoot(LM))
playsound(T, pick(GLOB.barefootstep[T.barefootstep][1]),
GLOB.barefootstep[T.barefootstep][2] * v,
TRUE,
GLOB.barefootstep[T.barefootstep][3] + e)
return
//for xenomorphs, dogs, and other clawed mobs
if(isclawfoot(LM))
if(isalienadult(LM)) //xenos are stealthy and get quieter footsteps
v /= 3
e -= 5
playsound(T, pick(GLOB.clawfootstep[T.clawfootstep][1]),
GLOB.clawfootstep[T.clawfootstep][2] * v,
TRUE,
GLOB.clawfootstep[T.clawfootstep][3] + e)
return
//for megafauna and other large and imtimidating mobs such as the bloodminer
if(isheavyfoot(LM))
playsound(T, pick(GLOB.heavyfootstep[T.heavyfootstep][1]),
GLOB.heavyfootstep[T.heavyfootstep][2] * v,
TRUE,
GLOB.heavyfootstep[T.heavyfootstep][3] + e)
return
//for slimes
if(isslime(LM))
playsound(T, 'sound/effects/footstep/slime1.ogg', 15 * v)
return
//for (simple) humanoid mobs (clowns, russians, pirates, etc.)
if(isshoefoot(LM))
if(!ishuman(LM))
playsound(T, pick(GLOB.footstep[T.footstep][1]),
GLOB.footstep[T.footstep][2] * v,
TRUE,
GLOB.footstep[T.footstep][3] + e)
return
if(ishuman(LM)) //for proper humans, they're special
var/mob/living/carbon/human/H = LM
var/feetCover = (H.wear_suit && (H.wear_suit.body_parts_covered & FEET)) || (H.w_uniform && (H.w_uniform.body_parts_covered & FEET))
if (H.dna.features["taur"] == "Naga" || H.dna.features["taur"] == "Tentacle") //are we a naga or tentacle taur creature
playsound(T, 'sound/effects/footstep/crawl1.ogg', 15 * v)
return
if(H.shoes || feetCover) //are we wearing shoes
playsound(T, pick(GLOB.footstep[T.footstep][1]),
GLOB.footstep[T.footstep][2] * v,
TRUE,
GLOB.footstep[T.footstep][3] + e)
if((!H.shoes && !feetCover)) //are we NOT wearing shoes
playsound(T, pick(GLOB.barefootstep[T.barefootstep][1]),
GLOB.barefootstep[T.barefootstep][2] * v,
TRUE,
GLOB.barefootstep[T.barefootstep][3] + e)
+7 -7
View File
@@ -713,12 +713,12 @@
req_defib = FALSE
///////////////////////////////////////////
/////////Dedibrillators Disks//////////////
/////////Defibrillator Disks//////////////
///////////////////////////////////////////
/obj/item/disk/medical
name = "Defibrillator Upgrade Disk"
desc = "A blank defibrillator disk..."
desc = "A blank upgrade disk, made for a defibrillator"
icon = 'modular_citadel/icons/obj/defib_disks.dmi'
icon_state = "upgrade_disk"
item_state = "heal_disk"
@@ -726,25 +726,25 @@
/obj/item/disk/medical/defib_heal
name = "Defibrillator Healing Disk"
desc = "A disk alowing for grater amounts of healing"
desc = "An upgrade which increases the healing power of the defibrillator"
icon_state = "heal_disk"
materials = list(MAT_METAL=16000, MAT_GLASS = 18000, MAT_GOLD = 6000, MAT_SILVER = 6000)
/obj/item/disk/medical/defib_shock
name = "Defibrillator Anti-Shock Disk"
desc = "A disk that helps agains shocking anyone, other then the intented target"
desc = "A safety upgrade that guarantees only the patient will get shocked"
icon_state = "zap_disk"
materials = list(MAT_METAL=16000, MAT_GLASS = 18000, MAT_GOLD = 6000, MAT_SILVER = 6000)
/obj/item/disk/medical/defib_decay
name = "Defibrillator Body-Decay Extender Disk"
desc = "A disk that helps defibrillators revive the longer decayed"
desc = "An upgrade allowing the defibrillator to work on more decayed bodies"
icon_state = "body_disk"
materials = list(MAT_METAL=16000, MAT_GLASS = 18000, MAT_GOLD = 16000, MAT_SILVER = 6000, MAT_TITANIUM = 2000)
/obj/item/disk/medical/defib_speed
name = "Defibrllator Pre-Primer Disk"
desc = "A disk that cuts the time charg time in half for defibrillator use"
name = "Defibrillator Fast Charge Disk"
desc = "An upgrade to the defibrillator capacitors, which let it charge faster"
icon_state = "fast_disk"
materials = list(MAT_METAL=16000, MAT_GLASS = 8000, MAT_GOLD = 26000, MAT_SILVER = 26000)
+6 -6
View File
@@ -31,7 +31,7 @@
var/remote_door_id = ""
var/bot_access_flags = 0 //Bit flags. Selection: SEC_BOT | MULE_BOT | FLOOR_BOT | CLEAN_BOT | MED_BOT
var/bot_access_flags = 0 //Bit flags. Selection: SEC_BOT | MULE_BOT | FLOOR_BOT | CLEAN_BOT | MED_BOT | FIRE_BOT
var/spam_enabled = 0 //Enables "Send to All" Option
var/obj/item/pda/host_pda = null
@@ -65,7 +65,7 @@
name = "\improper BreatheDeep cartridge"
icon_state = "cart-a"
access = CART_ATMOS | CART_DRONEPHONE
bot_access_flags = FLOOR_BOT
bot_access_flags = FLOOR_BOT | FIRE_BOT
/obj/item/cartridge/medical
name = "\improper Med-U cartridge"
@@ -112,7 +112,7 @@
/obj/item/cartridge/roboticist
name = "\improper B.O.O.P. Remote Control cartridge"
desc = "Packed with heavy duty triple-bot interlink!"
bot_access_flags = FLOOR_BOT | CLEAN_BOT | MED_BOT
bot_access_flags = FLOOR_BOT | CLEAN_BOT | MED_BOT | FIRE_BOT
access = CART_DRONEPHONE
/obj/item/cartridge/signal
@@ -160,7 +160,7 @@
name = "\improper Power-On DELUXE cartridge"
icon_state = "cart-ce"
access = CART_MANIFEST | CART_STATUS_DISPLAY | CART_ENGINE | CART_ATMOS | CART_DRONEPHONE
bot_access_flags = FLOOR_BOT
bot_access_flags = FLOOR_BOT | FIRE_BOT
/obj/item/cartridge/cmo
name = "\improper Med-U DELUXE cartridge"
@@ -172,7 +172,7 @@
name = "\improper Signal Ace DELUXE cartridge"
icon_state = "cart-rd"
access = CART_MANIFEST | CART_STATUS_DISPLAY | CART_REAGENT_SCANNER | CART_ATMOS | CART_DRONEPHONE
bot_access_flags = FLOOR_BOT | CLEAN_BOT | MED_BOT
bot_access_flags = FLOOR_BOT | CLEAN_BOT | MED_BOT | FIRE_BOT
/obj/item/cartridge/rd/Initialize()
. = ..()
@@ -183,7 +183,7 @@
desc = "Now with 350% more value!" //Give the Captain...EVERYTHING! (Except Mime, Clown, and Syndie)
icon_state = "cart-c"
access = ~(CART_CLOWN | CART_MIME | CART_REMOTE_DOOR)
bot_access_flags = SEC_BOT | MULE_BOT | FLOOR_BOT | CLEAN_BOT | MED_BOT
bot_access_flags = SEC_BOT | MULE_BOT | FLOOR_BOT | CLEAN_BOT | MED_BOT | FIRE_BOT
spam_enabled = 1
/obj/item/cartridge/captain/New()
+14 -1
View File
@@ -71,6 +71,10 @@
sprite_name = "foam_extinguisher"
precision = TRUE
/obj/item/extinguisher/proc/refill()
create_reagents(max_water, AMOUNT_VISIBLE)
reagents.add_reagent(chem, max_water)
/obj/item/extinguisher/suicide_act(mob/living/carbon/user)
if (!safety && (reagents.total_volume >= 1))
user.visible_message("<span class='suicide'>[user] puts the nozzle to [user.p_their()] mouth. It looks like [user.p_theyre()] trying to extinguish the spark of life!</span>")
@@ -183,7 +187,7 @@
W.reagents = R
R.my_atom = W
reagents.trans_to(W,1)
//Make em move dat ass, hun
addtimer(CALLBACK(src, /obj/item/extinguisher/proc/move_particles, water_particles), 2)
@@ -243,3 +247,12 @@
user.visible_message("[user] empties out \the [src] onto the floor using the release valve.", "<span class='info'>You quietly empty out \the [src] using its release valve.</span>")
//firebot assembly
/obj/item/extinguisher/attackby(obj/O, mob/user, params)
if(istype(O, /obj/item/bodypart/l_arm/robot) || istype(O, /obj/item/bodypart/r_arm/robot))
to_chat(user, "<span class='notice'>You add [O] to [src].</span>")
qdel(O)
qdel(src)
user.put_in_hands(new /obj/item/bot_assembly/firebot)
else
..()
+239 -238
View File
@@ -1,238 +1,239 @@
/obj/item/tank/jetpack
name = "jetpack (empty)"
desc = "A tank of compressed gas for use as propulsion in zero-gravity areas. Use with caution."
icon_state = "jetpack"
item_state = "jetpack"
lefthand_file = 'icons/mob/inhands/equipment/jetpacks_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/jetpacks_righthand.dmi'
w_class = WEIGHT_CLASS_BULKY
distribute_pressure = ONE_ATMOSPHERE * O2STANDARD
actions_types = list(/datum/action/item_action/set_internals, /datum/action/item_action/toggle_jetpack, /datum/action/item_action/jetpack_stabilization)
var/gas_type = /datum/gas/oxygen
var/on = FALSE
var/stabilizers = FALSE
var/full_speed = TRUE // If the jetpack will have a speedboost in space/nograv or not
var/datum/effect_system/trail_follow/ion/ion_trail
/obj/item/tank/jetpack/New()
..()
if(gas_type)
air_contents.assert_gas(gas_type)
air_contents.gases[gas_type][MOLES] = (6 * ONE_ATMOSPHERE) * volume / (R_IDEAL_GAS_EQUATION * T20C)
ion_trail = new
ion_trail.set_up(src)
/obj/item/tank/jetpack/ui_action_click(mob/user, action)
if(istype(action, /datum/action/item_action/toggle_jetpack))
cycle(user)
else if(istype(action, /datum/action/item_action/jetpack_stabilization))
if(on)
stabilizers = !stabilizers
to_chat(user, "<span class='notice'>You turn the jetpack stabilization [stabilizers ? "on" : "off"].</span>")
else
toggle_internals(user)
/obj/item/tank/jetpack/proc/cycle(mob/user)
if(user.incapacitated())
return
if(!on)
turn_on()
to_chat(user, "<span class='notice'>You turn the jetpack on.</span>")
else
turn_off()
to_chat(user, "<span class='notice'>You turn the jetpack off.</span>")
for(var/X in actions)
var/datum/action/A = X
A.UpdateButtonIcon()
/obj/item/tank/jetpack/proc/turn_on()
on = TRUE
icon_state = "[initial(icon_state)]-on"
ion_trail.start()
/obj/item/tank/jetpack/proc/turn_off()
on = FALSE
stabilizers = FALSE
icon_state = initial(icon_state)
ion_trail.stop()
/obj/item/tank/jetpack/proc/allow_thrust(num, mob/living/user)
if(!on)
return
if((num < 0.005 || air_contents.total_moles() < num))
turn_off()
return
var/datum/gas_mixture/removed = air_contents.remove(num)
if(removed.total_moles() < 0.005)
turn_off()
return
var/turf/T = get_turf(user)
T.assume_air(removed)
return 1
/obj/item/tank/jetpack/suicide_act(mob/user)
if (istype(user, /mob/living/carbon/human/))
var/mob/living/carbon/human/H = user
H.forcesay("WHAT THE FUCK IS CARBON DIOXIDE?")
H.visible_message("<span class='suicide'>[user] is suffocating [user.p_them()]self with [src]! It looks like [user.p_they()] didn't read what that jetpack says!</span>")
return (OXYLOSS)
else
..()
/obj/item/tank/jetpack/improvised
name = "improvised jetpack"
desc = "A jetpack made from two air tanks, a fire extinguisher and some atmospherics equipment. It doesn't look like it can hold much."
icon_state = "jetpack-improvised"
item_state = "jetpack-sec"
volume = 20 //normal jetpacks have 70 volume
gas_type = null //it starts empty
full_speed = FALSE //moves at hardsuit jetpack speeds
/obj/item/tank/jetpack/improvised/allow_thrust(num, mob/living/user)
if(!on)
return
if((num < 0.005 || air_contents.total_moles() < num))
turn_off()
return
if(rand(0,250) == 0)
to_chat(user, "<span class='notice'>You feel your jetpack's engines cut out.</span>")
turn_off()
return
var/datum/gas_mixture/removed = air_contents.remove(num)
if(removed.total_moles() < 0.005)
turn_off()
return
var/turf/T = get_turf(user)
T.assume_air(removed)
return 1
/obj/item/tank/jetpack/void
name = "void jetpack (oxygen)"
desc = "It works well in a void."
icon_state = "jetpack-void"
item_state = "jetpack-void"
full_speed = FALSE //Pre-hardsuit tech
/obj/item/tank/jetpack/oxygen
name = "jetpack (oxygen)"
desc = "A tank of compressed oxygen for use as propulsion in zero-gravity areas. Use with caution."
icon_state = "jetpack"
item_state = "jetpack"
/obj/item/tank/jetpack/oxygen/harness
name = "jet harness (oxygen)"
desc = "A lightweight tactical harness, used by those who don't want to be weighed down by traditional jetpacks."
icon_state = "jetpack-mini"
item_state = "jetpack-mini"
volume = 40
throw_range = 7
w_class = WEIGHT_CLASS_NORMAL
/obj/item/tank/jetpack/oxygen/captain
name = "\improper Captain's jetpack"
desc = "A compact, lightweight jetpack containing a high amount of compressed oxygen."
icon_state = "jetpack-captain"
item_state = "jetpack-captain"
w_class = WEIGHT_CLASS_NORMAL
volume = 90
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF //steal objective items are hard to destroy.
/obj/item/tank/jetpack/oxygen/security
name = "security jetpack (oxygen)"
desc = "A tank of compressed oxygen for use as propulsion in zero-gravity areas by security forces."
icon_state = "jetpack-sec"
item_state = "jetpack-sec"
full_speed = FALSE
/obj/item/tank/jetpack/carbondioxide
name = "jetpack (carbon dioxide)"
desc = "A tank of compressed carbon dioxide for use as propulsion in zero-gravity areas. Painted black to indicate that it should not be used as a source for internals."
icon_state = "jetpack-black"
item_state = "jetpack-black"
distribute_pressure = 0
gas_type = /datum/gas/carbon_dioxide
/obj/item/tank/jetpack/suit
name = "hardsuit jetpack upgrade"
desc = "A modular, compact set of thrusters designed to integrate with a hardsuit. It is fueled by a tank inserted into the suit's storage compartment."
icon_state = "jetpack-mining"
item_state = "jetpack-black"
w_class = WEIGHT_CLASS_NORMAL
actions_types = list(/datum/action/item_action/toggle_jetpack, /datum/action/item_action/jetpack_stabilization)
volume = 1
slot_flags = null
gas_type = null
full_speed = FALSE
var/datum/gas_mixture/temp_air_contents
var/obj/item/tank/internals/tank = null
/obj/item/tank/jetpack/suit/New()
..()
STOP_PROCESSING(SSobj, src)
temp_air_contents = air_contents
/obj/item/tank/jetpack/suit/attack_self()
return
/obj/item/tank/jetpack/suit/cycle(mob/user)
if(!istype(loc, /obj/item/clothing/suit/space/hardsuit))
to_chat(user, "<span class='warning'>\The [src] must be connected to a hardsuit!</span>")
return
var/mob/living/carbon/human/H = user
if(!istype(H.s_store, /obj/item/tank/internals))
to_chat(user, "<span class='warning'>You need a tank in your suit storage!</span>")
return
..()
/obj/item/tank/jetpack/suit/turn_on()
if(!istype(loc, /obj/item/clothing/suit/space/hardsuit) || !ishuman(loc.loc))
return
var/mob/living/carbon/human/H = loc.loc
tank = H.s_store
air_contents = tank.air_contents
START_PROCESSING(SSobj, src)
..()
/obj/item/tank/jetpack/suit/turn_off()
tank = null
air_contents = temp_air_contents
STOP_PROCESSING(SSobj, src)
..()
/obj/item/tank/jetpack/suit/process()
if(!istype(loc, /obj/item/clothing/suit/space/hardsuit) || !ishuman(loc.loc))
turn_off()
return
var/mob/living/carbon/human/H = loc.loc
if(!tank || tank != H.s_store)
turn_off()
return
..()
//Return a jetpack that the mob can use
//Back worn jetpacks, hardsuit internal packs, and so on.
//Used in Process_Spacemove() and wherever you want to check for/get a jetpack
/mob/proc/get_jetpack()
return
/mob/living/carbon/get_jetpack()
var/obj/item/tank/jetpack/J = back
if(istype(J))
return J
/mob/living/carbon/human/get_jetpack()
var/obj/item/tank/jetpack/J = ..()
if(!istype(J) && istype(wear_suit, /obj/item/clothing/suit/space/hardsuit))
var/obj/item/clothing/suit/space/hardsuit/C = wear_suit
J = C.jetpack
return J
/obj/item/tank/jetpack
name = "jetpack (empty)"
desc = "A tank of compressed gas for use as propulsion in zero-gravity areas. Use with caution."
icon_state = "jetpack"
item_state = "jetpack"
lefthand_file = 'icons/mob/inhands/equipment/jetpacks_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/jetpacks_righthand.dmi'
w_class = WEIGHT_CLASS_BULKY
distribute_pressure = ONE_ATMOSPHERE * O2STANDARD
actions_types = list(/datum/action/item_action/set_internals, /datum/action/item_action/toggle_jetpack, /datum/action/item_action/jetpack_stabilization)
var/gas_type = /datum/gas/oxygen
var/on = FALSE
var/stabilizers = FALSE
var/full_speed = TRUE // If the jetpack will have a speedboost in space/nograv or not
var/datum/effect_system/trail_follow/ion/ion_trail
/obj/item/tank/jetpack/New()
..()
if(gas_type)
air_contents.assert_gas(gas_type)
air_contents.gases[gas_type][MOLES] = (6 * ONE_ATMOSPHERE) * volume / (R_IDEAL_GAS_EQUATION * T20C)
ion_trail = new
ion_trail.set_up(src)
/obj/item/tank/jetpack/ui_action_click(mob/user, action)
if(istype(action, /datum/action/item_action/toggle_jetpack))
cycle(user)
else if(istype(action, /datum/action/item_action/jetpack_stabilization))
if(on)
stabilizers = !stabilizers
to_chat(user, "<span class='notice'>You turn the jetpack stabilization [stabilizers ? "on" : "off"].</span>")
else
toggle_internals(user)
/obj/item/tank/jetpack/proc/cycle(mob/user)
if(user.incapacitated())
return
if(!on)
turn_on()
to_chat(user, "<span class='notice'>You turn the jetpack on.</span>")
else
turn_off()
to_chat(user, "<span class='notice'>You turn the jetpack off.</span>")
for(var/X in actions)
var/datum/action/A = X
A.UpdateButtonIcon()
/obj/item/tank/jetpack/proc/turn_on()
on = TRUE
icon_state = "[initial(icon_state)]-on"
ion_trail.start()
/obj/item/tank/jetpack/proc/turn_off()
on = FALSE
stabilizers = FALSE
icon_state = initial(icon_state)
ion_trail.stop()
/obj/item/tank/jetpack/proc/allow_thrust(num, mob/living/user)
if(!on)
return
if((num < 0.005 || air_contents.total_moles() < num))
turn_off()
return
var/datum/gas_mixture/removed = air_contents.remove(num)
if(removed.total_moles() < 0.005)
turn_off()
return
var/turf/T = get_turf(user)
T.assume_air(removed)
return 1
/obj/item/tank/jetpack/suicide_act(mob/user)
if (istype(user, /mob/living/carbon/human/))
var/mob/living/carbon/human/H = user
H.forcesay("WHAT THE FUCK IS CARBON DIOXIDE?")
H.visible_message("<span class='suicide'>[user] is suffocating [user.p_them()]self with [src]! It looks like [user.p_they()] didn't read what that jetpack says!</span>")
return (OXYLOSS)
else
..()
/obj/item/tank/jetpack/improvised
name = "improvised jetpack"
desc = "A jetpack made from two air tanks, a fire extinguisher and some atmospherics equipment. It doesn't look like it can hold much."
icon_state = "jetpack-improvised"
item_state = "jetpack-sec"
volume = 30 //normal jetpacks have 70 volume
gas_type = null //it starts empty
full_speed = FALSE //moves at hardsuit jetpack speeds
/obj/item/tank/jetpack/improvised/allow_thrust(num, mob/living/user)
if(!on)
return
if((num < 0.005 || air_contents.total_moles() < num))
turn_off()
return
if(rand(0,250) == 0)
to_chat(user, "<span class='notice'>You feel your jetpack's engines cut out.</span>")
turn_off()
return
var/datum/gas_mixture/removed = air_contents.remove(num)
if(removed.total_moles() < 0.005)
turn_off()
return
var/turf/T = get_turf(user)
T.assume_air(removed)
return 1
/obj/item/tank/jetpack/void
name = "void jetpack (oxygen)"
desc = "It works well in a void."
volume = 60
icon_state = "jetpack-void"
item_state = "jetpack-void"
full_speed = FALSE //Old pre-hardsuit tech
/obj/item/tank/jetpack/oxygen
name = "jetpack (oxygen)"
desc = "A tank of compressed oxygen for use as propulsion in zero-gravity areas. Use with caution."
icon_state = "jetpack"
item_state = "jetpack"
/obj/item/tank/jetpack/oxygen/harness
name = "jet harness (oxygen)"
desc = "A lightweight tactical harness, used by those who don't want to be weighed down by traditional jetpacks."
icon_state = "jetpack-mini"
item_state = "jetpack-mini"
volume = 50
throw_range = 7
w_class = WEIGHT_CLASS_NORMAL
/obj/item/tank/jetpack/oxygen/captain
name = "\improper Captain's jetpack"
desc = "A compact, lightweight jetpack containing a high amount of compressed oxygen."
icon_state = "jetpack-captain"
item_state = "jetpack-captain"
w_class = WEIGHT_CLASS_NORMAL
volume = 90
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF //steal objective items are hard to destroy.
/obj/item/tank/jetpack/oxygen/security
name = "security jetpack (oxygen)"
desc = "A tank of compressed oxygen for use as propulsion in zero-gravity areas by security forces."
icon_state = "jetpack-sec"
item_state = "jetpack-sec"
full_speed = FALSE
/obj/item/tank/jetpack/carbondioxide
name = "jetpack (carbon dioxide)"
desc = "A tank of compressed carbon dioxide for use as propulsion in zero-gravity areas. Painted black to indicate that it should not be used as a source for internals."
icon_state = "jetpack-black"
item_state = "jetpack-black"
distribute_pressure = 0
gas_type = /datum/gas/carbon_dioxide
/obj/item/tank/jetpack/suit
name = "hardsuit jetpack upgrade"
desc = "A modular, compact set of thrusters designed to integrate with a hardsuit. It is fueled by a tank inserted into the suit's storage compartment."
icon_state = "jetpack-mining"
item_state = "jetpack-black"
w_class = WEIGHT_CLASS_NORMAL
actions_types = list(/datum/action/item_action/toggle_jetpack, /datum/action/item_action/jetpack_stabilization)
volume = 1
slot_flags = null
gas_type = null
full_speed = FALSE
var/datum/gas_mixture/temp_air_contents
var/obj/item/tank/internals/tank = null
/obj/item/tank/jetpack/suit/New()
..()
STOP_PROCESSING(SSobj, src)
temp_air_contents = air_contents
/obj/item/tank/jetpack/suit/attack_self()
return
/obj/item/tank/jetpack/suit/cycle(mob/user)
if(!istype(loc, /obj/item/clothing/suit/space/hardsuit))
to_chat(user, "<span class='warning'>\The [src] must be connected to a hardsuit!</span>")
return
var/mob/living/carbon/human/H = user
if(!istype(H.s_store, /obj/item/tank/internals))
to_chat(user, "<span class='warning'>You need a tank in your suit storage!</span>")
return
..()
/obj/item/tank/jetpack/suit/turn_on()
if(!istype(loc, /obj/item/clothing/suit/space/hardsuit) || !ishuman(loc.loc))
return
var/mob/living/carbon/human/H = loc.loc
tank = H.s_store
air_contents = tank.air_contents
START_PROCESSING(SSobj, src)
..()
/obj/item/tank/jetpack/suit/turn_off()
tank = null
air_contents = temp_air_contents
STOP_PROCESSING(SSobj, src)
..()
/obj/item/tank/jetpack/suit/process()
if(!istype(loc, /obj/item/clothing/suit/space/hardsuit) || !ishuman(loc.loc))
turn_off()
return
var/mob/living/carbon/human/H = loc.loc
if(!tank || tank != H.s_store)
turn_off()
return
..()
//Return a jetpack that the mob can use
//Back worn jetpacks, hardsuit internal packs, and so on.
//Used in Process_Spacemove() and wherever you want to check for/get a jetpack
/mob/proc/get_jetpack()
return
/mob/living/carbon/get_jetpack()
var/obj/item/tank/jetpack/J = back
if(istype(J))
return J
/mob/living/carbon/human/get_jetpack()
var/obj/item/tank/jetpack/J = ..()
if(!istype(J) && istype(wear_suit, /obj/item/clothing/suit/space/hardsuit))
var/obj/item/clothing/suit/space/hardsuit/C = wear_suit
J = C.jetpack
return J
+25
View File
@@ -7,6 +7,9 @@
var/wet
var/footstep = null
var/barefootstep = null
var/clawfootstep = null
var/heavyfootstep = null
/turf/open/ComponentInitialize()
. = ..()
@@ -27,6 +30,9 @@
icon = 'icons/turf/floors.dmi'
icon_state = "floor"
footstep = FOOTSTEP_FLOOR
barefootstep = FOOTSTEP_HARD_BAREFOOT
clawfootstep = FOOTSTEP_HARD_CLAW
heavyfootstep = FOOTSTEP_GENERIC_HEAVY
tiled_dirt = TRUE
/turf/open/indestructible/Melt()
@@ -42,6 +48,9 @@
/turf/open/indestructible/sound
name = "squeaky floor"
footstep = null
barefootstep = null
clawfootstep = null
heavyfootstep = null
var/sound
/turf/open/indestructible/sound/Entered(var/mob/AM)
@@ -61,6 +70,10 @@
icon = 'icons/turf/floors.dmi'
icon_state = "cobble"
baseturfs = /turf/open/indestructible/cobble
footstep = FOOTSTEP_FLOOR
barefootstep = FOOTSTEP_HARD_BAREFOOT
clawfootstep = FOOTSTEP_HARD_CLAW
heavyfootstep = FOOTSTEP_GENERIC_HEAVY
tiled_dirt = FALSE
/turf/open/indestructible/necropolis
@@ -71,6 +84,9 @@
baseturfs = /turf/open/indestructible/necropolis
initial_gas_mix = LAVALAND_DEFAULT_ATMOS
footstep = FOOTSTEP_LAVA
barefootstep = FOOTSTEP_LAVA
clawfootstep = FOOTSTEP_LAVA
heavyfootstep = FOOTSTEP_LAVA
tiled_dirt = FALSE
/turf/open/indestructible/necropolis/Initialize()
@@ -108,6 +124,9 @@
desc = "A floor made of invulnerable notebook paper."
icon_state = "paperfloor"
footstep = null
barefootstep = null
clawfootstep = null
heavyfootstep = null
tiled_dirt = FALSE
/turf/open/indestructible/binary
@@ -116,6 +135,9 @@
baseturfs = /turf/open/indestructible/binary
icon_state = "binary"
footstep = null
barefootstep = null
clawfootstep = null
heavyfootstep = null
/turf/open/indestructible/airblock
icon_state = "bluespace"
@@ -128,6 +150,9 @@
icon_state = "reebe"
baseturfs = /turf/open/indestructible/clock_spawn_room
footstep = FOOTSTEP_PLATING
barefootstep = FOOTSTEP_HARD_BAREFOOT
clawfootstep = FOOTSTEP_HARD_CLAW
heavyfootstep = FOOTSTEP_GENERIC_HEAVY
/turf/open/indestructible/clock_spawn_room/Entered()
..()
+3
View File
@@ -7,6 +7,9 @@
baseturfs = /turf/open/floor/plating
footstep = FOOTSTEP_FLOOR
barefootstep = FOOTSTEP_HARD_BAREFOOT
clawfootstep = FOOTSTEP_HARD_CLAW
heavyfootstep = FOOTSTEP_GENERIC_HEAVY
var/icon_regular_floor = "floor" //used to remember what icon the tile should have by default
var/icon_plating = "plating"
@@ -13,6 +13,9 @@
floor_tile = /obj/item/stack/tile/wood
broken_states = list("wood-broken", "wood-broken2", "wood-broken3", "wood-broken4", "wood-broken5", "wood-broken6", "wood-broken7")
footstep = FOOTSTEP_WOOD
barefootstep = FOOTSTEP_WOOD_BAREFOOT
clawfootstep = FOOTSTEP_WOOD_CLAW
heavyfootstep = FOOTSTEP_GENERIC_HEAVY
tiled_dirt = FALSE
/turf/open/floor/wood/examine(mob/user)
@@ -73,6 +76,9 @@
flags_1 = NONE
bullet_bounce_sound = null
footstep = FOOTSTEP_GRASS
barefootstep = FOOTSTEP_GRASS
clawfootstep = FOOTSTEP_GRASS
heavyfootstep = FOOTSTEP_GENERIC_HEAVY
var/ore_type = /obj/item/stack/ore/glass
var/turfverb = "uproot"
tiled_dirt = FALSE
@@ -103,6 +109,9 @@
slowdown = 2
bullet_sizzle = TRUE
footstep = FOOTSTEP_SAND
barefootstep = FOOTSTEP_SAND
clawfootstep = FOOTSTEP_SAND
heavyfootstep = FOOTSTEP_GENERIC_HEAVY
/turf/open/floor/grass/snow/try_replace_tile(obj/item/stack/tile/T, mob/user, params)
return
@@ -136,6 +145,9 @@
turfverb = "dig up"
slowdown = 0
footstep = FOOTSTEP_SAND
barefootstep = FOOTSTEP_SAND
clawfootstep = FOOTSTEP_SAND
heavyfootstep = FOOTSTEP_GENERIC_HEAVY
/turf/open/floor/grass/fakebasalt/Initialize()
. = ..()
@@ -156,6 +168,9 @@
flags_1 = NONE
bullet_bounce_sound = null
footstep = FOOTSTEP_CARPET
barefootstep = FOOTSTEP_CARPET_BAREFOOT
clawfootstep = FOOTSTEP_CARPET_BAREFOOT
heavyfootstep = FOOTSTEP_GENERIC_HEAVY
tiled_dirt = FALSE
/turf/open/floor/carpet/examine(mob/user)
@@ -141,6 +141,9 @@
icon_state = "plating"
baseturfs = /turf/open/floor/clockwork
footstep = FOOTSTEP_PLATING
barefootstep = FOOTSTEP_HARD_BAREFOOT
clawfootstep = FOOTSTEP_HARD_CLAW
heavyfootstep = FOOTSTEP_GENERIC_HEAVY
var/uses_overlay = TRUE
var/obj/effect/clockwork/overlay/floor/realappearence
@@ -13,6 +13,9 @@
intact = FALSE
baseturfs = /turf/open/space
footstep = FOOTSTEP_PLATING
barefootstep = FOOTSTEP_HARD_BAREFOOT
clawfootstep = FOOTSTEP_HARD_CLAW
heavyfootstep = FOOTSTEP_GENERIC_HEAVY
var/attachment_holes = TRUE
@@ -10,6 +10,9 @@
icon_plating = "asteroid"
postdig_icon_change = TRUE
footstep = FOOTSTEP_SAND
barefootstep = FOOTSTEP_SAND
clawfootstep = FOOTSTEP_SAND
heavyfootstep = FOOTSTEP_GENERIC_HEAVY
var/environment_type = "asteroid"
var/turf_type = /turf/open/floor/plating/asteroid //Because caves do whacky shit to revert to normal
var/floor_variance = 20 //probability floor has a different icon state
@@ -333,6 +336,9 @@
icon_plating = "snow-ice"
environment_type = "snow_cavern"
footstep = FOOTSTEP_FLOOR
barefootstep = FOOTSTEP_HARD_BAREFOOT
clawfootstep = FOOTSTEP_HARD_CLAW
heavyfootstep = FOOTSTEP_GENERIC_HEAVY
/turf/open/floor/plating/asteroid/snow/ice/burn_tile()
return FALSE
@@ -9,6 +9,9 @@
planetary_atmos = TRUE
attachment_holes = FALSE
footstep = FOOTSTEP_SAND
barefootstep = FOOTSTEP_SAND
clawfootstep = FOOTSTEP_SAND
heavyfootstep = FOOTSTEP_GENERIC_HEAVY
tiled_dirt = FALSE
/turf/open/floor/plating/dirt/dark
@@ -47,6 +47,9 @@
planetary_atmos = TRUE
attachment_holes = FALSE
footstep = FOOTSTEP_SAND
barefootstep = FOOTSTEP_SAND
clawfootstep = FOOTSTEP_SAND
heavyfootstep = FOOTSTEP_GENERIC_HEAVY
tiled_dirt = FALSE
/turf/open/floor/plating/ashplanet/Initialize()
@@ -79,6 +82,9 @@
layer = MID_TURF_LAYER
canSmoothWith = list(/turf/open/floor/plating/ashplanet/rocky, /turf/closed)
footstep = FOOTSTEP_FLOOR
barefootstep = FOOTSTEP_HARD_BAREFOOT
clawfootstep = FOOTSTEP_HARD_CLAW
heavyfootstep = FOOTSTEP_GENERIC_HEAVY
/turf/open/floor/plating/ashplanet/wateryrock
gender = PLURAL
@@ -87,6 +93,9 @@
icon_state = "wateryrock"
slowdown = 2
footstep = FOOTSTEP_FLOOR
barefootstep = FOOTSTEP_HARD_BAREFOOT
clawfootstep = FOOTSTEP_HARD_CLAW
heavyfootstep = FOOTSTEP_GENERIC_HEAVY
/turf/open/floor/plating/ashplanet/wateryrock/Initialize()
icon_state = "[icon_state][rand(1, 9)]"
@@ -100,6 +109,9 @@
attachment_holes = FALSE
bullet_bounce_sound = null
footstep = FOOTSTEP_SAND
barefootstep = FOOTSTEP_SAND
clawfootstep = FOOTSTEP_SAND
heavyfootstep = FOOTSTEP_GENERIC_HEAVY
/turf/open/floor/plating/beach/try_replace_tile(obj/item/stack/tile/T, mob/user, params)
return
@@ -141,6 +153,9 @@
name = "iron sand"
desc = "Like sand, but more <i>metal</i>."
footstep = FOOTSTEP_SAND
barefootstep = FOOTSTEP_SAND
clawfootstep = FOOTSTEP_SAND
heavyfootstep = FOOTSTEP_GENERIC_HEAVY
/turf/open/floor/plating/ironsand/Initialize()
. = ..()
@@ -165,6 +180,9 @@
attachment_holes = FALSE
bullet_sizzle = TRUE
footstep = FOOTSTEP_FLOOR
barefootstep = FOOTSTEP_HARD_BAREFOOT
clawfootstep = FOOTSTEP_HARD_CLAW
heavyfootstep = FOOTSTEP_GENERIC_HEAVY
/turf/open/floor/plating/ice/Initialize()
. = ..()
@@ -202,6 +220,9 @@
attachment_holes = FALSE
planetary_atmos = TRUE
footstep = FOOTSTEP_SAND
barefootstep = FOOTSTEP_SAND
clawfootstep = FOOTSTEP_SAND
heavyfootstep = FOOTSTEP_GENERIC_HEAVY
/turf/open/floor/plating/snowed/cavern
initial_gas_mix = "o2=0;n2=82;plasma=24;TEMP=120"
@@ -7,6 +7,9 @@
heat_capacity = INFINITY
floor_tile = /obj/item/stack/rods
footstep = FOOTSTEP_PLATING
barefootstep = FOOTSTEP_HARD_BAREFOOT
clawfootstep = FOOTSTEP_HARD_CLAW
heavyfootstep = FOOTSTEP_GENERIC_HEAVY
tiled_dirt = FALSE
/turf/open/floor/engine/examine(mob/user)
+3
View File
@@ -13,6 +13,9 @@
bullet_bounce_sound = 'sound/items/welder2.ogg'
footstep = FOOTSTEP_LAVA
barefootstep = FOOTSTEP_LAVA
clawfootstep = FOOTSTEP_LAVA
heavyfootstep = FOOTSTEP_LAVA
/turf/open/lava/ex_act(severity, target)
contents_explosion(severity, target)
+3
View File
@@ -12,3 +12,6 @@
bullet_bounce_sound = null //needs a splashing sound one day.
footstep = FOOTSTEP_WATER
barefootstep = FOOTSTEP_WATER
clawfootstep = FOOTSTEP_WATER
heavyfootstep = FOOTSTEP_WATER
@@ -9,6 +9,7 @@
point_return = 4
atmosblock = TRUE
armor = list("melee" = 25, "bullet" = 25, "laser" = 15, "energy" = 10, "bomb" = 20, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90)
var/weakened
/obj/structure/blob/shield/scannerreport()
if(atmosblock)
@@ -25,10 +26,15 @@
name = "weakened strong blob"
desc = "A wall of twitching tendrils."
atmosblock = FALSE
armor = list("melee" = 15, "bullet" = 15, "laser" = 5, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90)
if(!weakened)
armor = armor.setRating("melee" = 15, "bullet" = 15, "laser" = 5, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90)
weakened = TRUE
else
icon_state = initial(icon_state)
name = initial(name)
desc = initial(desc)
atmosblock = TRUE
air_update_turf(1)
if(weakened)
armor = armor.setRating("melee" = 25, "bullet" = 25, "laser" = 15, "energy" = 10, "bomb" = 20, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90)
weakened = FALSE
air_update_turf(1)
+11 -1
View File
@@ -189,6 +189,16 @@
time = 40
category = CAT_ROBOT
/datum/crafting_recipe/Firebot
name = "Firebot"
result = /mob/living/simple_animal/bot/firebot
reqs = list(/obj/item/extinguisher = 1,
/obj/item/bodypart/r_arm/robot = 1,
/obj/item/assembly/prox_sensor = 1,
/obj/item/clothing/head/hardhat/red = 1)
time = 40
category = CAT_ROBOT
/datum/crafting_recipe/improvised_pneumatic_cannon //Pretty easy to obtain but
name = "Pneumatic Cannon"
result = /obj/item/pneumatic_cannon/ghetto
@@ -731,7 +741,7 @@
/datum/crafting_recipe/goldenbox
name = "Gold Plated Toolbox"
result = /obj/item/storage/toolbox/gold_fake
result = /obj/item/storage/toolbox/gold_fake
reqs = list(/obj/item/stack/sheet/cardboard = 1, //so we dont null items in crafting
/obj/item/stack/cable_coil = 10,
/obj/item/stack/sheet/mineral/gold = 1,
+2 -6
View File
@@ -48,8 +48,6 @@
if(!shuttle_spawned)
spawn_shuttle()
/datum/round_event/pirates/start()
if(!paid_off && !shuttle_spawned)
spawn_shuttle()
@@ -150,7 +148,6 @@
to_chat(user,"<span class='notice'>You retrieve the siphoned credits!</span>")
credits_stored = 0
/obj/machinery/shuttle_scrambler/proc/send_notification()
priority_announce("Data theft signal detected, source registered on local gps units.")
@@ -222,8 +219,7 @@
suit_type = /obj/item/clothing/suit/space
helmet_type = /obj/item/clothing/head/helmet/space
mask_type = /obj/item/clothing/mask/breath
storage_type = /obj/item/tank/internals/oxygen
storage_type = /obj/item/tank/jetpack/void
/obj/machinery/loot_locator
name = "Booty Locator"
@@ -454,4 +450,4 @@
/datum/export/pirate/cash/get_amount(obj/O)
var/obj/item/stack/spacecash/C = O
return ..() * C.amount * C.value
return ..() * C.amount * C.value
@@ -316,7 +316,9 @@ h1.alert, h2.alert {color: #000000;}
.unconscious {color: #0000ff; font-weight: bold;}
.suicide {color: #ff5050; font-style: italic;}
.green {color: #03ff39;}
.nicegreen {color: #14a833;}
.nicegreen {color: #14a833;}
.userlove {color: #FF1493; font-style: italic; font-weight: bold; text-shadow: 0 0 6px #ff6dbc;}
.love {color: #ff006a; font-style: italic; text-shadow: 0 0 6px #ff6d6d;}
.shadowling {color: #3b2769;}
.cult {color: #960000;}
@@ -142,13 +142,14 @@
/obj/item/integrated_circuit/converter/concatenator
name = "concatenator"
desc = "This can join up to 8 strings together to get one big string."
desc = "This can join up to 8 strings together to get a string with a maximum of 512 characters."
complexity = 4
inputs = list()
outputs = list("result" = IC_PINTYPE_STRING)
activators = list("concatenate" = IC_PINTYPE_PULSE_IN, "on concatenated" = IC_PINTYPE_PULSE_OUT)
spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH
var/number_of_pins = 8
var/max_string_length = 512
/obj/item/integrated_circuit/converter/concatenator/Initialize()
for(var/i = 1 to number_of_pins)
@@ -157,26 +158,46 @@
/obj/item/integrated_circuit/converter/concatenator/do_work()
var/result = null
var/spamprotection
for(var/k in 1 to inputs.len)
var/I = get_pin_data(IC_INPUT, k)
if(!isnull(I))
if((result ? length(result) : 0) + length(I) > max_string_length)
spamprotection = (result ? length(result) : 0) + length(I)
break
result = result + I
if(spamprotection >= max_string_length*1.75 && assembly)
if(assembly.fingerprintslast)
var/mob/M = get_mob_by_key(assembly.fingerprintslast)
var/more = ""
if(M)
more = "[ADMIN_LOOKUPFLW(M)] "
message_admins("A concatenator circuit has greatly exceeded its [max_string_length] character limit with a total of [spamprotection] characters, and has been deleted. Assembly last touched by [more ? more : assembly.fingerprintslast].")
investigate_log("A concatenator circuit has greatly exceeded its [max_string_length] character limit with a total of [spamprotection] characters, and has been deleted. Assembly last touched by [assembly.fingerprintslast].", INVESTIGATE_CIRCUIT)
else
message_admins("A concatenator circuit has greatly exceeded its [max_string_length] character limit with a total of [spamprotection] characters, and has been deleted. No associated key.")
investigate_log("A concatenator circuit has greatly exceeded its [max_string_length] character limit with a total of [spamprotection] characters, and has been deleted. No associated key.", INVESTIGATE_CIRCUIT)
qdel(assembly)
return
set_pin_data(IC_OUTPUT, 1, result)
push_data()
activate_pin(2)
/obj/item/integrated_circuit/converter/concatenator/small
name = "small concatenator"
desc = "This can join up to 4 strings together to get one big string."
desc = "This can join up to 4 strings together to get a string with a maximum of 256 characters."
complexity = 2
number_of_pins = 4
max_string_length = 256
/obj/item/integrated_circuit/converter/concatenator/large
name = "large concatenator"
desc = "This can join up to 16 strings together to get one very big string."
desc = "This can join up to 16 strings together to get a string with a maximum of 1024 characters."
complexity = 6
number_of_pins = 16
max_string_length = 1024
/obj/item/integrated_circuit/converter/separator
name = "separator"
+38 -21
View File
@@ -300,6 +300,11 @@ GLOBAL_LIST_EMPTY(roundstart_races)
else
if(C.client)
C.canbearoused = C.client.prefs.arousable
if(ishuman(C))
var/mob/living/carbon/human/H = C
if(NOGENITALS in H.dna.species.species_traits)
H.give_genitals(TRUE) //call the clean up proc to delete anything on the mob then return.
// EDIT ENDS
/datum/species/proc/on_species_loss(mob/living/carbon/human/C, datum/species/new_species, pref_load)
@@ -1452,39 +1457,51 @@ GLOBAL_LIST_EMPTY(roundstart_races)
/datum/species/proc/disarm(mob/living/carbon/human/user, mob/living/carbon/human/target, datum/martial_art/attacker_style)
// CITADEL EDIT slap mouthy gits and booty
var/aim_for_mouth = user.zone_selected == "mouth"
var/target_on_help_and_unarmed = target.a_intent == INTENT_HELP && !target.get_active_held_item()
var/aim_for_mouth = user.zone_selected == "mouth"
var/target_on_help = target.a_intent == INTENT_HELP
var/target_aiming_for_mouth = target.zone_selected == "mouth"
var/target_restrained = target.restrained()
if(aim_for_mouth && ( target_on_help_and_unarmed || target_restrained || target_aiming_for_mouth))
playsound(target.loc, 'sound/weapons/slap.ogg', 50, 1, -1)
user.visible_message("<span class='danger'>[user] slaps [target] in the face!</span>",
"<span class='notice'>You slap [target] in the face! </span>",\
"You hear a slap.")
if (!target.has_trait(TRAIT_NYMPHO))
stop_wagging_tail(target)
return FALSE
var/same_dir = (target.dir & user.dir)
var/aim_for_groin = user.zone_selected == "groin"
var/target_aiming_for_groin = target.zone_selected == "groin"
if(aim_for_groin && (target_on_help_and_unarmed || target_restrained || target_aiming_for_groin))
if(target.check_block()) //END EDIT
target.visible_message("<span class='warning'>[target] blocks [user]'s disarm attempt!</span>")
return 0
else if(user.getStaminaLoss() >= STAMINA_SOFTCRIT)
to_chat(user, "<span class='warning'>You're too exhausted!</span>")
return FALSE
else if(aim_for_mouth && ( target_on_help || target_restrained || target_aiming_for_mouth))
playsound(target.loc, 'sound/weapons/slap.ogg', 50, 1, -1)
user.visible_message("<span class='danger'>[user] slaps [target]'s ass!</span>",
"<span class='notice'>You slap [target]'s ass! </span>",\
"You hear a slap.")
user.visible_message(
"<span class='danger'>[user] slaps [target] in the face!</span>",
"<span class='notice'>You slap [user == target ? "yourself" : target] in the face! </span>",\
"You hear a slap."
)
if (!target.has_trait(TRAIT_NYMPHO))
stop_wagging_tail(target)
user.do_attack_animation(target, ATTACK_EFFECT_FACE_SLAP)
user.adjustStaminaLossBuffered(3)
return FALSE
else if(aim_for_groin && (target == user || target.lying || same_dir) && (target_on_help || target_restrained || target_aiming_for_groin))
playsound(target.loc, 'sound/weapons/slap.ogg', 50, 1, -1)
user.visible_message(
"<span class='danger'>[user] slaps [target]'s ass!</span>",
"<span class='notice'>You slap [user == target ? "your" : target + "'s"] ass! </span>",\
"You hear a slap."
)
if (target.canbearoused)
target.adjustArousalLoss(5)
if (target.getArousalLoss() >= 100 && ishuman(target) && target.has_trait(TRAIT_NYMPHO) && target.has_dna())
target.mob_climax(forced_climax=TRUE)
if (!target.has_trait(TRAIT_NYMPHO))
stop_wagging_tail(target)
user.do_attack_animation(target, ATTACK_EFFECT_ASS_SLAP)
user.adjustStaminaLossBuffered(3)
return FALSE
else if(user.getStaminaLoss() >= STAMINA_SOFTCRIT)
to_chat(user, "<span class='warning'>You're too exhausted.</span>")
return FALSE
else if(target.check_block()) //END EDIT
target.visible_message("<span class='warning'>[target] blocks [user]'s disarm attempt!</span>")
return 0
if(attacker_style && attacker_style.disarm_act(user,target))
else if(attacker_style && attacker_style.disarm_act(user,target))
return 1
else
user.do_attack_animation(target, ATTACK_EFFECT_DISARM)
@@ -3,7 +3,7 @@
id = "abductor"
say_mod = "gibbers"
sexes = FALSE
species_traits = list(NOBLOOD,NOEYES,NOGENITALS)
species_traits = list(NOBLOOD,NOEYES,NOGENITALS,NOAROUSAL)
inherent_traits = list(TRAIT_VIRUSIMMUNE,TRAIT_NOGUNS,TRAIT_NOHUNGER,TRAIT_NOBREATH)
mutanttongue = /obj/item/organ/tongue/abductor
var/scientist = FALSE // vars to not pollute spieces list with castes
@@ -2,7 +2,7 @@
name = "Android"
id = "android"
say_mod = "states"
species_traits = list(NOBLOOD,NOGENITALS)
species_traits = list(NOBLOOD,NOGENITALS,NOAROUSAL)
inherent_traits = list(TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_RADIMMUNE,TRAIT_NOFIRE,TRAIT_PIERCEIMMUNE,TRAIT_NOHUNGER,TRAIT_LIMBATTACHMENT)
inherent_biotypes = list(MOB_ROBOTIC, MOB_HUMANOID)
meat = null
@@ -2,7 +2,7 @@
// Animated beings of stone. They have increased defenses, and do not need to breathe. They're also slow as fuuuck.
name = "Golem"
id = "iron golem"
species_traits = list(NOBLOOD,MUTCOLORS,NO_UNDERWEAR,NOGENITALS)
species_traits = list(NOBLOOD,MUTCOLORS,NO_UNDERWEAR,NOGENITALS,NOAROUSAL)
inherent_traits = list(TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOFIRE,TRAIT_NOGUNS,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER)
inherent_biotypes = list(MOB_INORGANIC, MOB_HUMANOID)
mutant_organs = list(/obj/item/organ/adamantine_resonator)
@@ -9,7 +9,7 @@
nojumpsuit = TRUE
say_mod = "poofs" //what does a mushroom sound like
species_traits = list(MUTCOLORS, NOEYES, NO_UNDERWEAR,NOGENITALS)
species_traits = list(MUTCOLORS, NOEYES, NO_UNDERWEAR,NOGENITALS,NOAROUSAL)
inherent_traits = list(TRAIT_NOBREATH)
speedmod = 1.5 //faster than golems but not by much
@@ -38,7 +38,7 @@
burnmod = 1.5
blacklisted = TRUE
no_equip = list(SLOT_WEAR_MASK, SLOT_WEAR_SUIT, SLOT_GLOVES, SLOT_SHOES, SLOT_W_UNIFORM, SLOT_S_STORE)
species_traits = list(NOBLOOD,NO_UNDERWEAR,NO_DNA_COPY,NOTRANSSTING,NOEYES,NOGENITALS)
species_traits = list(NOBLOOD,NO_UNDERWEAR,NO_DNA_COPY,NOTRANSSTING,NOEYES,NOGENITALS,NOAROUSAL)
inherent_traits = list(TRAIT_RESISTCOLD,TRAIT_NOBREATH,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOGUNS,TRAIT_RADIMMUNE,TRAIT_VIRUSIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOHUNGER)
mutanteyes = /obj/item/organ/eyes/night_vision/nightmare
mutant_organs = list(/obj/item/organ/heart/nightmare)
@@ -6,7 +6,7 @@
blacklisted = 1
sexes = 0
meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/skeleton
species_traits = list(NOBLOOD,NOGENITALS)
species_traits = list(NOBLOOD,NOGENITALS,NOAROUSAL)
inherent_traits = list(TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NOHUNGER,TRAIT_EASYDISMEMBER,TRAIT_LIMBATTACHMENT,TRAIT_FAKEDEATH)
inherent_biotypes = list(MOB_UNDEAD, MOB_HUMANOID)
mutanttongue = /obj/item/organ/tongue/bone
@@ -3,7 +3,7 @@
id = "synth"
say_mod = "beep boops" //inherited from a user's real species
sexes = 0
species_traits = list(NOTRANSSTING,NOGENITALS) //all of these + whatever we inherit from the real species
species_traits = list(NOTRANSSTING,NOGENITALS,NOAROUSAL) //all of these + whatever we inherit from the real species
inherent_traits = list(TRAIT_VIRUSIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOHUNGER,TRAIT_NOBREATH)
inherent_biotypes = list(MOB_ROBOTIC, MOB_HUMANOID)
dangerous_existence = 1
@@ -505,3 +505,33 @@
to_chat(user, "<span class='notice'>You unbolt [src]'s energy swords</span>")
for(var/IS in 1 to swordamt)
new /obj/item/melee/transforming/energy/sword/saber(Tsec)
//Firebot Assembly
/obj/item/bot_assembly/firebot
name = "incomplete firebot assembly"
desc = "A fire extinguisher with an arm attached to it."
icon_state = "firebot_arm"
created_name = "Firebot"
/obj/item/bot_assembly/firebot/attackby(obj/item/I, mob/user, params)
..()
switch(build_step)
if(ASSEMBLY_FIRST_STEP)
if(istype(I, /obj/item/clothing/head/hardhat/red))
if(!user.temporarilyRemoveItemFromInventory(I))
return
to_chat(user,"<span class='notice'>You add the [I] to [src]!</span>")
icon_state = "firebot_helmet"
desc = "An incomplete firebot assembly with a fire helmet."
qdel(I)
build_step++
if(ASSEMBLY_SECOND_STEP)
if(isprox(I))
if(!can_finish_build(I, user))
return
to_chat(user, "<span class='notice'>You add the [I] to [src]! Beep Boop!</span>")
var/mob/living/simple_animal/bot/firebot/F = new(drop_location())
F.name = created_name
qdel(I)
qdel(src)
@@ -0,0 +1,325 @@
//Firebot
#define SPEECH_INTERVAL 300 // Time between idle speeches
#define DETECTED_VOICE_INTERVAL 300 // Time between fire detected callouts
#define FOAM_INTERVAL 50 // Time between deployment of fire fighting foam
/mob/living/simple_animal/bot/firebot
name = "\improper Firebot"
desc = "A little fire extinguishing bot. He looks rather anxious."
icon = 'icons/mob/aibots.dmi'
icon_state = "firebot"
density = FALSE
anchored = FALSE
health = 25
maxHealth = 25
spacewalk = TRUE
radio_key = /obj/item/encryptionkey/headset_eng
radio_channel = "Engineering"
bot_type = FIRE_BOT
model = "Firebot"
bot_core = /obj/machinery/bot_core/firebot
window_id = "autoextinguisher"
window_name = "Mobile Fire Extinguisher v1.0"
path_image_color = "#FFA500"
var/atom/target_fire
var/atom/old_target_fire
var/obj/item/extinguisher/internal_ext
var/last_found = 0
var/speech_cooldown = 0
var/detected_cooldown = 0
var/foam_cooldown = 0
var/extinguish_people = TRUE
var/extinguish_fires = TRUE
var/stationary_mode = FALSE
/mob/living/simple_animal/bot/firebot/Initialize()
. = ..()
update_icon()
var/datum/job/engineer/J = new/datum/job/engineer
access_card.access += J.get_access()
prev_access = access_card.access
create_extinguisher()
/mob/living/simple_animal/bot/firebot/bot_reset()
create_extinguisher()
/mob/living/simple_animal/bot/firebot/proc/create_extinguisher()
internal_ext = new /obj/item/extinguisher(src)
internal_ext.safety = FALSE
internal_ext.precision = TRUE
internal_ext.max_water = INFINITY
internal_ext.refill()
/mob/living/simple_animal/bot/firebot/UnarmedAttack(atom/A)
if(!on)
return
if(internal_ext)
internal_ext.afterattack(A, src)
else
return ..()
/mob/living/simple_animal/bot/firebot/RangedAttack(atom/A)
if(!on)
return
if(internal_ext)
internal_ext.afterattack(A, src)
else
return ..()
/mob/living/simple_animal/bot/firebot/turn_on()
. = ..()
update_icon()
/mob/living/simple_animal/bot/firebot/turn_off()
..()
update_icon()
/mob/living/simple_animal/bot/firebot/bot_reset()
..()
target_fire = null
old_target_fire = null
ignore_list = list()
anchored = FALSE
update_icon()
/mob/living/simple_animal/bot/firebot/proc/soft_reset()
path = list()
target_fire = null
mode = BOT_IDLE
last_found = world.time
update_icon()
/mob/living/simple_animal/bot/firebot/set_custom_texts()
text_hack = "You corrupt [name]'s safety protocols."
text_dehack = "You detect errors in [name] and reset his programming."
text_dehack_fail = "[name] is not responding to reset commands!"
/mob/living/simple_animal/bot/firebot/get_controls(mob/user)
var/dat
dat += hack(user)
dat += showpai(user)
dat += "<TT><B>Mobile Fire Extinguisher v1.0</B></TT><BR><BR>"
dat += "Status: <A href='?src=[REF(src)];power=1'>[on ? "On" : "Off"]</A><BR>"
dat += "Maintenance panel panel is [open ? "opened" : "closed"]<BR>"
dat += "Behaviour controls are [locked ? "locked" : "unlocked"]<BR>"
if(!locked || issilicon(user) || IsAdminGhost(user))
dat += "Extinguish Fires: <A href='?src=[REF(src)];operation=extinguish_fires'>[extinguish_fires ? "Yes" : "No"]</A><BR>"
dat += "Extinguish People: <A href='?src=[REF(src)];operation=extinguish_people'>[extinguish_people ? "Yes" : "No"]</A><BR>"
dat += "Patrol Station: <A href='?src=[REF(src)];operation=patrol'>[auto_patrol ? "Yes" : "No"]</A><BR>"
dat += "Stationary Mode: <a href='?src=[REF(src)];operation=stationary_mode'>[stationary_mode ? "Yes" : "No"]</a><br>"
return dat
/mob/living/simple_animal/bot/firebot/emag_act(mob/user)
..()
if(emagged == 1)
if(user)
to_chat(user, "<span class='danger'>[src] buzzes and beeps.</span>")
audible_message("<span class='danger'>[src] buzzes oddly!</span>")
playsound(src, "sparks", 75, TRUE)
if(user)
old_target_fire = user
extinguish_fires = FALSE
extinguish_people = TRUE
internal_ext.chem = "clf3" //Refill the internal extinguisher with liquid fire
internal_ext.power = 3
internal_ext.safety = FALSE
internal_ext.precision = FALSE
internal_ext.max_water = INFINITY
internal_ext.refill()
/mob/living/simple_animal/bot/firebot/Topic(href, href_list)
if(..())
return TRUE
switch(href_list["operation"])
if("extinguish_fires")
extinguish_fires = !extinguish_fires
if("extinguish_people")
extinguish_people = !extinguish_people
if("stationary_mode")
stationary_mode = !stationary_mode
update_controls()
update_icon()
/mob/living/simple_animal/bot/firebot/proc/is_burning(atom/target)
if(ismob(target))
var/mob/living/M = target
if(M.on_fire || (emagged == 1 && !M.on_fire))
return TRUE
else if(isturf(target))
var/turf/open/T = target
if(T.active_hotspot)
return TRUE
return FALSE
/mob/living/simple_animal/bot/firebot/handle_automated_action()
if(!..())
return
if(IsStun())
old_target_fire = target_fire
target_fire = null
mode = BOT_IDLE
return
if(prob(1) && target_fire == null)
var/list/messagevoice = list("No fires detected." = 'sound/voice/firebot/nofires.ogg',
"Only you can prevent station fires." = 'sound/voice/firebot/onlyyou.ogg',
"Temperature nominal." = 'sound/voice/firebot/tempnominal.ogg',
"Keep it cool." = 'sound/voice/firebot/keepitcool.ogg')
var/message = pick(messagevoice)
speak(message)
playsound(src, messagevoice[message], 50)
// Couldn't reach the target, reset and try again ignoring the old one
if(frustration > 8)
old_target_fire = target_fire
soft_reset()
// We extinguished our target or it was deleted
if(QDELETED(target_fire) || !is_burning(target_fire) || isdead(target_fire))
target_fire = null
var/scan_range = (stationary_mode ? 1 : DEFAULT_SCAN_RANGE)
if(extinguish_people)
target_fire = scan(/mob/living, old_target_fire, scan_range) // Scan for burning humans first
if(target_fire == null && extinguish_fires)
target_fire = scan(/turf/open, old_target_fire, scan_range) // Scan for burning turfs second
old_target_fire = target_fire
// Target reached ENGAGE WATER CANNON
if(target_fire && (get_dist(src, target_fire) <= (emagged == 1 ? 1 : 2))) // Make the bot spray water from afar when not emagged
if((speech_cooldown + SPEECH_INTERVAL) < world.time)
if(ishuman(target_fire))
speak("Stop, drop and roll!")
playsound(src, "sound/voice/firebot/stopdropnroll.ogg", 50, 0)
else
speak("Extinguishing!")
playsound(src, "sound/voice/firebot/extinguishing.ogg", 50, 0)
speech_cooldown = world.time
flick("firebot1_use", src)
spray_water(target_fire, src)
soft_reset()
// Target ran away
else if(target_fire && path.len && (get_dist(target_fire,path[path.len]) > 2))
path = list()
mode = BOT_IDLE
last_found = world.time
else if(target_fire && stationary_mode)
soft_reset()
return
if(target_fire && (get_dist(src, target_fire) > 2))
path = get_path_to(src, get_turf(target_fire), /turf/proc/Distance_cardinal, 0, 30, 1, id=access_card)
mode = BOT_MOVING
if(!path.len)
soft_reset()
if(path.len > 0 && target_fire)
if(!bot_move(path[path.len]))
old_target_fire = target_fire
soft_reset()
return
// We got a target but it's too far away from us
if(path.len > 8 && target_fire)
frustration++
if(auto_patrol && !target_fire && !stationary_mode)
if(mode == BOT_IDLE || mode == BOT_START_PATROL)
start_patrol()
if(mode == BOT_PATROL)
bot_patrol()
//Look for burning people or turfs around the bot
/mob/living/simple_animal/bot/firebot/process_scan(atom/scan_target)
var/result
if(scan_target == src)
return result
if(is_burning(scan_target))
if((detected_cooldown + DETECTED_VOICE_INTERVAL) < world.time)
speak("Fire detected!")
playsound(src, "sound/voice/firebot/detected.ogg", 50, 0)
detected_cooldown = world.time
result = scan_target
return result
/mob/living/simple_animal/bot/firebot/temperature_expose(datum/gas_mixture/air, temperature, volume)
if((temperature > T0C + 200 || temperature < BODYTEMP_COLD_DAMAGE_LIMIT) && foam_cooldown + FOAM_INTERVAL < world.time)
new /obj/effect/particle_effect/foam/firefighting(loc)
foam_cooldown = world.time
..()
/mob/living/simple_animal/bot/firebot/proc/spray_water(atom/target, mob/user)
if(stationary_mode)
flick("firebots_use", user)
else
flick("firebot1_use", user)
internal_ext.afterattack(target, user, null)
/mob/living/simple_animal/bot/firebot/update_icon()
if(!on)
icon_state = "firebot0"
return
if(IsStun())
icon_state = "firebots1"
else if(stationary_mode) //Bot has yellow light to indicate stationary mode.
icon_state = "firebots1"
else
icon_state = "firebot1"
/mob/living/simple_animal/bot/firebot/explode()
on = FALSE
visible_message("<span class='boldannounce'>[src] blows apart!</span>")
var/atom/Tsec = drop_location()
new /obj/item/assembly/prox_sensor(Tsec)
new /obj/item/clothing/head/hardhat/red(Tsec)
var/turf/T = get_turf(Tsec)
if(isopenturf(T))
var/turf/open/theturf = T
theturf.MakeSlippery(TURF_WET_WATER, min_wet_time = 10 SECONDS, wet_time_to_add = 5 SECONDS)
if(prob(50))
drop_part(robot_arm, Tsec)
do_sparks(3, TRUE, src)
..()
/obj/machinery/bot_core/firebot
req_one_access = list(ACCESS_CONSTRUCTION, ACCESS_ROBOTICS)
#undef SPEECH_INTERVAL
#undef DETECTED_VOICE_INTERVAL
#undef FOAM_INTERVAL
@@ -130,7 +130,7 @@
/mob/living/simple_animal/hostile/syndicate/melee/bullet_act(obj/item/projectile/Proj)
if(!Proj)
return
if(prob(50))
if(prob(25))
return ..()
else
visible_message("<span class='danger'>[src] blocks [Proj] with its shield!</span>")
@@ -61,6 +61,8 @@
var/mood = "" // To show its face
var/mutator_used = FALSE //So you can't shove a dozen mutators into a single slime
var/force_stasis = FALSE
do_footstep = TRUE
var/static/regex/slime_name_regex = new("\\w+ (baby|adult) slime \\(\\d+\\)")
///////////TIME FOR SUBSPECIES
@@ -1,888 +0,0 @@
///////////////////////////////////
//////////Autolathe Designs ///////
///////////////////////////////////
/datum/design/bucket
name = "Bucket"
id = "bucket"
build_type = AUTOLATHE
materials = list(MAT_METAL = 200)
build_path = /obj/item/reagent_containers/glass/bucket
category = list("initial","Tools")
/datum/design/crowbar
name = "Pocket Crowbar"
id = "crowbar"
build_type = AUTOLATHE
materials = list(MAT_METAL = 50)
build_path = /obj/item/crowbar
category = list("initial","Tools")
/datum/design/flashlight
name = "Flashlight"
id = "flashlight"
build_type = AUTOLATHE
materials = list(MAT_METAL = 50, MAT_GLASS = 20)
build_path = /obj/item/flashlight
category = list("initial","Tools")
/datum/design/extinguisher
name = "Fire Extinguisher"
id = "extinguisher"
build_type = AUTOLATHE
materials = list(MAT_METAL = 90)
build_path = /obj/item/extinguisher
category = list("initial","Tools")
/datum/design/pocketfireextinguisher
name = "Pocket Fire Extinguisher"
id = "pocketfireextinguisher"
build_type = AUTOLATHE
materials = list(MAT_METAL = 50, MAT_GLASS = 40)
build_path = /obj/item/extinguisher/mini
category = list("initial","Tools")
/datum/design/multitool
name = "Multitool"
id = "multitool"
build_type = AUTOLATHE
materials = list(MAT_METAL = 50, MAT_GLASS = 20)
build_path = /obj/item/multitool
category = list("initial","Tools")
/datum/design/analyzer
name = "Analyzer"
id = "analyzer"
build_type = AUTOLATHE
materials = list(MAT_METAL = 30, MAT_GLASS = 20)
build_path = /obj/item/analyzer
category = list("initial","Tools")
/datum/design/tscanner
name = "T-Ray Scanner"
id = "tscanner"
build_type = AUTOLATHE
materials = list(MAT_METAL = 150)
build_path = /obj/item/t_scanner
category = list("initial","Tools")
/datum/design/weldingtool
name = "Welding Tool"
id = "welding_tool"
build_type = AUTOLATHE
materials = list(MAT_METAL = 70, MAT_GLASS = 20)
build_path = /obj/item/weldingtool
category = list("initial","Tools")
/datum/design/mini_weldingtool
name = "Emergency Welding Tool"
id = "mini_welding_tool"
build_type = AUTOLATHE
materials = list(MAT_METAL = 30, MAT_GLASS = 10)
build_path = /obj/item/weldingtool/mini
category = list("initial","Tools")
/datum/design/screwdriver
name = "Screwdriver"
id = "screwdriver"
build_type = AUTOLATHE
materials = list(MAT_METAL = 75)
build_path = /obj/item/screwdriver
category = list("initial","Tools")
/datum/design/wirecutters
name = "Wirecutters"
id = "wirecutters"
build_type = AUTOLATHE
materials = list(MAT_METAL = 80)
build_path = /obj/item/wirecutters
category = list("initial","Tools")
/datum/design/wrench
name = "Wrench"
id = "wrench"
build_type = AUTOLATHE
materials = list(MAT_METAL = 150)
build_path = /obj/item/wrench
category = list("initial","Tools")
/datum/design/welding_helmet
name = "Welding Helmet"
id = "welding_helmet"
build_type = AUTOLATHE
materials = list(MAT_METAL = 1750, MAT_GLASS = 400)
build_path = /obj/item/clothing/head/welding
category = list("initial","Tools")
/datum/design/cable_coil
name = "Cable Coil"
id = "cable_coil"
build_type = AUTOLATHE
materials = list(MAT_METAL = 10, MAT_GLASS = 5)
build_path = /obj/item/stack/cable_coil/random
category = list("initial","Tools")
maxstack = 30
/datum/design/toolbox
name = "Toolbox"
id = "tool_box"
build_type = AUTOLATHE
materials = list(MAT_METAL = 500)
build_path = /obj/item/storage/toolbox
category = list("initial","Tools")
/datum/design/apc_board
name = "APC Module"
id = "power control"
build_type = AUTOLATHE | PROTOLATHE
materials = list(MAT_METAL = 100, MAT_GLASS = 100)
build_path = /obj/item/electronics/apc
category = list("initial", "Electronics")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/airlock_board
name = "Airlock Electronics"
id = "airlock_board"
build_type = AUTOLATHE | PROTOLATHE
materials = list(MAT_METAL = 50, MAT_GLASS = 50)
build_path = /obj/item/electronics/airlock
category = list("initial", "Electronics")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/firelock_board
name = "Firelock Circuitry"
id = "firelock_board"
build_type = AUTOLATHE | PROTOLATHE
materials = list(MAT_METAL = 50, MAT_GLASS = 50)
build_path = /obj/item/electronics/firelock
category = list("initial", "Electronics")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/airalarm_electronics
name = "Air Alarm Electronics"
id = "airalarm_electronics"
build_type = AUTOLATHE | PROTOLATHE
materials = list(MAT_METAL = 50, MAT_GLASS = 50)
build_path = /obj/item/electronics/airalarm
category = list("initial", "Electronics")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/firealarm_electronics
name = "Fire Alarm Electronics"
id = "firealarm_electronics"
build_type = AUTOLATHE | PROTOLATHE
materials = list(MAT_METAL = 50, MAT_GLASS = 50)
build_path = /obj/item/electronics/firealarm
category = list("initial", "Electronics")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/camera
name = "Camera"
id = "camera"
build_type = AUTOLATHE
materials = list(MAT_METAL = 50, MAT_GLASS = 100)
build_path = /obj/item/camera
category = list("initial", "Misc")
/datum/design/camera_film
name = "Camera Film Cartridge"
id = "camera_film"
build_type = AUTOLATHE
materials = list(MAT_METAL = 10, MAT_GLASS = 10)
build_path = /obj/item/camera_film
category = list("initial", "Misc")
/datum/design/earmuffs
name = "Earmuffs"
id = "earmuffs"
build_type = AUTOLATHE
materials = list(MAT_METAL = 500, MAT_GLASS = 500)
build_path = /obj/item/clothing/ears/earmuffs
category = list("initial", "Misc")
/datum/design/pipe_painter
name = "Pipe Painter"
id = "pipe_painter"
build_type = AUTOLATHE
materials = list(MAT_METAL = 5000, MAT_GLASS = 2000)
build_path = /obj/item/pipe_painter
category = list("initial", "Misc")
/datum/design/airlock_painter
name = "Airlock Painter"
id = "airlock_painter"
build_type = AUTOLATHE
materials = list(MAT_METAL = 50, MAT_GLASS = 50)
build_path = /obj/item/airlock_painter
category = list("initial", "Misc")
/datum/design/metal
name = "Metal"
id = "metal"
build_type = AUTOLATHE
materials = list(MAT_METAL = MINERAL_MATERIAL_AMOUNT)
build_path = /obj/item/stack/sheet/metal
category = list("initial","Construction")
maxstack = 50
/datum/design/glass
name = "Glass"
id = "glass"
build_type = AUTOLATHE
materials = list(MAT_GLASS = MINERAL_MATERIAL_AMOUNT)
build_path = /obj/item/stack/sheet/glass
category = list("initial","Construction")
maxstack = 50
/datum/design/rglass
name = "Reinforced Glass"
id = "rglass"
build_type = AUTOLATHE | SMELTER | PROTOLATHE
materials = list(MAT_METAL = 1000, MAT_GLASS = MINERAL_MATERIAL_AMOUNT)
build_path = /obj/item/stack/sheet/rglass
category = list("initial","Construction","Stock Parts")
maxstack = 50
/datum/design/rods
name = "Metal Rod"
id = "rods"
build_type = AUTOLATHE
materials = list(MAT_METAL = 1000)
build_path = /obj/item/stack/rods
category = list("initial","Construction")
maxstack = 50
/datum/design/rcd_ammo
name = "Compressed Matter Cartridge"
id = "rcd_ammo"
build_type = AUTOLATHE
materials = list(MAT_METAL = 12000, MAT_GLASS=8000)
build_path = /obj/item/rcd_ammo
category = list("initial","Construction")
/datum/design/kitchen_knife
name = "Kitchen Knife"
id = "kitchen_knife"
build_type = AUTOLATHE
materials = list(MAT_METAL = 12000)
build_path = /obj/item/kitchen/knife
category = list("initial","Dinnerware")
/datum/design/fork
name = "Fork"
id = "fork"
build_type = AUTOLATHE
materials = list(MAT_METAL = 80)
build_path = /obj/item/kitchen/fork
category = list("initial","Dinnerware")
/datum/design/tray
name = "Tray"
id = "tray"
build_type = AUTOLATHE
materials = list(MAT_METAL = 3000)
build_path = /obj/item/storage/bag/tray
category = list("initial","Dinnerware")
/datum/design/bowl
name = "Bowl"
id = "bowl"
build_type = AUTOLATHE
materials = list(MAT_GLASS = 500)
build_path = /obj/item/reagent_containers/glass/bowl
category = list("initial","Dinnerware")
/datum/design/drinking_glass
name = "Drinking Glass"
id = "drinking_glass"
build_type = AUTOLATHE
materials = list(MAT_GLASS = 500)
build_path = /obj/item/reagent_containers/food/drinks/drinkingglass
category = list("initial","Dinnerware")
/datum/design/shot_glass
name = "Shot Glass"
id = "shot_glass"
build_type = AUTOLATHE
materials = list(MAT_GLASS = 100)
build_path = /obj/item/reagent_containers/food/drinks/drinkingglass/shotglass
category = list("initial","Dinnerware")
/datum/design/shaker
name = "Shaker"
id = "shaker"
build_type = AUTOLATHE
materials = list(MAT_METAL = 1500)
build_path = /obj/item/reagent_containers/food/drinks/shaker
category = list("initial","Dinnerware")
/datum/design/cultivator
name = "Cultivator"
id = "cultivator"
build_type = AUTOLATHE
materials = list(MAT_METAL=50)
build_path = /obj/item/cultivator
category = list("initial","Misc")
/datum/design/plant_analyzer
name = "Plant Analyzer"
id = "plant_analyzer"
build_type = AUTOLATHE
materials = list(MAT_METAL = 30, MAT_GLASS = 20)
build_path = /obj/item/plant_analyzer
category = list("initial","Misc")
/datum/design/shovel
name = "Shovel"
id = "shovel"
build_type = AUTOLATHE
materials = list(MAT_METAL = 50)
build_path = /obj/item/shovel
category = list("initial","Misc")
/datum/design/spade
name = "Spade"
id = "spade"
build_type = AUTOLATHE
materials = list(MAT_METAL = 50)
build_path = /obj/item/shovel/spade
category = list("initial","Misc")
/datum/design/hatchet
name = "Hatchet"
id = "hatchet"
build_type = AUTOLATHE
materials = list(MAT_METAL = 15000)
build_path = /obj/item/hatchet
category = list("initial","Misc")
/datum/design/foilhat
name = "Tinfoil Hat"
id = "tinfoil_hat"
build_type = AUTOLATHE
materials = list(MAT_METAL = 5500)
build_path = /obj/item/clothing/head/foilhat
category = list("hacked", "Misc")
/datum/design/scalpel
name = "Scalpel"
id = "scalpel"
build_type = AUTOLATHE
materials = list(MAT_METAL = 4000, MAT_GLASS = 1000)
build_path = /obj/item/scalpel
category = list("initial", "Medical")
/datum/design/circular_saw
name = "Circular Saw"
id = "circular_saw"
build_type = AUTOLATHE
materials = list(MAT_METAL = 10000, MAT_GLASS = 6000)
build_path = /obj/item/circular_saw
category = list("initial", "Medical")
/datum/design/surgicaldrill
name = "Surgical Drill"
id = "surgicaldrill"
build_type = AUTOLATHE
materials = list(MAT_METAL = 10000, MAT_GLASS = 6000)
build_path = /obj/item/surgicaldrill
category = list("initial", "Medical")
/datum/design/retractor
name = "Retractor"
id = "retractor"
build_type = AUTOLATHE
materials = list(MAT_METAL = 6000, MAT_GLASS = 3000)
build_path = /obj/item/retractor
category = list("initial", "Medical")
/datum/design/cautery
name = "Cautery"
id = "cautery"
build_type = AUTOLATHE
materials = list(MAT_METAL = 2500, MAT_GLASS = 750)
build_path = /obj/item/cautery
category = list("initial", "Medical")
/datum/design/hemostat
name = "Hemostat"
id = "hemostat"
build_type = AUTOLATHE
materials = list(MAT_METAL = 5000, MAT_GLASS = 2500)
build_path = /obj/item/hemostat
category = list("initial", "Medical")
/datum/design/beaker
name = "Beaker"
id = "beaker"
build_type = AUTOLATHE
materials = list(MAT_GLASS = 500)
build_path = /obj/item/reagent_containers/glass/beaker
category = list("initial", "Medical")
/datum/design/large_beaker
name = "Large Beaker"
id = "large_beaker"
build_type = AUTOLATHE
materials = list(MAT_GLASS = 2500)
build_path = /obj/item/reagent_containers/glass/beaker/large
category = list("initial", "Medical")
/datum/design/healthanalyzer
name = "Health Analyzer"
id = "healthanalyzer"
build_type = AUTOLATHE | PROTOLATHE
materials = list(MAT_METAL = 500, MAT_GLASS = 50)
build_path = /obj/item/healthanalyzer
category = list("initial", "Medical")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
/datum/design/pillbottle
name = "Pill Bottle"
id = "pillbottle"
build_type = AUTOLATHE
materials = list(MAT_METAL = 20, MAT_GLASS = 100)
build_path = /obj/item/storage/pill_bottle
category = list("initial", "Medical")
/datum/design/beanbag_slug
name = "Beanbag Slug"
id = "beanbag_slug"
build_type = AUTOLATHE
materials = list(MAT_METAL = 250)
build_path = /obj/item/ammo_casing/shotgun/beanbag
category = list("initial", "Security")
/datum/design/rubbershot
name = "Rubber Shot"
id = "rubber_shot"
build_type = AUTOLATHE
materials = list(MAT_METAL = 4000)
build_path = /obj/item/ammo_casing/shotgun/rubbershot
category = list("initial", "Security")
/datum/design/c38
name = "Speed Loader (.38 rubber)"
id = "c38"
build_type = AUTOLATHE
materials = list(MAT_METAL = 20000)
build_path = /obj/item/ammo_box/c38
category = list("initial", "Security")
/datum/design/recorder
name = "Universal Recorder"
id = "recorder"
build_type = AUTOLATHE
materials = list(MAT_METAL = 60, MAT_GLASS = 30)
build_path = /obj/item/taperecorder/empty
category = list("initial", "Misc")
/datum/design/tape
name = "Tape"
id = "tape"
build_type = AUTOLATHE
materials = list(MAT_METAL = 20, MAT_GLASS = 5)
build_path = /obj/item/tape/random
category = list("initial", "Misc")
/datum/design/igniter
name = "Igniter"
id = "igniter"
build_type = AUTOLATHE
materials = list(MAT_METAL = 500, MAT_GLASS = 50)
build_path = /obj/item/assembly/igniter
category = list("initial", "Misc")
/datum/design/signaler
name = "Remote Signaling Device"
id = "signaler"
build_type = AUTOLATHE
materials = list(MAT_METAL = 400, MAT_GLASS = 120)
build_path = /obj/item/assembly/signaler
category = list("initial", "T-Comm")
/datum/design/radio_headset
name = "Radio Headset"
id = "radio_headset"
build_type = AUTOLATHE
materials = list(MAT_METAL = 75)
build_path = /obj/item/radio/headset
category = list("initial", "T-Comm")
/datum/design/bounced_radio
name = "Station Bounced Radio"
id = "bounced_radio"
build_type = AUTOLATHE
materials = list(MAT_METAL = 75, MAT_GLASS = 25)
build_path = /obj/item/radio/off
category = list("initial", "T-Comm")
/datum/design/intercom_frame
name = "Intercom Frame"
id = "intercom_frame"
build_type = AUTOLATHE
materials = list(MAT_METAL = 75, MAT_GLASS = 25)
build_path = /obj/item/wallframe/intercom
category = list("initial", "T-Comm")
/datum/design/infrared_emitter
name = "Infrared Emitter"
id = "infrared_emitter"
build_type = AUTOLATHE
materials = list(MAT_METAL = 1000, MAT_GLASS = 500)
build_path = /obj/item/assembly/infra
category = list("initial", "Misc")
/datum/design/health_sensor
name = "Health Sensor"
id = "health_sensor"
build_type = AUTOLATHE
materials = list(MAT_METAL = 800, MAT_GLASS = 200)
build_path = /obj/item/assembly/health
category = list("initial", "Medical")
/datum/design/timer
name = "Timer"
id = "timer"
build_type = AUTOLATHE
materials = list(MAT_METAL = 500, MAT_GLASS = 50)
build_path = /obj/item/assembly/timer
category = list("initial", "Misc")
/datum/design/voice_analyser
name = "Voice Analyser"
id = "voice_analyser"
build_type = AUTOLATHE
materials = list(MAT_METAL = 500, MAT_GLASS = 50)
build_path = /obj/item/assembly/voice
category = list("initial", "Misc")
/datum/design/light_tube
name = "Light Tube"
id = "light_tube"
build_type = AUTOLATHE
materials = list(MAT_GLASS = 100)
build_path = /obj/item/light/tube
category = list("initial", "Construction")
/datum/design/light_bulb
name = "Light Bulb"
id = "light_bulb"
build_type = AUTOLATHE
materials = list(MAT_GLASS = 100)
build_path = /obj/item/light/bulb
category = list("initial", "Construction")
/datum/design/camera_assembly
name = "Camera Assembly"
id = "camera_assembly"
build_type = AUTOLATHE
materials = list(MAT_METAL = 400, MAT_GLASS = 250)
build_path = /obj/item/wallframe/camera
category = list("initial", "Construction")
/datum/design/newscaster_frame
name = "Newscaster Frame"
id = "newscaster_frame"
build_type = AUTOLATHE
materials = list(MAT_METAL = 14000, MAT_GLASS = 8000)
build_path = /obj/item/wallframe/newscaster
category = list("initial", "Construction")
/datum/design/syringe
name = "Syringe"
id = "syringe"
build_type = AUTOLATHE
materials = list(MAT_METAL = 10, MAT_GLASS = 20)
build_path = /obj/item/reagent_containers/syringe
category = list("initial", "Medical")
/datum/design/prox_sensor
name = "Proximity Sensor"
id = "prox_sensor"
build_type = AUTOLATHE
materials = list(MAT_METAL = 800, MAT_GLASS = 200)
build_path = /obj/item/assembly/prox_sensor
category = list("initial", "Misc")
/datum/design/foam_dart
name = "Box of Foam Darts"
id = "foam_dart"
build_type = AUTOLATHE
materials = list(MAT_METAL = 500)
build_path = /obj/item/ammo_box/foambox
category = list("initial", "Misc")
//hacked autolathe recipes
/datum/design/flamethrower
name = "Flamethrower"
id = "flamethrower"
build_type = AUTOLATHE
materials = list(MAT_METAL = 500)
build_path = /obj/item/flamethrower/full
category = list("hacked", "Security")
/datum/design/rcd
name = "Rapid Construction Device (RCD)"
id = "rcd"
build_type = AUTOLATHE
materials = list(MAT_METAL = 30000)
build_path = /obj/item/construction/rcd
category = list("hacked", "Construction")
/datum/design/rpd
name = "Rapid Pipe Dispenser (RPD)"
id = "rpd"
build_type = AUTOLATHE
materials = list(MAT_METAL = 75000, MAT_GLASS = 37500)
build_path = /obj/item/pipe_dispenser
category = list("hacked", "Construction")
/datum/design/electropack
name = "Electropack"
id = "electropack"
build_type = AUTOLATHE
materials = list(MAT_METAL = 10000, MAT_GLASS = 2500)
build_path = /obj/item/electropack
category = list("hacked", "Tools")
/datum/design/large_welding_tool
name = "Industrial Welding Tool"
id = "large_welding_tool"
build_type = AUTOLATHE
materials = list(MAT_METAL = 70, MAT_GLASS = 60)
build_path = /obj/item/weldingtool/largetank
category = list("hacked", "Tools")
/datum/design/handcuffs
name = "Handcuffs"
id = "handcuffs"
build_type = AUTOLATHE
materials = list(MAT_METAL = 500)
build_path = /obj/item/restraints/handcuffs
category = list("hacked", "Security")
/datum/design/receiver
name = "Modular Receiver"
id = "receiver"
build_type = AUTOLATHE
materials = list(MAT_METAL = 15000)
build_path = /obj/item/weaponcrafting/receiver
category = list("hacked", "Security")
/datum/design/shotgun_slug
name = "Shotgun Slug"
id = "shotgun_slug"
build_type = AUTOLATHE
materials = list(MAT_METAL = 4000)
build_path = /obj/item/ammo_casing/shotgun
category = list("hacked", "Security")
/datum/design/buckshot_shell
name = "Buckshot Shell"
id = "buckshot_shell"
build_type = AUTOLATHE
materials = list(MAT_METAL = 4000)
build_path = /obj/item/ammo_casing/shotgun/buckshot
category = list("hacked", "Security")
/datum/design/shotgun_dart
name = "Shotgun Dart"
id = "shotgun_dart"
build_type = AUTOLATHE
materials = list(MAT_METAL = 4000)
build_path = /obj/item/ammo_casing/shotgun/dart
category = list("hacked", "Security")
/datum/design/incendiary_slug
name = "Incendiary Slug"
id = "incendiary_slug"
build_type = AUTOLATHE
materials = list(MAT_METAL = 4000)
build_path = /obj/item/ammo_casing/shotgun/incendiary
category = list("hacked", "Security")
/datum/design/riot_dart
name = "Foam Riot Dart"
id = "riot_dart"
build_type = AUTOLATHE
materials = list(MAT_METAL = 1000) //Discount for making individually - no box = less metal!
build_path = /obj/item/ammo_casing/caseless/foam_dart/riot
category = list("hacked", "Security")
/datum/design/riot_darts
name = "Foam Riot Dart Box"
id = "riot_darts"
build_type = AUTOLATHE
materials = list(MAT_METAL = 50000) //Comes with 40 darts
build_path = /obj/item/ammo_box/foambox/riot
category = list("hacked", "Security")
/datum/design/a357
name = "Speed Loader (.357)"
id = "a357"
build_type = AUTOLATHE
materials = list(MAT_METAL = 30000)
build_path = /obj/item/ammo_box/a357
category = list("hacked", "Security")
/datum/design/c10mm
name = "Ammo Box (10mm)"
id = "c10mm"
build_type = AUTOLATHE
materials = list(MAT_METAL = 30000)
build_path = /obj/item/ammo_box/c10mm
category = list("hacked", "Security")
/datum/design/c45
name = "Ammo Box (.45)"
id = "c45"
build_type = AUTOLATHE
materials = list(MAT_METAL = 30000)
build_path = /obj/item/ammo_box/c45
category = list("hacked", "Security")
/datum/design/c9mm
name = "Ammo Box (9mm)"
id = "c9mm"
build_type = AUTOLATHE
materials = list(MAT_METAL = 30000)
build_path = /obj/item/ammo_box/c9mm
category = list("hacked", "Security")
/datum/design/cleaver
name = "Butcher's Cleaver"
id = "cleaver"
build_type = AUTOLATHE
materials = list(MAT_METAL = 18000)
build_path = /obj/item/kitchen/knife/butcher
category = list("hacked", "Dinnerware")
/datum/design/spraycan
name = "Spraycan"
id = "spraycan"
build_type = AUTOLATHE
materials = list(MAT_METAL = 100, MAT_GLASS = 100)
build_path = /obj/item/toy/crayon/spraycan
category = list("initial", "Tools")
/datum/design/desttagger
name = "Destination Tagger"
id = "desttagger"
build_type = AUTOLATHE
materials = list(MAT_METAL = 250, MAT_GLASS = 125)
build_path = /obj/item/destTagger
category = list("initial", "Electronics")
/datum/design/handlabeler
name = "Hand Labeler"
id = "handlabel"
build_type = AUTOLATHE
materials = list(MAT_METAL = 150, MAT_GLASS = 125)
build_path = /obj/item/hand_labeler
category = list("initial", "Electronics")
/datum/design/geiger
name = "Geiger Counter"
id = "geigercounter"
build_type = AUTOLATHE
materials = list(MAT_METAL = 150, MAT_GLASS = 150)
build_path = /obj/item/geiger_counter
category = list("initial", "Tools")
/datum/design/turret_control_frame
name = "Turret Control Frame"
id = "turret_control"
build_type = AUTOLATHE
materials = list(MAT_METAL = 12000)
build_path = /obj/item/wallframe/turret_control
category = list("initial", "Construction")
/datum/design/conveyor_belt
name = "Conveyor Belt"
id = "conveyor_belt"
build_type = AUTOLATHE
materials = list(MAT_METAL = 5000)
build_path = /obj/item/conveyor_construct
category = list("initial", "Construction")
/datum/design/conveyor_switch
name = "Conveyor Belt Switch"
id = "conveyor_switch"
build_type = AUTOLATHE
materials = list(MAT_METAL = 450, MAT_GLASS = 190)
build_path = /obj/item/conveyor_switch_construct
category = list("initial", "Construction")
/datum/design/laptop
name = "Laptop Frame"
id = "laptop"
build_type = AUTOLATHE
materials = list(MAT_METAL = 10000, MAT_GLASS = 1000)
build_path = /obj/item/modular_computer/laptop/buildable
category = list("initial","Misc")
/datum/design/tablet
name = "Tablet Frame"
id = "tablet"
build_type = AUTOLATHE
materials = list(MAT_METAL = 2000, MAT_GLASS = 1000)
build_path = /obj/item/modular_computer/tablet
category = list("initial","Misc")
/datum/design/slime_scanner
name = "Slime Scanner"
id = "slime_scanner"
build_type = AUTOLATHE
materials = list(MAT_METAL = 300, MAT_GLASS = 200)
build_path = /obj/item/slime_scanner
category = list("initial", "Misc")
/datum/design/pet_carrier
name = "Pet Carrier"
id = "pet_carrier"
build_type = AUTOLATHE
materials = list(MAT_METAL = 7500, MAT_GLASS = 100)
build_path = /obj/item/pet_carrier
category = list("initial", "Misc")
/datum/design/miniature_power_cell
name = "Light Fixture Battery"
id = "miniature_power_cell"
build_type = AUTOLATHE
materials = list(MAT_GLASS = 20)
build_path = /obj/item/stock_parts/cell/emergency_light
category = list("initial", "Electronics")
/datum/design/packageWrap
name = "Package Wrapping"
id = "packagewrap"
build_type = AUTOLATHE
materials = list(MAT_METAL = 200, MAT_GLASS = 200)
build_path = /obj/item/stack/packageWrap
category = list("initial", "Misc")
maxstack = 30
/datum/design/holodisk
name = "Holodisk"
id = "holodisk"
build_type = AUTOLATHE
materials = list(MAT_METAL = 100, MAT_GLASS = 100)
build_path = /obj/item/disk/holodisk
category = list("initial", "Misc")
/datum/design/lock_collar
name = "Lockable Collar"
id = "lock_collar"
build_type = AUTOLATHE
materials = list(MAT_METAL = 1200, MAT_GLASS = 100)
build_path = /obj/item/clothing/neck/petcollar/locked
category = list("initial", "Misc")
/datum/design/collar_key
name = "Collar Key"
id = "collar_key"
build_type = AUTOLATHE
materials = list(MAT_METAL = 300, MAT_GLASS = 150)
build_path = /obj/item/key/collar
category = list("initial", "Misc")
@@ -0,0 +1,108 @@
///////////////////////////////////
//////////Autolathe Designs ///////
///////////////////////////////////
////////////////
///Construction//
////////////////
/datum/design/rods
name = "Metal Rod"
id = "rods"
build_type = AUTOLATHE
materials = list(MAT_METAL = 1000)
build_path = /obj/item/stack/rods
category = list("initial","Construction")
maxstack = 50
/datum/design/metal
name = "Metal"
id = "metal"
build_type = AUTOLATHE
materials = list(MAT_METAL = MINERAL_MATERIAL_AMOUNT)
build_path = /obj/item/stack/sheet/metal
category = list("initial","Construction")
maxstack = 50
/datum/design/glass
name = "Glass"
id = "glass"
build_type = AUTOLATHE
materials = list(MAT_GLASS = MINERAL_MATERIAL_AMOUNT)
build_path = /obj/item/stack/sheet/glass
category = list("initial","Construction")
maxstack = 50
/datum/design/rglass
name = "Reinforced Glass"
id = "rglass"
build_type = AUTOLATHE | SMELTER | PROTOLATHE
materials = list(MAT_METAL = 1000, MAT_GLASS = MINERAL_MATERIAL_AMOUNT)
build_path = /obj/item/stack/sheet/rglass
category = list("initial","Construction","Stock Parts")
maxstack = 50
/datum/design/light_tube
name = "Light Tube"
id = "light_tube"
build_type = AUTOLATHE
materials = list(MAT_GLASS = 100)
build_path = /obj/item/light/tube
category = list("initial", "Construction")
/datum/design/light_bulb
name = "Light Bulb"
id = "light_bulb"
build_type = AUTOLATHE
materials = list(MAT_GLASS = 100)
build_path = /obj/item/light/bulb
category = list("initial", "Construction")
/datum/design/camera_assembly
name = "Camera Assembly"
id = "camera_assembly"
build_type = AUTOLATHE
materials = list(MAT_METAL = 400, MAT_GLASS = 250)
build_path = /obj/item/wallframe/camera
category = list("initial", "Construction")
/datum/design/newscaster_frame
name = "Newscaster Frame"
id = "newscaster_frame"
build_type = AUTOLATHE
materials = list(MAT_METAL = 14000, MAT_GLASS = 8000)
build_path = /obj/item/wallframe/newscaster
category = list("initial", "Construction")
/datum/design/turret_control_frame
name = "Turret Control Frame"
id = "turret_control"
build_type = AUTOLATHE
materials = list(MAT_METAL = 12000)
build_path = /obj/item/wallframe/turret_control
category = list("initial", "Construction")
/datum/design/conveyor_belt
name = "Conveyor Belt"
id = "conveyor_belt"
build_type = AUTOLATHE
materials = list(MAT_METAL = 5000)
build_path = /obj/item/conveyor_construct
category = list("initial", "Construction")
/datum/design/conveyor_switch
name = "Conveyor Belt Switch"
id = "conveyor_switch"
build_type = AUTOLATHE
materials = list(MAT_METAL = 450, MAT_GLASS = 190)
build_path = /obj/item/conveyor_switch_construct
category = list("initial", "Construction")
/datum/design/rcd_ammo
name = "Compressed Matter Cartridge"
id = "rcd_ammo"
build_type = AUTOLATHE
materials = list(MAT_METAL = 12000, MAT_GLASS=8000)
build_path = /obj/item/rcd_ammo
category = list("initial","Construction")
@@ -0,0 +1,76 @@
///////////////////////////////////
//////////Autolathe Designs ///////
///////////////////////////////////
////////////////
///Electronics//
////////////////
/datum/design/apc_board
name = "APC Module"
id = "power control"
build_type = AUTOLATHE | PROTOLATHE
materials = list(MAT_METAL = 100, MAT_GLASS = 100)
build_path = /obj/item/electronics/apc
category = list("initial", "Electronics")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/airlock_board
name = "Airlock Electronics"
id = "airlock_board"
build_type = AUTOLATHE | PROTOLATHE
materials = list(MAT_METAL = 50, MAT_GLASS = 50)
build_path = /obj/item/electronics/airlock
category = list("initial", "Electronics")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/firelock_board
name = "Firelock Circuitry"
id = "firelock_board"
build_type = AUTOLATHE | PROTOLATHE
materials = list(MAT_METAL = 50, MAT_GLASS = 50)
build_path = /obj/item/electronics/firelock
category = list("initial", "Electronics")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/airalarm_electronics
name = "Air Alarm Electronics"
id = "airalarm_electronics"
build_type = AUTOLATHE | PROTOLATHE
materials = list(MAT_METAL = 50, MAT_GLASS = 50)
build_path = /obj/item/electronics/airalarm
category = list("initial", "Electronics")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/firealarm_electronics
name = "Fire Alarm Electronics"
id = "firealarm_electronics"
build_type = AUTOLATHE | PROTOLATHE
materials = list(MAT_METAL = 50, MAT_GLASS = 50)
build_path = /obj/item/electronics/firealarm
category = list("initial", "Electronics")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/desttagger
name = "Destination Tagger"
id = "desttagger"
build_type = AUTOLATHE
materials = list(MAT_METAL = 250, MAT_GLASS = 125)
build_path = /obj/item/destTagger
category = list("initial", "Electronics")
/datum/design/handlabeler
name = "Hand Labeler"
id = "handlabel"
build_type = AUTOLATHE
materials = list(MAT_METAL = 150, MAT_GLASS = 125)
build_path = /obj/item/hand_labeler
category = list("initial", "Electronics")
/datum/design/miniature_power_cell
name = "Light Fixture Battery"
id = "miniature_power_cell"
build_type = AUTOLATHE
materials = list(MAT_GLASS = 20)
build_path = /obj/item/stock_parts/cell/emergency_light
category = list("initial", "Electronics")
@@ -0,0 +1,179 @@
///////////////////////////////////
//////////Autolathe Designs ///////
///////////////////////////////////
////////////////
////Dinnerware//
////////////////
/datum/design/kitchen_knife
name = "Kitchen Knife"
id = "kitchen_knife"
build_type = AUTOLATHE
materials = list(MAT_METAL = 12000)
build_path = /obj/item/kitchen/knife
category = list("initial","Dinnerware")
/datum/design/fork
name = "Fork"
id = "fork"
build_type = AUTOLATHE
materials = list(MAT_METAL = 80)
build_path = /obj/item/kitchen/fork
category = list("initial","Dinnerware")
/datum/design/tray
name = "Tray"
id = "tray"
build_type = AUTOLATHE
materials = list(MAT_METAL = 3000)
build_path = /obj/item/storage/bag/tray
category = list("initial","Dinnerware")
/datum/design/bowl
name = "Bowl"
id = "bowl"
build_type = AUTOLATHE
materials = list(MAT_GLASS = 500)
build_path = /obj/item/reagent_containers/glass/bowl
category = list("initial","Dinnerware")
/datum/design/drinking_glass
name = "Drinking Glass"
id = "drinking_glass"
build_type = AUTOLATHE
materials = list(MAT_GLASS = 500)
build_path = /obj/item/reagent_containers/food/drinks/drinkingglass
category = list("initial","Dinnerware")
/datum/design/shot_glass
name = "Shot Glass"
id = "shot_glass"
build_type = AUTOLATHE
materials = list(MAT_GLASS = 100)
build_path = /obj/item/reagent_containers/food/drinks/drinkingglass/shotglass
category = list("initial","Dinnerware")
/datum/design/shaker
name = "Shaker"
id = "shaker"
build_type = AUTOLATHE
materials = list(MAT_METAL = 1500)
build_path = /obj/item/reagent_containers/food/drinks/shaker
category = list("initial","Dinnerware")
////////////
///Medical//
////////////
/datum/design/scalpel
name = "Scalpel"
id = "scalpel"
build_type = AUTOLATHE
materials = list(MAT_METAL = 4000, MAT_GLASS = 1000)
build_path = /obj/item/scalpel
category = list("initial", "Medical")
/datum/design/circular_saw
name = "Circular Saw"
id = "circular_saw"
build_type = AUTOLATHE
materials = list(MAT_METAL = 10000, MAT_GLASS = 6000)
build_path = /obj/item/circular_saw
category = list("initial", "Medical")
/datum/design/surgicaldrill
name = "Surgical Drill"
id = "surgicaldrill"
build_type = AUTOLATHE
materials = list(MAT_METAL = 10000, MAT_GLASS = 6000)
build_path = /obj/item/surgicaldrill
category = list("initial", "Medical")
/datum/design/retractor
name = "Retractor"
id = "retractor"
build_type = AUTOLATHE
materials = list(MAT_METAL = 6000, MAT_GLASS = 3000)
build_path = /obj/item/retractor
category = list("initial", "Medical")
/datum/design/cautery
name = "Cautery"
id = "cautery"
build_type = AUTOLATHE
materials = list(MAT_METAL = 2500, MAT_GLASS = 750)
build_path = /obj/item/cautery
category = list("initial", "Medical")
/datum/design/hemostat
name = "Hemostat"
id = "hemostat"
build_type = AUTOLATHE
materials = list(MAT_METAL = 5000, MAT_GLASS = 2500)
build_path = /obj/item/hemostat
category = list("initial", "Medical")
/datum/design/beaker
name = "Beaker"
id = "beaker"
build_type = AUTOLATHE
materials = list(MAT_GLASS = 500)
build_path = /obj/item/reagent_containers/glass/beaker
category = list("initial", "Medical")
/datum/design/large_beaker
name = "Large Beaker"
id = "large_beaker"
build_type = AUTOLATHE
materials = list(MAT_GLASS = 2500)
build_path = /obj/item/reagent_containers/glass/beaker/large
category = list("initial", "Medical")
/datum/design/healthanalyzer
name = "Health Analyzer"
id = "healthanalyzer"
build_type = AUTOLATHE | PROTOLATHE
materials = list(MAT_METAL = 500, MAT_GLASS = 50)
build_path = /obj/item/healthanalyzer
category = list("initial", "Medical")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
/datum/design/pillbottle
name = "Pill Bottle"
id = "pillbottle"
build_type = AUTOLATHE
materials = list(MAT_METAL = 20, MAT_GLASS = 100)
build_path = /obj/item/storage/pill_bottle
category = list("initial", "Medical")
/datum/design/syringe
name = "Syringe"
id = "syringe"
build_type = AUTOLATHE
materials = list(MAT_METAL = 10, MAT_GLASS = 20)
build_path = /obj/item/reagent_containers/syringe
category = list("initial", "Medical")
/datum/design/health_sensor
name = "Health Sensor"
id = "health_sensor"
build_type = AUTOLATHE
materials = list(MAT_METAL = 800, MAT_GLASS = 200)
build_path = /obj/item/assembly/health
category = list("initial", "Medical")
/datum/design/hypovialsmall
name = "Hypovial"
id = "hypovial"
build_type = AUTOLATHE
materials = list(MAT_METAL = 500)
build_path = /obj/item/reagent_containers/glass/bottle/vial/small
category = list("initial","Medical")
/datum/design/hypoviallarge
name = "Large Hypovial"
id = "large_hypovial"
build_type = AUTOLATHE
materials = list(MAT_METAL = 2500)
build_path = /obj/item/reagent_containers/glass/bottle/vial/large
category = list("initial","Medical")
@@ -0,0 +1,186 @@
///////////////////////////////////
//////////Autolathe Designs ///////
///////////////////////////////////
/////////////
////Secgear//
/////////////
/datum/design/beanbag_slug
name = "Beanbag Slug"
id = "beanbag_slug"
build_type = AUTOLATHE
materials = list(MAT_METAL = 250)
build_path = /obj/item/ammo_casing/shotgun/beanbag
category = list("initial", "Security")
/datum/design/rubbershot
name = "Rubber Shot"
id = "rubber_shot"
build_type = AUTOLATHE
materials = list(MAT_METAL = 4000)
build_path = /obj/item/ammo_casing/shotgun/rubbershot
category = list("initial", "Security")
/datum/design/c38
name = "Speed Loader (.38 rubber)"
id = "c38"
build_type = AUTOLATHE
materials = list(MAT_METAL = 20000)
build_path = /obj/item/ammo_box/c38
category = list("initial", "Security")
/////////////////
///Hacked Gear //
/////////////////
/datum/design/large_welding_tool
name = "Industrial Welding Tool"
id = "large_welding_tool"
build_type = AUTOLATHE
materials = list(MAT_METAL = 70, MAT_GLASS = 60)
build_path = /obj/item/weldingtool/largetank
category = list("hacked", "Tools")
/datum/design/flamethrower
name = "Flamethrower"
id = "flamethrower"
build_type = AUTOLATHE
materials = list(MAT_METAL = 500)
build_path = /obj/item/flamethrower/full
category = list("hacked", "Security")
/datum/design/rcd
name = "Rapid Construction Device (RCD)"
id = "rcd"
build_type = AUTOLATHE
materials = list(MAT_METAL = 30000)
build_path = /obj/item/construction/rcd
category = list("hacked", "Construction")
/datum/design/rpd
name = "Rapid Pipe Dispenser (RPD)"
id = "rpd"
build_type = AUTOLATHE
materials = list(MAT_METAL = 75000, MAT_GLASS = 37500)
build_path = /obj/item/pipe_dispenser
category = list("hacked", "Construction")
/datum/design/handcuffs
name = "Handcuffs"
id = "handcuffs"
build_type = AUTOLATHE
materials = list(MAT_METAL = 500)
build_path = /obj/item/restraints/handcuffs
category = list("hacked", "Security")
/datum/design/receiver
name = "Modular Receiver"
id = "receiver"
build_type = AUTOLATHE
materials = list(MAT_METAL = 15000)
build_path = /obj/item/weaponcrafting/receiver
category = list("hacked", "Security")
/datum/design/shotgun_slug
name = "Shotgun Slug"
id = "shotgun_slug"
build_type = AUTOLATHE
materials = list(MAT_METAL = 4000)
build_path = /obj/item/ammo_casing/shotgun
category = list("hacked", "Security")
/datum/design/buckshot_shell
name = "Buckshot Shell"
id = "buckshot_shell"
build_type = AUTOLATHE
materials = list(MAT_METAL = 4000)
build_path = /obj/item/ammo_casing/shotgun/buckshot
category = list("hacked", "Security")
/datum/design/shotgun_dart
name = "Shotgun Dart"
id = "shotgun_dart"
build_type = AUTOLATHE
materials = list(MAT_METAL = 4000)
build_path = /obj/item/ammo_casing/shotgun/dart
category = list("hacked", "Security")
/datum/design/incendiary_slug
name = "Incendiary Slug"
id = "incendiary_slug"
build_type = AUTOLATHE
materials = list(MAT_METAL = 4000)
build_path = /obj/item/ammo_casing/shotgun/incendiary
category = list("hacked", "Security")
/datum/design/riot_dart
name = "Foam Riot Dart"
id = "riot_dart"
build_type = AUTOLATHE
materials = list(MAT_METAL = 1000) //Discount for making individually - no box = less metal!
build_path = /obj/item/ammo_casing/caseless/foam_dart/riot
category = list("hacked", "Security")
/datum/design/riot_darts
name = "Foam Riot Dart Box"
id = "riot_darts"
build_type = AUTOLATHE
materials = list(MAT_METAL = 50000) //Comes with 40 darts
build_path = /obj/item/ammo_box/foambox/riot
category = list("hacked", "Security")
/datum/design/a357
name = "Speed Loader (.357)"
id = "a357"
build_type = AUTOLATHE
materials = list(MAT_METAL = 30000)
build_path = /obj/item/ammo_box/a357
category = list("hacked", "Security")
/datum/design/c10mm
name = "Ammo Box (10mm)"
id = "c10mm"
build_type = AUTOLATHE
materials = list(MAT_METAL = 30000)
build_path = /obj/item/ammo_box/c10mm
category = list("hacked", "Security")
/datum/design/c45
name = "Ammo Box (.45)"
id = "c45"
build_type = AUTOLATHE
materials = list(MAT_METAL = 30000)
build_path = /obj/item/ammo_box/c45
category = list("hacked", "Security")
/datum/design/c9mm
name = "Ammo Box (9mm)"
id = "c9mm"
build_type = AUTOLATHE
materials = list(MAT_METAL = 30000)
build_path = /obj/item/ammo_box/c9mm
category = list("hacked", "Security")
/datum/design/electropack
name = "Electropack"
id = "electropack"
build_type = AUTOLATHE
materials = list(MAT_METAL = 10000, MAT_GLASS = 2500)
build_path = /obj/item/electropack
category = list("hacked", "Security")
/datum/design/cleaver
name = "Butcher's Cleaver"
id = "cleaver"
build_type = AUTOLATHE
materials = list(MAT_METAL = 18000)
build_path = /obj/item/kitchen/knife/butcher
category = list("hacked", "Dinnerware")
/datum/design/foilhat
name = "Tinfoil Hat"
id = "tinfoil_hat"
build_type = AUTOLATHE
materials = list(MAT_METAL = 5500)
build_path = /obj/item/clothing/head/foilhat
category = list("hacked", "Misc")
@@ -0,0 +1,251 @@
///////////////////////////////////
//////////Autolathe Designs ///////
///////////////////////////////////
/////////////
////T-Comms//
/////////////
/datum/design/signaler
name = "Remote Signaling Device"
id = "signaler"
build_type = AUTOLATHE
materials = list(MAT_METAL = 400, MAT_GLASS = 120)
build_path = /obj/item/assembly/signaler
category = list("initial", "T-Comm")
/datum/design/radio_headset
name = "Radio Headset"
id = "radio_headset"
build_type = AUTOLATHE
materials = list(MAT_METAL = 75)
build_path = /obj/item/radio/headset
category = list("initial", "T-Comm")
/datum/design/bounced_radio
name = "Station Bounced Radio"
id = "bounced_radio"
build_type = AUTOLATHE
materials = list(MAT_METAL = 75, MAT_GLASS = 25)
build_path = /obj/item/radio/off
category = list("initial", "T-Comm")
/datum/design/intercom_frame
name = "Intercom Frame"
id = "intercom_frame"
build_type = AUTOLATHE
materials = list(MAT_METAL = 75, MAT_GLASS = 25)
build_path = /obj/item/wallframe/intercom
category = list("initial", "T-Comm")
/////////////
////MISC/////
/////////////
/datum/design/camera
name = "Camera"
id = "camera"
build_type = AUTOLATHE
materials = list(MAT_METAL = 50, MAT_GLASS = 100)
build_path = /obj/item/camera
category = list("initial", "Misc")
/datum/design/camera_film
name = "Camera Film Cartridge"
id = "camera_film"
build_type = AUTOLATHE
materials = list(MAT_METAL = 10, MAT_GLASS = 10)
build_path = /obj/item/camera_film
category = list("initial", "Misc")
/datum/design/earmuffs
name = "Earmuffs"
id = "earmuffs"
build_type = AUTOLATHE
materials = list(MAT_METAL = 500, MAT_GLASS = 500)
build_path = /obj/item/clothing/ears/earmuffs
category = list("initial", "Misc")
/datum/design/pipe_painter
name = "Pipe Painter"
id = "pipe_painter"
build_type = AUTOLATHE
materials = list(MAT_METAL = 5000, MAT_GLASS = 2000)
build_path = /obj/item/pipe_painter
category = list("initial", "Misc")
/datum/design/airlock_painter
name = "Airlock Painter"
id = "airlock_painter"
build_type = AUTOLATHE
materials = list(MAT_METAL = 50, MAT_GLASS = 50)
build_path = /obj/item/airlock_painter
category = list("initial", "Misc")
/datum/design/cultivator
name = "Cultivator"
id = "cultivator"
build_type = AUTOLATHE
materials = list(MAT_METAL=50)
build_path = /obj/item/cultivator
category = list("initial","Misc")
/datum/design/plant_analyzer
name = "Plant Analyzer"
id = "plant_analyzer"
build_type = AUTOLATHE
materials = list(MAT_METAL = 30, MAT_GLASS = 20)
build_path = /obj/item/plant_analyzer
category = list("initial","Misc")
/datum/design/shovel
name = "Shovel"
id = "shovel"
build_type = AUTOLATHE
materials = list(MAT_METAL = 50)
build_path = /obj/item/shovel
category = list("initial","Misc")
/datum/design/spade
name = "Spade"
id = "spade"
build_type = AUTOLATHE
materials = list(MAT_METAL = 50)
build_path = /obj/item/shovel/spade
category = list("initial","Misc")
/datum/design/hatchet
name = "Hatchet"
id = "hatchet"
build_type = AUTOLATHE
materials = list(MAT_METAL = 15000)
build_path = /obj/item/hatchet
category = list("initial","Misc")
/datum/design/recorder
name = "Universal Recorder"
id = "recorder"
build_type = AUTOLATHE
materials = list(MAT_METAL = 60, MAT_GLASS = 30)
build_path = /obj/item/taperecorder/empty
category = list("initial", "Misc")
/datum/design/tape
name = "Tape"
id = "tape"
build_type = AUTOLATHE
materials = list(MAT_METAL = 20, MAT_GLASS = 5)
build_path = /obj/item/tape/random
category = list("initial", "Misc")
/datum/design/igniter
name = "Igniter"
id = "igniter"
build_type = AUTOLATHE
materials = list(MAT_METAL = 500, MAT_GLASS = 50)
build_path = /obj/item/assembly/igniter
category = list("initial", "Misc")
/datum/design/infrared_emitter
name = "Infrared Emitter"
id = "infrared_emitter"
build_type = AUTOLATHE
materials = list(MAT_METAL = 1000, MAT_GLASS = 500)
build_path = /obj/item/assembly/infra
category = list("initial", "Misc")
/datum/design/timer
name = "Timer"
id = "timer"
build_type = AUTOLATHE
materials = list(MAT_METAL = 500, MAT_GLASS = 50)
build_path = /obj/item/assembly/timer
category = list("initial", "Misc")
/datum/design/voice_analyser
name = "Voice Analyser"
id = "voice_analyser"
build_type = AUTOLATHE
materials = list(MAT_METAL = 500, MAT_GLASS = 50)
build_path = /obj/item/assembly/voice
category = list("initial", "Misc")
/datum/design/prox_sensor
name = "Proximity Sensor"
id = "prox_sensor"
build_type = AUTOLATHE
materials = list(MAT_METAL = 800, MAT_GLASS = 200)
build_path = /obj/item/assembly/prox_sensor
category = list("initial", "Misc")
/datum/design/foam_dart
name = "Box of Foam Darts"
id = "foam_dart"
build_type = AUTOLATHE
materials = list(MAT_METAL = 500)
build_path = /obj/item/ammo_box/foambox
category = list("initial", "Misc")
/datum/design/laptop
name = "Laptop Frame"
id = "laptop"
build_type = AUTOLATHE
materials = list(MAT_METAL = 10000, MAT_GLASS = 1000)
build_path = /obj/item/modular_computer/laptop/buildable
category = list("initial","Misc")
/datum/design/tablet
name = "Tablet Frame"
id = "tablet"
build_type = AUTOLATHE
materials = list(MAT_METAL = 2000, MAT_GLASS = 1000)
build_path = /obj/item/modular_computer/tablet
category = list("initial","Misc")
/datum/design/slime_scanner
name = "Slime Scanner"
id = "slime_scanner"
build_type = AUTOLATHE
materials = list(MAT_METAL = 300, MAT_GLASS = 200)
build_path = /obj/item/slime_scanner
category = list("initial", "Misc")
/datum/design/pet_carrier
name = "Pet Carrier"
id = "pet_carrier"
build_type = AUTOLATHE
materials = list(MAT_METAL = 7500, MAT_GLASS = 100)
build_path = /obj/item/pet_carrier
category = list("initial", "Misc")
/datum/design/packageWrap
name = "Package Wrapping"
id = "packagewrap"
build_type = AUTOLATHE
materials = list(MAT_METAL = 200, MAT_GLASS = 200)
build_path = /obj/item/stack/packageWrap
category = list("initial", "Misc")
maxstack = 30
/datum/design/holodisk
name = "Holodisk"
id = "holodisk"
build_type = AUTOLATHE
materials = list(MAT_METAL = 100, MAT_GLASS = 100)
build_path = /obj/item/disk/holodisk
category = list("initial", "Misc")
/datum/design/lock_collar
name = "Lockable Collar"
id = "lock_collar"
build_type = AUTOLATHE
materials = list(MAT_METAL = 1200, MAT_GLASS = 100)
build_path = /obj/item/clothing/neck/petcollar/locked
category = list("initial", "Misc")
/datum/design/collar_key
name = "Collar Key"
id = "collar_key"
build_type = AUTOLATHE
materials = list(MAT_METAL = 300, MAT_GLASS = 150)
build_path = /obj/item/key/collar
category = list("initial", "Misc")
@@ -0,0 +1,150 @@
///////////////////////////////////
//////////Autolathe Designs ///////
///////////////////////////////////
///////////
///Tools //
///////////
/datum/design/bucket
name = "Bucket"
id = "bucket"
build_type = AUTOLATHE
materials = list(MAT_METAL = 200)
build_path = /obj/item/reagent_containers/glass/bucket
category = list("initial","Tools")
/datum/design/crowbar
name = "Pocket Crowbar"
id = "crowbar"
build_type = AUTOLATHE
materials = list(MAT_METAL = 50)
build_path = /obj/item/crowbar
category = list("initial","Tools")
/datum/design/flashlight
name = "Flashlight"
id = "flashlight"
build_type = AUTOLATHE
materials = list(MAT_METAL = 50, MAT_GLASS = 20)
build_path = /obj/item/flashlight
category = list("initial","Tools")
/datum/design/extinguisher
name = "Fire Extinguisher"
id = "extinguisher"
build_type = AUTOLATHE
materials = list(MAT_METAL = 90)
build_path = /obj/item/extinguisher
category = list("initial","Tools")
/datum/design/pocketfireextinguisher
name = "Pocket Fire Extinguisher"
id = "pocketfireextinguisher"
build_type = AUTOLATHE
materials = list(MAT_METAL = 50, MAT_GLASS = 40)
build_path = /obj/item/extinguisher/mini
category = list("initial","Tools")
/datum/design/multitool
name = "Multitool"
id = "multitool"
build_type = AUTOLATHE
materials = list(MAT_METAL = 50, MAT_GLASS = 20)
build_path = /obj/item/multitool
category = list("initial","Tools")
/datum/design/analyzer
name = "Analyzer"
id = "analyzer"
build_type = AUTOLATHE
materials = list(MAT_METAL = 30, MAT_GLASS = 20)
build_path = /obj/item/analyzer
category = list("initial","Tools")
/datum/design/tscanner
name = "T-Ray Scanner"
id = "tscanner"
build_type = AUTOLATHE
materials = list(MAT_METAL = 150)
build_path = /obj/item/t_scanner
category = list("initial","Tools")
/datum/design/weldingtool
name = "Welding Tool"
id = "welding_tool"
build_type = AUTOLATHE
materials = list(MAT_METAL = 70, MAT_GLASS = 20)
build_path = /obj/item/weldingtool
category = list("initial","Tools")
/datum/design/mini_weldingtool
name = "Emergency Welding Tool"
id = "mini_welding_tool"
build_type = AUTOLATHE
materials = list(MAT_METAL = 30, MAT_GLASS = 10)
build_path = /obj/item/weldingtool/mini
category = list("initial","Tools")
/datum/design/screwdriver
name = "Screwdriver"
id = "screwdriver"
build_type = AUTOLATHE
materials = list(MAT_METAL = 75)
build_path = /obj/item/screwdriver
category = list("initial","Tools")
/datum/design/wirecutters
name = "Wirecutters"
id = "wirecutters"
build_type = AUTOLATHE
materials = list(MAT_METAL = 80)
build_path = /obj/item/wirecutters
category = list("initial","Tools")
/datum/design/wrench
name = "Wrench"
id = "wrench"
build_type = AUTOLATHE
materials = list(MAT_METAL = 150)
build_path = /obj/item/wrench
category = list("initial","Tools")
/datum/design/welding_helmet
name = "Welding Helmet"
id = "welding_helmet"
build_type = AUTOLATHE
materials = list(MAT_METAL = 1750, MAT_GLASS = 400)
build_path = /obj/item/clothing/head/welding
category = list("initial","Tools")
/datum/design/cable_coil
name = "Cable Coil"
id = "cable_coil"
build_type = AUTOLATHE
materials = list(MAT_METAL = 10, MAT_GLASS = 5)
build_path = /obj/item/stack/cable_coil/random
category = list("initial","Tools")
maxstack = 30
/datum/design/toolbox
name = "Toolbox"
id = "tool_box"
build_type = AUTOLATHE
materials = list(MAT_METAL = 500)
build_path = /obj/item/storage/toolbox
category = list("initial","Tools")
/datum/design/spraycan
name = "Spraycan"
id = "spraycan"
build_type = AUTOLATHE
materials = list(MAT_METAL = 100, MAT_GLASS = 100)
build_path = /obj/item/toy/crayon/spraycan
category = list("initial", "Tools")
/datum/design/geiger
name = "Geiger Counter"
id = "geigercounter"
build_type = AUTOLATHE
materials = list(MAT_METAL = 150, MAT_GLASS = 150)
build_path = /obj/item/geiger_counter
category = list("initial", "Tools")
@@ -196,8 +196,8 @@
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
/datum/design/defib_heal
name = "Defibrillartor Healing disk"
desc = "A disk allowing for greater amounts of healing"
name = "Defibrillator Healing disk"
desc = "An upgrade which increases the healing power of the defibrillator"
id = "defib_heal"
build_type = PROTOLATHE
materials = list(MAT_METAL=16000, MAT_GLASS = 18000, MAT_GOLD = 6000, MAT_SILVER = 6000)
@@ -207,8 +207,8 @@
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
/datum/design/defib_shock
name = "Defibrillartor Anit-Shock Disk"
desc = "A disk that helps agains shocking anyone, other then the intented target"
name = "Defibrillator Anti-Shock Disk"
desc = "A safety upgrade that guarantees only the patient will get shocked"
id = "defib_shock"
build_type = PROTOLATHE
materials = list(MAT_METAL=16000, MAT_GLASS = 18000, MAT_GOLD = 6000, MAT_SILVER = 6000)
@@ -218,8 +218,8 @@
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
/datum/design/defib_decay
name = "Defibrillartor Body-Decay extender Disk"
desc = "A disk that helps defibrillator revive the longer decayed dead"
name = "Defibrillator Body-Decay Extender Disk"
desc = "An upgrade allowing the defibrillator to work on more decayed bodies"
id = "defib_decay"
build_type = PROTOLATHE
materials = list(MAT_METAL=16000, MAT_GLASS = 18000, MAT_GOLD = 16000, MAT_SILVER = 6000, MAT_TITANIUM = 2000)
@@ -229,8 +229,8 @@
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
/datum/design/defib_speed
name = "Defibrllartor Pre-Primer Disk"
desc = "A disk that cuts the time charg time in half for defibrillator use"
name = "Defibrillator Fast Charge Disk"
desc = "An upgrade to the defibrillator capacitors, which let it charge faster"
id = "defib_speed"
build_type = PROTOLATHE
build_path = /obj/item/disk/medical/defib_speed
+2 -2
View File
@@ -102,8 +102,8 @@
/datum/techweb_node/adv_defibrillator_tec
id = "adv_defibrillator_tec"
display_name = "Adv Defibrillator tec"
description = "More ways to bring back the freshly dead."
display_name = "Defibrillator Upgrades"
description = "More ways to bring back the newly dead."
prereq_ids = list("adv_biotech", "exp_surgery", "adv_engi", "adv_power")
design_ids = list("defib_decay", "defib_shock", "defib_heal", "defib_speed")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
+15 -6
View File
@@ -385,6 +385,8 @@
. = list()
var/image_dir = 0
var/icon_gender = (body_gender == FEMALE) ? "f" : "m" //gender of the icon, if applicable
if(dropped)
image_dir = SOUTH
if(dmg_overlay_type)
@@ -393,8 +395,11 @@
if(burnstate)
. += image('icons/mob/dam_mob.dmi', "[dmg_overlay_type]_[body_zone]_0[burnstate]", -DAMAGE_LAYER, image_dir)
if(body_markings && status != BODYPART_ROBOTIC)
if(use_digitigrade == NOT_DIGITIGRADE)
. += image(body_markings_icon, "[body_markings]_[body_zone]", -MARKING_LAYER, image_dir)
if(!use_digitigrade)
if(BODY_ZONE_CHEST)
. += image(body_markings_icon, "[body_markings]_[body_zone]_[icon_gender]", -MARKING_LAYER, image_dir)
else
. += image(body_markings_icon, "[body_markings]_[body_zone]", -MARKING_LAYER, image_dir)
else
. += image(body_markings_icon, "[body_markings]_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir)
@@ -417,8 +422,6 @@
limb.icon_state = "[animal_origin]_[body_zone]"
return
var/icon_gender = (body_gender == FEMALE) ? "f" : "m" //gender of the icon, if applicable
if((body_zone != BODY_ZONE_HEAD && body_zone != BODY_ZONE_CHEST))
should_draw_gender = FALSE
@@ -454,7 +457,10 @@
marking = image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir)
else if(!use_digitigrade)
marking = image(body_markings_icon, "[body_markings]_[body_zone]", -MARKING_LAYER, image_dir)
if(body_zone == BODY_ZONE_CHEST)
marking = image(body_markings_icon, "[body_markings]_[body_zone]_[icon_gender]", -MARKING_LAYER, image_dir)
else
marking = image(body_markings_icon, "[body_markings]_[body_zone]", -MARKING_LAYER, image_dir)
else
marking = image(body_markings_icon, "[body_markings]_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir)
. += marking
@@ -494,7 +500,10 @@
marking = image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir)
else if(!use_digitigrade)
marking = image(body_markings_icon, "[body_markings]_[body_zone]", -MARKING_LAYER, image_dir)
if(body_zone == BODY_ZONE_CHEST)
marking = image(body_markings_icon, "[body_markings]_[body_zone]_[icon_gender]", -MARKING_LAYER, image_dir)
else
marking = image(body_markings_icon, "[body_markings]_[body_zone]", -MARKING_LAYER, image_dir)
else
marking = image(body_markings_icon, "[body_markings]_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir)
. += marking