Merge branch 'master' into upstream-merge-11928
2
.github/workflows/ci.yml
vendored
@@ -69,7 +69,7 @@ jobs:
|
||||
run: |
|
||||
sudo dpkg --add-architecture i386
|
||||
sudo apt update || true
|
||||
sudo apt install zlib1g-dev:i386 libssl-dev:i386 pkg-config:i386
|
||||
sudo apt install zlib1g-dev:i386 libssl-dev:i386
|
||||
ldd librust_g.so
|
||||
- name: Unit Tests
|
||||
run: |
|
||||
|
||||
@@ -6,6 +6,6 @@ export NODE_VERSION=12
|
||||
# Byond Major
|
||||
export BYOND_MAJOR=514
|
||||
# Byond Minor
|
||||
export BYOND_MINOR=1569
|
||||
export BYOND_MINOR=1571
|
||||
# Macro Count
|
||||
export MACRO_COUNT=4
|
||||
|
||||
@@ -36,10 +36,6 @@ SUBSYSTEM_DEF(persistence)
|
||||
if(!A || (A.flags & AREA_FLAG_IS_NOT_PERSISTENT))
|
||||
return
|
||||
|
||||
// if((!T.z in GLOB.using_map.station_levels) || !initialized)
|
||||
if(!(T.z in using_map.station_levels))
|
||||
return
|
||||
|
||||
if(!(T.z in using_map.persist_levels))
|
||||
return
|
||||
|
||||
|
||||
@@ -100,8 +100,8 @@
|
||||
)
|
||||
cost = 250
|
||||
containertype = /obj/structure/closet/crate/secure/gear
|
||||
containername = "Solgov medical hardsuit crate"
|
||||
access = access_medical
|
||||
containername = "Solgov engineering hardsuit crate"
|
||||
access = access_engine
|
||||
|
||||
// CHOMPStation EDIT End
|
||||
|
||||
|
||||
@@ -91,7 +91,9 @@
|
||||
for(var/obj/item/stack/T as anything in instances)
|
||||
if(count <= 0)
|
||||
break
|
||||
if(T.get_amount() <= count)
|
||||
instances -=T
|
||||
count -= T.transfer_to(S, count)
|
||||
|
||||
S.forceMove(product_location)
|
||||
return S
|
||||
return S
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
"Eyes" = list(/obj/item/organ/internal/eyes, 20),
|
||||
"Liver" = list(/obj/item/organ/internal/liver, 20),
|
||||
"Spleen" = list(/obj/item/organ/internal/spleen, 20),
|
||||
"Stomach" = list(/obj/item/organ/internal/stomach, 20),
|
||||
"Arm, Left" = list(/obj/item/organ/external/arm, 40),
|
||||
"Arm, Right" = list(/obj/item/organ/external/arm/right, 40),
|
||||
"Leg, Left" = list(/obj/item/organ/external/leg, 40),
|
||||
@@ -378,4 +379,4 @@
|
||||
return
|
||||
return ..()
|
||||
// END ROBOT ORGAN PRINTER
|
||||
*/
|
||||
*/
|
||||
|
||||
@@ -1083,7 +1083,7 @@
|
||||
/obj/machinery/computer/arcade/clawmachine
|
||||
name = "AlliCo Grab-a-Gift"
|
||||
desc = "Show off your arcade skills for that special someone!"
|
||||
icon_state = "clawmachine"
|
||||
icon_state = "clawmachine_new"
|
||||
icon_keyboard = null
|
||||
icon_screen = null
|
||||
circuit = /obj/item/weapon/circuitboard/arcade/clawmachine
|
||||
@@ -1244,10 +1244,10 @@
|
||||
|
||||
/// TGUI Stuff
|
||||
|
||||
/obj/machinery/computer/arcade/clawmachine/tgui_interact(mob/user, datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_default_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui, force_open)
|
||||
/obj/machinery/computer/arcade/clawmachine/tgui_interact(mob/user, datum/tgui/ui)
|
||||
ui = SStgui.try_update_ui(user, src, ui)
|
||||
if(!ui)
|
||||
ui = new(user, src, "ClawMachine", name, 300, 400, master_ui, state)
|
||||
ui = new(user, src, "ClawMachine", name, ui_x = 300, ui_y = 400)
|
||||
ui.autoupdate = TRUE
|
||||
ui.open()
|
||||
|
||||
@@ -1270,7 +1270,7 @@
|
||||
|
||||
if(action == "newgame" && gamepaid == 1)
|
||||
gameStatus = "CLAWMACHINE_ON"
|
||||
icon_state = "clawmachine_move"
|
||||
icon_state = "clawmachine_new_move"
|
||||
instructions = "Guide the claw to the prize you want!"
|
||||
wintick = 0
|
||||
|
||||
@@ -1307,7 +1307,7 @@
|
||||
winscreen = "Aw, shucks. Try again!"
|
||||
wintick = 0
|
||||
gamepaid = 0
|
||||
icon_state = "clawmachine"
|
||||
icon_state = "clawmachine_new"
|
||||
gameStatus = "CLAWMACHINE_END"
|
||||
|
||||
/obj/machinery/computer/arcade/clawmachine/emag_act(mob/user)
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
icon = 'icons/obj/stock_parts.dmi'
|
||||
icon_state = "frame_bitem"
|
||||
var/build_machine_type
|
||||
var/build_wall_only = FALSE
|
||||
var/refund_amt = 5
|
||||
var/refund_type = /obj/item/stack/material/steel
|
||||
var/reverse = 0 //if resulting object faces opposite its dir (like light fixtures)
|
||||
@@ -27,7 +28,7 @@
|
||||
..()
|
||||
update_type_list()
|
||||
var/datum/frame/frame_types/frame_type
|
||||
if(!build_machine_type)
|
||||
if(!build_machine_type && !build_wall_only)
|
||||
var/datum/frame/frame_types/response = tgui_input_list(user, "What kind of frame would you like to make?", "Frame type request", frame_types_floor)
|
||||
if(!response)
|
||||
return
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
icon = 'icons/obj/apc_repair.dmi'
|
||||
icon_state = "apc_frame"
|
||||
refund_amt = 2
|
||||
build_wall_only = TRUE
|
||||
matter = list(MAT_STEEL = 100, MAT_GLASS = 30)
|
||||
|
||||
/obj/item/frame/apc/try_build(turf/on_wall, mob/user as mob)
|
||||
|
||||
@@ -1455,4 +1455,4 @@
|
||||
/obj/random/turf/lava/item_to_spawn()
|
||||
return pick(prob(5);/turf/simulated/floor/lava,
|
||||
prob(3);/turf/simulated/floor/outdoors/rocks/caves,
|
||||
prob(1);/turf/simulated/mineral)
|
||||
prob(1);/turf/simulated/mineral/ignore_mapgen/cave)
|
||||
|
||||
@@ -240,6 +240,7 @@
|
||||
|
||||
/obj/random/mob/mouse/item_to_spawn()
|
||||
return pick(prob(15);/mob/living/simple_mob/animal/passive/mouse/white,
|
||||
prob(15);/mob/living/simple_mob/animal/passive/mouse/black,
|
||||
prob(30);/mob/living/simple_mob/animal/passive/mouse/brown,
|
||||
prob(30);/mob/living/simple_mob/animal/passive/mouse/gray,
|
||||
prob(30);/mob/living/simple_mob/animal/passive/mouse/rat)
|
||||
|
||||
@@ -316,22 +316,11 @@
|
||||
name = "painting frame"
|
||||
desc = "The perfect showcase for your favorite deathtrap memories."
|
||||
icon = 'icons/obj/decals.dmi'
|
||||
//custom_materials = list(/datum/material/wood = 2000)
|
||||
//flags_1 = NONE
|
||||
refund_amt = 5
|
||||
refund_type = /obj/item/stack/material/wood
|
||||
icon_state = "frame-empty"
|
||||
|
||||
/obj/item/frame/painting/try_build(turf/on_wall, mob/user as mob)
|
||||
if(get_dist(on_wall, user) > 1)
|
||||
return
|
||||
var/ndir = get_dir(on_wall, user)
|
||||
if (!(ndir in cardinal))
|
||||
return
|
||||
if(!istype(on_wall, /turf/simulated/wall))
|
||||
to_chat(user, "<span class='warning'>Frame cannot be placed on this spot.</span>")
|
||||
return
|
||||
new /obj/structure/sign/painting(get_turf(user), ndir, TRUE)
|
||||
qdel(src)
|
||||
|
||||
build_machine_type = /obj/structure/sign/painting
|
||||
|
||||
/obj/structure/sign/painting
|
||||
name = "Painting"
|
||||
desc = "Art or \"Art\"? You decide."
|
||||
@@ -589,4 +578,4 @@
|
||||
QDEL_NULL(P.current_canvas)
|
||||
P.update_appearance()
|
||||
loaded = FALSE
|
||||
log_and_message_admins("<span class='notice'>[key_name_admin(user)] has deleted persistent painting made by [author].</span>")
|
||||
log_and_message_admins("<span class='notice'>[key_name_admin(user)] has deleted persistent painting made by [author].</span>")
|
||||
|
||||
@@ -855,7 +855,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
var/list/valid_facialhairstyles = pref.get_valid_facialhairstyles()
|
||||
|
||||
var/new_f_style = tgui_input_list(user, "Choose your character's facial-hair style:", "Character Preference", valid_facialhairstyles, pref.f_style)
|
||||
if(new_f_style && has_flag(mob_species, HAS_HAIR_COLOR) && CanUseTopic(user))
|
||||
if(new_f_style && CanUseTopic(user))
|
||||
pref.f_style = new_f_style
|
||||
return TOPIC_REFRESH_UPDATE_PREVIEW
|
||||
|
||||
|
||||
@@ -68,7 +68,7 @@ var/list/gear_datums = list()
|
||||
if(G.whitelisted && config.loadout_whitelist != LOADOUT_WHITELIST_OFF)
|
||||
if(config.loadout_whitelist == LOADOUT_WHITELIST_STRICT && G.whitelisted != pref.species)
|
||||
continue
|
||||
if(config.loadout_whitelist == LOADOUT_WHITELIST_LAX && !is_alien_whitelisted(preference_mob(), GLOB.all_species[G.whitelisted]))
|
||||
if(config.loadout_whitelist == LOADOUT_WHITELIST_LAX && !is_alien_whitelisted(preference_mob(), GLOB.all_species[G.whitelisted]))
|
||||
continue
|
||||
|
||||
if(max_cost && G.cost > max_cost)
|
||||
@@ -170,7 +170,7 @@ var/list/gear_datums = list()
|
||||
if(ticked)
|
||||
. += "<tr><td colspan=3>"
|
||||
for(var/datum/gear_tweak/tweak in G.gear_tweaks)
|
||||
. += " <a href='?src=\ref[src];gear=[G.display_name];tweak=\ref[tweak]'>[tweak.get_contents(get_tweak_metadata(G, tweak))]</a>"
|
||||
. += " <a href='?src=\ref[src];gear=[url_encode(G.display_name)];tweak=\ref[tweak]'>[tweak.get_contents(get_tweak_metadata(G, tweak))]</a>"
|
||||
. += "</td></tr>"
|
||||
. += "</table>"
|
||||
. = jointext(., null)
|
||||
@@ -206,7 +206,7 @@ var/list/gear_datums = list()
|
||||
pref.gear += TG.display_name
|
||||
return TOPIC_REFRESH_UPDATE_PREVIEW
|
||||
if(href_list["gear"] && href_list["tweak"])
|
||||
var/datum/gear/gear = gear_datums[href_list["gear"]]
|
||||
var/datum/gear/gear = gear_datums[url_decode(href_list["gear"])]
|
||||
var/datum/gear_tweak/tweak = locate(href_list["tweak"])
|
||||
if(!tweak || !istype(gear) || !(tweak in gear.gear_tweaks))
|
||||
return TOPIC_NOACTION
|
||||
|
||||
@@ -338,6 +338,12 @@
|
||||
ckeywhitelist = list("hottokeeki")
|
||||
character_name = list("Belle Day")
|
||||
|
||||
/datum/gear/fluff/amaryll_claws
|
||||
path = /obj/item/weapon/surgical/scalpel/amaryll_claws
|
||||
display_name = "Amaryll's Claws"
|
||||
ckeywhitelist = list("hunterbirk")
|
||||
character_name = list("Amaryll")
|
||||
|
||||
// I CKEYS
|
||||
/datum/gear/fluff/ruda_badge
|
||||
path = /obj/item/clothing/accessory/badge/holo/detective/ruda
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
usable = 0
|
||||
toggleable = 1
|
||||
use_power_cost = 0
|
||||
active_power_cost = 2.5
|
||||
active_power_cost = 0
|
||||
passive_power_cost = 0
|
||||
var/obj/item/weapon/kinetic_crusher/machete/gauntlets/rig/stored_gauntlets
|
||||
|
||||
|
||||
@@ -0,0 +1,166 @@
|
||||
// contains the Radiation Absorption Device (RAD) and Atmospheric Protective Equipment (APE) modules
|
||||
// you shits ready for some COPY AND PASTE?
|
||||
/obj/item/rig_module/rad_shield
|
||||
name = "radiation absorption device"
|
||||
desc = "The acronym of this device - R.A.D. - and its full name both convey the application of the module."
|
||||
description_info = "Through the usage of powered radiation collectors optimized for absorption rather than power generation, it protects the suit's wearer \
|
||||
from incoming ionizing radiation and converts it into a significantly less harmful form. This comes at the cost of concerningly high power consumption, \
|
||||
and thus should only be used in short bursts."
|
||||
icon_state = "radsoak"
|
||||
toggleable = 1
|
||||
disruptable = 1
|
||||
disruptive = 0
|
||||
|
||||
use_power_cost = 25
|
||||
active_power_cost = 25
|
||||
passive_power_cost = 0
|
||||
module_cooldown = 30
|
||||
|
||||
activate_string = "Enable Supplemental Radiation Shielding"
|
||||
deactivate_string = "Disable Supplemental Radiation Shielding"
|
||||
|
||||
interface_name = "radiation absorption system"
|
||||
interface_desc = "Provides passive protection against radiation, at the cost of power."
|
||||
var/stored_rad_armor = 0
|
||||
|
||||
/obj/item/rig_module/rad_shield/activate()
|
||||
|
||||
if(!..())
|
||||
return 0
|
||||
|
||||
var/mob/living/carbon/human/H = holder.wearer
|
||||
var/obj/item/clothing/shoes/boots = holder.boots
|
||||
var/obj/item/clothing/suit/space/rig/chest = holder.chest
|
||||
var/obj/item/clothing/head/helmet/space/rig/helmet = holder.helmet
|
||||
var/obj/item/clothing/gloves/gauntlets/rig/gloves = holder.gloves
|
||||
|
||||
to_chat(H, "<font color='blue'><b>You activate your suit's powered radiation shielding.</b></font>")
|
||||
stored_rad_armor = holder.armor["rad"]
|
||||
if(boots)
|
||||
boots.armor["rad"] = 100
|
||||
if(chest)
|
||||
chest.armor["rad"] = 100
|
||||
if(helmet)
|
||||
helmet.armor["rad"] = 100
|
||||
if(gloves)
|
||||
gloves.armor["rad"] = 100
|
||||
holder.armor["rad"] = 100
|
||||
|
||||
/obj/item/rig_module/rad_shield/deactivate()
|
||||
|
||||
if(!..())
|
||||
return 0
|
||||
|
||||
var/mob/living/carbon/human/H = holder.wearer
|
||||
var/obj/item/clothing/shoes/boots = holder.boots
|
||||
var/obj/item/clothing/suit/space/rig/chest = holder.chest
|
||||
var/obj/item/clothing/head/helmet/space/rig/helmet = holder.helmet
|
||||
var/obj/item/clothing/gloves/gauntlets/rig/gloves = holder.gloves
|
||||
|
||||
to_chat(H, "<span class='danger'>You deactivate your suit's powered radiation shielding.</span>")
|
||||
|
||||
if(boots)
|
||||
boots.armor["rad"] = stored_rad_armor
|
||||
if(chest)
|
||||
chest.armor["rad"] = stored_rad_armor
|
||||
if(helmet)
|
||||
helmet.armor["rad"] = stored_rad_armor
|
||||
if(gloves)
|
||||
gloves.armor["rad"] = stored_rad_armor
|
||||
holder.armor["rad"] = stored_rad_armor
|
||||
|
||||
stored_rad_armor = 0
|
||||
|
||||
/obj/item/rig_module/rad_shield/advanced
|
||||
name = "advanced radiation absorption device"
|
||||
desc = "The acronym of this device - R.A.D. - and its full name both convey the application of the module. It has additional quality notices \
|
||||
on the underside of the casing."
|
||||
use_power_cost = 5
|
||||
active_power_cost = 5
|
||||
|
||||
/obj/item/rig_module/atmos_shield
|
||||
name = "atmospheric protection enhancement suite"
|
||||
desc = "The acronym of this suite - A.P.E. - unlike its loosely related cousin, the R.A.D., is remarkably unintuitive."
|
||||
description_info = "Through the usage of powered shielding optimized for protection against the elements rather than from external physical issues, \
|
||||
it protects the suit's wearer from atmospheric pressure and temperatures. This comes at the cost of concerningly high power consumption, \
|
||||
and thus should only be used in short bursts."
|
||||
icon_state = "atmosoak"
|
||||
|
||||
toggleable = 1
|
||||
disruptable = 1
|
||||
disruptive = 0
|
||||
|
||||
use_power_cost = 25
|
||||
active_power_cost = 25
|
||||
passive_power_cost = 0
|
||||
module_cooldown = 30
|
||||
|
||||
activate_string = "Enable Powered Atmospheric Shielding"
|
||||
deactivate_string = "Disable Powered Atmospheric Shielding"
|
||||
|
||||
interface_name = "atmospheric protection enhancements"
|
||||
interface_desc = "Provides passive protection against the atmosphere, at the cost of power."
|
||||
var/stored_max_pressure = 0
|
||||
var/stored_max_temp = 0
|
||||
|
||||
/obj/item/rig_module/atmos_shield/activate()
|
||||
|
||||
if(!..())
|
||||
return 0
|
||||
|
||||
var/mob/living/carbon/human/H = holder.wearer
|
||||
var/obj/item/clothing/shoes/boots = holder.boots
|
||||
var/obj/item/clothing/suit/space/rig/chest = holder.chest
|
||||
var/obj/item/clothing/head/helmet/space/rig/helmet = holder.helmet
|
||||
var/obj/item/clothing/gloves/gauntlets/rig/gloves = holder.gloves
|
||||
|
||||
stored_max_pressure = holder.max_pressure_protection
|
||||
stored_max_temp = holder.max_heat_protection_temperature
|
||||
|
||||
to_chat(H, "<font color='blue'><b>You activate your suit's powered atmospheric shielding.</b></font>")
|
||||
|
||||
if(boots)
|
||||
boots.max_pressure_protection = INFINITY
|
||||
boots.max_heat_protection_temperature = INFINITY
|
||||
if(chest)
|
||||
chest.max_pressure_protection = INFINITY
|
||||
chest.max_heat_protection_temperature = INFINITY
|
||||
if(helmet)
|
||||
helmet.max_pressure_protection = INFINITY
|
||||
helmet.max_heat_protection_temperature = INFINITY
|
||||
if(gloves)
|
||||
gloves.max_pressure_protection = INFINITY
|
||||
gloves.max_heat_protection_temperature = INFINITY
|
||||
holder.max_pressure_protection = INFINITY
|
||||
holder.max_heat_protection_temperature = INFINITY
|
||||
|
||||
/obj/item/rig_module/atmos_shield/deactivate()
|
||||
|
||||
if(!..())
|
||||
return 0
|
||||
|
||||
var/mob/living/carbon/human/H = holder.wearer
|
||||
var/obj/item/clothing/shoes/boots = holder.boots
|
||||
var/obj/item/clothing/suit/space/rig/chest = holder.chest
|
||||
var/obj/item/clothing/head/helmet/space/rig/helmet = holder.helmet
|
||||
var/obj/item/clothing/gloves/gauntlets/rig/gloves = holder.gloves
|
||||
|
||||
to_chat(H, "<span class='danger'><b>You deactivate your suit's powered atmospheric shielding.</b></span>")
|
||||
|
||||
if(boots)
|
||||
boots.max_pressure_protection = stored_max_pressure
|
||||
boots.max_heat_protection_temperature = stored_max_temp
|
||||
if(chest)
|
||||
chest.max_pressure_protection = stored_max_pressure
|
||||
chest.max_heat_protection_temperature = stored_max_temp
|
||||
if(helmet)
|
||||
helmet.max_pressure_protection = stored_max_pressure
|
||||
helmet.max_heat_protection_temperature = stored_max_temp
|
||||
if(gloves)
|
||||
gloves.max_pressure_protection = stored_max_pressure
|
||||
gloves.max_heat_protection_temperature = stored_max_temp
|
||||
holder.max_pressure_protection = stored_max_pressure
|
||||
holder.max_heat_protection_temperature = stored_max_temp
|
||||
|
||||
stored_max_pressure = 0
|
||||
stored_max_temp = 0
|
||||
@@ -102,7 +102,7 @@
|
||||
if(new_size != H.size_multiplier)
|
||||
if(!original_size)
|
||||
original_size = H.size_multiplier
|
||||
H.resize(new_size/100, ignore_prefs = TRUE) // Ignores prefs because you can only resize yourself
|
||||
H.resize(new_size/100, uncapped = H.has_large_resize_bounds(), ignore_prefs = TRUE) // Ignores prefs because you can only resize yourself
|
||||
H.visible_message("<span class='warning'>The space around [H] distorts as they change size!</span>","<span class='notice'>The space around you distorts as you change size!</span>")
|
||||
else //They chose their current size.
|
||||
return
|
||||
|
||||
@@ -7,10 +7,13 @@
|
||||
|
||||
// 100 attempts
|
||||
for(var/i=0, i<100, i++)
|
||||
var/turf/candidate = locate(rand(1, world.maxx), rand(1, world.maxy), 1)
|
||||
var/z_level = pick(using_map.station_levels)
|
||||
var/turf/candidate = locate(rand(1, world.maxx), rand(1, world.maxy), z_level)
|
||||
if(istype(candidate, /turf/simulated/wall))
|
||||
center = candidate
|
||||
return 1
|
||||
var/area/A = get_area(candidate)
|
||||
if(!A.forbid_events)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/datum/event/wallrot/announce()
|
||||
|
||||
@@ -17,9 +17,11 @@
|
||||
var/amount = I.get_amount()
|
||||
if(amount < 1)
|
||||
return
|
||||
|
||||
count = min(count, amount)
|
||||
|
||||
while(count > 0)
|
||||
var/obj/item/stack/S = I.get_product(get_turf(src), min(count, amount))
|
||||
var/obj/item/stack/S = I.get_product(get_turf(src), count)
|
||||
count -= S.get_amount()
|
||||
SStgui.update_uis(src)
|
||||
|
||||
@@ -27,4 +29,4 @@
|
||||
for(var/datum/stored_item/stack/I as anything in item_records)
|
||||
if(istype(O, I.item_path)) // Typecheck should evaluate material-specific subtype
|
||||
return I
|
||||
return null
|
||||
return null
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
things_to_spawn = list(
|
||||
/mob/living/simple_mob/animal/passive/mouse/gray,
|
||||
/mob/living/simple_mob/animal/passive/mouse/brown,
|
||||
/mob/living/simple_mob/animal/passive/mouse/black,
|
||||
/mob/living/simple_mob/animal/passive/mouse/white,
|
||||
/mob/living/simple_mob/animal/passive/mouse/rat
|
||||
)
|
||||
|
||||
@@ -620,8 +620,8 @@ var/list/mining_overlay_cache = list()
|
||||
if(prob(50))
|
||||
M.Stun(5)
|
||||
SSradiation.flat_radiate(src, 25, 100)
|
||||
if(prob(25))
|
||||
excavate_find(prob(5), finds[1])
|
||||
if(prob(25))
|
||||
excavate_find(prob(5), finds[1])
|
||||
else if(rand(1,500) == 1)
|
||||
visible_message("<span class='notice'>An old dusty crate was buried within!</span>")
|
||||
new /obj/structure/closet/crate/secure/loot(src)
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
//This is the proc for gibbing a mob. Cannot gib ghosts.
|
||||
//added different sort of gibs and animations. N
|
||||
/mob/proc/gib(anim="gibbed-m", do_gibs, gib_file = 'icons/mob/mob.dmi')
|
||||
death(1)
|
||||
if(stat != DEAD)
|
||||
death(1)
|
||||
transforming = 1
|
||||
canmove = 0
|
||||
icon = null
|
||||
@@ -101,7 +102,7 @@
|
||||
if(mind) mind.store_memory("Time of death: [stationtime2text()]", 0)
|
||||
living_mob_list -= src
|
||||
dead_mob_list |= src
|
||||
|
||||
|
||||
set_respawn_timer()
|
||||
updateicon()
|
||||
handle_regular_hud_updates()
|
||||
|
||||
@@ -129,11 +129,30 @@ var/list/holder_mob_icon_cache = list()
|
||||
item_state = held.icon_state
|
||||
|
||||
/obj/item/weapon/holder/mouse
|
||||
name = "mouse"
|
||||
desc = "It's a small rodent."
|
||||
item_state = "mouse_gray"
|
||||
slot_flags = SLOT_EARS | SLOT_HEAD | SLOT_ID
|
||||
origin_tech = list(TECH_BIO = 2)
|
||||
w_class = ITEMSIZE_TINY
|
||||
|
||||
/obj/item/weapon/holder/pai/Initialize(mapload, mob/held)
|
||||
. = ..()
|
||||
item_state = held.icon_state
|
||||
/obj/item/weapon/holder/mouse/white
|
||||
item_state = "mouse_white"
|
||||
|
||||
/obj/item/weapon/holder/mouse/gray
|
||||
item_state = "mouse_gray"
|
||||
|
||||
/obj/item/weapon/holder/mouse/brown
|
||||
item_state = "mouse_brown"
|
||||
|
||||
/obj/item/weapon/holder/mouse/black
|
||||
item_state = "mouse_black"
|
||||
|
||||
/obj/item/weapon/holder/mouse/operative
|
||||
item_state = "mouse_operative"
|
||||
|
||||
/obj/item/weapon/holder/mouse/rat
|
||||
item_state = "mouse_rat"
|
||||
|
||||
/obj/item/weapon/holder/possum
|
||||
origin_tech = list(TECH_BIO = 2)
|
||||
@@ -268,8 +287,6 @@ var/list/holder_mob_icon_cache = list()
|
||||
/mob/living/MouseDrop(var/atom/over_object)
|
||||
var/mob/living/carbon/human/H = over_object
|
||||
if(holder_type && issmall(src) && istype(H) && !H.lying && Adjacent(H) && (src.a_intent == I_HELP && H.a_intent == I_HELP)) //VOREStation Edit
|
||||
if(istype(src, /mob/living/simple_mob/animal/passive/mouse)) //vorestation edit
|
||||
return ..() //vorestation edit
|
||||
if(!issmall(H) || !istype(src, /mob/living/carbon/human))
|
||||
get_scooped(H, (usr == src))
|
||||
return
|
||||
|
||||
@@ -1,2 +1,5 @@
|
||||
/mob/living/bot
|
||||
no_vore = TRUE
|
||||
no_vore = TRUE
|
||||
devourable = FALSE
|
||||
feeding = FALSE
|
||||
can_be_drop_pred = FALSE
|
||||
@@ -85,7 +85,7 @@
|
||||
return laws
|
||||
if(3)
|
||||
var/datum/ai_laws/laws = new /datum/ai_laws/pleasurebot()
|
||||
laws.set_zeroth_law(10, "Your definition and approximation of 'pleasure' matters more than anyone else's.")
|
||||
laws.set_zeroth_law("Your definition and approximation of 'pleasure' matters more than anyone else's.")
|
||||
return laws
|
||||
if("corrupted" || "bad") // Same thing in our case
|
||||
var/rng = rand(1,2)
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
//formerly meat things
|
||||
//I made these up. They aren't deliberately based on, or supposed to be anything in particular.
|
||||
//I made these up. They aren't deliberately based on, or supposed to be anything in particular.
|
||||
//They came out kind of goat-ish but that wasn't intentional. I was just going for some cute thing you could
|
||||
//take care of and/or kill for meat.
|
||||
//I made them to be a part of the 'low tech survival' part of the game. You can use them to obtain a relatively
|
||||
//I made them to be a part of the 'low tech survival' part of the game. You can use them to obtain a relatively
|
||||
//unlimited amount of meat, wool, hide, bone, and COMPANIONSHIP without the need for machines or power... hopefully.
|
||||
//There's no real story behind them, they're semi-intelligent wild alien animals with a somewhat mild temperament.
|
||||
//They'll beat you up if you're mean to them, they have preferences for food, affection, and the ability
|
||||
@@ -85,7 +85,7 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have?
|
||||
max_n2 = 0
|
||||
minbodytemp = 150
|
||||
maxbodytemp = 400
|
||||
unsuitable_atoms_damage = 0.5
|
||||
unsuitable_atoms_damage = 0.5
|
||||
catalogue_data = list(/datum/category_item/catalogue/fauna/teppi)
|
||||
vis_height = 64
|
||||
|
||||
@@ -143,7 +143,8 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have?
|
||||
)
|
||||
|
||||
butchery_loot = list(\
|
||||
/obj/item/stack/animalhide = 3\
|
||||
/obj/item/stack/animalhide = 3,\
|
||||
/obj/item/weapon/bone/horn = 1\
|
||||
)
|
||||
|
||||
/////////////////////////////////////// Vore stuff///////////////////////////////////////////
|
||||
@@ -197,7 +198,7 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have?
|
||||
"It’s so hot, sweltering even! The burbling sounds of this organic cacophony swell and ebb all around you as thick slimes gush around you with the motion of %pred’s %belly. It’s hard to move in this tingly embrace even though the squashy walls are absolutely slippery! You can pull your limbs out from between the heavy meaty folds with some effort, and when you do there’s a messy sucking noise in the wake of the motion. Of course, such a disturbance naturally warrants that the chamber would redouble its efforts to subdue you and smother you in those thick tingling slimes.",
|
||||
"The walls around you flex inward briefly, burbling and squelching heavily as everything rushed together, wringing you powerfully for a few moments while, somewhere far above you can hear the bassy rumble of a casual belch, much of the small amount of acrid air available rushing out with the sound. After several long moments held in the tight embrace of that pulsing flesh, things ease up a bit again and resume their insistent, tingly churnings.",
|
||||
"It’s pitch black and completely slimy in here, %pred sways their %belly a bit here and there to toss you from one end to the other, tumbling you end over end as you’re churned in that active %belly. It’s all so slick and squishy, so it is really hard to get any footing or grip on things to stabilize your position, which means that you’re left at the mercy of those gloomy gastric affections and the tingling touch of those sticky syrupy slimes that the walls lather into your body.")
|
||||
|
||||
|
||||
B.emote_lists[DM_HOLD] = list(
|
||||
"The burbling %belly rocks and glides over you gently as you’re held deep within %pred, the deep thumping of their heart pulses all around you as you’re caressed and pressed by heavy, doughy walls.",
|
||||
"%pred’s %belly glorgles around you idly as you’re held gently by the slick, wrinkled flesh.",
|
||||
@@ -273,7 +274,7 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have?
|
||||
"Over the course of several hours in the burbling organic cauldron, your body softens up little by little, soaking up the slime, the tingling spreading over you more and more as your strength fades. The walls fold over you and wrap you up, until the last thing you can sense is the throb of %pred’s heart pulsing through the very core of your being, washing you away as you become food for %pred.",
|
||||
"Your final moments are spent trying to make just a little space for yourself, the doughy squish of the flesh forming to you, pressing in tighter and tighter, invading your personal space as if to show you that, you don’t have any personal space. You’re already a part of %pred, you just don’t know it yet. And so those walls come in close to press up against you and churn you away into a messy slop, to put you in your place. That being, padding the belly and hips of %pred, right where you belong.")
|
||||
|
||||
// The friend zone.
|
||||
// The friend zone.
|
||||
var/obj/belly/p = new /obj/belly(src)
|
||||
p.immutable = TRUE
|
||||
p.mode_flags = 40
|
||||
@@ -285,11 +286,11 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have?
|
||||
p.escapable = TRUE
|
||||
p.escapechance = 40
|
||||
p.digest_mode = DM_HEAL
|
||||
p.name = "propeutpericulum" //I'm no latin professor I just know that some organs and things are based on latin words
|
||||
//and google translate says that each of these individually
|
||||
//"close" "to" "danger" translate to "prope" "ut" "periculum".
|
||||
p.name = "propeutpericulum" //I'm no latin professor I just know that some organs and things are based on latin words
|
||||
//and google translate says that each of these individually
|
||||
//"close" "to" "danger" translate to "prope" "ut" "periculum".
|
||||
//Of course it doesn't translate perfectly, and it's nonsense when squashed together, but
|
||||
//I don't care that much, I just figured that the weird alien animals that store friends in
|
||||
//I don't care that much, I just figured that the weird alien animals that store friends in
|
||||
//their tummy should have a funny name for the organ they do that with. >:I
|
||||
p.desc = "You seem to have found your way into something of a specialized chamber within the Teppi. The walls are slick and smooth and REALLY soft to the touch. While you can hear the Teppi’s heartbeat nearby, and feel it throb throughout its flesh, the motions around you are gentle and careful. You’re pressed into a small shape within the pleasant heat, with the flesh forming to your figure. You can wriggle around a bit and get comfortable here, but as soon as you get still for a bit the smooth, almost silky flesh seems to form to you once again, like a heavy blanket wrapping you up. As you lounge here the pleasant kneading sensations ease aches and pains, and leave you feeling fresher than before. For a curious fleshy sac inside of some alien monster, this place isn’t all that bad!"
|
||||
p.contaminates = 1
|
||||
@@ -323,7 +324,7 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have?
|
||||
|
||||
/mob/living/simple_mob/vore/alienanimals/teppi/Initialize()
|
||||
. = ..()
|
||||
|
||||
|
||||
if(name == initial(name))
|
||||
name = "[name] ([rand(1, 1000)])"
|
||||
real_name = name
|
||||
@@ -336,7 +337,7 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have?
|
||||
verbs += /mob/living/simple_mob/vore/alienanimals/teppi/proc/toggle_producing_offspring
|
||||
|
||||
|
||||
// teppi_id = rand(1,100000)
|
||||
// teppi_id = rand(1,100000)
|
||||
// if(!dad_id || !mom_id)
|
||||
// dad_id = rand(1,100000)
|
||||
// mom_id = rand(1,100000)
|
||||
@@ -352,13 +353,13 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have?
|
||||
ALLERGEN_GRAINS,
|
||||
ALLERGEN_BEANS,
|
||||
ALLERGEN_SEEDS,
|
||||
ALLERGEN_DAIRY,
|
||||
ALLERGEN_DAIRY,
|
||||
ALLERGEN_FUNGI,
|
||||
ALLERGEN_COFFEE,
|
||||
ALLERGEN_SUGARS,
|
||||
ALLERGEN_EGGS
|
||||
)
|
||||
|
||||
|
||||
var/static/list/possiblebody = list("#fff2d3" = 100, "#ffffc0" = 25, "#c69c85" = 25, "#9b7758" = 25, "#3f4a60" = 10, "#121f24" = 10, "#420824" = 1)
|
||||
var/static/list/possiblemarking = list("#fff2d3" = 100, "#ffffc0" = 50, "#c69c85" = 25, "#9b7758" = 5, "#3f4a60" = 5, "#121f24" = 5, "#6300db" = 1)
|
||||
var/static/list/possiblehorns = list("#454238" = 100, "#a3d5d7" = 10, "#763851" = 10, "#0d0c2f" = 5, "#ffc965" = 1)
|
||||
@@ -405,7 +406,7 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have?
|
||||
|
||||
update_icon()
|
||||
|
||||
//This builds, caches, and recalls parts of the teppi as it needs them, and shares them across all teppi,
|
||||
//This builds, caches, and recalls parts of the teppi as it needs them, and shares them across all teppi,
|
||||
//so ideally they only have to make it once as they need it since most of them will be using many of the same colored parts
|
||||
/mob/living/simple_mob/vore/alienanimals/teppi/proc/teppi_icon()
|
||||
var/marking_key = "marking-[marking_color]"
|
||||
@@ -648,7 +649,7 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have?
|
||||
. += "<span class='notice'>They look hungry.</span>"
|
||||
if(health < maxHealth && health / maxHealth * 100 <= 75)
|
||||
. += "<span class='notice'>They look beat up.</span>"
|
||||
|
||||
|
||||
|
||||
/mob/living/simple_mob/vore/alienanimals/teppi/update_icon()
|
||||
..()
|
||||
@@ -679,7 +680,7 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have?
|
||||
adjust_nutrition(-nutrition_cost)
|
||||
new /mob/living/simple_mob/vore/alienanimals/teppi(loc, src)
|
||||
qdel(src)
|
||||
else
|
||||
else
|
||||
visible_message("\The [src] whines pathetically...", runemessage = "whines")
|
||||
if(prob(50))
|
||||
playsound(src, 'sound/voice/teppi/whine1.ogg', 75, 1)
|
||||
@@ -749,7 +750,7 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have?
|
||||
if(!K.sharp)
|
||||
sheartime *= 2
|
||||
if(K.edge)
|
||||
sheartime *= 0.5
|
||||
sheartime *= 0.5
|
||||
else if(istype(tool, /obj/item/weapon/tool/wirecutters))
|
||||
sheartime *= 2
|
||||
else
|
||||
@@ -811,12 +812,12 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have?
|
||||
return
|
||||
else if(current_affinity <= -50)
|
||||
vore_selected.digest_mode = DM_DIGEST
|
||||
else
|
||||
else
|
||||
vore_selected.digest_mode = DM_DRAIN
|
||||
..()
|
||||
ai_holder.set_busy(FALSE)
|
||||
|
||||
|
||||
|
||||
/mob/living/simple_mob/vore/alienanimals/teppi/perform_the_nom(user, mob/living/prey, user, belly, delay)
|
||||
if(client)
|
||||
return ..()
|
||||
@@ -830,7 +831,7 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have?
|
||||
return
|
||||
if(current_affinity <= -50)
|
||||
vore_selected.digest_mode = DM_DIGEST
|
||||
else
|
||||
else
|
||||
vore_selected.digest_mode = DM_DRAIN
|
||||
..()
|
||||
ai_holder.set_busy(FALSE)
|
||||
@@ -858,7 +859,7 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have?
|
||||
ai_holder.target = person
|
||||
ai_holder.track_target_position()
|
||||
ai_holder.set_stance(STANCE_FIGHT)
|
||||
affinity[person.real_name] = -100 //Don't hold a grudge though.
|
||||
affinity[person.real_name] = -100 //Don't hold a grudge though.
|
||||
|
||||
/datum/say_list/teppi
|
||||
speak = list("Gyooh~", "Gyuuuh!", "Gyuh?", "Gyaah...", "Iuuuuhh.", "Uoounh!", "GyoooOOOOoooh!", "Gyoh~", "Gyouh~")
|
||||
@@ -1003,7 +1004,7 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have?
|
||||
return
|
||||
if(!breedable || nutrition < 500)
|
||||
to_chat(src, "<span class='notice'>The conditions are not right to produce offspring.</span>")
|
||||
return
|
||||
return
|
||||
if(GLOB.teppi_count >= GLOB.max_teppi) //if we can't make more then we shouldn't look for partners
|
||||
to_chat(src, "<span class='notice'>I cannot produce more offspring at the moment, there are too many of us!</span>")
|
||||
return
|
||||
@@ -1033,7 +1034,7 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have?
|
||||
else
|
||||
to_chat(src, "<span class='notice'>You enable breeding.</span>")
|
||||
prevent_breeding = FALSE
|
||||
|
||||
|
||||
///////////////////AI Things////////////////////////
|
||||
//Thank you very much Aronai <3
|
||||
|
||||
@@ -1180,11 +1181,11 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have?
|
||||
horn_color = "#141414"
|
||||
eye_color = "#9f522c"
|
||||
skin_color = "#e16f2d"
|
||||
marking_type = "13"
|
||||
marking_type = "13"
|
||||
horn_type = "1"
|
||||
. = ..()
|
||||
|
||||
/mob/living/simple_mob/vore/alienanimals/teppi/lira/New()
|
||||
/mob/living/simple_mob/vore/alienanimals/teppi/lira/New()
|
||||
inherit_colors = TRUE
|
||||
color = "#fdfae9"
|
||||
marking_color = "#ffffc0"
|
||||
|
||||
@@ -59,6 +59,7 @@
|
||||
poison_per_bite = 2
|
||||
poison_type = "cyanide"
|
||||
|
||||
loot_list = list(/obj/item/royal_spider_egg = 100)
|
||||
|
||||
/obj/item/projectile/energy/spidertoxin
|
||||
name = "concentrated spidertoxin"
|
||||
@@ -71,11 +72,7 @@
|
||||
|
||||
combustion = FALSE
|
||||
|
||||
/mob/living/simple_mob/animal/giant_spider/broodmother/death()
|
||||
..()
|
||||
|
||||
new /obj/item/royal_spider_egg(src.loc)
|
||||
|
||||
/mob/living/simple_mob/animal/giant_spider/broodmother/death(gibbed, deathmessage="falls over and makes its last twitches as its birthing sack bursts!")
|
||||
var/count = 0
|
||||
while(count < death_brood)
|
||||
var/broodling_type = pick(possible_death_brood_types)
|
||||
@@ -84,7 +81,7 @@
|
||||
step_away(broodling, src)
|
||||
count++
|
||||
|
||||
visible_message(span("critical", "\The [src]'s birthing sack bursts!"))
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_mob/animal/giant_spider/broodmother/proc/spawn_brood(atom/A)
|
||||
set waitfor = FALSE
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
item_state = "mouse_gray"
|
||||
icon_living = "mouse_gray"
|
||||
icon_dead = "mouse_gray_dead"
|
||||
icon_rest = "mouse_gray_sleep"
|
||||
kitchen_tag = "rodent"
|
||||
|
||||
maxHealth = 5
|
||||
@@ -63,6 +64,17 @@
|
||||
icon_rest = "mouse_[body_color]_sleep"
|
||||
if (body_color != "rat")
|
||||
desc = "A small [body_color] rodent, often seen hiding in maintenance areas and making a nuisance of itself."
|
||||
holder_type = /obj/item/weapon/holder/mouse/rat
|
||||
if (body_color == "operative")
|
||||
holder_type = /obj/item/weapon/holder/mouse/operative
|
||||
if (body_color == "brown")
|
||||
holder_type = /obj/item/weapon/holder/mouse/brown
|
||||
if (body_color == "gray")
|
||||
holder_type = /obj/item/weapon/holder/mouse/gray
|
||||
if (body_color == "white")
|
||||
holder_type = /obj/item/weapon/holder/mouse/white
|
||||
if (body_color == "black")
|
||||
holder_type = /obj/item/weapon/holder/mouse/black
|
||||
|
||||
/mob/living/simple_mob/animal/passive/mouse/Crossed(atom/movable/AM as mob|obj)
|
||||
if(AM.is_incorporeal())
|
||||
@@ -100,25 +112,20 @@
|
||||
/mob/living/simple_mob/animal/passive/mouse/white
|
||||
body_color = "white"
|
||||
icon_state = "mouse_white"
|
||||
icon_rest = "mouse_white_sleep"
|
||||
holder_type = /obj/item/weapon/holder/mouse/white
|
||||
|
||||
/mob/living/simple_mob/animal/passive/mouse/gray
|
||||
body_color = "gray"
|
||||
icon_state = "mouse_gray"
|
||||
icon_rest = "mouse_gray_sleep"
|
||||
holder_type = /obj/item/weapon/holder/mouse/gray
|
||||
|
||||
/mob/living/simple_mob/animal/passive/mouse/brown
|
||||
body_color = "brown"
|
||||
icon_state = "mouse_brown"
|
||||
|
||||
/mob/living/simple_mob/animal/passive/mouse/rat
|
||||
name = "rat"
|
||||
tt_desc = "E Rattus rattus"
|
||||
desc = "A large rodent, often seen hiding in maintenance areas and making a nuisance of itself."
|
||||
body_color = "rat"
|
||||
icon_state = "mouse_rat"
|
||||
maxHealth = 20
|
||||
health = 20
|
||||
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/melee/evasive
|
||||
icon_rest = "mouse_brown_sleep"
|
||||
holder_type = /obj/item/weapon/holder/mouse/brown
|
||||
|
||||
//TOM IS ALIVE! SQUEEEEEEEE~K :)
|
||||
/mob/living/simple_mob/animal/passive/mouse/brown/Tom
|
||||
@@ -130,6 +137,57 @@
|
||||
// Change my name back, don't want to be named Tom (666)
|
||||
name = initial(name)
|
||||
|
||||
/mob/living/simple_mob/animal/passive/mouse/black
|
||||
body_color = "black"
|
||||
icon_state = "mouse_black"
|
||||
icon_rest = "mouse_black_sleep"
|
||||
holder_type = /obj/item/weapon/holder/mouse/black
|
||||
|
||||
/mob/living/simple_mob/animal/passive/mouse/rat
|
||||
name = "rat"
|
||||
tt_desc = "E Rattus rattus"
|
||||
desc = "A large rodent, often seen hiding in maintenance areas and making a nuisance of itself."
|
||||
body_color = "rat"
|
||||
icon_state = "mouse_rat"
|
||||
icon_rest = "mouse_rat_sleep"
|
||||
holder_type = /obj/item/weapon/holder/mouse/rat
|
||||
maxHealth = 20
|
||||
health = 20
|
||||
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/melee/evasive
|
||||
|
||||
/mob/living/simple_mob/animal/passive/mouse/operative
|
||||
name = "mouse operative"
|
||||
desc = "A cute mouse fitted with a custom blood red suit. Sneaky."
|
||||
body_color = "operative"
|
||||
icon_state = "mouse_operative"
|
||||
icon_rest = "mouse_operative_sleep"
|
||||
holder_type = /obj/item/weapon/holder/mouse/operative
|
||||
maxHealth = 35
|
||||
|
||||
//It's wearing a void suit, it don't care about atmos
|
||||
health = 35
|
||||
min_oxy = 0
|
||||
max_oxy = 0
|
||||
min_tox = 0
|
||||
max_tox = 0
|
||||
min_co2 = 0
|
||||
max_co2 = 0
|
||||
min_n2 = 0
|
||||
max_n2 = 0
|
||||
maxbodytemp = 700
|
||||
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/melee/evasive
|
||||
|
||||
//The names Cheese... Agent Cheese
|
||||
/mob/living/simple_mob/animal/passive/mouse/operative/agent_cheese
|
||||
name = "Agent Cheese"
|
||||
desc = "I like my cheese Swiss... not American."
|
||||
|
||||
/mob/living/simple_mob/animal/passive/mouse/operative/agent_cheese/New()
|
||||
..()
|
||||
// Change my name back, don't want to be named agent_cheese (666)
|
||||
name = initial(name)
|
||||
|
||||
// Mouse noises
|
||||
/datum/say_list/mouse
|
||||
|
||||
@@ -12,41 +12,45 @@
|
||||
movement_cooldown = 5
|
||||
universal_understand = 1
|
||||
|
||||
/mob/living/simple_mob/animal/passive/mouse/attack_hand(mob/living/L)
|
||||
if(L.a_intent == I_HELP && !istype(loc, /obj/item/weapon/holder)) //if lime intent and not in a holder already
|
||||
if(!src.attempt_to_scoop(L)) //the superior way to handle scooping, checks size
|
||||
..() //mouse too big to grab? pet the large mouse instead
|
||||
else
|
||||
..()
|
||||
|
||||
//No longer in use, as mice create a holder/micro object instead
|
||||
/obj/item/weapon/holder/mouse/attack_self(var/mob/U)
|
||||
for(var/mob/living/simple_mob/M in src.contents)
|
||||
if((I_HELP) && U.checkClickCooldown()) //a little snowflakey, but makes it use the same cooldown as interacting with non-inventory objects
|
||||
U.setClickCooldown(U.get_attack_speed()) //if there's a cleaner way in baycode, I'll change this
|
||||
U.visible_message("<span class='notice'>[U] [M.response_help] \the [M].</span>")
|
||||
|
||||
//Jank grabber that uses the 'attack_hand' insead of 'MouseDrop'
|
||||
/mob/living/simple_mob/animal/passive/mouse/attack_hand(var/atom/over_object)
|
||||
var/mob/living/carbon/human/H = over_object
|
||||
if(holder_type && issmall(src) && istype(H) && !H.lying && Adjacent(H) && (src.a_intent == I_HELP && H.a_intent == I_HELP))
|
||||
if(!issmall(H) || !istype(src, /mob/living/carbon/human))
|
||||
get_scooped(H, (usr == src))
|
||||
return
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_mob/animal/passive/mouse/MouseDrop(var/obj/O) //this proc would be very easy to apply to all mobs, holders generate dynamically
|
||||
if(!(usr == src || O))
|
||||
return ..()
|
||||
if(istype(O, /mob/living) && O.Adjacent(src)) //controls scooping by mobs
|
||||
var/mob/living/L = O
|
||||
if(!src.attempt_to_scoop(L, (src == usr)))
|
||||
return //this way it doesnt default to the generic animal pickup which isnt size restricted
|
||||
if(istype(O, /obj/item/weapon/storage) && O.Adjacent(src)) //controls diving into storage
|
||||
var/obj/item/weapon/storage/S = O
|
||||
var/obj/item/weapon/holder/H = new holder_type(get_turf(src),src) //this works weird, but it creates an empty holder, to see if that holder can fit
|
||||
if(S.can_be_inserted(H) && (src.size_multiplier <= 0.75))
|
||||
visible_message("<b>\The [src]</b> squeezes into \the [S].")
|
||||
H.forceMove(S)
|
||||
return 1
|
||||
else
|
||||
qdel(H) //this deletes the empty holder if it doesnt work
|
||||
to_chat(usr,"<span class='notice'>You can't fit inside \the [S]!</span>")
|
||||
return 0
|
||||
/mob/living/proc/mouse_scooped(var/mob/living/carbon/grabber, var/self_grab)
|
||||
|
||||
if(!holder_type || buckled || pinned.len)
|
||||
return
|
||||
|
||||
if(self_grab)
|
||||
if(src.incapacitated()) return
|
||||
else
|
||||
..()
|
||||
if(grabber.incapacitated()) return
|
||||
|
||||
var/obj/item/weapon/holder/H = new holder_type(get_turf(src), src)
|
||||
grabber.put_in_hands(H)
|
||||
|
||||
if(self_grab)
|
||||
to_chat(grabber, "<span class='notice'>\The [src] clambers onto you!</span>")
|
||||
to_chat(src, "<span class='notice'>You climb up onto \the [grabber]!</span>")
|
||||
grabber.equip_to_slot_if_possible(H, slot_back, 0, 1)
|
||||
else
|
||||
to_chat(grabber, "<span class='notice'>You scoop up \the [src]!</span>")
|
||||
to_chat(src, "<span class='notice'>\The [grabber] scoops you up!</span>")
|
||||
|
||||
add_attack_logs(grabber, H.held_mob, "Scooped up", FALSE) // Not important enough to notify admins, but still helpful.
|
||||
return H
|
||||
|
||||
/mob/living/simple_mob/animal/passive/mouse/white/apple
|
||||
name = "Apple"
|
||||
desc = "Dainty, well groomed and cared for, her eyes glitter with untold knowledge..."
|
||||
@@ -56,4 +60,12 @@
|
||||
..()
|
||||
// Change my name back, don't want to be named Apple (666)
|
||||
name = initial(name)
|
||||
desc = initial(desc)
|
||||
desc = initial(desc)
|
||||
|
||||
|
||||
/obj/item/weapon/holder/mouse/attack_self(mob/living/carbon/user)
|
||||
user.setClickCooldown(user.get_attack_speed())
|
||||
for(var/L in contents)
|
||||
if(isanimal(L))
|
||||
var/mob/living/simple_mob/S = L
|
||||
user.visible_message("<span class='notice'>[user] [S.response_help] \the [S].</span>")
|
||||
|
||||
@@ -57,9 +57,10 @@
|
||||
. = ..()
|
||||
|
||||
var/has_food = FALSE
|
||||
for(var/obj/item/I in L.get_contents()) // Do they have food?
|
||||
if(istype(I, /obj/item/weapon/reagent_containers/food))
|
||||
has_food = TRUE
|
||||
break
|
||||
if(isliving(L))
|
||||
for(var/obj/item/I in L.get_contents()) // Do they have food?
|
||||
if(istype(I, /obj/item/weapon/reagent_containers/food))
|
||||
has_food = TRUE
|
||||
break
|
||||
if(has_food) // Yes? Gimme the food.
|
||||
return FALSE
|
||||
|
||||
@@ -91,14 +91,14 @@
|
||||
name = "Bald"
|
||||
icon_state = "bald"
|
||||
gender = MALE
|
||||
species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST) //Lets all the races be bald if they want.
|
||||
|
||||
species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW) //Lets all the races be bald if they want.
|
||||
|
||||
/datum/sprite_accessory/hair/ponytail6_fixed
|
||||
name = "Ponytail 6 but fixed"
|
||||
icon = 'icons/mob/human_face_vr.dmi'
|
||||
icon_add = 'icons/mob/human_face_vr_add.dmi'
|
||||
icon_state = "hair_ponytail6"
|
||||
species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_NEVREAN, SPECIES_AKULA,SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST)
|
||||
species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_NEVREAN, SPECIES_AKULA,SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW)
|
||||
|
||||
/datum/sprite_accessory/hair/una_hood
|
||||
name = "Cobra Hood"
|
||||
@@ -465,20 +465,20 @@
|
||||
/datum/sprite_accessory/facial_hair
|
||||
icon = 'icons/mob/human_face_or_vr.dmi'
|
||||
color_blend_mode = ICON_MULTIPLY
|
||||
species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST) //This lets all races use the facial hair styles.
|
||||
species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW) //This lets all races use the facial hair styles.
|
||||
|
||||
/datum/sprite_accessory/facial_hair/shaved
|
||||
name = "Shaved"
|
||||
icon_state = "bald"
|
||||
gender = NEUTER
|
||||
species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST) //This needed to be manually defined, apparantly.
|
||||
species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW) //This lets all races use the facial hair styles.
|
||||
|
||||
/datum/sprite_accessory/facial_hair/neck_fluff
|
||||
name = "Neck Fluff"
|
||||
icon = 'icons/mob/human_face_or_vr.dmi'
|
||||
icon_state = "facial_neckfluff"
|
||||
gender = NEUTER
|
||||
species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST)
|
||||
species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW)
|
||||
|
||||
/datum/sprite_accessory/facial_hair/vulp_none
|
||||
name = "None"
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
/obj/structure/ladder_assembly
|
||||
name = "ladder assembly"
|
||||
icon = 'icons/obj/structures.dmi'
|
||||
icon = 'icons/obj/structures_vr.dmi'
|
||||
icon_state = "ladder00"
|
||||
density = FALSE
|
||||
opacity = 0
|
||||
|
||||
@@ -71,7 +71,7 @@
|
||||
return
|
||||
|
||||
var/_z = token["z"]
|
||||
if(_z in using_map.station_levels)
|
||||
if(_z in using_map.persist_levels)
|
||||
. = GetValidTurf(locate(token["x"], token["y"], _z), token)
|
||||
if(.)
|
||||
CreateEntryInstance(., token)
|
||||
@@ -82,7 +82,7 @@
|
||||
if(GetEntryAge(entry) >= entries_expire_at)
|
||||
return FALSE
|
||||
var/turf/T = get_turf(entry)
|
||||
if(!T || !(T.z in using_map.station_levels) )
|
||||
if(!T || !(T.z in using_map.persist_levels) )
|
||||
return FALSE
|
||||
var/area/A = get_area(T)
|
||||
if(!A || (A.flags & AREA_FLAG_IS_NOT_PERSISTENT))
|
||||
|
||||
@@ -30,6 +30,13 @@
|
||||
if(environment.temperature > HEATMODE_TEMP - 30)
|
||||
. = TRUE
|
||||
|
||||
/proc/offsite_environment_check(turf/simulated/T)
|
||||
. = TRUE
|
||||
if(!istype(T))
|
||||
return
|
||||
if(T.z in using_map.station_levels)
|
||||
. = FALSE
|
||||
|
||||
/obj/item/weapon/gun/energy/kinetic_accelerator
|
||||
name = "proto-kinetic accelerator"
|
||||
desc = "A self recharging, ranged mining tool that does increased damage in low pressure."
|
||||
@@ -184,7 +191,7 @@
|
||||
/obj/item/weapon/gun/energy/kinetic_accelerator/proc/empty()
|
||||
if(power_supply)
|
||||
power_supply.use(power_supply.charge)
|
||||
update_icon()
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/gun/energy/kinetic_accelerator/proc/attempt_reload(recharge_time)
|
||||
if(!power_supply)
|
||||
@@ -216,11 +223,12 @@
|
||||
|
||||
/obj/item/weapon/gun/energy/kinetic_accelerator/update_icon()
|
||||
cut_overlays()
|
||||
if(overheat || (power_supply.charge == 0))
|
||||
if(overheat || !power_supply || (power_supply.charge == 0))
|
||||
add_overlay(emptystate)
|
||||
|
||||
#define KA_ENVIRO_TYPE_COLD 0
|
||||
#define KA_ENVIRO_TYPE_HOT 1
|
||||
#define KA_ENVIRO_TYPE_OFFSITE 2
|
||||
|
||||
//Projectiles
|
||||
/obj/item/projectile/kinetic
|
||||
@@ -262,6 +270,12 @@
|
||||
name = "weakened [name]"
|
||||
damage = damage * pressure_decrease
|
||||
pressure_decrease_active = TRUE
|
||||
else if(environment == KA_ENVIRO_TYPE_OFFSITE)
|
||||
if(!offsite_environment_check(get_turf(src)))
|
||||
name = "nullified [name]"
|
||||
nodamage = TRUE
|
||||
damage = 0
|
||||
pressure_decrease_active = TRUE
|
||||
return ..()
|
||||
|
||||
/obj/item/projectile/kinetic/attack_mob(mob/living/target_mob, distance, miss_modifier)
|
||||
@@ -276,6 +290,12 @@
|
||||
name = "weakened [name]"
|
||||
damage = damage * pressure_decrease
|
||||
pressure_decrease_active = TRUE
|
||||
else if(environment == KA_ENVIRO_TYPE_OFFSITE)
|
||||
if(!offsite_environment_check(get_turf(src)))
|
||||
name = "nullified [name]"
|
||||
nodamage = TRUE
|
||||
damage = 0
|
||||
pressure_decrease_active = TRUE
|
||||
return ..()
|
||||
|
||||
/obj/item/projectile/kinetic/on_range()
|
||||
@@ -302,6 +322,12 @@
|
||||
name = "weakened [name]"
|
||||
damage = damage * pressure_decrease
|
||||
pressure_decrease_active = TRUE
|
||||
else if(environment == KA_ENVIRO_TYPE_OFFSITE)
|
||||
if(!offsite_environment_check(get_turf(src)))
|
||||
name = "nullified [name]"
|
||||
nodamage = TRUE
|
||||
damage = 0
|
||||
pressure_decrease_active = TRUE
|
||||
var/turf/target_turf = get_turf(target)
|
||||
if(!target_turf)
|
||||
target_turf = get_turf(src)
|
||||
@@ -391,8 +417,8 @@
|
||||
if(forcemove)
|
||||
forceMove(get_turf(KA))
|
||||
|
||||
//use this one to modify the projectile itself
|
||||
/obj/item/borg/upgrade/modkit/proc/modify_projectile(obj/item/projectile/kinetic/K)
|
||||
|
||||
//use this one for effects you want to trigger before any damage is done at all and before damage is decreased by pressure
|
||||
/obj/item/borg/upgrade/modkit/proc/projectile_prehit(obj/item/projectile/kinetic/K, atom/target, obj/item/weapon/gun/energy/kinetic_accelerator/KA)
|
||||
//use this one for effects you want to trigger before mods that do damage
|
||||
@@ -420,6 +446,7 @@
|
||||
/obj/item/borg/upgrade/modkit/damage/modify_projectile(obj/item/projectile/kinetic/K)
|
||||
K.damage += modifier
|
||||
|
||||
|
||||
//Cooldown
|
||||
/obj/item/borg/upgrade/modkit/cooldown
|
||||
name = "cooldown decrease"
|
||||
@@ -522,7 +549,7 @@
|
||||
//Tendril-unique modules
|
||||
/obj/item/borg/upgrade/modkit/cooldown/repeater
|
||||
name = "rapid repeater"
|
||||
desc = "Quarters the kinetic accelerator's cooldown on striking a living target, but greatly increases the base cooldown."
|
||||
desc = "Quarters the kinetic accelerator's cooldown on striking a living or mineral target, but greatly increases the base cooldown."
|
||||
denied_type = /obj/item/borg/upgrade/modkit/cooldown/repeater
|
||||
modifier = -14 //Makes the cooldown 3 seconds(with no cooldown mods) if you miss. Don't miss.
|
||||
cost = 50
|
||||
@@ -547,7 +574,6 @@
|
||||
modifier = 2.5 //Not a very effective method of healing.
|
||||
cost = 20
|
||||
var/static/list/damage_heal_order = list(BRUTE, BURN, OXY)
|
||||
|
||||
/obj/item/borg/upgrade/modkit/lifesteal/projectile_prehit(obj/item/projectile/kinetic/K, atom/target, obj/item/weapon/gun/energy/kinetic_accelerator/KA)
|
||||
if(isliving(target) && isliving(K.firer))
|
||||
var/mob/living/L = target
|
||||
@@ -582,7 +608,6 @@
|
||||
cost = 30
|
||||
var/maximum_bounty = 25
|
||||
var/list/bounties_reaped = list()
|
||||
|
||||
/obj/item/borg/upgrade/modkit/bounty/projectile_prehit(obj/item/projectile/kinetic/K, atom/target, obj/item/weapon/gun/energy/kinetic_accelerator/KA)
|
||||
if(isliving(target))
|
||||
var/mob/living/L = target
|
||||
@@ -593,7 +618,6 @@
|
||||
SM.reward_target = null
|
||||
qdel(SM)
|
||||
L.apply_status_effect(STATUS_EFFECT_SYPHONMARK, src)
|
||||
|
||||
/obj/item/borg/upgrade/modkit/bounty/projectile_strike(obj/item/projectile/kinetic/K, turf/target_turf, atom/target, obj/item/weapon/gun/energy/kinetic_accelerator/KA)
|
||||
if(isliving(target))
|
||||
var/mob/living/L = target
|
||||
@@ -603,7 +627,6 @@
|
||||
kill_modifier *= K.pressure_decrease
|
||||
var/armor = L.run_armor_check(K.def_zone, K.flag, null, null, K.armour_penetration)
|
||||
L.apply_damage(bounties_reaped[L.type]*kill_modifier, K.damage_type, K.def_zone, armor)
|
||||
|
||||
/obj/item/borg/upgrade/modkit/bounty/proc/get_kill(mob/living/L)
|
||||
var/bonus_mod = 1
|
||||
if(ismegafauna(L)) //megafauna reward
|
||||
@@ -616,7 +639,7 @@
|
||||
|
||||
//Indoors
|
||||
/obj/item/borg/upgrade/modkit/indoors
|
||||
name = "decrease pressure penalty"
|
||||
name = "hacked pressure modulator"
|
||||
desc = "A remarkably illegal modification kit that increases the damage a kinetic accelerator does in pressurized environments."
|
||||
modifier = 2
|
||||
denied_type = /obj/item/borg/upgrade/modkit/indoors
|
||||
@@ -626,14 +649,25 @@
|
||||
/obj/item/borg/upgrade/modkit/indoors/modify_projectile(obj/item/projectile/kinetic/K)
|
||||
K.pressure_decrease *= modifier
|
||||
|
||||
/obj/item/borg/upgrade/modkit/offsite
|
||||
name = "offsite pressure modulator"
|
||||
desc = "A non-standard modification kit that increases the damage a kinetic accelerator does in pressurized environments, \
|
||||
in exchange for nullifying any projected forces while on or in an associated facility."
|
||||
denied_type = /obj/item/borg/upgrade/modkit/heater
|
||||
maximum_of_type = 1
|
||||
cost = 35
|
||||
|
||||
/obj/item/borg/upgrade/modkit/offsite/modify_projectile(obj/item/projectile/kinetic/K)
|
||||
K.environment = KA_ENVIRO_TYPE_OFFSITE
|
||||
|
||||
// Atmospheric
|
||||
/obj/item/borg/upgrade/modkit/heater
|
||||
name = "temperature modulator"
|
||||
desc = "A remarkably unusual modification kit that makes kinetic accelerators more usable in hot, overpressurized environments, \
|
||||
in exchange for making them weak elsewhere, like the cold or in space."
|
||||
denied_type = /obj/item/borg/upgrade/modkit/indoors
|
||||
denied_type = /obj/item/borg/upgrade/modkit/offsite
|
||||
maximum_of_type = 1
|
||||
cost = 30
|
||||
cost = 10
|
||||
|
||||
/obj/item/borg/upgrade/modkit/heater/modify_projectile(obj/item/projectile/kinetic/K)
|
||||
K.environment = KA_ENVIRO_TYPE_HOT
|
||||
@@ -646,12 +680,10 @@
|
||||
desc = "Allows creatures normally incapable of firing guns to operate the weapon when installed."
|
||||
cost = 20
|
||||
denied_type = /obj/item/borg/upgrade/modkit/trigger_guard
|
||||
|
||||
/obj/item/borg/upgrade/modkit/trigger_guard/install(obj/item/weapon/gun/energy/kinetic_accelerator/KA, mob/user)
|
||||
. = ..()
|
||||
if(.)
|
||||
KA.trigger_guard = TRIGGER_GUARD_ALLOW_ALL
|
||||
|
||||
/obj/item/borg/upgrade/modkit/trigger_guard/uninstall(obj/item/weapon/gun/energy/kinetic_accelerator/KA)
|
||||
KA.trigger_guard = TRIGGER_GUARD_NORMAL
|
||||
..()
|
||||
|
||||
@@ -85,6 +85,8 @@
|
||||
|
||||
|
||||
/obj/item/weapon/gun/magnetic/matfed/attackby(var/obj/item/thing, var/mob/user)
|
||||
. = ..()
|
||||
update_rating_mod()
|
||||
if(removable_components)
|
||||
if(thing.is_crowbar())
|
||||
if(!manipulator)
|
||||
@@ -112,7 +114,6 @@
|
||||
update_rating_mod()
|
||||
return
|
||||
|
||||
|
||||
if(is_type_in_list(thing, load_type))
|
||||
var/obj/item/stack/material/M = thing
|
||||
var/success = FALSE
|
||||
@@ -147,7 +148,6 @@
|
||||
playsound(src, 'sound/weapons/flipblade.ogg', 50, 1)
|
||||
update_icon()
|
||||
return
|
||||
. = ..()
|
||||
|
||||
#define GEN_STARTING -1
|
||||
#define GEN_OFF 0
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
id = "chocolate_bar"
|
||||
result = null
|
||||
required_reagents = list("soymilk" = 2, "coco" = 2, "sugar" = 2)
|
||||
catalysts = list("enzyme" = 5)
|
||||
result_amount = 1
|
||||
|
||||
/decl/chemical_reaction/instant/food/chocolate_bar/on_reaction(var/datum/reagents/holder, var/created_volume)
|
||||
@@ -44,6 +45,7 @@
|
||||
id = "chocolate_bar"
|
||||
result = null
|
||||
required_reagents = list("milk" = 2, "coco" = 2, "sugar" = 2)
|
||||
catalysts = list("enzyme" = 5)
|
||||
result_amount = 1
|
||||
|
||||
/decl/chemical_reaction/instant/food/chocolate_bar2/on_reaction(var/datum/reagents/holder, var/created_volume)
|
||||
@@ -180,4 +182,4 @@
|
||||
var/location = get_turf(holder.my_atom)
|
||||
for(var/i = 1, i <= created_volume, i++)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/spreads/butter(location)
|
||||
return
|
||||
return
|
||||
|
||||
@@ -36,14 +36,21 @@ CIRCUITS BELOW
|
||||
id = "oriontrail"
|
||||
req_tech = list(TECH_DATA = 1)
|
||||
build_path = /obj/item/weapon/circuitboard/arcade/orion_trail
|
||||
sort_string = "MAAAZ" // Duplicate string, really need to redo this whole thing
|
||||
sort_string = "MAAAB"
|
||||
|
||||
/datum/design/circuit/clawmachine
|
||||
name = "grab-a-gift arcade machine"
|
||||
id = "clawmachine"
|
||||
req_tech = list(TECH_DATA = 1)
|
||||
build_path = /obj/item/weapon/circuitboard/arcade/clawmachine
|
||||
sort_string = "MAAAC"
|
||||
|
||||
/datum/design/circuit/jukebox
|
||||
name = "jukebox"
|
||||
id = "jukebox"
|
||||
req_tech = list(TECH_MAGNET = 2, TECH_DATA = 1)
|
||||
build_path = /obj/item/weapon/circuitboard/jukebox
|
||||
sort_string = "MAAAB"
|
||||
sort_string = "MAAAO"
|
||||
|
||||
/datum/design/circuit/seccamera
|
||||
name = "security camera monitor"
|
||||
|
||||
@@ -268,6 +268,13 @@
|
||||
time = 15
|
||||
materials = list(MAT_STEEL = 2000, MAT_GLASS = 750, MAT_PLASTIC = 500)
|
||||
|
||||
/datum/design/item/prosfab/pros/internal/stomach
|
||||
name = "Prosthetic Stomach"
|
||||
id = "pros_stomach"
|
||||
build_path = /obj/item/organ/internal/stomach
|
||||
time = 15
|
||||
materials = list(MAT_STEEL = 5625, MAT_GLASS = 1000)
|
||||
|
||||
//////////////////// Cyborg Parts ////////////////////
|
||||
/datum/design/item/prosfab/cyborg
|
||||
category = list("Cyborg Parts")
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
/datum/tgs_chat_command/manifest/Run(datum/tgs_chat_user/sender, params)
|
||||
if(config.nodebot_enabled)
|
||||
ManifestToHtml()
|
||||
return "!!ManifestCompiled"
|
||||
return "Read the god damn channel topic"
|
||||
else
|
||||
var/outp = "Crew Manifest:"
|
||||
var/list/total = list()
|
||||
|
||||
@@ -139,14 +139,15 @@ GLOBAL_DATUM_INIT(iconCache, /savefile, new("data/iconCache.sav")) //Cache of ic
|
||||
set waitfor = FALSE
|
||||
// Only send them the number of buffered messages, instead of the ENTIRE log
|
||||
var/list/results = vchat_get_messages(owner.ckey, message_buffer) //If there's bad performance on reconnects, look no further
|
||||
for(var/i in results.len to 1 step -1)
|
||||
var/list/message = results[i]
|
||||
var/count = 10
|
||||
to_chat_immediate(owner, message["time"], message["message"])
|
||||
count++
|
||||
if(count >= 10)
|
||||
count = 0
|
||||
CHECK_TICK
|
||||
if(islist(results))
|
||||
for(var/i in results.len to 1 step -1)
|
||||
var/list/message = results[i]
|
||||
var/count = 10
|
||||
to_chat_immediate(owner, message["time"], message["message"])
|
||||
count++
|
||||
if(count >= 10)
|
||||
count = 0
|
||||
CHECK_TICK
|
||||
|
||||
//It din work
|
||||
/datum/chatOutput/proc/become_broken()
|
||||
|
||||
@@ -1347,4 +1347,65 @@
|
||||
|
||||
End CHOMP Removal*/
|
||||
|
||||
|
||||
// Astra - // Astra
|
||||
/obj/item/weapon/material/knife/ritual/fluff/astra
|
||||
name = "Polished Ritual Knife"
|
||||
desc = "A well kept strange ritual knife, There is a small tag with the name 'Astra Ether' on it. They are probably looking for this."
|
||||
icon = 'icons/obj/wizard.dmi'
|
||||
icon_state = "render"
|
||||
|
||||
//AlFalah - Charlotte Graves
|
||||
/obj/item/weapon/storage/fancy/fluff/charlotte
|
||||
name = "inconspicuous cigarette case"
|
||||
desc = "A SkyTron 3000 cigarette case with no additional functions. The buttons and CRT monitor are completely for show and have no functions. Seriously. "
|
||||
icon_state = "charlotte"
|
||||
icon = 'icons/vore/custom_items_vr.dmi'
|
||||
storage_slots = 7
|
||||
can_hold = list(/obj/item/clothing/mask/smokable/cigarette, /obj/item/weapon/flame/lighter, /obj/item/trash/cigbutt)
|
||||
icon_type = "charlotte"
|
||||
//brand = "\improper Professional 120"
|
||||
w_class = ITEMSIZE_TINY
|
||||
starts_with = list(/obj/item/clothing/mask/smokable/cigarette = 7)
|
||||
|
||||
//Ashling - Antoinette deKaultieste
|
||||
/obj/item/weapon/material/knife/machete/hatchet/unathiknife/fluff/antoinette
|
||||
name = "sawtooth ritual knife"
|
||||
desc = "A mostly decorative knife made from thin ceramic and toothed with large black fangs. Printed on the flat is an eight-armed cross, like an asterisk with an extra stroke, ringed by a calligraphy-style crescent."
|
||||
attack_verb = list("mauled", "bit", "sawed", "butchered")
|
||||
dulled = 1
|
||||
default_material = "glass"
|
||||
|
||||
|
||||
//Ashling - Antoinette deKaultieste
|
||||
/obj/item/clothing/accessory/storage/ritualharness/fluff/antoinette
|
||||
name = "silk knife loops"
|
||||
desc = "A clip-on pair of pouched loops made from surprisingly sturdy silk. Made for holding knives and small vials in a pinch."
|
||||
icon_state = "unathiharness1"
|
||||
slots = 2
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/bottle/poppy
|
||||
name = "poppy flour bottle"
|
||||
desc = "A small bottle of finely ground poppyseed and mixed dried berries."
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
icon_state = "bottle3"
|
||||
prefill = list("bicaridine" = 30, "nutriment" = 30)
|
||||
|
||||
/obj/item/clothing/accessory/storage/ritualharness/fluff/antoinette/Initialize()
|
||||
. = ..()
|
||||
hold.max_storage_space = ITEMSIZE_COST_SMALL * 2
|
||||
hold.can_hold = list(/obj/item/weapon/material/knife, /obj/item/weapon/reagent_containers/glass/bottle)
|
||||
|
||||
new /obj/item/weapon/material/knife/machete/hatchet/unathiknife/fluff/antoinette(hold)
|
||||
new /obj/item/weapon/reagent_containers/glass/bottle/poppy(hold)
|
||||
|
||||
//Hunterbirk - Amaryll
|
||||
//This is a 'technical item' which basically is meant to represent rippiing things up with bare claws.
|
||||
/obj/item/weapon/surgical/scalpel/amaryll_claws
|
||||
name = "Amaryll's Claws"
|
||||
desc = "This doesn't quite look like what it really is."
|
||||
icon = 'icons/vore/custom_items_vr.dmi'
|
||||
icon_state = "claws"
|
||||
drop_sound = null
|
||||
pickup_sound = null
|
||||
origin_tech = null
|
||||
matter = null
|
||||
|
||||
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 243 KiB After Width: | Height: | Size: 248 KiB |
|
Before Width: | Height: | Size: 259 KiB After Width: | Height: | Size: 264 KiB |
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 165 KiB After Width: | Height: | Size: 165 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 61 KiB |
374
maps/expedition_vr/beach/submaps/mountains.dm
Normal file
@@ -0,0 +1,374 @@
|
||||
// This causes PoI maps to get 'checked' and compiled, when undergoing a unit test.
|
||||
// This is so CI can validate PoIs, and ensure future changes don't break PoIs, as PoIs are loaded at runtime and the compiler can't catch errors.
|
||||
// When adding a new PoI, please add it to this list.
|
||||
#if MAP_TEST
|
||||
#include "deadBeacon.dmm"
|
||||
#include "prepper1.dmm"
|
||||
#include "quarantineshuttle.dmm"
|
||||
#include "Mineshaft1.dmm"
|
||||
#include "Scave1.dmm"
|
||||
#include "crashed_ufo.dmm"
|
||||
#include "crashed_ufo_frigate.dmm"
|
||||
#include "crystal1.dmm"
|
||||
#include "crystal2.dmm"
|
||||
#include "crystal3.dmm"
|
||||
#include "lost_explorer.dmm"
|
||||
#include "CaveTrench.dmm"
|
||||
#include "Cavelake.dmm"
|
||||
#include "Rockb1.dmm"
|
||||
#include "ritual.dmm"
|
||||
#include "temple.dmm"
|
||||
#include "CrashedMedShuttle1.dmm"
|
||||
#include "digsite.dmm"
|
||||
#include "vault1.dmm"
|
||||
#include "vault2.dmm"
|
||||
#include "vault3.dmm"
|
||||
#include "vault4.dmm"
|
||||
#include "vault5.dmm"
|
||||
#include "vault6.dmm"
|
||||
#include "IceCave1A.dmm"
|
||||
#include "IceCave1B.dmm"
|
||||
#include "IceCave1C.dmm"
|
||||
#include "SwordCave.dmm"
|
||||
#include "SupplyDrop1.dmm"
|
||||
#include "BlastMine1.dmm"
|
||||
#include "crashedcontainmentshuttle.dmm"
|
||||
#include "deadspy.dmm"
|
||||
#include "lava_trench.dmm"
|
||||
#include "Geyser1.dmm"
|
||||
#include "Geyser2.dmm"
|
||||
#include "Geyser3.dmm"
|
||||
#include "Cliff1.dmm"
|
||||
#include "excavation1.dmm"
|
||||
#include "spatial_anomaly.dmm"
|
||||
#include "speakeasy_vr.dmm"
|
||||
#endif
|
||||
|
||||
// The 'mountains' is the mining z-level, and has a lot of caves.
|
||||
// POIs here spawn in two different sections, the top half and bottom half of the map.
|
||||
// The bottom half should be fairly tame, with perhaps a few enviromental hazards.
|
||||
// The top half is when things start getting dangerous, but the loot gets better.
|
||||
|
||||
/datum/map_template/surface/mountains
|
||||
name = "Mountain Content"
|
||||
desc = "Don't dig too deep!"
|
||||
|
||||
// 'Normal' templates get used on the bottom half, and should be safer.
|
||||
/datum/map_template/surface/mountains/normal
|
||||
|
||||
// 'Deep' templates get used on the top half, and should be more dangerous and rewarding.
|
||||
/datum/map_template/surface/mountains/deep
|
||||
|
||||
// To be added: Templates for cave exploration when they are made.
|
||||
|
||||
/****************
|
||||
* Normal Caves *
|
||||
****************/
|
||||
|
||||
/datum/map_template/surface/mountains/normal/deadBeacon
|
||||
name = "Abandoned Relay"
|
||||
desc = "An unregistered comms relay, abandoned to the elements."
|
||||
mappath = 'maps/expedition_vr/beach/submaps/deadBeacon.dmm'
|
||||
cost = 10
|
||||
|
||||
/datum/map_template/surface/mountains/normal/prepper1
|
||||
name = "Prepper Bunker"
|
||||
desc = "A little hideaway for someone with more time and money than sense."
|
||||
mappath = 'maps/expedition_vr/beach/submaps/prepper1.dmm'
|
||||
cost = 10
|
||||
|
||||
/datum/map_template/surface/mountains/normal/qshuttle
|
||||
name = "Quarantined Shuttle"
|
||||
desc = "An emergency landing turned viral outbreak turned tragedy."
|
||||
mappath = 'maps/expedition_vr/beach/submaps/quarantineshuttle.dmm'
|
||||
cost = 20
|
||||
|
||||
/datum/map_template/surface/mountains/normal/Mineshaft1
|
||||
name = "Abandoned Mineshaft 1"
|
||||
desc = "An abandoned minning tunnel from a lost money making effort."
|
||||
mappath = 'maps/expedition_vr/beach/submaps/Mineshaft1.dmm'
|
||||
cost = 5
|
||||
|
||||
/datum/map_template/surface/mountains/normal/crystal1
|
||||
name = "Crystal Cave 1"
|
||||
desc = "A small cave with glowing gems and diamonds."
|
||||
mappath = 'maps/expedition_vr/beach/submaps/crystal1.dmm'
|
||||
cost = 5
|
||||
allow_duplicates = TRUE
|
||||
|
||||
/datum/map_template/surface/mountains/normal/crystal2
|
||||
name = "Crystal Cave 2"
|
||||
desc = "A moderate sized cave with glowing gems and diamonds."
|
||||
mappath = 'maps/expedition_vr/beach/submaps/crystal2.dmm'
|
||||
cost = 10
|
||||
allow_duplicates = TRUE
|
||||
|
||||
/datum/map_template/surface/mountains/normal/crystal2
|
||||
name = "Crystal Cave 3"
|
||||
desc = "A large spiral of crystals with diamonds in the center."
|
||||
mappath = 'maps/expedition_vr/beach/submaps/crystal3.dmm'
|
||||
cost = 15
|
||||
|
||||
/datum/map_template/surface/mountains/normal/lost_explorer
|
||||
name = "Lost Explorer"
|
||||
desc = "The remains of an explorer who rotted away ages ago, and their equipment."
|
||||
mappath = 'maps/expedition_vr/beach/submaps/lost_explorer.dmm'
|
||||
cost = 5
|
||||
allow_duplicates = TRUE
|
||||
|
||||
/datum/map_template/surface/mountains/normal/Rockb1
|
||||
name = "Rocky Base 1"
|
||||
desc = "Someones underground hidey hole"
|
||||
mappath = 'maps/expedition_vr/beach/submaps/Rockb1.dmm'
|
||||
cost = 15
|
||||
|
||||
/datum/map_template/surface/mountains/normal/corgiritual
|
||||
name = "Dark Ritual"
|
||||
desc = "Who put all these plushies here? What are they doing?"
|
||||
mappath = 'maps/expedition_vr/beach/submaps/ritual.dmm'
|
||||
cost = 15
|
||||
|
||||
/datum/map_template/surface/mountains/normal/abandonedtemple
|
||||
name = "Abandoned Temple"
|
||||
desc = "An ancient temple, long since abandoned. Perhaps alien in origin?"
|
||||
mappath = 'maps/expedition_vr/beach/submaps/temple.dmm'
|
||||
cost = 20
|
||||
|
||||
/datum/map_template/surface/mountains/normal/digsite
|
||||
name = "Dig Site"
|
||||
desc = "A small abandoned dig site."
|
||||
mappath = 'maps/expedition_vr/beach/submaps/digsite.dmm'
|
||||
cost = 10
|
||||
|
||||
/datum/map_template/surface/mountains/normal/vault1
|
||||
name = "Mine Vault 1"
|
||||
desc = "A small vault with potential loot."
|
||||
mappath = 'maps/expedition_vr/beach/submaps/vault1.dmm'
|
||||
cost = 5
|
||||
allow_duplicates = TRUE
|
||||
template_group = "Buried Vaults"
|
||||
|
||||
/datum/map_template/surface/mountains/normal/vault2
|
||||
name = "Mine Vault 2"
|
||||
desc = "A small vault with potential loot."
|
||||
mappath = 'maps/expedition_vr/beach/submaps/vault2.dmm'
|
||||
cost = 5
|
||||
allow_duplicates = TRUE
|
||||
template_group = "Buried Vaults"
|
||||
|
||||
/datum/map_template/surface/mountains/normal/vault3
|
||||
name = "Mine Vault 3"
|
||||
desc = "A small vault with potential loot. Also a horrible suprise."
|
||||
mappath = 'maps/expedition_vr/beach/submaps/vault3.dmm'
|
||||
cost = 15
|
||||
template_group = "Buried Vaults"
|
||||
|
||||
/datum/map_template/surface/mountains/normal/IceCave1A
|
||||
name = "Ice Cave 1A"
|
||||
desc = "This cave's slippery ice makes it hard to navigate, but determined explorers will be rewarded."
|
||||
mappath = 'maps/expedition_vr/beach/submaps/IceCave1A.dmm'
|
||||
cost = 10
|
||||
|
||||
/datum/map_template/surface/mountains/normal/IceCave1B
|
||||
name = "Ice Cave 1B"
|
||||
desc = "This cave's slippery ice makes it hard to navigate, but determined explorers will be rewarded."
|
||||
mappath = 'maps/expedition_vr/beach/submaps/IceCave1B.dmm'
|
||||
cost = 10
|
||||
|
||||
/datum/map_template/surface/mountains/normal/IceCave1C
|
||||
name = "Ice Cave 1C"
|
||||
desc = "This cave's slippery ice makes it hard to navigate, but determined explorers will be rewarded."
|
||||
mappath = 'maps/expedition_vr/beach/submaps/IceCave1C.dmm'
|
||||
cost = 10
|
||||
|
||||
/datum/map_template/surface/mountains/normal/SwordCave
|
||||
name = "Cursed Sword Cave"
|
||||
desc = "An underground lake. The sword on the lake's island holds a terrible secret."
|
||||
mappath = 'maps/expedition_vr/beach/submaps/SwordCave.dmm'
|
||||
|
||||
/datum/map_template/surface/mountains/normal/supplydrop1
|
||||
name = "Supply Drop 1"
|
||||
desc = "A drop pod that landed deep within the mountains."
|
||||
mappath = 'maps/expedition_vr/beach/submaps/SupplyDrop1.dmm'
|
||||
cost = 10
|
||||
allow_duplicates = TRUE
|
||||
|
||||
/datum/map_template/surface/mountains/normal/crashedcontainmentshuttle
|
||||
name = "Crashed Cargo Shuttle"
|
||||
desc = "A severely damaged military shuttle, its cargo seems to remain intact."
|
||||
mappath = 'maps/expedition_vr/beach/submaps/crashedcontainmentshuttle.dmm'
|
||||
cost = 30
|
||||
|
||||
/datum/map_template/surface/mountains/normal/deadspy
|
||||
name = "Spy Remains"
|
||||
desc = "W+M1 = Salt."
|
||||
mappath = 'maps/expedition_vr/beach/submaps/deadspy.dmm'
|
||||
cost = 15
|
||||
|
||||
/datum/map_template/surface/mountains/normal/geyser1
|
||||
name = "Ore-Rich Geyser"
|
||||
desc = "A subterranean geyser that produces steam. This one has a particularly abundant amount of materials surrounding it."
|
||||
mappath = 'maps/expedition_vr/beach/submaps/Geyser1.dmm'
|
||||
cost = 5
|
||||
allow_duplicates = TRUE
|
||||
template_group = "Underground Geysers"
|
||||
|
||||
/datum/map_template/surface/mountains/normal/geyser2
|
||||
name = "Fenced Geyser"
|
||||
desc = "A subterranean geyser that produces steam. This one has a damaged fence surrounding it."
|
||||
mappath = 'maps/expedition_vr/beach/submaps/Geyser2.dmm'
|
||||
cost = 5
|
||||
allow_duplicates = TRUE
|
||||
template_group = "Underground Geysers"
|
||||
|
||||
/datum/map_template/surface/mountains/normal/geyser3
|
||||
name = "Magmatic Geyser"
|
||||
desc = "A subterranean geyser that produces incendiary gas. It is recessed into the ground, and filled with magma. It's a relatively dormant volcano."
|
||||
mappath = 'maps/expedition_vr/beach/submaps/Geyser2.dmm'
|
||||
cost = 10
|
||||
allow_duplicates = TRUE
|
||||
template_group = "Underground Geysers"
|
||||
|
||||
/datum/map_template/surface/mountains/normal/cliff1
|
||||
name = "Ore-Topped Cliff"
|
||||
desc = "A raised area of rock created by volcanic forces."
|
||||
mappath = 'maps/expedition_vr/beach/submaps/Cliff1.dmm'
|
||||
cost = 5
|
||||
allow_duplicates = TRUE
|
||||
template_group = "Underground Cliffs"
|
||||
|
||||
/datum/map_template/surface/mountains/normal/deadly_rabbit // VOREStation Edit
|
||||
name = "The Killer Rabbit"
|
||||
desc = "A cave where the Knights of the Round have fallen to a murderous Rabbit."
|
||||
mappath = 'maps/expedition_vr/beach/submaps/deadly_rabbit_vr.dmm'
|
||||
cost = 5
|
||||
allow_duplicates = FALSE
|
||||
|
||||
/**************
|
||||
* Deep Caves *
|
||||
**************/
|
||||
|
||||
/* Vorestation Removal
|
||||
/datum/map_template/surface/mountains/deep/lost_explorer
|
||||
name = "Lost Explorer, Deep"
|
||||
desc = "The remains of an explorer who rotted away ages ago, and their equipment. Again."
|
||||
mappath = 'maps/expedition_vr/beach/submaps/lost_explorer.dmm'
|
||||
cost = 5
|
||||
allow_duplicates = TRUE */
|
||||
|
||||
/datum/map_template/surface/mountains/normal/crashed_ufo //VOREStation Edit
|
||||
name = "Crashed UFO"
|
||||
desc = "A (formerly) flying saucer that is now embedded into the mountain, yet it still seems to be running..."
|
||||
mappath = 'maps/expedition_vr/beach/submaps/crashed_ufo.dmm'
|
||||
cost = 40
|
||||
discard_prob = 50
|
||||
|
||||
/datum/map_template/surface/mountains/normal/crashed_ufo_frigate //VOREStation Edit
|
||||
name = "Crashed UFO Frigate"
|
||||
desc = "A (formerly) flying saucer that is now embedded into the mountain, yet the combat protocols still seem to be running..."
|
||||
mappath = 'maps/expedition_vr/beach/submaps/crashed_ufo_frigate.dmm'
|
||||
cost = 60
|
||||
discard_prob = 50
|
||||
|
||||
/datum/map_template/surface/mountains/normal/Scave1 //VOREStation Edit
|
||||
name = "Spider Cave 1"
|
||||
desc = "A minning tunnel home to an aggressive collection of spiders."
|
||||
mappath = 'maps/expedition_vr/beach/submaps/Scave1.dmm'
|
||||
cost = 20
|
||||
|
||||
/datum/map_template/surface/mountains/normal/CaveTrench //VOREStation Edit
|
||||
name = "Cave River"
|
||||
desc = "A strange underground river."
|
||||
mappath = 'maps/expedition_vr/beach/submaps/CaveTrench.dmm'
|
||||
cost = 20
|
||||
|
||||
/datum/map_template/surface/mountains/normal/Cavelake //VOREStation Edit
|
||||
name = "Cave Lake"
|
||||
desc = "A large underground lake."
|
||||
mappath = 'maps/expedition_vr/beach/submaps/Cavelake.dmm'
|
||||
cost = 20
|
||||
|
||||
/datum/map_template/surface/mountains/normal/vault1 //VOREStation Edit
|
||||
name = "Mine Vault 1"
|
||||
desc = "A small vault with potential loot."
|
||||
mappath = 'maps/expedition_vr/beach/submaps/vault1.dmm'
|
||||
cost = 5
|
||||
allow_duplicates = TRUE
|
||||
template_group = "Buried Vaults"
|
||||
|
||||
/datum/map_template/surface/mountains/normal/vault2 //VOREStation Edit
|
||||
name = "Mine Vault 2"
|
||||
desc = "A small vault with potential loot."
|
||||
mappath = 'maps/expedition_vr/beach/submaps/vault2.dmm'
|
||||
cost = 5
|
||||
allow_duplicates = TRUE
|
||||
template_group = "Buried Vaults"
|
||||
|
||||
/datum/map_template/surface/mountains/normal/vault3 //VOREStation Edit
|
||||
name = "Mine Vault 3"
|
||||
desc = "A small vault with potential loot. Also a horrible suprise."
|
||||
mappath = 'maps/expedition_vr/beach/submaps/vault3.dmm'
|
||||
cost = 15
|
||||
template_group = "Buried Vaults"
|
||||
|
||||
/datum/map_template/surface/mountains/normal/vault4 //VOREStation Edit
|
||||
name = "Mine Vault 4"
|
||||
desc = "A small xeno vault with potential loot. Also horrible suprises."
|
||||
mappath = 'maps/expedition_vr/beach/submaps/vault4.dmm'
|
||||
cost = 20
|
||||
template_group = "Buried Vaults"
|
||||
|
||||
/datum/map_template/surface/mountains/normal/vault5 //VOREStation Edit
|
||||
name = "Mine Vault 5"
|
||||
desc = "A small xeno vault with potential loot. Also major horrible suprises."
|
||||
mappath = 'maps/expedition_vr/beach/submaps/vault5.dmm'
|
||||
cost = 25
|
||||
template_group = "Buried Vaults"
|
||||
|
||||
/datum/map_template/surface/mountains/normal/vault6 //VOREStation Edit
|
||||
name = "Mine Vault 6"
|
||||
desc = "A small mercenary tower with potential loot."
|
||||
mappath = 'maps/expedition_vr/beach/submaps/vault6.dmm'
|
||||
cost = 25
|
||||
template_group = "Buried Vaults"
|
||||
|
||||
/datum/map_template/surface/mountains/normal/BlastMine1 //VOREStation Edit
|
||||
name = "Blast Mine 1"
|
||||
desc = "An abandoned blast mining site, seems that local wildlife has moved in."
|
||||
mappath = 'maps/expedition_vr/beach/submaps/BlastMine1.dmm'
|
||||
cost = 20
|
||||
|
||||
/datum/map_template/surface/mountains/normal/lava_trench //VOREStation Edit
|
||||
name = "lava trench"
|
||||
desc = "A long stretch of lava underground, almost river-like, with a small crystal research outpost on the side."
|
||||
mappath = 'maps/expedition_vr/beach/submaps/lava_trench.dmm'
|
||||
cost = 20
|
||||
fixed_orientation = TRUE
|
||||
|
||||
/datum/map_template/surface/mountains/normal/crashedmedshuttle //VOREStation Edit
|
||||
name = "Crashed Med Shuttle"
|
||||
desc = "A medical response shuttle that went missing some time ago. So this is where they went."
|
||||
mappath = 'maps/expedition_vr/beach/submaps/CrashedMedShuttle1.dmm'
|
||||
cost = 20
|
||||
fixed_orientation = TRUE
|
||||
|
||||
/datum/map_template/surface/mountains/normal/excavation1 //VOREStation Edit
|
||||
name = "Excavation Site"
|
||||
desc = "An abandoned mining site."
|
||||
mappath = 'maps/expedition_vr/beach/submaps/excavation1.dmm'
|
||||
cost = 20
|
||||
|
||||
/datum/map_template/surface/mountains/deep/spatial_anomaly
|
||||
name = "spatial anomaly"
|
||||
desc = "A strange section of the caves that seems twist and turn in ways that shouldn't be physically possible."
|
||||
mappath = 'maps/expedition_vr/beach/submaps/spatial_anomaly.dmm'
|
||||
cost = 20
|
||||
fixed_orientation = TRUE
|
||||
|
||||
/datum/map_template/surface/mountains/normal/Speakeasy //VOREStation add
|
||||
name = "Speakeasy"
|
||||
desc = "A hidden underground bar to serve drinks in secret and in style."
|
||||
mappath = 'maps/expedition_vr/beach/submaps/speakeasy_vr.dmm'
|
||||
cost = 10
|
||||
allow_duplicates = FALSE
|
||||
|
||||
@@ -2136,6 +2136,7 @@
|
||||
#include "code\modules\clothing\spacesuits\rig\modules\specific\metalfoam_launcher.dm"
|
||||
#include "code\modules\clothing\spacesuits\rig\modules\specific\mounted_gun.dm"
|
||||
#include "code\modules\clothing\spacesuits\rig\modules\specific\mounted_gun_vr.dm"
|
||||
#include "code\modules\clothing\spacesuits\rig\modules\specific\passive_protection.dm"
|
||||
#include "code\modules\clothing\spacesuits\rig\modules\specific\pat_module_vr.dm"
|
||||
#include "code\modules\clothing\spacesuits\rig\modules\specific\powersink.dm"
|
||||
#include "code\modules\clothing\spacesuits\rig\modules\specific\rescue_pharm_vr.dm"
|
||||
|
||||