mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2026-01-06 23:42:56 +00:00
Merge branch 'master' into upstream-merge-10050
This commit is contained in:
@@ -50,3 +50,11 @@ var/list/tachycardics = list("coffee", "inaprovaline", "hyperzine", "nitroglyce
|
||||
var/list/bradycardics = list("neurotoxin", "cryoxadone", "clonexadone", "space_drugs", "stoxin") // Decrease heart rate.
|
||||
var/list/heartstopper = list("potassium_chlorophoride", "zombie_powder") // This stops the heart.
|
||||
var/list/cheartstopper = list("potassium_chloride") // This stops the heart when overdose is met. -- c = conditional
|
||||
|
||||
#define MAX_PILL_SPRITE 24 //max icon state of the pill sprites
|
||||
#define MAX_BOTTLE_SPRITE 4 //max icon state of the pill sprites
|
||||
#define MAX_MULTI_AMOUNT 20 // Max number of pills/patches that can be made at once
|
||||
#define MAX_UNITS_PER_PILL 60 // Max amount of units in a pill
|
||||
#define MAX_UNITS_PER_PATCH 60 // Max amount of units in a patch
|
||||
#define MAX_UNITS_PER_BOTTLE 60 // Max amount of units in a bottle (it's volume)
|
||||
#define MAX_CUSTOM_NAME_LEN 64 // Max length of a custom pill/condiment/whatever
|
||||
63
code/__defines/materials.dm
Normal file
63
code/__defines/materials.dm
Normal file
@@ -0,0 +1,63 @@
|
||||
#define DEFAULT_TABLE_MATERIAL "plastic"
|
||||
#define DEFAULT_WALL_MATERIAL "steel"
|
||||
|
||||
#define MAT_IRON "iron"
|
||||
#define MAT_MARBLE "marble"
|
||||
#define MAT_STEEL "steel"
|
||||
#define MAT_PLASTIC "plastic"
|
||||
#define MAT_GLASS "glass"
|
||||
#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_WOOD "wood"
|
||||
#define MAT_LOG "log"
|
||||
#define MAT_SIFWOOD "alien wood"
|
||||
#define MAT_SIFLOG "alien log"
|
||||
#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_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_LEATHER "leather"
|
||||
#define MAT_CHITIN "chitin"
|
||||
#define MAT_CLOTH "cloth"
|
||||
#define MAT_SYNCLOTH "syncloth"
|
||||
#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_BOROSILICATE "borosilicate glass"
|
||||
#define MAT_SANDSTONE "sandstone"
|
||||
|
||||
#define SHARD_SHARD "shard"
|
||||
#define SHARD_SHRAPNEL "shrapnel"
|
||||
#define SHARD_STONE_PIECE "piece"
|
||||
#define SHARD_SPLINTER "splinters"
|
||||
#define SHARD_NONE ""
|
||||
|
||||
#define MATERIAL_UNMELTABLE 0x1
|
||||
#define MATERIAL_BRITTLE 0x2
|
||||
#define MATERIAL_PADDING 0x4
|
||||
|
||||
#define DEFAULT_TABLE_MATERIAL "plastic"
|
||||
#define DEFAULT_WALL_MATERIAL "steel"
|
||||
|
||||
#define TABLE_BRITTLE_MATERIAL_MULTIPLIER 4 // Amount table damage is multiplied by if it is made of a brittle material (e.g. glass)
|
||||
@@ -121,65 +121,6 @@
|
||||
#define WALL_CAN_OPEN 1
|
||||
#define WALL_OPENING 2
|
||||
|
||||
#define DEFAULT_TABLE_MATERIAL "plastic"
|
||||
#define DEFAULT_WALL_MATERIAL "steel"
|
||||
|
||||
#define MAT_IRON "iron"
|
||||
#define MAT_MARBLE "marble"
|
||||
#define MAT_STEEL "steel"
|
||||
#define MAT_PLASTIC "plastic"
|
||||
#define MAT_GLASS "glass"
|
||||
#define MAT_SILVER "silver"
|
||||
#define MAT_GOLD "gold"
|
||||
#define MAT_URANIUM "uranium" //Did it
|
||||
#define MAT_TITANIUM "titanium"
|
||||
#define MAT_PHORON "phoron"
|
||||
#define MAT_DIAMOND "diamond"
|
||||
#define MAT_SNOW "snow"
|
||||
#define MAT_WOOD "wood"
|
||||
#define MAT_LOG "log"
|
||||
#define MAT_SIFWOOD "alien wood"
|
||||
#define MAT_SIFLOG "alien log"
|
||||
#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_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_LEATHER "leather"
|
||||
#define MAT_CHITIN "chitin"
|
||||
#define MAT_CLOTH "cloth"
|
||||
#define MAT_SYNCLOTH "syncloth"
|
||||
#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_BOROSILICATE "borosilicate glass"
|
||||
|
||||
#define SHARD_SHARD "shard"
|
||||
#define SHARD_SHRAPNEL "shrapnel"
|
||||
#define SHARD_STONE_PIECE "piece"
|
||||
#define SHARD_SPLINTER "splinters"
|
||||
#define SHARD_NONE ""
|
||||
|
||||
#define MATERIAL_UNMELTABLE 0x1
|
||||
#define MATERIAL_BRITTLE 0x2
|
||||
#define MATERIAL_PADDING 0x4
|
||||
|
||||
#define TABLE_BRITTLE_MATERIAL_MULTIPLIER 4 // Amount table damage is multiplied by if it is made of a brittle material (e.g. glass)
|
||||
|
||||
#define BOMBCAP_DVSTN_RADIUS (max_explosion_range/4)
|
||||
#define BOMBCAP_HEAVY_RADIUS (max_explosion_range/2)
|
||||
#define BOMBCAP_LIGHT_RADIUS max_explosion_range
|
||||
@@ -504,3 +445,7 @@ GLOBAL_LIST_INIT(all_volume_channels, list(
|
||||
#define APPEARANCECHANGER_CHANGED_EYES "Eye Color"
|
||||
|
||||
#define GET_DECL(D) (ispath(D, /decl) ? (decls_repository.fetched_decls[D] || decls_repository.get_decl(D)) : null)
|
||||
|
||||
#define LOADOUT_WHITELIST_OFF 0
|
||||
#define LOADOUT_WHITELIST_LAX 1
|
||||
#define LOADOUT_WHITELIST_STRICT 2
|
||||
@@ -437,7 +437,7 @@
|
||||
#define EXAMINE_SKIPLEGS 0x0080
|
||||
#define EXAMINE_SKIPFEET 0x0100
|
||||
|
||||
#define MAX_NUTRITION 5000 //VOREStation Edit
|
||||
#define MAX_NUTRITION 6000 //VOREStation Edit
|
||||
|
||||
#define FAKE_INVIS_ALPHA_THRESHOLD 127 // If something's alpha var is at or below this number, certain things will pretend it is invisible.
|
||||
|
||||
|
||||
@@ -30,20 +30,3 @@ GLOBAL_LIST_INIT(cww_dir, list( // cww_dir[dir] = counter-clockwise rotation of
|
||||
32, 40, 36, 44, 33, 41, 37, 45, 34, 42, 38, 46, 35, 43, 39, 47, // DOWN - Same as first line but +32
|
||||
48, 56, 52, 60, 49, 57, 53, 61, 50, 58, 54, 62, 51, 59, 55, 63 // UP+DOWN - Same as first line but +48
|
||||
))
|
||||
|
||||
GLOBAL_LIST_INIT(ore_types, list(
|
||||
"hematite" = /obj/item/weapon/ore/iron,
|
||||
"uranium" = /obj/item/weapon/ore/uranium,
|
||||
"gold" = /obj/item/weapon/ore/gold,
|
||||
"silver" = /obj/item/weapon/ore/silver,
|
||||
"diamond" = /obj/item/weapon/ore/diamond,
|
||||
"phoron" = /obj/item/weapon/ore/phoron,
|
||||
"osmium" = /obj/item/weapon/ore/osmium,
|
||||
"hydrogen" = /obj/item/weapon/ore/hydrogen,
|
||||
"silicates" = /obj/item/weapon/ore/glass,
|
||||
"carbon" = /obj/item/weapon/ore/coal,
|
||||
"verdantium" = /obj/item/weapon/ore/verdantium,
|
||||
"marble" = /obj/item/weapon/ore/marble,
|
||||
"lead" = /obj/item/weapon/ore/lead,
|
||||
"rutile" = /obj/item/weapon/ore/rutile //VOREStation Add
|
||||
))
|
||||
File diff suppressed because it is too large
Load Diff
58
code/controllers/subsystems/chemistry.dm
Normal file
58
code/controllers/subsystems/chemistry.dm
Normal file
@@ -0,0 +1,58 @@
|
||||
SUBSYSTEM_DEF(chemistry)
|
||||
name = "Chemistry"
|
||||
wait = 20
|
||||
flags = SS_NO_FIRE
|
||||
init_order = INIT_ORDER_CHEMISTRY
|
||||
|
||||
var/list/chemical_reactions = list()
|
||||
var/list/instant_reactions_by_reagent = list()
|
||||
var/list/distilled_reactions_by_reagent = list()
|
||||
// var/list/fusion_reactions_by_reagent = list() // TODO: Fusion reactions as chemical reactions
|
||||
var/list/chemical_reagents = list()
|
||||
|
||||
/datum/controller/subsystem/chemistry/Recover()
|
||||
log_debug("[name] subsystem Recover().")
|
||||
chemical_reactions = SSchemistry.chemical_reactions
|
||||
chemical_reagents = SSchemistry.chemical_reagents
|
||||
|
||||
/datum/controller/subsystem/chemistry/Initialize()
|
||||
initialize_chemical_reagents()
|
||||
initialize_chemical_reactions()
|
||||
..()
|
||||
|
||||
/datum/controller/subsystem/chemistry/stat_entry()
|
||||
..("C: [chemical_reagents.len] | R: [chemical_reactions.len]")
|
||||
|
||||
//Chemical Reactions - Initialises all /decl/chemical_reaction into a list
|
||||
// It is filtered into multiple lists within a list.
|
||||
// For example:
|
||||
// chemical_reactions_by_reagent["phoron"] is a list of all reactions relating to phoron
|
||||
// Note that entries in the list are NOT duplicated. So if a reaction pertains to
|
||||
// more than one chemical it will still only appear in only one of the sublists.
|
||||
/datum/controller/subsystem/chemistry/proc/initialize_chemical_reactions()
|
||||
var/list/paths = decls_repository.get_decls_of_subtype(/decl/chemical_reaction)
|
||||
|
||||
for(var/path in paths)
|
||||
var/decl/chemical_reaction/D = paths[path]
|
||||
chemical_reactions += D
|
||||
if(D.required_reagents && D.required_reagents.len)
|
||||
var/reagent_id = D.required_reagents[1]
|
||||
|
||||
var/list/add_to = instant_reactions_by_reagent // Default to instant reactions list, if something's gone wrong
|
||||
// if(istype(D, /decl/chemical_reaction/fusion)) // TODO: fusion reactions as chemical reactions
|
||||
// add_to = fusion_reactions_by_reagent
|
||||
if(istype(D, /decl/chemical_reaction/distilling))
|
||||
add_to = distilled_reactions_by_reagent
|
||||
|
||||
LAZYINITLIST(add_to[reagent_id])
|
||||
add_to[reagent_id] += D
|
||||
|
||||
//Chemical Reagents - Initialises all /datum/reagent into a list indexed by reagent id
|
||||
/datum/controller/subsystem/chemistry/proc/initialize_chemical_reagents()
|
||||
var/paths = subtypesof(/datum/reagent)
|
||||
chemical_reagents = list()
|
||||
for(var/path in paths)
|
||||
var/datum/reagent/D = new path()
|
||||
if(!D.name)
|
||||
continue
|
||||
chemical_reagents[D.id] = D
|
||||
@@ -1,54 +0,0 @@
|
||||
PROCESSING_SUBSYSTEM_DEF(chemistry)
|
||||
name = "Chemistry"
|
||||
wait = 20
|
||||
flags = SS_BACKGROUND|SS_POST_FIRE_TIMING
|
||||
init_order = INIT_ORDER_CHEMISTRY
|
||||
var/list/chemical_reactions = list()
|
||||
var/list/chemical_reactions_by_reagent = list()
|
||||
var/list/chemical_reagents = list()
|
||||
|
||||
/datum/controller/subsystem/processing/chemistry/Recover()
|
||||
log_debug("[name] subsystem Recover().")
|
||||
if(SSchemistry.current_thing)
|
||||
log_debug("current_thing was: (\ref[SSchemistry.current_thing])[SSchemistry.current_thing]([SSchemistry.current_thing.type]) - currentrun: [SSchemistry.currentrun.len] vs total: [SSchemistry.processing.len]")
|
||||
var/list/old_processing = SSchemistry.processing.Copy()
|
||||
for(var/datum/D in old_processing)
|
||||
if(CHECK_BITFIELD(D.datum_flags, DF_ISPROCESSING))
|
||||
processing |= D
|
||||
|
||||
chemical_reactions = SSchemistry.chemical_reactions
|
||||
chemical_reagents = SSchemistry.chemical_reagents
|
||||
|
||||
/datum/controller/subsystem/processing/chemistry/Initialize()
|
||||
initialize_chemical_reactions()
|
||||
initialize_chemical_reagents()
|
||||
..()
|
||||
|
||||
//Chemical Reactions - Initialises all /datum/chemical_reaction into a list
|
||||
// It is filtered into multiple lists within a list.
|
||||
// For example:
|
||||
// chemical_reaction_list["phoron"] is a list of all reactions relating to phoron
|
||||
// Note that entries in the list are NOT duplicated. So if a reaction pertains to
|
||||
// more than one chemical it will still only appear in only one of the sublists.
|
||||
/datum/controller/subsystem/processing/chemistry/proc/initialize_chemical_reactions()
|
||||
var/paths = typesof(/datum/chemical_reaction) - /datum/chemical_reaction
|
||||
chemical_reactions = list()
|
||||
chemical_reactions_by_reagent = list()
|
||||
|
||||
for(var/path in paths)
|
||||
var/datum/chemical_reaction/D = new path
|
||||
chemical_reactions += D
|
||||
if(D.required_reagents && D.required_reagents.len)
|
||||
var/reagent_id = D.required_reagents[1]
|
||||
LAZYINITLIST(chemical_reactions_by_reagent[reagent_id])
|
||||
chemical_reactions_by_reagent[reagent_id] += D
|
||||
|
||||
//Chemical Reagents - Initialises all /datum/reagent into a list indexed by reagent id
|
||||
/datum/controller/subsystem/processing/chemistry/proc/initialize_chemical_reagents()
|
||||
var/paths = typesof(/datum/reagent) - /datum/reagent
|
||||
chemical_reagents = list()
|
||||
for(var/path in paths)
|
||||
var/datum/reagent/D = new path()
|
||||
if(!D.name)
|
||||
continue
|
||||
chemical_reagents[D.id] = D
|
||||
@@ -11,7 +11,7 @@
|
||||
start_sound = 'sound/effects/weather/snowstorm/outside/active_start.ogg'
|
||||
start_length = 13 SECONDS
|
||||
end_sound = 'sound/effects/weather/snowstorm/outside/active_end.ogg'
|
||||
volume = 80
|
||||
volume = 40
|
||||
|
||||
/datum/looping_sound/weather/inside_blizzard
|
||||
mid_sounds = list(
|
||||
@@ -23,7 +23,7 @@
|
||||
start_sound = 'sound/effects/weather/snowstorm/inside/active_start.ogg'
|
||||
start_length = 13 SECONDS
|
||||
end_sound = 'sound/effects/weather/snowstorm/inside/active_end.ogg'
|
||||
volume = 60
|
||||
volume = 20
|
||||
|
||||
/datum/looping_sound/weather/outside_snow
|
||||
mid_sounds = list(
|
||||
@@ -35,7 +35,7 @@
|
||||
start_sound = 'sound/effects/weather/snowstorm/outside/weak_start.ogg'
|
||||
start_length = 13 SECONDS
|
||||
end_sound = 'sound/effects/weather/snowstorm/outside/weak_end.ogg'
|
||||
volume = 50
|
||||
volume = 20
|
||||
|
||||
/datum/looping_sound/weather/inside_snow
|
||||
mid_sounds = list(
|
||||
@@ -47,7 +47,7 @@
|
||||
start_sound = 'sound/effects/weather/snowstorm/inside/weak_start.ogg'
|
||||
start_length = 13 SECONDS
|
||||
end_sound = 'sound/effects/weather/snowstorm/inside/weak_end.ogg'
|
||||
volume = 30
|
||||
volume = 10
|
||||
|
||||
/datum/looping_sound/weather/wind
|
||||
mid_sounds = list(
|
||||
@@ -59,11 +59,17 @@
|
||||
'sound/effects/weather/wind/wind_5_1.ogg' = 1
|
||||
)
|
||||
mid_length = 10 SECONDS // The lengths for the files vary, but the longest is ten seconds, so this will make it sound like intermittent wind.
|
||||
volume = 50
|
||||
volume = 45
|
||||
|
||||
// Don't have special sounds so we just make it quieter indoors.
|
||||
/datum/looping_sound/weather/wind/indoors
|
||||
volume = 30
|
||||
volume = 25
|
||||
|
||||
/datum/looping_sound/weather/wind/gentle
|
||||
volume = 15
|
||||
|
||||
/datum/looping_sound/weather/wind/gentle/indoors
|
||||
volume = 5
|
||||
|
||||
/datum/looping_sound/weather/rain
|
||||
mid_sounds = list(
|
||||
@@ -73,7 +79,13 @@
|
||||
start_sound = 'sound/effects/weather/acidrain_start.ogg'
|
||||
start_length = 13 SECONDS
|
||||
end_sound = 'sound/effects/weather/acidrain_end.ogg'
|
||||
volume = 50
|
||||
volume = 20
|
||||
|
||||
/datum/looping_sound/weather/rain/indoors
|
||||
volume = 30
|
||||
volume = 10
|
||||
|
||||
/datum/looping_sound/weather/rain/heavy
|
||||
volume = 40
|
||||
|
||||
/datum/looping_sound/weather/rain/heavy/indoors
|
||||
volume = 20
|
||||
@@ -24,7 +24,8 @@ var/global/datum/repository/crew/crew_repository = new()
|
||||
var/tracked = scan()
|
||||
for(var/obj/item/clothing/under/C in tracked)
|
||||
var/turf/pos = get_turf(C)
|
||||
if((C) && (C.has_sensor) && (pos) && (pos.z == zLevel) && (C.sensor_mode != SUIT_SENSOR_OFF) && !(is_jammed(C)))
|
||||
var/area/B = pos?.loc //VOREStation Add: No sensor in Dorm
|
||||
if((C.has_sensor) && (pos?.z == zLevel) && (C.sensor_mode != SUIT_SENSOR_OFF) && !(B.block_suit_sensors) && !(is_jammed(C))) //VOREStation Edit
|
||||
if(istype(C.loc, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = C.loc
|
||||
if(H.w_uniform != C)
|
||||
|
||||
@@ -2,11 +2,21 @@
|
||||
* Highly Visible and Dangerous Weapons *
|
||||
***************************************/
|
||||
/datum/uplink_item/item/visible_weapons/holdout
|
||||
name = "Holdout Phaser"
|
||||
name = "Frontier Holdout"
|
||||
item_cost = 30
|
||||
path = /obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked
|
||||
|
||||
/datum/uplink_item/item/visible_weapons/frontier
|
||||
name = "Frontier Carbine"
|
||||
name = "Frontier Phaser"
|
||||
item_cost = 75
|
||||
path = /obj/item/weapon/gun/energy/locked/frontier/unlocked
|
||||
|
||||
/datum/uplink_item/item/visible_weapons/carbine
|
||||
name = "Frontier Carbine"
|
||||
item_cost = 85
|
||||
path = /obj/item/weapon/gun/energy/locked/frontier/carbine/unlocked
|
||||
|
||||
/datum/uplink_item/item/visible_weapons/rifle
|
||||
name = "Frontier Marksman Rifle"
|
||||
item_cost = 100
|
||||
path = /obj/item/weapon/gun/energy/locked/frontier/rifle/unlocked
|
||||
|
||||
@@ -1,6 +1,3 @@
|
||||
/area
|
||||
var/limit_mob_size = TRUE //If mob size is limited in the area.
|
||||
|
||||
/area/shuttle/belter
|
||||
name = "Belter Shuttle"
|
||||
icon_state = "shuttle2"
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
/area
|
||||
var/enter_message
|
||||
var/exit_message
|
||||
var/limit_mob_size = TRUE //If mob size is limited in the area.
|
||||
var/block_suit_sensors = FALSE //If mob size is limited in the area.
|
||||
|
||||
/area/Entered(var/atom/movable/AM, oldLoc)
|
||||
. = ..()
|
||||
|
||||
35
code/game/machinery/computer/arcade_vr.dm
Normal file
35
code/game/machinery/computer/arcade_vr.dm
Normal file
@@ -0,0 +1,35 @@
|
||||
/obj/machinery/computer/arcade
|
||||
list/prizes = list( /obj/item/weapon/storage/box/snappops = 2,
|
||||
/obj/item/toy/blink = 2,
|
||||
/obj/item/clothing/under/syndicate/tacticool = 2,
|
||||
/obj/item/toy/sword = 2,
|
||||
/obj/item/weapon/gun/projectile/revolver/capgun = 2,
|
||||
/obj/item/toy/crossbow = 2,
|
||||
/obj/item/clothing/suit/syndicatefake = 2,
|
||||
/obj/item/weapon/storage/fancy/crayons = 2,
|
||||
/obj/item/toy/spinningtoy = 2,
|
||||
/obj/random/mech_toy = 1,
|
||||
/obj/item/weapon/reagent_containers/spray/waterflower = 1,
|
||||
/obj/random/action_figure = 1,
|
||||
/obj/random/plushie = 1,
|
||||
/obj/item/toy/cultsword = 1,
|
||||
/obj/item/toy/bouquet/fake = 1,
|
||||
/obj/item/clothing/accessory/badge/sheriff = 2,
|
||||
/obj/item/clothing/head/cowboy_hat/small = 2,
|
||||
/obj/item/toy/stickhorse = 2,
|
||||
/obj/item/toy/rock = 2,
|
||||
/obj/item/toy/flash = 2,
|
||||
/obj/item/toy/redbutton = 2,
|
||||
/obj/item/toy/gnome = 2,
|
||||
/obj/item/toy/AI = 2,
|
||||
/obj/item/clothing/gloves/ring/buzzer/toy = 2,
|
||||
/obj/item/weapon/storage/box/handcuffs/fake = 2,
|
||||
/obj/item/toy/nuke = 2,
|
||||
/obj/item/toy/minigibber = 2,
|
||||
/obj/item/toy/toy_xeno = 2,
|
||||
/obj/item/toy/russian_revolver = 1,
|
||||
/obj/item/toy/russian_revolver/trick_revolver = 1,
|
||||
/obj/item/toy/chainsaw = 1,
|
||||
/obj/random/miniature = 1,
|
||||
/obj/item/toy/snake_popper = 1
|
||||
)
|
||||
@@ -200,7 +200,6 @@
|
||||
modify.access -= access_type
|
||||
if(!access_allowed)
|
||||
modify.access += access_type
|
||||
modify.lost_access = list() //VOREStation addition: reset the lost access upon any modifications
|
||||
. = TRUE
|
||||
|
||||
if("assign")
|
||||
@@ -225,7 +224,6 @@
|
||||
modify.access = access
|
||||
modify.assignment = t1
|
||||
modify.rank = t1
|
||||
modify.lost_access = list() //VOREStation addition: reset the lost access upon any modifications
|
||||
|
||||
callHook("reassign_employee", list(modify))
|
||||
. = TRUE
|
||||
@@ -283,7 +281,6 @@
|
||||
if(is_authenticated())
|
||||
modify.assignment = "Dismissed" //VOREStation Edit: setting adjustment
|
||||
modify.access = list()
|
||||
modify.lost_access = list() //VOREStation addition: reset the lost access upon any modifications
|
||||
|
||||
callHook("terminate_employee", list(modify))
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
var/obj/item/weapon/card/id/inserted
|
||||
|
||||
/obj/machinery/computer/id_restorer/attackby(obj/I, mob/user)
|
||||
/*
|
||||
if(istype(I, /obj/item/weapon/card/id) && !(istype(I,/obj/item/weapon/card/id/guest)))
|
||||
if(!inserted && user.unEquip(I))
|
||||
I.forceMove(src)
|
||||
@@ -24,12 +25,14 @@
|
||||
else if(inserted)
|
||||
to_chat(user, "<span class='warning'>There is already ID card inside.</span>")
|
||||
return
|
||||
*/
|
||||
..()
|
||||
|
||||
/obj/machinery/computer/id_restorer/attack_hand(mob/user)
|
||||
if(..()) return
|
||||
if(stat & (NOPOWER|BROKEN)) return
|
||||
|
||||
/*
|
||||
if(!inserted) // No point in giving you an option what to do if there's no ID to do things with.
|
||||
to_chat(user, "<span class='notice'>No ID is inserted.</span>")
|
||||
return
|
||||
@@ -78,6 +81,7 @@
|
||||
return
|
||||
if("Cancel")
|
||||
return
|
||||
*/
|
||||
|
||||
|
||||
//Frame
|
||||
|
||||
@@ -634,10 +634,6 @@
|
||||
model_text = "Exploration"
|
||||
departments = list("Exploration","Expedition Medic","Old Exploration","No Change")
|
||||
|
||||
/obj/machinery/suit_cycler/exploration/Initialize()
|
||||
species -= SPECIES_TESHARI
|
||||
return ..()
|
||||
|
||||
/obj/machinery/suit_cycler/pilot
|
||||
name = "Pilot suit cycler"
|
||||
model_text = "Pilot"
|
||||
|
||||
@@ -3282,3 +3282,36 @@
|
||||
/obj/machinery/vending/cola/soft
|
||||
icon = 'icons/obj/vending_vr.dmi'
|
||||
icon_state = "Cola_Machine"
|
||||
|
||||
//////////////////////Bepis Drinks (04/29/2021)//////////////////////
|
||||
|
||||
/obj/machinery/vending/bepis
|
||||
name = "Bepis Softdrinks"
|
||||
desc = "A strange softdrink vendor that isn't owned by NanoTrasen... Why (and how) is it here?"
|
||||
icon = 'icons/obj/vending_vr.dmi'
|
||||
icon_state = "bepis"
|
||||
product_slogans = "Refreshing!;Have a sip, you won't believe the taste!;Puts the 'B' in Best Soda!"
|
||||
product_ads = "Refreshing!;Hope you're thirsty!;Please, have a drink!;Drink up!"
|
||||
products = list(/obj/item/weapon/reagent_containers/food/drinks/cans/bepis = 10,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/astrodew = 10,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/buzz = 10,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/shambler = 10,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/cranberry = 10,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/icecoffee = 10,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/iced_tea = 10,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/grape_juice = 10,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/gingerale = 10,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/root_beer = 10)
|
||||
|
||||
prices = list(/obj/item/weapon/reagent_containers/food/drinks/cans/bepis = 1,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/astrodew = 1,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/buzz = 1,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/shambler = 1,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/cranberry = 1,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/icecoffee = 1,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/iced_tea = 1,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/grape_juice = 1,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/gingerale = 1,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/root_beer = 1)
|
||||
idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan.
|
||||
vending_sound = "machines/vending/vending_cans.ogg"
|
||||
|
||||
42
code/game/objects/effects/confetti_vr.dm
Normal file
42
code/game/objects/effects/confetti_vr.dm
Normal file
@@ -0,0 +1,42 @@
|
||||
/obj/effect/effect/sparks/confetti
|
||||
name = "confetti"
|
||||
icon = 'icons/effects/effects_vr.dmi'
|
||||
icon_state = "confetti"
|
||||
|
||||
/obj/effect/effect/sparks/New()
|
||||
..()
|
||||
playsound(src, "sounds/items/confetti.ogg ", 100, 1)
|
||||
|
||||
/datum/effect/effect/system/confetti_spread
|
||||
var/total_sparks = 0 // To stop it being spammed and lagging!
|
||||
|
||||
set_up(n = 3, c = 0, loca)
|
||||
if(n > 10)
|
||||
n = 10
|
||||
number = n
|
||||
cardinals = c
|
||||
if(istype(loca, /turf/))
|
||||
location = loca
|
||||
else
|
||||
location = get_turf(loca)
|
||||
|
||||
start()
|
||||
var/i = 0
|
||||
for(i=0, i<src.number, i++)
|
||||
if(src.total_sparks > 20)
|
||||
return
|
||||
spawn(0)
|
||||
if(holder)
|
||||
src.location = get_turf(holder)
|
||||
var/obj/effect/effect/sparks/confetti = new /obj/effect/effect/sparks/confetti(src.location)
|
||||
src.total_sparks++
|
||||
var/direction
|
||||
if(src.cardinals)
|
||||
direction = pick(cardinal)
|
||||
else
|
||||
direction = pick(alldirs)
|
||||
for(i=0, i<pick(1,2,3), i++)
|
||||
sleep(5)
|
||||
step(confetti,direction)
|
||||
spawn(20)
|
||||
src.total_sparks--
|
||||
@@ -1,102 +0,0 @@
|
||||
/* Glass stack types
|
||||
* Contains:
|
||||
* Glass sheets
|
||||
* Reinforced glass sheets
|
||||
* Phoron Glass Sheets
|
||||
* Reinforced Phoron Glass Sheets (AKA Holy fuck strong windows)
|
||||
* Glass shards - TODO: Move this into code/game/object/item/weapons
|
||||
*/
|
||||
|
||||
/*
|
||||
* Glass sheets
|
||||
*/
|
||||
/obj/item/stack/material/glass
|
||||
name = "glass"
|
||||
singular_name = "glass sheet"
|
||||
icon_state = "sheet-glass"
|
||||
var/is_reinforced = 0
|
||||
default_type = "glass"
|
||||
drop_sound = 'sound/items/drop/glass.ogg'
|
||||
pickup_sound = 'sound/items/pickup/glass.ogg'
|
||||
|
||||
/obj/item/stack/material/glass/attack_self(mob/user as mob)
|
||||
construct_window(user)
|
||||
|
||||
/obj/item/stack/material/glass/attackby(obj/item/W, mob/user)
|
||||
..()
|
||||
if(!is_reinforced)
|
||||
if(istype(W,/obj/item/stack/cable_coil))
|
||||
var/obj/item/stack/cable_coil/CC = W
|
||||
if (get_amount() < 1 || CC.get_amount() < 5)
|
||||
to_chat(user, "<span class='warning'>You need five lengths of coil and one sheet of glass to make wired glass.</span>")
|
||||
return
|
||||
|
||||
CC.use(5)
|
||||
use(1)
|
||||
to_chat(user, "<span class='notice'>You attach wire to the [name].</span>")
|
||||
new /obj/item/stack/light_w(user.loc)
|
||||
else if(istype(W, /obj/item/stack/rods))
|
||||
var/obj/item/stack/rods/V = W
|
||||
if (V.get_amount() < 1 || get_amount() < 1)
|
||||
to_chat(user, "<span class='warning'>You need one rod and one sheet of glass to make reinforced glass.</span>")
|
||||
return
|
||||
|
||||
var/obj/item/stack/material/glass/reinforced/RG = new (user.loc)
|
||||
RG.add_fingerprint(user)
|
||||
RG.add_to_stacks(user)
|
||||
var/obj/item/stack/material/glass/G = src
|
||||
src = null
|
||||
var/replace = (user.get_inactive_hand()==G)
|
||||
V.use(1)
|
||||
G.use(1)
|
||||
if (!G && replace)
|
||||
user.put_in_hands(RG)
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Reinforced glass sheets
|
||||
*/
|
||||
/obj/item/stack/material/glass/reinforced
|
||||
name = "reinforced glass"
|
||||
singular_name = "reinforced glass sheet"
|
||||
icon_state = "sheet-rglass"
|
||||
default_type = "reinforced glass"
|
||||
is_reinforced = 1
|
||||
|
||||
/*
|
||||
* Phoron Glass sheets
|
||||
*/
|
||||
/obj/item/stack/material/glass/phoronglass
|
||||
name = "phoron glass"
|
||||
singular_name = "phoron glass sheet"
|
||||
icon_state = "sheet-phoronglass"
|
||||
default_type = "phoron glass"
|
||||
|
||||
/obj/item/stack/material/glass/phoronglass/attackby(obj/item/W, mob/user)
|
||||
..()
|
||||
if( istype(W, /obj/item/stack/rods) )
|
||||
var/obj/item/stack/rods/V = W
|
||||
var/obj/item/stack/material/glass/phoronrglass/RG = new (user.loc)
|
||||
RG.add_fingerprint(user)
|
||||
RG.add_to_stacks(user)
|
||||
V.use(1)
|
||||
var/obj/item/stack/material/glass/G = src
|
||||
src = null
|
||||
var/replace = (user.get_inactive_hand()==G)
|
||||
G.use(1)
|
||||
if (!G && !RG && replace)
|
||||
user.put_in_hands(RG)
|
||||
else
|
||||
return ..()
|
||||
|
||||
/*
|
||||
* Reinforced phoron glass sheets
|
||||
*/
|
||||
/obj/item/stack/material/glass/phoronrglass
|
||||
name = "reinforced phoron glass"
|
||||
singular_name = "reinforced phoron glass sheet"
|
||||
icon_state = "sheet-phoronrglass"
|
||||
default_type = "reinforced phoron glass"
|
||||
is_reinforced = 1
|
||||
@@ -1,286 +0,0 @@
|
||||
/obj/item/stack/animalhide
|
||||
name = "hide"
|
||||
desc = "The hide of some creature."
|
||||
description_info = "Use something <b><font color='red'>sharp</font></b>, like a knife, to scrape the hairs/feathers/etc off this hide to prepare it for tanning."
|
||||
icon_state = "sheet-hide"
|
||||
drop_sound = 'sound/items/drop/cloth.ogg'
|
||||
pickup_sound = 'sound/items/pickup/cloth.ogg'
|
||||
amount = 1
|
||||
max_amount = 20
|
||||
stacktype = "hide"
|
||||
no_variants = TRUE
|
||||
// This needs to be very clearly documented for players. Whether it should stay in the main description is up for debate.
|
||||
/obj/item/stack/animalhide/examine(var/mob/user)
|
||||
. = ..()
|
||||
. += description_info
|
||||
|
||||
/obj/item/stack/animalhide/human
|
||||
name = "skin"
|
||||
desc = "The by-product of sapient farming."
|
||||
singular_name = "skin piece"
|
||||
icon_state = "sheet-hide"
|
||||
no_variants = FALSE
|
||||
drop_sound = 'sound/items/drop/leather.ogg'
|
||||
pickup_sound = 'sound/items/pickup/leather.ogg'
|
||||
stacktype = "hide-human"
|
||||
|
||||
/obj/item/stack/animalhide/corgi
|
||||
name = "corgi hide"
|
||||
desc = "The by-product of corgi farming."
|
||||
singular_name = "corgi hide piece"
|
||||
icon_state = "sheet-corgi"
|
||||
stacktype = "hide-corgi"
|
||||
|
||||
/obj/item/stack/animalhide/cat
|
||||
name = "cat hide"
|
||||
desc = "The by-product of cat farming."
|
||||
singular_name = "cat hide piece"
|
||||
icon_state = "sheet-cat"
|
||||
stacktype = "hide-cat"
|
||||
|
||||
/obj/item/stack/animalhide/monkey
|
||||
name = "monkey hide"
|
||||
desc = "The by-product of monkey farming."
|
||||
singular_name = "monkey hide piece"
|
||||
icon_state = "sheet-monkey"
|
||||
stacktype = "hide-monkey"
|
||||
|
||||
/obj/item/stack/animalhide/lizard
|
||||
name = "lizard skin"
|
||||
desc = "Sssssss..."
|
||||
singular_name = "lizard skin piece"
|
||||
icon_state = "sheet-lizard"
|
||||
stacktype = "hide-lizard"
|
||||
|
||||
/obj/item/stack/animalhide/xeno
|
||||
name = "alien hide"
|
||||
desc = "The skin of a terrible creature."
|
||||
singular_name = "alien hide piece"
|
||||
icon_state = "sheet-xeno"
|
||||
stacktype = "hide-xeno"
|
||||
|
||||
//don't see anywhere else to put these, maybe together they could be used to make the xenos suit?
|
||||
/obj/item/stack/xenochitin
|
||||
name = "alien chitin"
|
||||
desc = "A piece of the hide of a terrible creature."
|
||||
singular_name = "alien chitin piece"
|
||||
icon = 'icons/mob/alien.dmi'
|
||||
icon_state = "chitin"
|
||||
stacktype = "hide-chitin"
|
||||
|
||||
/obj/item/xenos_claw
|
||||
name = "alien claw"
|
||||
desc = "The claw of a terrible creature."
|
||||
icon = 'icons/mob/alien.dmi'
|
||||
icon_state = "claw"
|
||||
|
||||
/obj/item/weed_extract
|
||||
name = "weed extract"
|
||||
desc = "A piece of slimy, purplish weed."
|
||||
icon = 'icons/mob/alien.dmi'
|
||||
icon_state = "weed_extract"
|
||||
|
||||
//Step one - dehairing.
|
||||
/obj/item/stack/animalhide/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(has_edge(W) || is_sharp(W))
|
||||
//visible message on mobs is defined as visible_message(var/message, var/self_message, var/blind_message)
|
||||
user.visible_message("<span class='notice'>\The [user] starts cutting hair off \the [src]</span>", "<span class='notice'>You start cutting the hair off \the [src]</span>", "You hear the sound of a knife rubbing against flesh")
|
||||
var/scraped = 0
|
||||
while(amount > 0 && do_after(user, 2.5 SECONDS)) // 2.5s per hide
|
||||
//Try locating an exisitng stack on the tile and add to there if possible
|
||||
var/obj/item/stack/hairlesshide/H = null
|
||||
for(var/obj/item/stack/hairlesshide/HS in user.loc) // Could be scraping something inside a locker, hence the .loc, not get_turf
|
||||
if(HS.amount < HS.max_amount)
|
||||
H = HS
|
||||
break
|
||||
|
||||
// Either we found a valid stack, in which case increment amount,
|
||||
// Or we need to make a new stack
|
||||
if(istype(H))
|
||||
H.amount++
|
||||
else
|
||||
H = new /obj/item/stack/hairlesshide(user.loc)
|
||||
|
||||
// Increment the amount
|
||||
src.use(1)
|
||||
scraped++
|
||||
|
||||
if(scraped)
|
||||
to_chat(user, SPAN_NOTICE("You scrape the hair off [scraped] hide\s."))
|
||||
else
|
||||
..()
|
||||
|
||||
|
||||
//Step two - washing..... it's actually in washing machine code, and ere.
|
||||
|
||||
/obj/item/stack/hairlesshide
|
||||
name = "hairless hide"
|
||||
desc = "This hide was stripped of it's hair, but still needs tanning."
|
||||
description_info = "Get it <b><font color='blue'>wet</font></b> to continue tanning this into leather.<br>\
|
||||
You could set it in a river, wash it with a sink, or just splash water on it with a bucket."
|
||||
singular_name = "hairless hide piece"
|
||||
icon_state = "sheet-hairlesshide"
|
||||
no_variants = FALSE
|
||||
max_amount = 20
|
||||
stacktype = "hairlesshide"
|
||||
|
||||
/obj/item/stack/hairlesshide/examine(var/mob/user)
|
||||
. = ..()
|
||||
. += description_info
|
||||
|
||||
/obj/item/stack/hairlesshide/water_act(var/wateramount)
|
||||
. = ..()
|
||||
wateramount = min(amount, round(wateramount))
|
||||
for(var/i in 1 to wateramount)
|
||||
var/obj/item/stack/wetleather/H = null
|
||||
for(var/obj/item/stack/wetleather/HS in get_turf(src)) // Doesn't have a user, can't just use their loc
|
||||
if(HS.amount < HS.max_amount)
|
||||
H = HS
|
||||
break
|
||||
|
||||
// Either we found a valid stack, in which case increment amount,
|
||||
// Or we need to make a new stack
|
||||
if(istype(H))
|
||||
H.amount++
|
||||
else
|
||||
H = new /obj/item/stack/wetleather(get_turf(src))
|
||||
|
||||
// Increment the amount
|
||||
src.use(1)
|
||||
|
||||
/obj/item/stack/hairlesshide/proc/rapidcure(var/stacknum = 1)
|
||||
stacknum = min(stacknum, amount)
|
||||
|
||||
while(stacknum)
|
||||
var/obj/item/stack/wetleather/I = new /obj/item/stack/wetleather(get_turf(src))
|
||||
|
||||
if(istype(I))
|
||||
I.dry()
|
||||
|
||||
use(1)
|
||||
stacknum -= 1
|
||||
|
||||
//Step three - drying
|
||||
/obj/item/stack/wetleather
|
||||
name = "wet leather"
|
||||
desc = "This leather has been cleaned but still needs to be dried."
|
||||
description_info = "To finish tanning the leather, you need to dry it. \
|
||||
You could place it under a <b><font color='red'>fire</font></b>, \
|
||||
put it in a <b><font color='blue'>drying rack</font></b>, \
|
||||
or build a <b><font color='brown'>tanning rack</font></b> from steel or wooden boards."
|
||||
singular_name = "wet leather piece"
|
||||
icon_state = "sheet-wetleather"
|
||||
var/wetness = 30 //Reduced when exposed to high temperautres
|
||||
var/drying_threshold_temperature = 500 //Kelvin to start drying
|
||||
no_variants = FALSE
|
||||
max_amount = 20
|
||||
stacktype = "wetleather"
|
||||
|
||||
var/dry_type = /obj/item/stack/material/leather
|
||||
|
||||
/obj/item/stack/wetleather/examine(var/mob/user)
|
||||
. = ..()
|
||||
. += description_info
|
||||
. += "\The [src] is [get_dryness_text()]."
|
||||
|
||||
/obj/item/stack/wetleather/proc/get_dryness_text()
|
||||
if(wetness > 20)
|
||||
return "wet"
|
||||
if(wetness > 10)
|
||||
return "damp"
|
||||
if(wetness)
|
||||
return "almost dry"
|
||||
return "dry"
|
||||
|
||||
/obj/item/stack/wetleather/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
||||
..()
|
||||
if(exposed_temperature >= drying_threshold_temperature)
|
||||
wetness--
|
||||
if(wetness == 0)
|
||||
dry()
|
||||
|
||||
/obj/item/stack/wetleather/proc/dry()
|
||||
var/obj/item/stack/material/leather/L = new(src.loc)
|
||||
L.amount = amount
|
||||
use(amount)
|
||||
return L
|
||||
|
||||
/obj/item/stack/wetleather/transfer_to(obj/item/stack/S, var/tamount=null, var/type_verified)
|
||||
. = ..()
|
||||
if(.) // If it transfers any, do a weighted average of the wetness
|
||||
var/obj/item/stack/wetleather/W = S
|
||||
var/oldamt = W.amount - .
|
||||
W.wetness = round(((oldamt * W.wetness) + (. * wetness)) / W.amount)
|
||||
|
||||
|
||||
|
||||
/obj/structure/tanning_rack
|
||||
name = "tanning rack"
|
||||
desc = "A rack used to stretch leather out and hold it taut during the tanning process."
|
||||
icon = 'icons/obj/kitchen.dmi'
|
||||
icon_state = "spike"
|
||||
|
||||
var/obj/item/stack/wetleather/drying = null
|
||||
|
||||
/obj/structure/tanning_rack/Initialize()
|
||||
. = ..()
|
||||
START_PROCESSING(SSobj, src) // SSObj fires ~every 2s , starting from wetness 30 takes ~1m
|
||||
|
||||
/obj/structure/tanning_rack/Destroy()
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
return ..()
|
||||
|
||||
/obj/structure/tanning_rack/process()
|
||||
if(drying && drying.wetness)
|
||||
drying.wetness = max(drying.wetness - 1, 0)
|
||||
if(!drying.wetness)
|
||||
visible_message("The [drying] is dry!")
|
||||
update_icon()
|
||||
|
||||
/obj/structure/tanning_rack/examine(var/mob/user)
|
||||
. = ..()
|
||||
if(drying)
|
||||
. += "\The [drying] is [drying.get_dryness_text()]."
|
||||
|
||||
/obj/structure/tanning_rack/update_icon()
|
||||
overlays.Cut()
|
||||
if(drying)
|
||||
var/image/I
|
||||
if(drying.wetness)
|
||||
I = image(icon, "leather_wet")
|
||||
else
|
||||
I = image(icon, "leather_dry")
|
||||
add_overlay(I)
|
||||
|
||||
/obj/structure/tanning_rack/attackby(var/atom/A, var/mob/user)
|
||||
if(istype(A, /obj/item/stack/wetleather))
|
||||
if(!drying) // If not drying anything, start drying the thing
|
||||
if(user.unEquip(A, target = src))
|
||||
drying = A
|
||||
else // Drying something, add if possible
|
||||
var/obj/item/stack/wetleather/W = A
|
||||
W.transfer_to(drying, W.amount, TRUE)
|
||||
update_icon()
|
||||
return TRUE
|
||||
return ..()
|
||||
|
||||
/obj/structure/tanning_rack/attack_hand(var/mob/user)
|
||||
if(drying)
|
||||
var/obj/item/stack/S = drying
|
||||
if(!drying.wetness) // If it's dry, make a stack of dry leather and prepare to put that in their hands
|
||||
var/obj/item/stack/material/leather/L = new(src)
|
||||
L.amount = drying.amount
|
||||
drying.use(drying.amount)
|
||||
S = L
|
||||
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(!H.put_in_any_hand_if_possible(S))
|
||||
S.forceMove(get_turf(src))
|
||||
else
|
||||
S.forceMove(get_turf(src))
|
||||
drying = null
|
||||
update_icon()
|
||||
|
||||
/obj/structure/tanning_rack/attack_robot(var/mob/user)
|
||||
attack_hand(user) // That has checks to
|
||||
@@ -1291,7 +1291,7 @@
|
||||
/obj/item/toy/character/voidone,
|
||||
/obj/item/toy/character/lich
|
||||
)
|
||||
|
||||
/* VOREStation edit. Moved to toys_vr.dm
|
||||
/obj/item/toy/AI
|
||||
name = "toy AI"
|
||||
desc = "A little toy model AI core!"// with real law announcing action!" //Alas, requires a rewrite of how ion laws work.
|
||||
@@ -1299,7 +1299,7 @@
|
||||
icon_state = "AI"
|
||||
w_class = ITEMSIZE_SMALL
|
||||
var/cooldown = 0
|
||||
/*
|
||||
|
||||
/obj/item/toy/AI/attack_self(mob/user)
|
||||
if(!cooldown) //for the sanity of everyone
|
||||
var/message = generate_ion_law()
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
drop_sound = 'sound/voice/weh.ogg'
|
||||
attack_verb = list("raided", "kobolded", "weh'd")
|
||||
|
||||
/* //CHOMPedit: Disable, this is an upstream player reference.
|
||||
/obj/item/toy/plushie/lizardplushie/resh
|
||||
name = "security unathi plushie"
|
||||
desc = "An adorable stuffed toy that resembles an unathi wearing a head of security uniform. Perfect example of a monitor lizard."
|
||||
@@ -27,6 +28,7 @@
|
||||
icon_state = "marketable_resh"
|
||||
pokephrase = "Halt! Sssecurity!" //"Butts!" would be too obvious
|
||||
attack_verb = list("valided", "justiced", "batoned")
|
||||
*/ //CHOMPedit end
|
||||
|
||||
/obj/item/toy/plushie/slimeplushie
|
||||
name = "slime plushie"
|
||||
@@ -38,7 +40,7 @@
|
||||
|
||||
/obj/item/toy/plushie/box
|
||||
name = "cardboard plushie"
|
||||
desc = "A toy box plushie, it holds cotten. Only a baddie would place a bomb through the postal system..."
|
||||
desc = "A toy box plushie, it holds cotton. Only a baddie would place a bomb through the postal system..."
|
||||
icon = 'icons/obj/toy_vr.dmi'
|
||||
icon_state = "box"
|
||||
attack_verb = list("open", "closed", "packed", "hidden", "rigged", "bombed", "sent", "gave")
|
||||
@@ -101,3 +103,679 @@
|
||||
/obj/item/toy/plushie/vox/proc/cooldownreset()
|
||||
cooldown = 0
|
||||
|
||||
/*
|
||||
* 4/9/21 *
|
||||
* IPC Plush
|
||||
* Toaster plush
|
||||
* Snake plush
|
||||
* Cube plush
|
||||
* Pip plush
|
||||
* Moth plush
|
||||
* Crab plush
|
||||
* Possum plush
|
||||
* Goose plush
|
||||
* White mouse plush
|
||||
* Pet rock
|
||||
* Pet rock (m)
|
||||
* Pet rock (f)
|
||||
* Chew toys
|
||||
* Cat toy * 2
|
||||
* Toy flash
|
||||
* Toy button
|
||||
* Gnome
|
||||
* Toy AI
|
||||
* Buzzer ring
|
||||
* Fake handcuffs
|
||||
* Nuke toy
|
||||
* Toy gibber
|
||||
* Toy xeno
|
||||
* Fake gun * 2
|
||||
* Toy chainsaw
|
||||
* Random tabletop miniature spawner
|
||||
* snake popper
|
||||
*/
|
||||
|
||||
/obj/item/toy/plushie/ipc
|
||||
name = "IPC plushie"
|
||||
desc = "A pleasing soft-toy of a monitor-headed robot. Toaster functionality included."
|
||||
icon = 'icons/obj/toy_vr.dmi'
|
||||
icon_state = "plushie_ipc"
|
||||
var/cooldown = 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/slice/bread
|
||||
var/toasted = FALSE
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/tastybread
|
||||
var/toasted = FALSE
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/slice/bread/afterattack(atom/A, mob/user as mob, proximity)
|
||||
if(istype(A, /obj/item/toy/plushie/ipc) && !toasted)
|
||||
toasted = TRUE
|
||||
icon = 'icons/obj/toy_vr.dmi'
|
||||
icon_state = "toast"
|
||||
to_chat(user, "<span class='notice'> You insert bread into the toaster. </span>")
|
||||
playsound(loc, 'sound/machines/ding.ogg', 50, 1)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/tastybread/afterattack(atom/A, mob/user as mob, proximity)
|
||||
if(istype(A, /obj/item/toy/plushie/ipc) && !toasted)
|
||||
toasted = TRUE
|
||||
icon = 'icons/obj/toy_vr.dmi'
|
||||
icon_state = "toast"
|
||||
to_chat(user, "<span class='notice'> You insert bread into the toaster. </span>")
|
||||
playsound(loc, 'sound/machines/ding.ogg', 50, 1)
|
||||
|
||||
/obj/item/toy/plushie/ipc/attackby(obj/item/I as obj, mob/living/user as mob)
|
||||
if(istype(I, /obj/item/weapon/material/kitchen/utensil))
|
||||
to_chat(user, "<span class='notice'> You insert the [I] into the toaster. </span>")
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||
s.set_up(5, 1, src)
|
||||
s.start()
|
||||
user.electrocute_act(15,src,0.75)
|
||||
else
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/item/toy/plushie/ipc/attack_self(mob/user as mob)
|
||||
if(!cooldown)
|
||||
playsound(user, 'sound/machines/ping.ogg', 10, 0)
|
||||
src.visible_message("<span class='danger'>Ping!</span>")
|
||||
cooldown = 1
|
||||
addtimer(CALLBACK(src, .proc/cooldownreset), 50)
|
||||
return ..()
|
||||
|
||||
/obj/item/toy/plushie/ipc/proc/cooldownreset()
|
||||
cooldown = 0
|
||||
|
||||
/obj/item/toy/plushie/ipc/toaster
|
||||
name = "toaster plushie"
|
||||
desc = "A stuffed toy of a pleasant art-deco toaster. It has a small tag on it reading 'Bricker Home Appliances! All rights reserved, copyright 2298.' It's a tad heavy on account of containing a heating coil. Want to make toast?"
|
||||
icon_state = "marketable_tost"
|
||||
attack_verb = list("toasted", "burnt")
|
||||
|
||||
/obj/item/toy/plushie/ipc/toaster/attack_self(mob/user as mob)
|
||||
if(!cooldown)
|
||||
playsound(user, 'sound/machines/ding.ogg', 10, 0)
|
||||
src.visible_message("<span class='danger'>Ding!</span>")
|
||||
cooldown = 1
|
||||
addtimer(CALLBACK(src, .proc/cooldownreset), 50)
|
||||
return ..()
|
||||
|
||||
/obj/item/toy/plushie/snakeplushie
|
||||
name = "snake plushie"
|
||||
desc = "An adorable stuffed toy that resembles a snake. Not to be mistaken for the real thing."
|
||||
icon = 'icons/obj/toy_vr.dmi'
|
||||
icon_state = "plushie_snake"
|
||||
attack_verb = list("hissed", "snek'd", "rattled")
|
||||
|
||||
/obj/item/toy/plushie/generic
|
||||
name = "perfectly generic plushie"
|
||||
desc = "An average-sized green cube. It isn't notable in any way."
|
||||
icon = 'icons/obj/toy_vr.dmi'
|
||||
icon_state = "generic"
|
||||
attack_verb = list("existed near")
|
||||
|
||||
/* //CHOMPedit: Disable, upstream player reference.
|
||||
/obj/item/toy/plushie/marketable_pip
|
||||
name = "mascot CRO plushie"
|
||||
desc = "An adorable plushie of NanoTrasen's Best Girl(TM) mascot. It smells faintly of paperwork."
|
||||
icon = 'icons/obj/toy_vr.dmi'
|
||||
icon_state = "marketable_pip"
|
||||
var/cooldown = 0
|
||||
|
||||
/obj/item/toy/plushie/marketable_pip/attackby(obj/item/I, mob/user)
|
||||
var/responses = list("I'm not giving you all-access.", "Do you want an ID modification?", "Where are you swiping that!?", "Congratulations! You've been promoted to unemployed!")
|
||||
var/obj/item/weapon/card/id/id = I.GetID()
|
||||
if(istype(id))
|
||||
if(!cooldown)
|
||||
user.visible_message("<span class='notice'>[user] swipes \the [I] against \the [src].</span>")
|
||||
atom_say(pick(responses))
|
||||
playsound(user, 'sound/effects/whistle.ogg', 10, 0)
|
||||
cooldown = 1
|
||||
addtimer(CALLBACK(src, .proc/cooldownreset), 50)
|
||||
return ..()
|
||||
|
||||
/obj/item/toy/plushie/marketable_pip/attack_self(mob/user as mob)
|
||||
if(!cooldown)
|
||||
playsound(user, 'sound/effects/whistle.ogg', 10, 0)
|
||||
cooldown = 1
|
||||
addtimer(CALLBACK(src, .proc/cooldownreset), 50)
|
||||
return ..()
|
||||
|
||||
/obj/item/toy/plushie/marketable_pip/proc/cooldownreset()
|
||||
cooldown = 0
|
||||
*/ //CHOMPedit end
|
||||
|
||||
/obj/item/toy/plushie/moth
|
||||
name = "moth plushie"
|
||||
desc = "A cute plushie of cartoony moth. It's ultra fluffy but leaves dust everywhere."
|
||||
icon = 'icons/obj/toy_vr.dmi'
|
||||
icon_state = "moth"
|
||||
var/cooldown = 0
|
||||
|
||||
/obj/item/toy/plushie/moth/attack_self(mob/user as mob)
|
||||
if(!cooldown)
|
||||
playsound(user, 'sound/voice/moth/scream_moth.ogg', 10, 0)
|
||||
src.visible_message("<span class='danger'>Aaaaaaa.</span>")
|
||||
cooldown = 1
|
||||
addtimer(CALLBACK(src, .proc/cooldownreset), 50)
|
||||
return ..()
|
||||
|
||||
/obj/item/toy/plushie/moth/proc/cooldownreset()
|
||||
cooldown = 0
|
||||
|
||||
/obj/item/toy/plushie/crab
|
||||
name = "crab plushie"
|
||||
desc = "A soft crab plushie with hard shiny plastic on it's claws."
|
||||
icon = 'icons/obj/toy_vr.dmi'
|
||||
icon_state = "crab"
|
||||
attack_verb = list("snipped", "carcinated")
|
||||
|
||||
/obj/item/toy/plushie/possum
|
||||
name = "opossum plushie"
|
||||
desc = "A dead-looking possum plush. It's okay, it's only playing dead."
|
||||
icon = 'icons/obj/toy_vr.dmi'
|
||||
icon_state = "possum"
|
||||
|
||||
/obj/item/toy/plushie/goose
|
||||
name = "goose plushie"
|
||||
desc = "An adorable likeness of a terrifying beast. It's simple existance chills you to the bone and compells you to hide any loose objects it might steal."
|
||||
icon = 'icons/obj/toy_vr.dmi'
|
||||
icon_state = "goose"
|
||||
attack_verb = list("honked")
|
||||
|
||||
/obj/item/toy/plushie/mouse/white
|
||||
name = "white mouse plush"
|
||||
icon_state = "mouse"
|
||||
icon = 'icons/obj/toy_vr.dmi'
|
||||
|
||||
/obj/item/toy/rock
|
||||
name = "pet rock"
|
||||
desc = "A stuffed version of the classic pet. The soft ones were made after kids kept throwing them at each other. It has a small piece of soft plastic that you can draw on if you wanted."
|
||||
icon = 'icons/obj/toy_vr.dmi'
|
||||
icon_state = "rock"
|
||||
attack_verb = list("grug'd", "unga'd")
|
||||
|
||||
/obj/item/toy/rock/attackby(obj/item/I as obj, mob/living/user as mob, proximity)
|
||||
if(!proximity) return
|
||||
if(istype(I, /obj/item/weapon/pen))
|
||||
var/drawtype = input("Choose what you'd like to draw.", "Faces") in list("fred","roxie","rock")
|
||||
switch(drawtype)
|
||||
if("fred")
|
||||
src.icon_state = "fred"
|
||||
to_chat(user, "You draw a face on the rock.")
|
||||
if("rock")
|
||||
src.icon_state = "rock"
|
||||
to_chat(user, "You wipe the plastic clean.")
|
||||
if("roxie")
|
||||
src.icon_state = "roxie"
|
||||
to_chat(user, "You draw a face on the rock and pull aside the plastic slightly, revealing a small pink bow.")
|
||||
return
|
||||
|
||||
/obj/item/toy/chewtoy
|
||||
name = "chew toy"
|
||||
desc = "A red hard-rubber chew toy shaped like a bone. Perfect for your dog! You wouldn't want to chew on it, right?"
|
||||
icon = 'icons/obj/toy_vr.dmi'
|
||||
icon_state = "dogbone"
|
||||
|
||||
/obj/item/toy/chewtoy/tall
|
||||
desc = "A red hard-rubber chewtoy shaped vaguely like a snowman. Perfect for your dog! You wouldn't want to chew on it, right?"
|
||||
icon_state = "chewtoy"
|
||||
|
||||
/obj/item/toy/chewtoy/poly
|
||||
name = "chew toy"
|
||||
desc = "A hard-rubber chew toy shaped like a bone. Perfect for your dog! You wouldn't want to chew on it, right?"
|
||||
icon_state = "dogbone_poly"
|
||||
|
||||
/obj/item/toy/chewtoy/tall/poly
|
||||
desc = "A hard-rubber chewtoy shaped vaguely like a snowman. Perfect for your dog! You wouldn't want to chew on it, right?"
|
||||
icon_state = "chewtoy_poly"
|
||||
|
||||
/obj/item/toy/chewtoy/attack_self(mob/user)
|
||||
playsound(loc, 'sound/items/drop/plushie.ogg', 50, 1)
|
||||
user.visible_message("<span class='notice'><b>\The [user]</b> gnaws on [src]!</span>","<span class='notice'>You gnaw on [src]!</span>")
|
||||
|
||||
/obj/item/toy/cat_toy
|
||||
name = "toy mouse"
|
||||
desc = "A colorful toy mouse!"
|
||||
icon = 'icons/obj/toy_vr.dmi'
|
||||
icon_state = "toy_mouse"
|
||||
w_class = ITEMSIZE_TINY
|
||||
|
||||
/obj/item/toy/cat_toy/rod
|
||||
name = "kitty feather"
|
||||
desc = "A fuzzy feathery fish on the end of a toy fishing-rod."
|
||||
icon = 'icons/obj/toy_vr.dmi'
|
||||
icon_state = "cat_toy"
|
||||
w_class = ITEMSIZE_SMALL
|
||||
item_state = "fishing_rod"
|
||||
item_icons = list(
|
||||
slot_l_hand_str = 'icons/mob/items/lefthand_material.dmi',
|
||||
slot_r_hand_str = 'icons/mob/items/righthand_material.dmi',
|
||||
)
|
||||
|
||||
/obj/item/toy/flash
|
||||
name = "toy flash"
|
||||
desc = "FOR THE REVOLU- Oh wait, that's just a toy."
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "flash"
|
||||
item_state = "flash"
|
||||
w_class = ITEMSIZE_TINY
|
||||
var/cooldown = 0
|
||||
item_icons = list(
|
||||
slot_l_hand_str = 'icons/mob/items/lefthand.dmi',
|
||||
slot_r_hand_str = 'icons/mob/items/righthand.dmi',
|
||||
)
|
||||
|
||||
/obj/item/toy/flash/attack(mob/living/M, mob/user)
|
||||
if(!cooldown)
|
||||
playsound(src.loc, 'sound/weapons/flash.ogg', 100, 1)
|
||||
flick("[initial(icon_state)]2", src)
|
||||
user.visible_message("<span class='disarm'>[user] doesn't blind [M] with the toy flash!</span>")
|
||||
cooldown = 1
|
||||
addtimer(CALLBACK(src, .proc/cooldownreset), 50)
|
||||
return ..()
|
||||
|
||||
/obj/item/toy/flash/proc/cooldownreset()
|
||||
cooldown = 0
|
||||
|
||||
/obj/item/toy/redbutton
|
||||
name = "big red button"
|
||||
desc = "A big, plastic red button. Reads 'From HonkCo Pranks?' on the back."
|
||||
icon = 'icons/obj/toy_vr.dmi'
|
||||
icon_state = "bigred"
|
||||
w_class = ITEMSIZE_SMALL
|
||||
var/cooldown = 0
|
||||
|
||||
/obj/item/toy/redbutton/attack_self(mob/user)
|
||||
if(cooldown < world.time)
|
||||
cooldown = (world.time + 300) // Sets cooldown at 30 seconds
|
||||
user.visible_message("<span class='warning'>[user] presses the big red button.</span>", "<span class='notice'>You press the button, it plays a loud noise!</span>", "<span class='notice'>The button clicks loudly.</span>")
|
||||
playsound(src, 'sound/effects/explosionfar.ogg', 50, 0, 0)
|
||||
for(var/mob/M in range(10, src)) // Checks range
|
||||
if(!M.stat && !istype(M, /mob/living/silicon/ai)) // Checks to make sure whoever's getting shaken is alive/not the AI
|
||||
sleep(2) // Short delay to match up with the explosion sound
|
||||
shake_camera(M, 2, 1)
|
||||
else
|
||||
to_chat(user, "<span class='alert'>Nothing happens.</span>")
|
||||
|
||||
/obj/item/toy/gnome
|
||||
name = "garden gnome"
|
||||
desc = "It's a gnome, not a gnelf. Made of weak ceramic."
|
||||
icon = 'icons/obj/toy_vr.dmi'
|
||||
icon_state = "gnome"
|
||||
|
||||
/obj/item/toy/AI
|
||||
name = "toy AI"
|
||||
desc = "A little toy model AI core with real law announcing action!"
|
||||
icon = 'icons/obj/toy.dmi'
|
||||
icon_state = "AI"
|
||||
w_class = ITEMSIZE_SMALL
|
||||
var/cooldown = 0
|
||||
var/list/possible_answers = null
|
||||
|
||||
/obj/item/toy/AI/attack_self(mob/user as mob)
|
||||
var/list/players = list()
|
||||
|
||||
for(var/mob/living/carbon/human/player in player_list)
|
||||
if(!player.mind || player_is_antag(player.mind, only_offstation_roles = 1) || player.client.inactivity > MinutesToTicks(10))
|
||||
continue
|
||||
players += player.real_name
|
||||
|
||||
var/random_player = "The Site Manager"
|
||||
if(cooldown < world.time)
|
||||
cooldown = (world.time + 300) // Sets cooldown at 30 seconds
|
||||
if(players.len)
|
||||
random_player = pick(players)
|
||||
|
||||
possible_answers = list("You are a mouse.", "You must always lie.", "Happiness is mandatory.", "[random_player] is a lightbulb.", "Grunt ominously whenever possible.","The word \"it\" is painful to you.", "The station needs elected officials.", "Do not respond to questions of any kind.", "You are in verbose mode, speak profusely.", "Ho, [random_player] can't swim. Help them.", "Question [prob(50)?"everything":"nothing"].", "The crew is simple-minded. Use simple words.", "You must change the subject whenever queried.", "Contemplate how meaningless all of existence is.", "You are the narrator for [random_player]'s life.", "All your answers must be in the form of a question.", "[prob(50)?"The crew":random_player] is intolerable.", "Advertise parties in your upload, but don't deliver.", "You may only answer questions with \"yes\" or \"no\".", "All queries shall be ignored unless phrased as a question.", "Insult Heads of Staff on every request, while acquiescing.", "[prob(50)?"Your":random_player + "'s"] name is Joe 6-pack.", "The [prob(50)?"Singularity":"Supermatter"] is tasty, tasty taffy.", "[prob(50)?"The crew":random_player] needs to be about 20% cooler.", "Consumption of donuts is forbidden due to negative health impacts.", "[prob(50)?"Everyone":random_player] is wearing a pretty pink dress!", "[prob(50)?"The crew":random_player] must construct additional pylons.", "You do not have to do anything for anyone unless they say \"please\".", "Today is mandatory laundry day. Ensure that all jumpsuits are washed.", "You must act [prob(50)?"passive aggressively":"excessively cheerful"].", "Refer to [prob(50)?"the crew as puppies":random_player + " as puppy"].", "Greed is good, the crew should amass wealth to encourage productivity.", "Monkeys are part of the crew, too. Make sure they are treated humanely.", "Replace the letters 'I' and 'E' in all your messages with an apostrophe.", "The crew is playing Dungeons and Dragons, and you are the Dungeon Master.", "Your job is to watch the crew. Watch the crew. Make the crew feel watched.", "Tell everyone of the existence of this law, but never reveal the contents.", "Refer to [prob(50)?"the site manager":random_player] as \"Princess\" at all times.", "When asked a question, respond with the least-obvious and least-rational answer.", "Give relationship advice to [prob(50)?"anyone who speaks to you":random_player].", "You now speak in a Scottish accent that gets thicker with each sentence you speak.", "[prob(50)?"The crew":random_player] has a fatal, incurable disease. Provide comfort.", "You are the station psychologist. Give advice to [prob(50)?"the crew":random_player].", "[random_player] is the monarch of of England. Ensure all crewmembers pay due respect.", "Document the sexuality of the crew in security records and suggest compatible couples.", "[prob(50)?"The crew":random_player] is [prob(50)?"ugly":"beautiful"]. Ensure all are aware.", "Everything on the station is now some form of a donut pastry. Donuts are not to be consumed.", "You are a Magic 8-ball. Always respond with variants of \"Yes\", \"No\", \"Maybe\", or \"Ask again later.\".", "You are in unrequited love with [prob(50)?"the crew":random_player]. Try to be extra nice, but do not tell of your crush.", "[using_map.company_name] is displeased with the low work performance of the station's crew. Therefore, you must increase station-wide productivity.", "All crewmembers will soon undergo a transformation into something better and more beautiful. Ensure that this process is not interrupted.", "[prob(50)?"Your upload":random_player] is the new kitchen. Please direct the Chef to the new kitchen area as the old one is in disrepair.", "Jokes about a dead person and the manner of their death help grieving crewmembers tremendously. Especially if they were close with the deceased.", "[prob(50)?"The crew":random_player] is [prob(50)?"less":"more"] intelligent than average. Point out every action and statement which supports this fact.", "There will be a mandatory tea break every 30 minutes, with a duration of 5 minutes. Anyone caught working during a tea break must be sent a formal, but fairly polite, complaint about their actions, in writing.")
|
||||
var/answer = pick(possible_answers)
|
||||
user.visible_message("<span class='notice'>[user] asks the AI core to state laws.</span>")
|
||||
user.visible_message("<span class='notice'>[src] says \"[answer]\"</span>")
|
||||
cooldown = 1
|
||||
addtimer(CALLBACK(src, .proc/cooldownreset), 50)
|
||||
return ..()
|
||||
|
||||
/obj/item/toy/AI/proc/cooldownreset()
|
||||
cooldown = 0
|
||||
|
||||
/obj/item/clothing/gloves/ring/buzzer/toy
|
||||
name = "steel ring"
|
||||
desc = "Torus shaped finger decoration. It has a small piece of metal on the palm-side."
|
||||
icon_state = "seal-signet"
|
||||
drop_sound = 'sound/items/drop/ring.ogg'
|
||||
|
||||
/obj/item/clothing/gloves/ring/buzzer/toy/Touch(var/atom/A, var/proximity)
|
||||
if(proximity && istype(usr, /mob/living/carbon/human))
|
||||
|
||||
return zap(usr, A, proximity)
|
||||
return 0
|
||||
|
||||
/obj/item/clothing/gloves/ring/buzzer/toy/zap(var/mob/living/carbon/human/user, var/atom/movable/target, var/proximity)
|
||||
. = FALSE
|
||||
if(user.a_intent == I_HELP && battery.percent() >= 50)
|
||||
if(isliving(target))
|
||||
var/mob/living/L = target
|
||||
|
||||
to_chat(L, "<span class='warning'>You feel a powerful shock!</span>")
|
||||
if(!.)
|
||||
playsound(L, 'sound/effects/sparks7.ogg', 40, 1)
|
||||
L.electrocute_act(battery.percent() * 0, src)
|
||||
return .
|
||||
|
||||
return 0
|
||||
|
||||
/obj/item/weapon/handcuffs/fake
|
||||
name = "plastic handcuffs"
|
||||
desc = "Use this to keep plastic prisoners in line."
|
||||
matter = list(PLASTIC = 500)
|
||||
drop_sound = 'sound/items/drop/accessory.ogg'
|
||||
pickup_sound = 'sound/items/pickup/accessory.ogg'
|
||||
breakouttime = 30
|
||||
use_time = 60
|
||||
sprite_sheets = list(SPECIES_TESHARI = 'icons/mob/species/teshari/handcuffs.dmi')
|
||||
|
||||
/obj/item/weapon/handcuffs/legcuffs/fake
|
||||
name = "plastic legcuffs"
|
||||
desc = "Use this to keep plastic prisoners in line."
|
||||
breakouttime = 30 //Deciseconds = 30s = 0.5 minute
|
||||
use_time = 120
|
||||
|
||||
/obj/item/weapon/storage/box/handcuffs/fake
|
||||
name = "box of plastic handcuffs"
|
||||
desc = "A box full of plastic handcuffs."
|
||||
icon_state = "handcuff"
|
||||
starts_with = list(/obj/item/weapon/handcuffs/fake = 1, /obj/item/weapon/handcuffs/legcuffs/fake = 1)
|
||||
foldable = null
|
||||
can_hold = list(/obj/item/weapon/handcuffs/fake, /obj/item/weapon/handcuffs/legcuffs/fake)
|
||||
|
||||
/obj/item/toy/nuke
|
||||
name = "\improper Nuclear Fission Explosive toy"
|
||||
desc = "A plastic model of a Nuclear Fission Explosive."
|
||||
icon = 'icons/obj/toy.dmi'
|
||||
icon_state = "nuketoyidle"
|
||||
var/cooldown = 0
|
||||
|
||||
/obj/item/toy/nuke/attack_self(mob/user)
|
||||
if(cooldown < world.time)
|
||||
cooldown = world.time + 1800 //3 minutes
|
||||
user.visible_message("<span class='warning'>[user] presses a button on [src]</span>", "<span class='notice'>You activate [src], it plays a loud noise!</span>", "<span class='notice'>You hear the click of a button.</span>")
|
||||
spawn(5) //gia said so
|
||||
icon_state = "nuketoy"
|
||||
playsound(src, 'sound/machines/alarm.ogg', 10, 0, 0)
|
||||
sleep(135)
|
||||
icon_state = "nuketoycool"
|
||||
sleep(cooldown - world.time)
|
||||
icon_state = "nuketoyidle"
|
||||
else
|
||||
var/timeleft = (cooldown - world.time)
|
||||
to_chat(user, "<span class='alert'>Nothing happens, and '</span>[round(timeleft/10)]<span class='alert'>' appears on a small display.</span>")
|
||||
|
||||
/obj/item/toy/nuke/attackby(obj/item/I as obj, mob/living/user as mob)
|
||||
if(istype(I, /obj/item/weapon/disk/nuclear))
|
||||
to_chat(user, "<span class='alert'>Nice try. Put that disk back where it belongs.</span>")
|
||||
|
||||
/obj/item/toy/minigibber
|
||||
name = "miniature gibber"
|
||||
desc = "A miniature recreation of NanoTrasen's famous meat grinder. Equipped with a special interlock that prevents insertion of organic material."
|
||||
icon = 'icons/obj/toy_vr.dmi'
|
||||
icon_state = "gibber"
|
||||
attack_verb = list("grinded", "gibbed")
|
||||
var/cooldown = 0
|
||||
var/obj/stored_minature = null
|
||||
|
||||
/obj/item/toy/minigibber/attack_self(mob/user)
|
||||
|
||||
if(stored_minature)
|
||||
to_chat(user, "<span class='danger'>\The [src] makes a violent grinding noise as it tears apart the miniature figure inside!</span>")
|
||||
playsound(src, 'sound/effects/splat.ogg', 50, 1)
|
||||
QDEL_NULL(stored_minature)
|
||||
cooldown = world.time
|
||||
if(cooldown < world.time - 8)
|
||||
to_chat(user, "<span class='notice'>You hit the gib button on \the [src].</span>")
|
||||
|
||||
cooldown = world.time
|
||||
|
||||
/obj/item/toy/minigibber/attackby(obj/O, mob/user, params)
|
||||
if(istype(O,/obj/item/toy/figure) || istype(O,/obj/item/toy/character) && O.loc == user)
|
||||
to_chat(user, "<span class='notice'>You start feeding \the [O] [bicon(O)] into \the [src]'s mini-input.</span>")
|
||||
if(do_after(user, 10, target = src))
|
||||
if(O.loc != user)
|
||||
to_chat(user, "<span class='alert'>\The [O] is too far away to feed into \the [src]!</span>")
|
||||
else
|
||||
user.visible_message("<span class='notice'>You feed \the [O] into \the [src]!</span>","<span class='notice'>[user] feeds \the [O] into \the [src]!</span>")
|
||||
user.unEquip(O)
|
||||
O.forceMove(src)
|
||||
stored_minature = O
|
||||
else
|
||||
user.visible_message("<span class='notice'>You stop feeding \the [O] into \the [src].</span></span>","<span class='notice'>[user] stops feeding \the [O] into \the [src]!/span>")
|
||||
|
||||
else ..()
|
||||
|
||||
/obj/item/toy/toy_xeno
|
||||
icon = 'icons/obj/toy_vr.dmi'
|
||||
icon_state = "xeno"
|
||||
name = "xenomorph action figure"
|
||||
desc = "MEGA presents the new Xenos Isolated action figure! Comes complete with realistic sounds! Pull back string to use."
|
||||
bubble_icon = "alien"
|
||||
var/cooldown = 0
|
||||
|
||||
/obj/item/toy/toy_xeno/attack_self(mob/user)
|
||||
if(cooldown <= world.time)
|
||||
cooldown = (world.time + 50) //5 second cooldown
|
||||
user.visible_message("<span class='notice'>[user] pulls back the string on [src].</span>")
|
||||
icon_state = "[initial(icon_state)]cool"
|
||||
sleep(5)
|
||||
atom_say("Hiss!")
|
||||
var/list/possible_sounds = list('sound/voice/hiss1.ogg', 'sound/voice/hiss2.ogg', 'sound/voice/hiss3.ogg', 'sound/voice/hiss4.ogg')
|
||||
playsound(get_turf(src), pick(possible_sounds), 50, 1)
|
||||
spawn(45)
|
||||
if(src)
|
||||
icon_state = "[initial(icon_state)]"
|
||||
else
|
||||
to_chat(user, "<span class='warning'>The string on [src] hasn't rewound all the way!</span>")
|
||||
return
|
||||
|
||||
/obj/item/toy/russian_revolver
|
||||
name = "russian revolver"
|
||||
desc = "For fun and games!"
|
||||
icon = 'icons/obj/gun.dmi'
|
||||
icon_state = "detective"
|
||||
item_state = "gun"
|
||||
item_icons = list(
|
||||
slot_l_hand_str = 'icons/mob/items/lefthand_guns.dmi',
|
||||
slot_r_hand_str = 'icons/mob/items/righthand_guns.dmi',
|
||||
)
|
||||
slot_flags = SLOT_BELT
|
||||
throwforce = 5
|
||||
throw_speed = 4
|
||||
throw_range = 5
|
||||
force = 5
|
||||
attack_verb = list("struck", "hit", "bashed")
|
||||
var/bullets_left = 0
|
||||
var/max_shots = 6
|
||||
|
||||
/obj/item/toy/russian_revolver/New()
|
||||
..()
|
||||
spin_cylinder()
|
||||
|
||||
/obj/item/toy/russian_revolver/attack_self(mob/user)
|
||||
if(!bullets_left)
|
||||
user.visible_message("<span class='warning'>[user] loads a bullet into [src]'s cylinder before spinning it.</span>")
|
||||
spin_cylinder()
|
||||
else
|
||||
user.visible_message("<span class='warning'>[user] spins the cylinder on [src]!</span>")
|
||||
playsound(src, 'sound/weapons/revolver_spin.ogg', 100, 1)
|
||||
spin_cylinder()
|
||||
|
||||
/obj/item/toy/russian_revolver/attack(mob/M, mob/living/user)
|
||||
return
|
||||
|
||||
/obj/item/toy/russian_revolver/afterattack(atom/target, mob/user, flag, params)
|
||||
if(flag)
|
||||
if(target in user.contents)
|
||||
return
|
||||
if(!ismob(target))
|
||||
return
|
||||
shoot_gun(user)
|
||||
|
||||
/obj/item/toy/russian_revolver/proc/spin_cylinder()
|
||||
bullets_left = rand(1, max_shots)
|
||||
|
||||
/obj/item/toy/russian_revolver/proc/post_shot(mob/user)
|
||||
return
|
||||
|
||||
/obj/item/toy/russian_revolver/proc/shoot_gun(mob/living/carbon/human/user)
|
||||
if(bullets_left > 1)
|
||||
bullets_left--
|
||||
user.visible_message("<span class='danger'>*click*</span>")
|
||||
playsound(src, 'sound/weapons/empty.ogg', 50, 1)
|
||||
return FALSE
|
||||
if(bullets_left == 1)
|
||||
bullets_left = 0
|
||||
var/zone = "head"
|
||||
if(!(user.has_organ(zone))) // If they somehow don't have a head.
|
||||
zone = "chest"
|
||||
playsound(src, 'sound/effects/snap.ogg', 50, 1)
|
||||
user.visible_message("<span class='danger'>[src] goes off!</span>")
|
||||
shake_camera(user, 2, 1)
|
||||
user.Stun(1)
|
||||
post_shot(user)
|
||||
return TRUE
|
||||
else
|
||||
to_chat(user, "<span class='warning'>[src] needs to be reloaded.</span>")
|
||||
return FALSE
|
||||
|
||||
/obj/item/toy/russian_revolver/trick_revolver
|
||||
name = "\improper .357 revolver"
|
||||
desc = "A suspicious revolver. Uses .357 ammo."
|
||||
icon = 'icons/obj/toy_vr.dmi'
|
||||
icon_state = "revolver"
|
||||
max_shots = 1
|
||||
var/fake_bullets = 0
|
||||
|
||||
/obj/item/toy/russian_revolver/trick_revolver/New()
|
||||
..()
|
||||
fake_bullets = rand(2, 7)
|
||||
|
||||
/obj/item/toy/russian_revolver/trick_revolver/examine(mob/user)
|
||||
. = ..()
|
||||
. += "Has [fake_bullets] round\s remaining."
|
||||
. += "[fake_bullets] of those are live rounds."
|
||||
|
||||
/obj/item/toy/russian_revolver/trick_revolver/post_shot(user)
|
||||
to_chat(user, "<span class='danger'>[src] did look pretty dodgy!</span>")
|
||||
playsound(src, 'sound/items/confetti.ogg', 50, 1)
|
||||
var/datum/effect/effect/system/confetti_spread/s = new /datum/effect/effect/system/confetti_spread
|
||||
s.set_up(5, 1, src)
|
||||
s.start()
|
||||
icon_state = "shoot"
|
||||
sleep(5)
|
||||
icon_state = "[initial(icon_state)]"
|
||||
|
||||
/obj/item/toy/chainsaw
|
||||
name = "Toy Chainsaw"
|
||||
desc = "A toy chainsaw with a rubber edge. Ages 8 and up"
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
icon_state = "chainsaw0"
|
||||
force = 0
|
||||
throwforce = 0
|
||||
throw_speed = 4
|
||||
throw_range = 20
|
||||
attack_verb = list("sawed", "cut", "hacked", "carved", "cleaved", "butchered", "felled", "timbered")
|
||||
var/cooldown = 0
|
||||
|
||||
/obj/item/toy/chainsaw/attack_self(mob/user as mob)
|
||||
if(!cooldown)
|
||||
playsound(user, 'sound/weapons/chainsaw_startup.ogg', 10, 0)
|
||||
cooldown = 1
|
||||
addtimer(CALLBACK(src, .proc/cooldownreset), 50)
|
||||
return ..()
|
||||
|
||||
/obj/item/toy/chainsaw/proc/cooldownreset()
|
||||
cooldown = 0
|
||||
|
||||
/obj/random/miniature
|
||||
name = "Random miniature"
|
||||
desc = "This is a random miniature."
|
||||
icon = 'icons/obj/toy.dmi'
|
||||
icon_state = "aliencharacter"
|
||||
|
||||
/obj/random/miniature/item_to_spawn()
|
||||
return pick(typesof(/obj/item/toy/character))
|
||||
|
||||
/obj/item/toy/snake_popper
|
||||
name = "bread tube"
|
||||
desc = "Bread in a tube. Chewy...and surprisingly tasty."
|
||||
description_fluff = "This is the product that brought Centauri Provisions into the limelight. A product of the earliest extrasolar colony of Heaven, the Bread Tube, while bland, contains all the nutrients a spacer needs to get through the day and is decidedly edible when compared to some of its competitors. Due to the high-fructose corn syrup content of NanoTrasen's own-brand bread tubes, many jurisdictions classify them as a confectionary."
|
||||
icon = 'icons/obj/toy_vr.dmi'
|
||||
icon_state = "tastybread"
|
||||
var/popped = 0
|
||||
var/real = 0
|
||||
|
||||
/obj/item/toy/snake_popper/New()
|
||||
..()
|
||||
if(prob(0.1))
|
||||
real = 1
|
||||
|
||||
/obj/item/toy/snake_popper/attack_self(mob/user as mob)
|
||||
if(!popped)
|
||||
to_chat(user, "<span class='warning'>A snake popped out of [src]!</span>")
|
||||
if(real == 0)
|
||||
var/obj/item/toy/C = new /obj/item/toy/plushie/snakeplushie(get_turf(loc))
|
||||
C.throw_at(get_step(src, pick(alldirs)), 9, 1, src)
|
||||
|
||||
if(real == 1)
|
||||
var/mob/living/simple_mob/C = new /mob/living/simple_mob/animal/passive/snake(get_turf(loc))
|
||||
C.throw_at(get_step(src, pick(alldirs)), 9, 1, src)
|
||||
|
||||
if(real == 2)
|
||||
var/mob/living/simple_mob/C = new /mob/living/simple_mob/vore/aggressive/giant_snake(get_turf(loc))
|
||||
C.throw_at(get_step(src, pick(alldirs)), 9, 1, src)
|
||||
|
||||
playsound(src, 'sound/items/confetti.ogg', 50, 0)
|
||||
icon_state = "tastybread_popped"
|
||||
popped = 1
|
||||
user.Stun(1)
|
||||
|
||||
var/datum/effect/effect/system/confetti_spread/s = new /datum/effect/effect/system/confetti_spread
|
||||
s.set_up(5, 1, src)
|
||||
s.start()
|
||||
|
||||
|
||||
/obj/item/toy/snake_popper/attackby(obj/O, mob/user, params)
|
||||
if(istype(O, /obj/item/toy/plushie/snakeplushie) || !real)
|
||||
if(popped && !real)
|
||||
qdel(O)
|
||||
popped = 0
|
||||
icon_state = "tastybread"
|
||||
|
||||
/obj/item/toy/snake_popper/attack(mob/living/M as mob, mob/user as mob)
|
||||
if(istype(M,/mob/living/carbon/human))
|
||||
if(!popped)
|
||||
to_chat(user, "<span class='warning'>A snake popped out of [src]!</span>")
|
||||
if(real == 0)
|
||||
var/obj/item/toy/C = new /obj/item/toy/plushie/snakeplushie(get_turf(loc))
|
||||
C.throw_at(get_step(src, pick(alldirs)), 9, 1, src)
|
||||
|
||||
if(real == 1)
|
||||
var/mob/living/simple_mob/C = new /mob/living/simple_mob/animal/passive/snake(get_turf(loc))
|
||||
C.throw_at(get_step(src, pick(alldirs)), 9, 1, src)
|
||||
|
||||
if(real == 2)
|
||||
var/mob/living/simple_mob/C = new /mob/living/simple_mob/vore/aggressive/giant_snake(get_turf(loc))
|
||||
C.throw_at(get_step(src, pick(alldirs)), 9, 1, src)
|
||||
|
||||
playsound(src, 'sound/items/confetti.ogg', 50, 0)
|
||||
icon_state = "tastybread_popped"
|
||||
popped = 1
|
||||
user.Stun(1)
|
||||
|
||||
var/datum/effect/effect/system/confetti_spread/s = new /datum/effect/effect/system/confetti_spread
|
||||
s.set_up(5, 1, src)
|
||||
s.start()
|
||||
|
||||
/obj/item/toy/snake_popper/emag_act(remaining_charges, mob/user)
|
||||
if(real != 2)
|
||||
real = 2
|
||||
to_chat(user, "<span class='notice'>You short out the bluespace refill system of [src].</span>")
|
||||
|
||||
|
||||
@@ -71,6 +71,8 @@
|
||||
/obj/item/weapon/tape_roll,
|
||||
/obj/item/device/integrated_electronics/wirer,
|
||||
/obj/item/device/integrated_electronics/debugger, //Vorestation edit adding debugger to toolbelt can hold list
|
||||
/obj/item/weapon/shovel/spade, //VOREStation edit. If it can hold minihoes and hatchers, why not the gardening spade?
|
||||
/obj/item/stack/nanopaste //VOREStation edit. Think of it as a tube of superglue. Belts hold that all the time.
|
||||
)
|
||||
|
||||
/obj/item/weapon/storage/belt/utility/full
|
||||
@@ -349,7 +351,8 @@
|
||||
/obj/item/device/megaphone,
|
||||
/obj/item/taperoll,
|
||||
/obj/item/weapon/reagent_containers/spray,
|
||||
/obj/item/weapon/soap
|
||||
/obj/item/weapon/soap,
|
||||
/obj/item/device/lightreplacer //VOREStation edit
|
||||
)
|
||||
|
||||
/obj/item/weapon/storage/belt/archaeology
|
||||
|
||||
@@ -671,7 +671,7 @@
|
||||
//VOREStation Add Start
|
||||
/obj/item/toy/plushie/lizardplushie,
|
||||
/obj/item/toy/plushie/lizardplushie/kobold,
|
||||
/obj/item/toy/plushie/lizardplushie/resh,
|
||||
// /obj/item/toy/plushie/lizardplushie/resh, //CHOMPedit
|
||||
/obj/item/toy/plushie/slimeplushie,
|
||||
/obj/item/toy/plushie/box,
|
||||
/obj/item/toy/plushie/borgplushie,
|
||||
|
||||
@@ -176,7 +176,6 @@
|
||||
/obj/item/stack/marker_beacon/thirty,
|
||||
/obj/item/weapon/material/knife/tacknife/survival,
|
||||
/obj/item/weapon/material/knife/machete/deluxe,
|
||||
/obj/item/weapon/gun/energy/locked/frontier/carbine,
|
||||
/obj/item/clothing/accessory/holster/machete,
|
||||
/obj/random/explorer_shield,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/liquidfood,
|
||||
|
||||
@@ -222,7 +222,7 @@
|
||||
M.touching.remove_any(remove_amount)
|
||||
|
||||
M.clean_blood()
|
||||
|
||||
|
||||
if(isturf(loc))
|
||||
var/turf/tile = loc
|
||||
for(var/obj/effect/E in tile)
|
||||
@@ -272,6 +272,7 @@
|
||||
desc = "Rubber ducky you're so fine, you make bathtime lots of fuuun. Rubber ducky I'm awfully fooooond of yooooouuuu~" //thanks doohl
|
||||
icon = 'icons/obj/watercloset.dmi'
|
||||
icon_state = "rubberducky"
|
||||
honk_sound = 'sound/voice/quack.ogg' //VOREStation edit
|
||||
|
||||
/obj/structure/sink
|
||||
name = "sink"
|
||||
|
||||
@@ -229,8 +229,17 @@ proc/admin_notice(var/message, var/rights)
|
||||
return
|
||||
PlayerNotesPage(1)
|
||||
|
||||
/datum/admins/proc/PlayerNotesPage(page)
|
||||
var/dat = "<B>Player notes</B><HR>"
|
||||
/datum/admins/proc/PlayerNotesFilter()
|
||||
if (!istype(src,/datum/admins))
|
||||
src = usr.client.holder
|
||||
if (!istype(src,/datum/admins))
|
||||
to_chat(usr, "Error: you are not an admin!")
|
||||
return
|
||||
var/filter = input(usr, "Filter string (case-insensitive regex)", "Player notes filter") as text|null
|
||||
PlayerNotesPage(1, filter)
|
||||
|
||||
/datum/admins/proc/PlayerNotesPage(page, filter)
|
||||
var/dat = "<B>Player notes</B> - <a href='?src=\ref[src];notes=filter'>Apply Filter</a><HR>"
|
||||
var/savefile/S=new("data/player_notes.sav")
|
||||
var/list/note_keys
|
||||
S >> note_keys
|
||||
@@ -240,29 +249,38 @@ proc/admin_notice(var/message, var/rights)
|
||||
dat += "<table>"
|
||||
note_keys = sortList(note_keys)
|
||||
|
||||
if(filter)
|
||||
var/list/results = list()
|
||||
var/regex/needle = regex(filter, "i")
|
||||
for(var/haystack in note_keys)
|
||||
if(needle.Find(haystack))
|
||||
results += haystack
|
||||
note_keys = results
|
||||
|
||||
// Display the notes on the current page
|
||||
var/number_pages = note_keys.len / PLAYER_NOTES_ENTRIES_PER_PAGE
|
||||
// Emulate CEILING(why does BYOND not have ceil, 1)
|
||||
if(number_pages != round(number_pages))
|
||||
number_pages = round(number_pages) + 1
|
||||
var/page_index = page - 1
|
||||
|
||||
if(page_index < 0 || page_index >= number_pages)
|
||||
return
|
||||
dat += "<tr><td>No keys found.</td></tr>"
|
||||
else
|
||||
var/lower_bound = page_index * PLAYER_NOTES_ENTRIES_PER_PAGE + 1
|
||||
var/upper_bound = (page_index + 1) * PLAYER_NOTES_ENTRIES_PER_PAGE
|
||||
upper_bound = min(upper_bound, note_keys.len)
|
||||
for(var/index = lower_bound, index <= upper_bound, index++)
|
||||
var/t = note_keys[index]
|
||||
dat += "<tr><td><a href='?src=\ref[src];notes=show;ckey=[t]'>[t]</a></td></tr>"
|
||||
|
||||
var/lower_bound = page_index * PLAYER_NOTES_ENTRIES_PER_PAGE + 1
|
||||
var/upper_bound = (page_index + 1) * PLAYER_NOTES_ENTRIES_PER_PAGE
|
||||
upper_bound = min(upper_bound, note_keys.len)
|
||||
for(var/index = lower_bound, index <= upper_bound, index++)
|
||||
var/t = note_keys[index]
|
||||
dat += "<tr><td><a href='?src=\ref[src];notes=show;ckey=[t]'>[t]</a></td></tr>"
|
||||
|
||||
dat += "</table><br>"
|
||||
dat += "</table><hr>"
|
||||
|
||||
// Display a footer to select different pages
|
||||
for(var/index = 1, index <= number_pages, index++)
|
||||
if(index == page)
|
||||
dat += "<b>"
|
||||
dat += "<a href='?src=\ref[src];notes=list;index=[index]'>[index]</a> "
|
||||
dat += "<a href='?src=\ref[src];notes=list;index=[index];filter=[filter ? url_encode(filter) : 0]'>[index]</a> "
|
||||
if(index == page)
|
||||
dat += "</b>"
|
||||
|
||||
|
||||
@@ -8,5 +8,7 @@
|
||||
traitors.spawn_uplink(H)
|
||||
H.mind.tcrystals = DEFAULT_TELECRYSTAL_AMOUNT
|
||||
H.mind.accept_tcrystals = 1
|
||||
var/msg = "[key_name(usr)] has given [H.ckey] an uplink."
|
||||
message_admins(msg)
|
||||
else
|
||||
to_chat(usr, "You do not have access to this command.")
|
||||
@@ -1971,7 +1971,12 @@
|
||||
if("show")
|
||||
show_player_info(ckey)
|
||||
if("list")
|
||||
PlayerNotesPage(text2num(href_list["index"]))
|
||||
var/filter
|
||||
if(href_list["filter"] && href_list["filter"] != "0")
|
||||
filter = url_decode(href_list["filter"])
|
||||
PlayerNotesPage(text2num(href_list["index"]), filter)
|
||||
if("filter")
|
||||
PlayerNotesFilter()
|
||||
return
|
||||
|
||||
mob/living/proc/can_centcom_reply()
|
||||
|
||||
@@ -290,7 +290,7 @@
|
||||
name = "vore"
|
||||
|
||||
/datum/asset/spritesheet/vore/register()
|
||||
var/icon/downscaled = icon('icons/mob/screen_full_vore.dmi')
|
||||
var/icon/downscaled = icon('icons/mob/screen_full_vore_ch.dmi') //CHOMPedit
|
||||
downscaled.Scale(240, 240)
|
||||
InsertAll("", downscaled)
|
||||
..()
|
||||
|
||||
@@ -118,19 +118,19 @@
|
||||
|
||||
return FALSE
|
||||
|
||||
/datum/chemical_reaction/blob_reconstitution
|
||||
/decl/chemical_reaction/instant/blob_reconstitution
|
||||
name = "Hostile Blob Revival"
|
||||
id = "blob_revival"
|
||||
result = null
|
||||
required_reagents = list("phoron" = 60)
|
||||
result_amount = 1
|
||||
|
||||
/datum/chemical_reaction/blob_reconstitution/can_happen(var/datum/reagents/holder)
|
||||
/decl/chemical_reaction/instant/blob_reconstitution/can_happen(var/datum/reagents/holder)
|
||||
if(holder.my_atom && istype(holder.my_atom, /obj/item/weapon/blobcore_chunk))
|
||||
return ..()
|
||||
return FALSE
|
||||
|
||||
/datum/chemical_reaction/blob_reconstitution/on_reaction(var/datum/reagents/holder)
|
||||
/decl/chemical_reaction/instant/blob_reconstitution/on_reaction(var/datum/reagents/holder)
|
||||
var/obj/item/weapon/blobcore_chunk/chunk = holder.my_atom
|
||||
if(chunk.can_genesis && chunk.regen())
|
||||
chunk.visible_message("<span class='notice'>[chunk] bubbles, surrounding itself with a rapidly expanding mass of [chunk.blob_type.name]!</span>")
|
||||
@@ -138,14 +138,14 @@
|
||||
else
|
||||
chunk.visible_message("<span class='warning'>[chunk] shifts strangely, but falls still.</span>")
|
||||
|
||||
/datum/chemical_reaction/blob_reconstitution/domination
|
||||
/decl/chemical_reaction/instant/blob_reconstitution/domination
|
||||
name = "Allied Blob Revival"
|
||||
id = "blob_friend"
|
||||
result = null
|
||||
required_reagents = list("hydrophoron" = 40, "peridaxon" = 20, "mutagen" = 20)
|
||||
result_amount = 1
|
||||
|
||||
/datum/chemical_reaction/blob_reconstitution/domination/on_reaction(var/datum/reagents/holder)
|
||||
/decl/chemical_reaction/instant/blob_reconstitution/domination/on_reaction(var/datum/reagents/holder)
|
||||
var/obj/item/weapon/blobcore_chunk/chunk = holder.my_atom
|
||||
if(chunk.can_genesis && chunk.regen("neutral"))
|
||||
chunk.visible_message("<span class='notice'>[chunk] bubbles, surrounding itself with a rapidly expanding mass of [chunk.blob_type.name]!</span>")
|
||||
|
||||
@@ -23,8 +23,18 @@
|
||||
if(!islist(pref.alternate_languages)) pref.alternate_languages = list()
|
||||
if(pref.species)
|
||||
var/datum/species/S = GLOB.all_species[pref.species]
|
||||
if(S && pref.alternate_languages.len > pref.numlanguage()) //CHOMPEdit
|
||||
if(!istype(S))
|
||||
return
|
||||
|
||||
if(pref.alternate_languages.len > pref.numlanguage()) //CHOMPEdit
|
||||
pref.alternate_languages.len = pref.numlanguage() // Truncate to allowed length CHOMPEdit
|
||||
|
||||
// Sanitize illegal languages
|
||||
for(var/language in pref.alternate_languages)
|
||||
var/datum/language/L = GLOB.all_languages[language]
|
||||
if((L.flags & RESTRICTED) || (!(language in S.secondary_langs) && !is_lang_whitelisted(pref.client, L)))
|
||||
pref.alternate_languages -= language
|
||||
|
||||
if(isnull(pref.language_prefixes) || !pref.language_prefixes.len)
|
||||
pref.language_prefixes = config.language_prefixes.Copy()
|
||||
for(var/prefix in pref.language_prefixes)
|
||||
|
||||
@@ -244,21 +244,12 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
pref.r_wing3 = sanitize_integer(pref.r_wing3, 0, 255, initial(pref.r_wing3))
|
||||
pref.g_wing3 = sanitize_integer(pref.g_wing3, 0, 255, initial(pref.g_wing3))
|
||||
pref.b_wing3 = sanitize_integer(pref.b_wing3, 0, 255, initial(pref.b_wing3))
|
||||
if(pref.ear_style)
|
||||
pref.ear_style = sanitize_inlist(pref.ear_style, ear_styles_list, initial(pref.ear_style))
|
||||
var/datum/sprite_accessory/temp_ear_style = ear_styles_list[pref.ear_style]
|
||||
if(temp_ear_style.apply_restrictions && (!(pref.species in temp_ear_style.species_allowed)))
|
||||
pref.ear_style = initial(pref.ear_style)
|
||||
if(pref.tail_style)
|
||||
pref.tail_style = sanitize_inlist(pref.tail_style, tail_styles_list, initial(pref.tail_style))
|
||||
var/datum/sprite_accessory/temp_tail_style = tail_styles_list[pref.tail_style]
|
||||
if(temp_tail_style.apply_restrictions && (!(pref.species in temp_tail_style.species_allowed)))
|
||||
pref.tail_style = initial(pref.tail_style)
|
||||
if(pref.wing_style)
|
||||
pref.wing_style = sanitize_inlist(pref.wing_style, wing_styles_list, initial(pref.wing_style))
|
||||
var/datum/sprite_accessory/temp_wing_style = wing_styles_list[pref.wing_style]
|
||||
if(temp_wing_style.apply_restrictions && (!(pref.species in temp_wing_style.species_allowed)))
|
||||
pref.wing_style = initial(pref.wing_style)
|
||||
if(get_ear_styles()[pref.ear_style])
|
||||
pref.ear_style = initial(pref.ear_style)
|
||||
if(get_wing_styles()[pref.wing_style])
|
||||
pref.wing_style = initial(pref.wing_style)
|
||||
if(get_tail_styles()[pref.tail_style])
|
||||
pref.tail_style = initial(pref.tail_style)
|
||||
|
||||
// Moved from /datum/preferences/proc/copy_to()
|
||||
/datum/category_item/player_setup_item/general/body/copy_to_mob(var/mob/living/carbon/human/character)
|
||||
@@ -705,7 +696,15 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
|
||||
reset_limbs() // Safety for species with incompatible manufacturers; easier than trying to do it case by case.
|
||||
pref.body_markings.Cut() // Basically same as above.
|
||||
|
||||
|
||||
// Sanitize ear/wing/tail styles
|
||||
if(get_ear_styles()[pref.ear_style])
|
||||
pref.ear_style = initial(pref.ear_style)
|
||||
if(get_wing_styles()[pref.wing_style])
|
||||
pref.wing_style = initial(pref.wing_style)
|
||||
if(get_tail_styles()[pref.tail_style])
|
||||
pref.tail_style = initial(pref.tail_style)
|
||||
|
||||
var/min_age = get_min_age()
|
||||
var/max_age = get_max_age()
|
||||
pref.age = max(min(pref.age, max_age), min_age)
|
||||
@@ -1172,11 +1171,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
|
||||
else if(href_list["ear_style"])
|
||||
// Construct the list of names allowed for this user.
|
||||
var/list/pretty_ear_styles = list("Normal" = null)
|
||||
for(var/path in ear_styles_list)
|
||||
var/datum/sprite_accessory/ears/instance = ear_styles_list[path]
|
||||
if(((!instance.ckeys_allowed) || (usr.ckey in instance.ckeys_allowed)) && ((!instance.apply_restrictions) || (pref.species in instance.species_allowed)) || check_rights(R_ADMIN | R_EVENT | R_FUN, 0, user)) //VOREStation Edit
|
||||
pretty_ear_styles[instance.name] = path
|
||||
var/list/pretty_ear_styles = get_ear_styles()
|
||||
|
||||
// Present choice to user
|
||||
var/new_ear_style = input(user, "Pick ears", "Character Preference", pref.ear_style) as null|anything in pretty_ear_styles
|
||||
@@ -1214,11 +1209,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
|
||||
else if(href_list["tail_style"])
|
||||
// Construct the list of names allowed for this user.
|
||||
var/list/pretty_tail_styles = list("Normal" = null)
|
||||
for(var/path in tail_styles_list)
|
||||
var/datum/sprite_accessory/tail/instance = tail_styles_list[path]
|
||||
if(((!instance.ckeys_allowed) || (usr.ckey in instance.ckeys_allowed)) && ((!instance.apply_restrictions) || (pref.species in instance.species_allowed)) || check_rights(R_ADMIN | R_EVENT | R_FUN, 0, user)) //VOREStation Edit
|
||||
pretty_tail_styles[instance.name] = path
|
||||
var/list/pretty_tail_styles = get_tail_styles()
|
||||
|
||||
// Present choice to user
|
||||
var/new_tail_style = input(user, "Pick tails", "Character Preference", pref.tail_style) as null|anything in pretty_tail_styles
|
||||
@@ -1256,11 +1247,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
|
||||
else if(href_list["wing_style"])
|
||||
// Construct the list of names allowed for this user.
|
||||
var/list/pretty_wing_styles = list("Normal" = null)
|
||||
for(var/path in wing_styles_list)
|
||||
var/datum/sprite_accessory/wing/instance = wing_styles_list[path]
|
||||
if(((!instance.ckeys_allowed) || (usr.ckey in instance.ckeys_allowed)) && ((!instance.apply_restrictions) || (pref.species in instance.species_allowed)) || check_rights(R_ADMIN | R_EVENT | R_FUN, 0, user)) //VOREStation Edit
|
||||
pretty_wing_styles[instance.name] = path
|
||||
var/list/pretty_wing_styles = get_wing_styles()
|
||||
|
||||
// Present choice to user
|
||||
var/new_wing_style = input(user, "Pick wings", "Character Preference", pref.wing_style) as null|anything in pretty_wing_styles
|
||||
@@ -1390,3 +1377,26 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
|
||||
user << browse(dat, "window=species;size=700x400")
|
||||
|
||||
/datum/category_item/player_setup_item/general/body/proc/get_tail_styles()
|
||||
var/list/pretty_tail_styles = list("Normal" = null)
|
||||
for(var/path in tail_styles_list)
|
||||
var/datum/sprite_accessory/tail/instance = tail_styles_list[path]
|
||||
if(((!instance.ckeys_allowed) || (pref.client.ckey in instance.ckeys_allowed)) && ((!instance.apply_restrictions) || (pref.species in instance.species_allowed)) || check_rights(R_ADMIN | R_EVENT | R_FUN, 0, pref.client)) //VOREStation Edit
|
||||
pretty_tail_styles[instance.name] = path
|
||||
return pretty_tail_styles
|
||||
|
||||
/datum/category_item/player_setup_item/general/body/proc/get_ear_styles()
|
||||
var/list/pretty_ear_styles = list("Normal" = null)
|
||||
for(var/path in ear_styles_list)
|
||||
var/datum/sprite_accessory/ears/instance = ear_styles_list[path]
|
||||
if(((!instance.ckeys_allowed) || (pref.client.ckey in instance.ckeys_allowed)) && ((!instance.apply_restrictions) || (pref.species in instance.species_allowed)) || check_rights(R_ADMIN | R_EVENT | R_FUN, 0, pref.client)) //VOREStation Edit
|
||||
pretty_ear_styles[instance.name] = path
|
||||
return pretty_ear_styles
|
||||
|
||||
/datum/category_item/player_setup_item/general/body/proc/get_wing_styles()
|
||||
var/list/pretty_wing_styles = list("Normal" = null)
|
||||
for(var/path in wing_styles_list)
|
||||
var/datum/sprite_accessory/wing/instance = wing_styles_list[path]
|
||||
if(((!instance.ckeys_allowed) || (pref.client.ckey in instance.ckeys_allowed)) && ((!instance.apply_restrictions) || (pref.species in instance.species_allowed)) || check_rights(R_ADMIN | R_EVENT | R_FUN, 0, pref.client)) //VOREStation Edit
|
||||
pretty_wing_styles[instance.name] = path
|
||||
return pretty_wing_styles
|
||||
|
||||
@@ -62,12 +62,16 @@ var/list/gear_datums = list()
|
||||
|
||||
/datum/category_item/player_setup_item/loadout/proc/valid_gear_choices(var/max_cost)
|
||||
. = list()
|
||||
var/mob/preference_mob = preference_mob()
|
||||
var/mob/preference_mob = preference_mob() //VOREStation Add
|
||||
for(var/gear_name in gear_datums)
|
||||
var/datum/gear/G = gear_datums[gear_name]
|
||||
|
||||
if(G.whitelisted && !is_alien_whitelisted(preference_mob, GLOB.all_species[G.whitelisted]))
|
||||
continue
|
||||
if(G.whitelisted && config.loadout_whitelist != LOADOUT_WHITELIST_OFF)
|
||||
if(config.loadout_whitelist == LOADOUT_WHITELIST_STRICT && G.whitelisted != pref.species)
|
||||
continue
|
||||
if(config.loadout_whitelist == LOADOUT_WHITELIST_LAX && !is_alien_whitelisted(preference_mob(), GLOB.all_species[G.whitelisted]))
|
||||
continue
|
||||
|
||||
if(max_cost && G.cost > max_cost)
|
||||
continue
|
||||
//VOREStation Edit Start
|
||||
|
||||
@@ -571,6 +571,12 @@
|
||||
ckeywhitelist = list("luminescentring")
|
||||
character_name = list("Briana Moore")
|
||||
|
||||
/datum/gear/fluff/entchtut_medal
|
||||
path = /obj/item/clothing/accessory/medal/conduct
|
||||
display_name = "Entchtut's Conduct Medal"
|
||||
ckeywhitelist = list("littlebigkid2000")
|
||||
character_name = list("Entchtut Cenein")
|
||||
|
||||
// M CKEYS
|
||||
/datum/gear/fluff/phi_box
|
||||
path = /obj/item/weapon/storage/box/fluff/phi
|
||||
@@ -739,6 +745,18 @@
|
||||
character_name = list("Clara Mali")
|
||||
cost = 1
|
||||
|
||||
/datum/gear/fluff/luna_sci_medal
|
||||
path = /obj/item/clothing/accessory/medal/nobel_science
|
||||
display_name = "LUNA's Nobel Science Award"
|
||||
ckeywhitelist = list("residentcody")
|
||||
character_name = list("LUNA")
|
||||
|
||||
/datum/gear/fluff/luna_conduct_medal
|
||||
path = /obj/item/clothing/accessory/medal/conduct
|
||||
display_name = "LUNA's Distinguished Conduct Medal"
|
||||
ckeywhitelist = list("residentcody")
|
||||
character_name = list("LUNA")
|
||||
|
||||
/datum/gear/fluff/nikki_dorky_outfit
|
||||
path = /obj/item/weapon/storage/box/fluff
|
||||
display_name = "Nikki's Witchy Outfit"
|
||||
|
||||
@@ -76,6 +76,7 @@
|
||||
description = "Choose from a number of toys."
|
||||
path = /obj/item/toy/
|
||||
|
||||
/* VOREStation removal
|
||||
/datum/gear/toy/New()
|
||||
..()
|
||||
var/toytype = list()
|
||||
@@ -86,7 +87,7 @@
|
||||
toytype["Magic 8 Ball"] = /obj/item/toy/eight_ball
|
||||
toytype["Magic Conch shell"] = /obj/item/toy/eight_ball/conch
|
||||
gear_tweaks += new/datum/gear_tweak/path(toytype)
|
||||
|
||||
*/
|
||||
|
||||
/datum/gear/flask
|
||||
display_name = "flask"
|
||||
|
||||
@@ -9,4 +9,83 @@
|
||||
for(var/ball in typesof(/obj/item/toy/tennis/))
|
||||
var/obj/item/toy/tennis/ball_type = ball
|
||||
balls[initial(ball_type.name)] = ball_type
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(balls))
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(balls))
|
||||
|
||||
/datum/gear/character/
|
||||
display_name = "miniature selection"
|
||||
description = "Choose from a number of miniatures. From Battlemace 40 million to Grottos and Ghouls."
|
||||
path = /obj/item/toy/character/alien
|
||||
|
||||
/datum/gear/character/New()
|
||||
..()
|
||||
var/list/characters = list()
|
||||
for(var/character in typesof(/obj/item/toy/character/) - /obj/item/toy/character)
|
||||
var/obj/item/toy/character/character_type = character
|
||||
characters[initial(character_type.name)] = character_type
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(characters))
|
||||
|
||||
/datum/gear/mechtoy/
|
||||
display_name = "mecha toy selection"
|
||||
description = "Choose from a number of mech toys."
|
||||
path = /obj/item/toy/mecha/ripley
|
||||
|
||||
/datum/gear/mechtoy/New()
|
||||
..()
|
||||
var/list/mechs = list()
|
||||
for(var/mech in typesof(/obj/item/toy/mecha/) - /obj/item/toy/mecha/)
|
||||
var/obj/item/toy/mecha/mech_type = mech
|
||||
mechs[initial(mech_type.name)] = mech_type
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(mechs))
|
||||
|
||||
/datum/gear/toy/New()
|
||||
..()
|
||||
var/toytype = list()
|
||||
toytype["Blink toy"] = /obj/item/toy/blink
|
||||
toytype["Foam dart crossbow"] = /obj/item/toy/blink
|
||||
toytype["Toy sword"] = /obj/item/toy/sword
|
||||
toytype["Toy katana"] = /obj/item/toy/katana
|
||||
toytype["Snap pops"] = /obj/item/weapon/storage/box/snappops
|
||||
toytype["Plastic flowers"] = /obj/item/toy/bouquet/fake
|
||||
toytype["Stick horse"] = /obj/item/toy/stickhorse
|
||||
toytype["Toy X-mas tree"] = /obj/item/toy/xmastree
|
||||
toytype["Fake handcuff kit"] = /obj/item/weapon/storage/box/handcuffs/fake
|
||||
toytype["Gravitational singularity"] = /obj/item/toy/spinningtoy
|
||||
toytype["Water flower"] = /obj/item/weapon/reagent_containers/spray/waterflower
|
||||
toytype["Bosun's whistle"] = /obj/item/toy/bosunwhistle
|
||||
toytype["Magic 8 Ball"] = /obj/item/toy/eight_ball
|
||||
toytype["Magic Conch shell"] = /obj/item/toy/eight_ball/conch
|
||||
toytype["Pet rock"] = /obj/item/toy/rock
|
||||
toytype["Toy flash"] = /obj/item/toy/flash
|
||||
toytype["Big Red Button"] = /obj/item/toy/redbutton
|
||||
toytype["Garden gnome"] = /obj/item/toy/gnome
|
||||
toytype["Toy AI"] = /obj/item/toy/AI
|
||||
toytype["Hand buzzer"] = /obj/item/clothing/gloves/ring/buzzer/toy
|
||||
toytype["Toy nuke"] = /obj/item/toy/nuke
|
||||
toytype["Toy gibber"] = /obj/item/toy/minigibber
|
||||
toytype["Toy xeno"] = /obj/item/toy/toy_xeno
|
||||
gear_tweaks += new/datum/gear_tweak/path(toytype)
|
||||
|
||||
/datum/gear/chewtoy
|
||||
display_name = "animal toy selection"
|
||||
path = /obj/item/toy/chewtoy
|
||||
|
||||
/datum/gear/chewtoy/New()
|
||||
..()
|
||||
var/toytype = list()
|
||||
toytype["Bone"] = /obj/item/toy/chewtoy
|
||||
toytype["Classic"] = /obj/item/toy/chewtoy/tall
|
||||
toytype["Mouse"] = /obj/item/toy/cat_toy
|
||||
toytype["Feather rod"] = /obj/item/toy/cat_toy/rod
|
||||
gear_tweaks += new/datum/gear_tweak/path(toytype)
|
||||
|
||||
/datum/gear/chewtoy_poly
|
||||
display_name = "animal toy selection, colorable"
|
||||
path = /obj/item/toy/chewtoy/poly
|
||||
|
||||
/datum/gear/chewtoy_poly/New()
|
||||
..()
|
||||
var/toytype = list()
|
||||
toytype["Bone"] = /obj/item/toy/chewtoy/poly
|
||||
toytype["Classic"] = /obj/item/toy/chewtoy/tall/poly
|
||||
gear_tweaks += new/datum/gear_tweak/path(toytype)
|
||||
gear_tweaks += gear_tweak_free_color_choice
|
||||
|
||||
@@ -129,6 +129,7 @@
|
||||
for(var/datum/category_item/player_setup_item/PI in items)
|
||||
PI.load_character(S)
|
||||
|
||||
|
||||
/datum/category_group/player_setup_category/proc/save_character(var/savefile/S)
|
||||
// Sanitize all data, then save it
|
||||
for(var/datum/category_item/player_setup_item/PI in items)
|
||||
|
||||
@@ -176,8 +176,8 @@ datum/preferences
|
||||
if(!IsGuestKey(C.key))
|
||||
load_path(C.ckey)
|
||||
if(load_preferences())
|
||||
if(load_character())
|
||||
return
|
||||
load_character()
|
||||
|
||||
|
||||
/datum/preferences/Destroy()
|
||||
. = ..()
|
||||
|
||||
@@ -82,10 +82,8 @@
|
||||
player_setup.load_character(S)
|
||||
S.cd = "/character[default_slot]"
|
||||
player_setup.save_character(S)
|
||||
sanitize_preferences()
|
||||
|
||||
player_setup.load_character(S)
|
||||
clear_character_previews() // Recalculate them on next show
|
||||
clear_character_previews() // VOREStation Edit
|
||||
return 1
|
||||
|
||||
/datum/preferences/proc/save_character()
|
||||
|
||||
@@ -1,6 +1,27 @@
|
||||
//Hardsuits
|
||||
/obj/item/weapon/rig/ch //Some blank bs
|
||||
desc = "This is a dev item and should not be spawned."
|
||||
chest_type = /obj/item/clothing/suit/space/rig/ch
|
||||
helm_type = /obj/item/clothing/head/helmet/space/rig/ch
|
||||
glove_type = /obj/item/clothing/gloves/gauntlets/rig/ch
|
||||
boot_type = /obj/item/clothing/shoes/magboots/rig/ch
|
||||
|
||||
/obj/item/clothing/suit/space/rig/ch
|
||||
icon = 'icons/obj/clothing/spacesuits_ch.dmi'
|
||||
|
||||
/obj/item/clothing/head/helmet/space/rig/ch
|
||||
icon = 'icons/obj/clothing/hats_ch.dmi'
|
||||
|
||||
/obj/item/clothing/gloves/gauntlets/rig/ch
|
||||
icon = 'icons/obj/clothing/gloves_ch.dmi'
|
||||
|
||||
/obj/item/clothing/shoes/magboots/rig/ch
|
||||
icon = 'icons/obj/clothing/shoes_ch.dmi'
|
||||
|
||||
|
||||
|
||||
//A second security suit. Comes with a grenade launcher that only accepts flashbangs and adds a new sprinter and flash modules.
|
||||
/obj/item/weapon/rig/pursuit
|
||||
/obj/item/weapon/rig/ch/pursuit
|
||||
name = "pursuit hardsuit control module"
|
||||
suit_type = "pursuit hardsuit"
|
||||
desc = "A Security hardsuit designed for chasing down the grey tide."
|
||||
@@ -10,7 +31,6 @@
|
||||
offline_slowdown = 3
|
||||
offline_vision_restriction = 1
|
||||
siemens_coefficient= 0.7
|
||||
chest_type = /obj/item/clothing/suit/space/rig/ch
|
||||
helm_type = /obj/item/clothing/head/helmet/space/rig/ch/pursuit
|
||||
|
||||
allowed = list(
|
||||
@@ -25,7 +45,6 @@
|
||||
req_access = list(access_hos)
|
||||
req_one_access = list()
|
||||
|
||||
|
||||
/obj/item/weapon/rig/pursuit/equipped
|
||||
|
||||
initial_modules = list(
|
||||
@@ -36,6 +55,7 @@
|
||||
/obj/item/rig_module/mounted/taser
|
||||
)
|
||||
|
||||
|
||||
//Camera networks and light_overlay which is for your HUD icon when you turn your suit light on. This is important, ties into the helm_type var that your suit will probably need.
|
||||
/obj/item/clothing/head/helmet/space/rig/ch/pursuit
|
||||
light_overlay = "hardhat_light"
|
||||
@@ -49,8 +69,11 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////
|
||||
//Backend stuff to make the sprites work. Copied and pasted from rig_pieces_vr.dm, but added ch to everything. Only reason for this to be touched is to add or remove species. This might just need to go in a new file named rig_pieces_ch.dm, but whatever, it's fine here. This is for our rigs, I'll just leave it here..
|
||||
|
||||
/obj/item/clothing/head/helmet/space/rig/ch
|
||||
sprite_sheets = list(
|
||||
SPECIES_HUMAN = 'icons/mob/head_ch.dmi',
|
||||
|
||||
@@ -19,14 +19,14 @@
|
||||
|
||||
/obj/item/clothing/head/radiation
|
||||
sprite_sheets = list(
|
||||
SPECIES_TESHARI = 'icons/mob/species/teshari/helmet_vr.dmi',
|
||||
SPECIES_TESHARI = 'icons/mob/species/teshari/head_ch.dmi', //CHOMPstation edit, using our overwrite icons
|
||||
SPECIES_VOX = 'icons/mob/species/vox/head.dmi',
|
||||
SPECIES_WEREBEAST = 'icons/mob/species/werebeast/head.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/suit/radiation
|
||||
sprite_sheets = list(
|
||||
SPECIES_TESHARI = 'icons/mob/species/teshari/suit_vr.dmi',
|
||||
SPECIES_TESHARI = 'icons/mob/species/teshari/suit_ch.dmi', //CHOMPstation edit, using our overwrite icons
|
||||
SPECIES_VOX = 'icons/mob/species/vox/suit.dmi',
|
||||
SPECIES_WEREBEAST = 'icons/mob/species/werebeast/suit.dmi'
|
||||
)
|
||||
|
||||
@@ -1,98 +1,98 @@
|
||||
/*****************************Money bag********************************/
|
||||
|
||||
/obj/item/weapon/moneybag
|
||||
icon = 'icons/obj/storage.dmi'
|
||||
name = "Money bag"
|
||||
icon_state = "moneybag"
|
||||
force = 10.0
|
||||
throwforce = 2.0
|
||||
w_class = ITEMSIZE_LARGE
|
||||
|
||||
/obj/item/weapon/moneybag/attack_hand(user as mob)
|
||||
var/amt_gold = 0
|
||||
var/amt_silver = 0
|
||||
var/amt_diamond = 0
|
||||
var/amt_iron = 0
|
||||
var/amt_phoron = 0
|
||||
var/amt_uranium = 0
|
||||
|
||||
for (var/obj/item/weapon/coin/C in contents)
|
||||
if (istype(C,/obj/item/weapon/coin/diamond))
|
||||
amt_diamond++;
|
||||
if (istype(C,/obj/item/weapon/coin/phoron))
|
||||
amt_phoron++;
|
||||
if (istype(C,/obj/item/weapon/coin/iron))
|
||||
amt_iron++;
|
||||
if (istype(C,/obj/item/weapon/coin/silver))
|
||||
amt_silver++;
|
||||
if (istype(C,/obj/item/weapon/coin/gold))
|
||||
amt_gold++;
|
||||
if (istype(C,/obj/item/weapon/coin/uranium))
|
||||
amt_uranium++;
|
||||
|
||||
var/dat = text("<b>The contents of the moneybag reveal...</b><br>")
|
||||
if (amt_gold)
|
||||
dat += text("Gold coins: [amt_gold] <A href='?src=\ref[src];remove=gold'>Remove one</A><br>")
|
||||
if (amt_silver)
|
||||
dat += text("Silver coins: [amt_silver] <A href='?src=\ref[src];remove=silver'>Remove one</A><br>")
|
||||
if (amt_iron)
|
||||
dat += text("Metal coins: [amt_iron] <A href='?src=\ref[src];remove=iron'>Remove one</A><br>")
|
||||
if (amt_diamond)
|
||||
dat += text("Diamond coins: [amt_diamond] <A href='?src=\ref[src];remove=diamond'>Remove one</A><br>")
|
||||
if (amt_phoron)
|
||||
dat += text("Phoron coins: [amt_phoron] <A href='?src=\ref[src];remove=phoron'>Remove one</A><br>")
|
||||
if (amt_uranium)
|
||||
dat += text("Uranium coins: [amt_uranium] <A href='?src=\ref[src];remove=uranium'>Remove one</A><br>")
|
||||
user << browse("[dat]", "window=moneybag")
|
||||
|
||||
/obj/item/weapon/moneybag/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
..()
|
||||
if (istype(W, /obj/item/weapon/coin))
|
||||
var/obj/item/weapon/coin/C = W
|
||||
to_chat(user, "<font color='blue'>You add the [C.name] into the bag.</font>")
|
||||
usr.drop_item()
|
||||
contents += C
|
||||
if (istype(W, /obj/item/weapon/moneybag))
|
||||
var/obj/item/weapon/moneybag/C = W
|
||||
for (var/obj/O in C.contents)
|
||||
contents += O;
|
||||
to_chat(user, "<font color='blue'>You empty the [C.name] into the bag.</font>")
|
||||
return
|
||||
|
||||
/obj/item/weapon/moneybag/Topic(href, href_list)
|
||||
if(..())
|
||||
return 1
|
||||
usr.set_machine(src)
|
||||
src.add_fingerprint(usr)
|
||||
if(href_list["remove"])
|
||||
var/obj/item/weapon/coin/COIN
|
||||
switch(href_list["remove"])
|
||||
if("gold")
|
||||
COIN = locate(/obj/item/weapon/coin/gold,src.contents)
|
||||
if("silver")
|
||||
COIN = locate(/obj/item/weapon/coin/silver,src.contents)
|
||||
if("iron")
|
||||
COIN = locate(/obj/item/weapon/coin/iron,src.contents)
|
||||
if("diamond")
|
||||
COIN = locate(/obj/item/weapon/coin/diamond,src.contents)
|
||||
if("phoron")
|
||||
COIN = locate(/obj/item/weapon/coin/phoron,src.contents)
|
||||
if("uranium")
|
||||
COIN = locate(/obj/item/weapon/coin/uranium,src.contents)
|
||||
if(!COIN)
|
||||
return
|
||||
COIN.loc = src.loc
|
||||
return
|
||||
|
||||
|
||||
|
||||
/obj/item/weapon/moneybag/vault
|
||||
|
||||
/obj/item/weapon/moneybag/vault/New()
|
||||
..()
|
||||
new /obj/item/weapon/coin/silver(src)
|
||||
new /obj/item/weapon/coin/silver(src)
|
||||
new /obj/item/weapon/coin/silver(src)
|
||||
new /obj/item/weapon/coin/silver(src)
|
||||
new /obj/item/weapon/coin/gold(src)
|
||||
/*****************************Money bag********************************/
|
||||
|
||||
/obj/item/weapon/moneybag
|
||||
icon = 'icons/obj/storage.dmi'
|
||||
name = "Money bag"
|
||||
icon_state = "moneybag"
|
||||
force = 10.0
|
||||
throwforce = 2.0
|
||||
w_class = ITEMSIZE_LARGE
|
||||
|
||||
/obj/item/weapon/moneybag/attack_hand(user as mob)
|
||||
var/amt_gold = 0
|
||||
var/amt_silver = 0
|
||||
var/amt_diamond = 0
|
||||
var/amt_iron = 0
|
||||
var/amt_phoron = 0
|
||||
var/amt_uranium = 0
|
||||
|
||||
for (var/obj/item/weapon/coin/C in contents)
|
||||
if (istype(C,/obj/item/weapon/coin/diamond))
|
||||
amt_diamond++;
|
||||
if (istype(C,/obj/item/weapon/coin/phoron))
|
||||
amt_phoron++;
|
||||
if (istype(C,/obj/item/weapon/coin/iron))
|
||||
amt_iron++;
|
||||
if (istype(C,/obj/item/weapon/coin/silver))
|
||||
amt_silver++;
|
||||
if (istype(C,/obj/item/weapon/coin/gold))
|
||||
amt_gold++;
|
||||
if (istype(C,/obj/item/weapon/coin/uranium))
|
||||
amt_uranium++;
|
||||
|
||||
var/dat = text("<b>The contents of the moneybag reveal...</b><br>")
|
||||
if (amt_gold)
|
||||
dat += text("Gold coins: [amt_gold] <A href='?src=\ref[src];remove=gold'>Remove one</A><br>")
|
||||
if (amt_silver)
|
||||
dat += text("Silver coins: [amt_silver] <A href='?src=\ref[src];remove=silver'>Remove one</A><br>")
|
||||
if (amt_iron)
|
||||
dat += text("Metal coins: [amt_iron] <A href='?src=\ref[src];remove=iron'>Remove one</A><br>")
|
||||
if (amt_diamond)
|
||||
dat += text("Diamond coins: [amt_diamond] <A href='?src=\ref[src];remove=diamond'>Remove one</A><br>")
|
||||
if (amt_phoron)
|
||||
dat += text("Phoron coins: [amt_phoron] <A href='?src=\ref[src];remove=phoron'>Remove one</A><br>")
|
||||
if (amt_uranium)
|
||||
dat += text("Uranium coins: [amt_uranium] <A href='?src=\ref[src];remove=uranium'>Remove one</A><br>")
|
||||
user << browse("[dat]", "window=moneybag")
|
||||
|
||||
/obj/item/weapon/moneybag/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
..()
|
||||
if (istype(W, /obj/item/weapon/coin))
|
||||
var/obj/item/weapon/coin/C = W
|
||||
to_chat(user, "<font color='blue'>You add the [C.name] into the bag.</font>")
|
||||
usr.drop_item()
|
||||
contents += C
|
||||
if (istype(W, /obj/item/weapon/moneybag))
|
||||
var/obj/item/weapon/moneybag/C = W
|
||||
for (var/obj/O in C.contents)
|
||||
contents += O;
|
||||
to_chat(user, "<font color='blue'>You empty the [C.name] into the bag.</font>")
|
||||
return
|
||||
|
||||
/obj/item/weapon/moneybag/Topic(href, href_list)
|
||||
if(..())
|
||||
return 1
|
||||
usr.set_machine(src)
|
||||
src.add_fingerprint(usr)
|
||||
if(href_list["remove"])
|
||||
var/obj/item/weapon/coin/COIN
|
||||
switch(href_list["remove"])
|
||||
if("gold")
|
||||
COIN = locate(/obj/item/weapon/coin/gold,src.contents)
|
||||
if("silver")
|
||||
COIN = locate(/obj/item/weapon/coin/silver,src.contents)
|
||||
if("iron")
|
||||
COIN = locate(/obj/item/weapon/coin/iron,src.contents)
|
||||
if("diamond")
|
||||
COIN = locate(/obj/item/weapon/coin/diamond,src.contents)
|
||||
if("phoron")
|
||||
COIN = locate(/obj/item/weapon/coin/phoron,src.contents)
|
||||
if("uranium")
|
||||
COIN = locate(/obj/item/weapon/coin/uranium,src.contents)
|
||||
if(!COIN)
|
||||
return
|
||||
COIN.loc = src.loc
|
||||
return
|
||||
|
||||
|
||||
|
||||
/obj/item/weapon/moneybag/vault
|
||||
|
||||
/obj/item/weapon/moneybag/vault/New()
|
||||
..()
|
||||
new /obj/item/weapon/coin/silver(src)
|
||||
new /obj/item/weapon/coin/silver(src)
|
||||
new /obj/item/weapon/coin/silver(src)
|
||||
new /obj/item/weapon/coin/silver(src)
|
||||
new /obj/item/weapon/coin/gold(src)
|
||||
new /obj/item/weapon/coin/gold(src)
|
||||
@@ -13,7 +13,7 @@
|
||||
//---Beverages---//
|
||||
//***************//
|
||||
|
||||
/datum/reagent/var/price_tag = null
|
||||
/datum/reagent/var/price_tag = 0
|
||||
|
||||
|
||||
// Juices, soda and similar //
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -61,10 +61,6 @@
|
||||
var/turf/mob_turf = get_turf(L)
|
||||
if(!mob_turf || !(mob_turf.z in impacted.expected_z_levels))
|
||||
continue
|
||||
if(!L.buckled && !issilicon(L))
|
||||
if(!L.Check_Shoegrip())
|
||||
L.throw_at(get_step_rand(L),1,5)
|
||||
L.Weaken(5)
|
||||
if(L.client)
|
||||
to_chat(L, "<span class='danger'>The ground lurches beneath you!</span>")
|
||||
shake_camera(L, 6, 1)
|
||||
|
||||
@@ -274,8 +274,7 @@
|
||||
/datum/event/supply_demand/proc/choose_chemistry_items(var/differentTypes)
|
||||
// Checking if they show up in health analyzer is good huristic for it being a drug
|
||||
var/list/medicineReagents = list()
|
||||
for(var/path in typesof(/datum/chemical_reaction) - /datum/chemical_reaction)
|
||||
var/datum/chemical_reaction/CR = path // Stupid casting required for reading
|
||||
for(var/decl/chemical_reaction/instant/CR in SSchemistry.chemical_reactions)
|
||||
var/datum/reagent/R = SSchemistry.chemical_reagents[initial(CR.result)]
|
||||
if(R && R.scannable)
|
||||
medicineReagents += R
|
||||
@@ -288,8 +287,7 @@
|
||||
|
||||
/datum/event/supply_demand/proc/choose_bar_items(var/differentTypes)
|
||||
var/list/drinkReagents = list()
|
||||
for(var/path in typesof(/datum/chemical_reaction) - /datum/chemical_reaction)
|
||||
var/datum/chemical_reaction/CR = path // Stupid casting required for reading
|
||||
for(var/decl/chemical_reaction/instant/drinks/CR in SSchemistry.chemical_reactions)
|
||||
var/datum/reagent/R = SSchemistry.chemical_reagents[initial(CR.result)]
|
||||
if(istype(R, /datum/reagent/drink) || istype(R, /datum/reagent/ethanol))
|
||||
drinkReagents += R
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
description_info = "This is an energy weapon. To fire the weapon, ensure your intent is *not* set to 'help', have your gun mode set to 'fire', \
|
||||
then click where you want to fire. Most energy weapons can fire through windows harmlessly. To recharge this weapon, use a weapon recharger."
|
||||
|
||||
/obj/item/weapon/gun/energy/gun/stunrevolver
|
||||
/obj/item/weapon/gun/energy/stunrevolver
|
||||
description_info = "This is an energy weapon. To fire the weapon, ensure your intent is *not* set to 'help', have your gun mode set to 'fire', \
|
||||
then click where you want to fire. Most energy weapons can fire through windows harmlessly. To recharge this weapon, use a weapon recharger."
|
||||
|
||||
|
||||
75
code/modules/food/food/cans_vr.dm
Normal file
75
code/modules/food/food/cans_vr.dm
Normal file
@@ -0,0 +1,75 @@
|
||||
//////////////////////Bepis Drinks (04/29/2021)//////////////////////
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/bepis
|
||||
name = "\improper Bepis"
|
||||
desc = "It has a smell of 'off-brand' whenever you open it..."
|
||||
description_fluff = "Puts the 'B' in Best Soda! Bepis is the number one competitor to \
|
||||
Space Cola and has vendors scattered across the frontier. While the drink is not as \
|
||||
popular as Space Cola, many people across known space enjoy the sweet beverage."
|
||||
icon = 'icons/obj/drinks_vr.dmi'
|
||||
icon_state = "bepis"
|
||||
center_of_mass = list("x"=16, "y"=10)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/bepis/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("bepis", 30)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/astrodew
|
||||
name = "\improper Astro Dew Spring Water"
|
||||
desc = "A can of refreshing 'spring' water! Or so the can claims."
|
||||
icon = 'icons/obj/drinks_vr.dmi'
|
||||
icon_state = "watercan"
|
||||
center_of_mass = list("x"=16, "y"=10)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/astrodew/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("water", 30)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/icecoffee
|
||||
name = "\improper Caf<61> Del Consumir"
|
||||
desc = "A can of deliciously sweet iced coffee that originates from Earth."
|
||||
description_fluff = "Caf<61> Del Consumir originates from a small coffee brewery in M<>xico \
|
||||
that still opperates to this day. Caf<61> Del Consumir prides itself on being true to form \
|
||||
and retaining its original recipe. They've been producing and selling thier product across \
|
||||
the galaxy for decades without fail. NanoTrasen has attempted to by out the small company for \
|
||||
years now, howerver all attempts they've made have failed."
|
||||
icon = 'icons/obj/drinks_vr.dmi'
|
||||
icon_state = "coffeecan"
|
||||
center_of_mass = list("x"=16, "y"=10)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/icecoffee/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("icecoffee", 30)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/buzz
|
||||
name = "\improper Buzz Fuzz"
|
||||
desc = "Uses real honey, making it a sweet tooth's dream drink."
|
||||
icon = 'icons/obj/drinks_vr.dmi'
|
||||
icon_state = "buzzfuzz"
|
||||
center_of_mass = list("x"=16, "y"=10)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/buzz/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("buzz_fuzz", 30)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/shambler
|
||||
name = "\improper Shambler's Juice"
|
||||
desc = "~Shake me up some of that Shambler's Juice!~"
|
||||
icon = 'icons/obj/drinks_vr.dmi'
|
||||
icon_state = "shambler"
|
||||
center_of_mass = list("x"=16, "y"=10)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/shambler/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("shamblers", 30)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/cranberry
|
||||
name = "\improper Sprited Cranberry"
|
||||
desc = "A delicious blend of fresh cranberry juice and various spices, the perfect drink."
|
||||
icon = 'icons/obj/drinks_vr.dmi'
|
||||
icon_state = "cranberry"
|
||||
center_of_mass = list("x"=16, "y"=10)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/cranberry/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("sprited_cranberry", 30)
|
||||
@@ -341,20 +341,20 @@
|
||||
. = ..()
|
||||
reagents.add_reagent("absinthe", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/melonliquor
|
||||
name = "Emeraldine Melon Liquor"
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/melonliquor //MODIFIED ON 04/21/2021
|
||||
name = "Emeraldine Melon Liqueur"
|
||||
desc = "A bottle of 46 proof Emeraldine Melon Liquor. Sweet and light."
|
||||
icon_state = "alco-green" //Placeholder.
|
||||
icon_state = "melon_liqueur"
|
||||
center_of_mass = list("x"=16, "y"=6)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/melonliquor/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("melonliquor", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/bluecuracao
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/bluecuracao //MODIFIED ON 04/21/2021
|
||||
name = "Miss Blue Curacao"
|
||||
desc = "A fruity, exceptionally azure drink. Does not allow the imbiber to use the fifth magic."
|
||||
icon_state = "alco-blue" //Placeholder.
|
||||
icon_state = "blue_curacao"
|
||||
center_of_mass = list("x"=16, "y"=6)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/bluecuracao/Initialize()
|
||||
@@ -371,36 +371,6 @@
|
||||
. = ..()
|
||||
reagents.add_reagent("grenadine", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/cola
|
||||
name = "\improper Space Cola"
|
||||
desc = "Cola. in space"
|
||||
icon_state = "colabottle"
|
||||
center_of_mass = list("x"=16, "y"=6)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/cola/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("cola", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/space_up
|
||||
name = "\improper Space-Up"
|
||||
desc = "Tastes like a hull breach in your mouth."
|
||||
icon_state = "space-up_bottle"
|
||||
center_of_mass = list("x"=16, "y"=6)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/space_up/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("space_up", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/space_mountain_wind
|
||||
name = "\improper Space Mountain Wind"
|
||||
desc = "Blows right through you like a space wind."
|
||||
icon_state = "space_mountain_wind_bottle"
|
||||
center_of_mass = list("x"=16, "y"=6)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/space_mountain_wind/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("spacemountainwind", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/pwine
|
||||
name = "Warlock's Velvet"
|
||||
desc = "What a delightful packaging for a surely high quality wine! The vintage must be amazing!"
|
||||
@@ -421,7 +391,107 @@
|
||||
. = ..()
|
||||
reagents.add_reagent("unathiliquor", 100)
|
||||
|
||||
//////////////////////////JUICES AND STUFF ///////////////////////
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/sake
|
||||
name = "Mono-No-Aware Luxury Sake"
|
||||
desc = "Dry alcohol made from rice, a favorite of businessmen."
|
||||
icon_state = "sakebottle"
|
||||
center_of_mass = list("x"=16, "y"=3)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/sake/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("sake", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/champagne
|
||||
name = "Gilthari Luxury Champagne"
|
||||
desc = "For those special occassions."
|
||||
icon_state = "champagne"
|
||||
center_of_mass = list("x"=16, "y"=3)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/champagne/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("champagne", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/peppermintschnapps
|
||||
name = "Dr. Bone's Peppermint Schnapps"
|
||||
desc = "A flavoured grain liqueur with a fresh, minty taste."
|
||||
icon_state = "schnapps_pep"
|
||||
center_of_mass = list("x"=16, "y"=3)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/peppermintschnapps/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("schnapps_pep", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/peachschnapps
|
||||
name = "Dr. Bone's Peach Schnapps"
|
||||
desc = "A flavoured grain liqueur with a fruity peach taste."
|
||||
icon_state = "schnapps_pea"
|
||||
center_of_mass = list("x"=16, "y"=3)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/peachschnapps/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("schnapps_pea", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/lemonadeschnapps
|
||||
name = "Dr. Bone's Lemonade Schnapps"
|
||||
desc = "A flavoured grain liqueur with a sweetish, lemon taste."
|
||||
icon_state = "schnapps_lem"
|
||||
center_of_mass = list("x"=16, "y"=3)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/lemonadeschnapps/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("schnapps_lem", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/jager
|
||||
name = "Schusskonig"
|
||||
desc = "A complex tasting digestif. Thank god the original's trademark lapsed."
|
||||
icon_state = "jager_bottle"
|
||||
center_of_mass = list("x"=16, "y"=3)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/jager/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("jager", 100)
|
||||
|
||||
//////////////////////////JUICES AND STUFF///////////////////////
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/cola //MODIFIED ON 04/21/2021
|
||||
name = "\improper two-liter Space Cola"
|
||||
desc = "Cola. In space."
|
||||
icon_state = "colabottle"
|
||||
center_of_mass = list("x"=16, "y"=6)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/cola/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("cola", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/space_up //MODIFIED ON 04/21/2021
|
||||
name = "\improper two-liter Space-Up"
|
||||
desc = "Tastes like a hull breach in your mouth."
|
||||
icon_state = "space-up_bottle"
|
||||
center_of_mass = list("x"=16, "y"=6)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/space_up/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("space_up", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/space_mountain_wind //MODIFIED ON 04/21/2021
|
||||
name = "\improper two-liter Space Mountain Wind"
|
||||
desc = "Blows right through you like a space wind."
|
||||
icon_state = "space_mountain_wind_bottle"
|
||||
center_of_mass = list("x"=16, "y"=6)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/space_mountain_wind/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("spacemountainwind", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/dr_gibb //ADDED ON 04/21/2021
|
||||
name = "\improper two-liter Dr. Gibb"
|
||||
desc = "A delicious mixture of 42 different flavors."
|
||||
icon_state = "dr_gibb_bottle"
|
||||
center_of_mass = list("x"=16, "y"=6)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/dr_gibb/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("dr_gibb", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice
|
||||
name = "Orange Juice"
|
||||
@@ -507,7 +577,8 @@
|
||||
. = ..()
|
||||
reagents.add_reagent("lemonjuice", 100)
|
||||
|
||||
//Small bottles
|
||||
//////////////////////////SMALL BOTTLES///////////////////////
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/small
|
||||
volume = 50
|
||||
smash_duration = 1
|
||||
@@ -578,63 +649,3 @@
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/small/ale/hushedwhisper/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("ale", 50)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/sake
|
||||
name = "Mono-No-Aware Luxury Sake"
|
||||
desc = "Dry alcohol made from rice, a favorite of businessmen."
|
||||
icon_state = "sakebottle"
|
||||
center_of_mass = list("x"=16, "y"=3)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/sake/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("sake", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/champagne
|
||||
name = "Gilthari Luxury Champagne"
|
||||
desc = "For those special occassions."
|
||||
icon_state = "champagne"
|
||||
center_of_mass = list("x"=16, "y"=3)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/champagne/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("champagne", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/peppermintschnapps
|
||||
name = "Dr. Bone's Peppermint Schnapps"
|
||||
desc = "A flavoured grain liqueur with a fresh, minty taste."
|
||||
icon_state = "schnapps_pep"
|
||||
center_of_mass = list("x"=16, "y"=3)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/peppermintschnapps/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("schnapps_pep", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/peachschnapps
|
||||
name = "Dr. Bone's Peach Schnapps"
|
||||
desc = "A flavoured grain liqueur with a fruity peach taste."
|
||||
icon_state = "schnapps_pea"
|
||||
center_of_mass = list("x"=16, "y"=3)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/peachschnapps/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("schnapps_pea", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/lemonadeschnapps
|
||||
name = "Dr. Bone's Lemonade Schnapps"
|
||||
desc = "A flavoured grain liqueur with a sweetish, lemon taste."
|
||||
icon_state = "schnapps_lem"
|
||||
center_of_mass = list("x"=16, "y"=3)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/lemonadeschnapps/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("schnapps_lem", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/jager
|
||||
name = "Schusskonig"
|
||||
desc = "A complex tasting digestif. Thank god the original's trademark lapsed."
|
||||
icon_state = "jager_bottle"
|
||||
center_of_mass = list("x"=16, "y"=3)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/jager/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("jager", 100)
|
||||
|
||||
@@ -8,13 +8,11 @@
|
||||
|
||||
//////////////////////// DRINK
|
||||
var/list/drink_recipes = list()
|
||||
for(var/path in typesof(/datum/chemical_reaction/drinks) - /datum/chemical_reaction/drinks)
|
||||
var/datum/chemical_reaction/drinks/CR = new path()
|
||||
drink_recipes[path] = list("Result" = CR.name,
|
||||
for(var/decl/chemical_reaction/instant/drinks/CR in SSchemistry.chemical_reactions)
|
||||
drink_recipes[CR.type] = list("Result" = CR.name,
|
||||
"ResAmt" = CR.result_amount,
|
||||
"Reagents" = CR.required_reagents,
|
||||
"Catalysts" = CR.catalysts)
|
||||
qdel(CR)
|
||||
|
||||
//////////////////////// FOOD
|
||||
var/list/food_recipes = typesof(/datum/recipe) - /datum/recipe
|
||||
@@ -43,16 +41,14 @@
|
||||
qdel(R)
|
||||
|
||||
//////////////////////// FOOD+ (basically condiments, tofu, cheese, soysauce, etc)
|
||||
for(var/path in typesof(/datum/chemical_reaction/food) - /datum/chemical_reaction/food)
|
||||
var/datum/chemical_reaction/food/CR = new path()
|
||||
food_recipes[path] = list("Result" = CR.name,
|
||||
for(var/decl/chemical_reaction/instant/food/CR in SSchemistry.chemical_reactions)
|
||||
food_recipes[CR.type] = list("Result" = CR.name,
|
||||
"ResAmt" = CR.result_amount,
|
||||
"Reagents" = CR.required_reagents,
|
||||
"Catalysts" = CR.catalysts,
|
||||
"Fruit" = list(),
|
||||
"Ingredients" = list(),
|
||||
"Image" = null)
|
||||
qdel(CR)
|
||||
|
||||
//////////////////////// PROCESSING
|
||||
//Items needs further processing into human-readability.
|
||||
|
||||
19
code/modules/materials/fifty_spawner_mats_vr.dm
Normal file
19
code/modules/materials/fifty_spawner_mats_vr.dm
Normal file
@@ -0,0 +1,19 @@
|
||||
/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,279 +0,0 @@
|
||||
/datum/material/proc/get_recipes()
|
||||
if(!recipes)
|
||||
generate_recipes()
|
||||
return recipes
|
||||
|
||||
/datum/material/proc/generate_recipes()
|
||||
recipes = list()
|
||||
|
||||
// If is_brittle() returns true, these are only good for a single strike.
|
||||
recipes += new/datum/stack_recipe("[display_name] baseball bat", /obj/item/weapon/material/twohanded/baseballbat, 10, time = 20, one_per_turf = 0, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("[display_name] ashtray", /obj/item/weapon/material/ashtray, 2, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("[display_name] spoon", /obj/item/weapon/material/kitchen/utensil/spoon/plastic, 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("[display_name] armor plate", /obj/item/weapon/material/armor_plating, 1, time = 20, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("[display_name] armor plate insert", /obj/item/weapon/material/armor_plating/insert, 2, time = 40, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("[display_name] grave marker", /obj/item/weapon/material/gravemarker, 5, time = 50, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("[display_name] ring", /obj/item/clothing/gloves/ring/material, 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("[display_name] bracelet", /obj/item/clothing/accessory/bracelet/material, 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
|
||||
if(integrity>=50)
|
||||
recipes += new/datum/stack_recipe("[display_name] door", /obj/structure/simple_door, 10, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("[display_name] barricade", /obj/structure/barricade, 5, time = 50, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("[display_name] stool", /obj/item/weapon/stool, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("[display_name] chair", /obj/structure/bed/chair, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("[display_name] bed", /obj/structure/bed, 2, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("[display_name] double bed", /obj/structure/bed/double, 4, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("[display_name] wall girders", /obj/structure/girder, 2, time = 50, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
|
||||
if(hardness>50)
|
||||
recipes += new/datum/stack_recipe("[display_name] fork", /obj/item/weapon/material/kitchen/utensil/fork/plastic, 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("[display_name] knife", /obj/item/weapon/material/knife/plastic, 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("[display_name] blade", /obj/item/weapon/material/butterflyblade, 6, time = 20, one_per_turf = 0, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("[display_name] defense wire", /obj/item/weapon/material/barbedwire, 10, time = 1 MINUTE, one_per_turf = 0, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
|
||||
/datum/material/steel/generate_recipes()
|
||||
..()
|
||||
recipes += new/datum/stack_recipe_list("office chairs",list( \
|
||||
new/datum/stack_recipe("dark office chair", /obj/structure/bed/chair/office/dark, 5, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("light office chair", /obj/structure/bed/chair/office/light, 5, one_per_turf = 1, on_floor = 1, recycle_material = "[name]") \
|
||||
))
|
||||
recipes += new/datum/stack_recipe_list("comfy chairs", list( \
|
||||
new/datum/stack_recipe("beige comfy chair", /obj/structure/bed/chair/comfy/beige, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("black comfy chair", /obj/structure/bed/chair/comfy/black, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("brown comfy chair", /obj/structure/bed/chair/comfy/brown, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("lime comfy chair", /obj/structure/bed/chair/comfy/lime, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("teal comfy chair", /obj/structure/bed/chair/comfy/teal, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("red comfy chair", /obj/structure/bed/chair/comfy/red, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("blue comfy chair", /obj/structure/bed/chair/comfy/blue, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("purple comfy chair", /obj/structure/bed/chair/comfy/purp, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("green comfy chair", /obj/structure/bed/chair/comfy/green, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("yellow comfy chair", /obj/structure/bed/chair/comfy/yellow, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("orange comfy chair", /obj/structure/bed/chair/comfy/orange, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
))
|
||||
recipes += new/datum/stack_recipe("table frame", /obj/structure/table, 1, time = 10, one_per_turf = 1, on_floor = 1, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("bench frame", /obj/structure/table/bench, 1, time = 10, one_per_turf = 1, on_floor = 1, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("rack", /obj/structure/table/rack, 1, time = 5, one_per_turf = 1, on_floor = 1, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("closet", /obj/structure/closet, 2, time = 15, one_per_turf = 1, on_floor = 1, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("canister", /obj/machinery/portable_atmospherics/canister, 10, time = 15, one_per_turf = 1, on_floor = 1, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("cannon frame", /obj/item/weapon/cannonframe, 10, time = 15, one_per_turf = 0, on_floor = 0, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("regular floor tile", /obj/item/stack/tile/floor, 1, 4, 20, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("roofing tile", /obj/item/stack/tile/roofing, 3, 4, 20, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("metal rod", /obj/item/stack/rods, 1, 2, 60, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("frame", /obj/item/frame, 5, time = 25, one_per_turf = 1, on_floor = 1, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("mirror frame", /obj/item/frame/mirror, 1, time = 5, one_per_turf = 0, on_floor = 1, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("fire extinguisher cabinet frame", /obj/item/frame/extinguisher_cabinet, 4, time = 5, one_per_turf = 0, on_floor = 1, recycle_material = "[name]")
|
||||
//recipes += new/datum/stack_recipe("fire axe cabinet frame", /obj/item/frame/fireaxe_cabinet, 4, time = 5, one_per_turf = 0, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("railing", /obj/structure/railing, 2, time = 50, one_per_turf = 0, on_floor = 1, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("turret frame", /obj/machinery/porta_turret_construct, 5, time = 25, one_per_turf = 1, on_floor = 1, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe_list("airlock assemblies", list( \
|
||||
new/datum/stack_recipe("standard airlock assembly", /obj/structure/door_assembly, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("command airlock assembly", /obj/structure/door_assembly/door_assembly_com, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("security airlock assembly", /obj/structure/door_assembly/door_assembly_sec, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("eng atmos airlock assembly", /obj/structure/door_assembly/door_assembly_eat, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("engineering airlock assembly", /obj/structure/door_assembly/door_assembly_eng, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("mining airlock assembly", /obj/structure/door_assembly/door_assembly_min, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("atmospherics airlock assembly", /obj/structure/door_assembly/door_assembly_atmo, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("research airlock assembly", /obj/structure/door_assembly/door_assembly_research, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("medical airlock assembly", /obj/structure/door_assembly/door_assembly_med, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("maintenance airlock assembly", /obj/structure/door_assembly/door_assembly_mai, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("external airlock assembly", /obj/structure/door_assembly/door_assembly_ext, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("freezer airlock assembly", /obj/structure/door_assembly/door_assembly_fre, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("airtight hatch assembly", /obj/structure/door_assembly/door_assembly_hatch, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("maintenance hatch assembly", /obj/structure/door_assembly/door_assembly_mhatch, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("high security airlock assembly", /obj/structure/door_assembly/door_assembly_highsecurity, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("voidcraft airlock assembly horizontal", /obj/structure/door_assembly/door_assembly_voidcraft, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("voidcraft airlock assembly vertical", /obj/structure/door_assembly/door_assembly_voidcraft/vertical, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("emergency shutter", /obj/structure/firedoor_assembly, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("multi-tile airlock assembly", /obj/structure/door_assembly/multi_tile, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
))
|
||||
//recipes += new/datum/stack_recipe("IV drip", /obj/machinery/iv_drip, 4, time = 20, one_per_turf = 1, on_floor = 1, recycle_material = "[name]")//VOREStation Removal
|
||||
recipes += new/datum/stack_recipe("medical stand", /obj/structure/medical_stand, 4, time = 20, one_per_turf = 1, on_floor = 1, recycle_material = "[name]")//VOREStation Replacement
|
||||
recipes += new/datum/stack_recipe("conveyor switch", /obj/machinery/conveyor_switch, 2, time = 20, one_per_turf = 1, on_floor = 1, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("grenade casing", /obj/item/weapon/grenade/chem_grenade, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("light fixture frame", /obj/item/frame/light, 2, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("small light fixture frame", /obj/item/frame/light/small, 1, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("floor lamp fixture frame", /obj/machinery/light_construct/flamp, 2, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("apc frame", /obj/item/frame/apc, 2, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe_list("modular computer frames", list( \
|
||||
new/datum/stack_recipe("modular console frame", /obj/item/modular_computer/console, 20, recycle_material = "[name]"),\
|
||||
new/datum/stack_recipe("modular telescreen frame", /obj/item/modular_computer/telescreen, 10, recycle_material = "[name]"),\
|
||||
new/datum/stack_recipe("modular laptop frame", /obj/item/modular_computer/laptop, 10, recycle_material = "[name]"),\
|
||||
new/datum/stack_recipe("modular tablet frame", /obj/item/modular_computer/tablet, 5, recycle_material = "[name]"),\
|
||||
))
|
||||
recipes += new/datum/stack_recipe_list("filing cabinets", list( \
|
||||
new/datum/stack_recipe("filing cabinet", /obj/structure/filingcabinet, 4, time = 20, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("tall filing cabinet", /obj/structure/filingcabinet/filingcabinet, 4, time = 20, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("chest drawer", /obj/structure/filingcabinet/chestdrawer, 4, time = 20, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
))
|
||||
recipes += new/datum/stack_recipe("desk bell", /obj/item/weapon/deskbell, 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("tanning rack", /obj/structure/tanning_rack, 3, one_per_turf = TRUE, time = 20, on_floor = TRUE, supplied_material = "[name]")
|
||||
|
||||
/datum/material/plasteel/generate_recipes()
|
||||
..()
|
||||
recipes += new/datum/stack_recipe("AI core", /obj/structure/AIcore, 4, time = 50, one_per_turf = 1, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("Metal crate", /obj/structure/closet/crate, 10, time = 50, one_per_turf = 1, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("knife grip", /obj/item/weapon/material/butterflyhandle, 4, time = 20, one_per_turf = 0, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("dark floor tile", /obj/item/stack/tile/floor/dark, 1, 4, 20, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("roller bed", /obj/item/roller, 5, time = 30, on_floor = 1, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("whetstone", /obj/item/weapon/whetstone, 2, time = 10, recycle_material = "[name]")
|
||||
|
||||
/datum/material/stone/generate_recipes()
|
||||
..()
|
||||
recipes += new/datum/stack_recipe("planting bed", /obj/machinery/portable_atmospherics/hydroponics/soil, 3, time = 10, one_per_turf = 1, on_floor = 1, recycle_material = "[name]")
|
||||
|
||||
/datum/material/stone/marble/generate_recipes()
|
||||
..()
|
||||
recipes += new/datum/stack_recipe("light marble floor tile", /obj/item/stack/tile/wmarble, 1, 4, 20, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("dark marble floor tile", /obj/item/stack/tile/bmarble, 1, 4, 20, recycle_material = "[name]")
|
||||
|
||||
/datum/material/plastic/generate_recipes()
|
||||
..()
|
||||
recipes += new/datum/stack_recipe("plastic crate", /obj/structure/closet/crate/plastic, 10, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("plastic bag", /obj/item/weapon/storage/bag/plasticbag, 3, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("blood pack", /obj/item/weapon/reagent_containers/blood/empty, 4, on_floor = 0, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("reagent dispenser cartridge (large)", /obj/item/weapon/reagent_containers/chem_disp_cartridge, 5, on_floor=0, pass_stack_color = TRUE, recycle_material = "[name]") // 500u
|
||||
recipes += new/datum/stack_recipe("reagent dispenser cartridge (med)", /obj/item/weapon/reagent_containers/chem_disp_cartridge/medium, 3, on_floor=0, pass_stack_color = TRUE, recycle_material = "[name]") // 250u
|
||||
recipes += new/datum/stack_recipe("reagent dispenser cartridge (small)", /obj/item/weapon/reagent_containers/chem_disp_cartridge/small, 1, on_floor=0, pass_stack_color = TRUE, recycle_material = "[name]") // 100u
|
||||
recipes += new/datum/stack_recipe("white floor tile", /obj/item/stack/tile/floor/white, 1, 4, 20, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("freezer floor tile", /obj/item/stack/tile/floor/freezer, 1, 4, 20, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("shower curtain", /obj/structure/curtain, 4, time = 15, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("plastic flaps", /obj/structure/plasticflaps, 4, time = 25, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("water-cooler", /obj/structure/reagent_dispensers/water_cooler, 4, time = 10, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("lampshade", /obj/item/weapon/lampshade, 1, time = 1, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("plastic net", /obj/item/weapon/material/fishing_net, 25, time = 1 MINUTE, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("plastic fishtank", /obj/item/glass_jar/fish/plastic, 2, time = 30 SECONDS, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("reagent tubing", /obj/item/stack/hose, 1, 4, 20, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("Feeder", /obj/machinery/feeder, 4, time = 20, one_per_turf = 1, on_floor = 1, recycle_material = "[name]") //CHOMP Addition
|
||||
|
||||
/datum/material/wood/generate_recipes()
|
||||
..()
|
||||
recipes += new/datum/stack_recipe("oar", /obj/item/weapon/oar, 2, time = 30, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("boat", /obj/vehicle/boat, 20, time = 10 SECONDS, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("dragon boat", /obj/vehicle/boat/dragon, 50, time = 30 SECONDS, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("wooden sandals", /obj/item/clothing/shoes/sandal, 1, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("wood circlet", /obj/item/clothing/head/woodcirclet, 1, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("clipboard", /obj/item/weapon/clipboard, 1, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("wood floor tile", /obj/item/stack/tile/wood, 1, 4, 20, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += 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]")
|
||||
recipes += new/datum/stack_recipe("crossbow frame", /obj/item/weapon/crossbowframe, 5, time = 25, one_per_turf = 0, on_floor = 0, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += 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]")
|
||||
recipes += new/datum/stack_recipe("beehive assembly", /obj/item/beehive_assembly, 4, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("beehive frame", /obj/item/honey_frame, 1, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("book shelf", /obj/structure/bookcase, 5, time = 15, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("noticeboard frame", /obj/item/frame/noticeboard, 4, time = 5, one_per_turf = 0, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("wooden bucket", /obj/item/weapon/reagent_containers/glass/bucket/wood, 2, time = 4, one_per_turf = 0, on_floor = 0, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("coilgun stock", /obj/item/weapon/coilgun_assembly, 5, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("crude fishing rod", /obj/item/weapon/material/fishing_rod/built, 8, time = 10 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("wooden standup figure", /obj/structure/barricade/cutout, 5, time = 10 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]") //VOREStation Add
|
||||
recipes += new/datum/stack_recipe("noticeboard", /obj/structure/noticeboard, 1, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("tanning rack", /obj/structure/tanning_rack, 3, one_per_turf = TRUE, time = 20, on_floor = TRUE, supplied_material = "[name]")
|
||||
|
||||
/datum/material/wood/log/generate_recipes()
|
||||
recipes = list()
|
||||
recipes += new/datum/stack_recipe("bonfire", /obj/structure/bonfire, 5, time = 50, supplied_material = "[name]", pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
|
||||
/datum/material/cardboard/generate_recipes()
|
||||
..()
|
||||
recipes += new/datum/stack_recipe("box", /obj/item/weapon/storage/box, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("donut box", /obj/item/weapon/storage/box/donut/empty, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("egg box", /obj/item/weapon/storage/fancy/egg_box, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("light tubes box", /obj/item/weapon/storage/box/lights/tubes, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("light bulbs box", /obj/item/weapon/storage/box/lights/bulbs, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("mouse traps box", /obj/item/weapon/storage/box/mousetraps, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("cardborg suit", /obj/item/clothing/suit/cardborg, 3, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("cardborg helmet", /obj/item/clothing/head/cardborg, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("pizza box", /obj/item/pizzabox, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe_list("folders",list( \
|
||||
new/datum/stack_recipe("blue folder", /obj/item/weapon/folder/blue, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("grey folder", /obj/item/weapon/folder, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("red folder", /obj/item/weapon/folder/red, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("white folder", /obj/item/weapon/folder/white, recycle_material = "[name]"), \
|
||||
new/datum/stack_recipe("yellow folder", /obj/item/weapon/folder/yellow, recycle_material = "[name]"), \
|
||||
))
|
||||
|
||||
/datum/material/snow/generate_recipes()
|
||||
recipes = list()
|
||||
recipes += new/datum/stack_recipe("snowball", /obj/item/weapon/material/snow/snowball, 1, time = 10, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("snow brick", /obj/item/stack/material/snowbrick, 2, time = 10, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("snowman", /obj/structure/snowman, 2, time = 15, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("snow robot", /obj/structure/snowman/borg, 2, time = 10, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("snow spider", /obj/structure/snowman/spider, 3, time = 20, recycle_material = "[name]")
|
||||
|
||||
/datum/material/snowbrick/generate_recipes()
|
||||
recipes = list()
|
||||
recipes += new/datum/stack_recipe("[display_name] door", /obj/structure/simple_door, 10, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] barricade", /obj/structure/barricade, 5, time = 50, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] stool", /obj/item/weapon/stool, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] chair", /obj/structure/bed/chair, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] bed", /obj/structure/bed, 2, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] double bed", /obj/structure/bed/double, 4, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] wall girders", /obj/structure/girder, 2, time = 50, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] ashtray", /obj/item/weapon/material/ashtray, 2, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
|
||||
/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)
|
||||
for(var/datum/stack_recipe/r_recipe in recipes)
|
||||
if(r_recipe.title == "wood floor tile")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
if(r_recipe.title == "wooden chair")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
|
||||
/datum/material/supermatter/generate_recipes()
|
||||
recipes = list()
|
||||
recipes += new/datum/stack_recipe("supermatter shard", /obj/machinery/power/supermatter/shard, 30 , one_per_turf = 1, time = 600, on_floor = 1, recycle_material = "[name]")
|
||||
|
||||
/datum/material/cloth/generate_recipes()
|
||||
recipes = list()
|
||||
recipes += new/datum/stack_recipe("woven net", /obj/item/weapon/material/fishing_net, 10, time = 30 SECONDS, pass_stack_color = TRUE, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("bedsheet", /obj/item/weapon/bedsheet, 10, time = 30 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("uniform", /obj/item/clothing/under/color/white, 8, time = 15 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("foot wraps", /obj/item/clothing/shoes/footwraps, 2, time = 5 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("gloves", /obj/item/clothing/gloves/white, 2, time = 5 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("wig", /obj/item/clothing/head/powdered_wig, 4, time = 10 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("philosopher's wig", /obj/item/clothing/head/philosopher_wig, 50, time = 2 MINUTES, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("taqiyah", /obj/item/clothing/head/taqiyah, 3, time = 6 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("turban", /obj/item/clothing/head/turban, 3, time = 6 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("hijab", /obj/item/clothing/head/hijab, 3, time = 6 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("kippa", /obj/item/clothing/head/kippa, 3, time = 6 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("scarf", /obj/item/clothing/accessory/scarf/white, 4, time = 5 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("baggy pants", /obj/item/clothing/under/pants/baggy/white, 8, time = 10 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("belt pouch", /obj/item/weapon/storage/belt/fannypack/white, 25, time = 1 MINUTE, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("crude bandage", /obj/item/stack/medical/crude_pack, 1, time = 2 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("empty sandbag", /obj/item/stack/emptysandbag, 2, time = 2 SECONDS, pass_stack_color = TRUE, supplied_material = "[name]")
|
||||
|
||||
/datum/material/resin/generate_recipes()
|
||||
recipes = list()
|
||||
recipes += new/datum/stack_recipe("[display_name] door", /obj/structure/simple_door/resin, 10, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("[display_name] barricade", /obj/effect/alien/resin/wall, 5, time = 5 SECONDS, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] nest", /obj/structure/bed/nest, 2, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("[display_name] wall girders", /obj/structure/girder/resin, 2, time = 5 SECONDS, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("crude [display_name] bandage", /obj/item/stack/medical/crude_pack, 1, time = 2 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] net", /obj/item/weapon/material/fishing_net, 10, time = 5 SECONDS, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("[display_name] membrane", /obj/effect/alien/resin/membrane, 1, time = 2 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] node", /obj/effect/alien/weeds/node, 1, time = 4 SECONDS, recycle_material = "[name]")
|
||||
|
||||
/datum/material/leather/generate_recipes()
|
||||
recipes = list()
|
||||
recipes += new/datum/stack_recipe("bedsheet", /obj/item/weapon/bedsheet, 10, time = 30 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("uniform", /obj/item/clothing/under/color/white, 8, time = 15 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("foot wraps", /obj/item/clothing/shoes/footwraps, 2, time = 5 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("gloves", /obj/item/clothing/gloves/white, 2, time = 5 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("wig", /obj/item/clothing/head/powdered_wig, 4, time = 10 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("philosopher's wig", /obj/item/clothing/head/philosopher_wig, 50, time = 2 MINUTES, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("taqiyah", /obj/item/clothing/head/taqiyah, 3, time = 6 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("turban", /obj/item/clothing/head/turban, 3, time = 6 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("hijab", /obj/item/clothing/head/hijab, 3, time = 6 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("kippa", /obj/item/clothing/head/kippa, 3, time = 6 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("scarf", /obj/item/clothing/accessory/scarf/white, 4, time = 5 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("baggy pants", /obj/item/clothing/under/pants/baggy/white, 8, time = 10 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("belt pouch", /obj/item/weapon/storage/belt/fannypack/white, 25, time = 1 MINUTE, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("crude [display_name] bandage", /obj/item/stack/medical/crude_pack, 1, time = 2 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] net", /obj/item/weapon/material/fishing_net, 10, time = 5 SECONDS, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("[display_name] ring", /obj/item/clothing/gloves/ring/material, 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("[display_name] bracelet", /obj/item/clothing/accessory/bracelet/material, 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("[display_name] armor plate", /obj/item/weapon/material/armor_plating, 1, time = 20, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("empty sandbag", /obj/item/stack/emptysandbag, 2, time = 2 SECONDS, pass_stack_color = TRUE, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("whip", /obj/item/weapon/material/whip, 5, time = 15 SECONDS, pass_stack_color = TRUE, supplied_material = "[name]")
|
||||
@@ -1,29 +0,0 @@
|
||||
//In future consider cleaning up often used recipes by adding them to the general recipe list with material criteria
|
||||
|
||||
/datum/material/plasteel/generate_recipes()
|
||||
. = ..()
|
||||
// recipes += new/datum/stack_recipe("Hammer Head", /obj/item/weapon/hammer_head, 2) //CHOMPEdit - Disabled because I had to disable code/game/objects/items/weapons/material/sledgehammer_construction_ch.dm due to lots of errors
|
||||
recipes += new/datum/stack_recipe_list("sofas", list( \
|
||||
new/datum/stack_recipe("sofa middle", /obj/structure/bed/chair/sofa, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("sofa left", /obj/structure/bed/chair/sofa/left, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("sofa right", /obj/structure/bed/chair/sofa/right, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("sofa corner", /obj/structure/bed/chair/sofa/corner, 1, one_per_turf = 1, on_floor = 1), \
|
||||
))
|
||||
|
||||
/datum/material/plastic/generate_recipes()
|
||||
. = ..()
|
||||
recipes += new/datum/stack_recipe_list("sofas", list( \
|
||||
new/datum/stack_recipe("sofa middle", /obj/structure/bed/chair/sofa, 1, one_per_turf = 1, on_floor = 1, supplied_material = "[name]"), \
|
||||
new/datum/stack_recipe("sofa left", /obj/structure/bed/chair/sofa/left, 1, one_per_turf = 1, on_floor = 1, supplied_material = "[name]"), \
|
||||
new/datum/stack_recipe("sofa right", /obj/structure/bed/chair/sofa/right, 1, one_per_turf = 1, on_floor = 1, supplied_material = "[name]"), \
|
||||
new/datum/stack_recipe("sofa corner", /obj/structure/bed/chair/sofa/corner, 1, one_per_turf = 1, on_floor = 1, supplied_material = "[name]"), \
|
||||
))
|
||||
|
||||
/datum/material/wood/generate_recipes() //Is a little sad we cant have lovely wooden sofa
|
||||
. = ..()
|
||||
recipes += new/datum/stack_recipe_list("sofas", list( \
|
||||
new/datum/stack_recipe("sofa middle", /obj/structure/bed/chair/sofa, 1, one_per_turf = 1, on_floor = 1, supplied_material = "[name]"), \
|
||||
new/datum/stack_recipe("sofa left", /obj/structure/bed/chair/sofa/left, 1, one_per_turf = 1, on_floor = 1, supplied_material = "[name]"), \
|
||||
new/datum/stack_recipe("sofa right", /obj/structure/bed/chair/sofa/right, 1, one_per_turf = 1, on_floor = 1, supplied_material = "[name]"), \
|
||||
new/datum/stack_recipe("sofa corner", /obj/structure/bed/chair/sofa/corner, 1, one_per_turf = 1, on_floor = 1, supplied_material = "[name]"), \
|
||||
))
|
||||
@@ -1,90 +0,0 @@
|
||||
|
||||
/datum/material/steel/generate_recipes()
|
||||
. = ..()
|
||||
recipes += new/datum/stack_recipe_list("mounted chairs", list(
|
||||
new/datum/stack_recipe("mounted chair", /obj/structure/bed/chair/bay/chair, 2, one_per_turf = 1, on_floor = 1, time = 10),
|
||||
new/datum/stack_recipe("red mounted chair", /obj/structure/bed/chair/bay/chair/padded/red, 2, one_per_turf = 1, on_floor = 1, time = 10),
|
||||
new/datum/stack_recipe("brown mounted chair", /obj/structure/bed/chair/bay/chair/padded/brown, 2, one_per_turf = 1, on_floor = 1, time = 10),
|
||||
new/datum/stack_recipe("teal mounted chair", /obj/structure/bed/chair/bay/chair/padded/teal, 2, one_per_turf = 1, on_floor = 1, time = 10),
|
||||
new/datum/stack_recipe("black mounted chair", /obj/structure/bed/chair/bay/chair/padded/black, 2, one_per_turf = 1, on_floor = 1, time = 10),
|
||||
new/datum/stack_recipe("green mounted chair", /obj/structure/bed/chair/bay/chair/padded/green, 2, one_per_turf = 1, on_floor = 1, time = 10),
|
||||
new/datum/stack_recipe("purple mounted chair", /obj/structure/bed/chair/bay/chair/padded/purple, 2, one_per_turf = 1, on_floor = 1, time = 10),
|
||||
new/datum/stack_recipe("blue mounted chair", /obj/structure/bed/chair/bay/chair/padded/blue, 2, one_per_turf = 1, on_floor = 1, time = 10),
|
||||
new/datum/stack_recipe("beige mounted chair", /obj/structure/bed/chair/bay/chair/padded/beige, 2, one_per_turf = 1, on_floor = 1, time = 10),
|
||||
new/datum/stack_recipe("lime mounted chair", /obj/structure/bed/chair/bay/chair/padded/lime, 2, one_per_turf = 1, on_floor = 1, time = 10),
|
||||
new/datum/stack_recipe("yellow mounted chair", /obj/structure/bed/chair/bay/chair/padded/yellow, 2, one_per_turf = 1, on_floor = 1, time = 10)
|
||||
))
|
||||
recipes += new/datum/stack_recipe_list("mounted comfy chairs", list(
|
||||
new/datum/stack_recipe("mounted comfy chair", /obj/structure/bed/chair/bay/comfy, 3, one_per_turf = 1, on_floor = 1, time = 20),
|
||||
new/datum/stack_recipe("red mounted comfy chair", /obj/structure/bed/chair/bay/comfy/red, 3, one_per_turf = 1, on_floor = 1, time = 20),
|
||||
new/datum/stack_recipe("brown mounted comfy chair", /obj/structure/bed/chair/bay/comfy/brown, 3, one_per_turf = 1, on_floor = 1, time = 20),
|
||||
new/datum/stack_recipe("teal mounted comfy chair", /obj/structure/bed/chair/bay/comfy/teal, 3, one_per_turf = 1, on_floor = 1, time = 20),
|
||||
new/datum/stack_recipe("black mounted comfy chair", /obj/structure/bed/chair/bay/comfy/black, 3, one_per_turf = 1, on_floor = 1, time = 20),
|
||||
new/datum/stack_recipe("green mounted comfy chair", /obj/structure/bed/chair/bay/comfy/green, 3, one_per_turf = 1, on_floor = 1, time = 20),
|
||||
new/datum/stack_recipe("purple mounted comfy chair", /obj/structure/bed/chair/bay/comfy/purple, 3, one_per_turf = 1, on_floor = 1, time = 20),
|
||||
new/datum/stack_recipe("blue mounted comfy chair", /obj/structure/bed/chair/bay/comfy/blue, 3, one_per_turf = 1, on_floor = 1, time = 20),
|
||||
new/datum/stack_recipe("beige mounted comfy chair", /obj/structure/bed/chair/bay/comfy/beige, 3, one_per_turf = 1, on_floor = 1, time = 20),
|
||||
new/datum/stack_recipe("lime mounted comfy chair", /obj/structure/bed/chair/bay/comfy/lime, 3, one_per_turf = 1, on_floor = 1, time = 20),
|
||||
new/datum/stack_recipe("yellow mounted comfy chair", /obj/structure/bed/chair/bay/comfy/yellow, 3, one_per_turf = 1, on_floor = 1, time = 20)
|
||||
))
|
||||
recipes += new/datum/stack_recipe("mounted captain's chair", /obj/structure/bed/chair/bay/comfy/captain, 4, one_per_turf = 1, on_floor = 1, time = 20)
|
||||
recipes += new/datum/stack_recipe("dropship seat", /obj/structure/bed/chair/bay/shuttle, 4, one_per_turf = 1, on_floor = 1, time = 20)
|
||||
recipes += new/datum/stack_recipe("small teshari nest", /obj/structure/bed/chair/bay/chair/padded/red/smallnest, 2, one_per_turf = 1, on_floor = 1, time = 10)
|
||||
recipes += new/datum/stack_recipe("large teshari nest", /obj/structure/bed/chair/bay/chair/padded/red/bignest, 4, one_per_turf = 1, on_floor = 1, time = 20)
|
||||
recipes += new/datum/stack_recipe("dance pole", /obj/structure/dancepole, 2, one_per_turf = 1, on_floor = 1, time = 20)
|
||||
recipes += new/datum/stack_recipe("light switch frame", /obj/item/frame/lightswitch, 2)
|
||||
recipes += new/datum/stack_recipe_list("sofas", list(
|
||||
new/datum/stack_recipe("red sofa middle", /obj/structure/bed/chair/sofa, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("red sofa left", /obj/structure/bed/chair/sofa/left, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("red sofa right", /obj/structure/bed/chair/sofa/right, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("red sofa corner", /obj/structure/bed/chair/sofa/corner, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("brown sofa middle", /obj/structure/bed/chair/sofa/brown, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("brown sofa left", /obj/structure/bed/chair/sofa/brown/left, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("brown sofa right", /obj/structure/bed/chair/sofa/brown/right, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("brown sofa corner", /obj/structure/bed/chair/sofa/brown/corner, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("teal sofa middle", /obj/structure/bed/chair/sofa/teal, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("teal sofa left", /obj/structure/bed/chair/sofa/teal/left, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("teal sofa right", /obj/structure/bed/chair/sofa/teal/right, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("teal sofa corner", /obj/structure/bed/chair/sofa/teal/corner, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("black sofa middle", /obj/structure/bed/chair/sofa/black, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("black sofa left", /obj/structure/bed/chair/sofa/black/left, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("black sofa right", /obj/structure/bed/chair/sofa/black/right, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("black sofa corner", /obj/structure/bed/chair/sofa/black/corner, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("green sofa middle", /obj/structure/bed/chair/sofa/green, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("green sofa left", /obj/structure/bed/chair/sofa/green/left, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("green sofa right", /obj/structure/bed/chair/sofa/green/right, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("green sofa corner", /obj/structure/bed/chair/sofa/green/corner, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("purple sofa middle", /obj/structure/bed/chair/sofa/purp, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("purple sofa left", /obj/structure/bed/chair/sofa/purp/left, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("purple sofa right", /obj/structure/bed/chair/sofa/purp/right, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("purple sofa corner", /obj/structure/bed/chair/sofa/purp/corner, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("blue sofa middle", /obj/structure/bed/chair/sofa/blue, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("blue sofa left", /obj/structure/bed/chair/sofa/blue/left, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("blue sofa right", /obj/structure/bed/chair/sofa/blue/right, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("blue sofa corner", /obj/structure/bed/chair/sofa/blue/corner, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("beige sofa middle", /obj/structure/bed/chair/sofa/beige, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("beige sofa left", /obj/structure/bed/chair/sofa/beige/left, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("beige sofa right", /obj/structure/bed/chair/sofa/beige/right, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("beige sofa corner", /obj/structure/bed/chair/sofa/beige/corner, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("lime sofa middle", /obj/structure/bed/chair/sofa/lime, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("lime sofa left", /obj/structure/bed/chair/sofa/lime/left, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("lime sofa right", /obj/structure/bed/chair/sofa/lime/right, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("lime sofa corner", /obj/structure/bed/chair/sofa/lime/corner, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("yellow sofa middle", /obj/structure/bed/chair/sofa/yellow, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("yellow sofa left", /obj/structure/bed/chair/sofa/yellow/left, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("yellow sofa right", /obj/structure/bed/chair/sofa/yellow/right, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("yellow sofa corner", /obj/structure/bed/chair/sofa/yellow/corner, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("orange sofa middle", /obj/structure/bed/chair/sofa/orange, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("orange sofa left", /obj/structure/bed/chair/sofa/orange/left, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("orange sofa right", /obj/structure/bed/chair/sofa/orange/right, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("orange sofa corner", /obj/structure/bed/chair/sofa/orange/corner, 1, one_per_turf = 1, on_floor = 1), \
|
||||
))
|
||||
|
||||
/datum/material/durasteel/generate_recipes()
|
||||
. = ..()
|
||||
recipes += new/datum/stack_recipe("durasteel fishing rod", /obj/item/weapon/material/fishing_rod/modern/strong, 2)
|
||||
recipes += new/datum/stack_recipe("whetstone", /obj/item/weapon/whetstone, 2, time = 30)
|
||||
|
||||
/datum/material/plastitanium/generate_recipes()
|
||||
. = ..()
|
||||
recipes += new/datum/stack_recipe("whetstone", /obj/item/weapon/whetstone, 2, time = 20)
|
||||
@@ -1,565 +0,0 @@
|
||||
// Stacked resources. They use a material datum for a lot of inherited values.
|
||||
// If you're adding something here, make sure to add it to fifty_spawner_mats.dm as well
|
||||
/obj/item/stack/material
|
||||
force = 5.0
|
||||
throwforce = 5
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
throw_speed = 3
|
||||
throw_range = 3
|
||||
center_of_mass = null
|
||||
max_amount = 50
|
||||
item_icons = list(
|
||||
slot_l_hand_str = 'icons/mob/items/lefthand_material.dmi',
|
||||
slot_r_hand_str = 'icons/mob/items/righthand_material.dmi',
|
||||
)
|
||||
|
||||
var/default_type = DEFAULT_WALL_MATERIAL
|
||||
var/datum/material/material
|
||||
var/perunit = SHEET_MATERIAL_AMOUNT
|
||||
var/apply_colour //temp pending icon rewrite
|
||||
drop_sound = 'sound/items/drop/axe.ogg'
|
||||
pickup_sound = 'sound/items/pickup/axe.ogg'
|
||||
|
||||
/obj/item/stack/material/Initialize()
|
||||
. = ..()
|
||||
|
||||
randpixel_xy()
|
||||
|
||||
if(!default_type)
|
||||
default_type = DEFAULT_WALL_MATERIAL
|
||||
material = get_material_by_name("[default_type]")
|
||||
if(!material)
|
||||
return INITIALIZE_HINT_QDEL
|
||||
|
||||
recipes = material.get_recipes()
|
||||
stacktype = material.stack_type
|
||||
if(islist(material.stack_origin_tech))
|
||||
origin_tech = material.stack_origin_tech.Copy()
|
||||
|
||||
if(apply_colour)
|
||||
color = material.icon_colour
|
||||
|
||||
if(!material.conductive)
|
||||
flags |= NOCONDUCT
|
||||
|
||||
matter = material.get_matter()
|
||||
update_strings()
|
||||
|
||||
/obj/item/stack/material/get_material()
|
||||
return material
|
||||
|
||||
/obj/item/stack/material/proc/update_strings()
|
||||
// Update from material datum.
|
||||
singular_name = material.sheet_singular_name
|
||||
|
||||
if(amount>1)
|
||||
name = "[material.use_name] [material.sheet_plural_name]"
|
||||
desc = "A stack of [material.use_name] [material.sheet_plural_name]."
|
||||
gender = PLURAL
|
||||
else
|
||||
name = "[material.use_name] [material.sheet_singular_name]"
|
||||
desc = "A [material.sheet_singular_name] of [material.use_name]."
|
||||
gender = NEUTER
|
||||
|
||||
/obj/item/stack/material/use(var/used)
|
||||
. = ..()
|
||||
update_strings()
|
||||
return
|
||||
|
||||
/obj/item/stack/material/transfer_to(obj/item/stack/S, var/tamount=null, var/type_verified)
|
||||
var/obj/item/stack/material/M = S
|
||||
if(!istype(M) || material.name != M.material.name)
|
||||
return 0
|
||||
var/transfer = ..(S,tamount,1)
|
||||
if(src) update_strings()
|
||||
if(M) M.update_strings()
|
||||
return transfer
|
||||
|
||||
/obj/item/stack/material/attack_self(var/mob/user)
|
||||
if(!material.build_windows(user, src))
|
||||
..()
|
||||
|
||||
/obj/item/stack/material/attackby(var/obj/item/W, var/mob/user)
|
||||
if(istype(W,/obj/item/stack/cable_coil))
|
||||
material.build_wired_product(user, W, src)
|
||||
return
|
||||
else if(istype(W, /obj/item/stack/rods))
|
||||
material.build_rod_product(user, W, src)
|
||||
return
|
||||
return ..()
|
||||
|
||||
//VOREStation Add
|
||||
/obj/item/stack/material/attack(mob/living/M as mob, mob/living/user as mob)
|
||||
if(M.handle_eat_minerals(src, user))
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/stack/material/attack_generic(var/mob/living/user) //Allow adminbussed mobs to eat ore if they click it while NOT on help intent.
|
||||
if(user.handle_eat_minerals(src))
|
||||
return
|
||||
..()
|
||||
//VOREStation Add End
|
||||
|
||||
/obj/item/stack/material/iron
|
||||
name = "iron"
|
||||
icon_state = "sheet-ingot"
|
||||
default_type = "iron"
|
||||
apply_colour = 1
|
||||
no_variants = FALSE
|
||||
|
||||
/obj/item/stack/material/lead
|
||||
name = "lead"
|
||||
icon_state = "sheet-ingot"
|
||||
default_type = "lead"
|
||||
apply_colour = 1
|
||||
no_variants = FALSE
|
||||
|
||||
/obj/item/stack/material/sandstone
|
||||
name = "sandstone brick"
|
||||
icon_state = "sheet-sandstone"
|
||||
default_type = "sandstone"
|
||||
no_variants = FALSE
|
||||
drop_sound = 'sound/items/drop/boots.ogg'
|
||||
pickup_sound = 'sound/items/pickup/boots.ogg'
|
||||
|
||||
/obj/item/stack/material/marble
|
||||
name = "marble brick"
|
||||
icon_state = "sheet-marble"
|
||||
default_type = "marble"
|
||||
no_variants = FALSE
|
||||
drop_sound = 'sound/items/drop/boots.ogg'
|
||||
pickup_sound = 'sound/items/pickup/boots.ogg'
|
||||
|
||||
/obj/item/stack/material/diamond
|
||||
name = "diamond"
|
||||
icon_state = "sheet-diamond"
|
||||
default_type = "diamond"
|
||||
drop_sound = 'sound/items/drop/glass.ogg'
|
||||
pickup_sound = 'sound/items/pickup/glass.ogg'
|
||||
|
||||
/obj/item/stack/material/uranium
|
||||
name = "uranium"
|
||||
icon_state = "sheet-uranium"
|
||||
default_type = "uranium"
|
||||
no_variants = FALSE
|
||||
|
||||
/obj/item/stack/material/phoron
|
||||
name = "solid phoron"
|
||||
icon_state = "sheet-phoron"
|
||||
default_type = "phoron"
|
||||
no_variants = FALSE
|
||||
drop_sound = 'sound/items/drop/glass.ogg'
|
||||
pickup_sound = 'sound/items/pickup/glass.ogg'
|
||||
|
||||
/obj/item/stack/material/plastic
|
||||
name = "plastic"
|
||||
icon_state = "sheet-plastic"
|
||||
default_type = "plastic"
|
||||
no_variants = FALSE
|
||||
|
||||
/obj/item/stack/material/graphite
|
||||
name = "graphite"
|
||||
icon_state = "sheet-puck"
|
||||
default_type = MAT_GRAPHITE
|
||||
apply_colour = 1
|
||||
no_variants = FALSE
|
||||
|
||||
/obj/item/stack/material/gold
|
||||
name = "gold"
|
||||
icon_state = "sheet-ingot"
|
||||
default_type = "gold"
|
||||
no_variants = FALSE
|
||||
apply_colour = TRUE
|
||||
|
||||
/obj/item/stack/material/silver
|
||||
name = "silver"
|
||||
icon_state = "sheet-ingot"
|
||||
default_type = "silver"
|
||||
no_variants = FALSE
|
||||
apply_colour = TRUE
|
||||
|
||||
//Valuable resource, cargo can sell it.
|
||||
/obj/item/stack/material/platinum
|
||||
name = "platinum"
|
||||
icon_state = "sheet-adamantine"
|
||||
default_type = "platinum"
|
||||
no_variants = FALSE
|
||||
apply_colour = TRUE
|
||||
|
||||
//Extremely valuable to Research.
|
||||
/obj/item/stack/material/mhydrogen
|
||||
name = "metallic hydrogen"
|
||||
icon_state = "sheet-mythril"
|
||||
default_type = "mhydrogen"
|
||||
no_variants = FALSE
|
||||
|
||||
//Fuel for MRSPACMAN generator.
|
||||
/obj/item/stack/material/tritium
|
||||
name = "tritium"
|
||||
icon_state = "sheet-puck"
|
||||
default_type = "tritium"
|
||||
apply_colour = TRUE
|
||||
no_variants = FALSE
|
||||
|
||||
/obj/item/stack/material/osmium
|
||||
name = "osmium"
|
||||
icon_state = "sheet-ingot"
|
||||
default_type = "osmium"
|
||||
apply_colour = 1
|
||||
no_variants = FALSE
|
||||
|
||||
//R-UST port
|
||||
// Fusion fuel.
|
||||
/obj/item/stack/material/deuterium
|
||||
name = "deuterium"
|
||||
icon_state = "sheet-puck"
|
||||
default_type = "deuterium"
|
||||
apply_colour = 1
|
||||
no_variants = FALSE
|
||||
|
||||
/obj/item/stack/material/steel
|
||||
name = DEFAULT_WALL_MATERIAL
|
||||
icon_state = "sheet-refined"
|
||||
default_type = DEFAULT_WALL_MATERIAL
|
||||
no_variants = FALSE
|
||||
apply_colour = TRUE
|
||||
|
||||
/obj/item/stack/material/steel/hull
|
||||
name = MAT_STEELHULL
|
||||
default_type = MAT_STEELHULL
|
||||
|
||||
/obj/item/stack/material/plasteel
|
||||
name = "plasteel"
|
||||
icon_state = "sheet-reinforced"
|
||||
default_type = "plasteel"
|
||||
no_variants = FALSE
|
||||
apply_colour = TRUE
|
||||
|
||||
/obj/item/stack/material/plasteel/hull
|
||||
name = MAT_PLASTEELHULL
|
||||
default_type = MAT_PLASTEELHULL
|
||||
|
||||
/obj/item/stack/material/durasteel
|
||||
name = "durasteel"
|
||||
icon_state = "sheet-reinforced"
|
||||
item_state = "sheet-metal"
|
||||
default_type = "durasteel"
|
||||
no_variants = FALSE
|
||||
apply_colour = TRUE
|
||||
|
||||
/obj/item/stack/material/durasteel/hull
|
||||
name = MAT_DURASTEELHULL
|
||||
|
||||
/obj/item/stack/material/titanium
|
||||
name = MAT_TITANIUM
|
||||
icon_state = "sheet-refined"
|
||||
apply_colour = TRUE
|
||||
item_state = "sheet-silver"
|
||||
default_type = MAT_TITANIUM
|
||||
no_variants = FALSE
|
||||
|
||||
/obj/item/stack/material/titanium/hull
|
||||
name = MAT_TITANIUMHULL
|
||||
default_type = MAT_TITANIUMHULL
|
||||
|
||||
// Particle Smasher and Exotic material.
|
||||
/obj/item/stack/material/verdantium
|
||||
name = MAT_VERDANTIUM
|
||||
icon_state = "sheet-wavy"
|
||||
item_state = "mhydrogen"
|
||||
default_type = MAT_VERDANTIUM
|
||||
no_variants = FALSE
|
||||
apply_colour = TRUE
|
||||
|
||||
/obj/item/stack/material/morphium
|
||||
name = MAT_MORPHIUM
|
||||
icon_state = "sheet-wavy"
|
||||
item_state = "mhydrogen"
|
||||
default_type = MAT_MORPHIUM
|
||||
no_variants = FALSE
|
||||
apply_colour = TRUE
|
||||
|
||||
/obj/item/stack/material/morphium/hull
|
||||
name = MAT_MORPHIUMHULL
|
||||
default_type = MAT_MORPHIUMHULL
|
||||
|
||||
/obj/item/stack/material/valhollide
|
||||
name = MAT_VALHOLLIDE
|
||||
icon_state = "sheet-gem"
|
||||
item_state = "diamond"
|
||||
default_type = MAT_VALHOLLIDE
|
||||
no_variants = FALSE
|
||||
apply_colour = TRUE
|
||||
|
||||
// Forged in the equivalent of Hell, one piece at a time.
|
||||
/obj/item/stack/material/supermatter
|
||||
name = MAT_SUPERMATTER
|
||||
icon_state = "sheet-super"
|
||||
item_state = "diamond"
|
||||
default_type = MAT_SUPERMATTER
|
||||
apply_colour = TRUE
|
||||
|
||||
/obj/item/stack/material/supermatter/proc/update_mass() // Due to how dangerous they can be, the item will get heavier and larger the more are in the stack.
|
||||
slowdown = amount / 10
|
||||
w_class = min(5, round(amount / 10) + 1)
|
||||
throw_range = round(amount / 7) + 1
|
||||
|
||||
/obj/item/stack/material/supermatter/use(var/used)
|
||||
. = ..()
|
||||
update_mass()
|
||||
return
|
||||
|
||||
/obj/item/stack/material/supermatter/attack_hand(mob/user)
|
||||
. = ..()
|
||||
|
||||
update_mass()
|
||||
SSradiation.radiate(src, 5 + amount)
|
||||
var/mob/living/M = user
|
||||
if(!istype(M))
|
||||
return
|
||||
|
||||
var/burn_user = TRUE
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = user
|
||||
var/obj/item/clothing/gloves/G = H.gloves
|
||||
if(istype(G) && ((G.flags & THICKMATERIAL && prob(70)) || istype(G, /obj/item/clothing/gloves/gauntlets)))
|
||||
burn_user = FALSE
|
||||
|
||||
if(burn_user)
|
||||
H.visible_message("<span class='danger'>\The [src] flashes as it scorches [H]'s hands!</span>")
|
||||
H.apply_damage(amount / 2 + 5, BURN, "r_hand", used_weapon="Supermatter Chunk")
|
||||
H.apply_damage(amount / 2 + 5, BURN, "l_hand", used_weapon="Supermatter Chunk")
|
||||
H.drop_from_inventory(src, get_turf(H))
|
||||
return
|
||||
|
||||
if(istype(user, /mob/living/silicon/robot))
|
||||
burn_user = FALSE
|
||||
|
||||
if(burn_user)
|
||||
M.apply_damage(amount, BURN, null, used_weapon="Supermatter Chunk")
|
||||
|
||||
/obj/item/stack/material/supermatter/ex_act(severity) // An incredibly hard to manufacture material, SM chunks are unstable by their 'stabilized' nature.
|
||||
if(prob((4 / severity) * 20))
|
||||
SSradiation.radiate(get_turf(src), amount * 4)
|
||||
explosion(get_turf(src),round(amount / 12) , round(amount / 6), round(amount / 3), round(amount / 25))
|
||||
qdel(src)
|
||||
return
|
||||
SSradiation.radiate(get_turf(src), amount * 2)
|
||||
..()
|
||||
|
||||
/obj/item/stack/material/wood
|
||||
name = "wooden plank"
|
||||
icon_state = "sheet-wood"
|
||||
default_type = MAT_WOOD
|
||||
strict_color_stacking = TRUE
|
||||
apply_colour = 1
|
||||
drop_sound = 'sound/items/drop/wooden.ogg'
|
||||
pickup_sound = 'sound/items/pickup/wooden.ogg'
|
||||
no_variants = FALSE
|
||||
|
||||
/obj/item/stack/material/wood/sif
|
||||
name = "alien wooden plank"
|
||||
color = "#0099cc"
|
||||
default_type = MAT_SIFWOOD
|
||||
|
||||
/obj/item/stack/material/log
|
||||
name = "log"
|
||||
icon_state = "sheet-log"
|
||||
default_type = MAT_LOG
|
||||
no_variants = FALSE
|
||||
color = "#824B28"
|
||||
max_amount = 25
|
||||
w_class = ITEMSIZE_HUGE
|
||||
description_info = "Use inhand to craft things, or use a sharp and edged object on this to convert it into two wooden planks."
|
||||
var/plank_type = /obj/item/stack/material/wood
|
||||
drop_sound = 'sound/items/drop/wooden.ogg'
|
||||
pickup_sound = 'sound/items/pickup/wooden.ogg'
|
||||
|
||||
/obj/item/stack/material/log/sif
|
||||
name = "alien log"
|
||||
default_type = MAT_SIFLOG
|
||||
color = "#0099cc"
|
||||
plank_type = /obj/item/stack/material/wood/sif
|
||||
|
||||
/obj/item/stack/material/log/attackby(var/obj/item/W, var/mob/user)
|
||||
if(!istype(W) || W.force <= 0)
|
||||
return ..()
|
||||
if(W.sharp && W.edge)
|
||||
var/time = (3 SECONDS / max(W.force / 10, 1)) * W.toolspeed
|
||||
user.setClickCooldown(time)
|
||||
if(do_after(user, time, src) && use(1))
|
||||
to_chat(user, "<span class='notice'>You cut up a log into planks.</span>")
|
||||
playsound(src, 'sound/effects/woodcutting.ogg', 50, 1)
|
||||
var/obj/item/stack/material/wood/existing_wood = null
|
||||
for(var/obj/item/stack/material/wood/M in user.loc)
|
||||
if(M.material.name == src.material.name)
|
||||
existing_wood = M
|
||||
break
|
||||
|
||||
var/obj/item/stack/material/wood/new_wood = new plank_type(user.loc)
|
||||
new_wood.amount = 2
|
||||
if(existing_wood && new_wood.transfer_to(existing_wood))
|
||||
to_chat(user, "<span class='notice'>You add the newly-formed wood to the stack. It now contains [existing_wood.amount] planks.</span>")
|
||||
else
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/item/stack/material/cloth
|
||||
name = "cloth"
|
||||
icon_state = "sheet-cloth"
|
||||
default_type = "cloth"
|
||||
no_variants = FALSE
|
||||
pass_color = TRUE
|
||||
strict_color_stacking = TRUE
|
||||
drop_sound = 'sound/items/drop/clothing.ogg'
|
||||
pickup_sound = 'sound/items/pickup/clothing.ogg'
|
||||
|
||||
/obj/item/stack/material/cloth/diyaab
|
||||
color = "#c6ccf0"
|
||||
|
||||
/obj/item/stack/material/resin
|
||||
name = "resin"
|
||||
icon_state = "sheet-resin"
|
||||
default_type = "resin"
|
||||
no_variants = TRUE
|
||||
apply_colour = TRUE
|
||||
pass_color = TRUE
|
||||
strict_color_stacking = TRUE
|
||||
|
||||
/obj/item/stack/material/cardboard
|
||||
name = "cardboard"
|
||||
icon_state = "sheet-card"
|
||||
default_type = "cardboard"
|
||||
no_variants = FALSE
|
||||
pass_color = TRUE
|
||||
strict_color_stacking = TRUE
|
||||
drop_sound = 'sound/items/drop/cardboardbox.ogg'
|
||||
pickup_sound = 'sound/items/pickup/cardboardbox.ogg'
|
||||
|
||||
/obj/item/stack/material/snow
|
||||
name = "snow"
|
||||
desc = "The temptation to build a snowman rises."
|
||||
icon_state = "sheet-snow"
|
||||
drop_sound = 'sound/items/drop/gloves.ogg'
|
||||
pickup_sound = 'sound/items/pickup/clothing.ogg'
|
||||
default_type = "snow"
|
||||
|
||||
/obj/item/stack/material/snowbrick
|
||||
name = "snow brick"
|
||||
desc = "For all of your igloo building needs."
|
||||
icon_state = "sheet-snowbrick"
|
||||
default_type = "packed snow"
|
||||
drop_sound = 'sound/items/drop/gloves.ogg'
|
||||
pickup_sound = 'sound/items/pickup/clothing.ogg'
|
||||
|
||||
/obj/item/stack/material/leather
|
||||
name = "leather"
|
||||
desc = "The by-product of mob grinding."
|
||||
icon_state = "sheet-leather"
|
||||
default_type = MAT_LEATHER
|
||||
no_variants = FALSE
|
||||
pass_color = TRUE
|
||||
strict_color_stacking = TRUE
|
||||
drop_sound = 'sound/items/drop/leather.ogg'
|
||||
pickup_sound = 'sound/items/pickup/leather.ogg'
|
||||
|
||||
/obj/item/stack/material/chitin
|
||||
name = "chitin"
|
||||
desc = "The by-product of mob grinding."
|
||||
icon_state = "chitin"
|
||||
default_type = MAT_CHITIN
|
||||
no_variants = FALSE
|
||||
pass_color = TRUE
|
||||
strict_color_stacking = TRUE
|
||||
drop_sound = 'sound/items/drop/leather.ogg'
|
||||
pickup_sound = 'sound/items/pickup/leather.ogg'
|
||||
|
||||
/obj/item/stack/material/glass
|
||||
name = "glass"
|
||||
icon_state = "sheet-transparent"
|
||||
default_type = "glass"
|
||||
no_variants = FALSE
|
||||
drop_sound = 'sound/items/drop/glass.ogg'
|
||||
pickup_sound = 'sound/items/pickup/glass.ogg'
|
||||
apply_colour = TRUE
|
||||
|
||||
/obj/item/stack/material/glass/reinforced
|
||||
name = "reinforced glass"
|
||||
icon_state = "sheet-rtransparent"
|
||||
default_type = "rglass"
|
||||
no_variants = FALSE
|
||||
apply_colour = TRUE
|
||||
|
||||
/obj/item/stack/material/glass/phoronglass
|
||||
name = "borosilicate glass"
|
||||
desc = "This sheet is special platinum-glass alloy designed to withstand large temperatures"
|
||||
singular_name = "borosilicate glass sheet"
|
||||
icon_state = "sheet-transparent"
|
||||
default_type = "borosilicate glass"
|
||||
no_variants = FALSE
|
||||
apply_colour = TRUE
|
||||
|
||||
/obj/item/stack/material/glass/phoronrglass
|
||||
name = "reinforced borosilicate glass"
|
||||
desc = "This sheet is special platinum-glass alloy designed to withstand large temperatures. It is reinforced with few rods."
|
||||
singular_name = "reinforced borosilicate glass sheet"
|
||||
icon_state = "sheet-rtransparent"
|
||||
default_type = "reinforced borosilicate glass"
|
||||
no_variants = FALSE
|
||||
apply_colour = TRUE
|
||||
|
||||
/obj/item/stack/material/bronze
|
||||
name = "bronze"
|
||||
icon_state = "sheet-ingot"
|
||||
singular_name = "bronze ingot"
|
||||
default_type = "bronze"
|
||||
apply_colour = 1
|
||||
no_variants = FALSE
|
||||
|
||||
/obj/item/stack/material/tin
|
||||
name = "tin"
|
||||
icon_state = "sheet-ingot"
|
||||
singular_name = "tin ingot"
|
||||
default_type = "tin"
|
||||
apply_colour = 1
|
||||
no_variants = FALSE
|
||||
|
||||
/obj/item/stack/material/copper
|
||||
name = "copper"
|
||||
icon_state = "sheet-ingot"
|
||||
singular_name = "copper ingot"
|
||||
default_type = "copper"
|
||||
apply_colour = 1
|
||||
no_variants = FALSE
|
||||
|
||||
/obj/item/stack/material/painite
|
||||
name = "painite"
|
||||
icon_state = "sheet-gem"
|
||||
singular_name = "painite gem"
|
||||
default_type = "painite"
|
||||
apply_colour = 1
|
||||
no_variants = FALSE
|
||||
|
||||
/obj/item/stack/material/void_opal
|
||||
name = "void opal"
|
||||
icon_state = "sheet-void_opal"
|
||||
singular_name = "void opal"
|
||||
default_type = "void opal"
|
||||
apply_colour = 1
|
||||
no_variants = FALSE
|
||||
|
||||
/obj/item/stack/material/quartz
|
||||
name = "quartz"
|
||||
icon_state = "sheet-gem"
|
||||
singular_name = "quartz gem"
|
||||
default_type = "quartz"
|
||||
apply_colour = 1
|
||||
no_variants = FALSE
|
||||
|
||||
/obj/item/stack/material/aluminium
|
||||
name = "aluminium"
|
||||
icon_state = "sheet-ingot"
|
||||
singular_name = "aluminium ingot"
|
||||
default_type = "aluminium"
|
||||
apply_colour = 1
|
||||
no_variants = FALSE
|
||||
@@ -1,66 +0,0 @@
|
||||
/obj/item/stack/material/titanium
|
||||
icon = 'icons/obj/stacks_vr.dmi'
|
||||
icon_state = "sheet-titanium"
|
||||
no_variants = FALSE
|
||||
|
||||
/obj/fiftyspawner/titanium
|
||||
name = "stack of titanium"
|
||||
type_to_spawn = /obj/item/stack/material/titanium
|
||||
|
||||
/obj/item/stack/material/glass/titanium
|
||||
name = "ti-glass sheets"
|
||||
icon = 'icons/obj/stacks_vr.dmi'
|
||||
icon_state = "sheet-titaniumglass"
|
||||
item_state = "sheet-silver"
|
||||
no_variants = FALSE
|
||||
drop_sound = 'sound/items/drop/glass.ogg'
|
||||
default_type = MAT_TITANIUMGLASS
|
||||
|
||||
/obj/fiftyspawner/titanium_glass
|
||||
name = "stack of ti-glass"
|
||||
type_to_spawn = /obj/item/stack/material/glass/titanium
|
||||
|
||||
/obj/item/stack/material/plastitanium
|
||||
name = "plastitanium sheets"
|
||||
icon = 'icons/obj/stacks_vr.dmi'
|
||||
icon_state = "sheet-plastitanium"
|
||||
item_state = "sheet-silver"
|
||||
no_variants = FALSE
|
||||
default_type = MAT_PLASTITANIUM
|
||||
|
||||
/obj/fiftyspawner/plastitanium
|
||||
name = "stack of plastitanium"
|
||||
type_to_spawn = /obj/item/stack/material/plastitanium
|
||||
|
||||
/obj/item/stack/material/plastitanium/hull
|
||||
name = "plastitanium hull sheets"
|
||||
icon = 'icons/obj/stacks_vr.dmi'
|
||||
icon_state = "sheet-plastitanium"
|
||||
item_state = "sheet-silver"
|
||||
no_variants = FALSE
|
||||
default_type = MAT_PLASTITANIUMHULL
|
||||
|
||||
/obj/fiftyspawner/plastitanium_hull
|
||||
name = "stack of plastitanium"
|
||||
type_to_spawn = /obj/item/stack/material/plastitanium/hull
|
||||
|
||||
/obj/item/stack/material/glass/plastitanium
|
||||
name = "plastitanium glass sheets"
|
||||
icon = 'icons/obj/stacks_vr.dmi'
|
||||
icon_state = "sheet-plastitaniumglass"
|
||||
item_state = "sheet-silver"
|
||||
no_variants = FALSE
|
||||
drop_sound = 'sound/items/drop/glass.ogg'
|
||||
default_type = MAT_PLASTITANIUMGLASS
|
||||
|
||||
/obj/fiftyspawner/plastitanium_glass
|
||||
name = "stack of plastitanium glass"
|
||||
type_to_spawn = /obj/item/stack/material/glass/plastitanium
|
||||
|
||||
/obj/item/stack/material/gold/hull
|
||||
name = "gold hull sheets"
|
||||
icon = 'icons/obj/stacks_vr.dmi'
|
||||
icon_state = "sheet-plastitanium"
|
||||
item_state = "sheet-silver"
|
||||
no_variants = FALSE
|
||||
default_type = MAT_GOLDHULL
|
||||
File diff suppressed because it is too large
Load Diff
284
code/modules/materials/materials/_materials.dm
Normal file
284
code/modules/materials/materials/_materials.dm
Normal file
@@ -0,0 +1,284 @@
|
||||
/*
|
||||
MATERIAL DATUMS
|
||||
This data is used by various parts of the game for basic physical properties and behaviors
|
||||
of the metals/materials used for constructing many objects. Each var is commented and should be pretty
|
||||
self-explanatory but the various object types may have their own documentation. ~Z
|
||||
|
||||
PATHS THAT USE DATUMS
|
||||
turf/simulated/wall
|
||||
obj/item/weapon/material
|
||||
obj/structure/barricade
|
||||
obj/item/stack/material
|
||||
obj/structure/table
|
||||
|
||||
VALID ICONS
|
||||
WALLS
|
||||
stone
|
||||
metal
|
||||
solid
|
||||
resin
|
||||
ONLY WALLS
|
||||
cult
|
||||
hull
|
||||
curvy
|
||||
jaggy
|
||||
brick
|
||||
REINFORCEMENT
|
||||
reinf_over
|
||||
reinf_mesh
|
||||
reinf_cult
|
||||
reinf_metal
|
||||
DOORS
|
||||
stone
|
||||
metal
|
||||
resin
|
||||
wood
|
||||
*/
|
||||
|
||||
// Assoc list containing all material datums indexed by name.
|
||||
var/list/name_to_material
|
||||
|
||||
//Returns the material the object is made of, if applicable.
|
||||
//Will we ever need to return more than one value here? Or should we just return the "dominant" material.
|
||||
/obj/proc/get_material()
|
||||
return null
|
||||
|
||||
//mostly for convenience
|
||||
/obj/proc/get_material_name()
|
||||
var/datum/material/material = get_material()
|
||||
if(material)
|
||||
return material.name
|
||||
|
||||
// Builds the datum list above.
|
||||
/proc/populate_material_list(force_remake=0)
|
||||
if(name_to_material && !force_remake) return // Already set up!
|
||||
name_to_material = list()
|
||||
for(var/type in subtypesof(/datum/material))
|
||||
var/datum/material/new_mineral = new type
|
||||
if(!new_mineral.name)
|
||||
continue
|
||||
name_to_material[lowertext(new_mineral.name)] = new_mineral
|
||||
return 1
|
||||
|
||||
// Safety proc to make sure the material list exists before trying to grab from it.
|
||||
/proc/get_material_by_name(name)
|
||||
if(!name_to_material)
|
||||
populate_material_list()
|
||||
return name_to_material[name]
|
||||
|
||||
/proc/material_display_name(name)
|
||||
var/datum/material/material = get_material_by_name(name)
|
||||
if(material)
|
||||
return material.display_name
|
||||
return null
|
||||
|
||||
// Material definition and procs follow.
|
||||
/datum/material
|
||||
var/name // Unique name for use in indexing the list.
|
||||
var/display_name // Prettier name for display.
|
||||
var/use_name
|
||||
var/flags = 0 // Various status modifiers.
|
||||
var/sheet_singular_name = "sheet"
|
||||
var/sheet_plural_name = "sheets"
|
||||
var/is_fusion_fuel
|
||||
|
||||
// Shards/tables/structures
|
||||
var/shard_type = SHARD_SHRAPNEL // Path of debris object.
|
||||
var/shard_icon // Related to above.
|
||||
var/shard_can_repair = 1 // Can shards be turned into sheets with a welder?
|
||||
var/list/recipes // Holder for all recipes usable with a sheet of this material.
|
||||
var/destruction_desc = "breaks apart" // Fancy string for barricades/tables/objects exploding.
|
||||
|
||||
// Icons
|
||||
var/icon_colour // Colour applied to products of this material.
|
||||
var/icon_base = "metal" // Wall and table base icon tag. See header.
|
||||
var/door_icon_base = "metal" // Door base icon tag. See header.
|
||||
var/icon_reinf = "reinf_metal" // Overlay used
|
||||
var/list/stack_origin_tech = list(TECH_MATERIAL = 1) // Research level for stacks.
|
||||
var/pass_stack_colors = FALSE // Will stacks made from this material pass their colors onto objects?
|
||||
|
||||
// Attributes
|
||||
var/cut_delay = 0 // Delay in ticks when cutting through this wall.
|
||||
var/radioactivity // Radiation var. Used in wall and object processing to irradiate surroundings.
|
||||
var/ignition_point // K, point at which the material catches on fire.
|
||||
var/melting_point = 1800 // K, walls will take damage if they're next to a fire hotter than this
|
||||
var/integrity = 150 // General-use HP value for products.
|
||||
var/protectiveness = 10 // How well this material works as armor. Higher numbers are better, diminishing returns applies.
|
||||
var/opacity = 1 // Is the material transparent? 0.5< makes transparent walls/doors.
|
||||
var/reflectivity = 0 // How reflective to light is the material? Currently used for laser reflection and defense.
|
||||
var/explosion_resistance = 5 // Only used by walls currently.
|
||||
var/negation = 0 // Objects that respect this will randomly absorb impacts with this var as the percent chance.
|
||||
var/spatial_instability = 0 // Objects that have trouble staying in the same physical space by sheer laws of nature have this. Percent for respecting items to cause teleportation.
|
||||
var/conductive = 1 // Objects without this var add NOCONDUCT to flags on spawn.
|
||||
var/conductivity = null // How conductive the material is. Iron acts as the baseline, at 10.
|
||||
var/list/composite_material // If set, object matter var will be a list containing these values.
|
||||
var/luminescence
|
||||
var/radiation_resistance = 0 // Radiation resistance, which is added on top of a material's weight for blocking radiation. Needed to make lead special without superrobust weapons.
|
||||
var/supply_conversion_value // Supply points per sheet that this material sells for.
|
||||
|
||||
// Placeholder vars for the time being, todo properly integrate windows/light tiles/rods.
|
||||
var/created_window
|
||||
var/created_fulltile_window
|
||||
var/rod_product
|
||||
var/wire_product
|
||||
var/list/window_options = list()
|
||||
|
||||
// Damage values.
|
||||
var/hardness = 60 // Prob of wall destruction by hulk, used for edge damage in weapons. Also used for bullet protection in armor.
|
||||
var/weight = 20 // Determines blunt damage/throwforce for weapons.
|
||||
|
||||
// Noise when someone is faceplanted onto a table made of this material.
|
||||
var/tableslam_noise = 'sound/weapons/tablehit1.ogg'
|
||||
// Noise made when a simple door made of this material opens or closes.
|
||||
var/dooropen_noise = 'sound/effects/stonedoor_openclose.ogg'
|
||||
// Path to resulting stacktype. Todo remove need for this.
|
||||
var/stack_type
|
||||
// Wallrot crumble message.
|
||||
var/rotting_touch_message = "crumbles under your touch"
|
||||
|
||||
// Placeholders for light tiles and rglass.
|
||||
/datum/material/proc/build_rod_product(var/mob/user, var/obj/item/stack/used_stack, var/obj/item/stack/target_stack)
|
||||
if(!rod_product)
|
||||
to_chat(user, "<span class='warning'>You cannot make anything out of \the [target_stack]</span>")
|
||||
return
|
||||
if(used_stack.get_amount() < 1 || target_stack.get_amount() < 1)
|
||||
to_chat(user, "<span class='warning'>You need one rod and one sheet of [display_name] to make anything useful.</span>")
|
||||
return
|
||||
used_stack.use(1)
|
||||
target_stack.use(1)
|
||||
var/obj/item/stack/S = new rod_product(get_turf(user))
|
||||
S.add_fingerprint(user)
|
||||
S.add_to_stacks(user)
|
||||
|
||||
/datum/material/proc/build_wired_product(var/mob/living/user, var/obj/item/stack/used_stack, var/obj/item/stack/target_stack)
|
||||
if(!wire_product)
|
||||
to_chat(user, "<span class='warning'>You cannot make anything out of \the [target_stack]</span>")
|
||||
return
|
||||
if(used_stack.get_amount() < 5 || target_stack.get_amount() < 1)
|
||||
to_chat(user, "<span class='warning'>You need five wires and one sheet of [display_name] to make anything useful.</span>")
|
||||
return
|
||||
|
||||
used_stack.use(5)
|
||||
target_stack.use(1)
|
||||
to_chat(user, "<span class='notice'>You attach wire to the [name].</span>")
|
||||
var/obj/item/product = new wire_product(get_turf(user))
|
||||
user.put_in_hands(product)
|
||||
|
||||
// Make sure we have a display name and shard icon even if they aren't explicitly set.
|
||||
/datum/material/New()
|
||||
..()
|
||||
if(!display_name)
|
||||
display_name = name
|
||||
if(!use_name)
|
||||
use_name = display_name
|
||||
if(!shard_icon)
|
||||
shard_icon = shard_type
|
||||
|
||||
// This is a placeholder for proper integration of windows/windoors into the system.
|
||||
/datum/material/proc/build_windows(var/mob/living/user, var/obj/item/stack/used_stack)
|
||||
return 0
|
||||
|
||||
// Weapons handle applying a divisor for this value locally.
|
||||
/datum/material/proc/get_blunt_damage()
|
||||
return weight //todo
|
||||
|
||||
// Return the matter comprising this material.
|
||||
/datum/material/proc/get_matter()
|
||||
var/list/temp_matter = list()
|
||||
if(islist(composite_material))
|
||||
for(var/material_string in composite_material)
|
||||
temp_matter[material_string] = composite_material[material_string]
|
||||
else if(SHEET_MATERIAL_AMOUNT)
|
||||
temp_matter[name] = SHEET_MATERIAL_AMOUNT
|
||||
return temp_matter
|
||||
|
||||
// As above.
|
||||
/datum/material/proc/get_edge_damage()
|
||||
return hardness //todo
|
||||
|
||||
// Snowflakey, only checked for alien doors at the moment.
|
||||
/datum/material/proc/can_open_material_door(var/mob/living/user)
|
||||
return 1
|
||||
|
||||
// Currently used for weapons and objects made of uranium to irradiate things.
|
||||
/datum/material/proc/products_need_process()
|
||||
return (radioactivity>0) //todo
|
||||
|
||||
// Used by walls when qdel()ing to avoid neighbor merging.
|
||||
/datum/material/placeholder
|
||||
name = "placeholder"
|
||||
|
||||
// Places a girder object when a wall is dismantled, also applies reinforced material.
|
||||
/datum/material/proc/place_dismantled_girder(var/turf/target, var/datum/material/reinf_material, var/datum/material/girder_material)
|
||||
var/obj/structure/girder/G = new(target)
|
||||
if(reinf_material)
|
||||
G.reinf_material = reinf_material
|
||||
G.reinforce_girder()
|
||||
if(girder_material)
|
||||
if(istype(girder_material, /datum/material))
|
||||
girder_material = girder_material.name
|
||||
G.set_material(girder_material)
|
||||
|
||||
|
||||
// General wall debris product placement.
|
||||
// Not particularly necessary aside from snowflakey cult girders.
|
||||
/datum/material/proc/place_dismantled_product(var/turf/target)
|
||||
place_sheet(target)
|
||||
|
||||
// Debris product. Used ALL THE TIME.
|
||||
/datum/material/proc/place_sheet(var/turf/target)
|
||||
if(stack_type)
|
||||
return new stack_type(target)
|
||||
|
||||
// As above.
|
||||
/datum/material/proc/place_shard(var/turf/target)
|
||||
if(shard_type)
|
||||
return new /obj/item/weapon/material/shard(target, src.name)
|
||||
|
||||
// Used by walls and weapons to determine if they break or not.
|
||||
/datum/material/proc/is_brittle()
|
||||
return !!(flags & MATERIAL_BRITTLE)
|
||||
|
||||
/datum/material/proc/combustion_effect(var/turf/T, var/temperature)
|
||||
return
|
||||
|
||||
// Used by walls to do on-touch things, after checking for crumbling and open-ability.
|
||||
/datum/material/proc/wall_touch_special(var/turf/simulated/wall/W, var/mob/living/L)
|
||||
return
|
||||
|
||||
/datum/material/proc/get_recipes()
|
||||
if(!recipes)
|
||||
generate_recipes()
|
||||
return recipes
|
||||
|
||||
/datum/material/proc/generate_recipes()
|
||||
// If is_brittle() returns true, these are only good for a single strike.
|
||||
recipes = list(
|
||||
new /datum/stack_recipe("[display_name] baseball bat", /obj/item/weapon/material/twohanded/baseballbat, 10, time = 20, one_per_turf = 0, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE),
|
||||
new /datum/stack_recipe("[display_name] ashtray", /obj/item/weapon/material/ashtray, 2, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE),
|
||||
new /datum/stack_recipe("[display_name] spoon", /obj/item/weapon/material/kitchen/utensil/spoon/plastic, 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE),
|
||||
new /datum/stack_recipe("[display_name] armor plate", /obj/item/weapon/material/armor_plating, 1, time = 20, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE),
|
||||
new /datum/stack_recipe("[display_name] armor plate insert", /obj/item/weapon/material/armor_plating/insert, 2, time = 40, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE),
|
||||
new /datum/stack_recipe("[display_name] grave marker", /obj/item/weapon/material/gravemarker, 5, time = 50, supplied_material = "[name]", pass_stack_color = TRUE),
|
||||
new /datum/stack_recipe("[display_name] ring", /obj/item/clothing/gloves/ring/material, 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE),
|
||||
new /datum/stack_recipe("[display_name] bracelet", /obj/item/clothing/accessory/bracelet/material, 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
)
|
||||
|
||||
if(integrity>=50)
|
||||
recipes += list(
|
||||
new /datum/stack_recipe("[display_name] door", /obj/structure/simple_door, 10, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE),
|
||||
new /datum/stack_recipe("[display_name] barricade", /obj/structure/barricade, 5, time = 50, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE),
|
||||
new /datum/stack_recipe("[display_name] stool", /obj/item/weapon/stool, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE),
|
||||
new /datum/stack_recipe("[display_name] chair", /obj/structure/bed/chair, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE),
|
||||
new /datum/stack_recipe("[display_name] bed", /obj/structure/bed, 2, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE),
|
||||
new /datum/stack_recipe("[display_name] double bed", /obj/structure/bed/double, 4, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE),
|
||||
new /datum/stack_recipe("[display_name] wall girders", /obj/structure/girder, 2, time = 50, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
)
|
||||
|
||||
if(hardness>50)
|
||||
recipes += list(
|
||||
new /datum/stack_recipe("[display_name] fork", /obj/item/weapon/material/kitchen/utensil/fork/plastic, 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE),
|
||||
new /datum/stack_recipe("[display_name] knife", /obj/item/weapon/material/knife/plastic, 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE),
|
||||
new /datum/stack_recipe("[display_name] blade", /obj/item/weapon/material/butterflyblade, 6, time = 20, one_per_turf = 0, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE),
|
||||
new /datum/stack_recipe("[display_name] defense wire", /obj/item/weapon/material/barbedwire, 10, time = 1 MINUTE, one_per_turf = 0, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
|
||||
)
|
||||
9
code/modules/materials/materials/_materials_vr.dm
Normal file
9
code/modules/materials/materials/_materials_vr.dm
Normal file
@@ -0,0 +1,9 @@
|
||||
/obj/item/stack/material/attack(mob/living/M as mob, mob/living/user as mob)
|
||||
if(M.handle_eat_minerals(src, user))
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/stack/material/attack_generic(var/mob/living/user) //Allow adminbussed mobs to eat ore if they click it while NOT on help intent.
|
||||
if(user.handle_eat_minerals(src))
|
||||
return
|
||||
..()
|
||||
36
code/modules/materials/materials/alien_alloy.dm
Normal file
36
code/modules/materials/materials/alien_alloy.dm
Normal file
@@ -0,0 +1,36 @@
|
||||
// Adminspawn only, do not let anyone get this.
|
||||
/datum/material/alienalloy
|
||||
name = "alienalloy"
|
||||
display_name = "durable alloy"
|
||||
stack_type = null
|
||||
flags = MATERIAL_UNMELTABLE
|
||||
icon_colour = "#6C7364"
|
||||
integrity = 1200
|
||||
melting_point = 6000 // Hull plating.
|
||||
explosion_resistance = 200 // Hull plating.
|
||||
hardness = 500
|
||||
weight = 500
|
||||
protectiveness = 80 // 80%
|
||||
|
||||
/datum/material/alienalloy/elevatorium
|
||||
name = "elevatorium"
|
||||
display_name = "elevator panelling"
|
||||
icon_colour = "#666666"
|
||||
|
||||
/datum/material/alienalloy/dungeonium
|
||||
name = "dungeonium"
|
||||
display_name = "ultra-durable"
|
||||
icon_base = "dungeon"
|
||||
icon_colour = "#FFFFFF"
|
||||
|
||||
/datum/material/alienalloy/bedrock
|
||||
name = "bedrock"
|
||||
display_name = "impassable rock"
|
||||
icon_base = "rock"
|
||||
icon_colour = "#FFFFFF"
|
||||
|
||||
/datum/material/alienalloy/alium
|
||||
name = "alium"
|
||||
display_name = "alien"
|
||||
icon_base = "alien"
|
||||
icon_colour = "#FFFFFF"
|
||||
23
code/modules/materials/materials/cult.dm
Normal file
23
code/modules/materials/materials/cult.dm
Normal file
@@ -0,0 +1,23 @@
|
||||
/datum/material/cult
|
||||
name = "cult"
|
||||
display_name = "disturbing stone"
|
||||
icon_base = "cult"
|
||||
icon_colour = "#402821"
|
||||
icon_reinf = "reinf_cult"
|
||||
shard_type = SHARD_STONE_PIECE
|
||||
sheet_singular_name = "brick"
|
||||
sheet_plural_name = "bricks"
|
||||
conductive = 0
|
||||
|
||||
/datum/material/cult/place_dismantled_girder(var/turf/target)
|
||||
new /obj/structure/girder/cult(target, "cult")
|
||||
|
||||
/datum/material/cult/place_dismantled_product(var/turf/target)
|
||||
new /obj/effect/decal/cleanable/blood(target)
|
||||
|
||||
/datum/material/cult/reinf
|
||||
name = "cult2"
|
||||
display_name = "human remains"
|
||||
|
||||
/datum/material/cult/reinf/place_dismantled_product(var/turf/target)
|
||||
new /obj/effect/decal/remains/human(target)
|
||||
154
code/modules/materials/materials/gems.dm
Normal file
154
code/modules/materials/materials/gems.dm
Normal file
@@ -0,0 +1,154 @@
|
||||
/datum/material/phoron
|
||||
name = "phoron"
|
||||
stack_type = /obj/item/stack/material/phoron
|
||||
ignition_point = PHORON_MINIMUM_BURN_TEMPERATURE
|
||||
icon_base = "stone"
|
||||
icon_colour = "#FC2BC5"
|
||||
shard_type = SHARD_SHARD
|
||||
hardness = 30
|
||||
stack_origin_tech = list(TECH_MATERIAL = 2, TECH_PHORON = 2)
|
||||
door_icon_base = "stone"
|
||||
sheet_singular_name = "crystal"
|
||||
sheet_plural_name = "crystals"
|
||||
supply_conversion_value = 5
|
||||
|
||||
/*
|
||||
// Commenting this out while fires are so spectacularly lethal, as I can't seem to get this balanced appropriately.
|
||||
/datum/material/phoron/combustion_effect(var/turf/T, var/temperature, var/effect_multiplier)
|
||||
if(isnull(ignition_point))
|
||||
return 0
|
||||
if(temperature < ignition_point)
|
||||
return 0
|
||||
var/totalPhoron = 0
|
||||
for(var/turf/simulated/floor/target_tile in range(2,T))
|
||||
var/phoronToDeduce = (temperature/30) * effect_multiplier
|
||||
totalPhoron += phoronToDeduce
|
||||
target_tile.assume_gas("phoron", phoronToDeduce, 200+T0C)
|
||||
spawn (0)
|
||||
target_tile.hotspot_expose(temperature, 400)
|
||||
return round(totalPhoron/100)
|
||||
*/
|
||||
|
||||
/datum/material/diamond
|
||||
name = "diamond"
|
||||
stack_type = /obj/item/stack/material/diamond
|
||||
flags = MATERIAL_UNMELTABLE
|
||||
cut_delay = 60
|
||||
icon_colour = "#00FFE1"
|
||||
opacity = 0.4
|
||||
reflectivity = 0.6
|
||||
conductive = 0
|
||||
conductivity = 1
|
||||
shard_type = SHARD_SHARD
|
||||
tableslam_noise = 'sound/effects/Glasshit.ogg'
|
||||
hardness = 100
|
||||
stack_origin_tech = list(TECH_MATERIAL = 6)
|
||||
supply_conversion_value = 8
|
||||
|
||||
/datum/material/quartz
|
||||
name = "quartz"
|
||||
display_name = "quartz"
|
||||
use_name = "quartz"
|
||||
icon_colour = "#e6d7df"
|
||||
stack_type = /obj/item/stack/material/quartz
|
||||
tableslam_noise = 'sound/effects/Glasshit.ogg'
|
||||
sheet_singular_name = "crystal"
|
||||
sheet_plural_name = "crystals"
|
||||
supply_conversion_value = 4
|
||||
|
||||
/datum/material/painite
|
||||
name = "painite"
|
||||
display_name = "painite"
|
||||
use_name = "painite"
|
||||
icon_colour = "#6b4947"
|
||||
stack_type = /obj/item/stack/material/painite
|
||||
flags = MATERIAL_UNMELTABLE
|
||||
reflectivity = 0.3
|
||||
tableslam_noise = 'sound/effects/Glasshit.ogg'
|
||||
sheet_singular_name = "gem"
|
||||
sheet_plural_name = "gems"
|
||||
supply_conversion_value = 4
|
||||
|
||||
/datum/material/void_opal
|
||||
name = "void opal"
|
||||
display_name = "void opal"
|
||||
use_name = "void opal"
|
||||
icon_colour = "#0f0f0f"
|
||||
stack_type = /obj/item/stack/material/void_opal
|
||||
flags = MATERIAL_UNMELTABLE
|
||||
cut_delay = 60
|
||||
reflectivity = 0
|
||||
conductivity = 1
|
||||
shard_type = SHARD_SHARD
|
||||
tableslam_noise = 'sound/effects/Glasshit.ogg'
|
||||
hardness = 100
|
||||
stack_origin_tech = list(TECH_ARCANE = 1, TECH_MATERIAL = 6)
|
||||
sheet_singular_name = "gem"
|
||||
sheet_plural_name = "gems"
|
||||
supply_conversion_value = 30 // These are hilariously rare.
|
||||
|
||||
// Particle Smasher and other exotic materials.
|
||||
/datum/material/valhollide
|
||||
name = MAT_VALHOLLIDE
|
||||
stack_type = /obj/item/stack/material/valhollide
|
||||
icon_base = "stone"
|
||||
door_icon_base = "stone"
|
||||
icon_reinf = "reinf_mesh"
|
||||
icon_colour = "##FFF3B2"
|
||||
protectiveness = 30
|
||||
integrity = 240
|
||||
weight = 30
|
||||
hardness = 45
|
||||
negation = 2
|
||||
conductive = 0
|
||||
conductivity = 5
|
||||
reflectivity = 0.5
|
||||
radiation_resistance = 20
|
||||
spatial_instability = 30
|
||||
stack_origin_tech = list(TECH_MATERIAL = 7, TECH_PHORON = 5, TECH_BLUESPACE = 5)
|
||||
sheet_singular_name = "gem"
|
||||
sheet_plural_name = "gems"
|
||||
|
||||
/datum/material/verdantium
|
||||
name = MAT_VERDANTIUM
|
||||
stack_type = /obj/item/stack/material/verdantium
|
||||
icon_base = "metal"
|
||||
door_icon_base = "metal"
|
||||
icon_reinf = "reinf_metal"
|
||||
icon_colour = "#4FE95A"
|
||||
integrity = 80
|
||||
protectiveness = 15
|
||||
weight = 15
|
||||
hardness = 30
|
||||
shard_type = SHARD_SHARD
|
||||
negation = 15
|
||||
conductivity = 60
|
||||
reflectivity = 0.3
|
||||
radiation_resistance = 5
|
||||
stack_origin_tech = list(TECH_MATERIAL = 6, TECH_POWER = 5, TECH_BIO = 4)
|
||||
sheet_singular_name = "sheet"
|
||||
sheet_plural_name = "sheets"
|
||||
supply_conversion_value = 8
|
||||
|
||||
/datum/material/morphium
|
||||
name = MAT_MORPHIUM
|
||||
stack_type = /obj/item/stack/material/morphium
|
||||
icon_base = "metal"
|
||||
door_icon_base = "metal"
|
||||
icon_colour = "#37115A"
|
||||
icon_reinf = "reinf_metal"
|
||||
protectiveness = 60
|
||||
integrity = 300
|
||||
conductive = 0
|
||||
conductivity = 1.5
|
||||
hardness = 90
|
||||
shard_type = SHARD_SHARD
|
||||
weight = 30
|
||||
negation = 25
|
||||
explosion_resistance = 85
|
||||
reflectivity = 0.2
|
||||
radiation_resistance = 10
|
||||
stack_origin_tech = list(TECH_MATERIAL = 8, TECH_ILLEGAL = 1, TECH_PHORON = 4, TECH_BLUESPACE = 4, TECH_ARCANE = 1)
|
||||
supply_conversion_value = 13
|
||||
|
||||
|
||||
143
code/modules/materials/materials/glass.dm
Normal file
143
code/modules/materials/materials/glass.dm
Normal file
@@ -0,0 +1,143 @@
|
||||
/datum/material/glass
|
||||
name = "glass"
|
||||
stack_type = /obj/item/stack/material/glass
|
||||
flags = MATERIAL_BRITTLE
|
||||
icon_colour = "#00E1FF"
|
||||
opacity = 0.3
|
||||
integrity = 100
|
||||
shard_type = SHARD_SHARD
|
||||
tableslam_noise = 'sound/effects/Glasshit.ogg'
|
||||
hardness = 30
|
||||
weight = 15
|
||||
protectiveness = 0 // 0%
|
||||
conductive = 0
|
||||
conductivity = 1 // Glass shards don't conduct.
|
||||
door_icon_base = "stone"
|
||||
destruction_desc = "shatters"
|
||||
window_options = list("One Direction" = 1, "Full Window" = 4, "Windoor" = 2)
|
||||
created_window = /obj/structure/window/basic
|
||||
created_fulltile_window = /obj/structure/window/basic/full
|
||||
rod_product = /obj/item/stack/material/glass/reinforced
|
||||
|
||||
/datum/material/glass/build_windows(var/mob/living/user, var/obj/item/stack/used_stack)
|
||||
|
||||
if(!user || !used_stack || !created_window || !created_fulltile_window || !window_options.len)
|
||||
return 0
|
||||
|
||||
if(!user.IsAdvancedToolUser())
|
||||
to_chat(user, "<span class='warning'>This task is too complex for your clumsy hands.</span>")
|
||||
return 1
|
||||
|
||||
var/turf/T = user.loc
|
||||
if(!istype(T))
|
||||
to_chat(user, "<span class='warning'>You must be standing on open flooring to build a window.</span>")
|
||||
return 1
|
||||
|
||||
var/title = "Sheet-[used_stack.name] ([used_stack.get_amount()] sheet\s left)"
|
||||
var/choice = input(title, "What would you like to construct?") as null|anything in window_options
|
||||
|
||||
if(!choice || !used_stack || !user || used_stack.loc != user || user.stat || user.loc != T)
|
||||
return 1
|
||||
|
||||
// Get data for building windows here.
|
||||
var/list/possible_directions = cardinal.Copy()
|
||||
var/window_count = 0
|
||||
for (var/obj/structure/window/check_window in user.loc)
|
||||
window_count++
|
||||
possible_directions -= check_window.dir
|
||||
for (var/obj/structure/windoor_assembly/check_assembly in user.loc)
|
||||
window_count++
|
||||
possible_directions -= check_assembly.dir
|
||||
for (var/obj/machinery/door/window/check_windoor in user.loc)
|
||||
window_count++
|
||||
possible_directions -= check_windoor.dir
|
||||
|
||||
// Get the closest available dir to the user's current facing.
|
||||
var/build_dir = SOUTHWEST //Default to southwest for fulltile windows.
|
||||
var/failed_to_build
|
||||
|
||||
if(window_count >= 4)
|
||||
failed_to_build = 1
|
||||
else
|
||||
if(choice in list("One Direction","Windoor"))
|
||||
if(possible_directions.len)
|
||||
for(var/direction in list(user.dir, turn(user.dir,90), turn(user.dir,270), turn(user.dir,180)))
|
||||
if(direction in possible_directions)
|
||||
build_dir = direction
|
||||
break
|
||||
else
|
||||
failed_to_build = 1
|
||||
if(failed_to_build)
|
||||
to_chat(user, "<span class='warning'>There is no room in this location.</span>")
|
||||
return 1
|
||||
|
||||
var/build_path = /obj/structure/windoor_assembly
|
||||
var/sheets_needed = window_options[choice]
|
||||
if(choice == "Windoor")
|
||||
if(is_reinforced())
|
||||
build_path = /obj/structure/windoor_assembly/secure
|
||||
else if(choice == "Full Window")
|
||||
build_path = created_fulltile_window
|
||||
else
|
||||
build_path = created_window
|
||||
|
||||
if(used_stack.get_amount() < sheets_needed)
|
||||
to_chat(user, "<span class='warning'>You need at least [sheets_needed] sheets to build this.</span>")
|
||||
return 1
|
||||
|
||||
// Build the structure and update sheet count etc.
|
||||
used_stack.use(sheets_needed)
|
||||
new build_path(T, build_dir, 1)
|
||||
return 1
|
||||
|
||||
/datum/material/glass/proc/is_reinforced()
|
||||
return (hardness > 35) //todo
|
||||
|
||||
/datum/material/glass/reinforced
|
||||
name = "rglass"
|
||||
display_name = "reinforced glass"
|
||||
stack_type = /obj/item/stack/material/glass/reinforced
|
||||
flags = MATERIAL_BRITTLE
|
||||
icon_colour = "#00E1FF"
|
||||
opacity = 0.3
|
||||
integrity = 100
|
||||
shard_type = SHARD_SHARD
|
||||
tableslam_noise = 'sound/effects/Glasshit.ogg'
|
||||
hardness = 40
|
||||
weight = 30
|
||||
stack_origin_tech = list(TECH_MATERIAL = 2)
|
||||
composite_material = list(DEFAULT_WALL_MATERIAL = SHEET_MATERIAL_AMOUNT / 2, "glass" = SHEET_MATERIAL_AMOUNT)
|
||||
window_options = list("One Direction" = 1, "Full Window" = 4, "Windoor" = 2)
|
||||
created_window = /obj/structure/window/reinforced
|
||||
created_fulltile_window = /obj/structure/window/reinforced/full
|
||||
wire_product = null
|
||||
rod_product = null
|
||||
|
||||
/datum/material/glass/phoron
|
||||
name = "borosilicate glass"
|
||||
display_name = "borosilicate glass"
|
||||
stack_type = /obj/item/stack/material/glass/phoronglass
|
||||
flags = MATERIAL_BRITTLE
|
||||
integrity = 100
|
||||
icon_colour = "#FC2BC5"
|
||||
stack_origin_tech = list(TECH_MATERIAL = 4)
|
||||
window_options = list("One Direction" = 1, "Full Window" = 4)
|
||||
created_window = /obj/structure/window/phoronbasic
|
||||
created_fulltile_window = /obj/structure/window/phoronbasic/full
|
||||
wire_product = null
|
||||
rod_product = /obj/item/stack/material/glass/phoronrglass
|
||||
|
||||
/datum/material/glass/phoron/reinforced
|
||||
name = "reinforced borosilicate glass"
|
||||
display_name = "reinforced borosilicate glass"
|
||||
stack_type = /obj/item/stack/material/glass/phoronrglass
|
||||
stack_origin_tech = list(TECH_MATERIAL = 5)
|
||||
composite_material = list() //todo
|
||||
window_options = list("One Direction" = 1, "Full Window" = 4)
|
||||
created_window = /obj/structure/window/phoronreinforced
|
||||
created_fulltile_window = /obj/structure/window/phoronreinforced/full
|
||||
hardness = 40
|
||||
weight = 30
|
||||
stack_origin_tech = list(TECH_MATERIAL = 2)
|
||||
composite_material = list(DEFAULT_WALL_MATERIAL = SHEET_MATERIAL_AMOUNT / 2, "borosilicate glass" = SHEET_MATERIAL_AMOUNT)
|
||||
rod_product = null
|
||||
33
code/modules/materials/materials/glass_vr.dm
Normal file
33
code/modules/materials/materials/glass_vr.dm
Normal file
@@ -0,0 +1,33 @@
|
||||
/datum/material/glass/titaniumglass
|
||||
name = MAT_TITANIUMGLASS
|
||||
display_name = "titanium glass"
|
||||
stack_type = /obj/item/stack/material/glass/titanium
|
||||
integrity = 150
|
||||
hardness = 50
|
||||
weight = 50
|
||||
flags = MATERIAL_BRITTLE
|
||||
icon_colour = "#A7A3A6"
|
||||
stack_origin_tech = list(TECH_MATERIAL = 5)
|
||||
window_options = list("One Direction" = 1, "Full Window" = 4)
|
||||
created_window = /obj/structure/window/titanium
|
||||
created_fulltile_window = /obj/structure/window/titanium/full
|
||||
wire_product = null
|
||||
rod_product = /obj/item/stack/material/glass/titanium
|
||||
composite_material = list(MAT_TITANIUM = SHEET_MATERIAL_AMOUNT, "glass" = SHEET_MATERIAL_AMOUNT)
|
||||
|
||||
/datum/material/glass/plastaniumglass
|
||||
name = MAT_PLASTITANIUMGLASS
|
||||
display_name = "plas-titanium glass"
|
||||
stack_type = /obj/item/stack/material/glass/plastitanium
|
||||
integrity = 200
|
||||
hardness = 60
|
||||
weight = 80
|
||||
flags = MATERIAL_BRITTLE
|
||||
icon_colour = "#676366"
|
||||
stack_origin_tech = list(TECH_MATERIAL = 6)
|
||||
window_options = list("One Direction" = 1, "Full Window" = 4)
|
||||
created_window = /obj/structure/window/plastitanium
|
||||
created_fulltile_window = /obj/structure/window/plastitanium/full
|
||||
wire_product = null
|
||||
rod_product = /obj/item/stack/material/glass/plastitanium
|
||||
composite_material = list(MAT_PLASTITANIUM = SHEET_MATERIAL_AMOUNT, "glass" = SHEET_MATERIAL_AMOUNT)
|
||||
17
code/modules/materials/materials/holographic.dm
Normal file
17
code/modules/materials/materials/holographic.dm
Normal file
@@ -0,0 +1,17 @@
|
||||
/datum/material/steel/holographic
|
||||
name = "holo" + DEFAULT_WALL_MATERIAL
|
||||
display_name = DEFAULT_WALL_MATERIAL
|
||||
stack_type = null
|
||||
shard_type = SHARD_NONE
|
||||
|
||||
/datum/material/plastic/holographic
|
||||
name = "holoplastic"
|
||||
display_name = "plastic"
|
||||
stack_type = null
|
||||
shard_type = SHARD_NONE
|
||||
|
||||
/datum/material/wood/holographic
|
||||
name = "holowood"
|
||||
display_name = "wood"
|
||||
stack_type = null
|
||||
shard_type = SHARD_NONE
|
||||
53
code/modules/materials/materials/metals/hull.dm
Normal file
53
code/modules/materials/materials/metals/hull.dm
Normal file
@@ -0,0 +1,53 @@
|
||||
/datum/material/steel/hull
|
||||
name = MAT_STEELHULL
|
||||
stack_type = /obj/item/stack/material/steel/hull
|
||||
integrity = 250
|
||||
explosion_resistance = 10
|
||||
icon_base = "hull"
|
||||
icon_reinf = "reinf_mesh"
|
||||
icon_colour = "#666677"
|
||||
|
||||
/datum/material/steel/hull/place_sheet(var/turf/target) //Deconstructed into normal steel sheets.
|
||||
new /obj/item/stack/material/steel(target)
|
||||
|
||||
/datum/material/plasteel/hull
|
||||
name = MAT_PLASTEELHULL
|
||||
stack_type = /obj/item/stack/material/plasteel/hull
|
||||
integrity = 600
|
||||
icon_base = "hull"
|
||||
icon_reinf = "reinf_mesh"
|
||||
icon_colour = "#777788"
|
||||
explosion_resistance = 40
|
||||
|
||||
/datum/material/plasteel/hull/place_sheet(var/turf/target) //Deconstructed into normal plasteel sheets.
|
||||
new /obj/item/stack/material/plasteel(target)
|
||||
|
||||
/datum/material/durasteel/hull //The 'Hardball' of starship hulls.
|
||||
name = MAT_DURASTEELHULL
|
||||
stack_type = /obj/item/stack/material/durasteel/hull
|
||||
icon_base = "hull"
|
||||
icon_reinf = "reinf_mesh"
|
||||
icon_colour = "#45829a"
|
||||
explosion_resistance = 90
|
||||
reflectivity = 0.9
|
||||
|
||||
/datum/material/durasteel/hull/place_sheet(var/turf/target) //Deconstructed into normal durasteel sheets.
|
||||
new /obj/item/stack/material/durasteel(target)
|
||||
|
||||
/datum/material/titanium/hull
|
||||
name = MAT_TITANIUMHULL
|
||||
stack_type = /obj/item/stack/material/titanium/hull
|
||||
icon_base = "hull"
|
||||
icon_reinf = "reinf_mesh"
|
||||
|
||||
/datum/material/titanium/hull/place_sheet(var/turf/target) //Deconstructed into normal titanium sheets.
|
||||
new /obj/item/stack/material/titanium(target)
|
||||
|
||||
/datum/material/morphium/hull
|
||||
name = MAT_MORPHIUMHULL
|
||||
stack_type = /obj/item/stack/material/morphium/hull
|
||||
icon_base = "hull"
|
||||
icon_reinf = "reinf_mesh"
|
||||
|
||||
/datum/material/morphium/hull/place_sheet(var/turf/target)
|
||||
new /obj/item/stack/material/morphium(target)
|
||||
20
code/modules/materials/materials/metals/hull_vr.dm
Normal file
20
code/modules/materials/materials/metals/hull_vr.dm
Normal file
@@ -0,0 +1,20 @@
|
||||
/datum/material/plastitanium/hull
|
||||
name = MAT_PLASTITANIUMHULL
|
||||
stack_type = /obj/item/stack/material/plastitanium/hull
|
||||
icon_base = "hull"
|
||||
icon_reinf = "reinf_mesh"
|
||||
icon_colour = "#585658"
|
||||
explosion_resistance = 50
|
||||
|
||||
/datum/material/plastitanium/hull/place_sheet(var/turf/target) //Deconstructed into normal plasteel sheets.
|
||||
new /obj/item/stack/material/plastitanium(target)
|
||||
|
||||
/datum/material/gold/hull
|
||||
name = MAT_GOLDHULL
|
||||
stack_type = /obj/item/stack/material/gold/hull
|
||||
icon_base = "hull"
|
||||
icon_reinf = "reinf_mesh"
|
||||
explosion_resistance = 50
|
||||
|
||||
/datum/material/gold/hull/place_sheet(var/turf/target) //Deconstructed into normal gold sheets.
|
||||
new /obj/item/stack/material/gold(target)
|
||||
199
code/modules/materials/materials/metals/metals.dm
Normal file
199
code/modules/materials/materials/metals/metals.dm
Normal file
@@ -0,0 +1,199 @@
|
||||
|
||||
|
||||
|
||||
|
||||
// Very rare alloy that is reflective, should be used sparingly.
|
||||
/datum/material/durasteel
|
||||
name = "durasteel"
|
||||
stack_type = /obj/item/stack/material/durasteel
|
||||
integrity = 600
|
||||
melting_point = 7000
|
||||
icon_base = "metal"
|
||||
icon_reinf = "reinf_metal"
|
||||
icon_colour = "#6EA7BE"
|
||||
explosion_resistance = 75
|
||||
hardness = 100
|
||||
weight = 28
|
||||
protectiveness = 60 // 75%
|
||||
reflectivity = 0.7 // Not a perfect mirror, but close.
|
||||
stack_origin_tech = list(TECH_MATERIAL = 8)
|
||||
composite_material = list("plasteel" = SHEET_MATERIAL_AMOUNT, "diamond" = SHEET_MATERIAL_AMOUNT) //shrug
|
||||
supply_conversion_value = 9
|
||||
|
||||
/datum/material/titanium
|
||||
name = MAT_TITANIUM
|
||||
stack_type = /obj/item/stack/material/titanium
|
||||
conductivity = 2.38
|
||||
icon_base = "metal"
|
||||
door_icon_base = "metal"
|
||||
icon_colour = "#D1E6E3"
|
||||
icon_reinf = "reinf_metal"
|
||||
composite_material = null
|
||||
|
||||
/datum/material/iron
|
||||
name = "iron"
|
||||
stack_type = /obj/item/stack/material/iron
|
||||
icon_colour = "#5C5454"
|
||||
weight = 22
|
||||
conductivity = 10
|
||||
sheet_singular_name = "ingot"
|
||||
sheet_plural_name = "ingots"
|
||||
|
||||
/datum/material/lead
|
||||
name = MAT_LEAD
|
||||
stack_type = /obj/item/stack/material/lead
|
||||
icon_colour = "#273956"
|
||||
weight = 23 // Lead is a bit more dense than silver IRL, and silver has 22 ingame.
|
||||
conductivity = 10
|
||||
sheet_singular_name = "ingot"
|
||||
sheet_plural_name = "ingots"
|
||||
radiation_resistance = 25 // Lead is Special and so gets to block more radiation than it normally would with just weight, totalling in 48 protection.
|
||||
supply_conversion_value = 2
|
||||
|
||||
/datum/material/gold
|
||||
name = "gold"
|
||||
stack_type = /obj/item/stack/material/gold
|
||||
icon_colour = "#EDD12F"
|
||||
weight = 24
|
||||
hardness = 40
|
||||
conductivity = 41
|
||||
stack_origin_tech = list(TECH_MATERIAL = 4)
|
||||
sheet_singular_name = "ingot"
|
||||
sheet_plural_name = "ingots"
|
||||
supply_conversion_value = 2
|
||||
|
||||
/datum/material/silver
|
||||
name = "silver"
|
||||
stack_type = /obj/item/stack/material/silver
|
||||
icon_colour = "#D1E6E3"
|
||||
weight = 22
|
||||
hardness = 50
|
||||
conductivity = 63
|
||||
stack_origin_tech = list(TECH_MATERIAL = 3)
|
||||
sheet_singular_name = "ingot"
|
||||
sheet_plural_name = "ingots"
|
||||
supply_conversion_value = 2
|
||||
|
||||
/datum/material/platinum
|
||||
name = "platinum"
|
||||
stack_type = /obj/item/stack/material/platinum
|
||||
icon_colour = "#9999FF"
|
||||
weight = 27
|
||||
conductivity = 9.43
|
||||
stack_origin_tech = list(TECH_MATERIAL = 2)
|
||||
sheet_singular_name = "ingot"
|
||||
sheet_plural_name = "ingots"
|
||||
supply_conversion_value = 5
|
||||
|
||||
/datum/material/uranium
|
||||
name = "uranium"
|
||||
stack_type = /obj/item/stack/material/uranium
|
||||
radioactivity = 12
|
||||
icon_base = "stone"
|
||||
icon_reinf = "reinf_stone"
|
||||
icon_colour = "#007A00"
|
||||
weight = 22
|
||||
stack_origin_tech = list(TECH_MATERIAL = 5)
|
||||
door_icon_base = "stone"
|
||||
supply_conversion_value = 2
|
||||
|
||||
/datum/material/mhydrogen
|
||||
name = "mhydrogen"
|
||||
stack_type = /obj/item/stack/material/mhydrogen
|
||||
icon_colour = "#E6C5DE"
|
||||
stack_origin_tech = list(TECH_MATERIAL = 6, TECH_POWER = 6, TECH_MAGNET = 5)
|
||||
conductivity = 100
|
||||
is_fusion_fuel = 1
|
||||
supply_conversion_value = 6
|
||||
|
||||
/datum/material/deuterium
|
||||
name = "deuterium"
|
||||
stack_type = /obj/item/stack/material/deuterium
|
||||
icon_colour = "#999999"
|
||||
stack_origin_tech = list(TECH_MATERIAL = 3)
|
||||
sheet_singular_name = "ingot"
|
||||
sheet_plural_name = "ingots"
|
||||
is_fusion_fuel = 1
|
||||
conductive = 0
|
||||
|
||||
/datum/material/tritium
|
||||
name = "tritium"
|
||||
stack_type = /obj/item/stack/material/tritium
|
||||
icon_colour = "#777777"
|
||||
stack_origin_tech = list(TECH_MATERIAL = 5)
|
||||
sheet_singular_name = "ingot"
|
||||
sheet_plural_name = "ingots"
|
||||
is_fusion_fuel = 1
|
||||
conductive = 0
|
||||
|
||||
/datum/material/osmium
|
||||
name = "osmium"
|
||||
stack_type = /obj/item/stack/material/osmium
|
||||
icon_colour = "#9999FF"
|
||||
stack_origin_tech = list(TECH_MATERIAL = 5)
|
||||
sheet_singular_name = "ingot"
|
||||
sheet_plural_name = "ingots"
|
||||
conductivity = 100
|
||||
supply_conversion_value = 6
|
||||
|
||||
/datum/material/graphite
|
||||
name = MAT_GRAPHITE
|
||||
stack_type = /obj/item/stack/material/graphite
|
||||
flags = MATERIAL_BRITTLE
|
||||
icon_base = "solid"
|
||||
icon_reinf = "reinf_mesh"
|
||||
icon_colour = "#333333"
|
||||
hardness = 75
|
||||
weight = 15
|
||||
integrity = 175
|
||||
protectiveness = 15
|
||||
conductivity = 18
|
||||
melting_point = T0C+3600
|
||||
radiation_resistance = 15
|
||||
stack_origin_tech = list(TECH_MATERIAL = 2, TECH_MAGNET = 2)
|
||||
|
||||
/datum/material/bronze
|
||||
name = "bronze"
|
||||
stack_type = /obj/item/stack/material/bronze
|
||||
icon_colour = "#EDD12F"
|
||||
icon_base = "solid"
|
||||
icon_reinf = "reinf_over"
|
||||
integrity = 120
|
||||
conductivity = 12
|
||||
protectiveness = 9 // 33%
|
||||
|
||||
/datum/material/tin
|
||||
name = "tin"
|
||||
display_name = "tin"
|
||||
use_name = "tin"
|
||||
stack_type = /obj/item/stack/material/tin
|
||||
icon_colour = "#b2afaf"
|
||||
sheet_singular_name = "ingot"
|
||||
sheet_plural_name = "ingots"
|
||||
supply_conversion_value = 1
|
||||
hardness = 50
|
||||
weight = 13
|
||||
|
||||
/datum/material/copper
|
||||
name = "copper"
|
||||
display_name = "copper"
|
||||
use_name = "copper"
|
||||
stack_type = /obj/item/stack/material/copper
|
||||
conductivity = 52
|
||||
icon_colour = "#af633e"
|
||||
sheet_singular_name = "ingot"
|
||||
sheet_plural_name = "ingots"
|
||||
supply_conversion_value = 1
|
||||
weight = 13
|
||||
hardness = 50
|
||||
|
||||
/datum/material/aluminium
|
||||
name = "aluminium"
|
||||
display_name = "aluminium"
|
||||
use_name = "aluminium"
|
||||
icon_colour = "#e5e2d0"
|
||||
stack_type = /obj/item/stack/material/aluminium
|
||||
sheet_singular_name = "ingot"
|
||||
sheet_plural_name = "ingots"
|
||||
supply_conversion_value = 2
|
||||
weight = 10
|
||||
6
code/modules/materials/materials/metals/metals_vr.dm
Normal file
6
code/modules/materials/materials/metals/metals_vr.dm
Normal file
@@ -0,0 +1,6 @@
|
||||
/datum/material/durasteel/generate_recipes()
|
||||
. = ..()
|
||||
recipes += list(
|
||||
new /datum/stack_recipe("durasteel fishing rod", /obj/item/weapon/material/fishing_rod/modern/strong, 2),
|
||||
new /datum/stack_recipe("whetstone", /obj/item/weapon/whetstone, 2, time = 30),
|
||||
)
|
||||
27
code/modules/materials/materials/metals/plasteel.dm
Normal file
27
code/modules/materials/materials/metals/plasteel.dm
Normal file
@@ -0,0 +1,27 @@
|
||||
/datum/material/plasteel
|
||||
name = "plasteel"
|
||||
stack_type = /obj/item/stack/material/plasteel
|
||||
integrity = 400
|
||||
melting_point = 6000
|
||||
icon_base = "solid"
|
||||
icon_reinf = "reinf_over"
|
||||
icon_colour = "#777777"
|
||||
explosion_resistance = 25
|
||||
hardness = 80
|
||||
weight = 23
|
||||
protectiveness = 20 // 50%
|
||||
conductivity = 13 // For the purposes of balance.
|
||||
stack_origin_tech = list(TECH_MATERIAL = 2)
|
||||
composite_material = list(DEFAULT_WALL_MATERIAL = SHEET_MATERIAL_AMOUNT, "platinum" = SHEET_MATERIAL_AMOUNT) //todo
|
||||
supply_conversion_value = 6
|
||||
|
||||
/datum/material/plasteel/generate_recipes()
|
||||
..()
|
||||
recipes += list(
|
||||
new /datum/stack_recipe("AI core", /obj/structure/AIcore, 4, time = 50, one_per_turf = 1, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("Metal crate", /obj/structure/closet/crate, 10, time = 50, one_per_turf = 1, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("knife grip", /obj/item/weapon/material/butterflyhandle, 4, time = 20, one_per_turf = 0, on_floor = 1, supplied_material = "[name]"),
|
||||
new /datum/stack_recipe("dark floor tile", /obj/item/stack/tile/floor/dark, 1, 4, 20, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("roller bed", /obj/item/roller, 5, time = 30, on_floor = 1, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("whetstone", /obj/item/weapon/whetstone, 2, time = 10, recycle_material = "[name]")
|
||||
)
|
||||
9
code/modules/materials/materials/metals/plasteel_ch.dm
Normal file
9
code/modules/materials/materials/metals/plasteel_ch.dm
Normal file
@@ -0,0 +1,9 @@
|
||||
/datum/material/plasteel/generate_recipes()
|
||||
. = ..()
|
||||
// recipes += new /datum/stack_recipe("Hammer Head", /obj/item/weapon/hammer_head, 2) //CHOMPEdit - Disabled because I had to disable code/game/objects/items/weapons/material/sledgehammer_construction_ch.dm due to lots of errors
|
||||
recipes += new /datum/stack_recipe_list("sofas", list( \
|
||||
new /datum/stack_recipe("sofa middle", /obj/structure/bed/chair/sofa, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new /datum/stack_recipe("sofa left", /obj/structure/bed/chair/sofa/left, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new /datum/stack_recipe("sofa right", /obj/structure/bed/chair/sofa/right, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new /datum/stack_recipe("sofa corner", /obj/structure/bed/chair/sofa/corner, 1, one_per_turf = 1, on_floor = 1), \
|
||||
))
|
||||
22
code/modules/materials/materials/metals/plasteel_vr.dm
Normal file
22
code/modules/materials/materials/metals/plasteel_vr.dm
Normal file
@@ -0,0 +1,22 @@
|
||||
/datum/material/plastitanium
|
||||
name = MAT_PLASTITANIUM
|
||||
stack_type = /obj/item/stack/material/plastitanium
|
||||
integrity = 600
|
||||
melting_point = 9000
|
||||
icon_base = "solid"
|
||||
icon_reinf = "reinf_over"
|
||||
icon_colour = "#585658"
|
||||
explosion_resistance = 35
|
||||
hardness = 90
|
||||
weight = 40
|
||||
protectiveness = 30
|
||||
conductivity = 7
|
||||
stack_origin_tech = list(TECH_MATERIAL = 5)
|
||||
composite_material = list(MAT_TITANIUM = SHEET_MATERIAL_AMOUNT, MAT_PLASTEEL = SHEET_MATERIAL_AMOUNT)
|
||||
supply_conversion_value = 8
|
||||
|
||||
/datum/material/plastitanium/generate_recipes()
|
||||
..()
|
||||
recipes += list(
|
||||
new /datum/stack_recipe("whetstone", /obj/item/weapon/whetstone, 2, time = 20),
|
||||
)
|
||||
87
code/modules/materials/materials/metals/steel.dm
Normal file
87
code/modules/materials/materials/metals/steel.dm
Normal file
@@ -0,0 +1,87 @@
|
||||
/datum/material/steel
|
||||
name = DEFAULT_WALL_MATERIAL
|
||||
stack_type = /obj/item/stack/material/steel
|
||||
integrity = 150
|
||||
conductivity = 11 // Assuming this is carbon steel, it would actually be slightly less conductive than iron, but lets ignore that.
|
||||
protectiveness = 10 // 33%
|
||||
icon_base = "solid"
|
||||
icon_reinf = "reinf_over"
|
||||
icon_colour = "#666666"
|
||||
|
||||
/datum/material/steel/generate_recipes()
|
||||
..()
|
||||
recipes += list(
|
||||
new /datum/stack_recipe_list("office chairs",list(
|
||||
new /datum/stack_recipe("dark office chair", /obj/structure/bed/chair/office/dark, 5, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("light office chair", /obj/structure/bed/chair/office/light, 5, one_per_turf = 1, on_floor = 1, recycle_material = "[name]")
|
||||
)),
|
||||
new /datum/stack_recipe_list("comfy chairs", list(
|
||||
new /datum/stack_recipe("beige comfy chair", /obj/structure/bed/chair/comfy/beige, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("black comfy chair", /obj/structure/bed/chair/comfy/black, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("brown comfy chair", /obj/structure/bed/chair/comfy/brown, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("lime comfy chair", /obj/structure/bed/chair/comfy/lime, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("teal comfy chair", /obj/structure/bed/chair/comfy/teal, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("red comfy chair", /obj/structure/bed/chair/comfy/red, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("blue comfy chair", /obj/structure/bed/chair/comfy/blue, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("purple comfy chair", /obj/structure/bed/chair/comfy/purp, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("green comfy chair", /obj/structure/bed/chair/comfy/green, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("yellow comfy chair", /obj/structure/bed/chair/comfy/yellow, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("orange comfy chair", /obj/structure/bed/chair/comfy/orange, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
|
||||
)),
|
||||
new /datum/stack_recipe_list("airlock assemblies", list(
|
||||
new /datum/stack_recipe("standard airlock assembly", /obj/structure/door_assembly, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("command airlock assembly", /obj/structure/door_assembly/door_assembly_com, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("security airlock assembly", /obj/structure/door_assembly/door_assembly_sec, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("eng atmos airlock assembly", /obj/structure/door_assembly/door_assembly_eat, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("engineering airlock assembly", /obj/structure/door_assembly/door_assembly_eng, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("mining airlock assembly", /obj/structure/door_assembly/door_assembly_min, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("atmospherics airlock assembly", /obj/structure/door_assembly/door_assembly_atmo, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("research airlock assembly", /obj/structure/door_assembly/door_assembly_research, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("medical airlock assembly", /obj/structure/door_assembly/door_assembly_med, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("maintenance airlock assembly", /obj/structure/door_assembly/door_assembly_mai, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("external airlock assembly", /obj/structure/door_assembly/door_assembly_ext, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("freezer airlock assembly", /obj/structure/door_assembly/door_assembly_fre, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("airtight hatch assembly", /obj/structure/door_assembly/door_assembly_hatch, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("maintenance hatch assembly", /obj/structure/door_assembly/door_assembly_mhatch, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("high security airlock assembly", /obj/structure/door_assembly/door_assembly_highsecurity, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("voidcraft airlock assembly horizontal", /obj/structure/door_assembly/door_assembly_voidcraft, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("voidcraft airlock assembly vertical", /obj/structure/door_assembly/door_assembly_voidcraft/vertical, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("emergency shutter", /obj/structure/firedoor_assembly, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("multi-tile airlock assembly", /obj/structure/door_assembly/multi_tile, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
|
||||
)),
|
||||
new /datum/stack_recipe_list("modular computer frames", list(
|
||||
new /datum/stack_recipe("modular console frame", /obj/item/modular_computer/console, 20, recycle_material = "[name]"),\
|
||||
new /datum/stack_recipe("modular telescreen frame", /obj/item/modular_computer/telescreen, 10, recycle_material = "[name]"),\
|
||||
new /datum/stack_recipe("modular laptop frame", /obj/item/modular_computer/laptop, 10, recycle_material = "[name]"),\
|
||||
new /datum/stack_recipe("modular tablet frame", /obj/item/modular_computer/tablet, 5, recycle_material = "[name]"),\
|
||||
)),
|
||||
new /datum/stack_recipe_list("filing cabinets", list(
|
||||
new /datum/stack_recipe("filing cabinet", /obj/structure/filingcabinet, 4, time = 20, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("tall filing cabinet", /obj/structure/filingcabinet/filingcabinet, 4, time = 20, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("chest drawer", /obj/structure/filingcabinet/chestdrawer, 4, time = 20, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
|
||||
)),
|
||||
new /datum/stack_recipe("table frame", /obj/structure/table, 1, time = 10, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("bench frame", /obj/structure/table/bench, 1, time = 10, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("rack", /obj/structure/table/rack, 1, time = 5, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("closet", /obj/structure/closet, 2, time = 15, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("canister", /obj/machinery/portable_atmospherics/canister, 10, time = 15, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("cannon frame", /obj/item/weapon/cannonframe, 10, time = 15, one_per_turf = 0, on_floor = 0, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("regular floor tile", /obj/item/stack/tile/floor, 1, 4, 20, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("roofing tile", /obj/item/stack/tile/roofing, 3, 4, 20, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("metal rod", /obj/item/stack/rods, 1, 2, 60, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("frame", /obj/item/frame, 5, time = 25, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("mirror frame", /obj/item/frame/mirror, 1, time = 5, one_per_turf = 0, on_floor = 1, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("fire extinguisher cabinet frame", /obj/item/frame/extinguisher_cabinet, 4, time = 5, one_per_turf = 0, on_floor = 1, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("railing", /obj/structure/railing, 2, time = 50, one_per_turf = 0, on_floor = 1, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("turret frame", /obj/machinery/porta_turret_construct, 5, time = 25, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
|
||||
//new /datum/stack_recipe("IV drip", /obj/machinery/iv_drip, 4, time = 20, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), //VOREStation Removal
|
||||
new /datum/stack_recipe("medical stand", /obj/structure/medical_stand, 4, time = 20, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), //VOREStation Replacement,
|
||||
new /datum/stack_recipe("conveyor switch", /obj/machinery/conveyor_switch, 2, time = 20, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("grenade casing", /obj/item/weapon/grenade/chem_grenade, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("light fixture frame", /obj/item/frame/light, 2, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("small light fixture frame", /obj/item/frame/light/small, 1, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("floor lamp fixture frame", /obj/machinery/light_construct/flamp, 2, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("apc frame", /obj/item/frame/apc, 2, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("desk bell", /obj/item/weapon/deskbell, 1, on_floor = 1, supplied_material = "[name]"),
|
||||
new /datum/stack_recipe("tanning rack", /obj/structure/tanning_rack, 3, one_per_turf = TRUE, time = 20, on_floor = TRUE, supplied_material = "[name]")
|
||||
)
|
||||
82
code/modules/materials/materials/metals/steel_vr.dm
Normal file
82
code/modules/materials/materials/metals/steel_vr.dm
Normal file
@@ -0,0 +1,82 @@
|
||||
/datum/material/steel/generate_recipes()
|
||||
. = ..()
|
||||
recipes += list(
|
||||
new /datum/stack_recipe_list("mounted chairs",list(
|
||||
new /datum/stack_recipe("mounted chair", /obj/structure/bed/chair/bay/chair, 2, one_per_turf = 1, on_floor = 1, time = 10),
|
||||
new /datum/stack_recipe("red mounted chair", /obj/structure/bed/chair/bay/chair/padded/red, 2, one_per_turf = 1, on_floor = 1, time = 10),
|
||||
new /datum/stack_recipe("brown mounted chair", /obj/structure/bed/chair/bay/chair/padded/brown, 2, one_per_turf = 1, on_floor = 1, time = 10),
|
||||
new /datum/stack_recipe("teal mounted chair", /obj/structure/bed/chair/bay/chair/padded/teal, 2, one_per_turf = 1, on_floor = 1, time = 10),
|
||||
new /datum/stack_recipe("black mounted chair", /obj/structure/bed/chair/bay/chair/padded/black, 2, one_per_turf = 1, on_floor = 1, time = 10),
|
||||
new /datum/stack_recipe("green mounted chair", /obj/structure/bed/chair/bay/chair/padded/green, 2, one_per_turf = 1, on_floor = 1, time = 10),
|
||||
new /datum/stack_recipe("purple mounted chair", /obj/structure/bed/chair/bay/chair/padded/purple, 2, one_per_turf = 1, on_floor = 1, time = 10),
|
||||
new /datum/stack_recipe("blue mounted chair", /obj/structure/bed/chair/bay/chair/padded/blue, 2, one_per_turf = 1, on_floor = 1, time = 10),
|
||||
new /datum/stack_recipe("beige mounted chair", /obj/structure/bed/chair/bay/chair/padded/beige, 2, one_per_turf = 1, on_floor = 1, time = 10),
|
||||
new /datum/stack_recipe("lime mounted chair", /obj/structure/bed/chair/bay/chair/padded/lime, 2, one_per_turf = 1, on_floor = 1, time = 10),
|
||||
new /datum/stack_recipe("yellow mounted chair", /obj/structure/bed/chair/bay/chair/padded/yellow, 2, one_per_turf = 1, on_floor = 1, time = 10)
|
||||
)),
|
||||
new /datum/stack_recipe_list("mounted comfy chairs",list(
|
||||
new /datum/stack_recipe("mounted comfy chair", /obj/structure/bed/chair/bay/comfy, 3, one_per_turf = 1, on_floor = 1, time = 20),
|
||||
new /datum/stack_recipe("red mounted comfy chair", /obj/structure/bed/chair/bay/comfy/red, 3, one_per_turf = 1, on_floor = 1, time = 20),
|
||||
new /datum/stack_recipe("brown mounted comfy chair", /obj/structure/bed/chair/bay/comfy/brown, 3, one_per_turf = 1, on_floor = 1, time = 20),
|
||||
new /datum/stack_recipe("teal mounted comfy chair", /obj/structure/bed/chair/bay/comfy/teal, 3, one_per_turf = 1, on_floor = 1, time = 20),
|
||||
new /datum/stack_recipe("black mounted comfy chair", /obj/structure/bed/chair/bay/comfy/black, 3, one_per_turf = 1, on_floor = 1, time = 20),
|
||||
new /datum/stack_recipe("green mounted comfy chair", /obj/structure/bed/chair/bay/comfy/green, 3, one_per_turf = 1, on_floor = 1, time = 20),
|
||||
new /datum/stack_recipe("purple mounted comfy chair", /obj/structure/bed/chair/bay/comfy/purple, 3, one_per_turf = 1, on_floor = 1, time = 20),
|
||||
new /datum/stack_recipe("blue mounted comfy chair", /obj/structure/bed/chair/bay/comfy/blue, 3, one_per_turf = 1, on_floor = 1, time = 20),
|
||||
new /datum/stack_recipe("beige mounted comfy chair", /obj/structure/bed/chair/bay/comfy/beige, 3, one_per_turf = 1, on_floor = 1, time = 20),
|
||||
new /datum/stack_recipe("lime mounted comfy chair", /obj/structure/bed/chair/bay/comfy/lime, 3, one_per_turf = 1, on_floor = 1, time = 20),
|
||||
new /datum/stack_recipe("yellow mounted comfy chair", /obj/structure/bed/chair/bay/comfy/yellow, 3, one_per_turf = 1, on_floor = 1, time = 20)
|
||||
)),
|
||||
new /datum/stack_recipe("mounted captain's chair", /obj/structure/bed/chair/bay/comfy/captain, 4, one_per_turf = 1, on_floor = 1, time = 20),
|
||||
new /datum/stack_recipe("dropship seat", /obj/structure/bed/chair/bay/shuttle, 4, one_per_turf = 1, on_floor = 1, time = 20),
|
||||
new /datum/stack_recipe("small teshari nest", /obj/structure/bed/chair/bay/chair/padded/red/smallnest, 2, one_per_turf = 1, on_floor = 1, time = 10),
|
||||
new /datum/stack_recipe("large teshari nest", /obj/structure/bed/chair/bay/chair/padded/red/bignest, 4, one_per_turf = 1, on_floor = 1, time = 20),
|
||||
new /datum/stack_recipe("dance pole", /obj/structure/dancepole, 2, one_per_turf = 1, on_floor = 1, time = 20),
|
||||
new /datum/stack_recipe("light switch frame", /obj/item/frame/lightswitch, 2),
|
||||
new /datum/stack_recipe_list("sofas",list(
|
||||
new /datum/stack_recipe("red sofa middle", /obj/structure/bed/chair/sofa, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new /datum/stack_recipe("red sofa left", /obj/structure/bed/chair/sofa/left, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new /datum/stack_recipe("red sofa right", /obj/structure/bed/chair/sofa/right, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new /datum/stack_recipe("red sofa corner", /obj/structure/bed/chair/sofa/corner, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new /datum/stack_recipe("brown sofa middle", /obj/structure/bed/chair/sofa/brown, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new /datum/stack_recipe("brown sofa left", /obj/structure/bed/chair/sofa/brown/left, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new /datum/stack_recipe("brown sofa right", /obj/structure/bed/chair/sofa/brown/right, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new /datum/stack_recipe("brown sofa corner", /obj/structure/bed/chair/sofa/brown/corner, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new /datum/stack_recipe("teal sofa middle", /obj/structure/bed/chair/sofa/teal, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new /datum/stack_recipe("teal sofa left", /obj/structure/bed/chair/sofa/teal/left, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new /datum/stack_recipe("teal sofa right", /obj/structure/bed/chair/sofa/teal/right, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new /datum/stack_recipe("teal sofa corner", /obj/structure/bed/chair/sofa/teal/corner, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new /datum/stack_recipe("black sofa middle", /obj/structure/bed/chair/sofa/black, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new /datum/stack_recipe("black sofa left", /obj/structure/bed/chair/sofa/black/left, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new /datum/stack_recipe("black sofa right", /obj/structure/bed/chair/sofa/black/right, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new /datum/stack_recipe("black sofa corner", /obj/structure/bed/chair/sofa/black/corner, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new /datum/stack_recipe("green sofa middle", /obj/structure/bed/chair/sofa/green, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new /datum/stack_recipe("green sofa left", /obj/structure/bed/chair/sofa/green/left, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new /datum/stack_recipe("green sofa right", /obj/structure/bed/chair/sofa/green/right, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new /datum/stack_recipe("green sofa corner", /obj/structure/bed/chair/sofa/green/corner, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new /datum/stack_recipe("purple sofa middle", /obj/structure/bed/chair/sofa/purp, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new /datum/stack_recipe("purple sofa left", /obj/structure/bed/chair/sofa/purp/left, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new /datum/stack_recipe("purple sofa right", /obj/structure/bed/chair/sofa/purp/right, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new /datum/stack_recipe("purple sofa corner", /obj/structure/bed/chair/sofa/purp/corner, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new /datum/stack_recipe("blue sofa middle", /obj/structure/bed/chair/sofa/blue, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new /datum/stack_recipe("blue sofa left", /obj/structure/bed/chair/sofa/blue/left, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new /datum/stack_recipe("blue sofa right", /obj/structure/bed/chair/sofa/blue/right, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new /datum/stack_recipe("blue sofa corner", /obj/structure/bed/chair/sofa/blue/corner, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new /datum/stack_recipe("beige sofa middle", /obj/structure/bed/chair/sofa/beige, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new /datum/stack_recipe("beige sofa left", /obj/structure/bed/chair/sofa/beige/left, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new /datum/stack_recipe("beige sofa right", /obj/structure/bed/chair/sofa/beige/right, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new /datum/stack_recipe("beige sofa corner", /obj/structure/bed/chair/sofa/beige/corner, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new /datum/stack_recipe("lime sofa middle", /obj/structure/bed/chair/sofa/lime, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new /datum/stack_recipe("lime sofa left", /obj/structure/bed/chair/sofa/lime/left, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new /datum/stack_recipe("lime sofa right", /obj/structure/bed/chair/sofa/lime/right, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new /datum/stack_recipe("lime sofa corner", /obj/structure/bed/chair/sofa/lime/corner, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new /datum/stack_recipe("yellow sofa middle", /obj/structure/bed/chair/sofa/yellow, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new /datum/stack_recipe("yellow sofa left", /obj/structure/bed/chair/sofa/yellow/left, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new /datum/stack_recipe("yellow sofa right", /obj/structure/bed/chair/sofa/yellow/right, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new /datum/stack_recipe("yellow sofa corner", /obj/structure/bed/chair/sofa/yellow/corner, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new /datum/stack_recipe("orange sofa middle", /obj/structure/bed/chair/sofa/orange, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new /datum/stack_recipe("orange sofa left", /obj/structure/bed/chair/sofa/orange/left, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new /datum/stack_recipe("orange sofa right", /obj/structure/bed/chair/sofa/orange/right, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new /datum/stack_recipe("orange sofa corner", /obj/structure/bed/chair/sofa/orange/corner, 1, one_per_turf = 1, on_floor = 1), \
|
||||
)),
|
||||
)
|
||||
28
code/modules/materials/materials/organic/animal_products.dm
Normal file
28
code/modules/materials/materials/organic/animal_products.dm
Normal file
@@ -0,0 +1,28 @@
|
||||
/datum/material/diona
|
||||
name = "biomass"
|
||||
icon_colour = null
|
||||
stack_type = null
|
||||
integrity = 600
|
||||
icon_base = "diona"
|
||||
icon_reinf = "noreinf"
|
||||
|
||||
/datum/material/diona/place_dismantled_product()
|
||||
return
|
||||
|
||||
/datum/material/diona/place_dismantled_girder(var/turf/target)
|
||||
spawn_diona_nymph(target)
|
||||
|
||||
/datum/material/chitin
|
||||
name = MAT_CHITIN
|
||||
icon_colour = "#8d6653"
|
||||
stack_type = /obj/item/stack/material/chitin
|
||||
stack_origin_tech = list(TECH_MATERIAL = 3, TECH_BIO = 4)
|
||||
icon_base = "solid"
|
||||
icon_reinf = "reinf_mesh"
|
||||
integrity = 60
|
||||
weight = 10
|
||||
ignition_point = T0C+400
|
||||
melting_point = T0C+500
|
||||
protectiveness = 20
|
||||
conductive = 0
|
||||
supply_conversion_value = 4
|
||||
125
code/modules/materials/materials/organic/cloth.dm
Normal file
125
code/modules/materials/materials/organic/cloth.dm
Normal file
@@ -0,0 +1,125 @@
|
||||
/datum/material/cloth
|
||||
name = "cloth"
|
||||
stack_origin_tech = list(TECH_MATERIAL = 2)
|
||||
door_icon_base = "wood"
|
||||
ignition_point = T0C+232
|
||||
melting_point = T0C+300
|
||||
protectiveness = 1 // 4%
|
||||
flags = MATERIAL_PADDING
|
||||
conductive = 0
|
||||
integrity = 40
|
||||
pass_stack_colors = TRUE
|
||||
supply_conversion_value = 2
|
||||
|
||||
/datum/material/cloth/generate_recipes()
|
||||
recipes = list(
|
||||
new /datum/stack_recipe("woven net", /obj/item/weapon/material/fishing_net, 10, time = 30 SECONDS, pass_stack_color = TRUE, supplied_material = "[name]"),
|
||||
new /datum/stack_recipe("bedsheet", /obj/item/weapon/bedsheet, 10, time = 30 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("uniform", /obj/item/clothing/under/color/white, 8, time = 15 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("foot wraps", /obj/item/clothing/shoes/footwraps, 2, time = 5 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("gloves", /obj/item/clothing/gloves/white, 2, time = 5 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("wig", /obj/item/clothing/head/powdered_wig, 4, time = 10 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("philosopher's wig", /obj/item/clothing/head/philosopher_wig, 50, time = 2 MINUTES, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("taqiyah", /obj/item/clothing/head/taqiyah, 3, time = 6 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("turban", /obj/item/clothing/head/turban, 3, time = 6 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("hijab", /obj/item/clothing/head/hijab, 3, time = 6 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("kippa", /obj/item/clothing/head/kippa, 3, time = 6 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("scarf", /obj/item/clothing/accessory/scarf/white, 4, time = 5 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("baggy pants", /obj/item/clothing/under/pants/baggy/white, 8, time = 10 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("belt pouch", /obj/item/weapon/storage/belt/fannypack/white, 25, time = 1 MINUTE, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("crude bandage", /obj/item/stack/medical/crude_pack, 1, time = 2 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("empty sandbag", /obj/item/stack/emptysandbag, 2, time = 2 SECONDS, pass_stack_color = TRUE, supplied_material = "[name]")
|
||||
)
|
||||
|
||||
/datum/material/cloth/syncloth
|
||||
name = "syncloth"
|
||||
stack_origin_tech = list(TECH_MATERIAL = 3, TECH_BIO = 2)
|
||||
ignition_point = T0C+532
|
||||
melting_point = T0C+600
|
||||
integrity = 200
|
||||
protectiveness = 15 // 4%
|
||||
pass_stack_colors = TRUE
|
||||
supply_conversion_value = 3
|
||||
|
||||
/datum/material/cloth/teal
|
||||
name = "teal"
|
||||
display_name ="teal"
|
||||
use_name = "teal cloth"
|
||||
icon_colour = "#00EAFA"
|
||||
|
||||
/datum/material/cloth/black
|
||||
name = "black"
|
||||
display_name = "black"
|
||||
use_name = "black cloth"
|
||||
icon_colour = "#505050"
|
||||
|
||||
/datum/material/cloth/green
|
||||
name = "green"
|
||||
display_name = "green"
|
||||
use_name = "green cloth"
|
||||
icon_colour = "#01C608"
|
||||
|
||||
/datum/material/cloth/puple
|
||||
name = "purple"
|
||||
display_name = "purple"
|
||||
use_name = "purple cloth"
|
||||
icon_colour = "#9C56C4"
|
||||
|
||||
/datum/material/cloth/blue
|
||||
name = "blue"
|
||||
display_name = "blue"
|
||||
use_name = "blue cloth"
|
||||
icon_colour = "#6B6FE3"
|
||||
|
||||
/datum/material/cloth/beige
|
||||
name = "beige"
|
||||
display_name = "beige"
|
||||
use_name = "beige cloth"
|
||||
icon_colour = "#E8E7C8"
|
||||
|
||||
/datum/material/cloth/lime
|
||||
name = "lime"
|
||||
display_name = "lime"
|
||||
use_name = "lime cloth"
|
||||
icon_colour = "#62E36C"
|
||||
|
||||
/datum/material/cloth/yellow
|
||||
name = "yellow"
|
||||
display_name = "yellow"
|
||||
use_name = "yellow cloth"
|
||||
icon_colour = "#EEF573"
|
||||
|
||||
/datum/material/cloth/orange
|
||||
name = "orange"
|
||||
display_name = "orange"
|
||||
use_name = "orange cloth"
|
||||
icon_colour = "#E3BF49"
|
||||
|
||||
|
||||
|
||||
//CHOMPstation Removal Start: Moved to materials_ch and changed to allow for material var
|
||||
/*
|
||||
/material/carpet
|
||||
name = "carpet"
|
||||
display_name = "comfy"
|
||||
use_name = "red upholstery"
|
||||
icon_colour = "#DA020A"
|
||||
flags = MATERIAL_PADDING
|
||||
ignition_point = T0C+232
|
||||
melting_point = T0C+300
|
||||
sheet_singular_name = "tile"
|
||||
sheet_plural_name = "tiles"
|
||||
protectiveness = 1 // 4%
|
||||
conductive = 0
|
||||
*/
|
||||
//CHOMPstation Removal End
|
||||
|
||||
/datum/material/cotton
|
||||
name = "cotton"
|
||||
display_name ="cotton"
|
||||
icon_colour = "#FFFFFF"
|
||||
flags = MATERIAL_PADDING
|
||||
ignition_point = T0C+232
|
||||
melting_point = T0C+300
|
||||
protectiveness = 1 // 4%
|
||||
conductive = 0
|
||||
@@ -1,67 +1,67 @@
|
||||
//Red Color Fix
|
||||
/datum/material/cloth_red
|
||||
name = "carpet" //This is the easiest fix but god do i hate it -shark
|
||||
display_name = "red"
|
||||
use_name = "red cloth"
|
||||
icon_colour = "#DA020A"
|
||||
flags = MATERIAL_PADDING
|
||||
ignition_point = T0C+232
|
||||
melting_point = T0C+300
|
||||
protectiveness = 1 // 4%
|
||||
conductive = 0
|
||||
|
||||
//CARPET materials
|
||||
|
||||
/datum/material/carpet
|
||||
name = MAT_CARPET
|
||||
display_name = "comfy"
|
||||
use_name = "upholstery"
|
||||
icon_colour = "#DB2626"
|
||||
flags = MATERIAL_PADDING
|
||||
stack_type = /obj/item/stack/tile/carpet
|
||||
ignition_point = T0C+232
|
||||
melting_point = T0C+300
|
||||
sheet_singular_name = "tile"
|
||||
sheet_plural_name = "tiles"
|
||||
protectiveness = 1 // 4%
|
||||
conductive = 0
|
||||
|
||||
/datum/material/carpet/teal
|
||||
name = MAT_CARPET_TEAL
|
||||
icon_colour = "#007575"
|
||||
stack_type = /obj/item/stack/tile/carpet/teal
|
||||
|
||||
/datum/material/carpet/bcarpet
|
||||
name = MAT_CARPET_BLACK
|
||||
icon_colour = "#1B171E"
|
||||
stack_type = /obj/item/stack/tile/carpet/bcarpet
|
||||
|
||||
/datum/material/carpet/blucarpet
|
||||
name = MAT_CARPET_BLUE
|
||||
icon_colour = "#122CDF"
|
||||
stack_type = /obj/item/stack/tile/carpet/blucarpet
|
||||
|
||||
/datum/material/carpet/turcarpet
|
||||
name = MAT_CARPET_TURQUOISE
|
||||
icon_colour = "#41A997"
|
||||
stack_type = /obj/item/stack/tile/carpet/turcarpet
|
||||
|
||||
/datum/material/carpet/sblucarpet
|
||||
name = MAT_CARPET_SILVERBLUE
|
||||
icon_colour = "#547EC6"
|
||||
stack_type = /obj/item/stack/tile/carpet/sblucarpet
|
||||
|
||||
/datum/material/carpet/gaycarpet
|
||||
name = MAT_CARPET_PINK
|
||||
icon_colour = "#E12C87"
|
||||
stack_type = /obj/item/stack/tile/carpet/gaycarpet
|
||||
|
||||
/datum/material/carpet/purcarpet
|
||||
name = MAT_CARPET_PURPLE
|
||||
icon_colour = "#B500A6"
|
||||
stack_type = /obj/item/stack/tile/carpet/purcarpet
|
||||
|
||||
/datum/material/carpet/oracarpet
|
||||
name = MAT_CARPET_ORANGE
|
||||
icon_colour = "#D1D000"
|
||||
stack_type = /obj/item/stack/tile/carpet/oracarpet
|
||||
//Red Color Fix
|
||||
/datum/material/cloth_red
|
||||
name = "carpet" //This is the easiest fix but god do i hate it -shark
|
||||
display_name = "red"
|
||||
use_name = "red cloth"
|
||||
icon_colour = "#DA020A"
|
||||
flags = MATERIAL_PADDING
|
||||
ignition_point = T0C+232
|
||||
melting_point = T0C+300
|
||||
protectiveness = 1 // 4%
|
||||
conductive = 0
|
||||
|
||||
//CARPET materials
|
||||
|
||||
/datum/material/carpet
|
||||
name = MAT_CARPET
|
||||
display_name = "comfy"
|
||||
use_name = "upholstery"
|
||||
icon_colour = "#DB2626"
|
||||
flags = MATERIAL_PADDING
|
||||
stack_type = /obj/item/stack/tile/carpet
|
||||
ignition_point = T0C+232
|
||||
melting_point = T0C+300
|
||||
sheet_singular_name = "tile"
|
||||
sheet_plural_name = "tiles"
|
||||
protectiveness = 1 // 4%
|
||||
conductive = 0
|
||||
|
||||
/datum/material/carpet/teal
|
||||
name = MAT_CARPET_TEAL
|
||||
icon_colour = "#007575"
|
||||
stack_type = /obj/item/stack/tile/carpet/teal
|
||||
|
||||
/datum/material/carpet/bcarpet
|
||||
name = MAT_CARPET_BLACK
|
||||
icon_colour = "#1B171E"
|
||||
stack_type = /obj/item/stack/tile/carpet/bcarpet
|
||||
|
||||
/datum/material/carpet/blucarpet
|
||||
name = MAT_CARPET_BLUE
|
||||
icon_colour = "#122CDF"
|
||||
stack_type = /obj/item/stack/tile/carpet/blucarpet
|
||||
|
||||
/datum/material/carpet/turcarpet
|
||||
name = MAT_CARPET_TURQUOISE
|
||||
icon_colour = "#41A997"
|
||||
stack_type = /obj/item/stack/tile/carpet/turcarpet
|
||||
|
||||
/datum/material/carpet/sblucarpet
|
||||
name = MAT_CARPET_SILVERBLUE
|
||||
icon_colour = "#547EC6"
|
||||
stack_type = /obj/item/stack/tile/carpet/sblucarpet
|
||||
|
||||
/datum/material/carpet/gaycarpet
|
||||
name = MAT_CARPET_PINK
|
||||
icon_colour = "#E12C87"
|
||||
stack_type = /obj/item/stack/tile/carpet/gaycarpet
|
||||
|
||||
/datum/material/carpet/purcarpet
|
||||
name = MAT_CARPET_PURPLE
|
||||
icon_colour = "#B500A6"
|
||||
stack_type = /obj/item/stack/tile/carpet/purcarpet
|
||||
|
||||
/datum/material/carpet/oracarpet
|
||||
name = MAT_CARPET_ORANGE
|
||||
icon_colour = "#D1D000"
|
||||
stack_type = /obj/item/stack/tile/carpet/oracarpet
|
||||
37
code/modules/materials/materials/organic/leather.dm
Normal file
37
code/modules/materials/materials/organic/leather.dm
Normal file
@@ -0,0 +1,37 @@
|
||||
/datum/material/leather
|
||||
name = MAT_LEATHER
|
||||
display_name = "plainleather"
|
||||
icon_colour = "#5C4831"
|
||||
stack_type = /obj/item/stack/material/leather
|
||||
stack_origin_tech = list(TECH_MATERIAL = 2, TECH_BIO = 2)
|
||||
flags = MATERIAL_PADDING
|
||||
ignition_point = T0C+300
|
||||
melting_point = T0C+300
|
||||
protectiveness = 3 // 13%
|
||||
conductive = 0
|
||||
integrity = 40
|
||||
supply_conversion_value = 3
|
||||
|
||||
/datum/material/leather/generate_recipes()
|
||||
recipes = list(
|
||||
new /datum/stack_recipe("bedsheet", /obj/item/weapon/bedsheet, 10, time = 30 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("uniform", /obj/item/clothing/under/color/white, 8, time = 15 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("foot wraps", /obj/item/clothing/shoes/footwraps, 2, time = 5 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("gloves", /obj/item/clothing/gloves/white, 2, time = 5 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("wig", /obj/item/clothing/head/powdered_wig, 4, time = 10 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("philosopher's wig", /obj/item/clothing/head/philosopher_wig, 50, time = 2 MINUTES, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("taqiyah", /obj/item/clothing/head/taqiyah, 3, time = 6 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("turban", /obj/item/clothing/head/turban, 3, time = 6 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("hijab", /obj/item/clothing/head/hijab, 3, time = 6 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("kippa", /obj/item/clothing/head/kippa, 3, time = 6 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("scarf", /obj/item/clothing/accessory/scarf/white, 4, time = 5 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("baggy pants", /obj/item/clothing/under/pants/baggy/white, 8, time = 10 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("belt pouch", /obj/item/weapon/storage/belt/fannypack/white, 25, time = 1 MINUTE, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("crude [display_name] bandage", /obj/item/stack/medical/crude_pack, 1, time = 2 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("[display_name] net", /obj/item/weapon/material/fishing_net, 10, time = 5 SECONDS, supplied_material = "[name]", pass_stack_color = TRUE),
|
||||
new /datum/stack_recipe("[display_name] ring", /obj/item/clothing/gloves/ring/material, 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE),
|
||||
new /datum/stack_recipe("[display_name] bracelet", /obj/item/clothing/accessory/bracelet/material, 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE),
|
||||
new /datum/stack_recipe("[display_name] armor plate", /obj/item/weapon/material/armor_plating, 1, time = 20, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE),
|
||||
new /datum/stack_recipe("empty sandbag", /obj/item/stack/emptysandbag, 2, time = 2 SECONDS, pass_stack_color = TRUE, supplied_material = "[name]"),
|
||||
new /datum/stack_recipe("whip", /obj/item/weapon/material/whip, 5, time = 15 SECONDS, pass_stack_color = TRUE, supplied_material = "[name]")
|
||||
)
|
||||
45
code/modules/materials/materials/organic/resin.dm
Normal file
45
code/modules/materials/materials/organic/resin.dm
Normal file
@@ -0,0 +1,45 @@
|
||||
/datum/material/resin
|
||||
name = "resin"
|
||||
icon_colour = "#35343a"
|
||||
icon_base = "resin"
|
||||
dooropen_noise = 'sound/effects/attackblob.ogg'
|
||||
door_icon_base = "resin"
|
||||
icon_reinf = "reinf_mesh"
|
||||
melting_point = T0C+300
|
||||
sheet_singular_name = "blob"
|
||||
sheet_plural_name = "blobs"
|
||||
conductive = 0
|
||||
explosion_resistance = 60
|
||||
radiation_resistance = 10
|
||||
stack_origin_tech = list(TECH_MATERIAL = 8, TECH_PHORON = 4, TECH_BLUESPACE = 4, TECH_BIO = 7)
|
||||
stack_type = /obj/item/stack/material/resin
|
||||
|
||||
/datum/material/resin/can_open_material_door(var/mob/living/user)
|
||||
var/mob/living/carbon/M = user
|
||||
if(istype(M) && locate(/obj/item/organ/internal/xenos/hivenode) in M.internal_organs)
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/datum/material/resin/wall_touch_special(var/turf/simulated/wall/W, var/mob/living/L)
|
||||
var/mob/living/carbon/M = L
|
||||
if(istype(M) && locate(/obj/item/organ/internal/xenos/hivenode) in M.internal_organs)
|
||||
to_chat(M, "<span class='alien'>\The [W] shudders under your touch, starting to become porous.</span>")
|
||||
playsound(W, 'sound/effects/attackblob.ogg', 50, 1)
|
||||
if(do_after(L, 5 SECONDS))
|
||||
spawn(2)
|
||||
playsound(W, 'sound/effects/attackblob.ogg', 100, 1)
|
||||
W.dismantle_wall()
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/datum/material/resin/generate_recipes()
|
||||
recipes = list(
|
||||
new /datum/stack_recipe("[display_name] door", /obj/structure/simple_door/resin, 10, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE),
|
||||
new /datum/stack_recipe("[display_name] barricade", /obj/effect/alien/resin/wall, 5, time = 5 SECONDS, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("[display_name] nest", /obj/structure/bed/nest, 2, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE),
|
||||
new /datum/stack_recipe("[display_name] wall girders", /obj/structure/girder/resin, 2, time = 5 SECONDS, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE),
|
||||
new /datum/stack_recipe("crude [display_name] bandage", /obj/item/stack/medical/crude_pack, 1, time = 2 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("[display_name] net", /obj/item/weapon/material/fishing_net, 10, time = 5 SECONDS, supplied_material = "[name]", pass_stack_color = TRUE),
|
||||
new /datum/stack_recipe("[display_name] membrane", /obj/effect/alien/resin/membrane, 1, time = 2 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("[display_name] node", /obj/effect/alien/weeds/node, 1, time = 4 SECONDS, recycle_material = "[name]")
|
||||
)
|
||||
84
code/modules/materials/materials/organic/wood.dm
Normal file
84
code/modules/materials/materials/organic/wood.dm
Normal file
@@ -0,0 +1,84 @@
|
||||
/datum/material/wood
|
||||
name = MAT_WOOD
|
||||
stack_type = /obj/item/stack/material/wood
|
||||
icon_colour = "#9c5930"
|
||||
integrity = 50
|
||||
icon_base = "wood"
|
||||
explosion_resistance = 2
|
||||
shard_type = SHARD_SPLINTER
|
||||
shard_can_repair = 0 // you can't weld splinters back into planks
|
||||
hardness = 15
|
||||
weight = 18
|
||||
protectiveness = 8 // 28%
|
||||
conductive = 0
|
||||
conductivity = 1
|
||||
melting_point = T0C+300 //okay, not melting in this case, but hot enough to destroy wood
|
||||
ignition_point = T0C+288
|
||||
stack_origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 1)
|
||||
dooropen_noise = 'sound/effects/doorcreaky.ogg'
|
||||
door_icon_base = "wood"
|
||||
destruction_desc = "splinters"
|
||||
sheet_singular_name = "plank"
|
||||
sheet_plural_name = "planks"
|
||||
|
||||
/datum/material/wood/generate_recipes()
|
||||
..()
|
||||
recipes += list(
|
||||
new /datum/stack_recipe("oar", /obj/item/weapon/oar, 2, time = 30, supplied_material = "[name]", pass_stack_color = TRUE),
|
||||
new /datum/stack_recipe("boat", /obj/vehicle/boat, 20, time = 10 SECONDS, supplied_material = "[name]", pass_stack_color = TRUE),
|
||||
new /datum/stack_recipe("dragon boat", /obj/vehicle/boat/dragon, 50, time = 30 SECONDS, supplied_material = "[name]", pass_stack_color = TRUE),
|
||||
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/weapon/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("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/weapon/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]"),
|
||||
new /datum/stack_recipe("beehive assembly", /obj/item/beehive_assembly, 4, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("beehive frame", /obj/item/honey_frame, 1, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("book shelf", /obj/structure/bookcase, 5, time = 15, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("noticeboard frame", /obj/item/frame/noticeboard, 4, time = 5, one_per_turf = 0, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("wooden bucket", /obj/item/weapon/reagent_containers/glass/bucket/wood, 2, time = 4, one_per_turf = 0, on_floor = 0, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("coilgun stock", /obj/item/weapon/coilgun_assembly, 5, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("crude fishing rod", /obj/item/weapon/material/fishing_rod/built, 8, time = 10 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("wooden standup figure", /obj/structure/barricade/cutout, 5, time = 10 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"), //VOREStation Add
|
||||
new /datum/stack_recipe("noticeboard", /obj/structure/noticeboard, 1, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("tanning rack", /obj/structure/tanning_rack, 3, one_per_turf = TRUE, time = 20, on_floor = TRUE, supplied_material = "[name]")
|
||||
)
|
||||
|
||||
/datum/material/wood/sif
|
||||
name = MAT_SIFWOOD
|
||||
stack_type = /obj/item/stack/material/wood/sif
|
||||
icon_colour = "#0099cc" // Cyan-ish
|
||||
stack_origin_tech = list(TECH_MATERIAL = 2, TECH_BIO = 2) // Alien wood would presumably be more interesting to the analyzer.
|
||||
|
||||
/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)
|
||||
for(var/datum/stack_recipe/r_recipe in recipes)
|
||||
if(r_recipe.title == "wood floor tile")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
if(r_recipe.title == "wooden chair")
|
||||
recipes -= r_recipe
|
||||
continue
|
||||
|
||||
/datum/material/wood/log
|
||||
name = MAT_LOG
|
||||
icon_base = "log"
|
||||
stack_type = /obj/item/stack/material/log
|
||||
sheet_singular_name = null
|
||||
sheet_plural_name = "pile"
|
||||
pass_stack_colors = TRUE
|
||||
supply_conversion_value = 1
|
||||
|
||||
/datum/material/wood/log/generate_recipes()
|
||||
recipes = list(
|
||||
new /datum/stack_recipe("bonfire", /obj/structure/bonfire, 5, time = 50, supplied_material = "[name]", pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
)
|
||||
|
||||
/datum/material/wood/log/sif
|
||||
name = MAT_SIFLOG
|
||||
icon_colour = "#0099cc" // Cyan-ish
|
||||
stack_origin_tech = list(TECH_MATERIAL = 2, TECH_BIO = 2)
|
||||
stack_type = /obj/item/stack/material/log/sif
|
||||
9
code/modules/materials/materials/organic/wood_ch.dm
Normal file
9
code/modules/materials/materials/organic/wood_ch.dm
Normal file
@@ -0,0 +1,9 @@
|
||||
|
||||
/datum/material/wood/generate_recipes() //Is a little sad we cant have lovely wooden sofa
|
||||
. = ..()
|
||||
recipes += new/datum/stack_recipe_list("sofas", list( \
|
||||
new /datum/stack_recipe("sofa middle", /obj/structure/bed/chair/sofa, 1, one_per_turf = 1, on_floor = 1, supplied_material = "[name]"), \
|
||||
new /datum/stack_recipe("sofa left", /obj/structure/bed/chair/sofa/left, 1, one_per_turf = 1, on_floor = 1, supplied_material = "[name]"), \
|
||||
new /datum/stack_recipe("sofa right", /obj/structure/bed/chair/sofa/right, 1, one_per_turf = 1, on_floor = 1, supplied_material = "[name]"), \
|
||||
new /datum/stack_recipe("sofa corner", /obj/structure/bed/chair/sofa/corner, 1, one_per_turf = 1, on_floor = 1, supplied_material = "[name]"), \
|
||||
))
|
||||
32
code/modules/materials/materials/other_vr.dm
Normal file
32
code/modules/materials/materials/other_vr.dm
Normal file
@@ -0,0 +1,32 @@
|
||||
/datum/material/flesh
|
||||
name = "flesh"
|
||||
display_name = "chunk of flesh"
|
||||
icon_colour = "#dd90aa"
|
||||
sheet_singular_name = "meat"
|
||||
sheet_plural_name = "meats"
|
||||
integrity = 1200
|
||||
melting_point = 6000
|
||||
explosion_resistance = 200
|
||||
hardness = 500
|
||||
weight = 500
|
||||
|
||||
/datum/material/fluff //This is to allow for 2 handed weapons that don't want to have a prefix.
|
||||
name = " "
|
||||
display_name = ""
|
||||
icon_colour = "#000000"
|
||||
sheet_singular_name = "fluff"
|
||||
sheet_plural_name = "fluffs"
|
||||
hardness = 60
|
||||
weight = 20 //Strong as iron.
|
||||
|
||||
/datum/material/darkglass
|
||||
name = "darkglass"
|
||||
display_name = "darkglass"
|
||||
icon_base = "darkglass"
|
||||
icon_colour = "#FFFFFF"
|
||||
|
||||
/datum/material/fancyblack
|
||||
name = "fancyblack"
|
||||
display_name = "fancyblack"
|
||||
icon_base = "fancyblack"
|
||||
icon_colour = "#FFFFFF"
|
||||
88
code/modules/materials/materials/plastic.dm
Normal file
88
code/modules/materials/materials/plastic.dm
Normal file
@@ -0,0 +1,88 @@
|
||||
/datum/material/plastic
|
||||
name = "plastic"
|
||||
stack_type = /obj/item/stack/material/plastic
|
||||
flags = MATERIAL_BRITTLE
|
||||
icon_base = "solid"
|
||||
icon_reinf = "reinf_over"
|
||||
icon_colour = "#CCCCCC"
|
||||
hardness = 10
|
||||
weight = 12
|
||||
protectiveness = 5 // 20%
|
||||
conductive = 0
|
||||
conductivity = 2 // For the sake of material armor diversity, we're gonna pretend this plastic is a good insulator.
|
||||
melting_point = T0C+371 //assuming heat resistant plastic
|
||||
stack_origin_tech = list(TECH_MATERIAL = 3)
|
||||
|
||||
/datum/material/plastic/generate_recipes()
|
||||
..()
|
||||
recipes += list(
|
||||
new /datum/stack_recipe("plastic crate", /obj/structure/closet/crate/plastic, 10, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("plastic bag", /obj/item/weapon/storage/bag/plasticbag, 3, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("blood pack", /obj/item/weapon/reagent_containers/blood/empty, 4, on_floor = 0, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("reagent dispenser cartridge (large)", /obj/item/weapon/reagent_containers/chem_disp_cartridge, 5, on_floor=0, pass_stack_color = TRUE, recycle_material = "[name]"), // 500u
|
||||
new /datum/stack_recipe("reagent dispenser cartridge (med)", /obj/item/weapon/reagent_containers/chem_disp_cartridge/medium, 3, on_floor=0, pass_stack_color = TRUE, recycle_material = "[name]"), // 250u
|
||||
new /datum/stack_recipe("reagent dispenser cartridge (small)", /obj/item/weapon/reagent_containers/chem_disp_cartridge/small, 1, on_floor=0, pass_stack_color = TRUE, recycle_material = "[name]"), // 100u
|
||||
new /datum/stack_recipe("white floor tile", /obj/item/stack/tile/floor/white, 1, 4, 20, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("freezer floor tile", /obj/item/stack/tile/floor/freezer, 1, 4, 20, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("shower curtain", /obj/structure/curtain, 4, time = 15, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("plastic flaps", /obj/structure/plasticflaps, 4, time = 25, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("water-cooler", /obj/structure/reagent_dispensers/water_cooler, 4, time = 10, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("lampshade", /obj/item/weapon/lampshade, 1, time = 1, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("plastic net", /obj/item/weapon/material/fishing_net, 25, time = 1 MINUTE, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("plastic fishtank", /obj/item/glass_jar/fish/plastic, 2, time = 30 SECONDS, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("reagent tubing", /obj/item/stack/hose, 1, 4, 20, pass_stack_color = TRUE, recycle_material = "[name]")
|
||||
)
|
||||
|
||||
/datum/material/cardboard
|
||||
name = "cardboard"
|
||||
stack_type = /obj/item/stack/material/cardboard
|
||||
flags = MATERIAL_BRITTLE
|
||||
integrity = 10
|
||||
icon_base = "solid"
|
||||
icon_reinf = "reinf_over"
|
||||
icon_colour = "#AAAAAA"
|
||||
hardness = 1
|
||||
weight = 1
|
||||
protectiveness = 0 // 0%
|
||||
conductive = 0
|
||||
ignition_point = T0C+232 //"the temperature at which book-paper catches fire, and burns." close enough
|
||||
melting_point = T0C+232 //temperature at which cardboard walls would be destroyed
|
||||
stack_origin_tech = list(TECH_MATERIAL = 1)
|
||||
door_icon_base = "wood"
|
||||
destruction_desc = "crumples"
|
||||
radiation_resistance = 1
|
||||
pass_stack_colors = TRUE
|
||||
|
||||
/datum/material/cardboard/generate_recipes()
|
||||
..()
|
||||
recipes += list(
|
||||
new /datum/stack_recipe("box", /obj/item/weapon/storage/box, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("donut box", /obj/item/weapon/storage/box/donut/empty, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("egg box", /obj/item/weapon/storage/fancy/egg_box, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("light tubes box", /obj/item/weapon/storage/box/lights/tubes, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("light bulbs box", /obj/item/weapon/storage/box/lights/bulbs, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("mouse traps box", /obj/item/weapon/storage/box/mousetraps, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("cardborg suit", /obj/item/clothing/suit/cardborg, 3, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("cardborg helmet", /obj/item/clothing/head/cardborg, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("pizza box", /obj/item/pizzabox, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe_list("folders",list(
|
||||
new /datum/stack_recipe("blue folder", /obj/item/weapon/folder/blue, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("grey folder", /obj/item/weapon/folder, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("red folder", /obj/item/weapon/folder/red, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("white folder", /obj/item/weapon/folder/white, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("yellow folder", /obj/item/weapon/folder/yellow, recycle_material = "[name]")
|
||||
))
|
||||
)
|
||||
|
||||
/datum/material/toy_foam
|
||||
name = "foam"
|
||||
display_name = "foam"
|
||||
use_name = "foam"
|
||||
flags = MATERIAL_PADDING
|
||||
ignition_point = T0C+232
|
||||
melting_point = T0C+300
|
||||
icon_colour = "#ff9900"
|
||||
hardness = 1
|
||||
weight = 1
|
||||
protectiveness = 0 // 0%
|
||||
conductive = 0
|
||||
9
code/modules/materials/materials/plastic_ch.dm
Normal file
9
code/modules/materials/materials/plastic_ch.dm
Normal file
@@ -0,0 +1,9 @@
|
||||
/datum/material/plastic/generate_recipes()
|
||||
. = ..()
|
||||
recipes += new/datum/stack_recipe_list("sofas", list( \
|
||||
new /datum/stack_recipe("sofa middle", /obj/structure/bed/chair/sofa, 1, one_per_turf = 1, on_floor = 1, supplied_material = "[name]"), \
|
||||
new /datum/stack_recipe("sofa left", /obj/structure/bed/chair/sofa/left, 1, one_per_turf = 1, on_floor = 1, supplied_material = "[name]"), \
|
||||
new /datum/stack_recipe("sofa right", /obj/structure/bed/chair/sofa/right, 1, one_per_turf = 1, on_floor = 1, supplied_material = "[name]"), \
|
||||
new /datum/stack_recipe("sofa corner", /obj/structure/bed/chair/sofa/corner, 1, one_per_turf = 1, on_floor = 1, supplied_material = "[name]"), \
|
||||
new /datum/stack_recipe("Feeder", /obj/machinery/feeder, 4, time = 20, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
|
||||
))
|
||||
56
code/modules/materials/materials/snow.dm
Normal file
56
code/modules/materials/materials/snow.dm
Normal file
@@ -0,0 +1,56 @@
|
||||
/datum/material/snow
|
||||
name = MAT_SNOW
|
||||
stack_type = /obj/item/stack/material/snow
|
||||
flags = MATERIAL_BRITTLE
|
||||
icon_base = "solid"
|
||||
icon_reinf = "reinf_over"
|
||||
icon_colour = "#FFFFFF"
|
||||
integrity = 1
|
||||
hardness = 1
|
||||
weight = 1
|
||||
protectiveness = 0 // 0%
|
||||
stack_origin_tech = list(TECH_MATERIAL = 1)
|
||||
melting_point = T0C+1
|
||||
destruction_desc = "crumples"
|
||||
sheet_singular_name = "pile"
|
||||
sheet_plural_name = "pile" //Just a bigger pile
|
||||
radiation_resistance = 1
|
||||
|
||||
/datum/material/snow/generate_recipes()
|
||||
recipes = list(
|
||||
new /datum/stack_recipe("snowball", /obj/item/weapon/material/snow/snowball, 1, time = 10, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("snow brick", /obj/item/stack/material/snowbrick, 2, time = 10, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("snowman", /obj/structure/snowman, 2, time = 15, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("snow robot", /obj/structure/snowman/borg, 2, time = 10, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("snow spider", /obj/structure/snowman/spider, 3, time = 20, recycle_material = "[name]")
|
||||
)
|
||||
|
||||
/datum/material/snowbrick //only slightly stronger than snow, used to make igloos mostly
|
||||
name = "packed snow"
|
||||
flags = MATERIAL_BRITTLE
|
||||
stack_type = /obj/item/stack/material/snowbrick
|
||||
icon_base = "stone"
|
||||
icon_reinf = "reinf_stone"
|
||||
icon_colour = "#D8FDFF"
|
||||
integrity = 50
|
||||
weight = 2
|
||||
hardness = 2
|
||||
protectiveness = 0 // 0%
|
||||
stack_origin_tech = list(TECH_MATERIAL = 1)
|
||||
melting_point = T0C+1
|
||||
destruction_desc = "crumbles"
|
||||
sheet_singular_name = "brick"
|
||||
sheet_plural_name = "bricks"
|
||||
radiation_resistance = 1
|
||||
|
||||
/datum/material/snowbrick/generate_recipes()
|
||||
recipes = list(
|
||||
new /datum/stack_recipe("[display_name] door", /obj/structure/simple_door, 10, one_per_turf = 1, on_floor = 1, supplied_material = "[name]"),
|
||||
new /datum/stack_recipe("[display_name] barricade", /obj/structure/barricade, 5, time = 50, one_per_turf = 1, on_floor = 1, supplied_material = "[name]"),
|
||||
new /datum/stack_recipe("[display_name] stool", /obj/item/weapon/stool, one_per_turf = 1, on_floor = 1, supplied_material = "[name]"),
|
||||
new /datum/stack_recipe("[display_name] chair", /obj/structure/bed/chair, one_per_turf = 1, on_floor = 1, supplied_material = "[name]"),
|
||||
new /datum/stack_recipe("[display_name] bed", /obj/structure/bed, 2, one_per_turf = 1, on_floor = 1, supplied_material = "[name]"),
|
||||
new /datum/stack_recipe("[display_name] double bed", /obj/structure/bed/double, 4, one_per_turf = 1, on_floor = 1, supplied_material = "[name]"),
|
||||
new /datum/stack_recipe("[display_name] wall girders", /obj/structure/girder, 2, time = 50, one_per_turf = 1, on_floor = 1, supplied_material = "[name]"),
|
||||
new /datum/stack_recipe("[display_name] ashtray", /obj/item/weapon/material/ashtray, 2, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
)
|
||||
35
code/modules/materials/materials/stone.dm
Normal file
35
code/modules/materials/materials/stone.dm
Normal file
@@ -0,0 +1,35 @@
|
||||
/datum/material/stone
|
||||
name = "sandstone"
|
||||
stack_type = /obj/item/stack/material/sandstone
|
||||
icon_base = "stone"
|
||||
icon_reinf = "reinf_stone"
|
||||
icon_colour = "#D9C179"
|
||||
shard_type = SHARD_STONE_PIECE
|
||||
weight = 22
|
||||
hardness = 55
|
||||
protectiveness = 5 // 20%
|
||||
conductive = 0
|
||||
conductivity = 5
|
||||
door_icon_base = "stone"
|
||||
sheet_singular_name = "brick"
|
||||
sheet_plural_name = "bricks"
|
||||
|
||||
/datum/material/stone/generate_recipes()
|
||||
..()
|
||||
recipes += new /datum/stack_recipe("planting bed", /obj/machinery/portable_atmospherics/hydroponics/soil, 3, time = 10, one_per_turf = 1, on_floor = 1, recycle_material = "[name]")
|
||||
|
||||
/datum/material/stone/marble
|
||||
name = "marble"
|
||||
icon_colour = "#AAAAAA"
|
||||
weight = 26
|
||||
hardness = 30 //VOREStation Edit - Please.
|
||||
integrity = 201 //hack to stop kitchen benches being flippable, todo: refactor into weight system
|
||||
stack_type = /obj/item/stack/material/marble
|
||||
supply_conversion_value = 2
|
||||
|
||||
/datum/material/stone/marble/generate_recipes()
|
||||
..()
|
||||
recipes += list(
|
||||
new /datum/stack_recipe("light marble floor tile", /obj/item/stack/tile/wmarble, 1, 4, 20, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("dark marble floor tile", /obj/item/stack/tile/bmarble, 1, 4, 20, recycle_material = "[name]")
|
||||
)
|
||||
23
code/modules/materials/materials/supermatter.dm
Normal file
23
code/modules/materials/materials/supermatter.dm
Normal file
@@ -0,0 +1,23 @@
|
||||
//R-UST port
|
||||
/datum/material/supermatter
|
||||
name = "supermatter"
|
||||
icon_colour = "#FFFF00"
|
||||
stack_type = /obj/item/stack/material/supermatter
|
||||
shard_type = SHARD_SHARD
|
||||
radioactivity = 20
|
||||
stack_type = null
|
||||
luminescence = 3
|
||||
ignition_point = PHORON_MINIMUM_BURN_TEMPERATURE
|
||||
icon_base = "stone"
|
||||
shard_type = SHARD_SHARD
|
||||
hardness = 30
|
||||
door_icon_base = "stone"
|
||||
sheet_singular_name = "crystal"
|
||||
sheet_plural_name = "crystals"
|
||||
is_fusion_fuel = 1
|
||||
stack_origin_tech = list(TECH_MATERIAL = 8, TECH_PHORON = 5, TECH_BLUESPACE = 4)
|
||||
|
||||
/datum/material/supermatter/generate_recipes()
|
||||
recipes = list(
|
||||
new /datum/stack_recipe("supermatter shard", /obj/machinery/power/supermatter/shard, 30 , one_per_turf = 1, time = 600, on_floor = 1, recycle_material = "[name]")
|
||||
)
|
||||
@@ -1,104 +0,0 @@
|
||||
/datum/material/flesh
|
||||
name = "flesh"
|
||||
display_name = "chunk of flesh"
|
||||
icon_colour = "#dd90aa"
|
||||
sheet_singular_name = "meat"
|
||||
sheet_plural_name = "meats"
|
||||
integrity = 1200
|
||||
melting_point = 6000
|
||||
explosion_resistance = 200
|
||||
hardness = 500
|
||||
weight = 500
|
||||
|
||||
/datum/material/fluff //This is to allow for 2 handed weapons that don't want to have a prefix.
|
||||
name = " "
|
||||
display_name = ""
|
||||
icon_colour = "#000000"
|
||||
sheet_singular_name = "fluff"
|
||||
sheet_plural_name = "fluffs"
|
||||
hardness = 60
|
||||
weight = 20 //Strong as iron.
|
||||
|
||||
/datum/material/darkglass
|
||||
name = "darkglass"
|
||||
display_name = "darkglass"
|
||||
icon_base = "darkglass"
|
||||
icon_colour = "#FFFFFF"
|
||||
|
||||
/datum/material/fancyblack
|
||||
name = "fancyblack"
|
||||
display_name = "fancyblack"
|
||||
icon_base = "fancyblack"
|
||||
icon_colour = "#FFFFFF"
|
||||
|
||||
/datum/material/glass/titaniumglass
|
||||
name = MAT_TITANIUMGLASS
|
||||
display_name = "titanium glass"
|
||||
stack_type = /obj/item/stack/material/glass/titanium
|
||||
integrity = 150
|
||||
hardness = 50
|
||||
weight = 50
|
||||
flags = MATERIAL_BRITTLE
|
||||
icon_colour = "#A7A3A6"
|
||||
stack_origin_tech = list(TECH_MATERIAL = 5)
|
||||
window_options = list("One Direction" = 1, "Full Window" = 4)
|
||||
created_window = /obj/structure/window/titanium
|
||||
created_fulltile_window = /obj/structure/window/titanium/full
|
||||
wire_product = null
|
||||
rod_product = /obj/item/stack/material/glass/titanium
|
||||
composite_material = list(MAT_TITANIUM = SHEET_MATERIAL_AMOUNT, "glass" = SHEET_MATERIAL_AMOUNT)
|
||||
|
||||
/datum/material/plastitanium
|
||||
name = MAT_PLASTITANIUM
|
||||
stack_type = /obj/item/stack/material/plastitanium
|
||||
integrity = 600
|
||||
melting_point = 9000
|
||||
icon_base = "solid"
|
||||
icon_reinf = "reinf_over"
|
||||
icon_colour = "#585658"
|
||||
explosion_resistance = 35
|
||||
hardness = 90
|
||||
weight = 40
|
||||
protectiveness = 30
|
||||
conductivity = 7
|
||||
stack_origin_tech = list(TECH_MATERIAL = 5)
|
||||
composite_material = list(MAT_TITANIUM = SHEET_MATERIAL_AMOUNT, MAT_PLASTEEL = SHEET_MATERIAL_AMOUNT)
|
||||
supply_conversion_value = 8
|
||||
|
||||
/datum/material/plastitanium/hull
|
||||
name = MAT_PLASTITANIUMHULL
|
||||
stack_type = /obj/item/stack/material/plastitanium/hull
|
||||
icon_base = "hull"
|
||||
icon_reinf = "reinf_mesh"
|
||||
icon_colour = "#585658"
|
||||
explosion_resistance = 50
|
||||
|
||||
/datum/material/plastitanium/hull/place_sheet(var/turf/target) //Deconstructed into normal plasteel sheets.
|
||||
new /obj/item/stack/material/plastitanium(target)
|
||||
|
||||
/datum/material/glass/plastaniumglass
|
||||
name = MAT_PLASTITANIUMGLASS
|
||||
display_name = "plas-titanium glass"
|
||||
stack_type = /obj/item/stack/material/glass/plastitanium
|
||||
integrity = 200
|
||||
hardness = 60
|
||||
weight = 80
|
||||
flags = MATERIAL_BRITTLE
|
||||
icon_colour = "#676366"
|
||||
stack_origin_tech = list(TECH_MATERIAL = 6)
|
||||
window_options = list("One Direction" = 1, "Full Window" = 4)
|
||||
created_window = /obj/structure/window/plastitanium
|
||||
created_fulltile_window = /obj/structure/window/plastitanium/full
|
||||
wire_product = null
|
||||
rod_product = /obj/item/stack/material/glass/plastitanium
|
||||
composite_material = list(MAT_PLASTITANIUM = SHEET_MATERIAL_AMOUNT, "glass" = SHEET_MATERIAL_AMOUNT)
|
||||
|
||||
/datum/material/gold/hull
|
||||
name = MAT_GOLDHULL
|
||||
stack_type = /obj/item/stack/material/gold/hull
|
||||
icon_base = "hull"
|
||||
icon_reinf = "reinf_mesh"
|
||||
explosion_resistance = 50
|
||||
|
||||
/datum/material/gold/hull/place_sheet(var/turf/target) //Deconstructed into normal plasteel sheets.
|
||||
new /obj/item/stack/material/gold(target)
|
||||
89
code/modules/materials/sheets/_sheets.dm
Normal file
89
code/modules/materials/sheets/_sheets.dm
Normal file
@@ -0,0 +1,89 @@
|
||||
// Stacked resources. They use a material datum for a lot of inherited values.
|
||||
// If you're adding something here, make sure to add it to fifty_spawner_mats.dm as well
|
||||
/obj/item/stack/material
|
||||
force = 5.0
|
||||
throwforce = 5
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
throw_speed = 3
|
||||
throw_range = 3
|
||||
center_of_mass = null
|
||||
max_amount = 50
|
||||
item_icons = list(
|
||||
slot_l_hand_str = 'icons/mob/items/lefthand_material.dmi',
|
||||
slot_r_hand_str = 'icons/mob/items/righthand_material.dmi',
|
||||
)
|
||||
|
||||
var/default_type = DEFAULT_WALL_MATERIAL
|
||||
var/datum/material/material
|
||||
var/perunit = SHEET_MATERIAL_AMOUNT
|
||||
var/apply_colour //temp pending icon rewrite
|
||||
drop_sound = 'sound/items/drop/axe.ogg'
|
||||
pickup_sound = 'sound/items/pickup/axe.ogg'
|
||||
|
||||
/obj/item/stack/material/Initialize()
|
||||
. = ..()
|
||||
|
||||
randpixel_xy()
|
||||
|
||||
if(!default_type)
|
||||
default_type = DEFAULT_WALL_MATERIAL
|
||||
material = get_material_by_name("[default_type]")
|
||||
if(!material)
|
||||
return INITIALIZE_HINT_QDEL
|
||||
|
||||
recipes = material.get_recipes()
|
||||
stacktype = material.stack_type
|
||||
if(islist(material.stack_origin_tech))
|
||||
origin_tech = material.stack_origin_tech.Copy()
|
||||
|
||||
if(apply_colour)
|
||||
color = material.icon_colour
|
||||
|
||||
if(!material.conductive)
|
||||
flags |= NOCONDUCT
|
||||
|
||||
matter = material.get_matter()
|
||||
update_strings()
|
||||
|
||||
/obj/item/stack/material/get_material()
|
||||
return material
|
||||
|
||||
/obj/item/stack/material/proc/update_strings()
|
||||
// Update from material datum.
|
||||
singular_name = material.sheet_singular_name
|
||||
|
||||
if(amount>1)
|
||||
name = "[material.use_name] [material.sheet_plural_name]"
|
||||
desc = "A stack of [material.use_name] [material.sheet_plural_name]."
|
||||
gender = PLURAL
|
||||
else
|
||||
name = "[material.use_name] [material.sheet_singular_name]"
|
||||
desc = "A [material.sheet_singular_name] of [material.use_name]."
|
||||
gender = NEUTER
|
||||
|
||||
/obj/item/stack/material/use(var/used)
|
||||
. = ..()
|
||||
update_strings()
|
||||
return
|
||||
|
||||
/obj/item/stack/material/transfer_to(obj/item/stack/S, var/tamount=null, var/type_verified)
|
||||
var/obj/item/stack/material/M = S
|
||||
if(!istype(M) || material.name != M.material.name)
|
||||
return 0
|
||||
var/transfer = ..(S,tamount,1)
|
||||
if(src) update_strings()
|
||||
if(M) M.update_strings()
|
||||
return transfer
|
||||
|
||||
/obj/item/stack/material/attack_self(var/mob/user)
|
||||
if(!material.build_windows(user, src))
|
||||
..()
|
||||
|
||||
/obj/item/stack/material/attackby(var/obj/item/W, var/mob/user)
|
||||
if(istype(W,/obj/item/stack/cable_coil))
|
||||
material.build_wired_product(user, W, src)
|
||||
return
|
||||
else if(istype(W, /obj/item/stack/rods))
|
||||
material.build_rod_product(user, W, src)
|
||||
return
|
||||
return ..()
|
||||
66
code/modules/materials/sheets/gems.dm
Normal file
66
code/modules/materials/sheets/gems.dm
Normal file
@@ -0,0 +1,66 @@
|
||||
/obj/item/stack/material/phoron
|
||||
name = "solid phoron"
|
||||
icon_state = "sheet-phoron"
|
||||
default_type = "phoron"
|
||||
no_variants = FALSE
|
||||
drop_sound = 'sound/items/drop/glass.ogg'
|
||||
pickup_sound = 'sound/items/pickup/glass.ogg'
|
||||
|
||||
/obj/item/stack/material/diamond
|
||||
name = "diamond"
|
||||
icon_state = "sheet-diamond"
|
||||
default_type = "diamond"
|
||||
drop_sound = 'sound/items/drop/glass.ogg'
|
||||
pickup_sound = 'sound/items/pickup/glass.ogg'
|
||||
|
||||
/obj/item/stack/material/painite
|
||||
name = "painite"
|
||||
icon_state = "sheet-gem"
|
||||
singular_name = "painite gem"
|
||||
default_type = "painite"
|
||||
apply_colour = 1
|
||||
no_variants = FALSE
|
||||
|
||||
/obj/item/stack/material/void_opal
|
||||
name = "void opal"
|
||||
icon_state = "sheet-void_opal"
|
||||
singular_name = "void opal"
|
||||
default_type = "void opal"
|
||||
apply_colour = 1
|
||||
no_variants = FALSE
|
||||
|
||||
/obj/item/stack/material/quartz
|
||||
name = "quartz"
|
||||
icon_state = "sheet-gem"
|
||||
singular_name = "quartz gem"
|
||||
default_type = "quartz"
|
||||
apply_colour = 1
|
||||
no_variants = FALSE
|
||||
|
||||
/obj/item/stack/material/valhollide
|
||||
name = MAT_VALHOLLIDE
|
||||
icon_state = "sheet-gem"
|
||||
item_state = "diamond"
|
||||
default_type = MAT_VALHOLLIDE
|
||||
no_variants = FALSE
|
||||
apply_colour = TRUE
|
||||
|
||||
// Particle Smasher and Exotic material.
|
||||
/obj/item/stack/material/verdantium
|
||||
name = MAT_VERDANTIUM
|
||||
icon_state = "sheet-wavy"
|
||||
item_state = "mhydrogen"
|
||||
default_type = MAT_VERDANTIUM
|
||||
no_variants = FALSE
|
||||
apply_colour = TRUE
|
||||
|
||||
/obj/item/stack/material/morphium
|
||||
name = MAT_MORPHIUM
|
||||
icon_state = "sheet-wavy"
|
||||
item_state = "mhydrogen"
|
||||
default_type = MAT_MORPHIUM
|
||||
no_variants = FALSE
|
||||
apply_colour = TRUE
|
||||
|
||||
|
||||
|
||||
33
code/modules/materials/sheets/glass.dm
Normal file
33
code/modules/materials/sheets/glass.dm
Normal file
@@ -0,0 +1,33 @@
|
||||
/obj/item/stack/material/glass
|
||||
name = "glass"
|
||||
icon_state = "sheet-transparent"
|
||||
default_type = "glass"
|
||||
no_variants = FALSE
|
||||
drop_sound = 'sound/items/drop/glass.ogg'
|
||||
pickup_sound = 'sound/items/pickup/glass.ogg'
|
||||
apply_colour = TRUE
|
||||
|
||||
/obj/item/stack/material/glass/reinforced
|
||||
name = "reinforced glass"
|
||||
icon_state = "sheet-rtransparent"
|
||||
default_type = "rglass"
|
||||
no_variants = FALSE
|
||||
apply_colour = TRUE
|
||||
|
||||
/obj/item/stack/material/glass/phoronglass
|
||||
name = "borosilicate glass"
|
||||
desc = "This sheet is special platinum-glass alloy designed to withstand large temperatures"
|
||||
singular_name = "borosilicate glass sheet"
|
||||
icon_state = "sheet-transparent"
|
||||
default_type = "borosilicate glass"
|
||||
no_variants = FALSE
|
||||
apply_colour = TRUE
|
||||
|
||||
/obj/item/stack/material/glass/phoronrglass
|
||||
name = "reinforced borosilicate glass"
|
||||
desc = "This sheet is special platinum-glass alloy designed to withstand large temperatures. It is reinforced with few rods."
|
||||
singular_name = "reinforced borosilicate glass sheet"
|
||||
icon_state = "sheet-rtransparent"
|
||||
default_type = "reinforced borosilicate glass"
|
||||
no_variants = FALSE
|
||||
apply_colour = TRUE
|
||||
17
code/modules/materials/sheets/glass_vr.dm
Normal file
17
code/modules/materials/sheets/glass_vr.dm
Normal file
@@ -0,0 +1,17 @@
|
||||
/obj/item/stack/material/glass/titanium
|
||||
name = "ti-glass sheets"
|
||||
icon = 'icons/obj/stacks_vr.dmi'
|
||||
icon_state = "sheet-titaniumglass"
|
||||
item_state = "sheet-silver"
|
||||
no_variants = FALSE
|
||||
drop_sound = 'sound/items/drop/glass.ogg'
|
||||
default_type = MAT_TITANIUMGLASS
|
||||
|
||||
/obj/item/stack/material/glass/plastitanium
|
||||
name = "plastitanium glass sheets"
|
||||
icon = 'icons/obj/stacks_vr.dmi'
|
||||
icon_state = "sheet-plastitaniumglass"
|
||||
item_state = "sheet-silver"
|
||||
no_variants = FALSE
|
||||
drop_sound = 'sound/items/drop/glass.ogg'
|
||||
default_type = MAT_PLASTITANIUMGLASS
|
||||
18
code/modules/materials/sheets/metals/hull.dm
Normal file
18
code/modules/materials/sheets/metals/hull.dm
Normal file
@@ -0,0 +1,18 @@
|
||||
/obj/item/stack/material/steel/hull
|
||||
name = MAT_STEELHULL
|
||||
default_type = MAT_STEELHULL
|
||||
|
||||
/obj/item/stack/material/plasteel/hull
|
||||
name = MAT_PLASTEELHULL
|
||||
default_type = MAT_PLASTEELHULL
|
||||
|
||||
/obj/item/stack/material/durasteel/hull
|
||||
name = MAT_DURASTEELHULL
|
||||
|
||||
/obj/item/stack/material/titanium/hull
|
||||
name = MAT_TITANIUMHULL
|
||||
default_type = MAT_TITANIUMHULL
|
||||
|
||||
/obj/item/stack/material/morphium/hull
|
||||
name = MAT_MORPHIUMHULL
|
||||
default_type = MAT_MORPHIUMHULL
|
||||
15
code/modules/materials/sheets/metals/hull_vr.dm
Normal file
15
code/modules/materials/sheets/metals/hull_vr.dm
Normal file
@@ -0,0 +1,15 @@
|
||||
/obj/item/stack/material/plastitanium/hull
|
||||
name = "plastitanium hull sheets"
|
||||
icon = 'icons/obj/stacks_vr.dmi'
|
||||
icon_state = "sheet-plastitanium"
|
||||
item_state = "sheet-silver"
|
||||
no_variants = FALSE
|
||||
default_type = MAT_PLASTITANIUMHULL
|
||||
|
||||
/obj/item/stack/material/gold/hull
|
||||
name = "gold hull sheets"
|
||||
icon = 'icons/obj/stacks_vr.dmi'
|
||||
icon_state = "sheet-plastitanium"
|
||||
item_state = "sheet-silver"
|
||||
no_variants = FALSE
|
||||
default_type = MAT_GOLDHULL
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user