mirror of
https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13.git
synced 2025-12-09 16:07:40 +00:00
Merge remote-tracking branch 'citadel/master' into combat_rework_experimental
This commit is contained in:
@@ -1,74 +0,0 @@
|
||||
/mob/proc/RightClickOn(atom/A, params) //mostly a copy-paste from ClickOn()
|
||||
var/list/modifiers = params2list(params)
|
||||
if(incapacitated(ignore_restraints = 1))
|
||||
return
|
||||
|
||||
face_atom(A)
|
||||
|
||||
if(next_move > world.time) // in the year 2000...
|
||||
return
|
||||
|
||||
if(!modifiers["catcher"] && A.IsObscured())
|
||||
return
|
||||
|
||||
if(ismecha(loc))
|
||||
var/obj/mecha/M = loc
|
||||
return M.click_action(A,src,params)
|
||||
|
||||
if(restrained())
|
||||
changeNext_move(CLICK_CD_HANDCUFFED) //Doing shit in cuffs shall be vey slow
|
||||
RestrainedClickOn(A)
|
||||
return
|
||||
|
||||
if(in_throw_mode)
|
||||
throw_item(A)//todo: make it plausible to lightly toss items via right-click
|
||||
return
|
||||
|
||||
var/obj/item/W = get_active_held_item()
|
||||
|
||||
if(W == A)
|
||||
if(!W.rightclick_attack_self(src))
|
||||
W.attack_self(src)
|
||||
update_inv_hands()
|
||||
return
|
||||
|
||||
//These are always reachable.
|
||||
//User itself, current loc, and user inventory
|
||||
if(A in DirectAccess())
|
||||
if(W)
|
||||
W.rightclick_melee_attack_chain(src, A, params)
|
||||
else
|
||||
if(ismob(A))
|
||||
changeNext_move(CLICK_CD_MELEE)
|
||||
if(!AltUnarmedAttack(A))
|
||||
UnarmedAttack(A)
|
||||
return
|
||||
|
||||
//Can't reach anything else in lockers or other weirdness
|
||||
if(!loc.AllowClick())
|
||||
return
|
||||
|
||||
//Standard reach turf to turf or reaching inside storage
|
||||
if(CanReach(A,W))
|
||||
if(W)
|
||||
W.rightclick_melee_attack_chain(src, A, params)
|
||||
else
|
||||
if(ismob(A))
|
||||
changeNext_move(CLICK_CD_MELEE)
|
||||
if(!AltUnarmedAttack(A,1))
|
||||
UnarmedAttack(A,1)
|
||||
else
|
||||
if(W)
|
||||
if(!W.altafterattack(A, src, FALSE, params))
|
||||
W.afterattack(A, src, FALSE, params)
|
||||
else
|
||||
if(!AltRangedAttack(A,params))
|
||||
RangedAttack(A,params)
|
||||
|
||||
/mob/proc/AltUnarmedAttack(atom/A, proximity_flag)
|
||||
if(ismob(A))
|
||||
changeNext_move(CLICK_CD_MELEE)
|
||||
return FALSE
|
||||
|
||||
/mob/proc/AltRangedAttack(atom/A, params)
|
||||
return FALSE
|
||||
@@ -1,22 +0,0 @@
|
||||
/obj/screen/voretoggle
|
||||
name = "toggle vore mode"
|
||||
icon = 'modular_citadel/icons/ui/screen_midnight.dmi'
|
||||
icon_state = "nom_off"
|
||||
|
||||
/obj/screen/voretoggle/Click()
|
||||
if(usr != hud.mymob)
|
||||
return
|
||||
var/mob/living/carbon/C = usr
|
||||
if(SEND_SIGNAL(usr, COMSIG_COMBAT_MODE_CHECK, COMBAT_MODE_ACTIVE))
|
||||
to_chat(usr, "<span class='warning'>Disable combat mode first.</span>")
|
||||
return
|
||||
C.toggle_vore_mode()
|
||||
|
||||
/obj/screen/voretoggle/update_icon_state()
|
||||
var/mob/living/carbon/user = hud?.mymob
|
||||
if(!istype(user))
|
||||
return
|
||||
if(user.voremode)
|
||||
icon_state = "nom"
|
||||
else
|
||||
icon_state = "nom_off"
|
||||
@@ -1,58 +0,0 @@
|
||||
/obj/screen/mov_intent
|
||||
icon = 'modular_citadel/icons/ui/screen_midnight.dmi'
|
||||
|
||||
/obj/screen/sprintbutton
|
||||
name = "toggle sprint"
|
||||
icon = 'modular_citadel/icons/ui/screen_midnight.dmi'
|
||||
icon_state = "act_sprint"
|
||||
layer = ABOVE_HUD_LAYER - 0.1
|
||||
var/mutable_appearance/flashy
|
||||
|
||||
/obj/screen/sprintbutton/Click()
|
||||
if(ishuman(usr))
|
||||
var/mob/living/carbon/human/H = usr
|
||||
H.default_toggle_sprint()
|
||||
|
||||
/obj/screen/sprintbutton/update_icon_state()
|
||||
var/mob/living/user = hud?.mymob
|
||||
if(!istype(user))
|
||||
return
|
||||
if(user.combat_flags & COMBAT_FLAG_SPRINT_ACTIVE)
|
||||
icon_state = "act_sprint_on"
|
||||
else if(HAS_TRAIT(user, TRAIT_SPRINT_LOCKED))
|
||||
icon_state = "act_sprint_locked"
|
||||
else
|
||||
icon_state = "act_sprint"
|
||||
|
||||
/obj/screen/sprintbutton/update_overlays()
|
||||
. = ..()
|
||||
var/mob/living/carbon/user = hud?.mymob
|
||||
if(!istype(user) || !user.client)
|
||||
return
|
||||
|
||||
if((user.combat_flags & COMBAT_FLAG_SPRINT_ACTIVE) && user.client.prefs.hud_toggle_flash)
|
||||
if(!flashy)
|
||||
flashy = mutable_appearance('icons/mob/screen_gen.dmi', "togglehalf_flash")
|
||||
if(flashy.color != user.client.prefs.hud_toggle_color)
|
||||
flashy.color = user.client.prefs.hud_toggle_color
|
||||
. += flashy
|
||||
|
||||
//Sprint buffer onscreen code.
|
||||
/datum/hud/var/obj/screen/sprint_buffer/sprint_buffer
|
||||
|
||||
/obj/screen/sprint_buffer
|
||||
name = "sprint buffer"
|
||||
icon = 'icons/effects/progessbar.dmi'
|
||||
icon_state = "prog_bar_100"
|
||||
|
||||
/obj/screen/sprint_buffer/Click()
|
||||
if(isliving(usr))
|
||||
var/mob/living/L = usr
|
||||
to_chat(L, "<span class='boldnotice'>Your sprint buffer's maximum capacity is [L.sprint_buffer_max]. It is currently at [L.sprint_buffer], regenerating at [L.sprint_buffer_regen_ds * 10] per second. \
|
||||
Sprinting while this is empty will incur a [L.sprint_stamina_cost] stamina cost per tile.</span>")
|
||||
|
||||
/obj/screen/sprint_buffer/proc/update_to_mob(mob/living/L)
|
||||
var/amount = 0
|
||||
if(L.sprint_buffer_max > 0)
|
||||
amount = round(clamp((L.sprint_buffer / L.sprint_buffer_max) * 100, 0, 100), 5)
|
||||
icon_state = "prog_bar_[amount]"
|
||||
@@ -1,61 +0,0 @@
|
||||
/datum/hud/var/obj/screen/staminas/staminas
|
||||
/datum/hud/var/obj/screen/staminabuffer/staminabuffer
|
||||
|
||||
/obj/screen/staminas
|
||||
icon = 'modular_citadel/icons/ui/screen_gen.dmi'
|
||||
name = "stamina"
|
||||
icon_state = "stamina0"
|
||||
screen_loc = ui_stamina
|
||||
mouse_opacity = 1
|
||||
|
||||
/obj/screen/staminas/Click(location,control,params)
|
||||
if(isliving(usr))
|
||||
var/mob/living/L = usr
|
||||
to_chat(L, "<span class='notice'>You have <b>[L.getStaminaLoss()]</b> stamina loss.<br>Your stamina buffer can take <b>[L.stambuffer]</b> stamina loss, and recharges at no cost.<br>Your stamina buffer is <b>[(L.stambuffer*(100/L.stambuffer))-(L.bufferedstam*(100/L.stambuffer))]%</b> full.</span>")
|
||||
|
||||
/obj/screen/staminas/update_icon_state()
|
||||
var/mob/living/carbon/user = hud?.mymob
|
||||
if(!user)
|
||||
return
|
||||
if(user.stat == DEAD || (user.combat_flags & COMBAT_FLAG_HARD_STAMCRIT) || (user.hal_screwyhud in 1 to 2))
|
||||
icon_state = "staminacrit"
|
||||
else if(user.hal_screwyhud == 5)
|
||||
icon_state = "stamina0"
|
||||
else
|
||||
icon_state = "stamina[clamp(FLOOR(user.getStaminaLoss() /20, 1), 0, 6)]"
|
||||
|
||||
//stam buffer
|
||||
/obj/screen/staminabuffer
|
||||
icon = 'modular_citadel/icons/ui/screen_gen.dmi'
|
||||
name = "stamina buffer"
|
||||
icon_state = "stambuffer0"
|
||||
screen_loc = ui_stamina
|
||||
layer = ABOVE_HUD_LAYER + 0.1
|
||||
mouse_opacity = 0
|
||||
|
||||
/obj/screen/staminabuffer/update_icon_state()
|
||||
var/mob/living/carbon/user = hud?.mymob
|
||||
if(!user)
|
||||
return
|
||||
if(user.stat == DEAD || (user.combat_flags & COMBAT_FLAG_HARD_STAMCRIT) || (user.hal_screwyhud in 1 to 2))
|
||||
icon_state = "stambuffer7"
|
||||
else if(user.hal_screwyhud == 5)
|
||||
icon_state = "stambuffer0"
|
||||
else
|
||||
switch(user.bufferedstam / user.stambuffer)
|
||||
if(0.95 to INFINITY)
|
||||
icon_state = "stambuffer7"
|
||||
if(0.9 to 0.95)
|
||||
icon_state = "stambuffer6"
|
||||
if(0.8 to 0.9)
|
||||
icon_state = "stambuffer5"
|
||||
if(0.6 to 0.8)
|
||||
icon_state = "stambuffer4"
|
||||
if(0.4 to 0.6)
|
||||
icon_state = "stambuffer3"
|
||||
if(0.2 to 0.4)
|
||||
icon_state = "stambuffer2"
|
||||
if(0.05 to 0.2)
|
||||
icon_state = "stambuffer1"
|
||||
else
|
||||
icon_state = "stambuffer0"
|
||||
@@ -1,20 +0,0 @@
|
||||
/obj/item/proc/rightclick_melee_attack_chain(mob/user, atom/target, params)
|
||||
if(!alt_pre_attack(target, user, params)) //Hey, does this item have special behavior that should override all normal right-click functionality?
|
||||
if(!target.altattackby(src, user, params)) //Does the target do anything special when we right-click on it?
|
||||
melee_attack_chain(user, target, params) //Ugh. Lame! I'm filing a legal complaint about the discrimination against the right mouse button!
|
||||
else
|
||||
altafterattack(target, user, TRUE, params)
|
||||
return
|
||||
|
||||
/obj/item/proc/alt_pre_attack(atom/A, mob/living/user, params)
|
||||
return FALSE //return something other than false if you wanna override attacking completely
|
||||
|
||||
/atom/proc/altattackby(obj/item/W, mob/user, params)
|
||||
return FALSE //return something other than false if you wanna add special right-click behavior to objects.
|
||||
|
||||
/obj/item/proc/rightclick_attack_self(mob/user)
|
||||
return FALSE
|
||||
|
||||
/obj/item/proc/altafterattack(atom/target, mob/user, proximity_flag, click_parameters)
|
||||
SEND_SIGNAL(src, COMSIG_ITEM_ALT_AFTERATTACK, target, user, proximity_flag, click_parameters)
|
||||
return FALSE
|
||||
@@ -1,51 +0,0 @@
|
||||
/mob/living/carbon/human/AltUnarmedAttack(atom/A, proximity)
|
||||
if(!has_active_hand())
|
||||
to_chat(src, "<span class='notice'>You look at the state of the universe and sigh.</span>") //lets face it, people rarely ever see this message in its intended condition.
|
||||
return TRUE
|
||||
|
||||
if(!A.alt_attack_hand(src))
|
||||
A.attack_hand(src)
|
||||
return TRUE
|
||||
return TRUE
|
||||
|
||||
/mob/living/carbon/human/AltRangedAttack(atom/A, params)
|
||||
if(isturf(A) || incapacitated()) // pretty annoying to wave your fist at floors and walls. And useless.
|
||||
return TRUE
|
||||
changeNext_move(CLICK_CD_RANGE)
|
||||
var/list/target_viewers = fov_viewers(11, A) //doesn't check for blindness.
|
||||
if(!(src in target_viewers)) //click catcher issuing calls for out of view objects.
|
||||
return TRUE
|
||||
if(!has_active_hand())
|
||||
to_chat(src, "<span class='notice'>You ponder your life choices and sigh.</span>")
|
||||
return TRUE
|
||||
var/list/src_viewers = viewers(DEFAULT_MESSAGE_RANGE, src) - src // src has a different message.
|
||||
var/the_action = "waves to [A]"
|
||||
var/what_action = "waves to something you can't see"
|
||||
var/self_action = "wave to [A]"
|
||||
|
||||
switch(a_intent)
|
||||
if(INTENT_DISARM)
|
||||
the_action = "shoos away [A]"
|
||||
what_action = "shoo away something out of your vision"
|
||||
self_action = "shoo away [A]"
|
||||
if(INTENT_GRAB)
|
||||
the_action = "beckons [A] to come"
|
||||
what_action = "beckons something out of your vision to come"
|
||||
self_action = "beckon [A] to come"
|
||||
if(INTENT_HARM)
|
||||
var/pronoun = "[p_their()]"
|
||||
the_action = "shakes [pronoun] fist at [A]"
|
||||
what_action = "shakes [pronoun] fist at something out of your vision"
|
||||
self_action = "shake your fist at [A]"
|
||||
|
||||
if(!eye_blind)
|
||||
to_chat(src, "You [self_action].")
|
||||
for(var/B in src_viewers)
|
||||
var/mob/M = B
|
||||
if(!M.eye_blind)
|
||||
var/message = (M in target_viewers) ? the_action : what_action
|
||||
to_chat(M, "[src] [message].")
|
||||
return TRUE
|
||||
|
||||
/atom/proc/alt_attack_hand(mob/user)
|
||||
return FALSE
|
||||
@@ -53,7 +53,6 @@
|
||||
|
||||
if(last_checked_size != B.cached_size)
|
||||
H.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/status_effect/breast_hypertrophy, multiplicative_slowdown = moveCalc)
|
||||
sizeMoveMod(moveCalc)
|
||||
|
||||
if (B.size == "huge")
|
||||
if(prob(1))
|
||||
@@ -70,16 +69,8 @@
|
||||
log_reagent("FERMICHEM: [owner]'s breasts has reduced to an acceptable size. ID: [owner.key]")
|
||||
to_chat(owner, "<span class='notice'>Your expansive chest has become a more managable size, liberating your movements.</b></span>")
|
||||
owner.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/breast_hypertrophy)
|
||||
sizeMoveMod(1)
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/chem/breast_enlarger/proc/sizeMoveMod(var/value)
|
||||
if(cachedmoveCalc == value)
|
||||
return
|
||||
owner.next_move_modifier /= cachedmoveCalc
|
||||
owner.next_move_modifier *= value
|
||||
cachedmoveCalc = value
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/status_effect/chem/penis_enlarger
|
||||
|
||||
@@ -45,18 +45,6 @@
|
||||
. = ..()
|
||||
shake_camera(user, (pressureSetting * 0.75 + 1), (pressureSetting * 0.75))
|
||||
|
||||
/obj/item/attack(mob/living/M, mob/living/user)
|
||||
. = ..()
|
||||
if(force >= 15)
|
||||
shake_camera(user, ((force - 10) * 0.01 + 1), ((force - 10) * 0.01))
|
||||
if(M.client)
|
||||
switch (M.client.prefs.damagescreenshake)
|
||||
if (1)
|
||||
shake_camera(M, ((force - 10) * 0.015 + 1), ((force - 10) * 0.015))
|
||||
if (2)
|
||||
if(!CHECK_MOBILITY(M, MOBILITY_MOVE))
|
||||
shake_camera(M, ((force - 10) * 0.015 + 1), ((force - 10) * 0.015))
|
||||
|
||||
/obj/item/attack_obj(obj/O, mob/living/user)
|
||||
. = ..()
|
||||
if(force >= 20)
|
||||
|
||||
@@ -92,3 +92,8 @@
|
||||
name = "Headphones"
|
||||
category = SLOT_NECK
|
||||
path = /obj/item/clothing/ears/headphones
|
||||
|
||||
/datum/gear/polycloak
|
||||
name = "Polychromatic Cloak"
|
||||
category = SLOT_NECK
|
||||
path = /obj/item/clothing/neck/cloak/polychromic
|
||||
|
||||
@@ -24,6 +24,26 @@
|
||||
category = SLOT_WEAR_SUIT
|
||||
path = /obj/item/clothing/suit/jacket
|
||||
|
||||
/datum/gear/jacketflannelblack // all of these are reskins of bomber jackets but with the vibe to make you look like a true lumberjack
|
||||
name = "Black flannel jacket"
|
||||
category = SLOT_WEAR_SUIT
|
||||
path = /obj/item/clothing/suit/jacket/flannel
|
||||
|
||||
/datum/gear/jacketflannelred
|
||||
name = "Red flannel jacket"
|
||||
category = SLOT_WEAR_SUIT
|
||||
path = /obj/item/clothing/suit/jacket/flannel/red
|
||||
|
||||
/datum/gear/jacketflannelaqua
|
||||
name = "Aqua flannel jacket"
|
||||
category = SLOT_WEAR_SUIT
|
||||
path = /obj/item/clothing/suit/jacket/flannel/aqua
|
||||
|
||||
/datum/gear/jacketflannelbrown
|
||||
name = "Brown flannel jacket"
|
||||
category = SLOT_WEAR_SUIT
|
||||
path = /obj/item/clothing/suit/jacket/flannel/brown
|
||||
|
||||
/datum/gear/jacketleather
|
||||
name = "Leather jacket"
|
||||
category = SLOT_WEAR_SUIT
|
||||
@@ -127,6 +147,12 @@
|
||||
path = /obj/item/clothing/suit/hooded/wintercoat/hydro
|
||||
restricted_roles = list("Head of Personnel", "Botanist") // Reserve it to Botanists and their boss, the Head of Personnel
|
||||
|
||||
/datum/gear/coat/bar
|
||||
name = "Bar winter coat"
|
||||
category = SLOT_WEAR_SUIT
|
||||
path = /obj/item/clothing/suit/hooded/wintercoat/bar
|
||||
restricted_roles = list("Bartender") // Reserve it to Bartenders and not the Head of Personnel because he doesnt deserve to look as fancy as them
|
||||
|
||||
/datum/gear/coat/cargo
|
||||
name = "Cargo winter coat"
|
||||
category = SLOT_WEAR_SUIT
|
||||
|
||||
@@ -112,7 +112,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
|
||||
M.visible_message("[M] suddenly shudders, and splits into two identical twins!")
|
||||
SM.copy_languages(M, LANGUAGE_MIND)
|
||||
playerClone = TRUE
|
||||
M.next_move_modifier = 1
|
||||
M.action_cooldown_mod = 1
|
||||
M.adjust_nutrition(-500)
|
||||
|
||||
//Damage the clone
|
||||
@@ -154,7 +154,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
|
||||
M.adjust_nutrition(M.nutrition/5)
|
||||
if(50)
|
||||
to_chat(M, "<span class='notice'>The synthetic cells begin to merge with your body, it feels like your body is made of a viscous water, making your movements difficult.</span>")
|
||||
M.next_move_modifier += 4//If this makes you fast then please fix it, it should make you slow!!
|
||||
M.action_cooldown_mod += 4//If this makes you fast then please fix it, it should make you slow!!
|
||||
//candidates = pollGhostCandidates("Do you want to play as a clone of [M.name] and do you agree to respect their character and act in a similar manner to them? I swear to god if you diddle them I will be very disapointed in you. ", "FermiClone", null, ROLE_SENTIENCE, 300) // see poll_ignore.dm, should allow admins to ban greifers or bullies
|
||||
if(51 to 79)
|
||||
M.adjust_nutrition(M.nutrition/2)
|
||||
@@ -164,7 +164,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
|
||||
M.set_nutrition(20000) //https://www.youtube.com/watch?v=Bj_YLenOlZI
|
||||
if(86)//Upon splitting, you get really hungry and are capable again. Deletes the chem after you're done.
|
||||
M.set_nutrition(15)//YOU BEST BE EATTING AFTER THIS YOU CUTIE
|
||||
M.next_move_modifier -= 4
|
||||
M.action_cooldown_mod -= 4
|
||||
to_chat(M, "<span class='notice'>Your body splits away from the cell clone of yourself, leaving you with a drained and hollow feeling inside.</span>")
|
||||
|
||||
//clone
|
||||
@@ -195,14 +195,14 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
|
||||
if (playerClone == TRUE)//If the player made a clone with it, then thats all they get.
|
||||
playerClone = FALSE
|
||||
return
|
||||
if (M.next_move_modifier == 4 && !M.has_status_effect(/datum/status_effect/chem/SGDF))//checks if they're ingested over 20u of the stuff, but fell short of the required 30u to make a clone.
|
||||
if (M.action_cooldown_mod == 4 && !M.has_status_effect(/datum/status_effect/chem/SGDF))//checks if they're ingested over 20u of the stuff, but fell short of the required 30u to make a clone.
|
||||
to_chat(M, "<span class='notice'>You feel the cells begin to merge with your body, unable to reach nucleation, they instead merge with your body, healing any wounds.</span>")
|
||||
M.adjustCloneLoss(-10, 0) //I don't want to make Rezadone obsolete.
|
||||
M.adjustBruteLoss(-25, 0)// Note that this takes a long time to apply and makes you fat and useless when it's in you, I don't think this small burst of healing will be useful considering how long it takes to get there.
|
||||
M.adjustFireLoss(-25, 0)
|
||||
M.blood_volume += 250
|
||||
M.heal_bodypart_damage(1,1)
|
||||
M.next_move_modifier = 1
|
||||
M.action_cooldown_mod = 1
|
||||
if (M.nutrition < 1500)
|
||||
M.adjust_nutrition(250)
|
||||
else if (unitCheck == TRUE && !M.has_status_effect(/datum/status_effect/chem/SGDF))// If they're ingested a little bit (10u minimum), then give them a little healing.
|
||||
@@ -211,7 +211,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
|
||||
M.adjustBruteLoss(-10, 0)
|
||||
M.adjustFireLoss(-10, 0)
|
||||
M.blood_volume += 100
|
||||
M.next_move_modifier = 1
|
||||
M.action_cooldown_mod = 1
|
||||
if (M.nutrition < 1500)
|
||||
M.adjust_nutrition(500)
|
||||
|
||||
@@ -325,7 +325,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
|
||||
M.adjust_nutrition(M.nutrition/5)
|
||||
if(50)
|
||||
to_chat(M, "<span class='notice'>The synethic cells begin to merge with your body, it feels like your body is made of a viscous water, making your movements difficult.</span>")
|
||||
M.next_move_modifier = 4//If this makes you fast then please fix it, it should make you slow!!
|
||||
M.action_cooldown_mod = 4//If this makes you fast then please fix it, it should make you slow!!
|
||||
if(51 to 73)
|
||||
M.adjust_nutrition(M.nutrition/2)
|
||||
if(74)
|
||||
@@ -339,7 +339,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
|
||||
if (!M.reagents.has_reagent(/datum/reagent/medicine/pen_acid))//Counterplay is pent.)
|
||||
message_admins("(non-infectious) SDZF: Zombie spawned at [M] [COORD(M)]!")
|
||||
M.set_nutrition(startHunger - 500) //YOU BEST BE RUNNING AWAY AFTER THIS YOU BADDIE
|
||||
M.next_move_modifier = 1
|
||||
M.action_cooldown_mod = 1
|
||||
to_chat(M, "<span class='warning'>Your body splits away from the cell clone of yourself, your attempted clone birthing itself violently from you as it begins to shamble around, a terrifying abomination of science.</span>")
|
||||
M.visible_message("[M] suddenly shudders, and splits into a funky smelling copy of themselves!")
|
||||
M.emote("scream")
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
|
||||
//item_flags = NODROP //Tips their hat!
|
||||
|
||||
/obj/item/clothing/head/hattip/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags)
|
||||
/obj/item/clothing/head/hattip/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags)
|
||||
if(iscarbon(user))
|
||||
var/mob/living/carbon/C = user
|
||||
if(is_ninja(C))
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
|
||||
//A little janky with pockets
|
||||
/obj/item/fermichem/pHbooklet/attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags)
|
||||
/obj/item/fermichem/pHbooklet/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags)
|
||||
if(user.get_held_index_of_item(src))//Does this check pockets too..?
|
||||
if(numberOfPages == 50)
|
||||
icon_state = "pHbookletOpen"
|
||||
|
||||
Reference in New Issue
Block a user