Merge pull request #6265 from purplefoxy27/in-shoe-steppies

Add inshoe steppies
This commit is contained in:
Raeschen
2023-06-19 09:08:59 +02:00
committed by GitHub
5 changed files with 93 additions and 9 deletions
+1 -1
View File
@@ -108,7 +108,7 @@
if(H.shoes)
var/obj/item/clothing/shoes/S = H.shoes
if(istype(S))
S.handle_movement(src,(H.m_intent == "run" ? 1 : 0))
S.handle_movement(src,(H.m_intent == "run" ? 1 : 0), H) // CHOMPEdit handle_movement now needs to know who is moving, for inshoe steppies
if(S.track_blood && S.blood_DNA)
bloodDNA = S.blood_DNA
bloodcolor=S.blood_color
+10 -6
View File
@@ -704,15 +704,19 @@
update_icon()
return ..()
/obj/item/clothing/shoes/proc/handle_movement(var/turf/walking, var/running)
if(prob(1) && !recent_squish) //VOREStation edit begin
// CHOMPEdit Begin - tweaking handle_movement for inshoes steppies
/obj/item/clothing/shoes/proc/handle_movement(var/turf/walking, var/running, var/mob/living/carbon/human/pred)
if(!recent_squish && istype(pred))
recent_squish = 1
spawn(100)
spawn(40) // Cooldown reduced from 100 to 40. Faster, but not that spammy
recent_squish = 0
for(var/mob/living/M in contents)
var/emote = pick(inside_emotes)
to_chat(M,emote) //VOREStation edit end
return
if(pred.step_mechanics_pref && M.step_mechanics_pref)
src.handle_inshoe_stepping(pred, M)
else if (prob(1)) // Same old inshoe mechanics
var/emote = pick(inside_emotes)
to_chat(M,emote)
return //CHOMPEDIT End
/obj/item/clothing/shoes/update_clothing_icon()
if (ismob(src.loc))
+5
View File
@@ -570,6 +570,11 @@
G.can_revert = TRUE
qdel(G)
log_and_message_admins("[key_name(src)] used the OOC escape button to revert back from being petrified.")
//CHOMPEdit - In-shoe OOC escape. Checking voices as precaution if something akin to obj TF or possession happens
else if(!istype(src, /mob/living/voice) && istype(src.loc, /obj/item/clothing/shoes))
var/obj/item/clothing/shoes/S = src.loc
forceMove(get_turf(src))
log_and_message_admins("[key_name(src)] used the OOC escape button to escape from of a pair of shoes. [ADMIN_FLW(src)] - Shoes [ADMIN_VV(S)]")
//Don't appear to be in a vore situation
else
to_chat(src,"<span class='alert'>You aren't inside anyone, though, is the thing.</span>")
@@ -81,4 +81,77 @@
/obj/item/clothing/under/equipped(var/mob/user, var/slot)
. = ..()
handle_digitigrade(user)
handle_digitigrade(user)
//In shoe steppies!
/obj/item/clothing/shoes/proc/handle_inshoe_stepping(var/mob/living/carbon/human/pred, var/mob/living/carbon/human/prey)
if(!istype(pred)) return //Sorry, inshoe steppies only for carbon/human/ for now. Based on the regular stepping mechanics
if(!istype(prey)) return
if(!pred.canmove || pred.buckled) return //We can't be stepping on anyone if buckled or incapable of moving
if(pred in buckled_mobs) return
if(pred.flying) return //If we're flying, can't really step.
// I kept interactions very similar to normal steppies, and removed some attack logs unless harm intent:
// I_HELP: No painful description, messages only sent to prey. Similar to inshoe steppies from before.
// I_DISARM: Painful yet harmless descriptions, weaken on walk. Attack logs on weaken.
// I_GRAB: Grabby/Squishing descriptions, weaken on walk. Attack logs on weaken.
// I_HARM: Rand .5-1.5 multiplied by .25 min or 1.75 max, multiplied by 3.5 on walk. Ranges from .125 min to 9.1875 max damage to each limb
var/message_pred = null
var/message_prey = null
switch(pred.a_intent)
if(I_HELP)
if(pred.m_intent == "run")
message_prey = "[pred] moves, pressing down on you within their [name] with each step."
else
message_prey = "As [pred] walks, their foot presses you tightly against the sole of their [name]!"
if(I_DISARM)
if(pred.m_intent == "run")
message_pred = "You step on [prey], squishing and pinning them within your [name]!"
message_prey = "[pred] steps on you, squishing and pinning you within their [name]!"
else
message_pred = "You firmly push your foot down on [prey], painfully but harmlessly pinning them to the sole of your [name]!"
message_prey = "[pred] firmly pushes their foot down on you, painfully but harmlessly pinning you to the sole of their [name]!"
prey.Weaken(5) // For flavour, only noticed prey if tossed out of shoe
add_attack_logs(pred, prey, "Pinned inshoe (walk, weaken(5))")
if(I_GRAB)
if(pred.m_intent == "run")
message_pred = "You step down onto [prey], squishing and trapping them inbetween your toes!"
message_prey = "[pred] steps down on you, squishing and trapping you inbetween their toes!"
else
message_pred = "You pin [prey] down against the sole of your [name] with your foot, your toes curling up around their body, tightly trapping them inbetween them!"
message_prey = "[pred] pins you down against the sole of their [name] with their foot, their toes curling up around your body, tighly trapping you inbetween them!"
prey.Weaken(5) // For flavour, only noticed prey if tossed out of shoe
add_attack_logs(pred, prey, "Grabbed inshoe (walk, weaken(5))")
if(I_HURT)
var/size_damage_multiplier = pred.size_multiplier - prey.size_multiplier
if(size_damage_multiplier < 0) // In case of odd situations such as wearing a shoe containing someone bigger than you.
size_damage_multiplier = 0
//Assuming regular micro pickup sizes outside dorms, size_damage multiplier should range from .25 to 1.75... right?
var/damage = (rand(5, 15) * size_damage_multiplier) / 10 // This will sting, but not kill unless pred walks. Will range from .125 to 2.625 damage, randomly, to each limb
if(pred.m_intent == "run")
message_pred = "You carelessly step down onto [prey], crushing them within your [name]!"
message_prey = "[pred] steps carelessly on your body, crushing you within their [name]!"
add_attack_logs(pred, prey, "Crushed underfoot (run, about [damage] damage per limb)")
else
message_pred = "You methodically place your foot down upon [prey]'s body, applying pressure, crushing them against the sole of your [name]!"
message_prey = "[pred] methodically places their foot upon your body, applying pressure, crushing you against the sole of their [name]!"
damage *= 3.5 //Walking damage multiplier
add_attack_logs(pred, prey, "Crushed underfoot (walk, about [damage] damage per limb)")
for(var/obj/item/organ/external/I in prey.organs)
// Running Total: 1.50 damage min, 28.875 damage max, depending on size & RNG.
// Walking Total: 5.25 damage min, 101.0625 damage max, depending on size & RNG. Ouch.
I.take_damage(damage, 0)
if(message_pred != null)
to_chat(pred, "<span class='warning'>[message_pred]</span>")
to_chat(prey, "<span class='warning'>[message_prey]</span>")
return
@@ -49,7 +49,9 @@ When editing the list, please try and keep similar probabilities near each other
prob(10); "[info] Not every hostile NPC you encounter while mining or exploring need to be defeated. Sometimes, it's better to avoid or run away from them.",
prob(1); "[info] Stay robust, my friends.",
prob(35); "[info] You can insert your I.D into your PDA. This frees up your belt from having to carry your PDA. Furthermore, by clicking and dragging the PDA to game screen, you can use it without holding it!",
prob(35); "[info] Your vore-bellies have multiple add-ons! Muffling is excellent to ensure your prey does not accidentally inform everyone about their predicament, and jam suit sensors is a great courtesy to avoid medical being worried about your prey!"
prob(35); "[info] Your vore-bellies have multiple add-ons! Muffling is excellent to ensure your prey does not accidentally inform everyone about their predicament, and jam suit sensors is a great courtesy to avoid medical being worried about your prey!",
prob(35); "[info] Remember to check your vore panel preferences! There you can find toggles for things other than just vore(tm), such as stepping mechanics and spontaneous transformation.",
prob(25); "[info] If you would like to toggle stepping mechanics, head to the vore panel and click on personal preferences! Disabling stepping mechanics will disable stepping descriptions and will prevent your character from taking damage if a bigger character walks over yours with harm intent. Your character will still be stunned, however."
)
if("roleplay")