mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-29 23:17:02 +01:00
Merge branch 'master' of https://github.com/ParadiseSS13/Paradise into OrganRefactor
This commit is contained in:
@@ -95,4 +95,7 @@ I'm using this for Stat to give it a more nifty interface to work with
|
||||
if(istype(src.loc, /obj/mecha))
|
||||
var/obj/mecha/M = src.loc
|
||||
stat("Exosuit Charge:", "[istype(M.cell) ? "[M.cell.charge] / [M.cell.maxcharge]" : "No cell detected"]")
|
||||
stat("Exosuit Integrity", "[!M.health ? "0" : "[(M.health / initial(M.health)) * 100]"]%")
|
||||
stat("Exosuit Integrity", "[!M.health ? "0" : "[(M.health / initial(M.health)) * 100]"]%")
|
||||
|
||||
/mob/living/carbon/brain/can_safely_leave_loc()
|
||||
return 0 //You're not supposed to be ethereal jaunting, brains
|
||||
@@ -261,10 +261,11 @@
|
||||
AdjustStunned(-3)
|
||||
AdjustWeakened(-3)
|
||||
playsound(src.loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
|
||||
M.visible_message( \
|
||||
"\blue [M] shakes [src] trying to wake [t_him] up!", \
|
||||
"\blue You shake [src] trying to wake [t_him] up!", \
|
||||
)
|
||||
if(!player_logged)
|
||||
M.visible_message( \
|
||||
"\blue [M] shakes [src] trying to wake [t_him] up!", \
|
||||
"\blue You shake [src] trying to wake [t_him] up!", \
|
||||
)
|
||||
// BEGIN HUGCODE - N3X
|
||||
else
|
||||
if (istype(src,/mob/living/carbon/human) && src:w_uniform)
|
||||
|
||||
@@ -45,6 +45,10 @@
|
||||
dna.ready_dna(src)
|
||||
dna.real_name = real_name
|
||||
sync_organ_dna() //this shouldn't be necessaaaarrrryyyyyyyy
|
||||
|
||||
if(species)
|
||||
species.handle_dna(src)
|
||||
|
||||
UpdateAppearance()
|
||||
|
||||
/mob/living/carbon/human/prepare_data_huds()
|
||||
@@ -281,6 +285,10 @@
|
||||
stat("Chemical Storage", "[mind.changeling.chem_charges]/[mind.changeling.chem_storage]")
|
||||
stat("Absorbed DNA", mind.changeling.absorbedcount)
|
||||
|
||||
if(mind.vampire)
|
||||
stat("Total Blood", "[mind.vampire.bloodtotal]")
|
||||
stat("Usable Blood", "[mind.vampire.bloodusable]")
|
||||
|
||||
if(mind.nation)
|
||||
stat("Nation Name", "[mind.nation.current_name ? "[mind.nation.current_name]" : "[mind.nation.default_name]"]")
|
||||
stat("Nation Leader", "[mind.nation.current_leader ? "[mind.nation.current_leader]" : "None"]")
|
||||
|
||||
@@ -189,7 +189,7 @@ emp_act
|
||||
/mob/living/carbon/human/proc/attacked_by(var/obj/item/I, var/mob/living/user, var/def_zone)
|
||||
if(!I || !user) return 0
|
||||
|
||||
if((istype(I, /obj/item/weapon/butch/meatcleaver) || istype(I, /obj/item/weapon/twohanded/chainsaw)) && src.stat == DEAD && user.a_intent == I_HARM)
|
||||
if((istype(I, /obj/item/weapon/kitchen/knife/butcher/meatcleaver) || istype(I, /obj/item/weapon/twohanded/chainsaw)) && src.stat == DEAD && user.a_intent == I_HARM)
|
||||
var/obj/item/weapon/reagent_containers/food/snacks/meat/human/newmeat = new /obj/item/weapon/reagent_containers/food/snacks/meat/human(get_turf(src.loc))
|
||||
newmeat.name = src.real_name + newmeat.name
|
||||
newmeat.subjectname = src.real_name
|
||||
|
||||
@@ -1059,8 +1059,15 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
|
||||
return
|
||||
|
||||
/mob/living/carbon/human/handle_changeling()
|
||||
if(mind && mind.changeling)
|
||||
mind.changeling.regenerate()
|
||||
if(mind)
|
||||
if(mind.changeling)
|
||||
mind.changeling.regenerate()
|
||||
if(hud_used)
|
||||
hud_used.lingchemdisplay.invisibility = 0
|
||||
hud_used.lingchemdisplay.maptext = "<div align='center' valign='middle' style='position:relative; top:0px; left:6px'><font color='#dd66dd'>[round(mind.changeling.chem_charges)]</font></div>"
|
||||
else
|
||||
if(hud_used)
|
||||
hud_used.lingchemdisplay.invisibility = 101
|
||||
|
||||
/mob/living/carbon/human/handle_shock()
|
||||
..()
|
||||
|
||||
@@ -51,6 +51,7 @@
|
||||
|
||||
/datum/species/monkey/handle_dna(var/mob/living/carbon/human/H)
|
||||
H.dna.SetSEState(MONKEYBLOCK,1)
|
||||
genemutcheck(H, MONKEYBLOCK)
|
||||
|
||||
/datum/species/monkey/handle_can_equip(obj/item/I, slot, disable_warning = 0, mob/living/carbon/human/user)
|
||||
switch(slot)
|
||||
|
||||
@@ -312,10 +312,9 @@
|
||||
return
|
||||
|
||||
/datum/species/proc/handle_post_spawn(var/mob/living/carbon/C) //Handles anything not already covered by basic species assignment.
|
||||
handle_dna(C)
|
||||
return
|
||||
|
||||
/datum/species/proc/handle_dna(var/mob/living/carbon/C, var/remove) //Handles DNA mutations, as that doesn't work at init.
|
||||
/datum/species/proc/handle_dna(var/mob/living/carbon/C, var/remove) //Handles DNA mutations, as that doesn't work at init. Make sure you call genemutcheck on any blocks changed here
|
||||
return
|
||||
|
||||
// Used for species-specific names (Vox, etc)
|
||||
|
||||
@@ -109,32 +109,33 @@ Please contact me on #coderbus IRC. ~Carn x
|
||||
#define TAIL_UNDERLIMBS_LAYER 2
|
||||
#define LIMBS_LAYER 3
|
||||
#define MARKINGS_LAYER 4
|
||||
#define MUTATIONS_LAYER 5
|
||||
#define DAMAGE_LAYER 6
|
||||
#define UNIFORM_LAYER 7
|
||||
#define ID_LAYER 8
|
||||
#define SHOES_LAYER 9
|
||||
#define GLOVES_LAYER 10
|
||||
#define EARS_LAYER 11
|
||||
#define SUIT_LAYER 12
|
||||
#define GLASSES_LAYER 13
|
||||
#define BELT_LAYER 14 //Possible make this an overlay of somethign required to wear a belt?
|
||||
#define SUIT_STORE_LAYER 15
|
||||
#define BACK_LAYER 16
|
||||
#define TAIL_LAYER 17 //bs12 specific. this hack is probably gonna come back to haunt me
|
||||
#define HAIR_LAYER 18 //TODO: make part of head layer?
|
||||
#define HEAD_ACCESSORY_LAYER 19
|
||||
#define FHAIR_LAYER 20
|
||||
#define FACEMASK_LAYER 21
|
||||
#define HEAD_LAYER 22
|
||||
#define COLLAR_LAYER 23
|
||||
#define HANDCUFF_LAYER 24
|
||||
#define LEGCUFF_LAYER 25
|
||||
#define L_HAND_LAYER 26
|
||||
#define R_HAND_LAYER 27
|
||||
#define TARGETED_LAYER 28 //BS12: Layer for the target overlay from weapon targeting system
|
||||
#define FIRE_LAYER 29 //If you're on fire
|
||||
#define TOTAL_LAYERS 29
|
||||
#define UNDERWEAR_LAYER 5
|
||||
#define MUTATIONS_LAYER 6
|
||||
#define DAMAGE_LAYER 7
|
||||
#define UNIFORM_LAYER 8
|
||||
#define ID_LAYER 9
|
||||
#define SHOES_LAYER 10
|
||||
#define GLOVES_LAYER 11
|
||||
#define EARS_LAYER 12
|
||||
#define SUIT_LAYER 13
|
||||
#define GLASSES_LAYER 14
|
||||
#define BELT_LAYER 15 //Possible make this an overlay of somethign required to wear a belt?
|
||||
#define SUIT_STORE_LAYER 16
|
||||
#define BACK_LAYER 17
|
||||
#define TAIL_LAYER 18 //bs12 specific. this hack is probably gonna come back to haunt me
|
||||
#define HAIR_LAYER 19 //TODO: make part of head layer?
|
||||
#define HEAD_ACCESSORY_LAYER 20
|
||||
#define FHAIR_LAYER 21
|
||||
#define FACEMASK_LAYER 22
|
||||
#define HEAD_LAYER 23
|
||||
#define COLLAR_LAYER 24
|
||||
#define HANDCUFF_LAYER 25
|
||||
#define LEGCUFF_LAYER 26
|
||||
#define L_HAND_LAYER 27
|
||||
#define R_HAND_LAYER 28
|
||||
#define TARGETED_LAYER 29 //BS12: Layer for the target overlay from weapon targeting system
|
||||
#define FIRE_LAYER 30 //If you're on fire
|
||||
#define TOTAL_LAYERS 30
|
||||
|
||||
|
||||
|
||||
@@ -274,6 +275,8 @@ var/global/list/damage_icon_parts = list()
|
||||
icon_key += "[part.dna.GetUIValue(DNA_UI_SKIN_TONE)]"
|
||||
if(part.s_col)
|
||||
icon_key += "[rgb(part.s_col[1], part.s_col[2], part.s_col[3])]"
|
||||
if(part.s_tone)
|
||||
icon_key += "[part.s_tone]"
|
||||
|
||||
icon_key = "[icon_key][husk ? 1 : 0][fat ? 1 : 0][hulk ? 1 : 0][skeleton ? 1 : 0]"
|
||||
|
||||
@@ -329,21 +332,27 @@ var/global/list/damage_icon_parts = list()
|
||||
overlays_standing[LIMBS_LAYER] = image(stand_icon) // Diverts limbs to their own layer so they can overlay things (i.e. tails).
|
||||
|
||||
//Underwear
|
||||
overlays_standing[UNDERWEAR_LAYER] = null
|
||||
var/icon/underwear_standing = new/icon('icons/mob/underwear.dmi',"nude")
|
||||
|
||||
if(underwear && species.clothing_flags & HAS_UNDERWEAR)
|
||||
var/datum/sprite_accessory/underwear/U = underwear_list[underwear]
|
||||
if(U)
|
||||
stand_icon.Blend(new /icon(U.icon, "uw_[U.icon_state]_s"), ICON_OVERLAY)
|
||||
underwear_standing.Blend(new /icon(U.icon, "uw_[U.icon_state]_s"), ICON_OVERLAY)
|
||||
|
||||
if(undershirt && species.clothing_flags & HAS_UNDERSHIRT)
|
||||
var/datum/sprite_accessory/undershirt/U2 = undershirt_list[undershirt]
|
||||
if(U2)
|
||||
stand_icon.Blend(new /icon(U2.icon, "us_[U2.icon_state]_s"), ICON_OVERLAY)
|
||||
underwear_standing.Blend(new /icon(U2.icon, "us_[U2.icon_state]_s"), ICON_OVERLAY)
|
||||
|
||||
|
||||
if(socks && species.clothing_flags & HAS_SOCKS)
|
||||
var/datum/sprite_accessory/socks/U3 = socks_list[socks]
|
||||
if(U3)
|
||||
stand_icon.Blend(new /icon(U3.icon, "sk_[U3.icon_state]_s"), ICON_OVERLAY)
|
||||
underwear_standing.Blend(new /icon(U3.icon, "sk_[U3.icon_state]_s"), ICON_OVERLAY)
|
||||
|
||||
if(underwear_standing)
|
||||
overlays_standing[UNDERWEAR_LAYER] = image(underwear_standing)
|
||||
|
||||
|
||||
if(update_icons)
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
|
||||
/mob/living/proc/apply_effect(var/effect = 0,var/effecttype = STUN, var/blocked = 0, var/negate_armor = 0)
|
||||
blocked = (100-blocked)/100
|
||||
if(!effect || (blocked <= 0))
|
||||
if(!effect || (blocked <= 0))
|
||||
return 0
|
||||
switch(effecttype)
|
||||
if(STUN)
|
||||
@@ -77,7 +77,7 @@
|
||||
updatehealth()
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/human/apply_effect(var/effect = 0, var/effecttype = STUN, var/blocked = 0)
|
||||
/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))
|
||||
return 0
|
||||
return ..()
|
||||
|
||||
@@ -23,6 +23,13 @@
|
||||
user << "\red Access denied."
|
||||
return
|
||||
|
||||
interact(user)
|
||||
|
||||
/obj/machinery/computer/drone_control/attack_ghost(mob/user as mob)
|
||||
interact(user)
|
||||
|
||||
/obj/machinery/computer/drone_control/interact(mob/user)
|
||||
|
||||
user.set_machine(src)
|
||||
var/dat
|
||||
dat += "<B>Maintenance Units</B><BR>"
|
||||
|
||||
@@ -26,11 +26,11 @@
|
||||
return
|
||||
else if (is_component_functioning("power cell") && cell)
|
||||
if(module)
|
||||
for(var/obj/item/borg/B in module.modules)
|
||||
for(var/obj/item/borg/B in get_all_slots())
|
||||
if(B.powerneeded)
|
||||
if((cell.charge * 100 / cell.maxcharge) < B.powerneeded)
|
||||
src << "Deactivating [B.name] due to lack of power!"
|
||||
unEquip(B)
|
||||
uneq_module(B)
|
||||
if(cell.charge <= 0)
|
||||
uneq_all()
|
||||
update_headlamp(1)
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
attack_sound = 'sound/weapons/punch1.ogg'
|
||||
a_intent = I_HARM
|
||||
var/corpse = /obj/effect/landmark/mobcorpse/russian
|
||||
var/weapon1 = /obj/item/weapon/kitchenknife
|
||||
var/weapon1 = /obj/item/weapon/kitchen/knife
|
||||
min_oxy = 5
|
||||
max_oxy = 0
|
||||
min_tox = 0
|
||||
|
||||
@@ -412,7 +412,7 @@
|
||||
user << "\blue [src] is dead, medical items won't bring it back to life."
|
||||
return
|
||||
else if(meat_type && (stat == DEAD)) //if the animal has a meat, and if it is dead.
|
||||
if(istype(O, /obj/item/weapon/kitchenknife) || istype(O, /obj/item/weapon/butch))
|
||||
if(istype(O, /obj/item/weapon/kitchen/knife))
|
||||
harvest()
|
||||
else
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
|
||||
@@ -1436,4 +1436,8 @@ mob/proc/yank_out_object()
|
||||
|
||||
//Can the mob see reagents inside of containers?
|
||||
/mob/proc/can_see_reagents()
|
||||
return 0
|
||||
return 0
|
||||
|
||||
//Can this mob leave its location without breaking things terrifically?
|
||||
/mob/proc/can_safely_leave_loc()
|
||||
return 1 // Yes, you can
|
||||
@@ -394,12 +394,19 @@
|
||||
if(!do_after(user, checktime(user, affecting), target = affecting)) return
|
||||
|
||||
user.visible_message("<span class='danger'>[user] devours \the [affecting]!</span>")
|
||||
if(affecting.mind)
|
||||
affecting.attack_log += "\[[time_stamp()]\] <font color='orange'>Has been devoured by [attacker.name] ([attacker.ckey])</font>"
|
||||
attacker.attack_log += "\[[time_stamp()]\] <font color='red'>Devoured [affecting.name] ([affecting.ckey])</font>"
|
||||
msg_admin_attack("[key_name(attacker)] devoured [key_name(affecting)]")
|
||||
|
||||
affecting.loc = user
|
||||
attacker.stomach_contents.Add(affecting)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/grab/proc/checkvalid(var/mob/attacker, var/mob/prey) //does all the checking for the attack proc to see if a mob can eat another with the grab
|
||||
if(ishuman(attacker) && (/datum/dna/gene/basic/grant_spell/mattereater in attacker.active_genes)) // MATTER EATER CARES NOT OF YOUR FORM
|
||||
return 1
|
||||
|
||||
if(ishuman(attacker) && (FAT in attacker.mutations) && iscarbon(prey) && !isalien(prey)) //Fat people eating carbon mobs but not xenos
|
||||
return 1
|
||||
|
||||
|
||||
@@ -627,7 +627,7 @@ datum/preferences
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY)
|
||||
if(prob(1))
|
||||
clothes_s.Blend(new /icon('icons/mob/head.dmi', "hosberet"), ICON_OVERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/head.dmi', "beret_hos"), ICON_OVERLAY)
|
||||
switch(backbag)
|
||||
if(2)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "securitypack"), ICON_OVERLAY)
|
||||
@@ -668,7 +668,7 @@ datum/preferences
|
||||
clothes_s = new /icon(uniform_dmi, "secred_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY)
|
||||
if(prob(1))
|
||||
clothes_s.Blend(new /icon('icons/mob/head.dmi', "officerberet"), ICON_OVERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/head.dmi', "beret_officer"), ICON_OVERLAY)
|
||||
switch(backbag)
|
||||
if(2)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "securitypack"), ICON_OVERLAY)
|
||||
|
||||
Reference in New Issue
Block a user