Tweaked hunger values once more.

Added check if you already ate something but it was not yet metabolized. It's harder to overeat now.
Improved the random look generator. Now it takes in account real-life statistics of skin tone and blood group distribution, and has different colors.
Fixed bug that sprinkles did not metabolized in non-security body.
Made rig suit to be proper space suit.
Cleaned some code
Made mopbucket to have 100 volume.
Added radio report diagnostic verb (but with no effect for now)

git-svn-id: http://tgstation13.googlecode.com/svn/trunk@551 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
Rygzengrho
2010-12-06 23:30:18 +00:00
parent d5c2356340
commit 87ad3ade16
12 changed files with 168 additions and 80 deletions

View File

@@ -14,6 +14,7 @@ datum
var/reagent_state = SOLID
var/data = null
var/volume = 0
var/nutriment_factor = 0
proc
reaction_mob(var/mob/M, var/method=TOUCH, var/volume) //By default we have a chance to transfer some
@@ -42,7 +43,7 @@ datum
return
on_mob_life(var/mob/M)
holder.remove_reagent(src.id, 0.4) //By default it slowly disappears.
holder.remove_reagent(src.id, REAGENTS_METABOLISM) //By default it slowly disappears.
return
on_move(var/mob/M)
@@ -1154,10 +1155,24 @@ datum
id = "nutriment"
description = "All the vitamins, minerals, and carbohydrates the body needs in pure form."
reagent_state = SOLID
nutriment_factor = 25 * REAGENTS_METABOLISM
on_mob_life(var/mob/M)
if(!M) M = holder.my_atom
if(prob(50)) M:bruteloss--
M:nutrition += 10 // For hunger and fatness
M:nutrition += nutriment_factor // For hunger and fatness
/*
// If overeaten - vomit and fall down
// Makes you feel bad but removes reagents and some effects
// from your body
if (M.nutrition > 650)
M.nutrition = rand (250, 400)
M.weakened += rand(2, 10)
M.jitteriness += rand(0, 5)
M.dizziness = max (0, (M.dizziness - rand(0, 15)))
M.druggy = max (0, (M.druggy - rand(0, 15)))
M.toxloss = max (0, (M.toxloss - rand(5, 15)))
M.updatehealth()
*/
..()
return
@@ -1166,18 +1181,21 @@ datum
id = "soysauce"
description = "A salty sauce made from the soy plant."
reagent_state = LIQUID
nutriment_factor = 2 * REAGENTS_METABOLISM
ketchup
name = "Ketchup"
id = "ketchup"
description = "Ketchup, catsup, whatever. It's tomato paste."
reagent_state = LIQUID
nutriment_factor = 5 * REAGENTS_METABOLISM
capsaicin
name = "Capsaicin Oil"
id = "capsaicin"
description = "This is what makes chilis hot."
reagent_state = LIQUID
nutriment_factor = 5 * REAGENTS_METABOLISM
on_mob_life(var/mob/M)
if(!M) M = holder.my_atom
M:bodytemperature += 5
@@ -1190,6 +1208,7 @@ datum
id = "frostoil"
description = "A special oil that noticably chills the body. Extraced from Icepeppers."
reagent_state = LIQUID
nutriment_factor = 5 * REAGENTS_METABOLISM
on_mob_life(var/mob/M)
if(!M) M = holder.my_atom
M:bodytemperature -= 5
@@ -1202,12 +1221,14 @@ datum
id = "sodiumchloride"
description = "A salt made of sodium chloride. Commonly used to season food."
reagent_state = SOLID
nutriment_factor = 1 * REAGENTS_METABOLISM
blackpepper
name = "Black Pepper"
id = "blackpepper"
description = "A power ground from peppercorns. *AAAACHOOO*"
reagent_state = SOLID
nutriment_factor = 1 * REAGENTS_METABOLISM
amatoxin
name = "Amatoxin"
@@ -1236,22 +1257,26 @@ datum
name = "Sprinkles"
id = "sprinkles"
description = "Multi-colored little bits of sugar, commonly found on donuts. Loved by cops."
nutriment_factor = 1 * REAGENTS_METABOLISM
on_mob_life(var/mob/M)
M:nutrition += nutriment_factor
if(istype(M, /mob/living/carbon/human) && M.job in list("Security Officer", "Head of Security", "Detective"))
if(!M) M = holder.my_atom
M:bruteloss--
M:fireloss--
M:nutrition++
M:nutrition += nutriment_factor
..()
return
..()
oliveoil
name = "Olive Oil"
id = "oliveoil"
description = "An oil derived from various types of olives. A famous export of Space Italy."
reagent_state = LIQUID
nutriment_factor = 20 * REAGENTS_METABOLISM
on_mob_life(var/mob/M)
M:nutrition += 20
M:nutrition += nutriment_factor
..()
return
reaction_turf(var/turf/T, var/volume)
@@ -1290,9 +1315,10 @@ datum
id = "berryjuice"
description = "A delicious blend of several different kinds of berries."
reagent_state = LIQUID
nutriment_factor = 1 * REAGENTS_METABOLISM
on_mob_life(var/mob/M)
if(!M) M = holder.my_atom
M:nutrition++
M:nutrition += nutriment_factor
..()
return

