mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-27 22:17:32 +01:00
114 lines
2.5 KiB
Plaintext
114 lines
2.5 KiB
Plaintext
/datum/organ
|
|
var
|
|
name = "organ"
|
|
owner = null
|
|
|
|
|
|
proc/process()
|
|
return 0
|
|
|
|
|
|
proc/receive_chem(chemical as obj)
|
|
return 0
|
|
|
|
|
|
|
|
/****************************************************
|
|
EXTERNAL ORGANS
|
|
****************************************************/
|
|
/datum/organ/external
|
|
name = "external"
|
|
var
|
|
icon_name = null
|
|
body_part = null
|
|
|
|
damage_state = "00"
|
|
brute_dam = 0
|
|
burn_dam = 0
|
|
bandaged = 0
|
|
max_damage = 0
|
|
wound_size = 0
|
|
max_size = 0
|
|
var/obj/item/weapon/implant/implant = null
|
|
|
|
|
|
proc/take_damage(brute, burn)
|
|
if((brute <= 0) && (burn <= 0)) return 0
|
|
if((src.brute_dam + src.burn_dam + brute + burn) < src.max_damage)
|
|
src.brute_dam += brute
|
|
src.burn_dam += burn
|
|
else
|
|
var/can_inflict = src.max_damage - (src.brute_dam + src.burn_dam)
|
|
if(can_inflict)
|
|
if (brute > 0 && burn > 0)
|
|
brute = can_inflict/2
|
|
burn = can_inflict/2
|
|
var/ratio = brute / (brute + burn)
|
|
src.brute_dam += ratio * can_inflict
|
|
src.burn_dam += (1 - ratio) * can_inflict
|
|
else
|
|
if (brute > 0)
|
|
brute = can_inflict
|
|
src.brute_dam += brute
|
|
else
|
|
burn = can_inflict
|
|
src.burn_dam += burn
|
|
else
|
|
return 0
|
|
|
|
var/result = src.update_icon()
|
|
return result
|
|
|
|
|
|
proc/heal_damage(brute, burn)
|
|
src.brute_dam = max(0, src.brute_dam - brute)
|
|
src.burn_dam = max(0, src.burn_dam - burn)
|
|
return update_icon()
|
|
|
|
|
|
proc/get_damage() //returns total damage
|
|
return src.brute_dam + src.burn_dam //could use src.health?
|
|
|
|
|
|
// new damage icon system
|
|
// returns just the brute/burn damage code
|
|
proc/damage_state_text()
|
|
var/tburn = 0
|
|
var/tbrute = 0
|
|
|
|
if(burn_dam ==0)
|
|
tburn =0
|
|
else if (src.burn_dam < (src.max_damage * 0.25 / 2))
|
|
tburn = 1
|
|
else if (src.burn_dam < (src.max_damage * 0.75 / 2))
|
|
tburn = 2
|
|
else
|
|
tburn = 3
|
|
|
|
if (src.brute_dam == 0)
|
|
tbrute = 0
|
|
else if (src.brute_dam < (src.max_damage * 0.25 / 2))
|
|
tbrute = 1
|
|
else if (src.brute_dam < (src.max_damage * 0.75 / 2))
|
|
tbrute = 2
|
|
else
|
|
tbrute = 3
|
|
return "[tbrute][tburn]"
|
|
|
|
|
|
// new damage icon system
|
|
// adjusted to set damage_state to brute/burn code only (without r_name0 as before)
|
|
proc/update_icon()
|
|
var/n_is = src.damage_state_text()
|
|
if (n_is != src.damage_state)
|
|
src.damage_state = n_is
|
|
return 1
|
|
return 0
|
|
|
|
|
|
|
|
/****************************************************
|
|
INTERNAL ORGANS
|
|
****************************************************/
|
|
/datum/organ/internal
|
|
name = "internal" |