Fixes compile issues with vore code (#362)
* Fixes compile issues with vore code * Update voreconstants.dm * Update resize_vr.dm * Update tgstation.dme * Update parrot.dm * Update pet.dm * Update fox.dm * Update mouse.dm * Update farm_animals.dm * Update dog.dm * Update cat.dm * Update monkey.dm * Update alien.dm * Update vore_vr.dm * Update vorepanel_vr.dm * Update bellymodes_vr.dm * Update belly_vr.dm * Update living_vr.dm * Update voreconstants.dm * Update fox.dm
This commit is contained in:
@@ -29,6 +29,7 @@
|
||||
var/leaping = 0
|
||||
gib_type = /obj/effect/decal/cleanable/xenoblood/xgibs
|
||||
unique_name = 1
|
||||
devourable = TRUE
|
||||
|
||||
var/static/regex/alien_name_regex = new("alien (larva|sentinel|drone|hunter|praetorian|queen)( \\(\\d+\\))?")
|
||||
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
unique_name = 1
|
||||
bodyparts = list(/obj/item/bodypart/chest/monkey, /obj/item/bodypart/head/monkey, /obj/item/bodypart/l_arm/monkey,
|
||||
/obj/item/bodypart/r_arm/monkey, /obj/item/bodypart/r_leg/monkey, /obj/item/bodypart/l_leg/monkey)
|
||||
devourable = TRUE
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
var/turns_since_scan = 0
|
||||
var/mob/living/simple_animal/mouse/movement_target
|
||||
gold_core_spawnable = 2
|
||||
devourable = TRUE
|
||||
|
||||
/mob/living/simple_animal/pet/cat/Initialize()
|
||||
..()
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
see_in_dark = 5
|
||||
speak_chance = 1
|
||||
turns_per_move = 10
|
||||
devourable = TRUE
|
||||
|
||||
//Corgis and pugs are now under one dog subtype
|
||||
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
stop_automated_movement_when_pulled = 1
|
||||
blood_volume = BLOOD_VOLUME_NORMAL
|
||||
var/obj/item/udder/udder = null
|
||||
devourable = TRUE
|
||||
|
||||
/mob/living/simple_animal/hostile/retaliate/goat/Initialize()
|
||||
udder = new()
|
||||
@@ -105,6 +106,7 @@
|
||||
var/obj/item/udder/udder = null
|
||||
gold_core_spawnable = 2
|
||||
blood_volume = BLOOD_VOLUME_NORMAL
|
||||
devourable = TRUE
|
||||
|
||||
/mob/living/simple_animal/cow/Initialize()
|
||||
udder = new()
|
||||
@@ -180,6 +182,7 @@
|
||||
pass_flags = PASSTABLE | PASSGRILLE | PASSMOB
|
||||
mob_size = MOB_SIZE_TINY
|
||||
gold_core_spawnable = 2
|
||||
devourable = TRUE
|
||||
|
||||
/mob/living/simple_animal/chick/Initialize()
|
||||
..()
|
||||
@@ -235,6 +238,7 @@
|
||||
var/list/validColors = list("brown","black","white")
|
||||
gold_core_spawnable = 2
|
||||
var/static/chicken_count = 0
|
||||
devourable = TRUE
|
||||
|
||||
/mob/living/simple_animal/chicken/Initialize()
|
||||
..()
|
||||
|
||||
@@ -18,6 +18,46 @@
|
||||
response_disarm = "gently pushes aside"
|
||||
response_harm = "kicks"
|
||||
gold_core_spawnable = 2
|
||||
devourable = TRUE
|
||||
var/mob/living/simple_animal/mouse/movement_target
|
||||
var/turns_since_scan = 0
|
||||
|
||||
/mob/living/simple_animal/pet/fox/Life()
|
||||
//MICE!
|
||||
if((src.loc) && isturf(src.loc))
|
||||
if(!stat && !resting && !buckled)
|
||||
for(var/mob/living/simple_animal/mouse/M in view(1,src))
|
||||
if(!M.stat && Adjacent(M))
|
||||
emote("me", 1, "splats \the [M]!")
|
||||
M.splat()
|
||||
movement_target = null
|
||||
stop_automated_movement = 0
|
||||
break
|
||||
for(var/obj/item/toy/cattoy/T in view(1,src))
|
||||
if (T.cooldown < (world.time - 400))
|
||||
emote("me", 1, "bats \the [T] around with its paw!")
|
||||
T.cooldown = world.time
|
||||
|
||||
..()
|
||||
|
||||
if(!stat && !resting && !buckled)
|
||||
turns_since_scan++
|
||||
if(turns_since_scan > 5)
|
||||
walk_to(src,0)
|
||||
turns_since_scan = 0
|
||||
if((movement_target) && !(isturf(movement_target.loc) || ishuman(movement_target.loc) ))
|
||||
movement_target = null
|
||||
stop_automated_movement = 0
|
||||
if( !movement_target || !(movement_target.loc in oview(src, 3)) )
|
||||
movement_target = null
|
||||
stop_automated_movement = 0
|
||||
for(var/mob/living/simple_animal/mouse/snack in oview(src,3))
|
||||
if(isturf(snack.loc) && !snack.stat)
|
||||
movement_target = snack
|
||||
break
|
||||
if(movement_target)
|
||||
stop_automated_movement = 1
|
||||
walk_to(src,movement_target,0,3)
|
||||
|
||||
//Captain fox
|
||||
/mob/living/simple_animal/pet/fox/Renault
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
var/body_color //brown, gray and white, leave blank for random
|
||||
gold_core_spawnable = 2
|
||||
var/chew_probability = 1
|
||||
devourable = TRUE
|
||||
|
||||
/mob/living/simple_animal/mouse/Initialize()
|
||||
..()
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
var/image/collar = null
|
||||
var/image/pettag = null
|
||||
blood_volume = BLOOD_VOLUME_NORMAL
|
||||
devourable = TRUE
|
||||
|
||||
/mob/living/simple_animal/pet/attackby(obj/item/O, mob/user, params)
|
||||
if(istype(O, /obj/item/clothing/neck/petcollar) && !pcollar)
|
||||
|
||||
@@ -59,6 +59,7 @@
|
||||
mob_size = MOB_SIZE_SMALL
|
||||
movement_type = FLYING
|
||||
gold_core_spawnable = 2
|
||||
devourable = TRUE
|
||||
|
||||
var/parrot_damage_upper = 10
|
||||
var/parrot_state = PARROT_WANDER //Hunt for a perch when created
|
||||
|
||||
@@ -16,15 +16,15 @@
|
||||
var/human_prey_swallow_time = 100 // Time in deciseconds to swallow /mob/living/carbon/human
|
||||
var/nonhuman_prey_swallow_time = 60 // Time in deciseconds to swallow anything else
|
||||
var/emoteTime = 300 // How long between stomach emotes at prey
|
||||
var/digest_brute = 1 // Brute damage per tick in digestion mode
|
||||
var/digest_burn = 3 // Burn damage per tick in digestion mode
|
||||
var/digest_brute = 0 // Brute damage per tick in digestion mode
|
||||
var/digest_burn = 1 // Burn damage per tick in digestion mode
|
||||
var/digest_tickrate = 9 // Modulus this of air controller tick number to iterate gurgles on
|
||||
var/immutable = FALSE // Prevents this belly from being deleted
|
||||
var/escapable = TRUE // Belly can be resisted out of at any time
|
||||
var/escapetime = 200 // Deciseconds, how long to escape this belly
|
||||
var/escapechance = 45 // % Chance of prey beginning to escape if prey struggles.
|
||||
var/tmp/digest_mode = DM_HOLD // Whether or not to digest. Default to not digest.
|
||||
var/tmp/list/digest_modes = list(DM_HOLD,DM_DIGEST,DM_HEAL,DM_DIGESTF) // Possible digest modes
|
||||
var/tmp/list/digest_modes = list(DM_HOLD,DM_DIGEST,DM_HEAL) // Possible digest modes
|
||||
var/tmp/mob/living/owner // The mob whose belly this is.
|
||||
var/tmp/list/internal_contents = list() // People/Things you've eaten into this belly!
|
||||
var/tmp/is_full // Flag for if digested remeans are present. (for disposal messages)
|
||||
@@ -232,7 +232,7 @@
|
||||
for (var/mob/subprey in belly.internal_contents)
|
||||
subprey.loc = owner
|
||||
internal_contents.Add(subprey)
|
||||
subprey << "As [M] melts away around you, you find yourself in [owner]'s [name]"
|
||||
to_chat(subprey, "As [M] melts away around you, you find yourself in [owner]'s [name]")
|
||||
|
||||
//Drop all items into the belly.
|
||||
for(var/obj/item/W in M)
|
||||
@@ -254,8 +254,8 @@
|
||||
R.setClickCooldown(50)
|
||||
|
||||
if(owner.stat) //If owner is stat (dead, KO) we can actually escape
|
||||
R << "<span class='warning'>You attempt to climb out of \the [name]. (This will take around [escapetime/10] seconds.)</span>"
|
||||
owner << "<span class='warning'>Someone is attempting to climb out of your [name]!</span>"
|
||||
to_chat(R, "<span class='warning'>You attempt to climb out of \the [name]. (This will take around [escapetime/10] seconds.)</span>")
|
||||
to_chat(owner, "<span class='warning'>Someone is attempting to climb out of your [name]!</span>")
|
||||
|
||||
if(do_after(R, escapetime, owner))
|
||||
if((owner.stat || escapable) && (R in internal_contents)) //Can still escape?
|
||||
@@ -264,8 +264,8 @@
|
||||
else if(!(R in internal_contents)) //Aren't even in the belly. Quietly fail.
|
||||
return
|
||||
else //Belly became inescapable or mob revived
|
||||
R << "<span class='warning'>Your attempt to escape [name] has failed!</span>"
|
||||
owner << "<span class='notice'>The attempt to escape from your [name] has failed!</span>"
|
||||
to_chat(R, "<span class='warning'>Your attempt to escape [name] has failed!</span>")
|
||||
to_chat(owner, "<span class='notice'>The attempt to escape from your [name] has failed!</span>")
|
||||
return
|
||||
return
|
||||
var/struggle_outer_message = pick(struggle_messages_outside)
|
||||
@@ -288,27 +288,27 @@
|
||||
playsound(R.loc, "struggle_sounds", 50, 0, -5)
|
||||
|
||||
if(escapable && R.a_intent != "help") //If the stomach has escapable enabled and the person is actually trying to kick out
|
||||
R << "<span class='warning'>You attempt to climb out of \the [name].</span>"
|
||||
owner << "<span class='warning'>Someone is attempting to climb out of your [name]!</span>"
|
||||
to_chat(R, "<span class='warning'>You attempt to climb out of \the [name].</span>")
|
||||
to_chat(owner, "<span class='warning'>Someone is attempting to climb out of your [name]!</span>")
|
||||
if(prob(escapechance)) //Let's have it check to see if the prey escapes first.
|
||||
if(do_after(R, escapetime))
|
||||
if((escapable) && (R in internal_contents)) //Does the owner still have escapable enabled?
|
||||
release_specific_contents(R)
|
||||
R << "<span class='warning'>You climb out of \the [name].</span>"
|
||||
owner << "<span class='warning'>[R] climbs out of your [name]!</span>"
|
||||
to_chat(R, "<span class='warning'>You climb out of \the [name].</span>")
|
||||
to_chat(owner, "<span class='warning'>[R] climbs out of your [name]!</span>")
|
||||
for(var/mob/M in hearers(4, owner))
|
||||
M.visible_message("<span class='warning'>[R] climbs out of [owner]'s [name]!</span>", 2)
|
||||
return
|
||||
else if(!(R in internal_contents)) //Aren't even in the belly. Quietly fail.
|
||||
return
|
||||
else //Belly became inescapable.
|
||||
R << "<span class='warning'>Your attempt to escape [name] has failed!</span>"
|
||||
owner << "<span class='notice'>The attempt to escape from your [name] has failed!</span>"
|
||||
to_chat(R, "<span class='warning'>Your attempt to escape [name] has failed!</span>")
|
||||
to_chat(owner, "<span class='notice'>The attempt to escape from your [name] has failed!/span>")
|
||||
return
|
||||
|
||||
else //Nothing interesting happened.
|
||||
R << "<span class='warning'>But make no progress in escaping [owner]'s [name].</span>"
|
||||
owner << "<span class='warning'>But appears to be unable to make any progress in escaping your [name].</span>"
|
||||
to_chat(R, "<span class='warning'>But make no progress in escaping [owner]'s [name].</span>")
|
||||
to_chat(owner, "<span class='warning'>But appears to be unable to make any progress in escaping your [name].</span>")
|
||||
return
|
||||
else
|
||||
return
|
||||
@@ -366,4 +366,4 @@
|
||||
for(var/I in emote_lists[K])
|
||||
dupe.emote_lists[K] += I
|
||||
|
||||
return dupe
|
||||
return dupe
|
||||
|
||||
@@ -42,8 +42,8 @@
|
||||
digest_alert_prey = replacetext(digest_alert_prey,"%belly",lowertext(name))
|
||||
|
||||
//Send messages
|
||||
owner << "<span class='warning'>" + digest_alert_owner + "</span>"
|
||||
M << "<span class='userdanger'>" + digest_alert_prey + "</span>"
|
||||
to_chat(owner, "<span class='warning'>[digest_alert_owner]</span>")
|
||||
M.visible_message("<span class='notice'>You watch as [owner]'s form loses its additions.</span>", "<span class='warning'>[digest_alert_prey]</span>")
|
||||
|
||||
owner.nutrition += 400 // so eating dead mobs gives you *something*.
|
||||
playsound(owner.loc, "death_gurgles", 50, 0, -5)
|
||||
@@ -58,49 +58,6 @@
|
||||
owner.nutrition += 1
|
||||
return
|
||||
|
||||
//////////////////////////// DM_DIGESTF ////////////////////////////
|
||||
if(digest_mode == DM_DIGESTF)
|
||||
|
||||
if(prob(50))
|
||||
playsound(owner.loc, "digestion_sounds", 55, 0, -3) //slightly louder 'cuz heavier gurgles
|
||||
|
||||
for (var/mob/living/M in internal_contents)
|
||||
//Pref protection!
|
||||
if (!M.digestable)
|
||||
continue
|
||||
|
||||
//Person just died in guts!
|
||||
if(M.stat == DEAD)
|
||||
var/digest_alert_owner = pick(digest_messages_owner)
|
||||
var/digest_alert_prey = pick(digest_messages_prey)
|
||||
|
||||
//Replace placeholder vars
|
||||
digest_alert_owner = replacetext(digest_alert_owner,"%pred",owner)
|
||||
digest_alert_owner = replacetext(digest_alert_owner,"%prey",M)
|
||||
digest_alert_owner = replacetext(digest_alert_owner,"%belly",lowertext(name))
|
||||
|
||||
digest_alert_prey = replacetext(digest_alert_prey,"%pred",owner)
|
||||
digest_alert_prey = replacetext(digest_alert_prey,"%prey",M)
|
||||
digest_alert_prey = replacetext(digest_alert_prey,"%belly",lowertext(name))
|
||||
|
||||
//Send messages
|
||||
owner << "<span class='warning'>" + digest_alert_owner + "</span>"
|
||||
M << "<span class='userdanger'>" + digest_alert_prey + "</span>"
|
||||
M.visible_message("<span class='userdanger'>[digest_alert_owner]</span>", "<span class='warning'>[digest_alert_prey]</span>",
|
||||
"<span class='notice'>You watch as [owner]'s form lose its additions.</span>")
|
||||
owner.nutrition += 400 // so eating dead mobs gives you *something*.
|
||||
playsound(owner.loc, "death_gurgles", 50, 0, -5)
|
||||
digestion_death(M)
|
||||
owner.update_icons()
|
||||
continue
|
||||
|
||||
// Deal digestion damage (and feed the pred)
|
||||
if(!(M.status_flags & GODMODE))
|
||||
M.adjustBruteLoss(2)
|
||||
M.adjustFireLoss(3)
|
||||
owner.nutrition += 1
|
||||
return
|
||||
|
||||
///////////////////////////// DM_HEAL /////////////////////////////
|
||||
if(digest_mode == DM_HEAL)
|
||||
if(prob(50))
|
||||
@@ -112,4 +69,4 @@
|
||||
M.adjustBruteLoss(-1)
|
||||
M.adjustFireLoss(-1)
|
||||
owner.nutrition -= 10
|
||||
return
|
||||
return
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
///////////////////// Mob Living /////////////////////
|
||||
/mob/living
|
||||
var/digestable = 1 // Can the mob be digested inside a belly?
|
||||
var/digestable = TRUE // Can the mob be digested inside a belly?
|
||||
var/datum/belly/vore_selected // Default to no vore capability.
|
||||
var/list/vore_organs = list() // List of vore containers inside a mob
|
||||
var/devourable = 0 // Can the mob be vored at all?
|
||||
// var/feeding = 0 // Are we going to feed someone else?
|
||||
var/devourable = FALSE // Can the mob be vored at all?
|
||||
// var/feeding = FALSE // Are we going to feed someone else?
|
||||
|
||||
|
||||
//
|
||||
@@ -73,13 +73,13 @@
|
||||
// if(!feeding(src))
|
||||
// return
|
||||
if(!is_vore_predator(prey))
|
||||
user << "<span class='notice'>They aren't voracious enough.</span>"
|
||||
to_chat(user, "<span class='notice'>They aren't voracious enough.</span>")
|
||||
return
|
||||
feed_self_to_grabbed(user, src)
|
||||
|
||||
if(user == src) //you click yourself
|
||||
if(!is_vore_predator(src))
|
||||
user << "<span class='notice'>You aren't voracious enough.</span>"
|
||||
to_chat(user, "<span class='notice'>You aren't voracious enough.</span>")
|
||||
return
|
||||
user.feed_grabbed_to_self(src, prey)
|
||||
|
||||
@@ -87,7 +87,7 @@
|
||||
// if(!feeding(src))
|
||||
// return
|
||||
if(!is_vore_predator(src))
|
||||
user << "<span class='notice'>They aren't voracious enough.</span>"
|
||||
to_chat(user, "<span class='notice'>They aren't voracious enough.</span>")
|
||||
return
|
||||
feed_grabbed_to_other(user, prey, src)
|
||||
//
|
||||
@@ -123,7 +123,7 @@
|
||||
if(!user || !prey || !pred || !belly || !(belly in pred.vore_organs))
|
||||
return
|
||||
if (!prey.devourable)
|
||||
user << "This can't be eaten!"
|
||||
to_chat(user, "This can't be eaten!")
|
||||
return
|
||||
// The belly selected at the time of noms
|
||||
var/datum/belly/belly_target = pred.vore_organs[belly]
|
||||
@@ -267,7 +267,7 @@
|
||||
pred.update_icons()
|
||||
|
||||
else
|
||||
src << "<span class='alert'>You aren't inside anything, you clod.</span>"
|
||||
to_chat(src, "<span class='alert'>You aren't inside anything, you clod.</span>")
|
||||
|
||||
//
|
||||
// Verb for saving vore preferences to save file
|
||||
@@ -323,4 +323,4 @@
|
||||
var/datum/belly/Bp = P.belly_prefs[I]
|
||||
src.vore_organs[Bp.name] = Bp.copy(src)
|
||||
|
||||
return TRUE
|
||||
return TRUE
|
||||
|
||||
@@ -38,8 +38,8 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
|
||||
|
||||
/datum/vore_preferences
|
||||
//Actual preferences
|
||||
var/digestable = 1
|
||||
var/devourable = 0
|
||||
var/digestable = TRUE
|
||||
var/devourable = FALSE
|
||||
var/list/belly_prefs = list()
|
||||
|
||||
//Mechanically required
|
||||
@@ -82,19 +82,19 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
|
||||
// Save/Load Vore Preferences
|
||||
//
|
||||
/datum/vore_preferences/proc/load_vore()
|
||||
if(!client || !client_ckey) return 0 //No client, how can we save?
|
||||
if(!client || !client_ckey) return FALSE //No client, how can we save?
|
||||
|
||||
slot = client.prefs.default_slot
|
||||
|
||||
path = client.prefs.path
|
||||
|
||||
if(!path) return 0 //Path couldn't be set?
|
||||
if(!path) return FALSE //Path couldn't be set?
|
||||
if(!fexists(path)) //Never saved before
|
||||
save_vore() //Make the file first
|
||||
return TRUE
|
||||
|
||||
var/savefile/S = new /savefile(path)
|
||||
if(!S) return 0 //Savefile object couldn't be created?
|
||||
if(!S) return FALSE //Savefile object couldn't be created?
|
||||
|
||||
S.cd = "/character[slot]"
|
||||
|
||||
@@ -103,23 +103,23 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
|
||||
S["belly_prefs"] >> belly_prefs
|
||||
|
||||
if(isnull(digestable))
|
||||
digestable = 1
|
||||
digestable = TRUE
|
||||
if(isnull(devourable))
|
||||
devourable = 0
|
||||
devourable = FALSE
|
||||
if(isnull(belly_prefs))
|
||||
belly_prefs = list()
|
||||
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
/datum/vore_preferences/proc/save_vore()
|
||||
if(!path) return 0
|
||||
if(!slot) return 0
|
||||
if(!path) return FALSE
|
||||
if(!slot) return FALSE
|
||||
var/savefile/S = new /savefile(path)
|
||||
if(!S) return 0
|
||||
if(!S) return FALSE
|
||||
S.cd = "/character[slot]"
|
||||
|
||||
S["digestable"] << digestable
|
||||
S["devourable"] << devourable
|
||||
S["belly_prefs"] << belly_prefs
|
||||
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
@@ -74,8 +74,6 @@
|
||||
spanstyle = ""
|
||||
if(DM_DIGEST)
|
||||
spanstyle = "color:red;"
|
||||
if(DM_DIGESTF)
|
||||
spanstyle = "color:purple;"
|
||||
if(DM_HEAL)
|
||||
spanstyle = "color:green;"
|
||||
|
||||
@@ -134,16 +132,16 @@
|
||||
dat += "<a href='?src=\ref[src];refresh=1'>Refresh</a>"
|
||||
|
||||
switch(user.digestable)
|
||||
if(1)
|
||||
dat += "<a href='?src=\ref[src];toggledg=1'>Toggle Digestable</a>"
|
||||
if(0)
|
||||
dat += "<a href='?src=\ref[src];toggledg=1'><span style='color:green;'>Toggle Digestable</span></a>"
|
||||
if(TRUE)
|
||||
dat += "<a href='?src=\ref[src];toggledg=1'>Toggle Digestable (Currently: ON)</a>"
|
||||
if(FALSE)
|
||||
dat += "<a href='?src=\ref[src];toggledg=1'>Toggle Digestable (Currently: OFF)</a>"
|
||||
|
||||
switch(user.devourable)
|
||||
if(1)
|
||||
dat += "<a href='?src=\ref[src];toggledvor=1'>Toggle Devourable</a>"
|
||||
if(0)
|
||||
dat += "<a href='?src=\ref[src];toggledvor=1'><span style='color:green;'>Toggle Devourable</span></a>"
|
||||
if(TRUE)
|
||||
dat += "<a href='?src=\ref[src];toggledvor=1'>Toggle Devourable (Currently: ON)</a>"
|
||||
if(FALSE)
|
||||
dat += "<a href='?src=\ref[src];toggledvor=1'>Toggle Devourable (Currently: OFF)</a>"
|
||||
|
||||
//Returns the dat html to the vore_look
|
||||
return dat
|
||||
@@ -169,34 +167,34 @@
|
||||
M.examine(user)
|
||||
|
||||
if("Help Out") //Help the inside-mob out
|
||||
user << "<font color='green'>You begin to push [M] to freedom!</font>"
|
||||
M << "[usr] begins to push you to freedom!"
|
||||
to_chat(user, "<font color='green'>You begin to push [M] to freedom!</font>")
|
||||
to_chat(M, "[usr] begins to push you to freedom!")
|
||||
M.loc << "<span class='warning'>Someone is trying to escape from inside you!</span>"
|
||||
sleep(50)
|
||||
if(prob(33))
|
||||
OB.release_specific_contents(M)
|
||||
usr << "<font color='green'>You manage to help [M] to safety!</font>"
|
||||
M << "<font color='green'>[user] pushes you free!</font>"
|
||||
to_chat(usr, "<font color='green'>You manage to help [M] to safety!</font>")
|
||||
to_chat(M, "<font color='green'>[user] pushes you free!</font>")
|
||||
M.loc << "<span class='alert'>[M] forces free of the confines of your body!</span>"
|
||||
else
|
||||
user << "<span class='alert'>[M] slips back down inside despite your efforts.</span>"
|
||||
M << "<span class='alert'> Even with [user]'s help, you slip back inside again.</span>"
|
||||
to_chat(user, "<span class='alert'>[M] slips back down inside despite your efforts.</span>")
|
||||
to_chat(M, "<span class='alert'> Even with [user]'s help, you slip back inside again.</span>")
|
||||
M.loc << "<font color='green'>Your body efficiently shoves [M] back where they belong.</font>"
|
||||
|
||||
if("Devour") //Eat the inside mob
|
||||
if(!user.vore_selected)
|
||||
user << "<span class='warning'>Pick a belly on yourself first!</span>"
|
||||
return 1
|
||||
to_chat(user, "<span class='warning'>Pick a belly on yourself first!</span>")
|
||||
return TRUE
|
||||
|
||||
var/datum/belly/TB = user.vore_organs[user.vore_selected]
|
||||
user << "<span class='warning'>You begin to [lowertext(TB.vore_verb)] [M] into your [lowertext(TB.name)]!</span>"
|
||||
M << "<span class='warning'>[user] begins to [lowertext(TB.vore_verb)] you into their [lowertext(TB.name)]!</span>"
|
||||
to_chat(user, "<span class='warning'>You begin to [lowertext(TB.vore_verb)] [M] into your [lowertext(TB.name)]!</span>")
|
||||
to_chat(M, "<span class='warning'>[user] begins to [lowertext(TB.vore_verb)] you into their [lowertext(TB.name)]!</span>")
|
||||
M.loc << "<span class='warning'>Someone inside you is eating someone else!</span>"
|
||||
|
||||
sleep(TB.nonhuman_prey_swallow_time)
|
||||
if((user in OB.internal_contents) && (M in OB.internal_contents))
|
||||
user << "<span class='warning'>You manage to [lowertext(TB.vore_verb)] [M] into your [lowertext(TB.name)]!</span>"
|
||||
M << "<span class='warning'>[user] manages to [lowertext(TB.vore_verb)] you into their [lowertext(TB.name)]!</span>"
|
||||
to_chat(user, "<span class='warning'>You manage to [lowertext(TB.vore_verb)] [M] into your [lowertext(TB.name)]!</span>")
|
||||
to_chat(M, "<span class='warning'>[user] manages to [lowertext(TB.vore_verb)] you into their [lowertext(TB.name)]!</span>")
|
||||
M.loc << "<span class='warning'>Someone inside you has eaten someone else!</span>"
|
||||
M.loc = user
|
||||
TB.nom_mob(M)
|
||||
@@ -211,8 +209,8 @@
|
||||
|
||||
if("Use Hand")
|
||||
if(user.stat)
|
||||
user << "<span class='warning'>You can't do that in your state!</span>"
|
||||
return 1
|
||||
to_chat(user, "<span class='warning'>You can't do that in your state!</span>")
|
||||
return TRUE
|
||||
|
||||
user.ClickOn(T)
|
||||
sleep(5) //Seems to exit too fast for the panel to update
|
||||
@@ -229,8 +227,8 @@
|
||||
|
||||
if("Eject all")
|
||||
if(user.stat)
|
||||
user << "<span class='warning'>You can't do that in your state!</span>"
|
||||
return 1
|
||||
to_chat(user, "<span class='warning'>You can't do that in your state!</span>")
|
||||
return TRUE
|
||||
|
||||
selected.release_all_contents()
|
||||
playsound(user, 'sound/effects/splat.ogg', 50, 1)
|
||||
@@ -238,24 +236,24 @@
|
||||
|
||||
if("Move all")
|
||||
if(user.stat)
|
||||
user << "<span class='warning'>You can't do that in your state!</span>"
|
||||
return 1
|
||||
to_chat(user, "<span class='warning'>You can't do that in your state!</span>")
|
||||
return TRUE
|
||||
|
||||
var/choice = input("Move all where?","Select Belly") in user.vore_organs + "Cancel - Don't Move"
|
||||
|
||||
if(choice == "Cancel - Don't Move")
|
||||
return 1
|
||||
return TRUE
|
||||
else
|
||||
var/datum/belly/B = user.vore_organs[choice]
|
||||
for(var/atom/movable/tgt in selected.internal_contents)
|
||||
selected.internal_contents -= tgt
|
||||
B.internal_contents += tgt
|
||||
|
||||
tgt << "<span class='warning'>You're squished from [user]'s [selected] to their [B]!</span>"
|
||||
to_chat(tgt, "<span class='warning'>You're squished from [user]'s [selected] to their [B]!</span>")
|
||||
|
||||
for(var/mob/hearer in range(1,user))
|
||||
hearer << sound('sound/vore/squish2.ogg',volume=80)
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
|
||||
var/atom/movable/tgt = locate(href_list["insidepick"])
|
||||
@@ -267,8 +265,8 @@
|
||||
|
||||
if("Eject")
|
||||
if(user.stat)
|
||||
user << "<span class='warning'>You can't do that in your state!</span>"
|
||||
return 1
|
||||
to_chat(user, "<span class='warning'>You can't do that in your state!</span>")
|
||||
return TRUE
|
||||
|
||||
selected.release_specific_contents(tgt)
|
||||
playsound(user, 'sound/effects/splat.ogg', 50, 1)
|
||||
@@ -276,34 +274,34 @@
|
||||
|
||||
if("Move")
|
||||
if(user.stat)
|
||||
user << "<span class='warning'>You can't do that in your state!</span>"
|
||||
return 1
|
||||
to_chat(user, "<span class='warning'>You can't do that in your state!</span>")
|
||||
return TRUE
|
||||
|
||||
var/choice = input("Move [tgt] where?","Select Belly") in user.vore_organs + "Cancel - Don't Move"
|
||||
|
||||
if(choice == "Cancel - Don't Move")
|
||||
return 1
|
||||
return TRUE
|
||||
else
|
||||
var/datum/belly/B = user.vore_organs[choice]
|
||||
selected.internal_contents -= tgt
|
||||
B.internal_contents += tgt
|
||||
|
||||
tgt << "<span class='warning'>You're squished from [user]'s [lowertext(selected.name)] to their [lowertext(B.name)]!</span>"
|
||||
to_chat(tgt, "<span class='warning'>You're squished from [user]'s [lowertext(selected.name)] to their [lowertext(B.name)]!</span>")
|
||||
for(var/mob/hearer in range(1,user))
|
||||
hearer << sound('sound/vore/squish2.ogg',volume=80)
|
||||
|
||||
if(href_list["newbelly"])
|
||||
if(user.vore_organs.len >= 10)
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
var/new_name = html_encode(input(usr,"New belly's name:","New Belly") as text|null)
|
||||
|
||||
if(length(new_name) > 12 || length(new_name) < 2)
|
||||
usr << "<span class='warning'>Entered belly name is too long.</span>"
|
||||
return 0
|
||||
to_chat(usr, "<span class='warning'>Entered belly name is too long.</span>")
|
||||
return FALSE
|
||||
if(new_name in user.vore_organs)
|
||||
usr << "<span class='warning'>No duplicate belly names, please.</span>"
|
||||
return 0
|
||||
to_chat(usr, "<span class='warning'>No duplicate belly names, please.</span>")
|
||||
return FALSE
|
||||
|
||||
var/datum/belly/NB = new(user)
|
||||
NB.name = new_name
|
||||
@@ -319,11 +317,11 @@
|
||||
var/new_name = html_encode(input(usr,"Belly's new name:","New Name") as text|null)
|
||||
|
||||
if(length(new_name) > 12 || length(new_name) < 2)
|
||||
usr << "<span class='warning'>Entered belly name length invalid (must be longer than 2, shorter than 12).</span>"
|
||||
return 0
|
||||
to_chat(usr, "<span class='warning'>Entered belly name length invalid (must be longer than 2, shorter than 12).</span>")
|
||||
return FALSE
|
||||
if(new_name in user.vore_organs)
|
||||
usr << "<span class='warning'>No duplicate belly names, please.</span>"
|
||||
return 0
|
||||
to_chat(usr, "<span class='warning'>No duplicate belly names, please.</span>")
|
||||
return FALSE
|
||||
|
||||
user.vore_organs[new_name] = selected
|
||||
user.vore_organs -= selected.name
|
||||
@@ -349,7 +347,7 @@
|
||||
new_desc = readd_quotes(new_desc)
|
||||
|
||||
if(length(new_desc) > 1024)
|
||||
usr << "<span class='warning'>Entered belly desc too long. 1024 character limit.</span>"
|
||||
to_chat(usr, "<span class='warning'>Entered belly desc too long. 1024 character limit.</span>")
|
||||
return FALSE
|
||||
|
||||
selected.inside_flavor = new_desc
|
||||
@@ -404,35 +402,35 @@
|
||||
selected.struggle_messages_inside = initial(selected.struggle_messages_inside)
|
||||
|
||||
if("Cancel - No Changes")
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
if(href_list["b_verb"])
|
||||
var/new_verb = html_encode(input(usr,"New verb when eating (infinitive tense, e.g. nom or swallow):","New Verb") as text|null)
|
||||
|
||||
if(length(new_verb) > 12 || length(new_verb) < 2)
|
||||
usr << "<span class='warning'>Entered verb length invalid (must be longer than 2, shorter than 12).</span>"
|
||||
to_chat(usr, "<span class='warning'>Entered verb length invalid (must be longer than 2, shorter than 12).</span>")
|
||||
return FALSE
|
||||
|
||||
selected.vore_verb = new_verb
|
||||
|
||||
if(href_list["b_sound"])
|
||||
var/choice = input(user,"Currently set to [selected.vore_sound]","Select Sound") in vore_sounds + "Cancel - No Changes"
|
||||
var/choice = input(user,"Currently set to [selected.vore_sound]","Select Sound") in GLOB.vore_sounds + "Cancel - No Changes"
|
||||
|
||||
if(choice == "Cancel")
|
||||
return 1
|
||||
|
||||
selected.vore_sound = vore_sounds[choice]
|
||||
selected.vore_sound = GLOB.vore_sounds[choice]
|
||||
|
||||
if(href_list["b_soundtest"])
|
||||
user << selected.vore_sound
|
||||
|
||||
if(href_list["b_del"])
|
||||
if(selected.internal_contents.len)
|
||||
usr << "<span class='warning'>Can't delete bellies with contents!</span>"
|
||||
to_chat(usr, "<span class='warning'>Can't delete bellies with contents!</span>")
|
||||
else if(selected.immutable)
|
||||
usr << "<span class='warning'>This belly is marked as undeletable.</span>"
|
||||
to_chat(usr, "<span class='warning'>This belly is marked as undeletable.</span>")
|
||||
else if(user.vore_organs.len == 1)
|
||||
usr << "<span class='warning'>You must have at least one belly.</span>"
|
||||
to_chat(usr, "<span class='warning'>You must have at least one belly.</span>")
|
||||
else
|
||||
var/alert = alert("Are you sure you want to delete [selected]?","Confirmation","Delete","Cancel")
|
||||
if(alert == "Delete" && !selected.internal_contents.len)
|
||||
@@ -443,10 +441,10 @@
|
||||
|
||||
if(href_list["saveprefs"])
|
||||
if(user.save_vore_prefs())
|
||||
user << "<span class='notice'>Belly Preferences saved!</span>"
|
||||
to_chat(user, "<span class='notice'>Belly Preferences saved!</span>")
|
||||
|
||||
else
|
||||
user << "<span class='warning'>ERROR: Belly Preferences were not saved!</span>"
|
||||
to_chat(user, "<span class='warning'>ERROR: Belly Preferences were not saved!</span>")
|
||||
log_admin("Could not save vore prefs on USER: [user].")
|
||||
|
||||
|
||||
@@ -456,9 +454,9 @@
|
||||
if("Cancel")
|
||||
return 1
|
||||
if("Allow Digestion")
|
||||
user.digestable = 1
|
||||
user.digestable = TRUE
|
||||
if("Prevent Digestion")
|
||||
user.digestable = 0
|
||||
user.digestable = FALSE
|
||||
|
||||
if(user.client.prefs_vr)
|
||||
user.client.prefs_vr.digestable = user.digestable
|
||||
@@ -469,9 +467,9 @@
|
||||
if("Cancel")
|
||||
return 1
|
||||
if("Allow Devourment")
|
||||
user.devourable = 1
|
||||
user.devourable = TRUE
|
||||
if("Prevent Devourment")
|
||||
user.devourable = 0
|
||||
user.devourable = FALSE
|
||||
|
||||
if(user.client.prefs_vr)
|
||||
user.client.prefs_vr.devourable = user.devourable
|
||||
|
||||
@@ -1,17 +1,16 @@
|
||||
|
||||
/*
|
||||
//these aren't defines so they can stay in this file
|
||||
var/const/SIZESCALE_HUGE = 2
|
||||
var/const/SIZESCALE_BIG = 1.5
|
||||
var/const/SIZESCALE_NORMAL = 1
|
||||
var/const/SIZESCALE_SMALL = 0.85
|
||||
var/const/SIZESCALE_TINY = 0.60
|
||||
|
||||
//average
|
||||
var/const/SIZESCALE_A_HUGEBIG = (SIZESCALE_HUGE + SIZESCALE_BIG) / 2
|
||||
var/const/SIZESCALE_A_BIGNORMAL = (SIZESCALE_BIG + SIZESCALE_NORMAL) / 2
|
||||
var/const/SIZESCALE_A_NORMALSMALL = (SIZESCALE_NORMAL + SIZESCALE_SMALL) / 2
|
||||
var/const/SIZESCALE_A_SMALLTINY = (SIZESCALE_SMALL + SIZESCALE_TINY) / 2
|
||||
GLOBAL_VAR_CONST(SIZESCALE_HUGE, 2)
|
||||
GLOBAL_VAR_CONST(SIZESCALE_BIG, 1.5)
|
||||
GLOBAL_VAR_CONST(SIZESCALE_NORMAL, 1)
|
||||
GLOBAL_VAR_CONST(SIZESCALE_SMALL, 0.85)
|
||||
GLOBAL_VAR_CONST(SIZESCALE_TINY, 0.60)
|
||||
|
||||
GLOBAL_VAR_CONST(SIZESCALE_A_HUGEBIG, (GLOB.SIZESCALE_HUGE + GLOB.SIZESCALE_BIG) / 2)
|
||||
GLOBAL_VAR_CONST(SIZESCALE_A_BIGNORMAL, (GLOB.SIZESCALE_BIG + GLOB.SIZESCALE_NORMAL) / 2)
|
||||
GLOBAL_VAR_CONST(SIZESCALE_A_NORMALSMALL,(GLOB.SIZESCALE_NORMAL + GLOB.SIZESCALE_SMALL) / 2)
|
||||
GLOBAL_VAR_CONST(SIZESCALE_A_SMALLTINY,(GLOB.SIZESCALE_SMALL + GLOB.SIZESCALE_TINY) / 2)
|
||||
*/
|
||||
// Adding needed defines to /mob/living
|
||||
// Note: Polaris had this on /mob/living/carbon/human We need it higher up for animals and stuff.
|
||||
/mob/living
|
||||
@@ -205,4 +204,4 @@ var/const/SIZESCALE_A_SMALLTINY = (SIZESCALE_SMALL + SIZESCALE_TINY) / 2
|
||||
src << "You pin [tmob] beneath your foot!"
|
||||
tmob << "[src] pins you beneath their foot!"
|
||||
return 1
|
||||
*/
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user