Merge branch 'master' of https://github.com/Citadel-Station-13/Citadel-Station-13 into greytide-standard-uniform
This commit is contained in:
@@ -101,4 +101,34 @@
|
||||
/datum/gear/santahatg
|
||||
name = "Green Santa Hat"
|
||||
category = SLOT_HEAD
|
||||
path = /obj/item/clothing/head/christmashatg
|
||||
path = /obj/item/clothing/head/christmashatg
|
||||
|
||||
/datum/gear/cowboyhat
|
||||
name = "Cowboy Hat, Brown"
|
||||
category = SLOT_HEAD
|
||||
path = /obj/item/clothing/head/cowboyhat
|
||||
|
||||
/datum/gear/cowboyhat/black
|
||||
name = "Cowboy Hat, Black"
|
||||
category = SLOT_HEAD
|
||||
path = /obj/item/clothing/head/cowboyhat/black
|
||||
|
||||
/datum/gear/cowboyhat/white
|
||||
name = "Cowboy Hat, White"
|
||||
category = SLOT_HEAD
|
||||
path = /obj/item/clothing/head/cowboyhat/white
|
||||
|
||||
/datum/gear/cowboyhat/pink
|
||||
name = "Cowboy Hat, Pink"
|
||||
category = SLOT_HEAD
|
||||
path = /obj/item/clothing/head/cowboyhat/pink
|
||||
|
||||
/datum/gear/cowboyhat/sec
|
||||
name = "Cowboy Hat, Security"
|
||||
category = SLOT_HEAD
|
||||
path = /obj/item/clothing/head/cowboyhat/sec
|
||||
restricted_desc = "Security"
|
||||
restricted_roles = list("Warden","Detective","Security Officer","Head of Security")
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -71,4 +71,14 @@
|
||||
/datum/gear/santaboots
|
||||
name = "Santa Boots"
|
||||
category = SLOT_SHOES
|
||||
path= /obj/item/clothing/shoes/winterboots/santaboots
|
||||
path= /obj/item/clothing/shoes/winterboots/santaboots
|
||||
|
||||
/datum/gear/cowboyboots
|
||||
name = "Cowboy Boots, Brown"
|
||||
category = SLOT_SHOES
|
||||
path = /obj/item/clothing/shoes/cowboyboots
|
||||
|
||||
/datum/gear/cowboyboots/black
|
||||
name = "Cowboy Boots, Black"
|
||||
category = SLOT_SHOES
|
||||
path = /obj/item/clothing/shoes/cowboyboots/black
|
||||
@@ -1,449 +1,449 @@
|
||||
/*
|
||||
DOG BORG EQUIPMENT HERE
|
||||
SLEEPER CODE IS IN game/objects/items/devices/dogborg_sleeper.dm !
|
||||
*/
|
||||
|
||||
/obj/item/dogborg/jaws
|
||||
name = "Dogborg jaws"
|
||||
desc = "The jaws of the debug errors oh god."
|
||||
icon = 'icons/mob/dogborg.dmi'
|
||||
flags_1 = CONDUCT_1
|
||||
force = 1
|
||||
throwforce = 0
|
||||
w_class = 3
|
||||
hitsound = 'sound/weapons/bite.ogg'
|
||||
sharpness = IS_SHARP
|
||||
var/stamtostunconversion = 0.1 //Total stamloss gets multiplied by this value for the help intent hard stun. Resting adds an additional 2x multiplier on top. Keep this low or so help me god.
|
||||
var/stuncooldown = 4 SECONDS //How long it takes before you're able to attempt to stun a target again
|
||||
var/nextstuntime
|
||||
|
||||
/obj/item/dogborg/jaws/examine(mob/user)
|
||||
. = ..()
|
||||
if(!CONFIG_GET(flag/weaken_secborg))
|
||||
. += "<span class='notice'>Use help intent to attempt to non-lethally incapacitate the target by latching on with your maw. This is more effective against exhausted and resting targets.</span>"
|
||||
|
||||
/obj/item/dogborg/jaws/big
|
||||
name = "combat jaws"
|
||||
desc = "The jaws of the law. Very sharp."
|
||||
icon_state = "jaws"
|
||||
force = 15 //Chomp chomp. Crew harm.
|
||||
attack_verb = list("chomped", "bit", "ripped", "mauled", "enforced")
|
||||
stamtostunconversion = 0.2 // 100*0.2*2=40. Stun's just long enough to slap on cuffs with click delay if the target is near hard stamcrit.
|
||||
stuncooldown = 6 SECONDS
|
||||
|
||||
|
||||
/obj/item/dogborg/jaws/small
|
||||
name = "puppy jaws"
|
||||
desc = "Rubberized teeth designed to protect accidental harm. Sharp enough for specialized tasks however."
|
||||
icon_state = "smalljaws"
|
||||
force = 6
|
||||
attack_verb = list("nibbled", "bit", "gnawed", "chomped", "nommed")
|
||||
var/status = 0
|
||||
|
||||
/obj/item/dogborg/jaws/attack(atom/A, mob/living/silicon/robot/user)
|
||||
if(!istype(user))
|
||||
return
|
||||
if(!CONFIG_GET(flag/weaken_secborg) && user.a_intent != INTENT_HARM && istype(A, /mob/living))
|
||||
if(A == user.pulling)
|
||||
to_chat(user, "<span class='warning'>You already have [A] in your jaws.</span>")
|
||||
return
|
||||
if(nextstuntime >= world.time)
|
||||
to_chat(user, "<span class='warning'>Your jaw servos are still recharging.</span>")
|
||||
return
|
||||
nextstuntime = world.time + stuncooldown
|
||||
var/mob/living/M = A
|
||||
var/cachedstam = M.getStaminaLoss()
|
||||
var/totalstuntime = cachedstam * stamtostunconversion * (M.lying ? 2 : 1)
|
||||
if(!M.resting)
|
||||
M.Knockdown(cachedstam*2) //BORK BORK. GET DOWN.
|
||||
M.Stun(totalstuntime)
|
||||
user.do_attack_animation(A, ATTACK_EFFECT_BITE)
|
||||
user.start_pulling(M, TRUE) //Yip yip. Come with.
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
M.visible_message("<span class='danger'>[user] clamps [user.p_their()] [src] onto [M] and latches on!</span>", "<span class='userdanger'>[user] clamps [user.p_their()] [src] onto you and latches on!</span>")
|
||||
if(totalstuntime >= 4 SECONDS)
|
||||
playsound(usr, 'sound/effects/k9_jaw_strong.ogg', 75, FALSE, 2) //Wuff wuff. Big stun.
|
||||
else
|
||||
playsound(usr, 'sound/effects/k9_jaw_weak.ogg', 50, TRUE, -1) //Arf arf. Pls buff.
|
||||
else
|
||||
. = ..()
|
||||
user.do_attack_animation(A, ATTACK_EFFECT_BITE)
|
||||
|
||||
/obj/item/dogborg/jaws/small/attack_self(mob/user)
|
||||
var/mob/living/silicon/robot/R = user
|
||||
if(R.cell && R.cell.charge > 100)
|
||||
if(R.emagged && status == 0)
|
||||
name = "combat jaws"
|
||||
icon_state = "jaws"
|
||||
desc = "The jaws of the law."
|
||||
force = 12
|
||||
attack_verb = list("chomped", "bit", "ripped", "mauled", "enforced")
|
||||
stamtostunconversion = 0.15
|
||||
stuncooldown = 5 SECONDS
|
||||
status = 1
|
||||
to_chat(user, "<span class='notice'>Your jaws are now [status ? "Combat" : "Pup'd"].</span>")
|
||||
else
|
||||
name = "puppy jaws"
|
||||
icon_state = "smalljaws"
|
||||
desc = "The jaws of a small dog."
|
||||
force = initial(force)
|
||||
attack_verb = list("nibbled", "bit", "gnawed", "chomped", "nommed")
|
||||
stamtostunconversion = initial(stamtostunconversion)
|
||||
stuncooldown = initial(stuncooldown)
|
||||
status = 0
|
||||
if(R.emagged)
|
||||
to_chat(user, "<span class='notice'>Your jaws are now [status ? "Combat" : "Pup'd"].</span>")
|
||||
update_icon()
|
||||
|
||||
//Boop
|
||||
|
||||
/obj/item/analyzer/nose
|
||||
name = "boop module"
|
||||
icon = 'icons/mob/dogborg.dmi'
|
||||
icon_state = "nose"
|
||||
desc = "The BOOP module"
|
||||
flags_1 = CONDUCT_1
|
||||
force = 0
|
||||
throwforce = 0
|
||||
attack_verb = list("nuzzles", "pushes", "boops")
|
||||
w_class = 1
|
||||
|
||||
/obj/item/analyzer/nose/attack_self(mob/user)
|
||||
user.visible_message("[user] sniffs around the air.", "<span class='warning'>You sniff the air for gas traces.</span>")
|
||||
|
||||
var/turf/location = user.loc
|
||||
if(!istype(location))
|
||||
return
|
||||
|
||||
var/datum/gas_mixture/environment = location.return_air()
|
||||
|
||||
var/pressure = environment.return_pressure()
|
||||
var/total_moles = environment.total_moles()
|
||||
|
||||
to_chat(user, "<span class='info'><B>Results:</B></span>")
|
||||
if(abs(pressure - ONE_ATMOSPHERE) < 10)
|
||||
to_chat(user, "<span class='info'>Pressure: [round(pressure,0.1)] kPa</span>")
|
||||
else
|
||||
to_chat(user, "<span class='alert'>Pressure: [round(pressure,0.1)] kPa</span>")
|
||||
if(total_moles)
|
||||
var/list/env_gases = environment.gases
|
||||
|
||||
var/o2_concentration = env_gases[/datum/gas/oxygen]/total_moles
|
||||
var/n2_concentration = env_gases[/datum/gas/nitrogen]/total_moles
|
||||
var/co2_concentration = env_gases[/datum/gas/carbon_dioxide]/total_moles
|
||||
var/plasma_concentration = env_gases[/datum/gas/plasma]/total_moles
|
||||
GAS_GARBAGE_COLLECT(environment.gases)
|
||||
|
||||
if(abs(n2_concentration - N2STANDARD) < 20)
|
||||
to_chat(user, "<span class='info'>Nitrogen: [round(n2_concentration*100, 0.01)] %</span>")
|
||||
else
|
||||
to_chat(user, "<span class='alert'>Nitrogen: [round(n2_concentration*100, 0.01)] %</span>")
|
||||
|
||||
if(abs(o2_concentration - O2STANDARD) < 2)
|
||||
to_chat(user, "<span class='info'>Oxygen: [round(o2_concentration*100, 0.01)] %</span>")
|
||||
else
|
||||
to_chat(user, "<span class='alert'>Oxygen: [round(o2_concentration*100, 0.01)] %</span>")
|
||||
|
||||
if(co2_concentration > 0.01)
|
||||
to_chat(user, "<span class='alert'>CO2: [round(co2_concentration*100, 0.01)] %</span>")
|
||||
else
|
||||
to_chat(user, "<span class='info'>CO2: [round(co2_concentration*100, 0.01)] %</span>")
|
||||
|
||||
if(plasma_concentration > 0.005)
|
||||
to_chat(user, "<span class='alert'>Plasma: [round(plasma_concentration*100, 0.01)] %</span>")
|
||||
else
|
||||
to_chat(user, "<span class='info'>Plasma: [round(plasma_concentration*100, 0.01)] %</span>")
|
||||
|
||||
|
||||
for(var/id in env_gases)
|
||||
if(id in GLOB.hardcoded_gases)
|
||||
continue
|
||||
var/gas_concentration = env_gases[id]/total_moles
|
||||
to_chat(user, "<span class='alert'>[GLOB.meta_gas_names[id]]: [round(gas_concentration*100, 0.01)] %</span>")
|
||||
to_chat(user, "<span class='info'>Temperature: [round(environment.temperature-T0C)] °C</span>")
|
||||
|
||||
/obj/item/analyzer/nose/afterattack(atom/target, mob/user, proximity)
|
||||
. = ..()
|
||||
if(!proximity)
|
||||
return
|
||||
do_attack_animation(target, null, src)
|
||||
user.visible_message("<span class='notice'>[user] [pick(attack_verb)] \the [target.name] with their nose!</span>")
|
||||
|
||||
//Delivery
|
||||
/obj/item/storage/bag/borgdelivery
|
||||
name = "fetching storage"
|
||||
desc = "Fetch the thing!"
|
||||
icon = 'icons/mob/dogborg.dmi'
|
||||
icon_state = "dbag"
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
|
||||
/obj/item/storage/bag/borgdelivery/ComponentInitialize()
|
||||
. = ..()
|
||||
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
|
||||
STR.max_w_class = WEIGHT_CLASS_BULKY
|
||||
STR.max_combined_w_class = 5
|
||||
STR.max_items = 1
|
||||
STR.cant_hold = typecacheof(list(/obj/item/disk/nuclear, /obj/item/radio/intercom))
|
||||
|
||||
//Tongue stuff
|
||||
/obj/item/soap/tongue
|
||||
name = "synthetic tongue"
|
||||
desc = "Useful for slurping mess off the floor before affectionally licking the crew members in the face."
|
||||
icon = 'icons/mob/dogborg.dmi'
|
||||
icon_state = "synthtongue"
|
||||
hitsound = 'sound/effects/attackblob.ogg'
|
||||
cleanspeed = 80
|
||||
var/status = 0
|
||||
|
||||
/obj/item/soap/tongue/scrubpup
|
||||
cleanspeed = 25 //slightly faster than a mop.
|
||||
|
||||
/obj/item/soap/tongue/New()
|
||||
..()
|
||||
item_flags |= NOBLUDGEON //No more attack messages
|
||||
|
||||
/obj/item/soap/tongue/attack_self(mob/user)
|
||||
var/mob/living/silicon/robot/R = user
|
||||
if(R.cell && R.cell.charge > 100)
|
||||
if(R.emagged && status == 0)
|
||||
status = !status
|
||||
name = "energized tongue"
|
||||
desc = "Your tongue is energized for dangerously maximum efficency."
|
||||
icon_state = "syndietongue"
|
||||
to_chat(user, "<span class='notice'>Your tongue is now [status ? "Energized" : "Normal"].</span>")
|
||||
cleanspeed = 10 //(nerf'd)tator soap stat
|
||||
else
|
||||
status = 0
|
||||
name = "synthetic tongue"
|
||||
desc = "Useful for slurping mess off the floor before affectionally licking the crew members in the face."
|
||||
icon_state = "synthtongue"
|
||||
cleanspeed = initial(cleanspeed)
|
||||
if(R.emagged)
|
||||
to_chat(user, "<span class='notice'>Your tongue is now [status ? "Energized" : "Normal"].</span>")
|
||||
update_icon()
|
||||
|
||||
/obj/item/soap/tongue/afterattack(atom/target, mob/user, proximity)
|
||||
var/mob/living/silicon/robot/R = user
|
||||
if(!proximity || !check_allowed_items(target))
|
||||
return
|
||||
if(R.client && (target in R.client.screen))
|
||||
to_chat(R, "<span class='warning'>You need to take that [target.name] off before cleaning it!</span>")
|
||||
else if(is_cleanable(target))
|
||||
R.visible_message("[R] begins to lick off \the [target.name].", "<span class='warning'>You begin to lick off \the [target.name]...</span>")
|
||||
if(do_after(R, src.cleanspeed, target = target))
|
||||
if(!in_range(src, target)) //Proximity is probably old news by now, do a new check.
|
||||
return //If they moved away, you can't eat them.
|
||||
to_chat(R, "<span class='notice'>You finish licking off \the [target.name].</span>")
|
||||
qdel(target)
|
||||
R.cell.give(50)
|
||||
else if(isobj(target)) //hoo boy. danger zone man
|
||||
if(istype(target,/obj/item/trash))
|
||||
R.visible_message("[R] nibbles away at \the [target.name].", "<span class='warning'>You begin to nibble away at \the [target.name]...</span>")
|
||||
if(!do_after(R, src.cleanspeed, target = target))
|
||||
return //If they moved away, you can't eat them.
|
||||
to_chat(R, "<span class='notice'>You finish off \the [target.name].</span>")
|
||||
qdel(target)
|
||||
R.cell.give(250)
|
||||
return
|
||||
if(istype(target,/obj/item/stock_parts/cell))
|
||||
R.visible_message("[R] begins cramming \the [target.name] down its throat.", "<span class='warning'>You begin cramming \the [target.name] down your throat...</span>")
|
||||
if(!do_after(R, 50, target = target))
|
||||
return //If they moved away, you can't eat them.
|
||||
to_chat(R, "<span class='notice'>You finish off \the [target.name].</span>")
|
||||
var/obj/item/stock_parts/cell/C = target
|
||||
R.cell.charge = R.cell.charge + (C.charge / 3) //Instant full cell upgrades op idgaf
|
||||
qdel(target)
|
||||
return
|
||||
var/obj/item/I = target //HAHA FUCK IT, NOT LIKE WE ALREADY HAVE A SHITTON OF WAYS TO REMOVE SHIT
|
||||
if(!I.anchored && R.emagged)
|
||||
R.visible_message("[R] begins chewing up \the [target.name]. Looks like it's trying to loophole around its diet restriction!", "<span class='warning'>You begin chewing up \the [target.name]...</span>")
|
||||
if(!do_after(R, 100, target = I)) //Nerf dat time yo
|
||||
return //If they moved away, you can't eat them.
|
||||
visible_message("<span class='warning'>[R] chews up \the [target.name] and cleans off the debris!</span>")
|
||||
to_chat(R, "<span class='notice'>You finish off \the [target.name].</span>")
|
||||
qdel(I)
|
||||
R.cell.give(500)
|
||||
return
|
||||
R.visible_message("[R] begins to lick \the [target.name] clean...", "<span class='notice'>You begin to lick \the [target.name] clean...</span>")
|
||||
else if(ishuman(target))
|
||||
var/mob/living/L = target
|
||||
if(status == 0 && check_zone(R.zone_selected) == "head")
|
||||
R.visible_message("<span class='warning'>\the [R] affectionally licks \the [L]'s face!</span>", "<span class='notice'>You affectionally lick \the [L]'s face!</span>")
|
||||
playsound(src.loc, 'sound/effects/attackblob.ogg', 50, 1)
|
||||
if(istype(L) && L.fire_stacks > 0)
|
||||
L.adjust_fire_stacks(-10)
|
||||
return
|
||||
else if(status == 0)
|
||||
R.visible_message("<span class='warning'>\the [R] affectionally licks \the [L]!</span>", "<span class='notice'>You affectionally lick \the [L]!</span>")
|
||||
playsound(src.loc, 'sound/effects/attackblob.ogg', 50, 1)
|
||||
if(istype(L) && L.fire_stacks > 0)
|
||||
L.adjust_fire_stacks(-10)
|
||||
return
|
||||
else
|
||||
if(R.cell.charge <= 800)
|
||||
to_chat(R, "Insufficent Power!")
|
||||
return
|
||||
L.Stun(4) // normal stunbaton is force 7 gimme a break good sir!
|
||||
L.Knockdown(80)
|
||||
L.apply_effect(EFFECT_STUTTER, 4)
|
||||
L.visible_message("<span class='danger'>[R] has shocked [L] with its tongue!</span>", \
|
||||
"<span class='userdanger'>[R] has shocked you with its tongue!</span>")
|
||||
playsound(loc, 'sound/weapons/Egloves.ogg', 50, 1, -1)
|
||||
R.cell.use(666)
|
||||
log_combat(R, L, "tongue stunned")
|
||||
|
||||
else if(istype(target, /obj/structure/window))
|
||||
R.visible_message("[R] begins to lick \the [target.name] clean...", "<span class='notice'>You begin to lick \the [target.name] clean...</span>")
|
||||
if(do_after(user, src.cleanspeed, target = target))
|
||||
to_chat(user, "<span class='notice'>You clean \the [target.name].</span>")
|
||||
target.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
|
||||
target.set_opacity(initial(target.opacity))
|
||||
else
|
||||
R.visible_message("[R] begins to lick \the [target.name] clean...", "<span class='notice'>You begin to lick \the [target.name] clean...</span>")
|
||||
if(do_after(user, src.cleanspeed, target = target))
|
||||
to_chat(user, "<span class='notice'>You clean \the [target.name].</span>")
|
||||
var/obj/effect/decal/cleanable/C = locate() in target
|
||||
qdel(C)
|
||||
target.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
|
||||
SEND_SIGNAL(target, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_MEDIUM)
|
||||
target.wash_cream()
|
||||
return
|
||||
|
||||
//Nerfed tongue for flavour reasons (haha geddit?). Used for aux skins for regular borgs
|
||||
/obj/item/soap/tongue/flavour
|
||||
desc = "For giving affectionate kisses."
|
||||
|
||||
/obj/item/soap/tongue/flavour/attack_self(mob/user)
|
||||
return
|
||||
|
||||
/obj/item/soap/tongue/flavour/afterattack(atom/target, mob/user, proximity)
|
||||
if(!proximity)
|
||||
return
|
||||
var/mob/living/silicon/robot/R = user
|
||||
if(ishuman(target))
|
||||
var/mob/living/L = target
|
||||
if(status == 0 && check_zone(R.zone_selected) == "head")
|
||||
R.visible_message("<span class='warning'>\the [R] affectionally licks \the [L]'s face!</span>", "<span class='notice'>You affectionally lick \the [L]'s face!</span>")
|
||||
playsound(src.loc, 'sound/effects/attackblob.ogg', 50, 1)
|
||||
return
|
||||
else if(status == 0)
|
||||
R.visible_message("<span class='warning'>\the [R] affectionally licks \the [L]!</span>", "<span class='notice'>You affectionally lick \the [L]!</span>")
|
||||
playsound(src.loc, 'sound/effects/attackblob.ogg', 50, 1)
|
||||
return
|
||||
|
||||
//Same as above but for noses
|
||||
/obj/item/analyzer/nose/flavour/AltClick(mob/user)
|
||||
return
|
||||
|
||||
/obj/item/analyzer/nose/flavour/attack_self(mob/user)
|
||||
return
|
||||
|
||||
/obj/item/analyzer/nose/flavour/afterattack(atom/target, mob/user, proximity)
|
||||
if(!proximity)
|
||||
return
|
||||
do_attack_animation(target, null, src)
|
||||
user.visible_message("<span class='notice'>[user] [pick(attack_verb)] \the [target.name] with their nose!</span>")
|
||||
|
||||
|
||||
//Dogfood
|
||||
|
||||
/obj/item/trash/rkibble
|
||||
name = "robo kibble"
|
||||
desc = "A novelty bowl of assorted mech fabricator byproducts. Mockingly feed this to the sec-dog to help it recharge."
|
||||
icon = 'icons/mob/dogborg.dmi'
|
||||
icon_state= "kibble"
|
||||
|
||||
// Pounce stuff for K-9
|
||||
|
||||
/obj/item/dogborg/pounce
|
||||
name = "pounce"
|
||||
icon = 'icons/mob/dogborg.dmi'
|
||||
icon_state = "pounce"
|
||||
desc = "Leap at your target to momentarily stun them."
|
||||
force = 0
|
||||
throwforce = 0
|
||||
|
||||
/obj/item/dogborg/pounce/New()
|
||||
..()
|
||||
item_flags |= NOBLUDGEON
|
||||
|
||||
/mob/living/silicon/robot
|
||||
var/leaping = 0
|
||||
var/pounce_cooldown = 0
|
||||
var/pounce_cooldown_time = 30 //Time in deciseconds between pounces
|
||||
var/pounce_spoolup = 5 //Time in deciseconds for the pounce to happen after clicking
|
||||
var/pounce_stamloss_cap = 120 //How much staminaloss pounces alone are capable of bringing a spaceman to
|
||||
var/pounce_stamloss = 80 //Base staminaloss value of the pounce
|
||||
var/leap_at
|
||||
var/disabler
|
||||
var/laser
|
||||
var/sleeper_g
|
||||
var/sleeper_r
|
||||
var/sleeper_nv
|
||||
|
||||
#define MAX_K9_LEAP_DIST 4 //because something's definitely borked the pounce functioning from a distance.
|
||||
|
||||
/obj/item/dogborg/pounce/afterattack(atom/A, mob/user)
|
||||
var/mob/living/silicon/robot/R = user
|
||||
if(R && (world.time >= R.pounce_cooldown))
|
||||
R.pounce_cooldown = world.time + R.pounce_cooldown_time
|
||||
to_chat(R, "<span class ='warning'>Your targeting systems lock on to [A]...</span>")
|
||||
playsound(R, 'sound/effects/servostep.ogg', 100, TRUE)
|
||||
addtimer(CALLBACK(R, /mob/living/silicon/robot.proc/leap_at, A), R.pounce_spoolup)
|
||||
else if(R && (world.time < R.pounce_cooldown))
|
||||
to_chat(R, "<span class='danger'>Your leg actuators are still recharging!</span>")
|
||||
|
||||
/mob/living/silicon/robot/proc/leap_at(atom/A)
|
||||
if(leaping || stat || buckled || lying)
|
||||
return
|
||||
|
||||
if(!has_gravity(src) || !has_gravity(A))
|
||||
to_chat(src,"<span class='danger'>It is unsafe to leap without gravity!</span>")
|
||||
//It's also extremely buggy visually, so it's balance+bugfix
|
||||
return
|
||||
|
||||
if(cell.charge <= 750)
|
||||
to_chat(src,"<span class='danger'>Insufficent reserves for jump actuators!</span>")
|
||||
return
|
||||
|
||||
else
|
||||
leaping = 1
|
||||
weather_immunities += "lava"
|
||||
pixel_y = 10
|
||||
update_icons()
|
||||
throw_at(A, MAX_K9_LEAP_DIST, 1, spin=0, diagonals_first = 1)
|
||||
cell.use(750) //Less than a stunbaton since stunbatons hit everytime.
|
||||
playsound(src, 'sound/effects/stealthoff.ogg', 25, TRUE, -1)
|
||||
weather_immunities -= "lava"
|
||||
|
||||
/mob/living/silicon/robot/throw_impact(atom/A)
|
||||
|
||||
if(!leaping)
|
||||
return ..()
|
||||
|
||||
if(A)
|
||||
if(isliving(A))
|
||||
var/mob/living/L = A
|
||||
if(!L.check_shields(0, "the [name]", src, attack_type = LEAP_ATTACK))
|
||||
L.visible_message("<span class ='danger'>[src] pounces on [L]!</span>", "<span class ='userdanger'>[src] pounces on you!</span>")
|
||||
L.Knockdown(iscarbon(L) ? 60 : 45, override_stamdmg = CLAMP(pounce_stamloss, 0, pounce_stamloss_cap-L.getStaminaLoss())) // Temporary. If someone could rework how dogborg pounces work to accomodate for combat changes, that'd be nice.
|
||||
playsound(src, 'sound/weapons/Egloves.ogg', 50, 1)
|
||||
sleep(2)//Runtime prevention (infinite bump() calls on hulks)
|
||||
step_towards(src,L)
|
||||
log_combat(src, L, "borg pounced")
|
||||
else
|
||||
Knockdown(15, 1, 1)
|
||||
|
||||
pounce_cooldown = !pounce_cooldown
|
||||
spawn(pounce_cooldown_time) //3s by default
|
||||
pounce_cooldown = !pounce_cooldown
|
||||
else if(A.density && !A.CanPass(src))
|
||||
visible_message("<span class ='danger'>[src] smashes into [A]!</span>", "<span class ='userdanger'>You smash into [A]!</span>")
|
||||
playsound(src, 'sound/items/trayhit1.ogg', 50, 1)
|
||||
Knockdown(15, 1, 1)
|
||||
|
||||
if(leaping)
|
||||
leaping = 0
|
||||
pixel_y = initial(pixel_y)
|
||||
update_icons()
|
||||
update_canmove()
|
||||
/*
|
||||
DOG BORG EQUIPMENT HERE
|
||||
SLEEPER CODE IS IN game/objects/items/devices/dogborg_sleeper.dm !
|
||||
*/
|
||||
|
||||
/obj/item/dogborg/jaws
|
||||
name = "Dogborg jaws"
|
||||
desc = "The jaws of the debug errors oh god."
|
||||
icon = 'icons/mob/dogborg.dmi'
|
||||
flags_1 = CONDUCT_1
|
||||
force = 1
|
||||
throwforce = 0
|
||||
w_class = 3
|
||||
hitsound = 'sound/weapons/bite.ogg'
|
||||
sharpness = IS_SHARP
|
||||
var/stamtostunconversion = 0.1 //Total stamloss gets multiplied by this value for the help intent hard stun. Resting adds an additional 2x multiplier on top. Keep this low or so help me god.
|
||||
var/stuncooldown = 4 SECONDS //How long it takes before you're able to attempt to stun a target again
|
||||
var/nextstuntime
|
||||
|
||||
/obj/item/dogborg/jaws/examine(mob/user)
|
||||
. = ..()
|
||||
if(!CONFIG_GET(flag/weaken_secborg))
|
||||
. += "<span class='notice'>Use help intent to attempt to non-lethally incapacitate the target by latching on with your maw. This is more effective against exhausted and resting targets.</span>"
|
||||
|
||||
/obj/item/dogborg/jaws/big
|
||||
name = "combat jaws"
|
||||
desc = "The jaws of the law. Very sharp."
|
||||
icon_state = "jaws"
|
||||
force = 15 //Chomp chomp. Crew harm.
|
||||
attack_verb = list("chomped", "bit", "ripped", "mauled", "enforced")
|
||||
stamtostunconversion = 0.2 // 100*0.2*2=40. Stun's just long enough to slap on cuffs with click delay if the target is near hard stamcrit.
|
||||
stuncooldown = 6 SECONDS
|
||||
|
||||
|
||||
/obj/item/dogborg/jaws/small
|
||||
name = "puppy jaws"
|
||||
desc = "Rubberized teeth designed to protect accidental harm. Sharp enough for specialized tasks however."
|
||||
icon_state = "smalljaws"
|
||||
force = 6
|
||||
attack_verb = list("nibbled", "bit", "gnawed", "chomped", "nommed")
|
||||
var/status = 0
|
||||
|
||||
/obj/item/dogborg/jaws/attack(atom/A, mob/living/silicon/robot/user)
|
||||
if(!istype(user))
|
||||
return
|
||||
if(!CONFIG_GET(flag/weaken_secborg) && user.a_intent != INTENT_HARM && istype(A, /mob/living))
|
||||
if(A == user.pulling)
|
||||
to_chat(user, "<span class='warning'>You already have [A] in your jaws.</span>")
|
||||
return
|
||||
if(nextstuntime >= world.time)
|
||||
to_chat(user, "<span class='warning'>Your jaw servos are still recharging.</span>")
|
||||
return
|
||||
nextstuntime = world.time + stuncooldown
|
||||
var/mob/living/M = A
|
||||
var/cachedstam = M.getStaminaLoss()
|
||||
var/totalstuntime = cachedstam * stamtostunconversion * (M.lying ? 2 : 1)
|
||||
if(!M.resting)
|
||||
M.Knockdown(cachedstam*2) //BORK BORK. GET DOWN.
|
||||
M.Stun(totalstuntime)
|
||||
user.do_attack_animation(A, ATTACK_EFFECT_BITE)
|
||||
user.start_pulling(M, TRUE) //Yip yip. Come with.
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
M.visible_message("<span class='danger'>[user] clamps [user.p_their()] [src] onto [M] and latches on!</span>", "<span class='userdanger'>[user] clamps [user.p_their()] [src] onto you and latches on!</span>")
|
||||
if(totalstuntime >= 4 SECONDS)
|
||||
playsound(usr, 'sound/effects/k9_jaw_strong.ogg', 75, FALSE, 2) //Wuff wuff. Big stun.
|
||||
else
|
||||
playsound(usr, 'sound/effects/k9_jaw_weak.ogg', 50, TRUE, -1) //Arf arf. Pls buff.
|
||||
else
|
||||
. = ..()
|
||||
user.do_attack_animation(A, ATTACK_EFFECT_BITE)
|
||||
|
||||
/obj/item/dogborg/jaws/small/attack_self(mob/user)
|
||||
var/mob/living/silicon/robot/R = user
|
||||
if(R.cell && R.cell.charge > 100)
|
||||
if(R.emagged && status == 0)
|
||||
name = "combat jaws"
|
||||
icon_state = "jaws"
|
||||
desc = "The jaws of the law."
|
||||
force = 12
|
||||
attack_verb = list("chomped", "bit", "ripped", "mauled", "enforced")
|
||||
stamtostunconversion = 0.15
|
||||
stuncooldown = 5 SECONDS
|
||||
status = 1
|
||||
to_chat(user, "<span class='notice'>Your jaws are now [status ? "Combat" : "Pup'd"].</span>")
|
||||
else
|
||||
name = "puppy jaws"
|
||||
icon_state = "smalljaws"
|
||||
desc = "The jaws of a small dog."
|
||||
force = initial(force)
|
||||
attack_verb = list("nibbled", "bit", "gnawed", "chomped", "nommed")
|
||||
stamtostunconversion = initial(stamtostunconversion)
|
||||
stuncooldown = initial(stuncooldown)
|
||||
status = 0
|
||||
if(R.emagged)
|
||||
to_chat(user, "<span class='notice'>Your jaws are now [status ? "Combat" : "Pup'd"].</span>")
|
||||
update_icon()
|
||||
|
||||
//Boop
|
||||
|
||||
/obj/item/analyzer/nose
|
||||
name = "boop module"
|
||||
icon = 'icons/mob/dogborg.dmi'
|
||||
icon_state = "nose"
|
||||
desc = "The BOOP module"
|
||||
flags_1 = CONDUCT_1
|
||||
force = 0
|
||||
throwforce = 0
|
||||
attack_verb = list("nuzzles", "pushes", "boops")
|
||||
w_class = 1
|
||||
|
||||
/obj/item/analyzer/nose/attack_self(mob/user)
|
||||
user.visible_message("[user] sniffs around the air.", "<span class='warning'>You sniff the air for gas traces.</span>")
|
||||
|
||||
var/turf/location = user.loc
|
||||
if(!istype(location))
|
||||
return
|
||||
|
||||
var/datum/gas_mixture/environment = location.return_air()
|
||||
|
||||
var/pressure = environment.return_pressure()
|
||||
var/total_moles = environment.total_moles()
|
||||
|
||||
to_chat(user, "<span class='info'><B>Results:</B></span>")
|
||||
if(abs(pressure - ONE_ATMOSPHERE) < 10)
|
||||
to_chat(user, "<span class='info'>Pressure: [round(pressure,0.1)] kPa</span>")
|
||||
else
|
||||
to_chat(user, "<span class='alert'>Pressure: [round(pressure,0.1)] kPa</span>")
|
||||
if(total_moles)
|
||||
var/list/env_gases = environment.gases
|
||||
|
||||
var/o2_concentration = env_gases[/datum/gas/oxygen]/total_moles
|
||||
var/n2_concentration = env_gases[/datum/gas/nitrogen]/total_moles
|
||||
var/co2_concentration = env_gases[/datum/gas/carbon_dioxide]/total_moles
|
||||
var/plasma_concentration = env_gases[/datum/gas/plasma]/total_moles
|
||||
GAS_GARBAGE_COLLECT(environment.gases)
|
||||
|
||||
if(abs(n2_concentration - N2STANDARD) < 20)
|
||||
to_chat(user, "<span class='info'>Nitrogen: [round(n2_concentration*100, 0.01)] %</span>")
|
||||
else
|
||||
to_chat(user, "<span class='alert'>Nitrogen: [round(n2_concentration*100, 0.01)] %</span>")
|
||||
|
||||
if(abs(o2_concentration - O2STANDARD) < 2)
|
||||
to_chat(user, "<span class='info'>Oxygen: [round(o2_concentration*100, 0.01)] %</span>")
|
||||
else
|
||||
to_chat(user, "<span class='alert'>Oxygen: [round(o2_concentration*100, 0.01)] %</span>")
|
||||
|
||||
if(co2_concentration > 0.01)
|
||||
to_chat(user, "<span class='alert'>CO2: [round(co2_concentration*100, 0.01)] %</span>")
|
||||
else
|
||||
to_chat(user, "<span class='info'>CO2: [round(co2_concentration*100, 0.01)] %</span>")
|
||||
|
||||
if(plasma_concentration > 0.005)
|
||||
to_chat(user, "<span class='alert'>Plasma: [round(plasma_concentration*100, 0.01)] %</span>")
|
||||
else
|
||||
to_chat(user, "<span class='info'>Plasma: [round(plasma_concentration*100, 0.01)] %</span>")
|
||||
|
||||
|
||||
for(var/id in env_gases)
|
||||
if(id in GLOB.hardcoded_gases)
|
||||
continue
|
||||
var/gas_concentration = env_gases[id]/total_moles
|
||||
to_chat(user, "<span class='alert'>[GLOB.meta_gas_names[id]]: [round(gas_concentration*100, 0.01)] %</span>")
|
||||
to_chat(user, "<span class='info'>Temperature: [round(environment.temperature-T0C)] °C</span>")
|
||||
|
||||
/obj/item/analyzer/nose/afterattack(atom/target, mob/user, proximity)
|
||||
. = ..()
|
||||
if(!proximity)
|
||||
return
|
||||
do_attack_animation(target, null, src)
|
||||
user.visible_message("<span class='notice'>[user] [pick(attack_verb)] \the [target.name] with their nose!</span>")
|
||||
|
||||
//Delivery
|
||||
/obj/item/storage/bag/borgdelivery
|
||||
name = "fetching storage"
|
||||
desc = "Fetch the thing!"
|
||||
icon = 'icons/mob/dogborg.dmi'
|
||||
icon_state = "dbag"
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
|
||||
/obj/item/storage/bag/borgdelivery/ComponentInitialize()
|
||||
. = ..()
|
||||
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
|
||||
STR.max_w_class = WEIGHT_CLASS_BULKY
|
||||
STR.max_combined_w_class = 5
|
||||
STR.max_items = 1
|
||||
STR.cant_hold = typecacheof(list(/obj/item/disk/nuclear, /obj/item/radio/intercom))
|
||||
|
||||
//Tongue stuff
|
||||
/obj/item/soap/tongue
|
||||
name = "synthetic tongue"
|
||||
desc = "Useful for slurping mess off the floor before affectionally licking the crew members in the face."
|
||||
icon = 'icons/mob/dogborg.dmi'
|
||||
icon_state = "synthtongue"
|
||||
hitsound = 'sound/effects/attackblob.ogg'
|
||||
cleanspeed = 80
|
||||
var/status = 0
|
||||
|
||||
/obj/item/soap/tongue/scrubpup
|
||||
cleanspeed = 25 //slightly faster than a mop.
|
||||
|
||||
/obj/item/soap/tongue/New()
|
||||
..()
|
||||
item_flags |= NOBLUDGEON //No more attack messages
|
||||
|
||||
/obj/item/soap/tongue/attack_self(mob/user)
|
||||
var/mob/living/silicon/robot/R = user
|
||||
if(R.cell && R.cell.charge > 100)
|
||||
if(R.emagged && status == 0)
|
||||
status = !status
|
||||
name = "energized tongue"
|
||||
desc = "Your tongue is energized for dangerously maximum efficency."
|
||||
icon_state = "syndietongue"
|
||||
to_chat(user, "<span class='notice'>Your tongue is now [status ? "Energized" : "Normal"].</span>")
|
||||
cleanspeed = 10 //(nerf'd)tator soap stat
|
||||
else
|
||||
status = 0
|
||||
name = "synthetic tongue"
|
||||
desc = "Useful for slurping mess off the floor before affectionally licking the crew members in the face."
|
||||
icon_state = "synthtongue"
|
||||
cleanspeed = initial(cleanspeed)
|
||||
if(R.emagged)
|
||||
to_chat(user, "<span class='notice'>Your tongue is now [status ? "Energized" : "Normal"].</span>")
|
||||
update_icon()
|
||||
|
||||
/obj/item/soap/tongue/afterattack(atom/target, mob/user, proximity)
|
||||
var/mob/living/silicon/robot/R = user
|
||||
if(!proximity || !check_allowed_items(target))
|
||||
return
|
||||
if(R.client && (target in R.client.screen))
|
||||
to_chat(R, "<span class='warning'>You need to take that [target.name] off before cleaning it!</span>")
|
||||
else if(is_cleanable(target))
|
||||
R.visible_message("[R] begins to lick off \the [target.name].", "<span class='warning'>You begin to lick off \the [target.name]...</span>")
|
||||
if(do_after(R, src.cleanspeed, target = target))
|
||||
if(!in_range(src, target)) //Proximity is probably old news by now, do a new check.
|
||||
return //If they moved away, you can't eat them.
|
||||
to_chat(R, "<span class='notice'>You finish licking off \the [target.name].</span>")
|
||||
qdel(target)
|
||||
R.cell.give(50)
|
||||
else if(isobj(target)) //hoo boy. danger zone man
|
||||
if(istype(target,/obj/item/trash))
|
||||
R.visible_message("[R] nibbles away at \the [target.name].", "<span class='warning'>You begin to nibble away at \the [target.name]...</span>")
|
||||
if(!do_after(R, src.cleanspeed, target = target))
|
||||
return //If they moved away, you can't eat them.
|
||||
to_chat(R, "<span class='notice'>You finish off \the [target.name].</span>")
|
||||
qdel(target)
|
||||
R.cell.give(250)
|
||||
return
|
||||
if(istype(target,/obj/item/stock_parts/cell))
|
||||
R.visible_message("[R] begins cramming \the [target.name] down its throat.", "<span class='warning'>You begin cramming \the [target.name] down your throat...</span>")
|
||||
if(!do_after(R, 50, target = target))
|
||||
return //If they moved away, you can't eat them.
|
||||
to_chat(R, "<span class='notice'>You finish off \the [target.name].</span>")
|
||||
var/obj/item/stock_parts/cell/C = target
|
||||
R.cell.charge = R.cell.charge + (C.charge / 3) //Instant full cell upgrades op idgaf
|
||||
qdel(target)
|
||||
return
|
||||
var/obj/item/I = target //HAHA FUCK IT, NOT LIKE WE ALREADY HAVE A SHITTON OF WAYS TO REMOVE SHIT
|
||||
if(!I.anchored && R.emagged)
|
||||
R.visible_message("[R] begins chewing up \the [target.name]. Looks like it's trying to loophole around its diet restriction!", "<span class='warning'>You begin chewing up \the [target.name]...</span>")
|
||||
if(!do_after(R, 100, target = I)) //Nerf dat time yo
|
||||
return //If they moved away, you can't eat them.
|
||||
visible_message("<span class='warning'>[R] chews up \the [target.name] and cleans off the debris!</span>")
|
||||
to_chat(R, "<span class='notice'>You finish off \the [target.name].</span>")
|
||||
qdel(I)
|
||||
R.cell.give(500)
|
||||
return
|
||||
R.visible_message("[R] begins to lick \the [target.name] clean...", "<span class='notice'>You begin to lick \the [target.name] clean...</span>")
|
||||
else if(ishuman(target))
|
||||
var/mob/living/L = target
|
||||
if(status == 0 && check_zone(R.zone_selected) == "head")
|
||||
R.visible_message("<span class='warning'>\the [R] affectionally licks \the [L]'s face!</span>", "<span class='notice'>You affectionally lick \the [L]'s face!</span>")
|
||||
playsound(src.loc, 'sound/effects/attackblob.ogg', 50, 1)
|
||||
if(istype(L) && L.fire_stacks > 0)
|
||||
L.adjust_fire_stacks(-10)
|
||||
return
|
||||
else if(status == 0)
|
||||
R.visible_message("<span class='warning'>\the [R] affectionally licks \the [L]!</span>", "<span class='notice'>You affectionally lick \the [L]!</span>")
|
||||
playsound(src.loc, 'sound/effects/attackblob.ogg', 50, 1)
|
||||
if(istype(L) && L.fire_stacks > 0)
|
||||
L.adjust_fire_stacks(-10)
|
||||
return
|
||||
else
|
||||
if(R.cell.charge <= 800)
|
||||
to_chat(R, "Insufficent Power!")
|
||||
return
|
||||
L.Stun(4) // normal stunbaton is force 7 gimme a break good sir!
|
||||
L.Knockdown(80)
|
||||
L.apply_effect(EFFECT_STUTTER, 4)
|
||||
L.visible_message("<span class='danger'>[R] has shocked [L] with its tongue!</span>", \
|
||||
"<span class='userdanger'>[R] has shocked you with its tongue!</span>")
|
||||
playsound(loc, 'sound/weapons/Egloves.ogg', 50, 1, -1)
|
||||
R.cell.use(666)
|
||||
log_combat(R, L, "tongue stunned")
|
||||
|
||||
else if(istype(target, /obj/structure/window))
|
||||
R.visible_message("[R] begins to lick \the [target.name] clean...", "<span class='notice'>You begin to lick \the [target.name] clean...</span>")
|
||||
if(do_after(user, src.cleanspeed, target = target))
|
||||
to_chat(user, "<span class='notice'>You clean \the [target.name].</span>")
|
||||
target.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
|
||||
target.set_opacity(initial(target.opacity))
|
||||
else
|
||||
R.visible_message("[R] begins to lick \the [target.name] clean...", "<span class='notice'>You begin to lick \the [target.name] clean...</span>")
|
||||
if(do_after(user, src.cleanspeed, target = target))
|
||||
to_chat(user, "<span class='notice'>You clean \the [target.name].</span>")
|
||||
var/obj/effect/decal/cleanable/C = locate() in target
|
||||
qdel(C)
|
||||
target.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
|
||||
SEND_SIGNAL(target, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_MEDIUM)
|
||||
target.wash_cream()
|
||||
return
|
||||
|
||||
//Nerfed tongue for flavour reasons (haha geddit?). Used for aux skins for regular borgs
|
||||
/obj/item/soap/tongue/flavour
|
||||
desc = "For giving affectionate kisses."
|
||||
|
||||
/obj/item/soap/tongue/flavour/attack_self(mob/user)
|
||||
return
|
||||
|
||||
/obj/item/soap/tongue/flavour/afterattack(atom/target, mob/user, proximity)
|
||||
if(!proximity)
|
||||
return
|
||||
var/mob/living/silicon/robot/R = user
|
||||
if(ishuman(target))
|
||||
var/mob/living/L = target
|
||||
if(status == 0 && check_zone(R.zone_selected) == "head")
|
||||
R.visible_message("<span class='warning'>\the [R] affectionally licks \the [L]'s face!</span>", "<span class='notice'>You affectionally lick \the [L]'s face!</span>")
|
||||
playsound(src.loc, 'sound/effects/attackblob.ogg', 50, 1)
|
||||
return
|
||||
else if(status == 0)
|
||||
R.visible_message("<span class='warning'>\the [R] affectionally licks \the [L]!</span>", "<span class='notice'>You affectionally lick \the [L]!</span>")
|
||||
playsound(src.loc, 'sound/effects/attackblob.ogg', 50, 1)
|
||||
return
|
||||
|
||||
//Same as above but for noses
|
||||
/obj/item/analyzer/nose/flavour/AltClick(mob/user)
|
||||
return
|
||||
|
||||
/obj/item/analyzer/nose/flavour/attack_self(mob/user)
|
||||
return
|
||||
|
||||
/obj/item/analyzer/nose/flavour/afterattack(atom/target, mob/user, proximity)
|
||||
if(!proximity)
|
||||
return
|
||||
do_attack_animation(target, null, src)
|
||||
user.visible_message("<span class='notice'>[user] [pick(attack_verb)] \the [target.name] with their nose!</span>")
|
||||
|
||||
|
||||
//Dogfood
|
||||
|
||||
/obj/item/trash/rkibble
|
||||
name = "robo kibble"
|
||||
desc = "A novelty bowl of assorted mech fabricator byproducts. Mockingly feed this to the sec-dog to help it recharge."
|
||||
icon = 'icons/mob/dogborg.dmi'
|
||||
icon_state= "kibble"
|
||||
|
||||
// Pounce stuff for K-9
|
||||
|
||||
/obj/item/dogborg/pounce
|
||||
name = "pounce"
|
||||
icon = 'icons/mob/dogborg.dmi'
|
||||
icon_state = "pounce"
|
||||
desc = "Leap at your target to momentarily stun them."
|
||||
force = 0
|
||||
throwforce = 0
|
||||
|
||||
/obj/item/dogborg/pounce/New()
|
||||
..()
|
||||
item_flags |= NOBLUDGEON
|
||||
|
||||
/mob/living/silicon/robot
|
||||
var/leaping = 0
|
||||
var/pounce_cooldown = 0
|
||||
var/pounce_cooldown_time = 30 //Time in deciseconds between pounces
|
||||
var/pounce_spoolup = 5 //Time in deciseconds for the pounce to happen after clicking
|
||||
var/pounce_stamloss_cap = 120 //How much staminaloss pounces alone are capable of bringing a spaceman to
|
||||
var/pounce_stamloss = 80 //Base staminaloss value of the pounce
|
||||
var/leap_at
|
||||
var/disabler
|
||||
var/laser
|
||||
var/sleeper_g
|
||||
var/sleeper_r
|
||||
var/sleeper_nv
|
||||
|
||||
#define MAX_K9_LEAP_DIST 4 //because something's definitely borked the pounce functioning from a distance.
|
||||
|
||||
/obj/item/dogborg/pounce/afterattack(atom/A, mob/user)
|
||||
var/mob/living/silicon/robot/R = user
|
||||
if(R && (world.time >= R.pounce_cooldown))
|
||||
R.pounce_cooldown = world.time + R.pounce_cooldown_time
|
||||
to_chat(R, "<span class ='warning'>Your targeting systems lock on to [A]...</span>")
|
||||
playsound(R, 'sound/effects/servostep.ogg', 100, TRUE)
|
||||
addtimer(CALLBACK(R, /mob/living/silicon/robot.proc/leap_at, A), R.pounce_spoolup)
|
||||
else if(R && (world.time < R.pounce_cooldown))
|
||||
to_chat(R, "<span class='danger'>Your leg actuators are still recharging!</span>")
|
||||
|
||||
/mob/living/silicon/robot/proc/leap_at(atom/A)
|
||||
if(leaping || stat || buckled || lying)
|
||||
return
|
||||
|
||||
if(!has_gravity(src) || !has_gravity(A))
|
||||
to_chat(src,"<span class='danger'>It is unsafe to leap without gravity!</span>")
|
||||
//It's also extremely buggy visually, so it's balance+bugfix
|
||||
return
|
||||
|
||||
if(cell.charge <= 750)
|
||||
to_chat(src,"<span class='danger'>Insufficent reserves for jump actuators!</span>")
|
||||
return
|
||||
|
||||
else
|
||||
leaping = 1
|
||||
weather_immunities += "lava"
|
||||
pixel_y = 10
|
||||
update_icons()
|
||||
throw_at(A, MAX_K9_LEAP_DIST, 1, spin=0, diagonals_first = 1)
|
||||
cell.use(750) //Less than a stunbaton since stunbatons hit everytime.
|
||||
playsound(src, 'sound/effects/stealthoff.ogg', 25, TRUE, -1)
|
||||
weather_immunities -= "lava"
|
||||
|
||||
/mob/living/silicon/robot/throw_impact(atom/A)
|
||||
|
||||
if(!leaping)
|
||||
return ..()
|
||||
|
||||
if(A)
|
||||
if(isliving(A))
|
||||
var/mob/living/L = A
|
||||
if(!L.check_shields(0, "the [name]", src, attack_type = LEAP_ATTACK))
|
||||
L.visible_message("<span class ='danger'>[src] pounces on [L]!</span>", "<span class ='userdanger'>[src] pounces on you!</span>")
|
||||
L.Knockdown(iscarbon(L) ? 60 : 45, override_stamdmg = CLAMP(pounce_stamloss, 0, pounce_stamloss_cap-L.getStaminaLoss())) // Temporary. If someone could rework how dogborg pounces work to accomodate for combat changes, that'd be nice.
|
||||
playsound(src, 'sound/weapons/Egloves.ogg', 50, 1)
|
||||
sleep(2)//Runtime prevention (infinite bump() calls on hulks)
|
||||
step_towards(src,L)
|
||||
log_combat(src, L, "borg pounced")
|
||||
else
|
||||
Knockdown(15, 1, 1)
|
||||
|
||||
pounce_cooldown = !pounce_cooldown
|
||||
spawn(pounce_cooldown_time) //3s by default
|
||||
pounce_cooldown = !pounce_cooldown
|
||||
else if(A.density && !A.CanPass(src))
|
||||
visible_message("<span class ='danger'>[src] smashes into [A]!</span>", "<span class ='userdanger'>You smash into [A]!</span>")
|
||||
playsound(src, 'sound/items/trayhit1.ogg', 50, 1)
|
||||
Knockdown(15, 1, 1)
|
||||
|
||||
if(leaping)
|
||||
leaping = 0
|
||||
pixel_y = initial(pixel_y)
|
||||
update_icons()
|
||||
update_canmove()
|
||||
|
||||
@@ -1,708 +0,0 @@
|
||||
/datum/design/autoylathe
|
||||
build_type = AUTOYLATHE
|
||||
|
||||
/datum/design/autoylathe/mech
|
||||
category = list("initial", "Figurines")
|
||||
|
||||
/datum/design/autoylathe/mech/contraband
|
||||
category = list("hacked", "Figurines")
|
||||
|
||||
/datum/design/autoylathe/figure
|
||||
category = list("initial", "Figurines")
|
||||
|
||||
/datum/design/autoylathe/balloon
|
||||
name = "Empty Water balloon"
|
||||
id = "waterballoon"
|
||||
materials = list(MAT_PLASTIC = 50)
|
||||
build_path = /obj/item/toy/balloon
|
||||
category = list("initial", "Toys")
|
||||
|
||||
/datum/design/autoylathe/spinningtoy
|
||||
name = "Toy Singularity"
|
||||
id = "singuloutoy"
|
||||
materials = list(MAT_PLASTIC = 500)
|
||||
build_path = /obj/item/toy/spinningtoy
|
||||
category = list("initial", "Toys")
|
||||
|
||||
/datum/design/autoylathe/capgun
|
||||
name = "Cap Gun"
|
||||
id = "capgun"
|
||||
materials = list(MAT_PLASTIC = 500)
|
||||
build_path = /obj/item/toy/gun
|
||||
category = list("initial", "Pistols")
|
||||
|
||||
/datum/design/autoylathe/capgunammo
|
||||
name = "Capgun Ammo"
|
||||
id = "capgunammo"
|
||||
materials = list(MAT_PLASTIC = 50)
|
||||
build_path = /obj/item/toy/ammo/gun
|
||||
category = list("initial", "misc")
|
||||
|
||||
/datum/design/autoylathe/toysword
|
||||
name = "Toy Sword"
|
||||
id = "toysword"
|
||||
materials = list(MAT_PLASTIC = 500)
|
||||
build_path = /obj/item/toy/sword
|
||||
category = list("initial", "Melee")
|
||||
|
||||
/datum/design/autoylathe/foamblade
|
||||
name = "Foam Armblade"
|
||||
id = "foamblade"
|
||||
materials = list(MAT_PLASTIC = 500)
|
||||
build_path = /obj/item/toy/foamblade
|
||||
category = list("initial", "Melee")
|
||||
|
||||
/datum/design/autoylathe/windupbox
|
||||
name = "Wind Up Toolbox"
|
||||
id = "windupbox"
|
||||
materials = list(MAT_PLASTIC = 500)
|
||||
build_path = /obj/item/toy/windupToolbox
|
||||
category = list("initial", "Toys")
|
||||
|
||||
/datum/design/autoylathe/toydualsword
|
||||
name = "Double-Bladed Toy Sword"
|
||||
id = "dbtoysword"
|
||||
materials = list(MAT_PLASTIC = 1000)
|
||||
build_path = /obj/item/twohanded/dualsaber/toy
|
||||
category = list("initial", "Melee")
|
||||
|
||||
/datum/design/autoylathe/toykatana
|
||||
name = "Replica Katana"
|
||||
id = "toykatana"
|
||||
materials = list(MAT_PLASTIC = 50, MAT_METAL = 450)
|
||||
build_path = /obj/item/toy/katana
|
||||
category = list("initial", "Melee")
|
||||
|
||||
/datum/design/autoylathe/snappop
|
||||
name = "Snap Pop"
|
||||
id = "snappop_phoenix"
|
||||
materials = list(MAT_PLASTIC = 50)
|
||||
build_path = /obj/item/toy/snappop
|
||||
category = list("initial", "Toys")
|
||||
|
||||
/datum/design/autoylathe/mech/model1
|
||||
name = "Toy Ripley"
|
||||
id = "toymech1"
|
||||
materials = list(MAT_PLASTIC = 250)
|
||||
build_path = /obj/item/toy/prize/ripley
|
||||
|
||||
/datum/design/autoylathe/mech/model2
|
||||
name = "Toy Firefighter Ripley"
|
||||
id = "toymech2"
|
||||
materials = list(MAT_PLASTIC = 250)
|
||||
build_path = /obj/item/toy/prize/fireripley
|
||||
|
||||
/datum/design/autoylathe/mech/contraband/model3
|
||||
name = "Toy Deathsquad fireripley "
|
||||
id = "toymech3"
|
||||
materials = list(MAT_PLASTIC = 250)
|
||||
build_path = /obj/item/toy/prize/deathripley
|
||||
|
||||
/datum/design/autoylathe/mech/model4
|
||||
name = "Toy Gygax"
|
||||
id = "toymech4"
|
||||
materials = list(MAT_PLASTIC = 250)
|
||||
build_path = /obj/item/toy/prize/gygax
|
||||
|
||||
/datum/design/autoylathe/mech/model5
|
||||
name = "Toy Durand"
|
||||
id = "toymech5"
|
||||
materials = list(MAT_PLASTIC = 250)
|
||||
build_path = /obj/item/toy/prize/durand
|
||||
|
||||
/datum/design/autoylathe/mech/contraband/model6
|
||||
name = "Toy H.O.N.K."
|
||||
id = "toymech6"
|
||||
materials = list(MAT_PLASTIC = 250)
|
||||
build_path = /obj/item/toy/prize/honk
|
||||
|
||||
/datum/design/autoylathe/mech/contraband/model7
|
||||
name = "Toy Marauder"
|
||||
id = "toymech7"
|
||||
materials = list(MAT_PLASTIC = 250)
|
||||
build_path = /obj/item/toy/prize/marauder
|
||||
|
||||
/datum/design/autoylathe/mech/contraband/model8
|
||||
name = "Toy Seraph"
|
||||
id = "toymech8"
|
||||
materials = list(MAT_PLASTIC = 250)
|
||||
build_path = /obj/item/toy/prize/seraph
|
||||
|
||||
/datum/design/autoylathe/mech/contraband/model9
|
||||
name = "Toy Mauler"
|
||||
id = "toymech9"
|
||||
materials = list(MAT_PLASTIC = 250)
|
||||
build_path = /obj/item/toy/prize/mauler
|
||||
|
||||
/datum/design/autoylathe/mech/model10
|
||||
name = "Toy Odysseus"
|
||||
id = "toymech10"
|
||||
materials = list(MAT_PLASTIC = 250)
|
||||
build_path = /obj/item/toy/prize/odysseus
|
||||
|
||||
/datum/design/autoylathe/mech/model11
|
||||
name = "Toy Phazon"
|
||||
id = "toymech11"
|
||||
materials = list(MAT_PLASTIC = 250)
|
||||
build_path = /obj/item/toy/prize/phazon
|
||||
|
||||
/datum/design/autoylathe/mech/contraband/model12
|
||||
name = "Toy Reticence"
|
||||
id = "toymech12"
|
||||
materials = list(MAT_PLASTIC = 250)
|
||||
build_path = /obj/item/toy/prize/reticence
|
||||
category = list("hacked", "Figurines")
|
||||
|
||||
/datum/design/autoylathe/talking/AI
|
||||
name = "Toy AI"
|
||||
id = "ToyAICore"
|
||||
materials = list(MAT_PLASTIC = 250, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/talking/AI
|
||||
category = list("initial", "Toys")
|
||||
|
||||
/datum/design/autoylathe/talking/codex_gigas
|
||||
name = "Toy Codex Gigas"
|
||||
id = "ToyCodex"
|
||||
materials = list(MAT_PLASTIC = 250, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/talking/codex_gigas
|
||||
category = list("initial", "Toys")
|
||||
|
||||
/datum/design/autoylathe/talking/owl
|
||||
name = "Owl Action Figure"
|
||||
id = "owlactionfig"
|
||||
materials = list(MAT_PLASTIC = 250, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/talking/owl
|
||||
|
||||
/datum/design/autoylathe/talking/griffin
|
||||
name = "Griffon Action Figure"
|
||||
id = "griffinactionfig"
|
||||
materials = list(MAT_PLASTIC = 250, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/talking/griffin
|
||||
|
||||
/datum/design/autoylathe/cards
|
||||
name = "Deck of Cards"
|
||||
id = "carddeck"
|
||||
materials = list(MAT_PLASTIC = 250)
|
||||
build_path = /obj/item/toy/cards/deck
|
||||
category = list("initial", "Toys")
|
||||
|
||||
/datum/design/autoylathe/nuke
|
||||
name = "Nuclear Fission Explosive Toy"
|
||||
id = "nuketoy"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/nuke
|
||||
category = list("initial", "Toys")
|
||||
|
||||
/datum/design/autoylathe/minimeteor
|
||||
name = "Mini-Meteor"
|
||||
id = "meattoy"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/minimeteor
|
||||
category = list("hacked", "Misc")
|
||||
|
||||
/datum/design/autoylathe/redbutton
|
||||
name = "Big Red Button"
|
||||
id = "redbutton"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/redbutton
|
||||
category = list("initial", "Toys")
|
||||
|
||||
/datum/design/autoylathe/beach_ball
|
||||
name = "Beach Ball"
|
||||
id = "beachball"
|
||||
materials = list(MAT_PLASTIC = 500)
|
||||
build_path = /obj/item/toy/beach_ball
|
||||
category = list("initial", "Toys")
|
||||
|
||||
/datum/design/autoylathe/clockwork_watch
|
||||
name = "Clockwork Watch"
|
||||
id = "clockwatch"
|
||||
materials = list(MAT_PLASTIC = 1000)
|
||||
build_path = /obj/item/toy/clockwork_watch
|
||||
category = list("initial", "misc")
|
||||
|
||||
/datum/design/autoylathe/dagger
|
||||
name = "Toy Dagger"
|
||||
id = "toydagger"
|
||||
materials = list(MAT_PLASTIC = 1000)
|
||||
build_path = /obj/item/toy/toy_dagger
|
||||
category = list("initial", "Melee")
|
||||
|
||||
/datum/design/autoylathe/xeno
|
||||
name = "Xenomorph"
|
||||
id = "xenomorph"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/toy_xeno
|
||||
|
||||
/datum/design/autoylathe/cattoy
|
||||
name = "Toy Mouse"
|
||||
id = "cattoy"
|
||||
materials = list(MAT_PLASTIC = 500)
|
||||
build_path = /obj/item/toy/cattoy
|
||||
category = list("initial", "Toys")
|
||||
|
||||
/datum/design/autoylathe/figure/assistant
|
||||
name = "Assistant"
|
||||
id = "assfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/assistant
|
||||
|
||||
/datum/design/autoylathe/figure/atmos
|
||||
name = "Atmos Tech"
|
||||
id = "atmfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/atmos
|
||||
|
||||
/datum/design/autoylathe/figure/bartender
|
||||
name = "Bartender"
|
||||
id = "barfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/bartender
|
||||
|
||||
/datum/design/autoylathe/figure/botanist
|
||||
name = "Botanist"
|
||||
id = "botfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/botanist
|
||||
|
||||
/datum/design/autoylathe/figure/captain
|
||||
name = "Captain"
|
||||
id = "capfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/captain
|
||||
|
||||
/datum/design/autoylathe/figure/cargotech
|
||||
name = "Cargo Technician"
|
||||
id = "carfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/cargotech
|
||||
|
||||
/datum/design/autoylathe/figure/ce
|
||||
name = "Chief Engineer"
|
||||
id = "cefigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/ce
|
||||
|
||||
/datum/design/autoylathe/figure/chaplain
|
||||
name = "Chaplain"
|
||||
id = "chafigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/chaplain
|
||||
|
||||
/datum/design/autoylathe/figure/chef
|
||||
name = "Chef"
|
||||
id = "chefigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/chef
|
||||
|
||||
/datum/design/autoylathe/figure/chemist
|
||||
name = "Chemist"
|
||||
id = "chmfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/chemist
|
||||
|
||||
/datum/design/autoylathe/figure/clown
|
||||
name = "Clown"
|
||||
id = "clnfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/clown
|
||||
|
||||
/datum/design/autoylathe/figure/cmo
|
||||
name = "Chief Medical Officer"
|
||||
id = "cmofigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/cmo
|
||||
|
||||
/datum/design/autoylathe/figure/curator
|
||||
name = "Curator"
|
||||
id = "curfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/curator
|
||||
|
||||
/datum/design/autoylathe/figure/borg
|
||||
name = "Cyborg"
|
||||
id = "cybfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/borg
|
||||
|
||||
/datum/design/autoylathe/figure/detective
|
||||
name = "Detective"
|
||||
id = "detfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/detective
|
||||
|
||||
/datum/design/autoylathe/figure/engineer
|
||||
name = "Engineer"
|
||||
id = "engfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/engineer
|
||||
|
||||
/datum/design/autoylathe/figure/geneticist
|
||||
name = "Geneticist"
|
||||
id = "genfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/geneticist
|
||||
|
||||
/datum/design/autoylathe/figure/hop
|
||||
name = "Head of Personnel"
|
||||
id = "hopfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/hop
|
||||
|
||||
/datum/design/autoylathe/figure/hos
|
||||
name = "Head of Security"
|
||||
id = "hosfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/hos
|
||||
|
||||
/datum/design/autoylathe/figure/janitor
|
||||
name = "Janitor"
|
||||
id = "janfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/janitor
|
||||
|
||||
/datum/design/autoylathe/figure/lawyer
|
||||
name = "Lawyer"
|
||||
id = "lawfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/lawyer
|
||||
|
||||
/datum/design/autoylathe/figure/md
|
||||
name = "Medical Doctor"
|
||||
id = "medfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/md
|
||||
|
||||
/datum/design/autoylathe/figure/mime
|
||||
name = "Mime"
|
||||
id = "mimfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/mime
|
||||
|
||||
/datum/design/autoylathe/figure/miner
|
||||
name = "Miner"
|
||||
id = "minfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/miner
|
||||
|
||||
/datum/design/autoylathe/figure/rd
|
||||
name = "Research Director"
|
||||
id = "rdfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/rd
|
||||
|
||||
/datum/design/autoylathe/figure/robotocist
|
||||
name = "Robotocist"
|
||||
id = "robfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/roboticist
|
||||
|
||||
/datum/design/autoylathe/figure/qm
|
||||
name = "Quartermaster"
|
||||
id = "qtmfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/qm
|
||||
|
||||
/datum/design/autoylathe/figure/scientist
|
||||
name = "Scientist"
|
||||
id = "scifigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/scientist
|
||||
|
||||
/datum/design/autoylathe/figure/secofficer
|
||||
name = "Security Officer"
|
||||
id = "secfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/secofficer
|
||||
|
||||
/datum/design/autoylathe/figure/virologist
|
||||
name = "Virologist"
|
||||
id = "virfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/virologist
|
||||
|
||||
/datum/design/autoylathe/figure/warden
|
||||
name = "Warden"
|
||||
id = "warfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/warden
|
||||
|
||||
/datum/design/autoylathe/figure/dsquad
|
||||
name = "Deathsquad"
|
||||
id = "dsqfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/dsquad
|
||||
category = list("hacked", "Figurines")
|
||||
|
||||
/datum/design/autoylathe/figure/ian
|
||||
name = "Ian"
|
||||
id = "ianfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/ian
|
||||
category = list("hacked", "Figurines")
|
||||
|
||||
/datum/design/autoylathe/figure/ninja
|
||||
name = "Ninja"
|
||||
id = "ninfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/ninja
|
||||
category = list("hacked", "Figurines")
|
||||
|
||||
/datum/design/autoylathe/figure/syndie
|
||||
name = "Nuclear Operative"
|
||||
id = "nucfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/syndie
|
||||
category = list("hacked", "Figurines")
|
||||
|
||||
/datum/design/autoylathe/figure/wizard
|
||||
name = "Wizard"
|
||||
id = "wizfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/wizard
|
||||
category = list("hacked", "Figurines")
|
||||
|
||||
/datum/design/autoylathe/dildo
|
||||
name = "Customizable Dildo"
|
||||
id = "dildo"
|
||||
materials = list(MAT_PLASTIC = 2000)
|
||||
build_path = /obj/item/dildo/custom
|
||||
category = list("initial", "Adult")
|
||||
|
||||
/datum/design/autoylathe/collar
|
||||
name = "Collar"
|
||||
id = "collar"
|
||||
materials = list(MAT_PLASTIC = 250, MAT_METAL = 50)
|
||||
build_path = /obj/item/clothing/neck/petcollar
|
||||
category = list("initial", "Adult")
|
||||
|
||||
/datum/design/autoylathe/lastag/blue/gun
|
||||
name = "Blue Lasertag Rifle"
|
||||
id = "lastagrifleblue"
|
||||
materials = list(MAT_PLASTIC = 2000, MAT_METAL = 500, MAT_GLASS = 500)
|
||||
build_path = /obj/item/gun/energy/laser/bluetag
|
||||
category = list("initial", "Rifles")
|
||||
|
||||
/datum/design/autoylathe/lastag/red/gun
|
||||
name = "Red Lasertag Rifle"
|
||||
id = "lastagriflered"
|
||||
materials = list(MAT_PLASTIC = 2000, MAT_METAL = 500, MAT_GLASS = 500)
|
||||
build_path = /obj/item/gun/energy/laser/redtag
|
||||
category = list("initial", "Rifles")
|
||||
|
||||
/datum/design/autoylathe/lastag/blue/hat
|
||||
name = "Blue Lasertag Helmet"
|
||||
id = "lastaghatblue"
|
||||
materials = list(MAT_PLASTIC = 4000, MAT_METAL = 1000, MAT_GLASS = 500)
|
||||
build_path = /obj/item/clothing/head/helmet/bluetaghelm
|
||||
category = list("initial", "Armor")
|
||||
|
||||
/datum/design/autoylathe/lastag/blue/armor
|
||||
name = "Blue Lasertag Armor"
|
||||
id = "lastagarmorblue"
|
||||
materials = list(MAT_PLASTIC = 8000, MAT_METAL = 2000, MAT_GLASS = 100)
|
||||
build_path = /obj/item/clothing/suit/bluetag
|
||||
category = list("initial", "Armor")
|
||||
|
||||
/datum/design/autoylathe/lastag/red/hat
|
||||
name = "Red Lasertag Helmet"
|
||||
id = "lastaghelmetred"
|
||||
materials = list(MAT_PLASTIC = 4000, MAT_METAL = 1000, MAT_GLASS = 500)
|
||||
build_path = /obj/item/clothing/head/helmet/redtaghelm
|
||||
category = list("initial", "Armor")
|
||||
|
||||
/datum/design/autoylathe/lastag/red/armor
|
||||
name = "Red Lasertag Armor"
|
||||
id = "lastagarmorred"
|
||||
materials = list(MAT_PLASTIC = 8000, MAT_METAL = 2000, MAT_GLASS = 1000)
|
||||
build_path = /obj/item/clothing/suit/redtag
|
||||
category = list("initial", "Armor")
|
||||
|
||||
//because why not make a boxed kit with all of the lastag shit?
|
||||
/obj/item/storage/box/blueteam
|
||||
name = "Blue Team Kit"
|
||||
|
||||
/obj/item/storage/box/blueteam/PopulateContents()
|
||||
new /obj/item/clothing/head/helmet/bluetaghelm(src)
|
||||
new /obj/item/clothing/suit/bluetag(src)
|
||||
new /obj/item/gun/energy/laser/bluetag(src)
|
||||
new /obj/item/clothing/gloves/color/blue(src)
|
||||
new /obj/item/clothing/shoes/sneakers/blue(src)
|
||||
new /obj/item/clothing/under/color/blue(src)
|
||||
|
||||
/obj/item/storage/box/redteam
|
||||
name = "Red Team Kit"
|
||||
|
||||
/obj/item/storage/box/redteam/PopulateContents()
|
||||
new /obj/item/clothing/head/helmet/redtaghelm(src)
|
||||
new /obj/item/clothing/suit/redtag(src)
|
||||
new /obj/item/gun/energy/laser/redtag(src)
|
||||
new /obj/item/clothing/gloves/color/red(src)
|
||||
new /obj/item/clothing/shoes/sneakers/red(src)
|
||||
new /obj/item/clothing/under/color/red(src)
|
||||
|
||||
/datum/design/autoylathe/lastag/blue
|
||||
name = "Blue Lasertag Kit"
|
||||
id = "lastagkitblue"
|
||||
materials = list(MAT_PLASTIC = 16000, MAT_METAL = 4000, MAT_GLASS = 2000)
|
||||
build_path = /obj/item/storage/box/blueteam
|
||||
category = list("initial", "Misc")
|
||||
|
||||
/datum/design/autoylathe/lastag/red
|
||||
name = "Red Lasertag Kit"
|
||||
id = "lastagkitred"
|
||||
materials = list(MAT_PLASTIC = 16000, MAT_METAL = 4000, MAT_GLASS = 2000)
|
||||
build_path = /obj/item/storage/box/redteam
|
||||
category = list("initial", "Misc")
|
||||
|
||||
/datum/design/foam_x9
|
||||
name = "Foam Force X9 Rifle"
|
||||
id = "foam_x9"
|
||||
build_type = AUTOYLATHE
|
||||
materials = list(MAT_PLASTIC = 4000, MAT_METAL = 500)
|
||||
build_path = /obj/item/gun/ballistic/automatic/x9/toy
|
||||
category = list("initial", "Rifles")
|
||||
|
||||
/datum/design/foam_dart
|
||||
name = "Box of Foam Darts"
|
||||
id = "foam_dart"
|
||||
build_type = AUTOYLATHE
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 100)
|
||||
build_path = /obj/item/ammo_box/foambox
|
||||
category = list("initial", "Misc")
|
||||
|
||||
/datum/design/foam_magpistol
|
||||
name = "Foam Force Magpistol"
|
||||
id = "magfoam_launcher"
|
||||
build_type = AUTOYLATHE
|
||||
materials = list(MAT_PLASTIC = 2000, MAT_METAL = 250)
|
||||
build_path = /obj/item/gun/ballistic/shotgun/toy/mag
|
||||
category = list("initial", "Pistols")
|
||||
|
||||
/datum/design/foam_magrifle
|
||||
name = "Foam Force MagRifle"
|
||||
id = "foam_magrifle"
|
||||
build_type = AUTOYLATHE
|
||||
materials = list(MAT_PLASTIC = 4000, MAT_METAL = 500)
|
||||
build_path = /obj/item/gun/ballistic/automatic/magrifle/toy
|
||||
category = list("initial", "Rifles")
|
||||
|
||||
/datum/design/foam_hyperburst
|
||||
name = "MagTag Hyper Rifle"
|
||||
id = "foam_hyperburst"
|
||||
build_type = AUTOYLATHE
|
||||
materials = list(MAT_PLASTIC = 4000, MAT_METAL = 2000, MAT_GLASS = 1000)
|
||||
build_path = /obj/item/gun/energy/laser/practice/hyperburst
|
||||
category = list("initial", "Rifles")
|
||||
|
||||
/datum/design/foam_sp
|
||||
name = "Foam Force Stealth Pistol"
|
||||
id = "foam_sp"
|
||||
build_type = AUTOYLATHE
|
||||
materials = list(MAT_PLASTIC = 2000, MAT_METAL = 1000)
|
||||
build_path = /obj/item/gun/ballistic/automatic/toy/pistol/stealth
|
||||
category = list("initial", "Pistols")
|
||||
|
||||
/datum/design/toyray
|
||||
name = "RayTag Gun"
|
||||
id = "toyray"
|
||||
build_type = AUTOYLATHE
|
||||
materials = list(MAT_PLASTIC = 2000, MAT_METAL = 1000, MAT_GLASS = 1000)
|
||||
build_path = /obj/item/gun/energy/laser/practice/raygun
|
||||
category = list("initial", "Pistols")
|
||||
|
||||
/datum/design/am4c
|
||||
name = "Foam Force AM4-C Rifle"
|
||||
id = "foam_am4c"
|
||||
build_type = AUTOYLATHE
|
||||
materials = list(MAT_PLASTIC = 4000, MAT_METAL = 500)
|
||||
build_path = /obj/item/gun/ballistic/automatic/AM4C
|
||||
category = list("initial", "Rifles")
|
||||
|
||||
/datum/design/foam_f3
|
||||
name = "Replica F3 Justicar"
|
||||
id = "foam_f3"
|
||||
build_type = AUTOYLATHE
|
||||
materials = list(MAT_PLASTIC = 2000, MAT_METAL = 250)
|
||||
build_path = /obj/item/toy/gun/justicar
|
||||
category = list("initial", "Pistols")
|
||||
|
||||
/datum/design/toy_blaster
|
||||
name = "pump-action plastic blaster"
|
||||
id = "toy_blaster"
|
||||
build_type = AUTOYLATHE
|
||||
materials = list(MAT_PLASTIC = 2000, MAT_METAL = 750, MAT_GLASS = 1000)
|
||||
build_path = /obj/item/gun/energy/pumpaction/toy
|
||||
category = list("initial", "Rifles")
|
||||
|
||||
/datum/design/capammo
|
||||
name = "Box of Caps"
|
||||
id = "capammo"
|
||||
build_type = AUTOYLATHE
|
||||
materials = list(MAT_METAL = 10, MAT_GLASS = 10)
|
||||
build_path = /obj/item/toy/ammo/gun
|
||||
category = list("initial", "Misc")
|
||||
|
||||
/datum/design/foam_smg
|
||||
name = "Foam Force SMG"
|
||||
id = "foam_smg"
|
||||
build_type = AUTOYLATHE
|
||||
materials = list(MAT_PLASTIC = 2000, MAT_METAL = 250)
|
||||
build_path = /obj/item/gun/ballistic/automatic/toy/unrestricted
|
||||
category = list("initial", "Pistols")
|
||||
|
||||
/datum/design/foam_pistol
|
||||
name = "Foam Force Pistol"
|
||||
id = "foam_pistol"
|
||||
build_type = AUTOYLATHE
|
||||
materials = list(MAT_PLASTIC = 2000, MAT_METAL = 250)
|
||||
build_path = /obj/item/gun/ballistic/automatic/toy/pistol/unrestricted
|
||||
category = list("initial", "Pistols")
|
||||
|
||||
/datum/design/foam_shotgun
|
||||
name = "Foam Force Shotgun"
|
||||
id = "foam_shotgun"
|
||||
build_type = AUTOYLATHE
|
||||
materials = list(MAT_PLASTIC = 4000, MAT_METAL = 500)
|
||||
build_path = /obj/item/gun/ballistic/shotgun/toy/unrestricted
|
||||
category = list("initial", "Rifles")
|
||||
|
||||
/datum/design/foam_dartred
|
||||
name = "Box of Lastag Red Foam Darts"
|
||||
id = "redfoam_dart"
|
||||
build_type = AUTOYLATHE
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 100)
|
||||
build_path = /obj/item/ammo_box/foambox/tag/red
|
||||
category = list("initial", "Misc")
|
||||
|
||||
/datum/design/foam_dartblue
|
||||
name = "Box of Lastag Blue Foam Darts"
|
||||
id = "bluefoam_dart"
|
||||
build_type = AUTOYLATHE
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 100)
|
||||
build_path = /obj/item/ammo_box/foambox/tag/blue
|
||||
category = list("initial", "Misc")
|
||||
|
||||
/datum/design/foam_bow
|
||||
name = "Foam Force Crossbow"
|
||||
id = "foam_bow"
|
||||
build_type = AUTOYLATHE
|
||||
materials = list(MAT_PLASTIC = 2000, MAT_METAL = 250)
|
||||
build_path = /obj/item/gun/ballistic/shotgun/toy/crossbow
|
||||
category = list("initial", "Pistols")
|
||||
|
||||
/datum/design/foam_c20
|
||||
name = "Donksoft C20R"
|
||||
id = "foam_c20"
|
||||
build_type = AUTOYLATHE
|
||||
materials = list(MAT_PLASTIC = 4000, MAT_METAL = 500)
|
||||
build_path = /obj/item/gun/ballistic/automatic/c20r/toy/unrestricted
|
||||
category = list("hacked", "Rifles")
|
||||
|
||||
/datum/design/foam_l6
|
||||
name = "Donksoft LMG"
|
||||
id = "foam_LMG"
|
||||
build_type = AUTOYLATHE
|
||||
materials = list(MAT_PLASTIC = 4000, MAT_METAL = 500)
|
||||
build_path = /obj/item/gun/ballistic/automatic/l6_saw/toy/unrestricted
|
||||
category = list("hacked", "Rifles")
|
||||
Reference in New Issue
Block a user