From 582fd0962469941432a0a6378a6506b2c075cba2 Mon Sep 17 00:00:00 2001 From: ParadoxSpace Date: Sat, 9 Apr 2016 18:09:35 -0600 Subject: [PATCH 01/38] Update pulse.dm --- code/modules/projectiles/guns/energy/pulse.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/projectiles/guns/energy/pulse.dm b/code/modules/projectiles/guns/energy/pulse.dm index 98817fede3..ab134d3406 100644 --- a/code/modules/projectiles/guns/energy/pulse.dm +++ b/code/modules/projectiles/guns/energy/pulse.dm @@ -13,12 +13,12 @@ firemodes = list( list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun, fire_sound='sound/weapons/Taser.ogg', fire_delay=null, charge_cost=null), list(mode_name="lethal", projectile_type=/obj/item/projectile/beam, fire_sound='sound/weapons/Laser.ogg', fire_delay=null, charge_cost=null), - list(mode_name="DESTROY", projectile_type=/obj/item/projectile/beam/pulse, fire_sound='sound/weapons/pulse.ogg', fire_delay=25, charge_cost=400), + list(mode_name="DESTROY", projectile_type=/obj/item/projectile/beam/pulse, fire_sound='sound/weapons/pulse.ogg', fire_delay=null, charge_cost=100), ) /obj/item/weapon/gun/energy/pulse_rifle/mounted self_recharge = 1 - use_external_power = 1 + use_external_power = 1 /obj/item/weapon/gun/energy/pulse_rifle/destroyer name = "pulse destroyer" From e41ad0c9469de2b7d09ec58076abfc676cb36cbb Mon Sep 17 00:00:00 2001 From: Hubblenaut Date: Fri, 15 Apr 2016 16:41:33 +0200 Subject: [PATCH 02/38] Reinforced Walls Lowers amount needed for building a reinforced wall from a girder from four to two sheets. Gets rid of rod products from dismantling a reinforced wall. Adds one more extra step for undoing the deconstruction. --- code/game/objects/structures/girders.dm | 7 +++--- code/game/turfs/simulated/wall_attacks.dm | 30 +++++++++++++---------- code/game/turfs/simulated/walls.dm | 3 ++- code/modules/materials/materials.dm | 5 ++-- 4 files changed, 25 insertions(+), 20 deletions(-) diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index 867dada6d9..9c103a8ed2 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -143,7 +143,8 @@ user << "You begin adding the plating..." - if(!do_after(user,40) || !S.use(2)) + var/amount_to_use = reinf_material ? 1 : 2 + if(!do_after(user,40) || !S.use(amount_to_use)) return 1 //once we've gotten this far don't call parent attackby() if(anchored) @@ -167,7 +168,7 @@ user << "\The [src] is already reinforced." return 0 - if(S.get_amount() < 2) + if(S.get_amount() < 1) user << "There isn't enough material here to reinforce the girder." return 0 @@ -177,7 +178,7 @@ return 0 user << "Now reinforcing..." - if (!do_after(user,40) || !S.use(2)) + if (!do_after(user,40) || !S.use(1)) return 1 //don't call parent attackby() past this point user << "You added reinforcement!" diff --git a/code/game/turfs/simulated/wall_attacks.dm b/code/game/turfs/simulated/wall_attacks.dm index 23ffac6465..ffc2297d02 100644 --- a/code/game/turfs/simulated/wall_attacks.dm +++ b/code/game/turfs/simulated/wall_attacks.dm @@ -217,8 +217,7 @@ if (istype(W, /obj/item/weapon/wirecutters)) playsound(src, 'sound/items/Wirecutter.ogg', 100, 1) construction_stage = 5 - new /obj/item/stack/rods( src ) - user << "You cut the outer grille." + user << "You cut through the outer grille." update_icon() return if(5) @@ -229,16 +228,13 @@ return construction_stage = 4 update_icon() - user << "You remove the support lines." + user << "You unscrew the support lines." + return + else if (istype(W, /obj/item/weapon/wirecutters)) + construction_stage = 6 + user << "You mend the outer grille." + update_icon() return - else if( istype(W, /obj/item/stack/rods) ) - var/obj/item/stack/O = W - if(O.get_amount()>0) - O.use(1) - construction_stage = 6 - update_icon() - user << "You replace the outer grille." - return if(4) var/cut_cover if(istype(W,/obj/item/weapon/weldingtool)) @@ -261,6 +257,15 @@ update_icon() user << "You press firmly on the cover, dislodging it." return + else if (istype(W, /obj/item/weapon/screwdriver)) + user << "You begin screwing down the support lines." + playsound(src, 'sound/items/Screwdriver.ogg', 100, 1) + if(!do_after(user,40) || !istype(src, /turf/simulated/wall) || construction_stage != 4) + return + construction_stage = 5 + update_icon() + user << "You screw down the support lines." + return if(3) if (istype(W, /obj/item/weapon/crowbar)) user << "You struggle to pry off the cover." @@ -299,8 +304,7 @@ return construction_stage = 0 update_icon() - new /obj/item/stack/rods(src) - user << "The support rods drop out as you cut them loose from the frame." + user << "The slice through the support rods." return if(0) if(istype(W, /obj/item/weapon/crowbar)) diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index 16235a72fc..db48305926 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -162,7 +162,8 @@ reinf_material.place_dismantled_girder(src, reinf_material) else material.place_dismantled_girder(src) - material.place_dismantled_product(src,devastated) + if(!devastated) + material.place_dismantled_product(src) for(var/obj/O in src.contents) //Eject contents! if(istype(O,/obj/structure/sign/poster)) diff --git a/code/modules/materials/materials.dm b/code/modules/materials/materials.dm index 70f69be834..920b751117 100644 --- a/code/modules/materials/materials.dm +++ b/code/modules/materials/materials.dm @@ -195,9 +195,8 @@ var/list/name_to_material // General wall debris product placement. // Not particularly necessary aside from snowflakey cult girders. -/material/proc/place_dismantled_product(var/turf/target,var/is_devastated) - for(var/x=1;x<(is_devastated?2:3);x++) - place_sheet(target) +/material/proc/place_dismantled_product(var/turf/target) + place_sheet(target) // Debris product. Used ALL THE TIME. /material/proc/place_sheet(var/turf/target) From f2fdbf2f6a4ccb2430640261529ee98a7f9204a9 Mon Sep 17 00:00:00 2001 From: Yoshax Date: Fri, 22 Apr 2016 17:55:16 +0100 Subject: [PATCH 03/38] Organ/surgical changes/fixes --- code/modules/organs/organ_external.dm | 9 +++++++-- code/modules/surgery/limb_reattach.dm | 1 - 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index d351ca9cdd..9ea6cb65bf 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -199,11 +199,11 @@ /obj/item/organ/external/replaced(var/mob/living/carbon/human/target) owner = target + forceMove(owner) if(istype(owner)) owner.organs_by_name[organ_tag] = src owner.organs |= src for(var/obj/item/organ/organ in src) - organ.loc = owner organ.replaced(owner,src) if(parent_organ) @@ -212,6 +212,12 @@ if(!parent.children) parent.children = list() parent.children.Add(src) + //Remove all stump wounds since limb is not missing anymore + for(var/datum/wound/lost_limb/W in parent.wounds) + parent.wounds -= W + qdel(W) + break + parent.update_damages() /**************************************************** DAMAGE PROCS @@ -750,7 +756,6 @@ Note that amputating the affected organ does in fact remove the infection from t removed(null, ignore_children) victim.traumatic_shock += 60 - wounds.Cut() if(parent_organ) var/datum/wound/lost_limb/W = new (src, disintegrate, clean) if(clean) diff --git a/code/modules/surgery/limb_reattach.dm b/code/modules/surgery/limb_reattach.dm index 352dd9232d..af872a29e6 100644 --- a/code/modules/surgery/limb_reattach.dm +++ b/code/modules/surgery/limb_reattach.dm @@ -32,7 +32,6 @@ "You have attached [target]'s [E.name] to the [E.amputation_point].") user.removeItem(E) E.replaced(target) - E.loc = target target.update_body() target.updatehealth() target.UpdateDamageIcon() From c9df1c698531b675569b875579169f473efca3fb Mon Sep 17 00:00:00 2001 From: Hubblenaut Date: Sun, 27 Sep 2015 14:43:00 +0200 Subject: [PATCH 04/38] Bruise packs are used per wound and take time to apply --- code/game/objects/items/stacks/medical.dm | 99 ++++++++++++++++------- code/modules/organs/organ_external.dm | 40 +++++++-- code/modules/organs/wound.dm | 17 +++- 3 files changed, 117 insertions(+), 39 deletions(-) diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index 451b2c41af..ac736d265b 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -65,24 +65,42 @@ var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting) if(affecting.open == 0) - if(!affecting.bandage()) + if(affecting.is_bandaged()) user << "The wounds on [M]'s [affecting.name] have already been bandaged." return 1 else + user.visible_message("\The [user] starts treating [M]'s [affecting.name].", \ + "You start treating [M]'s [affecting.name]." ) + var/used = 0 for (var/datum/wound/W in affecting.wounds) if (W.internal) continue + if(W.bandaged) + continue + if(used == amount) + break + if(!do_mob(user, M, W.damage/5)) + user << "You must stand still to bandage wounds." + break if (W.current_stage <= W.max_bleeding_stage) - user.visible_message("\The [user] bandages [W.desc] on [M]'s [affecting.name].", \ - "You bandage [W.desc] on [M]'s [affecting.name]." ) + user.visible_message("\The [user] bandages \a [W.desc] on [M]'s [affecting.name].", \ + "You bandage \a [W.desc] on [M]'s [affecting.name]." ) //H.add_side_effect("Itch") else if (istype(W,/datum/wound/bruise)) - user.visible_message("\The [user] places a bruise patch over [W.desc] on [M]'s [affecting.name].", \ - "You place a bruise patch over [W.desc] on [M]'s [affecting.name]." ) + user.visible_message("\The [user] places a bruise patch over \a [W.desc] on [M]'s [affecting.name].", \ + "You place a bruise patch over \a [W.desc] on [M]'s [affecting.name]." ) else - user.visible_message("\The [user] places a bandaid over [W.desc] on [M]'s [affecting.name].", \ - "You place a bandaid over [W.desc] on [M]'s [affecting.name]." ) - use(1) + user.visible_message("\The [user] places a bandaid over \a [W.desc] on [M]'s [affecting.name].", \ + "You place a bandaid over \a [W.desc] on [M]'s [affecting.name]." ) + W.bandage() + used++ + affecting.update_damages() + if(used == amount) + if(affecting.is_bandaged()) + user << "\The [src] is used up." + else + user << "\The [src] is used up, but there are more wounds to treat on \the [affecting.name]." + use(used) else if (can_operate(H)) //Checks if mob is lying down on table for surgery if (do_surgery(H,user,src)) @@ -108,13 +126,19 @@ var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting) if(affecting.open == 0) - if(!affecting.salve()) + if(affecting.is_salved()) user << "The wounds on [M]'s [affecting.name] have already been salved." return 1 else - user.visible_message("[user] salves wounds on [M]'s [affecting.name].", \ - "You salve wounds on [M]'s [affecting.name]." ) + user.visible_message("\The [user] starts salving wounds on [M]'s [affecting.name].", \ + "You start salving the wounds on [M]'s [affecting.name]." ) + if(!do_mob(user, M, 10)) + user << "You must stand still to salve wounds." + return 1 + user.visible_message("[user] salved wounds on [M]'s [affecting.name].", \ + "You salved wounds on [M]'s [affecting.name]." ) use(1) + affecting.salve() else if (can_operate(H)) //Checks if mob is lying down on table for surgery if (do_surgery(H,user,src)) @@ -127,7 +151,7 @@ singular_name = "advanced trauma kit" desc = "An advanced trauma kit for severe injuries." icon_state = "traumakit" - heal_brute = 12 + heal_brute = 0 origin_tech = list(TECH_BIO = 1) /obj/item/stack/medical/advanced/bruise_pack/attack(mob/living/carbon/M as mob, mob/user as mob) @@ -139,29 +163,44 @@ var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting) if(affecting.open == 0) - var/bandaged = affecting.bandage() - var/disinfected = affecting.disinfect() - - if(!(bandaged || disinfected)) + if(affecting.is_bandaged() && affecting.is_disinfected()) user << "The wounds on [M]'s [affecting.name] have already been treated." return 1 else + user.visible_message("\The [user] starts treating [M]'s [affecting.name].", \ + "You start treating [M]'s [affecting.name]." ) + var/used = 0 for (var/datum/wound/W in affecting.wounds) if (W.internal) continue + if (W.bandaged && W.disinfected) + continue + if(used == amount) + break + if(!do_mob(user, M, W.damage/5)) + user << "You must stand still to bandage wounds." + break if (W.current_stage <= W.max_bleeding_stage) - user.visible_message("\The [user] cleans [W.desc] on [M]'s [affecting.name] and seals the edges with bioglue.", \ - "You clean and seal [W.desc] on [M]'s [affecting.name]." ) + user.visible_message("\The [user] cleans \a [W.desc] on [M]'s [affecting.name] and seals the edges with bioglue.", \ + "You clean and seal \a [W.desc] on [M]'s [affecting.name]." ) //H.add_side_effect("Itch") else if (istype(W,/datum/wound/bruise)) - user.visible_message("\The [user] places a medical patch over [W.desc] on [M]'s [affecting.name].", \ - "You place a medical patch over [W.desc] on [M]'s [affecting.name]." ) + user.visible_message("\The [user] places a medical patch over \a [W.desc] on [M]'s [affecting.name].", \ + "You place a medical patch over \a [W.desc] on [M]'s [affecting.name]." ) else - user.visible_message("\The [user] smears some bioglue over [W.desc] on [M]'s [affecting.name].", \ - "You smear some bioglue over [W.desc] on [M]'s [affecting.name]." ) - if (bandaged) - affecting.heal_damage(heal_brute,0) - use(1) + user.visible_message("\The [user] smears some bioglue over \a [W.desc] on [M]'s [affecting.name].", \ + "You smear some bioglue over \a [W.desc] on [M]'s [affecting.name]." ) + W.bandage() + W.disinfect() + W.heal_damage(heal_brute) + used++ + affecting.update_damages() + if(used == amount) + if(affecting.is_bandaged()) + user << "\The [src] is used up." + else + user << "\The [src] is used up, but there are more wounds to treat on \the [affecting.name]." + use(used) else if (can_operate(H)) //Checks if mob is lying down on table for surgery if (do_surgery(H,user,src)) @@ -174,7 +213,7 @@ singular_name = "advanced burn kit" desc = "An advanced treatment kit for severe burns." icon_state = "burnkit" - heal_burn = 12 + heal_burn = 0 origin_tech = list(TECH_BIO = 1) @@ -187,14 +226,20 @@ var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting) if(affecting.open == 0) - if(!affecting.salve()) + if(affecting.is_salved()) user << "The wounds on [M]'s [affecting.name] have already been salved." return 1 else + user.visible_message("\The [user] starts salving wounds on [M]'s [affecting.name].", \ + "You start salving the wounds on [M]'s [affecting.name]." ) + if(!do_mob(user, M, 10)) + user << "You must stand still to salve wounds." + return 1 user.visible_message( "[user] covers wounds on [M]'s [affecting.name] with regenerative membrane.", \ "You cover wounds on [M]'s [affecting.name] with regenerative membrane." ) affecting.heal_damage(0,heal_burn) use(1) + affecting.salve() else if (can_operate(H)) //Checks if mob is lying down on table for surgery if (do_surgery(H,user,src)) diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index 9ea6cb65bf..439a1b5d41 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -845,15 +845,46 @@ Note that amputating the affected organ does in fact remove the infection from t "\The [holder.legcuffed.name] falls off you.") holder.removeItem(holder.legcuffed, force = 1) +// checks if all wounds on the organ are bandaged +/obj/item/organ/external/proc/is_bandaged() + for(var/datum/wound/W in wounds) + if(W.internal) continue + if(!W.bandaged) + return 0 + return 1 + +// checks if all wounds on the organ are salved +/obj/item/organ/external/proc/is_salved() + for(var/datum/wound/W in wounds) + if(W.internal) continue + if(!W.salved) + return 0 + return 1 + +// checks if all wounds on the organ are disinfected +/obj/item/organ/external/proc/is_disinfected() + for(var/datum/wound/W in wounds) + if(W.internal) continue + if(!W.disinfected) + return 0 + return 1 + /obj/item/organ/external/proc/bandage() var/rval = 0 - src.status &= ~ORGAN_BLEEDING + status &= ~ORGAN_BLEEDING for(var/datum/wound/W in wounds) if(W.internal) continue rval |= !W.bandaged W.bandaged = 1 return rval +/obj/item/organ/external/proc/salve() + var/rval = 0 + for(var/datum/wound/W in wounds) + rval |= !W.salved + W.salved = 1 + return rval + /obj/item/organ/external/proc/disinfect() var/rval = 0 for(var/datum/wound/W in wounds) @@ -872,13 +903,6 @@ Note that amputating the affected organ does in fact remove the infection from t W.clamped = 1 return rval -/obj/item/organ/external/proc/salve() - var/rval = 0 - for(var/datum/wound/W in wounds) - rval |= !W.salved - W.salved = 1 - return rval - /obj/item/organ/external/proc/fracture() if(status & ORGAN_ROBOT) return //ORGAN_BROKEN doesn't have the same meaning for robot limbs diff --git a/code/modules/organs/wound.dm b/code/modules/organs/wound.dm index 850f5114c0..7d89a07d67 100644 --- a/code/modules/organs/wound.dm +++ b/code/modules/organs/wound.dm @@ -140,6 +140,15 @@ return 0 + proc/bandage() + bandaged = 1 + + proc/salve() + salved = 1 + + proc/disinfect() + disinfected = 1 + // heal the given amount of damage, and if the given amount of damage was more // than what needed to be healed, return how much heal was left // set @heals_internal to also heal internal organ damage @@ -318,15 +327,15 @@ datum/wound/cut/massive /datum/wound/lost_limb/New(var/obj/item/organ/external/lost_limb, var/losstype, var/clean) var/damage_amt = lost_limb.max_damage if(clean) damage_amt /= 2 - + switch(losstype) if(DROPLIMB_EDGE, DROPLIMB_BLUNT) damage_type = CUT max_bleeding_stage = 3 //clotted stump and above can bleed. stages = list( "ripped stump" = damage_amt*1.3, - "bloody stump" = damage_amt, - "clotted stump" = damage_amt*0.5, + "bloody stump" = damage_amt, + "clotted stump" = damage_amt*0.5, "scarred stump" = 0 ) if(DROPLIMB_BURN) @@ -337,7 +346,7 @@ datum/wound/cut/massive "scarred stump" = damage_amt*0.5, "scarred stump" = 0 ) - + ..(damage_amt) /datum/wound/lost_limb/can_merge(var/datum/wound/other) From 2c27ad3494148d73ffa8c20f99e2c066d133c8c6 Mon Sep 17 00:00:00 2001 From: Yoshax Date: Fri, 22 Apr 2016 18:58:54 +0100 Subject: [PATCH 05/38] Doubles medical stack amount to balance stack amount --- code/game/objects/items/stacks/medical.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index ac736d265b..c23bc28135 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -2,8 +2,8 @@ name = "medical pack" singular_name = "medical pack" icon = 'icons/obj/items.dmi' - amount = 5 - max_amount = 5 + amount = 10 + max_amount = 10 w_class = 2 throw_speed = 4 throw_range = 20 From e12e9300fabe2c3f714a88139d05cd33ca37f85e Mon Sep 17 00:00:00 2001 From: Chinsky Date: Thu, 11 Feb 2016 01:56:12 +0300 Subject: [PATCH 06/38] Adds new type of wounds - piercing. Unlike cuts they do not merge, so many small-damage stabs will create many small stab wounds instead of one megahole. Also cleans up checks in wound code a bit with power of OOP --- code/__defines/damage_organs.dm | 1 + code/game/objects/items/stacks/medical.dm | 6 +-- code/modules/organs/organ_external.dm | 22 ++++++--- code/modules/organs/wound.dm | 60 ++++++++++++++++++++++- 4 files changed, 76 insertions(+), 13 deletions(-) diff --git a/code/__defines/damage_organs.dm b/code/__defines/damage_organs.dm index 09931cb622..152e22a11a 100644 --- a/code/__defines/damage_organs.dm +++ b/code/__defines/damage_organs.dm @@ -9,6 +9,7 @@ #define CUT "cut" #define BRUISE "bruise" +#define PIERCE "pierce" #define STUN "stun" #define WEAKEN "weaken" diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index c23bc28135..c55fd587c0 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -82,11 +82,12 @@ if(!do_mob(user, M, W.damage/5)) user << "You must stand still to bandage wounds." break + if (W.current_stage <= W.max_bleeding_stage) user.visible_message("\The [user] bandages \a [W.desc] on [M]'s [affecting.name].", \ "You bandage \a [W.desc] on [M]'s [affecting.name]." ) //H.add_side_effect("Itch") - else if (istype(W,/datum/wound/bruise)) + else if (W.damage_type == BRUISE) user.visible_message("\The [user] places a bruise patch over \a [W.desc] on [M]'s [affecting.name].", \ "You place a bruise patch over \a [W.desc] on [M]'s [affecting.name]." ) else @@ -183,8 +184,7 @@ if (W.current_stage <= W.max_bleeding_stage) user.visible_message("\The [user] cleans \a [W.desc] on [M]'s [affecting.name] and seals the edges with bioglue.", \ "You clean and seal \a [W.desc] on [M]'s [affecting.name]." ) - //H.add_side_effect("Itch") - else if (istype(W,/datum/wound/bruise)) + else if (W.damage_type == BRUISE) user.visible_message("\The [user] places a medical patch over \a [W.desc] on [M]'s [affecting.name].", \ "You place a medical patch over \a [W.desc] on [M]'s [affecting.name]." ) else diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index 439a1b5d41..d3c4bf511b 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -255,7 +255,10 @@ if(is_damageable(brute + burn) || !config.limbs_can_break) if(brute) if(can_cut) - createwound( CUT, brute ) + if(sharp && !edge) + createwound( PIERCE, brute ) + else + createwound( CUT, brute ) else createwound( BRUISE, brute ) if(burn) @@ -269,7 +272,10 @@ if (brute > 0) //Inflict all burte damage we can if(can_cut) - createwound( CUT, min(brute,can_inflict) ) + if(sharp && !edge) + createwound( PIERCE, min(brute,can_inflict) ) + else + createwound( CUT, min(brute,can_inflict) ) else createwound( BRUISE, min(brute,can_inflict) ) var/temp = can_inflict @@ -332,10 +338,10 @@ break // heal brute damage - if(W.damage_type == CUT || W.damage_type == BRUISE) - brute = W.heal_damage(brute) - else if(W.damage_type == BURN) + if(W.damage_type == BURN) burn = W.heal_damage(burn) + else + brute = W.heal_damage(brute) if(internal) status &= ~ORGAN_BROKEN @@ -659,10 +665,10 @@ Note that amputating the affected organ does in fact remove the infection from t //update damage counts for(var/datum/wound/W in wounds) if(!W.internal) //so IB doesn't count towards crit/paincrit - if(W.damage_type == CUT || W.damage_type == BRUISE) - brute_dam += W.damage - else if(W.damage_type == BURN) + if(W.damage_type == BURN) burn_dam += W.damage + else + brute_dam += W.damage if(!(status & ORGAN_ROBOT) && W.bleeding() && (H && H.should_have_organ(O_HEART))) W.bleed_timer-- diff --git a/code/modules/organs/wound.dm b/code/modules/organs/wound.dm index 7d89a07d67..701067170f 100644 --- a/code/modules/organs/wound.dm +++ b/code/modules/organs/wound.dm @@ -38,7 +38,7 @@ var/internal = 0 // maximum stage at which bleeding should still happen. Beyond this stage bleeding is prevented. var/max_bleeding_stage = 0 - // one of CUT, BRUISE, BURN + // one of CUT, PIERCE, BRUISE, BURN var/damage_type = CUT // whether this wound needs a bandage/salve to heal at all // the maximum amount of damage that this wound can have and still autoheal @@ -211,7 +211,7 @@ if (wound_damage() <= 30 && bleed_timer <= 0) return 0 //Bleed timer has run out. Wounds with more than 30 damage don't stop bleeding on their own. - return (damage_type == BRUISE && wound_damage() >= 20 || damage_type == CUT && wound_damage() >= 5) + return 1 /** WOUND DEFINITIONS **/ @@ -235,6 +235,18 @@ return /datum/wound/cut/deep if(0 to 15) return /datum/wound/cut/small + if(PIERCE) + switch(damage) + if(60 to INFINITY) + return /datum/wound/puncture/massive + if(50 to 60) + return /datum/wound/puncture/gaping_big + if(30 to 50) + return /datum/wound/puncture/gaping + if(15 to 30) + return /datum/wound/puncture/flesh + if(0 to 15) + return /datum/wound/puncture/small if(BRUISE) return /datum/wound/bruise if(BURN) @@ -252,6 +264,9 @@ return null //no wound /** CUTS **/ +/datum/wound/cut/bleeding() + return ..() && wound_damage() >= 5 + /datum/wound/cut/small // link wound descriptions to amounts of damage // Minor cuts have max_bleeding_stage set to the stage that bears the wound type's name. @@ -285,7 +300,43 @@ datum/wound/cut/massive stages = list("massive wound" = 70, "massive healing wound" = 50, "massive blood soaked clot" = 25, "massive angry scar" = 10, "massive jagged scar" = 0) damage_type = CUT +/** PUNCTURES **/ +/datum/wound/puncture/can_worsen(damage_type, damage) + return 0 +/datum/wound/puncture/can_merge(var/datum/wound/other) + return 0 +/datum/wound/puncture/bleeding() + return ..() && wound_damage() >= 5 + +/datum/wound/puncture/small + max_bleeding_stage = 2 + stages = list("puncture" = 5, "healing puncture" = 2, "small scab" = 0) + damage_type = PIERCE + +/datum/wound/puncture/flesh + max_bleeding_stage = 2 + stages = list("puncture wound" = 15, "blood soaked clot" = 5, "large scab" = 2, "small round scar" = 0) + damage_type = PIERCE + +/datum/wound/puncture/gaping + max_bleeding_stage = 3 + stages = list("gaping hole" = 30, "large blood soaked clot" = 15, "blood soaked clot" = 10, "small angry scar" = 5, "small round scar" = 0) + damage_type = PIERCE + +/datum/wound/puncture/gaping_big + max_bleeding_stage = 3 + stages = list("big gaping hole" = 50, "healing gaping hole" = 20, "large blood soaked clot" = 15, "large angry scar" = 10, "large round scar" = 0) + damage_type = PIERCE + +datum/wound/puncture/massive + max_bleeding_stage = 3 + stages = list("massive wound" = 60, "massive healing wound" = 30, "massive blood soaked clot" = 25, "massive angry scar" = 10, "massive jagged scar" = 0) + damage_type = PIERCE + /** BRUISES **/ +/datum/wound/bruise/bleeding() + return ..() && wound_damage() >= 20 + /datum/wound/bruise stages = list("monumental bruise" = 80, "huge bruise" = 50, "large bruise" = 30, "moderate bruise" = 20, "small bruise" = 10, "tiny bruise" = 5) @@ -294,6 +345,11 @@ datum/wound/cut/massive damage_type = BRUISE /** BURNS **/ +/datum/wound/burn + max_bleeding_stage = 0 +/datum/wound/burn/bleeding() + return 0 + /datum/wound/burn/moderate stages = list("ripped burn" = 10, "moderate burn" = 5, "healing moderate burn" = 2, "fresh skin" = 0) damage_type = BURN From 5aeb6fd5a25d75eda3d07232a9161025245b90a9 Mon Sep 17 00:00:00 2001 From: Yoshax Date: Fri, 22 Apr 2016 20:31:33 +0100 Subject: [PATCH 07/38] Can use items on roller/optable people on help intent --- code/modules/surgery/surgery.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm index cc56b311b5..e582d1222f 100644 --- a/code/modules/surgery/surgery.dm +++ b/code/modules/surgery/surgery.dm @@ -110,7 +110,6 @@ proc/do_surgery(mob/living/carbon/M, mob/living/user, obj/item/tool) if (user.a_intent == I_HELP) user << "You can't see any useful way to use [tool] on [M]." - return 1 return 0 proc/sort_surgeries() From 6edb8b31f35a54ce11561151ded4cd302fa38ca8 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Thu, 5 May 2016 04:30:41 +0930 Subject: [PATCH 08/38] Made slimes more interesting. --- code/__defines/chemistry.dm | 1 + code/__defines/species_languages.dm | 7 +- code/_helpers/global_lists.dm | 14 +- code/_onclick/other_mobs.dm | 2 +- code/datums/datacore.dm | 5 +- .../preference_setup/general/03_body.dm | 8 +- code/modules/clothing/clothing.dm | 14 +- code/modules/clothing/spacesuits/rig/rig.dm | 4 +- code/modules/mob/holder.dm | 2 +- .../mob/living/carbon/human/appearance.dm | 12 +- .../mob/living/carbon/human/examine.dm | 7 +- code/modules/mob/living/carbon/human/human.dm | 8 + .../mob/living/carbon/human/human_defense.dm | 2 +- code/modules/mob/living/carbon/human/life.dm | 12 +- .../carbon/human/species/outsider/shadow.dm | 2 +- .../living/carbon/human/species/species.dm | 69 +------ .../carbon/human/species/species_attack.dm | 6 +- .../carbon/human/species/species_getters.dm | 97 +++++++++ .../carbon/human/species/species_helpers.dm | 6 + .../human/species/species_shapeshift.dm | 187 +++++++++++++++++ .../carbon/human/species/station/golem.dm | 2 +- .../carbon/human/species/station/monkey.dm | 2 +- .../human/species/station/prometheans.dm | 188 ++++++++++++++++++ .../carbon/human/species/station/seromi.dm | 2 +- .../carbon/human/species/station/slime.dm | 52 ----- .../carbon/human/species/station/station.dm | 12 +- .../mob/living/carbon/human/update_icons.dm | 127 ++++++------ .../modules/mob/living/carbon/metroid/life.dm | 2 +- code/modules/mob/new_player/new_player.dm | 6 +- code/modules/organs/organ_external.dm | 14 +- code/modules/organs/organ_icon.dm | 51 +++-- code/modules/organs/subtypes/unbreakable.dm | 46 ++++- code/modules/power/power.dm | 2 +- .../Chemistry-Reagents-Toxins.dm | 6 +- polaris.dme | 6 +- 35 files changed, 721 insertions(+), 262 deletions(-) create mode 100644 code/modules/mob/living/carbon/human/species/species_getters.dm create mode 100644 code/modules/mob/living/carbon/human/species/species_helpers.dm create mode 100644 code/modules/mob/living/carbon/human/species/species_shapeshift.dm create mode 100644 code/modules/mob/living/carbon/human/species/station/prometheans.dm delete mode 100644 code/modules/mob/living/carbon/human/species/station/slime.dm diff --git a/code/__defines/chemistry.dm b/code/__defines/chemistry.dm index 4fbdebf6f1..31f0233b23 100644 --- a/code/__defines/chemistry.dm +++ b/code/__defines/chemistry.dm @@ -24,6 +24,7 @@ #define IS_TAJARA 5 #define IS_XENOS 6 #define IS_TESHARI 7 +#define IS_SLIME 8 #define CE_STABLE "stable" // Inaprovaline #define CE_ANTIBIOTIC "antibiotic" // Spaceacilin diff --git a/code/__defines/species_languages.dm b/code/__defines/species_languages.dm index 2dec4406a4..f1717c3ff8 100644 --- a/code/__defines/species_languages.dm +++ b/code/__defines/species_languages.dm @@ -8,9 +8,9 @@ // unused: 0x8000 - higher than this will overflow // Species spawn flags -#define IS_WHITELISTED 0x1 // Must be whitelisted to play. -#define CAN_JOIN 0x2 // Species is selectable in chargen. -#define IS_RESTRICTED 0x4 // Is not a core/normally playable species. (castes, mutantraces) +#define SPECIES_IS_WHITELISTED 0x1 // Must be whitelisted to play. +#define SPECIES_IS_RESTRICTED 0x2 // Is not a core/normally playable species. (castes, mutantraces) +#define SPECIES_CAN_JOIN 0x4 // Species is selectable in chargen. // Species appearance flags #define HAS_SKIN_TONE 0x1 // Skin tone selectable in chargen. (0-255) @@ -19,6 +19,7 @@ #define HAS_UNDERWEAR 0x8 // Underwear is drawn onto the mob icon. #define HAS_EYE_COLOR 0x10 // Eye colour selectable in chargen. (RGB) #define HAS_HAIR_COLOR 0x20 // Hair colour selectable in chargen. (RGB) +#define RADIATION_GLOWS 0x40 // Radiation causes this character to glow. // Languages. #define LANGUAGE_SOL_COMMON "Sol Common" diff --git a/code/_helpers/global_lists.dm b/code/_helpers/global_lists.dm index 9c0d80e5eb..f00e97d484 100644 --- a/code/_helpers/global_lists.dm +++ b/code/_helpers/global_lists.dm @@ -194,16 +194,22 @@ var/global/list/string_slot_flags = list( language_keys[lowertext(L.key)] = L var/rkey = 0 - paths = typesof(/datum/species)-/datum/species + paths = typesof(/datum/species) for(var/T in paths) + rkey++ - var/datum/species/S = new T + + var/datum/species/S = T + if(!initial(S.name)) + continue + + S = new T S.race_key = rkey //Used in mob icon caching. all_species[S.name] = S - if(!(S.spawn_flags & IS_RESTRICTED)) + if(!(S.spawn_flags & SPECIES_IS_RESTRICTED)) playable_species += S.name - if(S.spawn_flags & IS_WHITELISTED) + if(S.spawn_flags & SPECIES_IS_WHITELISTED) whitelisted_species += S.name //Posters diff --git a/code/_onclick/other_mobs.dm b/code/_onclick/other_mobs.dm index c0a0cac8b3..ac07b8d075 100644 --- a/code/_onclick/other_mobs.dm +++ b/code/_onclick/other_mobs.dm @@ -92,7 +92,7 @@ if (powerlevel > 0 && !istype(A, /mob/living/carbon/slime)) if(ishuman(M)) var/mob/living/carbon/human/H = M - stunprob *= H.species.siemens_coefficient + stunprob *= max(H.species.siemens_coefficient,0) switch(power * 10) diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index 4f211b930e..99788428fb 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -258,8 +258,9 @@ preview_icon.Blend(E.get_icon(), ICON_OVERLAY) //Tail - if(H.species.tail) - temp = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[H.species.tail]_s") + var/use_species_tail = H.species.get_tail(H) + if(use_species_tail) + temp = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[use_species_tail]_s") preview_icon.Blend(temp, ICON_OVERLAY) // Skin tone diff --git a/code/modules/client/preference_setup/general/03_body.dm b/code/modules/client/preference_setup/general/03_body.dm index 17899026a0..ef9b419d97 100644 --- a/code/modules/client/preference_setup/general/03_body.dm +++ b/code/modules/client/preference_setup/general/03_body.dm @@ -540,9 +540,9 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O dat += "