View File

@@ -729,7 +729,6 @@
playsound(M.loc,'drink.ogg', rand(10,50), 1)
return 1
return 0
attackby(obj/item/I as obj, mob/user as mob)
@@ -754,7 +753,6 @@
if(!reagents.total_volume)
user << "\red [src] is empty."
return
if(target.reagents.total_volume >= target.reagents.maximum_volume)
user << "\red you can't add anymore to [target]."
return
@@ -782,23 +780,26 @@
return 0
if(istype(M, /mob/living/carbon/human))
if(M == user) //If you're eating it yourself.
if (M.nutrition <= 50)
var/fullness = M.nutrition + (M.reagents.get_reagent_amount("nutriment") * 25)
if (fullness <= 50)
M << "\red You hungrily chew out a piece of [src] and gobble it!"
if (M.nutrition > 50 && M.nutrition <= 150)
if (fullness > 50 && fullness <= 150)
M << "\blue You hungrily begin to eat [src]."
if (M.nutrition > 150 && M.nutrition <= 350)
if (fullness > 150 && fullness <= 350)
M << "\blue You take a bite of [src]."
if (M.nutrition > 350 && M.nutrition <= 550)
if (fullness > 350 && fullness <= 550)
M << "\blue You unwillingly chew a bit of [src]."
if (M.nutrition > (550 * (1 + M.overeatduration / 1000))) // The more he eats - the more he can eat
if (fullness > (550 * (1 + M.overeatduration / 1000))) // The more he eats - the more he can eat
M << "\red You cannot force any more of [src] to go down your throat."
return 0
else //If you're feeding it to someone else.
var/fullness = M.nutrition + (M.reagents.get_reagent_amount("nutriment") * 10)
if (fullness <= (550 * (1 + M.overeatduration / 1000)))
for(var/mob/O in viewers(world.view, user))
if (M.nutrition <= (550 * (1 + M.overeatduration / 1000)))
O.show_message("\red [user] attempts to feed [M] [src].", 1)
else
O.show_message("\red [user] cannot force anymore of [src] down [M] throat.", 1)
for(var/mob/O in viewers(world.view, user))
O.show_message("\red [user] cannot force anymore of [src] down [M]'s throat.", 1)
return 0
if(!do_mob(user, M)) return
@@ -1024,7 +1025,7 @@
amount_per_transfer_from_this = 20
flags = FPRINT | OPENCONTAINER
New()
var/datum/reagents/R = new/datum/reagents(90)
var/datum/reagents/R = new/datum/reagents(70)
reagents = R
R.my_atom = src
@@ -1051,7 +1052,6 @@
amount_per_transfer_from_this = 10
flags = FPRINT | TABLEPASS | OPENCONTAINER
/obj/item/weapon/reagent_containers/glass/dispenser/surfactant
name = "reagent glass (surfactant)"
icon_state = "liquid"
@@ -1362,7 +1362,7 @@
icon_state = "donut1"
New()
..()
reagents.add_reagent("nutriment", 2)
reagents.add_reagent("nutriment", 3)
reagents.add_reagent("sprinkles", 1)
if(prob(30))
src.icon_state = "donut2"

