mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-08-26 06:22:26 +01:00
Merge branch 'master' into development
# Conflicts: # html/changelogs/.all_changelog.yml # maps/aurora/aurora-4_mainlevel.dmm # maps/aurora/aurora-7_roof.dmm
This commit is contained in:
@@ -66,6 +66,10 @@ var/list/admin_ranks = list() //list of all ranks with associated rights
|
||||
C.holder = null
|
||||
admins.Cut()
|
||||
|
||||
// Clears admins from the world config.
|
||||
for (var/A in world.GetConfig("admin"))
|
||||
world.SetConfig("APP/admin", A, null)
|
||||
|
||||
if(config.admin_legacy_system)
|
||||
load_admin_ranks()
|
||||
|
||||
|
||||
@@ -431,6 +431,7 @@ var/list/admin_verbs_cciaa = list(
|
||||
admin_verbs_spawn,
|
||||
debug_verbs
|
||||
)
|
||||
add_aooc_if_necessary()
|
||||
|
||||
/client/proc/hide_most_verbs()//Allows you to keep some functionality while hiding some verbs
|
||||
set name = "Adminverbs - Hide Most"
|
||||
|
||||
@@ -33,6 +33,9 @@ var/list/admin_datums = list()
|
||||
rights = initial_rights
|
||||
admin_datums[ckey] = src
|
||||
|
||||
if (rights & R_DEBUG)
|
||||
world.SetConfig("APP/admin", ckey, "role=admin")
|
||||
|
||||
/datum/admins/proc/associate(client/C)
|
||||
if(istype(C))
|
||||
owner = C
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
if (istype(src.loc,/obj/item/device/assembly_holder))
|
||||
if (istype(src.loc.loc, /obj/structure/reagent_dispensers/fueltank/))
|
||||
var/obj/structure/reagent_dispensers/fueltank/tank = src.loc.loc
|
||||
if (tank && tank.modded)
|
||||
if (tank && tank.is_leaking)
|
||||
tank.ex_act(3.0)
|
||||
|
||||
spark(src, 4, cardinal)
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
power_add = BATTLE_MONSTERS_POWER_UPGRADE
|
||||
power_mul = 1.25
|
||||
description = "%NAME is feared upon by most lesser beings, and with good reason. A single stroke of their %WEAPON_AND is known to destroy the very souls of those unlucky enough to even witness it's power over %ELEMENT_AND."
|
||||
special_effects = "Absolute Power: %NAME cannot be attacked by monsters with a base attack rating less than <b>2000</b>."
|
||||
special_effects = "Absolute Power: %NAME cannot be attacked by monsters with 4 or lower stars."
|
||||
rarity = 0.5
|
||||
rarity_score = 1
|
||||
|
||||
|
||||
@@ -74,7 +74,7 @@
|
||||
|
||||
user.visible_message(\
|
||||
span("notice","\The [user] combines two decks together."),\
|
||||
span("notice","You combine too decks together.")\
|
||||
span("notice","You combine two decks together.")\
|
||||
)
|
||||
|
||||
qdel(C)
|
||||
@@ -150,12 +150,12 @@
|
||||
if(icon_state != "hand")
|
||||
user.visible_message(\
|
||||
span("notice","\The [usr] begins searching through \the [src]..."),\
|
||||
span("notice","You begin searching through your deck..")\
|
||||
span("notice","You begin searching through your deck...")\
|
||||
)
|
||||
if(!do_after(user, 40, act_target = src))
|
||||
if(!do_after(user, 5 + stored_card_names.len, act_target = src))
|
||||
user.visible_message(\
|
||||
span("notice","\The [usr] stops and thinks better of it."),\
|
||||
span("notice","You top and think better of it.")\
|
||||
span("notice","You stop and think better of it.")\
|
||||
)
|
||||
return
|
||||
|
||||
@@ -187,4 +187,3 @@
|
||||
if(href_list["selection"])
|
||||
take_specific_card(usr, href_list["selection"])
|
||||
BrowseDeck(usr)
|
||||
|
||||
|
||||
@@ -192,7 +192,7 @@
|
||||
pants["blue track pants"] = /obj/item/clothing/under/pants/track/blue
|
||||
pants["green track pants"] = /obj/item/clothing/under/pants/track/green
|
||||
pants["white track pants"] = /obj/item/clothing/under/pants/track/white
|
||||
pants["red track pants"] = /obj/item/clothing/under/pants/track/blue
|
||||
pants["red track pants"] = /obj/item/clothing/under/pants/track/red
|
||||
pants["camo pants"] = /obj/item/clothing/under/pants/camo
|
||||
pants["athletic shorts, black"] = /obj/item/clothing/under/shorts
|
||||
pants["athletic shorts, red"] = /obj/item/clothing/under/shorts/red
|
||||
|
||||
@@ -202,10 +202,5 @@
|
||||
icon_state = "fingerlessgloves"
|
||||
item_state = "fingerlessgloves"
|
||||
fingerprint_chance = 100
|
||||
|
||||
/obj/item/clothing/gloves/fingerless/attackby(obj/item/weapon/W, mob/user)
|
||||
if(iswirecutter(W) || istype(W, /obj/item/weapon/scalpel))
|
||||
user << "<span class='notice'>What do you plan to snip?</span>" //Nope
|
||||
return
|
||||
..()
|
||||
|
||||
clipped = 1
|
||||
species_restricted = list("exclude","Golem","Vaurca Breeder","Vaurca Warform")
|
||||
@@ -10,7 +10,7 @@
|
||||
)
|
||||
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 35, bio = 100, rad = 60)
|
||||
siemens_coefficient = 0.3
|
||||
species_restricted = list("Human", "Vaurca", "Machine", "Heavy Machine")
|
||||
species_restricted = list("Human", "Vaurca", "Machine", "Heavy Machine", "Zeng-Hu Mobility Frame", "Bishop Accessory Frame")
|
||||
camera_networks = list(NETWORK_MERCENARY)
|
||||
light_overlay = "helmet_light_green" //todo: species-specific light overlays
|
||||
brightness_on = 6
|
||||
@@ -30,4 +30,4 @@
|
||||
armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 60)
|
||||
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs)
|
||||
siemens_coefficient = 0.3
|
||||
species_restricted = list("Human", "Skrell", "Vaurca", "Machine", "Heavy Machine")
|
||||
species_restricted = list("Human", "Skrell", "Vaurca", "Machine", "Heavy Machine", "Zeng-Hu Mobility Frame", "Bishop Accessory Frame")
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
siemens_coefficient = 0.4
|
||||
|
||||
//Species-specific stuff.
|
||||
species_restricted = list("Human", "Machine")
|
||||
species_restricted = list("Human", "Machine", "Bishop Accessory Frame")
|
||||
sprite_sheets_refit = list(
|
||||
"Unathi" = 'icons/mob/species/unathi/helmet.dmi',
|
||||
"Tajara" = 'icons/mob/species/tajaran/helmet.dmi',
|
||||
@@ -38,7 +38,7 @@
|
||||
max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE
|
||||
siemens_coefficient = 0.4
|
||||
|
||||
species_restricted = list("Human", "Skrell", "Machine")
|
||||
species_restricted = list("Human", "Skrell", "Machine", "Bishop Accessory Frame")
|
||||
sprite_sheets_refit = list(
|
||||
"Unathi" = 'icons/mob/species/unathi/suit.dmi',
|
||||
"Tajara" = 'icons/mob/species/tajaran/suit.dmi',
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
armor = list(melee = 40, bullet = 20, laser = 20,energy = 20, bomb = 35, bio = 100, rad = 60)
|
||||
siemens_coefficient = 0.3
|
||||
wizard_garb = 1
|
||||
species_restricted = list("Human", "Machine", "Heavy Machine", "Skeleton")
|
||||
species_restricted = list("Human", "Machine", "Heavy Machine", "Skeleton", "Zeng-Hu Mobility Frame", "Bishop Accessory Frame")
|
||||
|
||||
/obj/item/clothing/head/helmet/space/void/wizard/equipped(var/mob/living/user)
|
||||
if(!user.is_wizard())
|
||||
@@ -47,7 +47,7 @@
|
||||
siemens_coefficient = 0.3
|
||||
wizard_garb = 1
|
||||
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/teleportation_scroll,/obj/item/weapon/scrying,/obj/item/weapon/spellbook,/obj/item/device/soulstone,/obj/item/weapon/material/knife/ritual)
|
||||
species_restricted = list("Human", "Skrell", "Machine", "Heavy Machine", "Skeleton")
|
||||
species_restricted = list("Human", "Skrell", "Machine", "Heavy Machine", "Skeleton", "Zeng-Hu Mobility Frame", "Bishop Accessory Frame")
|
||||
|
||||
/obj/item/clothing/suit/space/void/wizard/equipped(var/mob/living/user)
|
||||
if(!user.is_wizard())
|
||||
|
||||
@@ -2374,7 +2374,7 @@ obj/item/clothing/suit/storage/hooded/fluff/make_poncho //Raincoat Poncho - M.A.
|
||||
can_nap = 0
|
||||
|
||||
|
||||
/obj/item/clothing/suit/storage/toggle/fluff/talon_coat //Embroidered Coat - Talon Hatfield - dronztheWolf
|
||||
/obj/item/clothing/suit/storage/toggle/fluff/talon_coat //Embroidered Coat - Talon Hatfield - dronzthewolf
|
||||
name = "embroidered coat"
|
||||
desc = " Martian long coat, made to fend off dust storms and other unpleasantries. This one has a few patches sewn into it depicting: A Solarian flag, a Batallion number, and a large sun."
|
||||
icon = 'icons/obj/custom_items/talon_coat.dmi'
|
||||
@@ -2382,4 +2382,21 @@ obj/item/clothing/suit/storage/hooded/fluff/make_poncho //Raincoat Poncho - M.A.
|
||||
item_state = "talon_coat"
|
||||
icon_open = "talon_coat_open"
|
||||
icon_closed = "talon_coat"
|
||||
contained_sprite = TRUE
|
||||
|
||||
|
||||
/obj/item/weapon/storage/backpack/cloak/fluff/ryn_cloak //Security Tunnel Cloak - Za'Akaix'Ryn Zo'ra - jamchop23334
|
||||
name = "security tunnel cloak"
|
||||
desc = "A blue, tailor-made tunnel cloak with paltry storage options. The fabric is smoother and less abrasive than regular tunnel cloaks, though it looks difficult to wear."
|
||||
icon = 'icons/obj/custom_items/ryn_clothing.dmi'
|
||||
icon_state = "ryn_cloak"
|
||||
item_state = "ryn_cloak"
|
||||
contained_sprite = TRUE
|
||||
|
||||
/obj/item/clothing/head/fluff/ryn_hood //Security Tunnel Hood - Za'Akaix'Ryn Zo'ra - jamchop23334
|
||||
name = "security tunnel hood"
|
||||
desc = "A silky smooth blue hood, though its more of a headwrap. You're having a hard time wrapping your head around how to wear this."
|
||||
icon = 'icons/obj/custom_items/ryn_clothing.dmi'
|
||||
icon_state = "ryn_hood"
|
||||
item_state = "ryn_hood"
|
||||
contained_sprite = TRUE
|
||||
@@ -68,13 +68,13 @@ log transactions
|
||||
break
|
||||
|
||||
/obj/machinery/atm/emag_act(var/remaining_charges, var/mob/user)
|
||||
if(!emagged)
|
||||
if(emagged)
|
||||
return
|
||||
|
||||
//short out the machine, shoot sparks, spew money!
|
||||
emagged = 1
|
||||
spark(src, 5, alldirs)
|
||||
spawn_money(rand(100,500),src.loc)
|
||||
spawn_money(rand(2000,5000),src.loc)
|
||||
//we don't want to grief people by locking their id in an emagged ATM
|
||||
release_held_id(user)
|
||||
|
||||
@@ -85,7 +85,7 @@ log transactions
|
||||
|
||||
/obj/machinery/atm/attackby(obj/item/I as obj, mob/user as mob)
|
||||
if(istype(I, /obj/item/weapon/card))
|
||||
if(emagged > 0)
|
||||
if(emagged)
|
||||
//prevent inserting id into an emagged ATM
|
||||
user << "<span class='warning'>\icon[src] CARD READER ERROR. This system has been compromised!</span>"
|
||||
return
|
||||
@@ -135,7 +135,7 @@ log transactions
|
||||
dat += "For all your monetary needs!<br>"
|
||||
dat += "<i>This terminal is</i> [machine_id]. <i>Report this code when contacting IT Support</i><br/>"
|
||||
|
||||
if(emagged > 0)
|
||||
if(emagged)
|
||||
dat += "Card: <span style='color: red;'>LOCKED</span><br><br><span style='color: red;'>Unauthorized terminal access detected! This ATM has been locked. Please contact IT Support.</span>"
|
||||
else
|
||||
dat += "Card: <a href='?src=\ref[src];choice=insert_card'>[held_card ? held_card.name : "------"]</a><br><br>"
|
||||
@@ -428,7 +428,7 @@ log transactions
|
||||
if("insert_card")
|
||||
if(!held_card)
|
||||
//this might happen if the user had the browser window open when somebody emagged it
|
||||
if(emagged > 0)
|
||||
if(emagged)
|
||||
usr << "<span class='warning'>\icon[src] The ATM card reader rejected your ID because this machine has been sabotaged!</span>"
|
||||
else
|
||||
var/obj/item/I = usr.get_active_hand()
|
||||
|
||||
@@ -266,6 +266,9 @@
|
||||
qdel(src)
|
||||
|
||||
/mob/living/bot/secbot/ed209/RangedAttack(var/atom/A)
|
||||
if(!(target in view(7, src)))
|
||||
walk_to(src, target, 6, move_to_delay)
|
||||
return
|
||||
if(last_shot + shot_delay > world.time)
|
||||
src << "You are not ready to fire yet!"
|
||||
return
|
||||
|
||||
@@ -80,6 +80,7 @@
|
||||
|
||||
/mob/living/bot/secbot/turn_off()
|
||||
..()
|
||||
walk_to(src, src, 0, move_to_delay)
|
||||
target = null
|
||||
frustration = 0
|
||||
mode = SECBOT_IDLE
|
||||
|
||||
@@ -8,8 +8,8 @@
|
||||
#define NYMPH_ABSORB_NUTRITION 650
|
||||
#define NYMPH_ABSORB_DEAD_FACTOR 0.3
|
||||
|
||||
#define REGROW_FOOD_REQ 100
|
||||
#define REGROW_ENERGY_REQ 40
|
||||
#define REGROW_FOOD_REQ 150
|
||||
#define REGROW_ENERGY_REQ 60
|
||||
|
||||
|
||||
#define LANGUAGE_POINTS_TO_LEARN 3 //The number of samples of a language required to learn it
|
||||
@@ -118,12 +118,9 @@ var/list/diona_banned_languages = list(
|
||||
//Most medicines don't work on diona, but physical treatment for external wounds helps a little,
|
||||
//and some alternative things that are toxic to other life, such as radium and mutagen, will benefit diona
|
||||
/mob/living/carbon/proc/diona_handle_regeneration(var/datum/dionastats/DS)
|
||||
if ((DS.stored_energy < 1 && !total_radiation)) //we need energy or radiation to heal
|
||||
if ((DS.stored_energy < 1 && !total_radiation)) //we need energy or total_radiation to heal
|
||||
return FALSE
|
||||
|
||||
var/radiation = max(total_radiation, 0)
|
||||
|
||||
|
||||
var/value //A little variable we'll reuse to optimise
|
||||
var/CL //Cached loss, to save on repeatedly recalculating it
|
||||
var/HF = DS.healing_factor //I don't know if fetching a variable from an object repeatedly is slow, but this seems safe
|
||||
@@ -134,10 +131,10 @@ var/list/diona_banned_languages = list(
|
||||
if (getHalLoss() > 0)
|
||||
CL = getHalLoss()
|
||||
if (CL > 0)
|
||||
if (radiation > 0)
|
||||
value = min(CL, radiation, 2*HF)
|
||||
if (total_radiation > 0)
|
||||
value = min(CL, total_radiation, 2*HF)
|
||||
adjustHalLoss(value*-3,1) //Halloss heals more quickly
|
||||
radiation -= value
|
||||
total_radiation -= value
|
||||
CL = getHalLoss()
|
||||
|
||||
value = min(CL, DS.stored_energy, 1*HF)
|
||||
@@ -151,10 +148,10 @@ var/list/diona_banned_languages = list(
|
||||
CL = getBruteLoss()
|
||||
|
||||
if (CL > 0)
|
||||
if (radiation > 0)
|
||||
value = min(CL, radiation, 2*HF)
|
||||
if (total_radiation > 0)
|
||||
value = min(CL, total_radiation, 2*HF)
|
||||
adjustBruteLoss(value*-1)
|
||||
radiation -= value
|
||||
total_radiation -= value
|
||||
CL = getBruteLoss() //After adjusting it, recalculate for the lighthealing
|
||||
|
||||
value = min(CL, DS.stored_energy, 1*HF)
|
||||
@@ -163,10 +160,10 @@ var/list/diona_banned_languages = list(
|
||||
|
||||
CL = getFireLoss()
|
||||
if (CL > 0)
|
||||
if (radiation > 0)
|
||||
value = min(CL, radiation, 2*HF)
|
||||
if (total_radiation > 0)
|
||||
value = min(CL, total_radiation, 2*HF)
|
||||
adjustFireLoss(value*-1)
|
||||
radiation -= value
|
||||
total_radiation -= value
|
||||
CL = getFireLoss()
|
||||
|
||||
value = min(CL, DS.stored_energy, 1*HF)
|
||||
@@ -175,10 +172,10 @@ var/list/diona_banned_languages = list(
|
||||
|
||||
CL = stunned
|
||||
if (CL > 0)
|
||||
if (radiation > 0)
|
||||
value = min(CL, radiation, 2*HF)
|
||||
if (total_radiation > 0)
|
||||
value = min(CL, total_radiation, 2*HF)
|
||||
stunned -= value
|
||||
radiation -= value
|
||||
total_radiation -= value
|
||||
CL = stunned
|
||||
|
||||
value = min(CL, DS.stored_energy, 1*HF)
|
||||
@@ -188,10 +185,10 @@ var/list/diona_banned_languages = list(
|
||||
|
||||
CL = weakened
|
||||
if (CL > 0)
|
||||
if (radiation > 0)
|
||||
value = min(CL, radiation, 2*HF)
|
||||
if (total_radiation > 0)
|
||||
value = min(CL, total_radiation, 2*HF)
|
||||
weakened -= value
|
||||
radiation -= value
|
||||
total_radiation -= value
|
||||
CL = weakened
|
||||
|
||||
value = min(CL, DS.stored_energy, 1*HF)
|
||||
@@ -202,10 +199,10 @@ var/list/diona_banned_languages = list(
|
||||
if (life_tick % LIFETICK_INTERVAL_LESS == 0)
|
||||
CL = getToxLoss()
|
||||
if (CL > 0)
|
||||
if (radiation > 0)
|
||||
value = min(CL, radiation, 2*HF*LIFETICK_INTERVAL_LESS)
|
||||
if (total_radiation > 0)
|
||||
value = min(CL, total_radiation, 2*HF*LIFETICK_INTERVAL_LESS)
|
||||
adjustToxLoss(value*-1)
|
||||
radiation -= value
|
||||
total_radiation -= value
|
||||
CL = getToxLoss()
|
||||
|
||||
value = min(CL, DS.stored_energy, 1*HF*LIFETICK_INTERVAL_LESS)
|
||||
@@ -215,10 +212,10 @@ var/list/diona_banned_languages = list(
|
||||
|
||||
CL = getCloneLoss()
|
||||
if (CL > 0)
|
||||
if (radiation > 0)
|
||||
value = min(CL, radiation, 2*HF*LIFETICK_INTERVAL_LESS)
|
||||
if (total_radiation > 0)
|
||||
value = min(CL, total_radiation, 2*HF*LIFETICK_INTERVAL_LESS)
|
||||
adjustCloneLoss(value/-2.5) //Genetic damage, should diona ever suffer it, heals much more slowly.
|
||||
radiation -= value //Most likely the only time they'll cloneloss is escaping from being partially devoured
|
||||
total_radiation -= value //Most likely the only time they'll cloneloss is escaping from being partially devoured
|
||||
CL = getCloneLoss()
|
||||
|
||||
value = min(CL, DS.stored_energy, 1*HF*LIFETICK_INTERVAL_LESS)
|
||||
@@ -229,21 +226,15 @@ var/list/diona_banned_languages = list(
|
||||
updatehealth()
|
||||
return FALSE
|
||||
|
||||
// A little inter-proc communication.
|
||||
// We need the continued radiation count for the sake of actually working.
|
||||
return max(radiation, 0)
|
||||
|
||||
// Continuation of the Diona regen proc, but for human specific actions.
|
||||
/mob/living/carbon/human/diona_handle_regeneration(var/datum/dionastats/DS)
|
||||
. = ..()
|
||||
..()
|
||||
|
||||
// We cancel with regening organ, as it's meant to stop all other regenerative
|
||||
// processes. Just pray to shit the timers don't implode.
|
||||
if (!. || DS.regening_organ)
|
||||
if ((!total_radiation && !DS.healing_factor && !DS.stored_energy) || DS.regening_organ)
|
||||
return FALSE
|
||||
|
||||
var/radiation = .
|
||||
|
||||
//Next up, healing any damage to internal organs.
|
||||
//Diona really only have one critical organ, the light receptor node in the head.
|
||||
//If badly damaged, the light receptor reduces the effectiveness of incoming light
|
||||
@@ -253,10 +244,10 @@ var/list/diona_banned_languages = list(
|
||||
for (var/obj/item/organ/O in bad_internal_organs)
|
||||
var/CL = O.damage
|
||||
var/value
|
||||
if (radiation > 0)
|
||||
value = min(CL, radiation, 2 * DS.healing_factor * LIFETICK_INTERVAL_LESS)
|
||||
if(total_radiation > 0)
|
||||
value = min(CL, total_radiation, 2 * DS.healing_factor * LIFETICK_INTERVAL_LESS)
|
||||
O.damage += value/-1.5
|
||||
radiation -= value
|
||||
total_radiation -= value
|
||||
CL = getCloneLoss()
|
||||
|
||||
value = min(CL, DS.stored_energy, 1 * DS.healing_factor * LIFETICK_INTERVAL_LESS)
|
||||
@@ -426,7 +417,7 @@ var/list/diona_banned_languages = list(
|
||||
var/HP = 1 //HP = health-percentage
|
||||
if (DS.LMS == 4)
|
||||
if (HP < 0.6)
|
||||
to_chat(src, "<span class='danger'>The darkness burns. Your nymphs decay and wilt You are in mortal danger!</span>")
|
||||
to_chat(src, "<span class='danger'>The darkness burns. Your nymphs decay and wilt. You are in mortal danger!</span>")
|
||||
DS.LMS = 5
|
||||
|
||||
else if (DS.LMS == 5)
|
||||
|
||||
@@ -7,22 +7,35 @@
|
||||
var/skipears = 0
|
||||
var/skipeyes = 0
|
||||
var/skipface = 0
|
||||
var/skipbody = 0
|
||||
|
||||
//exosuits and helmets obscure our view and stuff.
|
||||
if(wear_suit)
|
||||
skipbody |= wear_suit.body_parts_covered
|
||||
skipgloves = wear_suit.flags_inv & HIDEGLOVES
|
||||
skipsuitstorage = wear_suit.flags_inv & HIDESUITSTORAGE
|
||||
skipjumpsuit = wear_suit.flags_inv & HIDEJUMPSUIT
|
||||
skipshoes = wear_suit.flags_inv & HIDESHOES
|
||||
|
||||
if(head)
|
||||
skipbody |= head.body_parts_covered
|
||||
skipbody &= ~HEAD // head covering incorrectly hides 'face' damage
|
||||
skipbody |= (skipbody & FACE) ? HEAD : 0 // if you hide face damage, however, then go ahead and hide head damage, since that's where face damage is
|
||||
skipmask = head.flags_inv & HIDEMASK
|
||||
skipeyes = head.flags_inv & HIDEEYES
|
||||
skipears = head.flags_inv & HIDEEARS
|
||||
skipface = head.flags_inv & HIDEFACE
|
||||
|
||||
if(wear_mask)
|
||||
skipbody |= wear_mask.body_parts_covered
|
||||
skipbody |= (wear_mask.body_parts_covered & FACE) ? HEAD : 0 // same as above
|
||||
skipface |= wear_mask.flags_inv & HIDEFACE
|
||||
|
||||
if(w_uniform)
|
||||
skipbody |= w_uniform.body_parts_covered
|
||||
|
||||
if(gloves)
|
||||
skipbody |= gloves.body_parts_covered
|
||||
|
||||
var/list/msg = list("<span class='info'>*---------*\nThis is ")
|
||||
|
||||
@@ -261,9 +274,11 @@
|
||||
wound_flavor_text["[organ_descriptor]"] = "<span class='warning'><b>[T.He] [T.has] a stump where [T.his] [organ_descriptor] should be.</b></span>\n"
|
||||
else
|
||||
continue
|
||||
|
||||
|
||||
for(var/obj/item/organ/external/temp in organs)
|
||||
if(temp)
|
||||
if(skipbody & temp.body_part)
|
||||
continue
|
||||
if(temp.status & ORGAN_ROBOT)
|
||||
if(!(temp.brute_dam + temp.burn_dam))
|
||||
//wound_flavor_text["[temp.name]"] = "<span class='warning'>[T.He] [T.has] a robot [temp.name]!</span>\n"
|
||||
|
||||
@@ -44,8 +44,8 @@
|
||||
else if(E.status & ORGAN_BROKEN)
|
||||
tally += 1.5
|
||||
|
||||
if(shock_stage >= 10) tally += 3
|
||||
|
||||
if (!(species && (species.flags & NO_PAIN)))
|
||||
if(shock_stage >= 10) tally += 3
|
||||
|
||||
if(aiming && aiming.aiming_at) tally += 5 // Iron sights make you slower, it's a well-known fact.
|
||||
|
||||
|
||||
@@ -274,7 +274,7 @@
|
||||
|
||||
examine_color = "#bc4b00"
|
||||
|
||||
blurb = "The Xion Manufacturing Group, being a subsidiary of Hephaestus Industries, saw the original Industrial models and wanted to develop their own chassis based off of the original design. The result is the Xion Industrial model. Sturdy and strong, this chassis is quite powerful and equally durable, with an ample power cell and improved actuators for carrying the increased weight of the body. The Xion model also retains sturdiness without covering the chassis in plating, allowing for the cooling systems to vent heat much easier than the Hephaestus-brand model. This unit cannot perform EVA"
|
||||
blurb = "The Xion Manufacturing Group, being a subsidiary of Hephaestus Industries, saw the original Industrial models and wanted to develop their own chassis based off of the original design. The result is the Xion Industrial model. Sturdy and strong, this chassis is quite powerful and equally durable, with an ample power cell and improved actuators for carrying the increased weight of the body. The Xion model also retains sturdiness without covering the chassis in plating, allowing for the cooling systems to vent heat much easier than the Hephaestus-brand model. This unit cannot perform EVA without a suit."
|
||||
|
||||
has_limbs = list(
|
||||
"chest" = list("path" = /obj/item/organ/external/chest/industrial/xion),
|
||||
|
||||
@@ -94,6 +94,10 @@ var/global/list/sparring_attack_cache = list()
|
||||
|
||||
/datum/unarmed_attack/proc/show_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage)
|
||||
var/obj/item/organ/external/affecting = target.get_organ(zone)
|
||||
|
||||
if(!affecting)
|
||||
return
|
||||
|
||||
user.visible_message("<span class='warning'>[user] [pick(attack_verb)] [target] in the [affecting.name]!</span>")
|
||||
playsound(user.loc, attack_sound, 25, 1, -1)
|
||||
|
||||
@@ -131,6 +135,10 @@ var/global/list/sparring_attack_cache = list()
|
||||
|
||||
/datum/unarmed_attack/punch/show_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage)
|
||||
var/obj/item/organ/external/affecting = target.get_organ(zone)
|
||||
|
||||
if(!affecting)
|
||||
return
|
||||
|
||||
var/organ = affecting.name
|
||||
|
||||
attack_damage = Clamp(attack_damage, 1, 5) // We expect damage input of 1 to 5 for this proc. But we leave this check juuust in case.
|
||||
@@ -203,6 +211,10 @@ var/global/list/sparring_attack_cache = list()
|
||||
|
||||
/datum/unarmed_attack/kick/show_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage)
|
||||
var/obj/item/organ/external/affecting = target.get_organ(zone)
|
||||
|
||||
if(!affecting)
|
||||
return
|
||||
|
||||
var/organ = affecting.name
|
||||
|
||||
attack_damage = Clamp(attack_damage, 1, 5)
|
||||
@@ -246,7 +258,12 @@ var/global/list/sparring_attack_cache = list()
|
||||
|
||||
/datum/unarmed_attack/stomp/show_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage)
|
||||
var/obj/item/organ/external/affecting = target.get_organ(zone)
|
||||
|
||||
if(!affecting)
|
||||
return
|
||||
|
||||
var/organ = affecting.name
|
||||
|
||||
var/obj/item/clothing/shoes = user.shoes
|
||||
|
||||
attack_damage = Clamp(attack_damage, 1, 5)
|
||||
|
||||
@@ -281,6 +281,9 @@
|
||||
|
||||
/mob/living/carbon/slime/proc/handle_AI() // the master AI process
|
||||
|
||||
if(Victim && Victim.stat & DEAD)
|
||||
Victim = null
|
||||
|
||||
if(stat == DEAD || client || Victim) return // If we're dead or have a client, we don't need AI, if we're feeding, we continue feeding
|
||||
AIproc = 1
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ calculate text size per text.
|
||||
for(var/datum/reagent/R in reagent_list)
|
||||
if(!R.taste_mult)
|
||||
continue
|
||||
if(R.id == "nutriment") //this is ugly but apparently only nutriment (not subtypes) has taste data TODO figure out why
|
||||
if(R.id == "nutriment" || R.id == "synnutriment") //this is ugly but apparently only nutriment (not subtypes) has taste data TODO figure out why
|
||||
var/list/taste_data = R.get_data()
|
||||
for(var/taste in taste_data)
|
||||
if(taste in tastes)
|
||||
|
||||
@@ -749,7 +749,6 @@ var/global/list/robot_modules = list(
|
||||
src.modules += new /obj/item/weapon/gripper/chemistry(src)
|
||||
src.modules += new /obj/item/weapon/reagent_containers/dropper/industrial(src)
|
||||
src.modules += new /obj/item/device/reagent_scanner/adv(src)
|
||||
src.modules += new /obj/item/weapon/extinguisher(src)
|
||||
src.modules += new /obj/item/weapon/storage/bag/plants(src)
|
||||
src.modules += new /obj/item/weapon/pen/robopen(src)
|
||||
src.emag = new /obj/item/weapon/hand_tele(src)
|
||||
|
||||
@@ -3642,7 +3642,7 @@
|
||||
color = "#102000"
|
||||
adj_temp = -5
|
||||
adj_sleepy = -2
|
||||
caffeine = 1
|
||||
caffeine = 0.2
|
||||
taste_description = "electric cherry"
|
||||
|
||||
/datum/reagent/drink/zorasoda/phoron
|
||||
@@ -3652,7 +3652,7 @@
|
||||
color = "#863333"
|
||||
adj_temp = -5
|
||||
adj_sleepy = -2
|
||||
caffeine = 1
|
||||
caffeine = 0.2
|
||||
taste_description = "electric grape"
|
||||
|
||||
/datum/reagent/drink/zorasoda/kois
|
||||
@@ -3662,7 +3662,7 @@
|
||||
color = "#dcd9cd"
|
||||
adj_temp = -5
|
||||
adj_sleepy = -2
|
||||
caffeine = 1
|
||||
caffeine = 0.2
|
||||
taste_description = "sugary cabbage"
|
||||
|
||||
/datum/reagent/drink/zorasoda/kois/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
|
||||
@@ -3677,7 +3677,7 @@
|
||||
color = "#365000"
|
||||
adj_temp = -5
|
||||
adj_sleepy = -3
|
||||
caffeine = 2
|
||||
caffeine = 0.3
|
||||
taste_description = "a full-body bite into an acidic lemon"
|
||||
|
||||
/datum/reagent/drink/zorasoda/hozm/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
|
||||
@@ -3694,7 +3694,7 @@
|
||||
color = "#100800"
|
||||
adj_temp = -5
|
||||
adj_sleepy = -3
|
||||
caffeine = 0.8
|
||||
caffeine = 0.1
|
||||
taste_description = "fizzy nettles"
|
||||
|
||||
/datum/reagent/drink/zorasoda/venomgrass/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
|
||||
@@ -3709,7 +3709,7 @@
|
||||
color = "#E78108"
|
||||
adj_temp = -5
|
||||
adj_sleepy = -3
|
||||
caffeine = 1
|
||||
caffeine = 0.2
|
||||
unaffected_species = IS_MACHINE
|
||||
taste_description = "orange cream"
|
||||
|
||||
@@ -3725,7 +3725,7 @@
|
||||
color = "#0000CD"
|
||||
adj_temp = -5
|
||||
adj_sleepy = -3
|
||||
caffeine = 1
|
||||
caffeine = 0.2
|
||||
taste_description = "flat raspberry"
|
||||
|
||||
/datum/reagent/drink/zorasoda/cthur/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
|
||||
@@ -3761,7 +3761,7 @@
|
||||
color = "#FFFF00"
|
||||
adj_temp = -5
|
||||
adj_sleepy = -3
|
||||
caffeine = 1
|
||||
caffeine = 0.2
|
||||
taste_description = "a reassuring spectrum of color"
|
||||
|
||||
/datum/reagent/drink/zorasoda/jelly/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
|
||||
|
||||
@@ -5016,7 +5016,7 @@
|
||||
name = "mystery chocolate truffle"
|
||||
desc = "Rich bite-sized chocolate with a mystery filling!"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/random/Initialize()
|
||||
/obj/item/weapon/reagent_containers/food/snacks/truffle/random/Initialize()
|
||||
. = ..()
|
||||
var/reagent_string = pick(list("cream","cherryjelly","mint","frostoil","capsaicin","cream","coffee","milkshake"))
|
||||
reagents.add_reagent(reagent_string, 4)
|
||||
@@ -5105,7 +5105,7 @@
|
||||
nutriment_desc = list("pizza crust" = 5, "tomato" = 5)
|
||||
nutriment_amt = 5
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/baconburger
|
||||
/obj/item/weapon/reagent_containers/food/snacks/burger/bacon
|
||||
name = "bacon burger"
|
||||
desc = "The cornerstone of every nutritious breakfast, now with bacon!"
|
||||
icon_state = "hburger"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/obj/structure/reagent_dispensers
|
||||
name = "Strange dispenser"
|
||||
name = "strange dispenser"
|
||||
desc = "What the fuck is this?"
|
||||
icon = 'icons/obj/objects.dmi'
|
||||
icon_state = "watertank"
|
||||
@@ -128,7 +128,6 @@
|
||||
icon_state = "weldtank"
|
||||
accept_any_reagent = FALSE
|
||||
amount_per_transfer_from_this = 10
|
||||
var/modded = 0
|
||||
var/defuse = 0
|
||||
var/armed = 0
|
||||
var/obj/item/device/assembly_holder/rig = null
|
||||
@@ -140,7 +139,7 @@
|
||||
/obj/structure/reagent_dispensers/fueltank/examine(mob/user)
|
||||
if(!..(user, 2))
|
||||
return
|
||||
if (modded)
|
||||
if (is_leaking)
|
||||
user << "<span class='warning'>Fuel faucet is wrenched open, leaking the fuel!</span>"
|
||||
if(rig)
|
||||
user << "<span class='notice'>There is some kind of device rigged to the tank.</span>"
|
||||
@@ -215,7 +214,7 @@
|
||||
..()
|
||||
|
||||
/obj/structure/reagent_dispensers/fueltank/fire_act(datum/gas_mixture/air, temperature, volume)
|
||||
if (modded)
|
||||
if (is_leaking)
|
||||
ex_act(2.0)
|
||||
else if (temperature > T0C+500)
|
||||
ex_act(2.0)
|
||||
@@ -226,7 +225,7 @@
|
||||
ex_act(2.0)
|
||||
|
||||
/obj/structure/reagent_dispensers/peppertank
|
||||
name = "Pepper Spray Refiller"
|
||||
name = "pepper spray refiller"
|
||||
desc = "Refill pepper spray canisters."
|
||||
icon = 'icons/obj/objects.dmi'
|
||||
icon_state = "peppertank"
|
||||
@@ -240,7 +239,7 @@
|
||||
reagents.add_reagent("condensedcapsaicin",capacity)
|
||||
|
||||
/obj/structure/reagent_dispensers/water_cooler
|
||||
name = "Water-Cooler"
|
||||
name = "water-cooler"
|
||||
desc = "A machine that dispenses water to drink."
|
||||
amount_per_transfer_from_this = 5
|
||||
icon = 'icons/obj/vending.dmi'
|
||||
@@ -268,6 +267,8 @@
|
||||
user.visible_message("\The [user] unfastens the screws securing \the [src] to the floor.", "You unfasten the screws securing \the [src] to the floor.")
|
||||
anchored = 0
|
||||
return
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/structure/reagent_dispensers/beerkeg
|
||||
name = "beer keg"
|
||||
@@ -292,7 +293,7 @@
|
||||
reagents.add_reagent("xuizijuice",capacity)
|
||||
|
||||
/obj/structure/reagent_dispensers/virusfood
|
||||
name = "Virus Food Dispenser"
|
||||
name = "virus food dispenser"
|
||||
desc = "A dispenser of virus food."
|
||||
icon = 'icons/obj/objects.dmi'
|
||||
icon_state = "virusfoodtank"
|
||||
@@ -306,7 +307,7 @@
|
||||
reagents.add_reagent("virusfood", capacity)
|
||||
|
||||
/obj/structure/reagent_dispensers/acid
|
||||
name = "Sulphuric Acid Dispenser"
|
||||
name = "sulphuric acid dispenser"
|
||||
desc = "A dispenser of acid for industrial processes."
|
||||
icon = 'icons/obj/objects.dmi'
|
||||
icon_state = "acidtank"
|
||||
|
||||
Reference in New Issue
Block a user