" dat += "Language: [current_species.language]
" dat += "" - if(current_species.spawn_flags & CAN_JOIN) + if(current_species.spawn_flags & SPECIES_CAN_JOIN) dat += "
Often present on human stations." - if(current_species.spawn_flags & IS_WHITELISTED) + if(current_species.spawn_flags & SPECIES_IS_WHITELISTED) dat += "
Whitelist restricted." if(!current_species.has_organ[O_HEART]) dat += "
Does not have a circulatory system." @@ -570,9 +570,9 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O var/restricted = 0 if(config.usealienwhitelist) //If we're using the whitelist, make sure to check it! - if(!(current_species.spawn_flags & CAN_JOIN)) + if(!(current_species.spawn_flags & SPECIES_CAN_JOIN)) restricted = 2 - else if((current_species.spawn_flags & IS_WHITELISTED) && !is_alien_whitelisted(preference_mob(),current_species)) + else if((current_species.spawn_flags & SPECIES_IS_WHITELISTED) && !is_alien_whitelisted(preference_mob(),current_species)) restricted = 1 if(restricted) diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 88ef03dda2..8c6fd55c69 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -337,11 +337,11 @@ overlays |= light_overlay_cache["[light_overlay]_icon"] // Generate and cache the on-mob icon, which is used in update_inv_head(). - var/cache_key = "[light_overlay][H ? "_[H.species.get_bodytype()]" : ""]" + var/cache_key = "[light_overlay][H ? "_[H.species.get_bodytype(H)]" : ""]" if(!light_overlay_cache[cache_key]) var/use_icon = 'icons/mob/light_overlays.dmi' - if(H && sprite_sheets[H.species.get_bodytype()]) - use_icon = sprite_sheets[H.species.get_bodytype()] + if(H && sprite_sheets[H.species.get_bodytype(H)]) + use_icon = sprite_sheets[H.species.get_bodytype(H)] light_overlay_cache[cache_key] = image("icon" = use_icon, "icon_state" = "[light_overlay]") if(H) @@ -535,8 +535,8 @@ var/icon/under_icon if(icon_override) under_icon = icon_override - else if(H && sprite_sheets && sprite_sheets[H.species.get_bodytype()]) - under_icon = sprite_sheets[H.species.get_bodytype()] + else if(H && sprite_sheets && sprite_sheets[H.species.get_bodytype(H)]) + under_icon = sprite_sheets[H.species.get_bodytype(H)] else if(item_icons && item_icons[slot_w_uniform_str]) under_icon = item_icons[slot_w_uniform_str] else @@ -558,8 +558,8 @@ var/icon/under_icon if(icon_override) under_icon = icon_override - else if(H && sprite_sheets && sprite_sheets[H.species.get_bodytype()]) - under_icon = sprite_sheets[H.species.get_bodytype()] + else if(H && sprite_sheets && sprite_sheets[H.species.get_bodytype(H)]) + under_icon = sprite_sheets[H.species.get_bodytype(H)] else if(item_icons && item_icons[slot_w_uniform_str]) under_icon = item_icons[slot_w_uniform_str] else diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm index ba50f29cf5..26d7de9082 100644 --- a/code/modules/clothing/spacesuits/rig/rig.dm +++ b/code/modules/clothing/spacesuits/rig/rig.dm @@ -472,8 +472,8 @@ var/species_icon = 'icons/mob/rig_back.dmi' // Since setting mob_icon will override the species checks in // update_inv_wear_suit(), handle species checks here. - if(wearer && sprite_sheets && sprite_sheets[wearer.species.get_bodytype()]) - species_icon = sprite_sheets[wearer.species.get_bodytype()] + if(wearer && sprite_sheets && sprite_sheets[wearer.species.get_bodytype(wearer)]) + species_icon = sprite_sheets[wearer.species.get_bodytype(wearer)] mob_icon = image("icon" = species_icon, "icon_state" = "[icon_state]") if(installed_modules.len) diff --git a/code/modules/mob/holder.dm b/code/modules/mob/holder.dm index ac63e4e582..dc8dbccb01 100644 --- a/code/modules/mob/holder.dm +++ b/code/modules/mob/holder.dm @@ -138,7 +138,7 @@ var/list/holder_mob_icon_cache = list() var/skin_colour = rgb(owner.r_skin, owner.g_skin, owner.b_skin) var/hair_colour = rgb(owner.r_hair, owner.g_hair, owner.b_hair) var/eye_colour = rgb(owner.r_eyes, owner.g_eyes, owner.b_eyes) - var/species_name = lowertext(owner.species.get_bodytype()) + var/species_name = lowertext(owner.species.get_bodytype(owner)) for(var/cache_entry in generate_for_slots) var/cache_key = "[owner.species]-[cache_entry]-[skin_colour]-[hair_colour]" diff --git a/code/modules/mob/living/carbon/human/appearance.dm b/code/modules/mob/living/carbon/human/appearance.dm index 823ac808ec..c3813000bb 100644 --- a/code/modules/mob/living/carbon/human/appearance.dm +++ b/code/modules/mob/living/carbon/human/appearance.dm @@ -143,13 +143,13 @@ var/datum/species/current_species = all_species[current_species_name] if(check_whitelist && config.usealienwhitelist && !check_rights(R_ADMIN, 0, src)) //If we're using the whitelist, make sure to check it! - if(!(current_species.spawn_flags & CAN_JOIN)) + if(!(current_species.spawn_flags & SPECIES_CAN_JOIN)) continue if(whitelist.len && !(current_species_name in whitelist)) continue if(blacklist.len && (current_species_name in blacklist)) continue - if((current_species.spawn_flags & IS_WHITELISTED) && !is_alien_whitelisted(src, current_species_name)) + if((current_species.spawn_flags & SPECIES_IS_WHITELISTED) && !is_alien_whitelisted(src, current_species_name)) continue valid_species += current_species_name @@ -158,9 +158,9 @@ /mob/living/carbon/human/proc/generate_valid_hairstyles(var/check_gender = 1) - var/use_species = species.get_bodytype() + var/use_species = species.get_bodytype(src) var/obj/item/organ/external/head/H = get_organ(BP_HEAD) - if(H) use_species = H.species.get_bodytype() + if(H) use_species = H.species.get_bodytype(src) var/list/valid_hairstyles = new() for(var/hairstyle in hair_styles_list) @@ -180,9 +180,9 @@ /mob/living/carbon/human/proc/generate_valid_facial_hairstyles() - var/use_species = species.get_bodytype() + var/use_species = species.get_bodytype(src) var/obj/item/organ/external/head/H = get_organ(BP_HEAD) - if(H) use_species = H.species.get_bodytype() + if(H) use_species = H.species.get_bodytype(src) var/list/valid_facial_hairstyles = new() for(var/facialhairstyle in facial_hair_styles_list) diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index ba9f03579d..a68ba56dd4 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -51,7 +51,12 @@ msg += ", [use_gender]!" else if(species.name != "Human") - msg += ", \a [species.name]!" + msg += ", \a [species.get_examine_name()]!" + + var/extra_species_text = species.get_additional_examine_text(src) + if(extra_species_text) + msg += "[extra_species_text]
" + msg += "
" //uniform diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 0c11ada074..56482186b4 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -326,11 +326,19 @@ //Removed the horrible safety parameter. It was only being used by ninja code anyways. //Now checks siemens_coefficient of the affected area by default /mob/living/carbon/human/electrocute_act(var/shock_damage, var/obj/source, var/base_siemens_coeff = 1.0, var/def_zone = null) + if(status_flags & GODMODE) return 0 //godmode if (!def_zone) def_zone = pick("l_hand", "r_hand") + if(species.siemens_coefficient == -1) + if(stored_shock_by_ref["\ref[src]"]) + stored_shock_by_ref["\ref[src]"] += shock_damage + else + stored_shock_by_ref["\ref[src]"] = shock_damage + return + var/obj/item/organ/external/affected_organ = get_organ(check_zone(def_zone)) var/siemens_coeff = base_siemens_coeff * get_siemens_coefficient_organ(affected_organ) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 1c09c04c70..cfb5058c0a 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -92,7 +92,7 @@ emp_act if (!def_zone) return 1.0 - var/siemens_coefficient = species.siemens_coefficient + var/siemens_coefficient = max(species.siemens_coefficient,0) var/list/clothing_items = list(head, wear_mask, wear_suit, w_uniform, gloves, shoes) // What all are we checking? for(var/obj/item/clothing/C in clothing_items) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index b0a45faff6..36e418418e 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -164,8 +164,8 @@ eye_blind = 0 blinded = 0 eye_blurry = 0 - - + + if (disabilities & EPILEPSY) if ((prob(1) && paralysis < 1)) src << "\red You have a seizure!" @@ -241,7 +241,13 @@ radiation = Clamp(radiation,0,100) - if (radiation) + if(!radiation) + if(species.appearance_flags & RADIATION_GLOWS) + set_light(0) + else + if(species.appearance_flags & RADIATION_GLOWS) + set_light(max(1,min(10,radiation/10)), max(1,min(20,radiation/20)), species.get_flesh_colour(src)) + // END DOGSHIT SNOWFLAKE var/obj/item/organ/internal/diona/nutrients/rad_organ = locate() in internal_organs if(rad_organ && !rad_organ.is_broken()) diff --git a/code/modules/mob/living/carbon/human/species/outsider/shadow.dm b/code/modules/mob/living/carbon/human/species/outsider/shadow.dm index ba7d4d1d0a..58a967c809 100644 --- a/code/modules/mob/living/carbon/human/species/outsider/shadow.dm +++ b/code/modules/mob/living/carbon/human/species/outsider/shadow.dm @@ -19,7 +19,7 @@ death_message = "dissolves into ash..." flags = NO_SCAN | NO_SLIP | NO_POISON | NO_MINOR_CUT - spawn_flags = IS_RESTRICTED + spawn_flags = SPECIES_IS_RESTRICTED genders = list(NEUTER) diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index e9c63918c5..25a8149e48 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -21,10 +21,12 @@ var/prone_icon // If set, draws this from icobase when mob is prone. var/blood_color = "#A10808" // Red. var/flesh_color = "#FFC896" // Pink. - var/base_color // Used by changelings. Should also be used for icon previes.. + var/base_color // Used by changelings. Should also be used for icon previews. + var/tail // Name of tail state in species effects icon file. var/tail_animation // If set, the icon to obtain tail animation states from. var/tail_hair + var/race_key = 0 // Used for mob icon cache string. var/icon/icon_template // Used for mob icon generation for non-32x32 species. var/mob_size = MOB_MEDIUM @@ -175,71 +177,9 @@ inherent_verbs = list() inherent_verbs |= /mob/living/carbon/human/proc/regurgitate -/datum/species/proc/get_station_variant() - return name - -/datum/species/proc/get_bodytype() - return name - -/datum/species/proc/get_knockout_message(var/mob/living/carbon/human/H) - return ((H && H.isSynthetic()) ? "encounters a hardware fault and suddenly reboots!" : knockout_message) - -/datum/species/proc/get_death_message(var/mob/living/carbon/human/H) - if(config.show_human_death_message) - return ((H && H.isSynthetic()) ? "gives one shrill beep before falling lifeless." : death_message) - else - return "no message" - -/datum/species/proc/get_ssd(var/mob/living/carbon/human/H) - return ((H && H.isSynthetic()) ? "flashing a 'system offline' glyph on their monitor" : show_ssd) - -/datum/species/proc/get_blood_colour(var/mob/living/carbon/human/H) - return ((H && H.isSynthetic()) ? SYNTH_BLOOD_COLOUR : blood_color) - -/datum/species/proc/get_virus_immune(var/mob/living/carbon/human/H) - return ((H && H.isSynthetic()) ? 1 : virus_immune) - -/datum/species/proc/get_flesh_colour(var/mob/living/carbon/human/H) - return ((H && H.isSynthetic()) ? SYNTH_FLESH_COLOUR : flesh_color) - -/datum/species/proc/get_environment_discomfort(var/mob/living/carbon/human/H, var/msg_type) - - if(!prob(5)) - return - - var/covered = 0 // Basic coverage can help. - for(var/obj/item/clothing/clothes in H) - if(H.item_is_in_hands(clothes)) - continue - if((clothes.body_parts_covered & UPPER_TORSO) && (clothes.body_parts_covered & LOWER_TORSO)) - covered = 1 - break - - switch(msg_type) - if("cold") - if(!covered) - H << "[pick(cold_discomfort_strings)]" - if("heat") - if(covered) - H << "[pick(heat_discomfort_strings)]" - /datum/species/proc/sanitize_name(var/name) return sanitizeName(name) -/datum/species/proc/get_random_name(var/gender) - if(!name_language) - if(gender == FEMALE) - return capitalize(pick(first_names_female)) + " " + capitalize(pick(last_names)) - else - return capitalize(pick(first_names_male)) + " " + capitalize(pick(last_names)) - - var/datum/language/species_language = all_languages[name_language] - if(!species_language) - species_language = all_languages[default_language] - if(!species_language) - return "unknown" - return species_language.get_random_name(gender) - /datum/species/proc/equip_survival_gear(var/mob/living/carbon/human/H,var/extendedtank = 1) if(H.backbag == 1) if (extendedtank) H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(H), slot_r_hand) @@ -351,6 +291,3 @@ // Called in life() when the mob has no client. /datum/species/proc/handle_npc(var/mob/living/carbon/human/H) return - -/datum/species/proc/get_vision_flags(var/mob/living/carbon/human/H) - return vision_flags diff --git a/code/modules/mob/living/carbon/human/species/species_attack.dm b/code/modules/mob/living/carbon/human/species/species_attack.dm index cd4ca21e00..018dbafa84 100644 --- a/code/modules/mob/living/carbon/human/species/species_attack.dm +++ b/code/modules/mob/living/carbon/human/species/species_attack.dm @@ -67,9 +67,9 @@ attack_noun = list("body") damage = 2 -/datum/unarmed_attack/slime_glomp/apply_effects() - //Todo, maybe have a chance of causing an electrical shock? - return +/datum/unarmed_attack/slime_glomp/apply_effects(var/mob/living/carbon/human/user,var/mob/living/carbon/human/target,var/armour,var/attack_damage,var/zone) + ..() + user.apply_stored_shock_to(target) /datum/unarmed_attack/stomp/weak attack_verb = list("jumped on") diff --git a/code/modules/mob/living/carbon/human/species/species_getters.dm b/code/modules/mob/living/carbon/human/species/species_getters.dm new file mode 100644 index 0000000000..625d555943 --- /dev/null +++ b/code/modules/mob/living/carbon/human/species/species_getters.dm @@ -0,0 +1,97 @@ +/datum/species/proc/get_valid_shapeshifter_forms(var/mob/living/carbon/human/H) + return list() + +/datum/species/proc/get_additional_examine_text(var/mob/living/carbon/human/H) + return + +/datum/species/proc/get_tail(var/mob/living/carbon/human/H) + return tail + +/datum/species/proc/get_tail_animation(var/mob/living/carbon/human/H) + return tail_animation + +/datum/species/proc/get_tail_hair(var/mob/living/carbon/human/H) + return tail_hair + +/datum/species/proc/get_blood_mask(var/mob/living/carbon/human/H) + return blood_mask + +/datum/species/proc/get_damage_overlays(var/mob/living/carbon/human/H) + return damage_overlays + +/datum/species/proc/get_damage_mask(var/mob/living/carbon/human/H) + return damage_mask + +/datum/species/proc/get_examine_name(var/mob/living/carbon/human/H) + return name + +/datum/species/proc/get_icobase(var/mob/living/carbon/human/H, var/get_deform) + return (get_deform ? deform : icobase) + +/datum/species/proc/get_station_variant() + return name + +/datum/species/proc/get_race_key(var/mob/living/carbon/human/H) + return race_key + +/datum/species/proc/get_bodytype(var/mob/living/carbon/human/H) + return name + +/datum/species/proc/get_knockout_message(var/mob/living/carbon/human/H) + return ((H && H.isSynthetic()) ? "encounters a hardware fault and suddenly reboots!" : knockout_message) + +/datum/species/proc/get_death_message(var/mob/living/carbon/human/H) + if(config.show_human_death_message) + return ((H && H.isSynthetic()) ? "gives one shrill beep before falling lifeless." : death_message) + else + return "no message" + +/datum/species/proc/get_ssd(var/mob/living/carbon/human/H) + return ((H && H.isSynthetic()) ? "flashing a 'system offline' glyph on their monitor" : show_ssd) + +/datum/species/proc/get_blood_colour(var/mob/living/carbon/human/H) + return ((H && H.isSynthetic()) ? SYNTH_BLOOD_COLOUR : blood_color) + +/datum/species/proc/get_virus_immune(var/mob/living/carbon/human/H) + return ((H && H.isSynthetic()) ? 1 : virus_immune) + +/datum/species/proc/get_flesh_colour(var/mob/living/carbon/human/H) + return ((H && H.isSynthetic()) ? SYNTH_FLESH_COLOUR : flesh_color) + +/datum/species/proc/get_environment_discomfort(var/mob/living/carbon/human/H, var/msg_type) + + if(!prob(5)) + return + + var/covered = 0 // Basic coverage can help. + for(var/obj/item/clothing/clothes in H) + if(H.item_is_in_hands(clothes)) + continue + if((clothes.body_parts_covered & UPPER_TORSO) && (clothes.body_parts_covered & LOWER_TORSO)) + covered = 1 + break + + switch(msg_type) + if("cold") + if(!covered) + H << "[pick(cold_discomfort_strings)]" + if("heat") + if(covered) + H << "[pick(heat_discomfort_strings)]" + +/datum/species/proc/get_random_name(var/gender) + if(!name_language) + if(gender == FEMALE) + return capitalize(pick(first_names_female)) + " " + capitalize(pick(last_names)) + else + return capitalize(pick(first_names_male)) + " " + capitalize(pick(last_names)) + + var/datum/language/species_language = all_languages[name_language] + if(!species_language) + species_language = all_languages[default_language] + if(!species_language) + return "unknown" + return species_language.get_random_name(gender) + +/datum/species/proc/get_vision_flags(var/mob/living/carbon/human/H) + return vision_flags diff --git a/code/modules/mob/living/carbon/human/species/species_helpers.dm b/code/modules/mob/living/carbon/human/species/species_helpers.dm new file mode 100644 index 0000000000..3152312f1c --- /dev/null +++ b/code/modules/mob/living/carbon/human/species/species_helpers.dm @@ -0,0 +1,6 @@ +var/list/stored_shock_by_ref = list() + +/mob/living/proc/apply_stored_shock_to(var/mob/living/target) + if(stored_shock_by_ref["\ref[src]"]) + target.electrocute_act(stored_shock_by_ref["\ref[src]"]*0.9, src) + stored_shock_by_ref["\ref[src]"] = 0 diff --git a/code/modules/mob/living/carbon/human/species/species_shapeshift.dm b/code/modules/mob/living/carbon/human/species/species_shapeshift.dm new file mode 100644 index 0000000000..293df93215 --- /dev/null +++ b/code/modules/mob/living/carbon/human/species/species_shapeshift.dm @@ -0,0 +1,187 @@ +// This is something of an intermediary species used for species that +// need to emulate the appearance of another race. Currently it is only +// used for slimes but it may be useful for changelings later. +var/list/wrapped_species_by_ref = list() + +/datum/species/shapeshifter + + inherent_verbs = list( + /mob/living/carbon/human/proc/shapeshifter_select_shape, + /mob/living/carbon/human/proc/shapeshifter_select_hair, + /mob/living/carbon/human/proc/shapeshifter_select_gender + ) + + var/list/valid_transform_species = list() + var/monochromatic + var/default_form = "Human" + +/datum/species/shapeshifter/get_valid_shapeshifter_forms(var/mob/living/carbon/human/H) + return valid_transform_species + +/datum/species/shapeshifter/get_icobase(var/mob/living/carbon/human/H, var/get_deform) + if(!H) return ..(null, get_deform) + var/datum/species/S = all_species[wrapped_species_by_ref["\ref[H]"]] + return S.get_icobase(H, get_deform) + +/datum/species/shapeshifter/get_race_key(var/mob/living/carbon/human/H) + return "[..()]-[wrapped_species_by_ref["\ref[H]"]]" + +/datum/species/shapeshifter/get_bodytype(var/mob/living/carbon/human/H) + if(!H) return ..() + var/datum/species/S = all_species[wrapped_species_by_ref["\ref[H]"]] + return S.get_bodytype(H) + +/datum/species/shapeshifter/get_blood_mask(var/mob/living/carbon/human/H) + if(!H) return ..() + var/datum/species/S = all_species[wrapped_species_by_ref["\ref[H]"]] + return S.get_blood_mask(H) + +/datum/species/shapeshifter/get_damage_mask(var/mob/living/carbon/human/H) + if(!H) return ..() + var/datum/species/S = all_species[wrapped_species_by_ref["\ref[H]"]] + return S.get_damage_mask(H) + +/datum/species/shapeshifter/get_damage_overlays(var/mob/living/carbon/human/H) + if(!H) return ..() + var/datum/species/S = all_species[wrapped_species_by_ref["\ref[H]"]] + return S.get_damage_overlays(H) + +/datum/species/shapeshifter/get_tail(var/mob/living/carbon/human/H) + if(!H) return ..() + var/datum/species/S = all_species[wrapped_species_by_ref["\ref[H]"]] + return S.get_tail(H) + +/datum/species/shapeshifter/get_tail_animation(var/mob/living/carbon/human/H) + if(!H) return ..() + var/datum/species/S = all_species[wrapped_species_by_ref["\ref[H]"]] + return S.get_tail_animation(H) + +/datum/species/shapeshifter/get_tail_hair(var/mob/living/carbon/human/H) + if(!H) return ..() + var/datum/species/S = all_species[wrapped_species_by_ref["\ref[H]"]] + return S.get_tail_hair(H) + +/datum/species/shapeshifter/handle_post_spawn(var/mob/living/carbon/human/H) + ..() + wrapped_species_by_ref["\ref[H]"] = default_form + if(monochromatic) + H.r_hair = H.r_skin + H.g_hair = H.g_skin + H.b_hair = H.b_skin + H.r_facial = H.r_skin + H.g_facial = H.g_skin + H.b_facial = H.b_skin + + for(var/obj/item/organ/external/E in H.organs) + E.sync_colour_to_human(H) + +// Verbs follow. +/mob/living/carbon/human/proc/shapeshifter_select_hair() + + set name = "Select Hair" + set category = "Abilities" + + if(stat || world.time < last_special) + return + + last_special = world.time + 10 + + var/list/valid_hairstyles = list() + var/list/valid_facialhairstyles = list() + for(var/hairstyle in hair_styles_list) + var/datum/sprite_accessory/S = hair_styles_list[hairstyle] + if(gender == MALE && S.gender == FEMALE) + continue + if(gender == FEMALE && S.gender == MALE) + continue + if(!(species.get_bodytype(src) in S.species_allowed)) + continue + valid_hairstyles += hairstyle + for(var/facialhairstyle in facial_hair_styles_list) + var/datum/sprite_accessory/S = facial_hair_styles_list[facialhairstyle] + if(gender == MALE && S.gender == FEMALE) + continue + if(gender == FEMALE && S.gender == MALE) + continue + if(!(species.get_bodytype(src) in S.species_allowed)) + continue + valid_facialhairstyles += facialhairstyle + + + visible_message("\The [src]'s form contorts subtly.") + if(valid_hairstyles.len) + var/new_hair = input("Select a hairstyle.", "Shapeshifter Hair") as null|anything in valid_hairstyles + change_hair(new_hair ? new_hair : "Bald") + if(valid_facialhairstyles.len) + var/new_hair = input("Select a facial hair style.", "Shapeshifter Hair") as null|anything in valid_facialhairstyles + change_facial_hair(new_hair ? new_hair : "Shaved") + +/mob/living/carbon/human/proc/shapeshifter_select_gender() + + set name = "Select Gender" + set category = "Abilities" + + if(stat || world.time < last_special) + return + + last_special = world.time + 50 + + var/new_gender = input("Please select a gender.", "Shapeshifter Gender") as null|anything in list(FEMALE, MALE, NEUTER, PLURAL) + if(!new_gender) + return + + visible_message("\The [src]'s form contorts subtly.") + change_gender(new_gender) + +/mob/living/carbon/human/proc/shapeshifter_select_shape() + + set name = "Select Body Shape" + set category = "Abilities" + + if(stat || world.time < last_special) + return + + last_special = world.time + 50 + + var/new_species = input("Please select a species to emulate.", "Shapeshifter Body") as null|anything in species.get_valid_shapeshifter_forms(src) + if(!new_species || !all_species[new_species] || wrapped_species_by_ref["\ref[src]"] == new_species) + return + + wrapped_species_by_ref["\ref[src]"] = new_species + visible_message("\The [src] shifts and contorts, taking the form of \a [new_species]!") + regenerate_icons() + +/mob/living/carbon/human/proc/shapeshifter_select_colour() + + set name = "Select Body Colour" + set category = "Abilities" + + if(stat || world.time < last_special) + return + + last_special = world.time + 50 + + var/new_skin = input("Please select a new body color.", "Shapeshifter Colour") as color + if(!new_skin) + return + shapeshifter_set_colour(new_skin) + +/mob/living/carbon/human/proc/shapeshifter_set_colour(var/new_skin) + + r_skin = hex2num(copytext(new_skin, 2, 4)) + g_skin = hex2num(copytext(new_skin, 4, 6)) + b_skin = hex2num(copytext(new_skin, 6, 8)) + + var/datum/species/shapeshifter/S = species + if(S.monochromatic) + r_hair = r_skin + g_hair = g_skin + b_hair = b_skin + r_facial = r_skin + g_facial = g_skin + b_facial = b_skin + + for(var/obj/item/organ/external/E in organs) + E.sync_colour_to_human(src) + + regenerate_icons() diff --git a/code/modules/mob/living/carbon/human/species/station/golem.dm b/code/modules/mob/living/carbon/human/species/station/golem.dm index 83d5f6f8f0..bccafdde14 100644 --- a/code/modules/mob/living/carbon/human/species/station/golem.dm +++ b/code/modules/mob/living/carbon/human/species/station/golem.dm @@ -8,7 +8,7 @@ language = "Sol Common" //todo? unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/punch) flags = NO_PAIN | NO_SCAN | NO_POISON | NO_MINOR_CUT - spawn_flags = IS_RESTRICTED + spawn_flags = SPECIES_IS_RESTRICTED siemens_coefficient = 0 breath_type = null diff --git a/code/modules/mob/living/carbon/human/species/station/monkey.dm b/code/modules/mob/living/carbon/human/species/station/monkey.dm index 85890f4de6..6074934cec 100644 --- a/code/modules/mob/living/carbon/human/species/station/monkey.dm +++ b/code/modules/mob/living/carbon/human/species/station/monkey.dm @@ -30,7 +30,7 @@ brute_mod = 1.5 burn_mod = 1.5 - spawn_flags = IS_RESTRICTED + spawn_flags = SPECIES_IS_RESTRICTED bump_flag = MONKEY swap_flags = MONKEY|SLIME|SIMPLE_ANIMAL diff --git a/code/modules/mob/living/carbon/human/species/station/prometheans.dm b/code/modules/mob/living/carbon/human/species/station/prometheans.dm new file mode 100644 index 0000000000..2ada0dd7c7 --- /dev/null +++ b/code/modules/mob/living/carbon/human/species/station/prometheans.dm @@ -0,0 +1,188 @@ +var/datum/species/shapeshifter/promethean/prometheans + +// Species definition follows. +/datum/species/shapeshifter/promethean + + name = "Promethean" + name_plural = "Prometheans" + blurb = "What has Science done?" + show_ssd = "totally quiescent" + death_message = "rapidly loses cohesion, splattering across the ground..." + knockout_message = "collapses inwards, forming a disordered puddle of goo." + remains_type = /obj/effect/decal/cleanable/ash + + blood_color = "#05FF9B" + flesh_color = "#05FFFB" + + hunger_factor = DEFAULT_HUNGER_FACTOR //todo + reagent_tag = IS_SLIME + mob_size = MOB_SMALL + bump_flag = SLIME + swap_flags = MONKEY|SLIME|SIMPLE_ANIMAL + push_flags = MONKEY|SLIME|SIMPLE_ANIMAL + flags = NO_SCAN | NO_SLIP | NO_MINOR_CUT + appearance_flags = HAS_SKIN_COLOR | HAS_EYE_COLOR | HAS_HAIR_COLOR | RADIATION_GLOWS + spawn_flags = SPECIES_IS_RESTRICTED + + breath_type = null + poison_type = null + + gluttonous = 2 + virus_immune = 1 + blood_volume = 600 + min_age = 1 + max_age = 5 + brute_mod = 0.5 + burn_mod = 2 + oxy_mod = 0 + total_health = 120 + + cold_level_1 = 260 + cold_level_2 = 200 + cold_level_3 = 120 + + heat_level_1 = 360 + heat_level_2 = 400 + heat_level_3 = 1000 + + body_temperature = 310.15 + + siemens_coefficient = -1 + rarity_value = 5 + + unarmed_types = list(/datum/unarmed_attack/slime_glomp) + has_organ = list(O_BRAIN = /obj/item/organ/internal/brain/slime) // Slime core. + has_limbs = list( + BP_TORSO = list("path" = /obj/item/organ/external/chest/unbreakable/slime), + BP_GROIN = list("path" = /obj/item/organ/external/groin/unbreakable/slime), + BP_HEAD = list("path" = /obj/item/organ/external/head/unbreakable/slime), + BP_L_ARM = list("path" = /obj/item/organ/external/arm/unbreakable/slime), + BP_R_ARM = list("path" = /obj/item/organ/external/arm/right/unbreakable/slime), + BP_L_LEG = list("path" = /obj/item/organ/external/leg/unbreakable/slime), + BP_R_LEG = list("path" = /obj/item/organ/external/leg/right/unbreakable/slime), + BP_L_HAND = list("path" = /obj/item/organ/external/hand/unbreakable/slime), + BP_R_HAND = list("path" = /obj/item/organ/external/hand/right/unbreakable/slime), + BP_L_FOOT = list("path" = /obj/item/organ/external/foot/unbreakable/slime), + BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right/unbreakable/slime) + ) + heat_discomfort_strings = list("You feel too warm.") + cold_discomfort_strings = list("You feel too cool.") + + inherent_verbs = list( + /mob/living/carbon/human/proc/shapeshifter_select_shape, + /mob/living/carbon/human/proc/shapeshifter_select_colour, + /mob/living/carbon/human/proc/shapeshifter_select_hair, + /mob/living/carbon/human/proc/shapeshifter_select_gender + ) + + valid_transform_species = list("Human", "Unathi", "Tajara", "Skrell", "Diona", "Teshari", "Monkey") + monochromatic = 1 + + var/heal_rate = 5 // Temp. Regen per tick. + +/datum/species/shapeshifter/promethean/New() + ..() + prometheans = src + +/datum/species/shapeshifter/promethean/equip_survival_gear(var/mob/living/carbon/human/H) + var/boxtype = pick(typesof(/obj/item/weapon/storage/toolbox/lunchbox)) + var/obj/item/weapon/storage/toolbox/lunchbox/L = new boxtype(get_turf(H)) + var/mob/living/simple_animal/mouse/mouse = new (L) + var/obj/item/weapon/holder/holder = new (L) + mouse.forceMove(holder) + holder.sync(mouse) + if(H.backbag == 1) + H.equip_to_slot_or_del(L, slot_r_hand) + else + H.equip_to_slot_or_del(L, slot_in_backpack) + +/datum/species/shapeshifter/promethean/hug(var/mob/living/carbon/human/H,var/mob/living/target) + + var/t_him = "them" + switch(target.gender) + if(MALE) + t_him = "him" + if(FEMALE) + t_him = "her" + + H.visible_message("\The [H] glomps [target] to make [t_him] feel better!", \ + "You glomps [target] to make [t_him] feel better!") + H.apply_stored_shock_to(target) + +/datum/species/shapeshifter/promethean/handle_death(var/mob/living/carbon/human/H) + spawn(1) + if(H) + H.gib() + +/datum/species/shapeshifter/promethean/handle_environment_special(var/mob/living/carbon/human/H) + + var/turf/T = H.loc + if(istype(T)) + var/obj/effect/decal/cleanable/C = locate() in T + if(C) + qdel(C) + //TODO: gain nutriment + + // Regenerate limbs and heal damage if we have any. Copied from Bay xenos code. + + // Theoretically the only internal organ a slime will have + // is the slime core. but we might as well be thorough. + for(var/obj/item/organ/I in H.internal_organs) + if(I.damage > 0) + I.damage = max(I.damage - heal_rate, 0) + if (prob(5)) + H << "You feel a soothing sensation within your [I.name]..." + return 1 + + // Replace completely missing limbs. + for(var/limb_type in has_limbs) + var/obj/item/organ/external/E = H.organs_by_name[limb_type] + if(E && (E.is_stump() || (E.status & (ORGAN_DESTROYED|ORGAN_DEAD|ORGAN_MUTATED)))) + E.removed() + qdel(E) + E = null + if(!E) + var/list/organ_data = has_limbs[limb_type] + var/limb_path = organ_data["path"] + var/obj/item/organ/O = new limb_path(H) + organ_data["descriptor"] = O.name + H << "You feel a slithering sensation as your [O.name] reforms." + H.update_body() + return 1 + + // Heal remaining damage. + if (H.getBruteLoss() || H.getFireLoss() || H.getOxyLoss() || H.getToxLoss()) + H.adjustBruteLoss(-heal_rate) + H.adjustFireLoss(-heal_rate) + H.adjustOxyLoss(-heal_rate) + H.adjustToxLoss(-heal_rate) + return 1 + +/datum/species/shapeshifter/promethean/get_blood_colour(var/mob/living/carbon/human/H) + return (H ? rgb(H.r_skin, H.g_skin, H.b_skin) : ..()) + +/datum/species/shapeshifter/promethean/get_flesh_colour(var/mob/living/carbon/human/H) + return (H ? rgb(H.r_skin, H.g_skin, H.b_skin) : ..()) + +/datum/species/shapeshifter/promethean/get_additional_examine_text(var/mob/living/carbon/human/H) + + if(!stored_shock_by_ref["\ref[H]"]) + return + + var/t_she = "She is" + if(H.gender == MALE) + t_she = "He is" + else if(H.gender == PLURAL) + t_she = "They are" + else if(H.gender == NEUTER) + t_she = "It is" + + switch(stored_shock_by_ref["\ref[H]"]) + if(1 to 10) + return "[t_she] flickering gently with a little electrical activity." + if(11 to 20) + return "[t_she] glowing gently with moderate levels of electrical activity.\n" + if(21 to 35) + return "[t_she] glowing brightly with high levels of electrical activity." + if(35 to INFINITY) + return "[t_she] radiating massive levels of electrical activity!" diff --git a/code/modules/mob/living/carbon/human/species/station/seromi.dm b/code/modules/mob/living/carbon/human/species/station/seromi.dm index 2f931a38f7..27541c2773 100644 --- a/code/modules/mob/living/carbon/human/species/station/seromi.dm +++ b/code/modules/mob/living/carbon/human/species/station/seromi.dm @@ -36,7 +36,7 @@ blood_volume = 400 hunger_factor = 0.2 - spawn_flags = CAN_JOIN | IS_WHITELISTED + spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED appearance_flags = HAS_HAIR_COLOR | HAS_SKIN_COLOR | HAS_EYE_COLOR bump_flag = MONKEY swap_flags = MONKEY|SLIME|SIMPLE_ANIMAL diff --git a/code/modules/mob/living/carbon/human/species/station/slime.dm b/code/modules/mob/living/carbon/human/species/station/slime.dm deleted file mode 100644 index 769b1a2f35..0000000000 --- a/code/modules/mob/living/carbon/human/species/station/slime.dm +++ /dev/null @@ -1,52 +0,0 @@ -/datum/species/slime - name = "Slime" - name_plural = "slimes" - mob_size = MOB_SMALL - - icobase = 'icons/mob/human_races/r_slime.dmi' - deform = 'icons/mob/human_races/r_slime.dmi' - - language = null //todo? - unarmed_types = list(/datum/unarmed_attack/slime_glomp) - flags = NO_SCAN | NO_SLIP | NO_MINOR_CUT - spawn_flags = IS_RESTRICTED - siemens_coefficient = 3 //conductive - darksight = 3 - - blood_color = "#05FF9B" - flesh_color = "#05FFFB" - - remains_type = /obj/effect/decal/cleanable/ash - death_message = "rapidly loses cohesion, splattering across the ground..." - - has_organ = list( - "brain" = /obj/item/organ/internal/brain/slime - ) - - breath_type = null - poison_type = null - - bump_flag = SLIME - swap_flags = MONKEY|SLIME|SIMPLE_ANIMAL - push_flags = MONKEY|SLIME|SIMPLE_ANIMAL - - has_limbs = list( - BP_TORSO = list("path" = /obj/item/organ/external/chest/unbreakable), - BP_GROIN = list("path" = /obj/item/organ/external/groin/unbreakable), - BP_HEAD = list("path" = /obj/item/organ/external/head/unbreakable), - BP_L_ARM = list("path" = /obj/item/organ/external/arm/unbreakable), - BP_R_ARM = list("path" = /obj/item/organ/external/arm/right/unbreakable), - BP_L_LEG = list("path" = /obj/item/organ/external/leg/unbreakable), - BP_R_LEG = list("path" = /obj/item/organ/external/leg/right/unbreakable), - BP_L_HAND = list("path" = /obj/item/organ/external/hand/unbreakable), - BP_R_HAND = list("path" = /obj/item/organ/external/hand/right/unbreakable), - BP_L_FOOT = list("path" = /obj/item/organ/external/foot/unbreakable), - BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right/unbreakable) - ) - - genders = list(NEUTER) - -/datum/species/slime/handle_death(var/mob/living/carbon/human/H) - spawn(1) - if(H) - H.gib() diff --git a/code/modules/mob/living/carbon/human/species/station/station.dm b/code/modules/mob/living/carbon/human/species/station/station.dm index d3e3a314bc..246b684ca4 100644 --- a/code/modules/mob/living/carbon/human/species/station/station.dm +++ b/code/modules/mob/living/carbon/human/species/station/station.dm @@ -14,10 +14,10 @@ min_age = 17 max_age = 110 - spawn_flags = CAN_JOIN + spawn_flags = SPECIES_CAN_JOIN appearance_flags = HAS_HAIR_COLOR | HAS_SKIN_TONE | HAS_LIPS | HAS_UNDERWEAR | HAS_EYE_COLOR -/datum/species/human/get_bodytype() +/datum/species/human/get_bodytype(var/mob/living/carbon/human/H) return "Human" /datum/species/unathi @@ -54,7 +54,7 @@ heat_level_2 = 480 //Default 400 heat_level_3 = 1100 //Default 1000 - spawn_flags = CAN_JOIN | IS_WHITELISTED + spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR flesh_color = "#34AF10" @@ -116,7 +116,7 @@ primitive_form = "Farwa" - spawn_flags = CAN_JOIN | IS_WHITELISTED + spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR flesh_color = "#AFA59E" @@ -155,7 +155,7 @@ min_age = 19 max_age = 80 - spawn_flags = CAN_JOIN | IS_WHITELISTED + spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR flesh_color = "#8CD7A3" @@ -246,7 +246,7 @@ body_temperature = T0C + 15 //make the plant people have a bit lower body temperature, why not flags = NO_SCAN | IS_PLANT | NO_PAIN | NO_SLIP | NO_MINOR_CUT - spawn_flags = CAN_JOIN | IS_WHITELISTED + spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED blood_color = "#004400" flesh_color = "#907E4A" diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index b073f8ccf6..7f0489b90f 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -174,9 +174,6 @@ var/global/list/damage_icon_parts = list() for(var/obj/item/organ/external/O in organs) if(O.is_stump()) continue - //if(O.status & ORGAN_DESTROYED) damage_appearance += "d" //what is this? - //else - // damage_appearance += O.damage_state damage_appearance += O.damage_state if(damage_appearance == previous_damage_appearance) @@ -194,15 +191,14 @@ var/global/list/damage_icon_parts = list() if(O.is_stump()) continue - O.update_icon() if(O.damage_state == "00") continue var/icon/DI - var/cache_index = "[O.damage_state]/[O.icon_name]/[species.blood_color]/[species.get_bodytype()]" + var/cache_index = "[O.damage_state]/[O.icon_name]/[species.get_blood_colour(src)]/[species.get_bodytype(src)]" if(damage_icon_parts[cache_index] == null) - DI = new /icon(species.damage_overlays, O.damage_state) // the damage icon for whole human - DI.Blend(new /icon(species.damage_mask, O.icon_name), ICON_MULTIPLY) // mask with this organ's pixels - DI.Blend(species.blood_color, ICON_MULTIPLY) + DI = new /icon(species.get_damage_overlays(src), O.damage_state) // the damage icon for whole human + DI.Blend(new /icon(species.get_damage_mask(src), O.icon_name), ICON_MULTIPLY) // mask with this organ's pixels + DI.Blend(species.get_blood_colour(src), ICON_MULTIPLY) damage_icon_parts[cache_index] = DI else DI = damage_icon_parts[cache_index] @@ -236,7 +232,7 @@ var/global/list/damage_icon_parts = list() if(gender == FEMALE) g = "female" - var/icon_key = "[species.race_key][g][s_tone][r_skin][g_skin][b_skin]" + var/icon_key = "[species.get_race_key(src)][g][s_tone][r_skin][g_skin][b_skin]" if(lip_style) icon_key += "[lip_style]" else @@ -258,7 +254,7 @@ var/global/list/damage_icon_parts = list() else icon_key += "1" if(part) - icon_key += "[part.species.race_key]" + icon_key += "[part.species.get_race_key(part.owner)]" icon_key += "[part.dna.GetUIState(DNA_UI_GENDER)]" icon_key += "[part.dna.GetUIValue(DNA_UI_SKIN_TONE)]" if(part.s_col && part.s_col.len >= 3) @@ -357,7 +353,7 @@ var/global/list/damage_icon_parts = list() if(f_style) var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[f_style] - if(facial_hair_style && facial_hair_style.species_allowed && (src.species.get_bodytype() in facial_hair_style.species_allowed)) + if(facial_hair_style && facial_hair_style.species_allowed && (src.species.get_bodytype(src) in facial_hair_style.species_allowed)) var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s") if(facial_hair_style.do_colouration) facial_s.Blend(rgb(r_facial, g_facial, b_facial), ICON_ADD) @@ -366,13 +362,16 @@ var/global/list/damage_icon_parts = list() if(h_style && !(head && (head.flags_inv & BLOCKHEADHAIR))) var/datum/sprite_accessory/hair_style = hair_styles_list[h_style] - if(hair_style && (src.species.get_bodytype() in hair_style.species_allowed)) + if(hair_style && (src.species.get_bodytype(src) in hair_style.species_allowed)) var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s") if(hair_style.do_colouration) hair_s.Blend(rgb(r_hair, g_hair, b_hair), ICON_ADD) face_standing.Blend(hair_s, ICON_OVERLAY) + if(head_organ.nonsolid) + face_standing += rgb(,,,120) + overlays_standing[HAIR_LAYER] = image(face_standing) if(update_icons) update_icons() @@ -464,8 +463,8 @@ var/global/list/damage_icon_parts = list() var/icon/under_icon if(w_uniform.icon_override) under_icon = w_uniform.icon_override - else if(w_uniform.sprite_sheets && w_uniform.sprite_sheets[species.get_bodytype()]) - under_icon = w_uniform.sprite_sheets[species.get_bodytype()] + else if(w_uniform.sprite_sheets && w_uniform.sprite_sheets[species.get_bodytype(src)]) + under_icon = w_uniform.sprite_sheets[species.get_bodytype(src)] else if(w_uniform.item_icons && w_uniform.item_icons[slot_w_uniform_str]) under_icon = w_uniform.item_icons[slot_w_uniform_str] else @@ -486,7 +485,7 @@ var/global/list/damage_icon_parts = list() //apply blood overlay if(w_uniform.blood_DNA) - var/image/bloodsies = image(icon = species.blood_mask, icon_state = "uniformblood") + var/image/bloodsies = image(icon = species.get_blood_mask(src), icon_state = "uniformblood") bloodsies.color = w_uniform.blood_color standing.overlays += bloodsies @@ -510,8 +509,8 @@ var/global/list/damage_icon_parts = list() var/image/standing if(wear_id.icon_override) standing = image("icon" = wear_id.icon_override, "icon_state" = "[icon_state]") - else if(wear_id.sprite_sheets && wear_id.sprite_sheets[species.get_bodytype()]) - standing = image("icon" = wear_id.sprite_sheets[species.get_bodytype()], "icon_state" = "[icon_state]") + else if(wear_id.sprite_sheets && wear_id.sprite_sheets[species.get_bodytype(src)]) + standing = image("icon" = wear_id.sprite_sheets[species.get_bodytype(src)], "icon_state" = "[icon_state]") else standing = image("icon" = 'icons/mob/mob.dmi', "icon_state" = "id") overlays_standing[ID_LAYER] = standing @@ -533,13 +532,13 @@ var/global/list/damage_icon_parts = list() var/image/standing if(gloves.icon_override) standing = image("icon" = gloves.icon_override, "icon_state" = "[t_state]") - else if(gloves.sprite_sheets && gloves.sprite_sheets[species.get_bodytype()]) - standing = image("icon" = gloves.sprite_sheets[species.get_bodytype()], "icon_state" = "[t_state]") + else if(gloves.sprite_sheets && gloves.sprite_sheets[species.get_bodytype(src)]) + standing = image("icon" = gloves.sprite_sheets[species.get_bodytype(src)], "icon_state" = "[t_state]") else standing = image("icon" = 'icons/mob/hands.dmi', "icon_state" = "[t_state]") if(gloves.blood_DNA) - var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "bloodyhands") + var/image/bloodsies = image("icon" = species.get_blood_mask(src), "icon_state" = "bloodyhands") bloodsies.color = gloves.blood_color standing.overlays += bloodsies gloves.screen_loc = ui_gloves @@ -547,7 +546,7 @@ var/global/list/damage_icon_parts = list() overlays_standing[GLOVES_LAYER] = standing else if(blood_DNA) - var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "bloodyhands") + var/image/bloodsies = image("icon" = species.get_blood_mask(src), "icon_state" = "bloodyhands") bloodsies.color = hand_blood_color overlays_standing[GLOVES_LAYER] = bloodsies else @@ -560,8 +559,8 @@ var/global/list/damage_icon_parts = list() if(glasses.icon_override) overlays_standing[GLASSES_LAYER] = image("icon" = glasses.icon_override, "icon_state" = "[glasses.icon_state]") - else if(glasses.sprite_sheets && glasses.sprite_sheets[species.get_bodytype()]) - overlays_standing[GLASSES_LAYER]= image("icon" = glasses.sprite_sheets[species.get_bodytype()], "icon_state" = "[glasses.icon_state]") + else if(glasses.sprite_sheets && glasses.sprite_sheets[species.get_bodytype(src)]) + overlays_standing[GLASSES_LAYER]= image("icon" = glasses.sprite_sheets[species.get_bodytype(src)], "icon_state" = "[glasses.icon_state]") else overlays_standing[GLASSES_LAYER]= image("icon" = 'icons/mob/eyes.dmi', "icon_state" = "[glasses.icon_state]") @@ -582,9 +581,9 @@ var/global/list/damage_icon_parts = list() if(l_ear.icon_override) t_type = "[t_type]_l" overlays_standing[EARS_LAYER] = image("icon" = l_ear.icon_override, "icon_state" = "[t_type]") - else if(l_ear.sprite_sheets && l_ear.sprite_sheets[species.get_bodytype()]) + else if(l_ear.sprite_sheets && l_ear.sprite_sheets[species.get_bodytype(src)]) t_type = "[t_type]_l" - overlays_standing[EARS_LAYER] = image("icon" = l_ear.sprite_sheets[species.get_bodytype()], "icon_state" = "[t_type]") + overlays_standing[EARS_LAYER] = image("icon" = l_ear.sprite_sheets[species.get_bodytype(src)], "icon_state" = "[t_type]") else overlays_standing[EARS_LAYER] = image("icon" = 'icons/mob/ears.dmi', "icon_state" = "[t_type]") @@ -594,9 +593,9 @@ var/global/list/damage_icon_parts = list() if(r_ear.icon_override) t_type = "[t_type]_r" overlays_standing[EARS_LAYER] = image("icon" = r_ear.icon_override, "icon_state" = "[t_type]") - else if(r_ear.sprite_sheets && r_ear.sprite_sheets[species.get_bodytype()]) + else if(r_ear.sprite_sheets && r_ear.sprite_sheets[species.get_bodytype(src)]) t_type = "[t_type]_r" - overlays_standing[EARS_LAYER] = image("icon" = r_ear.sprite_sheets[species.get_bodytype()], "icon_state" = "[t_type]") + overlays_standing[EARS_LAYER] = image("icon" = r_ear.sprite_sheets[species.get_bodytype(src)], "icon_state" = "[t_type]") else overlays_standing[EARS_LAYER] = image("icon" = 'icons/mob/ears.dmi', "icon_state" = "[t_type]") @@ -610,20 +609,20 @@ var/global/list/damage_icon_parts = list() var/image/standing if(shoes.icon_override) standing = image("icon" = shoes.icon_override, "icon_state" = "[shoes.icon_state]") - else if(shoes.sprite_sheets && shoes.sprite_sheets[species.get_bodytype()]) - standing = image("icon" = shoes.sprite_sheets[species.get_bodytype()], "icon_state" = "[shoes.icon_state]") + else if(shoes.sprite_sheets && shoes.sprite_sheets[species.get_bodytype(src)]) + standing = image("icon" = shoes.sprite_sheets[species.get_bodytype(src)], "icon_state" = "[shoes.icon_state]") else standing = image("icon" = 'icons/mob/feet.dmi', "icon_state" = "[shoes.icon_state]") if(shoes.blood_DNA) - var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "shoeblood") + var/image/bloodsies = image("icon" = species.get_blood_mask(src), "icon_state" = "shoeblood") bloodsies.color = shoes.blood_color standing.overlays += bloodsies standing.color = shoes.color overlays_standing[SHOES_LAYER] = standing else if(feet_blood_DNA) - var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "shoeblood") + var/image/bloodsies = image("icon" = species.get_blood_mask(src), "icon_state" = "shoeblood") bloodsies.color = feet_blood_color overlays_standing[SHOES_LAYER] = bloodsies else @@ -649,8 +648,8 @@ var/global/list/damage_icon_parts = list() var/t_icon if(head.icon_override) t_icon = head.icon_override - else if(head.sprite_sheets && head.sprite_sheets[species.get_bodytype()]) - t_icon = head.sprite_sheets[species.get_bodytype()] + else if(head.sprite_sheets && head.sprite_sheets[species.get_bodytype(src)]) + t_icon = head.sprite_sheets[species.get_bodytype(src)] else if(head.item_icons && (slot_head_str in head.item_icons)) t_icon = head.item_icons[slot_head_str] @@ -675,13 +674,13 @@ var/global/list/damage_icon_parts = list() var/image/standing = image(icon = t_icon, icon_state = t_state) if(head.blood_DNA) - var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "helmetblood") + var/image/bloodsies = image("icon" = species.get_blood_mask(src), "icon_state" = "helmetblood") bloodsies.color = head.blood_color standing.overlays += bloodsies if(istype(head,/obj/item/clothing/head)) var/obj/item/clothing/head/hat = head - var/cache_key = "[hat.light_overlay]_[species.get_bodytype()]" + var/cache_key = "[hat.light_overlay]_[species.get_bodytype(src)]" if(hat.on && light_overlay_cache[cache_key]) standing.overlays |= light_overlay_cache[cache_key] @@ -701,8 +700,8 @@ var/global/list/damage_icon_parts = list() if(belt.icon_override) standing.icon = belt.icon_override - else if(belt.sprite_sheets && belt.sprite_sheets[species.get_bodytype()]) - standing.icon = belt.sprite_sheets[species.get_bodytype()] + else if(belt.sprite_sheets && belt.sprite_sheets[species.get_bodytype(src)]) + standing.icon = belt.sprite_sheets[species.get_bodytype(src)] else standing.icon = 'icons/mob/belt.dmi' @@ -739,7 +738,7 @@ var/global/list/damage_icon_parts = list() var/t_icon = INV_SUIT_DEF_ICON if(wear_suit.icon_override) t_icon = wear_suit.icon_override - else if(wear_suit.sprite_sheets && wear_suit.sprite_sheets[species.get_bodytype()]) + else if(wear_suit.sprite_sheets && wear_suit.sprite_sheets[species.get_bodytype(src)]) t_icon = wear_suit.sprite_sheets[species.name] else if(wear_suit.item_icons && wear_suit.item_icons[slot_wear_suit_str]) t_icon = wear_suit.item_icons[slot_wear_suit_str] @@ -755,7 +754,7 @@ var/global/list/damage_icon_parts = list() if(wear_suit.blood_DNA) var/obj/item/clothing/suit/S = wear_suit if(istype(S)) //You can put non-suits in your suit slot (diona nymphs etc). - var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "[S.blood_overlay_type]blood") + var/image/bloodsies = image("icon" = species.get_blood_mask(src), "icon_state" = "[S.blood_overlay_type]blood") bloodsies.color = wear_suit.blood_color standing.overlays += bloodsies @@ -784,14 +783,14 @@ var/global/list/damage_icon_parts = list() var/image/standing if(wear_mask.icon_override) standing = image("icon" = wear_mask.icon_override, "icon_state" = "[wear_mask.icon_state]") - else if(wear_mask.sprite_sheets && wear_mask.sprite_sheets[species.get_bodytype()]) - standing = image("icon" = wear_mask.sprite_sheets[species.get_bodytype()], "icon_state" = "[wear_mask.icon_state]") + else if(wear_mask.sprite_sheets && wear_mask.sprite_sheets[species.get_bodytype(src)]) + standing = image("icon" = wear_mask.sprite_sheets[species.get_bodytype(src)], "icon_state" = "[wear_mask.icon_state]") else standing = image("icon" = 'icons/mob/mask.dmi', "icon_state" = "[wear_mask.icon_state]") standing.color = wear_mask.color if( !istype(wear_mask, /obj/item/clothing/mask/smokable/cigarette) && wear_mask.blood_DNA ) - var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "maskblood") + var/image/bloodsies = image("icon" = species.get_blood_mask(src), "icon_state" = "maskblood") bloodsies.color = wear_mask.blood_color standing.overlays += bloodsies overlays_standing[FACEMASK_LAYER] = standing @@ -812,8 +811,8 @@ var/global/list/damage_icon_parts = list() //If this is a rig and a mob_icon is set, it will take species into account in the rig update_icon() proc. var/obj/item/weapon/rig/rig = back overlay_icon = rig.mob_icon - else if(back.sprite_sheets && back.sprite_sheets[species.get_bodytype()]) - overlay_icon = back.sprite_sheets[species.get_bodytype()] + else if(back.sprite_sheets && back.sprite_sheets[species.get_bodytype(src)]) + overlay_icon = back.sprite_sheets[species.get_bodytype(src)] else if(back.item_icons && (slot_back_str in back.item_icons)) overlay_icon = back.item_icons[slot_back_str] else @@ -857,8 +856,8 @@ var/global/list/damage_icon_parts = list() var/image/standing if(handcuffed.icon_override) standing = image("icon" = handcuffed.icon_override, "icon_state" = "handcuff1") - else if(handcuffed.sprite_sheets && handcuffed.sprite_sheets[species.get_bodytype()]) - standing = image("icon" = handcuffed.sprite_sheets[species.get_bodytype()], "icon_state" = "handcuff1") + else if(handcuffed.sprite_sheets && handcuffed.sprite_sheets[species.get_bodytype(src)]) + standing = image("icon" = handcuffed.sprite_sheets[species.get_bodytype(src)], "icon_state" = "handcuff1") else standing = image("icon" = 'icons/mob/mob.dmi', "icon_state" = "handcuff1") overlays_standing[HANDCUFF_LAYER] = standing @@ -873,8 +872,8 @@ var/global/list/damage_icon_parts = list() var/image/standing if(legcuffed.icon_override) standing = image("icon" = legcuffed.icon_override, "icon_state" = "legcuff1") - else if(legcuffed.sprite_sheets && legcuffed.sprite_sheets[species.get_bodytype()]) - standing = image("icon" = legcuffed.sprite_sheets[species.get_bodytype()], "icon_state" = "legcuff1") + else if(legcuffed.sprite_sheets && legcuffed.sprite_sheets[species.get_bodytype(src)]) + standing = image("icon" = legcuffed.sprite_sheets[species.get_bodytype(src)], "icon_state" = "legcuff1") else standing = image("icon" = 'icons/mob/mob.dmi', "icon_state" = "legcuff1") overlays_standing[LEGCUFF_LAYER] = standing @@ -963,24 +962,29 @@ var/global/list/damage_icon_parts = list() /mob/living/carbon/human/proc/update_tail_showing(var/update_icons=1) overlays_standing[TAIL_LAYER] = null - if(species.tail && !(wear_suit && wear_suit.flags_inv & HIDETAIL)) + var/species_tail = species.get_tail(src) + + if(species_tail && !(wear_suit && wear_suit.flags_inv & HIDETAIL)) var/icon/tail_s = get_tail_icon() - overlays_standing[TAIL_LAYER] = image(tail_s, icon_state = "[species.tail]_s") + overlays_standing[TAIL_LAYER] = image(tail_s, icon_state = "[species_tail]_s") animate_tail_reset(0) if(update_icons) update_icons() /mob/living/carbon/human/proc/get_tail_icon() - var/icon_key = "[species.race_key][r_skin][g_skin][b_skin][r_hair][g_hair][b_hair]" + var/icon_key = "[species.get_race_key(src)][r_skin][g_skin][b_skin][r_hair][g_hair][b_hair]" var/icon/tail_icon = tail_icon_cache[icon_key] if(!tail_icon) //generate a new one - tail_icon = new/icon(icon = (species.tail_animation? species.tail_animation : 'icons/effects/species.dmi')) + var/species_tail_anim = species.get_tail_animation(src) + if(!species_tail_anim) species_tail_anim = 'icons/effects/species.dmi' + tail_icon = new/icon(species_tail_anim) tail_icon.Blend(rgb(r_skin, g_skin, b_skin), ICON_ADD) // The following will not work with animated tails. - if(species.tail_hair) - var/icon/hair_icon = icon('icons/effects/species.dmi', "[species.tail]_[species.tail_hair]") + var/use_species_tail = species.get_tail_hair(src) + if(use_species_tail) + var/icon/hair_icon = icon('icons/effects/species.dmi', "[species.get_tail(src)]_[use_species_tail]") hair_icon.Blend(rgb(r_hair, g_hair, b_hair), ICON_ADD) tail_icon.Blend(hair_icon, ICON_OVERLAY) tail_icon_cache[icon_key] = tail_icon @@ -991,7 +995,7 @@ var/global/list/damage_icon_parts = list() /mob/living/carbon/human/proc/set_tail_state(var/t_state) var/image/tail_overlay = overlays_standing[TAIL_LAYER] - if(tail_overlay && species.tail_animation) + if(tail_overlay && species.get_tail_animation(src)) tail_overlay.icon_state = t_state return tail_overlay return null @@ -999,7 +1003,7 @@ var/global/list/damage_icon_parts = list() //Not really once, since BYOND can't do that. //Update this if the ability to flick() images or make looping animation start at the first frame is ever added. /mob/living/carbon/human/proc/animate_tail_once(var/update_icons=1) - var/t_state = "[species.tail]_once" + var/t_state = "[species.get_tail(src)]_once" var/image/tail_overlay = overlays_standing[TAIL_LAYER] if(tail_overlay && tail_overlay.icon_state == t_state) @@ -1016,29 +1020,28 @@ var/global/list/damage_icon_parts = list() update_icons() /mob/living/carbon/human/proc/animate_tail_start(var/update_icons=1) - set_tail_state("[species.tail]_slow[rand(0,9)]") + set_tail_state("[species.get_tail(src)]_slow[rand(0,9)]") if(update_icons) update_icons() /mob/living/carbon/human/proc/animate_tail_fast(var/update_icons=1) - set_tail_state("[species.tail]_loop[rand(0,9)]") + set_tail_state("[species.get_tail(src)]_loop[rand(0,9)]") if(update_icons) update_icons() /mob/living/carbon/human/proc/animate_tail_reset(var/update_icons=1) if(stat != DEAD) - set_tail_state("[species.tail]_idle[rand(0,9)]") + set_tail_state("[species.get_tail(src)]_idle[rand(0,9)]") else - set_tail_state("[species.tail]_static") - + set_tail_state("[species.get_tail(src)]_static") if(update_icons) update_icons() /mob/living/carbon/human/proc/animate_tail_stop(var/update_icons=1) - set_tail_state("[species.tail]_static") + set_tail_state("[species.get_tail(src)]_static") if(update_icons) update_icons() diff --git a/code/modules/mob/living/carbon/metroid/life.dm b/code/modules/mob/living/carbon/metroid/life.dm index 7db2bcf5c8..69ddb59038 100644 --- a/code/modules/mob/living/carbon/metroid/life.dm +++ b/code/modules/mob/living/carbon/metroid/life.dm @@ -217,7 +217,7 @@ if(istype(L, /mob/living/carbon/human) && dna) //Ignore slime(wo)men var/mob/living/carbon/human/H = L - if(H.species.name == "Slime") + if(H.species.name == "Promethean") continue if(!L.canmove) // Only one slime can latch on at a time. diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index e9aa06068b..7660ba56ae 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -149,7 +149,7 @@ return 0 var/datum/species/S = all_species[client.prefs.species] - if(!(S.spawn_flags & IS_WHITELISTED)) + if(!(S.spawn_flags & SPECIES_IS_WHITELISTED)) src << alert("Your current species,[client.prefs.species], is not available for play on the station.") return 0 @@ -173,7 +173,7 @@ return 0 var/datum/species/S = all_species[client.prefs.species] - if(!(S.spawn_flags & CAN_JOIN)) + if(!(S.spawn_flags & SPECIES_CAN_JOIN)) src << alert("Your current species, [client.prefs.species], is not available for play on the station.") return 0 @@ -476,7 +476,7 @@ /mob/new_player/proc/is_species_whitelisted(datum/species/S) if(!S) return 1 - return is_alien_whitelisted(src, S.name) || !config.usealienwhitelist || !(S.spawn_flags & IS_WHITELISTED) + return is_alien_whitelisted(src, S.name) || !config.usealienwhitelist || !(S.spawn_flags & SPECIES_IS_WHITELISTED) /mob/new_player/get_species() var/datum/species/chosen_species diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index cebd834a24..4c302317ad 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -26,6 +26,7 @@ var/last_dam = -1 // used in healing/processing calculations. // Appearance vars. + var/nonsolid // Snowflake warning, reee. Used for slime limbs. var/icon_name = null // Icon state base. var/body_part = null // Part flag var/icon_position = 0 // Used in mob overlay layering calculations. @@ -719,6 +720,9 @@ Note that amputating the affected organ does in fact remove the infection from t if(cannot_amputate || !owner) return + if(disintegrate == DROPLIMB_EDGE && nonsolid) + disintegrate = DROPLIMB_BLUNT //splut + switch(disintegrate) if(DROPLIMB_EDGE) if(!clean) @@ -747,6 +751,10 @@ Note that amputating the affected organ does in fact remove the infection from t var/mob/living/carbon/human/victim = owner //Keep a reference for post-removed(). var/obj/item/organ/external/parent_organ = parent + + var/use_flesh_colour = species.get_flesh_colour(owner) + var/use_blood_colour = species.get_blood_colour(owner) + removed(null, ignore_children) victim.traumatic_shock += 60 @@ -795,10 +803,8 @@ Note that amputating the affected organ does in fact remove the infection from t else gore = new /obj/effect/decal/cleanable/blood/gibs(get_turf(victim)) if(species) - if(species.get_flesh_colour()) - gore.fleshcolor = species.get_flesh_colour() - if(species.get_blood_colour()) - gore.basecolor = species.get_blood_colour() + gore.fleshcolor = use_flesh_colour + gore.basecolor = use_blood_colour gore.update_icon() gore.throw_at(get_edge_target_turf(src,pick(alldirs)),rand(1,3),30) diff --git a/code/modules/organs/organ_icon.dm b/code/modules/organs/organ_icon.dm index ffcb3f32e1..21e1e337b8 100644 --- a/code/modules/organs/organ_icon.dm +++ b/code/modules/organs/organ_icon.dm @@ -71,7 +71,7 @@ var/global/list/limb_icon_cache = list() if(owner.f_style) var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[owner.f_style] - if(facial_hair_style && facial_hair_style.species_allowed && (species.get_bodytype() in facial_hair_style.species_allowed)) + if(facial_hair_style && facial_hair_style.species_allowed && (species.get_bodytype(owner) in facial_hair_style.species_allowed)) var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s") if(facial_hair_style.do_colouration) facial_s.Blend(rgb(owner.r_facial, owner.g_facial, owner.b_facial), ICON_ADD) @@ -79,7 +79,7 @@ var/global/list/limb_icon_cache = list() if(owner.h_style && !(owner.head && (owner.head.flags_inv & BLOCKHEADHAIR))) var/datum/sprite_accessory/hair_style = hair_styles_list[owner.h_style] - if(hair_style && (species.get_bodytype() in hair_style.species_allowed)) + if(hair_style && (species.get_bodytype(owner) in hair_style.species_allowed)) var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s") if(hair_style.do_colouration && islist(h_col) && h_col.len >= 3) hair_s.Blend(rgb(h_col[1], h_col[2], h_col[3]), ICON_ADD) @@ -113,36 +113,47 @@ var/global/list/limb_icon_cache = list() else if (status & ORGAN_ROBOT) mob_icon = new /icon('icons/mob/human_races/robotic.dmi', "[icon_name][gender ? "_[gender]" : ""]") else - if (status & ORGAN_MUTATED) - mob_icon = new /icon(species.deform, "[icon_name][gender ? "_[gender]" : ""]") - else - mob_icon = new /icon(species.icobase, "[icon_name][gender ? "_[gender]" : ""]") - - if(status & ORGAN_DEAD) - mob_icon.ColorTone(rgb(10,50,0)) - mob_icon.SetIntensity(0.7) - - if(!isnull(s_tone)) - if(s_tone >= 0) - mob_icon.Blend(rgb(s_tone, s_tone, s_tone), ICON_ADD) - else - mob_icon.Blend(rgb(-s_tone, -s_tone, -s_tone), ICON_SUBTRACT) - else if(s_col && s_col.len >= 3) - mob_icon.Blend(rgb(s_col[1], s_col[2], s_col[3]), ICON_ADD) + mob_icon = new /icon(species.get_icobase(owner, (status & ORGAN_MUTATED)), "[icon_name][gender ? "_[gender]" : ""]") + apply_colouration(mob_icon) if(body_hair && islist(h_col) && h_col.len >= 3) var/cache_key = "[body_hair]-[icon_name]-[h_col[1]][h_col[2]][h_col[3]]" if(!limb_icon_cache[cache_key]) - var/icon/I = icon(species.icobase, "[icon_name]_[body_hair]") + var/icon/I = icon(species.get_icobase(owner), "[icon_name]_[body_hair]") I.Blend(rgb(h_col[1],h_col[2],h_col[3]), ICON_ADD) limb_icon_cache[cache_key] = I mob_icon.Blend(limb_icon_cache[cache_key], ICON_OVERLAY) dir = EAST icon = mob_icon - return mob_icon +/obj/item/organ/external/proc/apply_colouration(var/icon/applying) + + if(nonsolid) + applying.MapColors("#4D4D4D","#969696","#1C1C1C", "#000000") + if(species && species.get_bodytype(owner) != "Human") + applying.SetIntensity(1.5) // Unathi, Taj and Skrell have -very- dark base icons. + else + applying.SetIntensity(0.7) + + else if(status & ORGAN_DEAD) + applying.ColorTone(rgb(10,50,0)) + applying.SetIntensity(0.7) + + if(!isnull(s_tone)) + if(s_tone >= 0) + applying.Blend(rgb(s_tone, s_tone, s_tone), ICON_ADD) + else + applying.Blend(rgb(-s_tone, -s_tone, -s_tone), ICON_SUBTRACT) + else if(s_col && s_col.len >= 3) + applying.Blend(rgb(s_col[1], s_col[2], s_col[3]), ICON_ADD) + + // Translucency. + if(nonsolid) applying += rgb(,,,180) // SO INTUITIVE TY BYOND + + return applying + // new damage icon system // adjusted to set damage_state to brute/burn code only (without r_name0 as before) /obj/item/organ/external/update_icon() diff --git a/code/modules/organs/subtypes/unbreakable.dm b/code/modules/organs/subtypes/unbreakable.dm index 137249e747..9492d330e1 100644 --- a/code/modules/organs/subtypes/unbreakable.dm +++ b/code/modules/organs/subtypes/unbreakable.dm @@ -1,4 +1,3 @@ -// Slime limbs. /obj/item/organ/external/chest/unbreakable cannot_break = 1 dislocated = -1 @@ -42,3 +41,48 @@ /obj/item/organ/external/head/unbreakable cannot_break = 1 dislocated = -1 + +// Slime limbs. +/obj/item/organ/external/chest/unbreakable/slime + nonsolid = 1 + max_damage = 50 + +/obj/item/organ/external/groin/unbreakable/slime + nonsolid = 1 + max_damage = 30 + +/obj/item/organ/external/arm/unbreakable/slime + nonsolid = 1 + max_damage = 15 + +/obj/item/organ/external/arm/right/unbreakable/slime + nonsolid = 1 + max_damage = 15 + +/obj/item/organ/external/leg/unbreakable/slime + nonsolid = 1 + max_damage = 15 + +/obj/item/organ/external/leg/right/unbreakable/slime + nonsolid = 1 + max_damage = 15 + +/obj/item/organ/external/foot/unbreakable/slime + nonsolid = 1 + max_damage = 5 + +/obj/item/organ/external/foot/right/unbreakable/slime + nonsolid = 1 + max_damage = 5 + +/obj/item/organ/external/hand/unbreakable/slime + nonsolid = 1 + max_damage = 5 + +/obj/item/organ/external/hand/right/unbreakable/slime + nonsolid = 1 + max_damage = 5 + +/obj/item/organ/external/head/unbreakable/slime + nonsolid = 1 + max_damage = 15 diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm index 540e5a3367..4f34cd7eff 100644 --- a/code/modules/power/power.dm +++ b/code/modules/power/power.dm @@ -344,7 +344,7 @@ PN.trigger_warning(5) if(istype(M,/mob/living/carbon/human)) var/mob/living/carbon/human/H = M - if(H.species.siemens_coefficient == 0) + if(H.species.siemens_coefficient <= 0) return if(H.gloves) var/obj/item/clothing/gloves/G = H.gloves diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm index 8a6d50ab29..0022026a67 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm @@ -476,9 +476,11 @@ /datum/reagent/slimetoxin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) if(ishuman(M)) var/mob/living/carbon/human/H = M - if(H.species.name != "Slime") + if(H.species.name != "Promethean") M << "Your flesh rapidly mutates!" - H.set_species("Slime") + H.set_species("Promethean") + H.shapeshifter_set_colour("#05FF9B") + H.verbs -= /mob/living/carbon/human/proc/shapeshifter_select_colour /datum/reagent/aslimetoxin name = "Advanced Mutation Toxin" diff --git a/polaris.dme b/polaris.dme index 2dc731c0ef..8412712f64 100644 --- a/polaris.dme +++ b/polaris.dme @@ -998,7 +998,6 @@ #include "code\modules\client\preference_setup\global\02_settings.dm" #include "code\modules\client\preference_setup\global\03_pai.dm" #include "code\modules\client\preference_setup\global\04_communicators.dm" -#include "code\modules\client\preference_setup\global\05_ooc.dm" #include "code\modules\client\preference_setup\global\setting_datums.dm" #include "code\modules\client\preference_setup\loadout\gear_tweaks.dm" #include "code\modules\client\preference_setup\loadout\loadout.dm" @@ -1367,12 +1366,15 @@ #include "code\modules\mob\living\carbon\human\whisper.dm" #include "code\modules\mob\living\carbon\human\species\species.dm" #include "code\modules\mob\living\carbon\human\species\species_attack.dm" +#include "code\modules\mob\living\carbon\human\species\species_getters.dm" +#include "code\modules\mob\living\carbon\human\species\species_helpers.dm" #include "code\modules\mob\living\carbon\human\species\species_hud.dm" +#include "code\modules\mob\living\carbon\human\species\species_shapeshift.dm" #include "code\modules\mob\living\carbon\human\species\outsider\shadow.dm" #include "code\modules\mob\living\carbon\human\species\station\golem.dm" #include "code\modules\mob\living\carbon\human\species\station\monkey.dm" +#include "code\modules\mob\living\carbon\human\species\station\prometheans.dm" #include "code\modules\mob\living\carbon\human\species\station\seromi.dm" -#include "code\modules\mob\living\carbon\human\species\station\slime.dm" #include "code\modules\mob\living\carbon\human\species\station\station.dm" #include "code\modules\mob\living\carbon\metroid\death.dm" #include "code\modules\mob\living\carbon\metroid\emote.dm" From 0abb642a606a60900a277716000e4259321ebebb Mon Sep 17 00:00:00 2001 From: Yoshax Date: Thu, 5 May 2016 19:59:36 +0100 Subject: [PATCH 09/38] Adds the ability to feed telecrystals to emags for more uses --- code/game/objects/items/weapons/cards_ids.dm | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm index 17e9d35ab9..6d1a2eaa3d 100644 --- a/code/game/objects/items/weapons/cards_ids.dm +++ b/code/game/objects/items/weapons/cards_ids.dm @@ -68,6 +68,7 @@ icon_state = "emag" item_state = "card-id" origin_tech = list(TECH_MAGNET = 2, TECH_ILLEGAL = 2) + var/default_uses = 10 var/uses = 10 /obj/item/weapon/card/emag/resolve_attackby(atom/A, mob/user) @@ -87,6 +88,12 @@ qdel(src) return 1 +/obj/item/weapon/card/emag/attackby(obj/item/O as obj, mob/user as mob) + if(istype(O, /obj/item/device/telecrystal)) + src.uses += default_uses/2 //Adds half the default amount of uses which is more than you get per TC when buying, as to balance the utility of having multiple emags vs one heavily usable one + usr << "You add \the [O] to \the [src]. Increasing the uses of \the [src] to [uses]." + qdel(O) + /obj/item/weapon/card/id name = "identification card" From 5b747a98dcd56db34f531e499aa26114d0c38726 Mon Sep 17 00:00:00 2001 From: Yoshax Date: Fri, 6 May 2016 01:27:21 +0100 Subject: [PATCH 10/38] Fixes incorrect checks --- code/modules/organs/wound.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/organs/wound.dm b/code/modules/organs/wound.dm index 701067170f..3cf3ecb239 100644 --- a/code/modules/organs/wound.dm +++ b/code/modules/organs/wound.dm @@ -265,7 +265,7 @@ /** CUTS **/ /datum/wound/cut/bleeding() - return ..() && wound_damage() >= 5 + return ..() || wound_damage() >= 5 /datum/wound/cut/small // link wound descriptions to amounts of damage @@ -306,7 +306,7 @@ datum/wound/cut/massive /datum/wound/puncture/can_merge(var/datum/wound/other) return 0 /datum/wound/puncture/bleeding() - return ..() && wound_damage() >= 5 + return ..() || wound_damage() >= 5 /datum/wound/puncture/small max_bleeding_stage = 2 @@ -335,7 +335,7 @@ datum/wound/puncture/massive /** BRUISES **/ /datum/wound/bruise/bleeding() - return ..() && wound_damage() >= 20 + return ..() || wound_damage() >= 20 /datum/wound/bruise stages = list("monumental bruise" = 80, "huge bruise" = 50, "large bruise" = 30, From 92e9b6c25ad6c5f451b0d3cd99635ea57ebbe965 Mon Sep 17 00:00:00 2001 From: Yoshax Date: Fri, 6 May 2016 19:10:00 +0100 Subject: [PATCH 11/38] Adds the ability for vending machines to vend 2 items with a 1% chance --- code/game/machinery/vending.dm | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index ddcbb9cc2c..8f1edefbbf 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -509,8 +509,6 @@ qdel(coin) categories &= ~CAT_COIN - R.amount-- - if(((src.last_reply + (src.vend_delay + 200)) <= world.time) && src.vend_reply) spawn(0) src.speak(src.vend_reply) @@ -520,7 +518,15 @@ if (src.icon_vend) //Show the vending animation if needed flick(src.icon_vend,src) spawn(src.vend_delay) - new R.product_path(get_turf(src)) + if(prob(1)) + for(var/I = 1 to 2) + new R.product_path(get_turf(src)) + R.amount-- + src.visible_message("\The [src] clunks as it vends an additional item.") + else + new R.product_path(get_turf(src)) + R.amount-- + src.status_message = "" src.status_error = 0 src.vend_ready = 1 From 4708af3a2ebf2242cfa57d64293c2b5371293aa3 Mon Sep 17 00:00:00 2001 From: Yoshax Date: Sat, 7 May 2016 16:41:01 +0100 Subject: [PATCH 12/38] Fixes neck-grabs forcing people to lie down, stops people resisting when weakened --- code/__defines/mobs.dm | 8 +++++++- code/modules/mob/living/living.dm | 17 +++++++---------- code/modules/mob/mob.dm | 17 +++++++++++++---- code/modules/mob/mob_defines.dm | 2 +- 4 files changed, 28 insertions(+), 16 deletions(-) diff --git a/code/__defines/mobs.dm b/code/__defines/mobs.dm index 98ad3b28ca..8bac7f560c 100644 --- a/code/__defines/mobs.dm +++ b/code/__defines/mobs.dm @@ -136,9 +136,15 @@ #define INCAPACITATION_RESTRAINED 1 #define INCAPACITATION_BUCKLED_PARTIALLY 2 #define INCAPACITATION_BUCKLED_FULLY 4 +#define INCAPACITATION_STUNNED 8 +#define INCAPACITATION_FORCELYING 16 //needs a better name - represents being knocked down BUT still conscious. +#define INCAPACITATION_KNOCKOUT 32 + #define INCAPACITATION_DEFAULT (INCAPACITATION_RESTRAINED|INCAPACITATION_BUCKLED_FULLY) -#define INCAPACITATION_ALL (INCAPACITATION_RESTRAINED|INCAPACITATION_BUCKLED_PARTIALLY|INCAPACITATION_BUCKLED_FULLY) +#define INCAPACITATION_KNOCKDOWN (INCAPACITATION_KNOCKOUT|INCAPACITATION_FORCELYING) +#define INCAPACITATION_DISABLED (INCAPACITATION_KNOCKDOWN|INCAPACITATION_STUNNED) +#define INCAPACITATION_ALL (~INCAPACITATION_NONE) // Bodyparts and organs. #define O_MOUTH "mouth" diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index b3fa6e43ea..c9665563c7 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -566,7 +566,7 @@ default behaviour is: set name = "Resist" set category = "IC" - if(!stat && canClick()) + if(!incapacitated(INCAPACITATION_KNOCKOUT) && canClick()) setClickCooldown(20) resist_grab() if(!weakened) @@ -631,7 +631,9 @@ default behaviour is: if(GRAB_PASSIVE) qdel(G) if(GRAB_AGGRESSIVE) - if(prob(60)) //same chance of breaking the grab as disarm + //Not standing up makes it much harder to break, so it is easier to cuff someone who is down without forcing them into unconsciousness. + //Otherwise, it's the same chance of breaking the grab as disarm. + if(incapacitated(INCAPACITATION_KNOCKDOWN)? prob(15) : prob(60)) visible_message("[src] has broken free of [G.assailant]'s grip!") qdel(G) if(GRAB_NECK) @@ -862,7 +864,7 @@ default behaviour is: else if(istype(buckled, /obj/vehicle)) var/obj/vehicle/V = buckled - if(cannot_stand()) + if(is_physically_disabled()) lying = 0 canmove = 1 pixel_y = V.mob_offset_y - 5 @@ -880,18 +882,13 @@ default behaviour is: anchored = 0 canmove = 1 - else if(cannot_stand()) - lying = 1 - canmove = 0 - else if(stunned) - canmove = 0 else if(captured) anchored = 1 canmove = 0 lying = 0 else - lying = 0 - canmove = 1 + lying = incapacitated(INCAPACITATION_KNOCKDOWN) + canmove = !incapacitated(INCAPACITATION_DISABLED) if(lying) density = 0 diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index f45fd574ce..405afb537c 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -158,8 +158,20 @@ return UNBUCKLED return restrained() ? FULLY_BUCKLED : PARTIALLY_BUCKLED +/mob/proc/is_physically_disabled() + return incapacitated(INCAPACITATION_DISABLED) + +/mob/proc/cannot_stand() + return incapacitated(INCAPACITATION_KNOCKDOWN) + /mob/proc/incapacitated(var/incapacitation_flags = INCAPACITATION_DEFAULT) - if (stat || paralysis || stunned || weakened || resting || sleeping || (status_flags & FAKEDEATH)) + if ((incapacitation_flags & INCAPACITATION_STUNNED) && stunned) + return 1 + + if ((incapacitation_flags & INCAPACITATION_FORCELYING) && (weakened || resting)) + return 1 + + if ((incapacitation_flags & INCAPACITATION_KNOCKOUT) && (stat || paralysis || sleeping || (status_flags & FAKEDEATH))) return 1 if((incapacitation_flags & INCAPACITATION_RESTRAINED) && restrained()) @@ -687,9 +699,6 @@ /mob/proc/can_stand_overridden() return 0 -/mob/proc/cannot_stand() - return incapacitated(INCAPACITATION_DEFAULT & (~INCAPACITATION_RESTRAINED)) - //Updates canmove, lying and icons. Could perhaps do with a rename but I can't think of anything to describe it. /mob/proc/update_canmove() return canmove diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 7b7f994e8f..f814ac2b23 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -152,7 +152,7 @@ var/voice_name = "unidentifiable voice" var/faction = "neutral" //Used for checking whether hostile simple animals will attack you, possibly more stuff later - var/captured = 0 //Functionally, should give the same effect as being buckled into a chair when true. + var/captured = 0 //Functionally, should give the same effect as being buckled into a chair when true. Only used by energy nets, TODO replace with buckling //Generic list for proc holders. Only way I can see to enable certain verbs/procs. Should be modified if needed. var/proc_holder_list[] = list()//Right now unused. From 8294c89dd1db65a02d2f2c1dd9d639e0efefc56d Mon Sep 17 00:00:00 2001 From: Anewbe Date: Sat, 7 May 2016 18:00:51 -0500 Subject: [PATCH 13/38] Ups borg armor from 60 to 90 --- code/modules/mob/living/silicon/robot/component.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/silicon/robot/component.dm b/code/modules/mob/living/silicon/robot/component.dm index 6f0b3d81bd..7d2848f9bf 100644 --- a/code/modules/mob/living/silicon/robot/component.dm +++ b/code/modules/mob/living/silicon/robot/component.dm @@ -75,7 +75,7 @@ /datum/robot_component/armour name = "armour plating" external_type = /obj/item/robot_parts/robot_component/armour - max_damage = 60 + max_damage = 90 // ACTUATOR From b6a602ba9a8dc20fa82ebee34cbea048a25ab9c2 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Sun, 8 May 2016 03:19:09 -0400 Subject: [PATCH 14/38] New Player/Character Setup (Fake)NanoUI While I consider Polaris' character setup screen to be mechanically better than most others, it wasn't prettier. Well. It was a bit. But now it's more pretty-er. Used the fake NanoUI 'browser' datum to render the pages for the New Player panel and the Character Setup screen. --- .../client/preference_setup/general/01_basic.dm | 4 ++-- .../client/preference_setup/loadout/loadout.dm | 12 +++--------- .../preference_setup/occupation/occupation.dm | 16 ++++++++-------- code/modules/client/preferences.dm | 5 ++++- code/modules/mob/new_player/new_player.dm | 8 ++++++-- html/browser/common.css | 1 + 6 files changed, 24 insertions(+), 22 deletions(-) diff --git a/code/modules/client/preference_setup/general/01_basic.dm b/code/modules/client/preference_setup/general/01_basic.dm index 96c7405c84..701f24dc2e 100644 --- a/code/modules/client/preference_setup/general/01_basic.dm +++ b/code/modules/client/preference_setup/general/01_basic.dm @@ -43,8 +43,8 @@ datum/preferences/proc/set_biological_gender(var/gender) /datum/category_item/player_setup_item/general/basic/content() . = "Name: " . += "[pref.real_name]
" - . += "(Random Name) " - . += "(Always Random Name: [pref.be_random_name ? "Yes" : "No"])" + . += "Randomize Name
" + . += "Always Random Name: [pref.be_random_name ? "Yes" : "No"]" . += "
" . += "Biological Gender: [gender2text(pref.biological_gender)]
" . += "Gender Identity: [gender2text(pref.identifying_gender)]
" diff --git a/code/modules/client/preference_setup/loadout/loadout.dm b/code/modules/client/preference_setup/loadout/loadout.dm index b5c1d555ea..e8794a4256 100644 --- a/code/modules/client/preference_setup/loadout/loadout.dm +++ b/code/modules/client/preference_setup/loadout/loadout.dm @@ -105,15 +105,9 @@ var/list/gear_datums = list() else . += " |" if(category == current_tab) - . += " [category] " + . += " [category] " else - var/datum/loadout_category/LC = loadout_categories[category] - var/tcolor = "#3366CC" - for(var/thing in LC.gear) - if(thing in pref.gear) - tcolor = "#E67300" - break - . += " [category] " + . += " [category] " . += "" var/datum/loadout_category/LC = loadout_categories[current_tab] @@ -123,7 +117,7 @@ var/list/gear_datums = list() for(var/gear_name in LC.gear) var/datum/gear/G = LC.gear[gear_name] var/ticked = (G.display_name in pref.gear) - . += "[G.display_name]" + . += "[G.display_name]" . += "[G.cost]" . += "[G.description]" if(ticked) diff --git a/code/modules/client/preference_setup/occupation/occupation.dm b/code/modules/client/preference_setup/occupation/occupation.dm index 62c3fc206d..63fc84f4dd 100644 --- a/code/modules/client/preference_setup/occupation/occupation.dm +++ b/code/modules/client/preference_setup/occupation/occupation.dm @@ -60,8 +60,8 @@ . += "
" . += "Choose occupation chances
Unavailable occupations are crossed out.
" - . += "
" // Table within a table for alignment, also allows you to easily add more colomns. - . += "" + . += "
" // Table within a table for alignment, also allows you to easily add more columns. + . += "" var/index = -1 //The job before the current job. I only use this to get the previous jobs color when I'm filling in blank rows. @@ -76,14 +76,14 @@ //the last job's selection color. Creating a rather nice effect. for(var/i = 0, i < (limit - index), i += 1) . += "" - . += "
  