View File

@@ -259,6 +259,9 @@
name = "rig helmet"
icon_state = "rig"
item_state = "rig_helm"
flags = FPRINT | TABLEPASS | HEADSPACE | HEADCOVERSEYES | HEADCOVERSMOUTH
see_face = 0.0
permeability_coefficient = 0.01
/obj/item/clothing/head/helmet/space/syndicate
name = "red space helmet"
@@ -695,6 +698,13 @@
desc = "A special suit that protects against hazardous, low pressure environments."
icon_state = "rig"
item_state = "rig_suit"
gas_transfer_coefficient = 0.01
w_class = 4//bulky item
flags = FPRINT | TABLEPASS | SUITSPACE
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
permeability_coefficient = 0.02
protective_temperature = 1000
heat_transfer_coefficient = 0.02
/obj/item/clothing/suit/space/syndicate
name = "red space suit"

View File

@@ -601,4 +601,3 @@ Please clean it before use!</TT><BR>
new /obj/item/weapon/reagent_containers/food/snacks/cheesewedge (src.loc)
del(src)
return

View File

@@ -1,5 +1,5 @@
/obj/mopbucket/New()
var/datum/reagents/R = new/datum/reagents(50)
var/datum/reagents/R = new/datum/reagents(100)
reagents = R
R.my_atom = src

View File

@@ -5,7 +5,7 @@
del(src)
return
switch (pickweight(list("extinguisher" = 50, "toolbox" = 30, "nothing" = 20)))
switch (pickweight(list("extinguisher" = 40, "toolbox" = 40, "nothing" = 20)))
if ("extinguisher")
new /obj/item/weapon/extinguisher(src)
if ("toolbox")

View File

@@ -32,6 +32,7 @@
src.verbs += /client/proc/admin_cancel_shuttle // -- Skie
src.verbs += /client/proc/air_report
src.verbs += /client/proc/air_status
src.verbs += /client/proc/radio_report
src.verbs += /client/proc/callproc
src.verbs += /client/proc/Cell
src.verbs += /client/proc/cmd_admin_alienize
@@ -131,6 +132,7 @@
src.verbs += /client/proc/admin_cancel_shuttle // -- Skie
src.verbs += /client/proc/air_report
src.verbs += /client/proc/air_status
src.verbs += /client/proc/radio_report
src.verbs += /client/proc/callproc
src.verbs += /client/proc/Cell
src.verbs += /client/proc/cmd_admin_alienize
@@ -287,6 +289,7 @@
src.verbs += /client/proc/general_report
src.verbs += /client/proc/air_report
src.verbs += /client/proc/air_status
src.verbs += /client/proc/radio_report
src.verbs += /client/proc/fix_next_move
src.verbs += /client/proc/toggle_view_range
@@ -581,6 +584,7 @@
src.verbs -= /client/proc/general_report
src.verbs -= /client/proc/air_report
src.verbs -= /client/proc/air_status
src.verbs -= /client/proc/radio_report
src.verbs -= /client/proc/toggle_view_range
src.verbs -= /obj/admins/proc/toggle_aliens
@@ -764,7 +768,7 @@
message_admins("\blue [src.ckey] warned [M.ckey], resulting in a 10 minute autoban.")
del(M.client)
del(M)
//del(M)
/client/proc/drop_bomb() // Some admin dickery that can probably be done better -- TLE
set category = "Special Verbs"
@@ -965,6 +969,7 @@
src.verbs += /client/proc/general_report
src.verbs += /client/proc/air_report
src.verbs += /client/proc/air_status
src.verbs += /client/proc/radio_report
src.verbs += /client/proc/fix_next_move
src.verbs += /client/proc/toggle_view_range
@@ -1047,6 +1052,7 @@
src.verbs += /client/proc/general_report
src.verbs += /client/proc/air_report
src.verbs += /client/proc/air_status
src.verbs += /client/proc/radio_report
src.verbs += /client/proc/fix_next_move
src.verbs += /obj/admins/proc/spawn_atom
@@ -1115,6 +1121,7 @@
src.verbs += /client/proc/general_report
src.verbs += /client/proc/air_report
src.verbs += /client/proc/air_status
src.verbs += /client/proc/radio_report
src.verbs += /client/proc/fix_next_move
src.verbs += /client/proc/toggle_view_range
@@ -1382,6 +1389,7 @@
src.verbs -= /client/proc/general_report
src.verbs -= /client/proc/air_report
src.verbs -= /client/proc/air_status
src.verbs -= /client/proc/radio_report
src.verbs += /client/proc/fix_next_move
src.verbs += /client/proc/toggle_view_range
@@ -1464,6 +1472,7 @@
src.verbs -= /client/proc/general_report
src.verbs -= /client/proc/air_report
src.verbs -= /client/proc/air_status
src.verbs -= /client/proc/radio_report
src.verbs += /client/proc/fix_next_move
src.verbs += /obj/admins/proc/spawn_atom
@@ -1532,6 +1541,7 @@
src.verbs -= /client/proc/general_report
src.verbs -= /client/proc/air_report
src.verbs -= /client/proc/air_status
src.verbs -= /client/proc/radio_report
src.verbs -= /client/proc/fix_next_move
src.verbs += /client/proc/toggle_view_range

