mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-08-22 12:29:46 +01:00
Merge branch 'upstream/development' into development
# Conflicts: # code/_helpers/time.dm # code/game/objects/items/devices/floor_painter.dm # code/game/objects/items/stacks/medical.dm # code/global.dm # code/modules/cargo/randomstock.dm # code/modules/mob/living/carbon/human/human_defense.dm # code/modules/mob/living/simple_animal/simple_animal.dm # code/modules/mob/mob_movement.dm # code/modules/paperwork/faxmachine.dm
This commit is contained in:
@@ -7,7 +7,7 @@
|
||||
var/roundstart_hour = 0
|
||||
//Returns the world time in english
|
||||
proc/worldtime2text(time = world.time, timeshift = 1)
|
||||
if(!roundstart_hour) roundstart_hour = pick(2,7,12,17)
|
||||
if(!roundstart_hour) roundstart_hour = rand(0, 23)
|
||||
return timeshift ? time2text(time+(36000*roundstart_hour), "hh:mm") : time2text(time, "hh:mm")
|
||||
|
||||
proc/worldtime2ticks(time = world.time)
|
||||
|
||||
@@ -37,21 +37,21 @@
|
||||
/datum/controller/process/night_lighting/preStart()
|
||||
|
||||
switch (worldtime2ticks())
|
||||
if (0 to MORNING_LIGHT_RESET)
|
||||
if (0 to config.nl_finish)
|
||||
deactivate()
|
||||
if (NIGHT_LIGHT_ACTIVE to TICKS_IN_DAY)
|
||||
if (config.nl_start to TICKS_IN_DAY)
|
||||
activate()
|
||||
|
||||
|
||||
/datum/controller/process/night_lighting/doWork()
|
||||
|
||||
switch (worldtime2ticks())
|
||||
if (0 to MORNING_LIGHT_RESET)
|
||||
if (0 to config.nl_finish)
|
||||
if (isactive)
|
||||
command_announcement.Announce("Good morning. The time is [worldtime2text()]. \n\nThe automated systems aboard the [station_name()] will now return the public hallway lighting levels to normal.", "Automated Lighting System", new_sound = 'sound/misc/bosuns_whistle.ogg')
|
||||
deactivate()
|
||||
|
||||
if (NIGHT_LIGHT_ACTIVE to TICKS_IN_DAY)
|
||||
if (config.nl_start to TICKS_IN_DAY)
|
||||
if (!isactive)
|
||||
command_announcement.Announce("Good evening. The time is [worldtime2text()]. \n\nThe automated systems aboard the [station_name()] will now dim lighting in the public hallways in order to accommodate the circadian rhythm of some species.", "Automated Lighting System", new_sound = 'sound/misc/bosuns_whistle.ogg')
|
||||
activate()
|
||||
|
||||
@@ -176,6 +176,8 @@ var/list/gamemode_cache = list()
|
||||
var/ghost_interaction = 0
|
||||
|
||||
var/night_lighting = 0
|
||||
var/nl_start = 19 * TICKS_IN_HOUR
|
||||
var/nl_finish = 8 * TICKS_IN_HOUR
|
||||
|
||||
var/comms_password = ""
|
||||
|
||||
@@ -622,6 +624,12 @@ var/list/gamemode_cache = list()
|
||||
if("night_lighting")
|
||||
config.night_lighting = 1
|
||||
|
||||
if("nl_start_hour")
|
||||
config.nl_start = text2num(value) * TICKS_IN_HOUR
|
||||
|
||||
if("nl_finish_hour")
|
||||
config.nl_finish = text2num(value) * TICKS_IN_HOUR
|
||||
|
||||
if("disable_player_mice")
|
||||
config.disable_player_mice = 1
|
||||
|
||||
|
||||
@@ -1669,3 +1669,32 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
|
||||
containername = "security magnetic locks"
|
||||
access = access_security
|
||||
group = "Security"
|
||||
|
||||
/datum/supply_packs/randomised/glowsticks
|
||||
name = "Glowsticks crate"
|
||||
num_contained = 4
|
||||
contains = list(/obj/item/device/flashlight/glowstick,
|
||||
/obj/item/device/flashlight/glowstick/red,
|
||||
/obj/item/device/flashlight/glowstick/blue,
|
||||
/obj/item/device/flashlight/glowstick/orange,
|
||||
/obj/item/device/flashlight/glowstick/yellow)
|
||||
cost = 25
|
||||
containertype = /obj/structure/closet/crate
|
||||
containername = "glowsticks crate"
|
||||
group = "Operations"
|
||||
|
||||
/datum/supply_packs/randomised/illegalguns
|
||||
name = "Illegal weapons crate"
|
||||
num_contained = 2
|
||||
contains = list(/obj/item/weapon/gun/projectile/automatic/mini_uzi,
|
||||
/obj/item/weapon/gun/projectile/boltaction,
|
||||
/obj/item/weapon/gun/projectile/silenced,
|
||||
/obj/item/weapon/gun/projectile/pirate,
|
||||
/obj/item/weapon/gun/projectile/revolver/derringer,
|
||||
/obj/item/weapon/gun/projectile/dragunov,
|
||||
/obj/item/weapon/gun/energy/retro)
|
||||
cost = 120
|
||||
containertype = /obj/structure/closet/crate
|
||||
containername = "Unlabeled crate"
|
||||
contraband = 1
|
||||
group = "Security"
|
||||
|
||||
@@ -404,7 +404,7 @@
|
||||
|
||||
if(willing)
|
||||
|
||||
visible_message("[user] starts putting [G:affecting:name] into \the [src].", 3)
|
||||
visible_message("[user] starts putting [G:affecting:name] into \the [name].", 3)
|
||||
|
||||
if(do_after(user, 20))
|
||||
if(!M || !G || !G:affecting) return
|
||||
@@ -444,7 +444,7 @@
|
||||
var/mob/living/L = O
|
||||
|
||||
if(L.stat == DEAD)
|
||||
user << "<span class='notice'>Dead people can not be put into cryo.</span>"
|
||||
user << "<span class='notice'>Dead people can not be put into stasis.</span>"
|
||||
return
|
||||
|
||||
for(var/mob/living/carbon/slime/M in range(1,L))
|
||||
@@ -455,7 +455,7 @@
|
||||
var/willing = null //We don't want to allow people to be forced into despawning.
|
||||
|
||||
if(L.client)
|
||||
if(alert(L,"Would you like to enter cryosleep?",,"Yes","No") == "Yes")
|
||||
if(alert(L,"Would you like to enter stasis?",,"Yes","No") == "Yes")
|
||||
if(!L) return
|
||||
willing = 1
|
||||
else
|
||||
@@ -463,9 +463,9 @@
|
||||
|
||||
if(willing)
|
||||
if(L == user)
|
||||
visible_message("[user] starts climbing into the cryo pod.", 3)
|
||||
visible_message("[user] starts climbing into \the [name].", 3)
|
||||
else
|
||||
visible_message("[user] starts putting [L] into the cryo pod.", 3)
|
||||
visible_message("[user] starts putting [L] into \the [name].", 3)
|
||||
|
||||
if(do_after(user, 20))
|
||||
if(!L) return
|
||||
@@ -476,7 +476,7 @@
|
||||
L.client.perspective = EYE_PERSPECTIVE
|
||||
L.client.eye = src
|
||||
else
|
||||
user << "<span class='notice'>You stop [L == user ? "climbing into the cryo pod." : "putting [L] into the cryo pod."]</span>"
|
||||
user << "<span class='notice'>You stop [L == user ? "climbing into" : "putting [L] into"] \the [name].</span>"
|
||||
return
|
||||
|
||||
icon_state = occupied_icon_state
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
//icon_state = "inactive"
|
||||
w_class = 3
|
||||
req_access = list(access_cent_specops)
|
||||
health = 90
|
||||
health = 150
|
||||
|
||||
var/department = "CENTCOM"
|
||||
var/status = 0
|
||||
@@ -107,13 +107,17 @@
|
||||
user << "<span class='danger'>You cannot swipe your [I] through [src] with it partially dismantled!</span>"
|
||||
return
|
||||
|
||||
if (istype(I, /obj/item/weapon) && user.a_intent == "hurt")
|
||||
if (I.force >= 8)
|
||||
if (istype(I, /obj/item/weapon) && user.a_intent == "harm")
|
||||
if (I.force >= 18)
|
||||
user.visible_message("<span class='danger'>[user] bashes [src] with [I]!</span>", "<span class='danger'>You strike [src] with [I], damaging it!</span>")
|
||||
takedamage(I.force)
|
||||
playsound(loc, "sound/weapons/genhit[rand(1,3)].ogg", I.force*3, 1)
|
||||
spawn(3)
|
||||
playsound(loc, "sound/effects/sparks[rand(1,4)].ogg", 30, 1)
|
||||
return
|
||||
else
|
||||
user.visible_message("<span class='notice'>[user] hits [src] with [I] to no visible effect.</span>", "<span class='notice'>You hit [src] with [I], but it appears to have no effect.</span>")
|
||||
user.visible_message("<span class='danger'>[user] hits [src] with [I] but fails to damage it.</span>", "<span class='warning'>You hit [src] with [I], [I.force >= 10 ? "and it almost makes a dent!" : "but it appears to have no visible effect."]</span>")
|
||||
playsound(loc, "sound/weapons/Genhit.ogg", I.force*2.5, 1)
|
||||
return
|
||||
|
||||
switch (constructionstate)
|
||||
@@ -402,13 +406,14 @@
|
||||
overlays += "overlay_deconstruct_[constructionstate]"
|
||||
|
||||
/obj/item/device/magnetic_lock/proc/takedamage(var/damage)
|
||||
health -= damage
|
||||
health -= rand(damage/2, damage)
|
||||
|
||||
if (damage >= 40 && prob(50))
|
||||
health = 0
|
||||
|
||||
if (health <= 0)
|
||||
visible_message("<span class='danger'>[src] sparks[target ? " and falls off of \the [target]!" : "!"] It is now completely unusable!</span>")
|
||||
detach(0)
|
||||
status = STATUS_BROKEN
|
||||
update_icon()
|
||||
return
|
||||
|
||||
@@ -10,9 +10,9 @@
|
||||
var/heal_brute = 0
|
||||
var/heal_burn = 0
|
||||
|
||||
/obj/item/stack/medical/attack(mob/living/carbon/M as mob, mob/user as mob)
|
||||
if (!istype(M))
|
||||
user << "<span class='warning'>\The [src] cannot be applied to [M]!</span>"
|
||||
/obj/item/stack/medical/attack(mob/living/M as mob, mob/user as mob)
|
||||
if (!istype(M) || istype(M, /mob/living/silicon))
|
||||
user << "\red \The [src] cannot be applied to [M]!"
|
||||
return 1
|
||||
|
||||
if ( ! (istype(user, /mob/living/carbon/human) || \
|
||||
@@ -40,13 +40,21 @@
|
||||
H.UpdateDamageIcon()
|
||||
|
||||
else
|
||||
if (!M.bruteloss && !M.fireloss)
|
||||
user << "<span class='notice'> [M] seems healthy, there are no wounds to treat! </span>"
|
||||
return 1
|
||||
|
||||
M.heal_organ_damage((src.heal_brute/2), (src.heal_burn/2))
|
||||
user.visible_message( \
|
||||
"<span class='notice'>[M] has been applied with [src] by [user].</span>", \
|
||||
"<span class='notice'>You apply \the [src] to [M].</span>" \
|
||||
)
|
||||
use(1)
|
||||
"<span class = 'notice'> [user] starts applying \the [src] to [M].</span>", \
|
||||
"<span class = 'notice'> You start applying \the [src] to [M].</span>" \
|
||||
)
|
||||
if (do_mob(user, M, 30))
|
||||
M.heal_organ_damage((src.heal_brute/2), (src.heal_burn/2))
|
||||
user.visible_message( \
|
||||
"<span class = 'notice'> [M] has been applied with [src] by [user].</span>", \
|
||||
"<span class = 'notice'> You apply \the [src] to [M].</span>" \
|
||||
)
|
||||
use(1)
|
||||
|
||||
M.updatehealth()
|
||||
/obj/item/stack/medical/bruise_pack
|
||||
@@ -55,6 +63,7 @@
|
||||
desc = "Some sterile gauze to wrap around bloody stumps."
|
||||
icon_state = "brutepack"
|
||||
origin_tech = list(TECH_BIO = 1)
|
||||
heal_brute = 4
|
||||
|
||||
/obj/item/stack/medical/bruise_pack/attack(mob/living/carbon/M as mob, mob/user as mob)
|
||||
if(..())
|
||||
@@ -114,7 +123,7 @@
|
||||
gender = PLURAL
|
||||
singular_name = "ointment"
|
||||
icon_state = "ointment"
|
||||
heal_burn = 1
|
||||
heal_burn = 4
|
||||
origin_tech = list(TECH_BIO = 1)
|
||||
|
||||
/obj/item/stack/medical/ointment/attack(mob/living/carbon/M as mob, mob/user as mob)
|
||||
@@ -151,7 +160,7 @@
|
||||
singular_name = "advanced trauma kit"
|
||||
desc = "An advanced trauma kit for severe injuries."
|
||||
icon_state = "traumakit"
|
||||
heal_brute = 0
|
||||
heal_brute = 8
|
||||
origin_tech = list(TECH_BIO = 1)
|
||||
|
||||
/obj/item/stack/medical/advanced/bruise_pack/attack(mob/living/carbon/M as mob, mob/user as mob)
|
||||
@@ -213,7 +222,7 @@
|
||||
singular_name = "advanced burn kit"
|
||||
desc = "An advanced treatment kit for severe burns."
|
||||
icon_state = "burnkit"
|
||||
heal_burn = 0
|
||||
heal_burn = 8
|
||||
origin_tech = list(TECH_BIO = 1)
|
||||
|
||||
|
||||
|
||||
@@ -510,10 +510,9 @@
|
||||
/obj/random/coin/item_to_spawn()
|
||||
var/list/coin = list("/obj/item/weapon/coin/iron" = 5,
|
||||
"/obj/item/weapon/coin/silver" = 3,
|
||||
"/obj/item/weapon/coin/gold" = 1,
|
||||
"/obj/item/weapon/coin/silver" = 0.7,
|
||||
"/obj/item/weapon/coin/gold" = 0.7,
|
||||
"/obj/item/weapon/coin/phoron" = 0.5,
|
||||
"obj/item/weapon/coin/uranium" = 0.5,
|
||||
"/obj/item/weapon/coin/uranium" = 0.5,
|
||||
"/obj/item/weapon/coin/platinum" = 0.2,
|
||||
"/obj/item/weapon/coin/diamond" = 0.1,
|
||||
)
|
||||
@@ -581,7 +580,7 @@
|
||||
"/obj/item/clothing/glasses/material" = 0.8,
|
||||
"/obj/item/clothing/glasses/sunglasses" = 1.5,
|
||||
"/obj/item/clothing/glasses/welding" = 1.2,
|
||||
"/obj/item/clothing/under/captain_fly" = 0.7,
|
||||
"/obj/item/clothing/under/captain_fly" = 0.5,
|
||||
"/obj/item/clothing/under/rank/mailman" = 0.6,
|
||||
"/obj/item/clothing/under/rank/vice" = 0.8,
|
||||
"/obj/item/clothing/under/assistantformal" = 1,
|
||||
@@ -591,9 +590,11 @@
|
||||
"/obj/item/clothing/under/serviceoveralls" = 1,
|
||||
"/obj/item/clothing/under/psyche" = 0.5,
|
||||
"/obj/item/clothing/under/track" = 0.9,
|
||||
"/obj/item/clothing/under/rank/dispatch" = 1,
|
||||
"/obj/item/clothing/under/rank/dispatch" = 0.8,
|
||||
"/obj/item/clothing/under/syndicate/tacticool" = 1,
|
||||
"/obj/item/clothing/under/syndicate/tracksuit" = 0.2,
|
||||
"/obj/item/clothing/under/rank/clown" = 0.1,
|
||||
"/obj/item/clothing/under/mime" = 0.1,
|
||||
"/obj/item/clothing/accessory/badge" = 0.2,
|
||||
"/obj/item/clothing/accessory/badge/old" = 0.2,
|
||||
"/obj/item/clothing/accessory/storage/webbing" = 0.6,
|
||||
@@ -620,6 +621,8 @@
|
||||
"/obj/item/clothing/mask/gas/syndicate" = 0.4,
|
||||
"/obj/item/clothing/mask/fakemoustache" = 0.4,
|
||||
"/obj/item/clothing/mask/horsehead" = 0.9,
|
||||
"/obj/item/clothing/mask/gas/clown_hat" = 0.1,
|
||||
"/obj/item/clothing/mask/gas/mime" = 0.1,
|
||||
"/obj/item/clothing/shoes/rainbow" = 1,
|
||||
"/obj/item/clothing/shoes/jackboots" = 1,
|
||||
"/obj/item/clothing/shoes/workboots" = 1,
|
||||
@@ -658,6 +661,7 @@
|
||||
"/obj/item/device/flashlight/maglight" = 0.4,
|
||||
"/obj/item/device/flashlight/flare" = 0.5,
|
||||
"/obj/item/device/flashlight/lantern" = 0.4,
|
||||
"/obj/item/device/taperecorder" = 0.6,
|
||||
"/obj/item/weapon/reagent_containers/food/drinks/teapot" = 0.4,
|
||||
"/obj/item/weapon/reagent_containers/food/drinks/flask/shiny" = 0.3,
|
||||
"/obj/item/weapon/reagent_containers/food/drinks/flask/lithium" = 0.3,
|
||||
@@ -679,7 +683,10 @@
|
||||
"/obj/random/colored_jumpsuit" = 0.7,
|
||||
"/obj/random/booze" = 1.1,
|
||||
"/obj/random/belt" = 0.9,
|
||||
"/obj/random/backpack" = 0.7,
|
||||
"/obj/random/contraband" = 0.9,
|
||||
"/obj/random/firstaid" = 0.4,
|
||||
"/obj/random/medical" = 0.4,
|
||||
"/obj/random/glowstick" = 0.7,
|
||||
"/obj/item/weapon/caution/cone" = 0.7,
|
||||
"/obj/item/weapon/staff/broom" = 0.5,
|
||||
@@ -688,6 +695,10 @@
|
||||
"/obj/item/weapon/storage/box/donkpockets" = 0.6,
|
||||
"/obj/item/weapon/contraband/poster" = 1.3,
|
||||
"/obj/item/device/magnetic_lock/security" = 0.3,
|
||||
"/obj/item/device/magnetic_lock/engineering" = 0.3
|
||||
"/obj/item/device/magnetic_lock/engineering" = 0.3,
|
||||
"/obj/item/weapon/shovel" = 0.5,
|
||||
"/obj/item/weapon/pickaxe" = 0.4,
|
||||
"/obj/item/weapon/pickaxe" = 0.4,
|
||||
"/obj/item/weapon/inflatable_duck" = 0.2
|
||||
)
|
||||
return pickweight(maint)
|
||||
|
||||
@@ -160,3 +160,7 @@ var/max_explosion_range = 14
|
||||
var/global/obj/item/device/radio/intercom/global_announcer = new(null)
|
||||
|
||||
var/list/station_departments = list("Command", "Medical", "Engineering", "Science", "Security", "Cargo", "Civilian")
|
||||
|
||||
var/global/const/TICKS_IN_DAY = 864000
|
||||
var/global/const/TICKS_IN_HOUR = 36000
|
||||
var/global/const/TICKS_IN_SECOND = 10
|
||||
|
||||
@@ -32,6 +32,31 @@ more variety, and keeps the odds of any one specific item to be about the same
|
||||
|
||||
*/
|
||||
|
||||
|
||||
|
||||
//Debugging verbs. Uncomment this block for some useful cargo debug commands
|
||||
/*
|
||||
var/global/stockname = ""
|
||||
|
||||
/client/verb/set_stock_name()
|
||||
stockname = input(usr, "Enter name", "Select stock by name") as text
|
||||
|
||||
/client/verb/spawn_1()
|
||||
spawn_stock(stockname, get_turf(mob))
|
||||
|
||||
/client/verb/spawn_10()
|
||||
var/num = 10
|
||||
while (num > 0)
|
||||
spawn_stock(stockname, get_turf(mob))
|
||||
num--
|
||||
|
||||
/client/verb/spawn_100()
|
||||
var/num = 100
|
||||
while (num > 0)
|
||||
spawn_stock(stockname, get_turf(mob))
|
||||
num--
|
||||
*/
|
||||
|
||||
var/list/global/random_stock_common = list(
|
||||
"toolbox" = 4,
|
||||
"meds" = 5,
|
||||
@@ -90,15 +115,16 @@ var/list/global/random_stock_common = list(
|
||||
"cosmetic" = 2.2,
|
||||
"suitcooler" = 1.2,
|
||||
"officechair" = 1.2,
|
||||
"booze" = 3,
|
||||
"booze" = 3.5,
|
||||
"plant" = 3.5,
|
||||
"bag" = 2,
|
||||
"extinguish" = 2.2,
|
||||
"hailer" = 1.1,
|
||||
"target" = 2,
|
||||
"snacks" = 3.5,
|
||||
"oxytank" = 2.5,
|
||||
"snacks" = 4,
|
||||
"oxytank" = 2.5,//
|
||||
"signs" = 4,
|
||||
"posters" = 3,
|
||||
"parts" = 6,
|
||||
"cane" = 2,
|
||||
"warning" = 2.2,
|
||||
@@ -120,7 +146,7 @@ var/list/global/random_stock_uncommon = list(
|
||||
"flare" = 2,
|
||||
"deathalarm" = 2,
|
||||
"trackimp" = 1,
|
||||
"flashbang" = 1,
|
||||
"flashbang" = 0.75,
|
||||
"cuffs" = 1,
|
||||
"monkey" = 2,
|
||||
"specialcrayon" = 1.5,
|
||||
@@ -136,8 +162,8 @@ var/list/global/random_stock_uncommon = list(
|
||||
"bible" = 1,
|
||||
"advwelder" = 2,
|
||||
"sord" = 1,
|
||||
"policebaton" = 2,
|
||||
"stunbaton" = 1,//batons spawn with no powercell
|
||||
"policebaton" = 1.5,
|
||||
"stunbaton" = 0.75,//batons spawn with no powercell
|
||||
"watches" = 3,
|
||||
"MMI" = 1.5,
|
||||
"voidsuit" = 2,
|
||||
@@ -153,21 +179,21 @@ var/list/global/random_stock_uncommon = list(
|
||||
"linenbin" = 1,
|
||||
"coatrack" = 1,
|
||||
"riotshield" = 2,
|
||||
"fireaxe" = 1.5,
|
||||
"fireaxe" = 1,
|
||||
"service" = 2,
|
||||
"robot" = 2,
|
||||
"latexb" = 1.2,
|
||||
"latexb" = 0.5,
|
||||
"taperoll" = 1,
|
||||
"headset" = 2,
|
||||
"bat" = 1.2,
|
||||
"scythe" = 1,
|
||||
"scythe" = 0.75,
|
||||
"manual" = 2,
|
||||
"jammer" = 2,
|
||||
"rped" = 2,
|
||||
"briefcase" = 2,
|
||||
"blade" = 1.5,
|
||||
"blade" = 1.2,
|
||||
"exoquip" = 2,
|
||||
"laserscalpel" = 1.5,
|
||||
"laserscalpel" = 1.3,
|
||||
"electropack" = 1,
|
||||
"nothing" = 0)
|
||||
|
||||
@@ -175,30 +201,29 @@ var/list/global/random_stock_rare = list(
|
||||
"gold" = 2.5,
|
||||
"diamond" = 1.5,
|
||||
"uranium" = 3,
|
||||
"EMP" = 1,
|
||||
"EMP" = 0.75,
|
||||
"hypercell" = 3,
|
||||
"combatmeds" = 3,
|
||||
"batterer" = 1,
|
||||
"batterer" = 0.75,
|
||||
"posibrain" = 3,
|
||||
"augmentvision" = 1.6,
|
||||
"thermals" = 2,
|
||||
"thermals" = 0.75,
|
||||
"bsbeaker" = 3,
|
||||
"energyshield" = 3,
|
||||
"energyshield" = 2,
|
||||
"hardsuit" = 0.75,
|
||||
"cluster" = 2.0,
|
||||
"cloak" = 1,
|
||||
"sword" = 1,
|
||||
"cloak" = 0.75,
|
||||
"sword" = 0.5,
|
||||
"ims" = 1.5,
|
||||
"exogear" = 1.5,
|
||||
"teleporter" = 1,
|
||||
"voice" = 2,
|
||||
"voice" = 1.5,
|
||||
"nothing" = 0)
|
||||
|
||||
var/list/global/random_stock_large = list(
|
||||
"russian" = 1,
|
||||
"emergency" = 2,
|
||||
"firecloset" = 2,
|
||||
"tacticool" = 0.4,
|
||||
"tacticool" = 0.2,
|
||||
"radsuit" = 3,
|
||||
"exosuit" = 1.2,//A randomly generated exosuit in a very variable condition.
|
||||
"EOD" = 1.5,
|
||||
@@ -572,8 +597,12 @@ var/list/global/random_stock_large = list(
|
||||
if("circuitboard")
|
||||
//Spawns a random circuitboard
|
||||
//Allboards being a global list might be faster, but it didnt seem worth the extra memory
|
||||
var/list/allboards = typesof(/obj/item/weapon/circuitboard)
|
||||
allboards -= typesof(/obj/item/weapon/circuitboard/mecha)
|
||||
var/list/allboards = subtypesof(/obj/item/weapon/circuitboard)
|
||||
var/list/exclusion = list(/obj/item/weapon/circuitboard/unary_atmos, \
|
||||
/obj/item/weapon/circuitboard/telecomms, )
|
||||
exclusion += typesof(/obj/item/weapon/circuitboard/mecha)
|
||||
|
||||
allboards -= exclusion
|
||||
var/type = pick(allboards)
|
||||
new type(L)
|
||||
|
||||
@@ -629,14 +658,18 @@ var/list/global/random_stock_large = list(
|
||||
new /obj/item/weapon/grenade/chem_grenade/metalfoam(L)
|
||||
if ("gloves")
|
||||
var/list/allgloves = typesof(/obj/item/clothing/gloves)
|
||||
|
||||
var/list/exclusion = list(/obj/item/clothing/gloves,
|
||||
/obj/item/clothing/gloves/fluff,
|
||||
/obj/item/clothing/gloves/swat/bst)
|
||||
exclusion += typesof(/obj/item/clothing/gloves/rig)
|
||||
exclusion += typesof(/obj/item/clothing/gloves/lightrig)
|
||||
allgloves -= exclusion
|
||||
var/number = rand(1,5)
|
||||
while (number > 0)
|
||||
var/gtype = pick(allgloves)
|
||||
var/thing = new gtype(L)
|
||||
if (!istype(thing, /obj/item/clothing/gloves/rig))//Rig gloves would be buggy
|
||||
number--
|
||||
else
|
||||
qdel(thing)
|
||||
new gtype(L)
|
||||
number--
|
||||
if ("insulated")
|
||||
new /obj/item/clothing/gloves/yellow(L)
|
||||
new /obj/item/clothing/gloves/yellow(L)
|
||||
@@ -650,7 +683,6 @@ var/list/global/random_stock_large = list(
|
||||
"/obj/item/device/slime_scanner" = 1,
|
||||
"/obj/item/weapon/autopsy_scanner" = 1,
|
||||
"/obj/item/device/robotanalyzer" = 4,
|
||||
"/obj/machinery/disease2/diseaseanalyser" = 0.5,
|
||||
"/obj/item/weapon/mining_scanner" = 1,
|
||||
"/obj/item/device/ano_scanner" = 1,
|
||||
"/obj/item/device/reagent_scanner" = 2,
|
||||
@@ -756,7 +788,7 @@ var/list/global/random_stock_large = list(
|
||||
new /obj/structure/reagent_dispensers/beerkeg(T)
|
||||
else
|
||||
var/list/drinks = typesof(/obj/item/weapon/reagent_containers/food/drinks/bottle)
|
||||
|
||||
drinks -= /obj/item/weapon/reagent_containers/food/drinks/bottle
|
||||
var/number = rand(1,3)
|
||||
while (number > 0)
|
||||
var/type = pick(drinks)
|
||||
@@ -884,8 +916,6 @@ var/list/global/random_stock_large = list(
|
||||
new /obj/item/weapon/cane/concealed(L)
|
||||
else if (prob(20))
|
||||
new /obj/item/weapon/staff/broom(L)
|
||||
else if (prob(30))
|
||||
new /obj/item/weapon/staff/stick(L)
|
||||
else
|
||||
new /obj/item/weapon/cane(L)
|
||||
|
||||
@@ -905,7 +935,6 @@ var/list/global/random_stock_large = list(
|
||||
"/obj/item/clothing/mask/gas/mime" = 0.5,
|
||||
"/obj/item/clothing/mask/gas/monkeymask" = 0.5,
|
||||
"/obj/item/clothing/mask/gas/sexymime" = 0.5,
|
||||
"/obj/item/clothing/mask/gas/death_commando" = 2,
|
||||
"/obj/item/clothing/mask/gas/cyborg" = 1,
|
||||
"/obj/item/clothing/mask/gas/owl_mask" = 1
|
||||
)
|
||||
@@ -933,6 +962,8 @@ var/list/global/random_stock_large = list(
|
||||
new /obj/item/device/flashlight/lantern(L)
|
||||
if (prob(50))
|
||||
new /obj/item/weapon/mining_scanner(L)
|
||||
if (prob(25))
|
||||
new /obj/item/weapon/storage/box/excavation(L)
|
||||
|
||||
if ("paicard")
|
||||
new /obj/item/device/paicard(L)
|
||||
@@ -1066,15 +1097,18 @@ var/list/global/random_stock_large = list(
|
||||
//Can be slotted into any dispenser
|
||||
if("chempack")
|
||||
var/total = rand(2,6)
|
||||
var/list/chems = chemical_reagents_list.Copy()
|
||||
var/list/exclusion = list("drink", "reagent", "adminordrazine", "beer2")
|
||||
chems -= exclusion
|
||||
for (var/i=0,i<total,i++)
|
||||
var/obj/item/weapon/reagent_containers/chem_disp_cartridge/C = new /obj/item/weapon/reagent_containers/chem_disp_cartridge(L)
|
||||
var/rname = pick(chemical_reagents_list)
|
||||
var/rname = pick(chems)
|
||||
var/datum/reagent/R = chemical_reagents_list[rname]
|
||||
|
||||
//If we get a drink, reroll it once.
|
||||
//Should result in a higher chance of getting medicines and chemicals
|
||||
if (istype(R, /datum/reagent/drink) || istype(R, /datum/reagent/ethanol))
|
||||
rname = pick(chemical_reagents_list)
|
||||
rname = pick(chems)
|
||||
R = chemical_reagents_list[rname]
|
||||
C.reagents.add_reagent(rname, C.volume)
|
||||
C.setLabel(R.name)
|
||||
@@ -1095,8 +1129,13 @@ var/list/global/random_stock_large = list(
|
||||
|
||||
//Spawns several random circuitboards
|
||||
if("circuitboards")
|
||||
var/list/allboards = typesof(/obj/item/weapon/circuitboard)
|
||||
allboards -= typesof(/obj/item/weapon/circuitboard/mecha)
|
||||
var/list/allboards = subtypesof(/obj/item/weapon/circuitboard)
|
||||
var/list/exclusion = list(/obj/item/weapon/circuitboard/unary_atmos, \
|
||||
/obj/item/weapon/circuitboard/telecomms, )
|
||||
exclusion += typesof(/obj/item/weapon/circuitboard/mecha)
|
||||
|
||||
allboards -= exclusion
|
||||
|
||||
var/number = rand(2,5)
|
||||
while (number > 0)
|
||||
var/type = pick(allboards)
|
||||
@@ -1138,8 +1177,10 @@ var/list/global/random_stock_large = list(
|
||||
new /obj/random/voidsuit(L,1)
|
||||
|
||||
if ("signs")
|
||||
var/list/allsigns = typesof(/obj/structure/sign)
|
||||
var/list/allsigns = subtypesof(/obj/structure/sign)
|
||||
allsigns -= typesof(/obj/structure/sign/double)
|
||||
allsigns -= typesof(/obj/structure/sign/poster)
|
||||
allsigns -= /obj/structure/sign/directions
|
||||
var/number = rand(1,5)
|
||||
|
||||
while (number > 0)
|
||||
@@ -1148,6 +1189,12 @@ var/list/global/random_stock_large = list(
|
||||
var/obj/structure/sign/S = new newsign(L)
|
||||
S.unfasten()
|
||||
number--
|
||||
if ("posters")
|
||||
new /obj/item/weapon/contraband/poster(L)
|
||||
if (prob(50))
|
||||
new /obj/item/weapon/contraband/poster(L)
|
||||
if (prob(50))
|
||||
new /obj/item/weapon/contraband/poster(L)
|
||||
|
||||
if ("violin")
|
||||
new /obj/item/device/violin(L)
|
||||
@@ -1415,8 +1462,6 @@ var/list/global/random_stock_large = list(
|
||||
new /obj/item/device/batterer(L)
|
||||
if("posibrain")
|
||||
new /obj/item/device/mmi/digital/posibrain(L)
|
||||
if("augmentvision")
|
||||
new /obj/item/clothing/glasses/hud/security/jensenshades(L)
|
||||
if("thermals")
|
||||
new /obj/item/clothing/glasses/thermal(L)
|
||||
if("bsbeaker")
|
||||
@@ -1448,30 +1493,30 @@ var/list/global/random_stock_large = list(
|
||||
//It will come with some screwy electronics and possibly need reprogramming
|
||||
var/list/rigs = list(
|
||||
"/obj/item/weapon/rig/unathi" = 2,
|
||||
"/obj/item/weapon/rig/unathi/fancy" = 1,
|
||||
"/obj/item/weapon/rig/unathi/fancy" = 0.75,
|
||||
"/obj/item/weapon/rig/combat" = 0.1,
|
||||
"/obj/item/weapon/rig/ert" = 0.2,
|
||||
"/obj/item/weapon/rig/ert/engineer" = 0.2,
|
||||
"/obj/item/weapon/rig/ert/medical" = 0.3,
|
||||
"/obj/item/weapon/rig/ert/security" = 0.15,
|
||||
"/obj/item/weapon/rig/ert/assetprotection" = 0.1,
|
||||
"/obj/item/weapon/rig/ert" = 0.1,
|
||||
"/obj/item/weapon/rig/ert/engineer" = 0.1,
|
||||
"/obj/item/weapon/rig/ert/medical" = 0.15,
|
||||
"/obj/item/weapon/rig/ert/security" = 0.075,
|
||||
"/obj/item/weapon/rig/ert/assetprotection" = 0.05,
|
||||
"/obj/item/weapon/rig/light" = 0.5,
|
||||
"/obj/item/weapon/rig/light/hacker" = 0.8,
|
||||
"/obj/item/weapon/rig/light/stealth" = 1.5,
|
||||
"/obj/item/weapon/rig/merc" = 1,
|
||||
"/obj/item/weapon/rig/merc" = 0.5,
|
||||
"/obj/item/weapon/rig/industrial" = 3,
|
||||
"/obj/item/weapon/rig/eva" = 3,
|
||||
"/obj/item/weapon/rig/ce" = 2,
|
||||
"/obj/item/weapon/rig/hazmat" = 4,
|
||||
"/obj/item/weapon/rig/medical" = 4,
|
||||
"/obj/item/weapon/rig/hazard" = 4,
|
||||
"/obj/item/weapon/rig/hazard" = 3,
|
||||
)
|
||||
|
||||
var/type = pickweight(rigs)
|
||||
var/obj/item/weapon/rig/module = new type(L)
|
||||
|
||||
//screw it up a bit
|
||||
var/cnd = rand(1,100)
|
||||
var/cnd = rand(40,100)
|
||||
module.lose_modules(cnd)
|
||||
module.misconfigure(cnd)
|
||||
module.sabotage_cell()
|
||||
@@ -1506,6 +1551,7 @@ var/list/global/random_stock_large = list(
|
||||
while (number > 0)
|
||||
var/type = pickweight(equips)
|
||||
new type(L)
|
||||
number--
|
||||
|
||||
if ("teleporter")
|
||||
new /obj/item/weapon/hand_tele(L)
|
||||
|
||||
@@ -154,9 +154,8 @@
|
||||
|
||||
M.implant_loyalty(M, 1)
|
||||
|
||||
var/obj/item/weapon/card/id/W = new(M)
|
||||
var/obj/item/weapon/card/id/centcom/W = new(M)
|
||||
W.name = "[M.real_name]'s ID Card"
|
||||
W.icon_state = "centcom"
|
||||
W.item_state = "id_inv"
|
||||
W.access = get_all_accesses() + get_centcom_access("CCIA Agent")
|
||||
W.assignment = "Central Command Internal Affairs Agent"
|
||||
|
||||
@@ -1108,6 +1108,12 @@ var/global/list/gear_datums = list()
|
||||
path = /obj/item/clothing/gloves/white/tajara
|
||||
cost = 2
|
||||
slot = slot_gloves
|
||||
|
||||
/datum/gear/watch
|
||||
display_name = "watch"
|
||||
path = /obj/item/clothing/gloves/watch
|
||||
cost = 2
|
||||
slot = slot_gloves
|
||||
|
||||
// Shoelocker
|
||||
|
||||
@@ -1116,21 +1122,21 @@ var/global/list/gear_datums = list()
|
||||
path = /obj/item/clothing/shoes/jackboots
|
||||
cost = 1
|
||||
slot = slot_shoes
|
||||
allowed_roles = list("Security Cadet","Security Officer","Head of Security","Warden","Detective","Internal Affairs Agent","Quartermaster","Head of Personnel","Captain")
|
||||
// allowed_roles = list("Security Cadet","Security Officer","Head of Security","Warden","Detective","Internal Affairs Agent","Quartermaster","Head of Personnel","Captain")
|
||||
|
||||
/datum/gear/toeless_jackboots
|
||||
display_name = "toe-less jackboots"
|
||||
path = /obj/item/clothing/shoes/jackboots/unathi
|
||||
cost = 1
|
||||
slot = slot_shoes
|
||||
allowed_roles = list("Security Cadet","Security Officer","Head of Security","Warden","Detective","Internal Affairs Agent","Quartermaster","Head of Personnel","Captain")
|
||||
// allowed_roles = list("Security Cadet","Security Officer","Head of Security","Warden","Detective","Internal Affairs Agent","Quartermaster","Head of Personnel","Captain")
|
||||
|
||||
/datum/gear/workboots
|
||||
display_name = "workboots"
|
||||
path = /obj/item/clothing/shoes/workboots
|
||||
cost = 1
|
||||
slot = slot_shoes
|
||||
allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Engineering Apprentice")
|
||||
// allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Engineering Apprentice")
|
||||
|
||||
/datum/gear/sandal
|
||||
display_name = "sandals"
|
||||
@@ -1558,4 +1564,4 @@ var/global/list/gear_datums = list()
|
||||
display_name = "neck bandanna, black"
|
||||
path = /obj/item/clothing/ears/bandanna/black
|
||||
cost = 1
|
||||
sort_category = "ears"
|
||||
sort_category = "ears"
|
||||
|
||||
@@ -573,10 +573,10 @@ All custom items with worn sprites must follow the contained sprite system: http
|
||||
last_special = world.time + 500
|
||||
|
||||
var/obj/item/organ/F = src.internal_organs_by_name["heart"]
|
||||
|
||||
|
||||
if(isnull(F))
|
||||
return
|
||||
|
||||
|
||||
F.damage += 5
|
||||
src << "<span class='warning'>You feel a stabbing pain in your chest!</span>"
|
||||
playsound(user, 'sound/effects/Heart Beat.ogg', 20, 1)
|
||||
@@ -616,9 +616,56 @@ All custom items with worn sprites must follow the contained sprite system: http
|
||||
item_state = "poslan_jacket"
|
||||
contained_sprite = 1
|
||||
|
||||
|
||||
/obj/item/sign/fluff/alexis_degree //Xenonuerology Doctorate - Alexis Shaw - Tenenza - DONE
|
||||
name = "xenonuerology degree"
|
||||
desc = "Certification for a doctorate in Xenonuerology, made out to Alexis Shaw by the St. Grahelm University of Biesel, authenticated by watermarking."
|
||||
icon_state = "alexis_degree"
|
||||
sign_state = "alexis_degree"
|
||||
w_class = 2
|
||||
w_class = 2
|
||||
|
||||
|
||||
/obj/item/clothing/mask/fluff/rur_collar //Tagging Collar - R.U.R - coalf - DONE
|
||||
name = "tagging collar"
|
||||
desc = "A steel tagging collar, a giant golden D is imprinted on the front."
|
||||
icon = 'icons/obj/custom_items/rur_collar.dmi'
|
||||
icon_state = "rur_collar"
|
||||
item_state = "rur_collar"
|
||||
contained_sprite = 1
|
||||
body_parts_covered = 0
|
||||
canremove = 0
|
||||
species_restricted = list("Machine")
|
||||
var/emagged = 0
|
||||
|
||||
/obj/item/clothing/mask/fluff/rur_collar/attackby(obj/item/I, mob/user)
|
||||
if(istype(I, /obj/item/weapon/card/emag) && !emagged)
|
||||
user << "<span class='danger'>You short out \the [src]'s locking mechanism.</span>"
|
||||
src.icon_state = "rur_collar_broken"
|
||||
src.canremove = 1
|
||||
src.emagged = 1
|
||||
playsound(src.loc, 'sound/effects/sparks1.ogg', 100, 0)
|
||||
return
|
||||
|
||||
return
|
||||
|
||||
|
||||
/obj/item/clothing/mask/bluescarf/fluff/simon_scarf //Fancy Scarf - Simon Greene - icydew - DONE
|
||||
name = "fancy scarf"
|
||||
desc = "A very smooth, dark blue scarf with a golden trim. It feels really new and clean."
|
||||
icon = 'icons/obj/custom_items/simon_scarf.dmi'
|
||||
icon_state = "simon_scarf"
|
||||
item_state = "simon_scarf"
|
||||
contained_sprite = 1
|
||||
|
||||
|
||||
/obj/item/clothing/head/soft/sec/corp/fluff/karson_cap //Karson's Cap - Eric Karson - dronzthewolf - DONE
|
||||
name = "well-worn corporate security cap"
|
||||
desc = "A well-worn corporate security cap. The name Karson is written on the underside of the brim, it is well-worn at the point where it has shaped to the owner's head."
|
||||
|
||||
|
||||
/obj/item/sign/fluff/triaka_atimono //Framed Zatimono - Azkuyua Triaka - jackboot - DONE
|
||||
name = "framed zatimono"
|
||||
desc = "A framed Zatimono, a Unathi standard worn into battle similar to an old-Earth Sashimono. This one is slightly faded."
|
||||
icon_state = "triaka_atimono"
|
||||
sign_state = "triaka_atimono"
|
||||
w_class = 2
|
||||
|
||||
@@ -1743,13 +1743,18 @@
|
||||
if (failed_last_breath || oxyloss > exhaust_threshold)//Can't catch our breath if we're suffocating
|
||||
return
|
||||
|
||||
if (nutrition <= 0)
|
||||
if (prob(1.5))
|
||||
src << span("warning", "You feel hungry and exhausted, eat something to regain your energy!")
|
||||
return
|
||||
|
||||
if (stamina != max_stamina)
|
||||
//Any suffocation damage slows stamina regen.
|
||||
//This includes oxyloss from low blood levels
|
||||
var/regen = stamina_recovery * (1 - min(((oxyloss*2) / exhaust_threshold), 1))
|
||||
if (regen > 0)
|
||||
stamina = min(max_stamina, stamina+regen)
|
||||
nutrition -= stamina_recovery*0.4
|
||||
nutrition = max(0, nutrition - stamina_recovery*0.18)
|
||||
hud_used.move_intent.update_move_icon(src)
|
||||
|
||||
/mob/living/carbon/human/proc/update_health_display()
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
stamina = 120 // Vox are even faster than unathi and can go longer, but recover slowly
|
||||
sprint_speed_factor = 3
|
||||
stamina_recovery = 1
|
||||
sprint_cost_factor = 1.7
|
||||
sprint_cost_factor = 1
|
||||
|
||||
speech_sounds = list('sound/voice/shriek1.ogg')
|
||||
speech_chance = 20
|
||||
|
||||
@@ -128,8 +128,8 @@
|
||||
|
||||
var/stamina = 100 // The maximum stamina this species has. Determines how long it can sprint
|
||||
var/stamina_recovery = 3 // Flat amount of stamina species recovers per proc
|
||||
var/sprint_speed_factor = 0.65 // The percentage of bonus speed you get when sprinting. 0.4 = 40%
|
||||
var/sprint_cost_factor = 1.0 // Multiplier on stamina cost for sprinting
|
||||
var/sprint_speed_factor = 0.7 // The percentage of bonus speed you get when sprinting. 0.4 = 40%
|
||||
var/sprint_cost_factor = 0.9 // Multiplier on stamina cost for sprinting
|
||||
var/exhaust_threshold = 50 // When stamina runs out, the mob takes oxyloss up til this value. Then collapses and drops to walk
|
||||
|
||||
// Determines the organs that the species spawns with and
|
||||
|
||||
@@ -21,8 +21,8 @@
|
||||
|
||||
stamina = 130 // Humans can sprint for longer than any other species
|
||||
stamina_recovery = 5
|
||||
sprint_speed_factor = 0.8
|
||||
sprint_cost_factor = 0.7
|
||||
sprint_speed_factor = 0.9
|
||||
sprint_cost_factor = 0.5
|
||||
|
||||
/datum/species/unathi
|
||||
name = "Unathi"
|
||||
@@ -43,9 +43,10 @@
|
||||
secondary_langs = list("Sinta'unathi")
|
||||
name_language = "Sinta'unathi"
|
||||
stamina = 120 // Unathi have the shortest but fastest sprint of all
|
||||
sprint_speed_factor = 3
|
||||
sprint_speed_factor = 3.2
|
||||
stamina_recovery = 5
|
||||
sprint_cost_factor = 1.8
|
||||
sprint_cost_factor = 1.45
|
||||
exhaust_threshold = 65
|
||||
rarity_value = 3
|
||||
|
||||
blurb = "A heavily reptillian species, Unathi (or 'Sinta as they call themselves) hail from the \
|
||||
@@ -116,8 +117,8 @@
|
||||
|
||||
stamina = 90 // Tajarans evolved to maintain a steady pace in the snow, sprinting wastes energy
|
||||
stamina_recovery = 4
|
||||
sprint_speed_factor = 0.55
|
||||
sprint_cost_factor = 1
|
||||
sprint_speed_factor = 0.65
|
||||
sprint_cost_factor = 0.75
|
||||
|
||||
|
||||
blurb = "The Tajaran race is a species of feline-like bipeds hailing from the planet of Ahdomai in the \
|
||||
@@ -184,7 +185,7 @@
|
||||
ethanol_resistance = 0.5//gets drunk faster
|
||||
|
||||
stamina = 90
|
||||
sprint_speed_factor = 1.1 //Evolved for rapid escapes from predators
|
||||
sprint_speed_factor = 1.25 //Evolved for rapid escapes from predators
|
||||
|
||||
|
||||
/datum/species/diona
|
||||
@@ -263,8 +264,8 @@
|
||||
reagent_tag = IS_DIONA
|
||||
|
||||
stamina = -1 // Diona sprinting uses energy instead of stamina
|
||||
sprint_speed_factor = 0.4 //Speed gained is minor
|
||||
|
||||
sprint_speed_factor = 0.5 //Speed gained is minor
|
||||
sprint_cost_factor = 0.8
|
||||
|
||||
/datum/species/diona/handle_sprint_cost(var/mob/living/carbon/human/H, var/cost)
|
||||
var/datum/dionastats/DS = H.get_dionastats()
|
||||
@@ -272,7 +273,7 @@
|
||||
if (!DS)
|
||||
return 0 //Something is very wrong
|
||||
|
||||
var/remainder = cost
|
||||
var/remainder = cost * sprint_cost_factor
|
||||
|
||||
if (H.radiation)
|
||||
if (H.radiation > (cost*0.5))//Radiation counts as double energy
|
||||
@@ -402,13 +403,13 @@
|
||||
"Your CPU temperature probes warn you that you are approaching critical heat levels!"
|
||||
)
|
||||
stamina = -1 // Machines use power and generate heat, stamina is not a thing
|
||||
sprint_speed_factor = 0.85 // About as capable of speed as a human
|
||||
sprint_speed_factor = 1 // About as capable of speed as a human
|
||||
|
||||
|
||||
/datum/species/machine/handle_sprint_cost(var/mob/living/carbon/human/H, var/cost)
|
||||
if (H.stat == CONSCIOUS)
|
||||
H.bodytemperature += cost*1.35
|
||||
H.nutrition -= cost*0.9
|
||||
H.bodytemperature += cost*1.15
|
||||
H.nutrition -= cost*0.65
|
||||
if (H.nutrition > 0)
|
||||
return 1
|
||||
else
|
||||
@@ -470,8 +471,8 @@
|
||||
base_color = "#575757"
|
||||
|
||||
stamina = 100 // Long period of sprinting, but relatively low speed gain
|
||||
sprint_speed_factor = 0.5
|
||||
sprint_cost_factor = 0.27
|
||||
sprint_speed_factor = 0.55
|
||||
sprint_cost_factor = 0.20
|
||||
stamina_recovery = 1//slow recovery
|
||||
|
||||
|
||||
|
||||
@@ -59,7 +59,7 @@
|
||||
else
|
||||
newspeed = text2num(response)
|
||||
|
||||
if (!newspeed || newspeed >= speed || newspeed <= 0)
|
||||
if (!newspeed || newspeed >= speed || newspeed <= 0.2)
|
||||
src << "Error, invalid value entered. Walk speed has not been changed"
|
||||
return
|
||||
|
||||
|
||||
@@ -142,6 +142,11 @@
|
||||
user << "<span class='notice'>It looks hungry.</span>"
|
||||
else if ((reagents.total_volume > 0 && nutrition > max_nutrition *0.75) || nutrition > max_nutrition *0.9)
|
||||
user << "It looks full and contented."
|
||||
if (health < maxHealth * 0.5)
|
||||
user << "<span class='danger'>It looks badly wounded.</span>"
|
||||
else if (health < maxHealth)
|
||||
user << "<span class='warning'>It looks wounded.</span>"
|
||||
|
||||
|
||||
/mob/living/simple_animal/Life()
|
||||
..()
|
||||
@@ -293,7 +298,16 @@
|
||||
if (istype(current, /datum/reagent/nutriment))//If its food, it feeds us
|
||||
var/datum/reagent/nutriment/N = current
|
||||
nutrition += removed*N.nutriment_factor
|
||||
health = min(health+(removed*N.regen_factor), maxHealth)
|
||||
var/heal_amount = removed*N.regen_factor
|
||||
if (bruteloss > 0)
|
||||
var/n = min(heal_amount, bruteloss)
|
||||
adjustBruteLoss(-n)
|
||||
heal_amount -= n
|
||||
if (fireloss && heal_amount)
|
||||
var/n = min(heal_amount, fireloss)
|
||||
adjustFireLoss(-n)
|
||||
heal_amount -= n
|
||||
updatehealth()
|
||||
current.remove_self(removed)//If its not food, it just does nothing. no fancy effects
|
||||
|
||||
/mob/living/simple_animal/can_eat()
|
||||
@@ -373,21 +387,7 @@ mob/living/simple_animal/bullet_act(var/obj/item/projectile/Proj)
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/attackby(var/obj/item/O, var/mob/user)
|
||||
if(istype(O, /obj/item/stack/medical))
|
||||
if(stat != DEAD)
|
||||
var/obj/item/stack/medical/MED = O
|
||||
if(health < maxHealth)
|
||||
if(MED.amount >= 1)
|
||||
adjustBruteLoss(-MED.heal_brute)
|
||||
MED.amount -= 1
|
||||
if(MED.amount <= 0)
|
||||
qdel(MED)
|
||||
for(var/mob/M in viewers(src, null))
|
||||
if ((M.client && !( M.blinded )))
|
||||
M.show_message("<span class='notice'>[user] applies the [MED] on [src].</span>")
|
||||
else
|
||||
user << "<span class='notice'>\The [src] is dead, medical items won't bring \him back to life.</span>"
|
||||
else if(istype(O, /obj/item/weapon/reagent_containers))
|
||||
if(istype(O, /obj/item/weapon/reagent_containers) || istype(O, /obj/item/stack/medical))
|
||||
..()
|
||||
|
||||
else if(meat_type && (stat == DEAD)) //if the animal has a meat, and if it is dead.
|
||||
|
||||
@@ -192,7 +192,19 @@
|
||||
|
||||
if(moving) return 0
|
||||
|
||||
if(world.time < move_delay) return
|
||||
if(world.time < move_delay)
|
||||
return
|
||||
|
||||
|
||||
//This compensates for the inaccuracy of move ticks
|
||||
//Whenever world.time overshoots the movedelay, due to it only ticking once per decisecond
|
||||
//The overshoot value is subtracted from our next delay, farther down where move delay is set.
|
||||
//This doesn't entirely remove the problem, but it keeps travel times accurate to within 0.1 seconds
|
||||
//Over an infinite distance, and prevents the inaccuracy from compounding. Thus making it basically a non-issue
|
||||
var/leftover = world.time - move_delay
|
||||
if (leftover > 1)
|
||||
leftover = 0
|
||||
|
||||
|
||||
if(locate(/obj/effect/stop/, mob.loc))
|
||||
for(var/obj/effect/stop/S in mob.loc)
|
||||
@@ -266,9 +278,9 @@
|
||||
src << "\blue You're pinned to a wall by [mob.pinned[1]]!"
|
||||
return 0
|
||||
|
||||
move_delay = world.time //set move delay
|
||||
move_delay = world.time - leftover//set move delay
|
||||
|
||||
if (mob.buckled || mob.pulledby)
|
||||
if (mob.buckled)
|
||||
if(istype(mob.buckled, /obj/vehicle))
|
||||
//manually set move_delay for vehicles so we don't inherit any mob movement penalties
|
||||
//specific vehicle move delays are set in code\modules\vehicles\vehicle.dm
|
||||
@@ -280,19 +292,22 @@
|
||||
|
||||
if(istype(mob.loc, /turf/space)) // Wheelchair driving!
|
||||
return // No wheelchair driving in space
|
||||
if(istype(mob.pulledby, /obj/structure/bed/chair/wheelchair))
|
||||
return mob.pulledby.relaymove(mob, direct)
|
||||
|
||||
//TODO: Fuck wheelchairs.
|
||||
//Toss away all this snowflake code here, and rewrite wheelchairs as a vehicle.
|
||||
else if(istype(mob.buckled, /obj/structure/bed/chair/wheelchair))
|
||||
var/min_move_delay = 0
|
||||
if(ishuman(mob.buckled))
|
||||
var/mob/living/carbon/human/driver = mob.buckled
|
||||
var/obj/item/organ/external/l_hand = driver.get_organ("l_hand")
|
||||
var/obj/item/organ/external/r_hand = driver.get_organ("r_hand")
|
||||
if((!l_hand || l_hand.is_stump()) && (!r_hand || r_hand.is_stump()))
|
||||
return // No hands to drive your chair? Tough luck!
|
||||
min_move_delay = driver.min_walk_delay
|
||||
//drunk wheelchair driving
|
||||
if(mob.confused && prob(20))
|
||||
direct = pick(cardinal)
|
||||
move_delay += 2
|
||||
move_delay += max((mob.movement_delay() + config.walk_speed) * config.walk_delay_multiplier, min_move_delay)
|
||||
return mob.buckled.relaymove(mob,direct)
|
||||
|
||||
var/tally = mob.movement_delay() + config.walk_speed
|
||||
@@ -321,6 +336,13 @@
|
||||
if(mob.machine.relaymove(mob,direct))
|
||||
return
|
||||
|
||||
//Wheelchair pushing goes here for now.
|
||||
//TODO: Fuck wheelchairs.
|
||||
if(istype(mob.pulledby, /obj/structure/bed/chair/wheelchair))
|
||||
move_delay += 1
|
||||
return mob.pulledby.relaymove(mob, direct)
|
||||
|
||||
|
||||
|
||||
//We are now going to move
|
||||
moving = 1
|
||||
|
||||
@@ -756,7 +756,11 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
|
||||
switch(disintegrate)
|
||||
if(DROPLIMB_EDGE)
|
||||
// compile_icon() used to be here, but it's causing issues, so RIP.
|
||||
add_blood(victim)
|
||||
var/matrix/M = matrix()
|
||||
M.Turn(rand(180))
|
||||
src.transform = M
|
||||
if(!clean)
|
||||
//Throw limb around.
|
||||
if(src && istype(loc,/turf))
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
var/list/obj/machinery/photocopier/faxmachine/allfaxes = list()
|
||||
var/list/admin_departments = list("[boss_name]", "Sol Government", "Supply")
|
||||
var/list/alldepartments = list()
|
||||
|
||||
var/list/arrived_faxes = list() //cache for faxes that have been sent to the admins
|
||||
var/list/sent_faxes = list() //cache for faxes that have been sent by the admins
|
||||
var/list/alldepartments = list()
|
||||
var/list/admin_departments = list("[boss_name]", "Sol Government", "Supply")
|
||||
|
||||
/obj/machinery/photocopier/faxmachine
|
||||
name = "fax machine"
|
||||
@@ -16,9 +15,18 @@ var/list/sent_faxes = list() //cache for faxes that have been sent by the admins
|
||||
idle_power_usage = 30
|
||||
active_power_usage = 200
|
||||
|
||||
var/static/const/adminfax_cooldown = 1800 // in 1/10 seconds
|
||||
var/static/const/normalfax_cooldown = 300
|
||||
var/static/const/broadcastfax_cooldown = 3000
|
||||
|
||||
var/static/const/broadcast_departments = "Stationwide broadcast (WARNING)"
|
||||
var/static/list/admin_departments = list("Central Command", "Sol Government")
|
||||
|
||||
var/obj/item/weapon/card/id/scan = null // identification
|
||||
var/authenticated = 0
|
||||
var/sendcooldown = 0 // to avoid spamming fax messages
|
||||
var/sendtime = 0 // Time when fax was sent
|
||||
var/sendcooldown = 0 // Delay, before another fax can be sent (in 1/10 second). Used by set_cooldown() and get_remaining_cooldown()
|
||||
|
||||
var/department = "Unknown" // our department
|
||||
var/destination = null // the department we're sending to
|
||||
|
||||
@@ -58,7 +66,7 @@ var/list/sent_faxes = list() //cache for faxes that have been sent by the admins
|
||||
dat += "<a href='byond://?src=\ref[src];remove=1'>Remove Item</a><br><br>"
|
||||
|
||||
if(sendcooldown)
|
||||
dat += "<b>Transmitter arrays realigning. Please stand by.</b><br>"
|
||||
dat += "<b>Transmitter arrays realigning. Please stand by. [round(get_remaining_cooldown() / 10)] seconds remaining.</b><br>"
|
||||
|
||||
else
|
||||
|
||||
@@ -69,7 +77,7 @@ var/list/sent_faxes = list() //cache for faxes that have been sent by the admins
|
||||
else
|
||||
if(sendcooldown)
|
||||
dat += "Please insert paper to send via secure connection.<br><br>"
|
||||
dat += "<b>Transmitter arrays realigning. Please stand by.</b><br>"
|
||||
dat += "<b>Transmitter arrays realigning. Please stand by. [round(get_remaining_cooldown() / 10)] seconds remaining.</b><br>"
|
||||
else
|
||||
dat += "Please insert paper to send via secure connection.<br><br>"
|
||||
|
||||
@@ -89,19 +97,30 @@ var/list/sent_faxes = list() //cache for faxes that have been sent by the admins
|
||||
|
||||
user << browse(dat, "window=copier")
|
||||
onclose(user, "copier")
|
||||
|
||||
if (sendcooldown != 0)
|
||||
spawn(50)
|
||||
// Auto-refresh every 5 seconds, if cooldown is active
|
||||
updateUsrDialog()
|
||||
|
||||
return
|
||||
|
||||
/obj/machinery/photocopier/faxmachine/Topic(href, href_list)
|
||||
if(href_list["send"])
|
||||
if (sendcooldown > 0)
|
||||
// Rate-limit sending faxes
|
||||
usr << "<span class='warning'>The fax machine isn't ready, yet!</span>"
|
||||
updateUsrDialog()
|
||||
return
|
||||
|
||||
if(copyitem)
|
||||
if (destination in admin_departments)
|
||||
send_admin_fax(usr, destination)
|
||||
else if (destination == broadcast_departments)
|
||||
send_broadcast_fax()
|
||||
else
|
||||
sendfax(destination)
|
||||
|
||||
if (sendcooldown)
|
||||
spawn(sendcooldown) // cooldown time
|
||||
sendcooldown = 0
|
||||
updateUsrDialog()
|
||||
|
||||
else if(href_list["remove"])
|
||||
if(copyitem)
|
||||
@@ -133,7 +152,7 @@ var/list/sent_faxes = list() //cache for faxes that have been sent by the admins
|
||||
|
||||
if(href_list["dept"])
|
||||
var/lastdestination = destination
|
||||
destination = input(usr, "Which department?", "Choose a department", "") as null|anything in (alldepartments + admin_departments)
|
||||
destination = input(usr, "Which department?", "Choose a department", "") as null|anything in (alldepartments + admin_departments + broadcast_departments)
|
||||
if(!destination) destination = lastdestination
|
||||
|
||||
if(href_list["auth"])
|
||||
@@ -166,9 +185,44 @@ var/list/sent_faxes = list() //cache for faxes that have been sent by the admins
|
||||
|
||||
updateUsrDialog()
|
||||
|
||||
/obj/machinery/photocopier/faxmachine/proc/sendfax(var/destination)
|
||||
/obj/machinery/photocopier/faxmachine/process()
|
||||
.=..()
|
||||
/var/static/ui_update_delay = 0
|
||||
|
||||
var/current_time = world.time
|
||||
if (current_time > sendtime + sendcooldown)
|
||||
sendcooldown = 0
|
||||
|
||||
/*
|
||||
* Set the send cooldown
|
||||
* cooldown: duration in ~1/10s
|
||||
*/
|
||||
/obj/machinery/photocopier/faxmachine/proc/set_cooldown(var/cooldown)
|
||||
// Reset send time
|
||||
sendtime = world.time
|
||||
|
||||
// Set cooldown length
|
||||
sendcooldown = cooldown
|
||||
|
||||
/*
|
||||
* Get remaining cooldown duration in ~1/10s
|
||||
*/
|
||||
/obj/machinery/photocopier/faxmachine/proc/get_remaining_cooldown()
|
||||
var/remaining_time = (sendtime + sendcooldown) - world.time
|
||||
if ((remaining_time < 0) || (sendcooldown == 0))
|
||||
// Time is up, but Process() hasn't caught up, yet
|
||||
// or no cooldown has been set
|
||||
remaining_time = 0
|
||||
return remaining_time
|
||||
|
||||
/*
|
||||
* Send normal fax message to on-station fax machine
|
||||
* destination: (string) from /allfaxes
|
||||
* display_message: (bool) 1=display info text, 0="silent mode"
|
||||
*/
|
||||
/obj/machinery/photocopier/faxmachine/proc/sendfax(var/destination, var/display_message = 1)
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
return
|
||||
return 0
|
||||
|
||||
use_power(200)
|
||||
|
||||
@@ -177,11 +231,14 @@ var/list/sent_faxes = list() //cache for faxes that have been sent by the admins
|
||||
if( F.department == destination )
|
||||
success = F.recievefax(copyitem)
|
||||
|
||||
if (success)
|
||||
visible_message("[src] beeps, \"Message transmitted successfully.\"")
|
||||
//sendcooldown = 600
|
||||
else
|
||||
visible_message("[src] beeps, \"Error transmitting message.\"")
|
||||
if (display_message)
|
||||
// Normal fax
|
||||
if (success)
|
||||
visible_message("[src] beeps, \"Message transmitted successfully.\"")
|
||||
sendcooldown = normalfax_cooldown
|
||||
else
|
||||
visible_message("[src] beeps, \"Error transmitting message.\"")
|
||||
return success
|
||||
|
||||
/obj/machinery/photocopier/faxmachine/proc/recievefax(var/obj/item/incoming)
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
@@ -209,6 +266,22 @@ var/list/sent_faxes = list() //cache for faxes that have been sent by the admins
|
||||
|
||||
return 1
|
||||
|
||||
/obj/machinery/photocopier/faxmachine/proc/send_broadcast_fax()
|
||||
var success = 1
|
||||
for (var/dest in (alldepartments - department))
|
||||
// Send to everyone except this department
|
||||
delay(1)
|
||||
success &= sendfax(dest, 0) // 0: don't display success/error messages
|
||||
|
||||
if(!success)// Stop on first error
|
||||
break
|
||||
if (success)
|
||||
visible_message("[src] beeps, \"Messages transmitted successfully.\"")
|
||||
set_cooldown(broadcastfax_cooldown)
|
||||
else
|
||||
visible_message("[src] beeps, \"Error transmitting messages.\"")
|
||||
set_cooldown(normalfax_cooldown)
|
||||
|
||||
/obj/machinery/photocopier/faxmachine/proc/send_admin_fax(var/mob/sender, var/destination)
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
return
|
||||
@@ -237,9 +310,9 @@ var/list/sent_faxes = list() //cache for faxes that have been sent by the admins
|
||||
message_admins(sender, "SOL GOVERNMENT FAX", rcvdcopy, "CentcommFaxReply", "#1F66A0")
|
||||
//message_admins(sender, "SOL GOVERNMENT FAX", rcvdcopy, "SolGovFaxReply", "#1F66A0")
|
||||
|
||||
sendcooldown = 1800
|
||||
sleep(50)
|
||||
visible_message("[src] beeps, \"Message transmitted successfully.\"")
|
||||
set_cooldown(adminfax_cooldown)
|
||||
spawn(50)
|
||||
visible_message("[src] beeps, \"Message transmitted successfully.\"")
|
||||
|
||||
|
||||
/obj/machinery/photocopier/faxmachine/proc/message_admins(var/mob/sender, var/faxname, var/obj/item/sent, var/reply_type, font_colour="#006100")
|
||||
|
||||
@@ -66,9 +66,8 @@
|
||||
..()
|
||||
|
||||
/obj/item/weapon/reagent_containers/blood/examine(mob/user, distance = 2)
|
||||
..()
|
||||
if (vampire_marks)
|
||||
user << "<span='notice'>There are teeth marks on it.</span>"
|
||||
if (..() && vampire_marks)
|
||||
user << "<span class='warning'>There are teeth marks on it.</span>"
|
||||
return
|
||||
|
||||
/obj/item/weapon/reagent_containers/blood/attackby(obj/item/weapon/P as obj, mob/user as mob)
|
||||
|
||||
@@ -1677,7 +1677,7 @@
|
||||
|
||||
afterattack(obj/O as obj, var/mob/living/carbon/human/user as mob, proximity)
|
||||
if(!proximity) return
|
||||
if(istype(O,/obj/structure/sink) && !wrapped)
|
||||
if(( istype(O, /obj/structure/reagent_dispensers/watertank) || istype(O,/obj/structure/sink) ) && !wrapped)
|
||||
user << "You place \the [name] under a stream of water..."
|
||||
if(istype(user))
|
||||
user.unEquip(src)
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
on = 0
|
||||
powered = 1
|
||||
locked = 0
|
||||
move_speed = 3
|
||||
|
||||
load_item_visible = 1
|
||||
load_offset_x = 0
|
||||
mob_offset_y = 7
|
||||
@@ -29,7 +29,7 @@
|
||||
anchored = 0
|
||||
passenger_allowed = 0
|
||||
locked = 0
|
||||
//move_speed = 3
|
||||
|
||||
load_item_visible = 1
|
||||
load_offset_x = 0
|
||||
load_offset_y = 4
|
||||
@@ -352,12 +352,15 @@
|
||||
/obj/vehicle/train/cargo/engine/update_car(var/train_length, var/active_engines)
|
||||
src.train_length = train_length
|
||||
src.active_engines = active_engines
|
||||
move_speed = initial(move_speed) //so that engines that have been turned off don't lag behind
|
||||
|
||||
//Update move delay
|
||||
if(is_train_head() && on)
|
||||
var/remainder = (car_limit * active_engines) - (train_length - active_engines)
|
||||
if (remainder)
|
||||
move_speed -= 0.25 * remainder //makes cargo trains 10% slower than running when not overweight
|
||||
if(!is_train_head() || !on)
|
||||
move_delay = initial(move_delay) //so that engines that have been turned off don't lag behind
|
||||
else
|
||||
move_delay = max(0, (-car_limit * active_engines) + train_length - active_engines) //limits base overweight so you cant overspeed trains
|
||||
move_delay *= (1 / max(1, active_engines)) * 2 //overweight penalty (scaled by the number of engines)
|
||||
move_delay += config.walk_speed //base reference speed
|
||||
move_delay *= config.vehicle_delay_multiplier //makes cargo trains 10% slower than running when not overweight
|
||||
|
||||
/obj/vehicle/train/cargo/trolley/update_car(var/train_length, var/active_engines)
|
||||
src.train_length = train_length
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
name = "train"
|
||||
dir = 4
|
||||
|
||||
move_delay = 1
|
||||
|
||||
health = 100
|
||||
maxhealth = 100
|
||||
@@ -28,19 +29,13 @@
|
||||
var/old_loc = get_turf(src)
|
||||
if(..())
|
||||
if(tow)
|
||||
tow.forceMove(old_loc)
|
||||
tow.Move(old_loc)
|
||||
return 1
|
||||
else
|
||||
if(lead)
|
||||
unattach()
|
||||
return 0
|
||||
|
||||
obj/vehicle/train/forceMove()
|
||||
var/old_loc = get_turf(src)
|
||||
..()
|
||||
if(tow)
|
||||
tow.forceMove(old_loc)
|
||||
|
||||
/obj/vehicle/train/Bump(atom/Obstacle)
|
||||
if(!istype(Obstacle, /atom/movable))
|
||||
return
|
||||
@@ -56,7 +51,7 @@ obj/vehicle/train/forceMove()
|
||||
var/mob/living/M = A
|
||||
visible_message("\red [src] knocks over [M]!")
|
||||
M.apply_effects(5, 5) //knock people down if you hit them
|
||||
M.apply_damages(10 * move_speed) // and do damage according to how fast the train is going
|
||||
M.apply_damages(22 / move_delay) // and do damage according to how fast the train is going
|
||||
if(istype(load, /mob/living/carbon/human))
|
||||
var/mob/living/D = load
|
||||
D << "\red You hit [M]!"
|
||||
|
||||
@@ -28,10 +28,7 @@
|
||||
var/stat = 0
|
||||
var/emagged = 0
|
||||
var/powered = 0 //set if vehicle is powered and should use fuel when moving
|
||||
|
||||
move_speed = 2//Expressed in tiles per second. This is used to control how fast the vehicle moves
|
||||
|
||||
var/move_delay//DO NOT MANUALLY SET THIS. For internal use only
|
||||
var/move_delay = 1 //set this to limit the speed of the vehicle
|
||||
|
||||
var/obj/item/weapon/cell/cell
|
||||
var/charge_use = 5 //set this to adjust the amount of power the vehicle uses per move
|
||||
@@ -48,22 +45,8 @@
|
||||
/obj/vehicle/New()
|
||||
..()
|
||||
//spawn the cell you want in each vehicle
|
||||
calc_delay()
|
||||
|
||||
/obj/vehicle/proc/calc_delay()
|
||||
if (!move_speed || move_speed < 0)//Shouldn't happen
|
||||
move_speed = 0
|
||||
move_delay = 999999999
|
||||
return 0
|
||||
|
||||
move_delay = (1 / move_speed) * 10 * config.vehicle_delay_multiplier
|
||||
return 1
|
||||
|
||||
|
||||
/obj/vehicle/Move()
|
||||
if (!move_speed)
|
||||
return 0
|
||||
|
||||
if(world.time > l_move_time + move_delay)
|
||||
var/old_loc = get_turf(src)
|
||||
if(on && powered && cell.charge < charge_use)
|
||||
@@ -188,7 +171,6 @@
|
||||
// Vehicle procs
|
||||
//-------------------------------------------
|
||||
/obj/vehicle/proc/turn_on()
|
||||
calc_delay()
|
||||
if(stat)
|
||||
return 0
|
||||
if(powered && cell.charge < charge_use)
|
||||
@@ -318,7 +300,6 @@
|
||||
if(ismob(C))
|
||||
buckle_mob(C)
|
||||
|
||||
calc_delay()
|
||||
return 1
|
||||
|
||||
/obj/vehicle/user_unbuckle_mob(var/mob/user)
|
||||
@@ -366,9 +347,15 @@
|
||||
unbuckle_mob(load)
|
||||
|
||||
load = null
|
||||
calc_delay()
|
||||
|
||||
return 1
|
||||
|
||||
// This exists to stop a weird jumping motion when you disembark.
|
||||
// It essentially makes disembarkation count as a movement.
|
||||
// Yes, it's not the full calculation. But it's relatively close, and will make it seamless.
|
||||
/obj/vehicle/post_buckle_mob(var/mob/M)
|
||||
if (M.client)
|
||||
M.client.move_delay = M.movement_delay() + config.walk_speed
|
||||
|
||||
//-------------------------------------------------------
|
||||
// Stat update procs
|
||||
|
||||
@@ -5,6 +5,7 @@ var/list/ventcrawl_machinery = list(
|
||||
|
||||
// Vent crawling whitelisted items, whoo
|
||||
/mob/living/var/list/can_enter_vent_with = list(
|
||||
/obj/item/device/mmi,
|
||||
/obj/item/weapon/implant,
|
||||
/obj/item/device/radio/borg,
|
||||
/obj/item/weapon/holder,
|
||||
|
||||
@@ -51,10 +51,10 @@
|
||||
else
|
||||
if((direction & initialize_directions) || is_type_in_list(src, ventcrawl_machinery) && src.can_crawl_through()) //if we move in a way the pipe can connect, but doesn't - or we're in a vent
|
||||
user.remove_ventcrawl()
|
||||
user.forceMove(src.loc)
|
||||
user.forceMove(check_neighbor_density(get_turf(src.loc), direction) ? src.loc : get_step(src, direction))
|
||||
user.sight &= ~(SEE_TURFS|BLIND)
|
||||
user.visible_message("<span class='warning'>You hear something squeezing through the pipes.</span>", "You climb out the ventilation system.")
|
||||
user.vent_trap_check("arriving", target_move)
|
||||
user.vent_trap_check("arriving", user.loc)
|
||||
user.canmove = 0
|
||||
spawn(1)
|
||||
user.canmove = 1
|
||||
|
||||
+1
-6
@@ -1091,11 +1091,6 @@ var/list/be_special_flags = list(
|
||||
#define RESPAWN_ANIMAL 3000
|
||||
#define RESPAWN_MINISYNTH 6000
|
||||
|
||||
// Night lighting controller times
|
||||
// The time (in ticks based on worldtime2ticks()) that various actions trigger
|
||||
#define MORNING_LIGHT_RESET 252000 // 7am or 07:00 - lighting restores to normal in morning
|
||||
#define NIGHT_LIGHT_ACTIVE 648000 // 6pm or 18:00 - night lighting mode activates
|
||||
|
||||
//Cargo random stock vars
|
||||
//These are used in randomstock.dm
|
||||
//And also for generating random loot crates in crates.dm
|
||||
@@ -1105,7 +1100,7 @@ var/list/be_special_flags = list(
|
||||
#define STOCK_UNCOMMON_PROB 23
|
||||
//The probability, as a percentage for each item, that we'll choose from the uncommon spawns list
|
||||
|
||||
#define STOCK_RARE_PROB 2.8
|
||||
#define STOCK_RARE_PROB 2.4
|
||||
//The probability, as a percentage for each item, that we'll choose from the rare spawns list
|
||||
|
||||
//If an item is not rare or uncommon, it will be chosen from the common spawns list.
|
||||
|
||||
Reference in New Issue
Block a user