" + . += "
" index = 0 . += "" + . += "\black [rank]" continue if(!job.player_old_enough(user.client)) var/available_in_days = job.available_in_days(user.client) @@ -93,7 +93,7 @@ . += "[rank]" continue if((pref.job_civilian_low & ASSISTANT) && (rank != "Assistant")) - . += "[rank]" + . += "[rank]" continue if((rank in command_positions) || (rank == "AI"))//Bold head jobs . += "[rank]" @@ -132,11 +132,11 @@ switch(pref.alternate_option) if(GET_RANDOM_JOB) - . += "

Get random job if preferences unavailable

" + . += "

Get random job if preferences unavailable

" if(BE_ASSISTANT) - . += "

Be assistant if preference unavailable

" + . += "

Be assistant if preference unavailable

" if(RETURN_TO_LOBBY) - . += "

Return to lobby if preference unavailable

" + . += "

Return to lobby if preference unavailable

" . += "
\[Reset\]
" . += "" diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 0e18e4f835..e6627cc39d 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -211,7 +211,10 @@ datum/preferences dat += player_setup.content(user) dat += "" - user << browse(dat, "window=preferences;size=635x736") + //user << browse(dat, "window=preferences;size=635x736") + var/datum/browser/popup = new(user, "Character Setup","Character Setup", 635, 736, src) + popup.set_content(dat) + popup.open() /datum/preferences/proc/process_link(mob/user, list/href_list) if(!user) return diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index e9aa06068b..e958d07de3 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -24,7 +24,7 @@ /mob/new_player/proc/new_player_panel_proc() - var/output = "
New Player Options" + var/output = "
" output +="
" output += "

