"+pick("You see a light at the end of the tunnel!", "You feel like you could die any moment now.", "You're about to lose consciousness.")
+
+
+/mob/living/carbon/human/proc/handle_clothing()
+ // Non-visual stuff that was in update_clothing()
+
+ if(buckled)
+ if(istype(buckled, /obj/structure/stool/bed/chair))
+ lying = 0
+ else
+ lying = 1
+
+ if(!w_uniform)
+ // Automatically drop anything in store / id / belt if you're not wearing a uniform.
+ for (var/obj/item/thing in list(r_store, l_store, wear_id, belt))
+ if (thing)
+ u_equip(thing)
+ if (client)
+ client.screen -= thing
+ if (thing)
+ thing.loc = loc
+ thing.dropped(src)
+ thing.layer = initial(thing.layer)
+
+ // Why this stuff was in handle_clothing() is beyond me
+ var/shielded = 0
+ for (var/obj/item/weapon/cloaking_device/S in src)
+ if (S.active)
+ shielded = 2
+ break
+
+ if(istype(wear_suit, /obj/item/clothing/suit/space/space_ninja)&&wear_suit:s_active)
+ shielded = 3
+ switch(shielded)
+ if(1)
+ if(2)
+ invisibility = 2
+ //New stealth. Hopefully doesn't lag too much. /N
+ if(istype(loc, /turf))//If they are standing on a turf.
+ AddCamoOverlay(loc)//Overlay camo.
+ if(3)
+ if(istype(loc, /turf))
+ //Ninjas may flick into view once in a while if they are stealthed.
+ if(prob(90))
+ NinjaStealthActive(loc)
+ else
+ NinjaStealthMalf()
+ else
+ invisibility = 0
+
+ name = get_visible_name()
diff --git a/code/modules/mob/living/carbon/human/login.dm b/code/modules/mob/living/carbon/human/login.dm
index 6bbbc532d27..78cf259a7cd 100644
--- a/code/modules/mob/living/carbon/human/login.dm
+++ b/code/modules/mob/living/carbon/human/login.dm
@@ -1,7 +1,7 @@
/mob/living/carbon/human/Login()
..()
- update_clothing()
+ rebuild_appearance()
if (!isturf(src.loc))
src.client.eye = src.loc
diff --git a/code/modules/mob/living/carbon/metroid/login.dm b/code/modules/mob/living/carbon/metroid/login.dm
index 6b696c8a516..e954e353e76 100644
--- a/code/modules/mob/living/carbon/metroid/login.dm
+++ b/code/modules/mob/living/carbon/metroid/login.dm
@@ -1,7 +1,7 @@
/mob/living/carbon/metroid/Login()
..()
- update_clothing()
+ rebuild_appearance()
if (!isturf(src.loc))
src.client.eye = src.loc
diff --git a/code/modules/mob/living/carbon/metroid/metroid.dm b/code/modules/mob/living/carbon/metroid/metroid.dm
index 85590d06d21..fc3ff215c6d 100644
--- a/code/modules/mob/living/carbon/metroid/metroid.dm
+++ b/code/modules/mob/living/carbon/metroid/metroid.dm
@@ -9,7 +9,7 @@
real_name = name
spawn (1)
- update_clothing()
+ rebuild_appearance()
src << "\blue Your icons have been generated!"
..()
diff --git a/code/modules/mob/living/carbon/monkey/life.dm b/code/modules/mob/living/carbon/monkey/life.dm
index 70489c1117a..e4baace6694 100644
--- a/code/modules/mob/living/carbon/monkey/life.dm
+++ b/code/modules/mob/living/carbon/monkey/life.dm
@@ -187,7 +187,7 @@
if(!loc) return //probably ought to make a proper fix for this, but :effort: --NeoFite
var/datum/gas_mixture/environment = loc.return_air()
- var/datum/air_group/breath
+ var/datum/gas_mixture/breath
if(losebreath>0) //Suffocating so do not take a breath
src.losebreath--
diff --git a/code/modules/mob/living/carbon/monkey/login.dm b/code/modules/mob/living/carbon/monkey/login.dm
index 9f24a42fec6..1fb31db3874 100644
--- a/code/modules/mob/living/carbon/monkey/login.dm
+++ b/code/modules/mob/living/carbon/monkey/login.dm
@@ -1,7 +1,7 @@
/mob/living/carbon/monkey/Login()
..()
- update_clothing()
+ rebuild_appearance()
/*
if (!( src.primary ))
var/t1 = rand(1000, 1500)
diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm
index ad85a5e6d0c..f97a0aa2ef1 100644
--- a/code/modules/mob/living/carbon/monkey/monkey.dm
+++ b/code/modules/mob/living/carbon/monkey/monkey.dm
@@ -69,7 +69,7 @@
if(!lying_icon)
lying_icon = new /icon('monkey.dmi', "monkey0")
icon = stand_icon
- update_clothing()
+ rebuild_appearance()
src << "\blue Your icons have been generated!"
..()
@@ -930,7 +930,6 @@
UpdateDamageIcon()
updatehealth()
- update_clothing()
return 1
/*/mob/living/carbon/monkey/UpdateDamageIcon()
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index aa829b0930e..c1067a0523a 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -40,14 +40,8 @@
return 0
var/mob/living/carbon/human/H = src //make this damage method divide the damage to be done among all the body parts, then burn each body part for that much damage. will have better effect then just randomly picking a body part
var/divided_damage = (burn_amount)/(H.organs.len)
- var/extradam = 0 //added to when organ is at max dam
for(var/name in H.organs)
- var/datum/organ/external/affecting = H.organs[name]
- if(!affecting) continue
- if(affecting.take_damage(0, divided_damage+extradam, 0, used_weapon))
- extradam = 0
- else
- extradam += divided_damage
+ apply_damage(divided_damage, BURN, name, 0, 0, "Skin Burns")
H.UpdateDamageIcon()
H.updatehealth()
return 1
diff --git a/code/modules/mob/living/parasite/meme.dm b/code/modules/mob/living/parasite/meme.dm
index e3d7b53d467..c3c65b9911f 100644
--- a/code/modules/mob/living/parasite/meme.dm
+++ b/code/modules/mob/living/parasite/meme.dm
@@ -498,7 +498,6 @@ mob/living/parasite/meme/verb/Analgesic()
mob/proc/clearHUD()
- update_clothing()
if(client) client.screen.Cut()
// Take control of the mob
diff --git a/code/modules/mob/living/silicon/ai/login.dm b/code/modules/mob/living/silicon/ai/login.dm
index 959a83abcf3..7a294615bf3 100644
--- a/code/modules/mob/living/silicon/ai/login.dm
+++ b/code/modules/mob/living/silicon/ai/login.dm
@@ -1,6 +1,6 @@
/mob/living/silicon/ai/Login()
..()
- update_clothing()
+ rebuild_appearance()
for(var/S in src.client.screen)
del(S)
src.flash = new /obj/screen( null )
diff --git a/code/modules/mob/living/silicon/robot/hud.dm b/code/modules/mob/living/silicon/robot/hud.dm
index d272c96f3a4..41100e1066c 100644
--- a/code/modules/mob/living/silicon/robot/hud.dm
+++ b/code/modules/mob/living/silicon/robot/hud.dm
@@ -202,7 +202,7 @@
mymob.pullin.icon = 'screen1_robot.dmi'
mymob.pullin.icon_state = "pull0"
mymob.pullin.name = "pull"
- mymob.pullin.screen_loc = ui_pull_old
+ mymob.pullin.screen_loc = ui_pull_borg
mymob.blind = new /obj/screen( null )
mymob.blind.icon = 'screen1_robot.dmi'
diff --git a/code/modules/mob/living/silicon/robot/login.dm b/code/modules/mob/living/silicon/robot/login.dm
index 1127d6bebb7..728112e394e 100644
--- a/code/modules/mob/living/silicon/robot/login.dm
+++ b/code/modules/mob/living/silicon/robot/login.dm
@@ -1,7 +1,7 @@
/mob/living/silicon/robot/Login()
..()
- update_clothing()
+ rebuild_appearance()
if (!isturf(src.loc))
src.client.eye = src.loc
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index 18c54e635e5..6c752c4da8c 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -177,9 +177,6 @@
item.loc = null
item.layer = initial(item.layer)
u_equip(item)
- //if (client)
- // client.screen -= item
- //update_clothing()
return
/mob/proc/get_active_hand()
@@ -1161,5 +1158,27 @@ note dizziness decrements automatically in the mob's Life() proc.
if(!isemptylist(args))
for(var/file in args)
src << browse_rsc(file)
- return 1
- return 0
+ return 1
+ return 0
+
+
+/** The stuff below here really should be in /mob/living, but due to tons of procs that should only
+ take /mob/living only taking /mob(or, indeed, some silly procs relying on usr.. yes, *procs*, not verbs..),
+ I'm putting this stuff into /mob for now
+**/
+/mob/proc/rebuild_appearance()
+ // Rebuild the entire mob appearance completely, this should ONLY be called in rare cases,
+ // e.g. when the mob spawns.
+ return update_clothing() // most mobs still implement update_clothing() by simply rebuilding the entire appearance
+
+/mob/proc/update_body_appearance()
+ // Call this proc whenever something about the appearance of the body itself changes.
+ // For example, this must be called when you add a wound to a mob.
+
+/mob/proc/update_lying()
+ // Call this whenever the lying status of a mob changes.
+
+/mob/update_clothing()
+ // Call this proc whenever something about the clothing of a mob changes. Normally, you
+ // don't need to call this by hand, as the equip procs will do it for you.
+ ..()
diff --git a/code/modules/mob/organ/organ.dm b/code/modules/mob/organ/organ.dm
index 4070542e6c7..24d7e967c27 100644
--- a/code/modules/mob/organ/organ.dm
+++ b/code/modules/mob/organ/organ.dm
@@ -104,7 +104,7 @@
burn *= 0.66 //~2/3 damage for ROBOLIMBS
if(owner && !robot)
- owner.pain(display_name, (brute+burn)*3, 1)
+ owner.pain(display_name, (brute+burn)*3, 1, burn > brute)
if(sharp)
var/nux = brute * rand(10,15)
if(brute_dam >= max_damage)
@@ -235,7 +235,8 @@
var/datum/autopsy_data/W = autopsy_data[V]
del W
autopsy_data = list()
- return update_icon()
+ var/result = update_icon()
+ return result
proc/add_wound(var/used_weapon, var/damage)
var/datum/autopsy_data/W = autopsy_data[used_weapon]
@@ -248,6 +249,7 @@
W.damage += damage
W.time_inflicted = world.time
+ owner.update_body_appearance()
proc/get_damage() //returns total damage
@@ -314,6 +316,7 @@
var/n_is = damage_state_text()
if (n_is != damage_state)
damage_state = n_is
+ owner.update_body_appearance() // I'm not sure about this, Sky probably knows better where to put it
return 1
return 0
@@ -412,7 +415,7 @@
for(var/datum/organ/wound/W in wounds)
W.update_health()
del(W)
- owner.update_body()
+ owner.update_body_appearance()
owner.update_clothing()
proc/createwound(var/size = 1, var/type = 0, var/damage)
diff --git a/code/modules/mob/organ/pain.dm b/code/modules/mob/organ/pain.dm
index 21825ce8eaa..3213b26ffae 100644
--- a/code/modules/mob/organ/pain.dm
+++ b/code/modules/mob/organ/pain.dm
@@ -7,7 +7,7 @@ mob/var/next_pain_time = 0
// partname is the name of a body part
// amount is a num from 1 to 100
-mob/proc/pain(var/partname, var/amount, var/force)
+mob/proc/pain(var/partname, var/amount, var/force, var/burning = 0)
if(stat >= 2) return
if(world.time < next_pain_time && !force)
return
@@ -17,15 +17,26 @@ mob/proc/pain(var/partname, var/amount, var/force)
if(amount > 50 && prob(amount / 5))
src:drop_item()
var/msg
- switch(amount)
- if(1 to 10)
- msg = "Your [partname] hurts a bit."
- if(11 to 90)
- flash_weak_pain()
- msg = "Ouch! Your [partname] hurts."
- if(91 to 10000)
- flash_pain()
- msg = "OH GOD! Your [partname] is hurting terribly!"
+ if(burning)
+ switch(amount)
+ if(1 to 10)
+ msg = "\red Your [partname] burns."
+ if(11 to 90)
+ flash_weak_pain()
+ msg = "\red Your [partname] burns badly!"
+ if(91 to 10000)
+ flash_pain()
+ msg = "\red OH GOD! Your [partname] is on fire!"
+ else
+ switch(amount)
+ if(1 to 10)
+ msg = "Your [partname] hurts."
+ if(11 to 90)
+ flash_weak_pain()
+ msg = "Your [partname] hurts badly."
+ if(91 to 10000)
+ flash_pain()
+ msg = "OH GOD! Your [partname] is hurting terribly!"
if(msg && (msg != last_pain_message || prob(10)))
last_pain_message = msg
src << msg
diff --git a/code/modules/mob/simple_animal/corgi.dm b/code/modules/mob/simple_animal/corgi.dm
index 2461e55f6e6..504c81d8faa 100644
--- a/code/modules/mob/simple_animal/corgi.dm
+++ b/code/modules/mob/simple_animal/corgi.dm
@@ -47,7 +47,7 @@
/mob/living/simple_animal/corgi/Life()
..()
- update_clothing()
+ rebuild_appearance()
/mob/living/simple_animal/corgi/show_inv(mob/user as mob)
/*
@@ -182,7 +182,6 @@
usr.drop_item()
item_to_add.loc = src
src.inventory_head = item_to_add
- update_clothing()
//Various hats and items (worn on his head) change Ian's behaviour. His attributes are reset when a HAT is removed.
diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm
index d5575e28ae5..a1e940182ab 100644
--- a/code/modules/mob/transform_procs.dm
+++ b/code/modules/mob/transform_procs.dm
@@ -5,7 +5,7 @@
if (W==w_uniform) // will be teared
continue
drop_from_slot(W)
- update_clothing()
+ rebuild_appearance()
monkeyizing = 1
canmove = 0
stunned = 1
@@ -69,7 +69,7 @@
return
for(var/obj/item/W in src)
drop_from_slot(W)
- update_clothing()
+ rebuild_appearance()
monkeyizing = 1
canmove = 0
icon = null
@@ -156,7 +156,7 @@
return
for(var/obj/item/W in src)
drop_from_slot(W)
- update_clothing()
+ rebuild_appearance()
monkeyizing = 1
canmove = 0
icon = null
@@ -222,7 +222,7 @@
return
for(var/obj/item/W in src)
drop_from_slot(W)
- update_clothing()
+ rebuild_appearance()
monkeyizing = 1
canmove = 0
icon = null
@@ -262,7 +262,7 @@
return
for(var/obj/item/W in src)
drop_from_slot(W)
- update_clothing()
+ rebuild_appearance()
monkeyizing = 1
canmove = 0
icon = null
@@ -313,7 +313,7 @@
return
for(var/obj/item/W in src)
drop_from_slot(W)
- update_clothing()
+ rebuild_appearance()
monkeyizing = 1
canmove = 0
icon = null
@@ -347,7 +347,7 @@
return
for(var/obj/item/W in src)
drop_from_slot(W)
- update_clothing()
+ rebuild_appearance()
monkeyizing = 1
canmove = 0
icon = null
diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index 9f5d6156ae3..99e93705c4b 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -388,7 +388,7 @@ mob/proc
spawn(0) //Make it show the 2 states properly
if(target_locked)
target_locked.icon_state = "locking"
- update_clothing()
+ update_clothing() // update_clothing clears overlays, so this might break stuff
sleep(20)
if(target_locked)
target_locked.icon_state = "locked"
diff --git a/code/setup.dm b/code/setup.dm
index ae22ad53adc..0208423c852 100644
--- a/code/setup.dm
+++ b/code/setup.dm
@@ -14,6 +14,16 @@
#define MOLES_PLASMA_VISIBLE 0.5 //Moles in a standard cell after which plasma is visible
+#define SPECIFIC_HEAT_TOXIN 200
+#define SPECIFIC_HEAT_AIR 20
+#define SPECIFIC_HEAT_CDO 30
+#define HEAT_CAPACITY_CALCULATION(oxygen,carbon_dioxide,nitrogen,toxins) \
+ (carbon_dioxide*SPECIFIC_HEAT_CDO + (oxygen+nitrogen)*SPECIFIC_HEAT_AIR + toxins*SPECIFIC_HEAT_TOXIN)
+
+#define MINIMUM_HEAT_CAPACITY 0.0003
+#define QUANTIZE(variable) (round(variable,0.0001))
+#define TRANSFER_FRACTION 5 //What fraction (1/#) of the air difference to try and transfer
+
#define BREATH_VOLUME 0.5 //liters in a normal breath
#define BREATH_PERCENTAGE BREATH_VOLUME/CELL_VOLUME
//Amount of air to take a from a tile
diff --git a/html/changelog.html b/html/changelog.html
index 668176c0552..223bb93d994 100644
--- a/html/changelog.html
+++ b/html/changelog.html
@@ -56,6 +56,26 @@ Stuff which is in development and not yet visible to players or just code relate
should be listed in the changelog upon commit though. Thanks. -->
+
+
29 May 2012
+
Aryn updated:
+
+ - Airflow works on a room-by-room basis rather than on individual tiles. Rooms will depressurize much faster than they did, though not too fast for balance reasons.
+ - Fire now works on a logarithmic scale based on oxygen and fuel content. This is a far more complex tweak under the hood than it is in game.
+ - Plasma now has increased toxicity and can burn exposed skin and eyes. In addition, because of the new air, it fills the room instantaneously. Try not to spill any.
+
+
+
+
+
28 May 2012
+
Erthilo updated:
+
+ - Surgeons spawn with scrubs, Emergency Physicians spawn with first responder jackets.
+ - Added water bottles to cola vending machines.
+ - More HUD changes: https://dl.dropbox.com/u/4911517/ShareX/2012-05/2012-05-28_20-40-50.png
+
+
+
27 May 2012
Abi79 updated:
@@ -123,11 +143,11 @@ should be listed in the changelog upon commit though. Thanks. -->
-
22 May 2012
+
22 May 2012
cib updated:
- Worked out a few problems with meme. They now can see, even if their mob is sleeping. Their actions are properly tracked in admin logs. Their points recharge slightly faster, and can now be seen in the Status tab.
-
+
Erthilo updated:
- Some sleeping and resting fixes. Please report any more bugs with it!
@@ -169,17 +189,17 @@ should be listed in the changelog upon commit though. Thanks. -->
Erthilo updated:
- You can now right-click pick up items and open/close closets items. This means cyborgs can now open/close closets with a bit of fiddling!
- - Added confirmation pop-up for character slot deletion.
+ - Added confirmation pop-up for character slot deletion.
-
19 May 2012
+
19 May 2012
cib updated:
- Implemented Memetic Anomaly game mode. A meme is a kind of parasite that can live in a human host and jump from player to player. They have traitor-like objectives, but must achieve them by controlling hosts, rather than doing it themselves.
- Credits for the idea goes to: SCP-1312-1 . Playtesters: Erthilo, Cael_Aislin, AfterShave and critica.
-
+
TG updated:
- You can now swap hands by clicking with your middle mouse button (you have to click on a visible object though, that's the catch).
@@ -262,7 +282,7 @@ should be listed in the changelog upon commit though. Thanks. -->
- Fixes mech weapons not firing.
- Added cable restraints, made from 15 lengths of cable coil by right-click a cable coil in-hand and choosing 'Make Cable Restraints'. These works just like handcuffs, but only take 30 seconds to break!
- The Head of Personnel can now change alert levels.
- - Fixes lockdown computers being blank.
+ - Fixes lockdown computers being blank.
diff --git a/icons/effects/contamination.dmi b/icons/effects/contamination.dmi
new file mode 100644
index 00000000000..e0f34e26469
Binary files /dev/null and b/icons/effects/contamination.dmi differ
diff --git a/icons/effects/genetics.dmi b/icons/effects/genetics.dmi
index ab2916710ac..d9a8e5f9ed5 100644
Binary files a/icons/effects/genetics.dmi and b/icons/effects/genetics.dmi differ
diff --git a/icons/effects/plasma.dmi b/icons/effects/plasma.dmi
index bf287fde3ec..5f9137267d4 100644
Binary files a/icons/effects/plasma.dmi and b/icons/effects/plasma.dmi differ
diff --git a/icons/effects/tile_effects.dmi b/icons/effects/tile_effects.dmi
index 4c78f8f2e06..5ed60b7adcd 100644
Binary files a/icons/effects/tile_effects.dmi and b/icons/effects/tile_effects.dmi differ
diff --git a/icons/mob/livestock.dmi b/icons/mob/livestock.dmi
index 43e485a297c..538e14b1ea1 100644
Binary files a/icons/mob/livestock.dmi and b/icons/mob/livestock.dmi differ
diff --git a/icons/mob/screen1_Midnight.dmi b/icons/mob/screen1_Midnight.dmi
index 42d15482c22..e37b1cce29a 100644
Binary files a/icons/mob/screen1_Midnight.dmi and b/icons/mob/screen1_Midnight.dmi differ
diff --git a/icons/mob/screen1_Orange.dmi b/icons/mob/screen1_Orange.dmi
index e3762ef4b2b..fb1136a5347 100644
Binary files a/icons/mob/screen1_Orange.dmi and b/icons/mob/screen1_Orange.dmi differ
diff --git a/icons/mob/screen1_old.dmi b/icons/mob/screen1_old.dmi
index 98ea94f656d..37d67820992 100644
Binary files a/icons/mob/screen1_old.dmi and b/icons/mob/screen1_old.dmi differ
diff --git a/icons/mob/zone_sel.dmi b/icons/mob/zone_sel.dmi
index 7f8bb1c4741..b7549296d2c 100644
Binary files a/icons/mob/zone_sel.dmi and b/icons/mob/zone_sel.dmi differ
diff --git a/icons/obj/custom_items.dmi b/icons/obj/custom_items.dmi
index cf18853c68d..700fc99bf16 100644
Binary files a/icons/obj/custom_items.dmi and b/icons/obj/custom_items.dmi differ
diff --git a/icons/obj/drinks.dmi b/icons/obj/drinks.dmi
index 11a133c079f..e4652f8b620 100644
Binary files a/icons/obj/drinks.dmi and b/icons/obj/drinks.dmi differ