Merge branch 'master' of https://github.com/Citadel-Station-13/Citadel-Station-13 into eigenstasium-nope
This commit is contained in:
@@ -16,4 +16,5 @@
|
||||
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
|
||||
|
||||
@@ -543,7 +543,7 @@
|
||||
if (statusStrength < 0)
|
||||
status = null
|
||||
owner.remove_movespeed_modifier(MOVESPEED_ID_MKULTRA)
|
||||
owner.Knockdown(50)
|
||||
owner.DefaultCombatKnockdown(50)
|
||||
to_chat(owner, "<span class='notice'><i>Your body gives out as the adrenaline in your system runs out.</i></span>")
|
||||
else
|
||||
statusStrength -= 1
|
||||
@@ -638,7 +638,7 @@
|
||||
H.adjust_arousal(5)
|
||||
C.jitteriness += 100
|
||||
C.stuttering += 25
|
||||
C.Knockdown(60)
|
||||
C.DefaultCombatKnockdown(60)
|
||||
C.Stun(60)
|
||||
to_chat(owner, "<span class='warning'><i>Your muscles seize up, then start spasming wildy!</i></span>")
|
||||
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
/datum/status_effect/incapacitating/knockdown/on_creation(mob/living/new_owner, set_duration, updating_canmove, override_duration, override_stam)
|
||||
if(iscarbon(new_owner) && (isnum(set_duration) || isnum(override_duration)))
|
||||
if(istype(new_owner.buckled, /obj/vehicle/ridden))
|
||||
var/obj/buckl = new_owner.buckled
|
||||
buckl.unbuckle_mob(new_owner)
|
||||
new_owner.resting = TRUE
|
||||
new_owner.adjustStaminaLoss(isnull(override_stam)? set_duration*0.25 : override_stam)
|
||||
if(isnull(override_duration) && (set_duration > 80))
|
||||
set_duration = set_duration*0.01
|
||||
return ..()
|
||||
else if(!isnull(override_duration))
|
||||
set_duration = override_duration
|
||||
return ..()
|
||||
else if(updating_canmove)
|
||||
new_owner.update_canmove()
|
||||
qdel(src)
|
||||
else
|
||||
. = ..()
|
||||
@@ -53,7 +53,7 @@
|
||||
if (1)
|
||||
shake_camera(M, ((force - 10) * 0.015 + 1), ((force - 10) * 0.015))
|
||||
if (2)
|
||||
if (!M.canmove)
|
||||
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)
|
||||
|
||||
@@ -0,0 +1,83 @@
|
||||
/obj/item/electropack/shockcollar
|
||||
name = "shock collar"
|
||||
desc = "A reinforced metal collar. It seems to have some form of wiring near the front. Strange.."
|
||||
icon = 'modular_citadel/icons/obj/clothing/cit_neck.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/neck.dmi'
|
||||
icon_state = "shockcollar"
|
||||
item_state = "shockcollar"
|
||||
body_parts_covered = NECK
|
||||
slot_flags = ITEM_SLOT_NECK | ITEM_SLOT_DENYPOCKET //no more pocket shockers
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
strip_delay = 60
|
||||
equip_delay_other = 60
|
||||
materials = list(MAT_METAL=5000, MAT_GLASS=2000)
|
||||
var/tagname = null
|
||||
|
||||
/datum/design/electropack/shockcollar
|
||||
name = "Shockcollar"
|
||||
id = "shockcollar"
|
||||
build_type = AUTOLATHE
|
||||
build_path = /obj/item/electropack/shockcollar
|
||||
materials = list(MAT_METAL=5000, MAT_GLASS=2000)
|
||||
category = list("hacked", "Misc")
|
||||
|
||||
/obj/item/electropack/shockcollar/attack_hand(mob/user)
|
||||
if(loc == user && user.get_item_by_slot(SLOT_NECK))
|
||||
to_chat(user, "<span class='warning'>The collar is fastened tight! You'll need help taking this off!</span>")
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/electropack/shockcollar/receive_signal(datum/signal/signal)
|
||||
if(!signal || signal.data["code"] != code)
|
||||
return
|
||||
|
||||
if(isliving(loc) && on)
|
||||
if(shock_cooldown != 0)
|
||||
return
|
||||
shock_cooldown = 1
|
||||
spawn(100)
|
||||
shock_cooldown = 0
|
||||
var/mob/living/L = loc
|
||||
step(L, pick(GLOB.cardinals))
|
||||
|
||||
to_chat(L, "<span class='danger'>You feel a sharp shock from the collar!</span>")
|
||||
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
|
||||
s.set_up(3, 1, L)
|
||||
s.start()
|
||||
|
||||
L.DefaultCombatKnockdown(100)
|
||||
|
||||
if(master)
|
||||
master.receive_signal()
|
||||
return
|
||||
|
||||
/obj/item/electropack/shockcollar/attack_self(mob/user) //Turns out can't fully source this from the parent item, spritepath gets confused if power toggled. Will come back to this when I know how to code better and readd powertoggle..
|
||||
var/option = "Change Name"
|
||||
option = input(user, "What do you want to do?", "[src]", option) as null|anything in list("Change Name", "Change Frequency")
|
||||
switch(option)
|
||||
if("Change Name")
|
||||
var/t = input(user, "Would you like to change the name on the tag?", "Name your new pet", tagname ? tagname : "Spot") as null|text
|
||||
if(t)
|
||||
tagname = copytext(sanitize(t), 1, MAX_NAME_LEN)
|
||||
name = "[initial(name)] - [tagname]"
|
||||
if("Change Frequency")
|
||||
if(!ishuman(user))
|
||||
return
|
||||
user.set_machine(src)
|
||||
var/dat = {"<SK><BR>
|
||||
<B>Frequency/Code</B> for shock collar:<BR>
|
||||
Frequency:
|
||||
<A href='byond://?src=\ref[src];freq=-10'>-</A>
|
||||
<A href='byond://?src=\ref[src];freq=-2'>-</A> [format_frequency(frequency)]
|
||||
<A href='byond://?src=\ref[src];freq=2'>+</A>
|
||||
<A href='byond://?src=\ref[src];freq=10'>+</A><BR>
|
||||
Code:
|
||||
<A href='byond://?src=\ref[src];code=-5'>-</A>
|
||||
<A href='byond://?src=\ref[src];code=-1'>-</A> [code]
|
||||
<A href='byond://?src=\ref[src];code=1'>+</A>
|
||||
<A href='byond://?src=\ref[src];code=5'>+</A><BR>
|
||||
</SK>"}
|
||||
|
||||
user << browse(dat, "window=radio")
|
||||
onclose(user, "radio")
|
||||
return
|
||||
@@ -0,0 +1,21 @@
|
||||
/obj/structure/chair/alt_attack_hand(mob/living/user)
|
||||
if(Adjacent(user) && istype(user))
|
||||
if(!item_chair || !user.can_hold_items() || !has_buckled_mobs() || buckled_mobs.len > 1 || dir != user.dir || flags_1 & NODECONSTRUCT_1)
|
||||
return TRUE
|
||||
if(!user.canUseTopic(src, BE_CLOSE, ismonkey(user)))
|
||||
to_chat(user, "<span class='warning'>You can't do that right now!</span>")
|
||||
return TRUE
|
||||
if(user.getStaminaLoss() >= STAMINA_SOFTCRIT)
|
||||
to_chat(user, "<span class='warning'>You're too exhausted for that.</span>")
|
||||
return TRUE
|
||||
var/mob/living/poordude = buckled_mobs[1]
|
||||
if(!istype(poordude))
|
||||
return TRUE
|
||||
user.visible_message("<span class='notice'>[user] pulls [src] out from under [poordude].</span>", "<span class='notice'>You pull [src] out from under [poordude].</span>")
|
||||
var/C = new item_chair(loc)
|
||||
user.put_in_hands(C)
|
||||
poordude.DefaultCombatKnockdown(20)//rip in peace
|
||||
user.adjustStaminaLoss(5)
|
||||
unbuckle_all_mobs(TRUE)
|
||||
qdel(src)
|
||||
return TRUE
|
||||
@@ -11,6 +11,6 @@
|
||||
layer_index = PENIS_LAYER_INDEX
|
||||
var/length = 6 //inches
|
||||
var/girth = 0
|
||||
var/girth_ratio = COCK_GIRTH_RATIO_DEF //citadel_defines.dm for these defines
|
||||
var/girth_ratio = COCK_DIAMETER_RATIO_DEF //citadel_defines.dm for these defines
|
||||
var/knot_girth_ratio = KNOT_GIRTH_RATIO_DEF
|
||||
var/list/oviflags = list()
|
||||
|
||||
@@ -11,12 +11,13 @@
|
||||
genital_flags = CAN_MASTURBATE_WITH|CAN_CLIMAX_WITH|GENITAL_CAN_AROUSE
|
||||
linked_organ_slot = ORGAN_SLOT_TESTICLES
|
||||
fluid_transfer_factor = 0.5
|
||||
size = 2 //arbitrary value derived from length and girth for sprites.
|
||||
size = 2 //arbitrary value derived from length and diameter for sprites.
|
||||
layer_index = PENIS_LAYER_INDEX
|
||||
var/length = 6 //inches
|
||||
var/prev_length = 6
|
||||
var/girth = 4.38
|
||||
var/girth_ratio = COCK_GIRTH_RATIO_DEF //0.73; check citadel_defines.dm
|
||||
|
||||
var/prev_length = 6 //really should be renamed to prev_length
|
||||
var/diameter = 4.38
|
||||
var/diameter_ratio = COCK_DIAMETER_RATIO_DEF //0.25; check citadel_defines.dm
|
||||
|
||||
/obj/item/organ/genital/penis/modify_size(modifier, min = -INFINITY, max = INFINITY)
|
||||
var/new_value = CLAMP(length + modifier, min, max)
|
||||
@@ -68,7 +69,7 @@
|
||||
else if ((round(length) < round(prev_length)) && (length > 0.5))
|
||||
to_chat(owner, "<span class='warning'>Your [pick(GLOB.gentlemans_organ_names)] [pick("shrinks down to", "decreases into", "diminishes into", "deflates into", "shrivels regretfully into", "contracts into")] a [uppertext(round(length))] inch penis.</b></span>")
|
||||
icon_state = sanitize_text("penis_[shape]_[size]")
|
||||
girth = (length * girth_ratio)//Is it just me or is this ludicous, why not make it exponentially decay?
|
||||
diameter = (length * diameter_ratio)//Is it just me or is this ludicous, why not make it exponentially decay?
|
||||
|
||||
|
||||
/obj/item/organ/genital/penis/update_appearance()
|
||||
@@ -77,7 +78,8 @@
|
||||
var/icon_shape = S ? S.icon_state : "human"
|
||||
icon_state = "penis_[icon_shape]_[size]"
|
||||
var/lowershape = lowertext(shape)
|
||||
desc = "You see [aroused_state ? "an erect" : "a flaccid"] [lowershape] [name]. You estimate it's about [round(length, 0.25)] inch[round(length, 0.25) != 1 ? "es" : ""] long and [round(girth, 0.25)] inch[round(girth, 0.25) != 1 ? "es" : ""] in girth."
|
||||
desc = "You see [aroused_state ? "an erect" : "a flaccid"] [lowershape] [name]. You estimate it's about [round(length, 0.25)] inch[round(length, 0.25) != 1 ? "es" : ""] long and [round(diameter, 0.25)] inch[round(diameter, 0.25) != 1 ? "es" : ""] in diameter."
|
||||
|
||||
if(owner)
|
||||
if(owner.dna.species.use_skintones && owner.dna.features["genitals_use_skintone"])
|
||||
if(ishuman(owner)) // Check before recasting type, although someone fucked up if you're not human AND have use_skintones somehow...
|
||||
@@ -97,6 +99,6 @@
|
||||
else
|
||||
color = "#[D.features["cock_color"]]"
|
||||
length = D.features["cock_length"]
|
||||
girth_ratio = D.features["cock_girth_ratio"]
|
||||
diameter_ratio = D.features["cock_diameter_ratio"]
|
||||
shape = D.features["cock_shape"]
|
||||
prev_length = length
|
||||
|
||||
@@ -168,8 +168,9 @@
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
|
||||
if(!usr.canmove || usr.stat || usr.restrained())
|
||||
return 0
|
||||
var/mob/living/L = usr
|
||||
if(!istype(L) || !CHECK_MOBILITY(L, MOBILITY_USE))
|
||||
return FALSE
|
||||
|
||||
switch(unbuttoned)
|
||||
if(0)
|
||||
|
||||
@@ -14,8 +14,7 @@ GLOBAL_PROTECT(mentor_href_token)
|
||||
/datum/mentors/New(ckey)
|
||||
if(!ckey)
|
||||
QDEL_IN(src, 0)
|
||||
throw EXCEPTION("Mentor datum created without a ckey")
|
||||
return
|
||||
CRASH("Mentor datum created without a ckey")
|
||||
target = ckey(ckey)
|
||||
name = "[ckey]'s mentor datum"
|
||||
href_token = GenerateToken()
|
||||
|
||||
@@ -8,16 +8,6 @@
|
||||
//oh no vore time
|
||||
var/voremode = FALSE
|
||||
|
||||
/mob/living/carbon/CanPass(atom/movable/mover, turf/target)
|
||||
. = ..()
|
||||
if(.)
|
||||
var/mob/living/mobdude = mover
|
||||
if(istype(mobdude))
|
||||
if(!resting && mobdude.resting)
|
||||
if(!(mobdude.pass_flags & PASSMOB))
|
||||
return FALSE
|
||||
return .
|
||||
|
||||
/mob/living/carbon/proc/toggle_combat_mode(forced, silent)
|
||||
if(!forced)
|
||||
if(recoveringstam || stat != CONSCIOUS)
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
/mob/living/carbon/human/resist_embedded()
|
||||
if(handcuffed || legcuffed || (wear_suit && wear_suit.breakouttime))
|
||||
return
|
||||
if(canmove && !on_fire)
|
||||
if(CHECK_MOBILITY(src, MOBILITY_MOVE) && !on_fire)
|
||||
for(var/obj/item/bodypart/L in bodyparts)
|
||||
if(istype(L) && L.embedded_objects.len)
|
||||
for(var/obj/item/I in L.embedded_objects)
|
||||
@@ -25,4 +25,3 @@
|
||||
if(!has_embedded_objects())
|
||||
clear_alert("embeddedobject")
|
||||
SEND_SIGNAL(user, COMSIG_CLEAR_MOOD_EVENT, "embedded")
|
||||
return
|
||||
|
||||
@@ -1,18 +1,18 @@
|
||||
/mob/living/carbon/human/Move(NewLoc, direct)
|
||||
var/oldpseudoheight = pseudo_z_axis
|
||||
. = ..()
|
||||
if(. && sprinting && !(movement_type & FLYING) && canmove && !resting && m_intent == MOVE_INTENT_RUN && has_gravity(loc) && !pulledby)
|
||||
if(. && sprinting && !(movement_type & FLYING) && CHECK_MULTIPLE_BITFIELDS(mobility_flags, MOBILITY_MOVE|MOBILITY_STAND) && m_intent == MOVE_INTENT_RUN && has_gravity(loc) && !pulledby)
|
||||
if(!HAS_TRAIT(src, TRAIT_FREESPRINT))
|
||||
doSprintLossTiles(1)
|
||||
if((oldpseudoheight - pseudo_z_axis) >= 8)
|
||||
to_chat(src, "<span class='warning'>You trip off of the elevated surface!</span>")
|
||||
for(var/obj/item/I in held_items)
|
||||
accident(I)
|
||||
Knockdown(80)
|
||||
DefaultCombatKnockdown(80)
|
||||
|
||||
/mob/living/carbon/human/movement_delay()
|
||||
. = 0
|
||||
if(!resting && m_intent == MOVE_INTENT_RUN && sprinting)
|
||||
if((mobility_flags & MOBILITY_STAND) && m_intent == MOVE_INTENT_RUN && sprinting)
|
||||
var/static/datum/config_entry/number/movedelay/sprint_speed_increase/SSI
|
||||
if(!SSI)
|
||||
SSI = CONFIG_GET_ENTRY(number/movedelay/sprint_speed_increase)
|
||||
@@ -23,7 +23,7 @@
|
||||
|
||||
/mob/living/carbon/human/proc/togglesprint() // If you call this proc outside of hotkeys or clicking the HUD button, I'll be disappointed in you.
|
||||
sprinting = !sprinting
|
||||
if(!resting && m_intent == MOVE_INTENT_RUN && canmove)
|
||||
if((m_intent == MOVE_INTENT_RUN) && CHECK_MULTIPLE_BITFIELDS(mobility_flags, MOBILITY_STAND|MOBILITY_MOVE))
|
||||
if(sprinting)
|
||||
playsound_local(src, 'sound/misc/sprintactivate.ogg', 50, FALSE, pressure_affected = FALSE)
|
||||
else
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
|
||||
/mob/living/movement_delay(ignorewalk = 0)
|
||||
. = ..()
|
||||
if(resting)
|
||||
if(!CHECK_MOBILITY(src, MOBILITY_STAND))
|
||||
. += 6
|
||||
|
||||
/atom
|
||||
@@ -53,85 +53,22 @@
|
||||
pseudo_z_axis = newloc.get_fake_z()
|
||||
pixel_z = pseudo_z_axis
|
||||
|
||||
/mob/living/proc/lay_down()
|
||||
set name = "Rest"
|
||||
set category = "IC"
|
||||
|
||||
if(client && client.prefs && client.prefs.autostand)
|
||||
intentionalresting = !intentionalresting
|
||||
to_chat(src, "<span class='notice'>You are now attempting to [intentionalresting ? "[!resting ? "lay down and ": ""]stay down" : "[resting ? "get up and ": ""]stay up"].</span>")
|
||||
if(intentionalresting && !resting)
|
||||
resting = TRUE
|
||||
update_canmove()
|
||||
else
|
||||
resist_a_rest()
|
||||
else
|
||||
if(!resting)
|
||||
resting = TRUE
|
||||
to_chat(src, "<span class='notice'>You are now laying down.</span>")
|
||||
update_canmove()
|
||||
else
|
||||
resist_a_rest()
|
||||
|
||||
/mob/living/proc/resist_a_rest(automatic = FALSE, ignoretimer = FALSE) //Lets mobs resist out of resting. Major QOL change with combat reworks.
|
||||
if(!resting || stat || attemptingstandup)
|
||||
return FALSE
|
||||
if(ignoretimer)
|
||||
resting = FALSE
|
||||
update_canmove()
|
||||
return TRUE
|
||||
else
|
||||
var/totaldelay = 3 //A little bit less than half of a second as a baseline for getting up from a rest
|
||||
if(getStaminaLoss() >= STAMINA_SOFTCRIT)
|
||||
to_chat(src, "<span class='warning'>You're too exhausted to get up!")
|
||||
return FALSE
|
||||
attemptingstandup = TRUE
|
||||
var/health_deficiency = max((maxHealth - (health - getStaminaLoss()))*0.5, 0)
|
||||
if(!has_gravity())
|
||||
health_deficiency = health_deficiency*0.2
|
||||
totaldelay += health_deficiency
|
||||
var/standupwarning = "[src] and everyone around them should probably yell at the dev team"
|
||||
switch(health_deficiency)
|
||||
if(-INFINITY to 10)
|
||||
standupwarning = "[src] stands right up!"
|
||||
if(10 to 35)
|
||||
standupwarning = "[src] tries to stand up."
|
||||
if(35 to 60)
|
||||
standupwarning = "[src] slowly pushes [p_them()]self upright."
|
||||
if(60 to 80)
|
||||
standupwarning = "[src] weakly attempts to stand up."
|
||||
if(80 to INFINITY)
|
||||
standupwarning = "[src] struggles to stand up."
|
||||
var/usernotice = automatic ? "<span class='notice'>You are now getting up. (Auto)</span>" : "<span class='notice'>You are now getting up.</span>"
|
||||
visible_message("<span class='notice'>[standupwarning]</span>", usernotice, vision_distance = 5)
|
||||
if(do_after(src, totaldelay, target = src))
|
||||
resting = FALSE
|
||||
attemptingstandup = FALSE
|
||||
update_canmove()
|
||||
return TRUE
|
||||
else
|
||||
visible_message("<span class='notice'>[src] falls right back down.</span>", "<span class='notice'>You fall right back down.</span>")
|
||||
attemptingstandup = FALSE
|
||||
if(has_gravity())
|
||||
playsound(src, "bodyfall", 20, 1)
|
||||
return FALSE
|
||||
|
||||
/mob/living/carbon/update_stamina()
|
||||
var/total_health = getStaminaLoss()
|
||||
if(total_health)
|
||||
if(!recoveringstam && total_health >= STAMINA_CRIT && !stat)
|
||||
to_chat(src, "<span class='notice'>You're too exhausted to keep going...</span>")
|
||||
resting = TRUE
|
||||
set_resting(TRUE, FALSE, FALSE)
|
||||
if(combatmode)
|
||||
toggle_combat_mode(TRUE)
|
||||
recoveringstam = TRUE
|
||||
filters += CIT_FILTER_STAMINACRIT
|
||||
update_canmove()
|
||||
update_mobility()
|
||||
if(recoveringstam && total_health <= STAMINA_SOFTCRIT)
|
||||
to_chat(src, "<span class='notice'>You don't feel nearly as exhausted anymore.</span>")
|
||||
recoveringstam = FALSE
|
||||
filters -= CIT_FILTER_STAMINACRIT
|
||||
update_canmove()
|
||||
update_mobility()
|
||||
update_health_hud()
|
||||
|
||||
/mob/living/proc/update_hud_sprint_bar()
|
||||
|
||||
@@ -54,8 +54,8 @@ SLEEPER CODE IS IN game/objects/items/devices/dogborg_sleeper.dm !
|
||||
var/mob/living/M = A
|
||||
var/cachedstam = M.getStaminaLoss()
|
||||
var/totalstuntime = cachedstam * stamtostunconversion * (M.lying ? 2 : 1)
|
||||
if(!M.resting)
|
||||
M.Knockdown(cachedstam*2) //BORK BORK. GET DOWN.
|
||||
if(CHECK_MOBILITY(M, MOBILITY_STAND))
|
||||
M.DefaultCombatKnockdown(cachedstam*2) //BORK BORK. GET DOWN.
|
||||
M.Stun(totalstuntime)
|
||||
user.do_attack_animation(A, ATTACK_EFFECT_BITE)
|
||||
user.start_pulling(M, TRUE) //Yip yip. Come with.
|
||||
@@ -284,7 +284,7 @@ SLEEPER CODE IS IN game/objects/items/devices/dogborg_sleeper.dm !
|
||||
to_chat(R, "Insufficent Power!")
|
||||
return
|
||||
L.Stun(4) // normal stunbaton is force 7 gimme a break good sir!
|
||||
L.Knockdown(80)
|
||||
L.DefaultCombatKnockdown(80)
|
||||
L.apply_effect(EFFECT_STUTTER, 4)
|
||||
L.visible_message("<span class='danger'>[R] has shocked [L] with its tongue!</span>", \
|
||||
"<span class='userdanger'>[R] has shocked you with its tongue!</span>")
|
||||
@@ -426,13 +426,13 @@ SLEEPER CODE IS IN game/objects/items/devices/dogborg_sleeper.dm !
|
||||
var/mob/living/L = hit_atom
|
||||
if(!L.check_shields(0, "the [name]", src, attack_type = LEAP_ATTACK))
|
||||
L.visible_message("<span class ='danger'>[src] pounces on [L]!</span>", "<span class ='userdanger'>[src] pounces on you!</span>")
|
||||
L.Knockdown(iscarbon(L) ? 60 : 45, override_stamdmg = CLAMP(pounce_stamloss, 0, pounce_stamloss_cap-L.getStaminaLoss())) // Temporary. If someone could rework how dogborg pounces work to accomodate for combat changes, that'd be nice.
|
||||
L.DefaultCombatKnockdown(iscarbon(L) ? 60 : 45, override_stamdmg = CLAMP(pounce_stamloss, 0, pounce_stamloss_cap-L.getStaminaLoss())) // Temporary. If someone could rework how dogborg pounces work to accomodate for combat changes, that'd be nice.
|
||||
playsound(src, 'sound/weapons/Egloves.ogg', 50, 1)
|
||||
sleep(2)//Runtime prevention (infinite bump() calls on hulks)
|
||||
step_towards(src,L)
|
||||
log_combat(src, L, "borg pounced")
|
||||
else
|
||||
Knockdown(15, 1, 1)
|
||||
DefaultCombatKnockdown(15, 1, 1)
|
||||
|
||||
pounce_cooldown = !pounce_cooldown
|
||||
spawn(pounce_cooldown_time) //3s by default
|
||||
@@ -440,10 +440,10 @@ SLEEPER CODE IS IN game/objects/items/devices/dogborg_sleeper.dm !
|
||||
else if(hit_atom.density && !hit_atom.CanPass(src))
|
||||
visible_message("<span class ='danger'>[src] smashes into [hit_atom]!</span>", "<span class ='userdanger'>You smash into [hit_atom]!</span>")
|
||||
playsound(src, 'sound/items/trayhit1.ogg', 50, 1)
|
||||
Knockdown(15, 1, 1)
|
||||
DefaultCombatKnockdown(15, 1, 1)
|
||||
|
||||
if(leaping)
|
||||
leaping = 0
|
||||
pixel_y = initial(pixel_y)
|
||||
update_icons()
|
||||
update_canmove()
|
||||
update_mobility()
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/mob/living/silicon/robot/Move(NewLoc, direct)
|
||||
. = ..()
|
||||
if(. && sprinting && !(movement_type & FLYING) && canmove && !resting)
|
||||
if(. && sprinting && !(movement_type & FLYING) && CHECK_MULTIPLE_BITFIELDS(mobility_flags, MOBILITY_STAND | MOBILITY_MOVE))
|
||||
if(!(cell?.use(25)))
|
||||
togglesprint(TRUE)
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
if(!shutdown && (!cell || cell.charge < 25) || !cansprint)
|
||||
return FALSE
|
||||
sprinting = shutdown ? FALSE : !sprinting
|
||||
if(!resting && canmove)
|
||||
if(CHECK_MULTIPLE_BITFIELDS(mobility_flags, MOBILITY_STAND|MOBILITY_MOVE))
|
||||
if(sprinting)
|
||||
playsound_local(src, 'sound/misc/sprintactivate.ogg', 50, FALSE, pressure_affected = FALSE)
|
||||
else
|
||||
|
||||
@@ -100,7 +100,7 @@
|
||||
if(addiction_stage == 11)
|
||||
to_chat(M, "<span class='userdanger'>You start to convlse violently as you feel your consciousness split and merge across realities as your possessions fly wildy off your body.</span>")
|
||||
M.Jitter(200)
|
||||
M.Knockdown(200)
|
||||
M.DefaultCombatKnockdown(200)
|
||||
M.Stun(80)
|
||||
var/items = M.get_contents()
|
||||
if(!LAZYLEN(items))
|
||||
@@ -154,7 +154,7 @@
|
||||
do_sparks(5,FALSE,M)
|
||||
M.Sleeping(100, 0)
|
||||
M.Jitter(50)
|
||||
M.Knockdown(100)
|
||||
M.DefaultCombatKnockdown(100)
|
||||
to_chat(M, "<span class='userdanger'>You feel your eigenstate settle, snapping an alternative version of yourself into reality. All your previous memories are lost and replaced with the alternative version of yourself.</span>")
|
||||
M.emote("me",1,"flashes into reality suddenly, gasping as they gaze around in a bewildered and highly confused fashion!",TRUE)
|
||||
log_game("FERMICHEM: [M] ckey: [M.key] has become an alternative universe version of themselves.")
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
M.visible_message("<span class='warning'>A pair of breasts suddenly fly out of the [M]!</b></span>")
|
||||
var/T2 = get_random_station_turf()
|
||||
M.adjustBruteLoss(25)
|
||||
M.Knockdown(50)
|
||||
M.DefaultCombatKnockdown(50)
|
||||
M.Stun(50)
|
||||
B.throw_at(T2, 8, 1)
|
||||
M.reagents.del_reagent(type)
|
||||
@@ -196,7 +196,7 @@
|
||||
M.visible_message("<span class='warning'>A penis suddenly flies out of the [M]!</b></span>")
|
||||
var/T2 = get_random_station_turf()
|
||||
M.adjustBruteLoss(25)
|
||||
M.Knockdown(50)
|
||||
M.DefaultCombatKnockdown(50)
|
||||
M.Stun(50)
|
||||
P.throw_at(T2, 8, 1)
|
||||
M.reagents.del_reagent(type)
|
||||
|
||||
@@ -93,7 +93,7 @@
|
||||
if(method == INJECT)
|
||||
var/turf/T = get_turf(M)
|
||||
M.adjustOxyLoss(15)
|
||||
M.Knockdown(50)
|
||||
M.DefaultCombatKnockdown(50)
|
||||
M.Stun(50)
|
||||
M.emote("cough")
|
||||
var/obj/item/toy/plush/P = pick(subtypesof(/obj/item/toy/plush))
|
||||
|
||||
@@ -349,14 +349,9 @@
|
||||
E.data["creatorID"] = B.data["ckey"]
|
||||
E.creatorID = B.data["ckey"]
|
||||
|
||||
/datum/chemical_reaction/fermi/enthrall/FermiExplode(datum/reagents, var/atom/my_atom, volume, temp, pH)
|
||||
var/turf/T = get_turf(my_atom)
|
||||
var/datum/reagents/R = new/datum/reagents(1000)
|
||||
var/datum/effect_system/smoke_spread/chem/s = new()
|
||||
R.add_reagent(/datum/reagent/fermi/enthrallExplo, volume)
|
||||
s.set_up(R, volume/2, T)
|
||||
s.start()
|
||||
my_atom.reagents.clear_reagents()
|
||||
/datum/chemical_reaction/fermi/enthrall/FermiExplode(datum/reagents/R0, var/atom/my_atom, volume, temp, pH)
|
||||
R0.clear_reagents()
|
||||
..()
|
||||
|
||||
/datum/chemical_reaction/fermi/hatmium // done
|
||||
name = "Hat growth serum"
|
||||
|
||||
Reference in New Issue
Block a user