Setup Character

" @@ -61,7 +61,11 @@ output += "
" - src << browse(output,"window=playersetup;size=210x280;can_close=0") + //src << browse(output,"window=playersetup;size=210x280;can_close=0") + var/datum/browser/popup = new(src, "New Player","New Player", 210, 280, src) + popup.set_window_options("can_close=0") + popup.set_content(output) + popup.open() return /mob/new_player/Stat() diff --git a/html/browser/common.css b/html/browser/common.css index 1de45bd953..9f2f579908 100644 --- a/html/browser/common.css +++ b/html/browser/common.css @@ -23,6 +23,7 @@ a, a:link, a:visited, a:active, .linkOn, .linkOff padding: 1px 4px 1px 4px; margin: 0 2px 0 0; cursor:default; + white-space:nowrap; } a:hover From 45e9b4f10a0086ff6031056a14316fe5565e751f Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Sun, 8 May 2016 03:22:33 -0400 Subject: [PATCH 15/38] Removed earlier attempt at color --- code/modules/client/preference_setup/occupation/occupation.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/client/preference_setup/occupation/occupation.dm b/code/modules/client/preference_setup/occupation/occupation.dm index 63fc84f4dd..e0b6fbc24b 100644 --- a/code/modules/client/preference_setup/occupation/occupation.dm +++ b/code/modules/client/preference_setup/occupation/occupation.dm @@ -83,7 +83,7 @@ var/rank = job.title lastJob = job if(jobban_isbanned(user, rank)) - . += "\black [rank]
" + . += "[rank]" continue if(!job.player_old_enough(user.client)) var/available_in_days = job.available_in_days(user.client) From 30bcf940673be51e7b4c09b60029ea271e046a3e Mon Sep 17 00:00:00 2001 From: Yoshax Date: Sun, 8 May 2016 12:41:38 +0100 Subject: [PATCH 16/38] Removes for loop and adjusts code --- code/game/machinery/vending.dm | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 8f1edefbbf..85560bda98 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -518,14 +518,12 @@ if (src.icon_vend) //Show the vending animation if needed flick(src.icon_vend,src) spawn(src.vend_delay) + new R.product_path(get_turf(src)) + R.amount-- if(prob(1)) - for(var/I = 1 to 2) - new R.product_path(get_turf(src)) - R.amount-- - src.visible_message("\The [src] clunks as it vends an additional item.") - else new R.product_path(get_turf(src)) R.amount-- + src.visible_message("\The [src] clunks as it vends an additional item.") src.status_message = "" src.status_error = 0 From e2293f1e79a62af54ec6d3dfecc1736838791215 Mon Sep 17 00:00:00 2001 From: Yoshax Date: Sun, 8 May 2016 15:51:16 +0100 Subject: [PATCH 17/38] Gives drinking glasses a material so they have a cost in autolathe --- .../reagents/reagent_containers/food/drinks/drinkingglass.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm b/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm index 63a467dcfd..9141efbc1e 100644 --- a/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm +++ b/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm @@ -8,6 +8,7 @@ volume = 30 unacidable = 1 //glass center_of_mass = list("x"=16, "y"=10) + matter = list("glass" = 500) on_reagent_change() /*if(reagents.reagent_list.len > 1 ) From f9708a2e0e9157e47fb1fa9bf592d50c8bad73ac Mon Sep 17 00:00:00 2001 From: Yoshax Date: Sun, 8 May 2016 16:05:07 +0100 Subject: [PATCH 18/38] Swaps secret player count for ninja/wizard and ninja&wizard --- code/game/gamemodes/mixed/visitors.dm | 4 ++-- code/game/gamemodes/ninja/ninja.dm | 2 +- code/game/gamemodes/wizard/wizard.dm | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/code/game/gamemodes/mixed/visitors.dm b/code/game/gamemodes/mixed/visitors.dm index e9a5919819..853e5039d4 100644 --- a/code/game/gamemodes/mixed/visitors.dm +++ b/code/game/gamemodes/mixed/visitors.dm @@ -3,8 +3,8 @@ round_description = "A space wizard and a ninja have invaded the station!" extended_round_description = "A ninja and wizard spawn during this round." config_tag = "visitors" - required_players = 6 - required_players_secret = 6 + required_players = 8 + required_players_secret = 8 required_enemies = 2 end_on_antag_death = 0 antag_tags = list(MODE_WIZARD, MODE_NINJA) diff --git a/code/game/gamemodes/ninja/ninja.dm b/code/game/gamemodes/ninja/ninja.dm index d71412dc8a..480c69d27f 100644 --- a/code/game/gamemodes/ninja/ninja.dm +++ b/code/game/gamemodes/ninja/ninja.dm @@ -10,7 +10,7 @@ only hope this unknown assassin isn't here for you." config_tag = "ninja" required_players = 1 - required_players_secret = 8 + required_players_secret = 6 required_enemies = 1 end_on_antag_death = 0 antag_tags = list(MODE_NINJA) \ No newline at end of file diff --git a/code/game/gamemodes/wizard/wizard.dm b/code/game/gamemodes/wizard/wizard.dm index 0cc48203c5..9da98075f3 100644 --- a/code/game/gamemodes/wizard/wizard.dm +++ b/code/game/gamemodes/wizard/wizard.dm @@ -4,7 +4,7 @@ extended_round_description = "A powerful entity capable of manipulating the elements around him, most commonly referred to as a 'wizard', has infiltrated the station. They have a wide variety of powers and spells available to them that makes your own simple moral self tremble with fear and excitement. Ultimately, their purpose is unknown. However, it is up to you and your crew to decide if their powers can be used for good or if their arrival foreshadows the destruction of the entire station." config_tag = "wizard" required_players = 1 - required_players_secret = 8 + required_players_secret = 6 required_enemies = 1 end_on_antag_death = 0 antag_tags = list(MODE_WIZARD) From 5692ad76ad9db65766e81202232e2119cd00219c Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Sun, 8 May 2016 14:20:18 -0400 Subject: [PATCH 19/38] Removed imaginary tag from previous work --- code/modules/client/preference_setup/occupation/occupation.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/client/preference_setup/occupation/occupation.dm b/code/modules/client/preference_setup/occupation/occupation.dm index e0b6fbc24b..0b4abcdd87 100644 --- a/code/modules/client/preference_setup/occupation/occupation.dm +++ b/code/modules/client/preference_setup/occupation/occupation.dm @@ -93,7 +93,7 @@ . += "[rank]" continue if((pref.job_civilian_low & ASSISTANT) && (rank != "Assistant")) - . += "[rank]" + . += "[rank]" continue if((rank in command_positions) || (rank == "AI"))//Bold head jobs . += "[rank]" From 79b1bf5260a800506cecb65f4d117490caf29ced Mon Sep 17 00:00:00 2001 From: Yoshax Date: Sun, 8 May 2016 22:03:17 +0100 Subject: [PATCH 20/38] Removes antag limitations on uplink items to make them actually buyable --- code/game/objects/items/devices/uplink_items.dm | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/code/game/objects/items/devices/uplink_items.dm b/code/game/objects/items/devices/uplink_items.dm index f9ec0f32dd..bc9666990b 100644 --- a/code/game/objects/items/devices/uplink_items.dm +++ b/code/game/objects/items/devices/uplink_items.dm @@ -446,10 +446,6 @@ datum/uplink_item/dd_SortValue() item_cost = 20 path = /obj/item/weapon/circuitboard/teleporter -/datum/uplink_item/item/tools/teleporter/New() - ..() - antag_roles = list(MODE_MERCENARY) - /datum/uplink_item/item/tools/money name = "Operations Funding" item_cost = 3 @@ -632,7 +628,6 @@ datum/uplink_item/dd_SortValue() /datum/uplink_item/item/badassery/surplus/New() ..() - antag_roles = list(MODE_MERCENARY) desc = "A crate containing [item_worth] telecrystal\s worth of surplus leftovers." /datum/uplink_item/item/badassery/surplus/get_goods(var/obj/item/device/uplink/U, var/loc) @@ -681,7 +676,6 @@ var/image/default_abstract_uplink_icon ..() name = "[command_name()] Update Announcement" desc = "Causes a falsified [command_name()] Update. Triggers immediately after supplying additional data." - antag_roles = list(MODE_MERCENARY) /datum/uplink_item/abstract/announcements/fake_centcom/get_goods(var/obj/item/device/uplink/U, var/loc, var/mob/user, var/list/args) command_announcement.Announce(args.["message"], args.["title"]) @@ -692,10 +686,6 @@ var/image/default_abstract_uplink_icon desc = "Creates a fake crew arrival announcement as well as fake crew records, using your current appearance (including held items!) and worn id card. Trigger with care!" item_cost = 4 -/datum/uplink_item/abstract/announcements/fake_crew_arrival/New() - ..() - antag_roles = list(MODE_MERCENARY) - /datum/uplink_item/abstract/announcements/fake_crew_arrival/get_goods(var/obj/item/device/uplink/U, var/loc, var/mob/user, var/list/args) if(!user) return 0 From 4f7aba8b27a97115d7793721d9040e667516036c Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Sun, 8 May 2016 17:06:53 -0400 Subject: [PATCH 21/38] Panel closes on latejoin Sure would be nice if that panel went away when you latejoin. --- code/modules/mob/new_player/new_player.dm | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index e958d07de3..0c3c3a7621 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -5,6 +5,7 @@ var/spawning = 0//Referenced when you want to delete the new_player later on in the code. var/totalPlayers = 0 //Player counts for the Lobby tab var/totalPlayersReady = 0 + var/datum/browser/panel universal_speak = 1 invisibility = 101 @@ -62,10 +63,10 @@ output += "" //src << browse(output,"window=playersetup;size=210x280;can_close=0") - var/datum/browser/popup = new(src, "New Player","New Player", 210, 280, src) - popup.set_window_options("can_close=0") - popup.set_content(output) - popup.open() + panel = new(src, "New Player","New Player", 210, 280, src) + panel.set_window_options("can_close=0") + panel.set_content(output) + panel.open() return /mob/new_player/Stat() @@ -102,7 +103,8 @@ ready = 0 if(href_list["refresh"]) - src << browse(null, "window=playersetup") //closes the player setup window + //src << browse(null, "window=playersetup") //closes the player setup window + panel.close() new_player_panel_proc() if(href_list["observe"]) @@ -472,8 +474,10 @@ return 0 /mob/new_player/proc/close_spawn_windows() + src << browse(null, "window=latechoices") //closes late choices window - src << browse(null, "window=playersetup") //closes the player setup window + //src << browse(null, "window=playersetup") //closes the player setup window + panel.close() /mob/new_player/proc/has_admin_rights() return check_rights(R_ADMIN, 0, src) From 8b5ed3d7ffe43b31df44e477fe3eacec5c88194d Mon Sep 17 00:00:00 2001 From: redstryker Date: Sun, 8 May 2016 18:22:15 -0400 Subject: [PATCH 22/38] Adds Glowsticks --- code/game/machinery/vending.dm | 6 +- code/game/objects/items/devices/flashlight.dm | 72 +++++++++++++++++- icons/mob/items/lefthand.dmi | Bin 120683 -> 121093 bytes icons/mob/items/righthand.dmi | Bin 121968 -> 122638 bytes icons/obj/lighting.dmi | Bin 31067 -> 37210 bytes 5 files changed, 75 insertions(+), 3 deletions(-) diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index ddcbb9cc2c..6ac1abb38a 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -929,8 +929,10 @@ icon_deny = "tool-deny" //req_access = list(access_maint_tunnels) //Maintenance access products = list(/obj/item/stack/cable_coil/random = 10,/obj/item/weapon/crowbar = 5,/obj/item/weapon/weldingtool = 3,/obj/item/weapon/wirecutters = 5, - /obj/item/weapon/wrench = 5,/obj/item/device/analyzer = 5,/obj/item/device/t_scanner = 5,/obj/item/weapon/screwdriver = 5) - contraband = list(/obj/item/weapon/weldingtool/hugetank = 2,/obj/item/clothing/gloves/fyellow = 2) + /obj/item/weapon/wrench = 5,/obj/item/device/analyzer = 5,/obj/item/device/t_scanner = 5,/obj/item/weapon/screwdriver = 5, + /obj/item/device/flashlight/glowstick = 3, /obj/item/device/flashlight/glowstick/red = 3, /obj/item/device/flashlight/glowstick/blue = 3, + /obj/item/device/flashlight/glowstick/orange =3, /obj/item/device/flashlight/glowstick/yellow = 3) + contraband = list(/obj/item/weapon/weldingtool/hugetank = 2,/obj/item/clothing/gloves/fyellow = 2, ) premium = list(/obj/item/clothing/gloves/yellow = 1) /obj/machinery/vending/engivend diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index c7f90e9746..83ac8851dd 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -199,7 +199,7 @@ src.force = on_damage src.damtype = "fire" processing_objects += src - + /obj/item/device/flashlight/flare/proc/ignite() //Used for flare launchers. on = !on update_icon() @@ -208,6 +208,76 @@ processing_objects += src return 1 +//Glowsticks + +/obj/item/device/flashlight/glowstick + name = "green glowstick" + desc = "A green military-grade glowstick." + w_class = 2.0 + brightness_on = 4 + light_power = 2 + light_color = "#49F37C" + icon_state = "glowstick" + item_state = "glowstick" + var/fuel = 0 + +/obj/item/device/flashlight/glowstick/New() + fuel = rand(1600, 2000) + ..() + +/obj/item/device/flashlight/glowstick/process() + fuel = max(fuel - 1, 0) + if(!fuel || !on) + turn_off() + if(!fuel) + src.icon_state = "[initial(icon_state)]-empty" + processing_objects -= src + +/obj/item/device/flashlight/glowstick/proc/turn_off() + on = 0 + update_icon() + +/obj/item/device/flashlight/glowstick/attack_self(mob/user) + + if(!fuel) + user << "The glowstick has already been turned on." + return + if(on) + return + + . = ..() + if(.) + user.visible_message("[user] cracks and shakes the glowstick.", "You crack and shake the glowstick, turning it on!") + processing_objects += src + +/obj/item/device/flashlight/glowstick/red + name = "red glowstick" + desc = "A red military-grade glowstick." + light_color = "#FC0F29" + icon_state = "glowstick_red" + item_state = "glowstick_red" + +/obj/item/device/flashlight/glowstick/blue + name = "blue glowstick" + desc = "A blue military-grade glowstick." + light_color = "#599DFF" + icon_state = "glowstick_blue" + item_state = "glowstick_blue" + +/obj/item/device/flashlight/glowstick/orange + name = "orange glowstick" + desc = "A orange military-grade glowstick." + light_color = "#FA7C0B" + icon_state = "glowstick_orange" + item_state = "glowstick_orange" + +/obj/item/device/flashlight/glowstick/yellow + name = "yellow glowstick" + desc = "A yellow military-grade glowstick." + light_color = "#FEF923" + icon_state = "glowstick_yellow" + item_state = "glowstick_yellow" + /obj/item/device/flashlight/slime gender = PLURAL name = "glowing slime extract" diff --git a/icons/mob/items/lefthand.dmi b/icons/mob/items/lefthand.dmi index f8d3c1c23fb171cc02c57d9a3643b953777c9dd8..b3f56e6ab319a05d84b6204648371b04d20d33fd 100644 GIT binary patch delta 23257 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�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 diff --git a/icons/mob/items/righthand.dmi b/icons/mob/items/righthand.dmi index 265df7a2ad32fb1ef5890f918811c37ef7167183..cc0895827a4e1ae9787e5bc8f2560ab84817dd76 100644 GIT binary patch delta 21472 zcmZ5{1ymGK+y5d8f`q8FfS@9RbT^VJ-OYletbo+g3`!~`Dj_MLfJ-gijWn!CEVZO` z=K>4tfAIa@@0{;H=giLBnY%N0p8P%cdG1a%aZDreM_LNY>qHO;qy>9`fj~%VOCEkA z;q&&3e~zAL-$tsf+&ClsHJh}T0{L{OK9kp;ea1xwfAng96%BR9Q<7{5u!W@~^n&|H zs`^L>bb|m>2x}=(@bwQ@7!)7BP%geVSXoIP`L>7s(@h#~EkdPsy76JH>ks(yo|wEZ zJxH*)!?otZwuOH4(7Bjq>k9;O5As~`souStw~ZC<-MmUznmWVsSx}Arv(u6|O5mg( z${X7EVA(&zoqaNVJC$DaX`aRBqXqT|6>>AI*2>XTGQiAxkmm{Wt*>5hCjPg3sAxi( z=kO2S7q0HUbPP^|1gUx*g!pHG%>*bTU^7O$_KxHk7wPx&P-M$q6-(#-0FgA$wSkS? zg%s(g_!69cnzMCA$?*0g-%<}qN>UQX**T_15B<7Rn54bhtL#^Cc8=BY&RjZ73cAe+ zlpHLMgvpLH8g{p7@Mr`yzJ9-V zPvlOm^kKnab_|v+7Z|ta-k9=IOjST&|%?jHIWhPc~QRXm3}Hi;J_uvE1w9^FMw= zRe=>0I%$jc{u`%q+2+68cQ-W&AodrB4G&SW<~43V;7`1Gk8A*faT454FQ6np_TyW} zVHGpTj*z(ZxSMbi%BC~J%cmf6AX=WC_Igk6KxP}E+hxG(PJ7(ZW@tf;QY6h&uiSJg zpIeciF>{j$Pey*1U9P0VDYrh;Gg5=X$%vn2x=1mfgdGdPy1cEEYy;^qxv=c2Y0T|w z#IgEyf)%wbg0oxYg%&Bn{5i8T=~axB0pI%0r(I$n zAB+B-g3t4A><46M%AV_u%{_bfVU4U(_3-RuUkre6(1Bbtm_r}$4>5OMqdL2#Z!b$` zcM?z>ROG3mq|_b2XDeO5B$^s8sTN&OSY1t*BH~oKzO2x^;YRjUeZAZR!WGRdJz+p8 z7Jt~ICBe_Hohr>(t4SgbKDi^BF&u5-N6sq-RbEiZX#YTbnmKz+Vs^OpvNyE&lb884 zkcMn2ZS{SPsik&etD9e4){PI8F&N#YKeTxOY4)t>EoI6m%Zb_Z$Yn<*-SzNtoTwMC z-andtmLl5eLR^47hp&)QJe;0$P>)f~bKbd|D5f^$>!tbS%NsrJ7_O7&Uc~4}8kc_9D0mk89fgn1TO{+kE%(lB|4t zk9UPLvnQfZku>*Nrr-&;Ujag(NQJsJ_Qd*%I!S@mB)7)ts%oA zVCEejMjaYJOmVmQWPh1EfTv(XNBYfd&4Fy2zSFHaxHQs-*8=^^6Pqu@1bM)`;E04 z_IQnSsrThR?(M_lkBusvvuAL$k5IRC?Q=N_vn6;e>N(cH|180V-jy3lt8iR3%_lRw zFX<^a^Ry%o^-J1k??KG=#odhaZNp0|$la*%!ax!zXSWgaeS^;gf>1Vvj%Qtrb@#Bi z^Mp;v5qqrl^_VP2iV)Y)xtLhQJ0BL@+=y|fRB~<9`+~9b=`2du(_V@*Yt#4@4G7Y93s;ytGGn7^B z=wHdT_pb720$HuNaB{{Rr!nNy@>fG0%?QVwT62V_PU4D0F&R|aosyB}AW45STs!ch z=B#E7{te+=hHmRSDIB{7^T5KK5`e#SwO`Fc280rOZ2>sBe(B`UNi+iOysl%umpasl z#l-SX<0x}9Gh#rxF7!1ucIp@NbgVsHlBUiQ*h?J^hhF68n(9d;)QQgW=$D}t8mp7; z^i}9B&i{&(4~w~^w3wbz&}dcIO{&BeK zAQph~4g~U&r5c)OlB>!52x2+-N#9{G>)IvDzdvG!Ky(s|EB`Jl=IJoSOmO>OJ188- zJ;tdQy$ZW@I9p{ej@Q&Z8yZ#Urbh8r8)wJS0^8QVJW1Lks^hLe7=#_8*wq=b_45tH zT<5P2q>4v=x`mZ}U5xU_d_tcd4>w&0s1K7X*s1&Lgf_QpQ4ce6c>cFNc$Q1h&iImT=N(DMQ4UDRjSc@TXto-L2}x6oqNiym%FR-%`qt? zpIGVDf`$2$iSk#$t_vN2Ppxt=`ICN&*my2OM}ZLOggV-Vj%ZzxM2v*Yc720a&7{Ai zJ|o2BdVZFwzS1$Nk-hBR{yr5I6#>LyVmO(%aW(dzTi-r; zk11}{Lnnd49r#3wNyi*nDMkp#)OuE)+P&6m$Q(Q8Y&glmLBqYar=u}-UJGrMvgIDf z0B0fdogal34HNDgK^B;-i_rxH(0FG9Il>OLBnxs@;XD>}+PbnSN=b$;YN%;SIB37B zMkhVI|ITbrZ48vq*@+Y!%r3kbvXesGgMTR;(8}=ul~nM3G$P`9xeHUw@M3-iDEcRa zaV=5TRZ^-P-v;9-=g?5pPdbaAPymn)2iuuG`OPS)1WfwgDo)hH?^~Zwu7M8$Pj`eb zy0J#F?#-OkB|*s7^Fb6**~5{pX32Q-E1* z_M<-ob@)at?0DZ?z$lEvqZL64eW*W|k3F{A4hPcS8M+|WD%X8OZo!*Q?Q=~EoA(Hw zP>ooWF1SxjU7MKyYs|*R);bJ?7GCl)et6AqfD08MoK7{D#}sVn(lXj~)c?@rEaU+J zFCzpIr`Kp%mro5?H3=};Ei)PEybTN8$<`!DOO!vW7g z-!aUlxZlxht8fj?_=;2bACrn3VnzZ7x=cI_nb4-d$|jn!qx+JQlU=JG*_XClVSt6& zwx70HWC>_4l- z=NHIz;*BA85S^|4n4(I#Nn{otiw@9QS2$h!W5$y>E_@SI$$y*ii-}>{5N)QP$^$=W zB}ZS=5Fr)+cl$8RUk3rn`JXLI>lY-EEr~!Q(RGM`5y*l;{I=4_GMByox4(`0?ME6m zG)CmL*N})-!?4=_-ua$5af<=bH~{+G57P~P#D}{Q3A#U|)w9$my)akCK;wA8fVdlm zY_$5fsz*6=mdZ^M)lta2AwtplbNkg zvIV9d{u?QxtNAUV(j1w}GyEqDU9;P4rTO5CNppuD&o3;*+Zq|%QWGJfiw;m0%)c?Zg~@*Y{Q1kl zETxKh;Kq&1amGz=<+&4}2OxA}7A?Z8kmK24N{<zMP2H*eVLEV-3!j~xL$F(>TJ)Ch3fSPp(qp)Jxf~>$5mT*#t3_8R^#8s7Gp0MYiI@d>Q_4$2kX3C zHpa_TqF7{U2PypU*`LT%up8s|eX(27a&3b>HZ^7w_89?T28AZ9W0vRwAYf&%vLs>A z?UhOlbLh~j&}&pMg{3}mw!pA({tY-tBL+e_cUQ{G0d_ekNLw0UoLH~*6ma?T+AfTMg~c#8>f ztjIl3EV8r=q-Y!(iH=VT#^d$2T8OTBultKlr^zUu@P33Fe@^C;*wIzD6?1Gq4l40$ zJ+B%7`4CEm7jYi5{9E4hdJ6gU)$u9F3(#C3w-!=>3QBw*C6KdaYvvApH z7RrdT+LngSWMlRZrEQNU2ir5nlf~M>EAHcY5(w4Nb%*)tjcvH}@=jxa4@_QBQ7nh6R9F~v4anbYT-r|)|cAKgGb zO3!Z3%)FUcp($*Z{6t9QcIQLE_5FvZ?;~j+k<99l2`}mdUaFGrx7mb;+=#(ya;@dhN*FWaD?Z znsNA8CM8MP(ouzFhV+1V0Bi0TvStHhGpoWwdV%q1s<|-`dR7#gRv{P~@7`aYzc6&# zo&Pn_fSraJ9XlUbbnT!9^un?sJHx5swds%6V~uh56pZ4pP*}nyT_Krw#r{xZ0U_7x zRM#TdiW#wvzmHy33&}&2ntyN%?{10+_e!hZP2^R|jDg>(rh63Bki6`g9KU#L;<;A? z_NsOk@vB3$7*1deM*L#|h^Q-=CLylxixQn;-4CPwy5S8|Scrj+o24VZxu{?+5j zC-@)D6v9OFERg`L=c3rW&HxAOcB4s&5 zCP9-87@|f8gH&~kh99q^LFQS&vKZBS!??Ic4A6@`FGhs8C2f`nUIbeN%a0u__9|^G zOZH6B;7%xd!;y&fgoP&jwBHrTG_Wmg^}E(AVV~K@CMnZzmg%gJk^j#h9OainZBK_+ zdK{;*znZ8ElhG|Hz^f)|yNwod(RO<2A5O%IH3pJzRjw$7}W%5y^aOA)u8tkXr!mplBf^NObaGDhZd1RFJ80@cSAU(DrKf~afp z$8+Woxio^om|pA`F`nLSG1+?4WC5CF?NpY~E#ITs^-v-QECAk8Qjz2#$SX69_1&yw zmv|#~w-q!;JSmN&IR)mPUI?mvvAYy;@$m?H>JYEfWjrBdm{In{9a`E*-vt$t?a9Iy zqg8&tpJ|(!J%Lj){DfiLQjbu@PhDM09Pnq!0#*6*(%U1eyj*F$DP$MrtxpIbObkLo zueap787f+VCxZwdCR^5@Yr79?h$+tkCBif@h-eFZEq4<$T(3Hog@S0N>!J0 z&DYA=2;^{As&~b-PHh6!%NzfUkDrTaE#D|ZaA}SLljkoQZWd}2%Q2}F)-rj`u=Hu# zz)e3}cJGXANE}!yUe9-97Cg#QKPOuG{f)r+^sl6p#{uiqLATdsdt%td(uQ7`eVrNp zhLTz0^kx{-R5lEQ=qw(sR|$+w7d_Oz@J?u%SuIOsHBp(|g1vQMDom5{qesZ=j4Tjt zNdw>nTNB&TAOM3;5tfz1&;uK{BILs`^4xVJs){YTOfeE^8oMKgP=5ar?Px-y#$$s` znzgy2O3Laf+T$gLZ(GZ@8M@Hz8?!iAP-FnXhG2ecX?ehw@7ahc)_r#Jk8j1jwTj8) zt6X}mhTVDV+WfJ`ey(hu^d=Wxx4+&04eT|g%qp%42=?T~Ey?ejdbww!ZXuYPT79&0 zr|LOR;O0G(cvwGI0={JF^SCF-8 zXIJBS?EY8LYEVybtpvk`86?A8g;mq*a_4Gt5KrN6&a1dxV5uFEr)@YD8=6ZH#Du)_C#KT#J)KI$Oqx`H3R9u zk$sD+Vd||{saSuTC(dRO&;r7wmc+8%Z4K`uI6Tg`g8M7aWO8er%SL|{;hz3Opns$7 zMQ&Z9HSPF7i6q!RrYlyqgIN0#oOBj9U4VihTngVbfk)j2yBXghH2Q}mS)3+zLhS=Q zYX-&)-_0_EAE%x7`~L!Hs?aMB;E6@01W$mhkApZCdAbwV|G-{-D~PJ1qD|JstuuPp zv{$;&n+uKJ{NG}ku)iXorJTwaj@|h85&@cjZ@WDbHp`o2SzbHw0D1@V28K%^JoP?t zb-Vko6I%mc5QuICwDX987NYEt!{PT$gpe(b4}(`u{-+mk+42ADw%hC1=|SSN*x9># z`K=KV2hEpX-DQ)>aJEVvWw5vi6ca+)(;4Z8#r75!{|CzZTK*e(sTTRg0jYBS!swCc z!q}AWQ_pec6jM!ICYnnkQE6{ln?UMvpO-Jz`WG18rUIx!8?`7d4z4S6-G?@-72l`$ zE0%fD>hO;mHg|QejDdjv*RKW_u8iy)7I)X}NiwVV5nXpOY0g%eq70O`cO>-M-u#Co z;d2BVRVo7?H1RcBt9M(j)@NL}vo=b*i985AdC2DXRlxQ`l7Q`tXMyKGS1ZPyxDODb z!@xV)5%lM@H0}xVY7Oj1?ACX>LQK&5$Fwx3l+JsXBc?J=%p}-wfBcw@f9vT~psMD9 z!=%x36*WErm;Vd6NrBbUn#<8%jsZM|(x>&?p)`*KYD8ZWh-`13x(l%y~#S;cvWgqTYPt{q8u@Z$`OF(6}e#%DQyb(CR_o%%)m`-QP1C zAXfIGn)_Ynno+ICPw%tcPQt)5(*W*w4UHf8j)8m=Fu>&CfJwk6!az^& z&Mhmke;@y~_akI<)#F2I>Rk{fa^1*0pzt0V8ma)>VMvh$4+#*(-=XhMSpcfe2oGyz zz7q62~CS1VICF1-od`P8xTYi7A=X!+O)g@?zw)KM>#fzV;H zw)dAp#$nV$IJT^#Lq-DC?_*UM(-M!7lVNJi!Y%49MHf8h74Yuw?rvGU4`s_%AO^?6 zIO@Z>j4%Br?&jw9+q#zq-k_s(v^i-HC#n6tAW=|H!wIwAG2|b?6zk-L%z*@j3jr5r zZZiP7(Dcz6MnloY6MP|XUnQ249I8)Tzq-15NmOp8R?r8P%zy0+X>vBFCsUTZ%eGMS zNSarG9rZ9C-(BV|nC|yy|Bi2iFGu4{!0(J!C(S+lo|e|f3t2{ zTwMHPtU`RO7aM|!?o6MDle6b{ahWnoMbYs4@fq301gw|@n3?48DD++`5%4>|SZg8y zn?n5=vQUq;;h$5R;S@~rxf*F_VP%SUB;Xrk+Dq(k`;5*LAZz)WWEVdLX^Qt;J_9dS&VqS%$U?ZL!@+nRy|X5xv%IR8H&L*9dzT-{@t z7duFS1L8E0mzqW=eS)Z~=iT#lJku@t+qk2#QYCC>sG0lBq2104-=T$TX$5kzxqnT4 zxb;{PEpvH{vfEyQv{gnepoVv2BYrNhl>D`xNnA70)zN9sj+Np3JEI^RbR!%~mhxZ7ivke{?j7!MIXzXW671B?Z2jP-xttJ0{bp%L@w4JbQrH;xYsvp24*OL_m^FZTwPKOH$t0%HL)3EY95 zr#U-_prXeh`#x9D(9jSG5zSJ_JW@}7;2&(2eFP>ihLu(#?gPAlX{KYvzbyIrRz1jfW(MRYb9Cq8K#*;+Pqg+8zMN(0}$~d~GcC(iK?e!l> z?bzf+-*RUR16nv@H%j>ELfHXRTfvQ1`Xe0_!1GWkZ;Pg4&lP~Q9OvwCYBo#keogEN zCBL2F^L(Ge6n5(hJJGljwc41`kV!!I>_{Ka5GW>U$wJTRjDx+J=|&5_a$iwd?unmo zNuraYyPf^rLb8ZN8@ciO+5(1X>Ay*PSo_xkI7!y~D^^(KU|r>xFL$V3_fM~D>*-yE zBuV>KCIR3NBq%G3&9p$(b6ooML6Os?SXjc2EMl!60YqAGd~Dj;IL*3_E`0rHW31%< zM3oDa{i=DDa~hbSuCJGZY~6(K%(kTO=ub0~{xJ|&8t|H7U9Q{ySlP24At_sB{Ct8l zH-d>iJaxN~%iZ+yF5JdU%hNA*vyQz5h;b6myeT5V{(}TkUGy~SdganOLwkfaw!f3R zFl>IJmjYtjbOH4ne`{(&{woi+lxWObcj?WYgS&V155E>G-<6cJ$pI6)?}@En^7*vC zLOJ!KMcYg#D_I{u?k&7l%;J|R&8NB4K84oBcW~y zq-Lgl|KrDx=PM_j2_YL(HMb!>1tbvf8JAzeKY3=5yWtt6t~>IK5V`Qv&RM^VCU){N z(AMyS|KdvbQJWg!x&=UX28+xf9A)f~*?=Z$^mq39I%xv0YVVcbtlnOJSDHInfT*VP zO_v;KzV=~{rQv|SmR8Wt&KuMiL zCq302d!RvLFT-$tlc%&^34VAMluOxPVM&nK9*vAAn&*X6K!9-JIR9gH4}7r-1X9=J zO?d)9&F$3LE(9nrxas9a{5g8|MTTRy@XrWmCZtC0=Q*ypn8ukhVzD=W_Gh+O0{K9^ z`Ace#f1Vu(cG`DwLl+Bzk{HKaFm(;42d2WvppzA_aQNngPpf*qj{Z70U!^pZqdthV zYIDO215Oin)Kf$X1-?~8CUBcx*_j!6=<<2nn%H;vi6k^QfJM?_DC;rAt23Y1C&iyd z@^`k~_zA-XZtOjnde=vDwdv37y1BdePPy2>%1?diIR7A3%J>Loj7o970s&7$e!l@5lC7ACOl7A8?_Kc<_?sA0we_C+e~(2n>fJnur$l&nlg2q}zxzUHKM zxE>dYMS{E3)BLKffbIP$7nRzp$UXfPeWGmTtM!ToabLcCUtC&xc@lG74Nr{pSGjt$ zJ>znsfkH0z4;BUZJ(;0;J2hoyzFx5o!sOmH`xXW&3RCeQgP-5OUw!!SpRPv8_Mb>!mxoz#T70ZqK%c-l#>{Cuor~2LG(F?M)b~aewsE+PW7* z%g7iBTDA$!FGXs3VbLwaQ#ney{^eY>O)PuMZrJm{u8dt!uuMb$#Gg#gT;v3RxWjfp z7gObuvAhkswNf=Km!*G0BESnBwWd>5?S00(U+Hhsw7qGds~zAwyvexLBm9%&pdw%E z2BT;G$@2Zc&av}fe$6PAcZ`#YASI|9NE*@NMsq;ON zIu_Y`p(bN=ulp~}Ab8`C3c{M60eIbMi0-DAmttrh#^_F|SWo2%P_TzQBh%e4#G^r{rN$-!JBS7cAEX6BjDw_!=k^-tube`AhpC2Yqfu{tOPLo6shv7Ub zh~;FZ69)%J^Cd{0-+dUYxV4EzN9>mp676bT; z>mVtfK79*xkHp(6He}u^9sL5P>T6upIqv)mno8rqs#`IgV}MZKP9(6UApeichBj1A2Y8TNrLto@qW}CJ~`i~)HF+2i5=SJdV%3%yb@gq=9A_1q#%1q-jyUXu?@!|#2X;S3NmoG*<5#^>0 z2BMzw^$7`aJYaFzR1fE}dH(jMZ;Vr}@Xv}pI3#U*)Uyk--9*&xgD;@H4{ySoEV9_R zCigB1)DeLJ5duUbBJbN+E*u>BzKR@P8+2~=d=X2;_mZOFyL!OWys=nNR!Nm0&s0^* z&KSmi8sxut{(SfB7FR~?_O?iVnRUMb5=6mL>+Jt~K~d4pP3^^P$VdF1$eDLw3K0av z7F1LV)`?oB1dJT&;6wfsi823ADEzObw3cKJ`4>!F{%GgDOtc*$c$9cAi9i7$kqE*x z0Zn7z?!8`E6~cTi^hy!Qe>;!&Pt~|P#o7KW(ET;`^cqsYa$~eGMP?)fA~+iImiNEi zu5pQr8%s8LmxzJ;LqYcYj;b0OqqlC~_Ds7!3poNo;w>;Iq*CRKLE593rD3HY%nD(> zjBkK{kGN*NHB~deoCaIgN>)$F`D*@I_VRqM$|anO>qbzm#+XYJjv^@VtxJQP zOqZy`RD+)=v;WRhRp%(}KBL=Vv;QJC@aIkeE7bpO_rr%>?<760PFdx4+s3>4?!Js` z3Xo(YqPTi-?gH6z)|X!Xm{v>=@Fc>)dzokk2cE=yWtQfh3MsCT;wj>Pgu7%S$@tUc z)YJkc$-6IovX!fCCq;UfR0ZywORy`yUYn%t?(R;;3a{{YqWSsRUe3ySw_03fQATqF z*{&F-8^cNgd|*q!WhUct%d+g!(uF6PhzG?t#=NKctoj0&jfm+uSnBuO9*tjEr+$WB zAv2N;DF$Js=)p(Juwuo`!rt%C6QsOTqxhFwh->f_bh3C@)x_C}EPTUgcUV_*eC;&D zckMAh*jyB5tPxQL2^Wy=|HlC5V$-19Z(AjO52yO<*-Z$a%%cf|SZU+p0_e4DbjONx zlB8D=@Qj=1Ctf#?596UVAI)Kh6Ze~U>J(mU6oPot0K|RfXx+-=X*|Vcr zWG%>?Mo43FSxSCgNTvrWUbYrGV+}2ewPDtOg-?3=rMc_zg1#5YdEkEkFT5nlU0Ps z>6&8dIHtNF+?h!O>RmKk?2-FTc^M2+=wW{fO+{aimx4BJh8VD# zQJ|C#`EW5L7*RfNT~u13Mc-;rarAb;$>8_RCv~Id)Y-+o1>abW;DvRZ%Fsk}+1L#e zFa6^asPyF(I}7w!iS;iaSr{e+0V9mySDshpN9*kR8Pt`o!#XCCYKSKX0)rb}P)Psl z>)xkSgV;^_G58T<+mc>`h@IKzs;(|O6K`+HgY{)O4UNjj!g_`p8X~8M?)RkXnb_{9 zJjMkKYQVBCao1OK`Di-hVr_T&2IBYc-@kNwP6F{-;edwptO1~sDml9HUo2yrI{$vU zwW9C!@@1BhE5;Ktm4=)Kh_X!xUMKRH3zf;satXSr+vHW+_R>g!`BD?`>X)Xj#BC=~ zwRy2K>C%2@7hb#bO8um<)Y8FPGbOcN+cDwHzIlBnX7%3MlV$d?7P_ZtlU|#=7WH}E zKKgy;De3?SxWE7S@%2KC-Te(7Cb|V|cAOJe_H#FLXPEQVMLE_imfaW=scJ@^L>Vz= z7k8VYi_8fiUP3WKwin5tJbP;O1st8C>e&GXQJL(;r3=fRDdG4O9N}g2Y`r3F^Z{KR z%LViHR1LWja51%^gZQz6%2-H~tg^zk&2Rx3y?GV}Z~Lm6*LnXxjsSU<&YD zz_pzhGjBEV@4MnhqPJrQaoehJ?;^7royg}DooKI7QMc2efB^e|_6OnCi#_oSZx$sE zYz`)lEk4J6`t+$hsYBG-*n`as)o8bxv2KoP%;ApIP*ht;xx}aS2KPrhR$z!{Hh;q-h zj4~tnwK&&AVd_!oLo@zx|0gTPW!py7(SN^WwpII&yttA3d+c;kH+N%&SG#0i) zr8})Hv_{l&r6`Ql(w(b{Vr7xy)%YpAWoPkfDkqp(PPwmlG?Q_u;O48k+Z&4ML%F^b z_t6~@usz|xGw;C)n4uXkcD!#-=z2a!BxmS_;cYrA{ZsKzNOC@irTsi^W7#S>*am>( zHtFOc;4A0FPPiZ0R}=;8Rss0jL2!bktT&H8yAe#Xizo-2Co&zEyTn>WEkgza+{&Ottc$?R&-zn7ead>>UxQzYf`0a?!7sYv z4_nSf?az|?^4;*~;@&&=iW*NH@8^>Bv;-5Ar}ai$%5D8u>f>uYUB1!Dy`+AYiQfjh zB*4ski-i9%AA`ti2RQu*{CLMoVOiiMs3bXm|JrbarMur-&*crcULR2+LxIrHBoGC? zQB=uBBDJb^jKZofEd(g!bbG&OpN7|gAEc;<+rZS(VlHw`YbLR0&YEA{^9uHQtG;J# zm6r>t!`Z%8@GLH!zd#M<^FtqR$zn5bsPn{Xd`m2pNqM_TR51OBISP!==?(s4xT&a~ za~T#5cPuMLmILV>Qs>e}C|P{Hh|D9C`qy#|%7xK!=m)koHV$x~Ic`AYa5EnU)*lx2 ze^@V4fZfZxnE+M}#h)mZ!O%rx`*nM~ON-~KcI%^s(OgBhlt-QZ*6P8{-T72jFxP&a z7c=}Djn~4(x@@CpHZ}vCMNf=t$zYBuKKR~M|D8z)nFV3fGj(-p178NjT5Z1xZ8i#6xO~pNeMIvmQ{|TQ-{M>bj)Av*m-zj= zD19qCJ3Fc5)noy_N`*oQ2;cTtfv*K>R#us|>0z8dizW*^e-6|uqdL#g0H`~{zA{@) z7YoFK#e<;PIAoDc^0}PEJ+MjSyNxvb&jZ+?-8B-RX7Yn|ll)-q(@@jOf1cA_?>h^Q zrjdDHZ0+ALeEaf=x0=Kk*7^ToI^&Ebx0=49x0kcR|2B>XBmZAbQ6g&+f#!coigZvL zS0W z5wcR$t`Ed~AS3lp6_T{~Zz_oz^PV0UhiV7E{fSbSo6ybY!_0w&{fxOF{2I3WX2trZ zr~L4fEC{!0#%a`duX8u^ z`c8^Ky#R4#$q*P*6CTW-=y#N=+>D|ZRPOp+EK!xxALZK_MGxF3>WJx01PuAZv15eR zor|Wfn~%%A!;4KaIMf21!R*>dQbCOsE1x40mwfQ?XqXc<2HrC7815|!9mR!yjM&Ik ziDjk(KU0@&-BNDsVL_U}lnB&xRD+&}D8yVomRTAC(PcZt@lW=w?@hU*Rt+MPAP2_O zizh=GcYgqxTv?Dg5ByJBDt)+9!FLsg|BN;Kp`@iPvN~XY?KhwQ<3IGF z<+%m~g&2a3{OuKYy&yB%W~L?5WlqSbF>ON;@HxV_&bLfmI>|a(@5_4cLTy3;c~KmK*mZ-~qdl_*aUsk6C#N&Yu}Z^i6%AK?C+8 z<@$181Wf~b%gDJIZ$iF#EfE3RU+gkGMXwEi}N?DlL-Lj z72=KEpV%|E+B?RooL>> zDgZ1|vrE+H#ys-)wWaST?ZVsJ07UUiM4!+7tab1jdFYYxd!$Unfa+_O=JDDK&sWo$ z#V8Bg;(h4ic)@fh#fpB@(rrc4SLThI+kcQB%#q(aI{MU5)-VUNR9j}OvVa?T^|VdM z%8CP60HL4H4BboS_Pg40)SrLfW<`__Zuat3()-O6L+oR6Chk{%w~5*d&4D@tMmk9z zDlKR+x>l;dks?Fx>l2&5U2!kLy$4tkc4Tg564Hop3y)ehsl$KCOpni4;(@7p)(CA+ zJW`Agm@AO$a7KZpRQ3 zQ#kCA>2XCyM&53Mn|&hynj4`(ZB3)sAm%ZoAFc0RRPa>tj7RG46S3J1JE|5&GNV_M zwr;i>pL+OZxCjqnjj(=^E>5L^b5HyNVfXG1G08KFTOQTwi5SjZ#fl@9N8~Fye^-k+ zb@Y8r;&*2kv9tRCmid-Aw7mNW6mXj$FQ*(LqQ8EXw`fAh4R--G5s-V}-0a}sAS>SI ziIR#+{~ac=tT!nT!utWbX&dN#_-K z^(FDozYSm5UzFlp+F{0lr|}sCPl7w#e@HJBH!f_krER?-j?%@`*>>L?t*Zo;VrR== z8a)v}@fz6zeBS`iPkT5xdRU=}h?Hh8`hLiWK@AG{1zh!xVSA(2B#=S1t}|jbbF_@Q_I)7o z2JIDyU0>>ZT3Q~(j-GgS!|xX0!P|9CzAs7qc5}Qi5@)9P=WobWkeWtYxY}vZBDaH0 z)TDvzJGrnxmMe6YcHD3IILp60-R_zpkI)rw)JE$vJh?bHVjR%8c=wB#IR@YDXb(Ve z3yfx*2<*`5;X2pm^=sqSLNmxpg{`*GXWxbnxPl0j07<3bT9Yp2bJc z0B;1((YYG|8cJSXxAtin6`gAe+>@1sCYI^xclY%TGy84u4}O1so6HG*3k}`edUq|T zpO|-cr`VHO`kT4udZACNGbf!*OGGr^dbgrR8OqpxwZoibZ!HP{zAZ zC^RIJ7-`YM0`b2z*HM3}xMv7%R1*&Vp}nJPunlTIi!(So1%`?_j-(;s;R^?=LoZ^* zcNRW_6!!wINZ~fe0Z0a9#m17Gz~}rBT>;kjMZ`5R{`SEwjl8(q6Uc>qGPbBvD&{@EC`RAbtFLt= zSWtMyJ()}(HbODYYGt!L0FlBV35ewk{xXf$SHEFplk_s65n~ijGzQIr!MX$j7YG=z z%d+%U$0*&PiTG|@c7@a`yyKVE;Ja(BVAlNj*xPjbEiYK9t3gf8`fBtEH@NV_z0NlF z-p3XlZ|~}5x_4kIMaXfuYvmqt;V?6_g_ztib0f`Bjnzx z7Tg$={QFI<89}?Q&sN!(RUdK-CL{;BLNuvjbgJryX^)RHz;z%<@@{W`FBfg&mFB&h zQXk|jKG!SLM=dQa#{0Z|QrB;rfEc(z5xO5@YyV^LfYk4^UH>1D7%i(F6M?)Bws%Ib zGQC8|=@uQZ7WH?Y_I=%V&B;b3FGH6YLn<6cNTV5qbwuo+J|)md70WCqECr`ZFPHg{ zl9GPupNqsnrGd;^e5ReM{PMTXl>i&{udZOo7|cBM!Dc7-wB9PdBZ~fh6e(1HfST0r z=~3x6tGZc3X&$V`%P`pZ1#!`~1Y$8L|pv znYqO855*VWtgJpgn_f_HBF(iuP8NbCB!D|R^kZ)dfRUtaII)P7qL8y_N^i-FbC2^) zQ^mWsM$uOG7}W@@+%pYBX6__SCVe%wIwl?F3j*ivI*`|PDH6c>UM(G+my!1zetn>} zr8#YXf1Bg+V{MU{<}p_na2A-u{PVkaSHKfG-vdHyldn9;aTeoXFpPTe=+S~~NgCB; zjUb>L%k0$4QjjBgcOJYX{q)uLeb^OdnBnS4DYSxV-8e(iee~*is|DxEF54^BgeQZo zt*v~o$M|~9q59yeOm?tosd((zZsx`tbp)#0^}4Ml?X)&IrgMDKOH6PXo4wB z1J@ivRrw~&J-heq6&0vXnUFtN3uu7tK*2Fuq`;?w5q=EoM{=w-sqgMqP;@D}cDVhL zdQ_&sFW7y2D0r-Jx}I;32~TH!P~X|h@aO4%L%$lrahC$x-~xc2!DDNR9?U6)VQ)-^ zeCQ@2NnhU&;D6E(tbKo3U;+dxbBv>gHlWF>tRDa&${b_044*d=u-ad5u!94A&o3IC zee$&-bw6EZX1NgT+m^2^H>yQJbgU|L|2kO$)nP(WY^k_jEOan+3g1%**5mr&$d}t_ zdCatG*+Jyo;5yfOt^Pc0-|D`_@e})g22CSzN2Fxe@cm)Io}y3+elQl;Qz`}NUATJK zYSj>1@N|Fy3jll98sXgK1E(wW*LjUg6~S;Ktx$dpOw_&yC%@=#HC_qQcK_;1^90-E zm|2P6EUFCw_3N-cXyi+mL<9(9z!0F)hpfvtS8=qZ5jypDFFbe6SAJLygfd0TsH_`X z_etEA$x8kvUv*CdBbl6j;uw5qz;s@cCF<-id}AU3nSG1iFv zTS7&*$)S#R1iuiEMoQ|(pn`%Y++V=OI+?DnCI$uxBI2wqE?&iCKQ}}S^+6Lz3bX*G z9v!>caqrSZO=<8Ah+ z^j}Od#JmJ6q_cyPcPT9-0N_HZvIuJR>}DSE$YJBf={f@hWTNi)bXUou8Dhg^><(r_9h8IpF|$zd+Rr9WBmn>FWxpER4O4tg&?1ZE^z{Tf(&FCqMS| zXG-}@AOW~Ewr!)-u>g#$jyGwyXnQ`*!Cr@-62yu={Bxe|TbIvcrM1THWH@-Oz~wii z0a;FPjRxdRq5G>sRg`EvuK=~}=X;}|K4ra-w5ZUB#1IyiVbFIr#@wX;8W&8%ZaWV2 zd8%3D6iKio&%zM)liZ5y2ERPN_o4o{Fwx#S6@#z&0vGS9K*hU+X`s8yT;3Llh>nS& zq4s==7NQ##d^XG_cYvNFt*$d;p_3YO7YeU$0Nj@cx{PXcu-4bJva^+JY`#YT8zllv zl{G#->DiR2yba$?gPi_aYw!x!9Qg_}oq>54*WOB}9$KZa0537-vmeI!Zy?7z2k+m} z%6c`}u0Dbm8rAJ?wDT)4_BQ1gd0i@TB^Ye&EEiQ3rHk3+eG>mG+*R{MZQdGO#ApJ5 z(f09n5hcY@`1wflw_#D?=JST353JVujps+E zDC{}7#A5hh#efNfaB+`Qgdh=W!1(t7Sc@k;c*Xa?v#a?}{MsKds9-Zix$9AXu0VLV zaBd?<{G6f!U7w89+O zC<~N}p^g_CK;3jW=i8exBZ3(1dVJbDvC#Fx*ROrxua^JN-Wv+Gh@Amd+Bjo}d1&Ss1cfU; z+7(}Db@^wHWS*i}=;N_IQ4Bi9N#viAi@RTHrG%1s7)uYqxBG z3RYzPs_=x5`i7Y#6@C8d%tCun)(vpMDT6{NnWbMvL2L$IrwsU5F;oj$Iz`B=nWX&P zRS|M>)9Jr8n`VPv4t4hY^PL4%2i7m(`4XoGA?v+&Jph;i@lSL)8NzvnVoX7k@>YzD zG=J$~8^_p1qgAGZCzG%5$Cdxr$#sS`m38YAh=S4*Q3Ry(ITlbs{>Pv$Zboagwfk6H3OwN_^nnwRY1YeG%$4&?>f!nbUeG z=`Lktbm|0^A{I)VfGKRqP@kmFFGWAT^84{Vw5syF$xQ3OZ4V*H%jjw6GlQ zku@B~TCl%7mTD3shMeS(5euGd-#P%WMn1PW(u_zI+BIP!Z_gBFdk@w9CB9j`8PKEB zVNk5|;!35%i?MS?#;Fx9GSQc!^KR8BF)4|IQv%{#2=ORsslD4N%HKtkS!oo&tU2kh znI=@*i&zE~CI3M!0AG2KVhtQP6YZSg-SogdNM?RBG^V!SEbnzDI&51Hz86=J^W z+0`20J6_3OY-%9Pu{crdAu~z!M z$xjoh->|pX*&pA1>Mxh*cy|6pL4)<0x!q8p@GktH#I5=$(7E26d{wId0JO;;Lrxf> z?7um$$%?9}85DWqV84{IGZ6GSDkZy#;lC%m9zEWV6ud8Ju{lC^NoU>kO-kjBourUi z(S@cF|IR>Dw97PEx$MgOcK((`shoyR^>Kkfb-de`{KpXxP0=M{;07???Y|(}q@C^} z>F92lnZU1qjwt$n0su63)mo!aVr9Pn<%w2P>q=II`Gv*y0IVe8f5@XdkEMx}03=0C zON-XeGdZaW1G@@A!1sS%&C4L4L4n^q0Av+7@jsJavYYPezMHQJ z87HVJGCXlNIRRoy_?6J|NgJSLY?6_l{J!o8S0z-o{L1fm>z68yVfzr2ADOaiI3| zj}c{6yu#hw;aw1jdp4}o2-;zqOcKJZ(T^o9Ddn1JB9YI74iYuL*OXjzTFG!pR5G8u zbf@dfoDy%AyWoGS*lE8@^7%Ra^0}In{yUPlb;SyNkG7CzTzJv4JsSUFYo<}(?C-?q zMr!$@9(~pA=8I!$>K&m|nYw5Ldpo<|?8?f3@y~ZA-w_~P;HNw1Tc94m$N(ayrl%zZ zR{fypMIy4av{dJb&^hiJI1S4k*NZ=nZ^rKc1_}FNC%rxApEdri@u1?}<|p2V)>Jig zE_M8!(aZ3)>b^zd%nCfa9>B_o`pK0?LLi92v?k+E1KW73*Iqcq zI{jTT{GqJASKTxEGjGEVjJF-euaxkA5b>4FrYI`<=B8y%S%{G<6yBrEd1?SYD^ z4A52G(n71a>6Z1e_S}@lICvcD2zqn_=`>H^-qKN{8?M~Ho)qSvP+;T`#aU~rD_N9 zP1(<5KeXH7>Zkf)FVzTJKIUHvxRNu};Lu`Vx5R4Y5&hER7vbz-E>wT1yfHIk zF2n|lf3^|QTAcyLS(h|xY;@Gl$ud}`Wiga?nQg?lXP z*N^7={76+t{Q*W-O``olLqi316xps{&bv{8btk7iUEC2rn+eaen#`Twa2lw0thitB zm`Zf~0ViFl=`xz$A&y@?7<+j$BsEw7uUOxaRfXIdlaL;t8gHu(-mC`34F0S*xG+~& z;UD&xr$li67>>eg4p#R%ggIWF9DDPZ=L$KeVsmZQx|1G-`oh5znp8V^%goND%TFn6 z`gG+f!Ba3Ob?$LV{cIq4yO--ijIg!}#r&Pb9~3R%?B?!$dE3RnU5>St_IY1eRxd;P z;fU|NaV3xP8*VlZyDDFuQeN!s!8wabpw$h~J)Na{9+xaFDxAhbUY4&M2T5Ie-jw3w z5xFy#tt~AFSBwGQ`BF@bF_-`vK{l}k5ML<+*bCUVixO8~YJd>-ETYc!3mqm;0g)jU zpdn`!_0#s4^wNFJ6R6gPO4ekB1K`kaXZyqwgL(Azu)X@&-C{)C`!YAI-q-_^Zle{> zTZF@v%?DurdqN_>k0*&ChRC@Kj0SRYmG?S7V94y=Z9%Sy;YXfHpfhf|=>LxOR`AKx z37pwhpQRJ%w@Tc=P3|`WALT@3)YCrf#N2$R@WggJB4%|0W-)e$cdrLtD4y}VqkCcL zTr$rCw`-ZRaKGxz@@Hq@{HF5_ST!{DsZ5uI**@LcjiT0x^&qZy+4~YB=GI5b)=O1V z&JK@&aJH9zX7Y!K;?G&!!AL&unE+)g#-i|X~e?bZlRWmgk>gzl5%!GID+*y=;0l#I-7Evjw z75LMyIHTALzwBh7FdZ+x3#+m}_nPbSa_C-Fzpw@ub&Fv@3lPQc3+e-*D=^|DlP6i1 zXO?v<^Yb7+F^xPKgVf;~fuuL_CnCOHJw@15Ej`$G^LwF^#hLZX1{VqCr{^P|trj~K z{G(qgtUH|+F+NqnEceV9W(+bEH6j89TNvN%Q{otVFV>C>cQA2)g8FZ`;NYWYAL|$V z%g*jh!o$`qy_Js-b8~6aL`G5elfP6x7S|NLOE!v+grcyAF0Fo4Pl0>i#B=#tw0YfE z+HQkpbL-f*D|)m)rei+c-e)O7qi)8ENO`=wxA);jWZnz*Zdby21;cQJA|Z!AY-9_< zc8_?z6-QIiM+mu}0@5Whyo#lwKITi@xkM3h*Vq=a{JF|~EZg7;A{wO48UP{GDIO51 zMj}Mwr?8|UM}QL8!0@%l2nFZeHck)+m*LVG3$%xnxu1h|+tah+p6C^)6SSS_jS5gz$Z` zFvo=QJJFsZBBca}K<>D99)FKsz+$y+5#3^V3T@w7D!eop8z}a~0#mkJM;^&}k%<-Y z;e@2tPaxRjb%A$h)YcTH+2FX{3UK_Ya19dCjZ!9r$!+cyH^r^(w?2w&M;@3=_&}D~h6isOiewU}{bd8L4iaRv8G! zknB+pIF2_&86aFeBl3e7g}>8%0zq>B=aRn-{S7WlcvVyfc>rM*K)O+o9ZU8Rlb26p zi}VV=IyEV+@&azTW3+g6wyxUI%0@@qX6?G+H{Q|$FRSlH#y4(Ub`^Dn>B21)mVuzW+)ZO)85NuG z0=Nt3&ziWQ3%;{eRN|$>=^~$%qog2+WMT653V7|aa{rgluAhw=(rLY_H3BMH)x^~b z)gpNf9`EvxGT4274h(;1|B3-AKv9HhuY0-HZvh!7AyX5wir@~32E*%`Ws=|YqJKV` z&yaq~MUieWL4i3OBe;1K&$(k zpae?$P2LT^KnyF3cy+1`Gz7H#FAQmyt3XE*Z_dkSxUiKr{UY*|1h5SdR+}9b7z3Dt m{J$IUZ!7q-`H(E6GP;FnfMCc?IkgMkZew-Ul4|aD>puWNY`kFr delta 20813 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

