Merge /vore into /master (#39)

* progress

* Compile errors fixed

No idea if it's test worthy tho as conflicts with race overhaul and
narky removal.

* Update admins.txt

* efforts continue

Fuck grab code, seriously

* grab code is cancer

* Execute the Narkism

Do not hesitate.

Show no mercy.

* holy shit grab code is awful

* have I bitched about grab code

My bitching, let me show you it

* código de agarre es una mierda

No really it is

* yeah I don't even know anymore.

* Lolnope. Fuck grab code

* I'm not even sure what to fix anymore

* Self eating is not an acceptable fate

* Taste the void, son.

* My code doesn't pass it's own sanity check.

Maybe it's a sign of things to come.

* uncommented and notes

* It Works and I Don't Know Why (#38)

* shuttle auto call

* it works and I don't know why
This commit is contained in:
TalkingCactus
2016-09-10 00:31:01 -04:00
committed by Poojawa
parent 315c5a4a4e
commit 9d9a93335b
87 changed files with 5041 additions and 5383 deletions
+26
View File
@@ -105,6 +105,10 @@ var/list/preferences_datums = list()
//var/metadata = ""
var/flavor_text = ""
// Vore prefs
var/digestable = 1
var/list/belly_prefs = list()
var/unlock_content = 0
var/list/ignoring = list()
@@ -123,6 +127,8 @@ var/list/preferences_datums = list()
var/loaded_preferences_successfully = load_preferences()
if(loaded_preferences_successfully)
if(load_character())
if(load_vore_preferences())
return
return
//we couldn't load character data so just randomize the character appearance + name
random_character() //let's create a random character then - rather than a fat, bald and naked man.
@@ -1252,12 +1258,15 @@ var/list/preferences_datums = list()
if("save")
save_preferences()
save_character()
save_vore_preferences()
if("load")
load_preferences()
load_character()
load_vore_preferences()
if("changeslot")
load_vore_preferences(text2num(href_list["num"]))
if(!load_character(text2num(href_list["num"])))
random_character()
real_name = random_unique_name(gender)
@@ -1289,6 +1298,23 @@ var/list/preferences_datums = list()
character.name = character.real_name
character.flavor_text = flavor_text
if(!length(belly_prefs))
var/datum/belly/B = new /datum/belly(src)
B.immutable = 1
B.name = "Stomach"
B.inside_flavor = "It appears to be rather warm and wet. Makes sense, considering it's inside \the [character]."
belly_prefs[B.name] = B
character.vore_organs = belly_prefs
character.vore_selected = character.vore_organs[1]
for(var/I in character.vore_organs)
var/datum/belly/B = character.vore_organs[I]
B.owner = character
character.digestable = digestable
character.gender = gender
character.age = age
@@ -172,6 +172,44 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
backbag = DBACKPACK
//
// Save/Load Vore Preferences
//
/datum/preferences/proc/load_vore_preferences(slot)
if(!path) return 0 //Path couldn't be set?
if(!fexists(path)) //Never saved before
save_vore_preferences() //Make the file first
return 1
var/savefile/S = new /savefile(path)
if(!S) return 0 //Savefile object couldn't be created?
S.cd = "/character[slot]"
S["digestable"] >> digestable
S["belly_prefs"] >> belly_prefs
if(isnull(digestable))
digestable = 1
if(isnull(belly_prefs))
belly_prefs = list()
return 1
/datum/preferences/proc/save_vore_preferences()
if(!path)
return 0
var/savefile/S = new /savefile(path)
if(!S)
return 0
S.cd = "/character[default_slot]"
S["digestable"] << digestable
S["belly_prefs"] << belly_prefs
return 1
/datum/preferences/proc/load_path(ckey,filename="preferences.sav")
if(!ckey)
return
+8
View File
@@ -0,0 +1,8 @@
//File isn't currently being used.
/datum/preferences
var/biological_gender = MALE
var/identifying_gender = MALE
/datum/preferences/proc/set_biological_gender(var/gender)
biological_gender = gender
identifying_gender = gender
@@ -0,0 +1,54 @@
/mob/living/carbon/human/proc/examine_nutrition()
var/message = ""
var/nutrition_examine = round(nutrition)
var/t_He = "It" //capitalised for use at the start of each line.
var/t_His = "Its"
var/t_his = "its"
var/t_is = "is"
var/t_has = "has"
switch(gender)
if(MALE)
t_He = "He"
t_his = "his"
t_His = "His"
if(FEMALE)
t_He = "She"
t_his = "her"
t_His = "Her"
if(PLURAL)
t_He = "They"
t_his = "their"
t_His = "Their"
t_is = "are"
t_has = "have"
if(NEUTER)
t_He = "It"
t_his = "its"
t_His = "Its"
switch(nutrition_examine)
if(0 to 49)
message = "<span class='warning'>[t_He] [t_is] starving! You can hear [t_his] stomach snarling from across the room!</span>\n"
if(50 to 99)
message = "<span class='warning'>[t_He] [t_is] extremely hungry. A deep growl occasionally rumbles from [t_his] empty stomach.</span>\n"
if(100 to 499)
return message //Well that's pretty normal, really.
if(500 to 864) // Fat.
message = "[t_He] [t_has] a stuffed belly, bloated fat and round from eating too much.\n"
if(1200 to 1934) // One person fully digested.
message = "<span class='warning'>[t_He] [t_is] sporting a large, round, sagging stomach. It's contains at least their body weight worth of glorping slush.</span>\n"
if(1935 to 3004) // Two people.
message = "<span class='warning'>[t_He] [t_is] engorged with a huge stomach that sags and wobbles as they move. [t_He] must have consumed at least twice their body weight. It looks incredibly soft.</span>\n"
if(3005 to 4074) // Three people.
message = "<span class='warning'>[t_His] stomach is firmly packed with digesting slop. [t_He] must have eaten at least a few times worth their body weight! It looks hard for them to stand, and [t_his] gut jiggles when they move.</span>\n"
if(4075 to 10000) // Four or more people.
message = "<span class='warning'>[t_He] [t_is] so absolutely stuffed that you aren't sure how it's possible to move. [t_He] can't seem to swell any bigger. The surface of [t_his] belly looks sorely strained!</span>\n"
return message
/mob/living/carbon/human/proc/examine_bellies()
var/message = ""
for (var/I in src.vore_organs)
var/datum/belly/B = vore_organs[I]
message += B.get_examine_msg()
return message
@@ -367,13 +367,13 @@
skipcatch = 1 //can't catch the now embedded item
return ..()
/* Disabling this for now so it doesn't get in the way. -Cactus
/mob/living/carbon/human/grabbedby(mob/living/carbon/user, supress_message = 0)
if(user == src && pulling && !pulling.anchored && grab_state >= GRAB_AGGRESSIVE && (disabilities & FAT) && ismonkey(pulling))
devour_mob(pulling)
if(user == src && pulling && !pulling.anchored && grab_state >= GRAB_AGGRESSIVE && iscarbon(pulling))
vore_attack(user, pulling)
else
..()
*/
/mob/living/carbon/human/grippedby(mob/living/user)
if(w_uniform)
w_uniform.add_fingerprint(user)
+2
View File
@@ -46,6 +46,8 @@
if(loc)
environment = loc.return_air()
if(ismob(loc)) return
var/datum/gas_mixture/breath
if(health <= config.health_threshold_crit || (pulledby && pulledby.grab_state >= GRAB_KILL && !getorganslot("breathing_tube")))
+6 -6
View File
@@ -211,12 +211,12 @@
/mob/living/acid_act(acidpwr, toxpwr, acid_volume)
take_organ_damage(min(10*toxpwr, acid_volume * toxpwr))
/mob/living/proc/grabbedby(mob/living/carbon/user, supress_message = 0)
// if(user == src)
// var/mob/living/target
// if(pulling && !pulling.anchored && grab_state >= GRAB_AGGRESSIVE && isliving(pulling))
// target = pulling
// user.vore_initiate(target,user)
/mob/living/proc/grabbedby(mob/living/carbon/user, mob/living/target, supress_message = 0)
// if(grab_state >= GRAB_AGGRESSIVE && !pulling.anchored && iscarbon(pulling) && user.zone_selected == "mouth")
// src.vore_attack(src, devour_time = 100) //It would be better to define it on this level instead of human_defense.dm, but you'd probably need to do more work down the line. ex: xeno devour code
// return
if(anchored)
return 0
if(!user.pulling || user.pulling != src)
@@ -0,0 +1,3 @@
/mob/living/simple_animal
// List of targets excluded (for now) from being eaten by this mob.
var/list/prey_exclusions = list()
+1
View File
@@ -22,6 +22,7 @@ var/next_mob_id = 0
else
living_mob_list += src
prepare_huds()
hook_vr("mob_new",list(src))
..()
/atom/proc/prepare_huds()
+72
View File
@@ -0,0 +1,72 @@
//////////////////////////////////////////////////////
////////////////////SUBTLE COMMAND////////////////////
//////////////////////////////////////////////////////
/mob
var/use_me = 1
/mob/verb/me_verb_subtle(message as text) //This would normally go in say.dm
set name = "Subtle"
set category = "IC"
set desc = "Emote to nearby people (and your pred/prey)"
if(say_disabled) //This is here to try to identify lag problems
usr << "Speech is currently admin-disabled."
return
message = sanitize(message)
if(use_me)
usr.emote_vr("me",4,message)
else
usr.emote_vr(message)
/mob/proc/custom_emote_vr(var/m_type=1,var/message = null) //This would normally go in emote.dm
if(stat || !use_me && usr == src)
src << "You are unable to emote."
return
var/muzzled = is_muzzled()
if(m_type == 2 && muzzled) return
var/input
if(!message)
input = sanitize(input(src,"Choose an emote to display.") as text|null)
else
input = message
if(input)
message = "<B>[src]</B> <I>[input]</I>"
else
return
if (message)
log_emote("[name]/[key] : [message]")
for(var/mob/M in player_list)
if (!M.client)
continue //skip monkeys and leavers
if (istype(M, /mob/new_player))
continue
if(findtext(message," snores.")) //Because we have so many sleeping people.
break
if(M.stat == DEAD && !(M in viewers(src,null)))
M.show_message(message, m_type)
var/list/subtle = hearers(1,src)
for(var/I in subtle)
/*if(isobj(I)) //micros in hand
spawn(0)
if(I) //It's possible that it could be deleted in the meantime.
var/obj/O = I
I.show_message(src, message, 2) */
if(ismob(I))
var/mob/M = I
M.show_message(message, 2)
/mob/proc/emote_vr(var/act, var/type, var/message) //This would normally go in say.dm
if(act == "me")
return custom_emote_vr(type, message)