mirror of
https://github.com/CHOMPstation/CHOMPstation.git
synced 2026-08-23 20:16:19 +01:00
@@ -79,13 +79,6 @@ datum/controller/game_controller/proc/setup()
|
||||
for(var/i=0, i<max_secret_rooms, i++)
|
||||
make_mining_asteroid_secret()
|
||||
|
||||
//Create the mining ore distribution map.
|
||||
var/datum/ore_distribution/O = new()
|
||||
O.populate_distribution_map()
|
||||
|
||||
//Set up spawn points.
|
||||
populate_spawn_points()
|
||||
|
||||
spawn(0)
|
||||
if(ticker)
|
||||
ticker.pregame()
|
||||
@@ -114,6 +107,17 @@ datum/controller/game_controller/proc/setup_objects()
|
||||
var/obj/machinery/atmospherics/unary/vent_scrubber/T = U
|
||||
T.broadcast_status()
|
||||
|
||||
//Create the mining ore distribution map.
|
||||
world << "<b><font color='red'>Generating resource distribution map.</b></font>"
|
||||
var/datum/ore_distribution/O = new()
|
||||
O.populate_distribution_map()
|
||||
|
||||
//Set up spawn points.
|
||||
populate_spawn_points()
|
||||
|
||||
//Set up gear list.
|
||||
populate_gear_list()
|
||||
|
||||
world << "\red \b Initializations complete."
|
||||
sleep(-1)
|
||||
|
||||
|
||||
@@ -346,9 +346,42 @@ var/global/datum/controller/occupations/job_master
|
||||
|
||||
|
||||
proc/EquipRank(var/mob/living/carbon/human/H, var/rank, var/joined_late = 0)
|
||||
|
||||
if(!H) return 0
|
||||
|
||||
var/datum/job/job = GetJob(rank)
|
||||
var/list/spawn_in_storage = list()
|
||||
|
||||
if(job)
|
||||
|
||||
//Equip custom gear loadout.
|
||||
if(H.client.prefs.gear && H.client.prefs.gear.len)
|
||||
|
||||
for(var/thing in H.client.prefs.gear)
|
||||
var/datum/gear/G = gear_datums[thing]
|
||||
if(G)
|
||||
var/permitted
|
||||
if(G.allowed_roles)
|
||||
for(var/job_name in G.allowed_roles)
|
||||
if(job.title == job_name)
|
||||
permitted = 1
|
||||
else
|
||||
permitted = 1
|
||||
|
||||
if(G.whitelisted && !is_alien_whitelisted(H, G.whitelisted))
|
||||
permitted = 0
|
||||
|
||||
if(!permitted)
|
||||
H << "\red Your current job or whitelist status does not permit you to spawn with [thing]!"
|
||||
continue
|
||||
|
||||
if(G.slot)
|
||||
H.equip_to_slot_or_del(new G.path(H), G.slot)
|
||||
else
|
||||
spawn_in_storage += thing
|
||||
|
||||
|
||||
//Equip job items.
|
||||
job.equip(H)
|
||||
else
|
||||
H << "Your job is [rank] and the game just can't handle it! Please report this bug to an administrator."
|
||||
@@ -428,17 +461,28 @@ var/global/datum/controller/occupations/job_master
|
||||
new /obj/item/weapon/storage/box/survival(BPK)
|
||||
H.equip_to_slot_or_del(BPK, slot_back,1)
|
||||
|
||||
//Deferred item spawning.
|
||||
var/obj/item/weapon/storage/B = locate(/obj/item/weapon/storage/backpack) in H.contents
|
||||
|
||||
if(isnull(B) || istype(B))
|
||||
B = locate(/obj/item/weapon/storage/box) in H.contents
|
||||
|
||||
if(!isnull(B))
|
||||
for(var/thing in spawn_in_storage)
|
||||
var/datum/gear/G = gear_datums[thing]
|
||||
new G.path(B)
|
||||
|
||||
//TODO: Generalize this by-species
|
||||
if(H.species)
|
||||
if(H.species.name == "Tajaran" || H.species.name == "Unathi")
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(H),slot_shoes,1)
|
||||
else if(H.species.name == "Vox")
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/mask/breath(src), slot_wear_mask)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/mask/breath(H), slot_wear_mask)
|
||||
if(!H.r_hand)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/tank/nitrogen(src), slot_r_hand)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/tank/nitrogen(H), slot_r_hand)
|
||||
H.internal = H.r_hand
|
||||
else if (!H.l_hand)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/tank/nitrogen(src), slot_l_hand)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/tank/nitrogen(H), slot_l_hand)
|
||||
H.internal = H.l_hand
|
||||
H.internals.icon_state = "internal1"
|
||||
|
||||
|
||||
@@ -73,8 +73,9 @@ datum/preferences
|
||||
var/r_eyes = 0 //Eye color
|
||||
var/g_eyes = 0 //Eye color
|
||||
var/b_eyes = 0 //Eye color
|
||||
var/species = "Human"
|
||||
var/species = "Human" //Species datum to use.
|
||||
var/language = "None" //Secondary language
|
||||
var/list/gear //Custom/fluff item loadout.
|
||||
|
||||
//Mob preview
|
||||
var/icon/preview_icon = null
|
||||
@@ -104,7 +105,6 @@ datum/preferences
|
||||
// maps each organ to either null(intact), "cyborg" or "amputated"
|
||||
// will probably not be able to do this for head and torso ;)
|
||||
var/list/organ_data = list()
|
||||
|
||||
var/list/player_alt_titles = new() // the default name of a job like "Medical Doctor"
|
||||
|
||||
var/flavor_text = ""
|
||||
@@ -132,6 +132,8 @@ datum/preferences
|
||||
gender = pick(MALE, FEMALE)
|
||||
real_name = random_name(gender)
|
||||
|
||||
gear = list()
|
||||
|
||||
/datum/preferences
|
||||
proc/ZeroSkills(var/forced = 0)
|
||||
for(var/V in SKILLS) for(var/datum/skill/S in SKILLS[V])
|
||||
@@ -264,7 +266,27 @@ datum/preferences
|
||||
if(config.allow_Metadata)
|
||||
dat += "<b>OOC Notes:</b> <a href='?_src_=prefs;preference=metadata;task=input'> Edit </a><br>"
|
||||
|
||||
dat += "<br><b>Occupation Choices</b><br>"
|
||||
dat += "<br><b>Custom Loadout:</b> "
|
||||
var/total_cost = 0
|
||||
|
||||
if(isnull(gear) || !islist(gear)) gear = list()
|
||||
|
||||
if(gear && gear.len)
|
||||
dat += "<br>"
|
||||
for(var/gear_name in gear)
|
||||
if(gear_datums[gear_name])
|
||||
var/datum/gear/G = gear_datums[gear_name]
|
||||
total_cost += G.cost
|
||||
dat += "[gear_name] <a href='byond://?src=\ref[user];preference=loadout;task=remove;gear=[gear_name]'>\[remove\]</a><br>"
|
||||
|
||||
dat += "<b>Used:</b> [total_cost] points."
|
||||
else
|
||||
dat += "none."
|
||||
|
||||
if(total_cost < MAX_GEAR_COST)
|
||||
dat += " <a href='byond://?src=\ref[user];preference=loadout;task=input'>\[add\]</a>"
|
||||
|
||||
dat += "<br><br><b>Occupation Choices</b><br>"
|
||||
dat += "\t<a href='?_src_=prefs;preference=job;task=menu'><b>Set Preferences</b></a><br>"
|
||||
|
||||
dat += "<br><table><tr><td><b>Body</b> "
|
||||
@@ -835,6 +857,48 @@ datum/preferences
|
||||
ShowChoices(user)
|
||||
return 1
|
||||
|
||||
else if (href_list["preference"] == "loadout")
|
||||
|
||||
if(href_list["task"] == "input")
|
||||
|
||||
var/list/valid_gear_choices = list()
|
||||
|
||||
for(var/gear_name in gear_datums)
|
||||
var/datum/gear/G = gear_datums[gear_name]
|
||||
if(G.whitelisted && !is_alien_whitelisted(user, G.whitelisted))
|
||||
continue
|
||||
valid_gear_choices += gear_name
|
||||
|
||||
var/choice = input(user, "Select gear to add: ") as null|anything in valid_gear_choices
|
||||
|
||||
if(choice && gear_datums[choice])
|
||||
|
||||
var/total_cost = 0
|
||||
|
||||
if(isnull(gear) || !islist(gear)) gear = list()
|
||||
|
||||
if(gear && gear.len)
|
||||
for(var/gear_name in gear)
|
||||
if(gear_datums[gear_name])
|
||||
var/datum/gear/G = gear_datums[gear_name]
|
||||
total_cost += G.cost
|
||||
|
||||
var/datum/gear/C = gear_datums[choice]
|
||||
total_cost += C.cost
|
||||
if(C && total_cost <= MAX_GEAR_COST)
|
||||
gear += choice
|
||||
user << "\blue Added [choice] for [C.cost] points ([MAX_GEAR_COST - total_cost] points remaining)."
|
||||
else
|
||||
user << "\red That item will exceed the maximum loadout cost of [MAX_GEAR_COST] points."
|
||||
|
||||
else if(href_list["task"] == "remove")
|
||||
var/to_remove = href_list["gear"]
|
||||
if(!to_remove) return
|
||||
for(var/gear_name in gear)
|
||||
if(gear_name == to_remove)
|
||||
gear -= gear_name
|
||||
break
|
||||
|
||||
switch(href_list["task"])
|
||||
if("random")
|
||||
switch(href_list["preference"])
|
||||
@@ -962,14 +1026,14 @@ datum/preferences
|
||||
var/datum/language/lang = all_languages[L]
|
||||
if((!(lang.flags & RESTRICTED)) && (is_alien_whitelisted(user, L)||(!( lang.flags & WHITELISTED ))||(S && (L in S.secondary_langs))))
|
||||
new_languages += lang
|
||||
|
||||
|
||||
//Apparently there's some PHP script that needs to be updated in order to give people whitelist languages.
|
||||
//This workaround should be removed once that has been properly updated
|
||||
if (lang.name == "Siik'maas")
|
||||
new_languages |= all_languages["Siik'tajr"]
|
||||
if (lang.name == "Siik'tajr")
|
||||
new_languages |= all_languages["Siik'maas"]
|
||||
|
||||
|
||||
languages_available = 1
|
||||
|
||||
if(!(languages_available))
|
||||
|
||||
@@ -0,0 +1,404 @@
|
||||
var/global/list/gear_datums = list()
|
||||
|
||||
proc/populate_gear_list()
|
||||
for(var/type in typesof(/datum/gear)-/datum/gear)
|
||||
var/datum/gear/G = new type()
|
||||
gear_datums[G.display_name] = G
|
||||
|
||||
/datum/gear
|
||||
var/display_name //Name/index.
|
||||
var/path //Path to item.
|
||||
var/cost //Number of points used.
|
||||
var/slot //Slot to equip to.
|
||||
var/list/allowed_roles //Roles that can spawn with this item.
|
||||
var/whitelisted //Term to check the whitelist for..
|
||||
|
||||
//Standard gear datums.
|
||||
|
||||
/datum/gear/cards
|
||||
display_name = "deck of cards"
|
||||
path = /obj/item/weapon/deck
|
||||
cost = 2
|
||||
|
||||
/datum/gear/dice
|
||||
display_name = "d20"
|
||||
path = /obj/item/weapon/dice/d20
|
||||
cost = 1
|
||||
|
||||
/datum/gear/comb
|
||||
display_name = "purple comb"
|
||||
path = /obj/item/weapon/fluff/cado_keppel_1
|
||||
cost = 1
|
||||
|
||||
/datum/gear/tie_horrible
|
||||
display_name = "horrible tie"
|
||||
path = /obj/item/clothing/tie/horrible
|
||||
cost = 2
|
||||
|
||||
/datum/gear/tie_blue
|
||||
display_name = "blue tie"
|
||||
path = /obj/item/clothing/tie/blue
|
||||
cost = 2
|
||||
|
||||
/datum/gear/tie_red
|
||||
display_name = "red tie"
|
||||
path = /obj/item/clothing/tie/red
|
||||
cost = 2
|
||||
|
||||
/datum/gear/hairflower
|
||||
display_name = "hair flower pin"
|
||||
path = /obj/item/clothing/head/hairflower
|
||||
cost = 2
|
||||
slot = slot_head
|
||||
|
||||
/datum/gear/bandana
|
||||
display_name = "pirate bandana"
|
||||
path = /obj/item/clothing/head/bandana
|
||||
cost = 3
|
||||
slot = slot_head
|
||||
|
||||
/datum/gear/overalls
|
||||
display_name = "overalls"
|
||||
path = /obj/item/clothing/suit/apron/overalls
|
||||
cost = 2
|
||||
slot = slot_wear_suit
|
||||
|
||||
/datum/gear/wcoat
|
||||
display_name = "waistcoat"
|
||||
path = /obj/item/clothing/suit/wcoat
|
||||
cost = 2
|
||||
slot = slot_wear_suit
|
||||
|
||||
/datum/gear/prescription
|
||||
display_name = "prescription sunglasses"
|
||||
path = /obj/item/clothing/glasses/sunglasses/prescription
|
||||
cost = 3
|
||||
slot = slot_glasses
|
||||
|
||||
/datum/gear/eyepatch
|
||||
display_name = "eyepatch"
|
||||
path = /obj/item/clothing/glasses/eyepatch
|
||||
cost = 3
|
||||
slot = slot_glasses
|
||||
|
||||
/datum/gear/flatcap
|
||||
display_name = "flat cap"
|
||||
path = /obj/item/clothing/head/flatcap
|
||||
cost = 2
|
||||
slot = slot_head
|
||||
|
||||
/datum/gear/labcoat
|
||||
display_name = "labcoat"
|
||||
path = /obj/item/clothing/suit/storage/labcoat
|
||||
cost = 3
|
||||
slot = slot_wear_suit
|
||||
|
||||
/datum/gear/sandal
|
||||
display_name = "sandals"
|
||||
path = /obj/item/clothing/shoes/sandal
|
||||
cost = 1
|
||||
slot = slot_shoes
|
||||
|
||||
/datum/gear/leather
|
||||
display_name = "leather shoes"
|
||||
path = /obj/item/clothing/shoes/leather
|
||||
cost = 2
|
||||
slot = slot_shoes
|
||||
|
||||
/datum/gear/dress_shoes
|
||||
display_name = "dress shoes"
|
||||
path = /obj/item/clothing/shoes/centcom
|
||||
cost = 2
|
||||
slot = slot_shoes
|
||||
|
||||
/datum/gear/black_gloves
|
||||
display_name = "black gloves"
|
||||
path = /obj/item/clothing/gloves/black
|
||||
cost = 1
|
||||
slot = slot_gloves
|
||||
|
||||
/datum/gear/red_gloves
|
||||
display_name = "red gloves"
|
||||
path = /obj/item/clothing/gloves/red
|
||||
cost = 1
|
||||
slot = slot_gloves
|
||||
|
||||
/datum/gear/blue_gloves
|
||||
display_name = "blue gloves"
|
||||
path = /obj/item/clothing/gloves/blue
|
||||
cost = 1
|
||||
slot = slot_gloves
|
||||
|
||||
/datum/gear/orange_gloves
|
||||
display_name = "orange gloves"
|
||||
path = /obj/item/clothing/gloves/orange
|
||||
cost = 1
|
||||
slot = slot_gloves
|
||||
|
||||
/datum/gear/purple_gloves
|
||||
display_name = "purple gloves"
|
||||
path = /obj/item/clothing/gloves/purple
|
||||
cost = 1
|
||||
slot = slot_gloves
|
||||
|
||||
/datum/gear/brown_gloves
|
||||
display_name = "brown gloves"
|
||||
path = /obj/item/clothing/gloves/brown
|
||||
cost = 1
|
||||
slot = slot_gloves
|
||||
|
||||
/datum/gear/green_gloves
|
||||
display_name = "green gloves"
|
||||
path = /obj/item/clothing/gloves/green
|
||||
cost = 2
|
||||
slot = slot_gloves
|
||||
|
||||
/datum/gear/white_gloves
|
||||
display_name = "white gloves"
|
||||
path = /obj/item/clothing/gloves/white
|
||||
cost = 2
|
||||
slot = slot_gloves
|
||||
|
||||
/datum/gear/black_shoes
|
||||
display_name = "black shoes"
|
||||
path = /obj/item/clothing/shoes/black
|
||||
cost = 2
|
||||
slot = slot_shoes
|
||||
|
||||
/datum/gear/blue_shoes
|
||||
display_name = "blue shoes"
|
||||
path = /obj/item/clothing/shoes/blue
|
||||
cost = 2
|
||||
slot = slot_shoes
|
||||
|
||||
/datum/gear/brown_shoes
|
||||
display_name = "brown shoes"
|
||||
path = /obj/item/clothing/shoes/brown
|
||||
cost = 2
|
||||
slot = slot_shoes
|
||||
|
||||
/datum/gear/green_shoes
|
||||
display_name = "green shoes"
|
||||
path = /obj/item/clothing/shoes/green
|
||||
cost = 2
|
||||
slot = slot_shoes
|
||||
|
||||
/datum/gear/orange_shoes
|
||||
display_name = "orange shoes"
|
||||
path = /obj/item/clothing/shoes/orange
|
||||
cost = 2
|
||||
slot = slot_shoes
|
||||
|
||||
/datum/gear/purple_shoes
|
||||
display_name = "purple shoes"
|
||||
path = /obj/item/clothing/shoes/purple
|
||||
cost = 2
|
||||
slot = slot_shoes
|
||||
|
||||
/datum/gear/red_shoes
|
||||
display_name = "red shoes"
|
||||
path = /obj/item/clothing/shoes/red
|
||||
cost = 2
|
||||
slot = slot_shoes
|
||||
|
||||
/datum/gear/white_shoes
|
||||
display_name = "white shoes"
|
||||
path = /obj/item/clothing/shoes/white
|
||||
cost = 2
|
||||
slot = slot_shoes
|
||||
|
||||
/datum/gear/yellow_shoes
|
||||
display_name = "yellow shoes"
|
||||
path = /obj/item/clothing/shoes/yellow
|
||||
cost = 2
|
||||
slot = slot_shoes
|
||||
|
||||
/datum/gear/jackboots
|
||||
display_name = "jackboots"
|
||||
path = /obj/item/clothing/shoes/jackboots
|
||||
cost = 3
|
||||
slot = slot_shoes
|
||||
|
||||
/datum/gear/webbing
|
||||
display_name = "webbing"
|
||||
path = /obj/item/clothing/tie/storage/webbing
|
||||
cost = 1
|
||||
|
||||
/datum/gear/armband
|
||||
display_name = "red armband"
|
||||
path = /obj/item/clothing/tie/armband
|
||||
cost = 1
|
||||
|
||||
/datum/gear/armband_cargo
|
||||
display_name = "cargo armband"
|
||||
path = /obj/item/clothing/tie/armband/cargo
|
||||
cost = 1
|
||||
|
||||
/datum/gear/armband_engineering
|
||||
display_name = "engineering armband"
|
||||
path = /obj/item/clothing/tie/armband/engine
|
||||
cost = 1
|
||||
|
||||
/datum/gear/armband_science
|
||||
display_name = "science armband"
|
||||
path = /obj/item/clothing/tie/armband/science
|
||||
cost = 1
|
||||
|
||||
/datum/gear/armband_hydroponics
|
||||
display_name = "hydroponics armband"
|
||||
path = /obj/item/clothing/tie/armband/hydro
|
||||
cost = 1
|
||||
|
||||
/datum/gear/armband_medical
|
||||
display_name = "medical armband"
|
||||
path = /obj/item/clothing/tie/armband/med
|
||||
cost = 1
|
||||
|
||||
/datum/gear/armband_emt
|
||||
display_name = "EMT armband"
|
||||
path = /obj/item/clothing/tie/armband/medgreen
|
||||
cost = 1
|
||||
|
||||
/datum/gear/skirt_blue
|
||||
display_name = "blue plaid skirt"
|
||||
path = /obj/item/clothing/under/dress/plaid_blue
|
||||
slot = slot_w_uniform
|
||||
cost = 3
|
||||
|
||||
/datum/gear/skirt_red
|
||||
display_name = "red plaid skirt"
|
||||
path = /obj/item/clothing/under/dress/plaid_red
|
||||
slot = slot_w_uniform
|
||||
cost = 3
|
||||
|
||||
/datum/gear/skirt_purple
|
||||
display_name = "purple plaid skirt"
|
||||
path = /obj/item/clothing/under/dress/plaid_purple
|
||||
slot = slot_w_uniform
|
||||
cost = 3
|
||||
|
||||
/datum/gear/skirt_black
|
||||
display_name = "black skirt"
|
||||
path = /obj/item/clothing/under/blackskirt
|
||||
slot = slot_w_uniform
|
||||
cost = 3
|
||||
|
||||
/datum/gear/sundress
|
||||
display_name = "sundress"
|
||||
path = /obj/item/clothing/under/sundress
|
||||
slot = slot_w_uniform
|
||||
cost = 3
|
||||
|
||||
/datum/gear/uniform_captain
|
||||
display_name = "captain's dress uniform"
|
||||
path = /obj/item/clothing/under/dress/dress_cap
|
||||
slot = slot_w_uniform
|
||||
cost = 3
|
||||
allowed_roles = list("Captain")
|
||||
|
||||
/datum/gear/uniform_hop
|
||||
display_name = "HoP dress uniform"
|
||||
path = /obj/item/clothing/under/dress/dress_hop
|
||||
slot = slot_w_uniform
|
||||
cost = 3
|
||||
allowed_roles = list("Head of Personnel")
|
||||
|
||||
/datum/gear/uniform_hr
|
||||
display_name = "HR director uniform"
|
||||
path = /obj/item/clothing/under/dress/dress_hr
|
||||
slot = slot_w_uniform
|
||||
cost = 3
|
||||
allowed_roles = list("Head of Personnel")
|
||||
|
||||
/datum/gear/kilt
|
||||
display_name = "kilt"
|
||||
path = /obj/item/clothing/under/kilt
|
||||
slot = slot_w_uniform
|
||||
cost = 3
|
||||
|
||||
/datum/gear/exec_suit
|
||||
display_name = "executive suit"
|
||||
path = /obj/item/clothing/under/suit_jacket/really_black
|
||||
slot = slot_w_uniform
|
||||
cost = 3
|
||||
|
||||
//Security
|
||||
/datum/gear/security
|
||||
display_name = "Security HUD"
|
||||
path = /obj/item/clothing/glasses/hud/security
|
||||
cost = 3
|
||||
slot = slot_glasses
|
||||
allowed_roles = list("Security Officer","Head of Security","Warden")
|
||||
|
||||
/datum/gear/black_vest
|
||||
display_name = "black webbing vest"
|
||||
path = /obj/item/clothing/tie/storage/black_vest
|
||||
cost = 3
|
||||
allowed_roles = list("Security Officer","Head of Security","Warden")
|
||||
|
||||
/datum/gear/armpit
|
||||
display_name = "shoulder holster"
|
||||
path = /obj/item/clothing/tie/holster/armpit
|
||||
cost = 3
|
||||
allowed_roles = list("Captain", "Head of Personnel", "Security Officer", "Head of Security")
|
||||
|
||||
/datum/gear/sec_beret
|
||||
display_name = "security beret"
|
||||
path = /obj/item/clothing/head/beret/sec
|
||||
cost = 1
|
||||
slot = slot_head
|
||||
allowed_roles = list("Security Officer","Head of Security","Warden")
|
||||
|
||||
//Engineering
|
||||
/datum/gear/eng_beret
|
||||
display_name = "engineering beret"
|
||||
path = /obj/item/clothing/head/beret/eng
|
||||
cost = 1
|
||||
slot = slot_head
|
||||
allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer")
|
||||
|
||||
/datum/gear/brown_vest
|
||||
display_name = "brown webbing vest"
|
||||
path = /obj/item/clothing/tie/storage/brown_vest
|
||||
cost = 3
|
||||
allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer")
|
||||
|
||||
/datum/gear/engineer_bandana
|
||||
display_name = "engineering bandana"
|
||||
path = /obj/item/clothing/head/helmet/greenbandana/fluff/taryn_kifer_1
|
||||
cost = 2
|
||||
allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer")
|
||||
|
||||
//Science
|
||||
/datum/gear/scanning_goggles
|
||||
display_name = "scanning goggles"
|
||||
path = /obj/item/clothing/glasses/fluff/uzenwa_sissra_1
|
||||
cost = 2
|
||||
allowed_roles = list("Roboticist", "Scientist", "Research Director")
|
||||
|
||||
//Species-specific gear datums.
|
||||
/datum/gear/zhan_furs
|
||||
display_name = "Zhan-Khazan furs"
|
||||
path = /obj/item/clothing/suit/tajaran/furs
|
||||
cost = 3
|
||||
whitelisted = "Tajaran"
|
||||
|
||||
/datum/gear/zhan_scarf
|
||||
display_name = "Zhan-Khazan headscarf"
|
||||
path = /obj/item/clothing/head/tajaran/scarf
|
||||
cost = 2
|
||||
whitelisted = "Tajaran"
|
||||
|
||||
/datum/gear/unathi_robe
|
||||
display_name = "roughspun robe"
|
||||
path = /obj/item/clothing/suit/unathi/robe
|
||||
cost = 3
|
||||
slot = slot_wear_suit
|
||||
whitelisted = "Unathi"
|
||||
|
||||
/datum/gear/unathi_mantle
|
||||
display_name = "hide mantle"
|
||||
path = /obj/item/clothing/suit/unathi/mantle
|
||||
cost = 2
|
||||
slot = slot_wear_suit
|
||||
whitelisted = "Unathi"
|
||||
@@ -155,6 +155,7 @@
|
||||
S["skills"] >> skills
|
||||
S["skill_specialization"] >> skill_specialization
|
||||
S["organ_data"] >> organ_data
|
||||
S["gear"] >> gear
|
||||
|
||||
S["nanotrasen_relation"] >> nanotrasen_relation
|
||||
//S["skin_style"] >> skin_style
|
||||
@@ -211,6 +212,7 @@
|
||||
if(isnull(disabilities)) disabilities = 0
|
||||
if(!player_alt_titles) player_alt_titles = new()
|
||||
if(!organ_data) src.organ_data = list()
|
||||
if(!gear) src.gear = list()
|
||||
//if(!skin_style) skin_style = "Default"
|
||||
|
||||
return 1
|
||||
@@ -248,6 +250,7 @@
|
||||
S["undershirt"] << undershirt
|
||||
S["backbag"] << backbag
|
||||
S["b_type"] << b_type
|
||||
S["spawnpoint"] << spawnpoint
|
||||
|
||||
//Jobs
|
||||
S["alternate_option"] << alternate_option
|
||||
@@ -273,6 +276,7 @@
|
||||
S["skills"] << skills
|
||||
S["skill_specialization"] << skill_specialization
|
||||
S["organ_data"] << organ_data
|
||||
S["gear"] << gear
|
||||
|
||||
S["nanotrasen_relation"] << nanotrasen_relation
|
||||
//S["skin_style"] << skin_style
|
||||
|
||||
@@ -12,4 +12,18 @@
|
||||
desc = "A rather grisly selection of cured hides and skin, sewn together to form a ragged mantle."
|
||||
icon_state = "mantle-unathi"
|
||||
item_state = "mantle-unathi"
|
||||
body_parts_covered = UPPER_TORSO
|
||||
body_parts_covered = UPPER_TORSO
|
||||
|
||||
//Taj clothing.
|
||||
|
||||
/obj/item/clothing/suit/tajaran/furs
|
||||
name = "heavy furs"
|
||||
desc = "A traditional Zhan-Khazan garment."
|
||||
icon_state = "zhan_furs"
|
||||
item_state = "zhan_furs"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
|
||||
|
||||
/obj/item/clothing/head/tajaran/scarf
|
||||
name = "headscarf"
|
||||
desc = "A scarf of coarse fabric. Seems to have ear-holes."
|
||||
icon_state = "zhan_scarf"
|
||||
@@ -294,13 +294,13 @@
|
||||
|
||||
|
||||
/obj/item/clothing/under/dress/dress_cap
|
||||
name = "captain dress uniform"
|
||||
name = "captain's dress uniform"
|
||||
desc = "Feminine fashion for the style concious captain."
|
||||
icon_state = "dress_cap"
|
||||
item_color = "dress_cap"
|
||||
|
||||
/obj/item/clothing/under/dress/dress_hop
|
||||
name = "head of personal dress uniform"
|
||||
name = "head of personnel dress uniform"
|
||||
desc = "Feminine fashion for the style concious HoP."
|
||||
icon_state = "dress_hop"
|
||||
item_color = "dress_hop"
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
has_suit = S
|
||||
loc = has_suit
|
||||
has_suit.overlays += inv_overlay
|
||||
|
||||
|
||||
user << "<span class='notice'>You attach [src] to [has_suit].</span>"
|
||||
src.add_fingerprint(user)
|
||||
|
||||
@@ -157,38 +157,38 @@
|
||||
item_color = "red"
|
||||
|
||||
/obj/item/clothing/tie/armband/cargo
|
||||
name = "cargo bay guard armband"
|
||||
desc = "An armband, worn by the station's security forces to display which department they're assigned to. This one is brown."
|
||||
name = "cargo armband"
|
||||
desc = "An armband, worn by the crew to display which department they're assigned to. This one is brown."
|
||||
icon_state = "cargo"
|
||||
item_color = "cargo"
|
||||
|
||||
/obj/item/clothing/tie/armband/engine
|
||||
name = "engineering guard armband"
|
||||
desc = "An armband, worn by the station's security forces to display which department they're assigned to. This one is orange with a reflective strip!"
|
||||
name = "engineering armband"
|
||||
desc = "An armband, worn by the crew to display which department they're assigned to. This one is orange with a reflective strip!"
|
||||
icon_state = "engie"
|
||||
item_color = "engie"
|
||||
|
||||
/obj/item/clothing/tie/armband/science
|
||||
name = "science guard armband"
|
||||
desc = "An armband, worn by the station's security forces to display which department they're assigned to. This one is purple."
|
||||
name = "science armband"
|
||||
desc = "An armband, worn by the crew to display which department they're assigned to. This one is purple."
|
||||
icon_state = "rnd"
|
||||
item_color = "rnd"
|
||||
|
||||
/obj/item/clothing/tie/armband/hydro
|
||||
name = "hydroponics guard armband"
|
||||
desc = "An armband, worn by the station's security forces to display which department they're assigned to. This one is green and blue."
|
||||
name = "hydroponics armband"
|
||||
desc = "An armband, worn by the crew to display which department they're assigned to. This one is green and blue."
|
||||
icon_state = "hydro"
|
||||
item_color = "hydro"
|
||||
|
||||
/obj/item/clothing/tie/armband/med
|
||||
name = "medical guard armband"
|
||||
desc = "An armband, worn by the station's security forces to display which department they're assigned to. This one is white."
|
||||
name = "medical armband"
|
||||
desc = "An armband, worn by the crew to display which department they're assigned to. This one is white."
|
||||
icon_state = "med"
|
||||
item_color = "med"
|
||||
|
||||
/obj/item/clothing/tie/armband/medgreen
|
||||
name = "medical guard armband"
|
||||
desc = "An armband, worn by the station's security forces to display which department they're assigned to. This one is white and green."
|
||||
name = "EMT armband"
|
||||
desc = "An armband, worn by the crew to display which department they're assigned to. This one is white and green."
|
||||
icon_state = "medgreen"
|
||||
item_color = "medgreen"
|
||||
|
||||
@@ -208,16 +208,16 @@
|
||||
if(holstered)
|
||||
user << "\red There is already a [holstered] holstered here!"
|
||||
return
|
||||
|
||||
|
||||
if (!istype(I, /obj/item/weapon/gun))
|
||||
user << "\red Only guns can be holstered!"
|
||||
return
|
||||
|
||||
|
||||
var/obj/item/weapon/gun/W = I
|
||||
if (!can_holster(W))
|
||||
user << "\red This [W] won't fit in the [src]!"
|
||||
return
|
||||
|
||||
|
||||
holstered = W
|
||||
user.drop_from_inventory(holstered)
|
||||
holstered.loc = src
|
||||
@@ -227,7 +227,7 @@
|
||||
/obj/item/clothing/tie/holster/proc/unholster(mob/user as mob)
|
||||
if(!holstered)
|
||||
return
|
||||
|
||||
|
||||
if(istype(user.get_active_hand(),/obj) && istype(user.get_inactive_hand(),/obj))
|
||||
user << "\red You need an empty hand to draw the [holstered]!"
|
||||
else
|
||||
@@ -246,7 +246,7 @@
|
||||
if (holstered)
|
||||
unholster(user)
|
||||
return
|
||||
|
||||
|
||||
..(user)
|
||||
|
||||
/obj/item/clothing/tie/holster/attackby(obj/item/W as obj, mob/user as mob)
|
||||
@@ -280,7 +280,7 @@
|
||||
set src in usr
|
||||
if(!istype(usr, /mob/living)) return
|
||||
if(usr.stat) return
|
||||
|
||||
|
||||
var/obj/item/clothing/tie/holster/H = null
|
||||
if (istype(src, /obj/item/clothing/tie/holster))
|
||||
H = src
|
||||
@@ -288,7 +288,7 @@
|
||||
var/obj/item/clothing/under/S = src
|
||||
if (S.hastie)
|
||||
H = S.hastie
|
||||
|
||||
|
||||
if (!H)
|
||||
usr << "/red Something is very wrong."
|
||||
|
||||
@@ -330,14 +330,14 @@
|
||||
if (has_suit) //if we are part of a suit
|
||||
hold.open(user)
|
||||
return
|
||||
|
||||
|
||||
if (hold.handle_attack_hand(user)) //otherwise interact as a regular storage item
|
||||
..(user)
|
||||
|
||||
/obj/item/clothing/tie/storage/MouseDrop(obj/over_object as obj)
|
||||
if (has_suit)
|
||||
return
|
||||
|
||||
|
||||
if (hold.handle_mousedrop(usr, over_object))
|
||||
..(over_object)
|
||||
|
||||
@@ -471,6 +471,6 @@
|
||||
"/obj/item/weapon/kitchen/utensil/pknife",\
|
||||
"/obj/item/weapon/kitchenknife",\
|
||||
"/obj/item/weapon/kitchenknife/ritual")
|
||||
|
||||
|
||||
new /obj/item/weapon/hatchet/unathiknife(hold)
|
||||
new /obj/item/weapon/hatchet/unathiknife(hold)
|
||||
|
||||
@@ -75,9 +75,6 @@ Deep minerals:
|
||||
//Halfassed diamond-square algorithm with some fuckery since it's a single dimension array.
|
||||
/datum/ore_distribution/proc/populate_distribution_map()
|
||||
|
||||
//Announce it!
|
||||
world << "<b><font color='red'>Generating resource distribution map.</b></font>"
|
||||
|
||||
//Seed beginning values.
|
||||
var/x = 1
|
||||
var/y = 1
|
||||
|
||||
@@ -1458,3 +1458,39 @@
|
||||
M.apply_damage(50,BRUTE)
|
||||
if(M.stat == 2)
|
||||
M.gib()
|
||||
|
||||
/mob/living/carbon/human/proc/commune()
|
||||
set category = "IC"
|
||||
set name = "Commune with creature"
|
||||
set desc = "Send a telepathic message to an unlucky recipient."
|
||||
|
||||
var/list/targets = list()
|
||||
var/target = null
|
||||
var/text = null
|
||||
|
||||
targets += getmobs() //Fill list, prompt user with list
|
||||
target = input("Select a creature!", "Speak to creature", null, null) as null|anything in targets
|
||||
|
||||
if(!target) return
|
||||
|
||||
text = input("What would you like to say?", "Speak to creature", null, null)
|
||||
|
||||
text = trim(copytext(sanitize(text), 1, MAX_MESSAGE_LEN))
|
||||
|
||||
if(!text) return
|
||||
|
||||
var/mob/M = targets[target]
|
||||
|
||||
if(istype(M, /mob/dead/observer) || M.stat == DEAD)
|
||||
src << "Not even a [src.species.name] can speak to the dead."
|
||||
return
|
||||
|
||||
log_say("[key_name(src)] communed to [key_name(M)]: [text]")
|
||||
|
||||
M << "\blue Like lead slabs crashing into the ocean, alien thoughts drop into your mind: [text]"
|
||||
if(istype(M,/mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(H.species.name == src.species.name)
|
||||
return
|
||||
H << "\red Your nose begins to bleed..."
|
||||
H.drip(1)
|
||||
|
||||
@@ -215,6 +215,7 @@
|
||||
/datum/species/vox/armalis/handle_post_spawn(var/mob/living/carbon/human/H)
|
||||
|
||||
H.verbs += /mob/living/carbon/human/proc/gut
|
||||
H.verbs += /mob/living/carbon/human/proc/commune
|
||||
..()
|
||||
|
||||
/datum/species/vox/armalis
|
||||
|
||||
@@ -1,160 +0,0 @@
|
||||
/mob/living/simple_animal/vox/armalis/
|
||||
|
||||
name = "serpentine alien"
|
||||
real_name = "serpentine alien"
|
||||
desc = "A one-eyed, serpentine creature, half-machine, easily nine feet from tail to beak!"
|
||||
icon = 'icons/mob/vox.dmi'
|
||||
icon_state = "armalis"
|
||||
icon_living = "armalis"
|
||||
maxHealth = 500
|
||||
health = 500
|
||||
response_harm = "slashes at the"
|
||||
harm_intent_damage = 0
|
||||
melee_damage_lower = 30
|
||||
melee_damage_upper = 40
|
||||
attacktext = "slammed its enormous claws into"
|
||||
speed = -1
|
||||
wall_smash = 1
|
||||
attack_sound = 'sound/weapons/bladeslice.ogg'
|
||||
status_flags = 0
|
||||
universal_speak = 1
|
||||
|
||||
var/armour = null
|
||||
var/amp = null
|
||||
var/quills = 3
|
||||
|
||||
/mob/living/simple_animal/vox/armalis/Die()
|
||||
|
||||
living_mob_list -= src
|
||||
dead_mob_list += src
|
||||
stat = DEAD
|
||||
visible_message("\red <B>[src] shudders violently and explodes!</B>","\red <B>You feel your body rupture!</B>")
|
||||
explosion(get_turf(loc), -1, -1, 3, 5)
|
||||
src.gib()
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/vox/armalis/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
if(O.force)
|
||||
if(O.force >= 25)
|
||||
var/damage = O.force
|
||||
if (O.damtype == HALLOSS)
|
||||
damage = 0
|
||||
health -= damage
|
||||
for(var/mob/M in viewers(src, null))
|
||||
if ((M.client && !( M.blinded )))
|
||||
M.show_message("\red \b [src] has been attacked with the [O] by [user]. ")
|
||||
else
|
||||
for(var/mob/M in viewers(src, null))
|
||||
if ((M.client && !( M.blinded )))
|
||||
M.show_message("\red \b The [O] bounces harmlessly off of [src]. ")
|
||||
else
|
||||
usr << "\red This weapon is ineffective, it does no damage."
|
||||
for(var/mob/M in viewers(src, null))
|
||||
if ((M.client && !( M.blinded )))
|
||||
M.show_message("\red [user] gently taps [src] with the [O]. ")
|
||||
|
||||
/mob/living/simple_animal/vox/armalis/verb/fire_quill(mob/target as mob in oview())
|
||||
|
||||
set name = "Fire quill"
|
||||
set desc = "Fires a viciously pointed quill at a high speed."
|
||||
set category = "Alien"
|
||||
|
||||
if(quills<=0)
|
||||
return
|
||||
|
||||
src << "\red You launch a razor-sharp quill at [target]!"
|
||||
for(var/mob/O in oviewers())
|
||||
if ((O.client && !( O.blinded )))
|
||||
O << "\red [src] launches a razor-sharp quill at [target]!"
|
||||
|
||||
var/obj/item/weapon/arrow/quill/Q = new(loc)
|
||||
Q.fingerprintslast = src.ckey
|
||||
Q.throw_at(target,10,30)
|
||||
quills--
|
||||
|
||||
spawn(100)
|
||||
src << "\red You feel a fresh quill slide into place."
|
||||
quills++
|
||||
|
||||
/mob/living/simple_animal/vox/armalis/verb/message_mob()
|
||||
set category = "Alien"
|
||||
set name = "Commune with creature"
|
||||
set desc = "Send a telepathic message to an unlucky recipient."
|
||||
|
||||
var/list/targets = list()
|
||||
var/target = null
|
||||
var/text = null
|
||||
|
||||
targets += getmobs() //Fill list, prompt user with list
|
||||
target = input("Select a creature!", "Speak to creature", null, null) as null|anything in targets
|
||||
text = input("What would you like to say?", "Speak to creature", null, null)
|
||||
|
||||
if (!target || !text)
|
||||
return
|
||||
|
||||
var/mob/M = targets[target]
|
||||
|
||||
if(istype(M, /mob/dead/observer) || M.stat == DEAD)
|
||||
src << "Not even the armalis can speak to the dead."
|
||||
return
|
||||
|
||||
M << "\blue Like lead slabs crashing into the ocean, alien thoughts drop into your mind: [text]"
|
||||
if(istype(M,/mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(H.species.name == "Vox")
|
||||
return
|
||||
H << "\red Your nose begins to bleed..."
|
||||
H.drip(1)
|
||||
|
||||
/mob/living/simple_animal/vox/armalis/verb/shriek()
|
||||
set category = "Alien"
|
||||
set name = "Shriek"
|
||||
set desc = "Give voice to a psychic shriek."
|
||||
|
||||
/mob/living/simple_animal/vox/armalis/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
if(istype(O,/obj/item/vox/armalis_armour))
|
||||
user.drop_item()
|
||||
armour = O
|
||||
speed = 1
|
||||
maxHealth += 200
|
||||
health += 200
|
||||
O.loc = src
|
||||
visible_message("\blue [src] is quickly outfitted in [O] by [user].","\blue You quickly outfit [src] in [O].")
|
||||
regenerate_icons()
|
||||
return
|
||||
if(istype(O,/obj/item/vox/armalis_amp))
|
||||
user.drop_item()
|
||||
amp = O
|
||||
O.loc = src
|
||||
visible_message("\blue [src] is quickly outfitted in [O] by [user].","\blue You quickly outfit [src] in [O].")
|
||||
regenerate_icons()
|
||||
return
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/vox/armalis/regenerate_icons()
|
||||
|
||||
overlays = list()
|
||||
if(armour)
|
||||
var/icon/armour = image('icons/mob/vox.dmi',"armour")
|
||||
speed = 1
|
||||
overlays += armour
|
||||
if(amp)
|
||||
var/icon/amp = image('icons/mob/vox.dmi',"amplifier")
|
||||
overlays += amp
|
||||
return
|
||||
|
||||
/obj/item/vox/armalis_armour
|
||||
|
||||
name = "strange armour"
|
||||
desc = "Hulking reinforced armour for something huge."
|
||||
icon = 'icons/obj/clothing/suits.dmi'
|
||||
icon_state = "armalis_armour"
|
||||
item_state = "armalis_armour"
|
||||
|
||||
/obj/item/vox/armalis_amp
|
||||
|
||||
name = "strange lenses"
|
||||
desc = "A series of metallic lenses and chains."
|
||||
icon = 'icons/obj/clothing/hats.dmi'
|
||||
icon_state = "amp"
|
||||
item_state = "amp"
|
||||
+3
-1
@@ -811,4 +811,6 @@ var/list/RESTRICTED_CAMERA_NETWORKS = list( //Those networks can only be accesse
|
||||
#define IS_DIONA 1
|
||||
#define IS_VOX 2
|
||||
#define IS_SKRELL 3
|
||||
#define IS_UNATHI 4
|
||||
#define IS_UNATHI 4
|
||||
|
||||
#define MAX_GEAR_COST 5 //Used in chargen for loadout limit.
|
||||
Reference in New Issue
Block a user