mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-28 07:38:05 +01:00
Conflict resolution
This commit is contained in:
@@ -35,8 +35,8 @@
|
||||
#define VENTCRAWLER_ALWAYS 2
|
||||
|
||||
//Bloodcrawling defines
|
||||
#define BLOODCRAWL 1
|
||||
#define BLOODCRAWL_EAT 2
|
||||
#define BLOODCRAWL 1 /// bloodcrawling, see: [/mob/living/var/bloodcrawl]
|
||||
#define BLOODCRAWL_EAT 2 /// crawling+mob devour
|
||||
|
||||
//Mob bio-types flags
|
||||
#define MOB_ORGANIC 1 << 0
|
||||
@@ -242,9 +242,9 @@
|
||||
///The shock doesn't stun.
|
||||
#define SHOCK_NOSTUN (1 << 3)
|
||||
|
||||
#define INCORPOREAL_MOVE_BASIC 1
|
||||
#define INCORPOREAL_MOVE_SHADOW 2 // leaves a trail of shadows
|
||||
#define INCORPOREAL_MOVE_JAUNT 3 // is blocked by holy water/salt
|
||||
#define INCORPOREAL_MOVE_BASIC 1 /// normal movement, see: [/mob/living/var/incorporeal_move]
|
||||
#define INCORPOREAL_MOVE_SHADOW 2 /// leaves a trail of shadows
|
||||
#define INCORPOREAL_MOVE_JAUNT 3 /// is blocked by holy water/salt
|
||||
|
||||
//Secbot and ED209 judgement criteria bitflag values
|
||||
#define JUDGE_EMAGGED (1<<0)
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
|
||||
///Defines for the R&D console, see: [/modules/research/rdconsole][rdconsole]
|
||||
#define RDCONSOLE_UI_MODE_NORMAL 1
|
||||
#define RDCONSOLE_UI_MODE_EXPERT 2
|
||||
#define RDCONSOLE_UI_MODE_LIST 3
|
||||
|
||||
//RDSCREEN screens
|
||||
#define RDSCREEN_MENU 0
|
||||
#define RDSCREEN_TECHDISK 1
|
||||
#define RDSCREEN_DESIGNDISK 20
|
||||
@@ -27,6 +26,7 @@
|
||||
|
||||
#define RDSCREEN_NOBREAK "<NO_HTML_BREAK>"
|
||||
|
||||
///Sanity check defines for when these devices aren't connected or no disk is inserted
|
||||
#define RDSCREEN_TEXT_NO_PROTOLATHE "<div><h3>No Protolathe Linked!</h3></div><br>"
|
||||
#define RDSCREEN_TEXT_NO_IMPRINTER "<div><h3>No Circuit Imprinter Linked!</h3></div><br>"
|
||||
#define RDSCREEN_TEXT_NO_DECONSTRUCT "<div><h3>No Destructive Analyzer Linked!</h3></div><br>"
|
||||
@@ -43,12 +43,14 @@
|
||||
#define RDSCREEN_UI_SNODE_CHECK if(!selected_node) { return RDSCREEN_TEXT_NO_SNODE }
|
||||
#define RDSCREEN_UI_SDESIGN_CHECK if(!selected_design) { return RDSCREEN_TEXT_NO_SDESIGN }
|
||||
|
||||
///Defines for the Protolathe screens, see: [/modules/research/machinery/protolathe][Protolathe]
|
||||
#define RESEARCH_FABRICATOR_SCREEN_MAIN 1
|
||||
#define RESEARCH_FABRICATOR_SCREEN_CHEMICALS 2
|
||||
#define RESEARCH_FABRICATOR_SCREEN_MATERIALS 3
|
||||
#define RESEARCH_FABRICATOR_SCREEN_SEARCH 4
|
||||
#define RESEARCH_FABRICATOR_SCREEN_CATEGORYVIEW 5
|
||||
|
||||
///Department flags for techwebs. Defines which department can print what from each protolathe so Cargo can't print guns, etc.
|
||||
#define DEPARTMENTAL_FLAG_SECURITY (1<<0)
|
||||
#define DEPARTMENTAL_FLAG_MEDICAL (1<<1)
|
||||
#define DEPARTMENTAL_FLAG_CARGO (1<<2)
|
||||
@@ -56,28 +58,28 @@
|
||||
#define DEPARTMENTAL_FLAG_ENGINEERING (1<<4)
|
||||
#define DEPARTMENTAL_FLAG_SERVICE (1<<5)
|
||||
#define DEPARTMENTAL_FLAG_ALL (1<<6) //NO THIS DOESN'T ALLOW YOU TO PRINT EVERYTHING, IT'S FOR ALL DEPARTMENTS!
|
||||
//#define DEPARTMENTAL_FLAG_MINING (1<<7)
|
||||
//#define DEPARTMENTAL_FLAG_MINING (1<<7) //I swear I'm actually going to use this eventually leave it here
|
||||
|
||||
#define DESIGN_ID_IGNORE "IGNORE_THIS_DESIGN"
|
||||
#define DESIGN_ID_IGNORE "IGNORE_THIS_DESIGN" ///For instances where we don't want a design showing up due to it being for debug/sanity purposes
|
||||
|
||||
#define RESEARCH_MATERIAL_RECLAMATION_ID "__materials"
|
||||
|
||||
//When adding new types, update the list below!
|
||||
///Techweb names for new point types. Can be used to define specific point values for specific types of research (science, security, engineering, etc.)
|
||||
#define TECHWEB_POINT_TYPE_GENERIC "General Research"
|
||||
#define TECHWEB_POINT_TYPE_NANITES "Nanite Research"
|
||||
|
||||
#define TECHWEB_POINT_TYPE_DEFAULT TECHWEB_POINT_TYPE_GENERIC
|
||||
|
||||
//defined here so people don't forget to change this!
|
||||
///Associative names for techweb point values, see: [/modules/research/techweb/all_nodes][all_nodes]
|
||||
#define TECHWEB_POINT_TYPE_LIST_ASSOCIATIVE_NAMES list(\
|
||||
TECHWEB_POINT_TYPE_GENERIC = "General Research",\
|
||||
TECHWEB_POINT_TYPE_NANITES = "Nanite Research"\
|
||||
)
|
||||
|
||||
#define TECHWEB_BOMB_POINTCAP 50000 //Adjust as needed; Stops toxins from nullifying RND progression mechanics. Current Value Cap Radius: 100
|
||||
|
||||
//research point values for slime extracts
|
||||
///R&D point value for a maxcap bomb. Can be adjusted if need be. Current Value Cap Radius: 100
|
||||
#define TECHWEB_BOMB_POINTCAP 50000
|
||||
|
||||
///Research point values for slime extracts, see: [/modules/research/xenobiology/xenobio_camera][xenobio_camera]
|
||||
#define SLIME_RESEARCH_TIER_0 100
|
||||
#define SLIME_RESEARCH_TIER_1 500
|
||||
#define SLIME_RESEARCH_TIER_2 1000
|
||||
|
||||
@@ -330,9 +330,10 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
desc = "A Carp Classic brand cigarette. A small label on its side indicates that it does NOT contain carpotoxin."
|
||||
|
||||
/obj/item/clothing/mask/cigarette/carp/Initialize()
|
||||
. = ..()
|
||||
if(prob(5))
|
||||
list_reagents = list(/datum/reagent/drug/nicotine = 15, /datum/reagent/toxin/carpotoxin = 3) //they lied
|
||||
. = ..()
|
||||
if(!prob(5))
|
||||
return
|
||||
reagents?.add_reagent(/datum/reagent/toxin/carpotoxin , 3) // They lied
|
||||
|
||||
/obj/item/clothing/mask/cigarette/syndicate
|
||||
desc = "An unknown brand cigarette."
|
||||
|
||||
@@ -315,6 +315,9 @@
|
||||
name = "bola"
|
||||
desc = "A restraining device designed to be thrown at the target. Upon connecting with said target, it will wrap around their legs, making it difficult for them to move quickly."
|
||||
icon_state = "bola"
|
||||
item_state = "bola"
|
||||
lefthand_file = 'icons/mob/inhands/weapons/thrown_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/weapons/thrown_righthand.dmi'
|
||||
breakouttime = 35//easy to apply, easy to break out of
|
||||
gender = NEUTER
|
||||
var/knockdown = 0
|
||||
@@ -351,6 +354,7 @@
|
||||
name = "reinforced bola"
|
||||
desc = "A strong bola, made with a long steel chain. It looks heavy, enough so that it could trip somebody."
|
||||
icon_state = "bola_r"
|
||||
item_state = "bola_r"
|
||||
breakouttime = 70
|
||||
knockdown = 35
|
||||
|
||||
@@ -358,6 +362,7 @@
|
||||
name = "energy bola"
|
||||
desc = "A specialized hard-light bola designed to ensnare fleeing criminals and aid in arrests."
|
||||
icon_state = "ebola"
|
||||
item_state = "ebola"
|
||||
hitsound = 'sound/weapons/taserhit.ogg'
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
breakouttime = 60
|
||||
@@ -373,6 +378,7 @@
|
||||
name = "gonbola"
|
||||
desc = "Hey, if you have to be hugged in the legs by anything, it might as well be this little guy."
|
||||
icon_state = "gonbola"
|
||||
item_state = "bola_r"
|
||||
breakouttime = 300
|
||||
slowdown = 0
|
||||
var/datum/status_effect/gonbolaPacify/effectReference
|
||||
|
||||
@@ -244,6 +244,7 @@
|
||||
name = "\improper Nar'Sien bola"
|
||||
desc = "A strong bola, bound with dark magic that allows it to pass harmlessly through Nar'Sien cultists. Throw it to trip and slow your victim."
|
||||
icon_state = "bola_cult"
|
||||
item_state = "bola_cult"
|
||||
breakouttime = 60
|
||||
knockdown = 30
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//These procs handle putting s tuff in your hands
|
||||
//as they handle all relevant stuff like adding it to the player's screen and updating their overlays.
|
||||
|
||||
//Returns the thing we're currently holding
|
||||
///Returns the thing we're currently holding
|
||||
/mob/proc/get_active_held_item()
|
||||
return get_item_for_held_index(active_hand_index)
|
||||
|
||||
|
||||
@@ -1,13 +1,15 @@
|
||||
|
||||
///alien immune to tox damage
|
||||
/mob/living/carbon/alien/getToxLoss()
|
||||
return 0
|
||||
|
||||
/mob/living/carbon/alien/adjustToxLoss(amount, updating_health = TRUE, forced = FALSE) //alien immune to tox damage
|
||||
return FALSE
|
||||
|
||||
//aliens are immune to stamina damage.
|
||||
/mob/living/carbon/alien/adjustStaminaLoss(amount, updating_health = 1, forced = FALSE)
|
||||
return
|
||||
///alien immune to tox damage
|
||||
/mob/living/carbon/alien/adjustToxLoss(amount, updating_health = TRUE, forced = FALSE)
|
||||
return FALSE
|
||||
|
||||
///aliens are immune to stamina damage.
|
||||
/mob/living/carbon/alien/adjustStaminaLoss(amount, updating_health = 1, forced = FALSE)
|
||||
return FALSE
|
||||
|
||||
///aliens are immune to stamina damage.
|
||||
/mob/living/carbon/alien/setStaminaLoss(amount, updating_health = 1)
|
||||
return
|
||||
return FALSE
|
||||
|
||||
@@ -6,13 +6,13 @@
|
||||
hud_possible = list(HEALTH_HUD,STATUS_HUD,ANTAG_HUD,GLAND_HUD,NANITE_HUD,DIAG_NANITE_FULL_HUD)
|
||||
has_limbs = 1
|
||||
held_items = list(null, null)
|
||||
var/list/internal_organs = list() //List of /obj/item/organ in the mob. They don't go in the contents for some reason I don't want to know.
|
||||
var/list/internal_organs_slot= list() //Same as above, but stores "slot ID" - "organ" pairs for easy access.
|
||||
var/silent = FALSE //Can't talk. Value goes down every life proc. //NOTE TO FUTURE CODERS: DO NOT INITIALIZE NUMERICAL VARS AS NULL OR I WILL MURDER YOU.
|
||||
var/dreaming = 0 //How many dream images we have left to send
|
||||
var/list/internal_organs = list() ///List of [/obj/item/organ] in the mob. They don't go in the contents for some reason I don't want to know.
|
||||
var/list/internal_organs_slot= list() ///Same as [above][/mob/living/carbon/var/internal_organs], but stores "slot ID" - "organ" pairs for easy access.
|
||||
var/silent = 0 ///Can't talk. Value goes down every life proc. NOTE TO FUTURE CODERS: DO NOT INITIALIZE NUMERICAL VARS AS NULL OR I WILL MURDER YOU.
|
||||
var/dreaming = 0 ///How many dream images we have left to send
|
||||
|
||||
var/obj/item/handcuffed = null //Whether or not the mob is handcuffed
|
||||
var/obj/item/legcuffed = null //Same as handcuffs but for legs. Bear traps use this.
|
||||
var/obj/item/handcuffed = null///Whether or not the mob is handcuffed
|
||||
var/obj/item/legcuffed = null ///Same as handcuffs but for legs. Bear traps use this.
|
||||
|
||||
var/disgust = 0
|
||||
|
||||
@@ -23,15 +23,15 @@
|
||||
var/obj/item/tank/internal = null
|
||||
var/obj/item/clothing/head = null
|
||||
|
||||
var/obj/item/clothing/gloves = null //only used by humans
|
||||
var/obj/item/clothing/shoes = null //only used by humans.
|
||||
var/obj/item/clothing/glasses/glasses = null //only used by humans.
|
||||
var/obj/item/clothing/ears = null //only used by humans.
|
||||
var/obj/item/clothing/gloves = null ///only used by humans
|
||||
var/obj/item/clothing/shoes = null ///only used by humans.
|
||||
var/obj/item/clothing/glasses/glasses = null ///only used by humans.
|
||||
var/obj/item/clothing/ears = null ///only used by humans.
|
||||
|
||||
var/datum/dna/dna = null // Carbon
|
||||
var/datum/mind/last_mind = null //last mind to control this mob, for blood-based cloning
|
||||
var/datum/dna/dna = null /// Carbon
|
||||
var/datum/mind/last_mind = null ///last mind to control this mob, for blood-based cloning
|
||||
|
||||
var/failed_last_breath = 0 //This is used to determine if the mob failed a breath. If they did fail a brath, they will attempt to breathe each tick, otherwise just once per 4 ticks.
|
||||
var/failed_last_breath = 0 ///This is used to determine if the mob failed a breath. If they did fail a brath, they will attempt to breathe each tick, otherwise just once per 4 ticks.
|
||||
|
||||
var/co2overloadtime = null
|
||||
var/temperature_resistance = T0C+75
|
||||
@@ -41,13 +41,13 @@
|
||||
|
||||
var/rotate_on_lying = 1
|
||||
|
||||
var/tinttotal = 0 // Total level of visualy impairing items
|
||||
var/tinttotal = 0 /// Total level of visualy impairing items
|
||||
|
||||
///Gets filled up in [create_bodyparts()][/mob/living/carbon/proc/create_bodyparts]
|
||||
var/list/bodyparts = list(/obj/item/bodypart/chest, /obj/item/bodypart/head, /obj/item/bodypart/l_arm,
|
||||
/obj/item/bodypart/r_arm, /obj/item/bodypart/r_leg, /obj/item/bodypart/l_leg)
|
||||
//Gets filled up in create_bodyparts()
|
||||
|
||||
var/list/hand_bodyparts = list() //a collection of arms (or actually whatever the fug /bodyparts you monsters use to wreck my systems)
|
||||
var/list/hand_bodyparts = list() ///a collection of arms (or actually whatever the fug /bodyparts you monsters use to wreck my systems)
|
||||
|
||||
var/icon_render_key = ""
|
||||
var/static/list/limb_icon_cache = list()
|
||||
@@ -58,12 +58,12 @@
|
||||
var/obj/halitem
|
||||
var/hal_screwyhud = SCREWYHUD_NONE
|
||||
var/next_hallucination = 0
|
||||
var/cpr_time = 1 //CPR cooldown.
|
||||
var/cpr_time = 1 ///CPR cooldown.
|
||||
var/damageoverlaytemp = 0
|
||||
|
||||
var/drunkenness = 0 //Overall drunkenness - check handle_alcohol() in life.dm for effects
|
||||
var/stam_regen_start_time = 0 //used to halt stamina regen temporarily
|
||||
var/stam_paralyzed = FALSE //knocks you down
|
||||
var/drunkenness = 0 ///Overall drunkenness
|
||||
var/stam_regen_start_time = 0 ///used to halt stamina regen temporarily
|
||||
var/stam_paralyzed = FALSE ///knocks you down
|
||||
|
||||
/// Protection (insulation) from the heat, Value 0-1 corresponding to the percentage of protection
|
||||
var/heat_protection = 0 // No heat protection
|
||||
|
||||
@@ -113,31 +113,37 @@
|
||||
return
|
||||
adjustStaminaLoss(diff, updating_health, forced)
|
||||
|
||||
/** adjustOrganLoss
|
||||
* inputs: slot (organ slot, like ORGAN_SLOT_HEART), amount (damage to be done), and maximum (currently an arbitrarily large number, can be set so as to limit damage)
|
||||
* outputs:
|
||||
* description: If an organ exists in the slot requested, and we are capable of taking damage (we don't have GODMODE on), call the damage proc on that organ.
|
||||
/**
|
||||
* If an organ exists in the slot requested, and we are capable of taking damage (we don't have [GODMODE] on), call the damage proc on that organ.
|
||||
*
|
||||
* Arguments:
|
||||
* * slot - organ slot, like [ORGAN_SLOT_HEART]
|
||||
* * amount - damage to be done
|
||||
* * maximum - currently an arbitrarily large number, can be set so as to limit damage
|
||||
*/
|
||||
/mob/living/carbon/adjustOrganLoss(slot, amount, maximum)
|
||||
var/obj/item/organ/O = getorganslot(slot)
|
||||
if(O && !(status_flags & GODMODE))
|
||||
O.applyOrganDamage(amount, maximum)
|
||||
|
||||
/** setOrganLoss
|
||||
* inputs: slot (organ slot, like ORGAN_SLOT_HEART), amount(damage to be set to)
|
||||
* outputs:
|
||||
* description: If an organ exists in the slot requested, and we are capable of taking damage (we don't have GODMODE on), call the set damage proc on that organ, which can
|
||||
* set or clear the failing variable on that organ, making it either cease or start functions again, unlike adjustOrganLoss.
|
||||
/**
|
||||
* If an organ exists in the slot requested, and we are capable of taking damage (we don't have [GODMODE] on), call the set damage proc on that organ, which can
|
||||
* set or clear the failing variable on that organ, making it either cease or start functions again, unlike adjustOrganLoss.
|
||||
*
|
||||
* Arguments:
|
||||
* * slot - organ slot, like [ORGAN_SLOT_HEART]
|
||||
* * amount - damage to be set to
|
||||
*/
|
||||
/mob/living/carbon/setOrganLoss(slot, amount)
|
||||
var/obj/item/organ/O = getorganslot(slot)
|
||||
if(O && !(status_flags & GODMODE))
|
||||
O.setOrganDamage(amount)
|
||||
|
||||
/** getOrganLoss
|
||||
* inputs: slot (organ slot, like ORGAN_SLOT_HEART)
|
||||
* outputs: organ damage
|
||||
* description: If an organ exists in the slot requested, return the amount of damage that organ has
|
||||
/**
|
||||
* If an organ exists in the slot requested, return the amount of damage that organ has
|
||||
*
|
||||
* Arguments:
|
||||
* * slot - organ slot, like [ORGAN_SLOT_HEART]
|
||||
*/
|
||||
/mob/living/carbon/getOrganLoss(slot)
|
||||
var/obj/item/organ/O = getorganslot(slot)
|
||||
@@ -146,7 +152,7 @@
|
||||
|
||||
////////////////////////////////////////////
|
||||
|
||||
//Returns a list of damaged bodyparts
|
||||
///Returns a list of damaged bodyparts
|
||||
/mob/living/carbon/proc/get_damaged_bodyparts(brute = FALSE, burn = FALSE, stamina = FALSE, status)
|
||||
var/list/obj/item/bodypart/parts = list()
|
||||
for(var/X in bodyparts)
|
||||
@@ -157,7 +163,7 @@
|
||||
parts += BP
|
||||
return parts
|
||||
|
||||
//Returns a list of damageable bodyparts
|
||||
///Returns a list of damageable bodyparts
|
||||
/mob/living/carbon/proc/get_damageable_bodyparts(status)
|
||||
var/list/obj/item/bodypart/parts = list()
|
||||
for(var/X in bodyparts)
|
||||
@@ -168,9 +174,13 @@
|
||||
parts += BP
|
||||
return parts
|
||||
|
||||
//Heals ONE bodypart randomly selected from damaged ones.
|
||||
//It automatically updates damage overlays if necessary
|
||||
//It automatically updates health status
|
||||
/**
|
||||
* Heals ONE bodypart randomly selected from damaged ones.
|
||||
*
|
||||
* It automatically updates damage overlays if necessary
|
||||
*
|
||||
* It automatically updates health status
|
||||
*/
|
||||
/mob/living/carbon/heal_bodypart_damage(brute = 0, burn = 0, stamina = 0, updating_health = TRUE, required_status)
|
||||
var/list/obj/item/bodypart/parts = get_damaged_bodyparts(brute,burn,stamina,required_status)
|
||||
if(!parts.len)
|
||||
@@ -182,9 +192,13 @@
|
||||
return max(damage_calculator - picked.get_damage(TRUE), 0)
|
||||
|
||||
|
||||
//Damages ONE bodypart randomly selected from damagable ones.
|
||||
//It automatically updates damage overlays if necessary
|
||||
//It automatically updates health status
|
||||
/**
|
||||
* Damages ONE bodypart randomly selected from damagable ones.
|
||||
*
|
||||
* It automatically updates damage overlays if necessary
|
||||
*
|
||||
* It automatically updates health status
|
||||
*/
|
||||
/mob/living/carbon/take_bodypart_damage(brute = 0, burn = 0, stamina = 0, updating_health = TRUE, required_status, check_armor = FALSE)
|
||||
var/list/obj/item/bodypart/parts = get_damageable_bodyparts(required_status)
|
||||
if(!parts.len)
|
||||
@@ -193,7 +207,7 @@
|
||||
if(picked.receive_damage(brute, burn, stamina,check_armor ? run_armor_check(picked, (brute ? "melee" : burn ? "fire" : stamina ? "bullet" : null)) : FALSE))
|
||||
update_damage_overlays()
|
||||
|
||||
//Heal MANY bodyparts, in random order
|
||||
///Heal MANY bodyparts, in random order
|
||||
/mob/living/carbon/heal_overall_damage(brute = 0, burn = 0, stamina = 0, required_status, updating_health = TRUE)
|
||||
var/list/obj/item/bodypart/parts = get_damaged_bodyparts(brute, burn, stamina, required_status)
|
||||
|
||||
@@ -218,7 +232,7 @@
|
||||
if(update)
|
||||
update_damage_overlays()
|
||||
|
||||
// damage MANY bodyparts, in random order
|
||||
/// damage MANY bodyparts, in random order
|
||||
/mob/living/carbon/take_overall_damage(brute = 0, burn = 0, stamina = 0, updating_health = TRUE, required_status)
|
||||
if(status_flags & GODMODE)
|
||||
return //godmode
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
|
||||
|
||||
/// depending on the species, it will run the corresponding apply_damage code there
|
||||
/mob/living/carbon/human/apply_damage(damage = 0,damagetype = BRUTE, def_zone = null, blocked = FALSE, forced = FALSE, spread_damage = FALSE)
|
||||
// depending on the species, it will run the corresponding apply_damage code there
|
||||
return dna.species.apply_damage(damage, damagetype, def_zone, blocked, src, forced, spread_damage)
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
/datum/species/human/felinid
|
||||
name = "Felinid"
|
||||
id = "felinid"
|
||||
say_mod = "meows"
|
||||
limbs_id = "human"
|
||||
|
||||
mutant_bodyparts = list("ears", "tail_human")
|
||||
|
||||
@@ -1,18 +1,24 @@
|
||||
|
||||
/*
|
||||
apply_damage(a,b,c)
|
||||
args
|
||||
a:damage - How much damage to take
|
||||
b:damage_type - What type of damage to take, brute, burn
|
||||
c:def_zone - Where to take the damage if its brute or burn
|
||||
Returns
|
||||
standard 0 if fail
|
||||
*/
|
||||
/**
|
||||
* Applies damage to this mob
|
||||
*
|
||||
* Sends [COMSIG_MOB_APPLY_DAMGE]
|
||||
*
|
||||
* Arguuments:
|
||||
* * damage - amount of damage
|
||||
* * damagetype - one of [BRUTE], [BURN], [TOX], [OXY], [CLONE], [STAMINA]
|
||||
* * def_zone - zone that is being hit if any
|
||||
* * blocked - armor value applied
|
||||
* * forced - bypass hit percentage
|
||||
* * spread_damage - used in overrides
|
||||
*
|
||||
* Returns TRUE if damage applied
|
||||
*/
|
||||
/mob/living/proc/apply_damage(damage = 0,damagetype = BRUTE, def_zone = null, blocked = FALSE, forced = FALSE, spread_damage = FALSE)
|
||||
SEND_SIGNAL(src, COMSIG_MOB_APPLY_DAMGE, damage, damagetype, def_zone)
|
||||
var/hit_percent = (100-blocked)/100
|
||||
if(!damage || (!forced && hit_percent <= 0))
|
||||
return 0
|
||||
return FALSE
|
||||
var/damage_amount = forced ? damage : damage * hit_percent
|
||||
switch(damagetype)
|
||||
if(BRUTE)
|
||||
@@ -27,9 +33,10 @@
|
||||
adjustCloneLoss(damage_amount, forced = forced)
|
||||
if(STAMINA)
|
||||
adjustStaminaLoss(damage_amount, forced = forced)
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
/mob/living/proc/apply_damage_type(damage = 0, damagetype = BRUTE) //like apply damage except it always uses the damage procs
|
||||
///like [apply_damage][/mob/living/proc/apply_damage] except it always uses the damage procs
|
||||
/mob/living/proc/apply_damage_type(damage = 0, damagetype = BRUTE)
|
||||
switch(damagetype)
|
||||
if(BRUTE)
|
||||
return adjustBruteLoss(damage)
|
||||
@@ -44,6 +51,7 @@
|
||||
if(STAMINA)
|
||||
return adjustStaminaLoss(damage)
|
||||
|
||||
/// return the damage amount for the type given
|
||||
/mob/living/proc/get_damage_amount(damagetype = BRUTE)
|
||||
switch(damagetype)
|
||||
if(BRUTE)
|
||||
@@ -59,7 +67,7 @@
|
||||
if(STAMINA)
|
||||
return getStaminaLoss()
|
||||
|
||||
|
||||
/// applies multiple damages at once via [/mob/living/proc/apply_damage]
|
||||
/mob/living/proc/apply_damages(brute = 0, burn = 0, tox = 0, oxy = 0, clone = 0, def_zone = null, blocked = FALSE, stamina = 0, brain = 0)
|
||||
if(blocked >= 100)
|
||||
return 0
|
||||
@@ -80,7 +88,7 @@
|
||||
return 1
|
||||
|
||||
|
||||
|
||||
/// applies various common status effects or common hardcoded mob effects
|
||||
/mob/living/proc/apply_effect(effect = 0,effecttype = EFFECT_STUN, blocked = FALSE)
|
||||
var/hit_percent = (100-blocked)/100
|
||||
if(!effect || (hit_percent <= 0))
|
||||
@@ -112,7 +120,7 @@
|
||||
jitteriness = max(jitteriness,(effect * hit_percent))
|
||||
return 1
|
||||
|
||||
|
||||
/// applies multiple effects at once via [/mob/living/proc/apply_effect]
|
||||
/mob/living/proc/apply_effects(stun = 0, knockdown = 0, unconscious = 0, irradiate = 0, slur = 0, stutter = 0, eyeblur = 0, drowsy = 0, blocked = FALSE, stamina = 0, jitter = 0, paralyze = 0, immobilize = 0)
|
||||
if(blocked >= 100)
|
||||
return BULLET_ACT_BLOCK
|
||||
@@ -240,15 +248,18 @@
|
||||
/mob/living/proc/setStaminaLoss(amount, updating_health = TRUE, forced = FALSE)
|
||||
return
|
||||
|
||||
// heal ONE external organ, organ gets randomly selected from damaged ones.
|
||||
/// needs to return amount healed in order to calculate things like tend wounds xp gain
|
||||
/**
|
||||
* heal ONE external organ, organ gets randomly selected from damaged ones.
|
||||
*
|
||||
* needs to return amount healed in order to calculate things like tend wounds xp gain
|
||||
*/
|
||||
/mob/living/proc/heal_bodypart_damage(brute = 0, burn = 0, stamina = 0, updating_health = TRUE, required_status)
|
||||
. = (adjustBruteLoss(-brute, FALSE) + adjustFireLoss(-burn, FALSE) + adjustStaminaLoss(-stamina, FALSE)) //zero as argument for no instant health update
|
||||
if(updating_health)
|
||||
updatehealth()
|
||||
update_stamina()
|
||||
|
||||
// damage ONE external organ, organ gets randomly selected from damaged ones.
|
||||
/// damage ONE external organ, organ gets randomly selected from damaged ones.
|
||||
/mob/living/proc/take_bodypart_damage(brute = 0, burn = 0, stamina = 0, updating_health = TRUE, required_status, check_armor = FALSE)
|
||||
adjustBruteLoss(brute, FALSE) //zero as argument for no instant health update
|
||||
adjustFireLoss(burn, FALSE)
|
||||
@@ -257,7 +268,7 @@
|
||||
updatehealth()
|
||||
update_stamina()
|
||||
|
||||
// heal MANY bodyparts, in random order
|
||||
/// heal MANY bodyparts, in random order
|
||||
/mob/living/proc/heal_overall_damage(brute = 0, burn = 0, stamina = 0, required_status, updating_health = TRUE)
|
||||
adjustBruteLoss(-brute, FALSE) //zero as argument for no instant health update
|
||||
adjustFireLoss(-burn, FALSE)
|
||||
@@ -266,7 +277,7 @@
|
||||
updatehealth()
|
||||
update_stamina()
|
||||
|
||||
// damage MANY bodyparts, in random order
|
||||
/// damage MANY bodyparts, in random order
|
||||
/mob/living/proc/take_overall_damage(brute = 0, burn = 0, stamina = 0, updating_health = TRUE, required_status = null)
|
||||
adjustBruteLoss(brute, FALSE) //zero as argument for no instant health update
|
||||
adjustFireLoss(burn, FALSE)
|
||||
@@ -275,7 +286,7 @@
|
||||
updatehealth()
|
||||
update_stamina()
|
||||
|
||||
//heal up to amount damage, in a given order
|
||||
///heal up to amount damage, in a given order
|
||||
/mob/living/proc/heal_ordered_damage(amount, list/damage_types)
|
||||
. = amount //we'll return the amount of damage healed
|
||||
for(var/i in damage_types)
|
||||
|
||||
@@ -7,92 +7,96 @@
|
||||
|
||||
hud_type = /datum/hud/living
|
||||
|
||||
var/resize = 1 //Badminnery resize
|
||||
var/resize = 1 ///Badminnery resize
|
||||
var/lastattacker = null
|
||||
var/lastattackerckey = null
|
||||
|
||||
//Health and life related vars
|
||||
var/maxHealth = 100 //Maximum health that should be possible.
|
||||
var/health = 100 //A mob's health
|
||||
var/maxHealth = 100 ///Maximum health that should be possible.
|
||||
var/health = 100 ///A mob's health
|
||||
|
||||
//Damage related vars, NOTE: THESE SHOULD ONLY BE MODIFIED BY PROCS
|
||||
var/bruteloss = 0 //Brutal damage caused by brute force (punching, being clubbed by a toolbox ect... this also accounts for pressure damage)
|
||||
var/oxyloss = 0 //Oxygen depravation damage (no air in lungs)
|
||||
var/toxloss = 0 //Toxic damage caused by being poisoned or radiated
|
||||
var/fireloss = 0 //Burn damage caused by being way too hot, too cold or burnt.
|
||||
var/cloneloss = 0 //Damage caused by being cloned or ejected from the cloner early. slimes also deal cloneloss damage to victims
|
||||
var/staminaloss = 0 //Stamina damage, or exhaustion. You recover it slowly naturally, and are knocked down if it gets too high. Holodeck and hallucinations deal this.
|
||||
var/crit_threshold = HEALTH_THRESHOLD_CRIT // when the mob goes from "normal" to crit
|
||||
var/bruteloss = 0 ///Brutal damage caused by brute force (punching, being clubbed by a toolbox ect... this also accounts for pressure damage)
|
||||
var/oxyloss = 0 ///Oxygen depravation damage (no air in lungs)
|
||||
var/toxloss = 0 ///Toxic damage caused by being poisoned or radiated
|
||||
var/fireloss = 0 ///Burn damage caused by being way too hot, too cold or burnt.
|
||||
var/cloneloss = 0 ///Damage caused by being cloned or ejected from the cloner early. slimes also deal cloneloss damage to victims
|
||||
var/staminaloss = 0 ///Stamina damage, or exhaustion. You recover it slowly naturally, and are knocked down if it gets too high. Holodeck and hallucinations deal this.
|
||||
var/crit_threshold = HEALTH_THRESHOLD_CRIT /// when the mob goes from "normal" to crit
|
||||
|
||||
var/mobility_flags = MOBILITY_FLAGS_DEFAULT
|
||||
|
||||
var/resting = FALSE
|
||||
|
||||
var/lying = 0 //number of degrees. DO NOT USE THIS IN CHECKS. CHECK FOR MOBILITY FLAGS INSTEAD!!
|
||||
var/lying_prev = 0 //last value of lying on update_mobility
|
||||
var/lying = 0 ///number of degrees. DO NOT USE THIS IN CHECKS. CHECK FOR MOBILITY FLAGS INSTEAD!!
|
||||
var/lying_prev = 0 ///last value of lying on update_mobility
|
||||
|
||||
var/confused = 0 //Makes the mob move in random directions.
|
||||
var/confused = 0 ///Makes the mob move in random directions.
|
||||
|
||||
var/hallucination = 0 //Directly affects how long a mob will hallucinate for
|
||||
var/hallucination = 0 ///Directly affects how long a mob will hallucinate for
|
||||
|
||||
var/last_special = 0 //Used by the resist verb, likely used to prevent players from bypassing next_move by logging in/out.
|
||||
var/last_special = 0 ///Used by the resist verb, likely used to prevent players from bypassing next_move by logging in/out.
|
||||
var/timeofdeath = 0
|
||||
|
||||
//Allows mobs to move through dense areas without restriction. For instance, in space or out of holder objects.
|
||||
var/incorporeal_move = FALSE //FALSE is off, INCORPOREAL_MOVE_BASIC is normal, INCORPOREAL_MOVE_SHADOW is for ninjas
|
||||
//and INCORPOREAL_MOVE_JAUNT is blocked by holy water/salt
|
||||
/**
|
||||
* Allows mobs to move through dense areas without restriction. For instance, in space or out of holder objects.
|
||||
*
|
||||
* FALSE is off, [INCORPOREAL_MOVE_BASIC] is normal, [INCORPOREAL_MOVE_SHADOW] is for ninjas
|
||||
* and [INCORPOREAL_MOVE_JAUNT] is blocked by holy water/salt
|
||||
*/
|
||||
var/incorporeal_move = FALSE
|
||||
|
||||
var/list/roundstart_quirks = list()
|
||||
|
||||
var/list/surgeries = list() //a list of surgery datums. generally empty, they're added when the player wants them.
|
||||
var/list/surgeries = list() ///a list of surgery datums. generally empty, they're added when the player wants them.
|
||||
|
||||
var/now_pushing = null //used by living/Bump() and living/PushAM() to prevent potential infinite loop.
|
||||
var/now_pushing = null ///used by [living/Bump()][/mob/living/Bump] and [living/PushAM()][/mob/living/PushAM] to prevent potential infinite loop.
|
||||
|
||||
var/cameraFollow = null
|
||||
|
||||
var/tod = null // Time of death
|
||||
var/tod = null /// Time of death
|
||||
|
||||
var/on_fire = 0 //The "Are we on fire?" var
|
||||
var/fire_stacks = 0 //Tracks how many stacks of fire we have on, max is usually 20
|
||||
var/on_fire = 0 ///The "Are we on fire?" var
|
||||
var/fire_stacks = 0 ///Tracks how many stacks of fire we have on, max is usually 20
|
||||
|
||||
var/bloodcrawl = 0 //0 No blood crawling, BLOODCRAWL for bloodcrawling, BLOODCRAWL_EAT for crawling+mob devour
|
||||
var/holder = null //The holder for blood crawling
|
||||
var/ventcrawler = 0 //0 No vent crawling, 1 vent crawling in the nude, 2 vent crawling always
|
||||
var/limb_destroyer = 0 //1 Sets AI behavior that allows mobs to target and dismember limbs with their basic attack.
|
||||
var/bloodcrawl = 0 ///0 No blood crawling, [BLOODCRAWL] for bloodcrawling, [BLOODCRAWL_EAT] for crawling+mob devour
|
||||
var/holder = null ///The holder for blood crawling
|
||||
var/ventcrawler = 0 ///0 No vent crawling, 1 vent crawling in the nude, 2 vent crawling always
|
||||
var/limb_destroyer = 0 ///1 Sets AI behavior that allows mobs to target and dismember limbs with their basic attack.
|
||||
|
||||
var/mob_size = MOB_SIZE_HUMAN
|
||||
var/mob_biotypes = MOB_ORGANIC
|
||||
var/metabolism_efficiency = 1 //more or less efficiency to metabolize helpful/harmful reagents and regulate body temperature..
|
||||
var/has_limbs = 0 //does the mob have distinct limbs?(arms,legs, chest,head)
|
||||
var/metabolism_efficiency = 1 ///more or less efficiency to metabolize helpful/harmful reagents and regulate body temperature..
|
||||
var/has_limbs = 0 ///does the mob have distinct limbs?(arms,legs, chest,head)
|
||||
|
||||
var/list/pipes_shown = list()
|
||||
var/last_played_vent
|
||||
|
||||
var/smoke_delay = 0 //used to prevent spam with smoke reagent reaction on mob.
|
||||
var/smoke_delay = 0 ///used to prevent spam with smoke reagent reaction on mob.
|
||||
|
||||
var/bubble_icon = "default" //what icon the mob uses for speechbubbles
|
||||
var/health_doll_icon //if this exists AND the normal sprite is bigger than 32x32, this is the replacement icon state (because health doll size limitations). the icon will always be screen_gen.dmi
|
||||
var/bubble_icon = "default" ///what icon the mob uses for speechbubbles
|
||||
var/health_doll_icon ///if this exists AND the normal sprite is bigger than 32x32, this is the replacement icon state (because health doll size limitations). the icon will always be screen_gen.dmi
|
||||
|
||||
var/last_bumped = 0
|
||||
var/unique_name = 0 //if a mob's name should be appended with an id when created e.g. Mob (666)
|
||||
var/numba = 0 //the id a mob gets when it's created
|
||||
var/unique_name = 0 ///if a mob's name should be appended with an id when created e.g. Mob (666)
|
||||
var/numba = 0 ///the id a mob gets when it's created
|
||||
|
||||
var/list/butcher_results = null //these will be yielded from butchering with a probability chance equal to the butcher item's effectiveness
|
||||
var/list/guaranteed_butcher_results = null //these will always be yielded from butchering
|
||||
var/butcher_difficulty = 0 //effectiveness prob. is modified negatively by this amount; positive numbers make it more difficult, negative ones make it easier
|
||||
var/list/butcher_results = null ///these will be yielded from butchering with a probability chance equal to the butcher item's effectiveness
|
||||
var/list/guaranteed_butcher_results = null ///these will always be yielded from butchering
|
||||
var/butcher_difficulty = 0 ///effectiveness prob. is modified negatively by this amount; positive numbers make it more difficult, negative ones make it easier
|
||||
|
||||
var/hellbound = 0 //People who've signed infernal contracts are unrevivable.
|
||||
var/hellbound = 0 ///People who've signed infernal contracts are unrevivable.
|
||||
|
||||
var/list/weather_immunities = list()
|
||||
|
||||
var/stun_absorption = null //converted to a list of stun absorption sources this mob has when one is added
|
||||
var/stun_absorption = null ///converted to a list of stun absorption sources this mob has when one is added
|
||||
|
||||
var/blood_volume = 0 //how much blood the mob has
|
||||
var/obj/effect/proc_holder/ranged_ability //Any ranged ability the mob has, as a click override
|
||||
var/blood_volume = 0 ///how much blood the mob has
|
||||
var/obj/effect/proc_holder/ranged_ability ///Any ranged ability the mob has, as a click override
|
||||
|
||||
var/see_override = 0 //0 for no override, sets see_invisible = see_override in silicon & carbon life process via update_sight()
|
||||
var/see_override = 0 ///0 for no override, sets see_invisible = see_override in silicon & carbon life process via update_sight()
|
||||
|
||||
var/list/status_effects //a list of all status effects the mob has
|
||||
var/list/status_effects ///a list of all status effects the mob has
|
||||
var/druggy = 0
|
||||
|
||||
//Speech
|
||||
@@ -105,21 +109,21 @@
|
||||
|
||||
var/datum/riding/riding_datum
|
||||
|
||||
var/last_words //used for database logging
|
||||
var/last_words ///used for database logging
|
||||
|
||||
var/list/obj/effect/proc_holder/abilities = list()
|
||||
|
||||
var/can_be_held = FALSE //whether this can be picked up and held.
|
||||
var/can_be_held = FALSE ///whether this can be picked up and held.
|
||||
|
||||
var/radiation = 0 //If the mob is irradiated.
|
||||
var/radiation = 0 ///If the mob is irradiated.
|
||||
var/ventcrawl_layer = PIPING_LAYER_DEFAULT
|
||||
var/losebreath = 0
|
||||
|
||||
//List of active diseases
|
||||
var/list/diseases = list() // list of all diseases in a mob
|
||||
var/list/diseases = list() /// list of all diseases in a mob
|
||||
var/list/disease_resistances = list()
|
||||
|
||||
var/slowed_by_drag = TRUE //Whether the mob is slowed down when dragging another prone mob
|
||||
var/slowed_by_drag = TRUE ///Whether the mob is slowed down when dragging another prone mob
|
||||
|
||||
var/list/ownedSoullinks //soullinks we are the owner of
|
||||
var/list/sharedSoullinks //soullinks we are a/the sharer of
|
||||
var/list/ownedSoullinks ///soullinks we are the owner of
|
||||
var/list/sharedSoullinks ///soullinks we are a/the sharer of
|
||||
|
||||
@@ -122,7 +122,7 @@
|
||||
* NB: contains nulls!
|
||||
*
|
||||
* held_items[active_hand_index] is the actively held item, but please use
|
||||
* get_active_held_item() instead, because OOP
|
||||
* [get_active_held_item()][/mob/proc/get_active_held_item] instead, because OOP
|
||||
*/
|
||||
var/list/held_items = list()
|
||||
|
||||
@@ -195,7 +195,7 @@
|
||||
|
||||
var/memory_throttle_time = 0
|
||||
|
||||
var/list/alerts = list() // contains /obj/screen/alert only // On /mob so clientless mobs will throw alerts properly
|
||||
var/list/alerts = list() /// contains [/obj/screen/alert only] // On /mob so clientless mobs will throw alerts properly
|
||||
var/list/screens = list()
|
||||
var/list/client_colours = list()
|
||||
var/hud_type = /datum/hud
|
||||
|
||||
@@ -2,24 +2,20 @@
|
||||
name = "tesla bolt"
|
||||
icon_state = "tesla_projectile"
|
||||
impact_effect_type = /obj/effect/temp_visual/impact_effect/blue_laser
|
||||
var/chain
|
||||
damage = 10 //A worse lasergun
|
||||
var/zap_flags = ZAP_MOB_DAMAGE | ZAP_OBJ_DAMAGE
|
||||
var/zap_range = 3
|
||||
var/power = 10000
|
||||
|
||||
/obj/projectile/energy/tesla/fire(setAngle)
|
||||
if(firer)
|
||||
chain = firer.Beam(src, icon_state = "lightning[rand(1, 12)]", time = INFINITY, maxdistance = INFINITY)
|
||||
..()
|
||||
|
||||
/obj/projectile/energy/tesla/on_hit(atom/target)
|
||||
. = ..()
|
||||
tesla_zap(target, zap_range, power, zap_flags)
|
||||
tesla_zap(src, zap_range, power, zap_flags)
|
||||
qdel(src)
|
||||
|
||||
/obj/projectile/energy/tesla/Destroy()
|
||||
QDEL_NULL(chain)
|
||||
return ..()
|
||||
/obj/projectile/energy/tesla/process()
|
||||
. = ..()
|
||||
//Many coders have given their blood for this speed
|
||||
tesla_zap(src, zap_range, power, zap_flags)
|
||||
|
||||
/obj/projectile/energy/tesla/revolver
|
||||
name = "energy orb"
|
||||
@@ -27,3 +23,4 @@
|
||||
/obj/projectile/energy/tesla/cannon
|
||||
name = "tesla orb"
|
||||
power = 20000
|
||||
damage = 15 //Mech man big
|
||||
|
||||
@@ -11,12 +11,12 @@
|
||||
throw_speed = 3
|
||||
throw_range = 6
|
||||
grind_results = list()
|
||||
var/Uses = 1 // uses before it goes inert
|
||||
var/qdel_timer = null // deletion timer, for delayed reactions
|
||||
var/effectmod
|
||||
var/list/activate_reagents = list() //Reagents required for activation
|
||||
var/Uses = 1 ///uses before it goes inert
|
||||
var/qdel_timer = null ///deletion timer, for delayed reactions
|
||||
var/effectmod ///Which type of crossbred
|
||||
var/list/activate_reagents = list() ///Reagents required for activation
|
||||
var/recurring = FALSE
|
||||
var/research //Research point value
|
||||
var/research ///Research point value for slime cores. These are defines stored in [/__DEFINES/research] - the actual values are updated there.
|
||||
|
||||
/obj/item/slime_extract/examine(mob/user)
|
||||
. = ..()
|
||||
@@ -45,12 +45,24 @@
|
||||
if(Uses)
|
||||
grind_results[/datum/reagent/toxin/slimejelly] = 20
|
||||
|
||||
//Effect when activated by a Luminescent. Separated into a minor and major effect. Returns cooldown in deciseconds.
|
||||
/**
|
||||
* Effect when activated by a Luminescent.
|
||||
*
|
||||
* This proc is called whenever a Luminescent consumes a slime extract. Each one is separated into major and minor effects depending on the extract. Cooldown is measured in deciseconds.
|
||||
*
|
||||
* * arg1 - The mob absorbing the slime extract.
|
||||
* * arg2 - The valid species for the absorbtion. Should always be a Luminescent unless something very major has changed.
|
||||
* * arg3 - Whether or not the activation is major or minor. Major activations have large, complex effects, minor are simple.
|
||||
*/
|
||||
/obj/item/slime_extract/proc/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type)
|
||||
to_chat(user, "<span class='warning'>Nothing happened... This slime extract cannot be activated this way.</span>")
|
||||
return 0
|
||||
|
||||
//Core-crossing: Feeding adult slimes extracts to obtain a much more powerful, single extract.
|
||||
/**
|
||||
* Core-crossing: Feeding adult slimes extracts to obtain a much more powerful, single extract.
|
||||
*
|
||||
* By using a valid core on a living adult slime, then feeding it nine more of the same type, you can mutate it into more useful items. Not every slime type has an implemented core cross.
|
||||
*/
|
||||
/obj/item/slime_extract/attack(mob/living/simple_animal/slime/M, mob/user)
|
||||
if(!isslime(M))
|
||||
return ..()
|
||||
@@ -628,6 +640,16 @@
|
||||
|
||||
////Slime-derived potions///
|
||||
|
||||
/**
|
||||
* #Slime potions
|
||||
*
|
||||
* Feed slimes potions either by hand or using the slime console.
|
||||
*
|
||||
* Slime potions either augment the slime's behavior, its extract output, or its intelligence. These all come either from extract effects or cross cores.
|
||||
* A few of the more powerful ones can modify someone's equipment or gender.
|
||||
* New ones should probably be accessible only through cross cores as all the normal core types already have uses. Rule of thumb is 'stronger effects go in cross cores'.
|
||||
*/
|
||||
|
||||
/obj/item/slimepotion
|
||||
name = "slime potion"
|
||||
desc = "A hard yet gelatinous capsule excreted by a slime, containing mysterious substances."
|
||||
@@ -1001,6 +1023,8 @@
|
||||
imp.implant(M, user)
|
||||
qdel(src)
|
||||
|
||||
///Definitions for slime products that don't have anywhere else to go (Floor tiles, blueprints).
|
||||
|
||||
/obj/item/stack/tile/bluespace
|
||||
name = "bluespace floor tile"
|
||||
singular_name = "floor tile"
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
author: "LemonInTheDark"
|
||||
delete-after: True
|
||||
changes:
|
||||
- tweak: "The tesla revolver/cannon's projectiles now arc while in flight."
|
||||
- balance: "The projectiles now deal light burn damage on hit."
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "Farquaar"
|
||||
delete-after: True
|
||||
changes:
|
||||
- tweak: "Felinid speech is now audibly distinct from human speech."
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "ArcaneDefence"
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "The recipe for Carp Classic cigarettes has been brought up to company standards."
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "Twaticus"
|
||||
delete-after: True
|
||||
changes:
|
||||
- imageadd: "bola inhand sprites"
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 1.6 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 1.5 KiB |
@@ -29,10 +29,13 @@ export const broadcastMessage = (link, msg) => {
|
||||
}
|
||||
};
|
||||
|
||||
const deserializeObject = obj => {
|
||||
return JSON.parse(obj, (key, value) => {
|
||||
const deserializeObject = str => {
|
||||
return JSON.parse(str, (key, value) => {
|
||||
if (typeof value === 'object' && value !== null) {
|
||||
if (value.__error__) {
|
||||
if (!value.stack) {
|
||||
return value.string;
|
||||
}
|
||||
return retrace(value.stack);
|
||||
}
|
||||
if (value.__number__) {
|
||||
@@ -102,7 +105,7 @@ const setupHttpLink = () => {
|
||||
body += chunk.toString();
|
||||
});
|
||||
req.on('end', () => {
|
||||
const msg = JSON.parse(body);
|
||||
const msg = deserializeObject(body);
|
||||
handleLinkMessage(msg);
|
||||
res.end();
|
||||
});
|
||||
|
||||
@@ -87,10 +87,10 @@ export const Bepis = props => {
|
||||
<Grid.Column>
|
||||
<Section title="Market Data and Analysis">
|
||||
<Box>
|
||||
Average technology cost: {data.mean_value}
|
||||
Average technology cost: {data.mean_value}
|
||||
</Box>
|
||||
<Box>
|
||||
Current chance of Success: Est. {data.success_estimate}%
|
||||
Current chance of Success: Est. {data.success_estimate}%
|
||||
</Box>
|
||||
{data.error_name && (
|
||||
<Box color="bad">
|
||||
|
||||
@@ -73,7 +73,7 @@ class PaintCanvas extends Component {
|
||||
height={y_size || 300}
|
||||
{...rest}
|
||||
onClick={e => this.clickwrapper(e)}>
|
||||
Canvas failed to render.
|
||||
Canvas failed to render.
|
||||
</canvas>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -55,7 +55,7 @@ export const GravityGenerator = props => {
|
||||
)}
|
||||
{charging_state === 2 && (
|
||||
<Box color="average">
|
||||
Discharging
|
||||
Discharging
|
||||
</Box>
|
||||
)}
|
||||
</LabeledList.Item>
|
||||
|
||||
@@ -12,7 +12,7 @@ export const HypnoChair = props => {
|
||||
The Enhanced Interrogation Chamber is designed to induce a deep-rooted
|
||||
trance trigger into the subject. Once the procedure is complete,
|
||||
by using the implanted trigger phrase, the authorities are able to
|
||||
ensure immediate and complete obedience and truthfulness.
|
||||
ensure immediate and complete obedience and truthfulness.
|
||||
</Section>
|
||||
<Section
|
||||
title="Occupant Information"
|
||||
|
||||
@@ -84,7 +84,7 @@ export const LanguageMenu = props => {
|
||||
)}>
|
||||
{language.desc}
|
||||
{' '}
|
||||
Key: ,{language.key}
|
||||
Key: ,{language.key}
|
||||
{' '}
|
||||
{!!language.shadow && '(gained from mob)'}
|
||||
{' '}
|
||||
|
||||
@@ -154,7 +154,7 @@ export const LaunchpadControl = props => {
|
||||
inline
|
||||
bold
|
||||
mr={1}>
|
||||
Y:
|
||||
Y:
|
||||
</Box>
|
||||
<NumberInput
|
||||
value={y}
|
||||
|
||||
@@ -15,16 +15,16 @@ export const MiningVendor = props => {
|
||||
<Section title="User">
|
||||
{data.user && (
|
||||
<Box>
|
||||
Welcome, <b>{data.user.name || "Unknown"}</b>,
|
||||
Welcome, <b>{data.user.name || "Unknown"}</b>,
|
||||
{' '}
|
||||
<b>{data.user.job || "Unemployed"}</b>!
|
||||
<br />
|
||||
Your balance is <b>{data.user.points} mining points</b>.
|
||||
Your balance is <b>{data.user.points} mining points</b>.
|
||||
</Box>
|
||||
) || (
|
||||
<Box color="light-gray">
|
||||
No registered ID card!<br />
|
||||
Please contact your local HoP!
|
||||
No registered ID card!<br />
|
||||
Please contact your local HoP!
|
||||
</Box>
|
||||
)}
|
||||
</Section>
|
||||
|
||||
@@ -109,16 +109,16 @@ export const NaniteRemote = props => {
|
||||
<Table>
|
||||
<Table.Row header>
|
||||
<Table.Cell width="35%">
|
||||
Name
|
||||
Name
|
||||
</Table.Cell>
|
||||
<Table.Cell width="20%">
|
||||
Mode
|
||||
Mode
|
||||
</Table.Cell>
|
||||
<Table.Cell collapsing>
|
||||
Code
|
||||
Code
|
||||
</Table.Cell>
|
||||
<Table.Cell collapsing>
|
||||
Relay
|
||||
Relay
|
||||
</Table.Cell>
|
||||
</Table.Row>
|
||||
{saved_settings.map(setting => (
|
||||
@@ -156,7 +156,7 @@ export const NaniteRemote = props => {
|
||||
</Table>
|
||||
) : (
|
||||
<NoticeBox>
|
||||
No settings currently saved
|
||||
No settings currently saved
|
||||
</NoticeBox>
|
||||
)}
|
||||
</Section>
|
||||
|
||||
@@ -61,7 +61,7 @@ export const NtosAiRestorer = props => {
|
||||
fontSize="20px"
|
||||
color="good"
|
||||
mt={1}>
|
||||
RECONSTRUCTION IN PROGRESS
|
||||
RECONSTRUCTION IN PROGRESS
|
||||
</Box>
|
||||
)}
|
||||
<Button
|
||||
|
||||
@@ -4,8 +4,6 @@ import { Button, NoticeBox, Section, Tabs, Input } from '../components';
|
||||
import { AccessList } from './common/AccessList';
|
||||
import { map } from 'common/collections';
|
||||
|
||||
|
||||
|
||||
export const NtosCard = props => {
|
||||
const { act, data } = useBackend(props);
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@ export const NtosConfiguration = props => {
|
||||
inline
|
||||
bold
|
||||
mr={1}>
|
||||
Power Draw: {power_usage}W
|
||||
Power Draw: {power_usage}W
|
||||
</Box>
|
||||
)}>
|
||||
<LabeledList>
|
||||
|
||||
@@ -34,7 +34,7 @@ export const NtosCrewManifest = props => {
|
||||
{entry.name}
|
||||
</Table.Cell>
|
||||
<Table.Cell>
|
||||
({entry.rank})
|
||||
({entry.rank})
|
||||
</Table.Cell>
|
||||
</Table.Row>
|
||||
))}
|
||||
|
||||
@@ -105,7 +105,7 @@ export const OperatingComputer = props => {
|
||||
{procedure.alt_chems_needed && (
|
||||
<Fragment>
|
||||
<b>
|
||||
Required Chemicals:
|
||||
Required Chemicals:
|
||||
</b>
|
||||
<br />
|
||||
{procedure.alt_chems_needed}
|
||||
|
||||
@@ -268,7 +268,7 @@ export class RouletteBetTable extends Component {
|
||||
'Roulette__lowertable--cell',
|
||||
'Roulette__lowertable--header',
|
||||
])}>
|
||||
Last Spun:
|
||||
Last Spun:
|
||||
</th>
|
||||
<th
|
||||
className={classes([
|
||||
@@ -276,7 +276,7 @@ export class RouletteBetTable extends Component {
|
||||
'Roulette__lowertable--cell',
|
||||
'Roulette__lowertable--header',
|
||||
])}>
|
||||
Current Bet:
|
||||
Current Bet:
|
||||
</th>
|
||||
</tr>
|
||||
<tr>
|
||||
@@ -362,14 +362,14 @@ export class RouletteBetTable extends Component {
|
||||
m={1}
|
||||
fontSize="14px"
|
||||
textAlign="center">
|
||||
Swipe an ID card with a connected account to spin!
|
||||
Swipe an ID card with a connected account to spin!
|
||||
</Box>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td className="Roulette__lowertable--cell">
|
||||
<Box inline bold mr={1}>
|
||||
House Balance:
|
||||
House Balance:
|
||||
</Box>
|
||||
<Box inline>
|
||||
{data.HouseBalance ? data.HouseBalance + ' cr': "None"}
|
||||
|
||||
@@ -44,7 +44,7 @@ export const TransferValve = props => {
|
||||
</LabeledList.Item>
|
||||
) : (
|
||||
<NoticeBox textAlign="center">
|
||||
Insert Assembly
|
||||
Insert Assembly
|
||||
</NoticeBox>
|
||||
)}
|
||||
</LabeledList>
|
||||
@@ -61,7 +61,7 @@ export const TransferValve = props => {
|
||||
</LabeledList.Item>
|
||||
) : (
|
||||
<NoticeBox textAlign="center">
|
||||
Insert Tank
|
||||
Insert Tank
|
||||
</NoticeBox>
|
||||
)}
|
||||
</LabeledList>
|
||||
@@ -78,7 +78,7 @@ export const TransferValve = props => {
|
||||
</LabeledList.Item>
|
||||
) : (
|
||||
<NoticeBox textAlign="center">
|
||||
Insert Tank
|
||||
Insert Tank
|
||||
</NoticeBox>
|
||||
)}
|
||||
</LabeledList>
|
||||
|
||||
@@ -30,16 +30,16 @@ export const Vending = props => {
|
||||
<Section title="User">
|
||||
{data.user && (
|
||||
<Box>
|
||||
Welcome, <b>{data.user.name}</b>,
|
||||
Welcome, <b>{data.user.name}</b>,
|
||||
{' '}
|
||||
<b>{data.user.job || "Unemployed"}</b>!
|
||||
<br />
|
||||
Your balance is <b>{data.user.cash} credits</b>.
|
||||
Your balance is <b>{data.user.cash} credits</b>.
|
||||
</Box>
|
||||
) || (
|
||||
<Box color="light-gray">
|
||||
No registered ID card!<br />
|
||||
Please contact your local HoP!
|
||||
No registered ID card!<br />
|
||||
Please contact your local HoP!
|
||||
</Box>
|
||||
)}
|
||||
</Section>
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -3,16 +3,21 @@
|
||||
* SPDX-License-Identifier: GPL-2.0-or-later
|
||||
*/
|
||||
|
||||
@use 'sass:color';
|
||||
@use 'sass:map';
|
||||
@use 'sass:math';
|
||||
@use 'sass:meta';
|
||||
|
||||
// Type-casting
|
||||
// --------------------------------------------------------
|
||||
|
||||
// Get a unit-less numeric value
|
||||
@function num($value) {
|
||||
@if type-of($value) != number {
|
||||
@if meta.type-of($value) != number {
|
||||
@error 'Could not convert `#{$value}` - must be `type-of number`';
|
||||
@return null;
|
||||
}
|
||||
@if unit($value) == '%' {
|
||||
@if math.unit($value) == '%' {
|
||||
@return $value / 100%;
|
||||
}
|
||||
@return $value / ($value * 0 + 1);
|
||||
@@ -25,20 +30,20 @@
|
||||
// Increases perceptual color lightness.
|
||||
@function lighten($color, $percent) {
|
||||
$scaled: hsl(
|
||||
hue($color),
|
||||
saturation($color),
|
||||
lightness($color) * (1 + num($percent)));
|
||||
$mixed: mix(#ffffff, $color, 100% * num($percent));
|
||||
@return mix($scaled, $mixed, 75%);
|
||||
color.hue($color),
|
||||
color.saturation($color),
|
||||
color.lightness($color) * (1 + num($percent)));
|
||||
$mixed: color.mix(#ffffff, $color, 100% * num($percent));
|
||||
@return color.mix($scaled, $mixed, 75%);
|
||||
}
|
||||
|
||||
// Returns the NTSC luminance of `$color` as a float (between 0 and 1).
|
||||
// 1 is pure white, 0 is pure black.
|
||||
@function luminance($color) {
|
||||
$colors: (
|
||||
'red': red($color),
|
||||
'green': green($color),
|
||||
'blue': blue($color)
|
||||
'red': color.red($color),
|
||||
'green': color.green($color),
|
||||
'blue': color.blue($color)
|
||||
);
|
||||
|
||||
@each $name, $value in $colors {
|
||||
@@ -49,12 +54,12 @@
|
||||
}
|
||||
@else {
|
||||
$value: ($value + .055) / 1.055;
|
||||
$value: math-pow($value, 2.4);
|
||||
$value: math.pow($value, 2.4);
|
||||
}
|
||||
$colors: map-merge($colors, ($name: $value));
|
||||
$colors: map.merge($colors, ($name: $value));
|
||||
}
|
||||
|
||||
@return (map-get($colors, 'red') * .2126)
|
||||
+ (map-get($colors, 'green') * .7152)
|
||||
+ (map-get($colors, 'blue') * .0722);
|
||||
@return (map.get($colors, 'red') * .2126)
|
||||
+ (map.get($colors, 'green') * .7152)
|
||||
+ (map.get($colors, 'blue') * .0722);
|
||||
}
|
||||
|
||||
@@ -3,16 +3,6 @@ const path = require('path');
|
||||
const BuildNotifierPlugin = require('webpack-build-notifier');
|
||||
const ExtractCssChunks = require('extract-css-chunks-webpack-plugin');
|
||||
|
||||
const SASS_FUNCTIONS = {
|
||||
// Power function polyfill
|
||||
'math-pow($number, $exp)': (number, exp) => {
|
||||
const sass = require('sass');
|
||||
return new sass.types.Number(Math.pow(
|
||||
number.getValue(),
|
||||
exp.getValue()));
|
||||
},
|
||||
};
|
||||
|
||||
module.exports = (env = {}, argv) => {
|
||||
const config = {
|
||||
mode: argv.mode === 'production' ? 'production' : 'development',
|
||||
@@ -85,11 +75,7 @@ module.exports = (env = {}, argv) => {
|
||||
},
|
||||
{
|
||||
loader: 'sass-loader',
|
||||
options: {
|
||||
sassOptions: {
|
||||
functions: SASS_FUNCTIONS,
|
||||
},
|
||||
},
|
||||
options: {},
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
+1054
-1120
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user