Merge branch 'master' into development
@@ -211,6 +211,7 @@
|
||||
#include "code\datums\mind.dm"
|
||||
#include "code\datums\mixed.dm"
|
||||
#include "code\datums\modules.dm"
|
||||
#include "code\datums\progressbar.dm"
|
||||
#include "code\datums\server_greeting.dm"
|
||||
#include "code\datums\statistic.dm"
|
||||
#include "code\datums\supplypacks.dm"
|
||||
|
||||
@@ -28,6 +28,18 @@
|
||||
#define TIMER_ID_NULL -1
|
||||
|
||||
// -- SSatoms stuff --
|
||||
// Technically this check will fail if someone loads a map mid-round, but that's not enabled right now.
|
||||
#define SSATOMS_IS_PROBABLY_DONE (SSatoms.initialized == INITIALIZATION_INNEW_REGULAR)
|
||||
|
||||
//type and all subtypes should always call Initialize in New()
|
||||
#define INITIALIZE_IMMEDIATE(X) ##X/New(loc, ...){\
|
||||
..();\
|
||||
if(!initialized) {\
|
||||
args[1] = TRUE;\
|
||||
SSatoms.InitAtom(src, args);\
|
||||
}\
|
||||
}
|
||||
|
||||
// SSatoms Initialization state.
|
||||
#define INITIALIZATION_INSSATOMS 0 //New should not call Initialize
|
||||
#define INITIALIZATION_INNEW_MAPLOAD 1 //New should call Initialize(TRUE)
|
||||
|
||||
@@ -646,110 +646,88 @@ proc/GaussRandRound(var/sigma,var/roundto)
|
||||
|
||||
else return get_step(ref, base_dir)
|
||||
|
||||
/proc/do_mob(mob/user , mob/target, delay = 30, numticks = 10, needhand = TRUE, display_progress = TRUE) //This is quite an ugly solution but i refuse to use the old request system.
|
||||
/proc/do_mob(mob/user, mob/target, delay = 30, needhand = TRUE, display_progress = TRUE, datum/callback/extra_checks) //This is quite an ugly solution but i refuse to use the old request system.
|
||||
if(!user || !target)
|
||||
return 0
|
||||
|
||||
var/user_loc = user.loc
|
||||
var/target_loc = target.loc
|
||||
var/holding = user.get_active_hand()
|
||||
var/delayfraction = round(delay/numticks)
|
||||
var/image/progbar
|
||||
if(user && user.client && (user.client.prefs.parallax_togs & PROGRESS_BARS) && display_progress)
|
||||
if(!progbar)
|
||||
progbar = image(icon = 'icons/effects/doafter_icon.dmi', loc = target, icon_state = "prog_bar_0")
|
||||
progbar.layer = 21
|
||||
progbar.pixel_z = WORLD_ICON_SIZE
|
||||
progbar.appearance_flags = RESET_TRANSFORM
|
||||
for (var/i = 1 to numticks)
|
||||
if(user && user.client && (user.client.prefs.parallax_togs & PROGRESS_BARS) && progbar && display_progress)
|
||||
progbar.icon_state = "prog_bar_[round(((i / numticks) * 100), 10)]"
|
||||
user.client.images |= progbar
|
||||
sleep(delayfraction)
|
||||
if(!user || !target)
|
||||
if(progbar)
|
||||
progbar.icon_state = "prog_bar_stopped"
|
||||
spawn(2)
|
||||
if(user && user.client)
|
||||
user.client.images -= progbar
|
||||
if(progbar)
|
||||
progbar.loc = null
|
||||
return 0
|
||||
if (user.loc != user_loc || target.loc != target_loc || (needhand && user.get_active_hand() != holding) || user.stat || user.weakened || user.stunned)
|
||||
if(progbar)
|
||||
progbar.icon_state = "prog_bar_stopped"
|
||||
spawn(2)
|
||||
if(user && user.client)
|
||||
user.client.images -= progbar
|
||||
if(progbar)
|
||||
progbar.loc = null
|
||||
return 0
|
||||
if(user && user.client)
|
||||
user.client.images -= progbar
|
||||
if(progbar)
|
||||
progbar.loc = null
|
||||
return 1
|
||||
|
||||
/proc/do_after(mob/user as mob, delay as num, numticks = 10, needhand = TRUE, atom/movable/act_target = null, use_user_turf = FALSE, display_progress = TRUE)
|
||||
var/datum/progressbar/progbar
|
||||
if (display_progress && user.client && (user.client.prefs.parallax_togs & PROGRESS_BARS))
|
||||
progbar = new(user, delay, target)
|
||||
|
||||
var/endtime = world.time + delay
|
||||
var/starttime = world.time
|
||||
|
||||
. = 1
|
||||
|
||||
while (world.time < endtime)
|
||||
stoplag()
|
||||
if (progbar)
|
||||
progbar.update(world.time - starttime)
|
||||
|
||||
if(QDELETED(user) || QDELETED(target))
|
||||
. = 0
|
||||
break
|
||||
|
||||
if (user.loc != user_loc || target.loc != target_loc || (needhand && user.get_active_hand() != holding) || user.stat || user.weakened || user.stunned || (extra_checks && !extra_checks.Invoke()))
|
||||
. = 0
|
||||
break
|
||||
|
||||
if (progbar)
|
||||
qdel(progbar)
|
||||
|
||||
/proc/do_after(mob/user as mob, delay as num, needhand = TRUE, atom/movable/act_target = null, use_user_turf = FALSE, display_progress = TRUE, datum/callback/extra_checks)
|
||||
if(!user || isnull(user))
|
||||
return 0
|
||||
if(numticks == 0)
|
||||
return 0
|
||||
|
||||
if (!act_target)
|
||||
act_target = user
|
||||
|
||||
var/delayfraction = round(delay/numticks)
|
||||
var/Location
|
||||
if(use_user_turf) //When this is true, do_after() will check whether the user's turf has changed, rather than the user's loc.
|
||||
Location = get_turf(user)
|
||||
else
|
||||
Location = user.loc
|
||||
|
||||
var/holding = user.get_active_hand()
|
||||
var/image/progbar
|
||||
if(user && user.client && (user.client.prefs.parallax_togs & PROGRESS_BARS) && act_target && display_progress)
|
||||
if(!progbar)
|
||||
progbar = image(icon = 'icons/effects/doafter_icon.dmi', loc = act_target, icon_state = "prog_bar_0")
|
||||
progbar.pixel_z = WORLD_ICON_SIZE
|
||||
progbar.layer = 21
|
||||
progbar.appearance_flags = RESET_COLOR | RESET_TRANSFORM
|
||||
for (var/i = 1 to numticks)
|
||||
if(user && user.client && (user.client.prefs.parallax_togs & PROGRESS_BARS) && act_target && display_progress)
|
||||
if(!progbar)
|
||||
progbar = image(icon = 'icons/effects/doafter_icon.dmi', loc = act_target, icon_state = "prog_bar_0")
|
||||
progbar.pixel_z = WORLD_ICON_SIZE
|
||||
progbar.layer = 21
|
||||
progbar.appearance_flags = RESET_COLOR | RESET_TRANSFORM
|
||||
progbar.icon_state = "prog_bar_[round(((i / numticks) * 100), 10)]"
|
||||
user.client.images |= progbar
|
||||
sleep(delayfraction)
|
||||
|
||||
var/datum/progressbar/progbar
|
||||
if (display_progress && user.client && (user.client.prefs.parallax_togs & PROGRESS_BARS))
|
||||
progbar = new(user, delay, act_target)
|
||||
|
||||
var/endtime = world.time + delay
|
||||
var/starttime = world.time
|
||||
|
||||
. = 1
|
||||
|
||||
while (world.time < endtime)
|
||||
stoplag()
|
||||
if (progbar)
|
||||
progbar.update(world.time - starttime)
|
||||
|
||||
var/user_loc_to_check
|
||||
if(use_user_turf)
|
||||
user_loc_to_check = get_turf(user)
|
||||
else
|
||||
user_loc_to_check = user.loc
|
||||
|
||||
if (!user || user.stat || user.weakened || user.stunned || !(user_loc_to_check == Location))
|
||||
if(progbar)
|
||||
progbar.icon_state = "prog_bar_stopped"
|
||||
spawn(2)
|
||||
if(user && user.client)
|
||||
user.client.images -= progbar
|
||||
if(progbar)
|
||||
progbar.loc = null
|
||||
return 0
|
||||
. = 0
|
||||
break
|
||||
|
||||
if(needhand && !(user.get_active_hand() == holding)) //Sometimes you don't want the user to have to keep their active hand
|
||||
if(progbar)
|
||||
progbar.icon_state = "prog_bar_stopped"
|
||||
spawn(2)
|
||||
if(user && user.client)
|
||||
user.client.images -= progbar
|
||||
if(progbar)
|
||||
progbar.loc = null
|
||||
return 0
|
||||
if(user && user.client)
|
||||
user.client.images -= progbar
|
||||
if(progbar)
|
||||
progbar.loc = null
|
||||
return 1
|
||||
. = 0
|
||||
break
|
||||
|
||||
if (extra_checks && !extra_checks.Invoke())
|
||||
. = 0
|
||||
break
|
||||
|
||||
if (progbar)
|
||||
qdel(progbar)
|
||||
|
||||
//Takes: Anything that could possibly have variables and a varname to check.
|
||||
//Returns: 1 if found, 0 if not.
|
||||
|
||||
@@ -38,7 +38,7 @@ var/datum/controller/subsystem/garbage_collector/SSgarbage
|
||||
NEW_SS_GLOBAL(SSgarbage)
|
||||
|
||||
/datum/controller/subsystem/garbage_collector/stat_entry(msg)
|
||||
msg += "Q:[queue.len]|D:[delslasttick]|G:[gcedlasttick]|"
|
||||
msg += "W:[tobequeued.len]|Q:[queue.len]|D:[delslasttick]|G:[gcedlasttick]|"
|
||||
msg += "GR:"
|
||||
if (!(delslasttick+gcedlasttick))
|
||||
msg += "n/a|"
|
||||
@@ -66,12 +66,16 @@ var/datum/controller/subsystem/garbage_collector/SSgarbage
|
||||
var/list/tobequeued = src.tobequeued
|
||||
var/starttime = world.time
|
||||
var/starttimeofday = world.timeofday
|
||||
while(tobequeued.len && starttime == world.time && starttimeofday == world.timeofday)
|
||||
var/idex = 1
|
||||
while((tobequeued.len - (idex - 1)) && starttime == world.time && starttimeofday == world.timeofday)
|
||||
if (MC_TICK_CHECK)
|
||||
break
|
||||
var/ref = tobequeued[1]
|
||||
var/ref = tobequeued[idex]
|
||||
tobequeued[idex++] = null // Clear this ref to assist hard deletes in Queue().
|
||||
Queue(ref)
|
||||
tobequeued.Cut(1, 2)
|
||||
|
||||
if (idex > 1)
|
||||
tobequeued.Cut(1, idex)
|
||||
|
||||
/datum/controller/subsystem/garbage_collector/proc/HandleQueue()
|
||||
delslasttick = 0
|
||||
@@ -80,18 +84,19 @@ var/datum/controller/subsystem/garbage_collector/SSgarbage
|
||||
var/list/queue = src.queue
|
||||
var/starttime = world.time
|
||||
var/starttimeofday = world.timeofday
|
||||
while(queue.len && starttime == world.time && starttimeofday == world.timeofday)
|
||||
var/idex = 1
|
||||
while((queue.len - (idex - 1)) && starttime == world.time && starttimeofday == world.timeofday)
|
||||
if (MC_TICK_CHECK)
|
||||
break
|
||||
var/refID = queue[1]
|
||||
var/refID = queue[idex]
|
||||
if (!refID)
|
||||
queue.Cut(1, 2)
|
||||
idex++
|
||||
continue
|
||||
|
||||
var/GCd_at_time = queue[refID]
|
||||
if(GCd_at_time > time_to_kill)
|
||||
break // Everything else is newer, skip them
|
||||
queue.Cut(1, 2)
|
||||
idex++
|
||||
var/datum/A
|
||||
A = locate(refID)
|
||||
if (A && A.gcDestroyed == GCd_at_time) // So if something else coincidently gets the same ref, it's not deleted by mistake
|
||||
@@ -112,6 +117,9 @@ var/datum/controller/subsystem/garbage_collector/SSgarbage
|
||||
++gcedlasttick
|
||||
++totalgcs
|
||||
|
||||
if (idex > 1)
|
||||
queue.Cut(1, idex)
|
||||
|
||||
/datum/controller/subsystem/garbage_collector/proc/QueueForQueuing(datum/A)
|
||||
if (istype(A) && A.gcDestroyed == GC_CURRENTLY_BEING_QDELETED)
|
||||
tobequeued += A
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
if (config.fastboot)
|
||||
admin_notice("<span class='notice'><b>Fastboot is enabled; some features may not be available.</b></span>", R_DEBUG)
|
||||
|
||||
..(timeofday, TRUE)
|
||||
..(timeofday)
|
||||
|
||||
/proc/resort_all_areas()
|
||||
all_areas = list()
|
||||
|
||||
@@ -55,3 +55,10 @@
|
||||
if (!.)
|
||||
. = new /mob/living/carbon/human/dummy/mannequin
|
||||
mannequins[ckey] = .
|
||||
|
||||
addtimer(CALLBACK(src, .proc/del_mannequin, ckey), 5 MINUTES, TIMER_UNIQUE | TIMER_OVERRIDE)
|
||||
|
||||
/datum/controller/subsystem/mobs/proc/del_mannequin(ckey)
|
||||
var/mannequin = mannequins[ckey]
|
||||
qdel(mannequin)
|
||||
mannequins -= ckey
|
||||
|
||||
@@ -100,7 +100,11 @@
|
||||
T.shadower = new(T)
|
||||
|
||||
// Figure out how many z-levels down we are.
|
||||
var/depth = calculate_depth(T)
|
||||
var/depth = 0
|
||||
var/turf/simulated/open/Td = T
|
||||
while (Td && isopenturf(Td.below))
|
||||
Td = Td.below
|
||||
depth++
|
||||
if (depth > OPENTURF_MAX_DEPTH)
|
||||
depth = OPENTURF_MAX_DEPTH
|
||||
|
||||
@@ -178,7 +182,7 @@
|
||||
else if (MC_TICK_CHECK)
|
||||
break
|
||||
|
||||
if (qt_idex > 1 && qo_idex <= curr_turfs.len)
|
||||
if (qt_idex > 1 && qt_idex <= curr_turfs.len)
|
||||
curr_turfs.Cut(1, qt_idex)
|
||||
qt_idex = 1
|
||||
|
||||
@@ -227,9 +231,3 @@
|
||||
if (qo_idex > 1 && qo_idex <= curr_ov.len)
|
||||
curr_ov.Cut(1, qo_idex)
|
||||
qo_idex = 1
|
||||
|
||||
/datum/controller/subsystem/openturf/proc/calculate_depth(turf/simulated/open/T)
|
||||
. = 0
|
||||
while (T && isopenturf(T.below))
|
||||
T = T.below
|
||||
.++
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
#define PROGRESSBAR_HEIGHT 6
|
||||
|
||||
/datum/progressbar
|
||||
var/goal = 1
|
||||
var/image/bar
|
||||
var/shown = 0
|
||||
var/mob/user
|
||||
var/client/client
|
||||
var/listindex
|
||||
|
||||
/datum/progressbar/New(mob/User, goal_number, atom/target)
|
||||
. = ..()
|
||||
if (!istype(target))
|
||||
EXCEPTION("Invalid target given")
|
||||
if (goal_number)
|
||||
goal = goal_number
|
||||
bar = image('icons/effects/progessbar.dmi', target, "prog_bar_0", 21)
|
||||
bar.appearance_flags = RESET_COLOR|RESET_TRANSFORM|NO_CLIENT_COLOR|RESET_ALPHA
|
||||
user = User
|
||||
if(user)
|
||||
client = user.client
|
||||
|
||||
LAZYINITLIST(user.progressbars)
|
||||
LAZYINITLIST(user.progressbars[bar.loc])
|
||||
var/list/bars = user.progressbars[bar.loc]
|
||||
bars += src
|
||||
listindex = bars.len
|
||||
bar.pixel_y = 32 + (PROGRESSBAR_HEIGHT * (listindex - 1))
|
||||
|
||||
/datum/progressbar/proc/update(progress)
|
||||
if (!user || !user.client)
|
||||
shown = 0
|
||||
return
|
||||
if (user.client != client)
|
||||
if (client)
|
||||
client.images -= bar
|
||||
if (user.client)
|
||||
user.client.images += bar
|
||||
|
||||
progress = Clamp(progress, 0, goal)
|
||||
bar.icon_state = "prog_bar_[round(((progress / goal) * 100), 5)]"
|
||||
if (!shown)
|
||||
user.client.images += bar
|
||||
shown = 1
|
||||
|
||||
/datum/progressbar/proc/shiftDown()
|
||||
--listindex
|
||||
bar.pixel_y -= PROGRESSBAR_HEIGHT
|
||||
|
||||
/datum/progressbar/Destroy()
|
||||
for(var/I in user.progressbars[bar.loc])
|
||||
var/datum/progressbar/P = I
|
||||
if(P != src && P.listindex > listindex)
|
||||
P.shiftDown()
|
||||
|
||||
var/list/bars = user.progressbars[bar.loc]
|
||||
bars -= src
|
||||
if(!bars.len)
|
||||
LAZYREMOVE(user.progressbars, bar.loc)
|
||||
|
||||
if (client)
|
||||
client.images -= bar
|
||||
qdel(bar)
|
||||
. = ..()
|
||||
|
||||
#undef PROGRESSBAR_HEIGHT
|
||||
@@ -53,10 +53,10 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
|
||||
/obj/item/weapon/gun/projectile/revolver/derringer,
|
||||
/obj/item/weapon/gun/projectile/dragunov,
|
||||
/obj/item/weapon/gun/energy/retro)
|
||||
cost = 60
|
||||
cost = 120
|
||||
containertype = /obj/structure/closet/crate
|
||||
containername = "crate"
|
||||
hidden = 1
|
||||
contraband = 1
|
||||
group = "Security"
|
||||
|
||||
/datum/supply_packs/forensics
|
||||
|
||||
@@ -41,7 +41,7 @@ In short:
|
||||
|
||||
// Apply changes when entering state
|
||||
/datum/universal_state/hell/OnEnter()
|
||||
set background = 1
|
||||
SSgarbage.disable() // Yeah, fuck it. No point hard-deleting stuff now.
|
||||
|
||||
escape_list = get_area_turfs(locate(/area/hallway/secondary/exit))
|
||||
|
||||
|
||||
@@ -36,7 +36,7 @@ var/global/universe_has_ended = 0
|
||||
|
||||
// Apply changes when entering state
|
||||
/datum/universal_state/supermatter_cascade/OnEnter()
|
||||
set background = 1
|
||||
SSgarbage.disable()
|
||||
|
||||
world << "<span class='sinister' style='font-size:22pt'>You are blinded by a brilliant flash of energy.</span>"
|
||||
|
||||
@@ -57,8 +57,6 @@ var/global/universe_has_ended = 0
|
||||
// Disable Nar-Sie.
|
||||
cult.allow_narsie = 0
|
||||
|
||||
SSgarbage.collection_timeout = 20 MINUTES // Yeah, no point trying to hard-del stuff at this point.
|
||||
|
||||
PlayerSet()
|
||||
|
||||
new /obj/singularity/narsie/large/exit(pick(endgame_exits))
|
||||
|
||||
@@ -510,7 +510,7 @@
|
||||
|
||||
log_and_message_admins("activated blood heal.")
|
||||
|
||||
while (do_after(src, 20, 5, 0))
|
||||
while (do_after(src, 20, 0))
|
||||
if (!(vampire.status & VAMP_HEALING))
|
||||
to_chat(src, "<span class='warning'>Your concentration is broken! You are no longer regenerating!</span>")
|
||||
break
|
||||
|
||||
@@ -292,7 +292,7 @@ var/list/global/slot_flags_enumeration = list(
|
||||
//If you are making custom procs but would like to retain partial or complete functionality of this one, include a 'return ..()' to where you want this to happen.
|
||||
//Set disable_warning to 1 if you wish it to not give you outputs.
|
||||
//Should probably move the bulk of this into mob code some time, as most of it is related to the definition of slots and not item-specific
|
||||
/obj/item/proc/mob_can_equip(M as mob, slot, disable_warning = 0)
|
||||
/obj/item/proc/mob_can_equip(M as mob, slot, disable_warning = FALSE, bypass_blocked_check = FALSE)
|
||||
if(!slot) return 0
|
||||
if(!M) return 0
|
||||
|
||||
@@ -318,7 +318,7 @@ var/list/global/slot_flags_enumeration = list(
|
||||
|
||||
//Next check if the slot is accessible.
|
||||
var/mob/_user = disable_warning? null : H
|
||||
if(!H.slot_is_accessible(slot, src, _user))
|
||||
if(!bypass_blocked_check && !H.slot_is_accessible(slot, src, _user))
|
||||
return 0
|
||||
|
||||
//Lastly, check special rules for the desired slot.
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
else
|
||||
user.visible_message("<span class='warning'>[user] begins to do [H]'s lips with \the [src].</span>", \
|
||||
"<span class='notice'>You begin to apply \the [src].</span>")
|
||||
if(do_after(user, 20) && do_after(H, 20, 5, 0)) //user needs to keep their active hand, H does not.
|
||||
if(do_after(user, 20) && do_after(H, 20, 0)) //user needs to keep their active hand, H does not.
|
||||
user.visible_message("<span class='notice'>[user] does [H]'s lips with \the [src].</span>", \
|
||||
"<span class='notice'>You apply \the [src].</span>")
|
||||
H.lip_style = colour
|
||||
|
||||
@@ -31,10 +31,11 @@
|
||||
if(!floortype && initial_flooring)
|
||||
floortype = initial_flooring
|
||||
if(floortype)
|
||||
set_flooring(get_flooring_data(floortype))
|
||||
set_flooring(get_flooring_data(floortype), mapload)
|
||||
|
||||
/turf/simulated/floor/proc/set_flooring(var/decl/flooring/newflooring)
|
||||
make_plating(defer_icon_update = 1)
|
||||
/turf/simulated/floor/proc/set_flooring(decl/flooring/newflooring, mapload)
|
||||
if (!mapload)
|
||||
make_plating(defer_icon_update = 1)
|
||||
flooring = newflooring
|
||||
update_icon(1)
|
||||
levelupdate()
|
||||
|
||||
@@ -24,8 +24,9 @@
|
||||
var/has_mob_product
|
||||
var/force_layer
|
||||
|
||||
/datum/seed/New()
|
||||
/datum/seed/proc/setup_traits()
|
||||
|
||||
/datum/seed/New()
|
||||
set_trait(TRAIT_IMMUTABLE, 0) // If set, plant will never mutate. If -1, plant is highly mutable.
|
||||
set_trait(TRAIT_HARVEST_REPEAT, 0) // If 1, this plant will fruit repeatedly.
|
||||
set_trait(TRAIT_PRODUCES_POWER, 0) // Can be used to make a battery.
|
||||
@@ -62,7 +63,9 @@
|
||||
set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0.25) // Plant eats this much per tick.
|
||||
set_trait(TRAIT_PLANT_COLOUR, "#46B543") // Colour of the plant icon.
|
||||
|
||||
addtimer(CALLBACK(src, .proc/update_growth_stages), 5)
|
||||
setup_traits()
|
||||
|
||||
update_growth_stages()
|
||||
|
||||
/datum/seed/proc/get_trait(var/trait)
|
||||
return traits["[trait]"]
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
mutants = list("icechili")
|
||||
kitchen_tag = "chili"
|
||||
|
||||
/datum/seed/chili/New()
|
||||
/datum/seed/chili/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_HARVEST_REPEAT,1)
|
||||
set_trait(TRAIT_MATURATION,5)
|
||||
@@ -28,7 +28,7 @@
|
||||
chems = list("frostoil" = list(3,5), "nutriment" = list(1,50))
|
||||
kitchen_tag = "icechili"
|
||||
|
||||
/datum/seed/chili/ice/New()
|
||||
/datum/seed/chili/ice/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_MATURATION,4)
|
||||
set_trait(TRAIT_PRODUCTION,4)
|
||||
@@ -43,7 +43,7 @@
|
||||
chems = list("nutriment" = list(1,10), "berryjuice" = list(10,10))
|
||||
kitchen_tag = "berries"
|
||||
|
||||
/datum/seed/berry/New()
|
||||
/datum/seed/berry/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_HARVEST_REPEAT,1)
|
||||
set_trait(TRAIT_JUICY,1)
|
||||
@@ -64,7 +64,7 @@
|
||||
mutants = null
|
||||
chems = list("nutriment" = list(1,10), "uranium" = list(3,5))
|
||||
|
||||
/datum/seed/berry/glow/New()
|
||||
/datum/seed/berry/glow/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_SPREAD,1)
|
||||
set_trait(TRAIT_BIOLUM,1)
|
||||
@@ -84,7 +84,7 @@
|
||||
mutants = list("deathberries")
|
||||
chems = list("nutriment" = list(1), "toxin" = list(3,5), "poisonberryjuice" = list(10,5))
|
||||
|
||||
/datum/seed/berry/poison/New()
|
||||
/datum/seed/berry/poison/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#6DC961")
|
||||
set_trait(TRAIT_WATER_CONSUMPTION, 3)
|
||||
@@ -97,7 +97,7 @@
|
||||
mutants = null
|
||||
chems = list("nutriment" = list(1), "toxin" = list(3,3), "lexorin" = list(1,5))
|
||||
|
||||
/datum/seed/berry/poison/death/New()
|
||||
/datum/seed/berry/poison/death/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_YIELD,3)
|
||||
set_trait(TRAIT_POTENCY,50)
|
||||
@@ -114,7 +114,7 @@
|
||||
kitchen_tag = "nettle"
|
||||
kitchen_tag = "nettle"
|
||||
|
||||
/datum/seed/nettle/New()
|
||||
/datum/seed/nettle/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_HARVEST_REPEAT,1)
|
||||
set_trait(TRAIT_MATURATION,6)
|
||||
@@ -134,7 +134,7 @@
|
||||
chems = list("nutriment" = list(1,50), "pacid" = list(0,1))
|
||||
kitchen_tag = "deathnettle"
|
||||
|
||||
/datum/seed/nettle/death/New()
|
||||
/datum/seed/nettle/death/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_MATURATION,8)
|
||||
set_trait(TRAIT_YIELD,2)
|
||||
@@ -150,7 +150,7 @@
|
||||
chems = list("nutriment" = list(1,10), "tomatojuice" = list(10,10))
|
||||
kitchen_tag = "tomato"
|
||||
|
||||
/datum/seed/tomato/New()
|
||||
/datum/seed/tomato/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_HARVEST_REPEAT,1)
|
||||
set_trait(TRAIT_JUICY,1)
|
||||
@@ -173,7 +173,7 @@
|
||||
chems = list("nutriment" = list(1,10), "blood" = list(1,5))
|
||||
splat_type = /obj/effect/decal/cleanable/blood/splatter
|
||||
|
||||
/datum/seed/tomato/blood/New()
|
||||
/datum/seed/tomato/blood/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_YIELD,3)
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#FF0000")
|
||||
@@ -186,7 +186,7 @@
|
||||
can_self_harvest = 1
|
||||
has_mob_product = /mob/living/simple_animal/tomato
|
||||
|
||||
/datum/seed/tomato/killer/New()
|
||||
/datum/seed/tomato/killer/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_YIELD,2)
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#A86747")
|
||||
@@ -198,7 +198,7 @@
|
||||
mutants = list("bluespacetomato")
|
||||
chems = list("nutriment" = list(1,20), "lube" = list(1,5))
|
||||
|
||||
/datum/seed/tomato/blue/New()
|
||||
/datum/seed/tomato/blue/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#4D86E8")
|
||||
set_trait(TRAIT_PLANT_COLOUR,"#070AAD")
|
||||
@@ -210,7 +210,7 @@
|
||||
mutants = null
|
||||
chems = list("nutriment" = list(1,20), "singulo" = list(10,5))
|
||||
|
||||
/datum/seed/tomato/blue/teleport/New()
|
||||
/datum/seed/tomato/blue/teleport/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_TELEPORTING,1)
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#00E5FF")
|
||||
@@ -226,7 +226,7 @@
|
||||
chems = list("nutriment" = list(1,10))
|
||||
kitchen_tag = "eggplant"
|
||||
|
||||
/datum/seed/eggplant/New()
|
||||
/datum/seed/eggplant/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_HARVEST_REPEAT,1)
|
||||
set_trait(TRAIT_MATURATION,6)
|
||||
@@ -246,7 +246,7 @@
|
||||
chems = list("nutriment" = list(15,30))
|
||||
kitchen_tag = "realeggplant"
|
||||
|
||||
/datum/seed/realeggplant/New()
|
||||
/datum/seed/realeggplant/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_HARVEST_REPEAT,1)
|
||||
set_trait(TRAIT_MATURATION,4)
|
||||
@@ -268,7 +268,7 @@
|
||||
chems = list("nutriment" = list(1,10))
|
||||
kitchen_tag = "apple"
|
||||
|
||||
/datum/seed/apple/New()
|
||||
/datum/seed/apple/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_HARVEST_REPEAT,1)
|
||||
set_trait(TRAIT_MATURATION,6)
|
||||
@@ -294,7 +294,7 @@
|
||||
chems = list("nutriment" = list(1,10), "gold" = list(1,5))
|
||||
kitchen_tag = "goldapple"
|
||||
|
||||
/datum/seed/apple/gold/New()
|
||||
/datum/seed/apple/gold/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_MATURATION,10)
|
||||
set_trait(TRAIT_PRODUCTION,10)
|
||||
@@ -311,7 +311,7 @@
|
||||
chems = list("nutriment" = list(1), "space_drugs" = list(1,8), "kelotane" = list(1,8,1), "bicaridine" = list(1,10,1), "toxin" = list(1,10))
|
||||
kitchen_tag = "ambrosia"
|
||||
|
||||
/datum/seed/ambrosia/New()
|
||||
/datum/seed/ambrosia/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_HARVEST_REPEAT,1)
|
||||
set_trait(TRAIT_MATURATION,6)
|
||||
@@ -331,7 +331,7 @@
|
||||
chems = list("nutriment" = list(1), "bicaridine" = list(1,8), "synaptizine" = list(1,8,1), "hyperzine" = list(1,10,1), "space_drugs" = list(1,10))
|
||||
kitchen_tag = "ambrosiadeus"
|
||||
|
||||
/datum/seed/ambrosia/deus/New()
|
||||
/datum/seed/ambrosia/deus/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#A3F0AD")
|
||||
set_trait(TRAIT_PLANT_COLOUR,"#2A9C61")
|
||||
@@ -347,7 +347,7 @@
|
||||
splat_type = /obj/effect/plant
|
||||
kitchen_tag = "mushroom"
|
||||
|
||||
/datum/seed/mushroom/New()
|
||||
/datum/seed/mushroom/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_MATURATION,7)
|
||||
set_trait(TRAIT_PRODUCTION,1)
|
||||
@@ -373,7 +373,7 @@
|
||||
splat_type = /obj/effect/plant
|
||||
kitchen_tag = "koisspore"
|
||||
|
||||
/datum/seed/koisspore/New()
|
||||
/datum/seed/koisspore/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_SPREAD,1)
|
||||
set_trait(TRAIT_MATURATION,5)
|
||||
@@ -396,7 +396,7 @@
|
||||
display_name = "brown mold"
|
||||
mutants = null
|
||||
|
||||
/datum/seed/mushroom/mold/New()
|
||||
/datum/seed/mushroom/mold/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_SPREAD,1)
|
||||
set_trait(TRAIT_MATURATION,10)
|
||||
@@ -414,7 +414,7 @@
|
||||
chems = list("nutriment" = list(2,10))
|
||||
kitchen_tag = "plumphelmet"
|
||||
|
||||
/datum/seed/mushroom/plump/New()
|
||||
/datum/seed/mushroom/plump/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_MATURATION,8)
|
||||
set_trait(TRAIT_YIELD,4)
|
||||
@@ -432,7 +432,7 @@
|
||||
can_self_harvest = 1
|
||||
has_mob_product = /mob/living/simple_animal/mushroom
|
||||
|
||||
/datum/seed/mushroom/plump/walking/New()
|
||||
/datum/seed/mushroom/plump/walking/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_MATURATION,5)
|
||||
set_trait(TRAIT_YIELD,1)
|
||||
@@ -446,7 +446,7 @@
|
||||
mutants = list("libertycap","glowshroom")
|
||||
chems = list("nutriment" = list(1,50), "psilocybin" = list(3,5))
|
||||
|
||||
/datum/seed/mushroom/hallucinogenic/New()
|
||||
/datum/seed/mushroom/hallucinogenic/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_MATURATION,10)
|
||||
set_trait(TRAIT_PRODUCTION,5)
|
||||
@@ -464,7 +464,7 @@
|
||||
mutants = null
|
||||
chems = list("nutriment" = list(1), "stoxin" = list(3,3), "space_drugs" = list(1,25))
|
||||
|
||||
/datum/seed/mushroom/hallucinogenic/strong/New()
|
||||
/datum/seed/mushroom/hallucinogenic/strong/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_PRODUCTION,1)
|
||||
set_trait(TRAIT_POTENCY,15)
|
||||
@@ -480,7 +480,7 @@
|
||||
mutants = list("destroyingangel","plastic")
|
||||
chems = list("nutriment" = list(1), "amatoxin" = list(3,3), "psilocybin" = list(1,25))
|
||||
|
||||
/datum/seed/mushroom/poison/New()
|
||||
/datum/seed/mushroom/poison/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_MATURATION,10)
|
||||
set_trait(TRAIT_PRODUCTION,5)
|
||||
@@ -498,7 +498,7 @@
|
||||
mutants = null
|
||||
chems = list("nutriment" = list(1,50), "amatoxin" = list(13,3), "psilocybin" = list(1,25))
|
||||
|
||||
/datum/seed/mushroom/poison/death/New()
|
||||
/datum/seed/mushroom/poison/death/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_MATURATION,12)
|
||||
set_trait(TRAIT_YIELD,2)
|
||||
@@ -515,7 +515,7 @@
|
||||
chems = list("woodpulp" = list(10,1))
|
||||
mutants = null
|
||||
|
||||
/datum/seed/mushroom/towercap/New()
|
||||
/datum/seed/mushroom/towercap/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_MATURATION,15)
|
||||
set_trait(TRAIT_PRODUCT_ICON,"mushroom7")
|
||||
@@ -530,7 +530,7 @@
|
||||
mutants = null
|
||||
chems = list("radium" = list(1,20))
|
||||
|
||||
/datum/seed/mushroom/glowshroom/New()
|
||||
/datum/seed/mushroom/glowshroom/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_SPREAD,1)
|
||||
set_trait(TRAIT_MATURATION,15)
|
||||
@@ -550,7 +550,7 @@
|
||||
mutants = null
|
||||
chems = list("plasticide" = list(1,10))
|
||||
|
||||
/datum/seed/mushroom/plastic/New()
|
||||
/datum/seed/mushroom/plastic/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_MATURATION,5)
|
||||
set_trait(TRAIT_PRODUCTION,6)
|
||||
@@ -568,7 +568,7 @@
|
||||
display_name = "harebells"
|
||||
chems = list("nutriment" = list(1,20))
|
||||
|
||||
/datum/seed/flower/New()
|
||||
/datum/seed/flower/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_MATURATION,7)
|
||||
set_trait(TRAIT_PRODUCTION,1)
|
||||
@@ -586,7 +586,7 @@
|
||||
chems = list("nutriment" = list(1,20), "bicaridine" = list(1,10))
|
||||
kitchen_tag = "poppy"
|
||||
|
||||
/datum/seed/flower/poppy/New()
|
||||
/datum/seed/flower/poppy/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_POTENCY,20)
|
||||
set_trait(TRAIT_MATURATION,8)
|
||||
@@ -604,7 +604,7 @@
|
||||
seed_name = "sunflower"
|
||||
display_name = "sunflowers"
|
||||
|
||||
/datum/seed/flower/sunflower/New()
|
||||
/datum/seed/flower/sunflower/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_MATURATION,6)
|
||||
set_trait(TRAIT_PRODUCT_ICON,"flower2")
|
||||
@@ -622,7 +622,7 @@
|
||||
mutants = list("greengrapes")
|
||||
chems = list("nutriment" = list(1,10), "sugar" = list(1,5), "grapejuice" = list(10,10))
|
||||
|
||||
/datum/seed/grapes/New()
|
||||
/datum/seed/grapes/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_HARVEST_REPEAT,1)
|
||||
set_trait(TRAIT_MATURATION,3)
|
||||
@@ -643,7 +643,7 @@
|
||||
mutants = null
|
||||
chems = list("nutriment" = list(1,10), "kelotane" = list(3,5), "grapejuice" = list(10,10))
|
||||
|
||||
/datum/seed/grapes/green/New()
|
||||
/datum/seed/grapes/green/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"42ed2f")
|
||||
|
||||
@@ -655,7 +655,7 @@
|
||||
chems = list("nutriment" = list(1,10))
|
||||
kitchen_tag = "peanut"
|
||||
|
||||
/datum/seed/peanuts/New()
|
||||
/datum/seed/peanuts/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_HARVEST_REPEAT,1)
|
||||
set_trait(TRAIT_MATURATION,6)
|
||||
@@ -674,7 +674,7 @@
|
||||
chems = list("nutriment" = list(1,10))
|
||||
kitchen_tag = "cabbage"
|
||||
|
||||
/datum/seed/cabbage/New()
|
||||
/datum/seed/cabbage/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_HARVEST_REPEAT,1)
|
||||
set_trait(TRAIT_MATURATION,3)
|
||||
@@ -697,7 +697,7 @@
|
||||
trash_type = /obj/item/weapon/bananapeel
|
||||
kitchen_tag = "banana"
|
||||
|
||||
/datum/seed/banana/New()
|
||||
/datum/seed/banana/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_HARVEST_REPEAT,1)
|
||||
set_trait(TRAIT_MATURATION,6)
|
||||
@@ -719,7 +719,7 @@
|
||||
kitchen_tag = "corn"
|
||||
trash_type = /obj/item/weapon/corncob
|
||||
|
||||
/datum/seed/corn/New()
|
||||
/datum/seed/corn/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_MATURATION,8)
|
||||
set_trait(TRAIT_PRODUCTION,6)
|
||||
@@ -740,7 +740,7 @@
|
||||
chems = list("nutriment" = list(1,10), "potato" = list(10,10))
|
||||
kitchen_tag = "potato"
|
||||
|
||||
/datum/seed/potato/New()
|
||||
/datum/seed/potato/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_PRODUCES_POWER,1)
|
||||
set_trait(TRAIT_MATURATION,10)
|
||||
@@ -759,7 +759,7 @@
|
||||
chems = list("nutriment" = list(1,20), "soymilk" = list(10,20))
|
||||
kitchen_tag = "soybeans"
|
||||
|
||||
/datum/seed/soybean/New()
|
||||
/datum/seed/soybean/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_HARVEST_REPEAT,1)
|
||||
set_trait(TRAIT_MATURATION,4)
|
||||
@@ -777,7 +777,7 @@
|
||||
chems = list("nutriment" = list(1,25), "flour" = list(15,15))
|
||||
kitchen_tag = "wheat"
|
||||
|
||||
/datum/seed/wheat/New()
|
||||
/datum/seed/wheat/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_MATURATION,6)
|
||||
set_trait(TRAIT_PRODUCTION,1)
|
||||
@@ -797,7 +797,7 @@
|
||||
chems = list("nutriment" = list(1,25), "rice" = list(10,15))
|
||||
kitchen_tag = "rice"
|
||||
|
||||
/datum/seed/rice/New()
|
||||
/datum/seed/rice/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_MATURATION,6)
|
||||
set_trait(TRAIT_PRODUCTION,1)
|
||||
@@ -817,7 +817,7 @@
|
||||
chems = list("nutriment" = list(1,20), "imidazoline" = list(3,5), "carrotjuice" = list(10,20))
|
||||
kitchen_tag = "carrot"
|
||||
|
||||
/datum/seed/carrots/New()
|
||||
/datum/seed/carrots/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_MATURATION,10)
|
||||
set_trait(TRAIT_PRODUCTION,1)
|
||||
@@ -833,7 +833,7 @@
|
||||
seed_name = "weed"
|
||||
display_name = "weeds"
|
||||
|
||||
/datum/seed/weeds/New()
|
||||
/datum/seed/weeds/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_MATURATION,5)
|
||||
set_trait(TRAIT_PRODUCTION,1)
|
||||
@@ -852,7 +852,7 @@
|
||||
chems = list("nutriment" = list(0,20), "sugar" = list(1,5))
|
||||
kitchen_tag = "whitebeet"
|
||||
|
||||
/datum/seed/whitebeets/New()
|
||||
/datum/seed/whitebeets/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_MATURATION,6)
|
||||
set_trait(TRAIT_PRODUCTION,6)
|
||||
@@ -870,7 +870,7 @@
|
||||
display_name = "sugarcanes"
|
||||
chems = list("sugar" = list(4,5))
|
||||
|
||||
/datum/seed/sugarcane/New()
|
||||
/datum/seed/sugarcane/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_HARVEST_REPEAT,1)
|
||||
set_trait(TRAIT_MATURATION,3)
|
||||
@@ -889,7 +889,7 @@
|
||||
display_name = "watermelon vine"
|
||||
chems = list("nutriment" = list(1,6), "watermelonjuice" = list(10,6))
|
||||
|
||||
/datum/seed/watermelon/New()
|
||||
/datum/seed/watermelon/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_HARVEST_REPEAT,1)
|
||||
set_trait(TRAIT_JUICY,1)
|
||||
@@ -913,7 +913,7 @@
|
||||
chems = list("nutriment" = list(1,6))
|
||||
kitchen_tag = "pumpkin"
|
||||
|
||||
/datum/seed/pumpkin/New()
|
||||
/datum/seed/pumpkin/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_HARVEST_REPEAT,1)
|
||||
set_trait(TRAIT_MATURATION,6)
|
||||
@@ -933,7 +933,7 @@
|
||||
chems = list("nutriment" = list(1,20), "limejuice" = list(10,20))
|
||||
kitchen_tag = "lime"
|
||||
|
||||
/datum/seed/citrus/New()
|
||||
/datum/seed/citrus/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_HARVEST_REPEAT,1)
|
||||
set_trait(TRAIT_JUICY,1)
|
||||
@@ -953,7 +953,7 @@
|
||||
chems = list("nutriment" = list(1,20), "lemonjuice" = list(10,20))
|
||||
kitchen_tag = "lemon"
|
||||
|
||||
/datum/seed/citrus/lemon/New()
|
||||
/datum/seed/citrus/lemon/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_PRODUCES_POWER,1)
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#F0E226")
|
||||
@@ -967,7 +967,7 @@
|
||||
kitchen_tag = "orange"
|
||||
chems = list("nutriment" = list(1,20), "orangejuice" = list(10,20))
|
||||
|
||||
/datum/seed/citrus/orange/New()
|
||||
/datum/seed/citrus/orange/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#FFC20A")
|
||||
set_trait(TRAIT_FLESH_COLOUR,"#FFC20A")
|
||||
@@ -979,7 +979,7 @@
|
||||
chems = list("nutriment" = list(1,20))
|
||||
kitchen_tag = "grass"
|
||||
|
||||
/datum/seed/grass/New()
|
||||
/datum/seed/grass/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_HARVEST_REPEAT,1)
|
||||
set_trait(TRAIT_MATURATION,2)
|
||||
@@ -998,7 +998,7 @@
|
||||
display_name = "cacao tree"
|
||||
chems = list("nutriment" = list(1,10), "coco" = list(4,5))
|
||||
|
||||
/datum/seed/cocoa/New()
|
||||
/datum/seed/cocoa/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_HARVEST_REPEAT,1)
|
||||
set_trait(TRAIT_MATURATION,5)
|
||||
@@ -1019,7 +1019,7 @@
|
||||
chems = list("nutriment" = list(1,15), "sugar" = list(1,15), "cherryjelly" = list(10,15))
|
||||
kitchen_tag = "cherries"
|
||||
|
||||
/datum/seed/cherries/New()
|
||||
/datum/seed/cherries/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_HARVEST_REPEAT,1)
|
||||
set_trait(TRAIT_JUICY,1)
|
||||
@@ -1038,7 +1038,7 @@
|
||||
display_name = "kudzu vines"
|
||||
chems = list("nutriment" = list(1,50), "anti_toxin" = list(1,25))
|
||||
|
||||
/datum/seed/kudzu/New()
|
||||
/datum/seed/kudzu/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_MATURATION,6)
|
||||
set_trait(TRAIT_PRODUCTION,6)
|
||||
@@ -1059,7 +1059,7 @@
|
||||
can_self_harvest = 1
|
||||
has_mob_product = /mob/living/carbon/alien/diona
|
||||
|
||||
/datum/seed/diona/New()
|
||||
/datum/seed/diona/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_IMMUTABLE,1)
|
||||
set_trait(TRAIT_ENDURANCE,8)
|
||||
@@ -1079,7 +1079,7 @@
|
||||
chems = list("bicaridine" = list(0,10))
|
||||
kitchen_tag = "shand"
|
||||
|
||||
/datum/seed/shand/New()
|
||||
/datum/seed/shand/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_MATURATION,3)
|
||||
set_trait(TRAIT_PRODUCTION,5)
|
||||
@@ -1099,7 +1099,7 @@
|
||||
chems = list("honey" = list(1,10), "kelotane" = list(3,5))
|
||||
kitchen_tag = "mtear"
|
||||
|
||||
/datum/seed/mtear/New()
|
||||
/datum/seed/mtear/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_MATURATION,3)
|
||||
set_trait(TRAIT_PRODUCTION,5)
|
||||
@@ -1118,7 +1118,7 @@
|
||||
display_name = "telriis grass"
|
||||
chems = list("pwine" = list(1,5), "nutriment" = list(1,6))
|
||||
|
||||
/datum/seed/telriis/New()
|
||||
/datum/seed/telriis/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_PLANT_ICON,"telriis")
|
||||
set_trait(TRAIT_ENDURANCE,50)
|
||||
@@ -1133,7 +1133,7 @@
|
||||
display_name = "thaa'dra lichen"
|
||||
chems = list("frostoil" = list(1,5),"nutriment" = list(1,5))
|
||||
|
||||
/datum/seed/thaadra/New()
|
||||
/datum/seed/thaadra/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_PLANT_ICON,"thaadra")
|
||||
set_trait(TRAIT_ENDURANCE,10)
|
||||
@@ -1148,7 +1148,7 @@
|
||||
display_name = "jurl'mah reeds"
|
||||
chems = list("serotrotium" = list(1,5),"nutriment" = list(1,5))
|
||||
|
||||
/datum/seed/jurlmah/New()
|
||||
/datum/seed/jurlmah/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_PLANT_ICON,"jurlmah")
|
||||
set_trait(TRAIT_ENDURANCE,12)
|
||||
@@ -1163,7 +1163,7 @@
|
||||
display_name = "amauri plant"
|
||||
chems = list("zombiepowder" = list(1,10),"condensedcapsaicin" = list(1,5),"nutriment" = list(1,5))
|
||||
|
||||
/datum/seed/amauri/New()
|
||||
/datum/seed/amauri/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_PLANT_ICON,"amauri")
|
||||
set_trait(TRAIT_ENDURANCE,10)
|
||||
@@ -1178,7 +1178,7 @@
|
||||
display_name = "gelthi plant"
|
||||
chems = list("stoxin" = list(1,5),"capsaicin" = list(1,5),"nutriment" = list(1,5))
|
||||
|
||||
/datum/seed/gelthi/New()
|
||||
/datum/seed/gelthi/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_PLANT_ICON,"gelthi")
|
||||
set_trait(TRAIT_ENDURANCE,15)
|
||||
@@ -1193,7 +1193,7 @@
|
||||
display_name = "vale bush"
|
||||
chems = list("paracetamol" = list(1,5),"dexalin" = list(1,2),"nutriment"= list(1,5))
|
||||
|
||||
/datum/seed/vale/New()
|
||||
/datum/seed/vale/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_PLANT_ICON,"vale")
|
||||
set_trait(TRAIT_ENDURANCE,15)
|
||||
@@ -1208,7 +1208,7 @@
|
||||
display_name = "surik vine"
|
||||
chems = list("impedrezene" = list(1,3),"synaptizine" = list(1,2),"nutriment" = list(1,5))
|
||||
|
||||
/datum/seed/surik/New()
|
||||
/datum/seed/surik/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_PLANT_ICON,"surik")
|
||||
set_trait(TRAIT_ENDURANCE,18)
|
||||
@@ -1225,7 +1225,7 @@
|
||||
force_layer = 3
|
||||
chems = list("phoron" = list(1,3))
|
||||
|
||||
/datum/seed/xenomorph/New()
|
||||
/datum/seed/xenomorph/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_PLANT_ICON,"vine2")
|
||||
set_trait(TRAIT_IMMUTABLE,1)
|
||||
|
||||
@@ -63,8 +63,8 @@
|
||||
|
||||
var/excavation_amount = 30
|
||||
var/wielded = 0
|
||||
var/force_unwielded = 10.0
|
||||
var/force_wielded = 30.0
|
||||
var/force_unwielded = 5.0
|
||||
var/force_wielded = 15.0
|
||||
var/digspeed_unwielded = 30
|
||||
var/digspeed_wielded = 10
|
||||
var/drilling = 0
|
||||
@@ -233,7 +233,7 @@
|
||||
drill_sound = 'sound/weapons/sonic_jackhammer.ogg'
|
||||
digspeed = 15
|
||||
digspeed_unwielded = 15
|
||||
force_unwielded = 25.0
|
||||
force_unwielded = 15.0
|
||||
excavation_amount = 100
|
||||
|
||||
can_wield = 0
|
||||
@@ -252,7 +252,6 @@
|
||||
|
||||
digspeed_unwielded = 30
|
||||
digspeed_wielded = 5
|
||||
force_wielded = 35.0
|
||||
|
||||
/obj/item/weapon/pickaxe/diamond
|
||||
name = "diamond pickaxe"
|
||||
@@ -264,7 +263,7 @@
|
||||
|
||||
digspeed_unwielded = 20
|
||||
digspeed_wielded = 1
|
||||
force_wielded = 35.0
|
||||
force_wielded = 25.0
|
||||
|
||||
/obj/item/weapon/pickaxe/diamonddrill //When people ask about the badass leader of the mining tools, they are talking about ME!
|
||||
name = "diamond mining drill"
|
||||
@@ -1277,7 +1276,9 @@ var/list/total_extraction_beacons = list()
|
||||
density = 1
|
||||
anchored = 1
|
||||
|
||||
/obj/structure/weightlifter/attack_hand(mob/user as mob)
|
||||
/obj/structure/weightlifter/attack_hand(var/mob/living/carbon/human/user)
|
||||
if(!istype(user))
|
||||
return
|
||||
if(in_use)
|
||||
user << "It's already in use - wait a bit."
|
||||
return
|
||||
@@ -1314,6 +1315,7 @@ var/list/total_extraction_beacons = list()
|
||||
icon_state = "fitnessweight"
|
||||
overlays -= W
|
||||
user << "[finishmessage]"
|
||||
user.nutrition = user.nutrition - 10
|
||||
|
||||
/******************************Seismic Charge*******************************/
|
||||
|
||||
|
||||
@@ -21,10 +21,10 @@
|
||||
//set del_on_fail to have it delete W if it fails to equip
|
||||
//set disable_warning to disable the 'you are unable to equip that' warning.
|
||||
//unset redraw_mob to prevent the mob from being redrawn at the end.
|
||||
/mob/proc/equip_to_slot_if_possible(obj/item/W as obj, slot, del_on_fail = 0, disable_warning = 0, redraw_mob = 1)
|
||||
/mob/proc/equip_to_slot_if_possible(obj/item/W as obj, slot, del_on_fail = FALSE, disable_warning = FALSE, redraw_mob = TRUE, ignore_blocked = FALSE)
|
||||
if(!istype(W)) return 0
|
||||
|
||||
if(!W.mob_can_equip(src, slot))
|
||||
if(!W.mob_can_equip(src, slot, disable_warning, ignore_blocked))
|
||||
if(del_on_fail)
|
||||
qdel(W)
|
||||
else
|
||||
@@ -42,7 +42,7 @@
|
||||
|
||||
//This is just a commonly used configuration for the equip_to_slot_if_possible() proc, used to equip people when the rounds tarts and when events happen and such.
|
||||
/mob/proc/equip_to_slot_or_del(obj/item/W as obj, slot)
|
||||
return equip_to_slot_if_possible(W, slot, 1, 1, 0)
|
||||
. = equip_to_slot_if_possible(W, slot, TRUE, TRUE, FALSE, ignore_blocked = TRUE)
|
||||
|
||||
//The list of slots by priority. equip_to_appropriate_slot() uses this list. Doesn't matter if a mob type doesn't have a slot.
|
||||
var/list/slot_equipment_priority = list( \
|
||||
|
||||
@@ -32,12 +32,15 @@
|
||||
icon = 'icons/mob/alien.dmi'
|
||||
icon_state = "chitin"
|
||||
|
||||
/obj/item/organ/brain/New()
|
||||
..()
|
||||
/obj/item/organ/brain/Initialize(mapload)
|
||||
. = ..()
|
||||
health = config.default_brain_health
|
||||
spawn(5)
|
||||
if(brainmob && brainmob.client)
|
||||
brainmob.client.screen.len = null //clear the hud
|
||||
if (!mapload)
|
||||
addtimer(CALLBACK(src, .proc/clear_screen), 5)
|
||||
|
||||
/obj/item/organ/brain/proc/clear_screen()
|
||||
if (brainmob && brainmob.client)
|
||||
brainmob.client.screen.Cut()
|
||||
|
||||
/obj/item/organ/brain/Destroy()
|
||||
if(brainmob)
|
||||
|
||||
@@ -2,11 +2,7 @@
|
||||
real_name = "Test Dummy"
|
||||
status_flags = GODMODE|CANPUSH
|
||||
|
||||
/mob/living/carbon/human/dummy/mannequin/New(location, ...)
|
||||
..()
|
||||
if (!initialized)
|
||||
args[1] = TRUE
|
||||
SSatoms.InitAtom(src, args)
|
||||
INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy/mannequin)
|
||||
|
||||
/mob/living/carbon/human/dummy/mannequin/Initialize()
|
||||
. = ..()
|
||||
|
||||
@@ -754,7 +754,7 @@
|
||||
if(statpanel("MC"))
|
||||
stat("CPU:", world.cpu)
|
||||
stat("Tick Usage:", world.tick_usage)
|
||||
stat("Instances:", world.contents.len)
|
||||
stat("Instances:", num2text(world.contents.len, 7))
|
||||
if (config.fastboot)
|
||||
stat(null, "FASTBOOT ENABLED")
|
||||
if(Master)
|
||||
|
||||
@@ -232,3 +232,5 @@
|
||||
|
||||
var/list/active_genes=list()
|
||||
var/mob_size = MOB_MEDIUM
|
||||
|
||||
var/list/progressbars
|
||||
|
||||
@@ -114,13 +114,13 @@
|
||||
new_player_panel_proc()
|
||||
|
||||
if(href_list["observe"])
|
||||
if (SSatoms.initialized < INITIALIZATION_INNEW_REGULAR)
|
||||
if (!SSATOMS_IS_PROBABLY_DONE)
|
||||
// Don't allow players to observe until initialization is more or less complete.
|
||||
// Letting them join too early breaks things, they can wait.
|
||||
src << span("alert", "The server is still initializing, try observing again in a minute or so.")
|
||||
return
|
||||
alert(src, "Please wait, the map is not initialized yet.")
|
||||
return 0
|
||||
|
||||
if(alert(src,"Are you sure you wish to observe? You will have to wait 30 minutes before being able to respawn!","Player Setup","Yes","No") == "Yes")
|
||||
if(alert(src,"Are you sure you wish to observe? You will have to wait [config.respawn_delay] minutes before being able to respawn!","Player Setup","Yes","No") == "Yes")
|
||||
if(!client) return 1
|
||||
var/mob/dead/observer/observer = new /mob/dead/observer(src)
|
||||
spawning = 1
|
||||
|
||||
@@ -24,7 +24,8 @@
|
||||
|
||||
/atom/movable/Destroy()
|
||||
. = ..()
|
||||
QDEL_NULL(bound_overlay)
|
||||
if (bound_overlay)
|
||||
QDEL_NULL(bound_overlay)
|
||||
|
||||
/atom/movable/forceMove(atom/dest)
|
||||
. = ..(dest)
|
||||
@@ -39,10 +40,10 @@
|
||||
if (!bound_overlay)
|
||||
return
|
||||
|
||||
// check_existence returns TRUE if the overlay is valid.
|
||||
if (isopenturf(bound_overlay.loc) && !bound_overlay.queued)
|
||||
SSopenturf.queued_overlays += bound_overlay
|
||||
bound_overlay.queued = TRUE
|
||||
if (isopenturf(bound_overlay.loc))
|
||||
if (!bound_overlay.queued)
|
||||
SSopenturf.queued_overlays += bound_overlay
|
||||
bound_overlay.queued = TRUE
|
||||
else
|
||||
qdel(bound_overlay)
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
/turf/simulated/open
|
||||
name = "open space"
|
||||
icon = 'icons/turf/space.dmi'
|
||||
icon_state = ""
|
||||
icon_state = "opendebug"
|
||||
plane = PLANE_SPACE_BACKGROUND
|
||||
density = 0
|
||||
pathweight = 100000 //Seriously, don't try and path over this one numbnuts
|
||||
@@ -167,6 +167,7 @@
|
||||
|
||||
/turf/simulated/open/Initialize()
|
||||
. = ..()
|
||||
icon_state = "" // Clear out the debug icon.
|
||||
SSopenturf.openspace_turfs += src
|
||||
update()
|
||||
|
||||
|
||||
@@ -27,6 +27,12 @@
|
||||
|
||||
var/force_skintone = FALSE // If true, icon generation will skip is-robotic checks. Used for synthskin limbs.
|
||||
|
||||
/obj/item/organ/New(loc, ...)
|
||||
..()
|
||||
if (!initialized && istype(loc, /mob/living/carbon/human/dummy/mannequin))
|
||||
args[1] = TRUE
|
||||
SSatoms.InitAtom(src, args)
|
||||
|
||||
/obj/item/organ/Destroy()
|
||||
STOP_PROCESSING(SSprocessing, src)
|
||||
if(!owner)
|
||||
@@ -51,8 +57,9 @@
|
||||
/obj/item/organ/proc/update_health()
|
||||
return
|
||||
|
||||
/obj/item/organ/New(var/mob/living/carbon/holder, var/internal)
|
||||
..(holder)
|
||||
/obj/item/organ/Initialize(mapload, internal)
|
||||
. = ..()
|
||||
var/mob/living/carbon/holder = loc
|
||||
create_reagents(5)
|
||||
if(!max_damage)
|
||||
max_damage = min_broken_damage * 2
|
||||
|
||||
@@ -165,18 +165,17 @@
|
||||
damage = min(max_damage, (brute_dam + burn_dam))
|
||||
return
|
||||
|
||||
|
||||
/obj/item/organ/external/New(var/mob/living/carbon/holder)
|
||||
..(holder, 0)
|
||||
/obj/item/organ/external/Initialize(mapload)
|
||||
. = ..(mapload, FALSE)
|
||||
if(owner)
|
||||
replaced(owner)
|
||||
sync_colour_to_human(owner)
|
||||
|
||||
addtimer(CALLBACK(src, .proc/get_icon), 1)
|
||||
|
||||
if ((status & ORGAN_PLANT))
|
||||
cannot_break = 1
|
||||
|
||||
get_icon()
|
||||
|
||||
/obj/item/organ/external/replaced(var/mob/living/carbon/human/target)
|
||||
owner = target
|
||||
forceMove(owner)
|
||||
|
||||
@@ -240,14 +240,14 @@ obj/item/organ/vaurca/neuralsocket/process()
|
||||
var/volume = 50
|
||||
var/manipulated_by = null
|
||||
|
||||
/obj/item/organ/vaurca/preserve/New()
|
||||
..()
|
||||
/obj/item/organ/vaurca/preserve/Initialize()
|
||||
. = ..()
|
||||
|
||||
src.air_contents = new /datum/gas_mixture()
|
||||
src.air_contents.adjust_gas("phoron", (ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C))
|
||||
src.air_contents.volume = volume //liters
|
||||
src.air_contents.temperature = T20C
|
||||
src.distribute_pressure = ((pick(1.8,2.0,2.4,2.8)*ONE_ATMOSPHERE)*O2STANDARD)
|
||||
air_contents = new /datum/gas_mixture()
|
||||
air_contents.adjust_gas("phoron", (ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C))
|
||||
air_contents.volume = volume //liters
|
||||
air_contents.temperature = T20C
|
||||
distribute_pressure = ((pick(1.8,2.0,2.4,2.8)*ONE_ATMOSPHERE)*O2STANDARD)
|
||||
|
||||
START_PROCESSING(SSprocessing, src)
|
||||
var/mob/living/carbon/location = loc
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
icon_name = ""
|
||||
dislocated = -1
|
||||
|
||||
/obj/item/organ/external/stump/New(var/mob/living/carbon/holder, var/internal, var/obj/item/organ/external/limb)
|
||||
/obj/item/organ/external/stump/Initialize(mapload, var/internal, var/obj/item/organ/external/limb)
|
||||
if(istype(limb))
|
||||
limb_name = limb.limb_name
|
||||
body_part = limb.body_part
|
||||
@@ -11,7 +11,7 @@
|
||||
joint = limb.joint
|
||||
parent_organ = limb.parent_organ
|
||||
wounds = limb.wounds
|
||||
..(holder, internal)
|
||||
. = ..(mapload, internal)
|
||||
if(istype(limb))
|
||||
max_damage = limb.max_damage
|
||||
if((limb.status & ORGAN_ROBOT) && (!parent || (parent.status & ORGAN_ROBOT)))
|
||||
|
||||
@@ -6,88 +6,88 @@
|
||||
can_intake_reagents = 0
|
||||
encased = "support frame"
|
||||
|
||||
/obj/item/organ/external/head/ipc/New()
|
||||
/obj/item/organ/external/head/ipc/Initialize()
|
||||
robotize("Hephaestus Integrated Limb")
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/obj/item/organ/external/chest/ipc
|
||||
dislocated = -1
|
||||
encased = "support frame"
|
||||
|
||||
/obj/item/organ/external/chest/ipc/New()
|
||||
/obj/item/organ/external/chest/ipc/Initialize()
|
||||
robotize("Hephaestus Integrated Limb")
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/obj/item/organ/external/groin/ipc
|
||||
dislocated = -1
|
||||
encased = "support frame"
|
||||
|
||||
/obj/item/organ/external/groin/ipc/New()
|
||||
/obj/item/organ/external/groin/ipc/Initialize()
|
||||
robotize("Hephaestus Integrated Limb")
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/obj/item/organ/external/arm/ipc
|
||||
dislocated = -1
|
||||
encased = "support frame"
|
||||
|
||||
/obj/item/organ/external/arm/ipc/New()
|
||||
/obj/item/organ/external/arm/ipc/Initialize()
|
||||
robotize("Hephaestus Integrated Limb")
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/obj/item/organ/external/arm/right/ipc
|
||||
dislocated = -1
|
||||
encased = "support frame"
|
||||
|
||||
/obj/item/organ/external/arm/right/ipc/New()
|
||||
/obj/item/organ/external/arm/right/ipc/Initialize()
|
||||
robotize("Hephaestus Integrated Limb")
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/obj/item/organ/external/leg/ipc
|
||||
dislocated = -1
|
||||
encased = "support frame"
|
||||
|
||||
/obj/item/organ/external/leg/ipc/New()
|
||||
/obj/item/organ/external/leg/ipc/Initialize()
|
||||
robotize("Hephaestus Integrated Limb")
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/obj/item/organ/external/leg/right/ipc
|
||||
dislocated = -1
|
||||
|
||||
/obj/item/organ/external/leg/right/ipc/New()
|
||||
/obj/item/organ/external/leg/right/ipc/Initialize()
|
||||
robotize("Hephaestus Integrated Limb")
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/obj/item/organ/external/foot/ipc
|
||||
dislocated = -1
|
||||
encased = "support frame"
|
||||
|
||||
/obj/item/organ/external/foot/ipc/New()
|
||||
/obj/item/organ/external/foot/ipc/Initialize()
|
||||
robotize("Hephaestus Integrated Limb")
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/obj/item/organ/external/foot/right/ipc
|
||||
dislocated = -1
|
||||
encased = "support frame"
|
||||
|
||||
/obj/item/organ/external/foot/right/ipc/New()
|
||||
/obj/item/organ/external/foot/right/ipc/Initialize()
|
||||
robotize("Hephaestus Integrated Limb")
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/obj/item/organ/external/hand/ipc
|
||||
dislocated = -1
|
||||
encased = "support frame"
|
||||
|
||||
/obj/item/organ/external/hand/ipc/New()
|
||||
/obj/item/organ/external/hand/ipc/Initialize()
|
||||
robotize("Hephaestus Integrated Limb")
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/obj/item/organ/external/hand/right/ipc
|
||||
dislocated = -1
|
||||
encased = "support frame"
|
||||
|
||||
/obj/item/organ/external/hand/right/ipc/New()
|
||||
/obj/item/organ/external/hand/right/ipc/Initialize()
|
||||
robotize("Hephaestus Integrated Limb")
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/obj/item/organ/cell
|
||||
name = "microbattery"
|
||||
@@ -98,12 +98,12 @@
|
||||
parent_organ = "chest"
|
||||
vital = 1
|
||||
|
||||
/obj/item/organ/cell/New()
|
||||
/obj/item/organ/cell/Initialize()
|
||||
robotize()
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/obj/item/organ/cell/replaced()
|
||||
..()
|
||||
. = ..()
|
||||
// This is very ghetto way of rebooting an IPC. TODO better way.
|
||||
if(owner && owner.stat == DEAD)
|
||||
owner.stat = 0
|
||||
@@ -116,9 +116,9 @@
|
||||
icon_state = "camera"
|
||||
dead_icon = "camera_broken"
|
||||
|
||||
/obj/item/organ/eyes/optical_sensor/New()
|
||||
/obj/item/organ/eyes/optical_sensor/Initialize()
|
||||
robotize()
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/obj/item/organ/ipc_tag
|
||||
name = "identification tag"
|
||||
@@ -128,9 +128,9 @@
|
||||
icon_state = "gps-c"
|
||||
dead_icon = "gps-c"
|
||||
|
||||
/obj/item/organ/ipc_tag/New()
|
||||
/obj/item/organ/ipc_tag/Initialize()
|
||||
robotize()
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
// Used for an MMI or posibrain being installed into a human.
|
||||
/obj/item/organ/mmi_holder
|
||||
@@ -154,36 +154,40 @@
|
||||
stored_mmi.loc = get_turf(src)
|
||||
if(owner.mind)
|
||||
owner.mind.transfer_to(stored_mmi.brainmob)
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
var/mob/living/holder_mob = loc
|
||||
if(istype(holder_mob))
|
||||
holder_mob.drop_from_inventory(src)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/organ/mmi_holder/New()
|
||||
..()
|
||||
/obj/item/organ/mmi_holder/Initialize(mapload)
|
||||
. = ..()
|
||||
// This is very ghetto way of rebooting an IPC. TODO better way.
|
||||
spawn(1)
|
||||
if(owner && owner.stat == DEAD)
|
||||
owner.stat = 0
|
||||
owner.visible_message("<span class='danger'>\The [owner] twitches visibly!</span>")
|
||||
if (!mapload)
|
||||
addtimer(CALLBACK(src, .proc/attempt_revive), 1)
|
||||
|
||||
/obj/item/organ/mmi_holder/posibrain/New()
|
||||
/obj/item/organ/mmi_holder/proc/attempt_revive()
|
||||
if (owner && owner.stat == DEAD)
|
||||
owner.stat = 0
|
||||
owner.visible_message("<span class='danger'>\The [owner] twitches visibly!</span>")
|
||||
|
||||
/obj/item/organ/mmi_holder/posibrain/Initialize()
|
||||
robotize()
|
||||
stored_mmi = new /obj/item/device/mmi/digital/posibrain(src)
|
||||
..()
|
||||
spawn(1)
|
||||
if(owner)
|
||||
stored_mmi.name = "positronic brain ([owner.name])"
|
||||
stored_mmi.brainmob.real_name = owner.name
|
||||
stored_mmi.brainmob.name = stored_mmi.brainmob.real_name
|
||||
stored_mmi.icon_state = "posibrain-occupied"
|
||||
update_from_mmi()
|
||||
else
|
||||
stored_mmi.loc = get_turf(src)
|
||||
qdel(src)
|
||||
. = ..()
|
||||
addtimer(CALLBACK(src, .proc/setup_brain), 1)
|
||||
|
||||
/obj/item/organ/mmi_holder/posibrain/proc/setup_brain()
|
||||
if(owner)
|
||||
stored_mmi.name = "positronic brain ([owner.name])"
|
||||
stored_mmi.brainmob.real_name = owner.name
|
||||
stored_mmi.brainmob.name = stored_mmi.brainmob.real_name
|
||||
stored_mmi.icon_state = "posibrain-occupied"
|
||||
update_from_mmi()
|
||||
else
|
||||
stored_mmi.loc = get_turf(src)
|
||||
qdel(src)
|
||||
|
||||
//////////////
|
||||
//Terminator//
|
||||
@@ -205,9 +209,9 @@
|
||||
vital = 0
|
||||
emp_coeff = 0.1
|
||||
|
||||
/obj/item/organ/data/New()
|
||||
/obj/item/organ/data/Initialize()
|
||||
robotize()
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/obj/item/organ/cell/terminator
|
||||
name = "shielded microbattery"
|
||||
@@ -219,9 +223,9 @@
|
||||
vital = 1
|
||||
emp_coeff = 0.1
|
||||
|
||||
/obj/item/organ/cell/New()
|
||||
/obj/item/organ/cell/Initialize()
|
||||
robotize()
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/obj/item/organ/external/head/terminator
|
||||
dislocated = -1
|
||||
@@ -232,99 +236,99 @@
|
||||
/obj/item/organ/eyes/optical_sensor/terminator
|
||||
emp_coeff = 0.5
|
||||
|
||||
/obj/item/organ/external/head/terminator/New()
|
||||
/obj/item/organ/external/head/terminator/Initialize()
|
||||
robotize("Hephaestus Vulcanite Limb")
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/obj/item/organ/external/chest/terminator
|
||||
dislocated = -1
|
||||
encased = "reinforced support frame"
|
||||
emp_coeff = 0.5
|
||||
|
||||
/obj/item/organ/external/chest/terminator/New()
|
||||
/obj/item/organ/external/chest/terminator/Initialize()
|
||||
robotize("Hephaestus Vulcanite Limb")
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/obj/item/organ/external/groin/terminator
|
||||
dislocated = -1
|
||||
encased = "reinforced support frame"
|
||||
emp_coeff = 0.5
|
||||
|
||||
/obj/item/organ/external/groin/terminator/New()
|
||||
/obj/item/organ/external/groin/terminator/Initialize()
|
||||
robotize("Hephaestus Vulcanite Limb")
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/obj/item/organ/external/arm/terminator
|
||||
dislocated = -1
|
||||
encased = "reinforced support frame"
|
||||
emp_coeff = 0.5
|
||||
|
||||
/obj/item/organ/external/arm/terminator/New()
|
||||
/obj/item/organ/external/arm/terminator/Initialize()
|
||||
robotize("Hephaestus Vulcanite Limb")
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/obj/item/organ/external/arm/right/terminator
|
||||
dislocated = -1
|
||||
encased = "reinforced support frame"
|
||||
emp_coeff = 0.5
|
||||
|
||||
/obj/item/organ/external/arm/right/terminator/New()
|
||||
/obj/item/organ/external/arm/right/terminator/Initialize()
|
||||
robotize("Hephaestus Vulcanite Limb")
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/obj/item/organ/external/leg/terminator
|
||||
dislocated = -1
|
||||
encased = "reinforced support frame"
|
||||
emp_coeff = 0.5
|
||||
|
||||
/obj/item/organ/external/leg/terminator/New()
|
||||
/obj/item/organ/external/leg/terminator/Initialize()
|
||||
robotize("Hephaestus Vulcanite Limb")
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/obj/item/organ/external/leg/right/terminator
|
||||
dislocated = -1
|
||||
encased = "reinforced support frame"
|
||||
emp_coeff = 0.5
|
||||
|
||||
/obj/item/organ/external/leg/right/terminator/New()
|
||||
/obj/item/organ/external/leg/right/terminator/Initialize()
|
||||
robotize("Hephaestus Vulcanite Limb")
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/obj/item/organ/external/foot/terminator
|
||||
dislocated = -1
|
||||
encased = "reinforced support frame"
|
||||
emp_coeff = 0.5
|
||||
|
||||
/obj/item/organ/external/foot/terminator/New()
|
||||
/obj/item/organ/external/foot/terminator/Initialize()
|
||||
robotize("Hephaestus Vulcanite Limb")
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/obj/item/organ/external/foot/right/terminator
|
||||
dislocated = -1
|
||||
encased = "reinforced support frame"
|
||||
emp_coeff = 0.5
|
||||
|
||||
/obj/item/organ/external/foot/right/terminator/New()
|
||||
/obj/item/organ/external/foot/right/terminator/Initialize()
|
||||
robotize("Hephaestus Vulcanite Limb")
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/obj/item/organ/external/hand/terminator
|
||||
dislocated = -1
|
||||
encased = "reinforced support frame"
|
||||
emp_coeff = 0.5
|
||||
|
||||
/obj/item/organ/external/hand/terminator/New()
|
||||
/obj/item/organ/external/hand/terminator/Initialize()
|
||||
robotize("Hephaestus Vulcanite Limb")
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/obj/item/organ/external/hand/right/terminator
|
||||
dislocated = -1
|
||||
encased = "reinforced support frame"
|
||||
emp_coeff = 0.5
|
||||
|
||||
/obj/item/organ/external/hand/right/terminator/New()
|
||||
/obj/item/organ/external/hand/right/terminator/Initialize()
|
||||
robotize("Hephaestus Vulcanite Limb")
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
//////////////
|
||||
//Industrial//
|
||||
@@ -335,89 +339,89 @@
|
||||
can_intake_reagents = 0
|
||||
encased = "support frame"
|
||||
|
||||
/obj/item/organ/external/head/industrial/New()
|
||||
/obj/item/organ/external/head/industrial/Initialize()
|
||||
robotize("Hephaestus Industrial Limb")
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/obj/item/organ/external/chest/industrial
|
||||
dislocated = -1
|
||||
encased = "support frame"
|
||||
|
||||
/obj/item/organ/external/chest/industrial/New()
|
||||
/obj/item/organ/external/chest/industrial/Initialize()
|
||||
robotize("Hephaestus Industrial Limb")
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/obj/item/organ/external/groin/industrial
|
||||
dislocated = -1
|
||||
encased = "support frame"
|
||||
|
||||
/obj/item/organ/external/groin/industrial/New()
|
||||
/obj/item/organ/external/groin/industrial/Initialize()
|
||||
robotize("Hephaestus Industrial Limb")
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/obj/item/organ/external/arm/industrial
|
||||
dislocated = -1
|
||||
encased = "support frame"
|
||||
|
||||
/obj/item/organ/external/arm/industrial/New()
|
||||
/obj/item/organ/external/arm/industrial/Initialize()
|
||||
robotize("Hephaestus Industrial Limb")
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/obj/item/organ/external/arm/right/industrial
|
||||
dislocated = -1
|
||||
encased = "support frame"
|
||||
|
||||
/obj/item/organ/external/arm/right/industrial/New()
|
||||
/obj/item/organ/external/arm/right/industrial/Initialize()
|
||||
robotize("Hephaestus Industrial Limb")
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/obj/item/organ/external/leg/industrial
|
||||
dislocated = -1
|
||||
encased = "support frame"
|
||||
|
||||
/obj/item/organ/external/leg/industrial/New()
|
||||
/obj/item/organ/external/leg/industrial/Initialize()
|
||||
robotize("Hephaestus Industrial Limb")
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/obj/item/organ/external/leg/right/industrial
|
||||
dislocated = -1
|
||||
encased = "support frame"
|
||||
|
||||
/obj/item/organ/external/leg/right/industrial/New()
|
||||
/obj/item/organ/external/leg/right/industrial/Initialize()
|
||||
robotize("Hephaestus Industrial Limb")
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/obj/item/organ/external/foot/industrial
|
||||
dislocated = -1
|
||||
encased = "support frame"
|
||||
|
||||
/obj/item/organ/external/foot/industrial/New()
|
||||
/obj/item/organ/external/foot/industrial/Initialize()
|
||||
robotize("Hephaestus Industrial Limb")
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/obj/item/organ/external/foot/right/industrial
|
||||
dislocated = -1
|
||||
encased = "support frame"
|
||||
|
||||
/obj/item/organ/external/foot/right/industrial/New()
|
||||
/obj/item/organ/external/foot/right/industrial/Initialize()
|
||||
robotize("Hephaestus Industrial Limb")
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/obj/item/organ/external/hand/industrial
|
||||
dislocated = -1
|
||||
encased = "support frame"
|
||||
|
||||
/obj/item/organ/external/hand/industrial/New()
|
||||
/obj/item/organ/external/hand/industrial/Initialize()
|
||||
robotize("Hephaestus Industrial Limb")
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/obj/item/organ/external/hand/right/industrial
|
||||
dislocated = -1
|
||||
encased = "support frame"
|
||||
|
||||
/obj/item/organ/external/hand/right/industrial/New()
|
||||
/obj/item/organ/external/hand/right/industrial/Initialize()
|
||||
robotize("Hephaestus Industrial Limb")
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
///////////////
|
||||
//Shell limbs//
|
||||
@@ -429,9 +433,9 @@
|
||||
encased = "support frame"
|
||||
force_skintone = TRUE
|
||||
|
||||
/obj/item/organ/external/head/shell/New()
|
||||
/obj/item/organ/external/head/shell/Initialize()
|
||||
robotize("Human Synthskin")
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/obj/item/organ/external/chest/shell
|
||||
dislocated = -1
|
||||
@@ -439,87 +443,87 @@
|
||||
force_skintone = TRUE
|
||||
|
||||
|
||||
/obj/item/organ/external/chest/shell/New()
|
||||
/obj/item/organ/external/chest/shell/Initialize()
|
||||
robotize("Human Synthskin")
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/obj/item/organ/external/groin/shell
|
||||
dislocated = -1
|
||||
encased = "support frame"
|
||||
force_skintone = TRUE
|
||||
|
||||
/obj/item/organ/external/groin/shell/New()
|
||||
/obj/item/organ/external/groin/shell/Initialize()
|
||||
robotize("Human Synthskin")
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/obj/item/organ/external/arm/shell
|
||||
dislocated = -1
|
||||
encased = "support frame"
|
||||
force_skintone = TRUE
|
||||
|
||||
/obj/item/organ/external/arm/shell/New()
|
||||
/obj/item/organ/external/arm/shell/Initialize()
|
||||
robotize("Human Synthskin")
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/obj/item/organ/external/arm/right/shell
|
||||
dislocated = -1
|
||||
encased = "support frame"
|
||||
force_skintone = TRUE
|
||||
|
||||
/obj/item/organ/external/arm/right/shell/New()
|
||||
/obj/item/organ/external/arm/right/shell/Initialize()
|
||||
robotize("Human Synthskin")
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/obj/item/organ/external/leg/shell
|
||||
dislocated = -1
|
||||
encased = "support frame"
|
||||
force_skintone = TRUE
|
||||
|
||||
/obj/item/organ/external/leg/shell/New()
|
||||
/obj/item/organ/external/leg/shell/Initialize()
|
||||
robotize("Human Synthskin")
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/obj/item/organ/external/leg/right/shell
|
||||
dislocated = -1
|
||||
encased = "support frame"
|
||||
force_skintone = TRUE
|
||||
|
||||
/obj/item/organ/external/leg/right/shell/New()
|
||||
/obj/item/organ/external/leg/right/shell/Initialize()
|
||||
robotize("Human Synthskin")
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/obj/item/organ/external/foot/shell
|
||||
dislocated = -1
|
||||
encased = "support frame"
|
||||
force_skintone = TRUE
|
||||
|
||||
/obj/item/organ/external/foot/shell/New()
|
||||
/obj/item/organ/external/foot/shell/Initialize()
|
||||
robotize("Human Synthskin")
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/obj/item/organ/external/foot/right/shell
|
||||
dislocated = -1
|
||||
encased = "support frame"
|
||||
force_skintone = TRUE
|
||||
|
||||
/obj/item/organ/external/foot/right/shell/New()
|
||||
/obj/item/organ/external/foot/right/shell/Initialize()
|
||||
robotize("Human Synthskin")
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/obj/item/organ/external/hand/shell
|
||||
dislocated = -1
|
||||
encased = "support frame"
|
||||
force_skintone = TRUE
|
||||
|
||||
/obj/item/organ/external/hand/shell/New()
|
||||
/obj/item/organ/external/hand/shell/Initialize()
|
||||
robotize("Human Synthskin")
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/obj/item/organ/external/hand/right/shell
|
||||
dislocated = -1
|
||||
encased = "support frame"
|
||||
force_skintone = TRUE
|
||||
|
||||
/obj/item/organ/external/hand/right/shell/New()
|
||||
/obj/item/organ/external/hand/right/shell/Initialize()
|
||||
robotize("Human Synthskin")
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
@@ -180,7 +180,7 @@
|
||||
else
|
||||
user.visible_message("<span class='warning'>[user] begins to wipe [H]'s lipstick off with \the [src].</span>", \
|
||||
"<span class='notice'>You begin to wipe off [H]'s lipstick.</span>")
|
||||
if(do_after(user, 10) && do_after(H, 10, 5, 0)) //user needs to keep their active hand, H does not.
|
||||
if(do_after(user, 10) && do_after(H, 10, 0)) //user needs to keep their active hand, H does not.
|
||||
user.visible_message("<span class='notice'>[user] wipes [H]'s lipstick off with \the [src].</span>", \
|
||||
"<span class='notice'>You wipe off [H]'s lipstick.</span>")
|
||||
H.lip_style = null
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
|
||||
/obj/item/weapon/gun/energy/kinetic_accelerator/attack_self(mob/living/user as mob)
|
||||
if(power_supply.charge < power_supply.maxcharge)
|
||||
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
|
||||
user << "<span class='notice'>You begin charging \the [src]...</span>"
|
||||
if(do_after(user,20))
|
||||
playsound(src.loc, 'sound/weapons/kenetic_reload.ogg', 60, 1)
|
||||
@@ -69,7 +70,7 @@
|
||||
/obj/item/projectile/kinetic
|
||||
name = "kinetic force"
|
||||
icon_state = null
|
||||
damage = 30
|
||||
damage = 15
|
||||
damage_type = BRUTE
|
||||
check_armour = "bomb"
|
||||
kill_count = 5
|
||||
|
||||
@@ -2628,10 +2628,10 @@
|
||||
glass_desc = "A mug of a rich strong roast, you think it could be a lot better if someone added something extra to it."
|
||||
|
||||
/datum/reagent/drink/white_coffee
|
||||
name = "Café Au Lait"
|
||||
name = "Cafe Au Lait"
|
||||
id = "white_coffee"
|
||||
description = "A fancy name for something thats just coffee and milk."
|
||||
color = "#482000"
|
||||
color = "#A64D07"
|
||||
adj_dizzy = -6
|
||||
adj_drowsy = -4
|
||||
adj_sleepy = -3
|
||||
@@ -2641,7 +2641,7 @@
|
||||
taste_description = "creamy coffee"
|
||||
|
||||
glass_icon_state = "whitecoffee"
|
||||
glass_name = "A mug of Café Au Lait"
|
||||
glass_name = "A mug of Cafe Au Lait"
|
||||
glass_desc = "A fancy name for something thats just coffee and milk."
|
||||
|
||||
/datum/reagent/drink/white_coffee/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
|
||||
@@ -2649,10 +2649,10 @@
|
||||
M.heal_organ_damage(0.5 * removed, 0)
|
||||
|
||||
/datum/reagent/drink/cafe_melange
|
||||
name = "Café Mélange"
|
||||
name = "Cafe Melange"
|
||||
id = "cafe_melange"
|
||||
description = "A delicious mug of creamy coffee."
|
||||
color = "#482000"
|
||||
color = "#A64D07"
|
||||
adj_dizzy = -6
|
||||
adj_drowsy = -4
|
||||
adj_sleepy = -3
|
||||
@@ -2662,7 +2662,7 @@
|
||||
taste_description = "creamy coffee"
|
||||
|
||||
glass_icon_state = "whitecoffee"
|
||||
glass_name = "A mug of Café Mélange"
|
||||
glass_name = "A mug of Cafe Melange"
|
||||
glass_desc = "A delicious mug of creamy coffee, keeps you cool headed in the most heated of situations."
|
||||
|
||||
/datum/reagent/drink/cafe_melange/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
|
||||
|
||||
@@ -2228,14 +2228,14 @@
|
||||
/////////////////////////////////////////Brightdawns super cool coffee drinks//////////////////////////////////////////////
|
||||
|
||||
/datum/chemical_reaction/white_coffee
|
||||
name = "Café Au Lait"
|
||||
name = "Cafe Au Lait"
|
||||
id = "white_coffee"
|
||||
result = "white_coffee"
|
||||
required_reagents = list("milk" = 1, "black_coffee" = 2)
|
||||
result_amount = 3
|
||||
|
||||
/datum/chemical_reaction/cafe_melange
|
||||
name = "Café Mélange"
|
||||
name = "Cafe Melange"
|
||||
id = "cafe_melange"
|
||||
result = "cafe_melange"
|
||||
required_reagents = list("cream" = 1, "black_coffee" = 2)
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
name = "A jar of Coffee Beans "
|
||||
desc = "This goes into a coffee maker!"
|
||||
label = "Spesscafe Dark Blend"
|
||||
icon = 'icons/obj/drinks.dmi'
|
||||
icon_state = "coffeejar"
|
||||
|
||||
w_class = 3
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
containername = "coffee machine crate"
|
||||
group = "Hospitality"
|
||||
|
||||
datum/supply_packs/dispenser_cartridges
|
||||
datum/supply_packs/dispenser_cartridges/coffee_beans
|
||||
name = "Coffee beans"
|
||||
containername = "coffee beans crate"
|
||||
containertype = /obj/structure/closet/crate
|
||||
|
||||
@@ -61,7 +61,7 @@
|
||||
chems = list("bicaridine" = list(3,7), "dermaline" = list(3,7), "anti_toxin" = list(3,7), "tricordrazine" = list(3,7), "alkysine" = list(1,2), "imidazoline" = list(1,2), "peridaxon" = list(4,5))
|
||||
kitchen_tag = "berries"
|
||||
|
||||
/datum/seed/merlin_tear/New()
|
||||
/datum/seed/merlin_tear/setup_traits()
|
||||
..()
|
||||
set_trait(TRAIT_PLANT_ICON,"bush5")
|
||||
set_trait(TRAIT_PRODUCT_ICON,"berry")
|
||||
|
||||
@@ -56,6 +56,14 @@
|
||||
-->
|
||||
<div class="commit sansserif">
|
||||
|
||||
<h2 class="date">31 July 2017</h2>
|
||||
<h3 class="author">Lohikar updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">Progress bars will now stack instead of obscuring each other when you are doing multiple things at once.</li>
|
||||
<li class="bugfix">NanoTrasen Autodrobe(tm) units have recieved a firmware update and should no longer steal your clothes. NanoTrasen apologises for any inconveniences caused by showing up to your workplace in the nude.</li>
|
||||
<li class="bugfix">Fixed an issue where objects could not be seen in holes in some rare cases.</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">27 July 2017</h2>
|
||||
<h3 class="author">Lohikar updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
|
||||
@@ -4496,3 +4496,11 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
|
||||
- bugfix: A manufacturing defect has been identified in airlock control mainboards
|
||||
that caused field-programmed boards to ignore configured access restrictions.
|
||||
NanoTrasen is not responsible for any loss of property caused by defective airlocks.
|
||||
2017-07-31:
|
||||
Lohikar:
|
||||
- tweak: Progress bars will now stack instead of obscuring each other when you are
|
||||
doing multiple things at once.
|
||||
- bugfix: NanoTrasen Autodrobe(tm) units have recieved a firmware update and should
|
||||
no longer steal your clothes. NanoTrasen apologises for any inconveniences caused
|
||||
by showing up to your workplace in the nude.
|
||||
- bugfix: Fixed an issue where objects could not be seen in holes in some rare cases.
|
||||
|
||||
|
Before Width: | Height: | Size: 587 B |
|
After Width: | Height: | Size: 571 B |
|
Before Width: | Height: | Size: 321 KiB After Width: | Height: | Size: 321 KiB |
|
Before Width: | Height: | Size: 284 KiB After Width: | Height: | Size: 284 KiB |
|
Before Width: | Height: | Size: 628 KiB After Width: | Height: | Size: 805 KiB |
|
Before Width: | Height: | Size: 108 KiB After Width: | Height: | Size: 127 KiB |