Merge branch 'master' of https://github.com/Citadel-Station-13/Citadel-Station-13 into tggenetics
This commit is contained in:
@@ -35,7 +35,7 @@
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/ntnet_relay/update_icon()
|
||||
/obj/machinery/ntnet_relay/update_icon_state()
|
||||
if(is_operational())
|
||||
icon_state = "bus"
|
||||
else
|
||||
|
||||
@@ -23,8 +23,7 @@ GLOBAL_PROTECT(protected_ranks)
|
||||
name = init_name
|
||||
if(!name)
|
||||
qdel(src)
|
||||
throw EXCEPTION("Admin rank created without name.")
|
||||
return
|
||||
CRASH("Admin rank created without name.")
|
||||
if(init_rights)
|
||||
rights = init_rights
|
||||
include_rights = rights
|
||||
|
||||
@@ -39,12 +39,10 @@ GLOBAL_PROTECT(href_token)
|
||||
return
|
||||
if(!ckey)
|
||||
QDEL_IN(src, 0)
|
||||
throw EXCEPTION("Admin datum created without a ckey")
|
||||
return
|
||||
CRASH("Admin datum created without a ckey")
|
||||
if(!istype(R))
|
||||
QDEL_IN(src, 0)
|
||||
throw EXCEPTION("Admin datum created without a rank")
|
||||
return
|
||||
CRASH("Admin datum created without a rank")
|
||||
target = ckey
|
||||
name = "[ckey]'s admin datum ([R])"
|
||||
rank = R
|
||||
|
||||
@@ -21,6 +21,6 @@
|
||||
target.gib(1, 1)
|
||||
else
|
||||
target.adjustBruteLoss(min(99,(target.health - 1)))
|
||||
target.Knockdown(400)
|
||||
target.DefaultCombatKnockdown(400)
|
||||
target.stuttering = 20
|
||||
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
"emagged" = borg.emagged,
|
||||
"active_module" = "[borg.module.type]",
|
||||
"lawupdate" = borg.lawupdate,
|
||||
"lockdown" = borg.lockcharge,
|
||||
"lockdown" = borg.locked_down,
|
||||
"scrambledcodes" = borg.scrambledcodes
|
||||
)
|
||||
.["upgrades"] = list()
|
||||
@@ -122,8 +122,8 @@
|
||||
message_admins("[key_name_admin(user)] disabled lawsync on [ADMIN_LOOKUPFLW(borg)].")
|
||||
log_admin("[key_name(user)] disabled lawsync on [key_name(borg)].")
|
||||
if ("toggle_lockdown")
|
||||
borg.SetLockdown(!borg.lockcharge)
|
||||
if (borg.lockcharge)
|
||||
borg.SetLockdown(!borg.locked_down)
|
||||
if (borg.locked_down)
|
||||
message_admins("[key_name_admin(user)] locked down [ADMIN_LOOKUPFLW(borg)].")
|
||||
log_admin("[key_name(user)] locked down [key_name(borg)].")
|
||||
else
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
var/name = "team"
|
||||
var/member_name = "member"
|
||||
var/list/objectives = list() //common objectives, these won't be added or removed automatically, subtypes handle this, this is here for bookkeeping purposes.
|
||||
var/show_roundend_report = TRUE
|
||||
|
||||
/datum/team/New(starting_members)
|
||||
. = ..()
|
||||
@@ -25,6 +26,8 @@
|
||||
|
||||
//Display members/victory/failure/objectives for the team
|
||||
/datum/team/proc/roundend_report()
|
||||
if(!show_roundend_report)
|
||||
return
|
||||
var/list/report = list()
|
||||
|
||||
report += "<span class='header'>[name]:</span>"
|
||||
|
||||
@@ -116,14 +116,13 @@
|
||||
var/mob/living/carbon/human/M = loc
|
||||
M.adjustStaminaLoss(-75)
|
||||
M.SetUnconscious(0)
|
||||
M.SetStun(0)
|
||||
M.SetKnockdown(0)
|
||||
M.SetAllImmobility(0)
|
||||
combat_cooldown = 0
|
||||
START_PROCESSING(SSobj, src)
|
||||
|
||||
/obj/item/clothing/suit/armor/abductor/vest/process()
|
||||
combat_cooldown++
|
||||
if(combat_cooldown==initial(combat_cooldown))
|
||||
if(combat_cooldown == initial(combat_cooldown))
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
|
||||
/obj/item/clothing/suit/armor/abductor/Destroy()
|
||||
@@ -512,7 +511,7 @@
|
||||
L.lastattackerckey = user.ckey
|
||||
|
||||
L.adjustStaminaLoss(35) //because previously it took 5-6 hits to actually "incapacitate" someone for the purposes of the sleep inducement
|
||||
L.Knockdown(140)
|
||||
L.DefaultCombatKnockdown(140)
|
||||
L.apply_effect(EFFECT_STUTTER, 7)
|
||||
SEND_SIGNAL(L, COMSIG_LIVING_MINOR_SHOCK)
|
||||
|
||||
|
||||
@@ -218,11 +218,16 @@
|
||||
|
||||
/mob/living/simple_animal/hostile/blob/blobbernaut/Initialize()
|
||||
. = ..()
|
||||
if(!independent) //no pulling people deep into the blob
|
||||
verbs -= /mob/living/verb/pulled
|
||||
else
|
||||
if(independent)
|
||||
pass_flags &= ~PASSBLOB
|
||||
|
||||
/mob/living/simple_animal/hostile/blob/blobbernaut/start_pulling(atom/movable/AM, state, force = pull_force, supress_message = FALSE)
|
||||
if(!independent && ismob(AM))
|
||||
if(!supress_message)
|
||||
to_chat(src, "<span class='warning'>You are unable to grasp people in this form.</span>")
|
||||
return FALSE
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/hostile/blob/blobbernaut/Life()
|
||||
if(..())
|
||||
var/list/blobs_in_area = range(2, src)
|
||||
|
||||
@@ -24,7 +24,7 @@ GLOBAL_LIST_EMPTY(blob_nodes)
|
||||
hud_type = /datum/hud/blob_overmind
|
||||
var/obj/structure/blob/core/blob_core = null // The blob overmind's core
|
||||
var/blob_points = 0
|
||||
var/max_blob_points = 100
|
||||
var/max_blob_points = 250
|
||||
var/last_attack = 0
|
||||
var/datum/reagent/blob/blob_reagent_datum = new/datum/reagent/blob()
|
||||
var/list/blob_mobs = list()
|
||||
@@ -157,6 +157,9 @@ GLOBAL_LIST_EMPTY(blob_nodes)
|
||||
BM.overmind = null
|
||||
BM.update_icons()
|
||||
GLOB.overminds -= src
|
||||
blob_mobs = null
|
||||
resource_blobs = null
|
||||
blobs_legit = null
|
||||
|
||||
SSshuttle.clearHostileEnvironment(src)
|
||||
|
||||
|
||||
@@ -321,7 +321,7 @@
|
||||
set category = "Blob"
|
||||
set name = "Blob Broadcast"
|
||||
set desc = "Speak with your blob spores and blobbernauts as your mouthpieces."
|
||||
var/speak_text = input(src, "What would you like to say with your minions?", "Blob Broadcast", null) as text
|
||||
var/speak_text = stripped_input(src, "What would you like to say with your minions?", "Blob Broadcast", null)
|
||||
if(!speak_text)
|
||||
return
|
||||
else
|
||||
|
||||
@@ -303,8 +303,7 @@
|
||||
|
||||
/obj/structure/blob/proc/change_to(type, controller)
|
||||
if(!ispath(type))
|
||||
throw EXCEPTION("change_to(): invalid type for blob")
|
||||
return
|
||||
CRASH("change_to(): invalid type for blob")
|
||||
var/obj/structure/blob/B = new type(src.loc, controller)
|
||||
B.creation_action()
|
||||
B.update_icon()
|
||||
|
||||
@@ -315,7 +315,7 @@
|
||||
bloodsuckerdatum.handle_eat_human_food(food_nutrition)
|
||||
|
||||
|
||||
/datum/antagonist/bloodsucker/proc/handle_eat_human_food(var/food_nutrition) // Called from snacks.dm and drinks.dm
|
||||
/datum/antagonist/bloodsucker/proc/handle_eat_human_food(food_nutrition, puke_blood = TRUE, masquerade_override) // Called from snacks.dm and drinks.dm
|
||||
set waitfor = FALSE
|
||||
if(!owner.current || !iscarbon(owner.current))
|
||||
return
|
||||
@@ -324,14 +324,14 @@
|
||||
C.nutrition -= food_nutrition
|
||||
foodInGut += food_nutrition
|
||||
// Already ate some bad clams? Then we can back out, because we're already sick from it.
|
||||
if (foodInGut != food_nutrition)
|
||||
if(foodInGut != food_nutrition)
|
||||
return
|
||||
// Haven't eaten, but I'm in a Human Disguise.
|
||||
else if (poweron_masquerade)
|
||||
else if(poweron_masquerade && !masquerade_override)
|
||||
to_chat(C, "<span class='notice'>Your stomach turns, but your \"human disguise\" keeps the food down...for now.</span>")
|
||||
// Keep looping until we purge. If we have activated our Human Disguise, we ignore the food. But it'll come up eventually...
|
||||
var/sickphase = 0
|
||||
while (foodInGut)
|
||||
while(foodInGut)
|
||||
sleep(50)
|
||||
C.adjust_disgust(10 * sickphase)
|
||||
// Wait an interval...
|
||||
@@ -340,24 +340,29 @@
|
||||
if(C.stat == DEAD)
|
||||
return
|
||||
// Put up disguise? Then hold off the vomit.
|
||||
if(poweron_masquerade)
|
||||
if(poweron_masquerade && !masquerade_override)
|
||||
if(sickphase > 0)
|
||||
to_chat(C, "<span class='notice'>Your stomach settles temporarily. You regain your composure...for now.</span>")
|
||||
sickphase = 0
|
||||
continue
|
||||
switch(sickphase)
|
||||
if (1)
|
||||
if(1)
|
||||
to_chat(C, "<span class='warning'>You feel unwell. You can taste ash on your tongue.</span>")
|
||||
C.Stun(10)
|
||||
if (2)
|
||||
if(2)
|
||||
to_chat(C, "<span class='warning'>Your stomach turns. Whatever you ate tastes of grave dirt and brimstone.</span>")
|
||||
C.Dizzy(15)
|
||||
C.Stun(13)
|
||||
if (3)
|
||||
if(3)
|
||||
to_chat(C, "<span class='warning'>You purge the food of the living from your viscera! You've never felt worse.</span>")
|
||||
C.vomit(foodInGut * 4, foodInGut * 2, 0) // (var/lost_nutrition = 10, var/blood = 0, var/stun = 1, var/distance = 0, var/message = 1, var/toxic = 0)
|
||||
C.blood_volume = max(0, C.blood_volume - foodInGut * 2)
|
||||
//Puke blood only if puke_blood is true, and loose some blood, else just puke normally.
|
||||
if(puke_blood)
|
||||
C.blood_volume = max(0, C.blood_volume - foodInGut * 2)
|
||||
C.vomit(foodInGut * 4, foodInGut * 2, 0)
|
||||
else
|
||||
C.vomit(foodInGut * 4, FALSE, 0)
|
||||
C.Stun(30)
|
||||
//C.Dizzy(50)
|
||||
foodInGut = 0
|
||||
SEND_SIGNAL(C, COMSIG_ADD_MOOD_EVENT, "vampdisgust", /datum/mood_event/bloodsucker_disgust)
|
||||
sickphase ++
|
||||
|
||||
@@ -208,7 +208,7 @@
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/*
|
||||
// Destroy the Solar Arrays
|
||||
/datum/objective/bloodsucker/solars
|
||||
|
||||
@@ -228,7 +228,7 @@
|
||||
if (SC && SC.lastgen > 0 && SC.connected_panels.len > 0 && SC.connected_tracker)
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
*/
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
@@ -96,7 +96,7 @@
|
||||
// Incap?
|
||||
if(must_be_capacitated)
|
||||
var/mob/living/L = owner
|
||||
if (L.incapacitated(TRUE, TRUE) || L.resting && !can_be_immobilized)
|
||||
if (L.incapacitated(TRUE, TRUE) || !CHECK_MOBILITY(L, MOBILITY_STAND) && !can_be_immobilized)
|
||||
if(display_error)
|
||||
to_chat(owner, "<span class='warning'>Not while you're incapacitated!</span>")
|
||||
return FALSE
|
||||
|
||||
@@ -379,20 +379,21 @@
|
||||
protege_objective.generate_objective()
|
||||
add_objective(protege_objective)
|
||||
|
||||
if (rand(0,1) == 0)
|
||||
//if (rand(0,1) == 0)
|
||||
// Heart Thief Objective
|
||||
var/datum/objective/bloodsucker/heartthief/heartthief_objective = new
|
||||
heartthief_objective.owner = owner
|
||||
heartthief_objective.generate_objective()
|
||||
add_objective(heartthief_objective)
|
||||
|
||||
var/datum/objective/bloodsucker/heartthief/heartthief_objective = new
|
||||
heartthief_objective.owner = owner
|
||||
heartthief_objective.generate_objective()
|
||||
add_objective(heartthief_objective)
|
||||
/*
|
||||
else
|
||||
// Solars Objective
|
||||
|
||||
// Solars Objective, doesnt work due to TG updates.
|
||||
var/datum/objective/bloodsucker/solars/solars_objective = new
|
||||
solars_objective.owner = owner
|
||||
solars_objective.generate_objective()
|
||||
add_objective(solars_objective)
|
||||
|
||||
*/
|
||||
// Survive Objective
|
||||
var/datum/objective/bloodsucker/survive/survive_objective = new
|
||||
survive_objective.owner = owner
|
||||
|
||||
@@ -1,9 +1,5 @@
|
||||
|
||||
|
||||
// organ_internal.dm -- /obj/item/organ
|
||||
|
||||
|
||||
|
||||
// Do I have a stake in my heart?
|
||||
/mob/living/AmStaked()
|
||||
var/obj/item/bodypart/BP = get_bodypart("chest")
|
||||
@@ -13,16 +9,14 @@
|
||||
if (istype(I,/obj/item/stake/))
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/mob/proc/AmStaked()
|
||||
return FALSE
|
||||
|
||||
|
||||
/mob/living/proc/StakeCanKillMe()
|
||||
return IsSleeping() || stat >= UNCONSCIOUS || blood_volume <= 0 || HAS_TRAIT(src, TRAIT_DEATHCOMA) // NOTE: You can't go to sleep in a coffin with a stake in you.
|
||||
|
||||
|
||||
///obj/item/weapon/melee/stake
|
||||
/obj/item/stake/
|
||||
/obj/item/stake
|
||||
name = "wooden stake"
|
||||
desc = "A simple wooden stake carved to a sharp point."
|
||||
icon = 'icons/obj/items_and_weapons.dmi'
|
||||
@@ -113,8 +107,7 @@
|
||||
|
||||
// Can this target be staked? If someone stands up before this is complete, it fails. Best used on someone stationary.
|
||||
/mob/living/carbon/proc/can_be_staked()
|
||||
//return resting || IsKnockdown() || IsUnconscious() || (stat && (stat != SOFT_CRIT || pulledby)) || (has_trait(TRAIT_FAKEDEATH)) || resting || IsStun() || IsFrozen() || (pulledby && pulledby.grab_state >= GRAB_NECK)
|
||||
return (resting || lying || IsUnconscious() || pulledby && pulledby.grab_state >= GRAB_NECK)
|
||||
return !CHECK_MOBILITY(src, MOBILITY_STAND)
|
||||
// ABOVE: Taken from update_mobility() in living.dm
|
||||
|
||||
/obj/item/stake/hardened
|
||||
|
||||
@@ -42,25 +42,18 @@
|
||||
/obj/structure/closet/crate
|
||||
var/mob/living/resident // This lets bloodsuckers claim any "closet" as a Coffin, so long as they could get into it and close it. This locks it in place, too.
|
||||
|
||||
/obj/structure/closet/crate/coffin
|
||||
var/pryLidTimer = 250
|
||||
can_weld_shut = FALSE
|
||||
breakout_time = 200
|
||||
|
||||
|
||||
/obj/structure/closet/crate/coffin/blackcoffin
|
||||
name = "black coffin"
|
||||
desc = "For those departed who are not so dear."
|
||||
icon_state = "coffin"
|
||||
icon = 'icons/obj/vamp_obj.dmi'
|
||||
can_weld_shut = FALSE
|
||||
resistance_flags = 0 // Start off with no bonuses.
|
||||
open_sound = 'sound/bloodsucker/coffin_open.ogg'
|
||||
close_sound = 'sound/bloodsucker/coffin_close.ogg'
|
||||
breakout_time = 600
|
||||
pryLidTimer = 400
|
||||
resistance_flags = NONE
|
||||
integrity_failure = 70
|
||||
max_integrity = 100
|
||||
integrity_failure = 0.5
|
||||
armor = list("melee" = 50, "bullet" = 20, "laser" = 30, "energy" = 0, "bomb" = 50, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 60)
|
||||
|
||||
/obj/structure/closet/crate/coffin/meatcoffin
|
||||
@@ -68,8 +61,6 @@
|
||||
desc = "When you're ready to meat your maker, the steaks can never be too high."
|
||||
icon_state = "meatcoffin"
|
||||
icon = 'icons/obj/vamp_obj.dmi'
|
||||
can_weld_shut = FALSE
|
||||
resistance_flags = 0 // Start off with no bonuses.
|
||||
open_sound = 'sound/effects/footstep/slime1.ogg'
|
||||
close_sound = 'sound/effects/footstep/slime1.ogg'
|
||||
breakout_time = 200
|
||||
@@ -77,24 +68,23 @@
|
||||
resistance_flags = NONE
|
||||
material_drop = /obj/item/reagent_containers/food/snacks/meat/slab
|
||||
material_drop_amount = 3
|
||||
integrity_failure = 40
|
||||
integrity_failure = 0.57
|
||||
armor = list("melee" = 70, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 70, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 100)
|
||||
|
||||
|
||||
/obj/structure/closet/crate/coffin/metalcoffin
|
||||
name = "metal coffin"
|
||||
desc = "A big metal sardine can inside of another big metal sardine can, in space."
|
||||
icon_state = "metalcoffin"
|
||||
icon = 'icons/obj/vamp_obj.dmi'
|
||||
can_weld_shut = FALSE
|
||||
resistance_flags = FIRE_PROOF | LAVA_PROOF
|
||||
open_sound = 'sound/effects/pressureplate.ogg'
|
||||
close_sound = 'sound/effects/pressureplate.ogg'
|
||||
breakout_time = 300
|
||||
pryLidTimer = 200
|
||||
resistance_flags = NONE
|
||||
material_drop = /obj/item/stack/sheet/metal
|
||||
material_drop_amount = 5
|
||||
integrity_failure = 60
|
||||
max_integrity = 200
|
||||
integrity_failure = 0.25
|
||||
armor = list("melee" = 40, "bullet" = 15, "laser" = 50, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 60)
|
||||
|
||||
//////////////////////////////////////////////
|
||||
|
||||
@@ -205,7 +205,7 @@
|
||||
buckled_mob.pixel_y = buckled_mob.get_standard_pixel_y_offset(180)
|
||||
src.visible_message(text("<span class='danger'>[buckled_mob][buckled_mob.stat==DEAD?"'s corpse":""] slides off of the rack.</span>"))
|
||||
density = FALSE
|
||||
buckled_mob.AdjustKnockdown(30)
|
||||
buckled_mob.DefaultCombatKnockdown(30)
|
||||
update_icon()
|
||||
useLock = FALSE // Failsafe
|
||||
|
||||
|
||||
@@ -72,8 +72,7 @@
|
||||
if(rand(5 + powerlevel) >= 5)
|
||||
target.visible_message("<span class='danger'>[user] lands a vicious punch, sending [target] away!</span>", \
|
||||
"<span class='userdanger'>[user] has landed a horrifying punch on you, sending you flying!!</span>", null, COMBAT_MESSAGE_RANGE)
|
||||
target.Knockdown(min(5, rand(10, 10 * powerlevel)) )
|
||||
|
||||
target.DefaultCombatKnockdown(min(5, rand(10, 10 * powerlevel)) )
|
||||
// Attack!
|
||||
playsound(get_turf(target), 'sound/weapons/punch4.ogg', 60, 1, -1)
|
||||
user.do_attack_animation(target, ATTACK_EFFECT_SMASH)
|
||||
@@ -145,7 +144,7 @@
|
||||
// Knock Down (if Living)
|
||||
if (isliving(M))
|
||||
var/mob/living/L = M
|
||||
L.Knockdown(pull_power * 10 + 20)
|
||||
L.DefaultCombatKnockdown(pull_power * 10 + 20)
|
||||
// Knock Back (before Knockdown, which probably cancels pull)
|
||||
var/send_dir = get_dir(owner, M)
|
||||
var/turf/T = get_ranged_target_turf(M, send_dir, pull_power)
|
||||
|
||||
@@ -2,40 +2,59 @@
|
||||
|
||||
/datum/action/bloodsucker/cloak
|
||||
name = "Cloak of Darkness"
|
||||
desc = "Blend into the shadows and become invisible to the untrained eye."
|
||||
desc = "Blend into the shadows and become invisible to the untrained eye. Movement is slowed in brightly lit areas."
|
||||
button_icon_state = "power_cloak"
|
||||
bloodcost = 5
|
||||
cooldown = 50
|
||||
bloodsucker_can_buy = TRUE
|
||||
amToggle = TRUE
|
||||
warn_constant_cost = TRUE
|
||||
var/was_running
|
||||
|
||||
var/light_min = 0.2 // If lum is above this, no good.
|
||||
var/moveintent_was_run
|
||||
var/runintent
|
||||
var/walk_threshold = 0.4 // arbitrary number, to be changed. edit in last commit: this is fine after testing on box station for a bit
|
||||
var/lum
|
||||
|
||||
/datum/action/bloodsucker/cloak/CheckCanUse(display_error)
|
||||
. = ..()
|
||||
if(!.)
|
||||
return
|
||||
// Must be Dark
|
||||
var/turf/T = owner.loc
|
||||
if(istype(T) && T.get_lumcount() > light_min)
|
||||
to_chat(owner, "<span class='warning'>This area is not dark enough to blend in</span>")
|
||||
return FALSE
|
||||
|
||||
// must have nobody around to see the cloak
|
||||
var/watchers = viewers(9,get_turf(owner))
|
||||
for(var/mob/living/M in watchers)
|
||||
if(M != owner)
|
||||
to_chat(owner, "<span class='warning'>You may only vanish into the shadows unseen.</span>")
|
||||
return FALSE
|
||||
|
||||
return TRUE
|
||||
|
||||
/datum/action/bloodsucker/cloak/ActivatePower()
|
||||
var/datum/antagonist/bloodsucker/bloodsuckerdatum = owner.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
|
||||
var/mob/living/user = owner
|
||||
was_running = (user.m_intent == MOVE_INTENT_RUN)
|
||||
if(was_running)
|
||||
user.toggle_move_intent()
|
||||
ADD_TRAIT(user, TRAIT_NORUNNING, "cloak of darkness")
|
||||
|
||||
moveintent_was_run = (user.m_intent == MOVE_INTENT_RUN)
|
||||
|
||||
while(bloodsuckerdatum && ContinueActive(user))
|
||||
// Pay Blood Toll (if awake)
|
||||
owner.alpha = max(20, owner.alpha - min(75, 10 + 5 * level_current))
|
||||
owner.alpha = max(35, owner.alpha - min(75, 10 + 5 * level_current))
|
||||
bloodsuckerdatum.AddBloodVolume(-0.2)
|
||||
sleep(5) // Check every few ticks that we haven't disabled this power
|
||||
|
||||
runintent = (user.m_intent == MOVE_INTENT_RUN)
|
||||
var/turf/T = get_turf(user)
|
||||
lum = T.get_lumcount()
|
||||
|
||||
if(istype(owner.loc))
|
||||
if(lum > walk_threshold)
|
||||
if(runintent)
|
||||
user.toggle_move_intent()
|
||||
ADD_TRAIT(user, TRAIT_NORUNNING, "cloak of darkness")
|
||||
|
||||
if(lum < walk_threshold)
|
||||
if(!runintent)
|
||||
user.toggle_move_intent()
|
||||
REMOVE_TRAIT(user, TRAIT_NORUNNING, "cloak of darkness")
|
||||
|
||||
sleep(5) // Check every few ticks
|
||||
|
||||
/datum/action/bloodsucker/cloak/ContinueActive(mob/living/user, mob/living/target)
|
||||
if (!..())
|
||||
@@ -43,15 +62,14 @@
|
||||
if(user.stat == !CONSCIOUS) // Must be CONSCIOUS
|
||||
to_chat(owner, "<span class='warning'>Your cloak failed due to you falling unconcious! </span>")
|
||||
return FALSE
|
||||
var/turf/T = owner.loc // Must be DARK
|
||||
if(istype(T) && T.get_lumcount() > light_min)
|
||||
to_chat(owner, "<span class='warning'>Your cloak failed due to there being too much light!</span>")
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/datum/action/bloodsucker/cloak/DeactivatePower(mob/living/user = owner, mob/living/target)
|
||||
..()
|
||||
REMOVE_TRAIT(user, TRAIT_NORUNNING, "cloak of darkness")
|
||||
user.alpha = 255
|
||||
if(was_running && user.m_intent != MOVE_INTENT_RUN)
|
||||
|
||||
runintent = (user.m_intent == MOVE_INTENT_RUN)
|
||||
|
||||
if(!runintent && moveintent_was_run)
|
||||
user.toggle_move_intent()
|
||||
|
||||
@@ -306,7 +306,7 @@
|
||||
// Bloodsuckers not affected by "the Kiss" of another vampire
|
||||
if(!target.mind || !target.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER))
|
||||
target.Unconscious(50,0)
|
||||
target.Knockdown(40 + 5 * level_current,1)
|
||||
target.DefaultCombatKnockdown(40 + 5 * level_current,1)
|
||||
// NOTE: THis is based on level of power!
|
||||
if(ishuman(target))
|
||||
target.adjustStaminaLoss(5, forced = TRUE)// Base Stamina Damage
|
||||
@@ -321,4 +321,4 @@
|
||||
// My mouth is no longer full
|
||||
REMOVE_TRAIT(owner, TRAIT_MUTE, "bloodsucker_feed")
|
||||
// Let me move immediately
|
||||
user.update_canmove()
|
||||
user.update_mobility()
|
||||
|
||||
@@ -100,8 +100,8 @@
|
||||
var/mob/living/simple_animal/SA = pick(/mob/living/simple_animal/mouse,/mob/living/simple_animal/mouse,/mob/living/simple_animal/mouse, /mob/living/simple_animal/hostile/retaliate/bat) //prob(300) /mob/living/simple_animal/mouse,
|
||||
new SA (owner.loc)
|
||||
// TELEPORT: Move to Coffin & Close it!
|
||||
user.set_resting(TRUE, TRUE, FALSE)
|
||||
do_teleport(owner, bloodsuckerdatum.coffin, no_effects = TRUE, forced = TRUE, channel = TELEPORT_CHANNEL_QUANTUM)
|
||||
user.resting = TRUE
|
||||
user.Stun(30,1)
|
||||
// CLOSE LID: If fail, force me in.
|
||||
if(!bloodsuckerdatum.coffin.close(owner))
|
||||
|
||||
@@ -76,16 +76,17 @@
|
||||
sleep(speed)
|
||||
UnregisterSignal(owner, COMSIG_MOVABLE_MOVED)
|
||||
hit = null
|
||||
user.update_canmove()
|
||||
user.update_mobility()
|
||||
|
||||
/datum/action/bloodsucker/targeted/haste/DeactivatePower(mob/living/user = owner, mob/living/target)
|
||||
..() // activate = FALSE
|
||||
user.update_canmove()
|
||||
user.update_mobility()
|
||||
|
||||
/datum/action/bloodsucker/targeted/haste/proc/on_move()
|
||||
for(var/mob/living/L in dview(1, get_turf(owner)))
|
||||
if(!hit[L] && (L != owner))
|
||||
hit[L] = TRUE
|
||||
playsound(L, "sound/weapons/punch[rand(1,4)].ogg", 15, 1, -1)
|
||||
L.Knockdown(10 + level_current * 5, override_hardstun = 0.1)
|
||||
L.DefaultCombatKnockdown(10 + level_current * 5)
|
||||
L.Paralyze(0.1)
|
||||
L.spin(10, 1)
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
cooldown = 120
|
||||
target_range = 3
|
||||
power_activates_immediately = TRUE
|
||||
message_Trigger = ""//"Whom will you subvert to your will?"
|
||||
message_Trigger = "Whom will you ensnare within your grasp?"
|
||||
must_be_capacitated = TRUE
|
||||
bloodsucker_can_buy = TRUE
|
||||
|
||||
@@ -52,32 +52,37 @@
|
||||
// set waitfor = FALSE <---- DONT DO THIS!We WANT this power to hold up ClickWithPower(), so that we can unlock the power when it's done.
|
||||
var/mob/living/carbon/target = A
|
||||
var/turf/T = get_turf(target)
|
||||
var/mob/living/L = owner
|
||||
// Clear Vars
|
||||
owner.pulling = null
|
||||
// Will we Knock them Down?
|
||||
var/do_knockdown = !is_A_facing_B(target,owner) || owner.alpha <= 0 || istype(owner.loc, /obj/structure/closet)
|
||||
// CAUSES: Target has their back to me, I'm invisible, or I'm in a Closet
|
||||
// Step One: Heatseek toward Target's Turf
|
||||
|
||||
walk_towards(owner, T, 0.1, 10) // NOTE: this runs in the background! to cancel it, you need to use walk(owner.current,0), or give them a new path.
|
||||
addtimer(CALLBACK(owner, .proc/_walk, 0), 2 SECONDS)
|
||||
if(get_turf(owner) != T && !(isliving(target) && target.Adjacent(owner)) && owner.incapacitated() && owner.resting)
|
||||
var/send_dir = get_dir(owner, T)
|
||||
new /datum/forced_movement(owner, get_ranged_target_turf(owner, send_dir, 1), 1, FALSE)
|
||||
owner.spin(10)
|
||||
// Step Two: Check if I'm at/adjectent to Target's CURRENT turf (not original...that was just a destination)
|
||||
sleep(1)
|
||||
if(target.Adjacent(owner))
|
||||
// LEVEL 2: If behind target, mute or unconscious!
|
||||
if(do_knockdown) // && level_current >= 1)
|
||||
target.Knockdown(15 + 10 * level_current,1)
|
||||
target.adjustStaminaLoss(40 + 10 * level_current)
|
||||
// Cancel Walk (we were close enough to contact them)
|
||||
walk(owner, 0)
|
||||
target.Stun(10,1) //Without this the victim can just walk away
|
||||
target.grabbedby(owner) // Taken from mutations.dm under changelings
|
||||
target.grippedby(owner, instant = TRUE) //instant aggro grab
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/_walk, owner, 0), 2 SECONDS)
|
||||
target.playsound_local(get_turf(owner), 'sound/bloodsucker/lunge_warn.ogg', 60, FALSE, pressure_affected = FALSE) // target-only telegraphing
|
||||
owner.playsound_local(owner, 'sound/bloodsucker/lunge_warn.ogg', 60, FALSE, pressure_affected = FALSE) // audio feedback to the user
|
||||
if(do_mob(owner, owner, 7, TRUE, TRUE))
|
||||
walk_towards(owner, T, 0.1, 10) // yes i know i shouldn't use this but i don't know how to work in anything better
|
||||
if(get_turf(owner) != T && !(isliving(target) && target.Adjacent(owner)) && owner.incapacitated() && !CHECK_MOBILITY(L, MOBILITY_STAND))
|
||||
var/send_dir = get_dir(owner, T)
|
||||
new /datum/forced_movement(owner, get_ranged_target_turf(owner, send_dir, 1), 1, FALSE)
|
||||
owner.spin(10)
|
||||
// Step Two: Check if I'm at/adjectent to Target's CURRENT turf (not original...that was just a destination)
|
||||
for(var/i in 1 to 6)
|
||||
if (target.Adjacent(owner))
|
||||
// LEVEL 2: If behind target, mute or unconscious!
|
||||
if(do_knockdown) // && level_current >= 1)
|
||||
target.Knockdown(15 + 10 * level_current,1)
|
||||
target.adjustStaminaLoss(40 + 10 * level_current)
|
||||
// Cancel Walk (we were close enough to contact them)
|
||||
walk(owner, 0)
|
||||
target.Stun(10,1) //Without this the victim can just walk away
|
||||
target.grabbedby(owner) // Taken from mutations.dm under changelings
|
||||
target.grippedby(owner, instant = TRUE) //instant aggro grab
|
||||
break
|
||||
sleep(3)
|
||||
|
||||
/datum/action/bloodsucker/targeted/lunge/DeactivatePower(mob/living/user = owner, mob/living/target)
|
||||
..() // activate = FALSE
|
||||
user.update_canmove()
|
||||
user.update_mobility()
|
||||
|
||||
@@ -11,24 +11,25 @@
|
||||
button_icon_state = "power_mez"
|
||||
bloodcost = 30
|
||||
cooldown = 300
|
||||
target_range = 1
|
||||
power_activates_immediately = FALSE
|
||||
target_range = 2
|
||||
power_activates_immediately = TRUE
|
||||
message_Trigger = "Whom will you subvert to your will?"
|
||||
must_be_capacitated = TRUE
|
||||
bloodsucker_can_buy = TRUE
|
||||
var/success
|
||||
|
||||
/datum/action/bloodsucker/targeted/mesmerize/CheckCanUse(display_error)
|
||||
. = ..()
|
||||
if(!.)
|
||||
return
|
||||
if (!owner.getorganslot(ORGAN_SLOT_EYES))
|
||||
if(!owner.getorganslot(ORGAN_SLOT_EYES))
|
||||
if (display_error)
|
||||
to_chat(owner, "<span class='warning'>You have no eyes with which to mesmerize.</span>")
|
||||
return FALSE
|
||||
// Check: Eyes covered?
|
||||
var/mob/living/L = owner
|
||||
if (istype(L) && L.is_eyes_covered() || !isturf(owner.loc))
|
||||
if (display_error)
|
||||
if(istype(L) && L.is_eyes_covered() || !isturf(owner.loc))
|
||||
if(display_error)
|
||||
to_chat(owner, "<span class='warning'>Your eyes are concealed from sight.</span>")
|
||||
return FALSE
|
||||
return TRUE
|
||||
@@ -38,74 +39,99 @@
|
||||
|
||||
/datum/action/bloodsucker/targeted/mesmerize/CheckCanTarget(atom/A,display_error)
|
||||
// Check: Self
|
||||
if (A == owner)
|
||||
if(A == owner)
|
||||
return FALSE
|
||||
var/mob/living/carbon/target = A // We already know it's carbon due to CheckValidTarget()
|
||||
|
||||
// Bloodsucker
|
||||
if (target.mind && target.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER))
|
||||
if(target.mind && target.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER))
|
||||
if (display_error)
|
||||
to_chat(owner, "<span class='warning'>Bloodsuckers are immune to [src].</span>")
|
||||
return FALSE
|
||||
// Dead/Unconscious
|
||||
if (target.stat > CONSCIOUS)
|
||||
if(target.stat > CONSCIOUS)
|
||||
if (display_error)
|
||||
to_chat(owner, "<span class='warning'>Your victim is not [(target.stat == DEAD || HAS_TRAIT(target, TRAIT_FAKEDEATH))?"alive":"conscious"].</span>")
|
||||
return FALSE
|
||||
// Check: Target has eyes?
|
||||
if (!target.getorganslot(ORGAN_SLOT_EYES))
|
||||
if(!target.getorganslot(ORGAN_SLOT_EYES))
|
||||
if (display_error)
|
||||
to_chat(owner, "<span class='warning'>They have no eyes!</span>")
|
||||
return FALSE
|
||||
// Check: Target blind?
|
||||
if (target.eye_blind > 0)
|
||||
if(target.eye_blind > 0)
|
||||
if (display_error)
|
||||
to_chat(owner, "<span class='warning'>Your victim's eyes are glazed over. They cannot perceive you.</span>")
|
||||
return FALSE
|
||||
// Check: Target See Me? (behind wall)
|
||||
if (!(owner in view(target_range, get_turf(target))))
|
||||
if(!(target in view(target_range, get_turf(owner))))
|
||||
// Sub-Check: GET CLOSER
|
||||
//if (!(owner in range(target_range, get_turf(target)))
|
||||
// if (display_error)
|
||||
// to_chat(owner, "<span class='warning'>You're too far from your victim.</span>")
|
||||
if (display_error)
|
||||
if(display_error)
|
||||
to_chat(owner, "<span class='warning'>You're too far outside your victim's view.</span>")
|
||||
return FALSE
|
||||
|
||||
if(target.has_status_effect(STATUS_EFFECT_MESMERIZE)) // ignores facing once the windup has started
|
||||
return TRUE
|
||||
|
||||
// Check: Facing target?
|
||||
if (!is_A_facing_B(owner,target)) // in unsorted.dm
|
||||
if(!is_A_facing_B(owner,target)) // in unsorted.dm
|
||||
if (display_error)
|
||||
to_chat(owner, "<span class='warning'>You must be facing your victim.</span>")
|
||||
return FALSE
|
||||
// Check: Target facing me?
|
||||
if (!target.resting && !is_A_facing_B(target,owner))
|
||||
if (display_error)
|
||||
if (CHECK_MOBILITY(target, MOBILITY_STAND) && !is_A_facing_B(target,owner))
|
||||
if(display_error)
|
||||
to_chat(owner, "<span class='warning'>Your victim must be facing you to see into your eyes.</span>")
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/datum/action/bloodsucker/targeted/mesmerize/proc/ContinueTarget(atom/A)
|
||||
var/mob/living/carbon/target = A
|
||||
var/mob/living/user = owner
|
||||
|
||||
var/cancontinue=CheckCanTarget(target)
|
||||
if(!cancontinue)
|
||||
success = FALSE
|
||||
target.remove_status_effect(STATUS_EFFECT_MESMERIZE)
|
||||
user.remove_status_effect(STATUS_EFFECT_MESMERIZE)
|
||||
DeactivatePower()
|
||||
DeactivateRangedAbility()
|
||||
StartCooldown()
|
||||
to_chat(user, "<span class='warning'>[target] has escaped your gaze!</span>")
|
||||
UnregisterSignal(target, COMSIG_MOVABLE_MOVED)
|
||||
|
||||
/datum/action/bloodsucker/targeted/mesmerize/FireTargetedPower(atom/A)
|
||||
// set waitfor = FALSE <---- DONT DO THIS!We WANT this power to hold up ClickWithPower(), so that we can unlock the power when it's done.
|
||||
var/mob/living/carbon/target = A
|
||||
var/mob/living/user = owner
|
||||
|
||||
if(istype(target))
|
||||
target.Stun(40) //Utterly useless without this, its okay since there are so many checks to go through
|
||||
target.apply_status_effect(STATUS_EFFECT_MESMERIZE, 45) //So you cant rotate with combat mode, plus fancy status alert
|
||||
|
||||
if(do_mob(user, target, 40, 0, TRUE, extra_checks = CALLBACK(src, .proc/ContinueActive, user, target)))
|
||||
PowerActivatedSuccessfully() // PAY COST! BEGIN COOLDOWN!
|
||||
var/power_time = 90 + level_current * 12
|
||||
target.apply_status_effect(STATUS_EFFECT_MESMERIZE, power_time + 80)
|
||||
to_chat(user, "<span class='notice'>[target] is fixed in place by your hypnotic gaze.</span>")
|
||||
target.Stun(power_time)
|
||||
target.next_move = world.time + power_time // <--- Use direct change instead. We want an unmodified delay to their next move // target.changeNext_move(power_time) // check click.dm
|
||||
target.notransform = TRUE // <--- Fuck it. We tried using next_move, but they could STILL resist. We're just doing a hard freeze.
|
||||
spawn(power_time)
|
||||
if(istype(target))
|
||||
target.notransform = FALSE
|
||||
// They Woke Up! (Notice if within view)
|
||||
if(istype(user) && target.stat == CONSCIOUS && (target in view(10, get_turf(user))) )
|
||||
to_chat(user, "<span class='warning'>[target] has snapped out of their trance.</span>")
|
||||
success = TRUE
|
||||
var/power_time = 138 + level_current * 12
|
||||
target.apply_status_effect(STATUS_EFFECT_MESMERIZE, 30)
|
||||
user.apply_status_effect(STATUS_EFFECT_MESMERIZE, 30)
|
||||
|
||||
RegisterSignal(target, COMSIG_MOVABLE_MOVED, .proc/ContinueTarget)
|
||||
|
||||
// 3 second windup
|
||||
sleep(30)
|
||||
if(success)
|
||||
PowerActivatedSuccessfully() // blood & cooldown only altered if power activated successfully - less "fuck you"-y
|
||||
target.face_atom(user)
|
||||
target.apply_status_effect(STATUS_EFFECT_MESMERIZE, power_time) // pretty much purely cosmetic
|
||||
target.Stun(power_time)
|
||||
to_chat(user, "<span class='notice'>[target] is fixed in place by your hypnotic gaze.</span>")
|
||||
target.next_move = world.time + power_time // <--- Use direct change instead. We want an unmodified delay to their next move // target.changeNext_move(power_time) // check click.dm
|
||||
target.notransform = TRUE // <--- Fuck it. We tried using next_move, but they could STILL resist. We're just doing a hard freeze.
|
||||
spawn(power_time)
|
||||
if(istype(target) && success)
|
||||
target.notransform = FALSE
|
||||
// They Woke Up! (Notice if within view)
|
||||
if(istype(user) && target.stat == CONSCIOUS && (target in view(10, get_turf(user))) )
|
||||
to_chat(user, "<span class='warning'>[target] has snapped out of their trance.</span>")
|
||||
|
||||
/datum/action/bloodsucker/targeted/mesmerize/ContinueActive(mob/living/user, mob/living/target)
|
||||
return ..() && CheckCanUse() && CheckCanTarget(target)
|
||||
|
||||
@@ -92,7 +92,7 @@
|
||||
H.socks = random_socks(H.gender)
|
||||
//H.eye_color = random_eye_color()
|
||||
REMOVE_TRAIT(H, TRAIT_DISFIGURED, null) //
|
||||
H.dna.features = random_features()
|
||||
H.dna.features = random_features(H.dna.species?.id)
|
||||
|
||||
// Apply Appearance
|
||||
H.update_body() // Outfit and underware, also body.
|
||||
|
||||
@@ -81,7 +81,7 @@
|
||||
if(istype(our_target, /datum/cellular_emporium))
|
||||
cellular_emporium = our_target
|
||||
else
|
||||
throw EXCEPTION("cellular_emporium action created with non emporium")
|
||||
CRASH("cellular_emporium action created with non emporium")
|
||||
|
||||
/datum/action/innate/cellular_emporium/Activate()
|
||||
cellular_emporium.ui_interact(owner)
|
||||
|
||||
@@ -18,7 +18,6 @@
|
||||
user.tod = STATION_TIME_TIMESTAMP("hh:mm:ss", world.time)
|
||||
user.fakedeath("changeling") //play dead
|
||||
user.update_stat()
|
||||
user.update_canmove()
|
||||
|
||||
addtimer(CALLBACK(src, .proc/ready_to_regenerate, user), LING_FAKEDEATH_TIME, TIMER_UNIQUE)
|
||||
return TRUE
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
H.confused += 3
|
||||
for(var/mob/living/silicon/S in range(2,user))
|
||||
to_chat(S, "<span class='userdanger'>Your sensors are disabled by a shower of blood!</span>")
|
||||
S.Knockdown(60)
|
||||
S.DefaultCombatKnockdown(60)
|
||||
var/turf = get_turf(user)
|
||||
user.gib()
|
||||
. = TRUE
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
|
||||
if(issilicon(M))
|
||||
SEND_SOUND(M, sound('sound/weapons/flash.ogg'))
|
||||
M.Knockdown(rand(100,200))
|
||||
M.DefaultCombatKnockdown(rand(100,200))
|
||||
|
||||
for(var/obj/machinery/light/L in range(4, user))
|
||||
L.on = 1
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
changeling.chem_recharge_slowdown -= 0.5
|
||||
if(stacks >= 20)
|
||||
to_chat(user, "<span class='danger'>We collapse in exhaustion.</span>")
|
||||
user.Knockdown(60)
|
||||
user.DefaultCombatKnockdown(60)
|
||||
user.emote("gasp")
|
||||
|
||||
INVOKE_ASYNC(src, .proc/muscle_loop, user)
|
||||
@@ -40,7 +40,7 @@
|
||||
if(user.stat != CONSCIOUS || user.staminaloss >= 90)
|
||||
active = !active
|
||||
to_chat(user, "<span class='notice'>Our muscles relax without the energy to strengthen them.</span>")
|
||||
user.Knockdown(40)
|
||||
user.DefaultCombatKnockdown(40)
|
||||
user.remove_movespeed_modifier(MOVESPEED_ID_CHANGELING_MUSCLES)
|
||||
changeling.chem_recharge_slowdown -= 0.5
|
||||
break
|
||||
|
||||
@@ -80,7 +80,7 @@
|
||||
if(iscultist(L)) //No longer stuns cultists, instead sets them on fire and burns them
|
||||
to_chat(L, "<span class='heavy_brass'>\"Watch your step, wretch.\"</span>")
|
||||
L.adjustFireLoss(10)
|
||||
L.Knockdown(20, FALSE)
|
||||
L.DefaultCombatKnockdown(20, FALSE)
|
||||
L.adjust_fire_stacks(5) //Burn!
|
||||
L.IgniteMob()
|
||||
else
|
||||
@@ -155,7 +155,7 @@
|
||||
if(brutedamage || burndamage)
|
||||
L.adjustBruteLoss(-(brutedamage * 0.25))
|
||||
L.adjustFireLoss(-(burndamage * 0.25))
|
||||
L.Knockdown(50) //Completely defenseless for five seconds - mainly to give them time to read over the information they've just been presented with
|
||||
L.DefaultCombatKnockdown(50) //Completely defenseless for five seconds - mainly to give them time to read over the information they've just been presented with
|
||||
if(iscarbon(L))
|
||||
var/mob/living/carbon/C = L
|
||||
C.silent += 5
|
||||
|
||||
@@ -196,7 +196,7 @@
|
||||
if(!iscultist(L))
|
||||
L.visible_message("<span class='warning'>[L]'s eyes blaze with brilliant light!</span>", \
|
||||
"<span class='userdanger'>Your vision suddenly screams with white-hot light!</span>")
|
||||
L.Knockdown(15, TRUE, FALSE, 15)
|
||||
L.DefaultCombatKnockdown(15, TRUE, FALSE, 15)
|
||||
L.apply_status_effect(STATUS_EFFECT_KINDLE)
|
||||
L.flash_act(1, 1)
|
||||
if(issilicon(target))
|
||||
|
||||
@@ -57,15 +57,15 @@
|
||||
else if(!..())
|
||||
if(!L.anti_magic_check())
|
||||
if(issilicon(L))
|
||||
L.Knockdown(100)
|
||||
L.DefaultCombatKnockdown(100)
|
||||
else if(iscultist(L))
|
||||
L.confused += CLAMP(10 - L.confused, 0, 5) // Spearthrow now confuses enemy cultists + just deals extra damage / sets on fire instead of hardstunning + damage
|
||||
to_chat(L, "<span class ='userdanger'>[src] crashes into you with burning force, sending you reeling!</span>")
|
||||
L.adjust_fire_stacks(2)
|
||||
L.Knockdown(1)
|
||||
L.DefaultCombatKnockdown(1)
|
||||
L.IgniteMob()
|
||||
else
|
||||
L.Knockdown(40)
|
||||
L.DefaultCombatKnockdown(40)
|
||||
GLOB.clockwork_vitality += L.adjustFireLoss(bonus_burn * 3) //normally a total of 40 damage, 70 with ratvar
|
||||
break_spear(T)
|
||||
else
|
||||
|
||||
@@ -176,7 +176,7 @@
|
||||
var/datum/status_effect/belligerent/B = C.apply_status_effect(STATUS_EFFECT_BELLIGERENT)
|
||||
if(!QDELETED(B))
|
||||
B.duration = world.time + 30
|
||||
C.Knockdown(5) //knocks down for half a second if affected
|
||||
C.DefaultCombatKnockdown(5) //knocks down for half a second if affected
|
||||
sleep(!GLOB.ratvar_approaches ? 16 : 10)
|
||||
name = "judicial blast"
|
||||
layer = ABOVE_ALL_MOB_LAYER
|
||||
@@ -196,7 +196,7 @@
|
||||
L.visible_message("<span class='warning'>Strange energy flows into [L]'s [I.name]!</span>", \
|
||||
"<span class='userdanger'>Your [I.name] shields you from [src]!</span>")
|
||||
continue
|
||||
L.Knockdown(15) //knocks down briefly when exploding
|
||||
L.DefaultCombatKnockdown(15) //knocks down briefly when exploding
|
||||
if(!iscultist(L))
|
||||
L.visible_message("<span class='warning'>[L] is struck by a judicial explosion!</span>", \
|
||||
"<span class='userdanger'>[!issilicon(L) ? "An unseen force slams you into the ground!" : "ERROR: Motor servos disabled by external source!"]</span>")
|
||||
|
||||
@@ -57,5 +57,5 @@
|
||||
L.confused = min(L.confused + 15, 50)
|
||||
L.dizziness = min(L.dizziness + 15, 50)
|
||||
if(L.confused >= 25)
|
||||
L.Knockdown(FLOOR(L.confused * 0.8, 1))
|
||||
L.DefaultCombatKnockdown(FLOOR(L.confused * 0.8, 1))
|
||||
take_damage(max_integrity)
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
if(buckled_mobs && LAZYLEN(buckled_mobs))
|
||||
var/mob/living/L = buckled_mobs[1]
|
||||
if(iscarbon(L))
|
||||
L.Knockdown(100)
|
||||
L.DefaultCombatKnockdown(100)
|
||||
L.visible_message("<span class='warning'>[L] is maimed as the skewer shatters while still in [L.p_their()] body!</span>")
|
||||
L.adjustBruteLoss(15)
|
||||
unbuckle_mob(L)
|
||||
@@ -117,6 +117,6 @@
|
||||
return
|
||||
skewee.visible_message("<span class='danger'>[skewee] comes free of [src] with a squelching pop!</span>", \
|
||||
"<span class='boldannounce'>You come free of [src]!</span>")
|
||||
skewee.Knockdown(30)
|
||||
skewee.DefaultCombatKnockdown(30)
|
||||
playsound(skewee, 'sound/misc/desceration-03.ogg', 50, TRUE)
|
||||
unbuckle_mob(skewee)
|
||||
|
||||
@@ -446,7 +446,7 @@
|
||||
var/atom/throw_target = get_edge_target_turf(L, user.dir)
|
||||
L.throw_at(throw_target, 7, 1, user)
|
||||
else if(!iscultist(L))
|
||||
L.Knockdown(160)
|
||||
L.DefaultCombatKnockdown(160)
|
||||
L.adjustStaminaLoss(140) //Ensures hard stamcrit
|
||||
L.flash_act(1,1)
|
||||
if(issilicon(target))
|
||||
|
||||
@@ -46,10 +46,11 @@
|
||||
/obj/item/melee/cultblade/Initialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/butchering, 40, 100)
|
||||
AddElement(/datum/element/sword_point)
|
||||
|
||||
/obj/item/melee/cultblade/attack(mob/living/target, mob/living/carbon/human/user)
|
||||
if(!iscultist(user))
|
||||
user.Knockdown(100)
|
||||
user.DefaultCombatKnockdown(100)
|
||||
user.dropItemToGround(src, TRUE)
|
||||
user.visible_message("<span class='warning'>A powerful force shoves [user] away from [target]!</span>", \
|
||||
"<span class='cultlarge'>\"You shouldn't play with sharp things. You'll poke someone's eye out.\"</span>")
|
||||
@@ -148,7 +149,7 @@
|
||||
user.emote("scream")
|
||||
user.apply_damage(30, BRUTE, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM))
|
||||
user.dropItemToGround(src, TRUE)
|
||||
user.Knockdown(50)
|
||||
user.DefaultCombatKnockdown(50)
|
||||
return
|
||||
force = initial(force)
|
||||
jaunt.Grant(user, src)
|
||||
@@ -405,7 +406,7 @@
|
||||
to_chat(user, "<span class='warning'>An overwhelming sense of nausea overpowers you!</span>")
|
||||
user.dropItemToGround(src, TRUE)
|
||||
user.Dizzy(30)
|
||||
user.Knockdown(100)
|
||||
user.DefaultCombatKnockdown(100)
|
||||
else
|
||||
to_chat(user, "<span class='cultlarge'>\"Trying to use things you don't own is bad, you know.\"</span>")
|
||||
to_chat(user, "<span class='userdanger'>The armor squeezes at your body!</span>")
|
||||
@@ -457,7 +458,7 @@
|
||||
to_chat(user, "<span class='warning'>An overwhelming sense of nausea overpowers you!</span>")
|
||||
user.dropItemToGround(src, TRUE)
|
||||
user.Dizzy(30)
|
||||
user.Knockdown(100)
|
||||
user.DefaultCombatKnockdown(100)
|
||||
else
|
||||
to_chat(user, "<span class='cultlarge'>\"Trying to use things you don't own is bad, you know.\"</span>")
|
||||
to_chat(user, "<span class='userdanger'>The robes squeeze at your body!</span>")
|
||||
@@ -478,7 +479,7 @@
|
||||
to_chat(user, "<span class='cultlarge'>\"You want to be blind, do you?\"</span>")
|
||||
user.dropItemToGround(src, TRUE)
|
||||
user.Dizzy(30)
|
||||
user.Knockdown(100)
|
||||
user.DefaultCombatKnockdown(100)
|
||||
user.blind_eyes(30)
|
||||
|
||||
/obj/item/reagent_containers/glass/beaker/unholywater
|
||||
@@ -499,7 +500,7 @@
|
||||
/obj/item/shuttle_curse/attack_self(mob/living/user)
|
||||
if(!iscultist(user))
|
||||
user.dropItemToGround(src, TRUE)
|
||||
user.Knockdown(100)
|
||||
user.DefaultCombatKnockdown(100)
|
||||
to_chat(user, "<span class='warning'>A powerful force shoves you away from [src]!</span>")
|
||||
return
|
||||
if(curselimit > 1)
|
||||
@@ -705,10 +706,10 @@
|
||||
if(is_servant_of_ratvar(L))
|
||||
to_chat(L, "<span class='cultlarge'>\"Kneel for me, scum\"</span>")
|
||||
L.confused += CLAMP(10 - L.confused, 0, 5) //confuses and lightly knockdowns + damages hostile cultists instead of hardstunning like before
|
||||
L.Knockdown(15)
|
||||
L.DefaultCombatKnockdown(15)
|
||||
L.adjustBruteLoss(10)
|
||||
else
|
||||
L.Knockdown(50)
|
||||
L.DefaultCombatKnockdown(50)
|
||||
break_spear(T)
|
||||
else
|
||||
..()
|
||||
@@ -843,7 +844,7 @@
|
||||
INVOKE_ASYNC(src, .proc/pewpew, user, params)
|
||||
var/obj/structure/emergency_shield/invoker/N = new(user.loc)
|
||||
if(do_after(user, 90, target = user))
|
||||
user.Knockdown(40)
|
||||
user.DefaultCombatKnockdown(40)
|
||||
to_chat(user, "<span class='cult italic'>You have exhausted the power of this spell!</span>")
|
||||
firing = FALSE
|
||||
if(N)
|
||||
@@ -908,7 +909,7 @@
|
||||
else
|
||||
var/mob/living/L = target
|
||||
if(L.density)
|
||||
L.Knockdown(20)
|
||||
L.DefaultCombatKnockdown(20)
|
||||
L.adjustBruteLoss(45)
|
||||
playsound(L, 'sound/hallucinations/wail.ogg', 50, 1)
|
||||
L.emote("scream")
|
||||
@@ -944,7 +945,7 @@
|
||||
T.visible_message("<span class='warning'>The sheer force from [P] shatters the mirror shield!</span>")
|
||||
new /obj/effect/temp_visual/cult/sparks(T)
|
||||
playsound(T, 'sound/effects/glassbr3.ogg', 100)
|
||||
owner.Knockdown(25)
|
||||
owner.DefaultCombatKnockdown(25)
|
||||
qdel(src)
|
||||
return FALSE
|
||||
if(P.is_reflectable)
|
||||
@@ -1001,9 +1002,9 @@
|
||||
else if(!..())
|
||||
if(!L.anti_magic_check())
|
||||
if(is_servant_of_ratvar(L))
|
||||
L.Knockdown(60)
|
||||
L.DefaultCombatKnockdown(60)
|
||||
else
|
||||
L.Knockdown(30)
|
||||
L.DefaultCombatKnockdown(30)
|
||||
if(D.thrower)
|
||||
for(var/mob/living/Next in orange(2, T))
|
||||
if(!Next.density || iscultist(Next))
|
||||
|
||||
@@ -219,7 +219,7 @@ structure_check() searches for nearby cultist structures required for the invoca
|
||||
L.visible_message("<span class='warning'>[L]'s eyes glow a defiant yellow!</span>", \
|
||||
"<span class='cultlarge'>\"Stop resisting. You <i>will</i> be mi-\"</span>\n\
|
||||
<span class='large_brass'>\"Give up and you will feel pain unlike anything you've ever felt!\"</span>")
|
||||
L.Knockdown(80)
|
||||
L.DefaultCombatKnockdown(80)
|
||||
else if(is_convertable)
|
||||
do_convert(L, invokers)
|
||||
else
|
||||
@@ -908,7 +908,7 @@ structure_check() searches for nearby cultist structures required for the invoca
|
||||
if(affecting.key)
|
||||
affecting.visible_message("<span class='warning'>[affecting] slowly relaxes, the glow around [affecting.p_them()] dimming.</span>", \
|
||||
"<span class='danger'>You are re-united with your physical form. [src] releases its hold over you.</span>")
|
||||
affecting.Knockdown(40)
|
||||
affecting.DefaultCombatKnockdown(40)
|
||||
break
|
||||
if(affecting.health <= 10)
|
||||
to_chat(G, "<span class='cultitalic'>Your body can no longer sustain the connection!</span>")
|
||||
@@ -970,7 +970,7 @@ structure_check() searches for nearby cultist structures required for the invoca
|
||||
playsound(T, 'sound/magic/enter_blood.ogg', 100, 1)
|
||||
visible_message("<span class='warning'>A colossal shockwave of energy bursts from the rune, disintegrating it in the process!</span>")
|
||||
for(var/mob/living/L in range(src, 3))
|
||||
L.Knockdown(30)
|
||||
L.DefaultCombatKnockdown(30)
|
||||
empulse(T, 0.42*(intensity), 1)
|
||||
var/list/images = list()
|
||||
var/zmatch = T.z
|
||||
|
||||
@@ -477,7 +477,7 @@ GLOBAL_LIST_INIT(devil_suffix, list(" the Red", " the Soulless", " the Master",
|
||||
if(SOULVALUE >= ARCH_THRESHOLD && ascendable)
|
||||
A.convert_to_archdevil()
|
||||
else
|
||||
throw EXCEPTION("Unable to find a blobstart landmark for hellish resurrection")
|
||||
CRASH("Unable to find a blobstart landmark for hellish resurrection")
|
||||
|
||||
|
||||
/datum/antagonist/devil/proc/update_hud()
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
if(BANE_HARVEST)
|
||||
if(istype(weapon, /obj/item/reagent_containers/food/snacks/grown/))
|
||||
visible_message("<span class='warning'>The spirits of the harvest aid in the exorcism.</span>", "<span class='notice'>The harvest spirits are harming you.</span>")
|
||||
Knockdown(40)
|
||||
DefaultCombatKnockdown(40)
|
||||
qdel(weapon)
|
||||
return 2
|
||||
return 1
|
||||
@@ -70,16 +70,10 @@
|
||||
O.explanation_text = "Protect \the [M.current.real_name], the [M.assigned_role], from harm."
|
||||
objectives += O
|
||||
if(4) //flavor
|
||||
if(helping_station)
|
||||
var/datum/objective/flavor/ninja_helping/O = new /datum/objective/flavor/ninja_helping
|
||||
O.owner = owner
|
||||
O.forge_objective()
|
||||
objectives += O
|
||||
else
|
||||
var/datum/objective/flavor/ninja_syndie/O = new /datum/objective/flavor/ninja_helping
|
||||
O.owner = owner
|
||||
O.forge_objective()
|
||||
objectives += O
|
||||
var/datum/objective/flavor/O = helping_station ? new /datum/objective/flavor/ninja_helping : new /datum/objective/flavor/ninja_syndie
|
||||
O.owner = owner
|
||||
O.forge_objective()
|
||||
objectives += O
|
||||
else
|
||||
break
|
||||
var/datum/objective/O = new /datum/objective/survive()
|
||||
|
||||
@@ -178,23 +178,22 @@
|
||||
else
|
||||
return NUKE_OFF_UNLOCKED
|
||||
|
||||
/obj/machinery/nuclearbomb/update_icon()
|
||||
if(deconstruction_state == NUKESTATE_INTACT)
|
||||
switch(get_nuke_state())
|
||||
if(NUKE_OFF_LOCKED, NUKE_OFF_UNLOCKED)
|
||||
icon_state = "nuclearbomb_base"
|
||||
update_icon_interior()
|
||||
update_icon_lights()
|
||||
if(NUKE_ON_TIMING)
|
||||
cut_overlays()
|
||||
icon_state = "nuclearbomb_timing"
|
||||
if(NUKE_ON_EXPLODING)
|
||||
cut_overlays()
|
||||
icon_state = "nuclearbomb_exploding"
|
||||
else
|
||||
/obj/machinery/nuclearbomb/update_icon_state()
|
||||
if(deconstruction_state != NUKESTATE_INTACT)
|
||||
icon_state = "nuclearbomb_base"
|
||||
update_icon_interior()
|
||||
update_icon_lights()
|
||||
return
|
||||
switch(get_nuke_state())
|
||||
if(NUKE_OFF_LOCKED, NUKE_OFF_UNLOCKED)
|
||||
icon_state = "nuclearbomb_base"
|
||||
if(NUKE_ON_TIMING)
|
||||
icon_state = "nuclearbomb_timing"
|
||||
if(NUKE_ON_EXPLODING)
|
||||
icon_state = "nuclearbomb_exploding"
|
||||
|
||||
/obj/machinery/nuclearbomb/update_overlays()
|
||||
. = ..()
|
||||
update_icon_interior()
|
||||
update_icon_lights()
|
||||
|
||||
/obj/machinery/nuclearbomb/proc/update_icon_interior()
|
||||
cut_overlay(interior)
|
||||
|
||||
@@ -191,7 +191,7 @@
|
||||
return 0
|
||||
|
||||
/obj/item/IntegrateAmount() //returns the amount of resources gained when eating this item
|
||||
if(custom_materials[getmaterialref(/datum/material/iron)] || custom_materials[getmaterialref(/datum/material/glass)])
|
||||
if(custom_materials[SSmaterials.GetMaterialRef(/datum/material/iron)] || custom_materials[SSmaterials.GetMaterialRef(/datum/material/glass)])
|
||||
return 1
|
||||
return ..()
|
||||
|
||||
@@ -586,7 +586,7 @@
|
||||
playsound(loc,'sound/effects/snap.ogg',50, 1, -1)
|
||||
L.electrocute_act(0, src, 1, 1, 1)
|
||||
if(iscyborg(L))
|
||||
L.Knockdown(100)
|
||||
L.DefaultCombatKnockdown(100)
|
||||
qdel(src)
|
||||
..()
|
||||
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
var/should_give_codewords = TRUE
|
||||
var/should_equip = TRUE
|
||||
var/traitor_kind = TRAITOR_HUMAN //Set on initial assignment
|
||||
var/datum/contractor_hub/contractor_hub
|
||||
hijack_speed = 0.5 //10 seconds per hijack stage by default
|
||||
|
||||
/datum/antagonist/traitor/on_gain()
|
||||
@@ -413,6 +414,9 @@
|
||||
|
||||
var/special_role_text = lowertext(name)
|
||||
|
||||
if(contractor_hub)
|
||||
result += contractor_round_end()
|
||||
|
||||
if(traitorwin)
|
||||
result += "<span class='greentext'>The [special_role_text] was successful!</span>"
|
||||
else
|
||||
@@ -421,12 +425,44 @@
|
||||
|
||||
return result.Join("<br>")
|
||||
|
||||
/// Proc detailing contract kit buys/completed contracts/additional info
|
||||
/datum/antagonist/traitor/proc/contractor_round_end()
|
||||
var result = ""
|
||||
var total_spent_rep = 0
|
||||
|
||||
var/completed_contracts = 0
|
||||
var/tc_total = contractor_hub.contract_TC_payed_out + contractor_hub.contract_TC_to_redeem
|
||||
for(var/datum/syndicate_contract/contract in contractor_hub.assigned_contracts)
|
||||
if(contract.status == CONTRACT_STATUS_COMPLETE)
|
||||
completed_contracts++
|
||||
|
||||
var/contractor_item_icons = "" // Icons of purchases
|
||||
var/contractor_support_unit = "" // Set if they had a support unit - and shows appended to their contracts completed
|
||||
|
||||
for(var/datum/contractor_item/contractor_purchase in contractor_hub.purchased_items) // Get all the icons/total cost for all our items bought
|
||||
contractor_item_icons += "<span class='tooltip_container'>\[ <i class=\"fas [contractor_purchase.item_icon]\"></i><span class='tooltip_hover'><b>[contractor_purchase.name] - [contractor_purchase.cost] Rep</b><br><br>[contractor_purchase.desc]</span> \]</span>"
|
||||
total_spent_rep += contractor_purchase.cost
|
||||
if(istype(contractor_purchase, /datum/contractor_item/contractor_partner)) // Special case for reinforcements, we want to show their ckey and name on round end.
|
||||
var/datum/contractor_item/contractor_partner/partner = contractor_purchase
|
||||
contractor_support_unit += "<br><b>[partner.partner_mind.key]</b> played <b>[partner.partner_mind.current.name]</b>, their contractor support unit."
|
||||
if (contractor_hub.purchased_items.len)
|
||||
result += "<br>(used [total_spent_rep] Rep)"
|
||||
result += contractor_item_icons
|
||||
result += "<br>"
|
||||
if(completed_contracts > 0)
|
||||
var/pluralCheck = "contract"
|
||||
if(completed_contracts > 1)
|
||||
pluralCheck = "contracts"
|
||||
result += "Completed <span class='greentext'>[completed_contracts]</span> [pluralCheck] for a total of \
|
||||
<span class='greentext'>[tc_total] TC</span>!<br>"
|
||||
return result
|
||||
|
||||
/datum/antagonist/traitor/roundend_report_footer()
|
||||
var/phrases = jointext(GLOB.syndicate_code_phrase, ", ")
|
||||
var/responses = jointext(GLOB.syndicate_code_response, ", ")
|
||||
|
||||
var message = "<br><b>The code phrases were:</b> <span class='bluetext'>[phrases]</span><br>\
|
||||
<b>The code responses were:</b> <span class='redtext'>[responses]</span><br>"
|
||||
<b>The code responses were:</b> <span class='redtext'>[responses]</span><br>"
|
||||
|
||||
return message
|
||||
|
||||
|
||||
@@ -0,0 +1,227 @@
|
||||
// Support unit gets it's own very basic antag datum for admin logging.
|
||||
/datum/antagonist/traitor/contractor_support
|
||||
name = "Contractor Support Unit"
|
||||
antag_moodlet = /datum/mood_event/focused
|
||||
show_in_roundend = FALSE /// We're already adding them in to the contractor's roundend.
|
||||
give_objectives = TRUE /// We give them their own custom objective.
|
||||
show_in_antagpanel = FALSE /// Not a proper/full antag.
|
||||
should_equip = FALSE /// Don't give them an uplink.
|
||||
var/datum/team/contractor_team/contractor_team
|
||||
|
||||
/datum/team/contractor_team // Team for storing both the contractor and their support unit - only really for the HUD and admin logging.
|
||||
show_roundend_report = FALSE
|
||||
|
||||
/datum/antagonist/traitor/contractor_support/forge_traitor_objectives()
|
||||
var/datum/objective/generic_objective = new
|
||||
generic_objective.name = "Follow Contractor's Orders"
|
||||
generic_objective.explanation_text = "Follow your orders. Assist agents in this mission area."
|
||||
generic_objective.completed = TRUE
|
||||
add_objective(generic_objective)
|
||||
|
||||
/datum/contractor_hub
|
||||
var/contract_rep = 0
|
||||
var/list/hub_items = list()
|
||||
var/list/purchased_items = list()
|
||||
var/static/list/contractor_items = typecacheof(/datum/contractor_item/, TRUE)
|
||||
var/datum/syndicate_contract/current_contract
|
||||
var/list/datum/syndicate_contract/assigned_contracts = list()
|
||||
var/list/assigned_targets = list() // used as a blacklist to make sure we're not assigning targets already assigned
|
||||
var/contract_TC_payed_out = 0 // Keeping track for roundend reporting
|
||||
var/contract_TC_to_redeem = 0 // Used internally and roundend reporting - what TC we have available to cashout.
|
||||
|
||||
/datum/contractor_hub/proc/create_hub_items()
|
||||
for(var/path in contractor_items)
|
||||
var/datum/contractor_item/contractor_item = new path
|
||||
hub_items.Add(contractor_item)
|
||||
|
||||
/datum/contractor_hub/proc/create_contracts(datum/mind/owner) // 6 initial contracts
|
||||
var/list/to_generate = list(
|
||||
CONTRACT_PAYOUT_LARGE,
|
||||
CONTRACT_PAYOUT_MEDIUM,
|
||||
CONTRACT_PAYOUT_SMALL,
|
||||
CONTRACT_PAYOUT_SMALL,
|
||||
CONTRACT_PAYOUT_SMALL,
|
||||
CONTRACT_PAYOUT_SMALL
|
||||
)
|
||||
|
||||
var/lowest_TC_threshold = 30 // We don't want the sum of all the payouts to be under this amount
|
||||
var/total = 0
|
||||
var/lowest_paying_sum = 0
|
||||
var/datum/syndicate_contract/lowest_paying_contract
|
||||
|
||||
to_generate = shuffle(to_generate) // Randomise order, so we don't have contracts always in payout order.
|
||||
var/start_index = 1 // Support contract generation happening multiple times
|
||||
if(assigned_contracts.len != 0)
|
||||
start_index = assigned_contracts.len + 1
|
||||
|
||||
for(var/i = 1; i <= to_generate.len; i++) // Generate contracts, and find the lowest paying.
|
||||
var/datum/syndicate_contract/contract_to_add = new(owner, assigned_targets, to_generate[i])
|
||||
var/contract_payout_total = contract_to_add.contract.payout + contract_to_add.contract.payout_bonus
|
||||
assigned_targets.Add(contract_to_add.contract.target)
|
||||
if(!lowest_paying_contract || (contract_payout_total < lowest_paying_sum))
|
||||
lowest_paying_sum = contract_payout_total
|
||||
lowest_paying_contract = contract_to_add
|
||||
total += contract_payout_total
|
||||
contract_to_add.id = start_index
|
||||
assigned_contracts.Add(contract_to_add)
|
||||
start_index++
|
||||
if(total < lowest_TC_threshold) // If the threshold for TC payouts isn't reached, boost the lowest paying contract
|
||||
lowest_paying_contract.contract.payout_bonus += (lowest_TC_threshold - total)
|
||||
|
||||
/datum/contractor_item
|
||||
var/name // Name of item
|
||||
var/desc // description of item
|
||||
var/item // item path, no item path means the purchase needs it's own handle_purchase()
|
||||
var/item_icon = "fa-broadcast-tower" // fontawesome icon to use inside the hub - https://fontawesome.com/icons/
|
||||
var/limited = -1 // Any number above 0 for how many times it can be bought in a round for a single traitor. -1 is unlimited.
|
||||
var/cost // Cost of the item in contract rep.
|
||||
|
||||
/datum/contractor_item/contract_reroll
|
||||
name = "Contract Reroll"
|
||||
desc = "Request a reroll of your current contract list. Will generate a new target, payment, and dropoff for the contracts you currently have available."
|
||||
item_icon = "fa-dice"
|
||||
limited = 2
|
||||
cost = 0
|
||||
|
||||
/datum/contractor_item/contract_reroll/handle_purchase(var/datum/contractor_hub/hub)
|
||||
. = ..()
|
||||
if (.)
|
||||
var/list/new_target_list = list() // We're not regenerating already completed/aborted/extracting contracts, but we don't want to repeat their targets.
|
||||
for(var/datum/syndicate_contract/contract_check in hub.assigned_contracts)
|
||||
if (contract_check.status != CONTRACT_STATUS_ACTIVE && contract_check.status != CONTRACT_STATUS_INACTIVE)
|
||||
if (contract_check.contract.target)
|
||||
new_target_list.Add(contract_check.contract.target)
|
||||
continue
|
||||
for(var/datum/syndicate_contract/rerolling_contract in hub.assigned_contracts) // Reroll contracts without duplicates
|
||||
if (rerolling_contract.status != CONTRACT_STATUS_ACTIVE && rerolling_contract.status != CONTRACT_STATUS_INACTIVE)
|
||||
continue
|
||||
rerolling_contract.generate(new_target_list)
|
||||
new_target_list.Add(rerolling_contract.contract.target)
|
||||
hub.assigned_targets = new_target_list // Set our target list with the new set we've generated.
|
||||
|
||||
/datum/contractor_item/contractor_pinpointer
|
||||
name = "Contractor Pinpointer"
|
||||
desc = "A pinpointer that finds targets even without active suit sensors. Due to taking advantage of an exploit within the system, it can't pinpoint to the same accuracy as the traditional models. Becomes permanently locked to the user that first activates it."
|
||||
item = /obj/item/pinpointer/crew/contractor
|
||||
item_icon = "fa-search-location"
|
||||
limited = 2
|
||||
cost = 1
|
||||
|
||||
/datum/contractor_item/fulton_extraction_kit
|
||||
name = "Fulton Extraction Kit"
|
||||
desc = "For getting your target across the station to those difficult dropoffs. Place the beacon somewhere secure, and link the pack. Activating the pack on your target in space will send them over to the beacon - make sure they're not just going to run away though!"
|
||||
item = /obj/item/storage/box/contractor/fulton_extraction
|
||||
item_icon = "fa-parachute-box"
|
||||
limited = 1
|
||||
cost = 1
|
||||
|
||||
/datum/contractor_item/contractor_partner
|
||||
name = "Reinforcements"
|
||||
desc = "Upon purchase we'll contact available units in the area. Should there be an agent free, we'll send them down to assist you immediately. If no units are free, we give a full refund."
|
||||
item_icon = "fa-user-friends"
|
||||
limited = 1
|
||||
cost = 2
|
||||
var/datum/mind/partner_mind = null
|
||||
|
||||
/datum/contractor_item/contractor_partner/handle_purchase(var/datum/contractor_hub/hub, mob/living/user)
|
||||
. = ..()
|
||||
if (.)
|
||||
to_chat(user, "<span class='notice'>The uplink vibrates quietly, connecting to nearby agents...</span>")
|
||||
var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you want to play as the Contractor Support Unit for [user.real_name]?", ROLE_PAI, null, FALSE, 100, POLL_IGNORE_CONTRACTOR_SUPPORT)
|
||||
if(LAZYLEN(candidates))
|
||||
var/mob/dead/observer/C = pick(candidates)
|
||||
spawn_contractor_partner(user, C.key)
|
||||
else
|
||||
to_chat(user, "<span class='notice'>No available agents at this time, please try again later.</span>")
|
||||
limited += 1 // refund and add the limit back.
|
||||
hub.contract_rep += cost
|
||||
hub.purchased_items -= src
|
||||
|
||||
/datum/outfit/contractor_partner
|
||||
name = "Contractor Support Unit"
|
||||
uniform = /obj/item/clothing/under/chameleon
|
||||
suit = /obj/item/clothing/suit/chameleon
|
||||
back = /obj/item/storage/backpack
|
||||
belt = /obj/item/pda/chameleon
|
||||
mask = /obj/item/clothing/mask/cigarette/syndicate
|
||||
shoes = /obj/item/clothing/shoes/chameleon/noslip
|
||||
ears = /obj/item/radio/headset/chameleon
|
||||
id = /obj/item/card/id/syndicate
|
||||
r_hand = /obj/item/storage/toolbox/syndicate
|
||||
backpack_contents = list(/obj/item/storage/box/survival, /obj/item/implanter/uplink, /obj/item/clothing/mask/chameleon,
|
||||
/obj/item/storage/fancy/cigarettes/cigpack_syndicate, /obj/item/lighter)
|
||||
|
||||
/datum/outfit/contractor_partner/post_equip(mob/living/carbon/human/H, visualsOnly)
|
||||
. = ..()
|
||||
var/obj/item/clothing/mask/cigarette/syndicate/cig = H.get_item_by_slot(SLOT_WEAR_MASK)
|
||||
cig.light() // pre-light their cig for extra badass
|
||||
|
||||
/datum/contractor_item/contractor_partner/proc/spawn_contractor_partner(mob/living/user, key)
|
||||
var/mob/living/carbon/human/partner = new()
|
||||
var/datum/outfit/contractor_partner/partner_outfit = new()
|
||||
partner_outfit.equip(partner)
|
||||
var/obj/structure/closet/supplypod/arrival_pod = new()
|
||||
arrival_pod.style = STYLE_SYNDICATE
|
||||
arrival_pod.explosionSize = list(0,0,0,1)
|
||||
arrival_pod.bluespace = TRUE
|
||||
var/turf/free_location = find_obstruction_free_location(2, user)
|
||||
if (!free_location) // We really want to send them - if we can't find a nice location just land it on top of them.
|
||||
free_location = get_turf(user)
|
||||
partner.forceMove(arrival_pod)
|
||||
partner.ckey = key
|
||||
partner_mind = partner.mind // We give a reference to the mind that'll be the support unit
|
||||
partner_mind.make_Contractor_Support()
|
||||
to_chat(partner_mind.current, "\n<span class='alertwarning'>[user.real_name] is your superior. Follow any, and all orders given by them. You're here to support their mission only.</span>")
|
||||
to_chat(partner_mind.current, "<span class='alertwarning'>Should they perish, or be otherwise unavailable, you're to assist other active agents in this mission area to the best of your ability.</span>\n\n")
|
||||
new /obj/effect/abstract/DPtarget(free_location, arrival_pod)
|
||||
|
||||
/datum/contractor_item/blackout
|
||||
name = "Blackout"
|
||||
desc = "Request Syndicate Command to distrupt the station's powernet. Disables power across the station for a short duration."
|
||||
item_icon = "fa-bolt"
|
||||
limited = 2
|
||||
cost = 3
|
||||
|
||||
/datum/contractor_item/blackout/handle_purchase(var/datum/contractor_hub/hub)
|
||||
. = ..()
|
||||
if (.)
|
||||
power_fail(35, 50)
|
||||
priority_announce("Abnormal activity detected in [station_name()]'s powernet. As a precautionary measure, the station's power will be shut off for an indeterminate duration.", "Critical Power Failure", "poweroff")
|
||||
|
||||
// Subtract cost, and spawn if it's an item.
|
||||
/datum/contractor_item/proc/handle_purchase(var/datum/contractor_hub/hub, mob/living/user)
|
||||
if (hub.contract_rep >= cost)
|
||||
hub.contract_rep -= cost
|
||||
else
|
||||
return FALSE
|
||||
if (limited >= 1)
|
||||
limited -= 1
|
||||
else if (limited == 0)
|
||||
return FALSE
|
||||
hub.purchased_items.Add(src)
|
||||
if (item && ispath(item))
|
||||
var/atom/item_to_create = new item(get_turf(user))
|
||||
|
||||
if(user.put_in_hands(item_to_create))
|
||||
to_chat(user, "<span class='notice'>Your purchase materializes into your hands!</span>")
|
||||
else
|
||||
to_chat(user, "<span class='notice'>Your purchase materializes onto the floor.</span>")
|
||||
return item_to_create
|
||||
return TRUE
|
||||
|
||||
/obj/item/pinpointer/crew/contractor
|
||||
name = "contractor pinpointer"
|
||||
desc = "A handheld tracking device that locks onto certain signals. Ignores suit sensors, but is much less accurate."
|
||||
icon_state = "pinpointer_syndicate"
|
||||
minimum_range = 25
|
||||
has_owner = TRUE
|
||||
ignore_suit_sensor_level = TRUE
|
||||
|
||||
/obj/item/storage/box/contractor/fulton_extraction
|
||||
name = "Fulton Extraction Kit"
|
||||
icon_state = "syndiebox"
|
||||
illustration = "writing_syndie"
|
||||
|
||||
/obj/item/storage/box/contractor/fulton_extraction/PopulateContents()
|
||||
new /obj/item/extraction_pack(src)
|
||||
new /obj/item/fulton_core(src)
|
||||
@@ -0,0 +1,150 @@
|
||||
/datum/syndicate_contract
|
||||
var/id = 0
|
||||
var/status = CONTRACT_STATUS_INACTIVE
|
||||
var/datum/objective/contract/contract = new()
|
||||
var/target_rank
|
||||
var/ransom = 0
|
||||
var/payout_type = null
|
||||
var/list/victim_belongings = list()
|
||||
|
||||
/datum/syndicate_contract/New(contract_owner, blacklist, type=CONTRACT_PAYOUT_SMALL)
|
||||
contract.owner = contract_owner
|
||||
payout_type = type
|
||||
generate(blacklist)
|
||||
|
||||
/datum/syndicate_contract/proc/generate(blacklist)
|
||||
contract.find_target(null, blacklist)
|
||||
var/datum/data/record/record = find_record("name", contract.target.name, GLOB.data_core.general)
|
||||
if(record)
|
||||
target_rank = record.fields["rank"]
|
||||
else
|
||||
target_rank = "Unknown"
|
||||
if (payout_type == CONTRACT_PAYOUT_LARGE)
|
||||
contract.payout_bonus = rand(9,13)
|
||||
else if(payout_type == CONTRACT_PAYOUT_MEDIUM)
|
||||
contract.payout_bonus = rand(6,8)
|
||||
else
|
||||
contract.payout_bonus = rand(2,4)
|
||||
contract.payout = rand(0, 2)
|
||||
contract.generate_dropoff()
|
||||
ransom = 100 * rand(18, 45)
|
||||
|
||||
/datum/syndicate_contract/proc/handle_extraction(var/mob/living/user)
|
||||
if (contract.target && contract.dropoff_check(user, contract.target.current))
|
||||
var/turf/free_location = find_obstruction_free_location(3, user, contract.dropoff)
|
||||
if(free_location) // We've got a valid location, launch.
|
||||
launch_extraction_pod(free_location)
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
// Launch the pod to collect our victim.
|
||||
/datum/syndicate_contract/proc/launch_extraction_pod(turf/empty_pod_turf)
|
||||
var/obj/structure/closet/supplypod/extractionpod/empty_pod = new()
|
||||
RegisterSignal(empty_pod, COMSIG_ATOM_ENTERED, .proc/enter_check)
|
||||
empty_pod.stay_after_drop = TRUE
|
||||
empty_pod.reversing = TRUE
|
||||
empty_pod.explosionSize = list(0,0,0,1)
|
||||
empty_pod.leavingSound = 'sound/effects/podwoosh.ogg'
|
||||
new /obj/effect/abstract/DPtarget(empty_pod_turf, empty_pod)
|
||||
|
||||
/datum/syndicate_contract/proc/enter_check(datum/source, sent_mob)
|
||||
if(istype(source, /obj/structure/closet/supplypod/extractionpod))
|
||||
if(isliving(sent_mob))
|
||||
var/mob/living/M = sent_mob
|
||||
var/datum/antagonist/traitor/traitor_data = contract.owner.has_antag_datum(/datum/antagonist/traitor)
|
||||
if(M == contract.target.current)
|
||||
traitor_data.contractor_hub.contract_TC_to_redeem += contract.payout
|
||||
if(M.stat != DEAD)
|
||||
traitor_data.contractor_hub.contract_TC_to_redeem += contract.payout_bonus
|
||||
status = CONTRACT_STATUS_COMPLETE
|
||||
if(traitor_data.contractor_hub.current_contract == src)
|
||||
traitor_data.contractor_hub.current_contract = null
|
||||
traitor_data.contractor_hub.contract_rep += 2
|
||||
else
|
||||
status = CONTRACT_STATUS_ABORTED // Sending a target that wasn't even yours is as good as just aborting it
|
||||
if(traitor_data.contractor_hub.current_contract == src)
|
||||
traitor_data.contractor_hub.current_contract = null
|
||||
if(iscarbon(M))
|
||||
for(var/obj/item/W in M)
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(W == H.w_uniform || W == H.shoes)
|
||||
continue //So all they're left with are shoes and uniform.
|
||||
M.transferItemToLoc(W)
|
||||
victim_belongings.Add(W)
|
||||
var/obj/structure/closet/supplypod/extractionpod/pod = source
|
||||
pod.send_up(pod) // Handle the pod returning
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/target = M // After we remove items, at least give them what they need to live.
|
||||
target.dna.species.give_important_for_life(target)
|
||||
handleVictimExperience(M) // After pod is sent we start the victim narrative/heal.
|
||||
var/points_to_check = SSshuttle.points // This is slightly delayed because of the sleep calls above to handle the narrative. We don't want to tell the station instantly.
|
||||
if(points_to_check >= ransom)
|
||||
SSshuttle.points -= ransom
|
||||
else
|
||||
SSshuttle.points -= points_to_check
|
||||
priority_announce("One of your crew was captured by a rival organisation - we've needed to pay their ransom to bring them back. \
|
||||
As is policy we've taken a portion of the station's funds to offset the overall cost.", null, "attention", null, "Nanotrasen Asset Protection")
|
||||
|
||||
/datum/syndicate_contract/proc/handleVictimExperience(var/mob/living/M) // They're off to holding - handle the return timer and give some text about what's going on.
|
||||
addtimer(CALLBACK(src, .proc/returnVictim, M), (60 * 10) * 4) // Ship 'em back - dead or alive... 4 minutes wait.
|
||||
if(M.stat != DEAD) //Even if they weren't the target, we're still treating them the same.
|
||||
M.reagents.add_reagent(/datum/reagent/medicine/omnizine, 20) // Heal them up - gets them out of crit/soft crit.
|
||||
M.flash_act()
|
||||
M.confused += 10
|
||||
M.blur_eyes(5)
|
||||
to_chat(M, "<span class='warning'>You feel strange...</span>")
|
||||
sleep(60)
|
||||
to_chat(M, "<span class='warning'>That pod did something to you...</span>")
|
||||
M.Dizzy(35)
|
||||
sleep(65)
|
||||
to_chat(M, "<span class='warning'>Your head pounds... It feels like it's going to burst out your skull!</span>")
|
||||
M.flash_act()
|
||||
M.confused += 20
|
||||
M.blur_eyes(3)
|
||||
sleep(30)
|
||||
to_chat(M, "<span class='warning'>Your head pounds...</span>")
|
||||
sleep(100)
|
||||
M.flash_act()
|
||||
M.Unconscious(200)
|
||||
to_chat(M, "<span class='reallybig hypnophrase'>A million voices echo in your head... <i>\"Your mind held many valuable secrets - \
|
||||
we thank you for providing them. Your value is expended, and you will be ransomed back to your station. We always get paid, \
|
||||
so it's only a matter of time before we ship you back...\"</i></span>")
|
||||
M.blur_eyes(10)
|
||||
M.Dizzy(15)
|
||||
M.confused += 20
|
||||
|
||||
/datum/syndicate_contract/proc/returnVictim(var/mob/living/M) // We're returning the victim
|
||||
var/list/possible_drop_loc = list()
|
||||
for(var/turf/possible_drop in contract.dropoff.contents)
|
||||
if(!is_blocked_turf(possible_drop))
|
||||
possible_drop_loc.Add(possible_drop)
|
||||
if(possible_drop_loc.len > 0)
|
||||
var/pod_rand_loc = rand(1, possible_drop_loc.len)
|
||||
var/obj/structure/closet/supplypod/return_pod = new()
|
||||
return_pod.bluespace = TRUE
|
||||
return_pod.explosionSize = list(0,0,0,0)
|
||||
return_pod.style = STYLE_SYNDICATE
|
||||
do_sparks(8, FALSE, M)
|
||||
M.visible_message("<span class='notice'>[M] vanishes...</span>")
|
||||
for(var/obj/item/W in M)
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(W == H.w_uniform || W == H.shoes)
|
||||
continue //So all they're left with are shoes and uniform.
|
||||
M.dropItemToGround(W)
|
||||
for(var/obj/item/W in victim_belongings)
|
||||
W.forceMove(return_pod)
|
||||
M.forceMove(return_pod)
|
||||
M.flash_act()
|
||||
M.blur_eyes(30)
|
||||
M.Dizzy(35)
|
||||
M.confused += 20
|
||||
new /obj/effect/abstract/DPtarget(possible_drop_loc[pod_rand_loc], return_pod)
|
||||
else
|
||||
to_chat(M, "<span class='reallybig hypnophrase'>A million voices echo in your head... <i>\"Seems where you got sent here from won't \
|
||||
be able to handle our pod... You will die here instead.\"</i></span>")
|
||||
if(iscarbon(M))
|
||||
var/mob/living/carbon/C = M
|
||||
if(C.can_heartattack())
|
||||
C.set_heartattack(TRUE)
|
||||
@@ -261,7 +261,7 @@
|
||||
GiveHint(target)
|
||||
else if(is_pointed(I))
|
||||
to_chat(target, "<span class='userdanger'>You feel a stabbing pain in [parse_zone(user.zone_selected)]!</span>")
|
||||
target.Knockdown(40)
|
||||
target.DefaultCombatKnockdown(40)
|
||||
GiveHint(target)
|
||||
else if(istype(I, /obj/item/bikehorn))
|
||||
to_chat(target, "<span class='userdanger'>HONK</span>")
|
||||
@@ -377,7 +377,10 @@
|
||||
/obj/item/warpwhistle/proc/end_effect(mob/living/carbon/user)
|
||||
user.invisibility = initial(user.invisibility)
|
||||
user.status_flags &= ~GODMODE
|
||||
user.canmove = TRUE
|
||||
REMOVE_TRAIT(user, TRAIT_MOBILITY_NOMOVE, src)
|
||||
REMOVE_TRAIT(user, TRAIT_MOBILITY_NOUSE, src)
|
||||
REMOVE_TRAIT(user, TRAIT_MOBILITY_NOPICKUP, src)
|
||||
user.update_mobility()
|
||||
|
||||
/obj/item/warpwhistle/attack_self(mob/living/carbon/user)
|
||||
if(!istype(user) || on_cooldown)
|
||||
@@ -390,7 +393,10 @@
|
||||
on_cooldown = TRUE
|
||||
last_user = user
|
||||
playsound(T,'sound/magic/warpwhistle.ogg', 200, 1)
|
||||
user.canmove = FALSE
|
||||
ADD_TRAIT(user, TRAIT_MOBILITY_NOMOVE, src)
|
||||
ADD_TRAIT(user, TRAIT_MOBILITY_NOUSE, src)
|
||||
ADD_TRAIT(user, TRAIT_MOBILITY_NOPICKUP, src)
|
||||
user.update_mobility()
|
||||
new /obj/effect/temp_visual/tornado(T)
|
||||
sleep(20)
|
||||
if(interrupted(user))
|
||||
@@ -412,7 +418,6 @@
|
||||
return
|
||||
if(T.z != potential_T.z || abs(get_dist_euclidian(potential_T,T)) > 50 - breakout)
|
||||
do_teleport(user, potential_T, channel = TELEPORT_CHANNEL_MAGIC)
|
||||
user.canmove = 0
|
||||
T = potential_T
|
||||
break
|
||||
breakout += 1
|
||||
|
||||
@@ -83,8 +83,8 @@
|
||||
/obj/item/soulstone/proc/release_shades(mob/user)
|
||||
for(var/mob/living/simple_animal/shade/A in src)
|
||||
A.status_flags &= ~GODMODE
|
||||
A.canmove = TRUE
|
||||
A.forceMove(get_turf(user))
|
||||
A.mobility_flags = MOBILITY_FLAGS_DEFAULT
|
||||
A.cancel_camera()
|
||||
icon_state = "soulstone"
|
||||
name = initial(name)
|
||||
@@ -173,7 +173,7 @@
|
||||
else
|
||||
T.forceMove(src) //put shade in stone
|
||||
T.status_flags |= GODMODE
|
||||
T.canmove = FALSE
|
||||
T.mobility_flags = NONE
|
||||
T.health = T.maxHealth
|
||||
icon_state = "soulstone2"
|
||||
name = "soulstone: Shade of [T.real_name]"
|
||||
@@ -240,8 +240,8 @@
|
||||
T.dust_animation()
|
||||
QDEL_IN(T, 5)
|
||||
var/mob/living/simple_animal/shade/S = new /mob/living/simple_animal/shade(src)
|
||||
S.status_flags |= GODMODE //So they won't die inside the stone somehow
|
||||
S.canmove = FALSE//Can't move out of the soul stone
|
||||
S.status_flags |= GODMODE //So they won't die inside the stone somehow
|
||||
S.mobility_flags = NONE //Can't move out of the soul stone
|
||||
S.name = "Shade of [T.real_name]"
|
||||
S.real_name = "Shade of [T.real_name]"
|
||||
T.transfer_ckey(S)
|
||||
|
||||
@@ -150,7 +150,7 @@
|
||||
var/mob/living/silicon/robot/R = M
|
||||
log_combat(user, R, "flashed", src)
|
||||
update_icon(1)
|
||||
R.Knockdown(rand(80,120))
|
||||
R.DefaultCombatKnockdown(rand(80,120))
|
||||
var/diff = 5 * CONFUSION_STACK_MAX_MULTIPLIER - M.confused
|
||||
R.confused += min(5, diff)
|
||||
R.flash_act(affect_silicon = 1)
|
||||
@@ -197,14 +197,13 @@
|
||||
else
|
||||
to_chat(user, "<span class='warning'>This mind seems resistant to the flash!</span>")
|
||||
|
||||
|
||||
/obj/item/assembly/flash/cyborg
|
||||
|
||||
/obj/item/assembly/flash/cyborg/attack(mob/living/M, mob/user)
|
||||
. = ..()
|
||||
new /obj/effect/temp_visual/borgflash(get_turf(src))
|
||||
if(. && !CONFIG_GET(flag/disable_borg_flash_knockdown) && iscarbon(M) && !M.resting && !M.get_eye_protection())
|
||||
M.Knockdown(80)
|
||||
if(. && !CONFIG_GET(flag/disable_borg_flash_knockdown) && iscarbon(M) && CHECK_MOBILITY(M, MOBILITY_STAND) && !M.get_eye_protection())
|
||||
M.DefaultCombatKnockdown(80)
|
||||
|
||||
/obj/item/assembly/flash/cyborg/attack_self(mob/user)
|
||||
..()
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
if("feet")
|
||||
if(!H.shoes || !(H.shoes.body_parts_covered & FEET))
|
||||
affecting = H.get_bodypart(pick(BODY_ZONE_L_LEG, BODY_ZONE_R_LEG))
|
||||
H.Knockdown(60)
|
||||
H.DefaultCombatKnockdown(60)
|
||||
if(BODY_ZONE_PRECISE_L_HAND, BODY_ZONE_PRECISE_R_HAND)
|
||||
if(!H.gloves)
|
||||
affecting = H.get_bodypart(type)
|
||||
|
||||
@@ -314,10 +314,6 @@
|
||||
user.forceMove(loc)
|
||||
user.visible_message("<span class='notice'>You hear something squeezing through the ducts...</span>", "<span class='notice'>You climb out the ventilation system.")
|
||||
|
||||
user.canmove = FALSE
|
||||
addtimer(VARSET_CALLBACK(user, canmove, TRUE), 1)
|
||||
|
||||
|
||||
/obj/machinery/atmospherics/AltClick(mob/living/L)
|
||||
if(is_type_in_typecache(src, GLOB.ventcrawl_machinery))
|
||||
return L.handle_ventcrawl(src)
|
||||
|
||||
@@ -144,7 +144,7 @@
|
||||
for(var/i in 1 to device_type)
|
||||
var/datum/pipeline/parent = parents[i]
|
||||
if(!parent)
|
||||
throw EXCEPTION("Component is missing a pipenet! Rebuilding...")
|
||||
stack_trace("Component is missing a pipenet! Rebuilding...")
|
||||
build_network()
|
||||
parent.update = 1
|
||||
|
||||
|
||||
@@ -244,7 +244,7 @@
|
||||
M.forceMove(get_turf(src))
|
||||
if(isliving(M))
|
||||
var/mob/living/L = M
|
||||
L.update_canmove()
|
||||
L.update_mobility()
|
||||
occupant = null
|
||||
update_icon()
|
||||
|
||||
@@ -277,10 +277,10 @@
|
||||
else
|
||||
. += "[src] seems empty."
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/cryo_cell/MouseDrop_T(mob/target, mob/user)
|
||||
if(user.stat || user.lying || !Adjacent(user) || !user.Adjacent(target) || !iscarbon(target) || !user.IsAdvancedToolUser())
|
||||
/obj/machinery/atmospherics/components/unary/cryo_cell/MouseDrop_T(mob/living/carbon/target, mob/user)
|
||||
if(user.stat || user.lying || !Adjacent(user) || !user.Adjacent(target) || !istype(target) || !user.IsAdvancedToolUser())
|
||||
return
|
||||
if (target.IsKnockdown() || target.IsStun() || target.IsSleeping() || target.IsUnconscious())
|
||||
if(!CHECK_MOBILITY(target, MOBILITY_MOVE))
|
||||
close_machine(target)
|
||||
else
|
||||
user.visible_message("<b>[user]</b> starts shoving [target] inside [src].", "<span class='notice'>You start shoving [target] inside [src].</span>")
|
||||
|
||||
@@ -15,10 +15,10 @@
|
||||
if(!isitem(O))
|
||||
return 0
|
||||
var/obj/item/I = O
|
||||
if(!(getmaterialref(material_id) in I.custom_materials))
|
||||
if(!(SSmaterials.GetMaterialRef(material_id) in I.custom_materials))
|
||||
return 0
|
||||
|
||||
var/amount = I.custom_materials[getmaterialref(material_id)]
|
||||
var/amount = I.custom_materials[SSmaterials.GetMaterialRef(material_id)]
|
||||
|
||||
if(istype(I, /obj/item/stack/ore))
|
||||
amount *= 0.8 // Station's ore redemption equipment is really goddamn good.
|
||||
|
||||
@@ -42,6 +42,8 @@
|
||||
var/soundVolume = 80 //Volume to play sounds at. Ignores the cap
|
||||
var/bay //Used specifically for the centcom_podlauncher datum. Holds the current bay the user is launching objects from. Bays are specific rooms on the centcom map.
|
||||
var/list/explosionSize = list(0,0,2,3)
|
||||
var/stay_after_drop = FALSE
|
||||
var/specialised = TRUE // It's not a general use pod for cargo/admin use
|
||||
|
||||
/obj/structure/closet/supplypod/bluespacepod
|
||||
style = STYLE_BLUESPACE
|
||||
@@ -49,6 +51,15 @@
|
||||
explosionSize = list(0,0,1,2)
|
||||
landingDelay = 15 //Slightly quicker than the supplypod
|
||||
|
||||
/obj/structure/closet/supplypod/extractionpod
|
||||
name = "Syndicate Extraction Pod"
|
||||
desc = "A specalised, blood-red styled pod for extracting high-value targets out of active mission areas."
|
||||
specialised = TRUE
|
||||
style = STYLE_SYNDICATE
|
||||
bluespace = TRUE
|
||||
explosionSize = list(0,0,1,2)
|
||||
landingDelay = 25 //Slightly longer than others
|
||||
|
||||
/obj/structure/closet/supplypod/centcompod
|
||||
style = STYLE_CENTCOM
|
||||
bluespace = TRUE
|
||||
@@ -56,6 +67,13 @@
|
||||
landingDelay = 20 //Very speedy!
|
||||
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
|
||||
|
||||
/obj/structure/closet/supplypod/proc/specialisedPod()
|
||||
return 1
|
||||
|
||||
/obj/structure/closet/supplypod/extractionpod/specialisedPod(atom/movable/holder)
|
||||
holder.forceMove(pick(GLOB.holdingfacility)) // land in ninja jail
|
||||
open(holder, forced = TRUE)
|
||||
|
||||
/obj/structure/closet/supplypod/Initialize()
|
||||
. = ..()
|
||||
setStyle(style, TRUE) //Upon initialization, give the supplypod an iconstate, name, and description based on the "style" variable. This system is important for the centcom_podlauncher to function correctly
|
||||
@@ -76,7 +94,7 @@
|
||||
return
|
||||
style = chosenStyle
|
||||
icon_state = POD_STYLES[chosenStyle][POD_ICON_STATE] //POD_STYLES is a 2D array we treat as a dictionary. The style represents the verticle index, with the icon state, name, and desc being stored in the horizontal indexes of the 2D array.
|
||||
if (!adminNamed) //We dont want to name it ourselves if it has been specifically named by an admin using the centcom_podlauncher datum
|
||||
if (!adminNamed && !specialised) //We dont want to name it ourselves if it has been specifically named by an admin using the centcom_podlauncher datum
|
||||
name = POD_STYLES[chosenStyle][POD_NAME]
|
||||
desc = POD_STYLES[chosenStyle][POD_DESC]
|
||||
update_icon()
|
||||
@@ -96,6 +114,30 @@
|
||||
/obj/structure/closet/supplypod/toggle(mob/living/user) //Supplypods shouldn't be able to be manually opened under any circumstances, as the open() proc generates supply order datums
|
||||
return
|
||||
|
||||
/obj/structure/closet/supplypod/proc/handleReturningClose(atom/movable/holder, returntobay)
|
||||
opened = FALSE
|
||||
INVOKE_ASYNC(holder, .proc/setClosed) //Use the INVOKE_ASYNC proc to call setClosed() on whatever the holder may be, without giving the atom/movable base class a setClosed() proc definition
|
||||
for(var/atom/movable/O in get_turf(holder))
|
||||
if ((ismob(O) && !isliving(O)) || (is_type_in_typecache(O, GLOB.blacklisted_cargo_types) && !isliving(O))) //We dont want to take ghosts with us, and we don't want blacklisted items going, but we allow mobs.
|
||||
continue
|
||||
O.forceMove(holder) //Put objects inside before we close
|
||||
var/obj/effect/temp_visual/risingPod = new /obj/effect/abstract/DPfall(get_turf(holder), src) //Make a nice animation of flying back up
|
||||
risingPod.pixel_z = 0 //The initial value of risingPod's pixel_z is 200 because it normally comes down from a high spot
|
||||
animate(risingPod, pixel_z = 200, time = 10, easing = LINEAR_EASING) //Animate our rising pod
|
||||
if(returntobay)
|
||||
holder.forceMove(bay) //Move the pod back to centcom, where it belongs
|
||||
QDEL_IN(risingPod, 10)
|
||||
reversing = FALSE //Now that we're done reversing, we set this to false (otherwise we would get stuck in an infinite loop of calling the close proc at the bottom of open() )
|
||||
bluespace = TRUE //Make it so that the pod doesn't stay in centcom forever
|
||||
open(holder, forced = TRUE)
|
||||
else
|
||||
reversing = FALSE //Now that we're done reversing, we set this to false (otherwise we would get stuck in an infinite loop of calling the close proc at the bottom of open() )
|
||||
bluespace = TRUE //Make it so that the pod doesn't stay in centcom forever
|
||||
QDEL_IN(risingPod, 10)
|
||||
audible_message("<span class='notice'>The pod hisses, closing quickly and launching itself away from the station.</span>", "<span class='notice'>The ground vibrates, the nearby pod launching away from the station.</span>")
|
||||
stay_after_drop = FALSE
|
||||
specialisedPod(holder) // Do special actions for specialised pods - this is likely if we were already doing manual launches
|
||||
|
||||
/obj/structure/closet/supplypod/proc/preOpen() //Called before the open() proc. Handles anything that occurs right as the pod lands.
|
||||
var/turf/T = get_turf(src)
|
||||
var/list/B = explosionSize //Mostly because B is more readable than explosionSize :p
|
||||
@@ -172,7 +214,8 @@
|
||||
if (style == STYLE_SEETHROUGH)
|
||||
depart(src)
|
||||
else
|
||||
addtimer(CALLBACK(src, .proc/depart, holder), departureDelay) //Finish up the pod's duties after a certain amount of time
|
||||
if(!stay_after_drop) // Departing should be handled manually
|
||||
addtimer(CALLBACK(src, .proc/depart, holder), departureDelay) //Finish up the pod's duties after a certain amount of time
|
||||
|
||||
/obj/structure/closet/supplypod/proc/depart(atom/movable/holder)
|
||||
if (leavingSound)
|
||||
@@ -187,20 +230,18 @@
|
||||
qdel(holder)
|
||||
|
||||
/obj/structure/closet/supplypod/centcompod/close(atom/movable/holder) //Closes the supplypod and sends it back to centcom. Should only ever be called if the "reversing" variable is true
|
||||
opened = FALSE
|
||||
INVOKE_ASYNC(holder, .proc/setClosed) //Use the INVOKE_ASYNC proc to call setClosed() on whatever the holder may be, without giving the atom/movable base class a setClosed() proc definition
|
||||
for (var/atom/movable/O in get_turf(holder))
|
||||
if (ismob(O) && !isliving(O)) //We dont want to take ghosts with us
|
||||
continue
|
||||
O.forceMove(holder) //Put objects inside before we close
|
||||
var/obj/effect/temp_visual/risingPod = new /obj/effect/abstract/DPfall(get_turf(holder), src) //Make a nice animation of flying back up
|
||||
risingPod.pixel_z = 0 //The initial value of risingPod's pixel_z is 200 because it normally comes down from a high spot
|
||||
holder.forceMove(bay) //Move the pod back to centcom, where it belongs
|
||||
animate(risingPod, pixel_z = 200, time = 10, easing = LINEAR_EASING) //Animate our rising pod
|
||||
QDEL_IN(risingPod, 10)
|
||||
reversing = FALSE //Now that we're done reversing, we set this to false (otherwise we would get stuck in an infinite loop of calling the close proc at the bottom of open() )
|
||||
bluespace = TRUE //Make it so that the pod doesn't stay in centcom forever
|
||||
open(holder, forced = TRUE)
|
||||
handleReturningClose(holder, TRUE)
|
||||
|
||||
/obj/structure/closet/supplypod/extractionpod/close(atom/movable/holder) //handles closing, and returns pod - deletes itself when returned
|
||||
. = ..()
|
||||
return
|
||||
|
||||
/obj/structure/closet/supplypod/extractionpod/proc/send_up(atom/movable/holder)
|
||||
if(!holder)
|
||||
holder = src
|
||||
if(leavingSound)
|
||||
playsound(get_turf(holder), leavingSound, soundVolume, 0, 0)
|
||||
handleReturningClose(holder, FALSE)
|
||||
|
||||
/obj/structure/closet/supplypod/proc/setOpened() //Proc exists here, as well as in any atom that can assume the role of a "holder" of a supplypod. Check the open() proc for more details
|
||||
update_icon()
|
||||
|
||||
@@ -123,7 +123,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
"has_cock" = FALSE,
|
||||
"cock_shape" = "Human",
|
||||
"cock_length" = 6,
|
||||
"cock_girth_ratio" = COCK_GIRTH_RATIO_DEF,
|
||||
"cock_diameter_ratio" = COCK_DIAMETER_RATIO_DEF,
|
||||
"cock_color" = "fff",
|
||||
"has_sheath" = FALSE,
|
||||
"sheath_color" = "fff",
|
||||
@@ -210,6 +210,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
var/icon/bgstate = "steel"
|
||||
var/list/bgstate_options = list("000", "midgrey", "FFF", "white", "steel", "techmaint", "dark", "plating", "reinforced")
|
||||
|
||||
var/show_mismatched_markings = FALSE //determines whether or not the markings lists should show markings that don't match the currently selected species. Intentionally left unsaved.
|
||||
|
||||
/datum/preferences/New(client/C)
|
||||
parent = C
|
||||
|
||||
@@ -411,6 +413,14 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
//Mutant stuff
|
||||
var/mutant_category = 0
|
||||
|
||||
dat += APPEARANCE_CATEGORY_COLUMN
|
||||
dat += "<h3>Show mismatched markings</h3>"
|
||||
dat += "<a style='display:block;width:100px' href='?_src_=prefs;preference=mismatched_markings;task=input'>[show_mismatched_markings ? "Yes" : "No"]</a>"
|
||||
mutant_category++
|
||||
if(mutant_category >= MAX_MUTANT_ROWS) //just in case someone sets the max rows to 1 or something dumb like that
|
||||
dat += "</td>"
|
||||
mutant_category = 0
|
||||
|
||||
if("tail_lizard" in pref_species.default_features)
|
||||
if(!mutant_category)
|
||||
dat += APPEARANCE_CATEGORY_COLUMN
|
||||
@@ -1474,8 +1484,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
|
||||
if("flavor_text")
|
||||
var/msg = stripped_multiline_input(usr, "Set the flavor text in your 'examine' verb. This can also be used for OOC notes and preferences!", "Flavor Text", features["flavor_text"], MAX_FAVOR_LEN, TRUE)
|
||||
if(msg)
|
||||
features["flavor_text"] = msg
|
||||
if(!isnull(msg))
|
||||
features["flavor_text"] = html_decode(msg)
|
||||
|
||||
if("hair")
|
||||
var/new_hair = input(user, "Choose your character's hair colour:", "Character Preference","#"+hair_color) as color|null
|
||||
@@ -1618,6 +1628,9 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
else
|
||||
to_chat(user, "<span class='danger'>Invalid color. Your color is not bright enough.</span>")
|
||||
|
||||
if("mismatched_markings")
|
||||
show_mismatched_markings = !show_mismatched_markings
|
||||
|
||||
if("ipc_screen")
|
||||
var/new_ipc_screen
|
||||
new_ipc_screen = input(user, "Choose your character's screen:", "Character Preference") as null|anything in GLOB.ipc_screens_list
|
||||
@@ -1625,8 +1638,18 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
features["ipc_screen"] = new_ipc_screen
|
||||
|
||||
if("ipc_antenna")
|
||||
var/list/snowflake_antenna_list = list()
|
||||
//Potential todo: turn all of THIS into a define to reduce copypasta.
|
||||
for(var/path in GLOB.ipc_antennas_list)
|
||||
var/datum/sprite_accessory/antenna/instance = GLOB.ipc_antennas_list[path]
|
||||
if(istype(instance, /datum/sprite_accessory))
|
||||
var/datum/sprite_accessory/S = instance
|
||||
if(!show_mismatched_markings && S.recommended_species && !S.recommended_species.Find(pref_species.id))
|
||||
continue
|
||||
if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(user.client.ckey)))
|
||||
snowflake_antenna_list[S.name] = path
|
||||
var/new_ipc_antenna
|
||||
new_ipc_antenna = input(user, "Choose your character's antenna:", "Character Preference") as null|anything in GLOB.ipc_antennas_list
|
||||
new_ipc_antenna = input(user, "Choose your character's antenna:", "Character Preference") as null|anything in snowflake_antenna_list
|
||||
if(new_ipc_antenna)
|
||||
features["ipc_antenna"] = new_ipc_antenna
|
||||
|
||||
@@ -1646,6 +1669,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
var/datum/sprite_accessory/tails/human/instance = GLOB.tails_list_human[path]
|
||||
if(istype(instance, /datum/sprite_accessory))
|
||||
var/datum/sprite_accessory/S = instance
|
||||
if(!show_mismatched_markings && S.recommended_species && !S.recommended_species.Find(pref_species.id))
|
||||
continue
|
||||
if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(user.client.ckey)))
|
||||
snowflake_tails_list[S.name] = path
|
||||
var/new_tail
|
||||
@@ -1663,6 +1688,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
var/datum/sprite_accessory/mam_tails/instance = GLOB.mam_tails_list[path]
|
||||
if(istype(instance, /datum/sprite_accessory))
|
||||
var/datum/sprite_accessory/S = instance
|
||||
if(!show_mismatched_markings && S.recommended_species && !S.recommended_species.Find(pref_species.id))
|
||||
continue
|
||||
if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(user.client.ckey)))
|
||||
snowflake_tails_list[S.name] = path
|
||||
var/new_tail
|
||||
@@ -1686,6 +1713,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
var/datum/sprite_accessory/mam_snouts/instance = GLOB.snouts_list[path]
|
||||
if(istype(instance, /datum/sprite_accessory))
|
||||
var/datum/sprite_accessory/S = instance
|
||||
if(!show_mismatched_markings && S.recommended_species && !S.recommended_species.Find(pref_species.id))
|
||||
continue
|
||||
if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(user.client.ckey)))
|
||||
snowflake_snouts_list[S.name] = path
|
||||
var/new_snout
|
||||
@@ -1701,6 +1730,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
var/datum/sprite_accessory/mam_snouts/instance = GLOB.mam_snouts_list[path]
|
||||
if(istype(instance, /datum/sprite_accessory))
|
||||
var/datum/sprite_accessory/S = instance
|
||||
if(!show_mismatched_markings && S.recommended_species && !S.recommended_species.Find(pref_species.id))
|
||||
continue
|
||||
if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(user.client.ckey)))
|
||||
snowflake_mam_snouts_list[S.name] = path
|
||||
var/new_mam_snouts
|
||||
@@ -1798,6 +1829,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
var/datum/sprite_accessory/taur/instance = GLOB.taur_list[path]
|
||||
if(istype(instance, /datum/sprite_accessory))
|
||||
var/datum/sprite_accessory/S = instance
|
||||
if(!show_mismatched_markings && S.recommended_species && !S.recommended_species.Find(pref_species.id))
|
||||
continue
|
||||
if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(user.client.ckey)))
|
||||
snowflake_taur_list[S.name] = path
|
||||
var/new_taur
|
||||
@@ -1816,6 +1849,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
var/datum/sprite_accessory/ears/instance = GLOB.ears_list[path]
|
||||
if(istype(instance, /datum/sprite_accessory))
|
||||
var/datum/sprite_accessory/S = instance
|
||||
if(!show_mismatched_markings && S.recommended_species && !S.recommended_species.Find(pref_species.id))
|
||||
continue
|
||||
if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(user.client.ckey)))
|
||||
snowflake_ears_list[S.name] = path
|
||||
var/new_ears
|
||||
@@ -1829,6 +1864,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
var/datum/sprite_accessory/mam_ears/instance = GLOB.mam_ears_list[path]
|
||||
if(istype(instance, /datum/sprite_accessory))
|
||||
var/datum/sprite_accessory/S = instance
|
||||
if(!show_mismatched_markings && S.recommended_species && !S.recommended_species.Find(pref_species.id))
|
||||
continue
|
||||
if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(user.client.ckey)))
|
||||
snowflake_ears_list[S.name] = path
|
||||
var/new_ears
|
||||
@@ -1842,6 +1879,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
var/datum/sprite_accessory/mam_body_markings/instance = GLOB.mam_body_markings_list[path]
|
||||
if(istype(instance, /datum/sprite_accessory))
|
||||
var/datum/sprite_accessory/S = instance
|
||||
if(!show_mismatched_markings && S.recommended_species && !S.recommended_species.Find(pref_species.id))
|
||||
continue
|
||||
if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(user.client.ckey)))
|
||||
snowflake_markings_list[S.name] = path
|
||||
var/new_mam_body_markings
|
||||
|
||||
@@ -415,7 +415,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
S["feature_cock_shape"] >> features["cock_shape"]
|
||||
S["feature_cock_color"] >> features["cock_color"]
|
||||
S["feature_cock_length"] >> features["cock_length"]
|
||||
S["feature_cock_girth"] >> features["cock_girth"]
|
||||
S["feature_cock_diameter"] >> features["cock_diameter"]
|
||||
S["feature_has_sheath"] >> features["sheath_color"]
|
||||
//balls features
|
||||
S["feature_has_balls"] >> features["has_balls"]
|
||||
|
||||
@@ -224,7 +224,7 @@
|
||||
/mob/living/carbon/canSuicide()
|
||||
if(!..())
|
||||
return
|
||||
if(IsStun() || IsKnockdown()) //just while I finish up the new 'fun' suiciding verb. This is to prevent metagaming via suicide
|
||||
if(!CHECK_MULTIPLE_BITFIELDS(mobility_flags, MOBILITY_MOVE|MOBILITY_USE)) //just while I finish up the new 'fun' suiciding verb. This is to prevent metagaming via suicide
|
||||
to_chat(src, "You can't commit suicide while stunned! ((You can type Ghost instead however.))")
|
||||
return
|
||||
if(restrained())
|
||||
|
||||
@@ -4,6 +4,16 @@
|
||||
flags_1 = null //doesn't protect eyes because it's a monocle, duh
|
||||
var/hud_type = null
|
||||
|
||||
/obj/item/clothing/glasses/hud/CheckParts(list/parts_list)
|
||||
. = ..()
|
||||
if(vision_correction)
|
||||
return
|
||||
for(var/obj/item/clothing/glasses/G in parts_list)
|
||||
if(G.vision_correction)
|
||||
vision_correction = TRUE
|
||||
name = "prescription [name]"
|
||||
return
|
||||
|
||||
/obj/item/clothing/glasses/hud/equipped(mob/living/carbon/human/user, slot)
|
||||
..()
|
||||
if(hud_type && slot == SLOT_GLASSES)
|
||||
@@ -32,6 +42,10 @@
|
||||
desc = "[desc] The display is flickering slightly."
|
||||
return TRUE
|
||||
|
||||
////////////
|
||||
//Med Huds//
|
||||
////////////
|
||||
|
||||
/obj/item/clothing/glasses/hud/health
|
||||
name = "health scanner HUD"
|
||||
desc = "A heads-up display that scans the humans in view and provides accurate data about their health status."
|
||||
@@ -65,6 +79,14 @@
|
||||
tint = 1
|
||||
glass_colour_type = /datum/client_colour/glass_colour/blue
|
||||
|
||||
/obj/item/clothing/glasses/hud/health/sunglasses/prescription
|
||||
name = "prescription medical HUDSunglasses"
|
||||
vision_correction = 1
|
||||
|
||||
///////////////////
|
||||
//Diagnostic Huds//
|
||||
///////////////////
|
||||
|
||||
/obj/item/clothing/glasses/hud/diagnostic
|
||||
name = "diagnostic HUD"
|
||||
desc = "A heads-up display capable of analyzing the integrity and status of robotics and exosuits."
|
||||
@@ -72,6 +94,14 @@
|
||||
hud_type = DATA_HUD_DIAGNOSTIC_BASIC
|
||||
glass_colour_type = /datum/client_colour/glass_colour/lightorange
|
||||
|
||||
/obj/item/clothing/glasses/hud/diagnostic/sunglasses
|
||||
name = "diagnostic HUDSunglasses"
|
||||
desc = "Sunglasses with a diagnostic HUD."
|
||||
icon_state = "sunhuddiagnostic"
|
||||
darkness_view = 1
|
||||
flash_protect = 1
|
||||
tint = 1
|
||||
|
||||
/obj/item/clothing/glasses/hud/diagnostic/prescription
|
||||
name = "prescription diagnostic HUD"
|
||||
desc = "A heads-up display capable of analyzing the integrity and status of robotics and exosuits. This one has a prescription lens."
|
||||
@@ -80,6 +110,10 @@
|
||||
vision_correction = 1
|
||||
glass_colour_type = /datum/client_colour/glass_colour/lightorange
|
||||
|
||||
/obj/item/clothing/glasses/hud/diagnostic/sunglasses/prescription
|
||||
name = "prescription diagnostic HUDSunglasses"
|
||||
vision_correction = 1
|
||||
|
||||
/obj/item/clothing/glasses/hud/diagnostic/night
|
||||
name = "night vision diagnostic HUD"
|
||||
desc = "A robotics diagnostic HUD fitted with a light amplifier."
|
||||
@@ -89,6 +123,10 @@
|
||||
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE
|
||||
glass_colour_type = /datum/client_colour/glass_colour/green
|
||||
|
||||
////////////
|
||||
//Sec Huds//
|
||||
////////////
|
||||
|
||||
/obj/item/clothing/glasses/hud/security
|
||||
name = "security HUD"
|
||||
desc = "A heads-up display that scans the humans in view and provides accurate data about their ID status and security records."
|
||||
@@ -127,7 +165,6 @@
|
||||
return
|
||||
chameleon_action.emp_randomise()
|
||||
|
||||
|
||||
/obj/item/clothing/glasses/hud/security/sunglasses/eyepatch
|
||||
name = "eyepatch HUD"
|
||||
desc = "A heads-up display that connects directly to the optical nerve of the user, replacing the need for that useless eyeball."
|
||||
@@ -142,6 +179,10 @@
|
||||
tint = 1
|
||||
glass_colour_type = /datum/client_colour/glass_colour/darkred
|
||||
|
||||
/obj/item/clothing/glasses/hud/security/sunglasses/prescription
|
||||
name = "prescription security HUDSunglasses"
|
||||
vision_correction = 1
|
||||
|
||||
/obj/item/clothing/glasses/hud/security/night
|
||||
name = "night vision security HUD"
|
||||
desc = "An advanced heads-up display which provides id data and vision in complete darkness."
|
||||
@@ -170,6 +211,8 @@
|
||||
force = 12
|
||||
throwforce = 12
|
||||
|
||||
//Hud Toggle
|
||||
|
||||
/obj/item/clothing/glasses/hud/toggle
|
||||
name = "Toggle HUD"
|
||||
desc = "A hud with multiple functions."
|
||||
@@ -197,6 +240,8 @@
|
||||
var/datum/atom_hud/H = GLOB.huds[hud_type]
|
||||
H.add_hud_to(user)
|
||||
|
||||
//Thermal Huds
|
||||
|
||||
/obj/item/clothing/glasses/hud/toggle/thermal
|
||||
name = "thermal HUD scanner"
|
||||
desc = "Thermal imaging HUD in the shape of glasses."
|
||||
|
||||
@@ -243,7 +243,7 @@
|
||||
icon_state = "knight_greyscale"
|
||||
item_state = "knight_greyscale"
|
||||
armor = list("melee" = 35, "bullet" = 10, "laser" = 10, "energy" = 10, "bomb" = 10, "bio" = 10, "rad" = 10, "fire" = 40, "acid" = 40)
|
||||
material_flags = MATERIAL_ADD_PREFIX | MATERIAL_COLOR //Can change color and add prefix
|
||||
material_flags = MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS //Can change color and add prefix
|
||||
|
||||
/obj/item/clothing/head/helmet/skull
|
||||
name = "skull helmet"
|
||||
|
||||
@@ -56,7 +56,16 @@
|
||||
/obj/item/clothing/shoes/magboots/advance/debug
|
||||
|
||||
/obj/item/clothing/shoes/magboots/advance/debug/Initialize()
|
||||
attack_self(src)
|
||||
. = ..()
|
||||
var/mob/living/L = loc
|
||||
if(istype(L))
|
||||
attack_self(L)
|
||||
|
||||
/obj/item/clothing/shoes/magboots/paramedic
|
||||
desc = "A pair of magboots decked in colors matching the equipment of an emergency medical technician."
|
||||
name = "paramedic magboots"
|
||||
icon_state = "para_magboots0"
|
||||
magboot_state = "para_magboots"
|
||||
|
||||
/obj/item/clothing/shoes/magboots/syndie
|
||||
desc = "Reverse-engineered magnetic boots that have a heavy magnetic pull. Property of Gorlex Marauders."
|
||||
|
||||
@@ -221,7 +221,7 @@
|
||||
if(user.wear_suit == src)
|
||||
if(hard_landing)
|
||||
user.electrocute_act(35, src, safety = 1)
|
||||
user.Knockdown(200)
|
||||
user.DefaultCombatKnockdown(200)
|
||||
if(!silent)
|
||||
to_chat(user, "\nroot@ChronosuitMK4# chronowalk4 --stop\n")
|
||||
if(camera)
|
||||
|
||||
@@ -481,7 +481,7 @@
|
||||
adjust_momentum(0, 0, 10)
|
||||
wearer.visible_message("<span class='warning'>[wearer]'s flight suit crashes into the ground!</span>")
|
||||
if(knockdown)
|
||||
wearer.Knockdown(80)
|
||||
wearer.DefaultCombatKnockdown(80)
|
||||
momentum_x = 0
|
||||
momentum_y = 0
|
||||
calculate_momentum_speed()
|
||||
|
||||
@@ -455,6 +455,18 @@
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR
|
||||
clothing_flags = STOPSPRESSUREDAMAGE | THICKMATERIAL | BLOCK_GAS_SMOKE_EFFECT | ALLOWINTERNALS | SCAN_REAGENTS
|
||||
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/medical/equipped(mob/living/carbon/human/user, slot)
|
||||
..()
|
||||
if (slot == SLOT_HEAD)
|
||||
var/datum/atom_hud/DHUD = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED]
|
||||
DHUD.add_hud_to(user)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/medical/dropped(mob/living/carbon/human/user)
|
||||
..()
|
||||
if (user.head == src)
|
||||
var/datum/atom_hud/DHUD = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED]
|
||||
DHUD.remove_hud_from(user)
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/medical
|
||||
icon_state = "hardsuit-medical"
|
||||
name = "medical hardsuit"
|
||||
|
||||
@@ -465,3 +465,16 @@ Contains:
|
||||
torn = TRUE
|
||||
playsound(loc, 'sound/weapons/slashmiss.ogg', 50, 1)
|
||||
playsound(loc, 'sound/effects/refill.ogg', 50, 1)
|
||||
|
||||
/obj/item/clothing/suit/space/eva/paramedic
|
||||
name = "paramedic EVA suit"
|
||||
icon_state = "paramedic-eva"
|
||||
item_state = "paramedic-eva"
|
||||
desc = "A deep blue space suit decorated with red and white crosses to indicate that the wearer is trained emergency medical personnel."
|
||||
allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/roller)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/paramedic
|
||||
name = "paramedic EVA helmet"
|
||||
desc = "A deep blue space helmet with a large red cross on the faceplate to designate the wearer as trained emergency medical personnel."
|
||||
icon_state = "paramedic-eva-helmet"
|
||||
item_state = "paramedic-eva-helmet"
|
||||
@@ -75,6 +75,22 @@
|
||||
icon_state = "syndicate-black"
|
||||
item_state = "syndicate-black"
|
||||
|
||||
//Black-red syndicate contract varient
|
||||
/obj/item/clothing/head/helmet/space/syndicate/contract
|
||||
name = "contractor helmet"
|
||||
desc = "A specialised black and gold helmet that's more compact than its standard Syndicate counterpart. Can be ultra-compressed into even the tightest of spaces."
|
||||
slowdown = 0.55
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
icon_state = "syndicate-contract-helm"
|
||||
item_state = "syndicate-contract-helm"
|
||||
|
||||
/obj/item/clothing/suit/space/syndicate/contract
|
||||
name = "contractor space suit"
|
||||
desc = "A specialised black and gold space suit that's quicker, and more compact than its standard Syndicate counterpart. Can be ultra-compressed into even the tightest of spaces."
|
||||
slowdown = 0.55
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
icon_state = "syndicate-contract"
|
||||
item_state = "syndicate-contract"
|
||||
|
||||
//Black-green syndicate space suit
|
||||
/obj/item/clothing/head/helmet/space/syndicate/black/green
|
||||
|
||||
@@ -267,7 +267,7 @@
|
||||
icon_state = "knight_greyscale"
|
||||
item_state = "knight_greyscale"
|
||||
armor = list("melee" = 35, "bullet" = 10, "laser" = 10, "energy" = 10, "bomb" = 10, "bio" = 10, "rad" = 10, "fire" = 40, "acid" = 40)
|
||||
material_flags = MATERIAL_ADD_PREFIX //Can change color and add prefix
|
||||
material_flags = MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS //Can change color and add prefix
|
||||
|
||||
/obj/item/clothing/suit/armor/vest/durathread
|
||||
name = "makeshift vest"
|
||||
|
||||
@@ -195,3 +195,18 @@
|
||||
body_parts_covered = HEAD
|
||||
flags_inv = HIDEHAIR|HIDEEARS
|
||||
mutantrace_variation = STYLE_MUZZLE
|
||||
|
||||
|
||||
//Paramedic
|
||||
|
||||
/obj/item/clothing/suit/toggle/labcoat/paramedic
|
||||
name = "paramedic vest"
|
||||
desc = "A dark blue vest with reflective strips for emergency medical technicians."
|
||||
icon_state = "paramedic-vest"
|
||||
item_state = "paramedic-vest"
|
||||
|
||||
/obj/item/clothing/suit/toggle/labcoat/emt
|
||||
name = "emt vest"
|
||||
desc = "A dark blue vest with reflective strips for emergency medical technicians."
|
||||
icon_state = "labcoat_emt"
|
||||
item_state = "labcoat_emt"
|
||||
@@ -37,12 +37,6 @@
|
||||
icon_state = "labcoat_cmo"
|
||||
item_state = "labcoat_cmo"
|
||||
|
||||
/obj/item/clothing/suit/toggle/labcoat/emt
|
||||
name = "\improper EMT's jacket"
|
||||
desc = "A dark blue jacket with reflective strips for emergency medical technicians."
|
||||
icon_state = "labcoat_emt"
|
||||
item_state = "labcoat_cmo"
|
||||
|
||||
/obj/item/clothing/suit/toggle/labcoat/mad
|
||||
name = "\proper The Mad's labcoat"
|
||||
desc = "It makes you look capable of konking someone on the noggin and shooting them into space."
|
||||
|
||||
@@ -480,8 +480,6 @@
|
||||
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
|
||||
allowed = list(/obj/item/clothing/mask/facehugger/toy)
|
||||
|
||||
|
||||
|
||||
// WINTER COATS
|
||||
|
||||
/obj/item/clothing/suit/hooded/wintercoat
|
||||
@@ -521,6 +519,7 @@
|
||||
|
||||
/obj/item/clothing/suit/hooded/wintercoat/captain
|
||||
name = "captain's winter coat"
|
||||
desc = "A luxuriant winter coat, stuffed with the down of the endangered Uka bird and trimmed with genuine sable. The fabric is an indulgently soft micro-fiber, and the deep ultramarine color is only one that could be achieved with minute amounts of crystalline bluespace dust woven into the thread between the plectrums. Extremely lavish, and extremely durable. The tiny flakes of protective material make it nothing short of extremely light lamellar armor."
|
||||
icon_state = "coatcaptain"
|
||||
item_state = "coatcaptain"
|
||||
armor = list("melee" = 25, "bullet" = 30, "laser" = 30, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 50)
|
||||
@@ -531,20 +530,24 @@
|
||||
allowed = GLOB.security_wintercoat_allowed
|
||||
|
||||
/obj/item/clothing/head/hooded/winterhood/captain
|
||||
desc = "A blue and yellow hood attached to a heavy winter jacket."
|
||||
icon_state = "winterhood_captain"
|
||||
|
||||
/obj/item/clothing/suit/hooded/wintercoat/hop
|
||||
name = "head of personnel's winter coat"
|
||||
desc = "A cozy winter coat, covered in thick fur. The breast features a proud yellow chevron, reminding everyone that you're the second banana."
|
||||
icon_state = "coathop"
|
||||
item_state = "coathop"
|
||||
armor = list("melee" = 5, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 5, "bio" = 5, "rad" = 0, "fire" = 0, "acid" = 5)
|
||||
hoodtype = /obj/item/clothing/head/hooded/winterhood/hop
|
||||
|
||||
/obj/item/clothing/head/hooded/winterhood/hop
|
||||
desc = "A cozy winter hood attached to a heavy winter jacket."
|
||||
icon_state = "winterhood_hop"
|
||||
|
||||
/obj/item/clothing/suit/hooded/wintercoat/security
|
||||
name = "security winter coat"
|
||||
desc = "A red, armor-padded winter coat. It glitters with a mild ablative coating and a robust air of authority. The zipper tab is a pair of jingly little handcuffs and got annoying after the first ten seconds."
|
||||
icon_state = "coatsecurity"
|
||||
item_state = "coatsecurity"
|
||||
armor = list("melee" = 25, "bullet" = 15, "laser" = 30, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 45)
|
||||
@@ -555,10 +558,12 @@
|
||||
allowed = GLOB.security_wintercoat_allowed
|
||||
|
||||
/obj/item/clothing/head/hooded/winterhood/security
|
||||
desc = "A red, armor-padded winter hood."
|
||||
icon_state = "winterhood_security"
|
||||
|
||||
/obj/item/clothing/suit/hooded/wintercoat/hos
|
||||
name = "head of security's winter coat"
|
||||
desc = "A red, armor-padded winter coat, lovingly woven with a Kevlar interleave and reinforced with semi-ablative polymers and a silver azide fill material. The zipper tab looks like a tiny replica of Beepsky."
|
||||
icon_state = "coathos"
|
||||
item_state = "coathos"
|
||||
armor = list("melee" = 35, "bullet" = 35, "laser" = 35, "energy" = 15, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 55)
|
||||
@@ -569,10 +574,12 @@
|
||||
allowed = GLOB.security_wintercoat_allowed
|
||||
|
||||
/obj/item/clothing/head/hooded/winterhood/hos
|
||||
desc = "A red, armor-padded winter hood, lovingly woven with a Kevlar interleave. Definitely not bulletproof, especially not the part where your face goes."
|
||||
icon_state = "winterhood_hos"
|
||||
|
||||
/obj/item/clothing/suit/hooded/wintercoat/medical
|
||||
name = "medical winter coat"
|
||||
desc = "An arctic white winter coat with a small blue caduceus instead of a plastic zipper tab. Snazzy."
|
||||
icon_state = "coatmedical"
|
||||
item_state = "coatmedical"
|
||||
allowed = list(/obj/item/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
|
||||
@@ -580,10 +587,12 @@
|
||||
hoodtype = /obj/item/clothing/head/hooded/winterhood/medical
|
||||
|
||||
/obj/item/clothing/head/hooded/winterhood/medical
|
||||
desc = "A white winter coat hood."
|
||||
icon_state = "winterhood_medical"
|
||||
|
||||
/obj/item/clothing/suit/hooded/wintercoat/cmo
|
||||
name = "chief medical officer's winter coat"
|
||||
desc = "An arctic white winter coat with a small blue caduceus instead of a plastic zipper tab. The normal liner is replaced with an exceptionally thick, soft layer of fur."
|
||||
icon_state = "coatcmo"
|
||||
item_state = "coatcmo"
|
||||
allowed = list(/obj/item/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
|
||||
@@ -591,10 +600,12 @@
|
||||
hoodtype = /obj/item/clothing/head/hooded/winterhood/cmo
|
||||
|
||||
/obj/item/clothing/head/hooded/winterhood/cmo
|
||||
desc = "A white winter coat hood."
|
||||
icon_state = "winterhood_cmo"
|
||||
|
||||
/obj/item/clothing/suit/hooded/wintercoat/chemistry
|
||||
name = "chemistry winter coat"
|
||||
desc = "A lab-grade winter coat made with acid resistant polymers. For the enterprising chemist who was exiled to a frozen wasteland on the go."
|
||||
icon_state = "coatchemistry"
|
||||
item_state = "coatchemistry"
|
||||
allowed = list(/obj/item/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
|
||||
@@ -602,10 +613,12 @@
|
||||
hoodtype = /obj/item/clothing/head/hooded/winterhood/chemistry
|
||||
|
||||
/obj/item/clothing/head/hooded/winterhood/chemistry
|
||||
desc = "A white winter coat hood."
|
||||
icon_state = "winterhood_chemistry"
|
||||
|
||||
/obj/item/clothing/suit/hooded/wintercoat/viro
|
||||
name = "virology winter coat"
|
||||
desc = "A white winter coat with green markings. Warm, but wont fight off the common cold or any other disease. Might make people stand far away from you in the hallway. The zipper tab looks like an oversized bacteriophage."
|
||||
icon_state = "coatviro"
|
||||
item_state = "coatviro"
|
||||
allowed = list(/obj/item/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
|
||||
@@ -613,10 +626,12 @@
|
||||
hoodtype = /obj/item/clothing/head/hooded/winterhood/viro
|
||||
|
||||
/obj/item/clothing/head/hooded/winterhood/viro
|
||||
desc = "A white winter coat hood with green markings."
|
||||
icon_state = "winterhood_viro"
|
||||
|
||||
/obj/item/clothing/suit/hooded/wintercoat/science
|
||||
name = "science winter coat"
|
||||
desc = "A white winter coat with an outdated atomic model instead of a plastic zipper tab."
|
||||
icon_state = "coatscience"
|
||||
item_state = "coatscience"
|
||||
allowed = list(/obj/item/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
|
||||
@@ -624,10 +639,12 @@
|
||||
hoodtype = /obj/item/clothing/head/hooded/winterhood/science
|
||||
|
||||
/obj/item/clothing/head/hooded/winterhood/science
|
||||
desc = "A white winter coat hood. This one will keep your brain warm. About as much as the others, really."
|
||||
icon_state = "winterhood_science"
|
||||
|
||||
/obj/item/clothing/suit/hooded/wintercoat/robotics
|
||||
name = "robotics winter coat"
|
||||
desc = "A black winter coat with a badass flaming robotic skull for the zipper tab. This one has bright red designs and a few useless buttons."
|
||||
icon_state = "coatrobotics"
|
||||
item_state = "coatrobotics"
|
||||
allowed = list(/obj/item/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/screwdriver, /obj/item/crowbar, /obj/item/wrench, /obj/item/stack/cable_coil, /obj/item/weldingtool, /obj/item/multitool)
|
||||
@@ -635,20 +652,24 @@
|
||||
hoodtype = /obj/item/clothing/head/hooded/winterhood/robotics
|
||||
|
||||
/obj/item/clothing/head/hooded/winterhood/robotics
|
||||
desc = "A black winter coat hood. You can pull it down over your eyes and pretend that you're an outdated, late 1980s interpretation of a futuristic mechanized police force. They'll fix you. They fix everything."
|
||||
icon_state = "winterhood_robotics"
|
||||
|
||||
/obj/item/clothing/suit/hooded/wintercoat/genetics
|
||||
name = "genetics winter coat"
|
||||
desc = "A white winter coat with a DNA helix for the zipper tab. "
|
||||
icon_state = "coatgenetics"
|
||||
item_state = "coatgenetics"
|
||||
allowed = list(/obj/item/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
|
||||
hoodtype = /obj/item/clothing/head/hooded/winterhood/genetics
|
||||
|
||||
/obj/item/clothing/head/hooded/winterhood/genetics
|
||||
desc = "A white winter coat hood. It's warm."
|
||||
icon_state = "winterhood_genetics"
|
||||
|
||||
/obj/item/clothing/suit/hooded/wintercoat/rd
|
||||
name = "research director's winter coat"
|
||||
desc = "A thick arctic winter coat with an outdated atomic model instead of a plastic zipper tab. Most in the know are heavily aware that Bohr's model of the atom was outdated by the time of the 1930s when the Heisenbergian and Schrodinger models were generally accepted for true. Nevertheless, we still see its use in anachronism, roleplaying, and, in this case, as a zipper tab. At least it should keep you warm on your ivory pillar."
|
||||
icon_state = "coatrd"
|
||||
item_state = "coatrd"
|
||||
allowed = list(/obj/item/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
|
||||
@@ -656,10 +677,12 @@
|
||||
hoodtype = /obj/item/clothing/head/hooded/winterhood/rd
|
||||
|
||||
/obj/item/clothing/head/hooded/winterhood/rd
|
||||
desc = "A white winter coat hood. It smells faintly of hair gel."
|
||||
icon_state = "winterhood_rd"
|
||||
|
||||
/obj/item/clothing/suit/hooded/wintercoat/ce
|
||||
name = "chief engineer's winter coat"
|
||||
desc = "A white winter coat with reflective green and yellow stripes. Stuffed with asbestos, treated with fire retardant PBDE, lined with a micro thin sheet of lead foil and snugly fitted to your body's measurements. This baby's ready to save you from anything except the thyroid cancer and systemic fibrosis you'll get from wearing it. The zipper tab is a tiny golden wrench."
|
||||
icon_state = "coatce"
|
||||
item_state = "coatce"
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 5, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 30, "fire" = 35, "acid" = 45)
|
||||
@@ -667,10 +690,12 @@
|
||||
hoodtype = /obj/item/clothing/head/hooded/winterhood/ce
|
||||
|
||||
/obj/item/clothing/head/hooded/winterhood/ce
|
||||
desc = "A white winter coat hood. Feels surprisingly heavy. The tag says that it's not child safe."
|
||||
icon_state = "winterhood_ce"
|
||||
|
||||
/obj/item/clothing/suit/hooded/wintercoat/engineering
|
||||
name = "engineering winter coat"
|
||||
desc = "A surprisingly heavy yellow winter coat with reflective orange stripes. It has a small wrench for its zipper tab, and the inside layer is covered with a radiation-resistant silver-nylon blend. Because you're worth it."
|
||||
icon_state = "coatengineer"
|
||||
item_state = "coatengineer"
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 20, "fire" = 30, "acid" = 45)
|
||||
@@ -678,29 +703,35 @@
|
||||
hoodtype = /obj/item/clothing/head/hooded/winterhood/engineering
|
||||
|
||||
/obj/item/clothing/head/hooded/winterhood/engineering
|
||||
desc = "A yellow winter coat hood. Definitely not a replacement for a hard hat."
|
||||
icon_state = "winterhood_engineer"
|
||||
|
||||
/obj/item/clothing/suit/hooded/wintercoat/engineering/atmos
|
||||
name = "atmospherics winter coat"
|
||||
desc = "A yellow and blue winter coat. The zipper pull-tab is made to look like a miniature breath mask."
|
||||
icon_state = "coatatmos"
|
||||
item_state = "coatatmos"
|
||||
hoodtype = /obj/item/clothing/head/hooded/winterhood/engineering/atmos
|
||||
|
||||
/obj/item/clothing/head/hooded/winterhood/engineering/atmos
|
||||
desc = "A yellow and blue winter coat hood."
|
||||
icon_state = "winterhood_atmos"
|
||||
|
||||
/obj/item/clothing/suit/hooded/wintercoat/hydro
|
||||
name = "hydroponics winter coat"
|
||||
desc = "A green and blue winter coat. The zipper tab looks like the flower from a member of Rosa Hesperrhodos, a pretty pink-and-white rose. The colors absolutely clash."
|
||||
icon_state = "coathydro"
|
||||
item_state = "coathydro"
|
||||
allowed = list(/obj/item/reagent_containers/spray/plantbgone, /obj/item/plant_analyzer, /obj/item/seeds, /obj/item/reagent_containers/glass/bottle, /obj/item/cultivator, /obj/item/reagent_containers/spray/pestspray, /obj/item/hatchet, /obj/item/storage/bag/plants, /obj/item/toy, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/storage/fancy/cigarettes, /obj/item/lighter)
|
||||
hoodtype = /obj/item/clothing/head/hooded/winterhood/hydro
|
||||
|
||||
/obj/item/clothing/head/hooded/winterhood/hydro
|
||||
desc = "A green winter coat hood."
|
||||
icon_state = "winterhood_hydro"
|
||||
|
||||
/obj/item/clothing/suit/hooded/wintercoat/cosmic
|
||||
name = "cosmic winter coat"
|
||||
desc = "A starry winter coat that even glows softly."
|
||||
icon_state = "coatcosmic"
|
||||
item_state = "coatcosmic"
|
||||
hoodtype = /obj/item/clothing/head/hooded/winterhood/cosmic
|
||||
@@ -708,48 +739,58 @@
|
||||
light_range = 1.2
|
||||
|
||||
/obj/item/clothing/head/hooded/winterhood/cosmic
|
||||
desc = "A starry winter hood."
|
||||
icon_state = "winterhood_cosmic"
|
||||
|
||||
/obj/item/clothing/suit/hooded/wintercoat/janitor
|
||||
name = "janitors winter coat"
|
||||
desc = "A purple-and-beige winter coat that smells of space cleaner."
|
||||
icon_state = "coatjanitor"
|
||||
item_state = "coatjanitor"
|
||||
allowed = list(/obj/item/toy, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/storage/fancy/cigarettes, /obj/item/lighter,/obj/item/grenade/chem_grenade,/obj/item/lightreplacer,/obj/item/flashlight,/obj/item/reagent_containers/glass/beaker,/obj/item/reagent_containers/glass/bottle,/obj/item/reagent_containers/spray,/obj/item/soap,/obj/item/holosign_creator,/obj/item/key/janitor,/obj/item/melee/flyswatter,/obj/item/paint/paint_remover,/obj/item/storage/bag/trash,/obj/item/reagent_containers/glass/bucket)
|
||||
hoodtype = /obj/item/clothing/head/hooded/winterhood/janitor
|
||||
|
||||
/obj/item/clothing/head/hooded/winterhood/janitor
|
||||
desc = "A purple hood that smells of space cleaner."
|
||||
icon_state = "winterhood_janitor"
|
||||
|
||||
/obj/item/clothing/suit/hooded/wintercoat/cargo
|
||||
name = "cargo winter coat"
|
||||
desc = "A tan-and-grey winter coat that has a crate for its zipper pull tab. It fills you with the warmth of a fierce independence."
|
||||
icon_state = "coatcargo"
|
||||
item_state = "coatcargo"
|
||||
hoodtype = /obj/item/clothing/head/hooded/winterhood/cargo
|
||||
|
||||
/obj/item/clothing/head/hooded/winterhood/cargo
|
||||
desc = "A grey hood for a winter coat."
|
||||
icon_state = "winterhood_cargo"
|
||||
|
||||
/obj/item/clothing/suit/hooded/wintercoat/qm
|
||||
name = "quartermaster's winter coat"
|
||||
desc = "A dark brown winter coat that has a golden crate pin for its zipper pully."
|
||||
icon_state = "coatqm"
|
||||
item_state = "coatqm"
|
||||
hoodtype = /obj/item/clothing/head/hooded/winterhood/qm
|
||||
|
||||
/obj/item/clothing/head/hooded/winterhood/qm
|
||||
desc = "A dark brown winter hood"
|
||||
icon_state = "winterhood_qm"
|
||||
|
||||
/obj/item/clothing/suit/hooded/wintercoat/aformal
|
||||
name = "assistant's formal winter coat"
|
||||
desc = "A black button up winter coat."
|
||||
icon_state = "coataformal"
|
||||
item_state = "coataformal"
|
||||
allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter,/obj/item/clothing/gloves/color/yellow)
|
||||
hoodtype = /obj/item/clothing/head/hooded/winterhood/aformal
|
||||
|
||||
/obj/item/clothing/head/hooded/winterhood/aformal
|
||||
desc = "A black winter coat hood."
|
||||
icon_state = "winterhood_aformal"
|
||||
|
||||
/obj/item/clothing/suit/hooded/wintercoat/miner
|
||||
name = "mining winter coat"
|
||||
desc = "A dusty button up winter coat. The zipper tab looks like a tiny pickaxe."
|
||||
icon_state = "coatminer"
|
||||
item_state = "coatminer"
|
||||
allowed = list(/obj/item/pickaxe, /obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter)
|
||||
@@ -757,10 +798,12 @@
|
||||
hoodtype = /obj/item/clothing/head/hooded/winterhood/miner
|
||||
|
||||
/obj/item/clothing/head/hooded/winterhood/miner
|
||||
desc = "A dusty winter coat hood."
|
||||
icon_state = "winterhood_miner"
|
||||
|
||||
/obj/item/clothing/suit/hooded/wintercoat/ratvar
|
||||
name = "ratvarian winter coat"
|
||||
desc = "A brass-plated button up winter coat. Instead of a zipper tab, it has a brass cog with a tiny red gemstone inset."
|
||||
icon_state = "coatratvar"
|
||||
item_state = "coatratvar"
|
||||
armor = list("melee" = 30, "bullet" = 45, "laser" = -10, "energy" = 0, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 60)
|
||||
@@ -770,6 +813,7 @@
|
||||
|
||||
/obj/item/clothing/head/hooded/winterhood/ratvar
|
||||
icon_state = "winterhood_ratvar"
|
||||
desc = "A brass-plated winter hood that glows softly, hinting at its divinity."
|
||||
light_range = 3
|
||||
light_power = 1
|
||||
light_color = "#B18B25" //clockwork slab background top color
|
||||
@@ -788,6 +832,7 @@
|
||||
|
||||
/obj/item/clothing/suit/hooded/wintercoat/narsie
|
||||
name = "narsian winter coat"
|
||||
desc = "A somber button-up in tones of grey entropy and a wicked crimson zipper. When pulled all the way up, the zipper looks like a bloody gash. The zipper pull looks like a single drop of blood."
|
||||
icon_state = "coatnarsie"
|
||||
item_state = "coatnarsie"
|
||||
armor = list("melee" = 30, "bullet" = 20, "laser" = 30,"energy" = 10, "bomb" = 30, "bio" = 10, "rad" = 10, "fire" = 30, "acid" = 30)
|
||||
@@ -808,10 +853,12 @@
|
||||
user.adjustBruteLoss(rand(10,16))
|
||||
|
||||
/obj/item/clothing/head/hooded/winterhood/narsie
|
||||
desc = "A black winter hood full of whispering secrets that only She shall ever know."
|
||||
icon_state = "winterhood_narsie"
|
||||
|
||||
/obj/item/clothing/suit/hooded/wintercoat/ratvar/fake
|
||||
name = "brass winter coat"
|
||||
desc = "A brass-plated button up winter coat. Instead of a zipper tab, it has a brass cog with a tiny red piece of plastic as an inset."
|
||||
icon_state = "coatratvar"
|
||||
item_state = "coatratvar"
|
||||
allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter)
|
||||
@@ -820,6 +867,7 @@
|
||||
|
||||
/obj/item/clothing/suit/hooded/wintercoat/narsie/fake
|
||||
name = "runed winter coat"
|
||||
desc = "A dusty button up winter coat in the tones of oblivion and ash. The zipper pull looks like a single drop of blood."
|
||||
icon_state = "coatnarsie"
|
||||
item_state = "coatnarsie"
|
||||
allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter)
|
||||
@@ -842,7 +890,6 @@
|
||||
icon_state = "winterhood_durathread"
|
||||
armor = list("melee" = 20, "bullet" = 8, "laser" = 15, "energy" = 8, "bomb" = 25, "bio" = 10, "rad" = 15, "fire" = 75, "acid" = 37)
|
||||
|
||||
|
||||
/obj/item/clothing/suit/spookyghost
|
||||
name = "spooky ghost"
|
||||
desc = "This is obviously just a bedsheet, but maybe try it on?"
|
||||
|
||||
@@ -252,7 +252,7 @@
|
||||
return
|
||||
owner.visible_message("<span class='danger'>The reactive teleport system flings [H] clear of [attack_text] and slams [H.p_them()] into a fabricated table!</span>")
|
||||
owner.visible_message("<font color='red' size='3'>[H] GOES ON THE TABLE!!!</font>")
|
||||
owner.Knockdown(40)
|
||||
owner.DefaultCombatKnockdown(40)
|
||||
var/list/turfs = new/list()
|
||||
for(var/turf/T in orange(tele_range, H))
|
||||
if(T.density)
|
||||
|
||||
@@ -158,6 +158,37 @@
|
||||
can_adjust = FALSE
|
||||
fitted = FEMALE_UNIFORM_TOP
|
||||
|
||||
/obj/item/clothing/under/rank/medical/paramedic
|
||||
desc = "It's made of a special fiber that provides minor protection against biohazards. It has a white cross on the chest denoting that the wearer is a trained paramedic."
|
||||
name = "paramedic jumpsuit"
|
||||
icon_state = "paramedic-dark"
|
||||
item_state = "w_suit"
|
||||
item_color = "paramedic-dark"
|
||||
permeability_coefficient = 0.5
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0)
|
||||
can_adjust = FALSE
|
||||
|
||||
/obj/item/clothing/under/rank/medical/paramedic/light
|
||||
desc = "It's made of a special fiber that provides minor protection against biohazards. It has a dark blue cross on the chest denoting that the wearer is a trained paramedic."
|
||||
icon_state = "paramedic-light"
|
||||
item_color = "paramedic-light"
|
||||
can_adjust = TRUE
|
||||
|
||||
/obj/item/clothing/under/rank/medical/paramedic/skirt
|
||||
name = "paramedic jumpskirt"
|
||||
desc = "It's made of a special fiber that provides minor protection against biohazards. It has a white cross on the chest denoting that the wearer is a trained paramedic."
|
||||
icon_state = "paramedic-dark_skirt"
|
||||
item_state = "w_suit"
|
||||
item_color = "paramedic-dark_skirt"
|
||||
body_parts_covered = CHEST|GROIN|ARMS
|
||||
can_adjust = FALSE
|
||||
fitted = FEMALE_UNIFORM_TOP
|
||||
|
||||
/obj/item/clothing/under/rank/medical/paramedic/skirt/light
|
||||
desc = "It's made of a special fiber that provides minor protection against biohazards. It has a dark blue cross on the chest denoting that the wearer is a trained paramedic."
|
||||
icon_state = "paramedic_skirt"
|
||||
item_color = "paramedic_skirt"
|
||||
|
||||
/obj/item/clothing/under/rank/nursesuit
|
||||
desc = "It's a jumpsuit commonly worn by nursing staff in the medical department."
|
||||
name = "nurse's suit"
|
||||
@@ -169,6 +200,7 @@
|
||||
body_parts_covered = CHEST|GROIN|ARMS
|
||||
fitted = NO_FEMALE_UNIFORM
|
||||
can_adjust = FALSE
|
||||
|
||||
/obj/item/clothing/under/rank/medical
|
||||
desc = "It's made of a special fiber that provides minor protection against biohazards. It has a cross on the chest denoting that the wearer is trained medical personnel."
|
||||
name = "medical doctor's jumpsuit"
|
||||
@@ -177,18 +209,21 @@
|
||||
item_color = "medical"
|
||||
permeability_coefficient = 0.5
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0)
|
||||
|
||||
/obj/item/clothing/under/rank/medical/blue
|
||||
name = "blue medical scrubs"
|
||||
desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in baby blue."
|
||||
icon_state = "scrubsblue"
|
||||
item_color = "scrubsblue"
|
||||
can_adjust = FALSE
|
||||
|
||||
/obj/item/clothing/under/rank/medical/green
|
||||
name = "green medical scrubs"
|
||||
desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in dark green."
|
||||
icon_state = "scrubsgreen"
|
||||
item_color = "scrubsgreen"
|
||||
can_adjust = FALSE
|
||||
|
||||
/obj/item/clothing/under/rank/medical/purple
|
||||
name = "purple medical scrubs"
|
||||
desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in deep purple."
|
||||
@@ -204,4 +239,4 @@
|
||||
item_color = "medical_skirt"
|
||||
body_parts_covered = CHEST|GROIN|ARMS
|
||||
can_adjust = FALSE
|
||||
fitted = FEMALE_UNIFORM_TOP
|
||||
fitted = FEMALE_UNIFORM_TOP
|
||||
@@ -19,7 +19,6 @@
|
||||
icon_state = "trek_engsec"
|
||||
item_color = "trek_engsec"
|
||||
item_state = "r_suit"
|
||||
armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) //more sec than eng, but w/e.
|
||||
strip_delay = 50
|
||||
|
||||
/obj/item/clothing/under/trek/medsci
|
||||
@@ -69,4 +68,4 @@
|
||||
desc = "Something about it feels off..."
|
||||
icon_state = "trek_Q"
|
||||
item_color = "trek_Q"
|
||||
item_state = "r_suit"
|
||||
item_state = "r_suit"
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
else
|
||||
D = new virus_type()
|
||||
else
|
||||
D = new /datum/disease/advance/random(max_severity, max_severity)
|
||||
D = new /datum/disease/advance/random(TRUE, max_severity, max_severity)
|
||||
D.carrier = TRUE
|
||||
H.ForceContractDisease(D, FALSE, TRUE)
|
||||
|
||||
|
||||
@@ -13,7 +13,4 @@
|
||||
|
||||
|
||||
/datum/round_event/grid_check/start()
|
||||
for(var/P in GLOB.apcs_list)
|
||||
var/obj/machinery/power/apc/C = P
|
||||
if(C.cell && is_station_level(C.z))
|
||||
C.energy_fail(rand(30,120))
|
||||
power_fail(30, 120)
|
||||
@@ -24,7 +24,7 @@
|
||||
|
||||
/datum/round_event/ghost_role/sentience/spawn_role()
|
||||
var/list/mob/dead/observer/candidates
|
||||
candidates = get_candidates(ROLE_ALIEN, null, ROLE_ALIEN)
|
||||
candidates = get_candidates(ROLE_SENTIENCE, null, ROLE_SENTIENCE)
|
||||
|
||||
// find our chosen mob to breathe life into
|
||||
// Mobs have to be simple animals, mindless and on station
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
jobs_to_revolt = list("Assistant")
|
||||
nation_name = pick("Assa", "Mainte", "Tunnel", "Gris", "Grey", "Liath", "Grigio", "Ass", "Assi")
|
||||
if("white")
|
||||
jobs_to_revolt = list("Chief Medical Officer", "Medical Doctor", "Chemist", "Geneticist", "Virologist")
|
||||
jobs_to_revolt = list("Chief Medical Officer", "Medical Doctor", "Chemist", "Geneticist", "Paramedic", "Virologist")
|
||||
nation_name = pick("Mede", "Healtha", "Recova", "Chemi", "Geneti", "Viro", "Psych")
|
||||
if("yellow")
|
||||
jobs_to_revolt = list("Chief Engineer", "Station Engineer", "Atmospheric Technician")
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
if(R.has_buckled_mobs())
|
||||
for(var/mob/living/L in R.buckled_mobs)
|
||||
L.visible_message("<span class='warning'>[L] is knocked off of [R] by the charge in [R]'s chassis induced by [name]!</span>") //I know it's bad.
|
||||
L.Knockdown(10)
|
||||
L.DefaultCombatKnockdown(10)
|
||||
R.unbuckle_mob(L)
|
||||
do_sparks(5, 0, L)
|
||||
..()
|
||||
|
||||
@@ -220,8 +220,8 @@ GLOBAL_LIST_INIT(hallucination_list, list(
|
||||
|
||||
/obj/effect/hallucination/simple/xeno/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
|
||||
update_icon("alienh_pounce")
|
||||
if(hit_atom == target && target.stat!=DEAD)
|
||||
target.Knockdown(100)
|
||||
if(hit_atom == target && target.stat != DEAD)
|
||||
target.DefaultCombatKnockdown(100)
|
||||
target.visible_message("<span class='danger'>[target] flails around wildly.</span>","<span class ='userdanger'>[name] pounces on you!</span>")
|
||||
|
||||
/datum/hallucination/xeno_attack
|
||||
@@ -308,7 +308,7 @@ GLOBAL_LIST_INIT(hallucination_list, list(
|
||||
shake_camera(target, 2, 1)
|
||||
if(bubblegum.Adjacent(target) && !charged)
|
||||
charged = TRUE
|
||||
target.Knockdown(80)
|
||||
target.DefaultCombatKnockdown(80)
|
||||
target.adjustStaminaLoss(40)
|
||||
step_away(target, bubblegum)
|
||||
shake_camera(target, 4, 3)
|
||||
@@ -1106,7 +1106,7 @@ GLOBAL_LIST_INIT(hallucination_list, list(
|
||||
if(istype(target, /obj/effect/dummy/phased_mob))
|
||||
return
|
||||
to_chat(target, "<span class='userdanger'>You fall into the chasm!</span>")
|
||||
target.Knockdown(40)
|
||||
target.DefaultCombatKnockdown(40)
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, target, "<span class='notice'>It's surprisingly shallow.</span>"), 15)
|
||||
QDEL_IN(src, 30)
|
||||
|
||||
@@ -1245,7 +1245,7 @@ GLOBAL_LIST_INIT(hallucination_list, list(
|
||||
|
||||
/datum/hallucination/shock/proc/shock_drop()
|
||||
target.jitteriness = max(target.jitteriness - 990, 10) //Still jittery, but vastly less
|
||||
target.Knockdown(60)
|
||||
target.DefaultCombatKnockdown(60)
|
||||
|
||||
/datum/hallucination/husks
|
||||
|
||||
@@ -1318,7 +1318,7 @@ GLOBAL_LIST_INIT(hallucination_list, list(
|
||||
"<span class='userdanger'>[G] grabs your wrist and violently wrenches it to the side!</span>")
|
||||
C.emote("scream")
|
||||
C.dropItemToGround(C.get_active_held_item())
|
||||
C.Knockdown(60)
|
||||
C.DefaultCombatKnockdown(60)
|
||||
else
|
||||
to_chat(C,"<span class='userdanger'>[G] violently grabs you!</span>")
|
||||
qdel(src)
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
head_attack_message = " on the head"
|
||||
//Knockdown the target for the duration that we calculated and divide it by 5.
|
||||
if(armor_duration)
|
||||
target.Knockdown(min(armor_duration, 200)) // Never knockdown more than a flash!
|
||||
target.DefaultCombatKnockdown(min(armor_duration, 200)) // Never knockdown more than a flash!
|
||||
|
||||
//Display an attack message.
|
||||
if(target != user)
|
||||
|
||||
@@ -85,6 +85,20 @@
|
||||
tastes = list("cake" = 4, "cream cheese" = 3)
|
||||
foodtype = GRAIN | DAIRY
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/store/cake/brioche
|
||||
name = "brioche cake"
|
||||
desc = "A ring of sweet, glazed buns."
|
||||
icon_state = "briochecake"
|
||||
slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/brioche
|
||||
slices_num = 6
|
||||
bonus_reagents = list(/datum/reagent/consumable/nutriment = 10, /datum/reagent/consumable/nutriment/vitamin = 2)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/cakeslice/brioche
|
||||
name = "brioche cake slice"
|
||||
desc = "Delicious sweet-bread. Who needs anything else?"
|
||||
icon_state = "briochecake_slice"
|
||||
filling_color = "#FFD700"
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/cakeslice/cheese
|
||||
name = "cheese cake slice"
|
||||
desc = "Slice of pure cheestisfaction."
|
||||
@@ -375,7 +389,7 @@ obj/item/reagent_containers/food/snacks/store/cake/pound_cake
|
||||
/obj/item/reagent_containers/food/snacks/cakeslice/peach_slice
|
||||
name = "peach cake slice"
|
||||
desc = "A slice of peach cake."
|
||||
icon_state = "peach_slice"
|
||||
icon_state = "peachcake_slice"
|
||||
filling_color = "#00FFFF"
|
||||
tastes = list("cake" = 1, "sugar" = 1, "peachjuice" = 10)
|
||||
foodtype = GRAIN | SUGAR | DAIRY
|
||||
@@ -396,4 +410,4 @@ obj/item/reagent_containers/food/snacks/store/cake/pound_cake
|
||||
icon_state = "trumpetcakeslice"
|
||||
filling_color = "#7A3D80"
|
||||
tastes = list("cake" = 4, "violets" = 2, "jam" = 2)
|
||||
foodtype = GRAIN | DAIRY | FRUIT | SUGAR
|
||||
foodtype = GRAIN | DAIRY | FRUIT | SUGAR
|
||||
|
||||
@@ -101,7 +101,7 @@
|
||||
desc = "A fried egg with a side of bacon. Delicious!"
|
||||
icon_state = "baconegg"
|
||||
bonus_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/vitamin = 1)
|
||||
bitesize = 1
|
||||
bitesize = 2
|
||||
filling_color = "#FFFFF0"
|
||||
tastes = list("egg" = 2, "bacon" = 2, "salt" = 1, "pepper" = 1)
|
||||
foodtype = MEAT | FRIED | BREAKFAST
|
||||
@@ -151,8 +151,17 @@
|
||||
desc = "There is only one egg on this, how rude."
|
||||
icon_state = "benedict"
|
||||
bonus_reagents = list(/datum/reagent/consumable/nutriment/vitamin = 4)
|
||||
trash = /obj/item/trash/plate
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
trash = /obj/item/trash/plate
|
||||
list_reagents = list(/datum/reagent/consumable/nutriment = 6, /datum/reagent/consumable/nutriment/vitamin = 4)
|
||||
tastes = list("egg" = 1, "bacon" = 1, "bun" = 1)
|
||||
foodtype = MEAT | BREAKFAST
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/scotchegg
|
||||
name = "scotch egg"
|
||||
desc = "A boiled egg wrapped in a delicious, seasoned meatball."
|
||||
icon_state = "scotchegg"
|
||||
bonus_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/nutriment/vitamin = 2)
|
||||
bitesize = 3
|
||||
filling_color = "#FFFFF0"
|
||||
list_reagents = list(/datum/reagent/consumable/nutriment = 6)
|
||||
@@ -140,7 +140,7 @@
|
||||
/obj/item/reagent_containers/food/snacks/snowcones/blue
|
||||
name = "bluecherry snowcone"
|
||||
desc = "Bluecherry syrup drizzled over a snowball in a paper cup, how rare!"
|
||||
icon_state = "blue_sc"
|
||||
icon_state = "red_sc"
|
||||
list_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/bluecherryjelly = 5)
|
||||
tastes = list("ice" = 1, "water" = 1, "blue" = 5, "cherries" = 5)
|
||||
foodtype = FRUIT
|
||||
@@ -148,7 +148,7 @@
|
||||
/obj/item/reagent_containers/food/snacks/snowcones/red
|
||||
name = "cherry snowcone"
|
||||
desc = "Cherry syrup drizzled over a snowball in a paper cup."
|
||||
icon_state = "red_sc"
|
||||
icon_state = "blue_sc"
|
||||
list_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/cherryjelly = 5)
|
||||
tastes = list("ice" = 1, "water" = 1, "red" = 5, "cherries" = 5)
|
||||
foodtype = FRUIT
|
||||
@@ -223,7 +223,7 @@
|
||||
tastes = list("ice" = 1, "water" = 1, "cola" = 5)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/snowcones/spacemountainwind
|
||||
name = "Space Mountain Wind snowcone"
|
||||
name = "\improper Space Mountain Wind snowcone"
|
||||
desc = "Space Mountain Wind drizzled over a snowball in a paper cup."
|
||||
icon_state = "kiwi_sc"
|
||||
list_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/spacemountainwind = 5)
|
||||
|
||||
@@ -225,7 +225,7 @@
|
||||
if(iscarbon(M))
|
||||
M.visible_message("[src] bursts out of [M]!</span>")
|
||||
M.emote("scream")
|
||||
M.Knockdown(40)
|
||||
M.DefaultCombatKnockdown(40)
|
||||
M.adjustBruteLoss(60)
|
||||
Expand()
|
||||
return ..()
|
||||
@@ -325,7 +325,7 @@
|
||||
/obj/item/reagent_containers/food/snacks/corndog
|
||||
name = "corndog plate"
|
||||
desc = "A plate with two small corn dogs, with two dimples of ketchup and mustard to dip them in."
|
||||
icon_state = "dorndog"
|
||||
icon_state = "corndog"
|
||||
trash = /obj/item/trash/plate/alt
|
||||
tastes = list("hotdog" = 2, "mustard and ketchup" = 1, "fryed bread" = 1)
|
||||
bonus_reagents = list(/datum/reagent/consumable/nutriment = 6, /datum/reagent/consumable/nutriment/vitamin = 2, /datum/reagent/consumable/mustard = 5, /datum/reagent/consumable/ketchup = 5)
|
||||
@@ -359,4 +359,4 @@
|
||||
list_reagents = list(/datum/reagent/consumable/nutriment = 8, /datum/reagent/consumable/nutriment/vitamin = 2, /datum/reagent/consumable/bbqsauce = 5)
|
||||
bonus_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/vitamin = 1)
|
||||
tastes = list("meat" = 3, "smokey sauce" = 1)
|
||||
foodtype = MEAT
|
||||
foodtype = MEAT
|
||||
|
||||
@@ -674,3 +674,26 @@
|
||||
if (7000 to INFINITY)
|
||||
burn()
|
||||
..()
|
||||
|
||||
//Easter Stuff
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/chocolatebunny
|
||||
name = "chocolate bunny"
|
||||
desc = "Contains less than 10% real rabbit!"
|
||||
icon_state = "chocolatebunny"
|
||||
bonus_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/vitamin = 1)
|
||||
list_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/sugar = 2, /datum/reagent/consumable/coco = 2)
|
||||
filling_color = "#A0522D"
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/soup/mammi
|
||||
name = "Mammi"
|
||||
desc = "A bowl of mushy bread and milk. It reminds you, not too fondly, of a bowel movement."
|
||||
icon_state = "mammi"
|
||||
bonus_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/nutriment/vitamin = 1)
|
||||
list_reagents = list(/datum/reagent/consumable/nutriment = 8, /datum/reagent/consumable/nutriment/vitamin = 1)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/hotcrossbun
|
||||
bitesize = 2
|
||||
name = "hot-cross bun"
|
||||
desc = "The Cross represents the Assistants that died for your sins."
|
||||
icon_state = "hotcrossbun"
|
||||
@@ -201,10 +201,10 @@
|
||||
/obj/item/reagent_containers/food/snacks/donut/jelly/choco
|
||||
name = "chocolate jelly donut"
|
||||
desc = "Goes great with a glass of warm milk."
|
||||
icon_state = "jelly_choc"
|
||||
icon_state = "jelly_choco"
|
||||
bonus_reagents = list(/datum/reagent/consumable/hot_coco = 3, /datum/reagent/consumable/sprinkles = 1, /datum/reagent/consumable/nutriment/vitamin = 1) //the coco reagent is just bitter.
|
||||
tastes = list("jelly" = 1, "donut" = 4, "bitterness" = 1)
|
||||
decorated_icon = "jelly_choc_sprinkles"
|
||||
decorated_icon = "jelly_choco_sprinkles"
|
||||
filling_color = "#4F230D"
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/donut/jelly/blumpkin
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
else
|
||||
creamoverlay.icon_state = "creampie_human"
|
||||
if(stunning)
|
||||
H.Knockdown(20) //splat!
|
||||
H.DefaultCombatKnockdown(20) //splat!
|
||||
H.adjust_blurriness(1)
|
||||
H.visible_message("<span class='warning'>[H] is creamed by [src]!</span>", "<span class='userdanger'>You've been creamed by [src]!</span>")
|
||||
playsound(H, "desceration", 50, TRUE)
|
||||
@@ -83,7 +83,7 @@
|
||||
A.throw_at(T, 1, 1)
|
||||
M.visible_message("[src] bursts out of [M]!</span>")
|
||||
M.emote("scream")
|
||||
M.Knockdown(40)
|
||||
M.DefaultCombatKnockdown(40)
|
||||
M.adjustBruteLoss(60)
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -152,6 +152,6 @@ God bless America.
|
||||
reagents.reaction(C, TOUCH)
|
||||
C.apply_damage(min(30, reagents.total_volume), BURN, BODY_ZONE_HEAD)
|
||||
reagents.remove_any((reagents.total_volume/2))
|
||||
C.Knockdown(60)
|
||||
C.DefaultCombatKnockdown(60)
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
return ..()
|
||||
|
||||
@@ -310,7 +310,7 @@
|
||||
for(var/obj/item/O in ingredients)
|
||||
O.microwave_act(src)
|
||||
if(O.custom_materials?.len)
|
||||
metal += O.custom_materials[getmaterialref(/datum/material/iron)]
|
||||
metal += O.custom_materials[SSmaterials.GetMaterialRef(/datum/material/iron)]
|
||||
|
||||
if(metal)
|
||||
spark()
|
||||
|
||||
@@ -132,7 +132,8 @@
|
||||
set name = "Eject Contents"
|
||||
set src in oview(1)
|
||||
|
||||
if(usr.stat || !usr.canmove || usr.restrained())
|
||||
var/mob/living/L = usr
|
||||
if(!istype(L) || !CHECK_MOBILITY(L, MOBILITY_USE))
|
||||
return
|
||||
empty()
|
||||
add_fingerprint(usr)
|
||||
|
||||
@@ -591,7 +591,7 @@
|
||||
results = list(/datum/reagent/consumable/ethanol/cogchamp = 3)
|
||||
required_reagents = list(/datum/reagent/consumable/ethanol/cognac = 1, /datum/reagent/fuel = 1, /datum/reagent/consumable/ethanol/screwdrivercocktail = 1)
|
||||
mix_message = "You hear faint sounds of gears turning as it mixes."
|
||||
mix_sound = 'sound/effects/clockcult_gateway_closing.ogg'
|
||||
mix_sound = 'sound/machines/clockcult/steam_whoosh.ogg'
|
||||
|
||||
/datum/chemical_reaction/quadruplesec
|
||||
name = "Quadruple Sec"
|
||||
@@ -620,7 +620,7 @@
|
||||
results = list(/datum/reagent/consumable/ethanol/quintuple_sec = 15)
|
||||
required_reagents = list(/datum/reagent/consumable/ethanol/quadruple_sec = 5, /datum/reagent/consumable/clownstears = 5, /datum/reagent/consumable/ethanol/syndicatebomb = 5)
|
||||
mix_message = "Judgement is upon you."
|
||||
mix_message = 'sound/items/airhorn2.ogg'
|
||||
mix_sound = 'sound/items/airhorn2.ogg'
|
||||
|
||||
/datum/chemical_reaction/bastion_bourbon
|
||||
name = "Bastion Bourbon"
|
||||
|
||||
@@ -3,36 +3,6 @@
|
||||
|
||||
////////////////////////////////////////////////BREAD////////////////////////////////////////////////
|
||||
|
||||
/datum/crafting_recipe/food/meatbread
|
||||
name = "Meat bread"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/store/bread/plain = 1,
|
||||
/obj/item/reagent_containers/food/snacks/meat/cutlet/plain = 3,
|
||||
/obj/item/reagent_containers/food/snacks/cheesewedge = 3
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/store/bread/meat
|
||||
subcategory = CAT_BREAD
|
||||
|
||||
/datum/crafting_recipe/food/xenomeatbread
|
||||
name = "Xenomeat bread"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/store/bread/plain = 1,
|
||||
/obj/item/reagent_containers/food/snacks/meat/cutlet/xeno = 3,
|
||||
/obj/item/reagent_containers/food/snacks/cheesewedge = 3
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/store/bread/xenomeat
|
||||
subcategory = CAT_BREAD
|
||||
|
||||
/datum/crafting_recipe/food/spidermeatbread
|
||||
name = "Spidermeat bread"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/store/bread/plain = 1,
|
||||
/obj/item/reagent_containers/food/snacks/meat/cutlet/spider = 3,
|
||||
/obj/item/reagent_containers/food/snacks/cheesewedge = 3
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/store/bread/spidermeat
|
||||
subcategory = CAT_BREAD
|
||||
|
||||
/datum/crafting_recipe/food/banananutbread
|
||||
name = "Banana nut bread"
|
||||
reqs = list(
|
||||
@@ -44,16 +14,6 @@
|
||||
result = /obj/item/reagent_containers/food/snacks/store/bread/banana
|
||||
subcategory = CAT_BREAD
|
||||
|
||||
/datum/crafting_recipe/food/tofubread
|
||||
name = "Tofu bread"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/store/bread/plain = 1,
|
||||
/obj/item/reagent_containers/food/snacks/tofu = 3,
|
||||
/obj/item/reagent_containers/food/snacks/cheesewedge = 3
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/store/bread/tofu
|
||||
subcategory = CAT_BREAD
|
||||
|
||||
/datum/crafting_recipe/food/creamcheesebread
|
||||
name = "Cream cheese bread"
|
||||
reqs = list(
|
||||
@@ -64,6 +24,16 @@
|
||||
result = /obj/item/reagent_containers/food/snacks/store/bread/creamcheese
|
||||
subcategory = CAT_BREAD
|
||||
|
||||
/datum/crafting_recipe/food/meatbread
|
||||
name = "Meat bread"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/store/bread/plain = 1,
|
||||
/obj/item/reagent_containers/food/snacks/meat/cutlet/plain = 3,
|
||||
/obj/item/reagent_containers/food/snacks/cheesewedge = 3
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/store/bread/meat
|
||||
subcategory = CAT_BREAD
|
||||
|
||||
/datum/crafting_recipe/food/mimanabread
|
||||
name = "Mimana bread"
|
||||
reqs = list(
|
||||
@@ -75,6 +45,38 @@
|
||||
result = /obj/item/reagent_containers/food/snacks/store/bread/mimana
|
||||
subcategory = CAT_BREAD
|
||||
|
||||
/datum/crafting_recipe/food/spidermeatbread
|
||||
name = "Spidermeat bread"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/store/bread/plain = 1,
|
||||
/obj/item/reagent_containers/food/snacks/meat/cutlet/spider = 3,
|
||||
/obj/item/reagent_containers/food/snacks/cheesewedge = 3
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/store/bread/spidermeat
|
||||
subcategory = CAT_BREAD
|
||||
|
||||
/datum/crafting_recipe/food/tofubread
|
||||
name = "Tofu bread"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/store/bread/plain = 1,
|
||||
/obj/item/reagent_containers/food/snacks/tofu = 3,
|
||||
/obj/item/reagent_containers/food/snacks/cheesewedge = 3
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/store/bread/tofu
|
||||
subcategory = CAT_BREAD
|
||||
|
||||
/datum/crafting_recipe/food/xenomeatbread
|
||||
name = "Xenomeat bread"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/store/bread/plain = 1,
|
||||
/obj/item/reagent_containers/food/snacks/meat/cutlet/xeno = 3,
|
||||
/obj/item/reagent_containers/food/snacks/cheesewedge = 3
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/store/bread/xenomeat
|
||||
subcategory = CAT_BREAD
|
||||
|
||||
////////////////////////////////////////////////TOAST////////////////////////////////////////////////
|
||||
|
||||
/datum/crafting_recipe/food/butteredtoast
|
||||
name = "Buttered Toast"
|
||||
reqs = list(
|
||||
@@ -84,6 +86,45 @@
|
||||
result = /obj/item/reagent_containers/food/snacks/butteredtoast
|
||||
subcategory = CAT_BREAD
|
||||
|
||||
/datum/crafting_recipe/food/slimetoast
|
||||
name = "Slime toast"
|
||||
reqs = list(
|
||||
/datum/reagent/toxin/slimejelly = 5,
|
||||
/obj/item/reagent_containers/food/snacks/breadslice/plain = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/jelliedtoast/slime
|
||||
subcategory = CAT_BREAD
|
||||
|
||||
/datum/crafting_recipe/food/jelliedtoast
|
||||
name = "Jellied toast"
|
||||
reqs = list(
|
||||
/datum/reagent/consumable/cherryjelly = 5,
|
||||
/obj/item/reagent_containers/food/snacks/breadslice/plain = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/jelliedtoast/cherry
|
||||
subcategory = CAT_BREAD
|
||||
|
||||
/datum/crafting_recipe/food/peanutbuttertoast
|
||||
name = "Peanut butter toast"
|
||||
reqs = list(
|
||||
/datum/reagent/consumable/peanut_butter = 5,
|
||||
/obj/item/reagent_containers/food/snacks/breadslice/plain = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/peanut_buttertoast
|
||||
subcategory = CAT_BREAD
|
||||
|
||||
////////////////////////////////////////////////MISC////////////////////////////////////////////////
|
||||
|
||||
/datum/crafting_recipe/food/baguette
|
||||
name = "Baguette"
|
||||
time = 40
|
||||
reqs = list(/datum/reagent/consumable/sodiumchloride = 1,
|
||||
/datum/reagent/consumable/blackpepper = 1,
|
||||
/obj/item/reagent_containers/food/snacks/pastrybase = 2
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/baguette
|
||||
subcategory = CAT_BREAD
|
||||
|
||||
/datum/crafting_recipe/food/butterbiscuit
|
||||
name = "Butter Biscuit"
|
||||
reqs = list(
|
||||
@@ -100,4 +141,13 @@
|
||||
/obj/item/reagent_containers/food/snacks/butter = 3,
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/butterdog
|
||||
subcategory = CAT_BREAD
|
||||
|
||||
/datum/crafting_recipe/food/twobread
|
||||
name = "Two bread"
|
||||
reqs = list(
|
||||
/datum/reagent/consumable/ethanol/wine = 5,
|
||||
/obj/item/reagent_containers/food/snacks/breadslice/plain = 2
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/twobread
|
||||
subcategory = CAT_BREAD
|
||||
@@ -1,8 +1,74 @@
|
||||
|
||||
// see code/module/crafting/table.dm
|
||||
|
||||
////////////////////////////////////////////////BURGERS////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////STANDARD BURGS////////////////////////////////////////////////
|
||||
|
||||
/datum/crafting_recipe/food/burger
|
||||
name = "Burger"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/meat/steak/plain = 1,
|
||||
/obj/item/reagent_containers/food/snacks/bun = 1
|
||||
)
|
||||
|
||||
result = /obj/item/reagent_containers/food/snacks/burger/plain
|
||||
subcategory = CAT_BURGER
|
||||
|
||||
/datum/crafting_recipe/food/baconburger
|
||||
name = "Bacon Burger"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/meat/bacon = 3,
|
||||
/obj/item/reagent_containers/food/snacks/cheesewedge = 1,
|
||||
/obj/item/reagent_containers/food/snacks/bun = 1
|
||||
)
|
||||
|
||||
result = /obj/item/reagent_containers/food/snacks/burger/baconburger
|
||||
subcategory = CAT_BURGER
|
||||
|
||||
/datum/crafting_recipe/food/bigbiteburger
|
||||
name = "Big bite burger"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/meat/steak/plain = 3,
|
||||
/obj/item/reagent_containers/food/snacks/cheesewedge = 2,
|
||||
/obj/item/reagent_containers/food/snacks/bun = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/burger/bigbite
|
||||
subcategory = CAT_BURGER
|
||||
|
||||
/datum/crafting_recipe/food/superbiteburger
|
||||
name = "Super bite burger"
|
||||
reqs = list(
|
||||
/datum/reagent/consumable/sodiumchloride = 5,
|
||||
/datum/reagent/consumable/blackpepper = 5,
|
||||
/obj/item/reagent_containers/food/snacks/meat/steak/plain = 5,
|
||||
/obj/item/reagent_containers/food/snacks/grown/tomato = 4,
|
||||
/obj/item/reagent_containers/food/snacks/cheesewedge = 3,
|
||||
/obj/item/reagent_containers/food/snacks/boiledegg = 1,
|
||||
/obj/item/reagent_containers/food/snacks/meat/bacon = 1,
|
||||
/obj/item/reagent_containers/food/snacks/bun = 1
|
||||
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/burger/superbite
|
||||
subcategory = CAT_BURGER
|
||||
|
||||
/datum/crafting_recipe/food/cheeseburger
|
||||
name = "Cheese Burger"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/meat/steak/plain = 1,
|
||||
/obj/item/reagent_containers/food/snacks/cheesewedge = 1,
|
||||
/obj/item/reagent_containers/food/snacks/bun = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/burger/cheese
|
||||
subcategory = CAT_BURGER
|
||||
|
||||
/datum/crafting_recipe/food/corgiburger
|
||||
name = "Corgi burger"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/meat/slab/corgi = 1,
|
||||
/obj/item/reagent_containers/food/snacks/bun = 1
|
||||
)
|
||||
|
||||
result = /obj/item/reagent_containers/food/snacks/burger/corgi
|
||||
subcategory = CAT_BURGER
|
||||
|
||||
/datum/crafting_recipe/food/humanburger
|
||||
name = "Human burger"
|
||||
@@ -16,26 +82,37 @@
|
||||
result = /obj/item/reagent_containers/food/snacks/burger/human
|
||||
subcategory = CAT_BURGER
|
||||
|
||||
/datum/crafting_recipe/food/burger
|
||||
name = "Burger"
|
||||
/datum/crafting_recipe/food/ribburger
|
||||
name = "McRib"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/meat/steak/plain = 1,
|
||||
/obj/item/reagent_containers/food/snacks/bbqribs = 1, //The sauce is already included in the ribs
|
||||
/obj/item/reagent_containers/food/snacks/onion_slice = 1, //feel free to remove if too burdensome.
|
||||
/obj/item/reagent_containers/food/snacks/bun = 1
|
||||
)
|
||||
|
||||
result = /obj/item/reagent_containers/food/snacks/burger/plain
|
||||
result = /obj/item/reagent_containers/food/snacks/burger/rib
|
||||
subcategory = CAT_BURGER
|
||||
|
||||
/datum/crafting_recipe/food/corgiburger
|
||||
name = "Corgi burger"
|
||||
/datum/crafting_recipe/food/mcguffin
|
||||
name = "McGuffin"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/meat/slab/corgi = 1,
|
||||
/obj/item/reagent_containers/food/snacks/friedegg = 1,
|
||||
/obj/item/reagent_containers/food/snacks/meat/bacon = 2,
|
||||
/obj/item/reagent_containers/food/snacks/bun = 1
|
||||
)
|
||||
|
||||
result = /obj/item/reagent_containers/food/snacks/burger/corgi
|
||||
result = /obj/item/reagent_containers/food/snacks/burger/mcguffin
|
||||
subcategory = CAT_BURGER
|
||||
|
||||
/datum/crafting_recipe/food/tofuburger
|
||||
name = "Tofu burger"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/tofu = 1,
|
||||
/obj/item/reagent_containers/food/snacks/bun = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/burger/tofu
|
||||
subcategory = CAT_BURGER
|
||||
|
||||
///////////////EXOTIC//////////////////
|
||||
|
||||
/datum/crafting_recipe/food/appendixburger
|
||||
name = "Appendix burger"
|
||||
reqs = list(
|
||||
@@ -54,15 +131,6 @@
|
||||
result = /obj/item/reagent_containers/food/snacks/burger/brain
|
||||
subcategory = CAT_BURGER
|
||||
|
||||
/datum/crafting_recipe/food/xenoburger
|
||||
name = "Xeno burger"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/meat/steak/xeno = 1,
|
||||
/obj/item/reagent_containers/food/snacks/bun = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/burger/xeno
|
||||
subcategory = CAT_BURGER
|
||||
|
||||
/datum/crafting_recipe/food/bearger
|
||||
name = "Bearger"
|
||||
reqs = list(
|
||||
@@ -72,6 +140,16 @@
|
||||
result = /obj/item/reagent_containers/food/snacks/burger/bearger
|
||||
subcategory = CAT_BURGER
|
||||
|
||||
/datum/crafting_recipe/food/chickenburger
|
||||
name = "Chicken Sandwich"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/meat/steak/chicken = 1,
|
||||
/datum/reagent/consumable/mayonnaise = 5,
|
||||
/obj/item/reagent_containers/food/snacks/bun = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/burger/chicken
|
||||
subcategory = CAT_BURGER
|
||||
|
||||
/datum/crafting_recipe/food/fishburger
|
||||
name = "Fish burger"
|
||||
reqs = list(
|
||||
@@ -82,25 +160,73 @@
|
||||
result = /obj/item/reagent_containers/food/snacks/burger/fish
|
||||
subcategory = CAT_BURGER
|
||||
|
||||
/datum/crafting_recipe/food/tofuburger
|
||||
name = "Tofu burger"
|
||||
/datum/crafting_recipe/food/fivealarmburger
|
||||
name = "Five alarm burger"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/tofu = 1,
|
||||
/obj/item/reagent_containers/food/snacks/bun = 1
|
||||
/obj/item/reagent_containers/food/snacks/grown/ghost_chili = 2,
|
||||
/obj/item/reagent_containers/food/snacks/meat/steak/plain = 1,
|
||||
/obj/item/reagent_containers/food/snacks/bun = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/burger/tofu
|
||||
result = /obj/item/reagent_containers/food/snacks/burger/fivealarm
|
||||
subcategory = CAT_BURGER
|
||||
|
||||
/datum/crafting_recipe/food/ghostburger
|
||||
name = "Ghost burger"
|
||||
/datum/crafting_recipe/food/slimeburger
|
||||
name = "Jelly burger"
|
||||
reqs = list(
|
||||
/obj/item/ectoplasm = 1,
|
||||
/datum/reagent/consumable/sodiumchloride = 2,
|
||||
/datum/reagent/toxin/slimejelly = 5,
|
||||
/obj/item/reagent_containers/food/snacks/bun = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/burger/ghost
|
||||
result = /obj/item/reagent_containers/food/snacks/burger/jelly/slime
|
||||
subcategory = CAT_BURGER
|
||||
|
||||
/datum/crafting_recipe/food/jellyburger
|
||||
name = "Jelly burger"
|
||||
reqs = list(
|
||||
/datum/reagent/consumable/cherryjelly = 5,
|
||||
/obj/item/reagent_containers/food/snacks/bun = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/burger/jelly/cherry
|
||||
subcategory = CAT_BURGER
|
||||
|
||||
/datum/crafting_recipe/food/baseballburger
|
||||
name = "Home run baseball burger"
|
||||
reqs = list(
|
||||
/obj/item/melee/baseball_bat = 1,
|
||||
/obj/item/reagent_containers/food/snacks/bun = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/burger/baseball
|
||||
subcategory = CAT_BURGER
|
||||
|
||||
/datum/crafting_recipe/food/ratburger
|
||||
name = "Rat burger"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/deadmouse = 1,
|
||||
/obj/item/reagent_containers/food/snacks/bun = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/burger/rat
|
||||
subcategory = CAT_BURGER
|
||||
|
||||
/datum/crafting_recipe/food/soylentburger
|
||||
name = "Soylent Burger"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/soylentgreen = 1, //two full meats worth.
|
||||
/obj/item/reagent_containers/food/snacks/cheesewedge = 2,
|
||||
/obj/item/reagent_containers/food/snacks/bun = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/burger/soylent
|
||||
subcategory = CAT_BURGER
|
||||
|
||||
/datum/crafting_recipe/food/xenoburger
|
||||
name = "Xeno burger"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/meat/steak/xeno = 1,
|
||||
/obj/item/reagent_containers/food/snacks/bun = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/burger/xeno
|
||||
subcategory = CAT_BURGER
|
||||
|
||||
////////////MYSTICAL////////////////
|
||||
|
||||
/datum/crafting_recipe/food/clownburger
|
||||
name = "Clown burger"
|
||||
reqs = list(
|
||||
@@ -119,6 +245,35 @@
|
||||
result = /obj/item/reagent_containers/food/snacks/burger/mime
|
||||
subcategory = CAT_BURGER
|
||||
|
||||
/datum/crafting_recipe/food/ghostburger
|
||||
name = "Ghost burger"
|
||||
reqs = list(
|
||||
/obj/item/ectoplasm = 1,
|
||||
/datum/reagent/consumable/sodiumchloride = 2,
|
||||
/obj/item/reagent_containers/food/snacks/bun = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/burger/ghost
|
||||
subcategory = CAT_BURGER
|
||||
|
||||
/datum/crafting_recipe/food/spellburger
|
||||
name = "Spell burger"
|
||||
reqs = list(
|
||||
/obj/item/clothing/head/wizard/fake = 1,
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/burger/spell
|
||||
subcategory = CAT_BURGER
|
||||
|
||||
/datum/crafting_recipe/food/spellburger2
|
||||
name = "Spell burger"
|
||||
reqs = list(
|
||||
/obj/item/clothing/head/wizard = 1,
|
||||
/obj/item/reagent_containers/food/snacks/bun = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/burger/spell
|
||||
subcategory = CAT_BURGER
|
||||
|
||||
////////////COLORED BURGERS//////////////
|
||||
|
||||
/datum/crafting_recipe/food/redburger
|
||||
name = "Red burger"
|
||||
reqs = list(
|
||||
@@ -197,154 +352,4 @@
|
||||
/obj/item/reagent_containers/food/snacks/bun = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/burger/white
|
||||
subcategory = CAT_BURGER
|
||||
|
||||
/datum/crafting_recipe/food/spellburger
|
||||
name = "Spell burger"
|
||||
reqs = list(
|
||||
/obj/item/clothing/head/wizard/fake = 1,
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/burger/spell
|
||||
subcategory = CAT_BURGER
|
||||
|
||||
/datum/crafting_recipe/food/spellburger2
|
||||
name = "Spell burger"
|
||||
reqs = list(
|
||||
/obj/item/clothing/head/wizard = 1,
|
||||
/obj/item/reagent_containers/food/snacks/bun = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/burger/spell
|
||||
subcategory = CAT_BURGER
|
||||
|
||||
/datum/crafting_recipe/food/bigbiteburger
|
||||
name = "Big bite burger"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/meat/steak/plain = 3,
|
||||
/obj/item/reagent_containers/food/snacks/cheesewedge = 2,
|
||||
/obj/item/reagent_containers/food/snacks/bun = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/burger/bigbite
|
||||
subcategory = CAT_BURGER
|
||||
|
||||
/datum/crafting_recipe/food/superbiteburger
|
||||
name = "Super bite burger"
|
||||
reqs = list(
|
||||
/datum/reagent/consumable/sodiumchloride = 5,
|
||||
/datum/reagent/consumable/blackpepper = 5,
|
||||
/obj/item/reagent_containers/food/snacks/meat/steak/plain = 5,
|
||||
/obj/item/reagent_containers/food/snacks/grown/tomato = 4,
|
||||
/obj/item/reagent_containers/food/snacks/cheesewedge = 3,
|
||||
/obj/item/reagent_containers/food/snacks/boiledegg = 1,
|
||||
/obj/item/reagent_containers/food/snacks/meat/bacon = 1,
|
||||
/obj/item/reagent_containers/food/snacks/bun = 1
|
||||
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/burger/superbite
|
||||
subcategory = CAT_BURGER
|
||||
|
||||
/datum/crafting_recipe/food/slimeburger
|
||||
name = "Jelly burger"
|
||||
reqs = list(
|
||||
/datum/reagent/toxin/slimejelly = 5,
|
||||
/obj/item/reagent_containers/food/snacks/bun = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/burger/jelly/slime
|
||||
subcategory = CAT_BURGER
|
||||
|
||||
/datum/crafting_recipe/food/jellyburger
|
||||
name = "Jelly burger"
|
||||
reqs = list(
|
||||
/datum/reagent/consumable/cherryjelly = 5,
|
||||
/obj/item/reagent_containers/food/snacks/bun = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/burger/jelly/cherry
|
||||
subcategory = CAT_BURGER
|
||||
|
||||
/datum/crafting_recipe/food/fivealarmburger
|
||||
name = "Five alarm burger"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/grown/ghost_chili = 2,
|
||||
/obj/item/reagent_containers/food/snacks/meat/steak/plain = 1,
|
||||
/obj/item/reagent_containers/food/snacks/bun = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/burger/fivealarm
|
||||
subcategory = CAT_BURGER
|
||||
|
||||
/datum/crafting_recipe/food/ratburger
|
||||
name = "Rat burger"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/deadmouse = 1,
|
||||
/obj/item/reagent_containers/food/snacks/bun = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/burger/rat
|
||||
subcategory = CAT_BURGER
|
||||
|
||||
/datum/crafting_recipe/food/baseballburger
|
||||
name = "Home run baseball burger"
|
||||
reqs = list(
|
||||
/obj/item/melee/baseball_bat = 1,
|
||||
/obj/item/reagent_containers/food/snacks/bun = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/burger/baseball
|
||||
subcategory = CAT_BURGER
|
||||
|
||||
/datum/crafting_recipe/food/baconburger
|
||||
name = "Bacon Burger"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/meat/bacon = 3,
|
||||
/obj/item/reagent_containers/food/snacks/cheesewedge = 1,
|
||||
/obj/item/reagent_containers/food/snacks/bun = 1
|
||||
)
|
||||
|
||||
result = /obj/item/reagent_containers/food/snacks/burger/baconburger
|
||||
subcategory = CAT_BURGER
|
||||
|
||||
/datum/crafting_recipe/food/cheeseburger
|
||||
name = "Cheese Burger"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/meat/steak/plain = 1,
|
||||
/obj/item/reagent_containers/food/snacks/cheesewedge = 1,
|
||||
/obj/item/reagent_containers/food/snacks/bun = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/burger/cheese
|
||||
subcategory = CAT_BURGER
|
||||
|
||||
/datum/crafting_recipe/food/soylentburger
|
||||
name = "Soylent Burger"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/soylentgreen = 1, //two full meats worth.
|
||||
/obj/item/reagent_containers/food/snacks/cheesewedge = 2,
|
||||
/obj/item/reagent_containers/food/snacks/bun = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/burger/soylent
|
||||
subcategory = CAT_BURGER
|
||||
|
||||
/datum/crafting_recipe/food/ribburger
|
||||
name = "McRib"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/bbqribs = 1, //The sauce is already included in the ribs
|
||||
/obj/item/reagent_containers/food/snacks/onion_slice = 1, //feel free to remove if too burdensome.
|
||||
/obj/item/reagent_containers/food/snacks/bun = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/burger/rib
|
||||
subcategory = CAT_BURGER
|
||||
|
||||
/datum/crafting_recipe/food/mcguffin
|
||||
name = "McGuffin"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/friedegg = 1,
|
||||
/obj/item/reagent_containers/food/snacks/meat/bacon = 2,
|
||||
/obj/item/reagent_containers/food/snacks/bun = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/burger/mcguffin
|
||||
subcategory = CAT_BURGER
|
||||
|
||||
/datum/crafting_recipe/food/chickenburger
|
||||
name = "Chicken Sandwich"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/meat/steak/chicken = 1,
|
||||
/datum/reagent/consumable/mayonnaise = 5,
|
||||
/obj/item/reagent_containers/food/snacks/bun = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/burger/chicken
|
||||
subcategory = CAT_BURGER
|
||||
@@ -1,7 +1,93 @@
|
||||
|
||||
// see code/module/crafting/table.dm
|
||||
|
||||
////////////////////////////////////////////////CAKE////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////FRUIT CAKE////////////////////////////////////////////////
|
||||
|
||||
/datum/crafting_recipe/food/applecake
|
||||
name = "Apple cake"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/store/cake/plain = 1,
|
||||
/obj/item/reagent_containers/food/snacks/grown/apple = 2
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/store/cake/apple
|
||||
subcategory = CAT_CAKE
|
||||
|
||||
/datum/crafting_recipe/food/bscccake
|
||||
name = "Blackberry and strawberry chocolate cake"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/store/cake/plain = 1,
|
||||
/obj/item/reagent_containers/food/snacks/chocolatebar = 2,
|
||||
/obj/item/reagent_containers/food/snacks/grown/berries = 5
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/store/cake/bscc
|
||||
subcategory = CAT_CAKE
|
||||
|
||||
/datum/crafting_recipe/food/bscvcake
|
||||
name = "Blackberry and strawberry vanilla cake"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/store/cake/plain = 1,
|
||||
/obj/item/reagent_containers/food/snacks/grown/berries = 5
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/store/cake/bsvc
|
||||
subcategory = CAT_CAKE
|
||||
|
||||
/datum/crafting_recipe/food/lemoncake
|
||||
name = "Lemon cake"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/store/cake/plain = 1,
|
||||
/obj/item/reagent_containers/food/snacks/grown/citrus/lemon = 2
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/store/cake/lemon
|
||||
subcategory = CAT_CAKE
|
||||
|
||||
/datum/crafting_recipe/food/limecake
|
||||
name = "Lime cake"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/store/cake/plain = 1,
|
||||
/obj/item/reagent_containers/food/snacks/grown/citrus/lime = 2
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/store/cake/lime
|
||||
subcategory = CAT_CAKE
|
||||
|
||||
/datum/crafting_recipe/food/orangecake
|
||||
name = "Orange cake"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/store/cake/plain = 1,
|
||||
/obj/item/reagent_containers/food/snacks/grown/citrus/orange = 2
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/store/cake/orange
|
||||
subcategory = CAT_CAKE
|
||||
|
||||
/datum/crafting_recipe/food/peachcake
|
||||
name = "Peach cake"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/store/cake/plain = 1,
|
||||
/obj/item/reagent_containers/food/snacks/grown/peach = 5
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/store/cake/peach_cake
|
||||
subcategory = CAT_CAKE
|
||||
|
||||
///////////////////////////////////FANCY////////////////////////////////////////////
|
||||
|
||||
/datum/crafting_recipe/food/birthdaycake
|
||||
name = "Birthday cake"
|
||||
reqs = list(
|
||||
/datum/reagent/consumable/sugar = 5,
|
||||
/datum/reagent/consumable/caramel =2,
|
||||
/obj/item/candle = 1,
|
||||
/obj/item/reagent_containers/food/snacks/store/cake/plain = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/store/cake/birthday
|
||||
subcategory = CAT_CAKE
|
||||
|
||||
/datum/crafting_recipe/food/briochecake
|
||||
name = "Brioche cake"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/store/cake/plain = 1,
|
||||
/datum/reagent/consumable/sugar = 2
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/store/cake/brioche
|
||||
subcategory = CAT_CAKE
|
||||
|
||||
/datum/crafting_recipe/food/carrotcake
|
||||
name = "Carrot cake"
|
||||
@@ -21,42 +107,6 @@
|
||||
result = /obj/item/reagent_containers/food/snacks/store/cake/cheese
|
||||
subcategory = CAT_CAKE
|
||||
|
||||
/datum/crafting_recipe/food/applecake
|
||||
name = "Apple cake"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/store/cake/plain = 1,
|
||||
/obj/item/reagent_containers/food/snacks/grown/apple = 2
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/store/cake/apple
|
||||
subcategory = CAT_CAKE
|
||||
|
||||
/datum/crafting_recipe/food/orangecake
|
||||
name = "Orange cake"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/store/cake/plain = 1,
|
||||
/obj/item/reagent_containers/food/snacks/grown/citrus/orange = 2
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/store/cake/orange
|
||||
subcategory = CAT_CAKE
|
||||
|
||||
/datum/crafting_recipe/food/limecake
|
||||
name = "Lime cake"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/store/cake/plain = 1,
|
||||
/obj/item/reagent_containers/food/snacks/grown/citrus/lime = 2
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/store/cake/lime
|
||||
subcategory = CAT_CAKE
|
||||
|
||||
/datum/crafting_recipe/food/lemoncake
|
||||
name = "Lemon cake"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/store/cake/plain = 1,
|
||||
/obj/item/reagent_containers/food/snacks/grown/citrus/lemon = 2
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/store/cake/lemon
|
||||
subcategory = CAT_CAKE
|
||||
|
||||
/datum/crafting_recipe/food/chocolatecake
|
||||
name = "Chocolate cake"
|
||||
reqs = list(
|
||||
@@ -66,35 +116,6 @@
|
||||
result = /obj/item/reagent_containers/food/snacks/store/cake/chocolate
|
||||
subcategory = CAT_CAKE
|
||||
|
||||
/datum/crafting_recipe/food/birthdaycake
|
||||
name = "Birthday cake"
|
||||
reqs = list(
|
||||
/datum/reagent/consumable/sugar = 5,
|
||||
/datum/reagent/consumable/caramel =2,
|
||||
/obj/item/candle = 1,
|
||||
/obj/item/reagent_containers/food/snacks/store/cake/plain = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/store/cake/birthday
|
||||
subcategory = CAT_CAKE
|
||||
|
||||
/datum/crafting_recipe/food/braincake
|
||||
name = "Brain cake"
|
||||
reqs = list(
|
||||
/obj/item/organ/brain = 1,
|
||||
/obj/item/reagent_containers/food/snacks/store/cake/plain = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/store/cake/brain
|
||||
subcategory = CAT_CAKE
|
||||
|
||||
/datum/crafting_recipe/food/slimecake
|
||||
name = "Slime cake"
|
||||
reqs = list(
|
||||
/obj/item/slime_extract = 1,
|
||||
/obj/item/reagent_containers/food/snacks/store/cake/plain = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/store/cake/slimecake
|
||||
subcategory = CAT_CAKE
|
||||
|
||||
/datum/crafting_recipe/food/pumpkinspicecake
|
||||
name = "Pumpkin spice cake"
|
||||
reqs = list(
|
||||
@@ -104,6 +125,26 @@
|
||||
result = /obj/item/reagent_containers/food/snacks/store/cake/pumpkinspice
|
||||
subcategory = CAT_CAKE
|
||||
|
||||
/datum/crafting_recipe/food/poundcake
|
||||
name = "Pound cake"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/store/cake/plain = 4
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/store/cake/pound_cake
|
||||
subcategory = CAT_CAKE
|
||||
|
||||
/datum/crafting_recipe/food/vanillacake
|
||||
name = "Vanilla cake"
|
||||
always_availible = FALSE
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/store/cake/plain = 1,
|
||||
/obj/item/reagent_containers/food/snacks/grown/vanillapod = 2
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/store/cake/vanilla_cake
|
||||
subcategory = CAT_CAKE
|
||||
|
||||
/////////////SPECIAL////////////
|
||||
|
||||
/datum/crafting_recipe/food/holycake
|
||||
name = "Angel food cake"
|
||||
reqs = list(
|
||||
@@ -113,12 +154,24 @@
|
||||
result = /obj/item/reagent_containers/food/snacks/store/cake/holy_cake
|
||||
subcategory = CAT_CAKE
|
||||
|
||||
/datum/crafting_recipe/food/poundcake
|
||||
name = "Pound cake"
|
||||
/datum/crafting_recipe/food/braincake
|
||||
name = "Brain cake"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/store/cake/plain = 4
|
||||
/obj/item/organ/brain = 1,
|
||||
/obj/item/reagent_containers/food/snacks/store/cake/plain = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/store/cake/pound_cake
|
||||
result = /obj/item/reagent_containers/food/snacks/store/cake/brain
|
||||
subcategory = CAT_CAKE
|
||||
|
||||
/datum/crafting_recipe/food/clowncake
|
||||
name = "Clown cake"
|
||||
always_availible = FALSE
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/store/cake/plain = 1,
|
||||
/obj/item/reagent_containers/food/snacks/sundae = 2,
|
||||
/obj/item/reagent_containers/food/snacks/grown/banana = 5
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/store/cake/clown_cake
|
||||
subcategory = CAT_CAKE
|
||||
|
||||
/datum/crafting_recipe/food/hardwarecake
|
||||
@@ -131,53 +184,13 @@
|
||||
result = /obj/item/reagent_containers/food/snacks/store/cake/hardware_cake
|
||||
subcategory = CAT_CAKE
|
||||
|
||||
/datum/crafting_recipe/food/bscccake
|
||||
name = "blackberry and strawberry chocolate cake"
|
||||
/datum/crafting_recipe/food/slimecake
|
||||
name = "Slime cake"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/store/cake/plain = 1,
|
||||
/obj/item/reagent_containers/food/snacks/chocolatebar = 2,
|
||||
/obj/item/reagent_containers/food/snacks/grown/berries = 5
|
||||
/obj/item/slime_extract = 1,
|
||||
/obj/item/reagent_containers/food/snacks/store/cake/plain = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/store/cake/bscc
|
||||
subcategory = CAT_CAKE
|
||||
|
||||
/datum/crafting_recipe/food/bscvcake
|
||||
name = "blackberry and strawberry vanilla cake"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/store/cake/plain = 1,
|
||||
/obj/item/reagent_containers/food/snacks/grown/berries = 5
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/store/cake/bsvc
|
||||
subcategory = CAT_CAKE
|
||||
|
||||
/datum/crafting_recipe/food/clowncake
|
||||
name = "clown cake"
|
||||
always_availible = FALSE
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/store/cake/plain = 1,
|
||||
/obj/item/reagent_containers/food/snacks/sundae = 2,
|
||||
/obj/item/reagent_containers/food/snacks/grown/banana = 5
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/store/cake/clown_cake
|
||||
subcategory = CAT_CAKE
|
||||
|
||||
/datum/crafting_recipe/food/vanillacake
|
||||
name = "vanilla cake"
|
||||
always_availible = FALSE
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/store/cake/plain = 1,
|
||||
/obj/item/reagent_containers/food/snacks/grown/vanillapod = 2
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/store/cake/vanilla_cake
|
||||
subcategory = CAT_CAKE
|
||||
|
||||
/datum/crafting_recipe/food/peachcake
|
||||
name = "Peach cake"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/store/cake/plain = 1,
|
||||
/obj/item/reagent_containers/food/snacks/grown/peach = 5
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/store/cake/peach_cake
|
||||
result = /obj/item/reagent_containers/food/snacks/store/cake/slimecake
|
||||
subcategory = CAT_CAKE
|
||||
|
||||
/datum/crafting_recipe/food/trumpetcake
|
||||
|
||||
@@ -0,0 +1,255 @@
|
||||
// see code/module/crafting/table.dm
|
||||
|
||||
////////////////////////////////////////////////DONUTS////////////////////////////////////////////////
|
||||
|
||||
/datum/crafting_recipe/food/donut
|
||||
time = 15
|
||||
name = "Donut"
|
||||
reqs = list(
|
||||
/datum/reagent/consumable/sugar = 1,
|
||||
/obj/item/reagent_containers/food/snacks/pastrybase = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/donut/plain
|
||||
subcategory = CAT_DONUT
|
||||
|
||||
/datum/crafting_recipe/food/donut/chaos
|
||||
name = "Chaos donut"
|
||||
reqs = list(
|
||||
/datum/reagent/consumable/frostoil = 5,
|
||||
/datum/reagent/consumable/capsaicin = 5,
|
||||
/obj/item/reagent_containers/food/snacks/pastrybase = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/donut/chaos
|
||||
|
||||
datum/crafting_recipe/food/donut/meat
|
||||
time = 15
|
||||
name = "Meat donut"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/meat/slab = 1,
|
||||
/obj/item/reagent_containers/food/snacks/pastrybase = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/donut/meat
|
||||
|
||||
/datum/crafting_recipe/food/donut/jelly
|
||||
name = "Jelly donut"
|
||||
reqs = list(
|
||||
/datum/reagent/consumable/berryjuice = 5,
|
||||
/obj/item/reagent_containers/food/snacks/pastrybase = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/donut/jelly/plain
|
||||
|
||||
/datum/crafting_recipe/food/donut/slimejelly
|
||||
name = "Slime jelly donut"
|
||||
reqs = list(
|
||||
/datum/reagent/toxin/slimejelly = 5,
|
||||
/obj/item/reagent_containers/food/snacks/pastrybase = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/plain
|
||||
|
||||
/datum/crafting_recipe/food/donut/glaze
|
||||
time = 15
|
||||
name = "glaze donut"
|
||||
reqs = list(
|
||||
/datum/reagent/consumable/sugar = 10,
|
||||
/obj/item/reagent_containers/food/snacks/pastrybase = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/donut/glaze
|
||||
subcategory = CAT_DONUT
|
||||
|
||||
/datum/crafting_recipe/food/donut/berry
|
||||
name = "Berry Donut"
|
||||
reqs = list(
|
||||
/datum/reagent/consumable/berryjuice = 3,
|
||||
/obj/item/reagent_containers/food/snacks/donut/plain = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/donut/berry
|
||||
|
||||
/datum/crafting_recipe/food/donut/trumpet
|
||||
name = "Spaceman's Donut"
|
||||
reqs = list(
|
||||
/datum/reagent/medicine/polypyr = 3,
|
||||
/obj/item/reagent_containers/food/snacks/donut/plain = 1
|
||||
)
|
||||
|
||||
result = /obj/item/reagent_containers/food/snacks/donut/trumpet
|
||||
|
||||
/datum/crafting_recipe/food/donut/apple
|
||||
name = "Apple Donut"
|
||||
reqs = list(
|
||||
/datum/reagent/consumable/applejuice = 3,
|
||||
/obj/item/reagent_containers/food/snacks/donut/plain = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/donut/apple
|
||||
|
||||
/datum/crafting_recipe/food/donut/caramel
|
||||
name = "Caramel Donut"
|
||||
reqs = list(
|
||||
/datum/reagent/consumable/caramel = 3,
|
||||
/obj/item/reagent_containers/food/snacks/donut/plain = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/donut/caramel
|
||||
|
||||
/datum/crafting_recipe/food/donut/choco
|
||||
name = "Chocolate Donut"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/chocolatebar = 1,
|
||||
/obj/item/reagent_containers/food/snacks/donut/plain = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/donut/choco
|
||||
|
||||
/datum/crafting_recipe/food/donut/blumpkin
|
||||
name = "Blumpkin Donut"
|
||||
reqs = list(
|
||||
/datum/reagent/consumable/blumpkinjuice = 3,
|
||||
/obj/item/reagent_containers/food/snacks/donut/plain = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/donut/blumpkin
|
||||
|
||||
/datum/crafting_recipe/food/donut/bungo
|
||||
name = "Bungo Donut"
|
||||
reqs = list(
|
||||
/datum/reagent/consumable/bungojuice = 3,
|
||||
/obj/item/reagent_containers/food/snacks/donut/plain = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/donut/bungo
|
||||
|
||||
/datum/crafting_recipe/food/donut/matcha
|
||||
name = "Matcha Donut"
|
||||
reqs = list(
|
||||
/datum/reagent/toxin/teapowder = 3,
|
||||
/obj/item/reagent_containers/food/snacks/donut/plain = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/donut/matcha
|
||||
|
||||
////////////////////////////////////////////////////JELLY DONUTS///////////////////////////////////////////////////////
|
||||
|
||||
/datum/crafting_recipe/food/donut/jelly/apple
|
||||
name = "Apple Jelly Donut"
|
||||
reqs = list(
|
||||
/datum/reagent/consumable/applejuice = 3,
|
||||
/obj/item/reagent_containers/food/snacks/donut/jelly/plain = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/donut/jelly/apple
|
||||
|
||||
/datum/crafting_recipe/food/donut/jelly/berry
|
||||
name = "Berry Jelly Donut"
|
||||
reqs = list(
|
||||
/datum/reagent/consumable/berryjuice = 3,
|
||||
/obj/item/reagent_containers/food/snacks/donut/jelly/plain = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/donut/jelly/berry
|
||||
|
||||
/datum/crafting_recipe/food/donut/jelly/blumpkin
|
||||
name = "Blumpkin Jelly Donut"
|
||||
reqs = list(
|
||||
/datum/reagent/consumable/blumpkinjuice = 3,
|
||||
/obj/item/reagent_containers/food/snacks/donut/jelly/plain = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/donut/jelly/blumpkin
|
||||
|
||||
/datum/crafting_recipe/food/donut/jelly/bungo
|
||||
name = "Bungo Jelly Donut"
|
||||
reqs = list(
|
||||
/datum/reagent/consumable/bungojuice = 3,
|
||||
/obj/item/reagent_containers/food/snacks/donut/jelly/plain = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/donut/jelly/bungo
|
||||
|
||||
/datum/crafting_recipe/food/donut/jelly/caramel
|
||||
name = "Caramel Jelly Donut"
|
||||
reqs = list(
|
||||
/datum/reagent/consumable/caramel = 3,
|
||||
/obj/item/reagent_containers/food/snacks/donut/jelly/plain = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/donut/jelly/caramel
|
||||
|
||||
/datum/crafting_recipe/food/donut/jelly/choco
|
||||
name = "Chocolate Jelly Donut"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/chocolatebar = 1,
|
||||
/obj/item/reagent_containers/food/snacks/donut/jelly/plain = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/donut/jelly/choco
|
||||
|
||||
/datum/crafting_recipe/food/donut/jelly/matcha
|
||||
name = "Matcha Jelly Donut"
|
||||
reqs = list(
|
||||
/datum/reagent/toxin/teapowder = 3,
|
||||
/obj/item/reagent_containers/food/snacks/donut/jelly/plain = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/donut/jelly/matcha
|
||||
|
||||
/datum/crafting_recipe/food/donut/jelly/trumpet
|
||||
name = "Spaceman's Jelly Donut"
|
||||
reqs = list(
|
||||
/datum/reagent/medicine/polypyr = 3,
|
||||
/obj/item/reagent_containers/food/snacks/donut/jelly/plain = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/donut/jelly/trumpet
|
||||
|
||||
////////////////////////////////////////////////////SLIME DONUTS///////////////////////////////////////////////////////
|
||||
|
||||
/datum/crafting_recipe/food/donut/slimejelly/apple
|
||||
name = "Apple Slime Donut"
|
||||
reqs = list(
|
||||
/datum/reagent/consumable/applejuice = 3,
|
||||
/obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/plain = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/apple
|
||||
|
||||
/datum/crafting_recipe/food/donut/slimejelly/berry
|
||||
name = "Berry Slime Donut"
|
||||
reqs = list(
|
||||
/datum/reagent/consumable/berryjuice = 3,
|
||||
/obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/plain = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/berry
|
||||
|
||||
/datum/crafting_recipe/food/donut/slimejelly/blumpkin
|
||||
name = "Blumpkin Slime Donut"
|
||||
reqs = list(
|
||||
/datum/reagent/consumable/blumpkinjuice = 3,
|
||||
/obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/plain = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/blumpkin
|
||||
|
||||
/datum/crafting_recipe/food/donut/slimejelly/bungo
|
||||
name = "Bungo Slime Donut"
|
||||
reqs = list(
|
||||
/datum/reagent/consumable/bungojuice = 3,
|
||||
/obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/plain = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/bungo
|
||||
|
||||
/datum/crafting_recipe/food/donut/slimejelly/caramel
|
||||
name = "Caramel Slime Donut"
|
||||
reqs = list(
|
||||
/datum/reagent/consumable/caramel = 3,
|
||||
/obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/plain = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/caramel
|
||||
|
||||
/datum/crafting_recipe/food/donut/slimejelly/choco
|
||||
name = "Chocolate Slime Donut"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/chocolatebar = 1,
|
||||
/obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/plain = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/choco
|
||||
|
||||
/datum/crafting_recipe/food/donut/slimejelly/trumpet
|
||||
name = "Spaceman's Slime Donut"
|
||||
reqs = list(
|
||||
/datum/reagent/medicine/polypyr = 3,
|
||||
/obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/plain = 1
|
||||
)
|
||||
|
||||
result = /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/trumpet
|
||||
|
||||
/datum/crafting_recipe/food/donut/slimejelly/matcha
|
||||
name = "Matcha Slime Donut"
|
||||
reqs = list(
|
||||
/datum/reagent/toxin/teapowder = 3,
|
||||
/obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/plain = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/matcha
|
||||
@@ -59,4 +59,15 @@
|
||||
/obj/item/reagent_containers/food/snacks/grown/corn = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/salad/eggbowl
|
||||
subcategory = CAT_EGG
|
||||
|
||||
/datum/crafting_recipe/food/scotchegg
|
||||
name = "Scotch egg"
|
||||
reqs = list(
|
||||
/datum/reagent/consumable/sodiumchloride = 1,
|
||||
/datum/reagent/consumable/blackpepper = 1,
|
||||
/obj/item/reagent_containers/food/snacks/boiledegg = 1,
|
||||
/obj/item/reagent_containers/food/snacks/faggot = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/scotchegg
|
||||
subcategory = CAT_EGG
|
||||
@@ -3,6 +3,64 @@
|
||||
//Misc. Frozen.//
|
||||
/////////////////
|
||||
|
||||
/datum/crafting_recipe/food/banana_split
|
||||
name = "Banana Split"
|
||||
always_availible = FALSE
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/icecream = 3,
|
||||
/obj/item/reagent_containers/food/snacks/grown/banana = 1,
|
||||
/obj/item/reagent_containers/food/snacks/grown/cherries = 1,
|
||||
/obj/item/reagent_containers/food/snacks/chocolatebar = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/banana_split
|
||||
subcategory = CAT_ICE
|
||||
|
||||
/datum/crafting_recipe/food/bluecharrie_float
|
||||
name = "Blue Cherry Shake"
|
||||
always_availible = FALSE
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/icecream = 1,
|
||||
/obj/item/reagent_containers/food/snacks/grown/bluecherries = 3,
|
||||
/obj/item/reagent_containers/food/drinks/drinkingglass = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/bluecharrie_float
|
||||
subcategory = CAT_ICE
|
||||
|
||||
/datum/crafting_recipe/food/charrie_float
|
||||
name = "Cherry Shake"
|
||||
always_availible = FALSE
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/icecream = 1,
|
||||
/obj/item/reagent_containers/food/snacks/grown/cherries = 3,
|
||||
/obj/item/reagent_containers/food/drinks/drinkingglass = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/charrie_float
|
||||
subcategory = CAT_ICE
|
||||
|
||||
/datum/crafting_recipe/food/root_float
|
||||
name = "Cola Float"
|
||||
always_availible = FALSE
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/icecream = 1,
|
||||
/obj/item/reagent_containers/food/snacks/grown/cherries = 1,
|
||||
/datum/reagent/consumable/space_cola = 10,
|
||||
/obj/item/reagent_containers/food/drinks/drinkingglass = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/cola_float
|
||||
subcategory = CAT_ICE
|
||||
|
||||
/datum/crafting_recipe/food/honkdae
|
||||
name ="Honkdae"
|
||||
reqs = list(
|
||||
/datum/reagent/consumable/cream = 5,
|
||||
/obj/item/clothing/mask/gas/clown_hat = 1,
|
||||
/obj/item/reagent_containers/food/snacks/grown/cherries = 1,
|
||||
/obj/item/reagent_containers/food/snacks/grown/banana = 2,
|
||||
/obj/item/reagent_containers/food/snacks/icecream = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/honkdae
|
||||
subcategory = CAT_ICE
|
||||
|
||||
/datum/crafting_recipe/food/icecreamsandwich
|
||||
name = "Icecream sandwich"
|
||||
reqs = list(
|
||||
@@ -14,7 +72,7 @@
|
||||
subcategory = CAT_ICE
|
||||
|
||||
/datum/crafting_recipe/food/spacefreezy
|
||||
name ="Space freezy"
|
||||
name ="Space Freezy"
|
||||
reqs = list(
|
||||
/datum/reagent/consumable/bluecherryjelly = 5,
|
||||
/datum/reagent/consumable/spacemountainwind = 15,
|
||||
@@ -34,105 +92,8 @@
|
||||
result = /obj/item/reagent_containers/food/snacks/sundae
|
||||
subcategory = CAT_ICE
|
||||
|
||||
/datum/crafting_recipe/food/honkdae
|
||||
name ="Honkdae"
|
||||
reqs = list(
|
||||
/datum/reagent/consumable/cream = 5,
|
||||
/obj/item/clothing/mask/gas/clown_hat = 1,
|
||||
/obj/item/reagent_containers/food/snacks/grown/cherries = 1,
|
||||
/obj/item/reagent_containers/food/snacks/grown/banana = 2,
|
||||
/obj/item/reagent_containers/food/snacks/icecream = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/honkdae
|
||||
subcategory = CAT_ICE
|
||||
|
||||
/datum/crafting_recipe/food/banana_split
|
||||
name = "Banana Split"
|
||||
always_availible = FALSE
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/icecream = 3,
|
||||
/obj/item/reagent_containers/food/snacks/grown/banana = 1,
|
||||
/obj/item/reagent_containers/food/snacks/grown/cherries = 1,
|
||||
/obj/item/reagent_containers/food/snacks/chocolatebar = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/banana_split
|
||||
subcategory = CAT_ICE
|
||||
|
||||
/datum/crafting_recipe/food/root_float
|
||||
name = "Cola Float"
|
||||
always_availible = FALSE
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/icecream = 1,
|
||||
/obj/item/reagent_containers/food/snacks/grown/cherries = 1,
|
||||
/datum/reagent/consumable/space_cola = 10,
|
||||
/obj/item/reagent_containers/food/drinks/drinkingglass = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/cola_float
|
||||
subcategory = CAT_ICE
|
||||
|
||||
/datum/crafting_recipe/food/charrie_float
|
||||
name = "Cherry Shake"
|
||||
always_availible = FALSE
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/icecream = 1,
|
||||
/obj/item/reagent_containers/food/snacks/grown/cherries = 3,
|
||||
/obj/item/reagent_containers/food/drinks/drinkingglass = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/charrie_float
|
||||
subcategory = CAT_ICE
|
||||
|
||||
/datum/crafting_recipe/food/bluecharrie_float
|
||||
name = "Blue Cherry Shake"
|
||||
always_availible = FALSE
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/icecream = 1,
|
||||
/obj/item/reagent_containers/food/snacks/grown/bluecherries = 3,
|
||||
/obj/item/reagent_containers/food/drinks/drinkingglass = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/bluecharrie_float
|
||||
subcategory = CAT_ICE
|
||||
|
||||
//////////////////////////SNOW CONES///////////////////////
|
||||
|
||||
/datum/crafting_recipe/food/flavorless_sc
|
||||
name = "Flavorless snowcone"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/drinks/sillycup = 1,
|
||||
/datum/reagent/consumable/ice = 15
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/snowcones
|
||||
subcategory = CAT_ICE
|
||||
|
||||
/datum/crafting_recipe/food/pineapple_sc
|
||||
name = "Pineapple snowcone"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/drinks/sillycup = 1,
|
||||
/datum/reagent/consumable/ice = 15,
|
||||
/obj/item/reagent_containers/food/snacks/pineappleslice = 2
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/snowcones/pineapple
|
||||
subcategory = CAT_ICE
|
||||
|
||||
/datum/crafting_recipe/food/lime_sc
|
||||
name = "Lime snowcone"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/drinks/sillycup = 1,
|
||||
/datum/reagent/consumable/ice = 15,
|
||||
/datum/reagent/consumable/limejuice = 5
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/snowcones/lime
|
||||
subcategory = CAT_ICE
|
||||
|
||||
/datum/crafting_recipe/food/lemon_sc
|
||||
name = "Lemon snowcone"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/drinks/sillycup = 1,
|
||||
/datum/reagent/consumable/ice = 15,
|
||||
/datum/reagent/consumable/lemonjuice = 5
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/snowcones/lemon
|
||||
subcategory = CAT_ICE
|
||||
|
||||
/datum/crafting_recipe/food/apple_sc
|
||||
name = "Apple snowcone"
|
||||
reqs = list(
|
||||
@@ -143,24 +104,14 @@
|
||||
result = /obj/item/reagent_containers/food/snacks/snowcones/apple
|
||||
subcategory = CAT_ICE
|
||||
|
||||
/datum/crafting_recipe/food/grape_sc
|
||||
name = "Grape snowcone"
|
||||
/datum/crafting_recipe/food/berry_sc
|
||||
name = "Berry snowcone"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/drinks/sillycup = 1,
|
||||
/datum/reagent/consumable/ice = 15,
|
||||
/datum/reagent/consumable/grapejuice = 5
|
||||
/datum/reagent/consumable/berryjuice = 5
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/snowcones/grape
|
||||
subcategory = CAT_ICE
|
||||
|
||||
/datum/crafting_recipe/food/orange_sc
|
||||
name = "Orange snowcone"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/drinks/sillycup = 1,
|
||||
/datum/reagent/consumable/ice = 15,
|
||||
/datum/reagent/consumable/orangejuice = 5
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/snowcones/orange
|
||||
result = /obj/item/reagent_containers/food/snacks/snowcones/berry
|
||||
subcategory = CAT_ICE
|
||||
|
||||
/datum/crafting_recipe/food/blue_sc
|
||||
@@ -183,14 +134,13 @@
|
||||
result = /obj/item/reagent_containers/food/snacks/snowcones/red
|
||||
subcategory = CAT_ICE
|
||||
|
||||
/datum/crafting_recipe/food/berry_sc
|
||||
name = "Berry snowcone"
|
||||
/datum/crafting_recipe/food/flavorless_sc
|
||||
name = "Flavorless snowcone"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/drinks/sillycup = 1,
|
||||
/datum/reagent/consumable/ice = 15,
|
||||
/datum/reagent/consumable/berryjuice = 5
|
||||
/datum/reagent/consumable/ice = 15
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/snowcones/berry
|
||||
result = /obj/item/reagent_containers/food/snacks/snowcones
|
||||
subcategory = CAT_ICE
|
||||
|
||||
/datum/crafting_recipe/food/fruitsalad_sc
|
||||
@@ -206,24 +156,84 @@
|
||||
result = /obj/item/reagent_containers/food/snacks/snowcones/fruitsalad
|
||||
subcategory = CAT_ICE
|
||||
|
||||
/datum/crafting_recipe/food/mime_sc
|
||||
name = "Mime snowcone"
|
||||
/datum/crafting_recipe/food/grape_sc
|
||||
name = "Grape snowcone"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/drinks/sillycup = 1,
|
||||
/datum/reagent/consumable/ice = 15,
|
||||
/datum/reagent/consumable/nothing = 5
|
||||
/datum/reagent/consumable/grapejuice = 5
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/snowcones/mime
|
||||
result = /obj/item/reagent_containers/food/snacks/snowcones/grape
|
||||
subcategory = CAT_ICE
|
||||
|
||||
/datum/crafting_recipe/food/clown_sc
|
||||
name = "Clown snowcone"
|
||||
/datum/crafting_recipe/food/honey_sc
|
||||
name = "Honey snowcone"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/drinks/sillycup = 1,
|
||||
/datum/reagent/consumable/ice = 15,
|
||||
/datum/reagent/consumable/laughter = 5
|
||||
/datum/reagent/consumable/honey = 5
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/snowcones/clown
|
||||
result = /obj/item/reagent_containers/food/snacks/snowcones/honey
|
||||
subcategory = CAT_ICE
|
||||
|
||||
/datum/crafting_recipe/food/lemon_sc
|
||||
name = "Lemon snowcone"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/drinks/sillycup = 1,
|
||||
/datum/reagent/consumable/ice = 15,
|
||||
/datum/reagent/consumable/lemonjuice = 5
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/snowcones/lemon
|
||||
subcategory = CAT_ICE
|
||||
|
||||
/datum/crafting_recipe/food/lime_sc
|
||||
name = "Lime snowcone"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/drinks/sillycup = 1,
|
||||
/datum/reagent/consumable/ice = 15,
|
||||
/datum/reagent/consumable/limejuice = 5
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/snowcones/lime
|
||||
subcategory = CAT_ICE
|
||||
|
||||
/datum/crafting_recipe/food/orange_sc
|
||||
name = "Orange snowcone"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/drinks/sillycup = 1,
|
||||
/datum/reagent/consumable/ice = 15,
|
||||
/datum/reagent/consumable/orangejuice = 5
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/snowcones/orange
|
||||
subcategory = CAT_ICE
|
||||
|
||||
/datum/crafting_recipe/food/pineapple_sc
|
||||
name = "Pineapple snowcone"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/drinks/sillycup = 1,
|
||||
/datum/reagent/consumable/ice = 15,
|
||||
/obj/item/reagent_containers/food/snacks/pineappleslice = 2
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/snowcones/pineapple
|
||||
subcategory = CAT_ICE
|
||||
|
||||
/datum/crafting_recipe/food/pwrgame_sc
|
||||
name = "Pwrgame snowcone"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/drinks/sillycup = 1,
|
||||
/datum/reagent/consumable/ice = 15,
|
||||
/datum/reagent/consumable/pwr_game = 15
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/snowcones/pwrgame
|
||||
subcategory = CAT_ICE
|
||||
|
||||
/datum/crafting_recipe/food/rainbow_sc
|
||||
name = "Rainbow snowcone"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/drinks/sillycup = 1,
|
||||
/datum/reagent/consumable/ice = 15,
|
||||
/datum/reagent/colorful_reagent = 1 //Harder to make
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/snowcones/rainbow
|
||||
subcategory = CAT_ICE
|
||||
|
||||
/datum/crafting_recipe/food/soda_sc
|
||||
@@ -246,32 +256,24 @@
|
||||
result = /obj/item/reagent_containers/food/snacks/snowcones/spacemountainwind
|
||||
subcategory = CAT_ICE
|
||||
|
||||
/datum/crafting_recipe/food/pwrgame_sc
|
||||
name = "Pwrgame snowcone"
|
||||
/////I don't like seperating the clown and mime.///
|
||||
|
||||
/datum/crafting_recipe/food/mime_sc
|
||||
name = "Mime snowcone"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/drinks/sillycup = 1,
|
||||
/datum/reagent/consumable/ice = 15,
|
||||
/datum/reagent/consumable/pwr_game = 15
|
||||
/datum/reagent/consumable/nothing = 5
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/snowcones/pwrgame
|
||||
result = /obj/item/reagent_containers/food/snacks/snowcones/mime
|
||||
subcategory = CAT_ICE
|
||||
|
||||
/datum/crafting_recipe/food/honey_sc
|
||||
name = "Honey snowcone"
|
||||
/datum/crafting_recipe/food/clown_sc
|
||||
name = "Clown snowcone"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/drinks/sillycup = 1,
|
||||
/datum/reagent/consumable/ice = 15,
|
||||
/datum/reagent/consumable/honey = 5
|
||||
/datum/reagent/consumable/laughter = 5
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/snowcones/honey
|
||||
subcategory = CAT_ICE
|
||||
|
||||
/datum/crafting_recipe/food/rainbow_sc
|
||||
name = "Rainbow snowcone"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/drinks/sillycup = 1,
|
||||
/datum/reagent/consumable/ice = 15,
|
||||
/datum/reagent/colorful_reagent = 1 //Harder to make
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/snowcones/rainbow
|
||||
subcategory = CAT_ICE
|
||||
result = /obj/item/reagent_containers/food/snacks/snowcones/clown
|
||||
subcategory = CAT_ICE
|
||||
@@ -1,3 +1,5 @@
|
||||
// see code/module/crafting/table.dm
|
||||
|
||||
////////////////////////////////////////////////KEBABS////////////////////////////////////////////////
|
||||
|
||||
/datum/crafting_recipe/food/humankebab
|
||||
@@ -36,6 +38,18 @@
|
||||
result = /obj/item/reagent_containers/food/snacks/kebab/tail
|
||||
subcategory = CAT_MEAT
|
||||
|
||||
/datum/crafting_recipe/food/fiestaskewer
|
||||
name = "Fiesta Skewer"
|
||||
reqs = list(
|
||||
/obj/item/stack/rods = 1,
|
||||
/obj/item/reagent_containers/food/snacks/grown/chili = 1,
|
||||
/obj/item/reagent_containers/food/snacks/meat/cutlet = 1,
|
||||
/obj/item/reagent_containers/food/snacks/grown/corn = 1,
|
||||
/obj/item/reagent_containers/food/snacks/grown/tomato = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/kebab/fiesta
|
||||
subcategory = CAT_MEAT
|
||||
|
||||
// see code/module/crafting/table.dm
|
||||
|
||||
////////////////////////////////////////////////MR SPIDER////////////////////////////////////////////////
|
||||
@@ -52,6 +66,36 @@
|
||||
|
||||
////////////////////////////////////////////////MISC RECIPE's////////////////////////////////////////////////
|
||||
|
||||
/datum/crafting_recipe/food/ribs
|
||||
name = "BBQ Ribs"
|
||||
reqs = list(
|
||||
/datum/reagent/consumable/bbqsauce = 5,
|
||||
/obj/item/reagent_containers/food/snacks/meat/steak/plain = 2,
|
||||
/obj/item/stack/rods = 2
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/bbqribs
|
||||
subcategory = CAT_MEAT
|
||||
|
||||
/datum/crafting_recipe/food/nugget
|
||||
name = "Chicken nugget"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/meat/cutlet = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/nugget
|
||||
subcategory = CAT_MEAT
|
||||
|
||||
/datum/crafting_recipe/food/corndog
|
||||
name = "Corndog meal"
|
||||
reqs = list(
|
||||
/obj/item/stack/rods = 1,
|
||||
/obj/item/reagent_containers/food/snacks/meat/cutlet = 1,
|
||||
/obj/item/reagent_containers/food/snacks/bun = 1,
|
||||
/datum/reagent/consumable/mustard = 5,
|
||||
/datum/reagent/consumable/ketchup = 5
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/corndog
|
||||
subcategory = CAT_MEAT
|
||||
|
||||
/datum/crafting_recipe/food/cornedbeef
|
||||
name = "Corned beef"
|
||||
reqs = list(
|
||||
@@ -72,16 +116,6 @@
|
||||
result = /obj/item/reagent_containers/food/snacks/bearsteak
|
||||
subcategory = CAT_MEAT
|
||||
|
||||
/datum/crafting_recipe/food/enchiladas
|
||||
name = "Enchiladas"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/meat/cutlet = 2,
|
||||
/obj/item/reagent_containers/food/snacks/grown/chili = 2,
|
||||
/obj/item/reagent_containers/food/snacks/tortilla = 2
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/enchiladas
|
||||
subcategory = CAT_MEAT
|
||||
|
||||
/datum/crafting_recipe/food/stewedsoymeat
|
||||
name = "Stewed soymeat"
|
||||
reqs = list(
|
||||
@@ -101,23 +135,6 @@
|
||||
result = /obj/item/reagent_containers/food/snacks/sausage
|
||||
subcategory = CAT_MEAT
|
||||
|
||||
/datum/crafting_recipe/food/nugget
|
||||
name = "Chicken nugget"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/meat/cutlet = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/nugget
|
||||
subcategory = CAT_MEAT
|
||||
|
||||
/datum/crafting_recipe/food/rawkhinkali
|
||||
name = "Raw Khinkali"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/doughslice = 1,
|
||||
/obj/item/reagent_containers/food/snacks/faggot = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/rawkhinkali
|
||||
subcategory = CAT_MEAT
|
||||
|
||||
/datum/crafting_recipe/food/pigblanket
|
||||
name = "Pig in a Blanket"
|
||||
reqs = list(
|
||||
@@ -128,18 +145,6 @@
|
||||
result = /obj/item/reagent_containers/food/snacks/pigblanket
|
||||
subcategory = CAT_MEAT
|
||||
|
||||
/datum/crafting_recipe/food/corndog
|
||||
name = "Corndog meal"
|
||||
reqs = list(
|
||||
/obj/item/stack/rods = 1,
|
||||
/obj/item/reagent_containers/food/snacks/meat/cutlet = 1,
|
||||
/obj/item/reagent_containers/food/snacks/bun = 1,
|
||||
/datum/reagent/consumable/mustard = 5,
|
||||
/datum/reagent/consumable/ketchup = 5
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/corndog
|
||||
subcategory = CAT_MEAT
|
||||
|
||||
/datum/crafting_recipe/food/ratkebab
|
||||
name = "Rat Kebab"
|
||||
reqs = list(
|
||||
@@ -166,25 +171,3 @@
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/salad/ricepork
|
||||
subcategory = CAT_MEAT
|
||||
|
||||
/datum/crafting_recipe/food/fiestaskewer
|
||||
name = "Fiesta Skewer"
|
||||
reqs = list(
|
||||
/obj/item/stack/rods = 1,
|
||||
/obj/item/reagent_containers/food/snacks/grown/chili = 1,
|
||||
/obj/item/reagent_containers/food/snacks/meat/cutlet = 1,
|
||||
/obj/item/reagent_containers/food/snacks/grown/corn = 1,
|
||||
/obj/item/reagent_containers/food/snacks/grown/tomato = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/kebab/fiesta
|
||||
subcategory = CAT_MEAT
|
||||
|
||||
/datum/crafting_recipe/food/ribs
|
||||
name = "BBQ Ribs"
|
||||
reqs = list(
|
||||
/datum/reagent/consumable/bbqsauce = 5,
|
||||
/obj/item/reagent_containers/food/snacks/meat/steak/plain = 2,
|
||||
/obj/item/stack/rods = 2
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/bbqribs
|
||||
subcategory = CAT_MEAT
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user