Merge branch 'master' of https://github.com/ParadiseSS13/Paradise into OrganRefactor

This commit is contained in:
Aurorablade
2016-02-02 15:35:54 -05:00
145 changed files with 1485 additions and 1290 deletions
+11 -7
View File
@@ -210,7 +210,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
..()
statpanel("Status")
if (client.statpanel == "Status")
stat(null, "Station Time: [worldtime2text()]")
show_stat_station_time()
if(ticker)
if(ticker.mode)
//world << "DEBUG: ticker not null"
@@ -218,10 +218,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
//world << "DEBUG: malf mode ticker test"
if(ticker.mode:malf_mode_declared)
stat(null, "Time left: [max(ticker.mode:AI_win_timeleft/(ticker.mode:apcs/3), 0)]")
if(shuttle_master.emergency.mode >= SHUTTLE_RECALL)
var/timeleft = shuttle_master.emergency.timeLeft()
if(timeleft > 0)
stat(null, "[add_zero(num2text((timeleft / 60) % 60),2)]:[add_zero(num2text(timeleft % 60), 2)]")
show_stat_emergency_shuttle_eta()
/mob/dead/observer/verb/reenter_corpse()
set category = "Ghost"
@@ -237,10 +234,17 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
usr << "<span class='warning'>Another consciousness is in your body...It is resisting you.</span>"
return
if(mind.current.ajourn && mind.current.stat != DEAD) //check if the corpse is astral-journeying (it's client ghosted using a cultist rune).
var/obj/effect/rune/R = locate() in mind.current.loc //whilst corpse is alive, we can only reenter the body if it's on the rune
if(!(R && R.word1 == cultwords["hell"] && R.word2 == cultwords["travel"] && R.word3 == cultwords["self"])) //astral journeying rune
var/turf/T = get_turf(mind.current)
var/found_astral_rune = 0
if(T)
for(var/obj/effect/rune/R in T.contents) //whilst corpse is alive, we can only reenter the body if it's on the rune
if(R.word1 == cultwords["hell"] && R.word2 == cultwords["travel"] && R.word3 == cultwords["self"]) //astral journeying rune
found_astral_rune = 1
break
if(!found_astral_rune)
usr << "<span class='warning'>The astral cord that ties your body and your spirit has been severed. You are likely to wander the realm beyond until your body is finally dead and thus reunited with you.</span>"
return
mind.current.ajourn=0
mind.current.key = key
@@ -182,10 +182,7 @@
//if (client.statpanel == "Status")//ORGANS
// stat(null, "Plasma Stored: [getPlasma()]/[max_plasma]")
if(shuttle_master.emergency.mode >= SHUTTLE_RECALL)
var/timeleft = shuttle_master.emergency.timeLeft()
if(timeleft > 0)
stat(null, "[add_zero(num2text((timeleft / 60) % 60),2)]:[add_zero(num2text(timeleft % 60), 2)]")
show_stat_emergency_shuttle_eta()
/mob/living/carbon/alien/Stun(amount)
if(status_flags & CANSTUN)
@@ -83,12 +83,8 @@ I'm using this for Stat to give it a more nifty interface to work with
..()
if(has_synthetic_assistance())
statpanel("Status")
stat(null, "Station Time: [worldtime2text()]")
if(shuttle_master.emergency.mode >= SHUTTLE_RECALL)
var/timeleft = shuttle_master.emergency.timeLeft()
if(timeleft > 0)
stat(null, "[add_zero(num2text((timeleft / 60) % 60),2)]:[add_zero(num2text(timeleft % 60), 2)]")
show_stat_station_time()
show_stat_emergency_shuttle_eta()
if(client.statpanel == "Status")
//Knowing how well-off your mech is doing is really important as an MMI
+1
View File
@@ -26,6 +26,7 @@
qdel(guts)
for(var/atom/movable/food in stomach_contents)
qdel(food)
remove_from_all_data_huds()
return ..()
/mob/living/carbon/blob_act()
+12 -2
View File
@@ -32,9 +32,19 @@
else //Everyone else fails, skip the emote attempt
return
if("squish")
var/found_slime_bodypart = 0
if(species.name == "Slime People") //Only Slime People can squish
on_CD = handle_emote_CD() //proc located in code\modules\mob\emote.dm
else //Everyone else fails, skip the emote attempt
on_CD = handle_emote_CD() //proc located in code\modules\mob\emote.dm'
found_slime_bodypart = 1
else
for(var/obj/item/organ/external/L in organs) // if your limbs are squishy you can squish too!
if(L.dna.species in list("Slime People"))
on_CD = handle_emote_CD()
found_slime_bodypart = 1
break
if(!found_slime_bodypart) //Everyone else fails, skip the emote attempt
return
if("scream", "fart", "flip", "snap")
on_CD = handle_emote_CD() //proc located in code\modules\mob\emote.dm
+10 -34
View File
@@ -95,9 +95,9 @@
h_style = "Bald"
..(new_loc, "Vox Armalis")
/mob/living/carbon/human/skellington/New(var/new_loc)
/mob/living/carbon/human/skeleton/New(var/new_loc)
h_style = "Bald"
..(new_loc, "Skellington")
..(new_loc, "Skeleton")
/mob/living/carbon/human/kidan/New(var/new_loc)
..(new_loc, "Kidan")
@@ -252,15 +252,13 @@
stat(null, "Intent: [a_intent]")
stat(null, "Move Mode: [m_intent]")
stat(null, "Station Time: [worldtime2text()]")
show_stat_station_time()
if(ticker && ticker.mode && ticker.mode.name == "AI malfunction")
if(ticker.mode:malf_mode_declared)
stat(null, "Time left: [max(ticker.mode:AI_win_timeleft/(ticker.mode:apcs/3), 0)]")
if(shuttle_master.emergency.mode >= SHUTTLE_RECALL)
var/timeleft = shuttle_master.emergency.timeLeft()
if(timeleft > 0)
stat(null, "[add_zero(num2text((timeleft / 60) % 60),2)]:[add_zero(num2text(timeleft % 60), 2)]")
show_stat_emergency_shuttle_eta()
if(client.statpanel == "Status")
if(locate(/obj/item/device/assembly/health) in src)
@@ -384,33 +382,7 @@
if(prob(50) && !shielded)
Paralyse(10)
var/update = 0
var/weapon_message = "Explosive Blast"
for(var/obj/item/organ/external/temp in organs)
switch(temp.limb_name)
if("head")
update |= temp.take_damage(b_loss * 0.2, f_loss * 0.2, used_weapon = weapon_message)
if("chest")
update |= temp.take_damage(b_loss * 0.4, f_loss * 0.4, used_weapon = weapon_message)
if("groin")
update |= temp.take_damage(b_loss * 0.1, f_loss * 0.1, used_weapon = weapon_message)
if("l_arm")
update |= temp.take_damage(b_loss * 0.05, f_loss * 0.05, used_weapon = weapon_message)
if("r_arm")
update |= temp.take_damage(b_loss * 0.05, f_loss * 0.05, used_weapon = weapon_message)
if("l_leg")
update |= temp.take_damage(b_loss * 0.05, f_loss * 0.05, used_weapon = weapon_message)
if("r_leg")
update |= temp.take_damage(b_loss * 0.05, f_loss * 0.05, used_weapon = weapon_message)
if("r_foot")
update |= temp.take_damage(b_loss * 0.025, f_loss * 0.025, used_weapon = weapon_message)
if("l_foot")
update |= temp.take_damage(b_loss * 0.025, f_loss * 0.025, used_weapon = weapon_message)
if("r_hand")
update |= temp.take_damage(b_loss * 0.025, f_loss * 0.025, used_weapon = weapon_message)
if("l_hand")
update |= temp.take_damage(b_loss * 0.025, f_loss * 0.025, used_weapon = weapon_message)
if(update) UpdateDamageIcon()
take_overall_damage(b_loss,f_loss, used_weapon = "Explosive Blast")
..()
@@ -1504,6 +1476,10 @@
maxHealth = species.total_health
toxins_alert = 0
oxygen_alert = 0
fire_alert = 0
if(species.language)
add_language(species.language)
@@ -142,7 +142,7 @@
/mob/living/carbon/human/adjustCloneLoss(var/amount)
..()
if(species.flags & (NO_DNA_RAD))
if(species.flags & (NO_DNA))
cloneloss = 0
return
@@ -17,6 +17,9 @@
has_organ = list(
"brain" = /obj/item/organ/internal/brain/golem
)
suicide_messages = list(
"is crumbling into dust!",
"is smashing their body apart!")
/datum/species/golem/handle_post_spawn(var/mob/living/carbon/human/H)
if(H.mind)
@@ -20,6 +20,11 @@
bodyflags = FEET_NOSLIP
dietflags = DIET_OMNI //the mutation process allowed you to now digest all foods regardless of initial race
reagent_tag = PROCESS_ORG
suicide_messages = list(
"is attempting to bite their tongue off!",
"is jamming their claws into their eye sockets!",
"is twisting their own neck!",
"is staring into the closest light source!")
/datum/species/shadow/handle_death(var/mob/living/carbon/human/H)
H.dust()
@@ -0,0 +1,38 @@
/datum/species/skeleton
name = "Skeleton"
name_plural = "Skeletons"
blurb = "Spoopy and scary."
icobase = 'icons/mob/human_races/r_skeleton.dmi'
deform = 'icons/mob/human_races/r_skeleton.dmi'
path = /mob/living/carbon/human/skeleton
default_language = "Galactic Common"
unarmed_type = /datum/unarmed_attack/punch
blood_color = "#FFFFFF"
flesh_color = "#E6E6C6"
flags = NO_BREATHE | NO_BLOOD | RADIMMUNE
virus_immune = 1 //why is this a var and not a flag?
dietflags = DIET_OMNI
reagent_tag = PROCESS_ORG
warning_low_pressure = -1
hazard_low_pressure = -1
hazard_high_pressure = 999999999
warning_high_pressure = 999999999
cold_level_1 = -1
cold_level_2 = -1
cold_level_3 = -1
heat_level_1 = 999999999
heat_level_2 = 999999999
heat_level_3 = 999999999
heat_level_3_breathe = 999999999
suicide_messages = list(
"is snapping their own bones!",
"is collapsing into a pile!",
"is twisting their skull off!")
@@ -88,6 +88,11 @@
//Death vars.
var/death_message = "seizes up and falls limp, their eyes dead and lifeless..."
var/list/suicide_messages = list(
"is attempting to bite their tongue off!",
"is jamming their thumbs into their eye sockets!",
"is twisting their own neck!",
"is holding their breath!")
// Language/culture vars.
var/default_language = "Galactic Common" // Default language is used when 'say' is used without modifiers.
@@ -55,6 +55,12 @@
flesh_color = "#34AF10"
reagent_tag = PROCESS_ORG
base_color = "#066000"
suicide_messages = list(
"is attempting to bite their tongue off!",
"is jamming their claws into their eye sockets!",
"is twisting their own neck!",
"is holding their breath!")
/datum/species/unathi/handle_death(var/mob/living/carbon/human/H)
H.stop_tail_wagging(1)
@@ -100,6 +106,12 @@
reagent_tag = PROCESS_ORG
flesh_color = "#AFA59E"
base_color = "#333333"
suicide_messages = list(
"is attempting to bite their tongue off!",
"is jamming their claws into their eye sockets!",
"is twisting their own neck!",
"is holding their breath!")
/datum/species/tajaran/handle_death(var/mob/living/carbon/human/H)
H.stop_tail_wagging(1)
@@ -135,6 +147,12 @@
reagent_tag = PROCESS_ORG
flesh_color = "#966464"
base_color = "#B43214"
suicide_messages = list(
"is attempting to bite their tongue off!",
"is jamming their claws into their eye sockets!",
"is twisting their own neck!",
"is holding their breath!")
/datum/species/vulpkanin/handle_death(var/mob/living/carbon/human/H)
H.stop_tail_wagging(1)
@@ -206,6 +224,13 @@
flesh_color = "#808D11"
reagent_tag = PROCESS_ORG
suicide_messages = list(
"is attempting to bite their tongue off!",
"is jamming their claws into their eye sockets!",
"is twisting their own neck!",
"is holding their breath!",
"is deeply inhaling oxygen!")
/datum/species/vox/handle_death(var/mob/living/carbon/human/H)
H.stop_tail_wagging(1)
@@ -292,6 +317,13 @@
"eyes" = /obj/item/organ/internal/eyes,
"stack" = /obj/item/organ/internal/stack/vox
)
suicide_messages = list(
"is attempting to bite their tongue off!",
"is jamming their claws into their eye sockets!",
"is twisting their own neck!",
"is holding their breath!",
"is huffing oxygen!")
/datum/species/kidan
name = "Kidan"
@@ -311,6 +343,12 @@
dietflags = DIET_HERB
blood_color = "#FB9800"
reagent_tag = PROCESS_ORG
suicide_messages = list(
"is attempting to bite their antenna off!",
"is jamming their claws into their eye sockets!",
"is twisting their own neck!",
"is holding their breath!")
/datum/species/slime
name = "Slime People"
@@ -333,6 +371,10 @@
has_organ = list(
"brain" = /obj/item/organ/internal/brain/slime
)
suicide_messages = list(
"is melting into a puddle!",
"is turning a dull, brown color and melting into a puddle!")
/datum/species/grey
name = "Grey"
@@ -433,6 +475,10 @@
"l_foot" = list("path" = /obj/item/organ/external/diona/foot),
"r_foot" = list("path" = /obj/item/organ/external/diona/foot/right)
)
suicide_messages = list(
"is losing branches!",
"is pulling themselves apart!")
/datum/species/diona/can_understand(var/mob/other)
var/mob/living/simple_animal/diona/D = other
@@ -496,7 +542,7 @@
passive_temp_gain = 10 //this should cause IPCs to stabilize at ~80 C in a 20 C environment.
flags = IS_WHITELISTED | NO_BREATHE | NO_SCAN | NO_BLOOD | NO_PAIN | NO_DNA_RAD | NO_POISON
flags = IS_WHITELISTED | NO_BREATHE | NO_SCAN | NO_BLOOD | NO_PAIN | NO_DNA | NO_POISON | RADIMMUNE
clothing_flags = HAS_SOCKS
bodyflags = HAS_SKIN_COLOR
dietflags = 0 //IPCs can't eat, so no diet
@@ -526,6 +572,12 @@
"l_foot" = list("path" = /obj/item/organ/external/foot/ipc),
"r_foot" = list("path" = /obj/item/organ/external/foot/right/ipc)
)
suicide_messages = list(
"is powering down!",
"is smashing their own monitor!",
"is twisting their own neck!",
"is blocking their ventilation port!")
/datum/species/machine/handle_death(var/mob/living/carbon/human/H)
H.h_style = ""
@@ -330,6 +330,8 @@ var/global/list/damage_icon_parts = list()
stand_icon.Blend(base_icon,ICON_OVERLAY)
if(src.species.bodyflags & TAIL_OVERLAPPED) // If the user's species is flagged to have a tail that needs to be overlapped by limbs...
overlays_standing[LIMBS_LAYER] = image(stand_icon) // Diverts limbs to their own layer so they can overlay things (i.e. tails).
else
overlays_standing[LIMBS_LAYER] = null // So we don't get the old species' sprite splatted on top of the new one's
//Underwear
overlays_standing[UNDERWEAR_LAYER] = null
+1 -1
View File
@@ -78,7 +78,7 @@
return 1
/mob/living/carbon/human/apply_effect(var/effect = 0, var/effecttype = STUN, var/blocked = 0, var/negate_armor = 0)
if((effecttype == IRRADIATE) && (species.flags & NO_DNA_RAD))
if((effecttype == IRRADIATE) && (species.flags & RADIMMUNE))
return 0
return ..()
+7
View File
@@ -2,6 +2,13 @@
/mob/living/Destroy()
..()
return QDEL_HINT_HARDDEL_NOW
/mob/living/Stat()
. = ..()
if(. && get_rig_stats)
var/obj/item/weapon/rig/rig = get_rig()
if(rig)
SetupStat(rig)
//mob verbs are a lot faster than object verbs
//for more info on why this is not atom/pull, see examinate() in mob.dm
+2 -16
View File
@@ -142,25 +142,11 @@
return 0
// this function displays the station time in the status panel
/mob/living/silicon/proc/show_station_time()
stat(null, "Station Time: [worldtime2text()]")
// this function displays the shuttles ETA in the status panel if the shuttle has been called
/mob/living/silicon/proc/show_emergency_shuttle_eta()
if(shuttle_master.emergency.mode >= SHUTTLE_RECALL)
var/timeleft = shuttle_master.emergency.timeLeft()
if(timeleft > 0)
stat(null, "[add_zero(num2text((timeleft / 60) % 60),2)]:[add_zero(num2text(timeleft % 60), 2)]")
// This adds the basic clock, shuttle recall timer, and malf_ai info to all silicon lifeforms
/mob/living/silicon/Stat()
if(statpanel("Status"))
show_station_time()
show_emergency_shuttle_eta()
show_stat_station_time()
show_stat_emergency_shuttle_eta()
show_system_integrity()
show_malf_ai()
..()
@@ -258,7 +258,7 @@
if(spawnees & 128)
C = new(src.loc)
C.name = "Drone plasma overcharge counter"
C.origin_tech = "plasma=[rand(3,6)]"
C.origin_tech = "plasmatech=[rand(3,6)]"
if(spawnees & 256)
C = new(src.loc)
+30
View File
@@ -990,6 +990,36 @@ var/list/slot_equipment_priority = list( \
statpanel("Status") // Switch to the Status panel again, for the sake of the lazy Stat procs
// this function displays the station time in the status panel
/mob/proc/show_stat_station_time()
stat(null, "Station Time: [worldtime2text()]")
// this function displays the shuttles ETA in the status panel if the shuttle has been called
/mob/proc/show_stat_emergency_shuttle_eta()
var/obj/docking_port/mobile/emergency/E = shuttle_master.emergency
if(E.mode >= SHUTTLE_RECALL)
var/message = ""
var/timeleft = E.timeLeft()
message = "[add_zero(num2text((timeleft / 60) % 60),2)]:[add_zero(num2text(timeleft % 60), 2)]"
switch(E.mode)
if(SHUTTLE_RECALL, SHUTTLE_ESCAPE)
message = "ETR-[message]"
if(SHUTTLE_CALL)
message = "ETA-[message]"
if(SHUTTLE_DOCKED)
if(timeleft < 5)
message = "Departing..."
else
message = "ETD-[message]"
if(SHUTTLE_STRANDED)
message = "ETA-ERR"
if(SHUTTLE_ENDGAME)
return
stat(null, message)
/mob/proc/add_stings_to_statpanel(var/list/stings)
for(var/obj/effect/proc_holder/changeling/S in stings)
@@ -64,7 +64,7 @@
name = "Bald"
icon_state = "bald"
gender = MALE
species_allowed = list("Human","Unathi","Vox","Diona","Kidan","Grey","Plasmaman","Skellington")
species_allowed = list("Human","Unathi","Vox","Diona","Kidan","Grey","Plasmaman","Skeleton")
short
name = "Short Hair" // try to capatilize the names please~
@@ -1069,7 +1069,7 @@
/datum/sprite_accessory/underwear
icon = 'icons/mob/underwear.dmi'
species_allowed = list("Human","Unathi","Vox","Diona","Vulpkanin","Kidan","Grey","Plasmaman","Skellington")
species_allowed = list("Human","Unathi","Vox","Diona","Vulpkanin","Kidan","Grey","Plasmaman","Skeleton")
nude
name = "Nude"
@@ -1217,7 +1217,7 @@
/datum/sprite_accessory/undershirt
icon = 'icons/mob/underwear.dmi'
species_allowed = list("Human","Unathi","Vox","Diona","Vulpkanin","Kidan","Grey","Plasmaman","Skellington")
species_allowed = list("Human","Unathi","Vox","Diona","Vulpkanin","Kidan","Grey","Plasmaman","Skeleton")
/datum/sprite_accessory/undershirt/nude
name = "Nude"
@@ -1503,13 +1503,13 @@
///////////////////////
/datum/sprite_accessory/socks
icon = 'icons/mob/underwear.dmi'
species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpkanin","Slime People","Skellington")
species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpkanin","Slime People","Skeleton")
/datum/sprite_accessory/socks/nude
name = "Nude"
icon_state = null
gender = NEUTER
species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpkanin","Slime People","Skellington","Vox")
species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpkanin","Slime People","Skeleton","Vox")
/datum/sprite_accessory/socks/white_norm
@@ -1681,7 +1681,7 @@
/datum/sprite_accessory/head_accessory/none
name = "None"
species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpkanin","Slime People","Skellington","Vox")
species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpkanin","Slime People","Skeleton","Vox")
icon_state = "accessory_none"
/datum/sprite_accessory/head_accessory/simple
@@ -1773,7 +1773,7 @@
/datum/sprite_accessory/body_markings/none
name = "None"
species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpkanin","Slime People","Skellington","Vox")
species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpkanin","Slime People","Skeleton","Vox")
icon_state = "accessory_none"
/datum/sprite_accessory/body_markings/stripe