View File

@@ -110,3 +110,23 @@
message_admins("[key_name_admin(largest_click_mob)] had the largest click delay with [largest_click_time] frames / [largest_click_time/10] seconds!", 1)
message_admins("world.time = [world.time]", 1)
return
radio_report()
set category = "Debug"
set name = "Radio report"
var/output = "<b>Radio Report</b><hr>"/*
for (var/fq in radio_controller.frequencies)
output += "<b>Freq: [fq]</b><br>"
var/list/datum/radio_frequency/fqs = radio_controller.frequencies[fq]
output += "&nbsp;&nbsp;Voice: [fqs.voice.len]<br>"
output += "&nbsp;&nbsp;Broadcast: [fqs.broadcast.len]<br>"
output += "&nbsp;&nbsp;Tags: <br>"
for (var/tag in fqs.tags)
var/list/ctag = fqs.tags[tag]
output += "&nbsp;&nbsp;&nbsp;&nbsp;[tag]: [ctag.len]<br>"
output += "&nbsp;&nbsp;Groups: <br>"
for (var/group in fqs.groups)
var/list/cgroup = fqs.groups[group]
output += "&nbsp;&nbsp;&nbsp;&nbsp;[group]: [cgroup.len]<br>"*/
usr << browse(output,"window=radioreport")

View File

@@ -341,7 +341,7 @@
if(reagents) reagents.metabolize(src)
if(src.nutrition > 400 && !(src.mutations & 32))
if(src.nutrition > 500 && !(src.mutations & 32))
if(prob(5 + round((src.nutrition - 200) / 2)))
src << "\red You suddenly feel blubbery!"
src.mutations |= 32

View File

