mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 18:22:39 +00:00
Merge branch 'release' of https://github.com/VOREStation/VOREStation into izac
This commit is contained in:
@@ -349,3 +349,5 @@ var/global/list/##LIST_NAME = list();\
|
||||
#define JOB_SILICON_ROBOT 0x2
|
||||
#define JOB_SILICON_AI 0x4
|
||||
#define JOB_SILICON 0x6 // 2|4, probably don't set jobs to this, but good for checking
|
||||
|
||||
#define DEFAULT_OVERMAP_RANGE 0 // Makes general computers and devices be able to connect to other overmap z-levels on the same tile.
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
#define NO_BLOOD 0x100 // Never bleed, never show blood amount
|
||||
#define UNDEAD 0x200 // Various things that living things don't do, mostly for skeletons
|
||||
#define NO_INFECT 0x400 // Don't allow infections in limbs or organs, similar to IS_PLANT, without other strings.
|
||||
#define NO_DEFIB 0x800 // Don't allow them to be defibbed
|
||||
// unused: 0x8000 - higher than this will overflow
|
||||
|
||||
// Species EMP vuln for carbons
|
||||
|
||||
@@ -223,3 +223,7 @@
|
||||
#undef AB_WEST_OFFSET
|
||||
#undef AB_NORTH_OFFSET
|
||||
#undef AB_MAX_COLUMNS
|
||||
|
||||
|
||||
/datum/action/innate/
|
||||
action_type = AB_INNATE
|
||||
@@ -134,7 +134,7 @@
|
||||
access = access_medical_equip
|
||||
|
||||
/datum/supply_pack/voidsuits/medical/alt
|
||||
name = "Vey-Med Medical voidsuits"
|
||||
name = "Vey-Med Autoadaptive voidsuits (humanoid)"
|
||||
contains = list(
|
||||
/obj/item/clothing/suit/space/void/medical/alt = 2,
|
||||
/obj/item/clothing/head/helmet/space/void/medical/alt = 2,
|
||||
@@ -144,9 +144,20 @@
|
||||
)
|
||||
cost = 60
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "Vey-Med Medical voidsuit crate"
|
||||
containername = "Vey-Med Autoadaptive voidsuit (humanoid) crate"
|
||||
access = access_medical_equip
|
||||
|
||||
/datum/supply_pack/voidsuits/medical/alt/tesh
|
||||
name = "Vey-Med Autoadaptive voidsuits (teshari)"
|
||||
contains = list(
|
||||
/obj/item/clothing/suit/space/void/medical/alt/tesh = 2,
|
||||
/obj/item/clothing/head/helmet/space/void/medical/alt/tesh = 2,
|
||||
/obj/item/clothing/mask/breath = 2,
|
||||
/obj/item/clothing/shoes/magboots = 2,
|
||||
/obj/item/weapon/tank/oxygen = 2
|
||||
)
|
||||
containername = "Vey-Med Autoadaptive voidsuit (teshari) crate"
|
||||
|
||||
/datum/supply_pack/voidsuits/security
|
||||
name = "Security voidsuits"
|
||||
contains = list(
|
||||
|
||||
@@ -143,7 +143,7 @@
|
||||
|
||||
/proc/AnnounceArrival(var/mob/living/carbon/human/character, var/rank, var/join_message, var/channel = "Common", var/zlevel)
|
||||
if (ticker.current_state == GAME_STATE_PLAYING)
|
||||
var/list/zlevels = zlevel ? using_map.get_map_levels(zlevel, TRUE) : null
|
||||
var/list/zlevels = zlevel ? using_map.get_map_levels(zlevel, TRUE, om_range = DEFAULT_OVERMAP_RANGE) : null
|
||||
if(character.mind.role_alt_title)
|
||||
rank = character.mind.role_alt_title
|
||||
AnnounceArrivalSimple(character.real_name, rank, join_message, channel, zlevels)
|
||||
|
||||
@@ -1360,6 +1360,10 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
|
||||
has_gravity = 0
|
||||
sound_env = SPACE
|
||||
|
||||
/area/holodeck/source_chess
|
||||
name = "\improper Holodeck - Chessboard"
|
||||
|
||||
|
||||
//Engineering
|
||||
|
||||
/area/engineering/
|
||||
|
||||
@@ -180,7 +180,12 @@ var/global/list/rnwords = list("ire","ego","nahlizet","certum","veri","jatkaa","
|
||||
/obj/item/weapon/book/tome
|
||||
name = "arcane tome"
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
item_icons = list(
|
||||
icon_l_hand = 'icons/mob/items/lefthand_books.dmi',
|
||||
icon_r_hand = 'icons/mob/items/righthand_books.dmi',
|
||||
)
|
||||
icon_state ="tome"
|
||||
item_state = "tome"
|
||||
throw_speed = 1
|
||||
throw_range = 5
|
||||
w_class = ITEMSIZE_SMALL
|
||||
|
||||
@@ -39,13 +39,17 @@
|
||||
/datum/job/librarian
|
||||
total_positions = 2
|
||||
spawn_positions = 2
|
||||
alt_titles = list("Journalist" = /datum/alt_title/journalist, "Writer" = /datum/alt_title/writer, "Historian" = /datum/alt_title/historian)
|
||||
alt_titles = list("Journalist" = /datum/alt_title/journalist, "Writer" = /datum/alt_title/writer, "Historian" = /datum/alt_title/historian, "Professor" = /datum/alt_title/professor)
|
||||
pto_type = PTO_CIVILIAN
|
||||
|
||||
/datum/alt_title/historian
|
||||
title = "Historian"
|
||||
title_blurb = "The Historian uses the Library as a base of operation to record any important events occuring on station."
|
||||
|
||||
/datum/alt_title/professor
|
||||
title = "Professor"
|
||||
title_blurb = "The Professor uses the Library as a base of operations to share their vast knowledge with the crew."
|
||||
|
||||
/datum/job/lawyer
|
||||
disallow_jobhop = TRUE
|
||||
pto_type = PTO_CIVILIAN
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
data["current_network"] = current_network
|
||||
data["networks"] = network ? network : list()
|
||||
|
||||
var/map_levels = using_map.get_map_levels(src.z, TRUE)
|
||||
var/map_levels = using_map.get_map_levels(src.z, TRUE, om_range = DEFAULT_OVERMAP_RANGE)
|
||||
data["map_levels"] = map_levels
|
||||
|
||||
if(current_network)
|
||||
|
||||
@@ -195,6 +195,7 @@
|
||||
modify.access -= access_type
|
||||
if(!access_allowed)
|
||||
modify.access += access_type
|
||||
modify.lost_access = list() //VOREStation addition: reset the lost access upon any modifications
|
||||
|
||||
if ("assign")
|
||||
if (is_authenticated() && modify)
|
||||
@@ -218,6 +219,7 @@
|
||||
modify.access = access
|
||||
modify.assignment = t1
|
||||
modify.rank = t1
|
||||
modify.lost_access = list() //VOREStation addition: reset the lost access upon any modifications
|
||||
|
||||
callHook("reassign_employee", list(modify))
|
||||
|
||||
@@ -276,12 +278,12 @@
|
||||
if (is_authenticated())
|
||||
modify.assignment = "Dismissed" //VOREStation Edit: setting adjustment
|
||||
modify.access = list()
|
||||
modify.lost_access = list() //VOREStation addition: reset the lost access upon any modifications
|
||||
|
||||
callHook("terminate_employee", list(modify))
|
||||
|
||||
if (modify)
|
||||
modify.name = text("[modify.registered_name]'s ID Card ([modify.assignment])")
|
||||
modify.lost_access = list() //VOREStation addition: reset the lost access upon any modifications
|
||||
|
||||
return 1
|
||||
|
||||
|
||||
@@ -520,7 +520,7 @@
|
||||
control_computer._admin_logs += "[key_name(to_despawn)] ([to_despawn.mind.role_alt_title]) at [stationtime2text()]"
|
||||
log_and_message_admins("[key_name(to_despawn)] ([to_despawn.mind.role_alt_title]) entered cryostorage.")
|
||||
|
||||
announce.autosay("[to_despawn.real_name], [to_despawn.mind.role_alt_title], [on_store_message]", "[on_store_name]", announce_channel, using_map.get_map_levels(z, TRUE))
|
||||
announce.autosay("[to_despawn.real_name], [to_despawn.mind.role_alt_title], [on_store_message]", "[on_store_name]", announce_channel, using_map.get_map_levels(z, TRUE, om_range = DEFAULT_OVERMAP_RANGE))
|
||||
//visible_message("<span class='notice'>\The [initial(name)] hums and hisses as it moves [to_despawn.real_name] into storage.</span>", 3)
|
||||
visible_message("<span class='notice'>\The [initial(name)] [on_store_visible_message_1] [to_despawn.real_name] [on_store_visible_message_2].</span>", 3)
|
||||
|
||||
|
||||
@@ -612,6 +612,13 @@
|
||||
wires = null
|
||||
return ..()
|
||||
|
||||
/obj/machinery/suit_cycler/refit_only
|
||||
name = "Suit cycler"
|
||||
desc = "A dedicated industrial machine that can refit voidsuits for different species, but not change the suit's overall appearance or departmental scheme."
|
||||
model_text = "General Access"
|
||||
req_access = null
|
||||
departments = list("No Change")
|
||||
|
||||
/obj/machinery/suit_cycler/engineering
|
||||
name = "Engineering suit cycler"
|
||||
model_text = "Engineering"
|
||||
@@ -741,7 +748,8 @@
|
||||
updateUsrDialog()
|
||||
return
|
||||
|
||||
else if(istype(I,/obj/item/clothing/head/helmet/space) && !istype(I, /obj/item/clothing/head/helmet/space/rig))
|
||||
else if(istype(I,/obj/item/clothing/head/helmet/space/void) && !istype(I, /obj/item/clothing/head/helmet/space/rig))
|
||||
var/obj/item/clothing/head/helmet/space/void/IH = I
|
||||
|
||||
if(locked)
|
||||
to_chat(user, "<span class='danger'>The suit cycler is locked.</span>")
|
||||
@@ -751,6 +759,10 @@
|
||||
to_chat(user, "<span class='danger'>The cycler already contains a helmet.</span>")
|
||||
return
|
||||
|
||||
if(IH.no_cycle)
|
||||
to_chat(user, "<span class='danger'>That item is not compatible with the cycler's protocols.</span>")
|
||||
return
|
||||
|
||||
if(I.icon_override == CUSTOM_ITEM_MOB)
|
||||
to_chat(user, "You cannot refit a customised voidsuit.")
|
||||
return
|
||||
@@ -777,6 +789,7 @@
|
||||
return
|
||||
|
||||
else if(istype(I,/obj/item/clothing/suit/space/void))
|
||||
var/obj/item/clothing/suit/space/void/IS = I
|
||||
|
||||
if(locked)
|
||||
to_chat(user, "<span class='danger'>The suit cycler is locked.</span>")
|
||||
@@ -786,6 +799,10 @@
|
||||
to_chat(user, "<span class='danger'>The cycler already contains a voidsuit.</span>")
|
||||
return
|
||||
|
||||
if(IS.no_cycle)
|
||||
to_chat(user, "<span class='danger'>That item is not compatible with the cycler's protocols.</span>")
|
||||
return
|
||||
|
||||
if(I.icon_override == CUSTOM_ITEM_MOB)
|
||||
to_chat(user, "You cannot refit a customised voidsuit.")
|
||||
return
|
||||
@@ -820,7 +837,7 @@
|
||||
|
||||
//Clear the access reqs, disable the safeties, and open up all paintjobs.
|
||||
to_chat(user, "<span class='danger'>You run the sequencer across the interface, corrupting the operating protocols.</span>")
|
||||
departments = list("Engineering","Mining","Medical","Security","Atmospherics","HAZMAT","Construction","Biohazard","Crowd Control","Security EVA","Emergency Medical Response","^%###^%$", "Charring")
|
||||
departments = list("Engineering","Mining","Medical","Security","Atmospherics","HAZMAT","Construction","Biohazard","Crowd Control","Security EVA","Emergency Medical Response","^%###^%$", "Charring","No Change")
|
||||
species = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_VULPKANIN) //VORESTATION EDIT
|
||||
|
||||
emagged = 1
|
||||
@@ -1043,10 +1060,16 @@
|
||||
|
||||
if(target_species)
|
||||
if(helmet) helmet.refit_for_species(target_species)
|
||||
if(suit) suit.refit_for_species(target_species)
|
||||
if(suit)
|
||||
suit.refit_for_species(target_species)
|
||||
if(suit.helmet)
|
||||
suit.helmet.refit_for_species(target_species)
|
||||
|
||||
//Now "Complete" with most departmental and variant suits, and sorted by department. These aren't available in the standard or emagged cycler lists because they're incomplete for most species.
|
||||
switch(target_department)
|
||||
if("No Change")
|
||||
parent_helmet = helmet
|
||||
parent_suit = suit
|
||||
//Engineering and Engineering Variants
|
||||
if("Engineering")
|
||||
parent_helmet = /obj/item/clothing/head/helmet/space/void/engineering
|
||||
@@ -1201,7 +1224,7 @@
|
||||
//END: downstream variant space
|
||||
|
||||
//look at this! isn't it beautiful? -KK (well ok not beautiful but it's a lot cleaner)
|
||||
if(helmet)
|
||||
if(helmet && target_department != "No Change")
|
||||
var/obj/item/clothing/H = new parent_helmet
|
||||
helmet.name = "refitted [initial(parent_helmet.name)]"
|
||||
helmet.desc = initial(parent_helmet.desc)
|
||||
@@ -1211,7 +1234,7 @@
|
||||
helmet.item_state_slots = H.item_state_slots
|
||||
qdel(H)
|
||||
|
||||
if(suit)
|
||||
if(suit && target_department != "No Change")
|
||||
var/obj/item/clothing/S = new parent_suit
|
||||
suit.name = "refitted [initial(parent_suit.name)]"
|
||||
suit.desc = initial(parent_suit.desc)
|
||||
@@ -1219,3 +1242,14 @@
|
||||
suit.item_state = initial(parent_suit.item_state)
|
||||
suit.item_state_slots = S.item_state_slots
|
||||
qdel(S)
|
||||
|
||||
//can't believe I forgot to fix this- now helmets will properly cycle if they're attached to a suit -KK
|
||||
if(suit.helmet && target_department != "No Change")
|
||||
var/obj/item/clothing/AH = new parent_helmet
|
||||
suit.helmet.name = "refitted [initial(parent_helmet.name)]"
|
||||
suit.helmet.desc = initial(parent_helmet.desc)
|
||||
suit.helmet.icon_state = initial(parent_helmet.icon_state)
|
||||
suit.helmet.item_state = initial(parent_helmet.item_state)
|
||||
suit.helmet.light_overlay = initial(parent_helmet.light_overlay)
|
||||
suit.helmet.item_state_slots = AH.item_state_slots
|
||||
qdel(AH)
|
||||
|
||||
@@ -708,4 +708,4 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list()
|
||||
if(ad_hoc && src_z == dst_z)
|
||||
return TRUE
|
||||
|
||||
return src_z in using_map.get_map_levels(dst_z)
|
||||
return src_z in using_map.get_map_levels(dst_z, TRUE, om_range = DEFAULT_OVERMAP_RANGE)
|
||||
|
||||
@@ -1,6 +1,11 @@
|
||||
/**
|
||||
* A vending machine
|
||||
*/
|
||||
///
|
||||
/// A vending machine
|
||||
///
|
||||
|
||||
//
|
||||
// ALL THE VENDING MACHINES ARE IN vending_machines.dm now!
|
||||
//
|
||||
|
||||
/obj/machinery/vending
|
||||
name = "Vendomat"
|
||||
desc = "A generic vending machine."
|
||||
@@ -659,559 +664,4 @@
|
||||
visible_message("<span class='warning'>\The [src] launches \a [throw_item] at \the [target]!</span>")
|
||||
return 1
|
||||
|
||||
/*
|
||||
* Vending machine types
|
||||
*/
|
||||
|
||||
/*
|
||||
|
||||
/obj/machinery/vending/[vendors name here] // --vending machine template :)
|
||||
name = ""
|
||||
desc = ""
|
||||
icon = ''
|
||||
icon_state = ""
|
||||
vend_delay = 15
|
||||
products = list()
|
||||
contraband = list()
|
||||
premium = list()
|
||||
|
||||
*/
|
||||
|
||||
/*
|
||||
/obj/machinery/vending/atmospherics //Commenting this out until someone ponies up some actual working, broken, and unpowered sprites - Quarxink
|
||||
name = "Tank Vendor"
|
||||
desc = "A vendor with a wide variety of masks and gas tanks."
|
||||
icon = 'icons/obj/objects.dmi'
|
||||
icon_state = "dispenser"
|
||||
product_paths = "/obj/item/weapon/tank/oxygen;/obj/item/weapon/tank/phoron;/obj/item/weapon/tank/emergency_oxygen;/obj/item/weapon/tank/emergency_oxygen/engi;/obj/item/clothing/mask/breath"
|
||||
productamounts = "10;10;10;5;25"
|
||||
vend_delay = 0
|
||||
*/
|
||||
|
||||
/obj/machinery/vending/boozeomat
|
||||
name = "Booze-O-Mat"
|
||||
desc = "A technological marvel, supposedly able to mix just the mixture you'd like to drink the moment you ask for one."
|
||||
icon_state = "fridge_dark"
|
||||
products = list(/obj/item/weapon/reagent_containers/food/drinks/glass2/square = 10,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/rocks = 10,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/shake = 10,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/cocktail = 10,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/shot = 10,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/pint = 10,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/mug = 10,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/wine = 10,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/carafe = 2,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/pitcher = 2,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/metaglass = 10,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/metaglass/metapint = 10,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/gin = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/bluecuracao = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/cognac = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/grenadine = 5,
|
||||
/obj/item/weapon/reagent_containers/food/condiment/cornoil = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/kahlua = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/melonliquor = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/peppermintschnapps = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/peachschnapps = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/lemonadeschnapps = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/rum = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/sake = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/specialwhiskey = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/tequilla = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/vermouth = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/wine = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/small/ale = 15,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer = 15,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/small/cider = 15,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/tomatojuice = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/limejuice = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/lemonjuice = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/applejuice = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/milk = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/cream = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/cola = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/space_up = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/space_mountain_wind = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/sodawater = 15,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/tonic = 15,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/gingerale = 15,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/flask/barflask = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/flask/vacuumflask = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/ice = 10,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/tea = 15,
|
||||
/obj/item/weapon/glass_extra/stick = 30,
|
||||
/obj/item/weapon/glass_extra/straw = 30) //VOREStation Add - Carafes and Pitchers
|
||||
contraband = list()
|
||||
vend_delay = 15
|
||||
idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan.
|
||||
product_slogans = "I hope nobody asks me for a bloody cup o' tea...;Alcohol is humanity's friend. Would you abandon a friend?;Quite delighted to serve you!;Is nobody thirsty on this station?"
|
||||
product_ads = "Drink up!;Booze is good for you!;Alcohol is humanity's best friend.;Quite delighted to serve you!;Care for a nice, cold beer?;Nothing cures you like booze!;Have a sip!;Have a drink!;Have a beer!;Beer is good for you!;Only the finest alcohol!;Best quality booze since 2053!;Award-winning wine!;Maximum alcohol!;Man loves beer.;A toast for progress!"
|
||||
req_access = list(access_bar)
|
||||
req_log_access = access_bar
|
||||
has_logs = 1
|
||||
vending_sound = "machines/vending/vending_cans.ogg"
|
||||
|
||||
/obj/machinery/vending/assist
|
||||
products = list( /obj/item/device/assembly/prox_sensor = 5,/obj/item/device/assembly/igniter = 3,/obj/item/device/assembly/signaler = 4,
|
||||
/obj/item/weapon/tool/wirecutters = 1, /obj/item/weapon/cartridge/signal = 4)
|
||||
contraband = list(/obj/item/device/flashlight = 5,/obj/item/device/assembly/timer = 2)
|
||||
product_ads = "Only the finest!;Have some tools.;The most robust equipment.;The finest gear in space!"
|
||||
|
||||
/obj/machinery/vending/coffee
|
||||
name = "Hot Drinks machine"
|
||||
desc = "A vending machine which dispenses hot drinks."
|
||||
product_ads = "Have a drink!;Drink up!;It's good for you!;Would you like a hot joe?;I'd kill for some coffee!;The best beans in the galaxy.;Only the finest brew for you.;Mmmm. Nothing like a coffee.;I like coffee, don't you?;Coffee helps you work!;Try some tea.;We hope you like the best!;Try our new chocolate!;Admin conspiracies"
|
||||
icon_state = "coffee"
|
||||
vend_delay = 34
|
||||
idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan.
|
||||
vend_power_usage = 85000 //85 kJ to heat a 250 mL cup of coffee
|
||||
products = list(/obj/item/weapon/reagent_containers/food/drinks/coffee = 25,/obj/item/weapon/reagent_containers/food/drinks/tea = 25,/obj/item/weapon/reagent_containers/food/drinks/h_chocolate = 25)
|
||||
contraband = list(/obj/item/weapon/reagent_containers/food/drinks/ice = 10)
|
||||
prices = list(/obj/item/weapon/reagent_containers/food/drinks/coffee = 2, /obj/item/weapon/reagent_containers/food/drinks/tea = 2, /obj/item/weapon/reagent_containers/food/drinks/h_chocolate = 2) //VOREStation Edit
|
||||
vending_sound = "machines/vending/vending_coffee.ogg"
|
||||
|
||||
/obj/machinery/vending/snack
|
||||
name = "Getmore Chocolate Corp"
|
||||
desc = "A snack machine courtesy of the Getmore Chocolate Corporation, based out of Mars."
|
||||
product_slogans = "Try our new nougat bar!;Twice the calories for half the price!"
|
||||
product_ads = "The healthiest!;Award-winning chocolate bars!;Mmm! So good!;Oh my god it's so juicy!;Have a snack.;Snacks are good for you!;Have some more Getmore!;Best quality snacks straight from mars.;We love chocolate!;Try our new jerky!"
|
||||
icon_state = "snack"
|
||||
products = list(/obj/item/weapon/reagent_containers/food/snacks/candy = 12,/obj/item/weapon/reagent_containers/food/drinks/dry_ramen = 12,/obj/item/weapon/reagent_containers/food/snacks/chips =12,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/sosjerky = 12,/obj/item/weapon/reagent_containers/food/snacks/no_raisin = 12,/obj/item/weapon/reagent_containers/food/snacks/spacetwinkie = 12,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers = 12, /obj/item/weapon/reagent_containers/food/snacks/tastybread = 12, /obj/item/weapon/reagent_containers/food/snacks/skrellsnacks = 6)
|
||||
contraband = list(/obj/item/weapon/reagent_containers/food/snacks/syndicake = 6,/obj/item/weapon/reagent_containers/food/snacks/unajerky = 12,)
|
||||
prices = list(/obj/item/weapon/reagent_containers/food/snacks/candy = 1,/obj/item/weapon/reagent_containers/food/drinks/dry_ramen = 5,/obj/item/weapon/reagent_containers/food/snacks/chips = 1,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/sosjerky = 2,/obj/item/weapon/reagent_containers/food/snacks/no_raisin = 1,/obj/item/weapon/reagent_containers/food/snacks/spacetwinkie = 1,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers = 1, /obj/item/weapon/reagent_containers/food/snacks/tastybread = 2, /obj/item/weapon/reagent_containers/food/snacks/skrellsnacks = 2)
|
||||
|
||||
/obj/machinery/vending/cola
|
||||
name = "Robust Softdrinks"
|
||||
desc = "A softdrink vendor provided by Robust Industries, LLC."
|
||||
icon_state = "Cola_Machine"
|
||||
product_slogans = "Robust Softdrinks: More robust than a toolbox to the head!"
|
||||
product_ads = "Refreshing!;Hope you're thirsty!;Over 1 million drinks sold!;Thirsty? Why not cola?;Please, have a drink!;Drink up!;The best drinks in space."
|
||||
products = list(/obj/item/weapon/reagent_containers/food/drinks/cans/cola = 10,/obj/item/weapon/reagent_containers/food/drinks/cans/space_mountain_wind = 10,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/dr_gibb = 10,/obj/item/weapon/reagent_containers/food/drinks/cans/starkist = 10,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle = 10,/obj/item/weapon/reagent_containers/food/drinks/cans/space_up = 10,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/iced_tea = 10, /obj/item/weapon/reagent_containers/food/drinks/cans/grape_juice = 10,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/gingerale = 10)
|
||||
contraband = list(/obj/item/weapon/reagent_containers/food/drinks/cans/thirteenloko = 5, /obj/item/weapon/reagent_containers/food/snacks/liquidfood = 6)
|
||||
prices = list(/obj/item/weapon/reagent_containers/food/drinks/cans/cola = 1,/obj/item/weapon/reagent_containers/food/drinks/cans/space_mountain_wind = 1,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/dr_gibb = 1,/obj/item/weapon/reagent_containers/food/drinks/cans/starkist = 1,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle = 2,/obj/item/weapon/reagent_containers/food/drinks/cans/space_up = 1,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/iced_tea = 1,/obj/item/weapon/reagent_containers/food/drinks/cans/grape_juice = 1,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/gingerale = 1)
|
||||
idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan.
|
||||
vending_sound = "machines/vending/vending_cans.ogg"
|
||||
|
||||
/obj/machinery/vending/fitness
|
||||
name = "SweatMAX"
|
||||
desc = "Fueled by your inner inadequacy!"
|
||||
icon_state = "fitness"
|
||||
products = list(/obj/item/weapon/reagent_containers/food/drinks/smallmilk = 16,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/smallchocmilk = 16,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/fitnessflask/proteinshake = 8,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/fitnessflask = 8,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/candy/proteinbar = 16,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/liquidfood = 8,
|
||||
/obj/item/weapon/reagent_containers/pill/diet = 8,
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose = 5, //VOREStation Removal, YW Readdition,
|
||||
/obj/item/weapon/towel/random = 8)
|
||||
|
||||
//VOREStation Edit Start
|
||||
prices = list(/obj/item/weapon/reagent_containers/food/drinks/smallmilk = 3,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/smallchocmilk = 3,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/fitnessflask/proteinshake = 15,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/fitnessflask = 1,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/candy/proteinbar = 5,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/liquidfood = 5,
|
||||
/obj/item/weapon/reagent_containers/pill/diet = 25,
|
||||
///obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose = 5,
|
||||
/obj/item/weapon/towel/random = 20)
|
||||
//VOREStation Edit End
|
||||
|
||||
contraband = list(/obj/item/weapon/reagent_containers/syringe/steroid = 4, /obj/item/weapon/reagent_containers/food/drinks/glass2/fitnessflask/proteanshake = 2) // VOREStation Add - Slurpable blobs.
|
||||
|
||||
|
||||
/obj/machinery/vending/cart
|
||||
name = "PTech"
|
||||
desc = "Cartridges for PDAs."
|
||||
product_slogans = "Carts to go!"
|
||||
icon_state = "cart"
|
||||
req_access = list(access_hop)
|
||||
products = list(/obj/item/weapon/cartridge/medical = 10,/obj/item/weapon/cartridge/engineering = 10,/obj/item/weapon/cartridge/security = 10,
|
||||
/obj/item/weapon/cartridge/janitor = 10,/obj/item/weapon/cartridge/signal/science = 10,/obj/item/device/pda/heads = 10,
|
||||
/obj/item/weapon/cartridge/captain = 3,/obj/item/weapon/cartridge/quartermaster = 10)
|
||||
req_log_access = access_hop
|
||||
has_logs = 1
|
||||
|
||||
/obj/machinery/vending/cigarette
|
||||
name = "cigarette machine"
|
||||
desc = "If you want to get cancer, might as well do it in style!"
|
||||
product_slogans = "Space cigs taste good like a cigarette should.;I'd rather toolbox than switch.;Smoke!;Don't believe the reports - smoke today!"
|
||||
product_ads = "Probably not bad for you!;Don't believe the scientists!;It's good for you!;Don't quit, buy more!;Smoke!;Nicotine heaven.;Best cigarettes since 2150.;Award-winning cigs.;Feeling temperamental? Try a Temperamento!;Carcinoma Angels - go fuck yerself!;Don't be so hard on yourself, kid. Smoke a Lucky Star!"
|
||||
vend_delay = 34
|
||||
icon_state = "cigs"
|
||||
products = list(/obj/item/weapon/storage/fancy/cigarettes = 10,
|
||||
/obj/item/weapon/storage/fancy/cigarettes/dromedaryco = 10,
|
||||
/obj/item/weapon/storage/fancy/cigarettes/killthroat = 10,
|
||||
/obj/item/weapon/storage/fancy/cigarettes/luckystars = 10,
|
||||
/obj/item/weapon/storage/fancy/cigarettes/jerichos = 10,
|
||||
/obj/item/weapon/storage/fancy/cigarettes/menthols = 10,
|
||||
/obj/item/weapon/storage/rollingpapers = 10,
|
||||
/obj/item/weapon/storage/box/matches = 10,
|
||||
/obj/item/weapon/flame/lighter/random = 4)
|
||||
contraband = list(/obj/item/weapon/flame/lighter/zippo = 4)
|
||||
premium = list(/obj/item/weapon/storage/fancy/cigar = 5,
|
||||
/obj/item/weapon/storage/fancy/cigarettes/carcinomas = 5,
|
||||
/obj/item/weapon/storage/fancy/cigarettes/professionals = 5)
|
||||
prices = list(/obj/item/weapon/storage/fancy/cigarettes = 12,
|
||||
/obj/item/weapon/storage/fancy/cigarettes/dromedaryco = 15,
|
||||
/obj/item/weapon/storage/fancy/cigarettes/killthroat = 17,
|
||||
/obj/item/weapon/storage/fancy/cigarettes/luckystars = 17,
|
||||
/obj/item/weapon/storage/fancy/cigarettes/jerichos = 22,
|
||||
/obj/item/weapon/storage/fancy/cigarettes/menthols = 18,
|
||||
/obj/item/weapon/storage/rollingpapers = 10,
|
||||
/obj/item/weapon/storage/box/matches = 1,
|
||||
/obj/item/weapon/flame/lighter/random = 2)
|
||||
|
||||
/obj/machinery/vending/medical
|
||||
name = "NanoMed Plus"
|
||||
desc = "Medical drug dispenser."
|
||||
icon_state = "med"
|
||||
product_ads = "Go save some lives!;The best stuff for your medbay.;Only the finest tools.;Natural chemicals!;This stuff saves lives.;Don't you want some?;Ping!"
|
||||
req_access = list(access_medical)
|
||||
products = list(/obj/item/weapon/reagent_containers/glass/bottle/antitoxin = 4,/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline = 4,
|
||||
/obj/item/weapon/reagent_containers/glass/bottle/stoxin = 4,/obj/item/weapon/reagent_containers/glass/bottle/toxin = 4,
|
||||
/obj/item/weapon/reagent_containers/syringe/antiviral = 4,/obj/item/weapon/reagent_containers/syringe = 12,
|
||||
/obj/item/device/healthanalyzer = 5,/obj/item/weapon/reagent_containers/glass/beaker = 4, /obj/item/weapon/reagent_containers/dropper = 2,
|
||||
/obj/item/stack/medical/advanced/bruise_pack = 6, /obj/item/stack/medical/advanced/ointment = 6, /obj/item/stack/medical/splint = 4,
|
||||
/obj/item/weapon/storage/pill_bottle/carbon = 2)
|
||||
contraband = list(/obj/item/weapon/reagent_containers/pill/tox = 3,/obj/item/weapon/reagent_containers/pill/stox = 4,/obj/item/weapon/reagent_containers/pill/antitox = 6)
|
||||
idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan.
|
||||
req_log_access = access_cmo
|
||||
has_logs = 1
|
||||
|
||||
/obj/machinery/vending/phoronresearch
|
||||
name = "Toximate 3000"
|
||||
desc = "All the fine parts you need in one vending machine!"
|
||||
products = list(/obj/item/clothing/under/rank/scientist = 6,/obj/item/clothing/suit/bio_suit = 6,/obj/item/clothing/head/bio_hood = 6,
|
||||
/obj/item/device/transfer_valve = 6,/obj/item/device/assembly/timer = 6,/obj/item/device/assembly/signaler = 6,
|
||||
/obj/item/device/assembly/prox_sensor = 6,/obj/item/device/assembly/igniter = 6)
|
||||
req_log_access = access_rd
|
||||
has_logs = 1
|
||||
|
||||
/obj/machinery/vending/wallmed1
|
||||
name = "NanoMed"
|
||||
desc = "A wall-mounted version of the NanoMed."
|
||||
product_ads = "Go save some lives!;The best stuff for your medbay.;Only the finest tools.;Natural chemicals!;This stuff saves lives.;Don't you want some?"
|
||||
icon_state = "wallmed"
|
||||
density = 0 //It is wall-mounted, and thus, not dense. --Superxpdude
|
||||
products = list(/obj/item/stack/medical/bruise_pack = 2,/obj/item/stack/medical/ointment = 2,/obj/item/weapon/reagent_containers/hypospray/autoinjector = 4,/obj/item/device/healthanalyzer = 1)
|
||||
contraband = list(/obj/item/weapon/reagent_containers/syringe/antitoxin = 4,/obj/item/weapon/reagent_containers/syringe/antiviral = 4,/obj/item/weapon/reagent_containers/pill/tox = 1)
|
||||
req_log_access = access_cmo
|
||||
has_logs = 1
|
||||
can_rotate = 0
|
||||
|
||||
/obj/machinery/vending/wallmed2
|
||||
name = "NanoMed"
|
||||
desc = "A wall-mounted version of the NanoMed, containing only vital first aid equipment."
|
||||
icon_state = "wallmed"
|
||||
density = 0 //It is wall-mounted, and thus, not dense. --Superxpdude
|
||||
products = list(/obj/item/weapon/reagent_containers/hypospray/autoinjector = 5,/obj/item/weapon/reagent_containers/syringe/antitoxin = 3,/obj/item/stack/medical/bruise_pack = 3,
|
||||
/obj/item/stack/medical/ointment =3,/obj/item/device/healthanalyzer = 3)
|
||||
contraband = list(/obj/item/weapon/reagent_containers/pill/tox = 3)
|
||||
req_log_access = access_cmo
|
||||
has_logs = 1
|
||||
can_rotate = 0
|
||||
|
||||
/obj/machinery/vending/security
|
||||
name = "SecTech"
|
||||
desc = "A security equipment vendor."
|
||||
product_ads = "Crack capitalist skulls!;Beat some heads in!;Don't forget - harm is good!;Your weapons are right here.;Handcuffs!;Freeze, scumbag!;Don't tase me bro!;Tase them, bro.;Why not have a donut?"
|
||||
icon_state = "sec"
|
||||
req_access = list(access_security)
|
||||
products = list(/obj/item/weapon/handcuffs = 8,/obj/item/weapon/grenade/flashbang = 4,/obj/item/device/flash = 5,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/donut/normal = 12,/obj/item/weapon/storage/box/evidence = 6)
|
||||
contraband = list(/obj/item/clothing/glasses/sunglasses = 2,/obj/item/weapon/storage/box/donut = 2)
|
||||
req_log_access = access_armory
|
||||
has_logs = 1
|
||||
|
||||
/obj/machinery/vending/hydronutrients
|
||||
name = "NutriMax"
|
||||
desc = "A plant nutrients vendor."
|
||||
product_slogans = "Aren't you glad you don't have to fertilize the natural way?;Now with 50% less stink!;Plants are people too!"
|
||||
product_ads = "We like plants!;Don't you want some?;The greenest thumbs ever.;We like big plants.;Soft soil..."
|
||||
icon_state = "nutri_generic"
|
||||
products = list(/obj/item/weapon/reagent_containers/glass/bottle/eznutrient = 6,/obj/item/weapon/reagent_containers/glass/bottle/left4zed = 4,/obj/item/weapon/reagent_containers/glass/bottle/robustharvest = 3,/obj/item/weapon/plantspray/pests = 20,
|
||||
/obj/item/weapon/reagent_containers/syringe = 5,/obj/item/weapon/reagent_containers/glass/beaker = 4,/obj/item/weapon/storage/bag/plants = 5)
|
||||
premium = list(/obj/item/weapon/reagent_containers/glass/bottle/ammonia = 10,/obj/item/weapon/reagent_containers/glass/bottle/diethylamine = 5)
|
||||
idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan.
|
||||
|
||||
|
||||
/obj/machinery/vending/hydroseeds
|
||||
name = "MegaSeed Servitor"
|
||||
desc = "When you need seeds fast!"
|
||||
product_slogans = "THIS'S WHERE TH' SEEDS LIVE! GIT YOU SOME!;Hands down the best seed selection on the station!;Also certain mushroom varieties available, more for experts! Get certified today!"
|
||||
product_ads = "We like plants!;Grow some crops!;Grow, baby, growww!;Aw h'yeah son!"
|
||||
icon_state = "seeds_generic"
|
||||
|
||||
products = list(/obj/item/seeds/bananaseed = 3,/obj/item/seeds/berryseed = 3,/obj/item/seeds/carrotseed = 3,/obj/item/seeds/chantermycelium = 3,/obj/item/seeds/chiliseed = 3,
|
||||
/obj/item/seeds/cornseed = 3, /obj/item/seeds/eggplantseed = 3, /obj/item/seeds/potatoseed = 3, /obj/item/seeds/replicapod = 3,/obj/item/seeds/soyaseed = 3,
|
||||
/obj/item/seeds/sunflowerseed = 3,/obj/item/seeds/tomatoseed = 3,/obj/item/seeds/towermycelium = 3,/obj/item/seeds/wheatseed = 3,/obj/item/seeds/appleseed = 3,
|
||||
/obj/item/seeds/poppyseed = 3,/obj/item/seeds/sugarcaneseed = 3,/obj/item/seeds/ambrosiavulgarisseed = 3,/obj/item/seeds/peanutseed = 3,/obj/item/seeds/whitebeetseed = 3,/obj/item/seeds/watermelonseed = 3,/obj/item/seeds/lavenderseed = 3,/obj/item/seeds/limeseed = 3,
|
||||
/obj/item/seeds/lemonseed = 3,/obj/item/seeds/orangeseed = 3,/obj/item/seeds/grassseed = 3,/obj/item/seeds/cocoapodseed = 3,/obj/item/seeds/plumpmycelium = 2,
|
||||
/obj/item/seeds/cabbageseed = 3,/obj/item/seeds/grapeseed = 3,/obj/item/seeds/pumpkinseed = 3,/obj/item/seeds/cherryseed = 3,/obj/item/seeds/plastiseed = 3,/obj/item/seeds/riceseed = 3)
|
||||
contraband = list(/obj/item/seeds/amanitamycelium = 2,/obj/item/seeds/glowshroom = 2,/obj/item/seeds/libertymycelium = 2,/obj/item/seeds/mtearseed = 2,
|
||||
/obj/item/seeds/nettleseed = 2,/obj/item/seeds/reishimycelium = 2,/obj/item/seeds/reishimycelium = 2,/obj/item/seeds/shandseed = 2,)
|
||||
premium = list(/obj/item/weapon/reagent_containers/spray/waterflower = 1)
|
||||
|
||||
/**
|
||||
* Populate hydroseeds product_records
|
||||
*
|
||||
* This needs to be customized to fetch the actual names of the seeds, otherwise
|
||||
* the machine would simply list "packet of seeds" times 20
|
||||
*/
|
||||
/obj/machinery/vending/hydroseeds/build_inventory()
|
||||
var/list/all_products = list(
|
||||
list(products, CAT_NORMAL),
|
||||
list(contraband, CAT_HIDDEN),
|
||||
list(premium, CAT_COIN))
|
||||
|
||||
for(var/current_list in all_products)
|
||||
var/category = current_list[2]
|
||||
|
||||
for(var/entry in current_list[1])
|
||||
var/obj/item/seeds/S = new entry(src)
|
||||
var/name = S.name
|
||||
var/datum/stored_item/vending_product/product = new/datum/stored_item/vending_product(src, entry, name)
|
||||
|
||||
product.price = (entry in prices) ? prices[entry] : 0
|
||||
product.amount = (current_list[1][entry]) ? current_list[1][entry] : 1
|
||||
product.category = category
|
||||
|
||||
product_records.Add(product)
|
||||
|
||||
/obj/machinery/vending/magivend
|
||||
name = "MagiVend"
|
||||
desc = "A magic vending machine."
|
||||
icon_state = "MagiVend"
|
||||
product_slogans = "Sling spells the proper way with MagiVend!;Be your own Houdini! Use MagiVend!"
|
||||
vend_delay = 15
|
||||
vend_reply = "Have an enchanted evening!"
|
||||
product_ads = "FJKLFJSD;AJKFLBJAKL;1234 LOONIES LOL!;>MFW;Kill them fuckers!;GET DAT FUKKEN DISK;HONK!;EI NATH;Destroy the station!;Admin conspiracies since forever!;Space-time bending hardware!"
|
||||
products = list(/obj/item/clothing/head/wizard = 1,/obj/item/clothing/suit/wizrobe = 1,/obj/item/clothing/head/wizard/red = 1,/obj/item/clothing/suit/wizrobe/red = 1,/obj/item/clothing/shoes/sandal = 1,/obj/item/weapon/staff = 2)
|
||||
|
||||
/obj/machinery/vending/dinnerware
|
||||
name = "Dinnerware"
|
||||
desc = "A kitchen and restaurant equipment vendor."
|
||||
product_ads = "Mm, food stuffs!;Food and food accessories.;Get your plates!;You like forks?;I like forks.;Woo, utensils.;You don't really need these..."
|
||||
icon_state = "dinnerware"
|
||||
products = list(
|
||||
/obj/item/weapon/reagent_containers/food/condiment/yeast = 5,
|
||||
/obj/item/weapon/reagent_containers/food/condiment/cornoil = 5,
|
||||
/obj/item/weapon/tray = 8,
|
||||
/obj/item/weapon/material/kitchen/utensil/fork = 6,
|
||||
/obj/item/weapon/material/knife = 6,
|
||||
/obj/item/weapon/material/kitchen/utensil/spoon = 6,
|
||||
/obj/item/weapon/material/knife = 3,
|
||||
/obj/item/weapon/material/kitchen/rollingpin = 2,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/square = 8,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/shake = 8,
|
||||
/obj/item/weapon/glass_extra/stick = 15,
|
||||
/obj/item/weapon/glass_extra/straw = 15,
|
||||
/obj/item/clothing/suit/chef/classic = 2,
|
||||
/obj/item/weapon/storage/bag/food = 2,
|
||||
/obj/item/weapon/storage/toolbox/lunchbox = 3,
|
||||
/obj/item/weapon/storage/toolbox/lunchbox/heart = 3,
|
||||
/obj/item/weapon/storage/toolbox/lunchbox/cat = 3,
|
||||
/obj/item/weapon/storage/toolbox/lunchbox/nt = 3,
|
||||
/obj/item/weapon/storage/toolbox/lunchbox/mars = 3,
|
||||
/obj/item/weapon/storage/toolbox/lunchbox/cti = 3,
|
||||
/obj/item/weapon/storage/toolbox/lunchbox/nymph = 3,
|
||||
/obj/item/weapon/storage/toolbox/lunchbox/syndicate = 3,
|
||||
/obj/item/trash/bowl = 10) //VOREStation Add
|
||||
contraband = list(/obj/item/weapon/material/knife/butch = 2)
|
||||
|
||||
/obj/machinery/vending/sovietsoda
|
||||
name = "BODA"
|
||||
desc = "An old sweet water vending machine,how did this end up here?"
|
||||
icon_state = "sovietsoda"
|
||||
product_ads = "For Tsar and Country.;Have you fulfilled your nutrition quota today?;Very nice!;We are simple people, for this is all we eat.;If there is a person, there is a problem. If there is no person, then there is no problem."
|
||||
products = list(/obj/item/weapon/reagent_containers/food/drinks/bottle/space_up = 30) // TODO Russian soda can
|
||||
contraband = list(/obj/item/weapon/reagent_containers/food/drinks/bottle/cola = 20) // TODO Russian cola can
|
||||
idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan.
|
||||
vending_sound = "machines/vending/vending_cans.ogg"
|
||||
|
||||
/obj/machinery/vending/tool
|
||||
name = "YouTool"
|
||||
desc = "Tools for tools."
|
||||
icon_state = "tool"
|
||||
//req_access = list(access_maint_tunnels) //Maintenance access
|
||||
products = list(/obj/item/stack/cable_coil/random = 10,/obj/item/weapon/tool/crowbar = 5,/obj/item/weapon/weldingtool = 3,/obj/item/weapon/tool/wirecutters = 5,
|
||||
/obj/item/weapon/tool/wrench = 5,/obj/item/device/analyzer = 5,/obj/item/device/t_scanner = 5,/obj/item/weapon/tool/screwdriver = 5,
|
||||
/obj/item/device/flashlight/glowstick = 3, /obj/item/device/flashlight/glowstick/red = 3, /obj/item/device/flashlight/glowstick/blue = 3,
|
||||
/obj/item/device/flashlight/glowstick/orange =3, /obj/item/device/flashlight/glowstick/yellow = 3)
|
||||
contraband = list(/obj/item/weapon/weldingtool/hugetank = 2,/obj/item/clothing/gloves/fyellow = 2,)
|
||||
premium = list(/obj/item/clothing/gloves/yellow = 1)
|
||||
req_log_access = access_ce
|
||||
has_logs = 1
|
||||
|
||||
/obj/machinery/vending/engivend
|
||||
name = "Engi-Vend"
|
||||
desc = "Spare tool vending. What? Did you expect some witty description?"
|
||||
icon_state = "engivend"
|
||||
req_access = list(access_engine_equip)
|
||||
products = list(/obj/item/device/geiger = 4,/obj/item/clothing/glasses/meson = 2,/obj/item/device/multitool = 4,/obj/item/weapon/cell/high = 10,
|
||||
/obj/item/weapon/airlock_electronics = 10,/obj/item/weapon/module/power_control = 10,
|
||||
/obj/item/weapon/circuitboard/airalarm = 10,/obj/item/weapon/circuitboard/firealarm = 10,/obj/item/weapon/circuitboard/status_display = 2,
|
||||
/obj/item/weapon/circuitboard/ai_status_display = 2,/obj/item/weapon/circuitboard/newscaster = 2,/obj/item/weapon/circuitboard/holopad = 2,
|
||||
/obj/item/weapon/circuitboard/intercom = 4,/obj/item/weapon/circuitboard/security/telescreen/entertainment = 4,
|
||||
/obj/item/weapon/stock_parts/motor = 2,/obj/item/weapon/stock_parts/spring = 2,/obj/item/weapon/stock_parts/gear = 2,
|
||||
/obj/item/weapon/circuitboard/atm,/obj/item/weapon/circuitboard/guestpass,/obj/item/weapon/circuitboard/keycard_auth,
|
||||
/obj/item/weapon/circuitboard/photocopier,/obj/item/weapon/circuitboard/fax,/obj/item/weapon/circuitboard/request,
|
||||
/obj/item/weapon/circuitboard/microwave,/obj/item/weapon/circuitboard/washing,/obj/item/weapon/circuitboard/scanner_console,
|
||||
/obj/item/weapon/circuitboard/sleeper_console,/obj/item/weapon/circuitboard/body_scanner,/obj/item/weapon/circuitboard/sleeper,
|
||||
/obj/item/weapon/circuitboard/dna_analyzer)
|
||||
contraband = list(/obj/item/weapon/cell/potato = 3)
|
||||
premium = list(/obj/item/weapon/storage/belt/utility = 3)
|
||||
product_records = list()
|
||||
req_log_access = access_ce
|
||||
has_logs = 1
|
||||
|
||||
/obj/machinery/vending/engineering
|
||||
name = "Robco Tool Maker"
|
||||
desc = "Everything you need for do-it-yourself station repair."
|
||||
icon_state = "engi"
|
||||
req_access = list(access_engine_equip)
|
||||
products = list(/obj/item/clothing/under/rank/chief_engineer = 4,/obj/item/clothing/under/rank/engineer = 4,/obj/item/clothing/shoes/orange = 4,/obj/item/clothing/head/hardhat = 4,
|
||||
/obj/item/weapon/storage/belt/utility = 4,/obj/item/clothing/glasses/meson = 4,/obj/item/clothing/gloves/yellow = 4, /obj/item/weapon/tool/screwdriver = 12,
|
||||
/obj/item/weapon/tool/crowbar = 12,/obj/item/weapon/tool/wirecutters = 12,/obj/item/device/multitool = 12,/obj/item/weapon/tool/wrench = 12,/obj/item/device/t_scanner = 12,
|
||||
/obj/item/stack/cable_coil/heavyduty = 8, /obj/item/weapon/cell = 8, /obj/item/weapon/weldingtool = 8,/obj/item/clothing/head/welding = 8,
|
||||
/obj/item/weapon/light/tube = 10,/obj/item/clothing/suit/fire = 4, /obj/item/weapon/stock_parts/scanning_module = 5,/obj/item/weapon/stock_parts/micro_laser = 5,
|
||||
/obj/item/weapon/stock_parts/matter_bin = 5,/obj/item/weapon/stock_parts/manipulator = 5,/obj/item/weapon/stock_parts/console_screen = 5)
|
||||
// There was an incorrect entry (cablecoil/power). I improvised to cablecoil/heavyduty.
|
||||
// Another invalid entry, /obj/item/weapon/circuitry. I don't even know what that would translate to, removed it.
|
||||
// The original products list wasn't finished. The ones without given quantities became quantity 5. -Sayu
|
||||
req_log_access = access_ce
|
||||
has_logs = 1
|
||||
|
||||
/obj/machinery/vending/robotics
|
||||
name = "Robotech Deluxe"
|
||||
desc = "All the tools you need to create your own robot army."
|
||||
icon_state = "robotics"
|
||||
req_access = list(access_robotics)
|
||||
products = list(/obj/item/clothing/suit/storage/toggle/labcoat = 4,/obj/item/clothing/under/rank/roboticist = 4,/obj/item/stack/cable_coil = 4,/obj/item/device/flash = 4,
|
||||
/obj/item/weapon/cell/high = 12, /obj/item/device/assembly/prox_sensor = 3,/obj/item/device/assembly/signaler = 3,/obj/item/device/healthanalyzer = 3,
|
||||
/obj/item/weapon/surgical/scalpel = 2,/obj/item/weapon/surgical/circular_saw = 2,/obj/item/weapon/tank/anesthetic = 2,/obj/item/clothing/mask/breath/medical = 5,
|
||||
/obj/item/weapon/tool/screwdriver = 5,/obj/item/weapon/tool/crowbar = 5)
|
||||
//everything after the power cell had no amounts, I improvised. -Sayu
|
||||
req_log_access = access_rd
|
||||
has_logs = 1
|
||||
|
||||
/obj/machinery/vending/giftvendor
|
||||
name = "AlliCo Baubles and Confectionaries"
|
||||
desc = "For that special someone!"
|
||||
icon_state = "giftvendor"
|
||||
vend_delay = 15
|
||||
products = list(/obj/item/weapon/storage/fancy/heartbox = 5,
|
||||
/obj/item/toy/bouquet = 5,
|
||||
/obj/item/toy/bouquet/fake = 4,
|
||||
/obj/item/weapon/paper/card/smile = 3,
|
||||
/obj/item/weapon/paper/card/heart = 3,
|
||||
/obj/item/weapon/paper/card/cat = 3,
|
||||
/obj/item/weapon/paper/card/flower = 3,
|
||||
/obj/item/clothing/accessory/bracelet/friendship = 5,
|
||||
/obj/item/toy/plushie/therapy/red = 2,
|
||||
/obj/item/toy/plushie/therapy/purple = 2,
|
||||
/obj/item/toy/plushie/therapy/blue = 2,
|
||||
/obj/item/toy/plushie/therapy/yellow = 2,
|
||||
/obj/item/toy/plushie/therapy/orange = 2,
|
||||
/obj/item/toy/plushie/therapy/green = 2,
|
||||
/obj/item/toy/plushie/nymph = 2,
|
||||
/obj/item/toy/plushie/mouse = 2,
|
||||
/obj/item/toy/plushie/kitten = 2,
|
||||
/obj/item/toy/plushie/lizard = 2,
|
||||
/obj/item/toy/plushie/spider = 2,
|
||||
/obj/item/toy/plushie/farwa = 2,
|
||||
/obj/item/toy/plushie/corgi = 1,
|
||||
/obj/item/toy/plushie/octopus = 1,
|
||||
/obj/item/toy/plushie/face_hugger = 1,
|
||||
/obj/item/toy/plushie/carp = 1,
|
||||
/obj/item/toy/plushie/deer = 1,
|
||||
/obj/item/toy/plushie/tabby_cat = 1,
|
||||
/obj/item/device/threadneedle = 3,
|
||||
//VOREStation Add Start
|
||||
/obj/item/toy/plushie/lizardplushie/kobold = 1,
|
||||
/obj/item/toy/plushie/slimeplushie = 1,
|
||||
/obj/item/toy/plushie/box = 1,
|
||||
/obj/item/toy/plushie/borgplushie = 1,
|
||||
/obj/item/toy/plushie/borgplushie/medihound = 1,
|
||||
/obj/item/toy/plushie/borgplushie/scrubpuppy = 1,
|
||||
/obj/item/toy/plushie/foxbear = 1,
|
||||
/obj/item/toy/plushie/nukeplushie = 1,
|
||||
/obj/item/toy/plushie/otter = 1)
|
||||
//VOREStation Add End
|
||||
premium = list(/obj/item/weapon/reagent_containers/food/drinks/bottle/champagne = 1,
|
||||
/obj/item/weapon/storage/trinketbox = 2)
|
||||
prices = list(/obj/item/weapon/storage/fancy/heartbox = 15,
|
||||
/obj/item/toy/bouquet = 10,
|
||||
/obj/item/toy/bouquet/fake = 3,
|
||||
/obj/item/weapon/paper/card/smile = 1,
|
||||
/obj/item/weapon/paper/card/heart = 1,
|
||||
/obj/item/weapon/paper/card/cat = 1,
|
||||
/obj/item/weapon/paper/card/flower = 1,
|
||||
/obj/item/clothing/accessory/bracelet/friendship = 5,
|
||||
/obj/item/toy/plushie/therapy/red = 20,
|
||||
/obj/item/toy/plushie/therapy/purple = 20,
|
||||
/obj/item/toy/plushie/therapy/blue = 20,
|
||||
/obj/item/toy/plushie/therapy/yellow = 20,
|
||||
/obj/item/toy/plushie/therapy/orange = 20,
|
||||
/obj/item/toy/plushie/therapy/green = 20,
|
||||
/obj/item/toy/plushie/nymph = 35,
|
||||
/obj/item/toy/plushie/mouse = 35,
|
||||
/obj/item/toy/plushie/kitten = 35,
|
||||
/obj/item/toy/plushie/lizard = 35,
|
||||
/obj/item/toy/plushie/spider = 35,
|
||||
/obj/item/toy/plushie/farwa = 35,
|
||||
/obj/item/toy/plushie/corgi = 50,
|
||||
/obj/item/toy/plushie/octopus = 50,
|
||||
/obj/item/toy/plushie/face_hugger = 50,
|
||||
/obj/item/toy/plushie/carp = 50,
|
||||
/obj/item/toy/plushie/deer = 50,
|
||||
/obj/item/toy/plushie/tabby_cat = 50,
|
||||
/obj/item/device/threadneedle = 2,
|
||||
//VOREStation Add Start
|
||||
/obj/item/toy/plushie/lizardplushie/kobold = 50,
|
||||
/obj/item/toy/plushie/slimeplushie = 50,
|
||||
/obj/item/toy/plushie/box = 50,
|
||||
/obj/item/toy/plushie/borgplushie = 50,
|
||||
/obj/item/toy/plushie/borgplushie/medihound = 50,
|
||||
/obj/item/toy/plushie/borgplushie/scrubpuppy = 50,
|
||||
/obj/item/toy/plushie/foxbear = 50,
|
||||
/obj/item/toy/plushie/nukeplushie = 50,
|
||||
/obj/item/toy/plushie/otter = 50)
|
||||
//VOREStation Add End
|
||||
|
||||
|
||||
/obj/machinery/vending/fishing
|
||||
name = "Loot Trawler"
|
||||
desc = "A special vendor for fishing equipment."
|
||||
product_ads = "Tired of trawling across the ocean floor? Get our loot!;Chum and rods.;Don't get baited into fishing without us!;Baby is your star-sign pisces? We'd make a perfect match.;Do not fear, plenty to catch around here.;Don't get reeled in helplessly, get your own rod today!"
|
||||
icon_state = "fishvendor"
|
||||
products = list(/obj/item/weapon/material/fishing_rod/modern/cheap = 6,
|
||||
/obj/item/weapon/storage/box/wormcan = 4,
|
||||
/obj/item/weapon/storage/box/wormcan/sickly = 10,
|
||||
/obj/item/weapon/material/fishing_net = 2,
|
||||
/obj/item/stack/cable_coil/random = 6)
|
||||
prices = list(/obj/item/weapon/material/fishing_rod/modern/cheap = 50,
|
||||
/obj/item/weapon/storage/box/wormcan = 12,
|
||||
/obj/item/weapon/storage/box/wormcan/sickly = 6,
|
||||
/obj/item/weapon/material/fishing_net = 40,
|
||||
/obj/item/stack/cable_coil/random = 4)
|
||||
premium = list(/obj/item/weapon/storage/box/wormcan/deluxe = 1)
|
||||
contraband = list(/obj/item/weapon/storage/box/wormcan/deluxe = 1)
|
||||
//Actual machines are in vending_machines.dm
|
||||
|
||||
566
code/game/machinery/vending_machines.dm
Normal file
566
code/game/machinery/vending_machines.dm
Normal file
@@ -0,0 +1,566 @@
|
||||
//
|
||||
//The code for machines are in vending.dm
|
||||
//Only put machines here.
|
||||
//
|
||||
//
|
||||
|
||||
|
||||
/*
|
||||
* Vending machine types
|
||||
*/
|
||||
|
||||
/*
|
||||
|
||||
/obj/machinery/vending/[vendors name here] // --vending machine template :)
|
||||
name = ""
|
||||
desc = ""
|
||||
icon = ''
|
||||
icon_state = ""
|
||||
vend_delay = 15
|
||||
products = list()
|
||||
contraband = list()
|
||||
premium = list()
|
||||
|
||||
*/
|
||||
|
||||
/*
|
||||
/obj/machinery/vending/atmospherics //Commenting this out until someone ponies up some actual working, broken, and unpowered sprites - Quarxink
|
||||
name = "Tank Vendor"
|
||||
desc = "A vendor with a wide variety of masks and gas tanks."
|
||||
icon = 'icons/obj/objects.dmi'
|
||||
icon_state = "dispenser"
|
||||
product_paths = "/obj/item/weapon/tank/oxygen;/obj/item/weapon/tank/phoron;/obj/item/weapon/tank/emergency_oxygen;/obj/item/weapon/tank/emergency_oxygen/engi;/obj/item/clothing/mask/breath"
|
||||
productamounts = "10;10;10;5;25"
|
||||
vend_delay = 0
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/obj/machinery/vending/boozeomat
|
||||
name = "Booze-O-Mat"
|
||||
desc = "A technological marvel, supposedly able to mix just the mixture you'd like to drink the moment you ask for one."
|
||||
icon_state = "fridge_dark"
|
||||
products = list(/obj/item/weapon/reagent_containers/food/drinks/glass2/square = 10,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/rocks = 10,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/shake = 10,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/cocktail = 10,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/shot = 10,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/pint = 10,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/mug = 10,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/wine = 10,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/carafe = 2, //VOREStation Add - Carafes and Pitchers
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/pitcher = 2, //VOREStation Add - Carafes and Pitchers
|
||||
/obj/item/weapon/reagent_containers/food/drinks/metaglass = 10,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/metaglass/metapint = 10,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/gin = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/bluecuracao = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/cognac = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/grenadine = 5,
|
||||
/obj/item/weapon/reagent_containers/food/condiment/cornoil = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/kahlua = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/melonliquor = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/peppermintschnapps = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/peachschnapps = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/lemonadeschnapps = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/rum = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/sake = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/specialwhiskey = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/tequilla = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/vermouth = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/wine = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/small/ale = 15,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer = 15,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/small/cider = 15,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/tomatojuice = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/limejuice = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/lemonjuice = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/applejuice = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/milk = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/cream = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/cola = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/space_up = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/space_mountain_wind = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/sodawater = 15,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/tonic = 15,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/gingerale = 15,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/flask/barflask = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/flask/vacuumflask = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/ice = 10,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/tea = 15,
|
||||
/obj/item/weapon/glass_extra/stick = 30,
|
||||
/obj/item/weapon/glass_extra/straw = 30)
|
||||
contraband = list()
|
||||
vend_delay = 15
|
||||
idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan.
|
||||
product_slogans = "I hope nobody asks me for a bloody cup o' tea...;Alcohol is humanity's friend. Would you abandon a friend?;Quite delighted to serve you!;Is nobody thirsty on this station?"
|
||||
product_ads = "Drink up!;Booze is good for you!;Alcohol is humanity's best friend.;Quite delighted to serve you!;Care for a nice, cold beer?;Nothing cures you like booze!;Have a sip!;Have a drink!;Have a beer!;Beer is good for you!;Only the finest alcohol!;Best quality booze since 2053!;Award-winning wine!;Maximum alcohol!;Man loves beer.;A toast for progress!"
|
||||
req_access = list(access_bar)
|
||||
req_log_access = access_bar
|
||||
has_logs = 1
|
||||
vending_sound = "machines/vending/vending_cans.ogg"
|
||||
|
||||
/obj/machinery/vending/assist
|
||||
products = list( /obj/item/device/assembly/prox_sensor = 5,/obj/item/device/assembly/igniter = 3,/obj/item/device/assembly/signaler = 4,
|
||||
/obj/item/weapon/tool/wirecutters = 1, /obj/item/weapon/cartridge/signal = 4)
|
||||
contraband = list(/obj/item/device/flashlight = 5,/obj/item/device/assembly/timer = 2)
|
||||
product_ads = "Only the finest!;Have some tools.;The most robust equipment.;The finest gear in space!"
|
||||
|
||||
/obj/machinery/vending/coffee
|
||||
name = "Hot Drinks machine"
|
||||
desc = "A vending machine which dispenses hot drinks."
|
||||
product_ads = "Have a drink!;Drink up!;It's good for you!;Would you like a hot joe?;I'd kill for some coffee!;The best beans in the galaxy.;Only the finest brew for you.;Mmmm. Nothing like a coffee.;I like coffee, don't you?;Coffee helps you work!;Try some tea.;We hope you like the best!;Try our new chocolate!;Admin conspiracies"
|
||||
icon_state = "coffee"
|
||||
vend_delay = 34
|
||||
idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan.
|
||||
vend_power_usage = 85000 //85 kJ to heat a 250 mL cup of coffee
|
||||
products = list(/obj/item/weapon/reagent_containers/food/drinks/coffee = 25,/obj/item/weapon/reagent_containers/food/drinks/tea = 25,/obj/item/weapon/reagent_containers/food/drinks/h_chocolate = 25)
|
||||
contraband = list(/obj/item/weapon/reagent_containers/food/drinks/ice = 10)
|
||||
prices = list(/obj/item/weapon/reagent_containers/food/drinks/coffee = 2, /obj/item/weapon/reagent_containers/food/drinks/tea = 2, /obj/item/weapon/reagent_containers/food/drinks/h_chocolate = 2) //VOREStation Edit
|
||||
vending_sound = "machines/vending/vending_coffee.ogg"
|
||||
|
||||
/obj/machinery/vending/snack
|
||||
name = "Getmore Chocolate Corp"
|
||||
desc = "A snack machine courtesy of the Getmore Chocolate Corporation, based out of Mars."
|
||||
product_slogans = "Try our new nougat bar!;Twice the calories for half the price!"
|
||||
product_ads = "The healthiest!;Award-winning chocolate bars!;Mmm! So good!;Oh my god it's so juicy!;Have a snack.;Snacks are good for you!;Have some more Getmore!;Best quality snacks straight from mars.;We love chocolate!;Try our new jerky!"
|
||||
icon_state = "snack"
|
||||
products = list(/obj/item/weapon/reagent_containers/food/snacks/candy = 12,/obj/item/weapon/reagent_containers/food/drinks/dry_ramen = 12,/obj/item/weapon/reagent_containers/food/snacks/chips =12,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/sosjerky = 12,/obj/item/weapon/reagent_containers/food/snacks/no_raisin = 12,/obj/item/weapon/reagent_containers/food/snacks/spacetwinkie = 12,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers = 12, /obj/item/weapon/reagent_containers/food/snacks/tastybread = 12, /obj/item/weapon/reagent_containers/food/snacks/skrellsnacks = 6)
|
||||
contraband = list(/obj/item/weapon/reagent_containers/food/snacks/syndicake = 6,/obj/item/weapon/reagent_containers/food/snacks/unajerky = 12,)
|
||||
prices = list(/obj/item/weapon/reagent_containers/food/snacks/candy = 1,/obj/item/weapon/reagent_containers/food/drinks/dry_ramen = 5,/obj/item/weapon/reagent_containers/food/snacks/chips = 1,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/sosjerky = 2,/obj/item/weapon/reagent_containers/food/snacks/no_raisin = 1,/obj/item/weapon/reagent_containers/food/snacks/spacetwinkie = 1,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers = 1, /obj/item/weapon/reagent_containers/food/snacks/tastybread = 2, /obj/item/weapon/reagent_containers/food/snacks/skrellsnacks = 2)
|
||||
|
||||
/obj/machinery/vending/cola
|
||||
name = "Robust Softdrinks"
|
||||
desc = "A softdrink vendor provided by Robust Industries, LLC."
|
||||
icon_state = "Cola_Machine"
|
||||
product_slogans = "Robust Softdrinks: More robust than a toolbox to the head!"
|
||||
product_ads = "Refreshing!;Hope you're thirsty!;Over 1 million drinks sold!;Thirsty? Why not cola?;Please, have a drink!;Drink up!;The best drinks in space."
|
||||
products = list(/obj/item/weapon/reagent_containers/food/drinks/cans/cola = 10,/obj/item/weapon/reagent_containers/food/drinks/cans/space_mountain_wind = 10,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/dr_gibb = 10,/obj/item/weapon/reagent_containers/food/drinks/cans/starkist = 10,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle = 10,/obj/item/weapon/reagent_containers/food/drinks/cans/space_up = 10,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/iced_tea = 10, /obj/item/weapon/reagent_containers/food/drinks/cans/grape_juice = 10,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/gingerale = 10)
|
||||
contraband = list(/obj/item/weapon/reagent_containers/food/drinks/cans/thirteenloko = 5, /obj/item/weapon/reagent_containers/food/snacks/liquidfood = 6)
|
||||
prices = list(/obj/item/weapon/reagent_containers/food/drinks/cans/cola = 1,/obj/item/weapon/reagent_containers/food/drinks/cans/space_mountain_wind = 1,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/dr_gibb = 1,/obj/item/weapon/reagent_containers/food/drinks/cans/starkist = 1,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle = 2,/obj/item/weapon/reagent_containers/food/drinks/cans/space_up = 1,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/iced_tea = 1,/obj/item/weapon/reagent_containers/food/drinks/cans/grape_juice = 1,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/gingerale = 1)
|
||||
idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan.
|
||||
vending_sound = "machines/vending/vending_cans.ogg"
|
||||
|
||||
/obj/machinery/vending/fitness
|
||||
name = "SweatMAX"
|
||||
desc = "Fueled by your inner inadequacy!"
|
||||
icon_state = "fitness"
|
||||
//VOREStation Edit Start
|
||||
products = list(/obj/item/weapon/reagent_containers/food/drinks/smallmilk = 16,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/smallchocmilk = 16,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/fitnessflask/proteinshake = 8,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/fitnessflask = 8,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/candy/proteinbar = 16,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/liquidfood = 8,
|
||||
/obj/item/weapon/reagent_containers/pill/diet = 8,
|
||||
///obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose = 5, //VOREStation Removal,
|
||||
/obj/item/weapon/towel/random = 8,
|
||||
/obj/item/toy/tennis = 4)
|
||||
|
||||
prices = list(/obj/item/weapon/reagent_containers/food/drinks/smallmilk = 3,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/smallchocmilk = 3,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/fitnessflask/proteinshake = 15,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/fitnessflask = 1,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/candy/proteinbar = 5,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/liquidfood = 5,
|
||||
/obj/item/weapon/reagent_containers/pill/diet = 25,
|
||||
///obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose = 5,
|
||||
/obj/item/weapon/towel/random = 20,
|
||||
/obj/item/toy/tennis = 15)
|
||||
//VOREStation Edit End
|
||||
|
||||
contraband = list(/obj/item/weapon/reagent_containers/syringe/steroid = 4, /obj/item/weapon/reagent_containers/food/drinks/glass2/fitnessflask/proteanshake = 2) // VOREStation Add - Slurpable blobs.
|
||||
|
||||
/obj/machinery/vending/cart
|
||||
name = "PTech"
|
||||
desc = "Cartridges for PDAs."
|
||||
product_slogans = "Carts to go!"
|
||||
icon_state = "cart"
|
||||
req_access = list(access_hop)
|
||||
products = list(/obj/item/weapon/cartridge/medical = 10,/obj/item/weapon/cartridge/engineering = 10,/obj/item/weapon/cartridge/security = 10,
|
||||
/obj/item/weapon/cartridge/janitor = 10,/obj/item/weapon/cartridge/signal/science = 10,/obj/item/device/pda/heads = 10,
|
||||
/obj/item/weapon/cartridge/captain = 3,/obj/item/weapon/cartridge/quartermaster = 10)
|
||||
req_log_access = access_hop
|
||||
has_logs = 1
|
||||
|
||||
/obj/machinery/vending/cigarette
|
||||
name = "cigarette machine"
|
||||
desc = "If you want to get cancer, might as well do it in style!"
|
||||
product_slogans = "Space cigs taste good like a cigarette should.;I'd rather toolbox than switch.;Smoke!;Don't believe the reports - smoke today!"
|
||||
product_ads = "Probably not bad for you!;Don't believe the scientists!;It's good for you!;Don't quit, buy more!;Smoke!;Nicotine heaven.;Best cigarettes since 2150.;Award-winning cigs.;Feeling temperamental? Try a Temperamento!;Carcinoma Angels - go fuck yerself!;Don't be so hard on yourself, kid. Smoke a Lucky Star!"
|
||||
vend_delay = 34
|
||||
icon_state = "cigs"
|
||||
products = list(/obj/item/weapon/storage/fancy/cigarettes = 10,
|
||||
/obj/item/weapon/storage/fancy/cigarettes/dromedaryco = 10,
|
||||
/obj/item/weapon/storage/fancy/cigarettes/killthroat = 10,
|
||||
/obj/item/weapon/storage/fancy/cigarettes/luckystars = 10,
|
||||
/obj/item/weapon/storage/fancy/cigarettes/jerichos = 10,
|
||||
/obj/item/weapon/storage/fancy/cigarettes/menthols = 10,
|
||||
/obj/item/weapon/storage/rollingpapers = 10,
|
||||
/obj/item/weapon/storage/box/matches = 10,
|
||||
/obj/item/weapon/flame/lighter/random = 4)
|
||||
contraband = list(/obj/item/weapon/flame/lighter/zippo = 4)
|
||||
premium = list(/obj/item/weapon/storage/fancy/cigar = 5,
|
||||
/obj/item/weapon/storage/fancy/cigarettes/carcinomas = 5,
|
||||
/obj/item/weapon/storage/fancy/cigarettes/professionals = 5)
|
||||
prices = list(/obj/item/weapon/storage/fancy/cigarettes = 12,
|
||||
/obj/item/weapon/storage/fancy/cigarettes/dromedaryco = 15,
|
||||
/obj/item/weapon/storage/fancy/cigarettes/killthroat = 17,
|
||||
/obj/item/weapon/storage/fancy/cigarettes/luckystars = 17,
|
||||
/obj/item/weapon/storage/fancy/cigarettes/jerichos = 22,
|
||||
/obj/item/weapon/storage/fancy/cigarettes/menthols = 18,
|
||||
/obj/item/weapon/storage/rollingpapers = 10,
|
||||
/obj/item/weapon/storage/box/matches = 1,
|
||||
/obj/item/weapon/flame/lighter/random = 2)
|
||||
|
||||
/obj/machinery/vending/medical
|
||||
name = "NanoMed Plus"
|
||||
desc = "Medical drug dispenser."
|
||||
icon_state = "med"
|
||||
product_ads = "Go save some lives!;The best stuff for your medbay.;Only the finest tools.;Natural chemicals!;This stuff saves lives.;Don't you want some?;Ping!"
|
||||
req_access = list(access_medical)
|
||||
products = list(/obj/item/weapon/reagent_containers/glass/bottle/antitoxin = 4,/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline = 4,
|
||||
/obj/item/weapon/reagent_containers/glass/bottle/stoxin = 4,/obj/item/weapon/reagent_containers/glass/bottle/toxin = 4,
|
||||
/obj/item/weapon/reagent_containers/syringe/antiviral = 4,/obj/item/weapon/reagent_containers/syringe = 12,
|
||||
/obj/item/device/healthanalyzer = 5,/obj/item/weapon/reagent_containers/glass/beaker = 4, /obj/item/weapon/reagent_containers/dropper = 2,
|
||||
/obj/item/stack/medical/advanced/bruise_pack = 6, /obj/item/stack/medical/advanced/ointment = 6, /obj/item/stack/medical/splint = 4,
|
||||
/obj/item/weapon/storage/pill_bottle/carbon = 2)
|
||||
contraband = list(/obj/item/weapon/reagent_containers/pill/tox = 3,/obj/item/weapon/reagent_containers/pill/stox = 4,/obj/item/weapon/reagent_containers/pill/antitox = 6)
|
||||
idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan.
|
||||
req_log_access = access_cmo
|
||||
has_logs = 1
|
||||
|
||||
/obj/machinery/vending/phoronresearch
|
||||
name = "Toximate 3000"
|
||||
desc = "All the fine parts you need in one vending machine!"
|
||||
products = list(/obj/item/clothing/under/rank/scientist = 6,/obj/item/clothing/suit/bio_suit = 6,/obj/item/clothing/head/bio_hood = 6,
|
||||
/obj/item/device/transfer_valve = 6,/obj/item/device/assembly/timer = 6,/obj/item/device/assembly/signaler = 6,
|
||||
/obj/item/device/assembly/prox_sensor = 6,/obj/item/device/assembly/igniter = 6)
|
||||
req_log_access = access_rd
|
||||
has_logs = 1
|
||||
|
||||
/obj/machinery/vending/wallmed1
|
||||
name = "NanoMed"
|
||||
desc = "A wall-mounted version of the NanoMed."
|
||||
product_ads = "Go save some lives!;The best stuff for your medbay.;Only the finest tools.;Natural chemicals!;This stuff saves lives.;Don't you want some?"
|
||||
icon_state = "wallmed"
|
||||
density = 0 //It is wall-mounted, and thus, not dense. --Superxpdude
|
||||
products = list(/obj/item/stack/medical/bruise_pack = 2,/obj/item/stack/medical/ointment = 2,/obj/item/weapon/reagent_containers/hypospray/autoinjector = 4,/obj/item/device/healthanalyzer = 1)
|
||||
contraband = list(/obj/item/weapon/reagent_containers/syringe/antitoxin = 4,/obj/item/weapon/reagent_containers/syringe/antiviral = 4,/obj/item/weapon/reagent_containers/pill/tox = 1)
|
||||
req_log_access = access_cmo
|
||||
has_logs = 1
|
||||
can_rotate = 0
|
||||
|
||||
/obj/machinery/vending/wallmed2
|
||||
name = "NanoMed"
|
||||
desc = "A wall-mounted version of the NanoMed, containing only vital first aid equipment."
|
||||
icon_state = "wallmed"
|
||||
density = 0 //It is wall-mounted, and thus, not dense. --Superxpdude
|
||||
products = list(/obj/item/weapon/reagent_containers/hypospray/autoinjector = 5,/obj/item/weapon/reagent_containers/syringe/antitoxin = 3,/obj/item/stack/medical/bruise_pack = 3,
|
||||
/obj/item/stack/medical/ointment =3,/obj/item/device/healthanalyzer = 3)
|
||||
contraband = list(/obj/item/weapon/reagent_containers/pill/tox = 3)
|
||||
req_log_access = access_cmo
|
||||
has_logs = 1
|
||||
can_rotate = 0
|
||||
|
||||
/obj/machinery/vending/security
|
||||
name = "SecTech"
|
||||
desc = "A security equipment vendor."
|
||||
product_ads = "Crack capitalist skulls!;Beat some heads in!;Don't forget - harm is good!;Your weapons are right here.;Handcuffs!;Freeze, scumbag!;Don't tase me bro!;Tase them, bro.;Why not have a donut?"
|
||||
icon_state = "sec"
|
||||
req_access = list(access_security)
|
||||
products = list(/obj/item/weapon/handcuffs = 8,/obj/item/weapon/grenade/flashbang = 4,/obj/item/device/flash = 5,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/donut/normal = 12,/obj/item/weapon/storage/box/evidence = 6)
|
||||
contraband = list(/obj/item/clothing/glasses/sunglasses = 2,/obj/item/weapon/storage/box/donut = 2)
|
||||
req_log_access = access_armory
|
||||
has_logs = 1
|
||||
|
||||
/obj/machinery/vending/hydronutrients
|
||||
name = "NutriMax"
|
||||
desc = "A plant nutrients vendor."
|
||||
product_slogans = "Aren't you glad you don't have to fertilize the natural way?;Now with 50% less stink!;Plants are people too!"
|
||||
product_ads = "We like plants!;Don't you want some?;The greenest thumbs ever.;We like big plants.;Soft soil..."
|
||||
icon_state = "nutri_generic"
|
||||
products = list(/obj/item/weapon/reagent_containers/glass/bottle/eznutrient = 6,/obj/item/weapon/reagent_containers/glass/bottle/left4zed = 4,/obj/item/weapon/reagent_containers/glass/bottle/robustharvest = 3,/obj/item/weapon/plantspray/pests = 20,
|
||||
/obj/item/weapon/reagent_containers/syringe = 5,/obj/item/weapon/reagent_containers/glass/beaker = 4,/obj/item/weapon/storage/bag/plants = 5)
|
||||
premium = list(/obj/item/weapon/reagent_containers/glass/bottle/ammonia = 10,/obj/item/weapon/reagent_containers/glass/bottle/diethylamine = 5)
|
||||
idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan.
|
||||
|
||||
|
||||
/obj/machinery/vending/hydroseeds
|
||||
name = "MegaSeed Servitor"
|
||||
desc = "When you need seeds fast!"
|
||||
product_slogans = "THIS'S WHERE TH' SEEDS LIVE! GIT YOU SOME!;Hands down the best seed selection on the station!;Also certain mushroom varieties available, more for experts! Get certified today!"
|
||||
product_ads = "We like plants!;Grow some crops!;Grow, baby, growww!;Aw h'yeah son!"
|
||||
icon_state = "seeds_generic"
|
||||
|
||||
products = list(/obj/item/seeds/bananaseed = 3,/obj/item/seeds/berryseed = 3,/obj/item/seeds/carrotseed = 3,/obj/item/seeds/chantermycelium = 3,/obj/item/seeds/chiliseed = 3,
|
||||
/obj/item/seeds/cornseed = 3, /obj/item/seeds/eggplantseed = 3, /obj/item/seeds/potatoseed = 3, /obj/item/seeds/replicapod = 3,/obj/item/seeds/soyaseed = 3,
|
||||
/obj/item/seeds/sunflowerseed = 3,/obj/item/seeds/tomatoseed = 3,/obj/item/seeds/towermycelium = 3,/obj/item/seeds/wheatseed = 3,/obj/item/seeds/appleseed = 3,
|
||||
/obj/item/seeds/poppyseed = 3,/obj/item/seeds/sugarcaneseed = 3,/obj/item/seeds/ambrosiavulgarisseed = 3,/obj/item/seeds/peanutseed = 3,/obj/item/seeds/whitebeetseed = 3,/obj/item/seeds/watermelonseed = 3,/obj/item/seeds/lavenderseed = 3,/obj/item/seeds/limeseed = 3,
|
||||
/obj/item/seeds/lemonseed = 3,/obj/item/seeds/orangeseed = 3,/obj/item/seeds/grassseed = 3,/obj/item/seeds/cocoapodseed = 3,/obj/item/seeds/plumpmycelium = 2,
|
||||
/obj/item/seeds/cabbageseed = 3,/obj/item/seeds/grapeseed = 3,/obj/item/seeds/pumpkinseed = 3,/obj/item/seeds/cherryseed = 3,/obj/item/seeds/plastiseed = 3,/obj/item/seeds/riceseed = 3)
|
||||
contraband = list(/obj/item/seeds/amanitamycelium = 2,/obj/item/seeds/glowshroom = 2,/obj/item/seeds/libertymycelium = 2,/obj/item/seeds/mtearseed = 2,
|
||||
/obj/item/seeds/nettleseed = 2,/obj/item/seeds/reishimycelium = 2,/obj/item/seeds/reishimycelium = 2,/obj/item/seeds/shandseed = 2,)
|
||||
premium = list(/obj/item/weapon/reagent_containers/spray/waterflower = 1)
|
||||
|
||||
/**
|
||||
* Populate hydroseeds product_records
|
||||
*
|
||||
* This needs to be customized to fetch the actual names of the seeds, otherwise
|
||||
* the machine would simply list "packet of seeds" times 20
|
||||
*/
|
||||
/obj/machinery/vending/hydroseeds/build_inventory()
|
||||
var/list/all_products = list(
|
||||
list(products, CAT_NORMAL),
|
||||
list(contraband, CAT_HIDDEN),
|
||||
list(premium, CAT_COIN))
|
||||
|
||||
for(var/current_list in all_products)
|
||||
var/category = current_list[2]
|
||||
|
||||
for(var/entry in current_list[1])
|
||||
var/obj/item/seeds/S = new entry(src)
|
||||
var/name = S.name
|
||||
var/datum/stored_item/vending_product/product = new/datum/stored_item/vending_product(src, entry, name)
|
||||
|
||||
product.price = (entry in prices) ? prices[entry] : 0
|
||||
product.amount = (current_list[1][entry]) ? current_list[1][entry] : 1
|
||||
product.category = category
|
||||
|
||||
product_records.Add(product)
|
||||
|
||||
/obj/machinery/vending/magivend
|
||||
name = "MagiVend"
|
||||
desc = "A magic vending machine."
|
||||
icon_state = "MagiVend"
|
||||
product_slogans = "Sling spells the proper way with MagiVend!;Be your own Houdini! Use MagiVend!"
|
||||
vend_delay = 15
|
||||
vend_reply = "Have an enchanted evening!"
|
||||
product_ads = "FJKLFJSD;AJKFLBJAKL;1234 LOONIES LOL!;>MFW;Kill them fuckers!;GET DAT FUKKEN DISK;HONK!;EI NATH;Destroy the station!;Admin conspiracies since forever!;Space-time bending hardware!"
|
||||
products = list(/obj/item/clothing/head/wizard = 1,/obj/item/clothing/suit/wizrobe = 1,/obj/item/clothing/head/wizard/red = 1,/obj/item/clothing/suit/wizrobe/red = 1,/obj/item/clothing/shoes/sandal = 1,/obj/item/weapon/staff = 2)
|
||||
|
||||
/obj/machinery/vending/dinnerware
|
||||
name = "Dinnerware"
|
||||
desc = "A kitchen and restaurant equipment vendor."
|
||||
product_ads = "Mm, food stuffs!;Food and food accessories.;Get your plates!;You like forks?;I like forks.;Woo, utensils.;You don't really need these..."
|
||||
icon_state = "dinnerware"
|
||||
products = list(
|
||||
/obj/item/weapon/reagent_containers/food/condiment/yeast = 5,
|
||||
/obj/item/weapon/reagent_containers/food/condiment/cornoil = 5,
|
||||
/obj/item/weapon/tray = 8,
|
||||
/obj/item/weapon/material/kitchen/utensil/fork = 6,
|
||||
/obj/item/weapon/material/knife = 6,
|
||||
/obj/item/weapon/material/kitchen/utensil/spoon = 6,
|
||||
/obj/item/weapon/material/knife = 3,
|
||||
/obj/item/weapon/material/kitchen/rollingpin = 2,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/square = 8,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/shake = 8,
|
||||
/obj/item/weapon/glass_extra/stick = 15,
|
||||
/obj/item/weapon/glass_extra/straw = 15,
|
||||
/obj/item/clothing/suit/chef/classic = 2,
|
||||
/obj/item/weapon/storage/bag/food = 2,
|
||||
/obj/item/weapon/storage/toolbox/lunchbox = 3,
|
||||
/obj/item/weapon/storage/toolbox/lunchbox/heart = 3,
|
||||
/obj/item/weapon/storage/toolbox/lunchbox/cat = 3,
|
||||
/obj/item/weapon/storage/toolbox/lunchbox/nt = 3,
|
||||
/obj/item/weapon/storage/toolbox/lunchbox/mars = 3,
|
||||
/obj/item/weapon/storage/toolbox/lunchbox/cti = 3,
|
||||
/obj/item/weapon/storage/toolbox/lunchbox/nymph = 3,
|
||||
/obj/item/weapon/storage/toolbox/lunchbox/syndicate = 3,
|
||||
/obj/item/trash/bowl = 10) //VOREStation Add
|
||||
contraband = list(/obj/item/weapon/material/knife/butch = 2)
|
||||
|
||||
/obj/machinery/vending/sovietsoda
|
||||
name = "BODA"
|
||||
desc = "An old sweet water vending machine,how did this end up here?"
|
||||
icon_state = "sovietsoda"
|
||||
product_ads = "For Tsar and Country.;Have you fulfilled your nutrition quota today?;Very nice!;We are simple people, for this is all we eat.;If there is a person, there is a problem. If there is no person, then there is no problem."
|
||||
products = list(/obj/item/weapon/reagent_containers/food/drinks/bottle/space_up = 30) // TODO Russian soda can
|
||||
contraband = list(/obj/item/weapon/reagent_containers/food/drinks/bottle/cola = 20) // TODO Russian cola can
|
||||
idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan.
|
||||
vending_sound = "machines/vending/vending_cans.ogg"
|
||||
|
||||
/obj/machinery/vending/tool
|
||||
name = "YouTool"
|
||||
desc = "Tools for tools."
|
||||
icon_state = "tool"
|
||||
//req_access = list(access_maint_tunnels) //Maintenance access
|
||||
products = list(/obj/item/stack/cable_coil/random = 10,/obj/item/weapon/tool/crowbar = 5,/obj/item/weapon/weldingtool = 3,/obj/item/weapon/tool/wirecutters = 5,
|
||||
/obj/item/weapon/tool/wrench = 5,/obj/item/device/analyzer = 5,/obj/item/device/t_scanner = 5,/obj/item/weapon/tool/screwdriver = 5,
|
||||
/obj/item/device/flashlight/glowstick = 3, /obj/item/device/flashlight/glowstick/red = 3, /obj/item/device/flashlight/glowstick/blue = 3,
|
||||
/obj/item/device/flashlight/glowstick/orange =3, /obj/item/device/flashlight/glowstick/yellow = 3)
|
||||
contraband = list(/obj/item/weapon/weldingtool/hugetank = 2,/obj/item/clothing/gloves/fyellow = 2,)
|
||||
premium = list(/obj/item/clothing/gloves/yellow = 1)
|
||||
req_log_access = access_ce
|
||||
has_logs = 1
|
||||
|
||||
/obj/machinery/vending/engivend
|
||||
name = "Engi-Vend"
|
||||
desc = "Spare tool vending. What? Did you expect some witty description?"
|
||||
icon_state = "engivend"
|
||||
req_access = list(access_engine_equip)
|
||||
products = list(/obj/item/device/geiger = 4,/obj/item/clothing/glasses/meson = 2,/obj/item/device/multitool = 4,/obj/item/weapon/cell/high = 10,
|
||||
/obj/item/weapon/airlock_electronics = 10,/obj/item/weapon/module/power_control = 10,
|
||||
/obj/item/weapon/circuitboard/airalarm = 10,/obj/item/weapon/circuitboard/firealarm = 10,/obj/item/weapon/circuitboard/status_display = 2,
|
||||
/obj/item/weapon/circuitboard/ai_status_display = 2,/obj/item/weapon/circuitboard/newscaster = 2,/obj/item/weapon/circuitboard/holopad = 2,
|
||||
/obj/item/weapon/circuitboard/intercom = 4,/obj/item/weapon/circuitboard/security/telescreen/entertainment = 4,
|
||||
/obj/item/weapon/stock_parts/motor = 2,/obj/item/weapon/stock_parts/spring = 2,/obj/item/weapon/stock_parts/gear = 2,
|
||||
/obj/item/weapon/circuitboard/atm,/obj/item/weapon/circuitboard/guestpass,/obj/item/weapon/circuitboard/keycard_auth,
|
||||
/obj/item/weapon/circuitboard/photocopier,/obj/item/weapon/circuitboard/fax,/obj/item/weapon/circuitboard/request,
|
||||
/obj/item/weapon/circuitboard/microwave,/obj/item/weapon/circuitboard/washing,/obj/item/weapon/circuitboard/scanner_console,
|
||||
/obj/item/weapon/circuitboard/sleeper_console,/obj/item/weapon/circuitboard/body_scanner,/obj/item/weapon/circuitboard/sleeper,
|
||||
/obj/item/weapon/circuitboard/dna_analyzer)
|
||||
contraband = list(/obj/item/weapon/cell/potato = 3)
|
||||
premium = list(/obj/item/weapon/storage/belt/utility = 3)
|
||||
product_records = list()
|
||||
req_log_access = access_ce
|
||||
has_logs = 1
|
||||
|
||||
/obj/machinery/vending/engineering
|
||||
name = "Robco Tool Maker"
|
||||
desc = "Everything you need for do-it-yourself station repair."
|
||||
icon_state = "engi"
|
||||
req_access = list(access_engine_equip)
|
||||
products = list(/obj/item/clothing/under/rank/chief_engineer = 4,/obj/item/clothing/under/rank/engineer = 4,/obj/item/clothing/shoes/orange = 4,/obj/item/clothing/head/hardhat = 4,
|
||||
/obj/item/weapon/storage/belt/utility = 4,/obj/item/clothing/glasses/meson = 4,/obj/item/clothing/gloves/yellow = 4, /obj/item/weapon/tool/screwdriver = 12,
|
||||
/obj/item/weapon/tool/crowbar = 12,/obj/item/weapon/tool/wirecutters = 12,/obj/item/device/multitool = 12,/obj/item/weapon/tool/wrench = 12,/obj/item/device/t_scanner = 12,
|
||||
/obj/item/stack/cable_coil/heavyduty = 8, /obj/item/weapon/cell = 8, /obj/item/weapon/weldingtool = 8,/obj/item/clothing/head/welding = 8,
|
||||
/obj/item/weapon/light/tube = 10,/obj/item/clothing/suit/fire = 4, /obj/item/weapon/stock_parts/scanning_module = 5,/obj/item/weapon/stock_parts/micro_laser = 5,
|
||||
/obj/item/weapon/stock_parts/matter_bin = 5,/obj/item/weapon/stock_parts/manipulator = 5,/obj/item/weapon/stock_parts/console_screen = 5)
|
||||
// There was an incorrect entry (cablecoil/power). I improvised to cablecoil/heavyduty.
|
||||
// Another invalid entry, /obj/item/weapon/circuitry. I don't even know what that would translate to, removed it.
|
||||
// The original products list wasn't finished. The ones without given quantities became quantity 5. -Sayu
|
||||
req_log_access = access_ce
|
||||
has_logs = 1
|
||||
|
||||
/obj/machinery/vending/robotics
|
||||
name = "Robotech Deluxe"
|
||||
desc = "All the tools you need to create your own robot army."
|
||||
icon_state = "robotics"
|
||||
req_access = list(access_robotics)
|
||||
products = list(/obj/item/clothing/suit/storage/toggle/labcoat = 4,/obj/item/clothing/under/rank/roboticist = 4,/obj/item/stack/cable_coil = 4,/obj/item/device/flash = 4,
|
||||
/obj/item/weapon/cell/high = 12, /obj/item/device/assembly/prox_sensor = 3,/obj/item/device/assembly/signaler = 3,/obj/item/device/healthanalyzer = 3,
|
||||
/obj/item/weapon/surgical/scalpel = 2,/obj/item/weapon/surgical/circular_saw = 2,/obj/item/weapon/tank/anesthetic = 2,/obj/item/clothing/mask/breath/medical = 5,
|
||||
/obj/item/weapon/tool/screwdriver = 5,/obj/item/weapon/tool/crowbar = 5)
|
||||
//everything after the power cell had no amounts, I improvised. -Sayu
|
||||
req_log_access = access_rd
|
||||
has_logs = 1
|
||||
|
||||
/obj/machinery/vending/giftvendor
|
||||
name = "AlliCo Baubles and Confectionaries"
|
||||
desc = "For that special someone!"
|
||||
icon_state = "giftvendor"
|
||||
vend_delay = 15
|
||||
products = list(/obj/item/weapon/storage/fancy/heartbox = 5,
|
||||
/obj/item/toy/bouquet = 5,
|
||||
/obj/item/toy/bouquet/fake = 4,
|
||||
/obj/item/weapon/paper/card/smile = 3,
|
||||
/obj/item/weapon/paper/card/heart = 3,
|
||||
/obj/item/weapon/paper/card/cat = 3,
|
||||
/obj/item/weapon/paper/card/flower = 3,
|
||||
/obj/item/clothing/accessory/bracelet/friendship = 5,
|
||||
/obj/item/toy/plushie/therapy/red = 2,
|
||||
/obj/item/toy/plushie/therapy/purple = 2,
|
||||
/obj/item/toy/plushie/therapy/blue = 2,
|
||||
/obj/item/toy/plushie/therapy/yellow = 2,
|
||||
/obj/item/toy/plushie/therapy/orange = 2,
|
||||
/obj/item/toy/plushie/therapy/green = 2,
|
||||
/obj/item/toy/plushie/nymph = 2,
|
||||
/obj/item/toy/plushie/mouse = 2,
|
||||
/obj/item/toy/plushie/kitten = 2,
|
||||
/obj/item/toy/plushie/lizard = 2,
|
||||
/obj/item/toy/plushie/spider = 2,
|
||||
/obj/item/toy/plushie/farwa = 2,
|
||||
/obj/item/toy/plushie/corgi = 1,
|
||||
/obj/item/toy/plushie/octopus = 1,
|
||||
/obj/item/toy/plushie/face_hugger = 1,
|
||||
/obj/item/toy/plushie/carp = 1,
|
||||
/obj/item/toy/plushie/deer = 1,
|
||||
/obj/item/toy/plushie/tabby_cat = 1,
|
||||
/obj/item/device/threadneedle = 3,
|
||||
//VOREStation Add Start
|
||||
/obj/item/toy/plushie/lizardplushie/kobold = 1,
|
||||
/obj/item/toy/plushie/slimeplushie = 1,
|
||||
/obj/item/toy/plushie/box = 1,
|
||||
/obj/item/toy/plushie/borgplushie = 1,
|
||||
/obj/item/toy/plushie/borgplushie/medihound = 1,
|
||||
/obj/item/toy/plushie/borgplushie/scrubpuppy = 1,
|
||||
/obj/item/toy/plushie/foxbear = 1,
|
||||
/obj/item/toy/plushie/nukeplushie = 1,
|
||||
/obj/item/toy/plushie/otter = 1)
|
||||
//VOREStation Add End
|
||||
premium = list(/obj/item/weapon/reagent_containers/food/drinks/bottle/champagne = 1,
|
||||
/obj/item/weapon/storage/trinketbox = 2)
|
||||
prices = list(/obj/item/weapon/storage/fancy/heartbox = 15,
|
||||
/obj/item/toy/bouquet = 10,
|
||||
/obj/item/toy/bouquet/fake = 3,
|
||||
/obj/item/weapon/paper/card/smile = 1,
|
||||
/obj/item/weapon/paper/card/heart = 1,
|
||||
/obj/item/weapon/paper/card/cat = 1,
|
||||
/obj/item/weapon/paper/card/flower = 1,
|
||||
/obj/item/clothing/accessory/bracelet/friendship = 5,
|
||||
/obj/item/toy/plushie/therapy/red = 20,
|
||||
/obj/item/toy/plushie/therapy/purple = 20,
|
||||
/obj/item/toy/plushie/therapy/blue = 20,
|
||||
/obj/item/toy/plushie/therapy/yellow = 20,
|
||||
/obj/item/toy/plushie/therapy/orange = 20,
|
||||
/obj/item/toy/plushie/therapy/green = 20,
|
||||
/obj/item/toy/plushie/nymph = 35,
|
||||
/obj/item/toy/plushie/mouse = 35,
|
||||
/obj/item/toy/plushie/kitten = 35,
|
||||
/obj/item/toy/plushie/lizard = 35,
|
||||
/obj/item/toy/plushie/spider = 35,
|
||||
/obj/item/toy/plushie/farwa = 35,
|
||||
/obj/item/toy/plushie/corgi = 50,
|
||||
/obj/item/toy/plushie/octopus = 50,
|
||||
/obj/item/toy/plushie/face_hugger = 50,
|
||||
/obj/item/toy/plushie/carp = 50,
|
||||
/obj/item/toy/plushie/deer = 50,
|
||||
/obj/item/toy/plushie/tabby_cat = 50,
|
||||
/obj/item/device/threadneedle = 2,
|
||||
//VOREStation Add Start
|
||||
/obj/item/toy/plushie/lizardplushie/kobold = 50,
|
||||
/obj/item/toy/plushie/slimeplushie = 50,
|
||||
/obj/item/toy/plushie/box = 50,
|
||||
/obj/item/toy/plushie/borgplushie = 50,
|
||||
/obj/item/toy/plushie/borgplushie/medihound = 50,
|
||||
/obj/item/toy/plushie/borgplushie/scrubpuppy = 50,
|
||||
/obj/item/toy/plushie/foxbear = 50,
|
||||
/obj/item/toy/plushie/nukeplushie = 50,
|
||||
/obj/item/toy/plushie/otter = 50)
|
||||
//VOREStation Add End
|
||||
|
||||
|
||||
/obj/machinery/vending/fishing
|
||||
name = "Loot Trawler"
|
||||
desc = "A special vendor for fishing equipment."
|
||||
product_ads = "Tired of trawling across the ocean floor? Get our loot!;Chum and rods.;Don't get baited into fishing without us!;Baby is your star-sign pisces? We'd make a perfect match.;Do not fear, plenty to catch around here.;Don't get reeled in helplessly, get your own rod today!"
|
||||
icon_state = "fishvendor"
|
||||
products = list(/obj/item/weapon/material/fishing_rod/modern/cheap = 6,
|
||||
/obj/item/weapon/storage/box/wormcan = 4,
|
||||
/obj/item/weapon/storage/box/wormcan/sickly = 10,
|
||||
/obj/item/weapon/material/fishing_net = 2,
|
||||
/obj/item/stack/cable_coil/random = 6)
|
||||
prices = list(/obj/item/weapon/material/fishing_rod/modern/cheap = 50,
|
||||
/obj/item/weapon/storage/box/wormcan = 12,
|
||||
/obj/item/weapon/storage/box/wormcan/sickly = 6,
|
||||
/obj/item/weapon/material/fishing_net = 40,
|
||||
/obj/item/stack/cable_coil/random = 4)
|
||||
premium = list(/obj/item/weapon/storage/box/wormcan/deluxe = 1)
|
||||
contraband = list(/obj/item/weapon/storage/box/wormcan/deluxe = 1)
|
||||
@@ -6,22 +6,25 @@
|
||||
step_in = 4
|
||||
dir_in = 1 //Facing North.
|
||||
health = 400
|
||||
maxhealth = 400
|
||||
maxhealth = 400 //Don't forget to update the /old variant if you change this number.
|
||||
deflect_chance = 20
|
||||
damage_absorption = list("brute"=0.5,"fire"=1.1,"bullet"=0.65,"laser"=0.85,"energy"=0.9,"bomb"=0.8)
|
||||
max_temperature = 30000
|
||||
infra_luminosity = 8
|
||||
force = 40
|
||||
var/defence = 0
|
||||
var/defence_deflect = 35
|
||||
wreckage = /obj/effect/decal/mecha_wreckage/durand
|
||||
|
||||
damage_minimum = 15 //Big stompy
|
||||
minimum_penetration = 25
|
||||
|
||||
max_hull_equip = 2
|
||||
max_weapon_equip = 1
|
||||
max_utility_equip = 2
|
||||
max_universal_equip = 1
|
||||
max_special_equip = 1
|
||||
|
||||
defence_mode_possible = 1
|
||||
|
||||
/*
|
||||
/obj/mecha/combat/durand/New()
|
||||
..()
|
||||
@@ -31,40 +34,9 @@
|
||||
return
|
||||
*/
|
||||
|
||||
/obj/mecha/combat/durand/relaymove(mob/user,direction)
|
||||
if(defence)
|
||||
if(world.time - last_message > 20)
|
||||
src.occupant_message("<font color='red'>Unable to move while in defence mode</font>")
|
||||
last_message = world.time
|
||||
return 0
|
||||
. = ..()
|
||||
return
|
||||
|
||||
|
||||
/obj/mecha/combat/durand/verb/defence_mode()
|
||||
set category = "Exosuit Interface"
|
||||
set name = "Toggle defence mode"
|
||||
set src = usr.loc
|
||||
set popup_menu = 0
|
||||
if(usr!=src.occupant)
|
||||
return
|
||||
playsound(src, 'sound/mecha/duranddefencemode.ogg', 50, 1)
|
||||
defence = !defence
|
||||
if(defence)
|
||||
deflect_chance = defence_deflect
|
||||
src.occupant_message("<font color='blue'>You enable [src] defence mode.</font>")
|
||||
else
|
||||
deflect_chance = initial(deflect_chance)
|
||||
src.occupant_message("<font color='red'>You disable [src] defence mode.</font>")
|
||||
src.log_message("Toggled defence mode.")
|
||||
return
|
||||
|
||||
|
||||
/obj/mecha/combat/durand/get_stats_part()
|
||||
var/output = ..()
|
||||
output += "<b>Defence mode: [defence?"on":"off"]</b>"
|
||||
return output
|
||||
|
||||
//This is for the Mech stats / Menu system. To be moved later on.
|
||||
/obj/mecha/combat/durand/get_commands()
|
||||
var/output = {"<div class='wr'>
|
||||
<div class='header'>Special</div>
|
||||
@@ -76,8 +48,30 @@
|
||||
output += ..()
|
||||
return output
|
||||
|
||||
|
||||
//Not needed anymore but left for reference.
|
||||
/*
|
||||
/obj/mecha/combat/durand/get_stats_part()
|
||||
var/output = ..()
|
||||
output += "<b>Defence mode: [defence?"on":"off"]</b>"
|
||||
return output
|
||||
*/
|
||||
|
||||
/*
|
||||
|
||||
/obj/mecha/combat/durand/Topic(href, href_list)
|
||||
..()
|
||||
if (href_list["toggle_defence_mode"])
|
||||
src.defence_mode()
|
||||
return
|
||||
*/
|
||||
|
||||
//Meant for random spawns.
|
||||
/obj/mecha/combat/durand/old
|
||||
desc = "An aging combat exosuit utilized by many corporations. Originally developed to combat hostile alien lifeforms. This one is particularly worn looking and likely isn't as sturdy."
|
||||
|
||||
/obj/mecha/combat/durand/old/New()
|
||||
..()
|
||||
health = 25
|
||||
maxhealth = 350 //Just slightly worse.
|
||||
cell.charge = rand(0, (cell.charge/2))
|
||||
@@ -1,52 +1,3 @@
|
||||
/*
|
||||
All of the weapons and projectiles that go with this mech are deliberately kept here in gorilla.dm because
|
||||
they are never intended for use by any other mech. Ever. This shit is more overpowered than a clown with a
|
||||
HONK Blaster and a pulse cannon protected by projectile armor and powered by a bananium infinite power cell.
|
||||
*/
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/cannon
|
||||
name = "8.8cm KwK 47"
|
||||
desc = "Do to enemy mechs what the King Tiger did to Allied tanks with 88 milimeters of armor-piercing German steel!"
|
||||
icon_state = "mecha_grenadelnchr"
|
||||
equip_cooldown = 55 // 5.5 seconds
|
||||
projectile = /obj/item/projectile/bullet/cannon
|
||||
fire_sound = 'sound/weapons/Gunshot_cannon.ogg'
|
||||
projectiles = 1
|
||||
projectile_energy_cost = 1000
|
||||
salvageable = 0 // We don't want players ripping this off a dead mech.
|
||||
|
||||
/obj/item/projectile/bullet/cannon
|
||||
name ="armor-piercing shell"
|
||||
icon = 'icons/obj/grenade_yw.dmi'
|
||||
icon_state = "shell"
|
||||
damage = 1000 // In order to 1-hit any other mech and royally fuck anyone unfortunate enough to get in the way.
|
||||
|
||||
on_hit(var/atom/target, var/blocked = 0)
|
||||
explosion(target, 0, 0, 2, 4)
|
||||
return 1
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/mg42
|
||||
name = "Maschinengewehr 60"
|
||||
icon_state = "mecha_scatter" // placeholder
|
||||
equip_cooldown = 10
|
||||
projectile = /obj/item/projectile/bullet/rifle/a762
|
||||
fire_sound = 'sound/weapons/mg42.ogg'
|
||||
projectiles = 1000
|
||||
projectiles_per_shot = 3
|
||||
deviation = 0.3
|
||||
projectile_energy_cost = 20
|
||||
fire_cooldown = 1
|
||||
salvageable = 0 // We don't want players ripping this off a dead mech.
|
||||
|
||||
|
||||
/obj/effect/decal/mecha_wreckage/gorilla
|
||||
name = "Gorilla wreckage"
|
||||
desc = "... Blitzkrieg?"
|
||||
icon = 'icons/mecha/AxisMech.dmi'
|
||||
icon_state = "pzrwreck"
|
||||
plane = MOB_PLANE
|
||||
pixel_x = -16
|
||||
anchored = 1 // It's fucking huge. You aren't moving it.
|
||||
|
||||
/obj/mecha/combat/gorilla
|
||||
desc = "<b><font color='red'>BLITZKRIEEEEEEEG!</font></b>"
|
||||
@@ -63,12 +14,6 @@ HONK Blaster and a pulse cannon protected by projectile armor and powered by a b
|
||||
damage_absorption = list("brute"=0.1,"fire"=0.7,"bullet"=0.1,"laser"=0.6,"energy"=0.7,"bomb"=0.7) //values show how much damage will pass through, not how much will be absorbed.
|
||||
max_temperature = 25000
|
||||
infra_luminosity = 3
|
||||
add_req_access = 0
|
||||
var/zoom = 0
|
||||
var/smoke = 5
|
||||
var/smoke_ready = 1
|
||||
var/smoke_cooldown = 100
|
||||
var/datum/effect/effect/system/smoke_spread/smoke_system = new
|
||||
wreckage = /obj/effect/decal/mecha_wreckage/gorilla
|
||||
add_req_access = 0
|
||||
internal_damage_threshold = 25
|
||||
@@ -81,6 +26,10 @@ HONK Blaster and a pulse cannon protected by projectile armor and powered by a b
|
||||
max_universal_equip = 5
|
||||
max_special_equip = 2
|
||||
|
||||
smoke_possible = 1
|
||||
zoom_possible = 1
|
||||
thrusters_possible = 1
|
||||
|
||||
/obj/mecha/combat/gorilla/Initialize()
|
||||
..()
|
||||
var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay(src) // This thing basically cannot function without an external power supply.
|
||||
@@ -91,8 +40,6 @@ HONK Blaster and a pulse cannon protected by projectile armor and powered by a b
|
||||
ME.attach(src)
|
||||
ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg(src)
|
||||
ME.attach(src)
|
||||
src.smoke_system.set_up(3, 0, src)
|
||||
src.smoke_system.attach(src)
|
||||
return
|
||||
|
||||
/obj/mecha/combat/gorilla/mechstep(direction)
|
||||
@@ -164,51 +111,10 @@ HONK Blaster and a pulse cannon protected by projectile armor and powered by a b
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/obj/mecha/combat/gorilla/verb/smoke()
|
||||
set category = "Exosuit Interface"
|
||||
set name = "Smoke"
|
||||
set src = usr.loc
|
||||
set popup_menu = 0
|
||||
if(usr!=src.occupant)
|
||||
return
|
||||
if(smoke_ready && smoke>0)
|
||||
src.smoke_system.start()
|
||||
smoke--
|
||||
smoke_ready = 0
|
||||
spawn(smoke_cooldown)
|
||||
smoke_ready = 1
|
||||
return
|
||||
|
||||
/obj/mecha/combat/gorilla/verb/zoom()
|
||||
set category = "Exosuit Interface"
|
||||
set name = "Zoom"
|
||||
set src = usr.loc
|
||||
set popup_menu = 0
|
||||
if(usr!=src.occupant)
|
||||
return
|
||||
if(src.occupant.client)
|
||||
src.zoom = !src.zoom
|
||||
src.log_message("Toggled zoom mode.")
|
||||
src.occupant_message("<font color='[src.zoom?"blue":"red"]'>Zoom mode [zoom?"en":"dis"]abled.</font>")
|
||||
if(zoom)
|
||||
src.occupant.set_viewsize(12)
|
||||
playsound(src, 'sound/mecha/imag_enh.ogg',50)
|
||||
else
|
||||
src.occupant.set_viewsize() // Reset to default
|
||||
return
|
||||
|
||||
|
||||
/obj/mecha/combat/gorilla/go_out()
|
||||
if(src.occupant && src.occupant.client)
|
||||
src.occupant.client.view = world.view
|
||||
src.zoom = 0
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
/obj/mecha/combat/gorilla/get_stats_part()
|
||||
var/output = ..()
|
||||
output += {"<b>Smoke:</b> [smoke]"}
|
||||
output += {"<b>Smoke:</b> [smoke_reserve]"}
|
||||
return output
|
||||
|
||||
|
||||
@@ -224,10 +130,58 @@ HONK Blaster and a pulse cannon protected by projectile armor and powered by a b
|
||||
output += ..()
|
||||
return output
|
||||
|
||||
/obj/mecha/combat/gorilla/Topic(href, href_list)
|
||||
..()
|
||||
if (href_list["smoke"])
|
||||
src.smoke()
|
||||
if (href_list["toggle_zoom"])
|
||||
src.zoom()
|
||||
return
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/cannon
|
||||
name = "8.8cm KwK 47"
|
||||
desc = "<i>Precision German engineering!</i>" // Why would you ever take this off the mech, anyway?
|
||||
icon_state = "mecha_uac2"
|
||||
equip_cooldown = 60 // 6 seconds
|
||||
projectile = /obj/item/projectile/bullet/cannon
|
||||
fire_sound = 'sound/weapons/Gunshot_cannon.ogg'
|
||||
projectiles = 1
|
||||
projectile_energy_cost = 1000
|
||||
salvageable = 0 // We don't want players ripping this off a dead mech. Could potentially be a prize for beating it if Devs bless me and someone offers a nerf idea.
|
||||
|
||||
/obj/item/projectile/bullet/cannon
|
||||
name ="armor-piercing shell"
|
||||
icon = 'icons/obj/projectiles.dmi'
|
||||
icon_state = "shell"
|
||||
damage = 1000 // In order to 1-hit any other mech and royally fuck anyone unfortunate enough to get in the way.
|
||||
|
||||
/obj/item/projectile/bullet/cannon/on_hit(var/atom/target, var/blocked = 0)
|
||||
explosion(target, 0, 0, 2, 4)
|
||||
return 1
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/cannon/weak
|
||||
name = "8.8 cm KwK 36"
|
||||
equip_cooldown = 120 // 12 seconds.
|
||||
projectile = /obj/item/projectile/bullet/cannon/weak
|
||||
projectile_energy_cost = 400
|
||||
salvageable = 1
|
||||
|
||||
/obj/item/projectile/bullet/cannon/weak
|
||||
name ="canister shell"
|
||||
icon_state = "canister"
|
||||
damage = 120 //Do not get fucking shot.
|
||||
|
||||
// GLITCHY UND LAGGY. Will later look into fixing.
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/mg42
|
||||
name = "Maschinengewehr 60"
|
||||
icon_state = "mecha_uac2"
|
||||
equip_cooldown = 10
|
||||
projectile = /obj/item/projectile/bullet/midbullet2
|
||||
fire_sound = 'sound/weapons/mg42.ogg'
|
||||
projectiles = 1000
|
||||
projectiles_per_shot = 5
|
||||
deviation = 0.3
|
||||
projectile_energy_cost = 20
|
||||
fire_cooldown = 1
|
||||
salvageable = 0 // We don't want players ripping this off a dead mech.
|
||||
|
||||
/obj/effect/decal/mecha_wreckage/gorilla
|
||||
name = "Gorilla wreckage"
|
||||
desc = "... Blitzkrieg?"
|
||||
icon = 'icons/mecha/mecha64x64.dmi'
|
||||
icon_state = "pzrwreck"
|
||||
plane = MOB_PLANE
|
||||
pixel_x = -16
|
||||
anchored = 1 // It's fucking huge. You aren't moving it.
|
||||
|
||||
@@ -6,13 +6,11 @@
|
||||
step_in = 3
|
||||
dir_in = 1 //Facing North.
|
||||
health = 300
|
||||
maxhealth = 300
|
||||
maxhealth = 300 //Don't forget to update the /old variant if you change this number.
|
||||
deflect_chance = 15
|
||||
damage_absorption = list("brute"=0.75,"fire"=1,"bullet"=0.8,"laser"=0.7,"energy"=0.85,"bomb"=1)
|
||||
max_temperature = 25000
|
||||
infra_luminosity = 6
|
||||
var/overload = 0
|
||||
var/overload_coeff = 2
|
||||
wreckage = /obj/effect/decal/mecha_wreckage/gygax
|
||||
internal_damage_threshold = 35
|
||||
max_equip = 3
|
||||
@@ -23,6 +21,21 @@
|
||||
max_universal_equip = 1
|
||||
max_special_equip = 1
|
||||
|
||||
overload_possible = 1
|
||||
|
||||
//Not quite sure how to move those yet.
|
||||
/obj/mecha/combat/gygax/get_commands()
|
||||
var/output = {"<div class='wr'>
|
||||
<div class='header'>Special</div>
|
||||
<div class='links'>
|
||||
<a href='?src=\ref[src];toggle_leg_overload=1'>Toggle leg actuators overload</a>
|
||||
</div>
|
||||
</div>
|
||||
"}
|
||||
output += ..()
|
||||
return output
|
||||
|
||||
|
||||
/obj/mecha/combat/gygax/dark
|
||||
desc = "A lightweight exosuit used by Heavy Asset Protection. A significantly upgraded Gygax security mech."
|
||||
name = "Dark Gygax"
|
||||
@@ -66,62 +79,6 @@
|
||||
cell.charge = 30000
|
||||
cell.maxcharge = 30000
|
||||
|
||||
|
||||
/obj/mecha/combat/gygax/verb/overload()
|
||||
set category = "Exosuit Interface"
|
||||
set name = "Toggle leg actuators overload"
|
||||
set src = usr.loc
|
||||
set popup_menu = 0
|
||||
if(usr!=src.occupant)
|
||||
return
|
||||
if(overload)
|
||||
overload = 0
|
||||
step_in = initial(step_in)
|
||||
step_energy_drain = initial(step_energy_drain)
|
||||
src.occupant_message("<font color='blue'>You disable leg actuators overload.</font>")
|
||||
else
|
||||
overload = 1
|
||||
step_in = min(1, round(step_in/2))
|
||||
step_energy_drain = step_energy_drain*overload_coeff
|
||||
src.occupant_message("<font color='red'>You enable leg actuators overload.</font>")
|
||||
src.log_message("Toggled leg actuators overload.")
|
||||
playsound(src, 'sound/mecha/mechanical_toggle.ogg', 50, 1)
|
||||
return
|
||||
|
||||
/obj/mecha/combat/gygax/dyndomove(direction)
|
||||
if(!..()) return
|
||||
if(overload)
|
||||
health--
|
||||
if(health < initial(health) - initial(health)/3)
|
||||
overload = 0
|
||||
step_in = initial(step_in)
|
||||
step_energy_drain = initial(step_energy_drain)
|
||||
src.occupant_message("<font color='red'>Leg actuators damage threshold exceded. Disabling overload.</font>")
|
||||
return
|
||||
|
||||
|
||||
/obj/mecha/combat/gygax/get_stats_part()
|
||||
var/output = ..()
|
||||
output += "<b>Leg actuators overload: [overload?"on":"off"]</b>"
|
||||
return output
|
||||
|
||||
/obj/mecha/combat/gygax/get_commands()
|
||||
var/output = {"<div class='wr'>
|
||||
<div class='header'>Special</div>
|
||||
<div class='links'>
|
||||
<a href='?src=\ref[src];toggle_leg_overload=1'>Toggle leg actuators overload</a>
|
||||
</div>
|
||||
</div>
|
||||
"}
|
||||
output += ..()
|
||||
return output
|
||||
|
||||
/obj/mecha/combat/gygax/Topic(href, href_list)
|
||||
..()
|
||||
if (href_list["toggle_leg_overload"])
|
||||
src.overload()
|
||||
return
|
||||
|
||||
/obj/mecha/combat/gygax/serenity
|
||||
desc = "A lightweight exosuit made from a modified Gygax chassis combined with proprietary VeyMed medical tech. It's faster and sturdier than most medical mechs, but much of the armor plating has been stripped out, leaving it more vulnerable than a regular Gygax."
|
||||
name = "Serenity"
|
||||
@@ -170,3 +127,13 @@
|
||||
H.recalculate_vis()
|
||||
..()
|
||||
return
|
||||
|
||||
//Meant for random spawns.
|
||||
/obj/mecha/combat/gygax/old
|
||||
desc = "A lightweight, security exosuit. Popular among private and corporate security. This one is particularly worn looking and likely isn't as sturdy."
|
||||
|
||||
/obj/mecha/combat/gygax/old/New()
|
||||
..()
|
||||
health = 25
|
||||
maxhealth = 250 //Just slightly worse.
|
||||
cell.charge = rand(0, (cell.charge/2))
|
||||
@@ -6,17 +6,11 @@
|
||||
initial_icon = "marauder"
|
||||
step_in = 5
|
||||
health = 500
|
||||
maxhealth = 500
|
||||
maxhealth = 500 //Don't forget to update the /old variant if you change this number.
|
||||
deflect_chance = 25
|
||||
damage_absorption = list("brute"=0.5,"fire"=0.7,"bullet"=0.45,"laser"=0.6,"energy"=0.7,"bomb"=0.7)
|
||||
max_temperature = 60000
|
||||
infra_luminosity = 3
|
||||
var/zoom = 0
|
||||
var/thrusters = 0
|
||||
var/smoke = 5
|
||||
var/smoke_ready = 1
|
||||
var/smoke_cooldown = 100
|
||||
var/datum/effect/effect/system/smoke_spread/smoke_system = new
|
||||
operation_req_access = list(access_cent_specops)
|
||||
wreckage = /obj/effect/decal/mecha_wreckage/marauder
|
||||
add_req_access = 0
|
||||
@@ -31,6 +25,10 @@
|
||||
max_universal_equip = 1
|
||||
max_special_equip = 1
|
||||
|
||||
smoke_possible = 1
|
||||
zoom_possible = 1
|
||||
thrusters_possible = 1
|
||||
|
||||
/obj/mecha/combat/marauder/seraph
|
||||
desc = "Heavy-duty, command-type exosuit. This is a custom model, utilized only by high-ranking military personnel."
|
||||
name = "Seraph"
|
||||
@@ -45,7 +43,7 @@
|
||||
force = 55
|
||||
max_equip = 5
|
||||
|
||||
|
||||
//Note that is the Mauler
|
||||
/obj/mecha/combat/marauder/mauler
|
||||
desc = "Heavy-duty, combat exosuit, developed off of the existing Marauder model."
|
||||
name = "Mauler"
|
||||
@@ -55,6 +53,7 @@
|
||||
wreckage = /obj/effect/decal/mecha_wreckage/mauler
|
||||
mech_faction = MECH_FACTION_SYNDI
|
||||
|
||||
//Note that is the default Marauder
|
||||
/obj/mecha/combat/marauder/Initialize()
|
||||
..()
|
||||
var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/energy/pulse
|
||||
@@ -65,10 +64,9 @@
|
||||
ME.attach(src)
|
||||
ME = new /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster(src)
|
||||
ME.attach(src)
|
||||
src.smoke_system.set_up(3, 0, src)
|
||||
src.smoke_system.attach(src)
|
||||
return
|
||||
|
||||
//Note that this is the seraph.
|
||||
/obj/mecha/combat/marauder/seraph/Initialize()
|
||||
..()//Let it equip whatever is needed.
|
||||
var/obj/item/mecha_parts/mecha_equipment/ME
|
||||
@@ -88,10 +86,8 @@
|
||||
ME.attach(src)
|
||||
return
|
||||
|
||||
/obj/mecha/combat/marauder/Destroy()
|
||||
qdel(smoke_system)
|
||||
..()
|
||||
|
||||
//I'll break this down later
|
||||
/obj/mecha/combat/marauder/relaymove(mob/user,direction)
|
||||
if(user != src.occupant) //While not "realistic", this piece is player friendly.
|
||||
user.loc = get_turf(src)
|
||||
@@ -136,74 +132,7 @@
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
/obj/mecha/combat/marauder/verb/toggle_thrusters()
|
||||
set category = "Exosuit Interface"
|
||||
set name = "Toggle thrusters"
|
||||
set src = usr.loc
|
||||
set popup_menu = 0
|
||||
if(usr!=src.occupant)
|
||||
return
|
||||
if(src.occupant)
|
||||
if(get_charge() > 0)
|
||||
thrusters = !thrusters
|
||||
src.log_message("Toggled thrusters.")
|
||||
src.occupant_message("<font color='[src.thrusters?"blue":"red"]'>Thrusters [thrusters?"en":"dis"]abled.</font>")
|
||||
return
|
||||
|
||||
|
||||
/obj/mecha/combat/marauder/verb/smoke()
|
||||
set category = "Exosuit Interface"
|
||||
set name = "Smoke"
|
||||
set src = usr.loc
|
||||
set popup_menu = 0
|
||||
if(usr!=src.occupant)
|
||||
return
|
||||
if(smoke_ready && smoke>0)
|
||||
src.smoke_system.start()
|
||||
smoke--
|
||||
smoke_ready = 0
|
||||
spawn(smoke_cooldown)
|
||||
smoke_ready = 1
|
||||
return
|
||||
|
||||
//TODO replace this with zoom code that doesn't increase peripherial vision
|
||||
/obj/mecha/combat/marauder/verb/zoom()
|
||||
set category = "Exosuit Interface"
|
||||
set name = "Zoom"
|
||||
set src = usr.loc
|
||||
set popup_menu = 0
|
||||
if(usr!=src.occupant)
|
||||
return
|
||||
if(src.occupant.client)
|
||||
src.zoom = !src.zoom
|
||||
src.log_message("Toggled zoom mode.")
|
||||
src.occupant_message("<font color='[src.zoom?"blue":"red"]'>Zoom mode [zoom?"en":"dis"]abled.</font>")
|
||||
if(zoom)
|
||||
src.occupant.set_viewsize(12)
|
||||
src.occupant << sound('sound/mecha/imag_enh.ogg',volume=50)
|
||||
else
|
||||
src.occupant.set_viewsize() // Reset to default
|
||||
return
|
||||
|
||||
|
||||
/obj/mecha/combat/marauder/go_out()
|
||||
if(src.occupant && src.occupant.client)
|
||||
src.occupant.client.view = world.view
|
||||
src.zoom = 0
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
/obj/mecha/combat/marauder/get_stats_part()
|
||||
var/output = ..()
|
||||
output += {"<b>Smoke:</b> [smoke]
|
||||
<br>
|
||||
<b>Thrusters:</b> [thrusters?"on":"off"]
|
||||
"}
|
||||
return output
|
||||
|
||||
|
||||
//To be kill ltr
|
||||
/obj/mecha/combat/marauder/get_commands()
|
||||
var/output = {"<div class='wr'>
|
||||
<div class='header'>Special</div>
|
||||
@@ -217,12 +146,21 @@
|
||||
output += ..()
|
||||
return output
|
||||
|
||||
/obj/mecha/combat/marauder/Topic(href, href_list)
|
||||
//Meant for random spawns.
|
||||
/obj/mecha/combat/marauder/old
|
||||
desc = "Heavy-duty, combat exosuit, developed after the Durand model. Rarely found among civilian populations. This one is particularly worn looking and likely isn't as sturdy."
|
||||
|
||||
/obj/mecha/combat/marauder/old/New()
|
||||
..()
|
||||
if (href_list["toggle_thrusters"])
|
||||
src.toggle_thrusters()
|
||||
if (href_list["smoke"])
|
||||
src.smoke()
|
||||
if (href_list["toggle_zoom"])
|
||||
src.zoom()
|
||||
health = 25
|
||||
maxhealth = 400 //Just slightly worse.
|
||||
cell.charge = rand(0, (cell.charge/2))
|
||||
|
||||
/obj/mecha/combat/marauder/old/Initialize()
|
||||
..()
|
||||
var/obj/item/mecha_parts/mecha_equipment/ME
|
||||
if(equipment.len)
|
||||
for(ME in equipment)
|
||||
ME.detach()
|
||||
qdel(ME)
|
||||
return
|
||||
@@ -6,8 +6,8 @@
|
||||
step_in = 1
|
||||
dir_in = 1 //Facing North.
|
||||
step_energy_drain = 3
|
||||
health = 200
|
||||
maxhealth = 200
|
||||
health = 200 //God this is low
|
||||
maxhealth = 200 //Don't forget to update the /old variant if you change this number.
|
||||
deflect_chance = 30
|
||||
damage_absorption = list("brute"=0.7,"fire"=0.7,"bullet"=0.7,"laser"=0.7,"energy"=0.7,"bomb"=0.7)
|
||||
max_temperature = 25000
|
||||
@@ -17,9 +17,6 @@
|
||||
//operation_req_access = list()
|
||||
internal_damage_threshold = 25
|
||||
force = 15
|
||||
var/phasing = 0
|
||||
var/can_phase = TRUE
|
||||
var/phasing_energy_drain = 200
|
||||
max_equip = 4
|
||||
|
||||
max_hull_equip = 3
|
||||
@@ -28,6 +25,9 @@
|
||||
max_universal_equip = 3
|
||||
max_special_equip = 4
|
||||
|
||||
phasing_possible = 1
|
||||
switch_dmg_type_possible = 1
|
||||
|
||||
/obj/mecha/combat/phazon/equipped/Initialize()
|
||||
..()
|
||||
var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/tool/rcd
|
||||
@@ -36,6 +36,7 @@
|
||||
ME.attach(src)
|
||||
return
|
||||
|
||||
/* Leaving this until we are really sure we don't need it for reference.
|
||||
/obj/mecha/combat/phazon/Bump(var/atom/obstacle)
|
||||
if(phasing && get_charge()>=phasing_energy_drain)
|
||||
spawn()
|
||||
@@ -49,35 +50,8 @@
|
||||
else
|
||||
. = ..()
|
||||
return
|
||||
*/
|
||||
|
||||
/obj/mecha/combat/phazon/click_action(atom/target,mob/user)
|
||||
if(phasing)
|
||||
src.occupant_message("Unable to interact with objects while phasing")
|
||||
return
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/mecha/combat/phazon/verb/switch_damtype()
|
||||
set category = "Exosuit Interface"
|
||||
set name = "Change melee damage type"
|
||||
set src = usr.loc
|
||||
set popup_menu = 0
|
||||
if(usr!=src.occupant)
|
||||
return
|
||||
|
||||
query_damtype()
|
||||
|
||||
/obj/mecha/combat/phazon/proc/query_damtype()
|
||||
var/new_damtype = alert(src.occupant,"Melee Damage Type",null,"Brute","Fire","Toxic")
|
||||
switch(new_damtype)
|
||||
if("Brute")
|
||||
damtype = "brute"
|
||||
if("Fire")
|
||||
damtype = "fire"
|
||||
if("Toxic")
|
||||
damtype = "tox"
|
||||
src.occupant_message("Melee damage type switched to [new_damtype ]")
|
||||
return
|
||||
|
||||
/obj/mecha/combat/phazon/get_commands()
|
||||
var/output = {"<div class='wr'>
|
||||
@@ -91,15 +65,7 @@
|
||||
output += ..()
|
||||
return output
|
||||
|
||||
/obj/mecha/combat/phazon/Topic(href, href_list)
|
||||
..()
|
||||
if (href_list["switch_damtype"])
|
||||
src.switch_damtype()
|
||||
if (href_list["phasing"])
|
||||
phasing = !phasing
|
||||
send_byjax(src.occupant,"exosuit.browser","phasing_command","[phasing?"Dis":"En"]able phasing")
|
||||
src.occupant_message("<font color=\"[phasing?"#00f\">En":"#f00\">Dis"]abled phasing.</font>")
|
||||
return
|
||||
|
||||
|
||||
/obj/mecha/combat/phazon/janus
|
||||
name = "Phazon Prototype Janus Class"
|
||||
@@ -121,7 +87,6 @@
|
||||
wreckage = /obj/effect/decal/mecha_wreckage/janus
|
||||
internal_damage_threshold = 25
|
||||
force = 20
|
||||
phasing = FALSE
|
||||
phasing_energy_drain = 300
|
||||
|
||||
max_hull_equip = 2
|
||||
@@ -130,6 +95,9 @@
|
||||
max_universal_equip = 2
|
||||
max_special_equip = 2
|
||||
|
||||
phasing_possible = 1
|
||||
switch_dmg_type_possible = 1
|
||||
|
||||
/obj/mecha/combat/phazon/janus/take_damage(amount, type="brute")
|
||||
..()
|
||||
if(phasing)
|
||||
@@ -173,3 +141,13 @@
|
||||
damtype = "halloss"
|
||||
src.occupant_message("Melee damage type switched to [new_damtype]")
|
||||
return
|
||||
|
||||
//Meant for random spawns.
|
||||
/obj/mecha/combat/phazon/old
|
||||
desc = "An exosuit which can only be described as 'WTF?'. This one is particularly worn looking and likely isn't as sturdy."
|
||||
|
||||
/obj/mecha/combat/phazon/old/New()
|
||||
..()
|
||||
health = 25
|
||||
maxhealth = 150 //Just slightly worse.
|
||||
cell.charge = rand(0, (cell.charge/2))
|
||||
@@ -10,9 +10,9 @@
|
||||
/obj/item/mecha_parts/mecha_equipment/speedboost/attach(obj/mecha/M as obj)
|
||||
..()
|
||||
if(enable_special)
|
||||
chassis.step_in = (chassis.step_in-2) // Make the ripley as fast as a durand
|
||||
chassis.step_in = 3 // As fast as a gygax without overload. Slower than Ody.
|
||||
else
|
||||
chassis.step_in = (chassis.step_in+1) // Improper parts slow the mech down
|
||||
chassis.step_in = 6 // Improper parts slow the mech down
|
||||
return
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/speedboost/detach()
|
||||
|
||||
@@ -26,13 +26,27 @@
|
||||
var/can_move = 1
|
||||
var/mob/living/carbon/occupant = null
|
||||
var/step_in = 10 //make a step in step_in/10 sec.
|
||||
var/dir_in = 2//What direction will the mech face when entered/powered on? Defaults to South.
|
||||
var/dir_in = 2 //What direction will the mech face when entered/powered on? Defaults to South.
|
||||
var/step_energy_drain = 10
|
||||
var/health = 300 //health is health
|
||||
var/maxhealth = 300 //maxhealth is maxhealth.
|
||||
var/deflect_chance = 10 //chance to deflect the incoming projectiles, hits, or lesser the effect of ex_act.
|
||||
//the values in this list show how much damage will pass through, not how much will be absorbed.
|
||||
var/list/damage_absorption = list("brute"=0.8,"fire"=1.2,"bullet"=0.9,"laser"=1,"energy"=1,"bomb"=1)
|
||||
var/list/damage_absorption = list(
|
||||
"brute"=0.8,
|
||||
"fire"=1.2,
|
||||
"bullet"=0.9,
|
||||
"laser"=1,
|
||||
"energy"=1,
|
||||
"bomb"=1,
|
||||
"bio"=1,
|
||||
"rad"=1
|
||||
)
|
||||
|
||||
var/damage_minimum = 10 //Incoming damage lower than this won't actually deal damage. Scrapes shouldn't be a real thing.
|
||||
var/minimum_penetration = 20 //Incoming damage won't be fully applied if you don't have at least 20. Almost all AP clears this.
|
||||
var/fail_penetration_value = 0.66 //By how much failing to penetrate reduces your shit. 66% by default.
|
||||
|
||||
var/obj/item/weapon/cell/cell
|
||||
var/state = 0
|
||||
var/list/log = new
|
||||
@@ -76,10 +90,11 @@
|
||||
|
||||
var/wreckage
|
||||
|
||||
var/list/equipment = new
|
||||
var/list/equipment = new //This lists holds what stuff you bolted onto your baby ride
|
||||
var/obj/item/mecha_parts/mecha_equipment/selected
|
||||
var/max_equip = 2
|
||||
var/datum/events/events
|
||||
|
||||
//mechaequipt2 stuffs
|
||||
var/list/hull_equipment = new
|
||||
var/list/weapon_equipment = new
|
||||
@@ -91,6 +106,7 @@
|
||||
var/max_utility_equip = 2
|
||||
var/max_universal_equip = 2
|
||||
var/max_special_equip = 1
|
||||
|
||||
//Working exosuit vars
|
||||
var/list/cargo = list()
|
||||
var/cargo_capacity = 3
|
||||
@@ -100,7 +116,54 @@
|
||||
var/static/image/radial_image_lighttoggle = image(icon = 'icons/mob/radial.dmi', icon_state = "radial_light")
|
||||
var/static/image/radial_image_statpanel = image(icon = 'icons/mob/radial.dmi', icon_state = "radial_examine2")
|
||||
|
||||
var/datum/mini_hud/mech/minihud
|
||||
//Mech actions
|
||||
var/datum/mini_hud/mech/minihud //VOREStation Edit
|
||||
var/strafing = 0 //Are we strafing or not?
|
||||
|
||||
var/defence_mode_possible = 0 //Can we even use defence mode? This is used to assign it to mechs and check for verbs.
|
||||
var/defence_mode = 0 //Are we in defence mode
|
||||
var/defence_deflect = 35 //How much it deflect
|
||||
|
||||
var/overload_possible = 0 //Same as above. Don't forget to GRANT the verb&actions if you want everything to work proper.
|
||||
var/overload = 0 //Are our legs overloaded
|
||||
var/overload_coeff = 1 //How much extra energy you use when use the L E G
|
||||
|
||||
var/zoom = 0
|
||||
var/zoom_possible = 0
|
||||
|
||||
var/thrusters = 0
|
||||
var/thrusters_possible = 0
|
||||
|
||||
var/phasing = 0 //Are we currently phasing
|
||||
var/phasing_possible = 0 //This is to allow phasing.
|
||||
var/can_phase = TRUE //This is an internal check during the relevant procs.
|
||||
var/phasing_energy_drain = 200
|
||||
|
||||
var/switch_dmg_type_possible = 0 //Can you switch damage type? It is mostly for the Phazon and its children.
|
||||
|
||||
var/smoke_possible = 0
|
||||
var/smoke_reserve = 5 //How many shots you have. Might make a reload later on. MIGHT.
|
||||
var/smoke_ready = 1 //This is a check for the whether or not the cooldown is ongoing.
|
||||
var/smoke_cooldown = 100 //How long you have between uses.
|
||||
var/datum/effect/effect/system/smoke_spread/smoke_system = new
|
||||
|
||||
////All of those are for the HUD buttons in the top left. See Grant and Remove procs in mecha_actions.
|
||||
|
||||
var/datum/action/innate/mecha/mech_eject/eject_action = new
|
||||
var/datum/action/innate/mecha/mech_toggle_internals/internals_action = new
|
||||
var/datum/action/innate/mecha/mech_toggle_lights/lights_action = new
|
||||
var/datum/action/innate/mecha/mech_view_stats/stats_action = new
|
||||
var/datum/action/innate/mecha/strafe/strafing_action = new
|
||||
|
||||
var/datum/action/innate/mecha/mech_defence_mode/defence_action = new
|
||||
var/datum/action/innate/mecha/mech_overload_mode/overload_action = new
|
||||
var/datum/action/innate/mecha/mech_smoke/smoke_action = new
|
||||
var/datum/action/innate/mecha/mech_zoom/zoom_action = new
|
||||
var/datum/action/innate/mecha/mech_toggle_thrusters/thrusters_action = new
|
||||
var/datum/action/innate/mecha/mech_cycle_equip/cycle_action = new
|
||||
var/datum/action/innate/mecha/mech_switch_damtype/switch_damtype_action = new
|
||||
var/datum/action/innate/mecha/mech_toggle_phasing/phasing_action = new
|
||||
|
||||
|
||||
|
||||
/obj/mecha/drain_power(var/drain_check)
|
||||
@@ -123,8 +186,14 @@
|
||||
if(!add_airtank()) //we check this here in case mecha does not have an internal tank available by default - WIP
|
||||
removeVerb(/obj/mecha/verb/connect_to_port)
|
||||
removeVerb(/obj/mecha/verb/toggle_internal_tank)
|
||||
|
||||
spark_system.set_up(2, 0, src)
|
||||
spark_system.attach(src)
|
||||
|
||||
if(smoke_possible)//I am pretty sure that's needed here.
|
||||
src.smoke_system.set_up(3, 0, src)
|
||||
src.smoke_system.attach(src)
|
||||
|
||||
add_cell()
|
||||
add_iterators()
|
||||
removeVerb(/obj/mecha/verb/disconnect_from_port)
|
||||
@@ -192,6 +261,9 @@
|
||||
cell = null
|
||||
internal_tank = null
|
||||
|
||||
if(smoke_possible) //Just making sure nothing is running.
|
||||
qdel(smoke_system)
|
||||
|
||||
QDEL_NULL(pr_int_temp_processor)
|
||||
QDEL_NULL(pr_inertial_movement)
|
||||
QDEL_NULL(pr_give_air)
|
||||
@@ -283,11 +355,11 @@
|
||||
if(65 to 85)
|
||||
. += "It's slightly damaged."
|
||||
if(45 to 65)
|
||||
. += "It's badly damaged."
|
||||
. += "<span class='notice'>It's badly damaged.</span>"
|
||||
if(25 to 45)
|
||||
. += "It's heavily damaged."
|
||||
. += "<span class='warning'>It's heavily damaged.</span>"
|
||||
else
|
||||
. += "It's falling apart."
|
||||
. += "<span class='warning'><b> It's falling apart.</b> </span>"
|
||||
if(equipment?.len)
|
||||
. += "It's equipped with:"
|
||||
for(var/obj/item/mecha_parts/mecha_equipment/ME in equipment)
|
||||
@@ -319,6 +391,7 @@
|
||||
"Toggle Light" = radial_image_lighttoggle,
|
||||
"View Stats" = radial_image_statpanel
|
||||
)
|
||||
|
||||
var/choice = show_radial_menu(user, src, choices, custom_check = CALLBACK(src, .proc/check_occupant_radial, user), require_near = TRUE, tooltips = TRUE)
|
||||
if(!check_occupant_radial(user))
|
||||
return
|
||||
@@ -380,6 +453,11 @@
|
||||
if(state)
|
||||
occupant_message("<font color='red'>Maintenance protocols in effect</font>")
|
||||
return
|
||||
|
||||
if(phasing)//Phazon and other mechs with phasing.
|
||||
src.occupant_message("Unable to interact with objects while phasing")//Haha dumbass.
|
||||
return
|
||||
|
||||
if(!get_charge()) return
|
||||
if(src == target) return
|
||||
var/dir_to_target = get_dir(src,target)
|
||||
@@ -463,6 +541,13 @@
|
||||
if(state)
|
||||
occupant_message("<span class='warning'>Maintenance protocols in effect</span>")
|
||||
return
|
||||
/*
|
||||
if(zoom)
|
||||
if(world.time - last_message > 20)
|
||||
src.occupant_message("Unable to move while in zoom mode.")
|
||||
last_message = world.time
|
||||
return 0
|
||||
*/
|
||||
return domove(direction)
|
||||
|
||||
/obj/mecha/proc/can_ztravel()
|
||||
@@ -482,6 +567,32 @@
|
||||
if(!has_charge(step_energy_drain))
|
||||
return 0
|
||||
|
||||
//Can we even move, below is if yes.
|
||||
|
||||
if(defence_mode)//Check if we are currently locked down
|
||||
if(world.time - last_message > 20)
|
||||
src.occupant_message("<font color='red'>Unable to move while in defence mode</font>")
|
||||
last_message = world.time
|
||||
return 0
|
||||
|
||||
if(zoom)//:eyes:
|
||||
if(world.time - last_message > 20)
|
||||
src.occupant_message("Unable to move while in zoom mode.")
|
||||
last_message = world.time
|
||||
return 0
|
||||
|
||||
if(!thrusters && src.pr_inertial_movement.active()) //I think this mean 'if you try to move in space without thruster, u no move'
|
||||
return 0
|
||||
|
||||
if(overload)//Check if you have leg overload
|
||||
health--
|
||||
if(health < initial(health) - initial(health)/3)
|
||||
overload = 0
|
||||
step_in = initial(step_in)
|
||||
step_energy_drain = initial(step_energy_drain)
|
||||
src.occupant_message("<font color='red'>Leg actuators damage threshold exceded. Disabling overload.</font>")
|
||||
|
||||
|
||||
var/move_result = 0
|
||||
|
||||
if(hasInternalDamage(MECHA_INT_CONTROL_LOST))
|
||||
@@ -511,9 +622,16 @@
|
||||
break
|
||||
if(result)
|
||||
move_result = mechstep(direction)
|
||||
|
||||
//Turning
|
||||
|
||||
else if(src.dir != direction)
|
||||
|
||||
if(strafing)
|
||||
move_result = mechstep(direction)
|
||||
else
|
||||
move_result = mechturn(direction)
|
||||
|
||||
//Stepping
|
||||
else
|
||||
move_result = mechstep(direction)
|
||||
@@ -544,11 +662,14 @@
|
||||
return 1
|
||||
|
||||
/obj/mecha/proc/mechstep(direction)
|
||||
var/current_dir = dir //For strafing
|
||||
var/result = get_step(src,direction)
|
||||
if(result && Move(result))
|
||||
if(stomp_sound)
|
||||
playsound(src,stomp_sound,40,1)
|
||||
handle_equipment_movement()
|
||||
if(strafing) //Also for strafing
|
||||
set_dir(current_dir)
|
||||
return result
|
||||
|
||||
|
||||
@@ -562,21 +683,35 @@
|
||||
|
||||
/obj/mecha/Bump(var/atom/obstacle)
|
||||
// src.inertia_dir = null
|
||||
if(istype(obstacle, /obj))
|
||||
if(istype(obstacle, /mob))//First we check if it is a mob. Mechs mostly shouln't go through them, even while phasing.
|
||||
var/mob/M = obstacle
|
||||
M.Move(get_step(obstacle,src.dir))
|
||||
else if(istype(obstacle, /obj))//Then we check for regular obstacles.
|
||||
var/obj/O = obstacle
|
||||
|
||||
if(phasing && get_charge()>=phasing_energy_drain)//Phazon check. This could use an improvement elsewhere.
|
||||
spawn()
|
||||
if(can_phase)
|
||||
can_phase = FALSE
|
||||
flick("[initial_icon]-phase", src)
|
||||
src.loc = get_step(src,src.dir)
|
||||
src.use_power(phasing_energy_drain)
|
||||
sleep(step_in*3)
|
||||
can_phase = TRUE
|
||||
occupant_message("Phazed.")
|
||||
. = ..(obstacle)
|
||||
return
|
||||
if(istype(O, /obj/effect/portal)) //derpfix
|
||||
src.anchored = 0
|
||||
src.anchored = 0 //I have no idea what this really fix.
|
||||
O.Crossed(src)
|
||||
spawn(0)//countering portal teleport spawn(0), hurr
|
||||
src.anchored = 1
|
||||
else if(!O.anchored)
|
||||
step(obstacle,src.dir)
|
||||
else //I have no idea why I disabled this
|
||||
else if(O.anchored)
|
||||
obstacle.Bumped(src)
|
||||
else if(istype(obstacle, /mob))
|
||||
var/mob/M = obstacle
|
||||
M.Move(get_step(obstacle,src.dir))
|
||||
else
|
||||
step(obstacle,src.dir)
|
||||
|
||||
else//No idea when this triggers, so i won't touch it.
|
||||
. = ..(obstacle)
|
||||
return
|
||||
|
||||
@@ -701,6 +836,7 @@
|
||||
call((proc_res["dynhitby"]||src), "dynhitby")(A)
|
||||
return
|
||||
|
||||
//I think this is relative to throws.
|
||||
/obj/mecha/proc/dynhitby(atom/movable/A)
|
||||
if(istype(A, /obj/item/mecha_parts/mecha_tracking))
|
||||
A.forceMove(src)
|
||||
@@ -718,9 +854,27 @@
|
||||
if(O.throwforce)
|
||||
|
||||
var/pass_damage = O.throwforce
|
||||
var/pass_damage_reduc_mod
|
||||
if(pass_damage <= damage_minimum)//Too little to go through.
|
||||
src.occupant_message("<span class='notice'>\The [A] bounces off the armor.</span>")
|
||||
src.visible_message("\The [A] bounces off \the [src] armor")
|
||||
return
|
||||
|
||||
else if(O.armor_penetration < minimum_penetration) //If you don't have enough pen, you won't do full damage
|
||||
src.occupant_message("<span class='notice'>\The [A] struggles to bypass \the [src] armor.</span>")
|
||||
src.visible_message("\The [A] struggles to bypass \the [src] armor")
|
||||
pass_damage_reduc_mod = fail_penetration_value //This will apply to reduce damage to 2/3 or 66% by default
|
||||
else
|
||||
src.occupant_message("<span class='notice'>\The [A] manages to pierces \the [src] armor.</span>")
|
||||
src.visible_message("\The [A] manages to pierces \the [src] armor")
|
||||
pass_damage_reduc_mod = 1
|
||||
|
||||
|
||||
|
||||
for(var/obj/item/mecha_parts/mecha_equipment/ME in equipment)
|
||||
pass_damage = ME.handle_ranged_contact(A, pass_damage)
|
||||
|
||||
pass_damage = (pass_damage*pass_damage_reduc_mod)//Applying damage reduction
|
||||
src.take_damage(pass_damage)
|
||||
src.check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST))
|
||||
return
|
||||
@@ -753,9 +907,25 @@
|
||||
ignore_threshold = 1
|
||||
|
||||
var/pass_damage = Proj.damage
|
||||
var/pass_damage_reduc_mod
|
||||
for(var/obj/item/mecha_parts/mecha_equipment/ME in equipment)
|
||||
pass_damage = ME.handle_projectile_contact(Proj, pass_damage)
|
||||
|
||||
if(pass_damage < damage_minimum)//too pathetic to really damage you.
|
||||
src.occupant_message("<span class='notice'>The armor deflects incoming projectile.</span>")
|
||||
src.visible_message("The [src.name] armor deflects\the [Proj]")
|
||||
return
|
||||
|
||||
else if(Proj.armor_penetration < minimum_penetration) //If you don't have enough pen, you won't do full damage
|
||||
src.occupant_message("<span class='notice'>\The [Proj] struggles to pierce \the [src] armor.</span>")
|
||||
src.visible_message("\The [Proj] struggles to pierce \the [src] armor")
|
||||
pass_damage_reduc_mod = fail_penetration_value //This will apply to reduce damage to 2/3 or 66% by default
|
||||
else
|
||||
src.occupant_message("<span class='notice'>\The [Proj] manages to pierce \the [src] armor.</span>")
|
||||
src.visible_message("\The [Proj] manages to pierce \the [src] armor")
|
||||
pass_damage_reduc_mod = 1
|
||||
|
||||
pass_damage = (pass_damage_reduc_mod*pass_damage)//Apply damage reduction before usage.
|
||||
src.take_damage(pass_damage, Proj.check_armour)
|
||||
if(prob(25)) spark_system.start()
|
||||
src.check_for_internal_damage(list(MECHA_INT_FIRE,MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST,MECHA_INT_SHORT_CIRCUIT),ignore_threshold)
|
||||
@@ -779,6 +949,7 @@
|
||||
Proj.on_hit(src) //on_hit just returns if it's argument is not a living mob so does this actually do anything?
|
||||
return
|
||||
|
||||
//This refer to whenever you are caught in an explosion.
|
||||
/obj/mecha/ex_act(severity)
|
||||
src.log_message("Affected by explosion of severity: [severity].",1)
|
||||
if(prob(src.deflect_chance))
|
||||
@@ -841,19 +1012,30 @@
|
||||
/obj/mecha/proc/dynattackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
user.setClickCooldown(user.get_attack_speed(W))
|
||||
src.log_message("Attacked by [W]. Attacker - [user]")
|
||||
if(prob(src.deflect_chance))
|
||||
var/pass_damage_reduc_mod //Modifer for failing to bring AP.
|
||||
|
||||
if(prob(src.deflect_chance)) //Does your attack get deflected outright.
|
||||
src.occupant_message("<span class='notice'>\The [W] bounces off [src.name].</span>")
|
||||
to_chat(user, "<span class='danger'>\The [W] bounces off [src.name].</span>")
|
||||
src.log_append_to_last("Armor saved.")
|
||||
/*
|
||||
for (var/mob/V in viewers(src))
|
||||
if(V.client && !(V.blinded))
|
||||
V.show_message("The [W] bounces off [src.name] armor.", 1)
|
||||
*/
|
||||
|
||||
else if(W.force < damage_minimum) //Is your attack too PATHETIC to do anything. 3 damage to a person shouldn't do anything to a mech.
|
||||
src.occupant_message("<span class='notice'>\The [W] bounces off the armor.</span>")
|
||||
src.visible_message("\The [W] bounces off \the [src] armor")
|
||||
return
|
||||
|
||||
else if(W.armor_penetration < minimum_penetration) //If you don't have enough pen, you won't do full damage
|
||||
src.occupant_message("<span class='notice'>\The [W] struggles to bypass \the [src] armor.</span>")
|
||||
src.visible_message("\The [W] struggles to bypass \the [src] armor")
|
||||
pass_damage_reduc_mod = fail_penetration_value //This will apply to reduce damage to 2/3 or 66% by default
|
||||
|
||||
else
|
||||
pass_damage_reduc_mod = 1 //Just making sure.
|
||||
src.occupant_message("<font color='red'><b>[user] hits [src] with [W].</b></font>")
|
||||
user.visible_message("<font color='red'><b>[user] hits [src] with [W].</b></font>", "<font color='red'><b>You hit [src] with [W].</b></font>")
|
||||
|
||||
var/pass_damage = W.force
|
||||
pass_damage = (pass_damage*pass_damage_reduc_mod) //Apply the reduction of damage from not having enough armor penetration.
|
||||
for(var/obj/item/mecha_parts/mecha_equipment/ME in equipment)
|
||||
pass_damage = ME.handle_projectile_contact(W, pass_damage)
|
||||
src.take_damage(pass_damage,W.damtype)
|
||||
@@ -1219,6 +1401,9 @@
|
||||
set category = "Exosuit Interface"
|
||||
set src = usr.loc
|
||||
set popup_menu = 0
|
||||
lights()
|
||||
|
||||
/obj/mecha/verb/lights()
|
||||
if(usr!=occupant) return
|
||||
lights = !lights
|
||||
if(lights) set_light(light_range + lights_power)
|
||||
@@ -1230,18 +1415,37 @@
|
||||
|
||||
|
||||
/obj/mecha/verb/toggle_internal_tank()
|
||||
set name = "Toggle internal airtank usage."
|
||||
set name = "Toggle internal airtank usage"
|
||||
set category = "Exosuit Interface"
|
||||
set src = usr.loc
|
||||
set popup_menu = 0
|
||||
internal_tank()
|
||||
|
||||
/obj/mecha/proc/internal_tank()
|
||||
if(usr!=src.occupant)
|
||||
return
|
||||
use_internal_tank = !use_internal_tank
|
||||
src.occupant_message("Now taking air from [use_internal_tank?"internal airtank":"environment"].")
|
||||
src.log_message("Now taking air from [use_internal_tank?"internal airtank":"environment"].")
|
||||
playsound(src, 'sound/mecha/gasdisconnected.ogg', 30, 1)
|
||||
return
|
||||
|
||||
|
||||
/obj/mecha/verb/toggle_strafing()
|
||||
set name = "Toggle strafing"
|
||||
set category = "Exosuit Interface"
|
||||
set src = usr.loc
|
||||
set popup_menu = 0
|
||||
strafing()
|
||||
|
||||
/obj/mecha/proc/strafing()
|
||||
if(usr!=src.occupant)
|
||||
return
|
||||
strafing = !strafing
|
||||
src.occupant_message("Toggled strafing mode [strafing?"on":"off"].")
|
||||
src.log_message("Toggled strafing mode [strafing?"on":"off"].")
|
||||
return
|
||||
|
||||
/obj/mecha/MouseDrop_T(mob/O, mob/user as mob)
|
||||
//Humans can pilot mechs.
|
||||
if(!ishuman(O))
|
||||
@@ -1253,11 +1457,13 @@
|
||||
|
||||
move_inside()
|
||||
|
||||
/obj/mecha/verb/move_inside()
|
||||
/obj/mecha/verb/enter()
|
||||
set category = "Object"
|
||||
set name = "Enter Exosuit"
|
||||
set src in oview(1)
|
||||
move_inside()
|
||||
|
||||
/obj/mecha/proc/move_inside()
|
||||
if (usr.stat || !ishuman(usr))
|
||||
return
|
||||
|
||||
@@ -1303,6 +1509,8 @@
|
||||
if(enter_after(40,usr))
|
||||
if(!src.occupant)
|
||||
moved_inside(usr)
|
||||
if(ishuman(occupant)) //Aeiou
|
||||
GrantActions(occupant, 1)
|
||||
else if(src.occupant!=usr)
|
||||
to_chat(usr, "[src.occupant] was faster. Try better next time, loser.")
|
||||
else
|
||||
@@ -1324,8 +1532,30 @@
|
||||
src.verbs += /obj/mecha/verb/eject
|
||||
src.log_append_to_last("[H] moved in as pilot.")
|
||||
src.icon_state = src.reset_icon()
|
||||
//VOREStation Edit Add
|
||||
if(occupant.hud_used)
|
||||
minihud = new (occupant.hud_used, src)
|
||||
//VOREStation Edit Add End
|
||||
|
||||
//This part removes all the verbs if you don't have them the _possible on your mech. This is a little clunky, but it lets you just add that to any mech.
|
||||
//And it's not like this 10yo code wasn't clunky before.
|
||||
|
||||
if(!smoke_possible) //Can't use smoke? No verb for you.
|
||||
verbs -= /obj/mecha/verb/toggle_smoke
|
||||
if(!thrusters_possible) //Can't use thrusters? No verb for you.
|
||||
verbs -= /obj/mecha/verb/toggle_thrusters
|
||||
if(!defence_mode_possible) //Do i need to explain everything?
|
||||
verbs -= /obj/mecha/verb/toggle_defence_mode
|
||||
if(!overload_possible)
|
||||
verbs -= /obj/mecha/verb/toggle_overload
|
||||
if(!zoom_possible)
|
||||
verbs -= /obj/mecha/verb/toggle_zoom
|
||||
if(!phasing_possible)
|
||||
verbs -= /obj/mecha/verb/toggle_phasing
|
||||
if(!switch_dmg_type_possible)
|
||||
verbs -= /obj/mecha/verb/switch_damtype
|
||||
|
||||
occupant.in_enclosed_vehicle = 1 //Useful for when you need to know if someone is in a mecho.
|
||||
update_cell_alerts()
|
||||
update_damage_alerts()
|
||||
set_dir(dir_in)
|
||||
@@ -1388,12 +1618,13 @@
|
||||
return
|
||||
|
||||
|
||||
/obj/mecha/proc/go_out()
|
||||
/obj/mecha/proc/go_out() //Eject/Exit the mech. Yes this is for easier searching.
|
||||
if(!src.occupant) return
|
||||
var/atom/movable/mob_container
|
||||
QDEL_NULL(minihud)
|
||||
if(ishuman(occupant))
|
||||
mob_container = src.occupant
|
||||
RemoveActions(occupant, human_occupant=1)//AEIOU
|
||||
else if(istype(occupant, /mob/living/carbon/brain))
|
||||
var/mob/living/carbon/brain/brain = occupant
|
||||
mob_container = brain.container
|
||||
@@ -1413,10 +1644,20 @@
|
||||
occupant.canmove = 0
|
||||
occupant.clear_alert("charge")
|
||||
occupant.clear_alert("mech damage")
|
||||
occupant.in_enclosed_vehicle = 0
|
||||
occupant = null
|
||||
icon_state = src.reset_icon()+"-open"
|
||||
set_dir(dir_in)
|
||||
verbs -= /obj/mecha/verb/eject
|
||||
|
||||
//src.zoom = 0
|
||||
|
||||
// Doesn't seem needed.
|
||||
if(src.occupant && src.occupant.client)
|
||||
src.occupant.client.view = world.view
|
||||
src.zoom = 0
|
||||
|
||||
strafing = 0
|
||||
return
|
||||
|
||||
/////////////////////////
|
||||
@@ -1545,7 +1786,18 @@
|
||||
<b>Lights: </b>[lights?"on":"off"]<br>
|
||||
[src.dna?"<b>DNA-locked:</b><br> <span style='font-size:10px;letter-spacing:-1px;'>[src.dna]</span> \[<a href='?src=\ref[src];reset_dna=1'>Reset</a>\]<br>":null]
|
||||
"}
|
||||
//Cargo components.
|
||||
|
||||
|
||||
if(defence_mode_possible)
|
||||
output += "<b>Defence mode: [defence_mode?"on":"off"]</b><br>"
|
||||
if(overload_possible)
|
||||
output += "<b>Leg actuators overload: [overload?"on":"off"]</b><br>"
|
||||
if(smoke_possible)
|
||||
output += "<b>Smoke:</b> [smoke_reserve]<br>"
|
||||
if(thrusters_possible)
|
||||
output += "<b>Thrusters:</b> [thrusters?"on":"off"]<br>"
|
||||
|
||||
//Cargo components. Keep this last otherwise it does weird alignment issues.
|
||||
output += "<b>Cargo Compartment Contents:</b><div style=\"margin-left: 15px;\">"
|
||||
if(src.cargo.len)
|
||||
for(var/obj/O in src.cargo)
|
||||
@@ -1747,12 +1999,31 @@
|
||||
return
|
||||
if(href_list["toggle_lights"])
|
||||
if(usr != src.occupant) return
|
||||
src.toggle_lights()
|
||||
src.lights()
|
||||
return
|
||||
/*
|
||||
if(href_list["toggle_strafing"])
|
||||
if(usr != src.occupant) return
|
||||
src.strafing()
|
||||
return*/
|
||||
|
||||
if(href_list["toggle_airtank"])
|
||||
if(usr != src.occupant) return
|
||||
src.toggle_internal_tank()
|
||||
src.internal_tank()
|
||||
return
|
||||
if (href_list["toggle_thrusters"])
|
||||
src.toggle_thrusters()
|
||||
if (href_list["smoke"])
|
||||
src.smoke()
|
||||
if (href_list["toggle_zoom"])
|
||||
src.zoom()
|
||||
if(href_list["toggle_defence_mode"])
|
||||
src.defence_mode()
|
||||
if(href_list["switch_damtype"])
|
||||
src.switch_damtype()
|
||||
if(href_list["phasing"])
|
||||
src.phasing()
|
||||
|
||||
if(href_list["rmictoggle"])
|
||||
if(usr != src.occupant) return
|
||||
radio.broadcasting = !radio.broadcasting
|
||||
@@ -2007,6 +2278,7 @@
|
||||
icon_state = initial(icon_state)
|
||||
return icon_state
|
||||
|
||||
//This is for mobs mostly.
|
||||
/obj/mecha/attack_generic(var/mob/user, var/damage, var/attack_message)
|
||||
|
||||
user.setClickCooldown(user.get_attack_speed())
|
||||
@@ -2014,19 +2286,38 @@
|
||||
return 0
|
||||
|
||||
src.log_message("Attacked. Attacker - [user].",1)
|
||||
|
||||
user.do_attack_animation(src)
|
||||
if(!prob(src.deflect_chance))
|
||||
src.take_damage(damage)
|
||||
src.check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST))
|
||||
visible_message("<span class='danger'>[user] [attack_message] [src]!</span>")
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='red'>attacked [src.name]</font>")
|
||||
else
|
||||
|
||||
//var/pass_damage //See the comment in the larger greyed out block below.
|
||||
//var/pass_damage_reduc_mod
|
||||
if(prob(src.deflect_chance))//Deflected
|
||||
src.log_append_to_last("Armor saved.")
|
||||
playsound(src, 'sound/weapons/slash.ogg', 50, 1, -1)
|
||||
src.occupant_message("<span class='notice'>\The [user]'s attack is stopped by the armor.</span>")
|
||||
visible_message("<span class='notice'>\The [user] rebounds off [src.name]'s armor!</span>")
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='red'>attacked [src.name]</font>")
|
||||
playsound(src, 'sound/weapons/slash.ogg', 50, 1, -1)
|
||||
|
||||
else if(damage < damage_minimum)//Pathetic damage levels just don't harm MECH.
|
||||
src.occupant_message("<span class='notice'>\The [user]'s doesn't dent \the [src] paint.</span>")
|
||||
src.visible_message("\The [user]'s attack doesn't dent \the [src] armor")
|
||||
src.log_append_to_last("Armor saved.")
|
||||
playsound(src, 'sound/effects/Glasshit.ogg', 50, 1)
|
||||
return
|
||||
|
||||
/*//Commented out for not playing well with penetration questions.
|
||||
else if(user.mob.attack_armor_pen < minimum_penetration)//Not enough armor penetration
|
||||
src.occupant_message("<span class='notice'>\The [user] struggles to pierce \the [src] armor.</span>")
|
||||
src.visible_message("\The [user] struggles to pierce \the [src] armor")
|
||||
pass_damage_reduc_mod = fail_penetration_value //This will apply to reduce damage to 2/3 or 66% by default.
|
||||
*/
|
||||
|
||||
else
|
||||
//pass_damage = (pass_damage_reduc_mod*damage)
|
||||
src.take_damage(damage)//apply damage
|
||||
src.check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST))
|
||||
visible_message("<span class='danger'>[user] [attack_message] [src]!</span>")
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='red'>attacked [src.name]</font>")
|
||||
|
||||
return 1
|
||||
|
||||
|
||||
|
||||
421
code/game/mecha/mecha_actions.dm
Normal file
421
code/game/mecha/mecha_actions.dm
Normal file
@@ -0,0 +1,421 @@
|
||||
//AEIOU
|
||||
//
|
||||
//THIS FILE CONTAINS THE CODE TO ADD THE HUD BUTTONS AND THE MECH ACTIONS THEMSELVES.
|
||||
//
|
||||
//
|
||||
// I better get some free food for this..
|
||||
|
||||
|
||||
|
||||
//
|
||||
/// Adding the buttons things to the player. The interactive, top left things, at least at time of writing.
|
||||
/// If you want it to be only for a special mech, you have to go and make an override like in the durand mech.
|
||||
//
|
||||
|
||||
/obj/mecha/proc/GrantActions(mob/living/user, human_occupant = 0)
|
||||
if(human_occupant)
|
||||
eject_action.Grant(user, src)
|
||||
internals_action.Grant(user, src)
|
||||
cycle_action.Grant(user, src)
|
||||
lights_action.Grant(user, src)
|
||||
stats_action.Grant(user, src)
|
||||
strafing_action.Grant(user, src)//The defaults.
|
||||
|
||||
if(defence_mode_possible)
|
||||
defence_action.Grant(user, src)
|
||||
if(overload_possible)
|
||||
overload_action.Grant(user, src)
|
||||
if(smoke_possible)
|
||||
smoke_action.Grant(user, src)
|
||||
if(zoom_possible)
|
||||
zoom_action.Grant(user, src)
|
||||
if(thrusters_possible)
|
||||
thrusters_action.Grant(user, src)
|
||||
if(phasing_possible)
|
||||
phasing_action.Grant(user, src)
|
||||
if(switch_dmg_type_possible)
|
||||
switch_damtype_action.Grant(user, src)
|
||||
|
||||
/obj/mecha/proc/RemoveActions(mob/living/user, human_occupant = 0)
|
||||
if(human_occupant)
|
||||
eject_action.Remove(user, src)
|
||||
internals_action.Remove(user, src)
|
||||
cycle_action.Remove(user, src)
|
||||
lights_action.Remove(user, src)
|
||||
stats_action.Remove(user, src)
|
||||
strafing_action.Remove(user, src)
|
||||
|
||||
defence_action.Remove(user, src)
|
||||
smoke_action.Remove(user, src)
|
||||
zoom_action.Remove(user, src)
|
||||
thrusters_action.Remove(user, src)
|
||||
phasing_action.Remove(user, src)
|
||||
switch_damtype_action.Remove(user, src)
|
||||
overload_action.Remove(user, src)
|
||||
|
||||
|
||||
|
||||
//
|
||||
////BUTTONS STUFF
|
||||
//
|
||||
|
||||
/datum/action/innate/mecha
|
||||
check_flags = AB_CHECK_RESTRAINED | AB_CHECK_STUNNED | AB_CHECK_ALIVE
|
||||
button_icon = 'icons/effects/actions_mecha.dmi'
|
||||
var/obj/mecha/chassis
|
||||
|
||||
/datum/action/innate/mecha/Grant(mob/living/L, obj/mecha/M)
|
||||
if(M)
|
||||
chassis = M
|
||||
..()
|
||||
|
||||
|
||||
/datum/action/innate/mecha/mech_toggle_lights
|
||||
name = "Toggle Lights"
|
||||
button_icon_state = "mech_lights_off"
|
||||
|
||||
/datum/action/innate/mecha/mech_toggle_lights/Activate()
|
||||
button_icon_state = "mech_lights_[chassis.lights ? "off" : "on"]"
|
||||
button.UpdateIcon()
|
||||
chassis.lights()
|
||||
|
||||
|
||||
|
||||
/datum/action/innate/mecha/mech_toggle_internals
|
||||
name = "Toggle Internal Airtank Usage"
|
||||
button_icon_state = "mech_internals_off"
|
||||
|
||||
/datum/action/innate/mecha/mech_toggle_internals/Activate()
|
||||
button_icon_state = "mech_internals_[chassis.use_internal_tank ? "off" : "on"]"
|
||||
button.UpdateIcon()
|
||||
chassis.internal_tank()
|
||||
|
||||
|
||||
|
||||
/datum/action/innate/mecha/mech_view_stats
|
||||
name = "View stats"
|
||||
button_icon_state = "mech_view_stats"
|
||||
|
||||
/datum/action/innate/mecha/mech_view_stats/Activate()
|
||||
chassis.view_stats()
|
||||
|
||||
|
||||
|
||||
/datum/action/innate/mecha/mech_eject
|
||||
name = "Eject From Mech"
|
||||
button_icon_state = "mech_eject"
|
||||
|
||||
/datum/action/innate/mecha/mech_eject/Activate()
|
||||
chassis.go_out()
|
||||
|
||||
|
||||
|
||||
/datum/action/innate/mecha/strafe
|
||||
name = "Toggle Mech Strafing"
|
||||
button_icon_state = "mech_strafe_off"
|
||||
|
||||
/datum/action/innate/mecha/strafe/Activate()
|
||||
button_icon_state = "mech_strafe_[chassis.strafing ? "off" : "on"]"
|
||||
button.UpdateIcon()
|
||||
chassis.strafing()
|
||||
|
||||
|
||||
|
||||
/datum/action/innate/mecha/mech_defence_mode
|
||||
name = "Toggle Mech defence mode"
|
||||
button_icon_state = "mech_defense_mode_off"
|
||||
|
||||
/datum/action/innate/mecha/mech_defence_mode/Activate()
|
||||
button_icon_state = "mech_defense_mode_[chassis.defence_mode ? "off" : "on"]"
|
||||
button.UpdateIcon()
|
||||
chassis.defence_mode()
|
||||
|
||||
|
||||
|
||||
/datum/action/innate/mecha/mech_overload_mode
|
||||
name = "Toggle Mech Leg Overload"
|
||||
button_icon_state = "mech_overload_off"
|
||||
|
||||
/datum/action/innate/mecha/mech_overload_mode/Activate()
|
||||
button_icon_state = "mech_overload_[chassis.overload ? "off" : "on"]"
|
||||
button.UpdateIcon()
|
||||
chassis.overload()
|
||||
|
||||
|
||||
|
||||
/datum/action/innate/mecha/mech_smoke
|
||||
name = "Toggle Mech Smoke"
|
||||
button_icon_state = "mech_smoke_off"
|
||||
|
||||
/datum/action/innate/mecha/mech_smoke/Activate()
|
||||
//button_icon_state = "mech_smoke_[chassis.smoke ? "off" : "on"]"
|
||||
//button.UpdateIcon() //Dual colors notneeded ATM
|
||||
chassis.smoke()
|
||||
|
||||
|
||||
|
||||
/datum/action/innate/mecha/mech_zoom
|
||||
name = "Toggle Mech Zoom"
|
||||
button_icon_state = "mech_zoom_off"
|
||||
|
||||
/datum/action/innate/mecha/mech_zoom/Activate()
|
||||
button_icon_state = "mech_zoom_[chassis.zoom ? "off" : "on"]"
|
||||
button.UpdateIcon()
|
||||
chassis.zoom()
|
||||
|
||||
|
||||
|
||||
/datum/action/innate/mecha/mech_toggle_thrusters
|
||||
name = "Toggle Mech thrusters"
|
||||
button_icon_state = "mech_thrusters_off"
|
||||
|
||||
/datum/action/innate/mecha/mech_toggle_thrusters/Activate()
|
||||
button_icon_state = "mech_thrusters_[chassis.thrusters ? "off" : "on"]"
|
||||
button.UpdateIcon()
|
||||
chassis.thrusters()
|
||||
|
||||
|
||||
|
||||
/datum/action/innate/mecha/mech_cycle_equip //I'll be honest, i don't understand this part, buuuuuut it works!
|
||||
name = "Cycle Equipment"
|
||||
button_icon_state = "mech_cycle_equip_off"
|
||||
|
||||
/datum/action/innate/mecha/mech_cycle_equip/Activate()
|
||||
|
||||
var/list/available_equipment = list()
|
||||
available_equipment = chassis.equipment
|
||||
|
||||
if(available_equipment.len == 0)
|
||||
chassis.occupant_message("No equipment available.")
|
||||
return
|
||||
if(!chassis.selected)
|
||||
chassis.selected = available_equipment[1]
|
||||
chassis.occupant_message("You select [chassis.selected]")
|
||||
send_byjax(chassis.occupant,"exosuit.browser","eq_list",chassis.get_equipment_list())
|
||||
button_icon_state = "mech_cycle_equip_on"
|
||||
button.UpdateIcon()
|
||||
return
|
||||
var/number = 0
|
||||
for(var/A in available_equipment)
|
||||
number++
|
||||
if(A == chassis.selected)
|
||||
if(available_equipment.len == number)
|
||||
chassis.selected = null
|
||||
chassis.occupant_message("You switch to no equipment")
|
||||
button_icon_state = "mech_cycle_equip_off"
|
||||
else
|
||||
chassis.selected = available_equipment[number+1]
|
||||
chassis.occupant_message("You switch to [chassis.selected]")
|
||||
button_icon_state = "mech_cycle_equip_on"
|
||||
send_byjax(chassis.occupant,"exosuit.browser","eq_list",chassis.get_equipment_list())
|
||||
button.UpdateIcon()
|
||||
return
|
||||
|
||||
|
||||
|
||||
/datum/action/innate/mecha/mech_switch_damtype
|
||||
name = "Reconfigure arm microtool arrays"
|
||||
button_icon_state = "mech_damtype_brute"
|
||||
|
||||
|
||||
/datum/action/innate/mecha/mech_switch_damtype/Activate()
|
||||
|
||||
|
||||
button_icon_state = "mech_damtype_[chassis.damtype]"
|
||||
playsound(src, 'sound/mecha/mechmove01.ogg', 50, 1)
|
||||
button.UpdateIcon()
|
||||
chassis.query_damtype()
|
||||
|
||||
|
||||
|
||||
/datum/action/innate/mecha/mech_toggle_phasing
|
||||
name = "Toggle Mech phasing"
|
||||
button_icon_state = "mech_phasing_off"
|
||||
|
||||
/datum/action/innate/mecha/mech_toggle_phasing/Activate()
|
||||
button_icon_state = "mech_phasing_[chassis.phasing ? "off" : "on"]"
|
||||
button.UpdateIcon()
|
||||
chassis.phasing()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/////
|
||||
/////
|
||||
///// ACTUAL MECANICS FOR THE ACTIONS
|
||||
///// OVERLOAD, DEFENCE, SMOKE
|
||||
/////
|
||||
/////
|
||||
|
||||
|
||||
/obj/mecha/verb/toggle_defence_mode()
|
||||
set category = "Exosuit Interface"
|
||||
set name = "Toggle defence mode"
|
||||
set src = usr.loc
|
||||
set popup_menu = 0
|
||||
defence_mode()
|
||||
|
||||
/obj/mecha/proc/defence_mode()
|
||||
if(usr!=src.occupant)
|
||||
return
|
||||
playsound(src, 'sound/mecha/duranddefencemode.ogg', 50, 1)
|
||||
defence_mode = !defence_mode
|
||||
if(defence_mode)
|
||||
deflect_chance = defence_deflect
|
||||
src.occupant_message("<font color='blue'>You enable [src] defence mode.</font>")
|
||||
else
|
||||
deflect_chance = initial(deflect_chance)
|
||||
src.occupant_message("<font color='red'>You disable [src] defence mode.</font>")
|
||||
src.log_message("Toggled defence mode.")
|
||||
return
|
||||
|
||||
|
||||
|
||||
/obj/mecha/verb/toggle_overload()
|
||||
set category = "Exosuit Interface"
|
||||
set name = "Toggle leg actuators overload"
|
||||
set src = usr.loc
|
||||
set popup_menu = 0
|
||||
overload()
|
||||
|
||||
/obj/mecha/proc/overload()
|
||||
if(usr.stat == 1)//No manipulating things while unconcious.
|
||||
return
|
||||
if(usr!=src.occupant)
|
||||
return
|
||||
if(health < initial(health) - initial(health)/3)//Same formula as in movement, just beforehand.
|
||||
src.occupant_message("<font color='red'>Leg actuators damage critical, unable to engage overload.</font>")
|
||||
overload = 0 //Just to be sure
|
||||
return
|
||||
if(overload)
|
||||
overload = 0
|
||||
step_in = initial(step_in)
|
||||
step_energy_drain = initial(step_energy_drain)
|
||||
src.occupant_message("<font color='blue'>You disable leg actuators overload.</font>")
|
||||
else
|
||||
overload = 1
|
||||
step_in = min(1, round(step_in/2))
|
||||
step_energy_drain = step_energy_drain*overload_coeff
|
||||
src.occupant_message("<font color='red'>You enable leg actuators overload.</font>")
|
||||
src.log_message("Toggled leg actuators overload.")
|
||||
playsound(src, 'sound/mecha/mechanical_toggle.ogg', 50, 1)
|
||||
return
|
||||
|
||||
|
||||
/obj/mecha/verb/toggle_smoke()
|
||||
set category = "Exosuit Interface"
|
||||
set name = "Activate Smoke"
|
||||
set src = usr.loc
|
||||
set popup_menu = 0
|
||||
smoke()
|
||||
|
||||
/obj/mecha/proc/smoke()
|
||||
if(usr!=src.occupant)
|
||||
return
|
||||
|
||||
if(smoke_reserve < 1)
|
||||
src.occupant_message("<font color='red'>You don't have any smoke left in stock!</font>")
|
||||
return
|
||||
|
||||
if(smoke_ready)
|
||||
smoke_reserve-- //Remove ammo
|
||||
src.occupant_message("<font color='red'>Smoke fired. [smoke_reserve] usages left.</font>")
|
||||
|
||||
var/datum/effect/effect/system/smoke_spread/smoke = new /datum/effect/effect/system/smoke_spread()
|
||||
smoke.attach(src)
|
||||
smoke.set_up(10, 0, usr.loc)
|
||||
smoke.start()
|
||||
playsound(src, 'sound/effects/smoke.ogg', 50, 1, -3)
|
||||
|
||||
smoke_ready = 0
|
||||
spawn(smoke_cooldown)
|
||||
smoke_ready = 1
|
||||
return
|
||||
|
||||
|
||||
|
||||
/obj/mecha/verb/toggle_zoom()
|
||||
set category = "Exosuit Interface"
|
||||
set name = "Zoom"
|
||||
set src = usr.loc
|
||||
set popup_menu = 0
|
||||
zoom()
|
||||
|
||||
/obj/mecha/proc/zoom()//This could use improvements but maybe later.
|
||||
if(usr!=src.occupant)
|
||||
return
|
||||
if(src.occupant.client)
|
||||
src.zoom = !src.zoom
|
||||
src.log_message("Toggled zoom mode.")
|
||||
src.occupant_message("<font color='[src.zoom?"blue":"red"]'>Zoom mode [zoom?"en":"dis"]abled.</font>")
|
||||
if(zoom)
|
||||
src.occupant.set_viewsize(12)
|
||||
src.occupant << sound('sound/mecha/imag_enh.ogg',volume=50)
|
||||
else
|
||||
src.occupant.set_viewsize() // Reset to default
|
||||
return
|
||||
|
||||
|
||||
|
||||
/obj/mecha/verb/toggle_thrusters()
|
||||
set category = "Exosuit Interface"
|
||||
set name = "Toggle thrusters"
|
||||
set src = usr.loc
|
||||
set popup_menu = 0
|
||||
thrusters()
|
||||
|
||||
/obj/mecha/proc/thrusters()
|
||||
if(usr!=src.occupant)
|
||||
return
|
||||
if(src.occupant)
|
||||
if(get_charge() > 0)
|
||||
thrusters = !thrusters
|
||||
src.log_message("Toggled thrusters.")
|
||||
src.occupant_message("<font color='[src.thrusters?"blue":"red"]'>Thrusters [thrusters?"en":"dis"]abled.</font>")
|
||||
return
|
||||
|
||||
|
||||
|
||||
/obj/mecha/verb/switch_damtype()
|
||||
set category = "Exosuit Interface"
|
||||
set name = "Change melee damage type"
|
||||
set src = usr.loc
|
||||
set popup_menu = 0
|
||||
query_damtype()
|
||||
|
||||
/obj/mecha/proc/query_damtype()
|
||||
if(usr!=src.occupant)
|
||||
return
|
||||
var/new_damtype = alert(src.occupant,"Melee Damage Type",null,"Brute","Fire","Toxic")
|
||||
switch(new_damtype)
|
||||
if("Brute")
|
||||
damtype = "brute"
|
||||
src.occupant_message("Your exosuit's hands form into fists.")
|
||||
if("Fire")
|
||||
damtype = "fire"
|
||||
src.occupant_message("A torch tip extends from your exosuit's hand, glowing red.")
|
||||
if("Toxic")
|
||||
damtype = "tox"
|
||||
src.occupant_message("A bone-chillingly thick plasteel needle protracts from the exosuit's palm.")
|
||||
src.occupant_message("Melee damage type switched to [new_damtype]")
|
||||
return
|
||||
|
||||
|
||||
|
||||
/obj/mecha/verb/toggle_phasing()
|
||||
set category = "Exosuit Interface"
|
||||
set name = "Toggle phasing"
|
||||
set src = usr.loc
|
||||
set popup_menu = 0
|
||||
phasing()
|
||||
|
||||
/obj/mecha/proc/phasing()
|
||||
if(usr!=src.occupant)
|
||||
return
|
||||
phasing = !phasing
|
||||
send_byjax(src.occupant,"exosuit.browser","phasing_command","[phasing?"Dis":"En"]able phasing")
|
||||
src.occupant_message("<font color=\"[phasing?"#00f\">En":"#f00\">Dis"]abled phasing.</font>")
|
||||
return
|
||||
|
||||
|
||||
3
code/game/mecha/mecha_vr.dm
Normal file
3
code/game/mecha/mecha_vr.dm
Normal file
@@ -0,0 +1,3 @@
|
||||
/obj/mecha
|
||||
damage_minimum = 5 //Incoming damage lower than this won't actually deal damage. Scrapes shouldn't be a real thing.
|
||||
minimum_penetration = 10 //Incoming damage won't be fully applied if you don't have at least 20. Almost all AP clears this.
|
||||
@@ -131,3 +131,13 @@
|
||||
ME.attach(src)
|
||||
ME = new /obj/item/mecha_parts/mecha_equipment/tool/syringe_gun
|
||||
ME.attach(src)
|
||||
|
||||
//Meant for random spawns.
|
||||
/obj/mecha/medical/odysseus/old
|
||||
desc = "An aging combat exosuit utilized by many corporations. Originally developed to combat hostile alien lifeforms. This one is particularly worn looking and likely isn't as sturdy."
|
||||
|
||||
/obj/mecha/medical/odysseus/old/New()
|
||||
..()
|
||||
health = 25
|
||||
maxhealth = 100 //Just slightly worse.
|
||||
cell.charge = rand(0, (cell.charge/2))
|
||||
2
code/game/mecha/medical/odysseus_vr.dm
Normal file
2
code/game/mecha/medical/odysseus_vr.dm
Normal file
@@ -0,0 +1,2 @@
|
||||
/obj/mecha/medical/odysseus/
|
||||
minimum_penetration = 0
|
||||
@@ -25,8 +25,6 @@
|
||||
damage_absorption = list("brute"=0.75,"fire"=1,"bullet"=0.8,"laser"=0.7,"energy"=0.85,"bomb"=1)
|
||||
max_temperature = 15000
|
||||
infra_luminosity = 6
|
||||
var/overload = 0
|
||||
var/overload_coeff = 2
|
||||
wreckage = /obj/effect/decal/mecha_wreckage/micro/sec/polecat
|
||||
internal_damage_threshold = 35
|
||||
max_equip = 3
|
||||
@@ -48,9 +46,6 @@
|
||||
deflect_chance = 5
|
||||
damage_absorption = list("brute"=1,"fire"=1,"bullet"=0.9,"laser"=0.8,"energy"=0.85,"bomb"=1)
|
||||
max_temperature = 5000
|
||||
infra_luminosity = 6
|
||||
var/overload = 0
|
||||
var/overload_coeff = 2
|
||||
wreckage = /obj/effect/decal/mecha_wreckage/micro/sec/weasel
|
||||
internal_damage_threshold = 20
|
||||
max_equip = 2
|
||||
|
||||
@@ -12,8 +12,6 @@
|
||||
damage_absorption = list("brute"=0.9,"fire"=1,"bullet"=1,"laser"=1,"energy"=1,"bomb"=1)
|
||||
max_temperature = 15000
|
||||
infra_luminosity = 6
|
||||
var/overload = 0
|
||||
var/overload_coeff = 2
|
||||
wreckage = /obj/effect/decal/mecha_wreckage/micro/utility/gopher
|
||||
internal_damage_threshold = 35
|
||||
max_micro_utility_equip = 2
|
||||
|
||||
@@ -7,11 +7,13 @@
|
||||
step_energy_drain = 5 // vorestation edit because 10 drained a significant chunk of its cell before you even got out the airlock
|
||||
max_temperature = 20000
|
||||
health = 200
|
||||
maxhealth = 200
|
||||
maxhealth = 200 //Don't forget to update the /old variant if you change this number.
|
||||
wreckage = /obj/effect/decal/mecha_wreckage/ripley
|
||||
cargo_capacity = 10
|
||||
var/obj/item/weapon/mining_scanner/orescanner // vorestation addition
|
||||
|
||||
minimum_penetration = 10
|
||||
|
||||
/obj/mecha/working/ripley/Destroy()
|
||||
for(var/atom/movable/A in src.cargo)
|
||||
A.loc = loc
|
||||
@@ -81,7 +83,7 @@
|
||||
qdel (B)
|
||||
|
||||
|
||||
// VORESTATION EDIT BEGIN
|
||||
//Vorestation Edit Start
|
||||
|
||||
/obj/mecha/working/ripley/New()
|
||||
..()
|
||||
@@ -95,5 +97,14 @@
|
||||
|
||||
orescanner.attack_self(usr)
|
||||
|
||||
// VORESTATION EDIT END
|
||||
//Vorestation Edit End
|
||||
|
||||
//Meant for random spawns.
|
||||
/obj/mecha/working/ripley/mining/old
|
||||
desc = "An old, dusty mining ripley."
|
||||
|
||||
/obj/mecha/working/ripley/mining/old/New()
|
||||
..()
|
||||
health = 25
|
||||
maxhealth = 190 //Just slightly worse.
|
||||
cell.charge = rand(0, cell.charge)
|
||||
|
||||
2
code/game/mecha/working/ripley_vr.dm
Normal file
2
code/game/mecha/working/ripley_vr.dm
Normal file
@@ -0,0 +1,2 @@
|
||||
/obj/mecha/working/ripley
|
||||
minimum_penetration = 0
|
||||
@@ -22,10 +22,6 @@
|
||||
icon_state = "sbsposter6"
|
||||
name = "Mawletta"
|
||||
desc = "The best view in the system."
|
||||
/datum/poster/vore_7
|
||||
icon_state = "sbsposter7"
|
||||
name = "Sam FEAR"
|
||||
desc = "A poster of the most dangerous cat working for NT."
|
||||
/datum/poster/vore_8
|
||||
icon_state = "sbsposter8"
|
||||
name = "Shitty Timbs"
|
||||
@@ -34,10 +30,6 @@
|
||||
icon_state = "sbsposter9"
|
||||
name = "Shitty Tim"
|
||||
desc = "A Shitty Tim concert poster."
|
||||
/datum/poster/vore_10
|
||||
icon_state = "sbsposter10"
|
||||
name = "Kitty Kisuke"
|
||||
desc = "A poster of famous redspace researcher, Kisuke Gema."
|
||||
/datum/poster/vore_11
|
||||
icon_state = "sbsposter11"
|
||||
name = "Fear"
|
||||
|
||||
51
code/game/objects/items/balls_vr.dm
Normal file
51
code/game/objects/items/balls_vr.dm
Normal file
@@ -0,0 +1,51 @@
|
||||
/obj/item/toy/tennis
|
||||
name = "tennis ball"
|
||||
desc = "A classic tennis ball; a hollow rubber sphere covered in felt. This one has seen better days, and seems to have lost most of its bounce."
|
||||
icon = 'icons/obj/balls_vr.dmi'
|
||||
icon_state = "tennis_classic"
|
||||
item_icons = list(
|
||||
slot_l_hand_str = 'icons/mob/items/righthand_balls_vr.dmi',
|
||||
slot_r_hand_str = 'icons/mob/items/lefthand_balls_vr.dmi',
|
||||
slot_wear_mask_str = 'icons/mob/mouthball_vr.dmi',
|
||||
)
|
||||
item_state = "tennis_classic"
|
||||
slot_flags = SLOT_MASK
|
||||
throw_range = 14
|
||||
w_class = ITEMSIZE_SMALL
|
||||
|
||||
/obj/item/toy/tennis/red
|
||||
name = "red tennis ball"
|
||||
desc = "A red tennis ball. It goes twice as fast!"
|
||||
icon_state = "tennis_red"
|
||||
item_state = "tennis_red"
|
||||
throw_speed = 8 //base throw_speed is 4, and that's already super fast
|
||||
|
||||
/obj/item/toy/tennis/yellow
|
||||
name = "yellow tennis ball"
|
||||
desc = "A yellow tennis ball. Or is it orange? Orangey-yellow?"
|
||||
icon_state = "tennis_yellow"
|
||||
item_state = "tennis_yellow"
|
||||
|
||||
/obj/item/toy/tennis/green
|
||||
name = "green tennis ball"
|
||||
desc = "A bright green tennis ball. Tastes faintly of lime... or maybe soap."
|
||||
icon_state = "tennis_green"
|
||||
item_state = "tennis_green"
|
||||
|
||||
/obj/item/toy/tennis/cyan
|
||||
name = "cyan tennis ball"
|
||||
desc = "A cyan tennis ball. What a curious color choice."
|
||||
icon_state = "tennis_cyan"
|
||||
item_state = "tennis_cyan"
|
||||
|
||||
/obj/item/toy/tennis/blue
|
||||
name = "blue tennis ball"
|
||||
desc = "A blue tennis ball. Who makes blue tennis balls anyway?"
|
||||
icon_state = "tennis_blue"
|
||||
item_state = "tennis_blue"
|
||||
|
||||
/obj/item/toy/tennis/purple
|
||||
name = "purple tennis ball"
|
||||
desc = "A purple tennis ball. Now you've seen everything. Purple, seriously?"
|
||||
icon_state = "tennis_purple"
|
||||
item_state = "tennis_purple"
|
||||
@@ -271,8 +271,8 @@
|
||||
|
||||
//Checks for various conditions to see if the mob is revivable
|
||||
/obj/item/weapon/shockpaddles/proc/can_defib(mob/living/carbon/human/H) //This is checked before doing the defib operation
|
||||
if((H.species.flags & NO_SCAN))
|
||||
return "buzzes, \"Unrecogized physiology. Operation aborted.\""
|
||||
if((H.species.flags & NO_DEFIB))
|
||||
return "buzzes, \"Incompatible physiology. Operation aborted.\""
|
||||
else if(H.isSynthetic() && !use_on_synthetic)
|
||||
return "buzzes, \"Synthetic Body. Operation aborted.\""
|
||||
else if(!H.isSynthetic() && use_on_synthetic)
|
||||
|
||||
@@ -326,7 +326,7 @@
|
||||
var/televored = FALSE
|
||||
if(isbelly(real_dest))
|
||||
var/obj/belly/B = real_dest
|
||||
if(!target.can_be_drop_prey && B.owner != user)
|
||||
if(!(target.can_be_drop_prey) && B.owner != user)
|
||||
to_chat(target,"<span class='warning'>\The [src] narrowly avoids teleporting you right into \a [lowertext(real_dest.name)]!</span>")
|
||||
real_dest = dT //Nevermind!
|
||||
else
|
||||
|
||||
@@ -1445,3 +1445,77 @@
|
||||
force = 1
|
||||
throwforce = 1
|
||||
drop_sound = 'sound/items/drop/box.ogg'
|
||||
|
||||
//////////////////////////////////////////////////////
|
||||
// Chess Pieces //
|
||||
//////////////////////////////////////////////////////
|
||||
|
||||
/obj/item/toy/chess
|
||||
name = "chess piece"
|
||||
desc = "This should never display."
|
||||
icon = 'icons/obj/chess.dmi'
|
||||
w_class = ITEMSIZE_SMALL
|
||||
force = 1
|
||||
throwforce = 1
|
||||
drop_sound = 'sound/items/drop/glass.ogg'
|
||||
|
||||
/obj/item/toy/chess/pawn_white
|
||||
name = "blue pawn"
|
||||
desc = "A large pawn piece for playing chess. It's made of a blue-colored glass."
|
||||
description_info = "Pawns can move forward one square, if that square is unoccupied. If the pawn has not yet moved, it has the option of moving two squares forward provided both squares in front of the pawn are unoccupied. A pawn cannot move backward. They can only capture an enemy piece on either of the two tiles diagonally in front of them, but not the tile directly in front of them."
|
||||
icon_state = "w-pawn"
|
||||
/obj/item/toy/chess/pawn_black
|
||||
name = "purple pawn"
|
||||
desc = "A large pawn piece for playing chess. It's made of a purple-colored glass."
|
||||
description_info = "Pawns can move forward one square, if that square is unoccupied. If the pawn has not yet moved, it has the option of moving two squares forward provided both squares in front of the pawn are unoccupied. A pawn cannot move backward. They can only capture an enemy piece on either of the two tiles diagonally in front of them, but not the tile directly in front of them."
|
||||
icon_state = "b-pawn"
|
||||
/obj/item/toy/chess/rook_white
|
||||
name = "blue rook"
|
||||
desc = "A large rook piece for playing chess. It's made of a blue-colored glass."
|
||||
description_info = "The Rook can move any number of vacant squares vertically or horizontally."
|
||||
icon_state = "w-rook"
|
||||
/obj/item/toy/chess/rook_black
|
||||
name = "purple rook"
|
||||
desc = "A large rook piece for playing chess. It's made of a purple-colored glass."
|
||||
description_info = "The Rook can move any number of vacant squares vertically or horizontally."
|
||||
icon_state = "b-rook"
|
||||
/obj/item/toy/chess/knight_white
|
||||
name = "blue knight"
|
||||
desc = "A large knight piece for playing chess. It's made of a blue-colored glass. Sadly, you can't ride it."
|
||||
description_info = "The Knight can either move two squares horizontally and one square vertically or two squares vertically and one square horizontally. The knight's movement can also be viewed as an 'L' laid out at any horizontal or vertical angle."
|
||||
icon_state = "w-knight"
|
||||
/obj/item/toy/chess/knight_black
|
||||
name = "purple knight"
|
||||
desc = "A large knight piece for playing chess. It's made of a purple-colored glass. 'Just a flesh wound.'"
|
||||
description_info = "The Knight can either move two squares horizontally and one square vertically or two squares vertically and one square horizontally. The knight's movement can also be viewed as an 'L' laid out at any horizontal or vertical angle."
|
||||
icon_state = "b-knight"
|
||||
/obj/item/toy/chess/bishop_white
|
||||
name = "blue bishop"
|
||||
desc = "A large bishop piece for playing chess. It's made of a blue-colored glass."
|
||||
description_info = "The Bishop can move any number of vacant squares in any diagonal direction."
|
||||
icon_state = "w-bishop"
|
||||
/obj/item/toy/chess/bishop_black
|
||||
name = "purple bishop"
|
||||
desc = "A large bishop piece for playing chess. It's made of a purple-colored glass."
|
||||
description_info = "The Bishop can move any number of vacant squares in any diagonal direction."
|
||||
icon_state = "b-bishop"
|
||||
/obj/item/toy/chess/queen_white
|
||||
name = "blue queen"
|
||||
desc = "A large queen piece for playing chess. It's made of a blue-colored glass."
|
||||
description_info = "The Queen can move any number of vacant squares diagonally, horizontally, or vertically."
|
||||
icon_state = "w-queen"
|
||||
/obj/item/toy/chess/queen_black
|
||||
name = "purple queen"
|
||||
desc = "A large queen piece for playing chess. It's made of a purple-colored glass."
|
||||
description_info = "The Queen can move any number of vacant squares diagonally, horizontally, or vertically."
|
||||
icon_state = "b-queen"
|
||||
/obj/item/toy/chess/king_white
|
||||
name = "blue king"
|
||||
desc = "A large king piece for playing chess. It's made of a blue-colored glass."
|
||||
description_info = "The King can move exactly one square horizontally, vertically, or diagonally. If your opponent captures this piece, you lose."
|
||||
icon_state = "w-king"
|
||||
/obj/item/toy/chess/king_black
|
||||
name = "purple king"
|
||||
desc = "A large king piece for playing chess. It's made of a purple-colored glass."
|
||||
description_info = "The King can move exactly one square horizontally, vertically, or diagonally. If your opponent captures this piece, you lose."
|
||||
icon_state = "b-king"
|
||||
@@ -9,6 +9,7 @@
|
||||
/obj/item/weapon/book/manual/engineering_construction
|
||||
name = "Station Repairs and Construction"
|
||||
icon_state ="bookEngineering"
|
||||
item_state = "book3"
|
||||
author = "Engineering Encyclopedia" // Who wrote the thing, can be changed by pen or PC. It is not automatically assigned
|
||||
title = "Station Repairs and Construction"
|
||||
|
||||
@@ -30,6 +31,7 @@
|
||||
/obj/item/weapon/book/manual/engineering_particle_accelerator
|
||||
name = "Particle Accelerator User's Guide"
|
||||
icon_state ="bookParticleAccelerator"
|
||||
item_state = "book15"
|
||||
author = "Engineering Encyclopedia" // Who wrote the thing, can be changed by pen or PC. It is not automatically assigned
|
||||
title = "Particle Accelerator User's Guide"
|
||||
|
||||
@@ -77,6 +79,7 @@
|
||||
/obj/item/weapon/book/manual/supermatter_engine
|
||||
name = "Supermatter Engine Operating Manual"
|
||||
icon_state = "bookSupermatter"
|
||||
item_state = "book15"
|
||||
author = "Central Engineering Division"
|
||||
title = "Supermatter Engine Operating Manual"
|
||||
|
||||
@@ -160,6 +163,7 @@
|
||||
/obj/item/weapon/book/manual/tesla_engine
|
||||
name = "Tesla Operating Manual"
|
||||
icon_state ="bookTesla"
|
||||
item_state = "book15"
|
||||
author = "Engineering Encyclopedia"
|
||||
title = "Tesla Engine User's Guide"
|
||||
dat = {"<html>
|
||||
@@ -229,7 +233,8 @@
|
||||
/obj/item/weapon/book/manual/rust_engine
|
||||
name = "R-UST Operating Manual"
|
||||
icon_state = "bookSupermatter"
|
||||
author = "Yumi Kruik"
|
||||
item_state = "book15"
|
||||
author = "Cindy Crawfish"
|
||||
title = "R-UST Operating Manual"
|
||||
|
||||
//R-UST guide Re-Writen by Gozulio to reflect how the R-UST actually operates.
|
||||
@@ -280,6 +285,7 @@
|
||||
/obj/item/weapon/book/manual/engineering_hacking
|
||||
name = "Hacking"
|
||||
icon_state ="bookHacking"
|
||||
item_state = "book2"
|
||||
author = "Engineering Encyclopedia" // Who wrote the thing, can be changed by pen or PC. It is not automatically assigned
|
||||
title = "Hacking"
|
||||
|
||||
@@ -302,6 +308,7 @@
|
||||
/obj/item/weapon/book/manual/engineering_singularity_safety
|
||||
name = "Singularity Safety in Special Circumstances"
|
||||
icon_state ="bookEngineeringSingularitySafety"
|
||||
item_state = "book15"
|
||||
author = "Engineering Encyclopedia" // Who wrote the thing, can be changed by pen or PC. It is not automatically assigned
|
||||
title = "Singularity Safety in Special Circumstances"
|
||||
|
||||
@@ -354,6 +361,7 @@
|
||||
/obj/item/weapon/book/manual/hydroponics_pod_people
|
||||
name = "The Diona Harvest - From Seed to Market"
|
||||
icon_state ="bookHydroponicsPodPeople"
|
||||
item_state = "book5"
|
||||
author = "Farmer John"
|
||||
title = "The Diona Harvest - From Seed to Market"
|
||||
|
||||
@@ -392,6 +400,7 @@
|
||||
/obj/item/weapon/book/manual/medical_cloning
|
||||
name = "Cloning Techniques of the 26th Century"
|
||||
icon_state ="bookCloning"
|
||||
item_state = "book9"
|
||||
author = "Medical Journal, volume 3" // Who wrote the thing, can be changed by pen or PC. It is not automatically assigned
|
||||
title = "Cloning Techniques of the 26th Century"
|
||||
|
||||
@@ -485,6 +494,7 @@
|
||||
/obj/item/weapon/book/manual/ripley_build_and_repair
|
||||
name = "APLU \"Ripley\" Construction and Operation Manual"
|
||||
icon_state ="book"
|
||||
item_state = "book"
|
||||
author = "Randall Varn, Einstein Engines Senior Mechanic" // Who wrote the thing, can be changed by pen or PC. It is not automatically assigned
|
||||
title = "APLU \"Ripley\" Construction and Operation Manual"
|
||||
|
||||
@@ -562,6 +572,7 @@
|
||||
/obj/item/weapon/book/manual/research_and_development
|
||||
name = "Research and Development 101"
|
||||
icon_state = "rdbook"
|
||||
item_state = "book7"
|
||||
author = "Dr. L. Ight"
|
||||
title = "Research and Development 101"
|
||||
|
||||
@@ -631,6 +642,7 @@
|
||||
/obj/item/weapon/book/manual/robotics_cyborgs
|
||||
name = "Cyborgs for Dummies"
|
||||
icon_state = "borgbook"
|
||||
item_state = "book1"
|
||||
author = "XISC"
|
||||
title = "Cyborgs for Dummies"
|
||||
|
||||
@@ -837,6 +849,7 @@
|
||||
name = "Corporate Regulations"
|
||||
desc = "A set of corporate guidelines for keeping law and order on privately-owned space stations."
|
||||
icon_state = "bookSpaceLaw"
|
||||
item_state = "book13"
|
||||
author = "The Company"
|
||||
title = "Corporate Regulations"
|
||||
|
||||
@@ -861,6 +874,7 @@
|
||||
name = "Medical Diagnostics Manual"
|
||||
desc = "First, do no harm. A detailed medical practitioner's guide."
|
||||
icon_state = "bookMedical"
|
||||
item_state = "book12"
|
||||
author = "Medical Department"
|
||||
title = "Medical Diagnostics Manual"
|
||||
|
||||
@@ -908,6 +922,7 @@
|
||||
/obj/item/weapon/book/manual/engineering_guide
|
||||
name = "Engineering Textbook"
|
||||
icon_state ="bookEngineering2"
|
||||
item_state = "book3"
|
||||
author = "Engineering Encyclopedia"
|
||||
title = "Engineering Textbook"
|
||||
|
||||
@@ -929,6 +944,7 @@
|
||||
/obj/item/weapon/book/manual/chef_recipes
|
||||
name = "Chef Recipes"
|
||||
icon_state = "cooked_book"
|
||||
item_state = "book16"
|
||||
author = "Victoria Ponsonby"
|
||||
title = "Chef Recipes"
|
||||
|
||||
@@ -989,6 +1005,7 @@
|
||||
name = "Barman Recipes"
|
||||
desc = "For the enterprising drink server."
|
||||
icon_state = "barbook"
|
||||
item_state = "book14"
|
||||
author = "Sir John Rose"
|
||||
title = "Barman Recipes"
|
||||
|
||||
@@ -1044,6 +1061,7 @@
|
||||
/obj/item/weapon/book/manual/detective
|
||||
name = "The Film Noir: Proper Procedures for Investigations"
|
||||
icon_state ="bookDetective"
|
||||
item_state = "book8"
|
||||
author = "The Company"
|
||||
title = "The Film Noir: Proper Procedures for Investigations"
|
||||
|
||||
@@ -1087,6 +1105,7 @@
|
||||
/obj/item/weapon/book/manual/nuclear
|
||||
name = "Fission Mailed: Nuclear Sabotage 101"
|
||||
icon_state ="bookNuclear"
|
||||
item_state = "book8"
|
||||
author = "Syndicate"
|
||||
title = "Fission Mailed: Nuclear Sabotage 101"
|
||||
|
||||
@@ -1138,6 +1157,7 @@
|
||||
/obj/item/weapon/book/manual/atmospipes
|
||||
name = "Pipes and You: Getting To Know Your Scary Tools"
|
||||
icon_state = "pipingbook"
|
||||
item_state = "book3"
|
||||
author = "Maria Crash, Senior Atmospherics Technician"
|
||||
title = "Pipes and You: Getting To Know Your Scary Tools"
|
||||
dat = {"<html>
|
||||
@@ -1246,6 +1266,7 @@
|
||||
/obj/item/weapon/book/manual/evaguide
|
||||
name = "EVA Gear and You: Not Spending All Day Inside, 2nd Edition"
|
||||
icon_state = "evabook"
|
||||
item_state = "book14"
|
||||
author = "Maria Crash, Senior Atmospherics Technician"
|
||||
title = "EVA Gear and You: Not Spending All Day Inside, 2nd Edition"
|
||||
dat = {"<html>
|
||||
|
||||
@@ -3,6 +3,10 @@
|
||||
desc = "A scroll for moving around."
|
||||
icon = 'icons/obj/wizard.dmi'
|
||||
icon_state = "scroll"
|
||||
item_icons = list(
|
||||
slot_l_hand_str = 'icons/mob/items/lefthand_books.dmi',
|
||||
slot_r_hand_str = 'icons/mob/items/righthand_books.dmi'
|
||||
)
|
||||
var/uses = 4.0
|
||||
w_class = ITEMSIZE_TINY
|
||||
item_state = "paper"
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
base_block_chance = 40
|
||||
slot_flags = SLOT_BACK
|
||||
var/brightness_on
|
||||
brightness_on = 4
|
||||
brightness_on = 6
|
||||
var/on = 0
|
||||
var/light_applied
|
||||
//var/light_overlay
|
||||
|
||||
@@ -2,6 +2,11 @@
|
||||
name = "bible"
|
||||
desc = "Apply to head repeatedly."
|
||||
icon_state ="bible"
|
||||
item_state = "bible"
|
||||
item_icons = list(
|
||||
slot_l_hand_str = 'icons/mob/items/lefthand_books.dmi',
|
||||
slot_r_hand_str = 'icons/mob/items/righthand_books.dmi'
|
||||
)
|
||||
throw_speed = 1
|
||||
throw_range = 5
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
|
||||
@@ -107,7 +107,17 @@ something, make sure it's not in one of the other lists.*/
|
||||
prob(2);/obj/item/device/camera,
|
||||
prob(3);/obj/item/device/pda,
|
||||
prob(3);/obj/item/device/radio/headset,
|
||||
prob(1);/obj/item/pizzavoucher)
|
||||
/* VOREStation Edit Start */
|
||||
prob(2);/obj/item/toy/tennis,
|
||||
prob(2);/obj/item/toy/tennis/red,
|
||||
prob(2);/obj/item/toy/tennis/yellow,
|
||||
prob(2);/obj/item/toy/tennis/green,
|
||||
prob(2);/obj/item/toy/tennis/cyan,
|
||||
prob(2);/obj/item/toy/tennis/blue,
|
||||
prob(2);/obj/item/toy/tennis/purple,
|
||||
prob(1);/obj/item/pizzavoucher
|
||||
/* VOREStation Edit End */
|
||||
)
|
||||
|
||||
/obj/random/maintenance/security
|
||||
/*Maintenance loot list. This one is for around security areas*/
|
||||
|
||||
56
code/game/objects/random/mechs.dm
Normal file
56
code/game/objects/random/mechs.dm
Normal file
@@ -0,0 +1,56 @@
|
||||
/obj/random/mech
|
||||
name = "random mech"
|
||||
desc = "This is a random single mech."
|
||||
icon = 'icons/mecha/mecha.dmi'
|
||||
icon_state = "old_durand"
|
||||
drop_get_turf = FALSE
|
||||
|
||||
//This list includes the phazon, gorilla and mauler. You might want to use something else if balance is a concern.
|
||||
/obj/random/mech/item_to_spawn()
|
||||
return pick(/obj/mecha/combat/gygax,
|
||||
/obj/mecha/combat/gygax/serenity,
|
||||
/obj/mecha/combat/gygax/dark,
|
||||
/obj/mecha/combat/marauder,
|
||||
/obj/mecha/combat/marauder/seraph,
|
||||
/obj/mecha/combat/marauder/mauler,
|
||||
/obj/mecha/medical/odysseus,
|
||||
/obj/mecha/combat/phazon,
|
||||
/obj/mecha/combat/phazon/janus,
|
||||
/obj/mecha/combat/durand,
|
||||
/obj/mecha/working/ripley,
|
||||
/obj/mecha/working/ripley/firefighter,
|
||||
/obj/mecha/working/ripley/deathripley,
|
||||
/obj/mecha/working/ripley/mining)
|
||||
|
||||
/obj/random/mech/weaker
|
||||
name = "random mech"
|
||||
desc = "This is a random single mech. Those are less potent and more common."
|
||||
icon = 'icons/mecha/mecha.dmi'
|
||||
icon_state = "old_durand"
|
||||
drop_get_turf = FALSE
|
||||
|
||||
/obj/random/mech/weaker/item_to_spawn()
|
||||
return pick(/obj/mecha/combat/gygax,
|
||||
/obj/mecha/combat/gygax/serenity,
|
||||
/obj/mecha/medical/odysseus,
|
||||
/obj/mecha/combat/durand,
|
||||
/obj/mecha/working/ripley,
|
||||
/obj/mecha/working/ripley/firefighter,
|
||||
/obj/mecha/working/ripley/deathripley,
|
||||
/obj/mecha/working/ripley/mining)
|
||||
|
||||
/obj/random/mech/old
|
||||
name = "random mech"
|
||||
desc = "This is a random single old mech."
|
||||
icon = 'icons/mecha/mecha.dmi'
|
||||
icon_state = "old_durand"
|
||||
drop_get_turf = FALSE
|
||||
|
||||
//Note that all of those are worn out and have slightly less maximal health than the standard.
|
||||
/obj/random/mech/old/item_to_spawn()
|
||||
return pick(prob(10);/obj/mecha/combat/gygax/old,
|
||||
prob(1);/obj/mecha/combat/marauder/old,
|
||||
prob(1);/obj/mecha/combat/phazon/old,
|
||||
prob(10);/obj/mecha/combat/durand/old,
|
||||
prob(15);/obj/mecha/medical/odysseus/old,
|
||||
prob(20);/obj/mecha/working/ripley/mining/old)
|
||||
@@ -65,7 +65,6 @@
|
||||
/obj/structure/closet/secure_closet/hos
|
||||
name = "head of security's locker"
|
||||
req_access = list(access_hos)
|
||||
req_access = list(access_hos)
|
||||
storage_capacity = 2.5 * MOB_MEDIUM
|
||||
closet_appearance = /decl/closet_appearance/secure_closet/security/hos
|
||||
|
||||
|
||||
@@ -192,6 +192,13 @@
|
||||
prob(2);/obj/item/weapon/storage/box/sinpockets,
|
||||
prob(2);/obj/item/weapon/storage/secure/briefcase,
|
||||
prob(2);/obj/item/clothing/under/fluff/latexmaid,
|
||||
prob(2);/obj/item/toy/tennis,
|
||||
prob(2);/obj/item/toy/tennis/red,
|
||||
prob(2);/obj/item/toy/tennis/yellow,
|
||||
prob(2);/obj/item/toy/tennis/green,
|
||||
prob(2);/obj/item/toy/tennis/cyan,
|
||||
prob(2);/obj/item/toy/tennis/blue,
|
||||
prob(2);/obj/item/toy/tennis/purple,
|
||||
prob(1);/obj/item/clothing/glasses/sunglasses,
|
||||
prob(1);/obj/item/clothing/glasses/welding,
|
||||
prob(1);/obj/item/clothing/gloves/yellow,
|
||||
|
||||
@@ -721,6 +721,54 @@ var/list/floor_decals = list()
|
||||
/obj/effect/floor_decal/sign/p
|
||||
icon_state = "white_p"
|
||||
|
||||
/obj/effect/floor_decal/sign/small_a
|
||||
icon_state = "small_a"
|
||||
|
||||
/obj/effect/floor_decal/sign/small_b
|
||||
icon_state = "small_b"
|
||||
|
||||
/obj/effect/floor_decal/sign/small_c
|
||||
icon_state = "small_c"
|
||||
|
||||
/obj/effect/floor_decal/sign/small_d
|
||||
icon_state = "small_d"
|
||||
|
||||
/obj/effect/floor_decal/sign/small_e
|
||||
icon_state = "small_e"
|
||||
|
||||
/obj/effect/floor_decal/sign/small_f
|
||||
icon_state = "small_f"
|
||||
|
||||
/obj/effect/floor_decal/sign/small_g
|
||||
icon_state = "small_g"
|
||||
|
||||
/obj/effect/floor_decal/sign/small_h
|
||||
icon_state = "small_h"
|
||||
|
||||
/obj/effect/floor_decal/sign/small_1
|
||||
icon_state = "small_1"
|
||||
|
||||
/obj/effect/floor_decal/sign/small_2
|
||||
icon_state = "small_2"
|
||||
|
||||
/obj/effect/floor_decal/sign/small_3
|
||||
icon_state = "small_3"
|
||||
|
||||
/obj/effect/floor_decal/sign/small_4
|
||||
icon_state = "small_4"
|
||||
|
||||
/obj/effect/floor_decal/sign/small_5
|
||||
icon_state = "small_5"
|
||||
|
||||
/obj/effect/floor_decal/sign/small_6
|
||||
icon_state = "small_6"
|
||||
|
||||
/obj/effect/floor_decal/sign/small_7
|
||||
icon_state = "small_7"
|
||||
|
||||
/obj/effect/floor_decal/sign/small_8
|
||||
icon_state = "small_8"
|
||||
|
||||
/obj/effect/floor_decal/sign/dock
|
||||
icon_state = "white_d"
|
||||
|
||||
|
||||
@@ -6,4 +6,4 @@
|
||||
create_mob_html = file2text('html/create_object.html')
|
||||
create_mob_html = replacetext(create_mob_html, "null /* object types */", "\"[mobjs]\"")
|
||||
|
||||
user << browse(replacetext(create_mob_html, "/* ref src */", "\ref[src]"), "window=create_mob;size=425x475")
|
||||
user << browse(replacetext(create_mob_html, "/* ref src */", "\ref[src]"), "window=create_mob;size=680x600")
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
create_object_html = file2text('html/create_object.html')
|
||||
create_object_html = replacetext(create_object_html, "null /* object types */", "\"[objectjs]\"")
|
||||
|
||||
user << browse(replacetext(create_object_html, "/* ref src */", "\ref[src]"), "window=create_object;size=425x475")
|
||||
user << browse(replacetext(create_object_html, "/* ref src */", "\ref[src]"), "window=create_object;size=680x600")
|
||||
|
||||
|
||||
/datum/admins/proc/quick_create_object(var/mob/user)
|
||||
@@ -26,4 +26,4 @@
|
||||
quick_create_object_html = file2text('html/create_object.html')
|
||||
quick_create_object_html = replacetext(quick_create_object_html, "null /* object types */", "\"[objectjs]\"")
|
||||
|
||||
user << browse(replacetext(quick_create_object_html, "/* ref src */", "\ref[src]"), "window=quick_create_object;size=425x475")
|
||||
user << browse(replacetext(quick_create_object_html, "/* ref src */", "\ref[src]"), "window=quick_create_object;size=680x600")
|
||||
|
||||
@@ -6,4 +6,4 @@
|
||||
create_turf_html = file2text('html/create_object.html')
|
||||
create_turf_html = replacetext(create_turf_html, "null /* object types */", "\"[turfjs]\"")
|
||||
|
||||
user << browse(replacetext(create_turf_html, "/* ref src */", "\ref[src]"), "window=create_turf;size=425x475")
|
||||
user << browse(replacetext(create_turf_html, "/* ref src */", "\ref[src]"), "window=create_turf;size=680x600")
|
||||
|
||||
@@ -16,6 +16,9 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
S["hair_green"] >> pref.g_hair
|
||||
S["hair_blue"] >> pref.b_hair
|
||||
S["facial_red"] >> pref.r_facial
|
||||
S["grad_red"] >> pref.r_grad
|
||||
S["grad_green"] >> pref.g_grad
|
||||
S["grad_blue"] >> pref.b_grad
|
||||
S["facial_green"] >> pref.g_facial
|
||||
S["facial_blue"] >> pref.b_facial
|
||||
S["skin_tone"] >> pref.s_tone
|
||||
@@ -24,6 +27,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
S["skin_blue"] >> pref.b_skin
|
||||
S["hair_style_name"] >> pref.h_style
|
||||
S["facial_style_name"] >> pref.f_style
|
||||
S["grad_style_name"] >> pref.grad_style
|
||||
S["eyes_red"] >> pref.r_eyes
|
||||
S["eyes_green"] >> pref.g_eyes
|
||||
S["eyes_blue"] >> pref.b_eyes
|
||||
@@ -50,6 +54,9 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
S["hair_red"] << pref.r_hair
|
||||
S["hair_green"] << pref.g_hair
|
||||
S["hair_blue"] << pref.b_hair
|
||||
S["grad_red"] << pref.r_grad
|
||||
S["grad_green"] << pref.g_grad
|
||||
S["grad_blue"] << pref.b_grad
|
||||
S["facial_red"] << pref.r_facial
|
||||
S["facial_green"] << pref.g_facial
|
||||
S["facial_blue"] << pref.b_facial
|
||||
@@ -59,6 +66,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
S["skin_blue"] << pref.b_skin
|
||||
S["hair_style_name"] << pref.h_style
|
||||
S["facial_style_name"] << pref.f_style
|
||||
S["grad_style_name"] << pref.grad_style
|
||||
S["eyes_red"] << pref.r_eyes
|
||||
S["eyes_green"] << pref.g_eyes
|
||||
S["eyes_blue"] << pref.b_eyes
|
||||
@@ -86,6 +94,9 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
pref.r_hair = sanitize_integer(pref.r_hair, 0, 255, initial(pref.r_hair))
|
||||
pref.g_hair = sanitize_integer(pref.g_hair, 0, 255, initial(pref.g_hair))
|
||||
pref.b_hair = sanitize_integer(pref.b_hair, 0, 255, initial(pref.b_hair))
|
||||
pref.r_grad = sanitize_integer(pref.r_grad, 0, 255, initial(pref.r_grad))
|
||||
pref.g_grad = sanitize_integer(pref.g_grad, 0, 255, initial(pref.g_grad))
|
||||
pref.b_grad = sanitize_integer(pref.b_grad, 0, 255, initial(pref.b_grad))
|
||||
pref.r_facial = sanitize_integer(pref.r_facial, 0, 255, initial(pref.r_facial))
|
||||
pref.g_facial = sanitize_integer(pref.g_facial, 0, 255, initial(pref.g_facial))
|
||||
pref.b_facial = sanitize_integer(pref.b_facial, 0, 255, initial(pref.b_facial))
|
||||
@@ -95,6 +106,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
pref.b_skin = sanitize_integer(pref.b_skin, 0, 255, initial(pref.b_skin))
|
||||
pref.h_style = sanitize_inlist(pref.h_style, hair_styles_list, initial(pref.h_style))
|
||||
pref.f_style = sanitize_inlist(pref.f_style, facial_hair_styles_list, initial(pref.f_style))
|
||||
pref.grad_style = sanitize_inlist(pref.grad_style, GLOB.hair_gradients, initial(pref.grad_style))
|
||||
pref.r_eyes = sanitize_integer(pref.r_eyes, 0, 255, initial(pref.r_eyes))
|
||||
pref.g_eyes = sanitize_integer(pref.g_eyes, 0, 255, initial(pref.g_eyes))
|
||||
pref.b_eyes = sanitize_integer(pref.b_eyes, 0, 255, initial(pref.b_eyes))
|
||||
@@ -118,6 +130,9 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
character.r_hair = pref.r_hair
|
||||
character.g_hair = pref.g_hair
|
||||
character.b_hair = pref.b_hair
|
||||
character.r_grad = pref.r_grad
|
||||
character.g_grad = pref.g_grad
|
||||
character.b_grad = pref.b_grad
|
||||
character.f_style = pref.f_style
|
||||
character.r_facial = pref.r_facial
|
||||
character.g_facial = pref.g_facial
|
||||
@@ -128,6 +143,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
character.s_tone = pref.s_tone
|
||||
character.h_style = pref.h_style
|
||||
character.f_style = pref.f_style
|
||||
character.grad_style= pref.grad_style
|
||||
character.b_type = pref.b_type
|
||||
character.synth_color = pref.synth_color
|
||||
character.r_synth = pref.r_synth
|
||||
@@ -344,6 +360,10 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
. += "<a href='?src=\ref[src];hair_color=1'>Change Color</a> [color_square(pref.r_hair, pref.g_hair, pref.b_hair)] "
|
||||
. += " Style: <a href='?src=\ref[src];hair_style_left=[pref.h_style]'><</a> <a href='?src=\ref[src];hair_style_right=[pref.h_style]''>></a> <a href='?src=\ref[src];hair_style=1'>[pref.h_style]</a><br>" //The <</a> & ></a> in this line is correct-- those extra characters are the arrows you click to switch between styles.
|
||||
|
||||
. += "<b>Gradient</b><br>"
|
||||
. += "<a href='?src=\ref[src];grad_color=1'>Change Color</a> [color_square(pref.r_grad, pref.g_grad, pref.b_grad)] "
|
||||
. += " Style: <a href='?src=\ref[src];grad_style_left=[pref.grad_style]'><</a> <a href='?src=\ref[src];grad_style_right=[pref.grad_style]''>></a> <a href='?src=\ref[src];grad_style=1'>[pref.grad_style]</a><br>"
|
||||
|
||||
. += "<br><b>Facial</b><br>"
|
||||
if(has_flag(mob_species, HAS_HAIR_COLOR))
|
||||
. += "<a href='?src=\ref[src];facial_color=1'>Change Color</a> [color_square(pref.r_facial, pref.g_facial, pref.b_facial)] "
|
||||
@@ -473,6 +493,16 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
pref.b_hair = hex2num(copytext(new_hair, 6, 8))
|
||||
return TOPIC_REFRESH_UPDATE_PREVIEW
|
||||
|
||||
else if(href_list["grad_color"])
|
||||
if(!has_flag(mob_species, HAS_HAIR_COLOR))
|
||||
return TOPIC_NOACTION
|
||||
var/new_grad = input(user, "Choose your character's secondary hair color:", "Character Preference", rgb(pref.r_grad, pref.g_grad, pref.b_grad)) as color|null
|
||||
if(new_grad && has_flag(mob_species, HAS_HAIR_COLOR) && CanUseTopic(user))
|
||||
pref.r_grad = hex2num(copytext(new_grad, 2, 4))
|
||||
pref.g_grad = hex2num(copytext(new_grad, 4, 6))
|
||||
pref.b_grad = hex2num(copytext(new_grad, 6, 8))
|
||||
return TOPIC_REFRESH_UPDATE_PREVIEW
|
||||
|
||||
else if(href_list["hair_style"])
|
||||
var/list/valid_hairstyles = pref.get_valid_hairstyles()
|
||||
|
||||
@@ -481,6 +511,14 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
pref.h_style = new_h_style
|
||||
return TOPIC_REFRESH_UPDATE_PREVIEW
|
||||
|
||||
else if(href_list["grad_style"])
|
||||
var/list/valid_gradients = GLOB.hair_gradients
|
||||
|
||||
var/new_grad_style = input(user, "Choose a color pattern for your hair:", "Character Preference", pref.grad_style) as null|anything in valid_gradients
|
||||
if(new_grad_style && CanUseTopic(user))
|
||||
pref.grad_style = new_grad_style
|
||||
return TOPIC_REFRESH_UPDATE_PREVIEW
|
||||
|
||||
else if(href_list["hair_style_left"])
|
||||
var/H = href_list["hair_style_left"]
|
||||
var/list/valid_hairstyles = pref.get_valid_hairstyles()
|
||||
@@ -939,6 +977,8 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
dat += "</br><b>Does not have a respiratory system.</b>"
|
||||
if(current_species.flags & NO_SCAN)
|
||||
dat += "</br><b>Does not have DNA.</b>"
|
||||
if(current_species.flags & NO_DEFIB)
|
||||
dat += "</br><b>Cannot be defibrillated.</b>"
|
||||
if(current_species.flags & NO_PAIN)
|
||||
dat += "</br><b>Does not feel pain.</b>"
|
||||
if(current_species.flags & NO_SLIP)
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
/datum/gear/ball
|
||||
display_name = "tennis ball selection"
|
||||
description = "Choose from a num- BALL!"
|
||||
path = /obj/item/toy/tennis
|
||||
|
||||
/datum/gear/ball/New()
|
||||
..()
|
||||
var/list/balls = list()
|
||||
for(var/ball in typesof(/obj/item/toy/tennis/))
|
||||
var/obj/item/toy/tennis/ball_type = ball
|
||||
balls[initial(ball_type.name)] = ball_type
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(balls))
|
||||
@@ -37,6 +37,10 @@ datum/preferences
|
||||
var/r_hair = 0 //Hair color
|
||||
var/g_hair = 0 //Hair color
|
||||
var/b_hair = 0 //Hair color
|
||||
var/grad_style = "none" //Gradient style
|
||||
var/r_grad = 0 //Gradient color
|
||||
var/g_grad = 0 //Gradient color
|
||||
var/b_grad = 0 //Gradient color
|
||||
var/f_style = "Shaved" //Face hair type
|
||||
var/r_facial = 0 //Face hair color
|
||||
var/g_facial = 0 //Face hair color
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//Mining suit
|
||||
//Advanced Exploration Suit
|
||||
/obj/item/weapon/rig/robotics
|
||||
name = "advanced suit control belt"
|
||||
suit_type = "advanced suit"
|
||||
suit_type = "advanced"
|
||||
desc = "A lightweight suit combining the utility of a RIG with the wearability of a voidsuit."
|
||||
icon_state = "void_explorer2"
|
||||
slot_flags = SLOT_BELT
|
||||
@@ -14,8 +14,8 @@
|
||||
rigsuit_max_pressure = 8 * ONE_ATMOSPHERE
|
||||
rigsuit_min_pressure = 0
|
||||
|
||||
chest_type = /obj/item/clothing/suit/space/rig
|
||||
helm_type = /obj/item/clothing/head/helmet/space/rig
|
||||
chest_type = /obj/item/clothing/suit/space/rig/advsuit
|
||||
helm_type = /obj/item/clothing/head/helmet/space/rig/advsuit
|
||||
boot_type = null
|
||||
glove_type = null
|
||||
cell_type = null
|
||||
@@ -27,3 +27,12 @@
|
||||
|
||||
req_access = list()
|
||||
req_one_access = list()
|
||||
|
||||
/obj/item/clothing/head/helmet/space/rig/advsuit
|
||||
name = "suit helmet"
|
||||
|
||||
/obj/item/clothing/suit/space/rig/advsuit
|
||||
name = "voidsuit"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS|FEET
|
||||
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS|FEET
|
||||
cold_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS|FEET
|
||||
@@ -158,17 +158,75 @@
|
||||
//Medical Streamlined Voidsuit
|
||||
/obj/item/clothing/head/helmet/space/void/medical/alt
|
||||
name = "streamlined medical voidsuit helmet"
|
||||
desc = "A trendy, lightly radiation-shielded voidsuit helmet trimmed in a sleek blue."
|
||||
desc = "A trendy, lightly radiation-shielded voidsuit helmet trimmed in a sleek blue. It possesses advanced autoadaptive systems and doesn't need to be cycled to change species fit for most large humanoids."
|
||||
icon_state = "rig0-medicalalt"
|
||||
armor = list(melee = 20, bullet = 5, laser = 20,energy = 5, bomb = 15, bio = 100, rad = 30)
|
||||
light_overlay = "helmet_light_dual_blue"
|
||||
species_restricted = list("exclude",SPECIES_DIONA,SPECIES_VOX,SPECIES_TESHARI) //this thing can autoadapt to most species, but diona/vox are too weird, and tesh are too small
|
||||
no_cycle = TRUE
|
||||
|
||||
/obj/item/clothing/head/helmet/space/void/medical/alt
|
||||
sprite_sheets = list(
|
||||
SPECIES_HUMAN = 'icons/mob/head.dmi',
|
||||
SPECIES_TAJ = 'icons/mob/species/tajaran/helmet.dmi',
|
||||
SPECIES_SKRELL = 'icons/mob/species/skrell/helmet.dmi',
|
||||
SPECIES_UNATHI = 'icons/mob/species/unathi/helmet.dmi'
|
||||
)
|
||||
sprite_sheets_obj = list(
|
||||
SPECIES_TAJ = 'icons/obj/clothing/hats.dmi',
|
||||
SPECIES_SKRELL = 'icons/obj/clothing/hats.dmi',
|
||||
SPECIES_UNATHI = 'icons/obj/clothing/hats.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/void/medical/alt/tesh
|
||||
name = "streamlined teshari medical voidsuit helmet"
|
||||
desc = "A trendy, lightly radiation-shielded voidsuit helmet trimmed in a sleek blue. This teshari-specific model lacks the autoadaption feature due to the reduced amount of materials."
|
||||
species_restricted = list(SPECIES_TESHARI)
|
||||
no_cycle = FALSE //no autoadaption means it can be refitted
|
||||
|
||||
/obj/item/clothing/head/helmet/space/void/medical/alt/tesh
|
||||
sprite_sheets = list(
|
||||
SPECIES_TESHARI = 'icons/mob/species/seromi/head.dmi'
|
||||
)
|
||||
sprite_sheets_obj = list(
|
||||
SPECIES_TESHARI = 'icons/obj/clothing/hats.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/suit/space/void/medical/alt
|
||||
icon_state = "rig-medicalalt"
|
||||
name = "streamlined medical voidsuit"
|
||||
desc = "A more recent model of Vey-Med voidsuit, exchanging physical protection for fully unencumbered movement and a complete range of motion."
|
||||
desc = "A more recent model of Vey-Med voidsuit, exchanging physical protection for fully unencumbered movement and a complete range of motion. It possesses advanced autoadaptive systems and doesn't need to be cycled to change species fit for most large humanoids."
|
||||
icon_state = "rig-medicalalt"
|
||||
slowdown = 0
|
||||
armor = list(melee = 20, bullet = 5, laser = 20,energy = 5, bomb = 15, bio = 100, rad = 30)
|
||||
species_restricted = list("exclude",SPECIES_DIONA,SPECIES_VOX,SPECIES_TESHARI) //this thing can autoadapt, but diona/vox are too weird, and tesh are too small
|
||||
no_cycle = TRUE
|
||||
|
||||
/obj/item/clothing/suit/space/void/medical/alt
|
||||
sprite_sheets = list(
|
||||
SPECIES_HUMAN = 'icons/mob/spacesuit.dmi',
|
||||
SPECIES_TAJ = 'icons/mob/species/tajaran/suit.dmi',
|
||||
SPECIES_SKRELL = 'icons/mob/species/skrell/suit.dmi',
|
||||
SPECIES_UNATHI = 'icons/mob/species/unathi/suit.dmi'
|
||||
)
|
||||
sprite_sheets_obj = list(
|
||||
SPECIES_TAJ = 'icons/obj/clothing/spacesuits.dmi',
|
||||
SPECIES_SKRELL = 'icons/obj/clothing/spacesuits.dmi',
|
||||
SPECIES_UNATHI = 'icons/obj/clothing/spacesuits.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/suit/space/void/medical/alt/tesh
|
||||
name = "streamlined teshari medical voidsuit"
|
||||
desc = "A more recent model of Vey-Med voidsuit, exchanging physical protection for fully unencumbered movement and a complete range of motion. This teshari-specific model lacks the autoadaption feature due to the reduced amount of materials."
|
||||
species_restricted = list(SPECIES_TESHARI)
|
||||
no_cycle = FALSE //no autoadaption means it can be refitted
|
||||
|
||||
/obj/item/clothing/suit/space/void/medical/alt/tesh
|
||||
sprite_sheets = list(
|
||||
SPECIES_TESHARI = 'icons/mob/species/seromi/suit.dmi'
|
||||
)
|
||||
sprite_sheets_obj = list(
|
||||
SPECIES_TESHARI = 'icons/obj/clothing/spacesuits.dmi'
|
||||
)
|
||||
|
||||
//Security
|
||||
/obj/item/clothing/head/helmet/space/void/security
|
||||
|
||||
49
code/modules/clothing/spacesuits/void/station_vr.dm
Normal file
49
code/modules/clothing/spacesuits/void/station_vr.dm
Normal file
@@ -0,0 +1,49 @@
|
||||
/obj/item/clothing/head/helmet/space/void/medical/alt
|
||||
sprite_sheets = list(
|
||||
SPECIES_HUMAN = 'icons/mob/head.dmi',
|
||||
SPECIES_TAJ = 'icons/mob/species/tajaran/helmet.dmi',
|
||||
SPECIES_SKRELL = 'icons/mob/species/skrell/helmet.dmi',
|
||||
SPECIES_UNATHI = 'icons/mob/species/unathi/helmet.dmi',
|
||||
SPECIES_XENOHYBRID = 'icons/mob/species/unathi/helmet.dmi',
|
||||
SPECIES_AKULA = 'icons/mob/species/unathi/helmet.dmi',
|
||||
SPECIES_SERGAL = 'icons/mob/species/unathi/helmet.dmi',
|
||||
SPECIES_VULPKANIN = 'icons/mob/species/vulpkanin/helmet.dmi',
|
||||
SPECIES_ZORREN_HIGH = 'icons/mob/species/vulpkanin/helmet.dmi',
|
||||
SPECIES_FENNEC = 'icons/mob/species/vulpkanin/helmet.dmi'
|
||||
)
|
||||
sprite_sheets_obj = list(
|
||||
SPECIES_TAJ = 'icons/obj/clothing/hats.dmi',
|
||||
SPECIES_SKRELL = 'icons/obj/clothing/hats.dmi',
|
||||
SPECIES_UNATHI = 'icons/obj/clothing/hats.dmi',
|
||||
SPECIES_XENOHYBRID = 'icons/obj/clothing/hats.dmi',
|
||||
SPECIES_AKULA = 'icons/obj/clothing/hats.dmi',
|
||||
SPECIES_SERGAL = 'icons/obj/clothing/hats.dmi',
|
||||
SPECIES_VULPKANIN = 'icons/obj/clothing/hats.dmi',
|
||||
SPECIES_ZORREN_HIGH = 'icons/obj/clothing/hats.dmi',
|
||||
SPECIES_FENNEC = 'icons/obj/clothing/hats.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/suit/space/void/medical/alt
|
||||
sprite_sheets = list(
|
||||
SPECIES_HUMAN = 'icons/mob/spacesuit.dmi',
|
||||
SPECIES_TAJ = 'icons/mob/species/tajaran/suit.dmi',
|
||||
SPECIES_SKRELL = 'icons/mob/species/skrell/suit.dmi',
|
||||
SPECIES_UNATHI = 'icons/mob/species/unathi/suit.dmi',
|
||||
SPECIES_XENOHYBRID = 'icons/mob/species/unathi/suit.dmi',
|
||||
SPECIES_AKULA = 'icons/mob/species/akula/suit_vr.dmi',
|
||||
SPECIES_SERGAL = 'icons/mob/species/sergal/suit_vr.dmi',
|
||||
SPECIES_VULPKANIN = 'icons/mob/species/vulpkanin/suit.dmi',
|
||||
SPECIES_ZORREN_HIGH = 'icons/mob/species/vulpkanin/suit.dmi',
|
||||
SPECIES_FENNEC = 'icons/mob/species/vulpkanin/suit.dmi'
|
||||
)
|
||||
sprite_sheets_obj = list(
|
||||
SPECIES_TAJ = 'icons/obj/clothing/spacesuits.dmi',
|
||||
SPECIES_SKRELL = 'icons/obj/clothing/spacesuits.dmi',
|
||||
SPECIES_UNATHI = 'icons/obj/clothing/spacesuits.dmi',
|
||||
SPECIES_XENOHYBRID = 'icons/obj/clothing/spacesuits.dmi',
|
||||
SPECIES_AKULA = 'icons/obj/clothing/spacesuits.dmi',
|
||||
SPECIES_SERGAL = 'icons/obj/clothing/spacesuits.dmi',
|
||||
SPECIES_VULPKANIN = 'icons/obj/clothing/spacesuits.dmi',
|
||||
SPECIES_ZORREN_HIGH = 'icons/obj/clothing/spacesuits.dmi',
|
||||
SPECIES_FENNEC = 'icons/obj/clothing/spacesuits.dmi'
|
||||
)
|
||||
@@ -28,6 +28,7 @@
|
||||
)
|
||||
|
||||
light_overlay = "helmet_light"
|
||||
var/no_cycle = FALSE //stop this item from being put in a cycler
|
||||
|
||||
/obj/item/clothing/suit/space/void
|
||||
name = "voidsuit"
|
||||
@@ -67,6 +68,9 @@
|
||||
var/obj/item/weapon/tank/tank = null // Deployable tank, if any.
|
||||
var/obj/item/device/suit_cooling_unit/cooler = null// Cooling unit, for FBPs. Cannot be installed alongside a tank.
|
||||
|
||||
//Cycler settings
|
||||
var/no_cycle = FALSE //stop this item from being put in a cycler
|
||||
|
||||
/obj/item/clothing/suit/space/void/examine(user)
|
||||
. = ..()
|
||||
for(var/obj/item/I in list(helmet,boots,tank,cooler))
|
||||
|
||||
@@ -42,4 +42,4 @@
|
||||
area_names |= grub_area.name
|
||||
if(area_names.len)
|
||||
var/english_list = english_list(area_names)
|
||||
command_announcement.Announce("Sensors have narrowed down remaining active solargrubs to the followng areas: [english_list]", "Lifesign Alert", new_sound = 'sound/AI/aliens.ogg')
|
||||
command_announcement.Announce("Sensors have narrowed down remaining active solargrubs to the followng areas: [english_list]", "Lifesign Alert")
|
||||
|
||||
@@ -62,6 +62,7 @@
|
||||
"Theatre" = new/datum/holodeck_program(/area/holodeck/source_theatre),
|
||||
"Meetinghall" = new/datum/holodeck_program(/area/holodeck/source_meetinghall),
|
||||
"Courtroom" = new/datum/holodeck_program(/area/holodeck/source_courtroom, list('sound/music/traitor.ogg')),
|
||||
"Chessboard" = new/datum/holodeck_program(/area/holodeck/source_chess),
|
||||
"Turn Off" = new/datum/holodeck_program(/area/holodeck/source_plating, list())
|
||||
)
|
||||
|
||||
|
||||
@@ -111,6 +111,18 @@
|
||||
if(prob(10))
|
||||
add_overlay("asteroid[rand(0,9)]")
|
||||
|
||||
/turf/simulated/floor/holofloor/bmarble
|
||||
name = "marble"
|
||||
icon = 'icons/turf/flooring/misc.dmi'
|
||||
icon_state = "darkmarble"
|
||||
initial_flooring = /decl/flooring/bmarble
|
||||
|
||||
/turf/simulated/floor/holofloor/wmarble
|
||||
name = "marble"
|
||||
icon = 'icons/turf/flooring/misc.dmi'
|
||||
icon_state = "lightmarble"
|
||||
initial_flooring = /decl/flooring/wmarble
|
||||
|
||||
/obj/structure/holostool
|
||||
name = "stool"
|
||||
desc = "Apply butt."
|
||||
|
||||
@@ -167,6 +167,11 @@ Book Cart End
|
||||
name = "book"
|
||||
icon = 'icons/obj/library.dmi'
|
||||
icon_state ="book"
|
||||
item_icons = list(
|
||||
slot_l_hand_str = 'icons/mob/items/lefthand_books.dmi',
|
||||
slot_r_hand_str = 'icons/mob/items/righthand_books.dmi'
|
||||
)
|
||||
item_state = "book"
|
||||
throw_speed = 1
|
||||
throw_range = 5
|
||||
flags = NOCONDUCT
|
||||
|
||||
@@ -447,7 +447,8 @@ datum/borrowbook // Datum used to keep track of who has borrowed what when and f
|
||||
B.title = title
|
||||
B.author = author
|
||||
B.dat = content
|
||||
B.icon_state = "book[rand(1,7)]"
|
||||
B.icon_state = "book[rand(1,16)]"
|
||||
B.item_state = B.icon_state
|
||||
src.visible_message("[src]'s printer hums as it produces a completely bound book. How did it do that?")
|
||||
break
|
||||
if(href_list["orderbyid"])
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
desc = "Contains useful information about the world around you. It seems to have been written for travelers to the Borealis system, human or not. It also \
|
||||
has the words 'Don't Panic' in small, friendly letters on the cover." //YW Edit
|
||||
icon_state = "codex"
|
||||
item_state = "book4"
|
||||
unique = TRUE
|
||||
var/datum/codex_tree/tree = null
|
||||
var/root_type = /datum/lore/codex/category/main_borealis_lore //YW EDIT
|
||||
@@ -30,6 +31,7 @@
|
||||
name = "A Buyer's Guide to Artificial Bodies"
|
||||
desc = "Recommended reading for the newly cyborgified, new positronics, and the upwardly-mobile FBP."
|
||||
icon_state = "codex_robutt"
|
||||
item_state = "book6"
|
||||
root_type = /datum/lore/codex/category/main_robutts
|
||||
libcategory = "Reference"
|
||||
|
||||
@@ -37,6 +39,7 @@
|
||||
name = "Daedalus Pocket Newscaster"
|
||||
desc = "A regularly-updating compendium of articles on current events. Essential for new arrivals in the Borealis system and anyone interested in politics." //YW Edit
|
||||
icon_state = "newscodex"
|
||||
item_state = "book1"
|
||||
w_class = ITEMSIZE_SMALL
|
||||
root_type = /datum/lore/codex/category/main_news
|
||||
libcategory = "Reference"
|
||||
@@ -49,6 +52,7 @@
|
||||
desc = "Contains large amounts of information on Standard Operating Procedure, Corporate Regulations, and important regional laws. The best friend of \
|
||||
Internal Affairs."
|
||||
icon_state = "corp_regs"
|
||||
item_state = "book10"
|
||||
root_type = /datum/lore/codex/category/main_corp_regs
|
||||
throwforce = 5 // Throw the book at 'em.
|
||||
libcategory = "Reference"
|
||||
|
||||
@@ -59,12 +59,12 @@
|
||||
default_apply_parts()
|
||||
cell = default_use_hicell()
|
||||
|
||||
/obj/machinery/mining/drill/loaded
|
||||
cell = /obj/item/weapon/cell/high
|
||||
|
||||
/obj/machinery/mining/drill/get_cell()
|
||||
return cell
|
||||
|
||||
/obj/machinery/mining/drill/loaded
|
||||
cell = /obj/item/weapon/cell/high
|
||||
|
||||
/obj/machinery/mining/drill/process()
|
||||
|
||||
if(need_player_check)
|
||||
|
||||
6
code/modules/mob/living/carbon/human/gradient.dm
Normal file
6
code/modules/mob/living/carbon/human/gradient.dm
Normal file
@@ -0,0 +1,6 @@
|
||||
GLOBAL_LIST_INIT(hair_gradients, list(
|
||||
"None" = "none",
|
||||
"Fade (Up)" = "fadeup",
|
||||
"Fade (Down)" = "fadedown",
|
||||
"Vertical Split" = "vsplit"
|
||||
))
|
||||
@@ -289,6 +289,20 @@
|
||||
else
|
||||
..()
|
||||
|
||||
/mob/living/carbon/human/adjustHalLoss(var/amount)
|
||||
if(species.flags & NO_PAIN)
|
||||
halloss = 0
|
||||
else
|
||||
if(amount > 0) //only multiply it by the mod if it's positive, or else it takes longer to fade too!
|
||||
amount = amount*species.pain_mod
|
||||
..(amount)
|
||||
|
||||
/mob/living/carbon/human/setHalLoss(var/amount)
|
||||
if(species.flags & NO_PAIN)
|
||||
halloss = 0
|
||||
else
|
||||
..()
|
||||
|
||||
/mob/living/carbon/human/getToxLoss()
|
||||
if(species.flags & NO_POISON)
|
||||
toxloss = 0
|
||||
|
||||
@@ -5,6 +5,10 @@
|
||||
var/b_hair = 0
|
||||
var/h_style = "Bald"
|
||||
|
||||
var/r_grad = 0
|
||||
var/g_grad = 0
|
||||
var/b_grad = 0
|
||||
var/grad_style = "none"
|
||||
//Facial hair colour and style
|
||||
var/r_facial = 0
|
||||
var/g_facial = 0
|
||||
|
||||
@@ -200,6 +200,9 @@ Variables you may want to make use of are:
|
||||
/datum/species/event1/proc/toggle_cloning()
|
||||
flags ^= NO_SCAN
|
||||
|
||||
/datum/species/event1/proc/toggle_defibbing()
|
||||
flags ^= NO_DEFIB
|
||||
|
||||
/datum/species/event1/proc/toggle_pain()
|
||||
flags ^= NO_PAIN
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
remains_type = /obj/effect/decal/cleanable/ash
|
||||
death_message = "dissolves into ash..."
|
||||
|
||||
flags = NO_SCAN | NO_SLIP | NO_POISON | NO_MINOR_CUT
|
||||
flags = NO_SCAN | NO_SLIP | NO_POISON | NO_MINOR_CUT | NO_DEFIB
|
||||
spawn_flags = SPECIES_IS_RESTRICTED
|
||||
|
||||
genders = list(NEUTER)
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
max_age = 110
|
||||
health_hud_intensity = 1.5
|
||||
|
||||
flags = NO_SCAN | NO_PAIN | NO_SLIP | NO_POISON | NO_MINOR_CUT | NO_BLOOD | UNDEAD
|
||||
flags = NO_SCAN | NO_PAIN | NO_SLIP | NO_POISON | NO_MINOR_CUT | NO_BLOOD | UNDEAD | NO_DEFIB
|
||||
spawn_flags = SPECIES_IS_RESTRICTED
|
||||
appearance_flags = null
|
||||
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
poison_type = "oxygen"
|
||||
siemens_coefficient = 0.2
|
||||
|
||||
flags = NO_SCAN
|
||||
flags = NO_SCAN | NO_DEFIB
|
||||
appearance_flags = HAS_EYE_COLOR | HAS_HAIR_COLOR
|
||||
|
||||
blood_color = "#9066BD"
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
/datum/species/vox
|
||||
default_language = LANGUAGE_GALCOM
|
||||
speech_sounds = list() // Remove obnoxious noises on every single 'say'. Should really only be a thing for event-exclusive species like benos.
|
||||
@@ -95,6 +95,7 @@
|
||||
var/chemOD_threshold = 1 // Multiplier to overdose threshold; lower = easier overdosing
|
||||
var/chemOD_mod = 1 // Damage modifier for overdose; higher = more damage from ODs
|
||||
var/alcohol_mod = 1 // Multiplier to alcohol strength; 0.5 = half, 0 = no effect at all, 2 = double, etc.
|
||||
var/pain_mod = 1 // Multiplier to pain effects; 0.5 = half, 0 = no effect (equal to NO_PAIN, really), 2 = double, etc.
|
||||
// set below is EMP interactivity for nonsynth carbons
|
||||
var/emp_sensitivity = 0 // bitflag. valid flags are: EMP_PAIN, EMP_BLIND, EMP_DEAFEN, EMP_CONFUSE, EMP_STUN, and EMP_(BRUTE/BURN/TOX/OXY)_DMG
|
||||
var/emp_dmg_mod = 1 // Multiplier to all EMP damage sustained by the mob, if it's EMP-sensitive
|
||||
|
||||
@@ -132,3 +132,19 @@
|
||||
b_wing2 = new_color_rgb_list[3]
|
||||
|
||||
update_wing_showing()
|
||||
|
||||
/mob/living/carbon/human/proc/promethean_select_opaqueness()
|
||||
|
||||
set name = "Toggle Transparency"
|
||||
set category = "Abilities"
|
||||
|
||||
if(stat || world.time < last_special)
|
||||
return
|
||||
|
||||
last_special = world.time + 50
|
||||
|
||||
for(var/limb in src.organs)
|
||||
var/obj/item/organ/external/L = limb
|
||||
L.transparent = !L.transparent
|
||||
visible_message("<span class='notice'>\The [src]'s interal composition seems to change.</span>")
|
||||
update_icons_body()
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
language = "Sol Common" //todo?
|
||||
unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/punch)
|
||||
flags = NO_PAIN | NO_SCAN | NO_POISON | NO_MINOR_CUT
|
||||
flags = NO_PAIN | NO_SCAN | NO_POISON | NO_MINOR_CUT | NO_DEFIB
|
||||
spawn_flags = SPECIES_IS_RESTRICTED
|
||||
siemens_coefficient = 0
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@ var/datum/species/shapeshifter/promethean/prometheans
|
||||
bump_flag = SLIME
|
||||
swap_flags = MONKEY|SLIME|SIMPLE_ANIMAL
|
||||
push_flags = MONKEY|SLIME|SIMPLE_ANIMAL
|
||||
flags = NO_SCAN | NO_SLIP | NO_MINOR_CUT | NO_HALLUCINATION | NO_INFECT
|
||||
flags = NO_SCAN | NO_SLIP | NO_MINOR_CUT | NO_HALLUCINATION | NO_INFECT | NO_DEFIB
|
||||
appearance_flags = HAS_SKIN_COLOR | HAS_EYE_COLOR | HAS_HAIR_COLOR | RADIATION_GLOWS | HAS_UNDERWEAR
|
||||
spawn_flags = SPECIES_CAN_JOIN
|
||||
health_hud_intensity = 2
|
||||
|
||||
@@ -34,5 +34,6 @@
|
||||
/mob/living/carbon/human/proc/succubus_drain_finalize,
|
||||
/mob/living/carbon/human/proc/succubus_drain_lethal,
|
||||
/mob/living/carbon/human/proc/slime_feed,
|
||||
/mob/living/proc/eat_trash
|
||||
/mob/living/proc/eat_trash,
|
||||
/mob/living/carbon/human/proc/promethean_select_opaqueness,
|
||||
)
|
||||
|
||||
@@ -521,7 +521,7 @@
|
||||
|
||||
body_temperature = T0C + 15 //make the plant people have a bit lower body temperature, why not
|
||||
|
||||
flags = NO_SCAN | IS_PLANT | NO_PAIN | NO_SLIP | NO_MINOR_CUT
|
||||
flags = NO_SCAN | IS_PLANT | NO_PAIN | NO_SLIP | NO_MINOR_CUT | NO_DEFIB
|
||||
spawn_flags = SPECIES_CAN_JOIN
|
||||
|
||||
blood_color = "#004400"
|
||||
|
||||
@@ -174,3 +174,41 @@
|
||||
..(S,H)
|
||||
H.verbs |= /mob/living/proc/glow_toggle
|
||||
H.verbs |= /mob/living/proc/glow_color
|
||||
|
||||
// Alcohol Traits Start Here, from negative to positive.
|
||||
/datum/trait/alcohol_intolerance_advanced
|
||||
name = "Liver of Air"
|
||||
desc = "The only way you can hold a drink is if it's in your own two hands, and even then you'd best not inhale too deeply near it. Drinks are three times as strong."
|
||||
cost = 0
|
||||
var_changes = list("alcohol_mod" = 3) // 300% as effective if alcohol_mod is set to 1. If it's not 1 in species.dm, update this!
|
||||
|
||||
/datum/trait/alcohol_intolerance_basic
|
||||
name = "Liver of Lilies"
|
||||
desc = "You have a hard time with alcohol. Maybe you just never took to it, or maybe it doesn't agree with you... either way, drinks are twice as strong."
|
||||
cost = 0
|
||||
var_changes = list("alcohol_mod" = 2) // 200% as effective if alcohol_mod is set to 1. If it's not 1 in species.dm, update this!
|
||||
|
||||
/datum/trait/alcohol_intolerance_slight
|
||||
name = "Liver of Tulips"
|
||||
desc = "You have a slight struggle with alcohol. Drinks are one and a half times stronger."
|
||||
cost = 0
|
||||
var_changes = list("alcohol_mod" = 1.5) // 150% as effective if alcohol_mod is set to 1. If it's not 1 in species.dm, update this!
|
||||
|
||||
/datum/trait/alcohol_tolerance_basic
|
||||
name = "Liver of Iron"
|
||||
desc = "You can hold drinks much better than those lily-livered land-lubbers! Arr! Drinks are only three-quarters as strong."
|
||||
cost = 0
|
||||
var_changes = list("alcohol_mod" = 0.75) // 75% as effective if alcohol_mod is set to 1. If it's not 1 in species.dm, update this!
|
||||
|
||||
/datum/trait/alcohol_tolerance_advanced
|
||||
name = "Liver of Steel"
|
||||
desc = "Drinks tremble before your might! You can hold your alcohol twice as well as those blue-bellied barnacle boilers! Drinks are only half as strong."
|
||||
cost = 0
|
||||
var_changes = list("alcohol_mod" = 0.5) // 50% as effective if alcohol_mod is set to 1. If it's not 1 in species.dm, update this!
|
||||
|
||||
/datum/trait/alcohol_immunity
|
||||
name = "Liver of Durasteel"
|
||||
desc = "You've drunk so much that most booze doesn't even faze you. It takes something like a Pan-Galactic or a pint of Deathbell for you to even get slightly buzzed."
|
||||
cost = 0
|
||||
var_changes = list("alcohol_mod" = 0.25) // 25% as effective if alcohol_mod is set to 1. If it's not 1 in species.dm, update this!
|
||||
// Alcohol Traits End Here.
|
||||
@@ -24,7 +24,7 @@
|
||||
cold_level_2 = -1
|
||||
cold_level_3 = -1
|
||||
|
||||
flags = NO_SCAN | NO_PAIN | NO_SLIP | NO_POISON | NO_MINOR_CUT | NO_INFECT
|
||||
flags = NO_SCAN | NO_PAIN | NO_SLIP | NO_POISON | NO_MINOR_CUT | NO_INFECT | NO_DEFIB
|
||||
spawn_flags = SPECIES_IS_RESTRICTED
|
||||
|
||||
reagent_tag = IS_XENOS
|
||||
|
||||
@@ -278,6 +278,8 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
|
||||
icon_key += "3"
|
||||
else
|
||||
icon_key += "1"
|
||||
if(part.transparent) //VOREStation Edit. For better slime limbs. Avoids using solid var due to limb dropping.
|
||||
icon_key += "_t" //VOREStation Edit.
|
||||
|
||||
icon_key = "[icon_key][husk ? 1 : 0][fat ? 1 : 0][hulk ? 1 : 0][skeleton ? 1 : 0]"
|
||||
|
||||
@@ -431,11 +433,18 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
|
||||
hair_style = hair_styles_list["Short Hair"]
|
||||
|
||||
if(hair_style && (src.species.get_bodytype(src) in hair_style.species_allowed))
|
||||
var/icon/grad_s = null
|
||||
var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s")
|
||||
var/icon/hair_s_add = new/icon("icon" = hair_style.icon_add, "icon_state" = "[hair_style.icon_state]_s")
|
||||
if(hair_style.do_colouration)
|
||||
if(grad_style)
|
||||
grad_s = new/icon("icon" = 'icons/mob/hair_gradients.dmi', "icon_state" = GLOB.hair_gradients[grad_style])
|
||||
grad_s.Blend(hair_s, ICON_AND)
|
||||
grad_s.Blend(rgb(r_grad, g_grad, b_grad), ICON_MULTIPLY)
|
||||
hair_s.Blend(rgb(r_hair, g_hair, b_hair), ICON_MULTIPLY)
|
||||
hair_s.Blend(hair_s_add, ICON_ADD)
|
||||
if(!isnull(grad_s))
|
||||
hair_s.Blend(grad_s, ICON_OVERLAY)
|
||||
|
||||
face_standing.Blend(hair_s, ICON_OVERLAY)
|
||||
|
||||
@@ -450,7 +459,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
|
||||
return
|
||||
// VOREStation Edit - END
|
||||
|
||||
if(head_organ.nonsolid)
|
||||
if(head_organ.transparent) //VOREStation Edit. For better slime limbs.
|
||||
face_standing += rgb(,,,120)
|
||||
|
||||
overlays_standing[HAIR_LAYER] = image(face_standing, layer = BODY_LAYER+HAIR_LAYER)
|
||||
|
||||
@@ -336,7 +336,7 @@
|
||||
next_alarm_notice = world.time + SecondsToTicks(10)
|
||||
if(alarm.hidden)
|
||||
return
|
||||
if(alarm.origin && !(get_z(alarm.origin) in using_map.get_map_levels(get_z(src), TRUE)))
|
||||
if(alarm.origin && !(get_z(alarm.origin) in using_map.get_map_levels(get_z(src), TRUE, om_range = DEFAULT_OVERMAP_RANGE)))
|
||||
return
|
||||
|
||||
var/list/alarms = queued_alarms[alarm_handler]
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
var/vore_pounce_falloff = 1 // Success rate falloff per %health of target mob.
|
||||
var/vore_pounce_maxhealth = 80 // Mob will not attempt to pounce targets above this %health
|
||||
var/vore_standing_too = 0 // Can also eat non-stunned mobs
|
||||
var/vore_ignores_undigestable = 1 // Refuse to eat mobs who are undigestable by the prefs toggle.
|
||||
var/vore_ignores_undigestable = FALSE // If set to true, will refuse to eat mobs who are undigestable by the prefs toggle.
|
||||
var/swallowsound = null // What noise plays when you succeed in eating the mob.
|
||||
|
||||
var/vore_default_mode = DM_DIGEST // Default bellymode (DM_DIGEST, DM_HOLD, DM_ABSORB)
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
desc = "A small rodent, often seen hiding in maintenance areas and making a nuisance of itself. And stealing cheese, or annoying the chef. SQUEAK! <3"
|
||||
|
||||
movement_cooldown = 1.5 //roughly half the speed of a person
|
||||
movement_cooldown = 5
|
||||
universal_understand = 1
|
||||
|
||||
/mob/living/simple_mob/animal/passive/mouse/attack_hand(mob/living/L)
|
||||
|
||||
@@ -224,4 +224,6 @@
|
||||
|
||||
var/registered_z
|
||||
|
||||
var/list/progressbars = null //for stacking do_after bars
|
||||
var/in_enclosed_vehicle = 0 //For mechs and fighters ambiance. Can be used in other cases.
|
||||
|
||||
var/list/progressbars = null //VOREStation Edit
|
||||
|
||||
@@ -463,7 +463,7 @@
|
||||
|
||||
/mob/new_player/proc/AnnounceCyborg(var/mob/living/character, var/rank, var/join_message, var/channel, var/zlevel)
|
||||
if (ticker.current_state == GAME_STATE_PLAYING)
|
||||
var/list/zlevels = zlevel ? using_map.get_map_levels(zlevel, TRUE) : null
|
||||
var/list/zlevels = zlevel ? using_map.get_map_levels(zlevel, TRUE, om_range = DEFAULT_OVERMAP_RANGE) : null
|
||||
if(character.mind.role_alt_title)
|
||||
rank = character.mind.role_alt_title
|
||||
// can't use their name here, since cyborg namepicking is done post-spawn, so we'll just say "A new Cyborg has arrived"/"A new Android has arrived"/etc.
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
|
||||
data["networks"] = all_networks
|
||||
|
||||
var/list/map_levels = using_map.get_map_levels(get_z(nano_host()), TRUE)
|
||||
var/list/map_levels = using_map.get_map_levels(get_z(nano_host()), TRUE, om_range = DEFAULT_OVERMAP_RANGE)
|
||||
|
||||
if(current_network)
|
||||
data["cameras"] = camera_repository.cameras_in_network(current_network, map_levels)
|
||||
|
||||
@@ -172,7 +172,7 @@
|
||||
return 0
|
||||
|
||||
var/list/zlevels_in_range = using_map.get_map_levels(their_z, FALSE)
|
||||
var/list/zlevels_in_long_range = using_map.get_map_levels(their_z, TRUE) - zlevels_in_range
|
||||
var/list/zlevels_in_long_range = using_map.get_map_levels(their_z, TRUE, om_range = DEFAULT_OVERMAP_RANGE) - zlevels_in_range
|
||||
var/their_signal = 0
|
||||
for(var/relay in ntnet_global.relays)
|
||||
var/obj/machinery/ntnet_relay/R = relay
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
data["isAI"] = isAI(user)
|
||||
|
||||
var/z = get_z(nano_host())
|
||||
var/list/map_levels = using_map.get_map_levels(z, TRUE)
|
||||
var/list/map_levels = using_map.get_map_levels(z, TRUE, om_range = DEFAULT_OVERMAP_RANGE)
|
||||
data["map_levels"] = map_levels
|
||||
|
||||
data["crewmembers"] = list()
|
||||
|
||||
@@ -104,7 +104,7 @@ var/global/ntnet_card_uid = 1
|
||||
if(!holderz) //no reception in nullspace
|
||||
return 0
|
||||
var/list/zlevels_in_range = using_map.get_map_levels(holderz, FALSE)
|
||||
var/list/zlevels_in_long_range = using_map.get_map_levels(holderz, TRUE) - zlevels_in_range
|
||||
var/list/zlevels_in_long_range = using_map.get_map_levels(holderz, TRUE, om_range = DEFAULT_OVERMAP_RANGE) - zlevels_in_range
|
||||
var/best = 0
|
||||
for(var/relay in ntnet_global.relays)
|
||||
var/obj/machinery/ntnet_relay/R = relay
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
/obj/item/organ/external
|
||||
var/transparent = 0 //For better slime limbs
|
||||
|
||||
//Sideways override for nanoform limbs (ugh)
|
||||
/obj/item/organ/external/robotize(var/company, var/skip_prosthetics = FALSE, var/keep_organs = FALSE)
|
||||
var/original_robotic = robotic
|
||||
|
||||
@@ -206,7 +206,7 @@ var/global/list/limb_icon_cache = list()
|
||||
|
||||
/obj/item/organ/external/proc/apply_colouration(var/icon/applying)
|
||||
|
||||
if(nonsolid)
|
||||
if(transparent) //VOREStation edit
|
||||
applying.MapColors("#4D4D4D","#969696","#1C1C1C", "#000000")
|
||||
if(species && species.get_bodytype(owner) != SPECIES_HUMAN)
|
||||
applying.SetIntensity(1) // Unathi, Taj and Skrell have -very- dark base icons. VOREStation edit fixes this and brings the number back to 1
|
||||
@@ -235,7 +235,7 @@ var/global/list/limb_icon_cache = list()
|
||||
//VOREStation Edit End
|
||||
|
||||
// Translucency.
|
||||
if(nonsolid) applying += rgb(,,,180) // SO INTUITIVE TY BYOND
|
||||
if(transparent) applying += rgb(,,,180) // SO INTUITIVE TY BYOND //VOREStation Edit
|
||||
|
||||
return applying
|
||||
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
|
||||
// tucker0666 : Frost
|
||||
/datum/robolimb/zenghu_frost
|
||||
company = "Zeng-Hu"
|
||||
company = "Zeng-Hu (Custom)"
|
||||
desc = "This limb has realistic synthetic flesh covering with 'blue accents'."
|
||||
icon = 'icons/mob/human_races/cyberlimbs/_fluff_vr/Frosty.dmi'
|
||||
blood_color = "#45ccff"
|
||||
|
||||
32
code/modules/organs/subtypes/slime_vr.dm
Normal file
32
code/modules/organs/subtypes/slime_vr.dm
Normal file
@@ -0,0 +1,32 @@
|
||||
/obj/item/organ/external/chest/unbreakable/slime
|
||||
transparent = 1
|
||||
|
||||
/obj/item/organ/external/groin/unbreakable/slime
|
||||
transparent = 1
|
||||
|
||||
/obj/item/organ/external/arm/unbreakable/slime
|
||||
transparent = 1
|
||||
|
||||
/obj/item/organ/external/arm/right/unbreakable/slime
|
||||
transparent = 1
|
||||
|
||||
/obj/item/organ/external/leg/unbreakable/slime
|
||||
transparent = 1
|
||||
|
||||
/obj/item/organ/external/leg/right/unbreakable/slime
|
||||
transparent = 1
|
||||
|
||||
/obj/item/organ/external/foot/unbreakable/slime
|
||||
transparent = 1
|
||||
|
||||
/obj/item/organ/external/foot/right/unbreakable/slime
|
||||
transparent = 1
|
||||
|
||||
/obj/item/organ/external/hand/unbreakable/slime
|
||||
transparent = 1
|
||||
|
||||
/obj/item/organ/external/hand/right/unbreakable/slime
|
||||
transparent = 1
|
||||
|
||||
/obj/item/organ/external/head/unbreakable/slime
|
||||
transparent = 1
|
||||
@@ -134,7 +134,7 @@
|
||||
// This is distinct from the hitscan's "impact_type" var.
|
||||
var/impact_effect_type = null
|
||||
|
||||
var/list/impacted_mobs
|
||||
var/list/impacted_mobs = list()
|
||||
|
||||
/obj/item/projectile/proc/Range()
|
||||
range--
|
||||
@@ -441,15 +441,15 @@
|
||||
setAngle(Get_Angle(source, target))
|
||||
|
||||
/obj/item/projectile/Destroy()
|
||||
if(hitscan)
|
||||
finalize_hitscan_and_generate_tracers()
|
||||
STOP_PROCESSING(SSprojectiles, src)
|
||||
|
||||
if(impacted_mobs)
|
||||
if(LAZYLEN(impacted_mobs))
|
||||
impacted_mobs.Cut()
|
||||
impacted_mobs = null
|
||||
|
||||
if(hitscan)
|
||||
finalize_hitscan_and_generate_tracers()
|
||||
STOP_PROCESSING(SSprojectiles, src)
|
||||
qdel(trajectory)
|
||||
return ..()
|
||||
|
||||
@@ -642,9 +642,6 @@
|
||||
if(!istype(target_mob))
|
||||
return
|
||||
|
||||
if(!LAZYLEN(impacted_mobs))
|
||||
impacted_mobs = list()
|
||||
|
||||
if(target_mob in impacted_mobs)
|
||||
return
|
||||
|
||||
@@ -661,6 +658,7 @@
|
||||
return FALSE // Mob deleted itself or something.
|
||||
|
||||
// Safe to add the target to the list that is soon to be poofed. No double jeopardy, pixel projectiles.
|
||||
if(islist(impacted_mobs))
|
||||
impacted_mobs |= target_mob
|
||||
|
||||
if(result == PROJECTILE_FORCE_MISS)
|
||||
|
||||
@@ -282,7 +282,7 @@
|
||||
id = "scsatw"
|
||||
description = "The screwdriver's bigger cousin."
|
||||
taste_description = "smooth, savory booze and tangy orange juice."
|
||||
strength = 0
|
||||
strength = 30
|
||||
druggy = 0
|
||||
halluci = 0
|
||||
var/adj_dizzy = 0
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
var/digest_burn = 0.5 // Burn damage per tick in digestion mode
|
||||
var/immutable = FALSE // Prevents this belly from being deleted
|
||||
var/escapable = FALSE // Belly can be resisted out of at any time
|
||||
var/escapetime = 60 SECONDS // Deciseconds, how long to escape this belly
|
||||
var/escapetime = 20 SECONDS // Deciseconds, how long to escape this belly
|
||||
var/digestchance = 0 // % Chance of stomach beginning to digest if prey struggles
|
||||
var/absorbchance = 0 // % Chance of stomach beginning to absorb if prey struggles
|
||||
var/escapechance = 0 // % Chance of prey beginning to escape if prey struggles.
|
||||
|
||||
@@ -926,7 +926,7 @@
|
||||
user.can_be_drop_prey = FALSE
|
||||
|
||||
if(href_list["toggledg"])
|
||||
var/choice = alert(user, "This button is for those who don't like being digested. It can make you undigestable. Messages admins when changed, so don't try to use it for mechanical benefit. Set it once and save it. Digesting you is currently: [user.digestable ? "Allowed" : "Prevented"]", "", "Allow Digestion", "Cancel", "Prevent Digestion")
|
||||
var/choice = alert(user, "This button is for those who don't like being digested. It can make you undigestable. Digesting you is currently: [user.digestable ? "Allowed" : "Prevented"]", "", "Allow Digestion", "Cancel", "Prevent Digestion")
|
||||
switch(choice)
|
||||
if("Cancel")
|
||||
return FALSE
|
||||
@@ -935,8 +935,6 @@
|
||||
if("Prevent Digestion")
|
||||
user.digestable = FALSE
|
||||
|
||||
message_admins("[key_name(user)] toggled their digestability to [user.digestable] [ADMIN_COORDJMP(user)]")
|
||||
|
||||
if(user.client.prefs_vr)
|
||||
user.client.prefs_vr.digestable = user.digestable
|
||||
|
||||
@@ -993,7 +991,7 @@
|
||||
user.client.prefs_vr.digest_leave_remains = user.digest_leave_remains
|
||||
|
||||
if(href_list["togglemv"])
|
||||
var/choice = alert(user, "This button is for those who don't like being eaten by mobs. Messages admins when changed, so don't try to use it for mechanical benefit. Set it once and save it. Mobs are currently: [user.allowmobvore ? "Allowed to eat" : "Prevented from eating"] you.", "", "Allow Mob Predation", "Cancel", "Prevent Mob Predation")
|
||||
var/choice = alert(user, "This button is for those who don't like being eaten by mobs. Mobs are currently: [user.allowmobvore ? "Allowed to eat" : "Prevented from eating"] you.", "", "Allow Mob Predation", "Cancel", "Prevent Mob Predation")
|
||||
switch(choice)
|
||||
if("Cancel")
|
||||
return FALSE
|
||||
@@ -1002,8 +1000,6 @@
|
||||
if("Prevent Mob Predation")
|
||||
user.allowmobvore = FALSE
|
||||
|
||||
message_admins("[key_name(user)] toggled their mob vore preference to [user.allowmobvore] [ADMIN_COORDJMP(user)]")
|
||||
|
||||
if(user.client.prefs_vr)
|
||||
user.client.prefs_vr.allowmobvore = user.allowmobvore
|
||||
|
||||
|
||||
@@ -281,35 +281,19 @@ Swimsuits, for general use, to avoid arriving to work with your swimsuit.
|
||||
/obj/item/weapon/storage/box/monkeycubes/sobakacubes
|
||||
name = "sobaka cube box"
|
||||
desc = "Drymate brand sobaka cubes. Just add water!"
|
||||
|
||||
/obj/item/weapon/storage/box/monkeycubes/sobakacubes/New()
|
||||
..()
|
||||
for(var/i = 1 to 4)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/sobakacube(src)
|
||||
starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/sobakacube = 4)
|
||||
|
||||
/obj/item/weapon/storage/box/monkeycubes/sarucubes
|
||||
name = "saru cube box"
|
||||
desc = "Drymate brand saru cubes. Just add water!"
|
||||
|
||||
/obj/item/weapon/storage/box/monkeycubes/sarucubes/New()
|
||||
..()
|
||||
for(var/i = 1 to 4)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/sarucube(src)
|
||||
starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/sarucube = 4)
|
||||
|
||||
/obj/item/weapon/storage/box/monkeycubes/sparracubes
|
||||
name = "sparra cube box"
|
||||
desc = "Drymate brand sparra cubes. Just add water!"
|
||||
|
||||
/obj/item/weapon/storage/box/monkeycubes/sparracubes/New()
|
||||
..()
|
||||
for(var/i = 1 to 4)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/sparracube(src)
|
||||
starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/sparracube = 4)
|
||||
|
||||
/obj/item/weapon/storage/box/monkeycubes/wolpincubes
|
||||
name = "wolpin cube box"
|
||||
desc = "Drymate brand wolpin cubes. Just add water!"
|
||||
|
||||
/obj/item/weapon/storage/box/monkeycubes/wolpincubes/New()
|
||||
..()
|
||||
for(var/i = 1 to 4)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/wolpincube(src)
|
||||
starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/wolpincube = 4)
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
/obj/item/weapon/book/manual/excavation
|
||||
name = "Out on the Dig"
|
||||
icon_state = "excavation"
|
||||
item_state = "book6"
|
||||
author = "Professor Patrick Mason, Curator of the Antiquities Museum on Ichar VII"
|
||||
title = "Out on the Dig"
|
||||
dat = {"<html>
|
||||
@@ -115,6 +116,7 @@
|
||||
/obj/item/weapon/book/manual/mass_spectrometry
|
||||
name = "High Power Mass Spectrometry: A Comprehensive Guide"
|
||||
icon_state = "analysis"
|
||||
item_state = "book6"
|
||||
author = "Winton Rice, Chief Mass Spectrometry Technician at the Institute of Applied Sciences on Arcadia"
|
||||
title = "High powered mass spectrometry, a comprehensive guide"
|
||||
dat = {"<html>
|
||||
@@ -186,6 +188,7 @@
|
||||
/obj/item/weapon/book/manual/anomaly_spectroscopy
|
||||
name = "Spectroscopy: Analysing the Anomalies of the Cosmos"
|
||||
icon_state = "anomaly"
|
||||
item_state = "book6"
|
||||
author = "Doctor Martin Boyle, Director Research at the Lower Hydrolian Sector Listening Array"
|
||||
title = "Spectroscopy: Analysing the Anomalies of the Cosmos"
|
||||
dat = {"<html>
|
||||
@@ -211,6 +214,7 @@
|
||||
/obj/item/weapon/book/manual/materials_chemistry_analysis
|
||||
name = "Materials Analysis and the Chemical Implications"
|
||||
icon_state = "chemistry"
|
||||
item_state = "book6"
|
||||
author = "Jasper Pascal, Senior Lecturer in Materials Analysis at the University of Jol'Nar"
|
||||
title = "Materials Analysis and the Chemical Implications"
|
||||
dat = {"<html>
|
||||
@@ -238,6 +242,7 @@
|
||||
/obj/item/weapon/book/manual/anomaly_testing
|
||||
name = "Anomalous Materials and Energies"
|
||||
icon_state = "triangulate"
|
||||
item_state = "book6"
|
||||
author = "Norman York, formerly of the Tyrolion Institute on Titan"
|
||||
title = "Anomalous Materials and Energies"
|
||||
dat = {"<html>
|
||||
@@ -316,6 +321,7 @@
|
||||
/obj/item/weapon/book/manual/stasis
|
||||
name = "Cellular Suspension, the New Cryogenics?"
|
||||
icon_state = "stasis"
|
||||
item_state = "book6"
|
||||
author = "Elvin Schmidt"
|
||||
title = "Cellular Suspension, the New Cryogenics?"
|
||||
dat = {"<html>
|
||||
|
||||
@@ -50,6 +50,7 @@ zalvine - Shadekin Empathy
|
||||
zammyman215 - Vox
|
||||
bricker98 - Protean
|
||||
cgr - Protean
|
||||
khanivore - Protean
|
||||
storesund97 - Protean
|
||||
tastypred - Protean
|
||||
vitoras - Protean
|
||||
@@ -58,3 +59,4 @@ nerdass - Protean
|
||||
xonkon - Protean
|
||||
phoenixx0 - Vox
|
||||
rubyflamewing - Protean
|
||||
radiantaurora - Protean
|
||||
|
||||
@@ -53,6 +53,33 @@
|
||||
|
||||
-->
|
||||
<div class="commit sansserif">
|
||||
<h2 class="date">21 June 2020</h2>
|
||||
<h3 class="author">Arokha updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">New sprites for janicart</li>
|
||||
<li class="tweak">Alt-click helpers for stowing mop, chemicals on janicart</li>
|
||||
</ul>
|
||||
<h3 class="author">Atermonera updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Added verb to export vchat logs, found in OOC tab when vchat has successfully loaded.</li>
|
||||
<li class="tweak">Vchat only sends you enough messages to fill your buffer on reconnect, instead of all of them.</li>
|
||||
</ul>
|
||||
<h3 class="author">Billy Bangles updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Light and dark marble floor tiles can now be crafted with marble sheets.</li>
|
||||
</ul>
|
||||
<h3 class="author">Greenjoe updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Added a wrist-bound PDA, selectable from the PDA selection menu in char setup. it can go in the glove slot along with the ID and belt slots, and shows on your character's wrist no matter which of those 3 slots you put it in!</li>
|
||||
</ul>
|
||||
<h3 class="author">KasparoVv updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">You can now quickly cycle hrough previous or next hair/facial styles at character creation.</li>
|
||||
<li class="rscadd">Use the -mv- button to pick a marking and place it above of another on your character. Saves you from pressing up or down a bunch.</li>
|
||||
<li class="tweak">Ports color_square() from Paradise for colour previews, cleaning up pref. code & correct alignment issue w/ nested tables.</li>
|
||||
<li class="tweak">Markings are now properly aligned within a table.</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">13 May 2020</h2>
|
||||
<h3 class="author">Atermonera updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user