sG& 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

a({b?i_sSy3GWIiO~EDpq+ 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 Date: Sun, 8 May 2016 22:58:21 -0500 Subject: [PATCH 23/38] Fixes borg languages --- code/__defines/species_languages.dm | 1 + .../mob/living/silicon/robot/robot_modules.dm | 12 ++++++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/code/__defines/species_languages.dm b/code/__defines/species_languages.dm index 2dec4406a4..b3d0703d91 100644 --- a/code/__defines/species_languages.dm +++ b/code/__defines/species_languages.dm @@ -29,6 +29,7 @@ #define LANGUAGE_ROOTSPEAK "Rootspeak" #define LANGUAGE_TRADEBAND "Tradeband" #define LANGUAGE_GUTTER "Gutter" +#define LANGUAGE_SCHECHI "Schechi" // Language flags. #define WHITELISTED 1 // Language is available if the speaker is whitelisted. diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 69371109ec..e6c7546e09 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -23,7 +23,7 @@ var/global/list/robot_modules = list( var/hide_on_manifest = 0 var/channels = list() var/networks = list() - var/languages = list(LANGUAGE_SOL_COMMON = 1, LANGUAGE_TRADEBAND = 1, LANGUAGE_UNATHI = 0, LANGUAGE_SIIK_TAJR = 0, LANGUAGE_SKRELLIAN = 0, LANGUAGE_GUTTER = 0) + var/languages = list(LANGUAGE_SOL_COMMON = 1, LANGUAGE_TRADEBAND = 1, LANGUAGE_UNATHI = 0, LANGUAGE_SIIK_TAJR = 0, LANGUAGE_SKRELLIAN = 0, LANGUAGE_GUTTER = 0, LANGUAGE_SCHECHI = 0) var/sprites = list() var/can_be_pushed = 1 var/no_slip = 0 @@ -479,11 +479,12 @@ var/global/list/robot_modules = list( LANGUAGE_SOL_COMMON = 1, LANGUAGE_UNATHI = 1, LANGUAGE_SIIK_MAAS = 1, - LANGUAGE_SIIK_TAJR = 0, + LANGUAGE_SIIK_TAJR = 1, LANGUAGE_SKRELLIAN = 1, LANGUAGE_ROOTSPEAK = 1, LANGUAGE_TRADEBAND = 1, - LANGUAGE_GUTTER = 1 + LANGUAGE_GUTTER = 1, + LANGUAGE_SCHECHI = 1 ) /obj/item/weapon/robot_module/clerical/butler @@ -623,9 +624,12 @@ var/global/list/robot_modules = list( LANGUAGE_SOL_COMMON = 1, LANGUAGE_TRADEBAND = 1, LANGUAGE_UNATHI = 0, + LANGUAGE_SIIK_MAAS = 0, LANGUAGE_SIIK_TAJR = 0, LANGUAGE_SKRELLIAN = 0, - LANGUAGE_GUTTER = 1 + LANGUAGE_ROOTSPEAK = 0, + LANGUAGE_GUTTER = 1, + LANGUAGE_SCHECHI = 0 ) sprites = list( "Dread" = "securityrobot", From a9c65176dd366f20f314df1aeeb7e9e837f43555 Mon Sep 17 00:00:00 2001 From: silveryferret Date: Mon, 9 May 2016 09:45:53 -0500 Subject: [PATCH 24/38] Removes the "Subversive Elements" Cent. Com. report As title. --- code/game/gamemodes/game_mode.dm | 51 -------------------------------- 1 file changed, 51 deletions(-) diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index f67e28bb1a..2aa1d2b024 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -201,7 +201,6 @@ var/global/list/additional_antag_types = list() display_roundstart_logout_report() spawn (rand(waittime_l, waittime_h)) - send_intercept() spawn(rand(100,150)) announce_ert_disabled() @@ -373,56 +372,6 @@ var/global/list/additional_antag_types = list() /datum/game_mode/proc/check_win() //universal trigger to be called at mob death, nuke explosion, etc. To be called from everywhere. return 0 -/datum/game_mode/proc/send_intercept() - - var/intercepttext = "Cent. Com. Update Requested status information:


" - intercepttext += " In case you have misplaced your copy, attached is a list of personnel whom reliable sources™ suspect may be affiliated with subversive elements:
" - - var/list/disregard_roles = list() - for(var/antag_type in all_antag_types) - var/datum/antagonist/antag = all_antag_types[antag_type] - if(antag.flags & ANTAG_SUSPICIOUS) - disregard_roles |= antag.role_text - - var/list/suspects = list() - for(var/mob/living/carbon/human/man in player_list) if(man.client && man.mind) - - // NT relation option - var/special_role = man.mind.special_role - var/datum/antagonist/special_role_data = get_antag_data(special_role) - - if (special_role in disregard_roles) - continue - else if(man.client.prefs.nanotrasen_relation == COMPANY_OPPOSED && prob(50) || \ - man.client.prefs.nanotrasen_relation == COMPANY_SKEPTICAL && prob(20)) - suspects += man - // Antags - else if(special_role_data && prob(special_role_data.suspicion_chance)) - suspects += man - - // Some poor people who were just in the wrong place at the wrong time.. - else if(prob(10)) - suspects += man - - for(var/mob/M in suspects) - if(player_is_antag(M.mind, only_offstation_roles = 1)) - continue - switch(rand(1, 100)) - if(1 to 50) - intercepttext += "Someone with the job of [M.mind.assigned_role]
" - else - intercepttext += "[M.name], the [M.mind.assigned_role]
" - - for (var/obj/machinery/computer/communications/comm in machines) - if (!(comm.stat & (BROKEN | NOPOWER)) && comm.prints_intercept) - var/obj/item/weapon/paper/intercept = new /obj/item/weapon/paper( comm.loc ) - intercept.name = "Cent. Com. Status Summary" - intercept.info = intercepttext - - comm.messagetitle.Add("Cent. Com. Status Summary") - comm.messagetext.Add(intercepttext) - world << sound('sound/AI/commandreport.ogg') - /datum/game_mode/proc/get_players_for_role(var/role, var/antag_id) var/list/players = list() var/list/candidates = list() From 1f8915ca879d2d3d87b9e71fbe493e58a4bb6f74 Mon Sep 17 00:00:00 2001 From: Mark9013100 Date: Wed, 11 May 2016 00:09:08 -0400 Subject: [PATCH 25/38] Edits the sprites of the vials --- icons/obj/chemical.dmi | Bin 34107 -> 34092 bytes icons/obj/forensics.dmi | Bin 16704 -> 16732 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/obj/chemical.dmi b/icons/obj/chemical.dmi index 8ceefe32cb2f321ec54a04b5a1ce9a2110c43baf..2fa64c7ade96cd233b1e48b17f4306d30f416d75 100644 GIT binary patch delta 26138 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 delta 26259 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 GLjM;$n3l2t diff --git a/icons/obj/forensics.dmi b/icons/obj/forensics.dmi index 63225c30125c65f376760705864a9194d5faeb3d..f91d974309b5007b4e41359de7f07a48c60a3463 100644 GIT binary patch literal 16732 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 Date: Wed, 11 May 2016 07:22:29 -0400 Subject: [PATCH 26/38] Fixes issue #1608 --- icons/mob/ties.dmi | Bin 15833 -> 15893 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/ties.dmi b/icons/mob/ties.dmi index 72c63543aba67a840417b6f3467f07cd9ace0cd6..a2239630b8645d3e1adb6f5e85cd30ee03f98133 100644 GIT binary patch delta 6389 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 delta 6352 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 Date: Wed, 11 May 2016 15:53:51 +0100 Subject: [PATCH 27/38] Adds changelog for some recent stuff --- html/changelogs/Yoshax - featuresandfixes.txt | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 html/changelogs/Yoshax - featuresandfixes.txt diff --git a/html/changelogs/Yoshax - featuresandfixes.txt b/html/changelogs/Yoshax - featuresandfixes.txt new file mode 100644 index 0000000000..14389bfc92 --- /dev/null +++ b/html/changelogs/Yoshax - featuresandfixes.txt @@ -0,0 +1,40 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +################################# + +# Your name. +author: Yoshax + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - tweak: "Doubles the maximum length of records and names to 6144 & 52, resptively. Also increases book nelngth to 12288. (All numbers are in charatcers.) + - bugfix: "Makes various services in the antag uplink purchasable once again. This includes the fake crew arrival." + - bugifx: "Neckgrabs will no longer force people to the ground. In addition, weakened people can no longer resist." + - rscadd: "All vending machines now have a small chance of vending an additional item." + From fa8bb179bf3c86fc31389adccdd6524cd32b22f9 Mon Sep 17 00:00:00 2001 From: Yoshax Date: Wed, 11 May 2016 17:17:43 +0100 Subject: [PATCH 28/38] Fixes #1586 --- code/game/gamemodes/changeling/absorbed_dna.dm | 4 +++- code/game/gamemodes/changeling/changeling_powers.dm | 2 +- code/game/gamemodes/changeling/powers/transform.dm | 1 + 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/code/game/gamemodes/changeling/absorbed_dna.dm b/code/game/gamemodes/changeling/absorbed_dna.dm index 2527f90697..bdf243b412 100644 --- a/code/game/gamemodes/changeling/absorbed_dna.dm +++ b/code/game/gamemodes/changeling/absorbed_dna.dm @@ -3,10 +3,12 @@ var/datum/dna/dna var/speciesName var/list/languages + var/identifying_gender -/datum/absorbed_dna/New(var/newName, var/newDNA, var/newSpecies, var/newLanguages) +/datum/absorbed_dna/New(var/newName, var/newDNA, var/newSpecies, var/newLanguages, var/newIdentifying_Gender) ..() name = newName dna = newDNA speciesName = newSpecies languages = newLanguages + identifying_gender = newIdentifying_Gender \ No newline at end of file diff --git a/code/game/gamemodes/changeling/changeling_powers.dm b/code/game/gamemodes/changeling/changeling_powers.dm index 7e6563ca4b..ae5ede1566 100644 --- a/code/game/gamemodes/changeling/changeling_powers.dm +++ b/code/game/gamemodes/changeling/changeling_powers.dm @@ -85,7 +85,7 @@ var/global/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","E var/mob/living/carbon/human/H = src if(istype(H)) - var/datum/absorbed_dna/newDNA = new(H.real_name, H.dna, H.species.name, H.languages) + var/datum/absorbed_dna/newDNA = new(H.real_name, H.dna, H.species.name, H.languages, H.identifying_gender) absorbDNA(newDNA) return 1 diff --git a/code/game/gamemodes/changeling/powers/transform.dm b/code/game/gamemodes/changeling/powers/transform.dm index 793b3a42ea..0eec3ed213 100644 --- a/code/game/gamemodes/changeling/powers/transform.dm +++ b/code/game/gamemodes/changeling/powers/transform.dm @@ -39,6 +39,7 @@ H.b_type = "AB+" //For some reason we have two blood types on the mob. for(var/flavor in H.flavor_texts) //Nulls out flavor text, so we don't keep our previous mob's flavor. flavor = null + H.identifying_gender = chosen_dna.identifying_gender src.real_name = chosen_dna.name src.flavor_text = "" src.UpdateAppearance() From ea8d63e9fd00fdfb14a8ede44dfd2ba073b7d610 Mon Sep 17 00:00:00 2001 From: Anewbe Date: Wed, 11 May 2016 18:06:57 -0500 Subject: [PATCH 29/38] Adds Siik'Maas and Schechi to AI language list --- code/modules/mob/living/silicon/ai/ai.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index ee45284925..9cbe7e1221 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -151,11 +151,13 @@ var/list/ai_verbs_hidden = list( // For why this exists, refer to https://xkcd.c add_language("Galactic Common", 1) add_language("Sol Common", 0) add_language("Sinta'unathi", 0) + add_language("Siik'maas", 0) add_language("Siik'tajr", 0) add_language("Skrellian", 0) add_language("Tradeband", 1) add_language("Gutter", 0) add_language("Encoded Audio Language", 1) + add_language("Schechi", 0) if(!safety)//Only used by AIize() to successfully spawn an AI. if (!B)//If there is no player/brain inside. From 761ea91a7009d24aa1b28ba266a990afe48a0a0d Mon Sep 17 00:00:00 2001 From: Datraen Date: Wed, 11 May 2016 21:14:33 -0400 Subject: [PATCH 30/38] Changes the colors of the occupation setup tab. --- code/game/jobs/job/assistant.dm | 2 +- code/game/jobs/job/captain.dm | 4 ++-- code/game/jobs/job/civilian.dm | 18 +++++++++--------- code/game/jobs/job/civilian_chaplain.dm | 2 +- code/game/jobs/job/engineering.dm | 6 +++--- code/game/jobs/job/medical.dm | 12 ++++++------ code/game/jobs/job/science.dm | 8 ++++---- code/game/jobs/job/security.dm | 8 ++++---- code/game/jobs/job/silicon.dm | 4 ++-- .../preference_setup/occupation/occupation.dm | 16 ++++++++-------- 10 files changed, 40 insertions(+), 40 deletions(-) diff --git a/code/game/jobs/job/assistant.dm b/code/game/jobs/job/assistant.dm index 9ec3d2842a..ff87fb58e4 100644 --- a/code/game/jobs/job/assistant.dm +++ b/code/game/jobs/job/assistant.dm @@ -7,7 +7,7 @@ total_positions = -1 spawn_positions = -1 supervisors = "absolutely everyone" - selection_color = "#dddddd" + selection_color = "#515151" economic_modifier = 1 access = list() //See /datum/job/assistant/get_access() minimal_access = list() //See /datum/job/assistant/get_access() diff --git a/code/game/jobs/job/captain.dm b/code/game/jobs/job/captain.dm index c594256002..d3a9246238 100644 --- a/code/game/jobs/job/captain.dm +++ b/code/game/jobs/job/captain.dm @@ -10,7 +10,7 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1) total_positions = 1 spawn_positions = 1 supervisors = "company officials and Corporate Regulations" - selection_color = "#ccccff" + selection_color = "#1D1D4F" alt_titles = list("Station Administrator") idtype = /obj/item/weapon/card/id/gold req_admin_notify = 1 @@ -63,7 +63,7 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1) total_positions = 1 spawn_positions = 1 supervisors = "the captain" - selection_color = "#ddddff" + selection_color = "#2F2F7F" idtype = /obj/item/weapon/card/id/silver req_admin_notify = 1 minimal_player_age = 10 diff --git a/code/game/jobs/job/civilian.dm b/code/game/jobs/job/civilian.dm index faaf222adb..64dc22615e 100644 --- a/code/game/jobs/job/civilian.dm +++ b/code/game/jobs/job/civilian.dm @@ -8,7 +8,7 @@ total_positions = 2 spawn_positions = 2 supervisors = "the head of personnel" - selection_color = "#dddddd" + selection_color = "#515151" access = list(access_hydroponics, access_bar, access_kitchen) minimal_access = list(access_bar) alt_titles = list("Barista") @@ -37,7 +37,7 @@ total_positions = 2 spawn_positions = 2 supervisors = "the head of personnel" - selection_color = "#dddddd" + selection_color = "#515151" access = list(access_hydroponics, access_bar, access_kitchen) minimal_access = list(access_kitchen) alt_titles = list("Cook") @@ -64,7 +64,7 @@ total_positions = 2 spawn_positions = 1 supervisors = "the head of personnel" - selection_color = "#dddddd" + selection_color = "#515151" access = list(access_hydroponics, access_bar, access_kitchen) minimal_access = list(access_hydroponics) alt_titles = list("Hydroponicist") @@ -97,7 +97,7 @@ total_positions = 1 spawn_positions = 1 supervisors = "the head of personnel" - selection_color = "#dddddd" + selection_color = "#515151" economic_modifier = 5 access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station) minimal_access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station) @@ -127,7 +127,7 @@ total_positions = 2 spawn_positions = 2 supervisors = "the quartermaster and the head of personnel" - selection_color = "#dddddd" + selection_color = "#515151" access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station) minimal_access = list(access_maint_tunnels, access_cargo, access_cargo_bot, access_mailsorting) @@ -152,7 +152,7 @@ total_positions = 3 spawn_positions = 3 supervisors = "the quartermaster and the head of personnel" - selection_color = "#dddddd" + selection_color = "#515151" economic_modifier = 5 access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station) minimal_access = list(access_mining, access_mining_station, access_mailsorting) @@ -191,7 +191,7 @@ total_positions = 2 spawn_positions = 2 supervisors = "the head of personnel" - selection_color = "#dddddd" + selection_color = "#515151" access = list(access_janitor, access_maint_tunnels) minimal_access = list(access_janitor, access_maint_tunnels) alt_titles = list("Custodian") @@ -217,7 +217,7 @@ total_positions = 1 spawn_positions = 1 supervisors = "the head of personnel" - selection_color = "#dddddd" + selection_color = "#515151" access = list(access_library, access_maint_tunnels) minimal_access = list(access_library) alt_titles = list("Journalist") @@ -243,7 +243,7 @@ total_positions = 2 spawn_positions = 2 supervisors = "company officials and Corporate Regulations" - selection_color = "#dddddd" + selection_color = "#515151" economic_modifier = 7 access = list(access_lawyer, access_sec_doors, access_maint_tunnels, access_heads) minimal_access = list(access_lawyer, access_sec_doors, access_heads) diff --git a/code/game/jobs/job/civilian_chaplain.dm b/code/game/jobs/job/civilian_chaplain.dm index a9f441dd22..cf162c1494 100644 --- a/code/game/jobs/job/civilian_chaplain.dm +++ b/code/game/jobs/job/civilian_chaplain.dm @@ -8,7 +8,7 @@ total_positions = 1 spawn_positions = 1 supervisors = "the head of personnel" - selection_color = "#dddddd" + selection_color = "#515151" access = list(access_morgue, access_chapel_office, access_crematorium, access_maint_tunnels) minimal_access = list(access_morgue, access_chapel_office, access_crematorium) alt_titles = list("Counselor") diff --git a/code/game/jobs/job/engineering.dm b/code/game/jobs/job/engineering.dm index 9c59f89025..707bab0899 100644 --- a/code/game/jobs/job/engineering.dm +++ b/code/game/jobs/job/engineering.dm @@ -8,7 +8,7 @@ total_positions = 1 spawn_positions = 1 supervisors = "the captain" - selection_color = "#ffeeaa" + selection_color = "#7F6E2C" idtype = /obj/item/weapon/card/id/silver req_admin_notify = 1 economic_modifier = 10 @@ -58,7 +58,7 @@ total_positions = 5 spawn_positions = 5 supervisors = "the chief engineer" - selection_color = "#fff5cc" + selection_color = "#5B4D20" economic_modifier = 5 access = list(access_eva, access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_external_airlocks, access_construction, access_atmospherics) minimal_access = list(access_eva, access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_external_airlocks, access_construction) @@ -95,7 +95,7 @@ total_positions = 3 spawn_positions = 2 supervisors = "the chief engineer" - selection_color = "#fff5cc" + selection_color = "#5B4D20" economic_modifier = 5 access = list(access_eva, access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_external_airlocks, access_construction, access_atmospherics, access_external_airlocks) minimal_access = list(access_eva, access_engine, access_atmospherics, access_maint_tunnels, access_emergency_storage, access_construction, access_external_airlocks) diff --git a/code/game/jobs/job/medical.dm b/code/game/jobs/job/medical.dm index 91fe29cc6c..8a769df0b5 100644 --- a/code/game/jobs/job/medical.dm +++ b/code/game/jobs/job/medical.dm @@ -8,7 +8,7 @@ total_positions = 1 spawn_positions = 1 supervisors = "the captain" - selection_color = "#ffddf0" + selection_color = "#026865" idtype = /obj/item/weapon/card/id/silver req_admin_notify = 1 economic_modifier = 10 @@ -47,7 +47,7 @@ total_positions = 5 spawn_positions = 3 supervisors = "the chief medical officer" - selection_color = "#ffeef0" + selection_color = "#013D3B" economic_modifier = 7 access = list(access_medical, access_medical_equip, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics, access_eva) minimal_access = list(access_medical, access_medical_equip, access_morgue, access_surgery, access_virology, access_eva) @@ -110,7 +110,7 @@ total_positions = 2 spawn_positions = 2 supervisors = "the chief medical officer" - selection_color = "#ffeef0" + selection_color = "#013D3B" economic_modifier = 5 access = list(access_medical, access_medical_equip, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics) minimal_access = list(access_medical, access_medical_equip, access_chemistry) @@ -141,7 +141,7 @@ total_positions = 0 spawn_positions = 0 supervisors = "the chief medical officer and research director" - selection_color = "#ffeef0" + selection_color = "#013D3B" economic_modifier = 7 access = list(access_medical, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics, access_research) minimal_access = list(access_medical, access_morgue, access_genetics, access_research) @@ -171,7 +171,7 @@ spawn_positions = 1 economic_modifier = 5 supervisors = "the chief medical officer" - selection_color = "#ffeef0" + selection_color = "#013D3B" access = list(access_medical, access_medical_equip, access_morgue, access_psychiatrist) minimal_access = list(access_medical, access_medical_equip, access_psychiatrist) alt_titles = list("Psychologist") @@ -205,7 +205,7 @@ total_positions = 2 spawn_positions = 2 supervisors = "the chief medical officer" - selection_color = "#ffeef0" + selection_color = "#013D3B" economic_modifier = 4 access = list(access_medical, access_medical_equip, access_morgue, access_surgery, access_chemistry, access_virology, access_eva, access_maint_tunnels, access_external_airlocks, access_psychiatrist) minimal_access = list(access_medical, access_medical_equip, access_morgue, access_eva, access_maint_tunnels, access_external_airlocks) diff --git a/code/game/jobs/job/science.dm b/code/game/jobs/job/science.dm index 1a2eacb528..99482457cc 100644 --- a/code/game/jobs/job/science.dm +++ b/code/game/jobs/job/science.dm @@ -8,7 +8,7 @@ total_positions = 1 spawn_positions = 1 supervisors = "the captain" - selection_color = "#ffddff" + selection_color = "#AD6BAD" idtype = /obj/item/weapon/card/id/silver req_admin_notify = 1 economic_modifier = 15 @@ -50,7 +50,7 @@ total_positions = 5 spawn_positions = 3 supervisors = "the research director" - selection_color = "#ffeeff" + selection_color = "#633D63" economic_modifier = 7 access = list(access_robotics, access_tox, access_tox_storage, access_research, access_xenobiology, access_xenoarch) minimal_access = list(access_tox, access_tox_storage, access_research, access_xenoarch) @@ -80,7 +80,7 @@ total_positions = 3 spawn_positions = 2 supervisors = "the research director" - selection_color = "#ffeeff" + selection_color = "#633D63" economic_modifier = 7 access = list(access_robotics, access_tox, access_tox_storage, access_research, access_xenobiology, access_hydroponics) minimal_access = list(access_research, access_xenobiology, access_hydroponics, access_tox_storage) @@ -110,7 +110,7 @@ total_positions = 2 spawn_positions = 2 supervisors = "research director" - selection_color = "#ffeeff" + selection_color = "#633D63" economic_modifier = 5 access = list(access_robotics, access_tox, access_tox_storage, access_tech_storage, access_morgue, access_research) //As a job that handles so many corpses, it makes sense for them to have morgue access. minimal_access = list(access_robotics, access_tech_storage, access_morgue, access_research) //As a job that handles so many corpses, it makes sense for them to have morgue access. diff --git a/code/game/jobs/job/security.dm b/code/game/jobs/job/security.dm index 4a9a1baed1..31884169f6 100644 --- a/code/game/jobs/job/security.dm +++ b/code/game/jobs/job/security.dm @@ -8,7 +8,7 @@ total_positions = 1 spawn_positions = 1 supervisors = "the captain" - selection_color = "#ffdddd" + selection_color = "#8E2929" idtype = /obj/item/weapon/card/id/silver req_admin_notify = 1 economic_modifier = 10 @@ -55,7 +55,7 @@ total_positions = 1 spawn_positions = 1 supervisors = "the head of security" - selection_color = "#ffeeee" + selection_color = "#601C1C" economic_modifier = 5 access = list(access_security, access_eva, access_sec_doors, access_brig, access_armory, access_maint_tunnels, access_morgue, access_external_airlocks) minimal_access = list(access_security, access_eva, access_sec_doors, access_brig, access_armory, access_maint_tunnels, access_external_airlocks) @@ -92,7 +92,7 @@ total_positions = 2 spawn_positions = 2 supervisors = "the head of security" - selection_color = "#ffeeee" + selection_color = "#601C1C" alt_titles = list("Forensic Technician","Investigator") access = list(access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels, access_eva, access_external_airlocks) minimal_access = list(access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels, access_eva, access_external_airlocks) @@ -134,7 +134,7 @@ total_positions = 4 spawn_positions = 4 supervisors = "the head of security" - selection_color = "#ffeeee" + selection_color = "#601C1C" alt_titles = list("Junior Officer") economic_modifier = 4 access = list(access_security, access_eva, access_sec_doors, access_brig, access_maint_tunnels, access_morgue, access_external_airlocks) diff --git a/code/game/jobs/job/silicon.dm b/code/game/jobs/job/silicon.dm index b64508499c..fb9aeb793f 100644 --- a/code/game/jobs/job/silicon.dm +++ b/code/game/jobs/job/silicon.dm @@ -5,7 +5,7 @@ faction = "Station" total_positions = 0 // Not used for AI, see is_position_available below and modules/mob/living/silicon/ai/latejoin.dm spawn_positions = 1 - selection_color = "#ccffcc" + selection_color = "#3F823F" supervisors = "your laws" req_admin_notify = 1 minimal_player_age = 7 @@ -38,7 +38,7 @@ total_positions = 2 spawn_positions = 2 supervisors = "your laws and the AI" //Nodrak - selection_color = "#ddffdd" + selection_color = "#254C25" minimal_player_age = 1 alt_titles = list("Robot", "Drone") account_allowed = 0 diff --git a/code/modules/client/preference_setup/occupation/occupation.dm b/code/modules/client/preference_setup/occupation/occupation.dm index 0b4abcdd87..f37f7631cf 100644 --- a/code/modules/client/preference_setup/occupation/occupation.dm +++ b/code/modules/client/preference_setup/occupation/occupation.dm @@ -61,7 +61,7 @@ . += "
" . += "Choose occupation chances
Unavailable occupations are crossed out.
" . += "
" var/rank = job.title lastJob = job if(jobban_isbanned(user, rank)) - . += "[rank] \[BANNED]
\[BANNED]
\[MINIMUM CHARACTER AGE: [job.minimum_character_age]]
\[BANNED]
\[BANNED]
\[MINIMUM CHARACTER AGE: [job.minimum_character_age]]
" // Table within a table for alignment, also allows you to easily add more columns. - . += "" + . += "
" var/index = -1 //The job before the current job. I only use this to get the previous jobs color when I'm filling in blank rows. @@ -76,7 +76,7 @@ //the last job's selection color. Creating a rather nice effect. for(var/i = 0, i < (limit - index), i += 1) . += "" - . += "
  
" + . += "
" index = 0 . += "" . += "" continue if(pref.GetJobDepartment(job, 1) & job.flag) - . += " \[High]" + . += " \[High]" else if(pref.GetJobDepartment(job, 2) & job.flag) - . += " \[Medium]" + . += " \[Medium]" else if(pref.GetJobDepartment(job, 3) & job.flag) - . += " \[Low]" + . += " \[Low]" else - . += " \[NEVER]" + . += " \[NEVER]" if(job.alt_titles) . += "" . += "" From 16366b8e3dc9f4760d0df9df00d22d7851955518 Mon Sep 17 00:00:00 2001 From: Datraen Date: Thu, 12 May 2016 00:14:23 -0400 Subject: [PATCH 31/38] Brings New Player Manifest, Load Slot into FakeNanoUI. --- code/datums/datacore.dm | 8 ++++---- code/modules/client/preferences.dm | 9 +++++++-- code/modules/mob/new_player/new_player.dm | 8 +++++--- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index 99788428fb..cc603aa2df 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -26,11 +26,11 @@ var/dat = {"
" @@ -106,22 +106,22 @@ if(rank == "Assistant")//Assistant is special if(pref.job_civilian_low & ASSISTANT) - . += " \[Yes]" + . += " \[Yes]" else - . += " \[No]" + . += " \[No]" if(job.alt_titles) //Blatantly cloned from a few lines down. . += "
 \[[pref.GetPlayerAltTitle(job)]\]
 \[[pref.GetPlayerAltTitle(job)]\]
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index e6627cc39d..0e9bf5323b 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -116,6 +116,7 @@ datum/preferences var/communicator_visibility = 0 var/datum/category_collection/player_setup_collection/player_setup + var/datum/browser/panel /datum/preferences/New(client/C) player_setup = new(src) @@ -378,7 +379,11 @@ datum/preferences dat += "
" dat += "" - user << browse(dat, "window=saves;size=300x390") + //user << browse(dat, "window=saves;size=300x390") + panel = new(user, "Character Slots", "Character Slots", 300, 390, src) + panel.set_content(dat) + panel.open() /datum/preferences/proc/close_load_dialog(mob/user) - user << browse(null, "window=saves") \ No newline at end of file + //user << browse(null, "window=saves") + panel.close() \ No newline at end of file diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index e13914272e..488d2068ac 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -464,11 +464,13 @@ return new_character /mob/new_player/proc/ViewManifest() - var/dat = "" - dat += "

Show Crew Manifest

" + var/dat = "
" dat += data_core.get_manifest(OOC = 1) - src << browse(dat, "window=manifest;size=370x420;can_close=1") + //src << browse(dat, "window=manifest;size=370x420;can_close=1") + var/datum/browser/popup = new(src, "Crew Manifest", "Crew Manifest", 370, 420, src) + popup.set_content(dat) + popup.open() /mob/new_player/Move() return 0 From 6b6fb4a6ca0f84d3c8f6496afb5448883c9c8448 Mon Sep 17 00:00:00 2001 From: Yoshax Date: Thu, 12 May 2016 14:54:40 +0100 Subject: [PATCH 32/38] Makes blue carpet and AI floor removable --- code/game/turfs/flooring/flooring.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/turfs/flooring/flooring.dm b/code/game/turfs/flooring/flooring.dm index bd95b7f594..369f42fc38 100644 --- a/code/game/turfs/flooring/flooring.dm +++ b/code/game/turfs/flooring/flooring.dm @@ -69,7 +69,7 @@ var/list/flooring_types name = "carpet" icon_base = "bcarpet" build_type = null - flags = TURF_HAS_EDGES + flags = TURF_HAS_EDGES | TURF_HAS_CORNERS | TURF_REMOVE_CROWBAR | TURF_CAN_BURN /decl/flooring/tiling name = "floor" @@ -186,7 +186,7 @@ var/list/flooring_types icon = 'icons/turf/flooring/circuit.dmi' icon_base = "bcircuit" build_type = null - flags = TURF_ACID_IMMUNE | TURF_CAN_BREAK + flags = TURF_ACID_IMMUNE | TURF_CAN_BREAK | TURF_REMOVE_CROWBAR can_paint = 1 /decl/flooring/reinforced/circuit/green From d2b4b4db0fa722d4c01b46d487e3bf4a1e39caa8 Mon Sep 17 00:00:00 2001 From: Yoshax Date: Thu, 12 May 2016 15:37:06 +0100 Subject: [PATCH 33/38] Adss changelog --- html/changelogs/Yoshax - carpetfix.yml | 37 ++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 html/changelogs/Yoshax - carpetfix.yml diff --git a/html/changelogs/Yoshax - carpetfix.yml b/html/changelogs/Yoshax - carpetfix.yml new file mode 100644 index 0000000000..c295d9a0d2 --- /dev/null +++ b/html/changelogs/Yoshax - carpetfix.yml @@ -0,0 +1,37 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +################################# + +# Your name. +author: Yoshax + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - bugfix: "Processing strata floor can now be pried up with a crowbar." + - bugfix: "Blue carpet can now also be removed with a crowbar, and has had it's ability to burn and have corners restored." From 75629504fdffdd6b30f8431ab689d7764d78d9c2 Mon Sep 17 00:00:00 2001 From: PsiOmegaDelta Date: Sun, 6 Mar 2016 10:46:31 +0100 Subject: [PATCH 34/38] Vending machines now store actual object instances. These instances are not initialized until someone first adds or removes a product. The last added item is the first item to be removed. This prevents cases were you could insert half-eaten chocolate and get back a full bar, for example. --- code/game/machinery/vending.dm | 101 ++++++++++++++++++++++----------- 1 file changed, 67 insertions(+), 34 deletions(-) diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index f8ce872378..e76d61b420 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -4,12 +4,14 @@ /datum/data/vending_product var/product_name = "generic" // Display name for the product var/product_path = null - var/amount = 0 // Amount held in the vending machine - var/price = 0 // Price to buy one - var/display_color = null // Display color for vending machine listing + var/amount = 0 // The original amount held in the vending machine + var/list/instances + var/price = 0 // Price to buy one + var/display_color = null // Display color for vending machine listing var/category = CAT_NORMAL // CAT_HIDDEN for contraband, CAT_COIN for premium + var/vending_machine // The vending machine we belong to -/datum/data/vending_product/New(var/path, var/name = null, var/amount = 1, var/price = 0, var/color = null, var/category = CAT_NORMAL) +/datum/data/vending_product/New(var/vending_machine, var/path, var/name = null, var/amount = 1, var/price = 0, var/color = null, var/category = CAT_NORMAL) ..() src.product_path = path @@ -24,6 +26,42 @@ src.price = price src.display_color = color src.category = category + src.vending_machine = vending_machine + +/datum/data/vending_product/Destroy() + vending_machine = null + if(instances) + for(var/product in instances) + qdel(product) + instances.Cut() + . = ..() + +/datum/data/vending_product/proc/get_amount() + return instances ? instances.len : amount + +/datum/data/vending_product/proc/add_product(var/atom/movable/product) + if(product.type != product_path) + return 0 + init_products() + product.forceMove(vending_machine) + instances += product + +/datum/data/vending_product/proc/get_product(var/product_location) + if(!get_amount() || !product_location) + return + init_products() + + var/atom/movable/product = instances[instances.len] // Remove the last added product + instances -= product + product.forceMove(product_location) + +/datum/data/vending_product/proc/init_products() + if(instances) + return + instances = list() + for(var/i = 1 to amount) + var/new_product = new product_path(vending_machine) + instances += new_product /** * A vending machine @@ -130,7 +168,7 @@ var/category = current_list[2] for(var/entry in current_list[1]) - var/datum/data/vending_product/product = new/datum/data/vending_product(entry) + var/datum/data/vending_product/product = new/datum/data/vending_product(src, entry) product.price = (entry in src.prices) ? src.prices[entry] : 0 product.amount = (current_list[1][entry]) ? current_list[1][entry] : 1 @@ -143,6 +181,9 @@ wires = null qdel(coin) coin = null + for(var/datum/data/vending_product/R in product_records) + qdel(R) + product_records.Cut() return ..() /obj/machinery/vending/ex_act(severity) @@ -410,7 +451,7 @@ "name" = I.product_name, "price" = I.price, "color" = I.display_color, - "amount" = I.amount))) + "amount" = I.get_amount()))) data["products"] = listed_products @@ -518,22 +559,26 @@ if (src.icon_vend) //Show the vending animation if needed flick(src.icon_vend,src) spawn(src.vend_delay) - new R.product_path(get_turf(src)) - R.amount-- - if(prob(1)) - new R.product_path(get_turf(src)) - R.amount-- - src.visible_message("\The [src] clunks as it vends an additional item.") - + R.get_product(get_turf(src)) src.status_message = "" src.status_error = 0 src.vend_ready = 1 currently_vending = null nanomanager.update_uis(src) -/obj/machinery/vending/proc/stock(var/datum/data/vending_product/R, var/mob/user) - user << "You insert \the [src] in the product receptor." - R.amount++ + +/** + * Add item to the machine + * + * Checks if item is vendable in this machine should be performed before + * calling. W is the item being inserted, R is the associated vending_product entry. + */ +/obj/machinery/vending/proc/stock(obj/item/weapon/W, var/datum/data/vending_product/R, var/mob/user) + if(!user.unEquip(W)) + return + + user << "You insert \the [W] in the product receptor." + R.add_product(W) nanomanager.update_uis(src) @@ -583,15 +628,8 @@ //Oh no we're malfunctioning! Dump out some product and break. /obj/machinery/vending/proc/malfunction() for(var/datum/data/vending_product/R in src.product_records) - if (R.amount <= 0) //Try to use a record that actually has something to dump. - continue - var/dump_path = R.product_path - if (!dump_path) - continue - - while(R.amount>0) - new dump_path(src.loc) - R.amount-- + while(R.get_amount()>0) + R.get_product(loc) break stat |= BROKEN @@ -606,14 +644,9 @@ return 0 for(var/datum/data/vending_product/R in src.product_records) - if (R.amount <= 0) //Try to use a record that actually has something to dump. + throw_item = R.get_product(loc) + if (!throw_item) continue - var/dump_path = R.product_path - if (!dump_path) - continue - - R.amount-- - throw_item = new dump_path(src.loc) break if (!throw_item) return 0 @@ -647,7 +680,7 @@ icon = 'icons/obj/objects.dmi' icon_state = "dispenser" product_paths = "/obj/item/weapon/tank/oxygen;/obj/item/weapon/tank/phoron;/obj/item/weapon/tank/emergency_oxygen;/obj/item/weapon/tank/emergency_oxygen/engi;/obj/item/clothing/mask/breath" - product_amounts = "10;10;10;5;25" + productamounts = "10;10;10;5;25" vend_delay = 0 */ @@ -873,7 +906,7 @@ for(var/entry in current_list[1]) var/obj/item/seeds/S = new entry(src) var/name = S.name - var/datum/data/vending_product/product = new/datum/data/vending_product(entry, name) + var/datum/data/vending_product/product = new/datum/data/vending_product(src, entry, name) product.price = (entry in src.prices) ? src.prices[entry] : 0 product.amount = (current_list[1][entry]) ? current_list[1][entry] : 1 From 825add164cc94b89003693f0f1ce4eab4a1cfe37 Mon Sep 17 00:00:00 2001 From: PsiOmegaDelta Date: Thu, 17 Mar 2016 13:10:11 +0100 Subject: [PATCH 35/38] Fixes vending machines not throwing their items. get_product() did not properly return the requested product. --- code/game/machinery/vending.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index e76d61b420..a7fc807a68 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -54,6 +54,7 @@ var/atom/movable/product = instances[instances.len] // Remove the last added product instances -= product product.forceMove(product_location) + return product /datum/data/vending_product/proc/init_products() if(instances) @@ -652,7 +653,7 @@ return 0 spawn(0) throw_item.throw_at(target, 16, 3, src) - src.visible_message("[src] launches [throw_item.name] at [target.name]!") + src.visible_message("\The [src] launches \a [throw_item] at \the [target]!") return 1 /* From d8e719b435846deb477931e8e600a398cc46c389 Mon Sep 17 00:00:00 2001 From: PsiOmegaDelta Date: Fri, 22 Apr 2016 11:49:24 +0200 Subject: [PATCH 36/38] Vending machines now clear the coin var on qdel. Fixes #12725. --- code/game/machinery/vending.dm | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index a7fc807a68..8a17a8176b 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -184,7 +184,7 @@ coin = null for(var/datum/data/vending_product/R in product_records) qdel(R) - product_records.Cut() + product_records = null return ..() /obj/machinery/vending/ex_act(severity) @@ -256,7 +256,7 @@ return else if(istype(W, /obj/item/weapon/coin) && premium.len > 0) user.drop_item() - W.loc = src + W.forceMove(src) coin = W categories |= CAT_COIN user << "You insert \the [W] into \the [src]." @@ -482,10 +482,10 @@ usr << "There is no coin in this machine." return - coin.loc = src.loc + coin.forceMove(src.loc) if(!usr.get_active_hand()) usr.put_in_hands(coin) - usr << "You remove the [coin] from the [src]" + usr << "You remove \the [coin] from the \[src]" coin = null categories &= ~CAT_COIN @@ -546,9 +546,11 @@ else user << "You weren't able to pull the coin out fast enough, the machine ate it, string and all." qdel(coin) + coin = null categories &= ~CAT_COIN else qdel(coin) + coin = null categories &= ~CAT_COIN if(((src.last_reply + (src.vend_delay + 200)) <= world.time) && src.vend_reply) From 5490c1527424e9bfb8696e97846dc04c0df4c0d8 Mon Sep 17 00:00:00 2001 From: GinjaNinja32 Date: Tue, 3 May 2016 04:58:21 +0100 Subject: [PATCH 37/38] fix vending machine message --- code/game/machinery/vending.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 8a17a8176b..d8be1f162f 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -485,7 +485,7 @@ coin.forceMove(src.loc) if(!usr.get_active_hand()) usr.put_in_hands(coin) - usr << "You remove \the [coin] from the \[src]" + usr << "You remove \the [coin] from \the [src]" coin = null categories &= ~CAT_COIN From 8f659e22637e47c684869da2a0a161a9f1268c39 Mon Sep 17 00:00:00 2001 From: HarpyEagle Date: Mon, 9 May 2016 12:22:06 -0400 Subject: [PATCH 38/38] Adds a sleep(3) between the vending of two items for effect. --- code/game/machinery/vending.dm | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index d8be1f162f..fd0996e2bc 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -563,6 +563,11 @@ flick(src.icon_vend,src) spawn(src.vend_delay) R.get_product(get_turf(src)) + if(prob(1)) + sleep(3) + if(R.get_product(get_turf(src))) + src.visible_message("\The [src] clunks as it vends an additional item.") + src.status_message = "" src.status_error = 0 src.vend_ready = 1
NameRankActivity