@@ -857,9 +857,12 @@
// Commented out so hunger system won't be such shock
// Damage and effects from not eating
if(src.nutrition <= 50)
src.bruteloss++
if (prob (0.1))
src << "\red Your stomach rumbles."
if (prob (10))
src << "You feel very weak"
src.bruteloss++
if (prob (5))
src << "You feel very weak."
src.weakened += rand(2, 3)
*/
/*

View File

@@ -8,7 +8,6 @@ datum/preferences
var/midis = 1
var/ooccolor = "#b82e00"
var/be_random_name = 0
var/be_random_look = 0
var/underwear = 1
var/occupation1 = "No Preference"
@@ -46,8 +45,28 @@ datum/preferences
else
real_name = capitalize(pick(first_names_female) + " " + capitalize(pick(last_names)))
proc/randomize_skin_tone()
var/tone
var/tmp = pickweight ( list ("caucasian" = 55, "afroamerican" = 15, "african" = 10, "latino" = 10, "albino" = 5, "weird" = 5))
switch (tmp)
if ("caucasian")
tone = -45 + 35
if ("afroamerican")
tone = -150 + 35
if ("african")
tone = -200 + 35
if ("latino")
tone = -90 + 35
if ("albino")
tone = -1 + 35
if ("weird")
tone = -(rand (1, 220)) + 35
src.s_tone = min(max(tone + rand (-25, 25), -185), 34)
proc/randomize_hair_color(var/target = "hair")
if (prob (50) && target == "facial") // Chance to inherit head color
if (prob (75) && target == "facial") // Chance to inherit hair color
r_facial = r_hair
g_facial = g_hair
b_facial = b_hair
@@ -60,29 +79,29 @@ datum/preferences
var/col = pick ("blonde", "black", "chestnut", "copper", "brown", "wheat", "old", "punk")
switch (col)
if ("blonde")
red = 226
green = 209
blue = 140
red = 255
green = 255
blue = 0
if ("black")
red = 0
green = 0
blue = 0
if ("chestnut")
red = 98
green = 77
blue = 60
red = 153
green = 102
blue = 51
if ("copper")
red = 152
green = 81
blue = 63
red = 255
green = 153
blue = 0
if ("brown")
red = 73
green = 52
blue = 39
red = 102
green = 51
blue = 0
if ("wheat")
red = 210
green = 191
blue = 158
red = 255
green = 255
blue = 153
if ("old")
red = rand (100, 255)
green = red
@@ -92,9 +111,9 @@ datum/preferences
green = rand (0, 255)
blue = rand (0, 255)
red = max(min(red + rand (-10, 10), 255), 0)
green = max(min(green + rand (-10, 10), 255), 0)
blue = max(min(blue + rand (-10, 10), 255), 0)
red = max(min(red + rand (-25, 25), 255), 0)
green = max(min(green + rand (-25, 25), 255), 0)
blue = max(min(blue + rand (-25, 25), 255), 0)
switch (target)
if ("hair")
@@ -122,37 +141,37 @@ datum/preferences
green = red
blue = red
if ("brown")
red = 60
green = 30
blue = 19
if ("chestnut")
red = 127
green = 79
blue = 31
if ("blue")
red = 53
red = 102
green = 51
blue = 64
blue = 0
if ("chestnut")
red = 153
green = 102
blue = 0
if ("blue")
red = 51
green = 102
blue = 204
if ("lightblue")
red = 94
green = 101
blue = 115
red = 102
green = 204
blue = 255
if ("green")
red = 115
green = 114
blue = 84
red = 0
green = 102
blue = 0
if ("albino")
red = rand (100, 255)
green = rand (0, 70)
blue = rand (0, 70)
red = rand (200, 255)
green = rand (0, 150)
blue = rand (0, 150)
if ("weird")
red = rand (0, 255)
green = rand (0, 255)
blue = rand (0, 255)
red = max(min(red + rand (-10, 10), 255), 0)
green = max(min(green + rand (-10, 10), 255), 0)
blue = max(min(blue + rand (-10, 10), 255), 0)
red = max(min(red + rand (-25, 25), 255), 0)
green = max(min(green + rand (-25, 25), 255), 0)
blue = max(min(blue + rand (-25, 25), 255), 0)
r_eyes = red
g_eyes = green
@@ -303,8 +322,9 @@ datum/preferences
else
dat += "\t<a href=\"byond://?src=\ref[user];preferences=1;occ=1\">No Preference</a><br>"
dat += "<hr><table><tr><td><b>Body</b>"
dat += " (<a href=\"byond://?src=\ref[user];preferences=1;s_tone=random;underwear=random;age=random;b_type=random;hair=random;h_style=random;facial=random;f_style=random;eyes=random\">&reg;</A>)<br>" // Random look
dat += "<hr><table><tr><td><b>Body</b> "
dat += "(<a href=\"byond://?src=\ref[user];preferences=1;s_tone=random;underwear=random;age=random;b_type=random;hair=random;h_style=random;facial=random;f_style=random;eyes=random\">&reg;</A>)" // Random look
dat += "<br>"
dat += "Blood Type: <a href='byond://?src=\ref[user];preferences=1;b_type=input'>[src.b_type]</a><br>"
dat += "Skin Tone: <a href='byond://?src=\ref[user];preferences=1;s_tone=input'>[-src.s_tone + 35]/220<br></a>"
@@ -517,7 +537,7 @@ datum/preferences
if (new_b_type)
src.b_type = new_b_type
if ("random")
src.b_type = pick ("A+", "A-", "B+", "B-", "AB+", "AB-", "O+", "O-")
src.b_type = pickweight ( list ("A+" = 31, "A-" = 7, "B+" = 8, "B-" = 2, "AB+" = 2, "AB-" = 1, "O+" = 40, "O-" = 9))
if (link_tags["hair"])
@@ -614,7 +634,7 @@ datum/preferences
if (link_tags["s_tone"])
switch(link_tags["s_tone"])
if ("random")
src.s_tone = (-(rand (1, 220))) -35
randomize_skin_tone()
if("input")
var/new_tone = input(user, "Please select skin tone level: 1-220 (1=albino, 35=caucasian, 150=black, 220='very' black)", "Character Generation") as text
if (new_tone)
@@ -639,10 +659,10 @@ datum/preferences
if (link_tags["f_style"])
switch(link_tags["f_style"])
if ("random")
if (src.gender == FEMALE && !prob (1))
src.f_style = "Shaved"
if (src.gender == FEMALE)
src.f_style = pickweight ( list("Watson" = 1, "Chaplin" = 1, "Selleck" = 1, "Full Beard" = 1, "Long Beard" = 1, "Neckbeard" = 1, "Van Dyke" = 1, "Elvis" = 1, "Abe" = 1, "Chinstrap" = 1, "Hipster" = 1, "Goatee" = 1, "Hogan" = 1, "Shaved" = 100))
else
src.f_style = pick ("Watson", "Chaplin", "Selleck", "Full Beard", "Long Beard", "Neckbeard", "Van Dyke", "Elvis", "Abe", "Chinstrap", "Hipster", "Goatee", "Hogan")
src.f_style = pickweight ( list("Watson" = 1, "Chaplin" = 1, "Selleck" = 1, "Full Beard" = 1, "Long Beard" = 1, "Neckbeard" = 1, "Van Dyke" = 1, "Elvis" = 1, "Abe" = 1, "Chinstrap" = 1, "Hipster" = 1, "Goatee" = 1, "Hogan" = 1, "Shaved" = 10))
if("input")
var/new_style = input(user, "Please select facial style", "Character Generation") as null|anything in list("Watson", "Chaplin", "Selleck", "Full Beard", "Long Beard", "Neckbeard", "Van Dyke", "Elvis", "Abe", "Chinstrap", "Hipster", "Goatee", "Hogan", "Shaved")
if (new_style)
@@ -670,7 +690,7 @@ datum/preferences
if(!IsGuestKey(user.key))
switch(link_tags["underwear"])
if ("random")
if (prob (65))
if (prob (75))
src.underwear = 1
else
src.underwear = 0

View File

@@ -19,8 +19,8 @@
//Amount of air needed before pass out/suffocation commences
// Factor of how fast mob nutrition decreases
#define HUNGER_FACTOR 0.07
#define HUNGER_FACTOR 0.1
#define REAGENTS_METABOLISM 0.4
#define MINIMUM_AIR_RATIO_TO_SUSPEND 0.05
//Minimum ratio of air that must move to/from a tile to suspend group processing