mirror of
https://github.com/CHOMPstation/CHOMPstation.git
synced 2026-08-26 05:26:24 +01:00
Merge branch 'master' of https://github.com/PolarisSS13/Polaris into aro-sync-05-27-2018
# Conflicts: # code/game/objects/structures/crates_lockers/closets/l3closet.dm # code/game/objects/structures/crates_lockers/closets/secure/engineering.dm # code/game/objects/structures/crates_lockers/closets/secure/medical.dm # code/game/objects/structures/crates_lockers/closets/secure/scientist.dm # code/game/objects/structures/crates_lockers/closets/secure/security.dm # code/game/objects/structures/crates_lockers/closets/utility_closets.dm # maps/southern_cross/structures/closets/misc.dm # maps/submaps/surface_submaps/wilderness/DoomP.dmm # vorestation.dme
This commit is contained in:
@@ -26,6 +26,8 @@ GLOBAL_LIST_BOILERPLATE(all_clothing, /obj/item/clothing)
|
||||
var/ear_protection = 0
|
||||
var/blood_sprite_state
|
||||
|
||||
var/update_icon_define = null // Only needed if you've got multiple files for the same type of clothing
|
||||
|
||||
//Updates the icons of the mob wearing the clothing item, if any.
|
||||
/obj/item/clothing/proc/update_clothing_icon()
|
||||
return
|
||||
|
||||
@@ -133,7 +133,7 @@
|
||||
accessories = null
|
||||
|
||||
/obj/item/clothing/emp_act(severity)
|
||||
if(accessories.len)
|
||||
if(LAZYLEN(accessories))
|
||||
for(var/obj/item/clothing/accessory/A in accessories)
|
||||
A.emp_act(severity)
|
||||
..()
|
||||
@@ -49,6 +49,8 @@
|
||||
/obj/item/clothing/suit/space
|
||||
name = "Space suit"
|
||||
desc = "A suit that protects against low pressure environments."
|
||||
icon = 'icons/obj/clothing/spacesuits.dmi'
|
||||
update_icon_define = INV_SPACESUIT_DEF_ICON
|
||||
icon_state = "space"
|
||||
w_class = ITEMSIZE_HUGE // So you can't fit this in your bag and be prepared at all times.
|
||||
gas_transfer_coefficient = 0.01
|
||||
|
||||
@@ -89,7 +89,7 @@
|
||||
/obj/item/clothing/accessory/armor/armorplate/merc
|
||||
name = "heavy armor plate"
|
||||
desc = "A ceramics-reinforced synthetic armor plate, providing state of of the art protection. Attaches to a plate carrier."
|
||||
icon_state = "armor_heavy"
|
||||
icon_state = "armor_merc"
|
||||
armor = list(melee = 60, bullet = 60, laser = 60, energy = 40, bomb = 40, bio = 0, rad = 0)
|
||||
|
||||
//////////////
|
||||
|
||||
@@ -59,7 +59,7 @@
|
||||
clear_holster()
|
||||
|
||||
/obj/item/clothing/accessory/holster/attack_hand(mob/user as mob)
|
||||
if (has_suit) //if we are part of a suit
|
||||
if (has_suit && (slot & ACCESSORY_SLOT_UTILITY)) //if we are part of a suit
|
||||
if (holstered)
|
||||
unholster(user)
|
||||
return
|
||||
@@ -105,7 +105,7 @@
|
||||
H = src
|
||||
else if (istype(src, /obj/item/clothing/under))
|
||||
var/obj/item/clothing/under/S = src
|
||||
if (S.accessories.len)
|
||||
if (LAZYLEN(S.accessories))
|
||||
H = locate() in S.accessories
|
||||
|
||||
if (!H)
|
||||
|
||||
@@ -29,12 +29,65 @@
|
||||
|
||||
var/seeds_initialized = 0 // Map-placed ones break if seeds are loaded right at the start of the round, so we do it on the first interaction
|
||||
var/list/datum/seed_pile/piles = list()
|
||||
var/list/datum/seed_pile/piles_contra = list() //Hacked.
|
||||
var/list/starting_seeds = list()
|
||||
var/list/contraband_seeds = list() //Seeds we only show if we've been hacked.
|
||||
var/list/scanner = list() // What properties we can view
|
||||
var/seconds_electrified = 0 //Shock users like an airlock.
|
||||
var/smart = 0 //Used for hacking. Overrides the scanner.
|
||||
var/hacked = 0
|
||||
var/lockdown = 0
|
||||
var/datum/wires/seedstorage/wires = null
|
||||
|
||||
/obj/machinery/seed_storage/New()
|
||||
..()
|
||||
wires = new(src)
|
||||
if(!contraband_seeds.len)
|
||||
contraband_seeds = pick(list(
|
||||
list(
|
||||
/obj/item/seeds/ambrosiavulgarisseed = 3,
|
||||
/obj/item/seeds/greengrapeseed = 3,
|
||||
/obj/item/seeds/reishimycelium = 2,
|
||||
/obj/item/seeds/bloodtomatoseed = 1
|
||||
),
|
||||
list(
|
||||
/obj/item/seeds/ambrosiavulgarisseed = 3,
|
||||
/obj/item/seeds/plastiseed = 3,
|
||||
/obj/item/seeds/kudzuseed = 2,
|
||||
/obj/item/seeds/nettleseed = 1
|
||||
),
|
||||
list(
|
||||
/obj/item/seeds/ambrosiavulgarisseed = 3,
|
||||
/obj/item/seeds/amanitamycelium = 3,
|
||||
/obj/item/seeds/libertymycelium = 2,
|
||||
/obj/item/seeds/glowshroom = 1
|
||||
),
|
||||
list(
|
||||
/obj/item/seeds/ambrosiavulgarisseed = 3,
|
||||
/obj/item/seeds/glowberryseed = 3,
|
||||
/obj/item/seeds/icepepperseed = 2,
|
||||
/obj/item/seeds/bluetomatoseed = 1
|
||||
),
|
||||
list(
|
||||
/obj/item/seeds/ambrosiadeusseed = 1,
|
||||
/obj/item/seeds/killertomatoseed = 1
|
||||
),
|
||||
list(
|
||||
/obj/item/seeds/ambrosiavulgarisseed = 3,
|
||||
/obj/item/seeds/random = 6
|
||||
)
|
||||
))
|
||||
return
|
||||
|
||||
/obj/machinery/seed_storage/process()
|
||||
..()
|
||||
if(seconds_electrified > 0)
|
||||
seconds_electrified--
|
||||
return
|
||||
|
||||
/obj/machinery/seed_storage/random // This is mostly for testing, but I guess admins could spawn it
|
||||
name = "Random seed storage"
|
||||
scanner = list("stats", "produce", "soil", "temperature", "light")
|
||||
scanner = list("stats", "produce", "soil", "temperature", "light", "pressure")
|
||||
starting_seeds = list(/obj/item/seeds/random = 50)
|
||||
|
||||
/obj/machinery/seed_storage/garden
|
||||
@@ -81,7 +134,8 @@
|
||||
|
||||
/obj/machinery/seed_storage/xenobotany
|
||||
name = "Xenobotany seed storage"
|
||||
scanner = list("stats", "produce", "soil", "temperature", "light")
|
||||
scanner = list("stats", "produce", "soil", "temperature", "light", "pressure")
|
||||
smart = 1
|
||||
starting_seeds = list(
|
||||
/obj/item/seeds/ambrosiavulgarisseed = 3,
|
||||
/obj/item/seeds/appleseed = 3,
|
||||
@@ -128,6 +182,17 @@
|
||||
)
|
||||
|
||||
/obj/machinery/seed_storage/attack_hand(mob/user as mob)
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
return
|
||||
|
||||
if(seconds_electrified != 0)
|
||||
if(shock(user, 100))
|
||||
return
|
||||
|
||||
if(panel_open)
|
||||
wires.Interact(user)
|
||||
if(lockdown)
|
||||
return
|
||||
user.set_machine(src)
|
||||
interact(user)
|
||||
|
||||
@@ -135,6 +200,11 @@
|
||||
if (..())
|
||||
return
|
||||
|
||||
if(smart)
|
||||
scanner = list("stats", "produce", "soil", "temperature", "light", "pressure")
|
||||
else
|
||||
scanner = initial(scanner)
|
||||
|
||||
if (!seeds_initialized)
|
||||
for(var/typepath in starting_seeds)
|
||||
var/amount = starting_seeds[typepath]
|
||||
@@ -143,6 +213,13 @@
|
||||
for (var/i = 1 to amount)
|
||||
var/O = new typepath
|
||||
add(O)
|
||||
for(var/typepath in contraband_seeds)
|
||||
var/amount = contraband_seeds[typepath]
|
||||
if(isnull(amount)) amount = 1
|
||||
|
||||
for (var/i = 1 to amount)
|
||||
var/O = new typepath
|
||||
add(O, 1)
|
||||
seeds_initialized = 1
|
||||
|
||||
var/dat = "<center><h1>Seed storage contents</h1></center>"
|
||||
@@ -248,6 +325,95 @@
|
||||
dat += "<td>[S.amount]</td>"
|
||||
dat += "<td><a href='byond://?src=\ref[src];task=vend;id=[S.ID]'>Vend</a> <a href='byond://?src=\ref[src];task=purge;id=[S.ID]'>Purge</a></td>"
|
||||
dat += "</tr>"
|
||||
if(hacked || emagged)
|
||||
for (var/datum/seed_pile/S in piles_contra)
|
||||
var/datum/seed/seed = S.seed_type
|
||||
if(!seed)
|
||||
continue
|
||||
dat += "<tr>"
|
||||
dat += "<td>[seed.seed_name]</td>"
|
||||
dat += "<td>#[seed.uid]</td>"
|
||||
if ("stats" in scanner)
|
||||
dat += "<td>[seed.get_trait(TRAIT_ENDURANCE)]</td><td>[seed.get_trait(TRAIT_YIELD)]</td><td>[seed.get_trait(TRAIT_MATURATION)]</td><td>[seed.get_trait(TRAIT_PRODUCTION)]</td><td>[seed.get_trait(TRAIT_POTENCY)]</td>"
|
||||
if(seed.get_trait(TRAIT_HARVEST_REPEAT))
|
||||
dat += "<td>Multiple</td>"
|
||||
else
|
||||
dat += "<td>Single</td>"
|
||||
if ("temperature" in scanner)
|
||||
dat += "<td>[seed.get_trait(TRAIT_IDEAL_HEAT)] K</td>"
|
||||
if ("light" in scanner)
|
||||
dat += "<td>[seed.get_trait(TRAIT_IDEAL_LIGHT)] L</td>"
|
||||
if ("soil" in scanner)
|
||||
if(seed.get_trait(TRAIT_REQUIRES_NUTRIENTS))
|
||||
if(seed.get_trait(TRAIT_NUTRIENT_CONSUMPTION) < 0.05)
|
||||
dat += "<td>Low</td>"
|
||||
else if(seed.get_trait(TRAIT_NUTRIENT_CONSUMPTION) > 0.2)
|
||||
dat += "<td>High</td>"
|
||||
else
|
||||
dat += "<td>Norm</td>"
|
||||
else
|
||||
dat += "<td>No</td>"
|
||||
if(seed.get_trait(TRAIT_REQUIRES_WATER))
|
||||
if(seed.get_trait(TRAIT_WATER_CONSUMPTION) < 1)
|
||||
dat += "<td>Low</td>"
|
||||
else if(seed.get_trait(TRAIT_WATER_CONSUMPTION) > 5)
|
||||
dat += "<td>High</td>"
|
||||
else
|
||||
dat += "<td>Norm</td>"
|
||||
else
|
||||
dat += "<td>No</td>"
|
||||
|
||||
dat += "<td>"
|
||||
switch(seed.get_trait(TRAIT_CARNIVOROUS))
|
||||
if(1)
|
||||
dat += "CARN "
|
||||
if(2)
|
||||
dat += "<font color='red'>CARN </font>"
|
||||
switch(seed.get_trait(TRAIT_SPREAD))
|
||||
if(1)
|
||||
dat += "VINE "
|
||||
if(2)
|
||||
dat += "<font color='red'>VINE </font>"
|
||||
if ("pressure" in scanner)
|
||||
if(seed.get_trait(TRAIT_LOWKPA_TOLERANCE) < 20)
|
||||
dat += "LP "
|
||||
if(seed.get_trait(TRAIT_HIGHKPA_TOLERANCE) > 220)
|
||||
dat += "HP "
|
||||
if ("temperature" in scanner)
|
||||
if(seed.get_trait(TRAIT_HEAT_TOLERANCE) > 30)
|
||||
dat += "TEMRES "
|
||||
else if(seed.get_trait(TRAIT_HEAT_TOLERANCE) < 10)
|
||||
dat += "TEMSEN "
|
||||
if ("light" in scanner)
|
||||
if(seed.get_trait(TRAIT_LIGHT_TOLERANCE) > 10)
|
||||
dat += "LIGRES "
|
||||
else if(seed.get_trait(TRAIT_LIGHT_TOLERANCE) < 3)
|
||||
dat += "LIGSEN "
|
||||
if(seed.get_trait(TRAIT_TOXINS_TOLERANCE) < 3)
|
||||
dat += "TOXSEN "
|
||||
else if(seed.get_trait(TRAIT_TOXINS_TOLERANCE) > 6)
|
||||
dat += "TOXRES "
|
||||
if(seed.get_trait(TRAIT_PEST_TOLERANCE) < 3)
|
||||
dat += "PESTSEN "
|
||||
else if(seed.get_trait(TRAIT_PEST_TOLERANCE) > 6)
|
||||
dat += "PESTRES "
|
||||
if(seed.get_trait(TRAIT_WEED_TOLERANCE) < 3)
|
||||
dat += "WEEDSEN "
|
||||
else if(seed.get_trait(TRAIT_WEED_TOLERANCE) > 6)
|
||||
dat += "WEEDRES "
|
||||
if(seed.get_trait(TRAIT_PARASITE))
|
||||
dat += "PAR "
|
||||
if ("temperature" in scanner)
|
||||
if(seed.get_trait(TRAIT_ALTER_TEMP) > 0)
|
||||
dat += "TEMP+ "
|
||||
if(seed.get_trait(TRAIT_ALTER_TEMP) < 0)
|
||||
dat += "TEMP- "
|
||||
if(seed.get_trait(TRAIT_BIOLUM))
|
||||
dat += "LUM "
|
||||
dat += "</td>"
|
||||
dat += "<td>[S.amount]</td>"
|
||||
dat += "<td><a href='byond://?src=\ref[src];task=vend;id=[S.ID]'>Vend</a> <a href='byond://?src=\ref[src];task=purge;id=[S.ID]'>Purge</a></td>"
|
||||
dat += "</tr>"
|
||||
dat += "</table>"
|
||||
|
||||
user << browse(dat, "window=seedstorage")
|
||||
@@ -282,11 +448,11 @@
|
||||
updateUsrDialog()
|
||||
|
||||
/obj/machinery/seed_storage/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
if (istype(O, /obj/item/seeds))
|
||||
if (istype(O, /obj/item/seeds) && !lockdown)
|
||||
add(O)
|
||||
user.visible_message("[user] puts \the [O.name] into \the [src].", "You put \the [O] into \the [src].")
|
||||
return
|
||||
else if (istype(O, /obj/item/weapon/storage/bag/plants))
|
||||
else if (istype(O, /obj/item/weapon/storage/bag/plants) && !lockdown)
|
||||
var/obj/item/weapon/storage/P = O
|
||||
var/loaded = 0
|
||||
for(var/obj/item/seeds/G in P.contents)
|
||||
@@ -301,8 +467,17 @@
|
||||
playsound(loc, O.usesound, 50, 1)
|
||||
anchored = !anchored
|
||||
user << "You [anchored ? "wrench" : "unwrench"] \the [src]."
|
||||
else if(istype(O, /obj/item/weapon/screwdriver))
|
||||
panel_open = !panel_open
|
||||
to_chat(user, "You [panel_open ? "open" : "close"] the maintenance panel.")
|
||||
playsound(src, O.usesound, 50, 1)
|
||||
overlays.Cut()
|
||||
if(panel_open)
|
||||
overlays += image(icon, "[initial(icon_state)]-panel")
|
||||
else if((istype(O, /obj/item/weapon/wirecutters) || istype(O, /obj/item/device/multitool)) && panel_open)
|
||||
wires.Interact(user)
|
||||
|
||||
/obj/machinery/seed_storage/proc/add(var/obj/item/seeds/O as obj)
|
||||
/obj/machinery/seed_storage/proc/add(var/obj/item/seeds/O as obj, var/contraband = 0)
|
||||
if (istype(O.loc, /mob))
|
||||
var/mob/user = O.loc
|
||||
user.remove_from_mob(O)
|
||||
@@ -313,6 +488,17 @@
|
||||
O.loc = src
|
||||
var/newID = 0
|
||||
|
||||
if(contraband)
|
||||
for (var/datum/seed_pile/N in piles_contra)
|
||||
if (N.matches(O))
|
||||
++N.amount
|
||||
N.seeds += (O)
|
||||
return
|
||||
else if(N.ID >= newID)
|
||||
newID = N.ID + 1
|
||||
piles_contra += new /datum/seed_pile(O, newID)
|
||||
return
|
||||
|
||||
for (var/datum/seed_pile/N in piles)
|
||||
if (N.matches(O))
|
||||
++N.amount
|
||||
@@ -322,4 +508,5 @@
|
||||
newID = N.ID + 1
|
||||
|
||||
piles += new /datum/seed_pile(O, newID)
|
||||
|
||||
return
|
||||
|
||||
@@ -56,14 +56,26 @@
|
||||
name = "stack of steel"
|
||||
type_to_spawn = /obj/item/stack/material/steel
|
||||
|
||||
/obj/fiftyspawner/steel/hull
|
||||
name = "stack of steel hull"
|
||||
type_to_spawn = /obj/item/stack/material/steel/hull
|
||||
|
||||
/obj/fiftyspawner/plasteel
|
||||
name = "stack of plasteel"
|
||||
type_to_spawn = /obj/item/stack/material/plasteel
|
||||
|
||||
/obj/fiftyspawner/plasteel/hull
|
||||
name = "stack of plasteel hull"
|
||||
type_to_spawn = /obj/item/stack/material/plasteel/hull
|
||||
|
||||
/obj/fiftyspawner/durasteel
|
||||
name = "stack of durasteel"
|
||||
type_to_spawn = /obj/item/stack/material/durasteel
|
||||
|
||||
/obj/fiftyspawner/durasteel/hull
|
||||
name = "stack of durasteel hull"
|
||||
type_to_spawn = /obj/item/stack/material/durasteel/hull
|
||||
|
||||
/obj/fiftyspawner/wood
|
||||
name = "stack of wood"
|
||||
type_to_spawn = /obj/item/stack/material/wood
|
||||
|
||||
@@ -192,12 +192,20 @@
|
||||
default_type = DEFAULT_WALL_MATERIAL
|
||||
no_variants = FALSE
|
||||
|
||||
/obj/item/stack/material/steel/hull
|
||||
name = MAT_STEELHULL
|
||||
default_type = MAT_STEELHULL
|
||||
|
||||
/obj/item/stack/material/plasteel
|
||||
name = "plasteel"
|
||||
icon_state = "sheet-plasteel"
|
||||
default_type = "plasteel"
|
||||
no_variants = FALSE
|
||||
|
||||
/obj/item/stack/material/plasteel/hull
|
||||
name = MAT_PLASTEELHULL
|
||||
default_type = MAT_PLASTEELHULL
|
||||
|
||||
/obj/item/stack/material/durasteel
|
||||
name = "durasteel"
|
||||
icon_state = "sheet-durasteel"
|
||||
@@ -205,6 +213,9 @@
|
||||
default_type = "durasteel"
|
||||
no_variants = FALSE
|
||||
|
||||
/obj/item/stack/material/durasteel/hull
|
||||
name = "MAT_DURASTEELHULL"
|
||||
|
||||
/obj/item/stack/material/wood
|
||||
name = "wooden plank"
|
||||
icon_state = "sheet-wood"
|
||||
|
||||
@@ -16,7 +16,17 @@
|
||||
stone
|
||||
metal
|
||||
solid
|
||||
cult
|
||||
ONLY WALLS
|
||||
cult
|
||||
hull
|
||||
curvy
|
||||
jaggy
|
||||
brick
|
||||
REINFORCEMENT
|
||||
reinf_over
|
||||
reinf_mesh
|
||||
reinf_cult
|
||||
reinf_metal
|
||||
DOORS
|
||||
stone
|
||||
metal
|
||||
@@ -358,6 +368,18 @@ var/list/name_to_material
|
||||
icon_reinf = "reinf_over"
|
||||
icon_colour = "#666666"
|
||||
|
||||
/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"
|
||||
|
||||
/material/steel/hull/place_sheet(var/turf/target) //Deconstructed into normal steel sheets.
|
||||
new /obj/item/stack/material/steel(target)
|
||||
|
||||
/material/diona
|
||||
name = "biomass"
|
||||
icon_colour = null
|
||||
@@ -394,6 +416,17 @@ var/list/name_to_material
|
||||
stack_origin_tech = list(TECH_MATERIAL = 2)
|
||||
composite_material = list(DEFAULT_WALL_MATERIAL = SHEET_MATERIAL_AMOUNT, "platinum" = SHEET_MATERIAL_AMOUNT) //todo
|
||||
|
||||
/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
|
||||
|
||||
/material/plasteel/hull/place_sheet(var/turf/target) //Deconstructed into normal plasteel sheets.
|
||||
new /obj/item/stack/material/plasteel(target)
|
||||
|
||||
// Very rare alloy that is reflective, should be used sparingly.
|
||||
/material/durasteel
|
||||
@@ -412,6 +445,14 @@ var/list/name_to_material
|
||||
stack_origin_tech = list(TECH_MATERIAL = 8)
|
||||
composite_material = list("plasteel" = SHEET_MATERIAL_AMOUNT, "diamond" = SHEET_MATERIAL_AMOUNT) //shrug
|
||||
|
||||
/material/durasteel/hull //The 'Hardball' of starship hulls.
|
||||
name = MAT_DURASTEELHULL
|
||||
icon_base = "hull"
|
||||
icon_reinf = "reinf_mesh"
|
||||
icon_colour = "#45829a"
|
||||
explosion_resistance = 90
|
||||
reflectivity = 0.9
|
||||
|
||||
/material/plasteel/titanium
|
||||
name = "titanium"
|
||||
stack_type = null
|
||||
@@ -421,6 +462,12 @@ var/list/name_to_material
|
||||
icon_colour = "#D1E6E3"
|
||||
icon_reinf = "reinf_metal"
|
||||
|
||||
/material/plasteel/titanium/hull
|
||||
name = MAT_TITANIUMHULL
|
||||
stack_type = null
|
||||
icon_base = "hull"
|
||||
icon_reinf = "reinf_mesh"
|
||||
|
||||
/material/glass
|
||||
name = "glass"
|
||||
stack_type = /obj/item/stack/material/glass
|
||||
|
||||
@@ -129,4 +129,16 @@
|
||||
flags = RESTRICTED
|
||||
syllables = list("rus","zem","ave","groz","ski","ska","ven","konst","pol","lin","svy",
|
||||
"danya","da","mied","zan","das","krem","myka","cyka","blyat","to","st","no","na","ni",
|
||||
"ko","ne","en","po","ra","li","on","byl","cto","eni","ost","ol","ego","ver","stv","pro")
|
||||
"ko","ne","en","po","ra","li","on","byl","cto","eni","ost","ol","ego","ver","stv","pro")
|
||||
|
||||
//For your event purposes.
|
||||
/datum/language/occursus
|
||||
name = LANGUAGE_EVENT1
|
||||
desc = "The Powers That Be have seen it fit to grace you with a special language that sounds like... something. This description should be overridden by the time you see this."
|
||||
speech_verb = "says"
|
||||
ask_verb = "asks"
|
||||
exclaim_verb = "shouts"
|
||||
colour = "warning"
|
||||
key = "]"
|
||||
flags = RESTRICTED
|
||||
syllables = list("chan","ange","thi","se")
|
||||
|
||||
@@ -242,7 +242,7 @@
|
||||
if(legcuffed)
|
||||
dat += "<BR><A href='?src=\ref[src];item=[slot_legcuffed]'>Legcuffed</A>"
|
||||
|
||||
if(suit && suit.accessories.len)
|
||||
if(suit && LAZYLEN(suit.accessories))
|
||||
dat += "<BR><A href='?src=\ref[src];item=tie'>Remove accessory</A>"
|
||||
dat += "<BR><A href='?src=\ref[src];item=splints'>Remove splints</A>"
|
||||
dat += "<BR><A href='?src=\ref[src];item=pockets'>Empty pockets</A>"
|
||||
|
||||
@@ -51,3 +51,6 @@
|
||||
|
||||
/mob/living/carbon/human/stok/New(var/new_loc)
|
||||
..(new_loc, SPECIES_MONKEY_UNATHI)
|
||||
|
||||
/mob/living/carbon/human/event1/New(var/new_loc)
|
||||
..(new_loc, SPECIES_EVENT1)
|
||||
|
||||
@@ -0,0 +1,221 @@
|
||||
/*
|
||||
This species is meant to be used both as a base for Event species and possible future per-round RNG'd species, hence the proc var-ization in some places.
|
||||
|
||||
IF YOU ARE USING THIS SPECIES:
|
||||
|
||||
Variables you may want to make use of are:
|
||||
|
||||
icobase and deform Set both to the same thing, unless you have special deformed sprites.
|
||||
mobtemplate The blank bounding box used by your species.
|
||||
mob_size The size class of the species. 20 is human.
|
||||
show_ssd What is shown when they're SSD?
|
||||
virus_immune Immune to viruses? 1/0
|
||||
short_sighted Permanent weldervision. 1/0
|
||||
blood_volume Initial blood volume.
|
||||
bloodloss_rate Multiplier for how fast a species bleeds out. Higher = Faster
|
||||
hunger_factor Multiplier for hunger.
|
||||
active_regen_mult Multiplier for 'Regenerate' power speed, in human_powers.dm
|
||||
|
||||
scream_verb The text descriptor of the scream. Default screams.
|
||||
male_scream_sound Sound played when a male *scream s.
|
||||
female_scream_sound Sound played when a female *scream s.
|
||||
male_cough_sounds List of cough sounds for males.
|
||||
female_cough_sounds List of cough sounds for females.
|
||||
male_sneeze_sound Sound played when a male *sneeze s..
|
||||
female_sneeze_sound Sound played when a female *sneeze s.
|
||||
|
||||
speech_sounds A list of sounds used randomly when the species talks.
|
||||
speech_chance Percentile chance to do the above.
|
||||
|
||||
total_health How much damage can they take before entering crit? Default 100.
|
||||
|
||||
brute_mod Physical damage multiplier.
|
||||
burn_mod Burn damage multiplier.
|
||||
oxy_mod Oxyloss modifier
|
||||
toxins_mod Toxloss modifier
|
||||
radiation_mod Radiation modifier
|
||||
flash_mod Stun from blindness modifier.
|
||||
sound_mod Stun from sounds, I.E. flashbangs.
|
||||
chemOD_mod Damage modifier for overdose
|
||||
siemens_coefficient The lower, the thicker the skin and better the insulation.
|
||||
darksight Native darksight distance.
|
||||
|
||||
meat_type The food given when they are turned into meat.
|
||||
remains_type The effect left behind when they are ashed.
|
||||
death_sound The sound played when they die.
|
||||
death_message The deathgasp.
|
||||
knockout_message The message when someone gets a lucky shot on the head.
|
||||
cloning_modifier The modifier given when they are by chance cloned.
|
||||
|
||||
Any 'heat' or 'pressure' vars. Environmental survivability.
|
||||
|
||||
speech_bubble_appearance Part of icon_state to use for speech bubbles when talking. See talk.dmi for available icons.
|
||||
|
||||
slowdown Passive movement speed malus (or boost, if negative)
|
||||
move_trail What effect marks are left when walking
|
||||
has_floating_eyes Whether the eyes can be shown above other icons
|
||||
has_glowing_eyes Whether the eyes are shown above all lighting
|
||||
water_movement How much faster or slower the species is in water
|
||||
snow_movement How much faster or slower the species is on snow
|
||||
item_slowdown_mod How affected by item slowdown the species is. Multiplier.
|
||||
|
||||
*/
|
||||
|
||||
/datum/species/event1 //Essentially, by default a 'better' human.
|
||||
name = SPECIES_EVENT1
|
||||
name_plural = SPECIES_EVENT1
|
||||
primitive_form = SPECIES_MONKEY
|
||||
unarmed_types = list(/datum/unarmed_attack/stomp/event1, /datum/unarmed_attack/kick/event1, /datum/unarmed_attack/punch/event1, /datum/unarmed_attack/bite/event1)
|
||||
blurb = "We're not quite sure where these things came from. Are you?"
|
||||
num_alternate_languages = 3
|
||||
species_language = LANGUAGE_GALCOM
|
||||
secondary_langs = list()
|
||||
name_language = null // Use the first-name last-name generator rather than a language scrambler
|
||||
|
||||
min_age = 0
|
||||
max_age = 999
|
||||
|
||||
health_hud_intensity = 1.5
|
||||
|
||||
flags = NO_MINOR_CUT | NO_HALLUCINATION | NO_INFECT
|
||||
|
||||
vision_flags = SEE_SELF
|
||||
darksight = 7
|
||||
|
||||
brute_mod = 0.9
|
||||
burn_mod = 0.9
|
||||
oxy_mod = 0.9
|
||||
toxins_mod = 0.9
|
||||
radiation_mod = 0.9
|
||||
flash_mod = 0.9
|
||||
sound_mod = 0.9
|
||||
chemOD_mod = 0.9
|
||||
siemens_coefficient = 0.9
|
||||
|
||||
spawn_flags = SPECIES_IS_RESTRICTED
|
||||
appearance_flags = HAS_SKIN_TONE | HAS_EYE_COLOR
|
||||
|
||||
//Far more organs, due to the issues with adding them and their respective verbs mid round, I'll include them here.
|
||||
//Colormatch organs will change to match the blood color of the species.
|
||||
has_organ = list(
|
||||
O_HEART = /obj/item/organ/internal/heart/grey/colormatch,
|
||||
O_LUNGS = /obj/item/organ/internal/lungs/grey/colormatch,
|
||||
O_LIVER = /obj/item/organ/internal/liver/grey/colormatch,
|
||||
O_KIDNEYS = /obj/item/organ/internal/kidneys/grey/colormatch,
|
||||
O_BRAIN = /obj/item/organ/internal/brain/grey/colormatch,
|
||||
O_EYES = /obj/item/organ/internal/eyes/grey/colormatch,
|
||||
O_PLASMA = /obj/item/organ/internal/xenos/plasmavessel/grey/colormatch,
|
||||
O_ACID = /obj/item/organ/internal/xenos/acidgland/grey/colormatch,
|
||||
O_HIVE = /obj/item/organ/internal/xenos/hivenode/grey/colormatch,
|
||||
O_RESIN = /obj/item/organ/internal/xenos/resinspinner/grey/colormatch
|
||||
)
|
||||
|
||||
var/use_bodyshape = SPECIES_HUMAN
|
||||
var/waterbreathing = 0
|
||||
var/overcome_gravity = 0
|
||||
var/hover = 0
|
||||
|
||||
/datum/species/event1/proc/set_limbset(var/setnum = 1) //Will require existing ones to be respawned for changes to take effect.
|
||||
switch(setnum)
|
||||
if(1) //Normal.
|
||||
has_limbs = list(
|
||||
BP_TORSO = list("path" = /obj/item/organ/external/chest),
|
||||
BP_GROIN = list("path" = /obj/item/organ/external/groin),
|
||||
BP_HEAD = list("path" = /obj/item/organ/external/head),
|
||||
BP_L_ARM = list("path" = /obj/item/organ/external/arm),
|
||||
BP_R_ARM = list("path" = /obj/item/organ/external/arm/right),
|
||||
BP_L_LEG = list("path" = /obj/item/organ/external/leg),
|
||||
BP_R_LEG = list("path" = /obj/item/organ/external/leg/right),
|
||||
BP_L_HAND = list("path" = /obj/item/organ/external/hand),
|
||||
BP_R_HAND = list("path" = /obj/item/organ/external/hand/right),
|
||||
BP_L_FOOT = list("path" = /obj/item/organ/external/foot),
|
||||
BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right)
|
||||
)
|
||||
if(2) //No broken bones.
|
||||
has_limbs = list(
|
||||
BP_TORSO = list("path" = /obj/item/organ/external/chest/unbreakable),
|
||||
BP_GROIN = list("path" = /obj/item/organ/external/groin/unbreakable),
|
||||
BP_HEAD = list("path" = /obj/item/organ/external/head/unbreakable),
|
||||
BP_L_ARM = list("path" = /obj/item/organ/external/arm/unbreakable),
|
||||
BP_R_ARM = list("path" = /obj/item/organ/external/arm/right/unbreakable),
|
||||
BP_L_LEG = list("path" = /obj/item/organ/external/leg/unbreakable),
|
||||
BP_R_LEG = list("path" = /obj/item/organ/external/leg/right/unbreakable),
|
||||
BP_L_HAND = list("path" = /obj/item/organ/external/hand/unbreakable),
|
||||
BP_R_HAND = list("path" = /obj/item/organ/external/hand/right/unbreakable),
|
||||
BP_L_FOOT = list("path" = /obj/item/organ/external/foot/unbreakable),
|
||||
BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right/unbreakable)
|
||||
)
|
||||
if(3) //No removing from the body.
|
||||
has_limbs = list(
|
||||
BP_TORSO = list("path" = /obj/item/organ/external/chest/unseverable),
|
||||
BP_GROIN = list("path" = /obj/item/organ/external/groin/unseverable),
|
||||
BP_HEAD = list("path" = /obj/item/organ/external/head/unseverable),
|
||||
BP_L_ARM = list("path" = /obj/item/organ/external/arm/unseverable),
|
||||
BP_R_ARM = list("path" = /obj/item/organ/external/arm/right/unseverable),
|
||||
BP_L_LEG = list("path" = /obj/item/organ/external/leg/unseverable),
|
||||
BP_R_LEG = list("path" = /obj/item/organ/external/leg/right/unseverable),
|
||||
BP_L_HAND = list("path" = /obj/item/organ/external/hand/unseverable),
|
||||
BP_R_HAND = list("path" = /obj/item/organ/external/hand/right/unseverable),
|
||||
BP_L_FOOT = list("path" = /obj/item/organ/external/foot/unseverable),
|
||||
BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right/unseverable)
|
||||
)
|
||||
if(4) //No breaking, OR removing from the body. For things that are more monsterous.
|
||||
has_limbs = list(
|
||||
BP_TORSO = list("path" = /obj/item/organ/external/chest/indestructible),
|
||||
BP_GROIN = list("path" = /obj/item/organ/external/groin/indestructible),
|
||||
BP_HEAD = list("path" = /obj/item/organ/external/head/indestructible),
|
||||
BP_L_ARM = list("path" = /obj/item/organ/external/arm/indestructible),
|
||||
BP_R_ARM = list("path" = /obj/item/organ/external/arm/right/indestructible),
|
||||
BP_L_LEG = list("path" = /obj/item/organ/external/leg/indestructible),
|
||||
BP_R_LEG = list("path" = /obj/item/organ/external/leg/right/indestructible),
|
||||
BP_L_HAND = list("path" = /obj/item/organ/external/hand/indestructible),
|
||||
BP_R_HAND = list("path" = /obj/item/organ/external/hand/right/indestructible),
|
||||
BP_L_FOOT = list("path" = /obj/item/organ/external/foot/indestructible),
|
||||
BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right/indestructible)
|
||||
)
|
||||
return
|
||||
|
||||
/datum/species/event1/proc/choose_limbset()
|
||||
var/list/limb_sets = list("Normal" = 1, "Unbreakable" = 2, "Unseverable" = 3, "Indestructible" = 4)
|
||||
var/choice = input("Choose limb set to use for future spawns.", "Limb types.") as null|anything in limb_sets
|
||||
set_limbset(limb_sets[choice])
|
||||
return limb_sets[choice]
|
||||
|
||||
/datum/species/event1/proc/toggle_thermal()
|
||||
vision_flags ^= SEE_MOBS
|
||||
|
||||
/datum/species/event1/proc/toggle_meson()
|
||||
vision_flags ^= SEE_TURFS
|
||||
|
||||
/datum/species/event1/proc/toggle_material()
|
||||
vision_flags ^= SEE_OBJS
|
||||
|
||||
/datum/species/event1/proc/toggle_infection()
|
||||
flags ^= NO_INFECT
|
||||
|
||||
/datum/species/event1/proc/toggle_noslip()
|
||||
flags ^= NO_SLIP
|
||||
|
||||
/datum/species/event1/proc/toggle_cloning()
|
||||
flags ^= NO_SCAN
|
||||
|
||||
/datum/species/event1/proc/toggle_pain()
|
||||
flags ^= NO_PAIN
|
||||
|
||||
/datum/species/event1/proc/toggle_embedding()
|
||||
flags ^= NO_EMBED
|
||||
|
||||
/datum/species/event1/proc/toggle_plant() //Maybe it's a distant cousin of the Venus Fly Trap.
|
||||
flags ^= IS_PLANT
|
||||
|
||||
/datum/species/event1/get_bodytype(var/mob/living/carbon/human/H) //Default to human sprites, if they're based on another species, var edit use_bodyshape to the correct thing in _defines/mobs.dm of the species you want to use.
|
||||
return use_bodyshape
|
||||
|
||||
/datum/species/event1/can_breathe_water()
|
||||
return waterbreathing
|
||||
|
||||
/datum/species/event1/can_overcome_gravity(var/mob/living/carbon/human/H)
|
||||
return overcome_gravity
|
||||
|
||||
/datum/species/event1/can_fall(var/mob/living/carbon/human/H)
|
||||
return hover
|
||||
@@ -54,8 +54,8 @@
|
||||
var/language = LANGUAGE_GALCOM // Default racial language, if any.
|
||||
var/species_language = LANGUAGE_GALCOM // Used on the Character Setup screen
|
||||
var/list/secondary_langs = list() // The names of secondary languages that are available to this species.
|
||||
var/list/speech_sounds // A list of sounds to potentially play when speaking.
|
||||
var/list/speech_chance // The likelihood of a speech sound playing.
|
||||
var/list/speech_sounds = list() // A list of sounds to potentially play when speaking.
|
||||
var/list/speech_chance = list() // The likelihood of a speech sound playing.
|
||||
var/num_alternate_languages = 0 // How many secondary languages are available to select at character creation
|
||||
var/name_language = LANGUAGE_GALCOM // The language to use when determining names for this species, or null to use the first name/last name generator
|
||||
|
||||
@@ -153,7 +153,7 @@
|
||||
var/health_hud_intensity = 1 // This modifies how intensely the health hud is colored.
|
||||
|
||||
// Body/form vars.
|
||||
var/list/inherent_verbs // Species-specific verbs.
|
||||
var/list/inherent_verbs = list() // Species-specific verbs.
|
||||
var/has_fine_manipulation = 1 // Can use small items.
|
||||
var/siemens_coefficient = 1 // The lower, the thicker the skin and better the insulation.
|
||||
var/darksight = 2 // Native darksight distance.
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
return
|
||||
if("tie")
|
||||
var/obj/item/clothing/under/suit = w_uniform
|
||||
if(!istype(suit) || !suit.accessories.len)
|
||||
if(!istype(suit) || !LAZYLEN(suit.accessories))
|
||||
return
|
||||
var/obj/item/clothing/accessory/A = suit.accessories[1]
|
||||
if(!istype(A))
|
||||
|
||||
@@ -113,6 +113,8 @@ var/global/list/sparring_attack_cache = list()
|
||||
sharp = 0
|
||||
edge = 0
|
||||
|
||||
/datum/unarmed_attack/bite/event1
|
||||
|
||||
/datum/unarmed_attack/bite/is_usable(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone)
|
||||
|
||||
if (user.is_muzzled())
|
||||
@@ -128,6 +130,8 @@ var/global/list/sparring_attack_cache = list()
|
||||
eye_attack_text_victim = "digits"
|
||||
damage = 0
|
||||
|
||||
/datum/unarmed_attack/punch/event1
|
||||
|
||||
/datum/unarmed_attack/punch/show_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage)
|
||||
var/obj/item/organ/external/affecting = target.get_organ(zone)
|
||||
var/organ = affecting.name
|
||||
@@ -179,6 +183,8 @@ var/global/list/sparring_attack_cache = list()
|
||||
attack_sound = "swing_hit"
|
||||
damage = 0
|
||||
|
||||
/datum/unarmed_attack/kick/event1
|
||||
|
||||
/datum/unarmed_attack/kick/is_usable(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone)
|
||||
if (user.legcuffed)
|
||||
return 0
|
||||
@@ -220,6 +226,8 @@ var/global/list/sparring_attack_cache = list()
|
||||
attack_sound = "swing_hit"
|
||||
damage = 0
|
||||
|
||||
/datum/unarmed_attack/stomp/event1
|
||||
|
||||
/datum/unarmed_attack/stomp/is_usable(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone)
|
||||
|
||||
if (user.legcuffed)
|
||||
|
||||
@@ -730,7 +730,14 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
|
||||
if(!wear_suit)
|
||||
return //No point, no suit.
|
||||
|
||||
overlays_standing[SUIT_LAYER] = wear_suit.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_wear_suit_str, default_icon = INV_SUIT_DEF_ICON, default_layer = SUIT_LAYER)
|
||||
// Part of splitting the suit sprites up
|
||||
var/iconFile = INV_SUIT_DEF_ICON
|
||||
if(istype(wear_suit, /obj/item/clothing/suit))
|
||||
var/obj/item/clothing/suit/S = wear_suit
|
||||
if(S.update_icon_define)
|
||||
iconFile = S.update_icon_define
|
||||
|
||||
overlays_standing[SUIT_LAYER] = wear_suit.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_wear_suit_str, default_icon = iconFile, default_layer = SUIT_LAYER)
|
||||
|
||||
apply_layer(SUIT_LAYER)
|
||||
|
||||
|
||||
@@ -436,6 +436,8 @@ var/global/list/robot_modules = list(
|
||||
synths += metal
|
||||
synths += glass
|
||||
synths += plasteel
|
||||
synths += wood
|
||||
synths += plastic
|
||||
synths += wire
|
||||
|
||||
var/obj/item/weapon/matter_decompiler/MD = new /obj/item/weapon/matter_decompiler(src)
|
||||
|
||||
@@ -62,9 +62,13 @@
|
||||
var/corpse = /obj/effect/landmark/mobcorpse/syndicatesoldier
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/death()
|
||||
..()
|
||||
if(corpse)
|
||||
..()
|
||||
new corpse (src.loc)
|
||||
else
|
||||
..(0,"explodes!")
|
||||
new /obj/effect/gibspawner/human(src.loc)
|
||||
explosion(get_turf(src), -1, 0, 1, 3)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
@@ -142,6 +146,24 @@
|
||||
|
||||
loot_list = list(/obj/item/weapon/gun/projectile/automatic/c20r = 100)
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/ranged/laser
|
||||
icon_state = "syndicateranged_laser"
|
||||
icon_living = "syndicateranged_laser"
|
||||
rapid = 0
|
||||
projectiletype = /obj/item/projectile/beam/midlaser
|
||||
projectilesound = 'sound/weapons/Laser.ogg'
|
||||
|
||||
loot_list = list(/obj/item/weapon/gun/energy/laser = 100)
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/ranged/ionrifle
|
||||
icon_state = "syndicateranged_ionrifle"
|
||||
icon_living = "syndicateranged_ionrifle"
|
||||
rapid = 0
|
||||
projectiletype = /obj/item/projectile/ion
|
||||
projectilesound = 'sound/weapons/Laser.ogg'
|
||||
|
||||
loot_list = list(/obj/item/weapon/gun/energy/ionrifle = 100)
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/ranged/space
|
||||
name = "space mercenary" //VOREStation Edit
|
||||
icon_state = "syndicaterangedpsace"
|
||||
@@ -165,6 +187,42 @@
|
||||
/mob/living/simple_animal/hostile/syndicate/ranged/space/Process_Spacemove(var/check_drift = 0)
|
||||
return
|
||||
|
||||
///////////////////////////////////////////////
|
||||
// POI Mobs
|
||||
// Don't leave corpses, to help balance loot.
|
||||
///////////////////////////////////////////////
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/poi
|
||||
loot_list = list()
|
||||
corpse = null
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/melee/poi
|
||||
loot_list = list()
|
||||
corpse = null
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/melee/space/poi
|
||||
loot_list = list()
|
||||
corpse = null
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/ranged/poi
|
||||
loot_list = list()
|
||||
corpse = null
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/ranged/laser/poi
|
||||
loot_list = list()
|
||||
corpse = null
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/ranged/ionrifle/poi
|
||||
loot_list = list()
|
||||
corpse = null
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/ranged/space/poi
|
||||
loot_list = list()
|
||||
corpse = null
|
||||
|
||||
|
||||
//Viscerators
|
||||
|
||||
/mob/living/simple_animal/hostile/viscerator
|
||||
name = "viscerator"
|
||||
desc = "A small, twin-bladed machine capable of inflicting very deadly lacerations."
|
||||
|
||||
@@ -146,3 +146,15 @@ GLOBAL_LIST_BOILERPLATE(all_brain_organs, /obj/item/organ/internal/brain)
|
||||
desc = "A tightly furled roll of paper, covered with indecipherable runes."
|
||||
icon = 'icons/obj/wizard.dmi'
|
||||
icon_state = "scroll"
|
||||
|
||||
/obj/item/organ/internal/brain/grey
|
||||
desc = "A piece of juicy meat found in a person's head. This one is strange."
|
||||
icon_state = "brain_grey"
|
||||
|
||||
/obj/item/organ/internal/brain/grey/colormatch/New()
|
||||
..()
|
||||
var/mob/living/carbon/human/H = null
|
||||
spawn(15)
|
||||
if(ishuman(owner))
|
||||
H = owner
|
||||
color = H.species.blood_color
|
||||
|
||||
@@ -21,6 +21,17 @@
|
||||
..()
|
||||
robotize()
|
||||
|
||||
/obj/item/organ/internal/eyes/grey
|
||||
icon_state = "eyes_grey"
|
||||
|
||||
/obj/item/organ/internal/eyes/grey/colormatch/New()
|
||||
..()
|
||||
var/mob/living/carbon/human/H = null
|
||||
spawn(15)
|
||||
if(ishuman(owner))
|
||||
H = owner
|
||||
color = H.species.blood_color
|
||||
|
||||
/obj/item/organ/internal/eyes/proc/change_eye_color()
|
||||
set name = "Change Eye Color"
|
||||
set desc = "Changes your robotic eye color instantly."
|
||||
|
||||
@@ -20,3 +20,15 @@
|
||||
if(prob(1))
|
||||
owner.custom_pain("A stabbing pain rolls through your chest!",1)
|
||||
owner.apply_damage(damage = 25, damagetype = HALLOSS, def_zone = parent_organ)
|
||||
|
||||
/obj/item/organ/internal/heart/grey
|
||||
icon_state = "heart_grey-on"
|
||||
dead_icon = "heart_grey-off"
|
||||
|
||||
/obj/item/organ/internal/heart/grey/colormatch/New()
|
||||
..()
|
||||
var/mob/living/carbon/human/H = null
|
||||
spawn(15)
|
||||
if(ishuman(owner))
|
||||
H = owner
|
||||
color = H.species.blood_color
|
||||
|
||||
@@ -35,3 +35,14 @@
|
||||
owner.custom_pain("You feel extremely tired, like you can't move!",1)
|
||||
owner.m_intent = "walk"
|
||||
owner.hud_used.move_intent.icon_state = "walking"
|
||||
|
||||
/obj/item/organ/internal/kidneys/grey
|
||||
icon_state = "kidneys_grey"
|
||||
|
||||
/obj/item/organ/internal/kidneys/grey/colormatch/New()
|
||||
..()
|
||||
var/mob/living/carbon/human/H = null
|
||||
spawn(15)
|
||||
if(ishuman(owner))
|
||||
H = owner
|
||||
color = H.species.blood_color
|
||||
|
||||
@@ -57,3 +57,14 @@
|
||||
if(prob(1) && owner.getToxLoss() < owner.getMaxHealth()*0.3)
|
||||
//owner << "" //Toxins provide their own messages for pain
|
||||
owner.adjustToxLoss(5) //Not realistic to PA but there are basically no 'real' liver infections
|
||||
|
||||
/obj/item/organ/internal/liver/grey
|
||||
icon_state = "liver_grey"
|
||||
|
||||
/obj/item/organ/internal/liver/grey/colormatch/New()
|
||||
..()
|
||||
var/mob/living/carbon/human/H = null
|
||||
spawn(15)
|
||||
if(ishuman(owner))
|
||||
H = owner
|
||||
color = H.species.blood_color
|
||||
|
||||
@@ -39,3 +39,14 @@
|
||||
if(prob(1))
|
||||
owner.custom_pain("You suddenly feel short of breath and take a sharp, painful breath!",1)
|
||||
owner.adjustOxyLoss(30) //Look it's hard to simulate low O2 perfusion okay
|
||||
|
||||
/obj/item/organ/internal/lungs/grey
|
||||
icon_state = "lungs_grey"
|
||||
|
||||
/obj/item/organ/internal/lungs/grey/colormatch/New()
|
||||
..()
|
||||
var/mob/living/carbon/human/H = null
|
||||
spawn(15)
|
||||
if(ishuman(owner))
|
||||
H = owner
|
||||
color = H.species.blood_color
|
||||
|
||||
@@ -27,6 +27,7 @@ var/list/organ_cache = list()
|
||||
var/min_bruised_damage = 10 // Damage before considered bruised
|
||||
var/min_broken_damage = 30 // Damage before becoming broken
|
||||
var/max_damage // Damage cap
|
||||
var/can_reject = 1 // Can this organ reject?
|
||||
var/rejecting // Is this organ already being rejected?
|
||||
var/preserved = 0 // If this is 1, prevents organ decay.
|
||||
|
||||
@@ -200,7 +201,7 @@ var/list/organ_cache = list()
|
||||
/obj/item/organ/proc/handle_rejection()
|
||||
// Process unsuitable transplants. TODO: consider some kind of
|
||||
// immunosuppressant that changes transplant data to make it match.
|
||||
if(dna)
|
||||
if(dna && can_reject)
|
||||
if(!rejecting)
|
||||
if(blood_incompatible(dna.b_type, owner.dna.b_type, species.name, owner.species.name)) //VOREStation Edit - Process species by name.
|
||||
rejecting = 1
|
||||
|
||||
@@ -0,0 +1,65 @@
|
||||
/obj/item/organ/external/chest/indestructible
|
||||
cannot_gib = 1
|
||||
cannot_amputate = 1
|
||||
cannot_break = 1
|
||||
dislocated = -1
|
||||
|
||||
/obj/item/organ/external/groin/indestructible
|
||||
cannot_gib = 1
|
||||
cannot_amputate = 1
|
||||
cannot_break = 1
|
||||
dislocated = -1
|
||||
|
||||
/obj/item/organ/external/arm/indestructible
|
||||
cannot_gib = 1
|
||||
cannot_amputate = 1
|
||||
cannot_break = 1
|
||||
dislocated = -1
|
||||
|
||||
/obj/item/organ/external/arm/right/indestructible
|
||||
cannot_gib = 1
|
||||
cannot_amputate = 1
|
||||
cannot_break = 1
|
||||
dislocated = -1
|
||||
|
||||
/obj/item/organ/external/leg/indestructible
|
||||
cannot_gib = 1
|
||||
cannot_amputate = 1
|
||||
cannot_break = 1
|
||||
dislocated = -1
|
||||
|
||||
/obj/item/organ/external/leg/right/indestructible
|
||||
cannot_gib = 1
|
||||
cannot_amputate = 1
|
||||
cannot_break = 1
|
||||
dislocated = -1
|
||||
|
||||
/obj/item/organ/external/foot/indestructible
|
||||
cannot_gib = 1
|
||||
cannot_amputate = 1
|
||||
cannot_break = 1
|
||||
dislocated = -1
|
||||
|
||||
/obj/item/organ/external/foot/right/indestructible
|
||||
cannot_gib = 1
|
||||
cannot_amputate = 1
|
||||
cannot_break = 1
|
||||
dislocated = -1
|
||||
|
||||
/obj/item/organ/external/hand/indestructible
|
||||
cannot_gib = 1
|
||||
cannot_amputate = 1
|
||||
cannot_break = 1
|
||||
dislocated = -1
|
||||
|
||||
/obj/item/organ/external/hand/right/indestructible
|
||||
cannot_gib = 1
|
||||
cannot_amputate = 1
|
||||
cannot_break = 1
|
||||
dislocated = -1
|
||||
|
||||
/obj/item/organ/external/head/indestructible
|
||||
cannot_gib = 1
|
||||
cannot_amputate = 1
|
||||
cannot_break = 1
|
||||
dislocated = -1
|
||||
@@ -0,0 +1,43 @@
|
||||
/obj/item/organ/external/chest/unseverable
|
||||
cannot_gib = 1
|
||||
cannot_amputate = 1
|
||||
|
||||
/obj/item/organ/external/groin/unseverable
|
||||
cannot_gib = 1
|
||||
cannot_amputate = 1
|
||||
|
||||
/obj/item/organ/external/arm/unseverable
|
||||
cannot_gib = 1
|
||||
cannot_amputate = 1
|
||||
|
||||
/obj/item/organ/external/arm/right/unseverable
|
||||
cannot_gib = 1
|
||||
cannot_amputate = 1
|
||||
|
||||
/obj/item/organ/external/leg/unseverable
|
||||
cannot_gib = 1
|
||||
cannot_amputate = 1
|
||||
|
||||
/obj/item/organ/external/leg/right/unseverable
|
||||
cannot_gib = 1
|
||||
cannot_amputate = 1
|
||||
|
||||
/obj/item/organ/external/foot/unseverable
|
||||
cannot_gib = 1
|
||||
cannot_amputate = 1
|
||||
|
||||
/obj/item/organ/external/foot/right/unseverable
|
||||
cannot_gib = 1
|
||||
cannot_amputate = 1
|
||||
|
||||
/obj/item/organ/external/hand/unseverable
|
||||
cannot_gib = 1
|
||||
cannot_amputate = 1
|
||||
|
||||
/obj/item/organ/external/hand/right/unseverable
|
||||
cannot_gib = 1
|
||||
cannot_amputate = 1
|
||||
|
||||
/obj/item/organ/external/head/unseverable
|
||||
cannot_gib = 1
|
||||
cannot_amputate = 1
|
||||
@@ -1,23 +1,46 @@
|
||||
//XENOMORPH ORGANS
|
||||
/obj/item/organ/internal/xenos
|
||||
name = "xeno organ"
|
||||
icon = 'icons/effects/blood.dmi'
|
||||
icon = 'icons/obj/surgery.dmi'
|
||||
desc = "It smells like an accident in a chemical factory."
|
||||
|
||||
/obj/item/organ/internal/xenos/eggsac
|
||||
name = "egg sac"
|
||||
parent_organ = BP_GROIN
|
||||
icon_state = "xgibmid1"
|
||||
icon_state = "sac"
|
||||
organ_tag = O_EGG
|
||||
|
||||
/obj/item/organ/internal/xenos/eggsac/grey
|
||||
icon_state = "sac_grey"
|
||||
|
||||
/obj/item/organ/internal/xenos/eggsac/grey/colormatch/New()
|
||||
..()
|
||||
var/mob/living/carbon/human/H = null
|
||||
spawn(15)
|
||||
if(ishuman(owner))
|
||||
H = owner
|
||||
color = H.species.blood_color
|
||||
|
||||
/obj/item/organ/internal/xenos/plasmavessel
|
||||
name = "plasma vessel"
|
||||
parent_organ = BP_TORSO
|
||||
icon_state = "xgibdown1"
|
||||
icon_state = "plasma"
|
||||
organ_tag = O_PLASMA
|
||||
var/stored_plasma = 0
|
||||
var/max_plasma = 500
|
||||
|
||||
/obj/item/organ/internal/xenos/plasmavessel/grey
|
||||
icon_state = "plasma_grey"
|
||||
stored_plasma = 200
|
||||
|
||||
/obj/item/organ/internal/xenos/plasmavessel/grey/colormatch/New()
|
||||
..()
|
||||
var/mob/living/carbon/human/H = null
|
||||
spawn(15)
|
||||
if(ishuman(owner))
|
||||
H = owner
|
||||
color = H.species.blood_color
|
||||
|
||||
/obj/item/organ/internal/xenos/plasmavessel/queen
|
||||
name = "bloated plasma vessel"
|
||||
stored_plasma = 200
|
||||
@@ -35,17 +58,51 @@
|
||||
/obj/item/organ/internal/xenos/acidgland
|
||||
name = "acid gland"
|
||||
parent_organ = BP_HEAD
|
||||
icon_state = "xgibtorso"
|
||||
icon_state = "acidgland"
|
||||
organ_tag = O_ACID
|
||||
|
||||
/obj/item/organ/internal/xenos/acidgland/grey
|
||||
icon_state = "acidgland_grey"
|
||||
|
||||
/obj/item/organ/internal/xenos/acidgland/grey/colormatch/New()
|
||||
..()
|
||||
var/mob/living/carbon/human/H = null
|
||||
spawn(15)
|
||||
if(ishuman(owner))
|
||||
H = owner
|
||||
color = H.species.blood_color
|
||||
|
||||
/obj/item/organ/internal/xenos/hivenode
|
||||
name = "hive node"
|
||||
parent_organ = BP_TORSO
|
||||
icon_state = "xgibmid2"
|
||||
icon_state = "xenode"
|
||||
organ_tag = O_HIVE
|
||||
|
||||
/obj/item/organ/internal/xenos/hivenode/grey
|
||||
icon_state = "xenode_grey"
|
||||
|
||||
/obj/item/organ/internal/xenos/hivenode/grey/colormatch/New()
|
||||
..()
|
||||
var/mob/living/carbon/human/H = null
|
||||
spawn(15)
|
||||
if(ishuman(owner))
|
||||
H = owner
|
||||
color = H.species.blood_color
|
||||
|
||||
/obj/item/organ/internal/xenos/resinspinner
|
||||
name = "resin spinner"
|
||||
parent_organ = BP_HEAD
|
||||
icon_state = "xgibmid2"
|
||||
icon_state = "xenode"
|
||||
organ_tag = O_RESIN
|
||||
|
||||
|
||||
/obj/item/organ/internal/xenos/resinspinner/grey
|
||||
icon_state = "xenode_grey"
|
||||
|
||||
/obj/item/organ/internal/xenos/resinspinner/grey/colormatch/New()
|
||||
..()
|
||||
var/mob/living/carbon/human/H = null
|
||||
spawn(15)
|
||||
if(ishuman(owner))
|
||||
H = owner
|
||||
color = H.species.blood_color
|
||||
|
||||
@@ -41,8 +41,8 @@
|
||||
/obj/structure/bookcase/manuals/xenoarchaeology
|
||||
name = "Xenoarchaeology Manuals bookcase"
|
||||
|
||||
/obj/structure/bookcase/manuals/xenoarchaeology/New()
|
||||
..()
|
||||
/obj/structure/bookcase/manuals/xenoarchaeology/initialize()
|
||||
. = ..()
|
||||
new /obj/item/weapon/book/manual/excavation(src)
|
||||
new /obj/item/weapon/book/manual/mass_spectrometry(src)
|
||||
new /obj/item/weapon/book/manual/materials_chemistry_analysis(src)
|
||||
@@ -53,23 +53,22 @@
|
||||
|
||||
/obj/structure/closet/secure_closet/xenoarchaeologist
|
||||
name = "Xenoarchaeologist Locker"
|
||||
req_access = list(access_tox_storage)
|
||||
icon_state = "secureres1"
|
||||
icon_closed = "secureres"
|
||||
icon_locked = "secureres1"
|
||||
icon_opened = "secureresopen"
|
||||
icon_broken = "secureresbroken"
|
||||
icon_off = "secureresoff"
|
||||
req_access = list(access_tox_storage)
|
||||
|
||||
/obj/structure/closet/secure_closet/xenoarchaeologist/New()
|
||||
..()
|
||||
new /obj/item/clothing/under/rank/scientist(src)
|
||||
new /obj/item/clothing/suit/storage/toggle/labcoat(src)
|
||||
new /obj/item/clothing/shoes/white(src)
|
||||
new /obj/item/clothing/glasses/science(src)
|
||||
new /obj/item/device/radio/headset/headset_sci(src)
|
||||
new /obj/item/weapon/storage/belt/archaeology(src)
|
||||
new /obj/item/weapon/storage/excavation(src)
|
||||
starts_with = list(
|
||||
/obj/item/clothing/under/rank/scientist,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat,
|
||||
/obj/item/clothing/shoes/white,
|
||||
/obj/item/clothing/glasses/science,
|
||||
/obj/item/device/radio/headset/headset_sci,
|
||||
/obj/item/weapon/storage/belt/archaeology,
|
||||
/obj/item/weapon/storage/excavation)
|
||||
|
||||
/obj/structure/closet/excavation
|
||||
name = "Excavation tools"
|
||||
@@ -77,23 +76,22 @@
|
||||
icon_closed = "toolcloset"
|
||||
icon_opened = "toolclosetopen"
|
||||
|
||||
/obj/structure/closet/excavation/New()
|
||||
..()
|
||||
new /obj/item/weapon/storage/belt/archaeology(src)
|
||||
new /obj/item/weapon/storage/excavation(src)
|
||||
new /obj/item/device/flashlight/lantern(src)
|
||||
new /obj/item/device/ano_scanner(src)
|
||||
new /obj/item/device/depth_scanner(src)
|
||||
new /obj/item/device/core_sampler(src)
|
||||
new /obj/item/device/gps(src)
|
||||
new /obj/item/device/beacon_locator(src)
|
||||
new /obj/item/device/radio/beacon(src)
|
||||
new /obj/item/clothing/glasses/meson(src)
|
||||
new /obj/item/weapon/pickaxe(src)
|
||||
new /obj/item/device/measuring_tape(src)
|
||||
new /obj/item/weapon/pickaxe/hand(src)
|
||||
new /obj/item/weapon/storage/bag/fossils(src)
|
||||
new /obj/item/weapon/hand_labeler(src)
|
||||
starts_with = list(
|
||||
/obj/item/weapon/storage/belt/archaeology,
|
||||
/obj/item/weapon/storage/excavation,
|
||||
/obj/item/device/flashlight/lantern,
|
||||
/obj/item/device/ano_scanner,
|
||||
/obj/item/device/depth_scanner,
|
||||
/obj/item/device/core_sampler,
|
||||
/obj/item/device/gps,
|
||||
/obj/item/device/beacon_locator,
|
||||
/obj/item/device/radio/beacon,
|
||||
/obj/item/clothing/glasses/meson,
|
||||
/obj/item/weapon/pickaxe,
|
||||
/obj/item/device/measuring_tape,
|
||||
/obj/item/weapon/pickaxe/hand,
|
||||
/obj/item/weapon/storage/bag/fossils,
|
||||
/obj/item/weapon/hand_labeler)
|
||||
|
||||
/obj/machinery/alarm/isolation
|
||||
req_one_access = list(access_research, access_atmospherics, access_engine_equip)
|
||||
|
||||
Reference in New Issue
Block a user