This commit is contained in:
Mark Aherne
2014-07-12 00:42:06 +01:00
31 changed files with 927 additions and 305 deletions
+11 -7
View File
@@ -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)
-10
View File
@@ -450,16 +450,6 @@
usr.client.eye = target
/obj/item/weapon/syntiflesh
name = "syntiflesh"
desc = "Meat that appears...strange..."
icon = 'icons/obj/food.dmi'
icon_state = "meat"
flags = FPRINT | TABLEPASS | CONDUCT
w_class = 2.0
origin_tech = "biotech=2"
/*
/obj/item/weapon/cigarpacket
name = "Pete's Cuban Cigars"
+47 -3
View File
@@ -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"
-12
View File
@@ -28,18 +28,6 @@
input = /obj/item/weapon/reagent_containers/food/snacks/meat
output = /obj/item/weapon/reagent_containers/food/snacks/meatball
meat2
input = /obj/item/weapon/syntiflesh
output = /obj/item/weapon/reagent_containers/food/snacks/meatball
/*
monkeymeat
input = /obj/item/weapon/reagent_containers/food/snacks/meat/monkey
output = /obj/item/weapon/reagent_containers/food/snacks/meatball
humanmeat
input = /obj/item/weapon/reagent_containers/food/snacks/meat/human
output = /obj/item/weapon/reagent_containers/food/snacks/meatball
*/
potato
input = /obj/item/weapon/reagent_containers/food/snacks/grown/potato
output = /obj/item/weapon/reagent_containers/food/snacks/rawsticks
@@ -71,7 +71,9 @@
"You hear metal clanking")
unbuckle()
src.add_fingerprint(user)
return
return 1
return 0
/obj/structure/stool/bed/proc/buckle_mob(mob/M as mob, mob/user as mob)
if (!ticker)
@@ -112,6 +114,18 @@
icon_state = "down"
anchored = 0
/obj/structure/stool/bed/roller/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W,/obj/item/roller_holder))
if(buckled_mob)
manual_unbuckle()
else
visible_message("[user] collapses \the [src.name].")
new/obj/item/roller(get_turf(src))
spawn(0)
del(src)
return
..()
/obj/item/roller
name = "roller bed"
desc = "A collapsed roller bed that can be carried around."
@@ -119,11 +133,47 @@
icon_state = "folded"
w_class = 4.0 // Can't be put in backpacks. Oh well.
attack_self(mob/user)
/obj/item/roller/attack_self(mob/user)
var/obj/structure/stool/bed/roller/R = new /obj/structure/stool/bed/roller(user.loc)
R.add_fingerprint(user)
del(src)
/obj/item/roller/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W,/obj/item/roller_holder))
var/obj/item/roller_holder/RH = W
if(!RH.held)
user << "\blue You collect the roller bed."
src.loc = RH
RH.held = src
return
..()
/obj/item/roller_holder
name = "roller bed rack"
desc = "A rack for carrying a collapsed roller bed."
icon = 'icons/obj/rollerbed.dmi'
icon_state = "folded"
var/obj/item/roller/held
/obj/item/roller_holder/New()
..()
held = new /obj/item/roller(src)
/obj/item/roller_holder/attack_self(mob/user as mob)
if(!held)
user << "\blue The rack is empty."
return
user << "\blue You deploy the roller bed."
var/obj/structure/stool/bed/roller/R = new /obj/structure/stool/bed/roller(user.loc)
R.add_fingerprint(user)
del(held)
held = null
/obj/structure/stool/bed/roller/Move()
..()
if(buckled_mob)
+69 -5
View File
@@ -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))
+404
View File
@@ -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
+15 -1
View File
@@ -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"
+2 -2
View File
@@ -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"
+23 -23
View File
@@ -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)
+11 -11
View File
@@ -13,7 +13,7 @@
I said no!
/datum/recipe/syntitelebacon
items = list(
/obj/item/weapon/syntiflesh,
/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,
/obj/item/device/assembly/signaler
)
result = /obj/item/weapon/reagent_containers/food/snacks/telebacon
@@ -128,7 +128,7 @@ I said no!
/datum/recipe/syntiburger
items = list(
/obj/item/weapon/reagent_containers/food/snacks/bun,
/obj/item/weapon/syntiflesh
/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh
)
result = /obj/item/weapon/reagent_containers/food/snacks/monkeyburger
@@ -252,9 +252,9 @@ I said no!
/obj/item/weapon/reagent_containers/food/snacks/dough,
/obj/item/weapon/reagent_containers/food/snacks/dough,
/obj/item/weapon/reagent_containers/food/snacks/dough,
/obj/item/weapon/syntiflesh,
/obj/item/weapon/syntiflesh,
/obj/item/weapon/syntiflesh,
/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,
/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,
/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge,
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge,
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge,
@@ -437,8 +437,8 @@ I said no!
/datum/recipe/syntikabob
items = list(
/obj/item/stack/rods,
/obj/item/weapon/syntiflesh,
/obj/item/weapon/syntiflesh,
/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,
/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,
)
result = /obj/item/weapon/reagent_containers/food/snacks/monkeykabob
@@ -533,7 +533,7 @@ I said no!
/datum/recipe/syntisteak
reagents = list("sodiumchloride" = 1, "blackpepper" = 1)
items = list(
/obj/item/weapon/syntiflesh
/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh
)
result = /obj/item/weapon/reagent_containers/food/snacks/meatsteak
@@ -562,9 +562,9 @@ I said no!
/datum/recipe/syntipizza
items = list(
/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough,
/obj/item/weapon/syntiflesh,
/obj/item/weapon/syntiflesh,
/obj/item/weapon/syntiflesh,
/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,
/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,
/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge,
/obj/item/weapon/reagent_containers/food/snacks/grown/tomato,
)
@@ -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
@@ -28,6 +28,19 @@
//Item currently being held.
var/obj/item/wrapped = null
/obj/item/weapon/gripper/paperwork
name = "paperwork gripper"
desc = "A simple grasping tool for clerical work."
icon = 'icons/obj/device.dmi'
icon_state = "gripper"
can_hold = list(
/obj/item/weapon/clipboard,
/obj/item/weapon/paper,
/obj/item/weapon/paper_bundle,
/obj/item/weapon/card/id
)
/obj/item/weapon/gripper/attack_self(mob/user as mob)
if(wrapped)
wrapped.attack_self(user)
+33 -5
View File
@@ -5,7 +5,7 @@
icon_state = "robot"
maxHealth = 200
health = 200
var/sight_mode = 0
var/custom_name = ""
var/custom_sprite = 0 //Due to all the sprites involved, a var for our custom borgs may be best
@@ -163,7 +163,7 @@
/mob/living/silicon/robot/proc/pick_module()
if(module)
return
var/list/modules = list("Standard", "Engineering", "Medical", "Miner", "Janitor", "Service", "Security")
var/list/modules = list("Standard", "Engineering", "Construction", "Surgeon", "Crisis", "Miner", "Janitor", "Service", "Clerical", "Security")
if(crisis && security_level == SEC_LEVEL_RED) //Leaving this in until it's balanced appropriately.
src << "\red Crisis mode active. Combat module available."
modules+="Combat"
@@ -189,6 +189,14 @@
module_sprites["Rich"] = "maximillion"
module_sprites["Default"] = "Service2"
if("Clerical")
module = new /obj/item/weapon/robot_module/clerical(src)
module_sprites["Waitress"] = "Service"
module_sprites["Kent"] = "toiletbot"
module_sprites["Bro"] = "Brobot"
module_sprites["Rich"] = "maximillion"
module_sprites["Default"] = "Service2"
if("Miner")
module = new /obj/item/weapon/robot_module/miner(src)
module.channels = list("Supply" = 1)
@@ -198,15 +206,26 @@
module_sprites["Advanced Droid"] = "droid-miner"
module_sprites["Treadhead"] = "Miner"
if("Medical")
module = new /obj/item/weapon/robot_module/medical(src)
if("Crisis")
module = new /obj/item/weapon/robot_module/crisis(src)
module.channels = list("Medical" = 1)
if(camera && "Robots" in camera.network)
camera.network.Add("Medical")
module_sprites["Basic"] = "Medbot"
module_sprites["Standard"] = "surgeon"
module_sprites["Advanced Droid"] = "droid-medical"
module_sprites["Needles"] = "medicalrobot"
if("Surgeon")
module = new /obj/item/weapon/robot_module/surgeon(src)
module.channels = list("Medical" = 1)
if(camera && "Robots" in camera.network)
camera.network.Add("Medical")
module_sprites["Basic"] = "Medbot"
module_sprites["Standard"] = "surgeon"
module_sprites["Advanced Droid"] = "droid-medical"
module_sprites["Needles"] = "medicalrobot"
if("Security")
module = new /obj/item/weapon/robot_module/security(src)
@@ -225,6 +244,15 @@
module_sprites["Antique"] = "engineerrobot"
module_sprites["Landmate"] = "landmate"
if("Construction")
module = new /obj/item/weapon/robot_module/construction(src)
module.channels = list("Engineering" = 1)
if(camera && "Robots" in camera.network)
camera.network.Add("Engineering")
module_sprites["Basic"] = "Engineering"
module_sprites["Antique"] = "engineerrobot"
module_sprites["Landmate"] = "landmate"
if("Janitor")
module = new /obj/item/weapon/robot_module/janitor(src)
module_sprites["Basic"] = "JanBot2"
@@ -238,7 +266,7 @@
//languages
module.add_languages(src)
//Custom_sprite check and entry
if (custom_sprite == 1)
module_sprites["Custom"] = "[src.ckey]-[modtype]"
@@ -95,14 +95,26 @@
var/mode = 1
/obj/item/weapon/pen/robopen/attack_self(mob/user as mob)
var/choice = input("Would you like to change colour or mode?") as null|anything in list("Colour","Mode")
if(!choice) return
playsound(src.loc, 'sound/effects/pop.ogg', 50, 0)
if (mode == 1)
mode = 2
user << "Changed printing mode to 'Rename Paper'"
return
if (mode == 2)
mode = 1
user << "Changed printing mode to 'Write Paper'"
switch(choice)
if("Colour")
var/newcolour = input("Which colour would you like to use?") as null|anything in list("black","blue","red","green","yellow")
if(newcolour) colour = newcolour
if("Mode")
if (mode == 1)
mode = 2
else
mode = 1
user << "Changed printing mode to '[mode == 2 ? "Rename Paper" : "Write Paper"]'"
return
// Copied over from paper's rename verb
// see code\modules\paperwork\paper.dm line 62
@@ -120,6 +132,33 @@
add_fingerprint(user)
return
//TODO: Add prewritten forms to dispense when you work out a good way to store the strings.
/obj/item/weapon/form_printer
//name = "paperwork printer"
name = "paper dispenser"
icon = 'icons/obj/bureaucracy.dmi'
icon_state = "paper_bin1"
item_state = "sheet-metal"
/obj/item/weapon/form_printer/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
return
/obj/item/weapon/form_printer/afterattack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, flag, params)
if(!target || !flag)
return
if(istype(target,/obj/structure/table))
deploy_paper(get_turf(target))
/obj/item/weapon/form_printer/attack_self(mob/user as mob)
deploy_paper(get_turf(src))
/obj/item/weapon/form_printer/proc/deploy_paper(var/turf/T)
T.visible_message("\blue \The [src.loc] dispenses a sheet of crisp white paper.")
new /obj/item/weapon/paper(T)
//Personal shielding for the combat module.
/obj/item/borg/combat/shield
name = "personal shielding"
@@ -9,6 +9,7 @@
var/list/modules = list()
var/obj/item/emag = null
var/obj/item/borg/upgrade/jetpack = null
var/list/stacktypes
emp_act(severity)
if(modules)
@@ -31,7 +32,21 @@
/obj/item/weapon/robot_module/proc/respawn_consumable(var/mob/living/silicon/robot/R)
return
if(!stacktypes || !stacktypes.len) return
for(var/T in stacktypes)
var/O = locate(T) in src.modules
var/obj/item/stack/S = O
if(!S)
src.modules -= null
S = new T(src)
src.modules += S
S.amount = 1
if(S && S.amount < stacktypes[T])
S.amount++
/obj/item/weapon/robot_module/proc/rebuild()//Rebuilds the list so it's possible to add/remove items from the module
var/list/temp_list = modules
@@ -41,7 +56,9 @@
modules += O
/obj/item/weapon/robot_module/proc/add_languages(var/mob/living/silicon/robot/R)
R.add_language("Tradeband", 0)
R.add_language("Tradeband", 1)
R.add_language("Sol Common", 1)
/obj/item/weapon/robot_module/standard
name = "standard robot module"
@@ -57,8 +74,49 @@
src.emag = new /obj/item/weapon/melee/energy/sword(src)
return
/obj/item/weapon/robot_module/medical
name = "medical robot module"
/obj/item/weapon/robot_module/surgeon
name = "surgeon robot module"
stacktypes = list(
/obj/item/stack/medical/advanced/bruise_pack = 5,
/obj/item/stack/nanopaste = 5
)
New()
src.modules += new /obj/item/device/flashlight(src)
src.modules += new /obj/item/device/flash(src)
src.modules += new /obj/item/device/healthanalyzer(src)
src.modules += new /obj/item/weapon/reagent_containers/borghypo/surgeon(src)
src.modules += new /obj/item/weapon/scalpel(src)
src.modules += new /obj/item/weapon/hemostat(src)
src.modules += new /obj/item/weapon/retractor(src)
src.modules += new /obj/item/weapon/cautery(src)
src.modules += new /obj/item/weapon/bonegel(src)
src.modules += new /obj/item/weapon/bonesetter(src)
src.modules += new /obj/item/weapon/circular_saw(src)
src.modules += new /obj/item/weapon/surgicaldrill(src)
src.modules += new /obj/item/weapon/extinguisher/mini(src)
src.modules += new /obj/item/stack/medical/advanced/bruise_pack(src)
src.modules += new /obj/item/stack/nanopaste(src)
src.emag = new /obj/item/weapon/reagent_containers/spray(src)
src.emag.reagents.add_reagent("pacid", 250)
src.emag.name = "Polyacid spray"
return
/obj/item/weapon/robot_module/surgeon/respawn_consumable(var/mob/living/silicon/robot/R)
if(src.emag)
var/obj/item/weapon/reagent_containers/spray/PS = src.emag
PS.reagents.add_reagent("pacid", 2)
..()
/obj/item/weapon/robot_module/crisis
name = "crisis robot module"
stacktypes = list(
/obj/item/stack/medical/ointment = 5,
/obj/item/stack/medical/bruise_pack = 5,
/obj/item/stack/medical/splint = 5
)
New()
src.modules += new /obj/item/device/flashlight(src)
@@ -66,40 +124,74 @@
src.modules += new /obj/item/borg/sight/hud/med(src)
src.modules += new /obj/item/device/healthanalyzer(src)
src.modules += new /obj/item/device/reagent_scanner/adv(src)
src.modules += new /obj/item/weapon/reagent_containers/borghypo(src)
src.modules += new /obj/item/roller_holder(src)
src.modules += new /obj/item/stack/medical/ointment(src)
src.modules += new /obj/item/stack/medical/bruise_pack(src)
src.modules += new /obj/item/stack/medical/splint(src)
src.modules += new /obj/item/weapon/reagent_containers/borghypo/crisis(src)
src.modules += new /obj/item/weapon/reagent_containers/glass/beaker/large(src)
src.modules += new /obj/item/weapon/reagent_containers/robodropper(src)
src.modules += new /obj/item/weapon/reagent_containers/syringe(src)
src.modules += new /obj/item/weapon/extinguisher/mini(src)
src.emag = new /obj/item/weapon/reagent_containers/spray(src)
src.emag.reagents.add_reagent("pacid", 250)
src.emag.name = "Polyacid spray"
return
/obj/item/weapon/robot_module/medical/respawn_consumable(var/mob/living/silicon/robot/R)
/obj/item/weapon/robot_module/crisis/respawn_consumable(var/mob/living/silicon/robot/R)
var/obj/item/weapon/reagent_containers/syringe/S = locate() in src.modules
if(S.mode == 2)//SYRINGE_BROKEN
if(S.mode == 2)
S.reagents.clear_reagents()
S.mode = initial(S.mode)
S.desc = initial(S.desc)
S.update_icon()
if(src.emag)
var/obj/item/weapon/reagent_containers/spray/PS = src.emag
PS.reagents.add_reagent("pacid", 2)
/obj/item/weapon/robot_module/engineering
name = "engineering robot module"
..()
/obj/item/weapon/robot_module/construction
name = "construction robot module"
stacktypes = list(
/obj/item/stack/sheet/metal = 50,
/obj/item/stack/sheet/plasteel = 10,
/obj/item/stack/sheet/rglass = 50
)
New()
src.modules += new /obj/item/device/flashlight(src)
src.modules += new /obj/item/device/flash(src)
src.modules += new /obj/item/borg/sight/meson(src)
src.modules += new /obj/item/weapon/extinguisher(src)
src.modules += new /obj/item/weapon/rcd/borg(src)
src.modules += new /obj/item/weapon/screwdriver(src)
src.modules += new /obj/item/weapon/wrench(src)
src.modules += new /obj/item/weapon/crowbar(src)
src.modules += new /obj/item/weapon/pickaxe/plasmacutter(src)
/obj/item/weapon/robot_module/engineering
name = "engineering robot module"
stacktypes = list(
/obj/item/stack/sheet/metal = 50,
/obj/item/stack/sheet/glass = 50,
/obj/item/stack/sheet/rglass = 50,
/obj/item/weapon/cable_coil = 50,
/obj/item/stack/rods = 15,
/obj/item/stack/tile/plasteel = 15
)
New()
src.modules += new /obj/item/device/flashlight(src)
src.modules += new /obj/item/device/flash(src)
src.modules += new /obj/item/borg/sight/meson(src)
src.emag = new /obj/item/borg/stun(src)
src.modules += new /obj/item/weapon/rcd/borg(src)
src.modules += new /obj/item/weapon/extinguisher(src)
// src.modules += new /obj/item/device/flashlight(src)
src.modules += new /obj/item/weapon/weldingtool/largetank(src)
src.modules += new /obj/item/weapon/screwdriver(src)
src.modules += new /obj/item/weapon/wrench(src)
@@ -109,12 +201,20 @@
src.modules += new /obj/item/device/t_scanner(src)
src.modules += new /obj/item/device/analyzer(src)
src.modules += new /obj/item/taperoll/engineering(src)
src.modules += new /obj/item/weapon/gripper(src)
src.modules += new /obj/item/weapon/matter_decompiler(src)
src.emag = new /obj/item/borg/stun(src)
var/obj/item/stack/sheet/metal/cyborg/M = new /obj/item/stack/sheet/metal/cyborg(src)
M.amount = 50
src.modules += M
var/obj/item/stack/sheet/rglass/cyborg/G = new /obj/item/stack/sheet/rglass/cyborg(src)
var/obj/item/stack/sheet/rglass/cyborg/R = new /obj/item/stack/sheet/rglass/cyborg(src)
R.amount = 50
src.modules += R
var/obj/item/stack/sheet/glass/G = new /obj/item/stack/sheet/glass(src)
G.amount = 50
src.modules += G
@@ -124,24 +224,6 @@
return
/obj/item/weapon/robot_module/engineering/respawn_consumable(var/mob/living/silicon/robot/R)
var/list/stacks = list (
/obj/item/stack/sheet/metal,
/obj/item/stack/sheet/rglass,
/obj/item/weapon/cable_coil,
)
for(var/T in stacks)
var/O = locate(T) in src.modules
if(O)
if(O:amount < 50)
O:amount++
else
src.modules -= null
O = new T(src)
src.modules += O
O:amount = 1
return
/obj/item/weapon/robot_module/security
name = "security robot module"
@@ -202,7 +284,6 @@
src.modules += new /obj/item/device/flash(src)
src.modules += new /obj/item/weapon/reagent_containers/food/drinks/cans/beer(src)
src.modules += new /obj/item/weapon/reagent_containers/food/condiment/enzyme(src)
src.modules += new /obj/item/weapon/pen/robopen(src)
var/obj/item/weapon/rsf/M = new /obj/item/weapon/rsf(src)
M.matter = 30
@@ -236,6 +317,28 @@
R.add_language("Tradeband", 1)
R.add_language("Gutter", 1)
/obj/item/weapon/robot_module/clerical
name = "clerical robot module"
New()
src.modules += new /obj/item/device/flashlight(src)
src.modules += new /obj/item/device/flash(src)
src.modules += new /obj/item/weapon/pen/robopen(src)
src.modules += new /obj/item/weapon/form_printer(src)
src.modules += new /obj/item/weapon/gripper/paperwork(src)
src.emag = new /obj/item/weapon/stamp/denied(src)
add_languages(var/mob/living/silicon/robot/R)
R.add_language("Sol Common", 1)
R.add_language("Sinta'unathi", 1)
R.add_language("Siik'maas", 1)
R.add_language("Siik'tajr", 0)
R.add_language("Skrellian", 1)
R.add_language("Rootspeak", 1)
R.add_language("Tradeband", 1)
R.add_language("Gutter", 1)
/obj/item/weapon/robot_module/butler/respawn_consumable(var/mob/living/silicon/robot/R)
var/obj/item/weapon/reagent_containers/food/condiment/enzyme/E = locate() in src.modules
E.reagents.add_reagent("enzyme", 2)
@@ -250,11 +353,12 @@
src.modules += new /obj/item/device/flashlight(src)
src.modules += new /obj/item/device/flash(src)
src.modules += new /obj/item/borg/sight/meson(src)
src.emag = new /obj/item/borg/stun(src)
src.modules += new /obj/item/weapon/wrench(src)
src.modules += new /obj/item/weapon/screwdriver(src)
src.modules += new /obj/item/weapon/storage/bag/ore(src)
src.modules += new /obj/item/weapon/pickaxe/borgdrill(src)
src.modules += new /obj/item/weapon/storage/bag/sheetsnatcher/borg(src)
// src.modules += new /obj/item/weapon/shovel(src) Uneeded due to buffed drill
src.emag = new /obj/item/weapon/pickaxe/plasmacutter(src)
return
/obj/item/weapon/robot_module/syndicate
@@ -286,7 +390,7 @@
/obj/item/weapon/robot_module/drone
name = "drone module"
var/list/stacktypes = list(
stacktypes = list(
/obj/item/stack/sheet/wood/cyborg = 1,
/obj/item/stack/sheet/mineral/plastic/cyborg = 1,
/obj/item/stack/sheet/rglass/cyborg = 5,
@@ -327,29 +431,17 @@
var/obj/item/weapon/reagent_containers/spray/cleaner/C = locate() in src.modules
C.reagents.add_reagent("cleaner", 3)
for(var/T in stacktypes)
var/O = locate(T) in src.modules
var/obj/item/stack/sheet/S = O
if(!S)
src.modules -= null
S = new T(src)
src.modules += S
S.amount = 1
if(S && S.amount < stacktypes[T])
S.amount++
var/obj/item/device/lightreplacer/LR = locate() in src.modules
LR.Charge(R)
..()
return
//checks whether this item is a module of the robot it is located in.
/obj/item/proc/is_robot_module()
if (!istype(src.loc, /mob/living/silicon/robot))
return 0
var/mob/living/silicon/robot/R = src.loc
return (src in R.module.modules)
return (src in R.module.modules)
@@ -1,3 +1,8 @@
/mob/living/silicon/robot/Process_Spaceslipping(var/prob_slip)
if(module && (istype(module,/obj/item/weapon/robot_module/construction) || istype(module,/obj/item/weapon/robot_module/drone)))
return 0
..(prob_slip)
/mob/living/silicon/robot/Process_Spacemove()
if(module)
for(var/obj/item/weapon/tank/jetpack/J in module.modules)
@@ -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"
@@ -18,6 +18,12 @@
var/list/reagent_ids = list("tricordrazine", "inaprovaline", "spaceacillin")
//var/list/reagent_ids = list("dexalin", "kelotane", "bicaridine", "anti_toxin", "inaprovaline", "spaceacillin")
/obj/item/weapon/reagent_containers/borghypo/surgeon
reagent_ids = list("bicaridine", "inaprovaline", "dexalin")
/obj/item/weapon/reagent_containers/borghypo/crisis
reagent_ids = list("tricordrazine", "inaprovaline", "tramadol")
/obj/item/weapon/reagent_containers/borghypo/New()
..()
for(var/R in reagent_ids)
+3 -1
View File
@@ -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.