mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-09 07:57:00 +00:00
Compare commits
42 Commits
13a5073e08
...
4eba170940
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4eba170940 | ||
|
|
bb9e724bd2 | ||
|
|
26d30d3ad7 | ||
|
|
3c2c33eafe | ||
|
|
ec176ca8f8 | ||
|
|
ca6fd0a199 | ||
|
|
e8ba2fc63d | ||
|
|
683448fd50 | ||
|
|
e8ba2765ac | ||
|
|
101dd347e0 | ||
|
|
6b4ea59565 | ||
|
|
ad5a944c8a | ||
|
|
7e9ad48982 | ||
|
|
5d08cae5ab | ||
|
|
648fcd8162 | ||
|
|
49aa0c138e | ||
|
|
0b87f2b24c | ||
|
|
bdc17c81fe | ||
|
|
f72988f992 | ||
|
|
77ec7cd6e4 | ||
|
|
1a19f01c47 | ||
|
|
a649749ea0 | ||
|
|
cb9fe98463 | ||
|
|
07d47cbe4d | ||
|
|
0b084ecf97 | ||
|
|
38b2114ffa | ||
|
|
ffd8660d76 | ||
|
|
8655a9a8a4 | ||
|
|
78ff349c8f | ||
|
|
b94c6c09cf | ||
|
|
408eeaa5d1 | ||
|
|
9c25b75d6c | ||
|
|
846a3dc43e | ||
|
|
425baec2ba | ||
|
|
4540ee5b1b | ||
|
|
fdac7a69ed | ||
|
|
a7bac7c918 | ||
|
|
dfee7007cc | ||
|
|
f10636966f | ||
|
|
2465e088c7 | ||
|
|
bc3d47cd46 | ||
|
|
e317669e61 |
@@ -42,7 +42,7 @@
|
||||
// Reads L or an empty list if L is not a list. Note: Does NOT assign, L may be an expression.
|
||||
#define SANITIZE_LIST(L) ( islist(L) ? L : list() )
|
||||
|
||||
#define reverseList(L) reverseRange(L.Copy())
|
||||
#define reverseList(L) reverse_range(L.Copy())
|
||||
|
||||
#define islist(L) istype(L, /list)
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
#define COMSIG_GLOB_BUTTON_PRESSED "!button_pressed"
|
||||
/// Supply shuttle selling, before all items are sold, called by /datum/controller/subsystem/supply/proc/sell() : (/list/area/supply_shuttle_areas)
|
||||
#define COMSIG_GLOB_SUPPLY_SHUTTLE_DEPART "!sell_supply_shuttle"
|
||||
/// Supply shuttle selling, for each item sold, called by /datum/controller/subsystem/supply/proc/sell() : (atom/movable/sold_item, sold_successfully, datum/exported_crate/export_data, area/shuttle_subarea)
|
||||
/// Supply shuttle selling, for each item sold, called by /datum/controller/subsystem/supply/proc/sell() : (atom/movable/sold_item, list/things_sold_successfully, datum/exported_crate/export_data, area/shuttle_subarea)
|
||||
#define COMSIG_GLOB_SUPPLY_SHUTTLE_SELL_ITEM "!supply_shuttle_sell_item"
|
||||
/// Mind inserted into body: (mob/new_owner, /datum/mind/assigned_mind)
|
||||
#define COMSIG_GLOB_RESLEEVED_MIND "!resleeved_mind_into_body"
|
||||
@@ -45,6 +45,26 @@
|
||||
#define COMSIG_GLOB_BORGIFY "!borgify_mob"
|
||||
/// brain removed from body, called by /obj/item/organ/internal/brain/proc/transfer_identity() : (mob/living/carbon/brain/brainmob)
|
||||
#define COMSIG_GLOB_BRAIN_REMOVED "!brain_removed_from_mob"
|
||||
// base /decl/emote/proc/do_emote() : (mob/user, extra_params)
|
||||
#define COMSIG_GLOB_EMOTE_PERFORMED "!emote_performed"
|
||||
// base /proc/say_dead_direct() : (message)
|
||||
#define COMSIG_GLOB_DEAD_SAY "!dead_say"
|
||||
// base /turf/wash() : ()
|
||||
#define COMSIG_GLOB_WASHED_FLOOR "!washed_floor"
|
||||
// base /obj/machinery/artifact_harvester/proc/harvest() : (obj/item/anobattery/inserted_battery, mob/user)
|
||||
#define COMSIG_GLOB_HARVEST_ARTIFACT "!harvest_artifact"
|
||||
// upon harvesting a slime's extract : (obj/item/slime_extract/newly_made_core)
|
||||
#define COMSIG_GLOB_HARVEST_SLIME_CORE "!harvest_slime_core"
|
||||
// base /datum/recipe/proc/make_food() : (obj/container, list/results)
|
||||
#define COMSIG_GLOB_FOOD_PREPARED "!recipe_food_completed"
|
||||
// base /datum/construction/proc/spawn_result() : (/obj/mecha/result_mech)
|
||||
#define COMSIG_GLOB_MECH_CONSTRUCTED "!mecha_constructed"
|
||||
// when trashpiles are successfully searched : (mob/living/user, list/searched_by)
|
||||
#define COMSIG_GLOB_TRASHPILE_SEARCHED "!trash_pile_searched"
|
||||
// base /obj/item/autopsy_scanner/do_surgery() : (mob/user, mob/target)
|
||||
#define COMSIG_GLOB_AUTOPSY_PERFORMED "!performed_autopsy"
|
||||
// upon forensics swap or sample kit forensics collection : (atom/target, mob/user)
|
||||
#define COMSIG_GLOB_FORENSICS_COLLECTED "!performed_forensics_collection"
|
||||
|
||||
/// signals from globally accessible objects
|
||||
|
||||
@@ -813,6 +833,11 @@
|
||||
///from base of /obj/effect/decal/cleanable/blood/gibs/streak(): (list/directions, list/diseases)
|
||||
#define COMSIG_GIBS_STREAK "gibs_streak"
|
||||
|
||||
//Autopsy
|
||||
|
||||
//from base of /obj/item/autopsy_scanner/do_surgery() : (mob/user, mob/target)
|
||||
#define COMSIG_AUTOPSY_PERFORMED "performed_autopsy"
|
||||
|
||||
//Mood
|
||||
|
||||
///called when you send a mood event from anywhere in the code.
|
||||
|
||||
@@ -208,6 +208,7 @@
|
||||
#define JOB_ALT_ELECTRICIAN "Electrician"
|
||||
#define JOB_ALT_CONSTRUCTION_ENGINEER "Construction Engineer"
|
||||
#define JOB_ALT_ENGINEERING_CONTRACTOR "Engineering Contractor"
|
||||
#define JOB_ALT_CHEMENGINEER "Chemical Engineer"
|
||||
#define JOB_ALT_COMPUTER_TECHNICIAN "Computer Technician"
|
||||
#define JOB_ALT_SALVAGE_TECHNICIAN "Salvage Technician"
|
||||
#define JOB_ALT_DAMAGE_CONTROL_SPECIALIST "Damage Control Specialist"
|
||||
|
||||
@@ -1,19 +1,35 @@
|
||||
//metals
|
||||
#define MAT_IRON "iron"
|
||||
#define MAT_MARBLE "marble"
|
||||
#define MAT_STEEL "steel"
|
||||
#define MAT_PLASTIC "plastic"
|
||||
#define MAT_GLASS "glass"
|
||||
#define MAT_RGLASS "rglass"
|
||||
#define MAT_PGLASS "borosilicate glass"
|
||||
#define MAT_RPGLASS "reinforced borosilicate glass"
|
||||
#define MAT_STEELHULL "steel hull"
|
||||
#define MAT_SILVER "silver"
|
||||
#define MAT_GOLD "gold"
|
||||
#define MAT_URANIUM "uranium"
|
||||
#define MAT_TITANIUM "titanium"
|
||||
#define MAT_PHORON "phoron"
|
||||
#define MAT_DIAMOND "diamond"
|
||||
#define MAT_SNOW "snow"
|
||||
#define MAT_SNOWBRICK "packed snow"
|
||||
#define MAT_PLASTEEL "plasteel"
|
||||
#define MAT_PLASTEELHULL "plasteel hull"
|
||||
#define MAT_DURASTEEL "durasteel"
|
||||
#define MAT_DURASTEELHULL "durasteel hull"
|
||||
#define MAT_TITANIUMHULL "titanium hull"
|
||||
#define MAT_LEAD "lead"
|
||||
#define MAT_METALHYDROGEN "mhydrogen"
|
||||
#define MAT_COPPER "copper"
|
||||
#define MAT_ALUMINIUM "aluminium"
|
||||
#define MAT_BRONZE "bronze"
|
||||
#define MAT_PLATINUM "platinum"
|
||||
#define MAT_OSMIUM "osmium"
|
||||
#define MAT_MORPHIUM "morphium"
|
||||
#define MAT_MORPHIUMHULL "morphium hull"
|
||||
#define MAT_TIN "tin"
|
||||
|
||||
//stone
|
||||
#define MAT_MARBLE "marble"
|
||||
#define MAT_GRAPHITE "graphite"
|
||||
#define MAT_SANDSTONE "sandstone"
|
||||
#define MAT_FLINT "flint"
|
||||
#define MAT_CONCRETE "concrete"
|
||||
|
||||
//wood
|
||||
#define MAT_WOOD "wood"
|
||||
#define MAT_LOG "log"
|
||||
#define MAT_SIFWOOD "alien wood"
|
||||
@@ -21,38 +37,34 @@
|
||||
#define MAT_HARDWOOD "hardwood"
|
||||
#define MAT_HARDLOG "hardwood log"
|
||||
#define MAT_WOODEN_STICK "wooden stick"
|
||||
#define MAT_STEELHULL "steel hull"
|
||||
#define MAT_PLASTEEL "plasteel"
|
||||
#define MAT_PLASTEELHULL "plasteel hull"
|
||||
#define MAT_DURASTEEL "durasteel"
|
||||
#define MAT_DURASTEELHULL "durasteel hull"
|
||||
#define MAT_TITANIUMHULL "titanium hull"
|
||||
#define MAT_BIRCHWOOD "birch"
|
||||
#define MAT_PINEWOOD "pine"
|
||||
#define MAT_OAKWOOD "oak"
|
||||
#define MAT_ACACIAWOOD "acacia"
|
||||
#define MAT_REDWOOD "redwood"
|
||||
|
||||
//other
|
||||
#define MAT_PLASTIC "plastic"
|
||||
#define MAT_GLASS "glass"
|
||||
#define MAT_RGLASS "rglass"
|
||||
#define MAT_PGLASS "borosilicate glass"
|
||||
#define MAT_RPGLASS "reinforced borosilicate glass"
|
||||
#define MAT_PHORON "phoron"
|
||||
#define MAT_DIAMOND "diamond"
|
||||
#define MAT_SNOW "snow"
|
||||
#define MAT_SNOWBRICK "packed snow"
|
||||
#define MAT_VERDANTIUM "verdantium"
|
||||
#define MAT_MORPHIUM "morphium"
|
||||
#define MAT_MORPHIUMHULL "morphium hull"
|
||||
#define MAT_VALHOLLIDE "valhollide"
|
||||
#define MAT_LEAD "lead"
|
||||
#define MAT_SUPERMATTER "supermatter"
|
||||
#define MAT_METALHYDROGEN "mhydrogen"
|
||||
#define MAT_OSMIUM "osmium"
|
||||
#define MAT_GRAPHITE "graphite"
|
||||
#define MAT_CHITIN "chitin"
|
||||
#define MAT_ALIENCHITIN "alien chitin"
|
||||
#define MAT_ALIENCLAW "alien claw"
|
||||
#define MAT_FUR "fur"
|
||||
#define MAT_COPPER "copper"
|
||||
#define MAT_QUARTZ "quartz"
|
||||
#define MAT_TIN "tin"
|
||||
#define MAT_VOPAL "void opal"
|
||||
#define MAT_ALUMINIUM "aluminium"
|
||||
#define MAT_BRONZE "bronze"
|
||||
#define MAT_PAINITE "painite"
|
||||
#define MAT_SANDSTONE "sandstone"
|
||||
#define MAT_FLINT "flint"
|
||||
#define MAT_PLATINUM "platinum"
|
||||
#define MAT_TRITIUM "tritium"
|
||||
#define MAT_DEUTERIUM "deuterium"
|
||||
#define MAT_CONCRETE "concrete"
|
||||
#define MAT_PLASTEELREBAR "plasteel rebar"
|
||||
#define MAT_GRASS "grass"
|
||||
#define MAT_RESIN "resin"
|
||||
@@ -60,7 +72,6 @@
|
||||
#define MAT_BIOMASS "biomass"
|
||||
#define MAT_WEEDEXTRACT "weed extract"
|
||||
#define MAT_CARDBOARD "cardboard"
|
||||
#define MAT_COTTON "cotton"
|
||||
#define MAT_GLAMOUR "stable glamour"
|
||||
#define MAT_DARKGLASS "darkglass"
|
||||
#define MAT_FLESH "flesh"
|
||||
@@ -88,6 +99,8 @@
|
||||
#define MAT_CLOTH "cloth"
|
||||
#define MAT_SYNCLOTH "syncloth"
|
||||
// # define MAT_CARPET "carpet" // CHOMPRemove
|
||||
#define MAT_COTTON "cotton"
|
||||
|
||||
// colours
|
||||
#define MAT_CLOTH_TEAL "teal"
|
||||
#define MAT_CLOTH_BLACK "black"
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
#define REFINERY_TUTORIAL_NOOUTPUT (1 << 5)
|
||||
#define REFINERY_TUTORIAL_ALLIN (1 << 6)
|
||||
#define REFINERY_TUTORIAL_SINGLEOUTPUT (1 << 7)
|
||||
#define REFINERY_TUTORIAL_SPLITTEROUTPUT (1 << 8)
|
||||
|
||||
#define REAGENT_VAT_VOLUME 500
|
||||
#define CARGOTANKER_VOLUME 3000
|
||||
|
||||
5
code/__defines/surgery.dm
Normal file
5
code/__defines/surgery.dm
Normal file
@@ -0,0 +1,5 @@
|
||||
//Defines for when surgery steps are performed. These are used to track progress through surgeries and how 'open' we are.
|
||||
#define INCISION_MADE 1
|
||||
#define FLESH_RETRACTED 2
|
||||
#define BONE_CUT 2.5
|
||||
#define BONE_RETRACTED 3
|
||||
@@ -20,6 +20,8 @@
|
||||
\
|
||||
target.can_be_drop_prey = source.can_be_drop_prey; \
|
||||
target.can_be_drop_pred = source.can_be_drop_pred; \
|
||||
target.can_be_afk_prey = source.can_be_afk_prey; \
|
||||
target.can_be_afk_pred = source.can_be_afk_pred; \
|
||||
target.throw_vore = source.throw_vore; \
|
||||
target.food_vore = source.food_vore; \
|
||||
target.drop_vore = source.drop_vore; \
|
||||
@@ -56,6 +58,7 @@
|
||||
\
|
||||
target.autotransferable = source.autotransferable; \
|
||||
target.strip_pref = source.strip_pref; \
|
||||
target.contaminate_pref = source.contaminate_pref; \
|
||||
target.vore_sprite_multiply = source.vore_sprite_multiply; \
|
||||
target.vore_sprite_color = source.vore_sprite_color; \
|
||||
target.belly_rub_target = source.belly_rub_target; \
|
||||
|
||||
@@ -849,20 +849,20 @@ Checks if a list has the same entries and values as an element of big.
|
||||
L.Cut(fromIndex, fromIndex+1)
|
||||
|
||||
//replaces reverseList ~Carnie
|
||||
/proc/reverseRange(list/L, start=1, end=0)
|
||||
if(L.len)
|
||||
start = start % L.len
|
||||
end = end % (L.len+1)
|
||||
/proc/reverse_range(list/inserted_list, start = 1, end = 0)
|
||||
if(inserted_list.len)
|
||||
start = start % inserted_list.len
|
||||
end = end % (inserted_list.len + 1)
|
||||
if(start <= 0)
|
||||
start += L.len
|
||||
start += inserted_list.len
|
||||
if(end <= 0)
|
||||
end += L.len + 1
|
||||
end += inserted_list.len + 1
|
||||
|
||||
--end
|
||||
while(start < end)
|
||||
L.Swap(start++,end--)
|
||||
inserted_list.Swap(start++, end--)
|
||||
|
||||
return L
|
||||
return inserted_list
|
||||
|
||||
//Copies a list, and all lists inside it recusively
|
||||
//Does not copy any other reference type
|
||||
|
||||
@@ -173,7 +173,7 @@ GLOBAL_DATUM_INIT(sortInstance, /datum/sort_instance, new())
|
||||
if(call(cmp)(current, last) >= 0)
|
||||
break
|
||||
++runHi
|
||||
reverseRange(L, lo, runHi)
|
||||
reverse_range(L, lo, runHi)
|
||||
else
|
||||
while(runHi < hi)
|
||||
last = current
|
||||
|
||||
@@ -17,6 +17,10 @@
|
||||
return FALSE
|
||||
if(!pred.vore_selected)
|
||||
return FALSE
|
||||
if(!pred.can_be_afk_pred && (!pred.client || pred.away_from_keyboard))
|
||||
return FALSE
|
||||
if(!prey.can_be_afk_prey && (!prey.client || prey.away_from_keyboard))
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/// Basic spont vore check.
|
||||
|
||||
@@ -137,7 +137,7 @@ GLOBAL_REAL(Master, /datum/controller/master)
|
||||
/datum/controller/master/Shutdown()
|
||||
processing = FALSE
|
||||
sortTim(subsystems, GLOBAL_PROC_REF(cmp_subsystem_init))
|
||||
reverseRange(subsystems)
|
||||
reverse_range(subsystems)
|
||||
for(var/datum/controller/subsystem/ss in subsystems)
|
||||
log_world("Shutting down [ss.name] subsystem...")
|
||||
if (ss.slept_count > 0)
|
||||
@@ -195,7 +195,7 @@ ADMIN_VERB(cmd_controller_view_ui, R_SERVER|R_DEBUG, "Controller Overview", "Vie
|
||||
"cost_ms" = subsystem.cost,
|
||||
"tick_usage" = subsystem.tick_usage,
|
||||
"usage_per_tick" = average,
|
||||
"tick_overrun" = subsystem.tick_overrun,
|
||||
"overtime" = subsystem.tick_overrun,
|
||||
"initialized" = subsystem.initialized,
|
||||
"initialization_failure_message" = subsystem.initialization_failure_message,
|
||||
))
|
||||
@@ -224,6 +224,12 @@ ADMIN_VERB(cmd_controller_view_ui, R_SERVER|R_DEBUG, "Controller Overview", "Vie
|
||||
return TRUE
|
||||
|
||||
if("view_variables")
|
||||
if(!check_rights_for(ui.user.client, R_DEBUG))
|
||||
message_admins(
|
||||
"[key_name(ui.user)] tried to view master controller variables while having improper rights, \
|
||||
this is potentially a malicious exploit and worth noting."
|
||||
)
|
||||
|
||||
var/datum/controller/subsystem/subsystem = locate(params["ref"]) in subsystems
|
||||
if(isnull(subsystem))
|
||||
to_chat(ui.user, span_warning("Failed to locate subsystem."))
|
||||
@@ -339,7 +345,7 @@ ADMIN_VERB(cmd_controller_view_ui, R_SERVER|R_DEBUG, "Controller Overview", "Vie
|
||||
|
||||
// Allows subsystems to declare other subsystems that must initialize after them.
|
||||
for(var/datum/controller/subsystem/subsystem as anything in subsystems)
|
||||
for(var/dependent_type as anything in subsystem.dependents)
|
||||
for(var/dependent_type in subsystem.dependents)
|
||||
if(!ispath(dependent_type, /datum/controller/subsystem))
|
||||
stack_trace("ERROR: MC: subsystem `[subsystem.type]` has an invalid dependent: `[dependent_type]`. Skipping")
|
||||
continue
|
||||
@@ -349,7 +355,7 @@ ADMIN_VERB(cmd_controller_view_ui, R_SERVER|R_DEBUG, "Controller Overview", "Vie
|
||||
|
||||
// Constructs a reverse-dependency graph.
|
||||
for(var/datum/controller/subsystem/subsystem as anything in subsystems)
|
||||
for(var/dependency_type as anything in subsystem.dependencies)
|
||||
for(var/dependency_type in subsystem.dependencies)
|
||||
if(!ispath(dependency_type, /datum/controller/subsystem))
|
||||
stack_trace("ERROR: MC: subsystem `[subsystem.type]` has an invalid dependency: `[dependency_type]`. Skipping")
|
||||
continue
|
||||
@@ -383,11 +389,11 @@ ADMIN_VERB(cmd_controller_view_ui, R_SERVER|R_DEBUG, "Controller Overview", "Vie
|
||||
// Topological sorting algorithm end
|
||||
|
||||
if(length(subsystems) != length(sorted_subsystems))
|
||||
var/list/circular_dependency = subsystems.Copy() - sorted_subsystems
|
||||
var/list/circular_dependency = subsystems - sorted_subsystems
|
||||
var/list/debug_msg = list()
|
||||
var/list/usr_msg = list()
|
||||
for(var/datum/controller/subsystem/subsystem as anything in circular_dependency)
|
||||
usr_msg += "[subsystem.name]"
|
||||
usr_msg += subsystem.name
|
||||
|
||||
var/list/datum/controller/subsystem/nodes = list(circular_dependency[1])
|
||||
var/list/loop = list()
|
||||
@@ -604,10 +610,19 @@ ADMIN_VERB(cmd_controller_view_ui, R_SERVER|R_DEBUG, "Controller Overview", "Vie
|
||||
if ((SS.flags & (SS_TICKER|SS_BACKGROUND)) == SS_TICKER)
|
||||
tickersubsystems += SS
|
||||
// Timer subsystems aren't allowed to bunch up, so we offset them a bit
|
||||
timer += world.tick_lag * rand(0, 1)
|
||||
timer += TICKS2DS(rand(0, 1))
|
||||
SS.next_fire = timer
|
||||
continue
|
||||
|
||||
// Now, we have to set starting next_fires for all our new non ticker kids
|
||||
if(SS.init_stage == init_stage - 1 && (SS.runlevels & current_runlevel))
|
||||
// Give em a random offset so things don't clump up too bad
|
||||
var/delay = SS.wait
|
||||
if(SS.flags & SS_TICKER)
|
||||
delay = TICKS2DS(delay)
|
||||
// Gotta convert to ticks cause rand needs integers
|
||||
SS.next_fire = world.time + TICKS2DS(rand(0, DS2TICKS(min(delay, 2 SECONDS))))
|
||||
|
||||
var/ss_runlevels = SS.runlevels
|
||||
var/added_to_any = FALSE
|
||||
for(var/I in 1 to GLOB.bitflags.len)
|
||||
@@ -703,7 +718,11 @@ ADMIN_VERB(cmd_controller_view_ui, R_SERVER|R_DEBUG, "Controller Overview", "Vie
|
||||
//we only want to offset it if it's new and also behind
|
||||
if(SS.next_fire > world.time || (SS in old_subsystems))
|
||||
continue
|
||||
SS.next_fire = world.time + world.tick_lag * rand(0, DS2TICKS(min(SS.wait, 2 SECONDS)))
|
||||
// If they're new, give em a random offset so things don't clump up too bad
|
||||
var/delay = SS.wait
|
||||
if(SS.flags & SS_TICKER)
|
||||
delay = TICKS2DS(delay)
|
||||
SS.next_fire = world.time + TICKS2DS(rand(0, DS2TICKS(min(delay, 2 SECONDS))))
|
||||
|
||||
subsystems_to_check = current_runlevel_subsystems
|
||||
else
|
||||
@@ -798,6 +817,8 @@ ADMIN_VERB(cmd_controller_view_ui, R_SERVER|R_DEBUG, "Controller Overview", "Vie
|
||||
if (SS_flags & SS_NO_FIRE)
|
||||
subsystemstocheck -= SS
|
||||
continue
|
||||
// If we're keeping timing and running behind,
|
||||
// fire at most 25% faster then normal to try and make up the gap without spamming
|
||||
if ((SS_flags & (SS_TICKER|SS_KEEP_TIMING)) == SS_KEEP_TIMING && SS.last_fire + (SS.wait * 0.75) > world.time)
|
||||
continue
|
||||
if (SS.postponed_fires >= 1)
|
||||
|
||||
@@ -75,10 +75,15 @@ SUBSYSTEM_DEF(appreciation)
|
||||
return
|
||||
|
||||
var/mob/living/carbon/human/H = pick(human_list)
|
||||
|
||||
if(!istype(H))
|
||||
appreciated = pick(loremaster.appreciation_targets)
|
||||
return
|
||||
|
||||
if(H.absorbed)
|
||||
appreciated = pick(loremaster.appreciation_targets)
|
||||
return
|
||||
|
||||
if(H.custom_species)
|
||||
appreciated = H.custom_species
|
||||
return
|
||||
|
||||
@@ -80,7 +80,7 @@ SUBSYSTEM_DEF(supply)
|
||||
var/base_value = 0
|
||||
|
||||
// Most items must be in a crate!
|
||||
var/sold_successfully = FALSE
|
||||
var/list/things_sold_successfully = list()
|
||||
if(istype(MA,/obj/structure/closet/crate))
|
||||
var/obj/structure/closet/crate/CR = MA
|
||||
|
||||
@@ -90,12 +90,14 @@ SUBSYSTEM_DEF(supply)
|
||||
|
||||
// For each thing in the crate, get the value and quantity
|
||||
for(var/atom/A in CR)
|
||||
sold_successfully = SEND_SIGNAL(A,COMSIG_ITEM_SOLD,EC,TRUE)
|
||||
if(SEND_SIGNAL(A,COMSIG_ITEM_SOLD,EC,TRUE))
|
||||
things_sold_successfully += A
|
||||
else
|
||||
// Selling things that are not in crates.
|
||||
// Usually it just makes a log that it wasn't shipped properly, and so isn't worth anything
|
||||
sold_successfully = SEND_SIGNAL(MA,COMSIG_ITEM_SOLD,EC,FALSE)
|
||||
SEND_GLOBAL_SIGNAL(COMSIG_GLOB_SUPPLY_SHUTTLE_SELL_ITEM, MA, sold_successfully, EC, subarea)
|
||||
if(SEND_SIGNAL(MA,COMSIG_ITEM_SOLD,EC,FALSE))
|
||||
things_sold_successfully += MA
|
||||
SEND_GLOBAL_SIGNAL(COMSIG_GLOB_SUPPLY_SHUTTLE_SELL_ITEM, MA, things_sold_successfully, EC, subarea)
|
||||
|
||||
exported_crates += EC
|
||||
points += EC.value
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
return
|
||||
if(owner.client && (owner.client.prefs.muted & MUTE_IC))
|
||||
return
|
||||
if(owner.paralysis <= 1 && (H.pulse == PULSE_NORM ? (prob(1)) : (prob(50))))
|
||||
if(owner.paralysis <= 1 && (H.pulse <= PULSE_NORM ? (prob(1)) : (prob(50))))
|
||||
owner.make_jittery(30 + rand(10, 30))
|
||||
owner.emote(pick(motor_tics))
|
||||
|
||||
|
||||
@@ -74,7 +74,8 @@
|
||||
|
||||
/datum/construction/proc/spawn_result()
|
||||
if(result)
|
||||
new result(get_turf(holder))
|
||||
var/atom/spawned_construct = new result(get_turf(holder))
|
||||
SEND_GLOBAL_SIGNAL(COMSIG_GLOB_MECH_CONSTRUCTED, spawned_construct)
|
||||
spawn()
|
||||
qdel(holder)
|
||||
return
|
||||
|
||||
@@ -39,3 +39,13 @@
|
||||
belt = /obj/item/storage/belt/utility/atmostech
|
||||
id_type = /obj/item/card/id/engineering/atmos
|
||||
pda_type = /obj/item/pda/atmos
|
||||
|
||||
/decl/hierarchy/outfit/job/engineering/chems
|
||||
name = OUTFIT_JOB_NAME(JOB_ALT_CHEMENGINEER)
|
||||
head = /obj/item/clothing/head/hardhat
|
||||
uniform = /obj/item/clothing/under/rank/engineer
|
||||
belt = /obj/item/storage/belt/utility/chemtech
|
||||
id_type = /obj/item/card/id/engineering/chemical
|
||||
pda_type = /obj/item/pda
|
||||
r_pocket = null // no tray
|
||||
suit = /obj/item/clothing/suit/storage/toggle/labcoat/yellow
|
||||
|
||||
@@ -29,6 +29,27 @@
|
||||
containertype = /obj/structure/closet/crate/grayson
|
||||
containername = "Wooden planks crate"
|
||||
|
||||
/datum/supply_pack/materials/birch50
|
||||
name = "50 birch planks"
|
||||
contains = list(/obj/fiftyspawner/birchwood)
|
||||
cost = 10
|
||||
containertype = /obj/structure/closet/crate/grayson
|
||||
containername = "Birch planks crate"
|
||||
|
||||
/datum/supply_pack/materials/oak50
|
||||
name = "50 oak planks"
|
||||
contains = list(/obj/fiftyspawner/oakwood)
|
||||
cost = 10
|
||||
containertype = /obj/structure/closet/crate/grayson
|
||||
containername = "Oak planks crate"
|
||||
|
||||
/datum/supply_pack/materials/pine50
|
||||
name = "50 pine planks"
|
||||
contains = list(/obj/fiftyspawner/pinewood)
|
||||
cost = 10
|
||||
containertype = /obj/structure/closet/crate/grayson
|
||||
containername = "Pine planks crate"
|
||||
|
||||
/datum/supply_pack/materials/alienwood50
|
||||
name = "50 alien wood planks"
|
||||
contains = list(/obj/fiftyspawner/sifwood)
|
||||
@@ -36,6 +57,13 @@
|
||||
containertype = /obj/structure/closet/crate/grayson
|
||||
containername = "Alien wood planks crate"
|
||||
|
||||
/datum/supply_pack/materials/acacia50
|
||||
name = "50 acacia planks"
|
||||
contains = list(/obj/fiftyspawner/acaciawood)
|
||||
cost = 35
|
||||
containertype = /obj/structure/closet/crate/gilthari
|
||||
containername = "Acacia planks crate"
|
||||
|
||||
/datum/supply_pack/materials/hardwood50
|
||||
name = "50 hardwood planks"
|
||||
contains = list(/obj/fiftyspawner/hardwood)
|
||||
@@ -43,6 +71,13 @@
|
||||
containertype = /obj/structure/closet/crate/gilthari
|
||||
containername = "Hardwood planks crate"
|
||||
|
||||
/datum/supply_pack/materials/redwood50
|
||||
name = "50 redwood planks"
|
||||
contains = list(/obj/fiftyspawner/redwood)
|
||||
cost = 50
|
||||
containertype = /obj/structure/closet/crate/gilthari
|
||||
containername = "Redwood planks crate"
|
||||
|
||||
/datum/supply_pack/materials/plastic50
|
||||
name = "50 plastic sheets"
|
||||
contains = list(/obj/fiftyspawner/plastic)
|
||||
|
||||
@@ -80,7 +80,7 @@
|
||||
access = list(ACCESS_EVA, ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_TECH_STORAGE, ACCESS_MAINT_TUNNELS, ACCESS_EXTERNAL_AIRLOCKS, ACCESS_CONSTRUCTION, ACCESS_ATMOSPHERICS)
|
||||
minimal_access = list(ACCESS_EVA, ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_TECH_STORAGE, ACCESS_MAINT_TUNNELS, ACCESS_EXTERNAL_AIRLOCKS, ACCESS_CONSTRUCTION)
|
||||
alt_titles = list(JOB_ALT_MAINTENANCE_TECHNICIAN = /datum/alt_title/maint_tech, JOB_ALT_ENGINE_TECHNICIAN = /datum/alt_title/engine_tech,
|
||||
JOB_ALT_ELECTRICIAN = /datum/alt_title/electrician, JOB_ALT_CONSTRUCTION_ENGINEER = /datum/alt_title/construction_engi, JOB_ALT_ENGINEERING_CONTRACTOR = /datum/alt_title/engineering_contractor, JOB_ALT_COMPUTER_TECHNICIAN = /datum/alt_title/computer_tech, JOB_ALT_SALVAGE_TECHNICIAN = /datum/alt_title/salvage_tech, JOB_ALT_DAMAGE_CONTROL_SPECIALIST = /datum/alt_title/damage_control_specialist)
|
||||
JOB_ALT_ELECTRICIAN = /datum/alt_title/electrician, JOB_ALT_CONSTRUCTION_ENGINEER = /datum/alt_title/construction_engi, JOB_ALT_ENGINEERING_CONTRACTOR = /datum/alt_title/engineering_contractor, JOB_ALT_COMPUTER_TECHNICIAN = /datum/alt_title/computer_tech, JOB_ALT_SALVAGE_TECHNICIAN = /datum/alt_title/salvage_tech, JOB_ALT_DAMAGE_CONTROL_SPECIALIST = /datum/alt_title/damage_control_specialist, JOB_ALT_CHEMENGINEER = /datum/alt_title/chem_tech)
|
||||
|
||||
minimal_player_age = 3
|
||||
min_age_by_species = list(SPECIES_PROMETHEAN = 2)
|
||||
@@ -135,6 +135,11 @@
|
||||
title = JOB_ALT_DAMAGE_CONTROL_SPECIALIST
|
||||
title_blurb = "A " + JOB_ALT_DAMAGE_CONTROL_SPECIALIST + " is the Engineering Department's answer to first responders like the " + JOB_PARAMEDIC + ", being responsible for stabilizing situations and evacuating personnel, then conducting repairs."
|
||||
|
||||
/datum/alt_title/chem_tech
|
||||
title = JOB_ALT_CHEMENGINEER
|
||||
title_blurb = "A " + JOB_ALT_CHEMENGINEER + " specializes in industrial scale chemical production. They are responsible for planning the construction of and operating chemical refinery machines."
|
||||
title_outfit = /decl/hierarchy/outfit/job/engineering/chems
|
||||
|
||||
//////////////////////////////////
|
||||
// Atmos Tech
|
||||
//////////////////////////////////
|
||||
|
||||
@@ -247,6 +247,11 @@ GLOBAL_LIST(construction_frame_floor)
|
||||
icon_override = 'icons/obj/stock_parts_refinery.dmi'
|
||||
frame_class = FRAME_CLASS_MACHINE
|
||||
|
||||
/datum/frame/frame_types/industrial_reagent_splitter
|
||||
name = "Industrial Chemical Splitter"
|
||||
icon_override = 'icons/obj/stock_parts_refinery.dmi'
|
||||
frame_class = FRAME_CLASS_MACHINE
|
||||
|
||||
/datum/frame/frame_types/industrial_reagent_waste_processor
|
||||
name = "Industrial Chemical Waste Processor"
|
||||
icon_override = 'icons/obj/stock_parts_refinery.dmi'
|
||||
|
||||
@@ -99,7 +99,7 @@
|
||||
|
||||
|
||||
/datum/construction/reversible/mecha/ripley
|
||||
result = "/obj/mecha/working/ripley"
|
||||
result = /obj/mecha/working/ripley
|
||||
steps = list(
|
||||
//1
|
||||
list("key"=IS_WELDER,
|
||||
@@ -307,7 +307,7 @@
|
||||
|
||||
|
||||
/datum/construction/reversible/mecha/gygax
|
||||
result = "/obj/mecha/combat/gygax"
|
||||
result = /obj/mecha/combat/gygax
|
||||
steps = list(
|
||||
//1
|
||||
list("key"=IS_WELDER,
|
||||
@@ -589,7 +589,7 @@
|
||||
|
||||
|
||||
/datum/construction/reversible/mecha/serenity
|
||||
result = "/obj/mecha/combat/gygax/serenity"
|
||||
result = /obj/mecha/combat/gygax/serenity
|
||||
steps = list(
|
||||
//1
|
||||
list("key"=IS_WELDER,
|
||||
@@ -872,7 +872,7 @@
|
||||
|
||||
|
||||
/datum/construction/reversible/mecha/firefighter
|
||||
result = "/obj/mecha/working/ripley/firefighter"
|
||||
result = /obj/mecha/working/ripley/firefighter
|
||||
steps = list(
|
||||
//1
|
||||
list("key"=IS_WELDER,
|
||||
@@ -1092,7 +1092,7 @@
|
||||
|
||||
|
||||
/datum/construction/reversible/mecha/durand
|
||||
result = "/obj/mecha/combat/durand"
|
||||
result = /obj/mecha/combat/durand
|
||||
steps = list(
|
||||
//1
|
||||
list("key"=IS_WELDER,
|
||||
@@ -1374,7 +1374,7 @@
|
||||
|
||||
|
||||
/datum/construction/reversible/mecha/odysseus
|
||||
result = "/obj/mecha/medical/odysseus"
|
||||
result = /obj/mecha/medical/odysseus
|
||||
steps = list(
|
||||
//1
|
||||
list("key"=IS_WELDER,
|
||||
@@ -1554,7 +1554,7 @@
|
||||
// Phazon
|
||||
//////////////////////
|
||||
/datum/construction/mecha/phazon_chassis
|
||||
result = "/obj/mecha/combat/phazon"
|
||||
result = /obj/mecha/combat/phazon
|
||||
steps = list(list("key"=/obj/item/mecha_parts/part/phazon_torso),//1
|
||||
list("key"=/obj/item/mecha_parts/part/phazon_left_arm),//2
|
||||
list("key"=/obj/item/mecha_parts/part/phazon_right_arm),//3
|
||||
@@ -1583,7 +1583,7 @@
|
||||
return
|
||||
|
||||
/datum/construction/reversible/mecha/phazon
|
||||
result = "/obj/mecha/combat/phazon"
|
||||
result = /obj/mecha/combat/phazon
|
||||
steps = list(
|
||||
//1
|
||||
list("key"=IS_WELDER,
|
||||
@@ -1833,7 +1833,7 @@
|
||||
// Janus
|
||||
//////////////////////
|
||||
/datum/construction/mecha/janus_chassis
|
||||
result = "/obj/mecha/combat/phazon/janus"
|
||||
result = /obj/mecha/combat/phazon/janus
|
||||
steps = list(list("key"=/obj/item/mecha_parts/part/janus_torso),//1
|
||||
list("key"=/obj/item/mecha_parts/part/janus_left_arm),//2
|
||||
list("key"=/obj/item/mecha_parts/part/janus_right_arm),//3
|
||||
@@ -1862,7 +1862,7 @@
|
||||
return
|
||||
|
||||
/datum/construction/reversible/mecha/janus
|
||||
result = "/obj/mecha/combat/phazon/janus"
|
||||
result = /obj/mecha/combat/phazon/janus
|
||||
steps = list(
|
||||
//1
|
||||
list("key"=IS_WELDER,
|
||||
@@ -2138,7 +2138,7 @@
|
||||
// Pinnace
|
||||
//////////////////////
|
||||
/datum/construction/mecha/fighter/pinnace_chassis
|
||||
result = "/obj/mecha/combat/fighter/pinnace"
|
||||
result = /obj/mecha/combat/fighter/pinnace
|
||||
steps = list(list("key"=/obj/item/mecha_parts/fighter/part/pinnace_core),//1
|
||||
list("key"=/obj/item/mecha_parts/fighter/part/pinnace_cockpit),//2
|
||||
list("key"=/obj/item/mecha_parts/fighter/part/pinnace_main_engine),//3
|
||||
@@ -2168,7 +2168,7 @@
|
||||
return
|
||||
|
||||
/datum/construction/reversible/mecha/fighter/pinnace
|
||||
result = "/obj/mecha/combat/fighter/pinnace"
|
||||
result = /obj/mecha/combat/fighter/pinnace
|
||||
steps = list(
|
||||
//1
|
||||
list("key"=IS_WELDER,
|
||||
@@ -2421,7 +2421,7 @@
|
||||
// Baron
|
||||
//////////////////////
|
||||
/datum/construction/mecha/fighter/baron_chassis
|
||||
result = "/obj/mecha/combat/fighter/baron"
|
||||
result = /obj/mecha/combat/fighter/baron
|
||||
steps = list(list("key"=/obj/item/mecha_parts/fighter/part/baron_core),//1
|
||||
list("key"=/obj/item/mecha_parts/fighter/part/baron_cockpit),//2
|
||||
list("key"=/obj/item/mecha_parts/fighter/part/baron_main_engine),//3
|
||||
@@ -2451,7 +2451,7 @@
|
||||
return
|
||||
|
||||
/datum/construction/reversible/mecha/fighter/baron
|
||||
result = "/obj/mecha/combat/fighter/baron"
|
||||
result = /obj/mecha/combat/fighter/baron
|
||||
steps = list(
|
||||
//1
|
||||
list("key"=IS_WELDER,
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
|
||||
|
||||
/datum/construction/reversible/mecha/scarab
|
||||
result = "/obj/mecha/combat/scarab"
|
||||
result = /obj/mecha/combat/scarab
|
||||
steps = list(
|
||||
//1
|
||||
list("key"=IS_WELDER,
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
|
||||
|
||||
/datum/construction/reversible/mecha/polecat
|
||||
result = "/obj/mecha/micro/sec/polecat"
|
||||
result = /obj/mecha/micro/sec/polecat
|
||||
steps = list(
|
||||
//1
|
||||
list("key"=IS_WELDER,
|
||||
@@ -308,7 +308,7 @@
|
||||
|
||||
|
||||
/datum/construction/reversible/mecha/gopher
|
||||
result = "/obj/mecha/micro/utility/gopher"
|
||||
result = /obj/mecha/micro/utility/gopher
|
||||
steps = list(
|
||||
//1
|
||||
list("key"=IS_WELDER,
|
||||
@@ -514,7 +514,7 @@
|
||||
|
||||
|
||||
/datum/construction/reversible/mecha/weasel
|
||||
result = "/obj/mecha/micro/sec/weasel"
|
||||
result = /obj/mecha/micro/sec/weasel
|
||||
steps = list(
|
||||
//1
|
||||
list("key"=IS_WELDER,
|
||||
|
||||
@@ -121,31 +121,272 @@
|
||||
drop_sound = 'sound/items/drop/wooden.ogg'
|
||||
pickup_sound = 'sound/items/pickup/wooden.ogg'
|
||||
|
||||
/obj/item/stack/tile/wood/sif
|
||||
name = "alien wood tile"
|
||||
singular_name = "alien wood tile"
|
||||
desc = "An easy to fit wooden floor tile. It's blue!"
|
||||
icon_state = "tile-sifwood"
|
||||
|
||||
/obj/item/stack/tile/wood/alt
|
||||
name = "wood floor tile"
|
||||
singular_name = "wood floor tile"
|
||||
icon_state = "tile-wood_tile"
|
||||
icon = 'icons/obj/stacks_vr.dmi'
|
||||
icon_state = "tile-wood-gs"
|
||||
color = "#593c1c"
|
||||
|
||||
/obj/item/stack/tile/wood/parquet
|
||||
name = "parquet wood floor tile"
|
||||
singular_name = "parquet wood floor tile"
|
||||
icon_state = "tile-wood_parquet"
|
||||
icon = 'icons/obj/stacks_vr.dmi'
|
||||
icon_state = "tile-wood-gs_parquet"
|
||||
color = "#593c1c"
|
||||
|
||||
/obj/item/stack/tile/wood/panel
|
||||
name = "large wood floor tile"
|
||||
singular_name = "large wood floor tile"
|
||||
icon_state = "tile-wood_large"
|
||||
icon = 'icons/obj/stacks_vr.dmi'
|
||||
icon_state = "tile-wood-gs_large"
|
||||
color = "#593c1c"
|
||||
|
||||
/obj/item/stack/tile/wood/tile
|
||||
name = "tiled wood floor tile"
|
||||
singular_name = "tiled wood floor tile"
|
||||
icon_state = "tile-wood_tile"
|
||||
icon = 'icons/obj/stacks_vr.dmi'
|
||||
icon_state = "tile-wood-gs_tile"
|
||||
color = "#593c1c"
|
||||
|
||||
/obj/item/stack/tile/wood/vert
|
||||
name = "vertical wood floor tile"
|
||||
singular_name = "vertical wood floor tile"
|
||||
icon = 'icons/obj/stacks_vr.dmi'
|
||||
icon_state = "tile-wood-vert-gs"
|
||||
color = "#593c1c"
|
||||
|
||||
/obj/item/stack/tile/wood/vert_panel
|
||||
name = "large vertical wood floor tile"
|
||||
singular_name = "large vertical wood floor tile"
|
||||
icon = 'icons/obj/stacks_vr.dmi'
|
||||
icon_state = "tile-wood-vert-gs_large"
|
||||
color = "#593c1c"
|
||||
|
||||
/obj/item/stack/tile/wood/sif
|
||||
name = "alien wood tile"
|
||||
singular_name = "alien wood tile"
|
||||
desc = "An easy to fit wooden floor tile. It's blue!"
|
||||
icon = 'icons/obj/stacks_vr.dmi'
|
||||
icon_state = "tile-wood-gs"
|
||||
color = "#293c50"
|
||||
|
||||
/obj/item/stack/tile/wood/sif/parquet
|
||||
name = "alien wood parquet tile"
|
||||
singular_name = "alien wood parquet tile"
|
||||
icon_state = "tile-wood-gs_parquet"
|
||||
|
||||
/obj/item/stack/tile/wood/sif/panel
|
||||
name = "large alien wood tile"
|
||||
singular_name = "large alien wood tile"
|
||||
icon_state = "tile-wood-gs_large"
|
||||
|
||||
/obj/item/stack/tile/wood/sif/tile
|
||||
name = "tiled alien wood tile"
|
||||
singular_name = "tiled alien wood tile"
|
||||
icon_state = "tile-wood-gs_tile"
|
||||
|
||||
/obj/item/stack/tile/wood/sif/vert
|
||||
name = "vertical alien wood floor tile"
|
||||
singular_name = "vertical alien wood floor tile"
|
||||
icon_state = "tile-wood-vert-gs"
|
||||
|
||||
/obj/item/stack/tile/wood/sif/vert_panel
|
||||
name = "large vertical alien wood floor tile"
|
||||
singular_name = "large vertical alien wood floor tile"
|
||||
icon_state = "tile-wood-vert-gs_large"
|
||||
|
||||
/obj/item/stack/tile/wood/acacia
|
||||
name = "acacia wood floor tile"
|
||||
singular_name = "wood floor tile"
|
||||
icon = 'icons/obj/stacks_vr.dmi'
|
||||
icon_state = "tile-wood-gs"
|
||||
color = "#b75e12"
|
||||
|
||||
/obj/item/stack/tile/wood/acacia/parquet
|
||||
name = "acacia parquet floor tile"
|
||||
singular_name = "parquet wood floor tile"
|
||||
icon_state = "tile-wood-gs_parquet"
|
||||
|
||||
/obj/item/stack/tile/wood/acacia/panel
|
||||
name = "large acacia floor tile"
|
||||
singular_name = "large wood floor tile"
|
||||
icon_state = "tile-wood-gs_large"
|
||||
|
||||
/obj/item/stack/tile/wood/acacia/tile
|
||||
name = "tiled acacia floor tile"
|
||||
singular_name = "tiled wood floor tile"
|
||||
icon_state = "tile-wood-gs_tile"
|
||||
|
||||
/obj/item/stack/tile/wood/acacia/vert
|
||||
name = "vertical acacia wood floor tile"
|
||||
singular_name = "vertical acacia wood floor tile"
|
||||
icon_state = "tile-wood-vert-gs"
|
||||
|
||||
/obj/item/stack/tile/wood/acacia/vert_panel
|
||||
name = "large vertical acacia wood floor tile"
|
||||
singular_name = "large vertical acacia wood floor tile"
|
||||
icon_state = "tile-wood-vert-gs_large"
|
||||
|
||||
/obj/item/stack/tile/wood/birch
|
||||
name = "birch wood floor tile"
|
||||
singular_name = "wood floor tile"
|
||||
icon = 'icons/obj/stacks_vr.dmi'
|
||||
icon_state = "tile-wood-gs"
|
||||
color = "#f6dec0"
|
||||
|
||||
/obj/item/stack/tile/wood/birch/parquet
|
||||
name = "birch parquet floor tile"
|
||||
singular_name = "parquet wood floor tile"
|
||||
icon_state = "tile-wood-gs_parquet"
|
||||
|
||||
/obj/item/stack/tile/wood/birch/panel
|
||||
name = "large birch floor tile"
|
||||
singular_name = "large wood floor tile"
|
||||
icon_state = "tile-wood-gs_large"
|
||||
|
||||
/obj/item/stack/tile/wood/birch/tile
|
||||
name = "tiled birch floor tile"
|
||||
singular_name = "tiled wood floor tile"
|
||||
icon_state = "tile-wood-gs_tile"
|
||||
|
||||
/obj/item/stack/tile/wood/birch/vert
|
||||
name = "vertical birch wood floor tile"
|
||||
singular_name = "vertical birch wood floor tile"
|
||||
icon_state = "tile-wood-vert-gs"
|
||||
|
||||
/obj/item/stack/tile/wood/birch/vert_panel
|
||||
name = "large vertical birch wood floor tile"
|
||||
singular_name = "large vertical birch wood floor tile"
|
||||
icon_state = "tile-wood-vert-gs_large"
|
||||
|
||||
/obj/item/stack/tile/wood/hardwood
|
||||
name = "hardwood wood floor tile"
|
||||
singular_name = "wood floor tile"
|
||||
icon = 'icons/obj/stacks_vr.dmi'
|
||||
icon_state = "tile-wood-gs"
|
||||
color = "#42291a"
|
||||
|
||||
/obj/item/stack/tile/wood/hardwood/parquet
|
||||
name = "hardwood parquet floor tile"
|
||||
singular_name = "parquet wood floor tile"
|
||||
icon_state = "tile-wood-gs_parquet"
|
||||
|
||||
/obj/item/stack/tile/wood/hardwood/panel
|
||||
name = "large hardwood floor tile"
|
||||
singular_name = "large wood floor tile"
|
||||
icon_state = "tile-wood-gs_large"
|
||||
|
||||
/obj/item/stack/tile/wood/hardwood/tile
|
||||
name = "tiled hardwood floor tile"
|
||||
singular_name = "tiled wood floor tile"
|
||||
icon_state = "tile-wood-gs_tile"
|
||||
|
||||
/obj/item/stack/tile/wood/hardwood/vert
|
||||
name = "vertical hardwood wood floor tile"
|
||||
singular_name = "vertical hardwood wood floor tile"
|
||||
icon_state = "tile-wood-vert-gs"
|
||||
|
||||
/obj/item/stack/tile/wood/hardwood/vert_panel
|
||||
name = "large vertical hardwood wood floor tile"
|
||||
singular_name = "large vertical hardwood wood floor tile"
|
||||
icon_state = "tile-wood-vert-gs_large"
|
||||
|
||||
/obj/item/stack/tile/wood/pine
|
||||
name = "pine wood floor tile"
|
||||
singular_name = "wood floor tile"
|
||||
icon = 'icons/obj/stacks_vr.dmi'
|
||||
icon_state = "tile-wood-gs"
|
||||
color = "#cd9d6f"
|
||||
|
||||
/obj/item/stack/tile/wood/pine/parquet
|
||||
name = "pine parquet floor tile"
|
||||
singular_name = "parquet wood floor tile"
|
||||
icon_state = "tile-wood-gs_parquet"
|
||||
|
||||
/obj/item/stack/tile/wood/pine/panel
|
||||
name = "large pine floor tile"
|
||||
singular_name = "large wood floor tile"
|
||||
icon_state = "tile-wood-gs_large"
|
||||
|
||||
/obj/item/stack/tile/wood/pine/tile
|
||||
name = "tiled pine floor tile"
|
||||
singular_name = "tiled wood floor tile"
|
||||
icon_state = "tile-wood-gs_tile"
|
||||
|
||||
/obj/item/stack/tile/wood/pine/vert
|
||||
name = "vertical pine wood floor tile"
|
||||
singular_name = "vertical pine wood floor tile"
|
||||
icon_state = "tile-wood-vert-gs"
|
||||
|
||||
/obj/item/stack/tile/wood/pine/vert_panel
|
||||
name = "large vertical pine wood floor tile"
|
||||
singular_name = "large vertical pine wood floor tile"
|
||||
icon_state = "tile-wood-vert-gs_large"
|
||||
|
||||
/obj/item/stack/tile/wood/oak
|
||||
name = "oak wood floor tile"
|
||||
singular_name = "wood floor tile"
|
||||
icon = 'icons/obj/stacks_vr.dmi'
|
||||
icon_state = "tile-wood-gs"
|
||||
color = "#674928"
|
||||
|
||||
/obj/item/stack/tile/wood/oak/parquet
|
||||
name = "oak parquet floor tile"
|
||||
singular_name = "parquet wood floor tile"
|
||||
icon_state = "tile-wood-gs_parquet"
|
||||
|
||||
/obj/item/stack/tile/wood/oak/panel
|
||||
name = "large oak floor tile"
|
||||
singular_name = "large wood floor tile"
|
||||
icon_state = "tile-wood-gs_large"
|
||||
|
||||
/obj/item/stack/tile/wood/oak/tile
|
||||
name = "tiled oak floor tile"
|
||||
singular_name = "tiled wood floor tile"
|
||||
icon_state = "tile-wood-gs_tile"
|
||||
|
||||
/obj/item/stack/tile/wood/oak/vert
|
||||
name = "vertical oak wood floor tile"
|
||||
singular_name = "vertical oak wood floor tile"
|
||||
icon_state = "tile-wood-vert-gs"
|
||||
|
||||
/obj/item/stack/tile/wood/oak/vert_panel
|
||||
name = "large vertical oak wood floor tile"
|
||||
singular_name = "large vertical oak wood floor tile"
|
||||
icon_state = "tile-wood-vert-gs_large"
|
||||
|
||||
/obj/item/stack/tile/wood/redwood
|
||||
name = "redwood floor tile"
|
||||
singular_name = "redwood floor tile"
|
||||
icon = 'icons/obj/stacks_vr.dmi'
|
||||
icon_state = "tile-wood-gs"
|
||||
color = "#a45a52"
|
||||
|
||||
/obj/item/stack/tile/wood/redwood/parquet
|
||||
name = "redwood parquet floor tile"
|
||||
singular_name = "parquet redwood floor tile"
|
||||
icon_state = "tile-wood-gs_parquet"
|
||||
|
||||
/obj/item/stack/tile/wood/redwood/panel
|
||||
name = "large redwood floor tile"
|
||||
singular_name = "large redwood floor tile"
|
||||
icon_state = "tile-wood-gs_large"
|
||||
|
||||
/obj/item/stack/tile/wood/redwood/tile
|
||||
name = "tiled redwood floor tile"
|
||||
singular_name = "tiled redwood floor tile"
|
||||
icon_state = "tile-wood-gs_tile"
|
||||
|
||||
/obj/item/stack/tile/wood/redwood/vert
|
||||
name = "vertical redwood wood floor tile"
|
||||
singular_name = "vertical redwood wood floor tile"
|
||||
icon_state = "tile-wood-vert-gs"
|
||||
|
||||
/obj/item/stack/tile/wood/redwood/vert_panel
|
||||
name = "large vertical redwood wood floor tile"
|
||||
singular_name = "large vertical redwood wood floor tile"
|
||||
icon_state = "tile-wood-vert-gs_large"
|
||||
|
||||
/obj/item/stack/tile/wood/cyborg
|
||||
name = "wood floor tile synthesizer"
|
||||
|
||||
@@ -180,5 +180,7 @@
|
||||
M.visible_message(span_infoplain(span_bold("\The [user]") + " scans the wounds on [M]'s [S.name] with [src]"))
|
||||
|
||||
src.add_data(S)
|
||||
SEND_SIGNAL(src,COMSIG_AUTOPSY_PERFORMED, user, M)
|
||||
SEND_GLOBAL_SIGNAL(COMSIG_GLOB_AUTOPSY_PERFORMED, user, M)
|
||||
|
||||
return 1
|
||||
|
||||
@@ -352,6 +352,14 @@
|
||||
board_type = new /datum/frame/frame_types/industrial_reagent_pipe
|
||||
req_components = list( /obj/item/stack/material/glass/reinforced = 1)
|
||||
|
||||
/obj/item/circuitboard/industrial_reagent_splitter
|
||||
name = T_BOARD("industrial chemical splitter")
|
||||
build_path = /obj/machinery/reagent_refinery/splitter
|
||||
board_type = new /datum/frame/frame_types/industrial_reagent_splitter
|
||||
req_components = list(
|
||||
/obj/item/stack/material/glass/reinforced = 1,
|
||||
/obj/item/stock_parts/motor = 1)
|
||||
|
||||
/obj/item/circuitboard/industrial_reagent_waste_processor
|
||||
name = T_BOARD("industrial chemical waste processor")
|
||||
build_path = /obj/machinery/reagent_refinery/waste_processor
|
||||
|
||||
@@ -157,6 +157,11 @@
|
||||
initial_sprite_stack = list("base-stamp-silver", "top-orange", "stamp-n", "pips-gold")
|
||||
rank = JOB_CHIEF_ENGINEER
|
||||
|
||||
/obj/item/card/id/engineering/chemical
|
||||
name = JOB_ALT_CHEMENGINEER + "'s ID"
|
||||
initial_sprite_stack = list("base-stamp", "top-orange", "stamp-n", "pips-medblu", "stripe-white")
|
||||
rank = JOB_ENGINEER
|
||||
|
||||
//Science
|
||||
|
||||
/obj/item/card/id/science
|
||||
|
||||
@@ -84,7 +84,9 @@
|
||||
/obj/item/integrated_electronics/debugger,
|
||||
/obj/item/shovel/spade,
|
||||
/obj/item/stack/nanopaste,
|
||||
/obj/item/geiger
|
||||
/obj/item/geiger,
|
||||
/obj/item/reagent_scanner,
|
||||
/obj/item/lightpainter
|
||||
)
|
||||
|
||||
/obj/item/storage/belt/utility/full
|
||||
@@ -108,6 +110,16 @@
|
||||
/obj/item/multitool
|
||||
)
|
||||
|
||||
/obj/item/storage/belt/utility/chemtech
|
||||
starts_with = list(
|
||||
/obj/item/tool/screwdriver,
|
||||
/obj/item/tool/wrench,
|
||||
/obj/item/weldingtool,
|
||||
/obj/item/tool/crowbar,
|
||||
/obj/item/tool/wirecutters,
|
||||
/obj/item/reagent_scanner
|
||||
)
|
||||
|
||||
/obj/item/storage/belt/utility/atmostech
|
||||
starts_with = list(
|
||||
/obj/item/tool/screwdriver,
|
||||
@@ -220,7 +232,9 @@
|
||||
/obj/item/stack/material/glass,
|
||||
/obj/item/lightreplacer,
|
||||
/obj/item/pickaxe/plasmacutter,
|
||||
/obj/item/holosign_creator/combifan
|
||||
/obj/item/holosign_creator/combifan,
|
||||
/obj/item/reagent_scanner,
|
||||
/obj/item/lightpainter
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -47,6 +47,7 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh
|
||||
busy = TRUE
|
||||
if(do_after(user, rand(4 SECONDS,6 SECONDS), target = src))
|
||||
SEND_SIGNAL(src,COMSIG_LOOT_REWARD,L,searchedby)
|
||||
SEND_GLOBAL_SIGNAL(COMSIG_GLOB_TRASHPILE_SEARCHED,L,searchedby)
|
||||
busy = FALSE
|
||||
else
|
||||
return ..()
|
||||
|
||||
@@ -271,9 +271,31 @@
|
||||
|
||||
/obj/structure/simple_door/hardwood/Initialize(mapload,var/material_name)
|
||||
. = ..(mapload, material_name || MAT_HARDWOOD)
|
||||
knock_sound = 'sound/machines/door/knock_wood.wav'
|
||||
|
||||
/obj/structure/simple_door/sifwood/Initialize(mapload,var/material_name)
|
||||
. = ..(mapload, material_name || MAT_SIFWOOD)
|
||||
knock_sound = 'sound/machines/door/knock_wood.wav'
|
||||
|
||||
/obj/structure/simple_door/birchwood/Initialize(mapload,var/material_name)
|
||||
. = ..(mapload, material_name || MAT_BIRCHWOOD)
|
||||
knock_sound = 'sound/machines/door/knock_wood.wav'
|
||||
|
||||
/obj/structure/simple_door/pinewood/Initialize(mapload,var/material_name)
|
||||
. = ..(mapload, material_name || MAT_PINEWOOD)
|
||||
knock_sound = 'sound/machines/door/knock_wood.wav'
|
||||
|
||||
/obj/structure/simple_door/oakwood/Initialize(mapload,var/material_name)
|
||||
. = ..(mapload, material_name || MAT_OAKWOOD)
|
||||
knock_sound = 'sound/machines/door/knock_wood.wav'
|
||||
|
||||
/obj/structure/simple_door/acaciawood/Initialize(mapload,var/material_name)
|
||||
. = ..(mapload, material_name || MAT_ACACIAWOOD)
|
||||
knock_sound = 'sound/machines/door/knock_wood.wav'
|
||||
|
||||
/obj/structure/simple_door/redwood/Initialize(mapload,var/material_name)
|
||||
. = ..(mapload, material_name || MAT_REDWOOD)
|
||||
knock_sound = 'sound/machines/door/knock_wood.wav'
|
||||
|
||||
/obj/structure/simple_door/resin/Initialize(mapload,var/material_name)
|
||||
. = ..(mapload, material_name || MAT_RESIN)
|
||||
|
||||
@@ -129,6 +129,7 @@
|
||||
to_chat(user,span_danger("Some sort of creature leaps out of \the [src]!"))
|
||||
else
|
||||
SEND_SIGNAL(src,COMSIG_LOOT_REWARD,user,searchedby, 5)
|
||||
SEND_GLOBAL_SIGNAL(COMSIG_GLOB_TRASHPILE_SEARCHED,user,searchedby)
|
||||
busy = FALSE
|
||||
else
|
||||
return ..()
|
||||
|
||||
@@ -393,7 +393,7 @@ var/list/flooring_types
|
||||
|
||||
/decl/flooring/linoleum
|
||||
name = "linoleum"
|
||||
desc = "It's like the 2390's all over again."
|
||||
desc = "It's like the 2390's all over again." //CHOMPEDIT - Age
|
||||
icon = 'icons/turf/flooring/linoleum.dmi'
|
||||
icon_base = "lino"
|
||||
can_paint = 1
|
||||
@@ -493,10 +493,30 @@ var/list/flooring_types
|
||||
|
||||
/decl/flooring/wood/sif
|
||||
desc = "Polished wood planks made from sivian wood."
|
||||
icon = 'icons/turf/flooring/wood.dmi'
|
||||
icon_base = "sifwood"
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_base = "wood"
|
||||
build_type = /obj/item/stack/tile/wood/sif
|
||||
|
||||
/decl/flooring/wood/sif/panel
|
||||
icon_base = "sif_panel"
|
||||
build_type = /obj/item/stack/tile/wood/sif/panel
|
||||
|
||||
/decl/flooring/wood/sif/parquet
|
||||
icon_base = "wood_parquet"
|
||||
build_type = /obj/item/stack/tile/wood/sif/parquet
|
||||
|
||||
/decl/flooring/wood/sif/tile
|
||||
icon_base = "wood_tile"
|
||||
build_type = /obj/item/stack/tile/wood/sif/tile
|
||||
|
||||
/decl/flooring/wood/sif/vert
|
||||
icon_base = "wood_vert"
|
||||
build_type = /obj/item/stack/tile/wood/sif/vert
|
||||
|
||||
/decl/flooring/wood/sif/vert_panel
|
||||
icon_base = "wood_vert_panel"
|
||||
build_type = /obj/item/stack/tile/wood/sif/vert_panel
|
||||
|
||||
/decl/flooring/wood/alt
|
||||
icon = 'icons/turf/flooring/wood.dmi'
|
||||
icon_base = "wood"
|
||||
@@ -504,24 +524,303 @@ var/list/flooring_types
|
||||
|
||||
/decl/flooring/wood/alt/panel
|
||||
desc = "Polished wooden panels."
|
||||
icon = 'icons/turf/flooring/wood.dmi'
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_base = "wood_panel"
|
||||
has_damage_range = 2
|
||||
build_type = /obj/item/stack/tile/wood/panel
|
||||
|
||||
/decl/flooring/wood/alt/parquet
|
||||
desc = "Polished wooden tiles."
|
||||
icon = 'icons/turf/flooring/wood.dmi'
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_base = "wood_parquet"
|
||||
build_type = /obj/item/stack/tile/wood/parquet
|
||||
|
||||
/decl/flooring/wood/alt/vert
|
||||
desc = "Polished wooden planks."
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_base = "wood_vert"
|
||||
build_type = /obj/item/stack/tile/wood/vert
|
||||
|
||||
/decl/flooring/wood/alt/vert_panel
|
||||
desc = "Polished wooden panels."
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_base = "wood_vert_panel"
|
||||
build_type = /obj/item/stack/tile/wood/vert_panel
|
||||
|
||||
/decl/flooring/wood/alt/tile
|
||||
desc = "Polished wooden tiles."
|
||||
icon = 'icons/turf/flooring/wood.dmi'
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_base = "wood_tile"
|
||||
has_damage_range = 2
|
||||
build_type = /obj/item/stack/tile/wood/tile
|
||||
|
||||
//New Wood
|
||||
/decl/flooring/wood/acacia
|
||||
name = "wooden floor"
|
||||
desc = "Polished acacia planks."
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_base = "wood"
|
||||
has_damage_range = 6
|
||||
damage_temperature = T0C+200
|
||||
descriptor = "planks"
|
||||
build_type = /obj/item/stack/tile/wood/acacia
|
||||
flags = TURF_CAN_BREAK | TURF_REMOVE_CROWBAR | TURF_REMOVE_SCREWDRIVER
|
||||
|
||||
/decl/flooring/wood/acacia/panel
|
||||
desc = "Polished acacia panels."
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_base = "wood_panel"
|
||||
has_damage_range = 2
|
||||
build_type = /obj/item/stack/tile/wood/acacia/panel
|
||||
|
||||
/decl/flooring/wood/acacia/parquet
|
||||
desc = "Polished acacia parquet."
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_base = "wood_parquet"
|
||||
build_type = /obj/item/stack/tile/wood/acacia/parquet
|
||||
|
||||
/decl/flooring/wood/acacia/tile
|
||||
desc = "Polished acacia tiles."
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_base = "wood_tile"
|
||||
has_damage_range = 2
|
||||
build_type = /obj/item/stack/tile/wood/acacia/tile
|
||||
|
||||
/decl/flooring/wood/acacia/vert
|
||||
desc = "Polished acacia planks."
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_base = "wood_vert"
|
||||
build_type = /obj/item/stack/tile/wood/acacia/vert
|
||||
|
||||
/decl/flooring/wood/acacia/vert_panel
|
||||
desc = "Polished acacia panels."
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_base = "wood_vert_panel"
|
||||
has_damage_range = 2
|
||||
build_type = /obj/item/stack/tile/wood/acacia/vert_panel
|
||||
|
||||
/decl/flooring/wood/birch
|
||||
name = "wooden floor"
|
||||
desc = "Polished birch planks."
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_base = "wood"
|
||||
has_damage_range = 6
|
||||
damage_temperature = T0C+200
|
||||
descriptor = "planks"
|
||||
build_type = /obj/item/stack/tile/wood/birch
|
||||
flags = TURF_CAN_BREAK | TURF_REMOVE_CROWBAR | TURF_REMOVE_SCREWDRIVER
|
||||
|
||||
/decl/flooring/wood/birch/panel
|
||||
desc = "Polished birch panels."
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_base = "wood_panel"
|
||||
has_damage_range = 2
|
||||
build_type = /obj/item/stack/tile/wood/birch/panel
|
||||
|
||||
/decl/flooring/wood/birch/parquet
|
||||
desc = "Polished birch tiles."
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_base = "wood_parquet"
|
||||
build_type = /obj/item/stack/tile/wood/birch/parquet
|
||||
|
||||
/decl/flooring/wood/birch/tile
|
||||
desc = "Polished birch tiles."
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_base = "wood_tile"
|
||||
has_damage_range = 2
|
||||
build_type = /obj/item/stack/tile/wood/birch/tile
|
||||
|
||||
/decl/flooring/wood/birch/vert
|
||||
desc = "Polished birch planks."
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_base = "wood_vert"
|
||||
build_type = /obj/item/stack/tile/wood/birch/vert
|
||||
|
||||
/decl/flooring/wood/birch/vert_panel
|
||||
desc = "Polished birch panels."
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_base = "wood_vert_panel"
|
||||
has_damage_range = 2
|
||||
build_type = /obj/item/stack/tile/wood/birch/vert_panel
|
||||
|
||||
/decl/flooring/wood/hardwood
|
||||
name = "wooden floor"
|
||||
desc = "Polished hardwood planks."
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_base = "wood"
|
||||
has_damage_range = 6
|
||||
damage_temperature = T0C+200
|
||||
descriptor = "planks"
|
||||
build_type = /obj/item/stack/tile/wood/hardwood
|
||||
flags = TURF_CAN_BREAK | TURF_REMOVE_CROWBAR | TURF_REMOVE_SCREWDRIVER
|
||||
|
||||
/decl/flooring/wood/hardwood/panel
|
||||
desc = "Polished hardwood panels."
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_base = "wood_panel"
|
||||
has_damage_range = 2
|
||||
build_type = /obj/item/stack/tile/wood/hardwood/panel
|
||||
|
||||
/decl/flooring/wood/hardwood/parquet
|
||||
desc = "Polished hardwood tiles."
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_base = "wood_parquet"
|
||||
build_type = /obj/item/stack/tile/wood/hardwood/parquet
|
||||
|
||||
/decl/flooring/wood/hardwood/tile
|
||||
desc = "Polished hardwood tiles."
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_base = "wood_tile"
|
||||
has_damage_range = 2
|
||||
build_type = /obj/item/stack/tile/wood/hardwood/tile
|
||||
|
||||
/decl/flooring/wood/hardwood/vert
|
||||
desc = "Polished hardwood planks."
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_base = "wood_vert"
|
||||
build_type = /obj/item/stack/tile/wood/hardwood/vert
|
||||
|
||||
/decl/flooring/wood/hardwood/vert_panel
|
||||
desc = "Polished hardwood panels."
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_base = "wood_vert_panel"
|
||||
has_damage_range = 2
|
||||
build_type = /obj/item/stack/tile/wood/hardwood/vert_panel
|
||||
|
||||
/decl/flooring/wood/oak
|
||||
name = "wooden floor"
|
||||
desc = "Polished oak planks."
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_base = "wood"
|
||||
has_damage_range = 6
|
||||
damage_temperature = T0C+200
|
||||
descriptor = "planks"
|
||||
build_type = /obj/item/stack/tile/wood/oak
|
||||
flags = TURF_CAN_BREAK | TURF_REMOVE_CROWBAR | TURF_REMOVE_SCREWDRIVER
|
||||
|
||||
/decl/flooring/wood/oak/panel
|
||||
desc = "Polished oak panels."
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_base = "wood_panel"
|
||||
has_damage_range = 2
|
||||
build_type = /obj/item/stack/tile/wood/oak/panel
|
||||
|
||||
/decl/flooring/wood/oak/parquet
|
||||
desc = "Polished oak tiles."
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_base = "wood_parquet"
|
||||
build_type = /obj/item/stack/tile/wood/oak/parquet
|
||||
|
||||
/decl/flooring/wood/oak/tile
|
||||
desc = "Polished oak tiles."
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_base = "wood_tile"
|
||||
has_damage_range = 2
|
||||
build_type = /obj/item/stack/tile/wood/oak/tile
|
||||
|
||||
/decl/flooring/wood/oak/vert
|
||||
desc = "Polished oak planks."
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_base = "wood_vert"
|
||||
build_type = /obj/item/stack/tile/wood/oak/vert
|
||||
|
||||
/decl/flooring/wood/oak/vert_panel
|
||||
desc = "Polished oak panels."
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_base = "wood_vert_panel"
|
||||
has_damage_range = 2
|
||||
build_type = /obj/item/stack/tile/wood/oak/vert_panel
|
||||
|
||||
/decl/flooring/wood/pine
|
||||
name = "wooden floor"
|
||||
desc = "Polished pine planks."
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_base = "wood"
|
||||
has_damage_range = 6
|
||||
damage_temperature = T0C+200
|
||||
descriptor = "planks"
|
||||
build_type = /obj/item/stack/tile/wood/pine
|
||||
flags = TURF_CAN_BREAK | TURF_REMOVE_CROWBAR | TURF_REMOVE_SCREWDRIVER
|
||||
|
||||
/decl/flooring/wood/pine/panel
|
||||
desc = "Polished pine panels."
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_base = "wood_panel"
|
||||
has_damage_range = 2
|
||||
build_type = /obj/item/stack/tile/wood/pine/panel
|
||||
|
||||
/decl/flooring/wood/pine/parquet
|
||||
desc = "Polished pine tiles."
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_base = "wood_parquet"
|
||||
build_type = /obj/item/stack/tile/wood/pine/parquet
|
||||
|
||||
/decl/flooring/wood/pine/tile
|
||||
desc = "Polished pine tiles."
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_base = "wood_tile"
|
||||
has_damage_range = 2
|
||||
build_type = /obj/item/stack/tile/wood/pine/tile
|
||||
|
||||
/decl/flooring/wood/pine/vert
|
||||
desc = "Polished pine planks."
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_base = "wood_vert"
|
||||
build_type = /obj/item/stack/tile/wood/pine/vert
|
||||
|
||||
/decl/flooring/wood/pine/vert_panel
|
||||
desc = "Polished pine panels."
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_base = "wood_vert_panel"
|
||||
has_damage_range = 2
|
||||
build_type = /obj/item/stack/tile/wood/pine/vert_panel
|
||||
|
||||
/decl/flooring/wood/redwood
|
||||
name = "wooden floor"
|
||||
desc = "Polished redwood planks."
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_base = "wood"
|
||||
has_damage_range = 6
|
||||
damage_temperature = T0C+200
|
||||
descriptor = "planks"
|
||||
build_type = /obj/item/stack/tile/wood/redwood
|
||||
flags = TURF_CAN_BREAK | TURF_REMOVE_CROWBAR | TURF_REMOVE_SCREWDRIVER
|
||||
|
||||
/decl/flooring/wood/redwood/panel
|
||||
desc = "Polished redwood panels."
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_base = "wood_panel"
|
||||
has_damage_range = 2
|
||||
build_type = /obj/item/stack/tile/wood/redwood/panel
|
||||
|
||||
/decl/flooring/wood/redwood/parquet
|
||||
desc = "Polished redwood tiles."
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_base = "wood_parquet"
|
||||
build_type = /obj/item/stack/tile/wood/redwood/parquet
|
||||
|
||||
/decl/flooring/wood/redwood/tile
|
||||
desc = "Polished redwood tiles."
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_base = "wood_tile"
|
||||
has_damage_range = 2
|
||||
build_type = /obj/item/stack/tile/wood/redwood/tile
|
||||
|
||||
/decl/flooring/wood/redwood/vert
|
||||
desc = "Polished redwood planks."
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_base = "wood_vert"
|
||||
build_type = /obj/item/stack/tile/wood/redwood/vert
|
||||
|
||||
/decl/flooring/wood/redwood/vert_panel
|
||||
desc = "Polished redwood panels."
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_base = "wood_vert_panel"
|
||||
has_damage_range = 2
|
||||
build_type = /obj/item/stack/tile/wood/redwood/vert_panel
|
||||
|
||||
// no more wood
|
||||
|
||||
/decl/flooring/reinforced
|
||||
name = "reinforced floor"
|
||||
desc = "Heavily reinforced with steel rods."
|
||||
|
||||
@@ -127,8 +127,10 @@
|
||||
|
||||
/turf/simulated/floor/wood/sif
|
||||
name = "alien wooden floor"
|
||||
icon_state = "sifwood"
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_state = "wood"
|
||||
initial_flooring = /decl/flooring/wood/sif
|
||||
color = "#293c50"
|
||||
|
||||
/turf/simulated/floor/wood/sif/broken
|
||||
icon_state = "sifwood-broken0" // This gets changed when spawned.
|
||||
@@ -137,9 +139,30 @@
|
||||
. = ..()
|
||||
break_tile()
|
||||
|
||||
/turf/simulated/floor/wood/sif/tile
|
||||
icon_state = "wood_tile"
|
||||
initial_flooring = /decl/flooring/wood/sif/tile
|
||||
|
||||
/turf/simulated/floor/wood/sif/panel
|
||||
icon_state = "wood_panel"
|
||||
initial_flooring = /decl/flooring/wood/sif/panel
|
||||
|
||||
/turf/simulated/floor/wood/sif/parquet
|
||||
icon_state = "wood_parquet"
|
||||
initial_flooring = /decl/flooring/wood/sif/parquet
|
||||
|
||||
/turf/simulated/floor/wood/sif/vert
|
||||
icon_state = "wood_vert"
|
||||
initial_flooring = /decl/flooring/wood/sif/vert
|
||||
|
||||
/turf/simulated/floor/wood/sif/vert_panel
|
||||
icon_state = "wood_vert_panel"
|
||||
initial_flooring = /decl/flooring/wood/sif/vert_panel
|
||||
|
||||
/turf/simulated/floor/wood/alt
|
||||
icon = 'icons/turf/flooring/wood.dmi'
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
initial_flooring = /decl/flooring/wood/alt
|
||||
color = "#593c1c"
|
||||
|
||||
/turf/simulated/floor/wood/alt/broken
|
||||
icon_state = "wood-broken0" // This gets changed when spawned.
|
||||
@@ -181,6 +204,14 @@
|
||||
. = ..()
|
||||
break_tile()
|
||||
|
||||
/turf/simulated/floor/wood/alt/vert
|
||||
icon_state = "wood_vert"
|
||||
initial_flooring = /decl/flooring/wood/alt/vert
|
||||
|
||||
/turf/simulated/floor/wood/alt/vert_panel
|
||||
icon_state = "wood_vert_panel"
|
||||
initial_flooring = /decl/flooring/wood/alt/vert_panel
|
||||
|
||||
/turf/simulated/floor/grass
|
||||
name = "grass patch"
|
||||
icon = 'icons/turf/flooring/grass.dmi'
|
||||
@@ -555,3 +586,197 @@
|
||||
icon = 'icons/turf/concrete.dmi'
|
||||
icon_state = "concrete"
|
||||
initial_flooring = /decl/flooring/concrete
|
||||
|
||||
|
||||
//New Wood
|
||||
/turf/simulated/floor/wood/acacia
|
||||
name = "acacia wood floor"
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
color = "#b75e12"
|
||||
icon_state = "wood"
|
||||
initial_flooring = /decl/flooring/wood/acacia
|
||||
|
||||
/turf/simulated/floor/wood/acacia/tile
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_state = "wood_tile"
|
||||
initial_flooring = /decl/flooring/wood/acacia/tile
|
||||
|
||||
/turf/simulated/floor/wood/acacia/panel
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_state = "wood_panel"
|
||||
initial_flooring = /decl/flooring/wood/acacia/panel
|
||||
|
||||
/turf/simulated/floor/wood/acacia/parquet
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_state = "wood_parquet"
|
||||
initial_flooring = /decl/flooring/wood/acacia/parquet
|
||||
|
||||
/turf/simulated/floor/wood/acacia/vert
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_state = "wood_vert"
|
||||
initial_flooring = /decl/flooring/wood/acacia/vert
|
||||
|
||||
/turf/simulated/floor/wood/acacia/vert_panel
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_state = "wood_vert_panel"
|
||||
initial_flooring = /decl/flooring/wood/acacia/vert_panel
|
||||
|
||||
/turf/simulated/floor/wood/birch
|
||||
name = "birch wood floor"
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
color = "#f6dec0"
|
||||
icon_state = "wood"
|
||||
initial_flooring = /decl/flooring/wood/birch
|
||||
|
||||
/turf/simulated/floor/wood/birch/tile
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_state = "wood_tile"
|
||||
initial_flooring = /decl/flooring/wood/birch/tile
|
||||
|
||||
/turf/simulated/floor/wood/birch/panel
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_state = "wood_panel"
|
||||
initial_flooring = /decl/flooring/wood/birch/panel
|
||||
|
||||
/turf/simulated/floor/wood/birch/parquet
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_state = "wood_parquet"
|
||||
initial_flooring = /decl/flooring/wood/birch/parquet
|
||||
|
||||
/turf/simulated/floor/wood/birch/vert
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_state = "wood_vert"
|
||||
initial_flooring = /decl/flooring/wood/birch/vert
|
||||
|
||||
/turf/simulated/floor/wood/birch/vert_panel
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_state = "wood_vert_panel"
|
||||
initial_flooring = /decl/flooring/wood/birch/vert_panel
|
||||
|
||||
/turf/simulated/floor/wood/hardwood
|
||||
name = "hardwood wood floor"
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
color = "#42291a"
|
||||
icon_state = "wood"
|
||||
initial_flooring = /decl/flooring/wood/hardwood
|
||||
|
||||
/turf/simulated/floor/wood/hardwood/tile
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_state = "wood_tile"
|
||||
initial_flooring = /decl/flooring/wood/hardwood/tile
|
||||
|
||||
/turf/simulated/floor/wood/hardwood/panel
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_state = "wood_panel"
|
||||
initial_flooring = /decl/flooring/wood/hardwood/panel
|
||||
|
||||
/turf/simulated/floor/wood/hardwood/parquet
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_state = "wood_parquet"
|
||||
initial_flooring = /decl/flooring/wood/hardwood/parquet
|
||||
|
||||
/turf/simulated/floor/wood/hardwood/vert
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_state = "wood_vert"
|
||||
initial_flooring = /decl/flooring/wood/hardwood/vert
|
||||
|
||||
/turf/simulated/floor/wood/hardwood/vert_panel
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_state = "wood_vert_panel"
|
||||
initial_flooring = /decl/flooring/wood/hardwood/vert_panel
|
||||
|
||||
/turf/simulated/floor/wood/oak
|
||||
name = "oak wood floor"
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
color = "#674928"
|
||||
icon_state = "wood"
|
||||
initial_flooring = /decl/flooring/wood/oak
|
||||
|
||||
/turf/simulated/floor/wood/oak/tile
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_state = "wood_tile"
|
||||
initial_flooring = /decl/flooring/wood/oak/tile
|
||||
|
||||
/turf/simulated/floor/wood/oak/panel
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_state = "wood_panel"
|
||||
initial_flooring = /decl/flooring/wood/oak/panel
|
||||
|
||||
/turf/simulated/floor/wood/oak/parquet
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_state = "wood_parquet"
|
||||
initial_flooring = /decl/flooring/wood/oak/parquet
|
||||
|
||||
/turf/simulated/floor/wood/oak/vert
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_state = "wood_vert"
|
||||
initial_flooring = /decl/flooring/wood/oak/vert
|
||||
|
||||
/turf/simulated/floor/wood/oak/vert_panel
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_state = "wood_vert_panel"
|
||||
initial_flooring = /decl/flooring/wood/oak/vert_panel
|
||||
|
||||
/turf/simulated/floor/wood/pine
|
||||
name = "pine wood floor"
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
color = "#cd9d6f"
|
||||
icon_state = "wood"
|
||||
initial_flooring = /decl/flooring/wood/pine
|
||||
|
||||
/turf/simulated/floor/wood/pine/tile
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_state = "wood_tile"
|
||||
initial_flooring = /decl/flooring/wood/pine/tile
|
||||
|
||||
/turf/simulated/floor/wood/pine/panel
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_state = "wood_panel"
|
||||
initial_flooring = /decl/flooring/wood/pine/panel
|
||||
|
||||
/turf/simulated/floor/wood/pine/parquet
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_state = "wood_parquet"
|
||||
initial_flooring = /decl/flooring/wood/pine/parquet
|
||||
|
||||
/turf/simulated/floor/wood/pine/vert
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_state = "wood_vert"
|
||||
initial_flooring = /decl/flooring/wood/pine/vert
|
||||
|
||||
/turf/simulated/floor/wood/pine/vert_panel
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_state = "wood_vert_panel"
|
||||
initial_flooring = /decl/flooring/wood/pine/vert_panel
|
||||
|
||||
/turf/simulated/floor/wood/redwood
|
||||
name = "redwood wood floor"
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
color = "#a45a52"
|
||||
icon_state = "wood"
|
||||
initial_flooring = /decl/flooring/wood/redwood
|
||||
|
||||
/turf/simulated/floor/wood/redwood/tile
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_state = "wood_tile"
|
||||
initial_flooring = /decl/flooring/wood/redwood/tile
|
||||
|
||||
/turf/simulated/floor/wood/redwood/panel
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_state = "wood_panel"
|
||||
initial_flooring = /decl/flooring/wood/redwood/panel
|
||||
|
||||
/turf/simulated/floor/wood/redwood/parquet
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_state = "wood_parquet"
|
||||
initial_flooring = /decl/flooring/wood/redwood/parquet
|
||||
|
||||
/turf/simulated/floor/wood/redwood/vert
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_state = "wood_vert"
|
||||
initial_flooring = /decl/flooring/wood/redwood/vert
|
||||
|
||||
/turf/simulated/floor/wood/redwood/vert_panel
|
||||
icon = 'icons/turf/flooring/wood_greyscale.dmi'
|
||||
icon_state = "wood_vert_panel"
|
||||
initial_flooring = /decl/flooring/wood/redwood/vert_panel
|
||||
|
||||
@@ -71,6 +71,7 @@
|
||||
desc = base_desc
|
||||
icon = base_icon
|
||||
icon_state = base_icon_state
|
||||
color = null
|
||||
|
||||
if(!is_plating()) // Flooring -> Plating
|
||||
swap_decals()
|
||||
|
||||
@@ -77,6 +77,8 @@
|
||||
S.use(1)
|
||||
playsound(src, 'sound/weapons/genhit.ogg', 50, 1)
|
||||
ChangeTurf(/turf/simulated/floor, preserve_outdoors = TRUE)
|
||||
if(S.color)
|
||||
color = S.color
|
||||
return
|
||||
else if(istype(C, /obj/item))
|
||||
try_deconstruct_tile(C, user)
|
||||
@@ -119,6 +121,8 @@
|
||||
return
|
||||
if(S.use(use_flooring.build_cost))
|
||||
set_flooring(use_flooring)
|
||||
if(S.color)
|
||||
color = S.color
|
||||
playsound(src, 'sound/items/Deconstruct.ogg', 80, 1)
|
||||
return
|
||||
// Plating repairs and removal
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
/turf/simulated/floor/outdoors/snow/sif/planetuse/attackby(var/obj/item/W, var/mob/user)
|
||||
if(istype(W, /obj/item/shovel))
|
||||
to_chat(user, span_notice("You begin to remove \the [src] with your [W]."))
|
||||
if(do_after(user, 4 SECONDS * W.toolspeed))
|
||||
if(do_after(user, 4 SECONDS * W.toolspeed, src))
|
||||
to_chat(user, span_notice("\The [src] has been dug up, and now lies in a pile nearby."))
|
||||
new /obj/item/stack/material/snow(src)
|
||||
demote()
|
||||
@@ -76,7 +76,7 @@
|
||||
|
||||
/turf/simulated/floor/outdoors/snow/sif/planetuse/attack_hand(mob/user as mob)
|
||||
visible_message("[user] starts scooping up some snow.", "You start scooping up some snow.")
|
||||
if(do_after(user, 1 SECOND))
|
||||
if(do_after(user, 1 SECOND, src))
|
||||
var/obj/S = new /obj/item/stack/material/snow(user.loc)
|
||||
user.put_in_hands(S)
|
||||
visible_message("[user] scoops up a pile of snow.", "You scoop up a pile of snow.")
|
||||
|
||||
@@ -123,6 +123,21 @@
|
||||
. = ..(mapload, MAT_SIFWOOD, MAT_SIFWOOD, MAT_SIFWOOD)
|
||||
// CHOMPEdit End
|
||||
|
||||
/turf/simulated/wall/birchwood/Initialize(mapload)
|
||||
. = ..(mapload, MAT_BIRCHWOOD)
|
||||
|
||||
/turf/simulated/wall/pinewood/Initialize(mapload)
|
||||
. = ..(mapload, MAT_PINEWOOD)
|
||||
|
||||
/turf/simulated/wall/oakwood/Initialize(mapload)
|
||||
. = ..(mapload, MAT_OAKWOOD)
|
||||
|
||||
/turf/simulated/wall/acaciawood/Initialize(mapload)
|
||||
. = ..(mapload, MAT_ACACIAWOOD)
|
||||
|
||||
/turf/simulated/wall/redwood/Initialize(mapload)
|
||||
. = ..(mapload, MAT_REDWOOD)
|
||||
|
||||
/turf/simulated/wall/log/Initialize(mapload)
|
||||
. = ..(mapload, MAT_LOG)
|
||||
|
||||
|
||||
@@ -230,6 +230,30 @@ var/list/flesh_overlay_cache = list()
|
||||
icon_state = "wood"
|
||||
icon = 'icons/turf/wall_masks_vr.dmi'
|
||||
|
||||
/turf/simulated/wall/acaciawood
|
||||
icon_state = "acaciawood"
|
||||
icon = 'icons/turf/wall_masks_vr.dmi'
|
||||
|
||||
/turf/simulated/wall/birchwood
|
||||
icon_state = "birchwood"
|
||||
icon = 'icons/turf/wall_masks_vr.dmi'
|
||||
|
||||
/turf/simulated/wall/hardwood
|
||||
icon_state = "hardwood"
|
||||
icon = 'icons/turf/wall_masks_vr.dmi'
|
||||
|
||||
/turf/simulated/wall/oakwood
|
||||
icon_state = "oakwood"
|
||||
icon = 'icons/turf/wall_masks_vr.dmi'
|
||||
|
||||
/turf/simulated/wall/pinewood
|
||||
icon_state = "pinewood"
|
||||
icon = 'icons/turf/wall_masks_vr.dmi'
|
||||
|
||||
/turf/simulated/wall/redwood
|
||||
icon_state = "redwood"
|
||||
icon = 'icons/turf/wall_masks_vr.dmi'
|
||||
|
||||
/turf/simulated/wall/stonebricks
|
||||
icon_state = "stonebrick"
|
||||
icon = 'icons/turf/wall_masks_vr.dmi'
|
||||
|
||||
@@ -520,6 +520,8 @@
|
||||
|
||||
if(istype(src, /turf/simulated))
|
||||
var/turf/simulated/T = src
|
||||
if(T.dirt > 0)
|
||||
SEND_GLOBAL_SIGNAL(COMSIG_GLOB_WASHED_FLOOR)
|
||||
T.dirt = 0
|
||||
|
||||
for(var/am in src)
|
||||
|
||||
@@ -137,6 +137,7 @@
|
||||
/obj/item/forensics/sample_kit/proc/take_sample(var/mob/user, var/atom/supplied)
|
||||
var/obj/item/sample/S = new evidence_path(get_turf(user), supplied)
|
||||
to_chat(user, span_notice("You transfer [S.evidence.len] [S.evidence.len > 1 ? "[evidence_type]s" : "[evidence_type]"] to \the [S]."))
|
||||
SEND_GLOBAL_SIGNAL(COMSIG_GLOB_FORENSICS_COLLECTED, supplied, user)
|
||||
|
||||
/obj/item/forensics/sample_kit/afterattack(var/atom/A, var/mob/user, var/proximity)
|
||||
if(!proximity)
|
||||
|
||||
@@ -114,6 +114,7 @@
|
||||
if(sample_type)
|
||||
user.visible_message("\The [user] swabs \the [A] for a sample.", "You swab \the [A] for a sample.")
|
||||
set_used(sample_type, A)
|
||||
SEND_GLOBAL_SIGNAL(COMSIG_GLOB_FORENSICS_COLLECTED, A, user)
|
||||
|
||||
/obj/item/forensics/swab/proc/set_used(var/sample_str, var/atom/source)
|
||||
name = "[initial(name)] ([sample_str] - [source])"
|
||||
|
||||
@@ -147,6 +147,7 @@
|
||||
|
||||
do_extra(user, target)
|
||||
do_sound(user)
|
||||
SEND_GLOBAL_SIGNAL(COMSIG_GLOB_EMOTE_PERFORMED, user, extra_params)
|
||||
|
||||
/decl/emote/proc/replace_target_tokens(var/msg, var/atom/target)
|
||||
. = msg
|
||||
|
||||
@@ -284,7 +284,7 @@
|
||||
return 0
|
||||
for(var/datum/medical_issue/MI in affected.medical_issues)
|
||||
if(MI.cure_surgery == "bone reinforcement")
|
||||
return affected && (affected.robotic < ORGAN_ROBOT) && affected.open >= 2
|
||||
return affected && (affected.robotic < ORGAN_ROBOT) && affected.open >= FLESH_RETRACTED
|
||||
return 0
|
||||
|
||||
/datum/surgery_step/medical_issue/strengthen_bone/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
@@ -325,7 +325,7 @@
|
||||
return 0
|
||||
for(var/datum/medical_issue/MI in affected.medical_issues)
|
||||
if(MI.cure_surgery == "remove growths")
|
||||
return affected && (affected.robotic < ORGAN_ROBOT) && affected.open >= 2
|
||||
return affected && (affected.robotic < ORGAN_ROBOT) && affected.open >= FLESH_RETRACTED
|
||||
return 0
|
||||
|
||||
/datum/surgery_step/medical_issue/remove_growth/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
@@ -366,7 +366,7 @@
|
||||
return 0
|
||||
for(var/datum/medical_issue/MI in affected.medical_issues)
|
||||
if(MI.cure_surgery == "redirect blood vessels")
|
||||
return affected && (affected.robotic < ORGAN_ROBOT) && affected.open >= 2
|
||||
return affected && (affected.robotic < ORGAN_ROBOT) && affected.open >= FLESH_RETRACTED
|
||||
return 0
|
||||
|
||||
/datum/surgery_step/medical_issue/redirect_vessels/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
@@ -407,7 +407,7 @@
|
||||
return 0
|
||||
for(var/datum/medical_issue/MI in affected.medical_issues)
|
||||
if(MI.cure_surgery == "extract object")
|
||||
return affected && (affected.robotic < ORGAN_ROBOT) && affected.open >= 2
|
||||
return affected && (affected.robotic < ORGAN_ROBOT) && affected.open >= FLESH_RETRACTED
|
||||
return 0
|
||||
|
||||
/datum/surgery_step/medical_issue/extract_object/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
@@ -448,7 +448,7 @@
|
||||
return 0
|
||||
for(var/datum/medical_issue/MI in affected.medical_issues)
|
||||
if(MI.cure_surgery == "flesh graft")
|
||||
return affected && (affected.robotic < ORGAN_ROBOT) && affected.open >= 2
|
||||
return affected && (affected.robotic < ORGAN_ROBOT) && affected.open >= FLESH_RETRACTED
|
||||
return 0
|
||||
|
||||
/datum/surgery_step/medical_issue/flesh_graft/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
@@ -492,7 +492,7 @@
|
||||
for(var/obj/item/organ/internal/I in affected.internal_organs)
|
||||
for(var/datum/medical_issue/MI in I.medical_issues)
|
||||
if(MI.cure_surgery == "remove growths")
|
||||
return affected && (affected.robotic < ORGAN_ROBOT) && affected.open >= 2
|
||||
return affected && (affected.robotic < ORGAN_ROBOT) && affected.open >= FLESH_RETRACTED
|
||||
return 0
|
||||
|
||||
/datum/surgery_step/medical_issue/remove_growth_internal/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
@@ -535,7 +535,7 @@
|
||||
for(var/obj/item/organ/internal/I in affected.internal_organs)
|
||||
for(var/datum/medical_issue/MI in I.medical_issues)
|
||||
if(MI.cure_surgery == "redirect blood vessels")
|
||||
return affected && (affected.robotic < ORGAN_ROBOT) && affected.open >= 2
|
||||
return affected && (affected.robotic < ORGAN_ROBOT) && affected.open >= FLESH_RETRACTED
|
||||
return 0
|
||||
|
||||
/datum/surgery_step/medical_issue/redirect_vessels_internal/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
@@ -578,7 +578,7 @@
|
||||
for(var/obj/item/organ/internal/I in affected.internal_organs)
|
||||
for(var/datum/medical_issue/MI in I.medical_issues)
|
||||
if(MI.cure_surgery == "close holes")
|
||||
return affected && (affected.robotic < ORGAN_ROBOT) && affected.open >= 2
|
||||
return affected && (affected.robotic < ORGAN_ROBOT) && affected.open >= FLESH_RETRACTED
|
||||
return 0
|
||||
|
||||
/datum/surgery_step/medical_issue/close_holes/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
@@ -621,7 +621,7 @@
|
||||
for(var/obj/item/organ/internal/I in affected.internal_organs)
|
||||
for(var/datum/medical_issue/MI in I.medical_issues)
|
||||
if(MI.cure_surgery == "ultrasound")
|
||||
return affected && (affected.robotic < ORGAN_ROBOT) && affected.open >= 2
|
||||
return affected && (affected.robotic < ORGAN_ROBOT) && affected.open >= FLESH_RETRACTED
|
||||
return 0
|
||||
|
||||
/datum/surgery_step/medical_issue/ultrasound/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
@@ -664,7 +664,7 @@
|
||||
for(var/obj/item/organ/internal/I in affected.internal_organs)
|
||||
for(var/datum/medical_issue/MI in I.medical_issues)
|
||||
if(MI.cure_surgery == "reoxygenate tissue")
|
||||
return affected && (affected.robotic < ORGAN_ROBOT) && affected.open >= 2
|
||||
return affected && (affected.robotic < ORGAN_ROBOT) && affected.open >= FLESH_RETRACTED
|
||||
return 0
|
||||
|
||||
/datum/surgery_step/medical_issue/reoxygenate_tissue/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
|
||||
@@ -270,6 +270,8 @@
|
||||
result_obj.reagents.trans_to(holder, result_obj.reagents.total_volume)
|
||||
tally++
|
||||
|
||||
if(results.len)
|
||||
SEND_GLOBAL_SIGNAL(COMSIG_GLOB_FOOD_PREPARED, container, results)
|
||||
|
||||
switch(reagent_mix)
|
||||
if (RECIPE_REAGENT_REPLACE)
|
||||
|
||||
@@ -9,6 +9,17 @@
|
||||
per_round_cap = 3 //limited supply!
|
||||
vendor_category = MAINTVENDOR_CONSTRUCTION
|
||||
|
||||
/datum/maint_recycler_vendor_entry/DIY_SifWood
|
||||
name = "SIF WOOD???"
|
||||
desc = "Seeing this stuff for the first time BLUE our minds, but not your wallets!!"
|
||||
object_type_to_spawn = /obj/item/stack/material/wood/sif{amount = 20}
|
||||
item_cost = 15 //not too pricy
|
||||
tagline = "the trees are speaking 👽"
|
||||
ad_message = "SIF! WOOD! WIF! WOOD!"
|
||||
per_person_cap = 1
|
||||
per_round_cap = 3 //limited supply!
|
||||
vendor_category = MAINTVENDOR_CONSTRUCTION
|
||||
|
||||
/datum/maint_recycler_vendor_entry/DIY_HardWood //this one writes itself
|
||||
name = "Hard... Knotty Wood... "
|
||||
desc = "Seriously! this tree sucked! unsuitable for professional construction due to how hard the knots are, the savings (and various aches and pains) are passed onto YOU!!!"
|
||||
@@ -20,6 +31,55 @@
|
||||
per_round_cap = 3 //limited supply!
|
||||
object_type_to_spawn = /obj/item/stack/material/wood/hard{amount = 20}
|
||||
|
||||
/datum/maint_recycler_vendor_entry/DIY_AcaciaWood //this one writes itself
|
||||
name = "Acacia? I 'ardly Know 'er!"
|
||||
desc = "Seriously! this tree sucked! unsuitable for professional construction due to how hard the knots are, the savings (and various aches and pains) are passed onto YOU!!!"
|
||||
tagline = "Tree for the price of one!!!"
|
||||
ad_message = "owo"
|
||||
vendor_category = MAINTVENDOR_CONSTRUCTION
|
||||
per_person_cap = 1
|
||||
per_round_cap = 3 //limited supply!
|
||||
object_type_to_spawn = /obj/item/stack/material/wood/acacia{amount = 20}
|
||||
|
||||
/datum/maint_recycler_vendor_entry/DIY_BirchWood //this one writes itself
|
||||
name = "Hot Birches In Your Area!!"
|
||||
desc = "99 Problems But A Birch Ain't One!"
|
||||
tagline = "BIRCHES! IN! HEAT!"
|
||||
ad_message = "🤤"
|
||||
vendor_category = MAINTVENDOR_CONSTRUCTION
|
||||
per_person_cap = 1
|
||||
per_round_cap = 3 //limited supply!
|
||||
object_type_to_spawn = /obj/item/stack/material/wood/birch{amount = 20}
|
||||
|
||||
/datum/maint_recycler_vendor_entry/DIY_OakWood
|
||||
name = "Oak-y, Pal"
|
||||
desc = "No ACORN-y jokes here, just gen-u-ine oak wood! That's it. Promise."
|
||||
tagline = "Sure thing bud"
|
||||
ad_message = "🤤"
|
||||
vendor_category = MAINTVENDOR_CONSTRUCTION
|
||||
per_person_cap = 1
|
||||
per_round_cap = 3 //limited supply!
|
||||
object_type_to_spawn = /obj/item/stack/material/wood/oak{amount = 20}
|
||||
|
||||
/datum/maint_recycler_vendor_entry/DIY_PineWood
|
||||
name = "Pine For The Fjords..."
|
||||
desc = "Smells like home. And also those little air freshener thingies you put in your car. Do people still have cars?"
|
||||
tagline = "Enjoy the needles"
|
||||
ad_message = "🌲"
|
||||
vendor_category = MAINTVENDOR_CONSTRUCTION
|
||||
per_person_cap = 1
|
||||
per_round_cap = 3 //limited supply!
|
||||
object_type_to_spawn = /obj/item/stack/material/wood/pine{amount = 20}
|
||||
|
||||
/datum/maint_recycler_vendor_entry/DIY_RedWood //this one writes itself
|
||||
name = "REDWOOD? I SURE HAVE!"
|
||||
desc = "This stuff is way too expensive to be in here, but we won't tell anyone if you don't!"
|
||||
tagline = "REDRUM! Wait, no, don't."
|
||||
ad_message = "waow"
|
||||
vendor_category = MAINTVENDOR_CONSTRUCTION
|
||||
per_person_cap = 1
|
||||
per_round_cap = 3 //limited supply!
|
||||
object_type_to_spawn = /obj/item/stack/material/wood/redwood{amount = 20}
|
||||
|
||||
/datum/maint_recycler_vendor_entry/cardboard
|
||||
vendor_category = MAINTVENDOR_CONSTRUCTION
|
||||
|
||||
@@ -104,6 +104,26 @@
|
||||
name = "stack of hardwood"
|
||||
type_to_spawn = /obj/item/stack/material/wood/hard
|
||||
|
||||
/obj/fiftyspawner/birchwood
|
||||
name = "stack of birchwood"
|
||||
type_to_spawn = /obj/item/stack/material/wood/birch
|
||||
|
||||
/obj/fiftyspawner/pinewood
|
||||
name = "stack of pinewood"
|
||||
type_to_spawn = /obj/item/stack/material/wood/pine
|
||||
|
||||
/obj/fiftyspawner/oakwood
|
||||
name = "stack of oakwood"
|
||||
type_to_spawn = /obj/item/stack/material/wood/oak
|
||||
|
||||
/obj/fiftyspawner/acaciawood
|
||||
name = "stack of acaciawood"
|
||||
type_to_spawn = /obj/item/stack/material/wood/acacia
|
||||
|
||||
/obj/fiftyspawner/redwood
|
||||
name = "stack of redwood"
|
||||
type_to_spawn = /obj/item/stack/material/wood/redwood
|
||||
|
||||
/obj/fiftyspawner/log
|
||||
name = "stack of logs"
|
||||
type_to_spawn = /obj/item/stack/material/log
|
||||
@@ -152,7 +172,26 @@
|
||||
name = "stack of stable glamour"
|
||||
type_to_spawn = /obj/item/stack/material/glamour
|
||||
|
||||
//R-UST port
|
||||
/obj/fiftyspawner/deuterium
|
||||
name = "stack of deuterium"
|
||||
type_to_spawn = /obj/item/stack/material/deuterium
|
||||
|
||||
/obj/fiftyspawner/titanium
|
||||
name = "stack of titanium"
|
||||
type_to_spawn = /obj/item/stack/material/titanium
|
||||
|
||||
/obj/fiftyspawner/titanium_glass
|
||||
name = "stack of ti-glass"
|
||||
type_to_spawn = /obj/item/stack/material/glass/titanium
|
||||
|
||||
/obj/fiftyspawner/plastitanium
|
||||
name = "stack of plastitanium"
|
||||
type_to_spawn = /obj/item/stack/material/plastitanium
|
||||
|
||||
/obj/fiftyspawner/plastitanium_hull
|
||||
name = "stack of plastitanium"
|
||||
type_to_spawn = /obj/item/stack/material/plastitanium/hull
|
||||
|
||||
/obj/fiftyspawner/plastitanium_glass
|
||||
name = "stack of plastitanium glass"
|
||||
type_to_spawn = /obj/item/stack/material/glass/plastitanium
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
/obj/fiftyspawner/titanium
|
||||
name = "stack of titanium"
|
||||
type_to_spawn = /obj/item/stack/material/titanium
|
||||
|
||||
/obj/fiftyspawner/titanium_glass
|
||||
name = "stack of ti-glass"
|
||||
type_to_spawn = /obj/item/stack/material/glass/titanium
|
||||
|
||||
/obj/fiftyspawner/plastitanium
|
||||
name = "stack of plastitanium"
|
||||
type_to_spawn = /obj/item/stack/material/plastitanium
|
||||
|
||||
/obj/fiftyspawner/plastitanium_hull
|
||||
name = "stack of plastitanium"
|
||||
type_to_spawn = /obj/item/stack/material/plastitanium/hull
|
||||
|
||||
/obj/fiftyspawner/plastitanium_glass
|
||||
name = "stack of plastitanium glass"
|
||||
type_to_spawn = /obj/item/stack/material/glass/plastitanium
|
||||
@@ -30,7 +30,12 @@
|
||||
new /datum/stack_recipe("wooden sandals", /obj/item/clothing/shoes/sandal, 1, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("wood circlet", /obj/item/clothing/head/woodcirclet, 1, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("clipboard", /obj/item/clipboard, 1, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("wood floor tile", /obj/item/stack/tile/wood, 1, 4, 20, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("wood floor tile", /obj/item/stack/tile/wood, 1, 4, 20, pass_stack_color = FALSE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("large wood floor tile", /obj/item/stack/tile/wood/panel, 1, 4, 20, pass_stack_color = FALSE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("parquet wood floor tile", /obj/item/stack/tile/wood/parquet, 1, 4, 20, pass_stack_color = FALSE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("tiled wood floor tile", /obj/item/stack/tile/wood/tile, 1, 4, 20, pass_stack_color = FALSE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("vertical wood floor tile", /obj/item/stack/tile/wood/vert, 1, 4, 20, pass_stack_color = FALSE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("vertical large wood floor tile", /obj/item/stack/tile/wood/vert_panel, 1, 4, 20, pass_stack_color = FALSE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("wooden chair", /obj/structure/bed/chair/wood, 3, time = 10, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("crossbow frame", /obj/item/crossbowframe, 5, time = 25, one_per_turf = 0, on_floor = 0, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("coffin", /obj/structure/closet/coffin, 5, time = 15, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
@@ -58,11 +63,31 @@
|
||||
|
||||
/datum/material/wood/sif/generate_recipes()
|
||||
..()
|
||||
recipes += new /datum/stack_recipe("alien wood floor tile", /obj/item/stack/tile/wood/sif, 1, 4, 20, pass_stack_color = TRUE)
|
||||
recipes += new /datum/stack_recipe("alien wood floor tile", /obj/item/stack/tile/wood/sif, 1, 4, 20, pass_stack_color = FALSE)
|
||||
recipes += new /datum/stack_recipe("large alien wood floor tile", /obj/item/stack/tile/wood/sif/panel, 1, 4, 20, pass_stack_color = FALSE)
|
||||
recipes += new /datum/stack_recipe("alien wood parquet tile", /obj/item/stack/tile/wood/sif/parquet, 1, 4, 20, pass_stack_color = FALSE)
|
||||
recipes += new /datum/stack_recipe("tiled alien wood floor tile", /obj/item/stack/tile/wood/sif/tile, 1, 4, 20, pass_stack_color = FALSE)
|
||||
recipes += new /datum/stack_recipe("vertical alien wood floor tile", /obj/item/stack/tile/wood/sif/vert, 1, 4, 20, pass_stack_color = FALSE)
|
||||
recipes += new /datum/stack_recipe("vertical large alien wood floor tile", /obj/item/stack/tile/wood/sif/vert_panel, 1, 4, 20, pass_stack_color = FALSE)
|
||||
for(var/datum/stack_recipe/r_recipe in recipes)
|
||||
if(r_recipe.title == "wood floor tile")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
if(r_recipe.title == "large wood floor tile")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
if(r_recipe.title == "parquet wood floor tile")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
if(r_recipe.title == "tiled wood floor tile")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
if(r_recipe.title == "vertical wood floor tile")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
if(r_recipe.title == "vertical large wood floor tile")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
if(r_recipe.title == "wooden chair")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
@@ -80,11 +105,31 @@
|
||||
|
||||
/datum/material/wood/hardwood/generate_recipes()
|
||||
..()
|
||||
recipes += new /datum/stack_recipe("parquet wood floor tile", /obj/item/stack/tile/wood/parquet, 1, 4, 20, pass_stack_color = FALSE)
|
||||
recipes += new /datum/stack_recipe("hardwood floor tile", /obj/item/stack/tile/wood/hardwood, 1, 4, 20, pass_stack_color = FALSE, recycle_material = "[name]")
|
||||
recipes += new /datum/stack_recipe("large hardwood floor tile", /obj/item/stack/tile/wood/hardwood/panel, 1, 4, 20, pass_stack_color = FALSE, recycle_material = "[name]")
|
||||
recipes += new /datum/stack_recipe("parquet hardwood floor tile", /obj/item/stack/tile/wood/hardwood/parquet, 1, 4, 20, pass_stack_color = FALSE, recycle_material = "[name]")
|
||||
recipes += new /datum/stack_recipe("tiled hardwood floor tile", /obj/item/stack/tile/wood/hardwood/tile, 1, 4, 20, pass_stack_color = FALSE, recycle_material = "[name]")
|
||||
recipes += new /datum/stack_recipe("vertical hardwood floor tile", /obj/item/stack/tile/wood/hardwood/vert, 1, 4, 20, pass_stack_color = FALSE)
|
||||
recipes += new /datum/stack_recipe("vertical large hardwood floor tile", /obj/item/stack/tile/wood/hardwood/vert_panel, 1, 4, 20, pass_stack_color = FALSE)
|
||||
for(var/datum/stack_recipe/r_recipe in recipes)
|
||||
if(r_recipe.title == "wood floor tile")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
if(r_recipe.title == "large wood floor tile")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
if(r_recipe.title == "parquet wood floor tile")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
if(r_recipe.title == "tiled wood floor tile")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
if(r_recipe.title == "vertical wood floor tile")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
if(r_recipe.title == "vertical large wood floor tile")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
if(r_recipe.title == "wooden chair")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
@@ -121,7 +166,6 @@
|
||||
icon_colour = "#6f432a"
|
||||
stack_type = /obj/item/stack/material/log/hard
|
||||
|
||||
//VOREStation Addition Start
|
||||
/datum/material/wood/stick
|
||||
name = "wooden stick"
|
||||
icon_colour = "#824B28"
|
||||
@@ -136,4 +180,224 @@
|
||||
|
||||
/datum/material/wood/stick/generate_recipes()
|
||||
return
|
||||
//VOREStation Addition End
|
||||
|
||||
/datum/material/wood/birch
|
||||
name = MAT_BIRCHWOOD
|
||||
stack_type = /obj/item/stack/material/wood/birch
|
||||
icon_colour = "#f6dec0"
|
||||
icon_base = "wood"
|
||||
icon_reinf = "reinf_stone"
|
||||
integrity = 65
|
||||
hardness = 20
|
||||
weight = 20
|
||||
|
||||
/datum/material/wood/birch/generate_recipes()
|
||||
..()
|
||||
recipes += new /datum/stack_recipe("birch floor tile", /obj/item/stack/tile/wood/birch, 1, 4, 20, pass_stack_color = FALSE, recycle_material = "[name]")
|
||||
recipes += new /datum/stack_recipe("large birch floor tile", /obj/item/stack/tile/wood/birch/panel, 1, 4, 20, pass_stack_color = FALSE, recycle_material = "[name]")
|
||||
recipes += new /datum/stack_recipe("parquet birch floor tile", /obj/item/stack/tile/wood/birch/parquet, 1, 4, 20, pass_stack_color = FALSE, recycle_material = "[name]")
|
||||
recipes += new /datum/stack_recipe("tiled birch floor tile", /obj/item/stack/tile/wood/birch/tile, 1, 4, 20, pass_stack_color = FALSE, recycle_material = "[name]")
|
||||
recipes += new /datum/stack_recipe("vertical birch floor tile", /obj/item/stack/tile/wood/birch/vert, 1, 4, 20, pass_stack_color = FALSE)
|
||||
recipes += new /datum/stack_recipe("vertical large birch floor tile", /obj/item/stack/tile/wood/birch/vert_panel, 1, 4, 20, pass_stack_color = FALSE)
|
||||
for(var/datum/stack_recipe/r_recipe in recipes)
|
||||
if(r_recipe.title == "wood floor tile")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
if(r_recipe.title == "large wood floor tile")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
if(r_recipe.title == "parquet wood floor tile")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
if(r_recipe.title == "tiled wood floor tile")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
if(r_recipe.title == "vertical wood floor tile")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
if(r_recipe.title == "vertical large wood floor tile")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
if(r_recipe.title == "wooden chair")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
if(r_recipe.title == "wooden standup figure")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
|
||||
/datum/material/wood/pine
|
||||
name = MAT_PINEWOOD
|
||||
stack_type = /obj/item/stack/material/wood/pine
|
||||
icon_colour = "#cd9d6f"
|
||||
icon_base = "wood"
|
||||
icon_reinf = "reinf_stone"
|
||||
integrity = 65
|
||||
hardness = 20
|
||||
weight = 20
|
||||
|
||||
/datum/material/wood/pine/generate_recipes()
|
||||
..()
|
||||
recipes += new /datum/stack_recipe("pine floor tile", /obj/item/stack/tile/wood/pine, 1, 4, 20, pass_stack_color = FALSE, recycle_material = "[name]")
|
||||
recipes += new /datum/stack_recipe("large pine floor tile", /obj/item/stack/tile/wood/pine/panel, 1, 4, 20, pass_stack_color = FALSE, recycle_material = "[name]")
|
||||
recipes += new /datum/stack_recipe("parquet pine floor tile", /obj/item/stack/tile/wood/pine/parquet, 1, 4, 20, pass_stack_color = FALSE, recycle_material = "[name]")
|
||||
recipes += new /datum/stack_recipe("tiled pine floor tile", /obj/item/stack/tile/wood/pine/tile, 1, 4, 20, pass_stack_color = FALSE, recycle_material = "[name]")
|
||||
recipes += new /datum/stack_recipe("vertical pine floor tile", /obj/item/stack/tile/wood/pine/vert, 1, 4, 20, pass_stack_color = FALSE)
|
||||
recipes += new /datum/stack_recipe("vertical large pine floor tile", /obj/item/stack/tile/wood/pine/vert_panel, 1, 4, 20, pass_stack_color = FALSE)
|
||||
for(var/datum/stack_recipe/r_recipe in recipes)
|
||||
if(r_recipe.title == "wood floor tile")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
if(r_recipe.title == "large wood floor tile")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
if(r_recipe.title == "parquet wood floor tile")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
if(r_recipe.title == "tiled wood floor tile")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
if(r_recipe.title == "vertical wood floor tile")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
if(r_recipe.title == "vertical large wood floor tile")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
if(r_recipe.title == "wooden chair")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
if(r_recipe.title == "wooden standup figure")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
|
||||
/datum/material/wood/oak
|
||||
name = MAT_OAKWOOD
|
||||
stack_type = /obj/item/stack/material/wood/oak
|
||||
icon_colour = "#674928"
|
||||
icon_base = "wood"
|
||||
icon_reinf = "reinf_stone"
|
||||
integrity = 65
|
||||
hardness = 20
|
||||
weight = 20
|
||||
|
||||
/datum/material/wood/oak/generate_recipes()
|
||||
..()
|
||||
recipes += new /datum/stack_recipe("oak floor tile", /obj/item/stack/tile/wood/oak, 1, 4, 20, pass_stack_color = FALSE, recycle_material = "[name]")
|
||||
recipes += new /datum/stack_recipe("large oak floor tile", /obj/item/stack/tile/wood/oak/panel, 1, 4, 20, pass_stack_color = FALSE, recycle_material = "[name]")
|
||||
recipes += new /datum/stack_recipe("parquet oak floor tile", /obj/item/stack/tile/wood/oak/parquet, 1, 4, 20, pass_stack_color = FALSE, recycle_material = "[name]")
|
||||
recipes += new /datum/stack_recipe("tiled oak floor tile", /obj/item/stack/tile/wood/oak/tile, 1, 4, 20, pass_stack_color = FALSE, recycle_material = "[name]")
|
||||
recipes += new /datum/stack_recipe("vertical oak floor tile", /obj/item/stack/tile/wood/oak/vert, 1, 4, 20, pass_stack_color = FALSE)
|
||||
recipes += new /datum/stack_recipe("vertical large oak floor tile", /obj/item/stack/tile/wood/oak/vert_panel, 1, 4, 20, pass_stack_color = FALSE)
|
||||
for(var/datum/stack_recipe/r_recipe in recipes)
|
||||
if(r_recipe.title == "wood floor tile")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
if(r_recipe.title == "large wood floor tile")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
if(r_recipe.title == "parquet wood floor tile")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
if(r_recipe.title == "tiled wood floor tile")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
if(r_recipe.title == "vertical wood floor tile")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
if(r_recipe.title == "vertical large wood floor tile")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
if(r_recipe.title == "wooden chair")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
if(r_recipe.title == "wooden standup figure")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
|
||||
/datum/material/wood/acacia
|
||||
name = MAT_ACACIAWOOD
|
||||
stack_type = /obj/item/stack/material/wood/acacia
|
||||
icon_colour = "#b75e12"
|
||||
icon_base = "wood"
|
||||
icon_reinf = "reinf_stone"
|
||||
integrity = 65
|
||||
hardness = 20
|
||||
weight = 20
|
||||
|
||||
/datum/material/wood/acacia/generate_recipes()
|
||||
..()
|
||||
recipes += new /datum/stack_recipe("acacia floor tile", /obj/item/stack/tile/wood/acacia, 1, 4, 20, pass_stack_color = FALSE, recycle_material = "[name]")
|
||||
recipes += new /datum/stack_recipe("large acacia floor tile", /obj/item/stack/tile/wood/acacia/panel, 1, 4, 20, pass_stack_color = FALSE, recycle_material = "[name]")
|
||||
recipes += new /datum/stack_recipe("parquet acacia floor tile", /obj/item/stack/tile/wood/acacia/parquet, 1, 4, 20, pass_stack_color = FALSE, recycle_material = "[name]")
|
||||
recipes += new /datum/stack_recipe("tiled acacia floor tile", /obj/item/stack/tile/wood/acacia/tile, 1, 4, 20, pass_stack_color = FALSE, recycle_material = "[name]")
|
||||
recipes += new /datum/stack_recipe("vertical acacia floor tile", /obj/item/stack/tile/wood/acacia/vert, 1, 4, 20, pass_stack_color = FALSE)
|
||||
recipes += new /datum/stack_recipe("vertical large acacia floor tile", /obj/item/stack/tile/wood/acacia/vert_panel, 1, 4, 20, pass_stack_color = FALSE)
|
||||
for(var/datum/stack_recipe/r_recipe in recipes)
|
||||
if(r_recipe.title == "wood floor tile")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
if(r_recipe.title == "large wood floor tile")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
if(r_recipe.title == "parquet wood floor tile")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
if(r_recipe.title == "tiled wood floor tile")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
if(r_recipe.title == "vertical wood floor tile")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
if(r_recipe.title == "vertical large wood floor tile")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
if(r_recipe.title == "wooden chair")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
if(r_recipe.title == "wooden standup figure")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
|
||||
/datum/material/wood/redwood
|
||||
name = MAT_REDWOOD
|
||||
stack_type = /obj/item/stack/material/wood/redwood
|
||||
icon_colour = "#a45a52"
|
||||
icon_base = "wood"
|
||||
table_icon_base = "stone"
|
||||
icon_reinf = "reinf_stone"
|
||||
integrity = 65
|
||||
hardness = 20
|
||||
weight = 20
|
||||
|
||||
/datum/material/wood/redwood/generate_recipes()
|
||||
..()
|
||||
recipes += new /datum/stack_recipe("redwood floor tile", /obj/item/stack/tile/wood/redwood, 1, 4, 20, pass_stack_color = FALSE, recycle_material = "[name]")
|
||||
recipes += new /datum/stack_recipe("large redwood floor tile", /obj/item/stack/tile/wood/redwood/panel, 1, 4, 20, pass_stack_color = FALSE, recycle_material = "[name]")
|
||||
recipes += new /datum/stack_recipe("parquet redwood floor tile", /obj/item/stack/tile/wood/redwood/parquet, 1, 4, 20, pass_stack_color = FALSE, recycle_material = "[name]")
|
||||
recipes += new /datum/stack_recipe("tiled redwood floor tile", /obj/item/stack/tile/wood/redwood/tile, 1, 4, 20, pass_stack_color = FALSE, recycle_material = "[name]")
|
||||
recipes += new /datum/stack_recipe("vertical redwood floor tile", /obj/item/stack/tile/wood/redwood/vert, 1, 4, 20, pass_stack_color = FALSE)
|
||||
recipes += new /datum/stack_recipe("vertical large redwood floor tile", /obj/item/stack/tile/wood/redwood/vert_panel, 1, 4, 20, pass_stack_color = FALSE)
|
||||
for(var/datum/stack_recipe/r_recipe in recipes)
|
||||
if(r_recipe.title == "wood floor tile")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
if(r_recipe.title == "large wood floor tile")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
if(r_recipe.title == "parquet wood floor tile")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
if(r_recipe.title == "tiled wood floor tile")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
if(r_recipe.title == "vertical wood floor tile")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
if(r_recipe.title == "vertical large wood floor tile")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
if(r_recipe.title == "wooden chair")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
if(r_recipe.title == "wooden standup figure")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/obj/item/stack/material/wood
|
||||
name = "wooden plank"
|
||||
name = MAT_WOOD + " plank"
|
||||
icon_state = "sheet-wood"
|
||||
default_type = MAT_WOOD
|
||||
strict_color_stacking = TRUE
|
||||
@@ -9,16 +9,46 @@
|
||||
no_variants = FALSE
|
||||
|
||||
/obj/item/stack/material/wood/sif
|
||||
name = "alien wooden plank"
|
||||
name = MAT_SIFWOOD + " plank"
|
||||
color = "#0099cc"
|
||||
default_type = MAT_SIFWOOD
|
||||
|
||||
/obj/item/stack/material/wood/hard
|
||||
name = "hardwood plank"
|
||||
name = MAT_HARDWOOD + " plank"
|
||||
color = "#42291a"
|
||||
default_type = MAT_HARDWOOD
|
||||
description_info = "Rich, lustrous hardwood, imported from offworld at moderate expense. Mostly used for luxurious furniture, and not very good for weapons or other structures."
|
||||
|
||||
/obj/item/stack/material/wood/birch
|
||||
name = MAT_BIRCHWOOD + " plank"
|
||||
color = "#f6dec0"
|
||||
default_type = MAT_BIRCHWOOD
|
||||
description_info = "Sturdy hardwood, birch makes for beautiful furniture but also has many secondary applications. It's also an exceptionally good choice for firewood."
|
||||
|
||||
/obj/item/stack/material/wood/pine
|
||||
name = MAT_PINEWOOD + " plank"
|
||||
color = "#cd9d6f"
|
||||
default_type = MAT_PINEWOOD
|
||||
description_info = "Planks from tall, fast-growing coniferous pine trees, dense and mostly used for construction or furnishings."
|
||||
|
||||
/obj/item/stack/material/wood/oak
|
||||
name = MAT_OAKWOOD + " plank"
|
||||
color = "#674928"
|
||||
default_type = MAT_OAKWOOD
|
||||
description_info = "A sturdy, fairly common hardwood. A good choice for furnishings and structures. Oak barrels can be used to age alcohol, whilst oakwood chips are often used for smoking meats and cheeses."
|
||||
|
||||
/obj/item/stack/material/wood/acacia
|
||||
name = MAT_ACACIAWOOD + " plank"
|
||||
color = "#b75e12"
|
||||
default_type = MAT_ACACIAWOOD
|
||||
description_info = "Vibrant reddish-orange acacia makes a striking statement wherever it's used, and the bark of some acacia species is useful for tanning leather."
|
||||
|
||||
/obj/item/stack/material/wood/redwood
|
||||
name = MAT_REDWOOD + " plank"
|
||||
color = "#a45a52"
|
||||
default_type = MAT_REDWOOD
|
||||
description_info = "Blazing orange-red redwood planks. The trees used to make this can grow for centuries, and are often protected. This wood has been sustainably harvested from special tree nurseries, rather than chopping down ancient giants."
|
||||
|
||||
/obj/item/stack/material/log
|
||||
name = MAT_LOG
|
||||
icon_state = "sheet-log"
|
||||
|
||||
@@ -79,7 +79,6 @@
|
||||
outgoing_melee_damage_percent = 0.9 // 10% less melee damage.
|
||||
disable_duration_percent = 1.25 // Stuns last 25% longer.
|
||||
incoming_healing_percent = 0.9 // -10% to all healing
|
||||
slowdown = 0.5 // Slower, by a smidge.
|
||||
evasion = -5 // 5% easier to hit.
|
||||
accuracy_dispersion = 1 // Inaccurate trait level of tile dispersion.
|
||||
|
||||
@@ -93,16 +92,6 @@
|
||||
|
||||
return ..()
|
||||
|
||||
/datum/modifier/franken_sickness/tick()
|
||||
if(holder.stat != DEAD)
|
||||
if(ishuman(holder))
|
||||
var/mob/living/carbon/human/F = holder
|
||||
if(F.can_defib)
|
||||
F.can_defib = 0
|
||||
|
||||
/datum/modifier/franken_sickness/on_expire() //Not permanent, but its child is.
|
||||
holder.add_modifier(/datum/modifier/franken_recovery, 0)
|
||||
|
||||
/datum/modifier/franken_recovery //When Franken_Sickness expires, this will be permanently applied in its place.
|
||||
name = "neural recovery"
|
||||
desc = "You feel out of touch, as your central nervous system is still recovering from being repaired."
|
||||
|
||||
@@ -1216,7 +1216,7 @@
|
||||
if(src.pulse)
|
||||
to_chat(usr, span_notice("[self ? "You have a" : "[src] has a"] pulse! Counting..."))
|
||||
else
|
||||
to_chat(usr, span_danger("[src] has no pulse!")) //it is REALLY UNLIKELY that a dead person would check his own pulse
|
||||
to_chat(usr, span_danger("[src] has no pulse!"))
|
||||
return
|
||||
|
||||
to_chat(usr, span_filter_notice("You must[self ? "" : " both"] remain still until counting is finished."))
|
||||
|
||||
@@ -75,13 +75,13 @@
|
||||
|
||||
|
||||
has_organ = list(
|
||||
O_HEART = /obj/item/organ/internal/heart/vox,
|
||||
O_LUNGS = /obj/item/organ/internal/lungs/vox,
|
||||
O_VOICE = /obj/item/organ/internal/voicebox,
|
||||
O_LIVER = /obj/item/organ/internal/liver/vox,
|
||||
O_KIDNEYS = /obj/item/organ/internal/kidneys/vox,
|
||||
O_BRAIN = /obj/item/organ/internal/brain/vox,
|
||||
O_EYES = /obj/item/organ/internal/eyes,
|
||||
O_HEART = /obj/item/organ/internal/heart/vox,
|
||||
O_LUNGS = /obj/item/organ/internal/lungs/vox,
|
||||
O_VOICE = /obj/item/organ/internal/voicebox/vox,
|
||||
O_LIVER = /obj/item/organ/internal/liver/vox,
|
||||
O_KIDNEYS = /obj/item/organ/internal/kidneys/vox,
|
||||
O_BRAIN = /obj/item/organ/internal/brain/vox,
|
||||
O_EYES = /obj/item/organ/internal/eyes,
|
||||
)
|
||||
|
||||
genders = list(NEUTER)
|
||||
|
||||
@@ -205,7 +205,7 @@
|
||||
cost = -1 //CHOMPEdit - Keep original value
|
||||
can_take = ORGANICS
|
||||
|
||||
is_genetrait = TRUE
|
||||
is_genetrait = FALSE
|
||||
hidden = FALSE
|
||||
activity_bounds = DNA_HARDER_BOUNDS // Shouldn't be easy for genetics to find this
|
||||
|
||||
|
||||
@@ -32,6 +32,8 @@
|
||||
feeding = client.prefs_vr.feeding
|
||||
can_be_drop_prey = client.prefs_vr.can_be_drop_prey
|
||||
can_be_drop_pred = client.prefs_vr.can_be_drop_pred
|
||||
can_be_afk_prey = client.prefs_vr.can_be_afk_prey
|
||||
can_be_afk_pred = client.prefs_vr.can_be_afk_pred
|
||||
throw_vore = client.prefs_vr.throw_vore
|
||||
food_vore = client.prefs_vr.food_vore
|
||||
consume_liquid_belly = client.prefs_vr.consume_liquid_belly
|
||||
@@ -65,6 +67,7 @@
|
||||
autotransferable = client.prefs_vr.autotransferable
|
||||
noisy_full = client.prefs_vr.noisy_full
|
||||
strip_pref = client.prefs_vr.strip_pref
|
||||
contaminate_pref = client.prefs_vr.contaminate_pref
|
||||
vore_sprite_color = client.prefs_vr.vore_sprite_color
|
||||
vore_sprite_multiply = client.prefs_vr.vore_sprite_multiply
|
||||
no_latejoin_vore_warning = client.prefs_vr.no_latejoin_vore_warning
|
||||
|
||||
@@ -470,6 +470,8 @@ It's fairly easy to fix if dealing with single letters but not so much with comp
|
||||
|
||||
if(subject && subject.forbid_seeing_deadchat && !check_rights_for(subject.client, R_HOLDER))
|
||||
return // Can't talk in deadchat if you can't see it.
|
||||
if(ismob(subject))
|
||||
SEND_GLOBAL_SIGNAL(COMSIG_GLOB_DEAD_SAY, subject, message)
|
||||
|
||||
for(var/mob/M in GLOB.player_list)
|
||||
if(M.client && ((!isnewplayer(M) && M.stat == DEAD) || (check_rights_for(M.client, R_HOLDER) && M.client?.prefs?.read_preference(/datum/preference/toggle/holder/show_staff_dsay))) && M.client?.prefs?.read_preference(/datum/preference/toggle/show_dsay))
|
||||
|
||||
@@ -1204,6 +1204,22 @@
|
||||
do_colouration = 1
|
||||
color_blend_mode = ICON_MULTIPLY
|
||||
|
||||
/datum/sprite_accessory/ears/swepthornstricorn
|
||||
name = "Horns, swept back, Tricorn"
|
||||
desc = ""
|
||||
icon_state = "swept_horns_tricorn"
|
||||
do_colouration = 1
|
||||
color_blend_mode = ICON_MULTIPLY
|
||||
|
||||
/datum/sprite_accessory/ears/fourlowears
|
||||
name = "Four Horizontal Ears with Frills"
|
||||
desc = ""
|
||||
icon_state = "fourlowears"
|
||||
extra_overlay = "fourlowears_inner"
|
||||
extra_overlay2 = "fourlowears_frills"
|
||||
do_colouration = 1
|
||||
color_blend_mode = ICON_MULTIPLY
|
||||
|
||||
//Dino frills
|
||||
/datum/sprite_accessory/ears/dino_frills
|
||||
name = "triceratops frills"
|
||||
|
||||
@@ -2852,6 +2852,18 @@ includes scars and tattoos
|
||||
color_blend_mode = ICON_MULTIPLY
|
||||
body_parts = list(BP_HEAD)
|
||||
|
||||
/datum/sprite_accessory/marking/sharpsnout
|
||||
name = "Sharp Snout"
|
||||
icon_state = "sharpsnout"
|
||||
color_blend_mode = ICON_MULTIPLY
|
||||
body_parts = list(BP_HEAD)
|
||||
|
||||
/datum/sprite_accessory/marking/sharpsnoutlower
|
||||
name = "Sharp Snout(lower)"
|
||||
icon_state = "lowersharpsnout"
|
||||
color_blend_mode = ICON_MULTIPLY
|
||||
body_parts = list(BP_HEAD)
|
||||
|
||||
/datum/sprite_accessory/marking/longsnout
|
||||
name = "Long, Sharp Snout"
|
||||
icon_state = "longsharpsnout"
|
||||
@@ -2876,6 +2888,36 @@ includes scars and tattoos
|
||||
color_blend_mode = ICON_MULTIPLY
|
||||
body_parts = list(BP_HEAD)
|
||||
|
||||
/datum/sprite_accessory/marking/snouttop
|
||||
name = "Top of Snout"
|
||||
icon_state = "topofsnout"
|
||||
color_blend_mode = ICON_MULTIPLY
|
||||
body_parts = list(BP_HEAD)
|
||||
|
||||
/datum/sprite_accessory/marking/nosering
|
||||
name = "Snout Ring (Use with Sharp Snout)"
|
||||
icon_state = "nosering"
|
||||
color_blend_mode = ICON_MULTIPLY
|
||||
body_parts = list(BP_HEAD)
|
||||
|
||||
/datum/sprite_accessory/marking/bigsoftbelly
|
||||
name = "Big Soft Belly"
|
||||
icon_state = "bigsoftbelly"
|
||||
color_blend_mode = ICON_MULTIPLY
|
||||
body_parts = list(BP_TORSO,BP_GROIN)
|
||||
|
||||
/datum/sprite_accessory/marking/fluffruff
|
||||
name = "Fluffy Neck Ruff"
|
||||
icon_state = "fluffruff"
|
||||
color_blend_mode = ICON_MULTIPLY
|
||||
body_parts = list(BP_TORSO)
|
||||
|
||||
/datum/sprite_accessory/marking/gauntlets
|
||||
name = "Clawed Gauntlets"
|
||||
icon_state = "gauntlets"
|
||||
color_blend_mode = ICON_MULTIPLY
|
||||
body_parts = list(BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND)
|
||||
|
||||
/datum/sprite_accessory/marking/boneplates
|
||||
name = "Bony Leg Plates"
|
||||
icon_state = "bonyplatesplantigrade"
|
||||
|
||||
@@ -1685,6 +1685,28 @@
|
||||
name = "Anteater tail"
|
||||
icon_state = "anteater_tail"
|
||||
|
||||
/datum/sprite_accessory/tail/longtail/brush
|
||||
name = "Snake Tail with Brush"
|
||||
icon_state = "bigsnaketailbrush"
|
||||
extra_overlay = "bigsnaketailbrush_brush"
|
||||
|
||||
/datum/sprite_accessory/tail/longtail/brushscutes
|
||||
name = "Snake Tail with Brush and Scutes"
|
||||
icon_state = "bigsnaketailbrushunder"
|
||||
extra_overlay = "bigsnaketailbrushunder_scutes"
|
||||
extra_overlay2 = "bigsnaketailbrush_brush"
|
||||
|
||||
/datum/sprite_accessory/tail/longtail/clawscutes
|
||||
name = "Snake Tail with Claw and Scutes"
|
||||
icon_state = "bigsnaketailbrushunder"
|
||||
extra_overlay = "bigsnaketailbrushunder_scutes"
|
||||
extra_overlay2 = "bigsnaketailclaw_claw"
|
||||
|
||||
/datum/sprite_accessory/tail/longtail/claw
|
||||
name = "Snake Tail with Claw"
|
||||
icon_state = "bigsnaketailbrush"
|
||||
extra_overlay = "bigsnaketailclaw_claw"
|
||||
|
||||
|
||||
/datum/sprite_accessory/tail/small_bugbum
|
||||
name = "Bug Abdomen, Alt, Small (Dual-Color)"
|
||||
|
||||
@@ -1436,3 +1436,11 @@
|
||||
name = "Tree Roots (Oak)"
|
||||
icon_state = "tree_oak_roots"
|
||||
can_ride = 0
|
||||
|
||||
/datum/sprite_accessory/tail/longtail/scug // Wawa
|
||||
name = "Catslug Tail"
|
||||
icon_state = "scug"
|
||||
|
||||
/datum/sprite_accessory/tail/longtail/scug/dots
|
||||
name = "Catslug Tail Dotted"
|
||||
extra_overlay = "scug_markings"
|
||||
|
||||
@@ -468,6 +468,14 @@
|
||||
color_blend_mode = ICON_MULTIPLY
|
||||
extra_overlay = "cloakmoth_eyes"
|
||||
|
||||
/datum/sprite_accessory/wing/cybertendrils
|
||||
name = "Cyber Tendrils"
|
||||
desc = ""
|
||||
icon_state = "cybertendrils"
|
||||
do_colouration = 1
|
||||
color_blend_mode = ICON_MULTIPLY
|
||||
extra_overlay = "cybertendrils_plugs"
|
||||
|
||||
/datum/sprite_accessory/wing/jet_wing
|
||||
name = "Aeromorph Jet Wings (Colorable)"
|
||||
desc = ""
|
||||
|
||||
@@ -186,20 +186,23 @@ BLOOD_VOLUME_SURVIVE = 40
|
||||
///Second, we process internal bleeding.
|
||||
for(var/datum/wound/internal_bleeding/W in temp.wounds)
|
||||
blood_loss_divisor = blood_loss_divisor+10 //IB is slower bloodloss than normal.
|
||||
var/bicardose = reagents.get_reagent_amount(REAGENT_ID_BICARIDINE)
|
||||
var/inaprovaline = reagents.get_reagent_amount(REAGENT_ID_INAPROVALINE)
|
||||
var/bicardose
|
||||
if(reagents.get_reagent_amount(REAGENT_ID_BICARIDINE) || reagents.get_reagent_amount(REAGENT_ID_BICARIDAZE))
|
||||
bicardose = TRUE
|
||||
var/inaprovaline
|
||||
if(reagents.get_reagent_amount(REAGENT_ID_INAPROVALINE) || reagents.get_reagent_amount(REAGENT_ID_INAPROVALAZE))
|
||||
inaprovaline = TRUE
|
||||
var/myeldose = reagents.get_reagent_amount(REAGENT_ID_MYELAMINE)
|
||||
if(!(W.can_autoheal() || (bicardose && inaprovaline) || myeldose)) //bicaridine and inaprovaline stop internal wounds from growing bigger with time, unless it is so small that it is already healing
|
||||
W.open_wound(0.1)
|
||||
if(prob(1))
|
||||
custom_pain("You feel a stabbing pain in your [temp.name]!", 50)
|
||||
if(CE_STABLE in chem_effects)
|
||||
if((CE_STABLE in chem_effects) || myeldose)
|
||||
blood_loss_divisor = max(blood_loss_divisor + 30, 1) //Inaprovaline is great on internal wounds.
|
||||
if(temp.applied_pressure) //Putting pressure on the afflicted wound helps stop the arterial bleeding.
|
||||
if(ishuman(temp.applied_pressure))
|
||||
var/mob/living/carbon/human/H = temp.applied_pressure
|
||||
H.bloody_hands(src, 0)
|
||||
blood_loss_divisor += 30 //If you're putting pressure on that limb due to there being an external bleed there, you apply some pressure to the internal bleed as well.
|
||||
blood_loss_divisor += 30
|
||||
if(W.clamped)
|
||||
blood_loss_divisor = blood_loss_divisor * 10 //We hemostatted the internal bleeding. Bloodloss is 10 times slower.
|
||||
remove_blood(W.damage/blood_loss_divisor) //line should possibly be moved to handle_blood, so all the bleeding stuff is in one place. //Hi. 2025 here. Just did that. ~Diana
|
||||
|
||||
///Thirdly, we check to see if the limb is bleeding EXTERNALLY
|
||||
|
||||
@@ -6,7 +6,7 @@ GLOBAL_LIST_BOILERPLATE(all_brain_organs, /obj/item/organ/internal/brain)
|
||||
desc = "A piece of juicy meat found in a person's head."
|
||||
organ_tag = O_BRAIN
|
||||
parent_organ = BP_HEAD
|
||||
vital = 1
|
||||
vital = TRUE
|
||||
icon_state = "brain2"
|
||||
force = 1.0
|
||||
w_class = ITEMSIZE_SMALL
|
||||
@@ -177,7 +177,6 @@ GLOBAL_LIST_BOILERPLATE(all_brain_organs, /obj/item/organ/internal/brain)
|
||||
parent_organ = BP_HEAD
|
||||
icon = 'icons/mob/alien.dmi'
|
||||
icon_state = "chitin"
|
||||
vital = 1
|
||||
can_assist = FALSE
|
||||
|
||||
/obj/item/organ/internal/brain/xeno
|
||||
|
||||
@@ -48,14 +48,7 @@
|
||||
parent_organ = BP_HEAD
|
||||
icon_state = "brain_prosthetic"
|
||||
organ_tag = "stack"
|
||||
vital = 1
|
||||
var/backup_time = 0
|
||||
var/datum/mind/backup
|
||||
|
||||
/obj/item/organ/internal/stack/process()
|
||||
if(owner && owner.stat != DEAD && !is_broken())
|
||||
backup_time = world.time
|
||||
if(owner.mind) backup = owner.mind
|
||||
vital = TRUE
|
||||
|
||||
/obj/item/organ/internal/stack/vox/stack
|
||||
name = "vox cortical stack"
|
||||
|
||||
@@ -140,7 +140,7 @@ var/list/organ_cache = list()
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
handle_organ_mod_special(TRUE)
|
||||
if(owner && vital)
|
||||
owner.can_defib = 0
|
||||
owner.can_defib = FALSE
|
||||
owner.death()
|
||||
|
||||
/obj/item/organ/proc/adjust_germ_level(var/amount) // Unless you're setting germ level directly to 0, use this proc instead
|
||||
|
||||
@@ -736,13 +736,15 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
handle_germ_effects()
|
||||
|
||||
/obj/item/organ/external/proc/handle_germ_sync()
|
||||
if(owner && isbelly(owner.loc)) //If we're in a belly, just skip infection spreading. This leads to extended vore scenes killing via infection.
|
||||
return
|
||||
var/antibiotics = owner.chem_effects[CE_ANTIBIOTIC]
|
||||
for(var/datum/wound/W in wounds)
|
||||
//Open wounds can become infected
|
||||
if (owner.germ_level > W.germ_level && W.infection_check())
|
||||
if(owner.germ_level > W.germ_level && W.infection_check())
|
||||
W.germ_level++
|
||||
|
||||
if (antibiotics < ANTIBIO_NORM)
|
||||
if(!antibiotics)
|
||||
for(var/datum/wound/W in wounds)
|
||||
//Infected wounds raise the organ's germ level
|
||||
if (W.germ_level > germ_level)
|
||||
|
||||
@@ -32,8 +32,8 @@
|
||||
min_broken_damage = 50
|
||||
w_class = ITEMSIZE_HUGE
|
||||
body_part = UPPER_TORSO
|
||||
vital = 1
|
||||
cannot_amputate = 1
|
||||
vital = TRUE
|
||||
cannot_amputate = TRUE
|
||||
parent_organ = null
|
||||
gendered_icon = 1
|
||||
|
||||
@@ -242,5 +242,5 @@
|
||||
amputation_point = "branch"
|
||||
joint = "structural ligament"
|
||||
dislocated = -1
|
||||
vital = 0
|
||||
vital = FALSE
|
||||
slot_flags = SLOT_BELT
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
icon_state = "scell"
|
||||
organ_tag = O_CELL
|
||||
parent_organ = BP_TORSO
|
||||
vital = 1
|
||||
vital = TRUE
|
||||
var/defib_timer = 1 // This sits in the brain organ slot, but is not a brain.
|
||||
|
||||
/obj/item/organ/internal/cell/Initialize(mapload, internal)
|
||||
@@ -34,7 +34,7 @@
|
||||
name = "brain interface"
|
||||
organ_tag = O_BRAIN
|
||||
parent_organ = BP_HEAD
|
||||
vital = 1
|
||||
vital = TRUE
|
||||
var/brain_type = /obj/item/mmi
|
||||
var/obj/item/mmi/stored_mmi
|
||||
robotic = ORGAN_ASSISTED
|
||||
|
||||
@@ -51,10 +51,10 @@
|
||||
|
||||
/obj/item/organ/external/head/unbreakable/slime //They don't need this anymore.
|
||||
nonsolid = 1
|
||||
cannot_gib = 0
|
||||
vital = 0
|
||||
cannot_gib = FALSE
|
||||
vital = FALSE
|
||||
max_damage = 45 //ChompEdit matching our changes to broken bones for less squishy people.
|
||||
encased = 0
|
||||
encased = FALSE
|
||||
spread_dam = 1
|
||||
|
||||
/*
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
min_broken_damage = 60 // CHOMPEdit: Increase all min_broken_damage (Ribs should take more force to break)
|
||||
w_class = ITEMSIZE_HUGE
|
||||
body_part = UPPER_TORSO
|
||||
vital = 1
|
||||
vital = TRUE
|
||||
amputation_point = "spine"
|
||||
joint = "neck"
|
||||
dislocated = -1
|
||||
@@ -62,7 +62,7 @@
|
||||
min_broken_damage = 50 // CHOMPEdit: Increase all min_broken_damage
|
||||
w_class = ITEMSIZE_LARGE
|
||||
body_part = LOWER_TORSO
|
||||
vital = 1
|
||||
vital = TRUE
|
||||
parent_organ = BP_TORSO
|
||||
amputation_point = "lumbar"
|
||||
joint = "hip"
|
||||
@@ -275,7 +275,7 @@
|
||||
min_broken_damage = 50 // CHOMPEdit: Increase all min_broken_damage
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
body_part = HEAD
|
||||
vital = 1
|
||||
vital = TRUE
|
||||
parent_organ = BP_TORSO
|
||||
joint = "jaw"
|
||||
amputation_point = "neck"
|
||||
|
||||
@@ -26,5 +26,9 @@
|
||||
parent_organ = BP_TORSO
|
||||
color = "#0033cc"
|
||||
|
||||
/obj/item/organ/internal/voicebox/vox
|
||||
color = "#3c5b7b"
|
||||
will_assist_languages = list(LANGUAGE_VOX) //Fixes them from knowing galcommon off the rip.
|
||||
|
||||
/obj/item/organ/external/groin/vox //vox have an extended ribcage for extra protection.
|
||||
encased = "lower ribcage"
|
||||
|
||||
@@ -114,7 +114,7 @@
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/reagent_refinery/filter/handle_transfer(var/atom/origin_machine, var/datum/reagents/RT, var/source_forward_dir, var/transfer_rate, var/filter_id = "")
|
||||
// pumps, furnaces and filters can only be FED in a straight line
|
||||
// pumps, furnaces, splitters and filters can only be FED in a straight line
|
||||
if(source_forward_dir != dir)
|
||||
return 0
|
||||
. = ..(origin_machine, RT, source_forward_dir, transfer_rate, filter_id)
|
||||
|
||||
@@ -193,7 +193,7 @@
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/reagent_refinery/furnace/handle_transfer(var/atom/origin_machine, var/datum/reagents/RT, var/source_forward_dir, var/transfer_rate, var/filter_id = "")
|
||||
// pumps, furnaces and filters can only be FED in a straight line
|
||||
// pumps, furnaces, splitters and filters can only be FED in a straight line
|
||||
if(source_forward_dir != dir)
|
||||
return 0
|
||||
. = ..(origin_machine, RT, source_forward_dir, transfer_rate, filter_id)
|
||||
|
||||
@@ -41,7 +41,10 @@
|
||||
var/obj/machinery/other = locate(/obj/machinery/reagent_refinery) in T
|
||||
var/intake = FALSE
|
||||
if(other && other.anchored)// Waste processors do not connect to anything as outgoing
|
||||
if(!istype(other,/obj/machinery/reagent_refinery/waste_processor))
|
||||
if(istype(other,/obj/machinery/reagent_refinery/splitter))
|
||||
if(GLOB.reverse_dir[dir] in list(turn(other.dir,90),turn(other.dir,-90)))
|
||||
intake = TRUE
|
||||
else if(!istype(other,/obj/machinery/reagent_refinery/waste_processor))
|
||||
// weird handling for side connections... Otherwise, anything pointing into use gets connected back!
|
||||
if(istype(other,/obj/machinery/reagent_refinery/filter))
|
||||
var/obj/machinery/reagent_refinery/filter/filt = other
|
||||
|
||||
@@ -99,7 +99,7 @@
|
||||
return 0
|
||||
if(active_power_usage > 0 && !can_use_power_oneoff(active_power_usage))
|
||||
return 0
|
||||
if(!istype(target,/obj/machinery/reagent_refinery)) // cannot transfer into grinders anyway, so it's fine to do it this way.
|
||||
if(!istype(target,/obj/machinery/reagent_refinery) || istype(target,/obj/machinery/reagent_refinery/grinder)) // Grinders don't allow input
|
||||
return 0
|
||||
var/transfered = target.handle_transfer(src,RT,source_forward_dir, amount_per_transfer_from_this, filter_id)
|
||||
if(transfered > 0 && active_power_usage > 0)
|
||||
@@ -153,3 +153,40 @@
|
||||
// No power needed
|
||||
if(flags & REFINERY_TUTORIAL_NOPOWER)
|
||||
examine_list += "Does not require power. "
|
||||
|
||||
/// Checks neighbouring machines for if we should connect visually to them
|
||||
/obj/machinery/reagent_refinery/proc/update_input_connection_overlays(overlay_state)
|
||||
for(var/direction in GLOB.cardinal)
|
||||
var/turf/T = get_step(get_turf(src),direction)
|
||||
var/obj/machinery/reagent_refinery/other = locate() in T
|
||||
if(!other?.anchored)
|
||||
continue
|
||||
|
||||
// Waste processors do not connect to anything as outgoing
|
||||
if(istype(other,/obj/machinery/reagent_refinery/waste_processor))
|
||||
continue
|
||||
|
||||
// Filter allows side connection
|
||||
if(istype(other,/obj/machinery/reagent_refinery/filter))
|
||||
var/obj/machinery/reagent_refinery/filter/filt = other
|
||||
var/check_dir = 0
|
||||
if(filt.get_filter_side() == 1)
|
||||
check_dir = turn(filt.dir, 270)
|
||||
else
|
||||
check_dir = turn(filt.dir, 90)
|
||||
if(check_dir == GLOB.reverse_dir[direction])
|
||||
var/image/intake = image(icon, icon_state = overlay_state, dir = direction)
|
||||
add_overlay(intake)
|
||||
continue
|
||||
|
||||
// Splitter only allows side connections
|
||||
if(istype(other,/obj/machinery/reagent_refinery/splitter))
|
||||
if(GLOB.reverse_dir[direction] in list(turn(other.dir,90),turn(other.dir,-90)))
|
||||
var/image/intake = image(icon, icon_state = overlay_state, dir = direction)
|
||||
add_overlay(intake)
|
||||
continue
|
||||
|
||||
// Standard connection
|
||||
if(other.dir == GLOB.reverse_dir[direction] && (dir != direction || istype(src,/obj/machinery/reagent_refinery/waste_processor)))
|
||||
var/image/intake = image(icon, icon_state = overlay_state, dir = direction)
|
||||
add_overlay(intake)
|
||||
|
||||
@@ -72,28 +72,7 @@
|
||||
if(!(stat & (NOPOWER|BROKEN)))
|
||||
var/image/dot = image(icon, icon_state = "mixer_dot_[ got_input ? "on" : "off" ]")
|
||||
add_overlay(dot)
|
||||
for(var/direction in GLOB.cardinal)
|
||||
var/turf/T = get_step(get_turf(src),direction)
|
||||
var/obj/machinery/other = locate(/obj/machinery/reagent_refinery) in T
|
||||
if(other && other.anchored)
|
||||
// Waste processors do not connect to anything as outgoing
|
||||
if(istype(other,/obj/machinery/reagent_refinery/waste_processor))
|
||||
continue
|
||||
// weird handling for side connections... Otherwise, anything pointing into use gets connected back!
|
||||
if(istype(other,/obj/machinery/reagent_refinery/filter))
|
||||
var/obj/machinery/reagent_refinery/filter/filt = other
|
||||
var/check_dir = 0
|
||||
if(filt.get_filter_side() == 1)
|
||||
check_dir = turn(filt.dir, 270)
|
||||
else
|
||||
check_dir = turn(filt.dir, 90)
|
||||
if(check_dir == GLOB.reverse_dir[direction] && dir != direction)
|
||||
var/image/intake = image(icon, icon_state = "mixer_intakes", dir = direction)
|
||||
add_overlay(intake)
|
||||
continue
|
||||
if(other.dir == GLOB.reverse_dir[direction] && dir != direction)
|
||||
var/image/intake = image(icon, icon_state = "mixer_intakes", dir = direction)
|
||||
add_overlay(intake)
|
||||
update_input_connection_overlays("mixer_intakes")
|
||||
// Get mixer overlay
|
||||
var/image/arm = image(icon, icon_state = "mixer_arm", dir = angle2dir(mixer_angle))
|
||||
add_overlay(arm)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/obj/machinery/reagent_refinery/pipe
|
||||
name = "Industrial Chemical Pipe"
|
||||
desc = "A large pipe made for transporting industrial chemicals. It has a low-power passive pump. The red marks show where the flow is coming from. Does not require power."
|
||||
desc = "A large pipe made for transporting industrial chemicals."
|
||||
icon_state = "pipe"
|
||||
density = TRUE
|
||||
anchored = TRUE
|
||||
@@ -32,28 +32,7 @@
|
||||
/obj/machinery/reagent_refinery/pipe/update_icon()
|
||||
cut_overlays()
|
||||
if(anchored)
|
||||
for(var/direction in GLOB.cardinal)
|
||||
var/turf/T = get_step(get_turf(src),direction)
|
||||
var/obj/machinery/other = locate(/obj/machinery/reagent_refinery) in T
|
||||
if(other && other.anchored)
|
||||
// Waste processors do not connect to anything as outgoing
|
||||
if(istype(other,/obj/machinery/reagent_refinery/waste_processor))
|
||||
continue
|
||||
// weird handling for side connections... Otherwise, anything pointing into use gets connected back!
|
||||
if(istype(other,/obj/machinery/reagent_refinery/filter))
|
||||
var/obj/machinery/reagent_refinery/filter/filt = other
|
||||
var/check_dir = 0
|
||||
if(filt.get_filter_side() == 1)
|
||||
check_dir = turn(filt.dir, 270)
|
||||
else
|
||||
check_dir = turn(filt.dir, 90)
|
||||
if(check_dir == GLOB.reverse_dir[direction] && dir != direction)
|
||||
var/image/intake = image(icon, icon_state = "pipe_intakes", dir = direction)
|
||||
add_overlay(intake)
|
||||
continue
|
||||
if(other.dir == GLOB.reverse_dir[direction] && dir != direction)
|
||||
var/image/intake = image(icon, icon_state = "pipe_intakes", dir = direction)
|
||||
add_overlay(intake)
|
||||
update_input_connection_overlays("pipe_intakes")
|
||||
|
||||
/obj/machinery/reagent_refinery/pipe/handle_transfer(var/atom/origin_machine, var/datum/reagents/RT, var/source_forward_dir, var/transfer_rate, var/filter_id = "")
|
||||
// no back/forth, filters don't use just their forward, they send the side too!
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
set_APTFT()
|
||||
|
||||
/obj/machinery/reagent_refinery/pump/handle_transfer(var/atom/origin_machine, var/datum/reagents/RT, var/source_forward_dir, var/transfer_rate, var/filter_id = "")
|
||||
// pumps, furnaces and filters can only be FED in a straight line
|
||||
// pumps, furnaces, splitters and filters can only be FED in a straight line
|
||||
if(source_forward_dir != dir)
|
||||
return 0
|
||||
. = ..(origin_machine, RT, source_forward_dir, transfer_rate, filter_id)
|
||||
|
||||
@@ -75,28 +75,7 @@
|
||||
if(!(stat & (NOPOWER|BROKEN)))
|
||||
var/image/dot = image(icon, icon_state = "vat_dot_[ toggle_mode > REACTOR_MODE_INTAKE ? "on" : "off" ]") // Show refinery output mode
|
||||
add_overlay(dot)
|
||||
for(var/direction in GLOB.cardinal)
|
||||
var/turf/T = get_step(get_turf(src),direction)
|
||||
var/obj/machinery/other = locate(/obj/machinery/reagent_refinery) in T
|
||||
if(other && other.anchored)
|
||||
// Waste processors do not connect to anything as outgoing
|
||||
if(istype(other,/obj/machinery/reagent_refinery/waste_processor))
|
||||
continue
|
||||
// weird handling for side connections... Otherwise, anything pointing into use gets connected back!
|
||||
if(istype(other,/obj/machinery/reagent_refinery/filter))
|
||||
var/obj/machinery/reagent_refinery/filter/filt = other
|
||||
var/check_dir = 0
|
||||
if(filt.get_filter_side() == 1)
|
||||
check_dir = turn(filt.dir, 270)
|
||||
else
|
||||
check_dir = turn(filt.dir, 90)
|
||||
if(check_dir == GLOB.reverse_dir[direction] && dir != direction)
|
||||
var/image/intake = image(icon, icon_state = "reactor_intakes", dir = direction)
|
||||
add_overlay(intake)
|
||||
continue
|
||||
if(other.dir == GLOB.reverse_dir[direction] && dir != direction)
|
||||
var/image/intake = image(icon, icon_state = "reactor_intakes", dir = direction)
|
||||
add_overlay(intake)
|
||||
update_input_connection_overlays("reactor_intakes")
|
||||
|
||||
/obj/machinery/reagent_refinery/reactor/handle_transfer(var/atom/origin_machine, var/datum/reagents/RT, var/source_forward_dir, var/transfer_rate, var/filter_id = "")
|
||||
// no back/forth, filters don't use just their forward, they send the side too!
|
||||
|
||||
71
code/modules/refinery/core/industrial_reagent_splitter.dm
Normal file
71
code/modules/refinery/core/industrial_reagent_splitter.dm
Normal file
@@ -0,0 +1,71 @@
|
||||
/obj/machinery/reagent_refinery/splitter
|
||||
name = "Industrial Chemical Splitter"
|
||||
desc = "A large machine made for transfering industrial chemicals to multiple machines equally."
|
||||
icon_state = "splitter"
|
||||
density = TRUE
|
||||
anchored = TRUE
|
||||
idle_power_usage = 0
|
||||
active_power_usage = 0
|
||||
circuit = /obj/item/circuitboard/industrial_reagent_splitter
|
||||
default_max_vol = 60 // smoll
|
||||
|
||||
/obj/machinery/reagent_refinery/splitter/Initialize(mapload)
|
||||
. = ..()
|
||||
default_apply_parts()
|
||||
// Can't be set on these
|
||||
src.verbs -= /obj/machinery/reagent_refinery/verb/set_APTFT
|
||||
// Update neighbours and self for state
|
||||
update_neighbours()
|
||||
update_icon()
|
||||
AddElement(/datum/element/climbable)
|
||||
|
||||
/obj/machinery/reagent_refinery/splitter/process()
|
||||
if(!anchored)
|
||||
return
|
||||
|
||||
if(stat & (BROKEN))
|
||||
return
|
||||
|
||||
splitter_transfer()
|
||||
|
||||
/obj/machinery/reagent_refinery/proc/splitter_transfer()
|
||||
if(amount_per_transfer_from_this <= 0 || reagents.total_volume <= 0)
|
||||
return 0
|
||||
|
||||
var/list/target_list = list()
|
||||
var/list/dir_list = list()
|
||||
var/list/possible_dirs = list(turn(dir, 90), turn(dir, -90))
|
||||
if(prob(50)) // So neither side has priority
|
||||
possible_dirs = list(turn(dir, -90), turn(dir, 90))
|
||||
for(var/dir_check in possible_dirs)
|
||||
var/obj/machinery/reagent_refinery/target = locate() in get_step(get_turf(src),dir_check)
|
||||
if(!target)
|
||||
continue
|
||||
target_list += list(target)
|
||||
dir_list += list(dir_check)
|
||||
if(!target_list.len)
|
||||
return 0
|
||||
|
||||
// Dynamically set by reagent amount, we always want half
|
||||
amount_per_transfer_from_this = reagents.total_volume / target_list.len
|
||||
if(amount_per_transfer_from_this < 0.5)
|
||||
return 0
|
||||
|
||||
var/total_transfered = 0
|
||||
for(var/i = 1 to target_list.len)
|
||||
var/scan_dir = dir_list[i]
|
||||
var/scan_targ = target_list[i]
|
||||
if(reagents.total_volume >= minimum_reagents_for_transfer(scan_targ))
|
||||
total_transfered += transfer_tank(reagents, scan_targ, scan_dir)
|
||||
return total_transfered
|
||||
|
||||
/obj/machinery/reagent_refinery/splitter/handle_transfer(var/atom/origin_machine, var/datum/reagents/RT, var/source_forward_dir, var/transfer_rate, var/filter_id = "")
|
||||
// pumps, furnaces, splitters and filters can only be FED in a straight line
|
||||
if(source_forward_dir != dir)
|
||||
return 0
|
||||
. = ..(origin_machine, RT, source_forward_dir, transfer_rate, filter_id)
|
||||
|
||||
/obj/machinery/reagent_refinery/splitter/examine(mob/user, infix, suffix)
|
||||
. = ..()
|
||||
. += "The meter shows [reagents.total_volume]u / [reagents.maximum_volume]u."
|
||||
tutorial(REFINERY_TUTORIAL_SPLITTEROUTPUT|REFINERY_TUTORIAL_INPUT, .)
|
||||
@@ -54,28 +54,7 @@
|
||||
if(!(stat & (NOPOWER|BROKEN)))
|
||||
var/image/dot = image(icon, icon_state = "vat_dot_[ amount_per_transfer_from_this > 0 ? "on" : "off" ]")
|
||||
add_overlay(dot)
|
||||
for(var/direction in GLOB.cardinal)
|
||||
var/turf/T = get_step(get_turf(src),direction)
|
||||
var/obj/machinery/other = locate(/obj/machinery/reagent_refinery) in T
|
||||
if(other && other.anchored)
|
||||
// Waste processors do not connect to anything as outgoing
|
||||
if(istype(other,/obj/machinery/reagent_refinery/waste_processor))
|
||||
continue
|
||||
// weird handling for side connections... Otherwise, anything pointing into use gets connected back!
|
||||
if(istype(other,/obj/machinery/reagent_refinery/filter))
|
||||
var/obj/machinery/reagent_refinery/filter/filt = other
|
||||
var/check_dir = 0
|
||||
if(filt.get_filter_side() == 1)
|
||||
check_dir = turn(filt.dir, 270)
|
||||
else
|
||||
check_dir = turn(filt.dir, 90)
|
||||
if(check_dir == GLOB.reverse_dir[direction] && dir != direction)
|
||||
var/image/intake = image(icon, icon_state = "vat_intakes", dir = direction)
|
||||
add_overlay(intake)
|
||||
continue
|
||||
if(other.dir == GLOB.reverse_dir[direction] && dir != direction)
|
||||
var/image/intake = image(icon, icon_state = "vat_intakes", dir = direction)
|
||||
add_overlay(intake)
|
||||
update_input_connection_overlays("vat_intakes")
|
||||
|
||||
/obj/machinery/reagent_refinery/vat/examine(mob/user, infix, suffix)
|
||||
. = ..()
|
||||
|
||||
@@ -36,28 +36,7 @@
|
||||
/obj/machinery/reagent_refinery/waste_processor/update_icon()
|
||||
cut_overlays()
|
||||
if(anchored)
|
||||
for(var/direction in GLOB.cardinal)
|
||||
var/turf/T = get_step(get_turf(src),direction)
|
||||
var/obj/machinery/other = locate(/obj/machinery/reagent_refinery) in T
|
||||
if(other && other.anchored)
|
||||
// Waste processors do not connect to anything as outgoing
|
||||
if(istype(other,/obj/machinery/reagent_refinery/waste_processor))
|
||||
continue
|
||||
// weird handling for side connections... Otherwise, anything pointing into use gets connected back!
|
||||
if(istype(other,/obj/machinery/reagent_refinery/filter))
|
||||
var/obj/machinery/reagent_refinery/filter/filt = other
|
||||
var/check_dir = 0
|
||||
if(filt.get_filter_side() == 1)
|
||||
check_dir = turn(filt.dir, 270)
|
||||
else
|
||||
check_dir = turn(filt.dir, 90)
|
||||
if(check_dir == GLOB.reverse_dir[direction])
|
||||
var/image/intake = image(icon, icon_state = "waste_intakes", dir = direction)
|
||||
add_overlay(intake)
|
||||
continue
|
||||
if(other.dir == GLOB.reverse_dir[direction])
|
||||
var/image/intake = image(icon, icon_state = "waste_intakes", dir = direction)
|
||||
add_overlay(intake)
|
||||
update_input_connection_overlays("waste_intakes")
|
||||
|
||||
/obj/machinery/reagent_refinery/waste_processor/examine(mob/user, infix, suffix)
|
||||
. = ..()
|
||||
|
||||
@@ -98,6 +98,16 @@
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design_techweb/board/industrial_reagent_splitter
|
||||
name = "Industrial Reagent Splitter"
|
||||
id = "industrial_reagent_splitter"
|
||||
// req_tech = list(TECH_DATA = 1)
|
||||
build_path = /obj/item/circuitboard/industrial_reagent_splitter
|
||||
category = list(
|
||||
RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design_techweb/board/pump_relay
|
||||
name = "Pump Relay"
|
||||
id = "pump_relay"
|
||||
|
||||
@@ -340,6 +340,7 @@
|
||||
"industrial_reagent_reactor",
|
||||
"industrial_reagent_vat",
|
||||
"industrial_reagent_mixer",
|
||||
"industrial_reagent_splitter",
|
||||
"industrial_reagent_waste_processor",
|
||||
"pump_relay",
|
||||
"fluid_pump"
|
||||
|
||||
@@ -3,11 +3,27 @@
|
||||
// BONE SURGERY //
|
||||
//////////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/surgery_step/bones
|
||||
|
||||
/datum/surgery_step/bones/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(!ishuman(target))
|
||||
return FALSE
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
if(!(affected.status & ORGAN_BROKEN))
|
||||
return FALSE
|
||||
if(coverage_check(user, target, affected, tool))
|
||||
return FALSE
|
||||
if(affected.cannot_break && !affected.encased)
|
||||
return FALSE
|
||||
if(affected.robotic >= ORGAN_ROBOT)
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
///////////////////////////////////////////////////////////////
|
||||
// Bone Glue Surgery
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/surgery_step/glue_bone
|
||||
/datum/surgery_step/bones/glue_bone
|
||||
surgery_name = "Glue Bone"
|
||||
allowed_tools = list(
|
||||
/obj/item/surgical/bonegel = 100
|
||||
@@ -21,15 +37,11 @@
|
||||
min_duration = 30 //CHOMPedit
|
||||
max_duration = 40 //CHOMPedit
|
||||
|
||||
/datum/surgery_step/glue_bone/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(!ishuman(target))
|
||||
return 0
|
||||
/datum/surgery_step/bones/glue_bone/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
if(coverage_check(user, target, affected, tool))
|
||||
return 0
|
||||
return affected && (affected.robotic < ORGAN_ROBOT) && affected.open >= 2 && affected.stage == 0
|
||||
return ..() && affected.open >= FLESH_RETRACTED && affected.stage == 0
|
||||
|
||||
/datum/surgery_step/glue_bone/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
/datum/surgery_step/bones/glue_bone/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
if (affected.stage == 0)
|
||||
user.visible_message(span_notice("[user] starts applying medication to the damaged bones in [target]'s [affected.name] with \the [tool].") , \
|
||||
@@ -38,14 +50,14 @@
|
||||
target.custom_pain("Something in your [affected.name] is causing you a lot of pain!", 50)
|
||||
..()
|
||||
|
||||
/datum/surgery_step/glue_bone/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
/datum/surgery_step/bones/glue_bone/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message(span_notice("[user] applies some [tool] to [target]'s bone in [affected.name]"), \
|
||||
span_notice("You apply some [tool] to [target]'s bone in [affected.name] with \the [tool]."))
|
||||
user.balloon_alert_visible("applies [tool] to [target]'s bone.", "applying [tool] to [target]'s bone.")
|
||||
affected.stage = 1
|
||||
|
||||
/datum/surgery_step/glue_bone/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
/datum/surgery_step/bones/glue_bone/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message(span_danger("[user]'s hand slips, smearing [tool] in the incision in [target]'s [affected.name]!") , \
|
||||
span_danger("Your hand slips, smearing [tool] in the incision in [target]'s [affected.name]!"))
|
||||
@@ -55,7 +67,7 @@
|
||||
// Bone Setting Surgery
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/surgery_step/set_bone
|
||||
/datum/surgery_step/bones/set_bone
|
||||
surgery_name = "Set Bone"
|
||||
allowed_tools = list(
|
||||
/obj/item/surgical/bonesetter = 100
|
||||
@@ -66,15 +78,11 @@
|
||||
min_duration = 30 //CHOMPedit
|
||||
max_duration = 45 //CHOMPedit
|
||||
|
||||
/datum/surgery_step/set_bone/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(!ishuman(target))
|
||||
return 0
|
||||
/datum/surgery_step/bones/set_bone/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
if(coverage_check(user, target, affected, tool))
|
||||
return 0
|
||||
return affected && affected.organ_tag != BP_HEAD && !(affected.robotic >= ORGAN_ROBOT) && affected.open >= 2 && affected.stage == 1
|
||||
return ..() && affected.organ_tag != BP_HEAD && affected.open >= FLESH_RETRACTED && affected.stage == 1
|
||||
|
||||
/datum/surgery_step/set_bone/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
/datum/surgery_step/bones/set_bone/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message(span_notice("[user] is beginning to set the bone in [target]'s [affected.name] in place with \the [tool].") , \
|
||||
span_notice("You are beginning to set the bone in [target]'s [affected.name] in place with \the [tool]."))
|
||||
@@ -82,20 +90,14 @@
|
||||
target.custom_pain("The pain in your [affected.name] is going to make you pass out!", 50)
|
||||
..()
|
||||
|
||||
/datum/surgery_step/set_bone/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
/datum/surgery_step/bones/set_bone/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
if (affected.status & ORGAN_BROKEN)
|
||||
user.visible_message(span_notice("[user] sets the bone in [target]'s [affected.name] in place with \the [tool]."), \
|
||||
span_notice("You set the bone in [target]'s [affected.name] in place with \the [tool]."))
|
||||
user.balloon_alert_visible("sets the bone in place.", "bone set in place.")
|
||||
affected.stage = 2
|
||||
else
|
||||
user.visible_message("[user] sets the bone in [target]'s [affected.name] " + span_danger("in the WRONG place with \the [tool]."), \
|
||||
"You set the bone in [target]'s [affected.name] " + span_danger("in the WRONG place with \the [tool]."))
|
||||
user.balloon_alert_visible("sets the bone in the WRONG place.", "bone set in the WRONG place.")
|
||||
affected.fracture()
|
||||
user.visible_message(span_notice("[user] sets the bone in [target]'s [affected.name] in place with \the [tool]."), \
|
||||
span_notice("You set the bone in [target]'s [affected.name] in place with \the [tool]."))
|
||||
user.balloon_alert_visible("sets the bone in place.", "bone set in place.")
|
||||
affected.stage = 2
|
||||
|
||||
/datum/surgery_step/set_bone/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
/datum/surgery_step/bones/set_bone/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message(span_danger("[user]'s hand slips, damaging the bone in [target]'s [affected.name] with \the [tool]!") , \
|
||||
span_danger("Your hand slips, damaging the bone in [target]'s [affected.name] with \the [tool]!"))
|
||||
@@ -106,7 +108,7 @@
|
||||
// Skull Mending Surgery
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/surgery_step/mend_skull
|
||||
/datum/surgery_step/bones/mend_skull
|
||||
surgery_name = "Mend Skull"
|
||||
allowed_tools = list(
|
||||
/obj/item/surgical/bonesetter = 100
|
||||
@@ -117,41 +119,37 @@
|
||||
min_duration = 40 //CHOMPedit
|
||||
max_duration = 50 //CHOMPedit
|
||||
|
||||
/datum/surgery_step/mend_skull/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(!ishuman(target))
|
||||
return 0
|
||||
/datum/surgery_step/bones/mend_skull/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
if(coverage_check(user, target, affected, tool))
|
||||
return 0
|
||||
return affected && affected.organ_tag == BP_HEAD && (affected.robotic < ORGAN_ROBOT) && affected.open >= 2 && affected.stage == 1
|
||||
return ..() && affected.organ_tag == BP_HEAD && affected.open >= FLESH_RETRACTED && affected.stage == 1
|
||||
|
||||
/datum/surgery_step/mend_skull/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
/datum/surgery_step/bones/mend_skull/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message(span_notice("[user] is beginning to piece together [target]'s skull with \the [tool].") , \
|
||||
span_notice("You are beginning to piece together [target]'s skull with \the [tool]."))
|
||||
user.balloon_alert_visible("pieces the skull together", "piecing skull together.")
|
||||
..()
|
||||
|
||||
/datum/surgery_step/mend_skull/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
/datum/surgery_step/bones/mend_skull/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message(span_notice("[user] sets [target]'s skull with \the [tool].") , \
|
||||
span_notice("You set [target]'s skull with \the [tool]."))
|
||||
user.balloon_alert_visible("sets the skull back.", "skull set back.")
|
||||
affected.stage = 2
|
||||
|
||||
/datum/surgery_step/mend_skull/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
/datum/surgery_step/bones/mend_skull/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message(span_danger("[user]'s hand slips, damaging [target]'s face with \the [tool]!") , \
|
||||
span_danger("Your hand slips, damaging [target]'s face with \the [tool]!"))
|
||||
user.balloon_alert_visible("slips, damaging [target]'s face", "your hand slips, damaging [target]'s face")
|
||||
var/obj/item/organ/external/head/h = affected
|
||||
h.createwound(BRUISE, 10)
|
||||
h.disfigured = 1
|
||||
h.disfigure()
|
||||
|
||||
///////////////////////////////////////////////////////////////
|
||||
// Bone Fixing Surgery
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/surgery_step/finish_bone
|
||||
/datum/surgery_step/bones/finish_bone
|
||||
surgery_name = "Finish Mending Bone"
|
||||
allowed_tools = list(
|
||||
/obj/item/surgical/bonegel = 100
|
||||
@@ -165,22 +163,18 @@
|
||||
min_duration = 30 //CHOMPedit
|
||||
max_duration = 30 //CHOMPedit
|
||||
|
||||
/datum/surgery_step/finish_bone/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(!ishuman(target))
|
||||
return 0
|
||||
/datum/surgery_step/bones/finish_bone/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
if(coverage_check(user, target, affected, tool))
|
||||
return 0
|
||||
return affected && affected.open >= 2 && !(affected.robotic >= ORGAN_ROBOT) && affected.stage == 2
|
||||
return ..() && affected.open >= FLESH_RETRACTED && affected.stage == 2
|
||||
|
||||
/datum/surgery_step/finish_bone/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
/datum/surgery_step/bones/finish_bone/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message(span_notice("[user] starts to finish mending the damaged bones in [target]'s [affected.name] with \the [tool]."), \
|
||||
span_notice("You start to finish mending the damaged bones in [target]'s [affected.name] with \the [tool]."))
|
||||
user.balloon_alert_visible("begins mending damaged bones.", "mending damaged bones.")
|
||||
..()
|
||||
|
||||
/datum/surgery_step/finish_bone/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
/datum/surgery_step/bones/finish_bone/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message(span_notice("[user] has mended the damaged bones in [target]'s [affected.name] with \the [tool].") , \
|
||||
span_notice("You have mended the damaged bones in [target]'s [affected.name] with \the [tool].") )
|
||||
@@ -188,7 +182,7 @@
|
||||
affected.status &= ~ORGAN_BROKEN
|
||||
affected.stage = 0
|
||||
|
||||
/datum/surgery_step/finish_bone/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
/datum/surgery_step/bones/finish_bone/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message(span_danger("[user]'s hand slips, smearing [tool] in the incision in [target]'s [affected.name]!") , \
|
||||
span_danger("Your hand slips, smearing [tool] in the incision in [target]'s [affected.name]!"))
|
||||
@@ -198,7 +192,7 @@
|
||||
// Bone Clamp Surgery
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/surgery_step/clamp_bone
|
||||
/datum/surgery_step/bones/clamp_bone
|
||||
surgery_name = "Clamp Bone"
|
||||
allowed_tools = list(
|
||||
/obj/item/surgical/bone_clamp = 100
|
||||
@@ -210,15 +204,11 @@
|
||||
min_duration = 45 //CHOMPedit
|
||||
max_duration = 55 //CHOMPedit
|
||||
|
||||
/datum/surgery_step/clamp_bone/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(!ishuman(target))
|
||||
return 0
|
||||
/datum/surgery_step/bones/clamp_bone/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
if(coverage_check(user, target, affected, tool))
|
||||
return 0
|
||||
return affected && (affected.status & ORGAN_BROKEN) && (affected.robotic < ORGAN_ROBOT) && affected.open >= 2 && affected.stage == 0
|
||||
return ..() && affected.open >= FLESH_RETRACTED && affected.stage == 0
|
||||
|
||||
/datum/surgery_step/clamp_bone/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
/datum/surgery_step/bones/clamp_bone/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
if (affected.stage == 0)
|
||||
user.visible_message(span_notice("[user] starts repairing the damaged bones in [target]'s [affected.name] with \the [tool].") , \
|
||||
@@ -227,14 +217,14 @@
|
||||
target.custom_pain("Something in your [affected.name] is causing you a lot of pain!", 50)
|
||||
..()
|
||||
|
||||
/datum/surgery_step/clamp_bone/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
/datum/surgery_step/bones/clamp_bone/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message(span_notice("[user] sets the bone in [target]'s [affected.name] with \the [tool]."), \
|
||||
span_notice("You sets [target]'s bone in [affected.name] with \the [tool]."))
|
||||
user.balloon_alert_visible("sets the bone back in.", "bone set in.")
|
||||
affected.status &= ~ORGAN_BROKEN
|
||||
|
||||
/datum/surgery_step/clamp_bone/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
/datum/surgery_step/bones/clamp_bone/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message(span_danger("[user]'s hand slips, damaging the bone in [target]'s [affected.name] with \the [tool]!") , \
|
||||
span_danger("Your hand slips, damaging the bone in [target]'s [affected.name] with \the [tool]!"))
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
if(coverage_check(user, target, affected, tool))
|
||||
return 0
|
||||
return affected && !(affected.robotic >= ORGAN_ROBOT) && affected.encased && affected.open >= 2
|
||||
return affected && !(affected.robotic >= ORGAN_ROBOT) && affected.encased && affected.open >= FLESH_RETRACTED
|
||||
|
||||
///////////////////////////////////////////////////////////////
|
||||
// Rib Sawing Surgery
|
||||
@@ -148,7 +148,7 @@
|
||||
if(!ishuman(target))
|
||||
return
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
return (..() && affected && affected.open == 3)
|
||||
return (..() && affected && affected.open == BONE_RETRACTED)
|
||||
|
||||
/datum/surgery_step/open_encased/close/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(!ishuman(target))
|
||||
@@ -255,7 +255,7 @@
|
||||
if(!ishuman(target))
|
||||
return
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
return ..() && affected && affected.open >= 2 && affected.open < 3
|
||||
return ..() && affected && affected.open >= FLESH_RETRACTED && affected.open < BONE_RETRACTED
|
||||
|
||||
/datum/surgery_step/open_encased/advancedsaw_open/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(!ishuman(target))
|
||||
@@ -308,7 +308,7 @@
|
||||
if(!ishuman(target))
|
||||
return
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
return (..() && affected && affected.open == 3)
|
||||
return (..() && affected && affected.open == BONE_RETRACTED)
|
||||
|
||||
/datum/surgery_step/open_encased/advancedsaw_mend/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(!ishuman(target))
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
// COMMON STEPS //
|
||||
//////////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/surgery_step/generic/
|
||||
/datum/surgery_step/generic
|
||||
can_infect = 1
|
||||
|
||||
/datum/surgery_step/generic/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
@@ -43,7 +43,7 @@
|
||||
/datum/surgery_step/generic/cut_open/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(..())
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
return affected && affected.open == 0 && target_zone != O_MOUTH
|
||||
return affected && !affected.open && target_zone != O_MOUTH
|
||||
|
||||
/datum/surgery_step/generic/cut_open/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
@@ -58,7 +58,7 @@
|
||||
user.visible_message(span_notice("[user] has made an incision on [target]'s [affected.name] with \the [tool]."), \
|
||||
span_notice("You have made an incision on [target]'s [affected.name] with \the [tool]."),)
|
||||
user.balloon_alert_visible("opens an incision on [target]'s [affected.name]", "incision open on \the [affected.name]")
|
||||
affected.open = 1
|
||||
affected.open = INCISION_MADE
|
||||
|
||||
if(istype(target) && target.should_have_organ(O_HEART))
|
||||
affected.status |= ORGAN_BLEEDING
|
||||
@@ -93,7 +93,7 @@
|
||||
/datum/surgery_step/generic/cut_with_laser/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(..())
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
return affected && affected.open == 0 && target_zone != O_MOUTH
|
||||
return affected && !affected.open && target_zone != O_MOUTH
|
||||
|
||||
/datum/surgery_step/generic/cut_with_laser/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
@@ -105,7 +105,7 @@
|
||||
|
||||
/datum/surgery_step/generic/cut_with_laser/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
affected.open = 1
|
||||
affected.open = INCISION_MADE
|
||||
|
||||
affected.createwound(CUT, 1)
|
||||
var/clamp_chance = 0
|
||||
@@ -121,9 +121,6 @@
|
||||
user.visible_message(span_notice("[user] has made an incision on [target]'s [affected.name] with \the [tool], but blood is still escaping from the wound."), \
|
||||
span_notice("You have made an incision on [target]'s [affected.name] with \the [tool], but blood is still coming from the wound.."),)
|
||||
user.balloon_alert_visible("opens an incision on [target]'s [affected.name], blood still flowing", "incision open on \the [affected.name], but blood still flows")
|
||||
//Could be cleaner ...
|
||||
|
||||
spread_germs_to_organ(affected, user)
|
||||
|
||||
/datum/surgery_step/generic/cut_with_laser/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
@@ -152,7 +149,7 @@
|
||||
/datum/surgery_step/generic/incision_manager/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(..())
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
return affected && affected.open == 0 && target_zone != O_MOUTH
|
||||
return affected && !affected.open && target_zone != O_MOUTH
|
||||
|
||||
/datum/surgery_step/generic/incision_manager/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
@@ -167,14 +164,14 @@
|
||||
user.visible_message(span_notice("[user] has constructed a prepared incision on and within [target]'s [affected.name] with \the [tool]."), \
|
||||
span_notice("You have constructed a prepared incision on and within [target]'s [affected.name] with \the [tool]."),)
|
||||
user.balloon_alert_visible("constructs a prepared incision", "constructed prepared incision")
|
||||
affected.open = 1
|
||||
affected.open = INCISION_MADE
|
||||
|
||||
if(istype(target) && target.should_have_organ(O_HEART))
|
||||
affected.status |= ORGAN_BLEEDING
|
||||
|
||||
affected.createwound(CUT, 1)
|
||||
affected.organ_clamp()
|
||||
affected.open = 2
|
||||
affected.open = FLESH_RETRACTED
|
||||
|
||||
/datum/surgery_step/generic/incision_manager/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
@@ -202,7 +199,15 @@
|
||||
/datum/surgery_step/generic/clamp_bleeders/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(..())
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
return affected && affected.open && (affected.status & ORGAN_BLEEDING)
|
||||
if(!affected)
|
||||
return FALSE
|
||||
var/internally_bleeding = FALSE
|
||||
for(var/datum/wound/internal_bleeding/W in affected.wounds)
|
||||
if(W.clamped)
|
||||
continue
|
||||
internally_bleeding = TRUE
|
||||
break
|
||||
return affected && affected.open && ((affected.status & ORGAN_BLEEDING) || internally_bleeding)
|
||||
|
||||
/datum/surgery_step/generic/clamp_bleeders/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
@@ -218,7 +223,8 @@
|
||||
span_notice("You clamp bleeders in [target]'s [affected.name] with \the [tool]."))
|
||||
user.balloon_alert_visible("clamps bleeders", "clamped bleeders")
|
||||
affected.organ_clamp()
|
||||
spread_germs_to_organ(affected, user)
|
||||
for(var/datum/wound/internal_bleeding/W in affected.wounds) //Normal organ clamp does NOT clamp internal bleeds. Using hemostats directly does.
|
||||
W.clamped = TRUE
|
||||
|
||||
/datum/surgery_step/generic/clamp_bleeders/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
@@ -241,12 +247,12 @@
|
||||
allowed_procs = list(IS_CROWBAR = 75)
|
||||
|
||||
min_duration = 30
|
||||
max_duration = 30 //CHOMPedit
|
||||
max_duration = 30
|
||||
|
||||
/datum/surgery_step/generic/retract_skin/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(..())
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
return affected && affected.open == 1 //&& !(affected.status & ORGAN_BLEEDING)
|
||||
return affected && affected.open == INCISION_MADE
|
||||
|
||||
/datum/surgery_step/generic/retract_skin/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
@@ -286,7 +292,7 @@
|
||||
self_msgBall = "keeping the incision open on the lower abdomen."
|
||||
user.visible_message(msg, self_msg)
|
||||
user.balloon_alert_visible(msgBall, self_msgBall)
|
||||
affected.open = 2
|
||||
affected.open = FLESH_RETRACTED
|
||||
|
||||
/datum/surgery_step/generic/retract_skin/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
|
||||
@@ -11,13 +11,24 @@
|
||||
|
||||
/datum/surgery_step/brainstem/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(!ishuman(target))
|
||||
return 0
|
||||
return FALSE
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
if (!affected || (affected.robotic >= ORGAN_ROBOT) || !(affected.open >= 3))
|
||||
return 0
|
||||
if(!affected || (affected.robotic >= ORGAN_ROBOT))
|
||||
return FALSE
|
||||
//If our organ is encased (has a bone) the bone must be cut. If the organ is NOT encased (boneless) we can only get to encased == 2
|
||||
if(affected.open != (affected.encased ? 3 : 2))
|
||||
return FALSE
|
||||
if(coverage_check(user, target, affected, tool))
|
||||
return 0
|
||||
return target_zone == BP_HEAD
|
||||
return FALSE
|
||||
//Gets where our brain is located and allows us to do frankensurgery in the right location.
|
||||
var/obj/item/organ/internal/brain/sponge = locate(/obj/item/organ/internal/brain) in affected.internal_organs
|
||||
if(!sponge)
|
||||
return FALSE
|
||||
if(target_zone != sponge.parent_organ)
|
||||
return FALSE
|
||||
if((target.can_defib && !(sponge.status & ORGAN_DEAD)) && !target.op_stage.brainstem == 5) //Final step can be done after our can_defib step is set.
|
||||
return FALSE
|
||||
return target_zone == sponge.parent_organ
|
||||
|
||||
/////////////////////////////
|
||||
// Blood Vessel Mending
|
||||
@@ -35,7 +46,7 @@
|
||||
max_duration = 100
|
||||
|
||||
/datum/surgery_step/brainstem/mend_vessels/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
return ..() && target_zone == BP_HEAD && target.op_stage.brainstem == 0
|
||||
return ..() && target.op_stage.brainstem == 0
|
||||
|
||||
/datum/surgery_step/brainstem/mend_vessels/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message(span_filter_notice("[user] starts to mend the blood vessels on [target]'s brainstem with \the [tool]."), \
|
||||
@@ -73,10 +84,10 @@
|
||||
allowed_procs = list(IS_SCREWDRIVER = 75)
|
||||
|
||||
min_duration = 200 //Very. Very. Carefully.
|
||||
max_duration = 200 //CHOMPedit
|
||||
max_duration = 200
|
||||
|
||||
/datum/surgery_step/brainstem/drill_vertebrae/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
return ..() && target_zone == BP_HEAD && target.op_stage.brainstem == 1
|
||||
return ..() && target.op_stage.brainstem == 1
|
||||
|
||||
/datum/surgery_step/brainstem/drill_vertebrae/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message(span_filter_notice("[user] starts to drill around [target]'s brainstem with \the [tool]."), \
|
||||
@@ -100,9 +111,8 @@
|
||||
user.balloon_alert_visible("slips, shredding [target]'s brainstem", "your hand slips, shredding the brainstem.")
|
||||
affected.createwound(PIERCE, 10)
|
||||
target.AdjustParalysis(15)
|
||||
spawn()
|
||||
for(var/obj/item/organ/internal/brain/O in affected.internal_organs)
|
||||
O.take_damage(rand(5,10))
|
||||
for(var/obj/item/organ/internal/brain/O in affected.internal_organs)
|
||||
O.take_damage(rand(5,10))
|
||||
|
||||
/////////////////////////////
|
||||
// Bone Cleaning
|
||||
@@ -117,11 +127,11 @@
|
||||
|
||||
allowed_procs = list(IS_WIRECUTTER = 60)
|
||||
|
||||
min_duration = 90
|
||||
max_duration = 120
|
||||
min_duration = 100
|
||||
max_duration = 100
|
||||
|
||||
/datum/surgery_step/brainstem/clean_chips/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
return ..() && target_zone == BP_HEAD && target.op_stage.brainstem == 2
|
||||
return ..() && target.op_stage.brainstem == 2
|
||||
|
||||
/datum/surgery_step/brainstem/clean_chips/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message(span_filter_notice("[user] starts to pick around [target]'s brainstem for bone chips with \the [tool]."), \
|
||||
@@ -143,9 +153,8 @@
|
||||
user.balloon_alert_visible("slips, gouging [target]'s brainstem", "your hand slips, gouging the brainstem")
|
||||
affected.createwound(CUT, 5)
|
||||
target.AdjustParalysis(10)
|
||||
spawn()
|
||||
for(var/obj/item/organ/internal/brain/O in affected.internal_organs) //If there's more than one...
|
||||
O.take_damage(rand(1,10))
|
||||
for(var/obj/item/organ/internal/brain/O in affected.internal_organs) //If there's more than one...
|
||||
O.take_damage(rand(1,10))
|
||||
|
||||
/////////////////////////////
|
||||
// Spinal Cord Repair
|
||||
@@ -164,7 +173,7 @@
|
||||
max_duration = 100 //CHOMPedit
|
||||
|
||||
/datum/surgery_step/brainstem/mend_cord/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
return ..() && target_zone == BP_HEAD && target.op_stage.brainstem == 3
|
||||
return ..() && target.op_stage.brainstem == 3
|
||||
|
||||
/datum/surgery_step/brainstem/mend_cord/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message(span_filter_notice("[user] starts to fuse [target]'s spinal cord with \the [tool]."), \
|
||||
@@ -174,11 +183,10 @@
|
||||
|
||||
/datum/surgery_step/brainstem/mend_cord/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message(span_notice("[user] has fused [target]'s spinal cord with \the [tool].") , \
|
||||
span_notice(" You have fused [target]'s spinal cord with \the [tool]."),)
|
||||
span_notice("You have fused [target]'s spinal cord with \the [tool]."),)
|
||||
user.balloon_alert_visible("fused [target]'s spinal cord", "fused the spinal cord")
|
||||
target.op_stage.brainstem = 4
|
||||
target.AdjustParalysis(5)
|
||||
target.add_modifier(/datum/modifier/franken_sickness, 20 MINUTES)
|
||||
|
||||
/datum/surgery_step/brainstem/mend_cord/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
@@ -187,9 +195,8 @@
|
||||
user.balloon_alert_visible("slips, tearing [target]'s spinal cord", "your hand slips, tearing at the spinal cord")
|
||||
affected.createwound(PIERCE, 5)
|
||||
target.AdjustParalysis(20)
|
||||
spawn()
|
||||
for(var/obj/item/organ/internal/brain/O in affected.internal_organs)
|
||||
O.take_damage(rand(5,15)) //Down to the wire. Or rather, the cord.
|
||||
for(var/obj/item/organ/internal/brain/O in affected.internal_organs)
|
||||
O.take_damage(rand(5,15)) //Down to the wire. Or rather, the cord.
|
||||
|
||||
/////////////////////////////
|
||||
// Vertebrae repair
|
||||
@@ -204,10 +211,10 @@
|
||||
/obj/item/tape_roll = 50)
|
||||
|
||||
min_duration = 100
|
||||
max_duration = 100 //CHOMPedit
|
||||
max_duration = 100
|
||||
|
||||
/datum/surgery_step/brainstem/mend_vertebrae/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
return ..() && target_zone == BP_HEAD && target.op_stage.brainstem == 4
|
||||
return ..() && target.op_stage.brainstem == 4
|
||||
|
||||
/datum/surgery_step/brainstem/mend_vertebrae/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message(span_filter_notice("[user] starts to mend [target]'s opened vertebrae with \the [tool]."), \
|
||||
@@ -237,6 +244,7 @@
|
||||
// Realign tissues
|
||||
/////////////////////////////
|
||||
|
||||
///This step isn't essential BUT does heal brain loss and heals a dead brain.
|
||||
/datum/surgery_step/brainstem/realign_tissue
|
||||
surgery_name = "Realign Tissue"
|
||||
priority = 3 //Do this instead of searching for objects in the skull.
|
||||
@@ -246,11 +254,11 @@
|
||||
|
||||
allowed_procs = list(IS_WIRECUTTER = 60)
|
||||
|
||||
min_duration = 90
|
||||
max_duration = 120
|
||||
min_duration = 100
|
||||
max_duration = 100
|
||||
|
||||
/datum/surgery_step/brainstem/realign_tissue/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
return ..() && target_zone == BP_HEAD && target.op_stage.brainstem == 5
|
||||
return ..() && target.op_stage.brainstem == 5
|
||||
|
||||
/datum/surgery_step/brainstem/realign_tissue/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message(span_filter_notice("[user] starts to realign the tissues in [target]'s skull with \the [tool]."), \
|
||||
@@ -260,10 +268,13 @@
|
||||
|
||||
/datum/surgery_step/brainstem/realign_tissue/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message(span_notice("[user] has realigned the tissues in [target]'s skull back into place with \the [tool].") , \
|
||||
span_notice(" You have realigned the tissues in [target]'s skull back into place with \the [tool]."),)
|
||||
span_notice("You have realigned the tissues in [target]'s skull back into place with \the [tool]."),)
|
||||
user.balloon_alert_visible("realigned the tissues in [target]'s skull back in place", "realigned the tissues in the skull back into place")
|
||||
target.AdjustParalysis(5) //I n v a s i v e
|
||||
target.op_stage.brainstem = 0 //The cycle begins anew.
|
||||
target.brainloss = 0 //The cycle begins anew.
|
||||
for(var/obj/item/organ/internal/brain/sponge in target.internal_organs) //in case they have multiple brains. weirdo.
|
||||
sponge.status = 0
|
||||
|
||||
|
||||
/datum/surgery_step/brainstem/realign_tissue/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
@@ -272,6 +283,5 @@
|
||||
user.balloon_alert_visible("slips, gounging at [target]'s brainstem", "your hand slips, gouging at the brainstem")
|
||||
affected.createwound(CUT, 5)
|
||||
target.AdjustParalysis(30)
|
||||
spawn()
|
||||
for(var/obj/item/organ/internal/brain/O in affected.internal_organs)
|
||||
O.take_damage(rand(1,10))
|
||||
for(var/obj/item/organ/internal/brain/O in affected.internal_organs)
|
||||
O.take_damage(rand(1,10))
|
||||
|
||||
@@ -92,7 +92,7 @@
|
||||
if(coverage_check(user, target, affected, tool))
|
||||
return 0
|
||||
|
||||
return affected && affected.open >= 2 && (affected.status & ORGAN_DEAD)
|
||||
return affected && affected.open >= FLESH_RETRACTED && (affected.status & ORGAN_DEAD)
|
||||
|
||||
/datum/surgery_step/necrotic/fix_dead_tissue //Debridement
|
||||
surgery_name = "Remove Dead Tissue"
|
||||
@@ -154,7 +154,7 @@
|
||||
|
||||
/datum/surgery_step/necrotic/treat_necrosis/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
return ..() && affected.open >= 3 && affected.remove_necrosis >= 1
|
||||
return ..() && affected.open >= BONE_RETRACTED && affected.remove_necrosis >= 1
|
||||
|
||||
/datum/surgery_step/necrotic/treat_necrosis/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
@@ -213,7 +213,7 @@
|
||||
|
||||
/datum/surgery_step/necrotic/rejuvenate_dead_tissue/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
return ..() && affected.open >= 3 && affected.remove_necrosis == 1
|
||||
return ..() && affected.open >= BONE_RETRACTED && affected.remove_necrosis == 1
|
||||
|
||||
/datum/surgery_step/necrotic/rejuvenate_dead_tissue/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
@@ -253,7 +253,7 @@
|
||||
|
||||
/datum/surgery_step/necrotic/rearrange_dead_tissue/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
return ..() && affected.open >= 3 && affected.remove_necrosis == 2
|
||||
return ..() && affected.open >= BONE_RETRACTED && affected.remove_necrosis == 2
|
||||
|
||||
/datum/surgery_step/necrotic/rearrange_dead_tissue/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
@@ -294,7 +294,7 @@
|
||||
|
||||
/datum/surgery_step/necrotic/fix_necrotic_vessel/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
return ..() && affected.open >= 3 && affected.remove_necrosis == 3
|
||||
return ..() && affected.open >= BONE_RETRACTED && affected.remove_necrosis == 3
|
||||
|
||||
/datum/surgery_step/necrotic/fix_necrotic_vessel/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
/datum/surgery_step/robotics/unscrew_hatch/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(..())
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
return affected && affected.open == 0 && target_zone != O_MOUTH
|
||||
return affected && !affected.open && target_zone != O_MOUTH
|
||||
|
||||
/datum/surgery_step/robotics/unscrew_hatch/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
@@ -60,7 +60,7 @@
|
||||
user.visible_message(span_notice("[user] has opened the maintenance hatch on [target]'s [affected.name] with \the [tool]."), \
|
||||
span_notice("You have opened the maintenance hatch on [target]'s [affected.name] with \the [tool]."),)
|
||||
user.balloon_alert_visible("opens the maintenance hatch on [target]'s [affected.name]", "maintenance hatch opened on \the [affected.name]")
|
||||
affected.open = 1
|
||||
affected.open = INCISION_MADE
|
||||
|
||||
/datum/surgery_step/robotics/unscrew_hatch/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
@@ -213,7 +213,7 @@
|
||||
else
|
||||
if(!welder.isOn() || !welder.remove_fuel(1,user))
|
||||
return 0
|
||||
return affected && affected.open == 3 && (affected.disfigured || affected.brute_dam > 0) && target_zone != O_MOUTH // CHOMPEdit End.
|
||||
return affected && affected.open == BONE_RETRACTED && (affected.disfigured || affected.brute_dam > 0) && target_zone != O_MOUTH // CHOMPEdit End.
|
||||
|
||||
/datum/surgery_step/robotics/repair_brute/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
@@ -267,7 +267,7 @@
|
||||
else
|
||||
C.use(5)
|
||||
|
||||
return affected && affected.open == 3 && (affected.disfigured || affected.burn_dam > 0) && target_zone != O_MOUTH
|
||||
return affected && affected.open == BONE_RETRACTED && (affected.disfigured || affected.burn_dam > 0) && target_zone != O_MOUTH
|
||||
|
||||
/datum/surgery_step/robotics/repair_burn/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
@@ -319,7 +319,7 @@
|
||||
if(I.damage > 0 && (I.robotic >= ORGAN_ROBOT))
|
||||
is_organ_damaged = 1
|
||||
break
|
||||
return affected.open == 3 && is_organ_damaged
|
||||
return affected.open == BONE_RETRACTED && is_organ_damaged
|
||||
|
||||
/datum/surgery_step/robotics/fix_organ_robotic/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(!ishuman(target))
|
||||
@@ -518,7 +518,7 @@
|
||||
|
||||
var/obj/item/mmi/M = tool
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
if(!(affected && affected.open == 3))
|
||||
if(!(affected && affected.open == BONE_RETRACTED))
|
||||
return 0
|
||||
|
||||
if(!istype(M))
|
||||
@@ -621,7 +621,7 @@
|
||||
var/obj/item/holder/diona/N = tool
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
|
||||
if(!(affected && affected.open == 3))
|
||||
if(!(affected && affected.open == BONE_RETRACTED))
|
||||
return 0
|
||||
|
||||
if(!istype(N))
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
|
||||
/obj/structure/table/sifwoodentable
|
||||
icon_state = "plain_preview"
|
||||
color = "#824B28"
|
||||
color = "#0099cc"
|
||||
|
||||
/obj/structure/table/sifwoodentable/Initialize(mapload)
|
||||
material = get_material_by_name(MAT_SIFWOOD)
|
||||
@@ -204,7 +204,7 @@
|
||||
|
||||
/obj/structure/table/bench/sifwooden
|
||||
icon_state = "plain_preview"
|
||||
color = "#824B28"
|
||||
color = "#0099cc"
|
||||
|
||||
/obj/structure/table/bench/sifwooden/Initialize(mapload)
|
||||
material = get_material_by_name(MAT_SIFWOOD)
|
||||
@@ -255,3 +255,44 @@
|
||||
/obj/structure/table/bench/glamour/Initialize(mapload)
|
||||
material = get_material_by_name(MAT_GLAMOUR)
|
||||
. = ..()
|
||||
|
||||
//new wood types
|
||||
/obj/structure/table/birch
|
||||
icon_state = "plain_preview"
|
||||
color = "#f6dec0"
|
||||
|
||||
/obj/structure/table/birch/Initialize(mapload)
|
||||
material = get_material_by_name(MAT_BIRCHWOOD)
|
||||
. = ..()
|
||||
|
||||
/obj/structure/table/pine
|
||||
icon_state = "plain_preview"
|
||||
color = "#cd9d6f"
|
||||
|
||||
/obj/structure/table/pine/Initialize(mapload)
|
||||
material = get_material_by_name(MAT_PINEWOOD)
|
||||
. = ..()
|
||||
|
||||
/obj/structure/table/oak
|
||||
icon_state = "plain_preview"
|
||||
color = "#674928"
|
||||
|
||||
/obj/structure/table/oak/Initialize(mapload)
|
||||
material = get_material_by_name(MAT_OAKWOOD)
|
||||
. = ..()
|
||||
|
||||
/obj/structure/table/acacia
|
||||
icon_state = "plain_preview"
|
||||
color = "#b75e12"
|
||||
|
||||
/obj/structure/table/acacia/Initialize(mapload)
|
||||
material = get_material_by_name(MAT_ACACIAWOOD)
|
||||
. = ..()
|
||||
|
||||
/obj/structure/table/redwood
|
||||
icon_state = "stone_preview"
|
||||
color = "#a45a52"
|
||||
|
||||
/obj/structure/table/redwood/Initialize(mapload)
|
||||
material = get_material_by_name(MAT_REDWOOD)
|
||||
. = ..()
|
||||
|
||||
@@ -455,7 +455,7 @@ GLOBAL_LIST_EMPTY(pending_discord_registrations)
|
||||
message.text = "Error, job \"[role]\" is not a whitelist job."
|
||||
return message
|
||||
if(kind == "species")
|
||||
if(role in GLOB.playable_species)
|
||||
if(!(role in GLOB.playable_species))
|
||||
message.text = "Error, invalid species entered. Check spelling and capitalization."
|
||||
return message
|
||||
if(!(role in GLOB.whitelisted_species))
|
||||
|
||||
@@ -91,6 +91,7 @@
|
||||
#include "autowiki.dm"
|
||||
//#include "clothing_tests.dm" // FIXME
|
||||
#include "component_tests.dm"
|
||||
#include "construction_tests.dm"
|
||||
#include "cosmetic_tests.dm"
|
||||
#include "dcs_check_list_arguments.dm"
|
||||
#include "dcs_get_id_from_elements.dm"
|
||||
|
||||
11
code/modules/unit_tests/construction_tests.dm
Normal file
11
code/modules/unit_tests/construction_tests.dm
Normal file
@@ -0,0 +1,11 @@
|
||||
/datum/unit_test/mech_construction/Run()
|
||||
var/failed = FALSE
|
||||
for(var/datum/construction/C as anything in subtypesof(/datum/construction))
|
||||
// We check for null, as null is legal here... For now... Mech construction needs a full refactor to make them unittest-able in a not ugly way.
|
||||
if(!C.result)
|
||||
continue
|
||||
if(!ispath(C.result))
|
||||
TEST_NOTICE(src, "[C.type]: Mech Construction - Had invalid result \"[C.result]\", must be a path.")
|
||||
failed = TRUE
|
||||
if(failed)
|
||||
TEST_FAIL("Mech Construction - A construction datum had incorrect data.")
|
||||
@@ -30,10 +30,10 @@
|
||||
if(!L.permit_healbelly && is_beneficial) // Healing reagents turned off in preferences!
|
||||
continue
|
||||
if(reagents.total_volume)
|
||||
reagents.trans_to(L, affecting_amt, 1, FALSE)
|
||||
reagents.splash_mob(L, affecting_amt, FALSE)
|
||||
if(L.permit_healbelly && digest_mode == DM_HEAL)
|
||||
if(is_beneficial && reagents.total_volume)
|
||||
reagents.trans_to(L, affecting_amt, 1, FALSE)
|
||||
reagents.splash_mob(L, affecting_amt, FALSE)
|
||||
for(var/obj/item/I in touchable_atoms)
|
||||
if(is_type_in_list(I, GLOB.item_digestion_blacklist))
|
||||
continue
|
||||
|
||||
@@ -572,10 +572,10 @@
|
||||
var/obj/item/I = thing
|
||||
startfx.Add(get_belly_surrounding(I.contents))
|
||||
|
||||
for(var/mob/living/M in startfx) // End of indirect vorefx changes
|
||||
M.updateVRPanel()
|
||||
for(var/mob/living/living_mob in startfx) // End of indirect vorefx changes
|
||||
living_mob.updateVRPanel()
|
||||
var/raw_desc //Let's use this to avoid needing to write the reformat code twice
|
||||
if(absorbed_desc && M.absorbed)
|
||||
if(absorbed_desc && living_mob.absorbed)
|
||||
raw_desc = absorbed_desc
|
||||
else if(desc)
|
||||
raw_desc = desc
|
||||
@@ -583,21 +583,21 @@
|
||||
//Was there a description text? If so, it's time to format it!
|
||||
if(raw_desc)
|
||||
//Replace placeholder vars
|
||||
to_chat(M, span_vnotice(span_bold("[belly_format_string(raw_desc, M)]")))
|
||||
to_chat(living_mob, span_vnotice(span_bold("[belly_format_string(raw_desc, living_mob)]")))
|
||||
|
||||
var/taste
|
||||
if(can_taste && M.loc == src && (taste = M.get_taste_message(FALSE))) // Prevent indirect tasting
|
||||
to_chat(owner, span_vnotice("[M] tastes of [taste]."))
|
||||
vore_fx(M, TRUE)
|
||||
if(can_taste && living_mob.loc == src && (taste = living_mob.get_taste_message(FALSE))) // Prevent indirect tasting
|
||||
to_chat(owner, span_vnotice("[living_mob] tastes of [taste]."))
|
||||
vore_fx(living_mob, TRUE)
|
||||
if(owner.previewing_belly == src)
|
||||
vore_fx(owner, TRUE)
|
||||
//Stop AI processing in bellies
|
||||
if(M.ai_holder)
|
||||
M.ai_holder.go_sleep()
|
||||
if(living_mob.ai_holder)
|
||||
living_mob.ai_holder.go_sleep()
|
||||
if(reagents.total_volume >= 5)
|
||||
if(digest_mode == DM_DIGEST && M.digestable)
|
||||
reagents.trans_to(M, reagents.total_volume * 0.1, 1 / max(LAZYLEN(contents), 1), FALSE)
|
||||
to_chat(M, span_vwarning(span_bold("You splash into a pool of [reagent_name]!")))
|
||||
if(digest_mode == DM_DIGEST && living_mob.digestable)
|
||||
reagents.splash_mob(living_mob, reagents.total_volume * 0.1, FALSE)
|
||||
to_chat(living_mob, span_vwarning(span_bold("You splash into a pool of [reagent_name]!")))
|
||||
if(!isliving(thing) && count_items_for_sprite) // If this is enabled also update fullness for non-living things
|
||||
owner.handle_belly_update() // This is run whenever a belly's contents are changed.
|
||||
|
||||
|
||||
@@ -210,7 +210,7 @@
|
||||
H.forced_psay = FALSE
|
||||
|
||||
//Worn items flag
|
||||
if(mode_flags & DM_FLAG_AFFECTWORN)
|
||||
if((mode_flags & DM_FLAG_AFFECTWORN) && H.contaminate_pref)
|
||||
for(var/slot in slots)
|
||||
var/obj/item/I = H.get_equipped_item(slot = slot)
|
||||
if(I && I.canremove)
|
||||
|
||||
@@ -1059,10 +1059,13 @@
|
||||
dat += span_bold("Affected by temperature:") + " [allowtemp ? span_green("Enabled") : span_red("Disabled")]<br>"
|
||||
dat += span_bold("Autotransferable:") + " [autotransferable ? span_green("Enabled") : span_red("Disabled")]<br>"
|
||||
dat += span_bold("Can be stripped:") + " [strip_pref ? span_green("Allowed") : span_red("Disallowed")]<br>"
|
||||
dat += span_bold("Worn items can be contaminated:") + " [contaminate_pref ? span_green("Allowed") : span_red("Disallowed")]<br>"
|
||||
dat += span_bold("Applying reagents:") + " [apply_reagents ? span_green("Allowed") : span_red("Disallowed")]<br>"
|
||||
dat += span_bold("Leaves Remains:") + " [digest_leave_remains ? span_green("Enabled") : span_red("Disabled")]<br>"
|
||||
dat += span_bold("Spontaneous vore prey:") + " [can_be_drop_prey ? span_green("Enabled") : span_red("Disabled")]<br>"
|
||||
dat += span_bold("Spontaneous vore prey:") + " [can_be_drop_prey ? span_green("Enabled") : span_red("Disabled")]<br>"
|
||||
dat += span_bold("AFK/Disconnected vore prey:") + " [can_be_afk_prey ? span_green("Enabled") : span_red("Disabled")]<br>"
|
||||
dat += span_bold("Spontaneous vore pred:") + " [can_be_drop_pred ? span_green("Enabled") : span_red("Disabled")]<br>"
|
||||
dat += span_bold("AFK/Disconnected vore pred:") + " [can_be_afk_pred ? span_green("Enabled") : span_red("Disabled")]<br>"
|
||||
if(can_be_drop_prey || can_be_drop_pred)
|
||||
dat += span_bold("Drop Vore:") + " [drop_vore ? span_green("Enabled") : span_red("Disabled")]<br>"
|
||||
dat += span_bold("Slip Vore:") + " [slip_vore ? span_green("Enabled") : span_red("Disabled")]<br>"
|
||||
|
||||
@@ -23,6 +23,8 @@
|
||||
var/digest_pain = TRUE
|
||||
var/can_be_drop_prey = FALSE
|
||||
var/can_be_drop_pred = FALSE
|
||||
var/can_be_afk_prey = TRUE
|
||||
var/can_be_afk_pred = TRUE
|
||||
var/allow_spontaneous_tf = FALSE // Obviously.
|
||||
var/show_vore_fx = TRUE // Show belly fullscreens
|
||||
var/selective_preference = DM_DEFAULT // Preference for selective bellymode
|
||||
@@ -80,6 +82,7 @@
|
||||
var/noisy_full = FALSE //Enables belching when a mob has overeaten
|
||||
var/phase_vore = TRUE //Enabled by default since you have to enable drop pred/prey to do this anyway
|
||||
var/strip_pref = TRUE //Enables the ability for worn items to be stripped
|
||||
var/contaminate_pref = TRUE //Enables the ability for worn items to be digested/contaminated.
|
||||
var/no_latejoin_vore_warning = FALSE //Auto accepts pred spwan notifications (roundbased / saveable)
|
||||
var/no_latejoin_prey_warning = FALSE //Auto accepts prey spawn notifications (roundbased / saveable)
|
||||
var/no_latejoin_vore_warning_time = 15 //Time until accepting prey
|
||||
|
||||
@@ -12,6 +12,8 @@
|
||||
"show_vore_fx" = owner.show_vore_fx,
|
||||
"can_be_drop_prey" = owner.can_be_drop_prey,
|
||||
"can_be_drop_pred" = owner.can_be_drop_pred,
|
||||
"can_be_afk_prey" = owner.can_be_afk_prey,
|
||||
"can_be_afk_pred" = owner.can_be_afk_pred,
|
||||
"latejoin_vore" = owner.latejoin_vore,
|
||||
"latejoin_prey" = owner.latejoin_prey,
|
||||
"no_spawnpred_warning" = owner.no_latejoin_vore_warning,
|
||||
@@ -24,6 +26,7 @@
|
||||
"step_mechanics_active" = owner.step_mechanics_pref,
|
||||
"pickup_mechanics_active" = owner.pickup_pref,
|
||||
"strip_mechanics_active" = owner.strip_pref,
|
||||
"contaminate_worn_items" = owner.contaminate_pref,
|
||||
"noisy" = owner.noisy,
|
||||
//liquid belly prefs
|
||||
"liq_rec" = owner.receive_reagents,
|
||||
|
||||
@@ -186,4 +186,16 @@
|
||||
if(prey.absorbed || pred.absorbed)
|
||||
to_chat(user, span_vwarning("They aren't aren't in a state to be devoured."))
|
||||
return FALSE
|
||||
if(!pred.can_be_afk_pred && (!pred.client || pred.away_from_keyboard))
|
||||
if(user == pred)
|
||||
to_chat(user, span_vwarning("You aren't set as being able to pred while AFK"))
|
||||
return FALSE
|
||||
to_chat(user, span_vnotice("The predator prefers not to be fed while AFK"))
|
||||
return FALSE
|
||||
if(!prey.can_be_afk_prey && (!prey.client || prey.away_from_keyboard))
|
||||
if(user == prey)
|
||||
to_chat(user, span_vwarning("You aren't set as being able to prey while AFK"))
|
||||
return FALSE
|
||||
to_chat(user, span_vnotice("The prey prefers not to be eaten while AFK"))
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
@@ -41,6 +41,8 @@
|
||||
var/feeding = TRUE
|
||||
var/can_be_drop_prey = FALSE
|
||||
var/can_be_drop_pred = FALSE
|
||||
var/can_be_afk_prey = FALSE
|
||||
var/can_be_afk_pred = FALSE
|
||||
var/allow_spontaneous_tf = FALSE
|
||||
var/digest_leave_remains = FALSE
|
||||
var/allowmobvore = TRUE
|
||||
@@ -78,6 +80,7 @@
|
||||
var/latejoin_prey = FALSE
|
||||
var/autotransferable = TRUE
|
||||
var/strip_pref = FALSE
|
||||
var/contaminate_pref = TRUE
|
||||
var/no_latejoin_vore_warning = FALSE // Only load, when... no_latejoin_vore_warning_persists
|
||||
var/no_latejoin_prey_warning = FALSE // Only load, when... no_latejoin_vore_warning_persists
|
||||
var/no_latejoin_vore_warning_time = 15 // Only load, when... no_latejoin_vore_warning_persists
|
||||
@@ -203,6 +206,8 @@
|
||||
show_vore_fx = json_from_file["show_vore_fx"]
|
||||
can_be_drop_prey = json_from_file["can_be_drop_prey"]
|
||||
can_be_drop_pred = json_from_file["can_be_drop_pred"]
|
||||
can_be_afk_prey = json_from_file["can_be_afk_prey"]
|
||||
can_be_afk_pred = json_from_file["can_be_afk_pred"]
|
||||
allow_spontaneous_tf = json_from_file["allow_spontaneous_tf"]
|
||||
step_mechanics_pref = json_from_file["step_mechanics_pref"]
|
||||
pickup_pref = json_from_file["pickup_pref"]
|
||||
@@ -234,6 +239,7 @@
|
||||
autotransferable = json_from_file["autotransferable"]
|
||||
vore_sprite_multiply = json_from_file["vore_sprite_multiply"]
|
||||
strip_pref = json_from_file["strip_pref"]
|
||||
contaminate_pref = json_from_file["contaminate_pref"]
|
||||
|
||||
no_latejoin_vore_warning_persists = json_from_file["no_latejoin_vore_warning_persists"]
|
||||
if(no_latejoin_vore_warning_persists)
|
||||
@@ -278,6 +284,10 @@
|
||||
can_be_drop_prey = FALSE
|
||||
if(isnull(can_be_drop_pred))
|
||||
can_be_drop_pred = FALSE
|
||||
if(isnull(can_be_afk_prey))
|
||||
can_be_afk_prey = FALSE
|
||||
if(isnull(can_be_afk_pred))
|
||||
can_be_afk_pred = FALSE
|
||||
if(isnull(allow_spontaneous_tf))
|
||||
allow_spontaneous_tf = FALSE
|
||||
if(isnull(step_mechanics_pref))
|
||||
@@ -363,6 +373,8 @@
|
||||
vore_sprite_multiply = list("stomach" = FALSE, "taur belly" = FALSE)
|
||||
if(isnull(strip_pref))
|
||||
strip_pref = TRUE
|
||||
if(isnull(contaminate_pref))
|
||||
contaminate_pref = TRUE
|
||||
if(isnull(no_latejoin_vore_warning))
|
||||
no_latejoin_vore_warning = FALSE
|
||||
if(isnull(no_latejoin_prey_warning))
|
||||
@@ -410,6 +422,8 @@
|
||||
"show_vore_fx" = show_vore_fx,
|
||||
"can_be_drop_prey" = can_be_drop_prey,
|
||||
"can_be_drop_pred" = can_be_drop_pred,
|
||||
"can_be_afk_prey" = can_be_afk_prey,
|
||||
"can_be_afk_pred" = can_be_afk_pred,
|
||||
"latejoin_vore" = latejoin_vore,
|
||||
"latejoin_prey" = latejoin_prey,
|
||||
"allow_spontaneous_tf" = allow_spontaneous_tf,
|
||||
@@ -437,6 +451,7 @@
|
||||
"allow_mimicry" = allow_mimicry,
|
||||
"vore_sprite_multiply" = vore_sprite_multiply,
|
||||
"strip_pref" = strip_pref,
|
||||
"contaminate_pref" = contaminate_pref,
|
||||
"no_latejoin_vore_warning" = no_latejoin_vore_warning,
|
||||
"no_latejoin_prey_warning" = no_latejoin_prey_warning,
|
||||
"no_latejoin_vore_warning_time" = no_latejoin_vore_warning_time,
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user