mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-07-21 12:05:28 +01:00
Merge remote-tracking branch 'VOREStation/master' into upstream-merge-7790
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
name: Autochangelog
|
||||
on:
|
||||
pull_request_target:
|
||||
types: closed
|
||||
branches:
|
||||
- master
|
||||
|
||||
env:
|
||||
BASENAME: "polaris"
|
||||
|
||||
jobs:
|
||||
autochangelog:
|
||||
name: Autochangelog
|
||||
runs-on: ubuntu-16.04
|
||||
if: github.event.pull_request.merged == true
|
||||
steps:
|
||||
- uses: /actions/checkout@v2
|
||||
- name: Ensure +x on CI directory
|
||||
run: |
|
||||
chmod -R +x ./tools/ci
|
||||
- uses: actions/setup-python@v2
|
||||
with:
|
||||
python-version: '3.7'
|
||||
- name: Generate Changelog
|
||||
run: |
|
||||
pip install pyyaml
|
||||
python tools/GenerateChangelog/ss13_autochangelog.py \
|
||||
html/changelogs \
|
||||
${{ github.event.pull_request.number }} \
|
||||
"${{ github.event.pull_request.user.login }}" \
|
||||
"${{ github.event.pull_request.body }}"
|
||||
python tools/GenerateChangelog/ss13_genchangelog.py \
|
||||
html/changelog.html \
|
||||
html/changelogs
|
||||
- uses: stefanzweifel/git-auto-commit-action@v4
|
||||
with:
|
||||
commit_message: Automatic changelog generation for ${{ github.events.pull_request.number }}
|
||||
branch: ${{ github.events.pull_request.base }}
|
||||
commit_user_name: Autochangelog Bot
|
||||
@@ -173,6 +173,5 @@ What is the naming convention for planes or layers?
|
||||
plane = initial(plane)
|
||||
layer = initial(layer)
|
||||
|
||||
|
||||
// Check if a mob can "logically" see an atom plane
|
||||
#define MOB_CAN_SEE_PLANE(M, P) (P <= PLANE_WORLD || (P in M.planes_visible))
|
||||
|
||||
@@ -9,30 +9,17 @@
|
||||
#define DM_SIZE_STEAL "Size Steal"
|
||||
#define DM_HEAL "Heal"
|
||||
#define DM_EGG "Encase In Egg"
|
||||
#define DM_TRANSFORM "Transform"
|
||||
|
||||
//#define DM_ITEMWEAK "Digest (Item Friendly)"
|
||||
//#define DM_STRIPDIGEST "Strip Digest (Items Only)"
|
||||
//#define DM_DIGEST_NUMB "Digest (Numbing)"
|
||||
|
||||
//TF modes
|
||||
#define DM_TRANSFORM_HAIR_AND_EYES "Transform (Hair and eyes)"
|
||||
#define DM_TRANSFORM_MALE "Transform (Male)"
|
||||
#define DM_TRANSFORM_FEMALE "Transform (Female)"
|
||||
#define DM_TRANSFORM_KEEP_GENDER "Transform (Keep Gender)"
|
||||
#define DM_TRANSFORM_REPLICA "Transform (Replica Of Self)"
|
||||
#define DM_TRANSFORM_CHANGE_SPECIES_AND_TAUR "Transform (Change Species and Taur)"
|
||||
#define DM_TRANSFORM_CHANGE_SPECIES_AND_TAUR_EGG "Transform (Change Species and Taur) (EGG)"
|
||||
#define DM_TRANSFORM_REPLICA_EGG "Transform (Replica Of Self) (EGG)"
|
||||
#define DM_TRANSFORM_KEEP_GENDER_EGG "Transform (Keep Gender) (EGG)"
|
||||
#define DM_TRANSFORM_MALE_EGG "Transform (Male) (EGG)"
|
||||
#define DM_TRANSFORM_FEMALE_EGG "Transform (Female) (EGG)"
|
||||
|
||||
//Addon mode flags
|
||||
#define DM_FLAG_NUMBING 0x1
|
||||
#define DM_FLAG_STRIPPING 0x2
|
||||
#define DM_FLAG_LEAVEREMAINS 0x4
|
||||
#define DM_FLAG_THICKBELLY 0x8
|
||||
#define DM_FLAG_AFFECTWORN 0x10
|
||||
|
||||
//Item related modes
|
||||
#define IM_HOLD "Hold"
|
||||
|
||||
+14
-1
@@ -157,6 +157,8 @@
|
||||
#define MAT_GRAPHITE "graphite"
|
||||
#define MAT_LEATHER "leather"
|
||||
#define MAT_CHITIN "chitin"
|
||||
#define MAT_CLOTH "cloth"
|
||||
#define MAT_SYNCLOTH "syncloth"
|
||||
|
||||
#define SHARD_SHARD "shard"
|
||||
#define SHARD_SHRAPNEL "shrapnel"
|
||||
@@ -480,4 +482,15 @@ GLOBAL_LIST_INIT(all_volume_channels, list(
|
||||
VOLUME_CHANNEL_ALARMS,
|
||||
VOLUME_CHANNEL_VORE,
|
||||
VOLUME_CHANNEL_DOORS,
|
||||
))
|
||||
))
|
||||
|
||||
#define APPEARANCECHANGER_CHANGED_RACE "Race"
|
||||
#define APPEARANCECHANGER_CHANGED_GENDER "Gender"
|
||||
#define APPEARANCECHANGER_CHANGED_GENDER_ID "Gender Identity"
|
||||
#define APPEARANCECHANGER_CHANGED_SKINTONE "Skin Tone"
|
||||
#define APPEARANCECHANGER_CHANGED_SKINCOLOR "Skin Color"
|
||||
#define APPEARANCECHANGER_CHANGED_HAIRSTYLE "Hair Style"
|
||||
#define APPEARANCECHANGER_CHANGED_HAIRCOLOR "Hair Color"
|
||||
#define APPEARANCECHANGER_CHANGED_F_HAIRSTYLE "Facial Hair Style"
|
||||
#define APPEARANCECHANGER_CHANGED_F_HAIRCOLOR "Facial Hair Color"
|
||||
#define APPEARANCECHANGER_CHANGED_EYES "Eye Color"
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
#define LANGUAGE_ALAI "Alai"
|
||||
#define LANGUAGE_ZADDAT "Vedahq"
|
||||
#define LANGUAGE_PROMETHEAN "Promethean Biolinguistics"
|
||||
#define LANGUAGE_BLOB "Blob"
|
||||
#define LANGUAGE_BLOB "Chemosense Transmission"
|
||||
#define LANGUAGE_GIBBERISH "Babel"
|
||||
|
||||
// Language flags.
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
#define LANGUAGE_ENOCHIAN "Enochian"
|
||||
#define LANGUAGE_VESPINAE "Vespinae"
|
||||
#define LANGUAGE_SPACER "Spacer"
|
||||
#define LANGUAGE_CLOWNISH "Coulrian"
|
||||
|
||||
#define LANGUAGE_CHIMPANZEE "Chimpanzee"
|
||||
#define LANGUAGE_NEAERA "Neaera"
|
||||
|
||||
@@ -5,4 +5,7 @@ GLOBAL_LIST_EMPTY(meteor_list)
|
||||
GLOBAL_LIST_EMPTY(wire_color_directory) // This is an associative list with the `holder_type` as the key, and a list of colors as the value.
|
||||
|
||||
// Reference list for disposal sort junctions. Filled up by sorting junction's New()
|
||||
GLOBAL_LIST_EMPTY(tagger_locations)
|
||||
GLOBAL_LIST_EMPTY(tagger_locations)
|
||||
|
||||
GLOBAL_LIST_INIT(char_directory_tags, list("Pred", "Prey", "Switch", "Non-Vore", "Unset"))
|
||||
GLOBAL_LIST_INIT(char_directory_erptags, list("Top", "Bottom", "Switch", "No ERP", "Unset"))
|
||||
@@ -94,13 +94,13 @@ var/global/list/string_slot_flags = list(
|
||||
"holster" = SLOT_HOLSTER
|
||||
)
|
||||
|
||||
/proc/get_mannequin(var/ckey)
|
||||
if(!mannequins_)
|
||||
mannequins_ = new()
|
||||
. = mannequins_[ckey]
|
||||
if(!.)
|
||||
. = new/mob/living/carbon/human/dummy/mannequin()
|
||||
mannequins_[ckey] = .
|
||||
GLOBAL_LIST_EMPTY(mannequins)
|
||||
/proc/get_mannequin(var/ckey = "NULL")
|
||||
var/mob/living/carbon/human/dummy/mannequin/M = GLOB.mannequins[ckey]
|
||||
if(!istype(M))
|
||||
GLOB.mannequins[ckey] = new /mob/living/carbon/human/dummy/mannequin(null)
|
||||
M = GLOB.mannequins[ckey]
|
||||
return M
|
||||
|
||||
//////////////////////////
|
||||
/////Initial Building/////
|
||||
@@ -215,7 +215,7 @@ var/global/list/string_slot_flags = list(
|
||||
GLOB.closet_appearances[T] = app
|
||||
|
||||
// VOREStation Add - Vore Modes!
|
||||
paths = typesof(/datum/digest_mode) - /datum/digest_mode/transform
|
||||
paths = typesof(/datum/digest_mode)
|
||||
for(var/T in paths)
|
||||
var/datum/digest_mode/DM = new T
|
||||
GLOB.digest_modes[DM.id] = DM
|
||||
|
||||
@@ -8,9 +8,11 @@ var/global/list/tail_styles_list = list() // Stores /datum/sprite_accessory/tail
|
||||
var/global/list/wing_styles_list = list() // Stores /datum/sprite_accessory/wing indexed by type
|
||||
var/global/list/negative_traits = list() // Negative custom species traits, indexed by path
|
||||
var/global/list/neutral_traits = list() // Neutral custom species traits, indexed by path
|
||||
var/global/list/everyone_traits = list() // Neutral traits available to all species, indexed by path
|
||||
var/global/list/positive_traits = list() // Positive custom species traits, indexed by path
|
||||
var/global/list/traits_costs = list() // Just path = cost list, saves time in char setup
|
||||
var/global/list/all_traits = list() // All of 'em at once (same instances)
|
||||
var/global/list/active_ghost_pods = list()
|
||||
|
||||
var/global/list/sensorpreflist = list("Off", "Binary", "Vitals", "Tracking", "No Preference") //TFF 5/8/19 - Suit Sensors global list
|
||||
|
||||
@@ -106,30 +108,74 @@ var/global/list/fancy_release_sounds = list(
|
||||
)
|
||||
|
||||
var/global/list/global_vore_egg_types = list(
|
||||
"Unathi" = UNATHI_EGG,
|
||||
"Tajaran" = TAJARAN_EGG,
|
||||
"Akula" = AKULA_EGG,
|
||||
"Skrell" = SKRELL_EGG,
|
||||
"Nevrean" = NEVREAN_EGG,
|
||||
"Sergal" = SERGAL_EGG,
|
||||
"Human" = HUMAN_EGG,
|
||||
"Slime" = SLIME_EGG,
|
||||
"Egg" = EGG_EGG,
|
||||
"Xenochimera" = XENOCHIMERA_EGG,
|
||||
"Xenomorph" = XENOMORPH_EGG)
|
||||
"Unathi",
|
||||
"Tajara",
|
||||
"Akula",
|
||||
"Skrell",
|
||||
"Sergal",
|
||||
"Nevrean",
|
||||
"Human",
|
||||
"Slime",
|
||||
"Egg",
|
||||
"Xenochimera",
|
||||
"Xenomorph",
|
||||
"Chocolate",
|
||||
"Boney",
|
||||
"Slime glob",
|
||||
"Chicken",
|
||||
"Synthetic",
|
||||
"Bluespace Floppy",
|
||||
"Bluespace Compressed File",
|
||||
"Bluespace CD",
|
||||
"Escape pod",
|
||||
"Cooking error",
|
||||
"Web cocoon",
|
||||
"Honeycomb",
|
||||
"Bug cocoon",
|
||||
"Rock",
|
||||
"Yellow",
|
||||
"Blue",
|
||||
"Green",
|
||||
"Orange",
|
||||
"Purple",
|
||||
"Red",
|
||||
"Rainbow",
|
||||
"Spotted pink")
|
||||
|
||||
var/global/list/tf_vore_egg_types = list(
|
||||
"Unathi" = /obj/structure/closet/secure_closet/egg/unathi,
|
||||
"Tajara" = /obj/structure/closet/secure_closet/egg/tajaran,
|
||||
"Akula" = /obj/structure/closet/secure_closet/egg/shark,
|
||||
"Skrell" = /obj/structure/closet/secure_closet/egg/skrell,
|
||||
"Sergal" = /obj/structure/closet/secure_closet/egg/sergal,
|
||||
"Nevrean" = /obj/structure/closet/secure_closet/egg/nevrean,
|
||||
"Human" = /obj/structure/closet/secure_closet/egg/human,
|
||||
"Slime" = /obj/structure/closet/secure_closet/egg/slime,
|
||||
"Egg" = /obj/structure/closet/secure_closet/egg,
|
||||
"Xenochimera" = /obj/structure/closet/secure_closet/egg/scree,
|
||||
"Xenomorph" = /obj/structure/closet/secure_closet/egg/xenomorph)
|
||||
"Unathi" = /obj/item/weapon/storage/vore_egg/unathi,
|
||||
"Tajara" = /obj/item/weapon/storage/vore_egg/tajaran,
|
||||
"Akula" = /obj/item/weapon/storage/vore_egg/shark,
|
||||
"Skrell" = /obj/item/weapon/storage/vore_egg/skrell,
|
||||
"Sergal" = /obj/item/weapon/storage/vore_egg/sergal,
|
||||
"Nevrean" = /obj/item/weapon/storage/vore_egg/nevrean,
|
||||
"Human" = /obj/item/weapon/storage/vore_egg/human,
|
||||
"Slime" = /obj/item/weapon/storage/vore_egg/slime,
|
||||
"Egg" = /obj/item/weapon/storage/vore_egg,
|
||||
"Xenochimera" = /obj/item/weapon/storage/vore_egg/scree,
|
||||
"Xenomorph" = /obj/item/weapon/storage/vore_egg/xenomorph,
|
||||
"Chocolate" = /obj/item/weapon/storage/vore_egg/chocolate,
|
||||
"Boney" = /obj/item/weapon/storage/vore_egg/owlpellet,
|
||||
"Slime glob" = /obj/item/weapon/storage/vore_egg/slimeglob,
|
||||
"Chicken" = /obj/item/weapon/storage/vore_egg/chicken,
|
||||
"Synthetic" = /obj/item/weapon/storage/vore_egg/synthetic,
|
||||
"Bluespace Floppy" = /obj/item/weapon/storage/vore_egg/floppy,
|
||||
"Bluespace Compressed File" = /obj/item/weapon/storage/vore_egg/file,
|
||||
"Bluespace CD" = /obj/item/weapon/storage/vore_egg/cd,
|
||||
"Escape pod" = /obj/item/weapon/storage/vore_egg/escapepod,
|
||||
"Cooking error" = /obj/item/weapon/storage/vore_egg/badrecipe,
|
||||
"Web cocoon" = /obj/item/weapon/storage/vore_egg/cocoon,
|
||||
"Honeycomb" = /obj/item/weapon/storage/vore_egg/honeycomb,
|
||||
"Bug cocoon" = /obj/item/weapon/storage/vore_egg/bugcocoon,
|
||||
"Rock" = /obj/item/weapon/storage/vore_egg/rock,
|
||||
"Yellow" = /obj/item/weapon/storage/vore_egg/yellow,
|
||||
"Blue" = /obj/item/weapon/storage/vore_egg/blue,
|
||||
"Green" = /obj/item/weapon/storage/vore_egg/green,
|
||||
"Orange" = /obj/item/weapon/storage/vore_egg/orange,
|
||||
"Purple" = /obj/item/weapon/storage/vore_egg/purple,
|
||||
"Red" = /obj/item/weapon/storage/vore_egg/red,
|
||||
"Rainbow" = /obj/item/weapon/storage/vore_egg/rainbow,
|
||||
"Spotted pink" = /obj/item/weapon/storage/vore_egg/pinkspots)
|
||||
|
||||
var/global/list/edible_trash = list(/obj/item/broken_device,
|
||||
/obj/item/clothing/accessory/collar, //TFF 10/7/19 - add option to nom collars,
|
||||
@@ -180,7 +226,8 @@ var/global/list/edible_trash = list(/obj/item/broken_device,
|
||||
/obj/item/weapon/storage/fancy/cigarettes,
|
||||
/obj/item/weapon/storage/fancy/crayons,
|
||||
/obj/item/weapon/storage/fancy/egg_box,
|
||||
/obj/item/weapon/storage/wallet)
|
||||
/obj/item/weapon/storage/wallet,
|
||||
/obj/item/weapon/storage/vore_egg)
|
||||
|
||||
var/global/list/contamination_flavors = list(
|
||||
"Generic" = contamination_flavors_generic,
|
||||
@@ -457,7 +504,7 @@ var/global/list/remainless_species = list(SPECIES_PROMETHEAN,
|
||||
for(var/path in paths)
|
||||
var/datum/sprite_accessory/hair_accessory/instance = new path()
|
||||
hair_accesories_list[path] = instance
|
||||
|
||||
|
||||
// Custom species traits
|
||||
paths = typesof(/datum/trait) - /datum/trait
|
||||
for(var/path in paths)
|
||||
@@ -472,6 +519,8 @@ var/global/list/remainless_species = list(SPECIES_PROMETHEAN,
|
||||
negative_traits[path] = instance
|
||||
if(0)
|
||||
neutral_traits[path] = instance
|
||||
if(!(instance.custom_only))
|
||||
everyone_traits[path] = instance
|
||||
if(0.1 to INFINITY)
|
||||
positive_traits[path] = instance
|
||||
|
||||
@@ -488,4 +537,22 @@ var/global/list/remainless_species = list(SPECIES_PROMETHEAN,
|
||||
for(var/species_name in whitelisted_icons)
|
||||
custom_species_bases += species_name
|
||||
|
||||
// Weaver recipe stuff
|
||||
paths = typesof(/datum/weaver_recipe/structure) - /datum/weaver_recipe/structure
|
||||
for(var/path in paths)
|
||||
var/datum/weaver_recipe/instance = new path()
|
||||
if(!instance.title)
|
||||
continue //A prototype or something
|
||||
weavable_structures[instance.title] = instance
|
||||
|
||||
paths = typesof(/datum/weaver_recipe/item) - /datum/weaver_recipe/item
|
||||
for(var/path in paths)
|
||||
var/datum/weaver_recipe/instance = new path()
|
||||
if(!instance.title)
|
||||
continue //A prototype or something
|
||||
weavable_items[instance.title] = instance
|
||||
|
||||
return 1 // Hooks must return 1
|
||||
|
||||
var/global/list/weavable_structures = list()
|
||||
var/global/list/weavable_items = list()
|
||||
@@ -1290,6 +1290,9 @@ var/mob/dview/dview_mob = new
|
||||
/proc/dview(var/range = world.view, var/center, var/invis_flags = 0)
|
||||
if(!center)
|
||||
return
|
||||
if(!dview_mob) //VOREStation Add: Debugging
|
||||
dview_mob = new
|
||||
log_error("Had to recreate the dview mob!")
|
||||
|
||||
dview_mob.loc = center
|
||||
|
||||
@@ -1613,6 +1616,46 @@ GLOBAL_REAL_VAR(list/stack_trace_storage)
|
||||
/proc/href(href_src, list/href_params, href_text)
|
||||
return "<a href='?src=\ref[href_src];[list2params(href_params)]'>[href_text]</a>"
|
||||
|
||||
// This is a helper for anything that wants to render the map in TGUI
|
||||
/proc/get_tgui_plane_masters()
|
||||
. = list()
|
||||
// 'Utility' planes
|
||||
. += new /obj/screen/plane_master/fullbright //Lighting system (lighting_overlay objects)
|
||||
. += new /obj/screen/plane_master/lighting //Lighting system (but different!)
|
||||
. += new /obj/screen/plane_master/ghosts //Ghosts!
|
||||
. += new /obj/screen/plane_master{plane = PLANE_AI_EYE} //AI Eye!
|
||||
|
||||
. += new /obj/screen/plane_master{plane = PLANE_CH_STATUS} //Status is the synth/human icon left side of medhuds
|
||||
. += new /obj/screen/plane_master{plane = PLANE_CH_HEALTH} //Health bar
|
||||
. += new /obj/screen/plane_master{plane = PLANE_CH_LIFE} //Alive-or-not icon
|
||||
. += new /obj/screen/plane_master{plane = PLANE_CH_ID} //Job ID icon
|
||||
. += new /obj/screen/plane_master{plane = PLANE_CH_WANTED} //Wanted status
|
||||
. += new /obj/screen/plane_master{plane = PLANE_CH_IMPLOYAL} //Loyalty implants
|
||||
. += new /obj/screen/plane_master{plane = PLANE_CH_IMPTRACK} //Tracking implants
|
||||
. += new /obj/screen/plane_master{plane = PLANE_CH_IMPCHEM} //Chemical implants
|
||||
. += new /obj/screen/plane_master{plane = PLANE_CH_SPECIAL} //"Special" role stuff
|
||||
. += new /obj/screen/plane_master{plane = PLANE_CH_STATUS_OOC} //OOC status HUD
|
||||
|
||||
. += new /obj/screen/plane_master{plane = PLANE_ADMIN1} //For admin use
|
||||
. += new /obj/screen/plane_master{plane = PLANE_ADMIN2} //For admin use
|
||||
. += new /obj/screen/plane_master{plane = PLANE_ADMIN3} //For admin use
|
||||
|
||||
. += new /obj/screen/plane_master{plane = PLANE_MESONS} //Meson-specific things like open ceilings.
|
||||
. += new /obj/screen/plane_master{plane = PLANE_BUILDMODE} //Things that only show up while in build mode
|
||||
|
||||
// Real tangible stuff planes
|
||||
. += new /obj/screen/plane_master/main{plane = TURF_PLANE}
|
||||
. += new /obj/screen/plane_master/main{plane = OBJ_PLANE}
|
||||
. += new /obj/screen/plane_master/main{plane = MOB_PLANE}
|
||||
. += new /obj/screen/plane_master/cloaked //Cloaked atoms!
|
||||
|
||||
//VOREStation Add - Random other plane masters
|
||||
. += new /obj/screen/plane_master{plane = PLANE_CH_STATUS_R} //Right-side status icon
|
||||
. += new /obj/screen/plane_master{plane = PLANE_CH_HEALTH_VR} //Health bar but transparent at 100
|
||||
. += new /obj/screen/plane_master{plane = PLANE_CH_BACKUP} //Backup implant status
|
||||
. += new /obj/screen/plane_master{plane = PLANE_CH_VANTAG} //Vore Antags
|
||||
. += new /obj/screen/plane_master{plane = PLANE_AUGMENTED} //Augmented reality
|
||||
//VOREStation Add End
|
||||
/proc/CallAsync(datum/source, proctype, list/arguments)
|
||||
set waitfor = FALSE
|
||||
return call(source, proctype)(arglist(arguments))
|
||||
return call(source, proctype)(arglist(arguments))
|
||||
|
||||
+5
-10
@@ -354,19 +354,13 @@
|
||||
facedir(direction)
|
||||
|
||||
/obj/screen/click_catcher
|
||||
name = "Darkness"
|
||||
icon = 'icons/mob/screen_gen.dmi'
|
||||
icon_state = "click_catcher"
|
||||
plane = CLICKCATCHER_PLANE
|
||||
layer = LAYER_HUD_UNDER
|
||||
mouse_opacity = 2
|
||||
screen_loc = "CENTER-7,CENTER-7"
|
||||
|
||||
/obj/screen/click_catcher/proc/MakeGreed()
|
||||
. = list()
|
||||
for(var/i = 0, i<15, i++)
|
||||
for(var/j = 0, j<15, j++)
|
||||
var/obj/screen/click_catcher/CC = new()
|
||||
CC.screen_loc = "NORTH-[i],EAST-[j]"
|
||||
. += CC
|
||||
screen_loc = "SOUTHWEST to NORTHEAST"
|
||||
|
||||
/obj/screen/click_catcher/Click(location, control, params)
|
||||
var/list/modifiers = params2list(params)
|
||||
@@ -374,7 +368,8 @@
|
||||
var/mob/living/carbon/C = usr
|
||||
C.swap_hand()
|
||||
else
|
||||
var/turf/T = screen_loc2turf(screen_loc, get_turf(usr))
|
||||
var/list/P = params2list(params)
|
||||
var/turf/T = screen_loc2turf(P["screen-loc"], get_turf(usr))
|
||||
if(T)
|
||||
T.Click(location, control, params)
|
||||
. = 1
|
||||
|
||||
@@ -161,6 +161,13 @@
|
||||
#define ui_ghost_pai "SOUTH: 6,CENTER+2:24"
|
||||
#define ui_ghost_updown "SOUTH: 6,CENTER+3:24"
|
||||
|
||||
// NIF Soulcatcher guest ones
|
||||
#define ui_nifsc_reenter "SOUTH:6,CENTER-3:24"
|
||||
#define ui_nifsc_arproj "SOUTH:6,CENTER-2:24"
|
||||
#define ui_nifsc_jumptoowner "SOUTH:6,CENTER-1:24"
|
||||
#define ui_nifsc_nme "SOUTH:6,CENTER:24"
|
||||
#define ui_nifsc_nsay "SOUTH:6,CENTER+1:24"
|
||||
|
||||
// Rig panel
|
||||
#define ui_rig_deco1 "WEST:-7, SOUTH+5"
|
||||
#define ui_rig_deco2 "WEST:-7, SOUTH+6"
|
||||
|
||||
@@ -1,3 +1,2 @@
|
||||
#define ui_shadekin_dark_display "EAST-1:28,CENTER-3:15"
|
||||
#define ui_shadekin_energy_display "EAST-1:28,CENTER-4:15"
|
||||
#define ui_shadekin_display "EAST-1:28,CENTER-3:15"
|
||||
#define ui_xenochimera_danger_display "EAST-1:28,CENTER-3:15"
|
||||
@@ -14,7 +14,7 @@
|
||||
var/other = list()
|
||||
var/hotkeybuttons = list()
|
||||
var/slot_info = list()
|
||||
|
||||
|
||||
HUD.adding = adding
|
||||
HUD.other = other
|
||||
HUD.hotkeybuttons = hotkeybuttons //These can be disabled for hotkey users
|
||||
@@ -258,15 +258,10 @@
|
||||
hud_elements |= healths
|
||||
|
||||
//VOREStation Addition begin
|
||||
shadekin_dark_display = new /obj/screen/shadekin/darkness()
|
||||
shadekin_dark_display.screen_loc = ui_shadekin_dark_display
|
||||
shadekin_dark_display.icon_state = "dark"
|
||||
hud_elements |= shadekin_dark_display
|
||||
|
||||
shadekin_energy_display = new /obj/screen/shadekin/energy()
|
||||
shadekin_energy_display.screen_loc = ui_shadekin_energy_display
|
||||
shadekin_energy_display.icon_state = "energy0"
|
||||
hud_elements |= shadekin_energy_display
|
||||
shadekin_display = new /obj/screen/shadekin()
|
||||
shadekin_display.screen_loc = ui_shadekin_display
|
||||
shadekin_display.icon_state = "shadekin"
|
||||
hud_elements |= shadekin_display
|
||||
|
||||
xenochimera_danger_display = new /obj/screen/xenochimera/danger_level()
|
||||
xenochimera_danger_display.screen_loc = ui_xenochimera_danger_display
|
||||
|
||||
@@ -11,6 +11,11 @@
|
||||
var/mob/living/simple_mob/shadekin/SK = usr
|
||||
if(istype(SK))
|
||||
to_chat(usr,"<span class='notice'><b>Energy:</b> [SK.energy] ([SK.dark_gains])</span>")
|
||||
if("shadekin status")
|
||||
var/turf/T = get_turf(usr)
|
||||
if(T)
|
||||
var/darkness = round(1 - T.get_lumcount(),0.1)
|
||||
to_chat(usr,"<span class='notice'><b>Darkness:</b> [darkness]</span>")
|
||||
var/mob/living/carbon/human/H = usr
|
||||
if(istype(H) && istype(H.species, /datum/species/shadekin))
|
||||
to_chat(usr,"<span class='notice'><b>Energy:</b> [H.shadekin_get_energy(H)]</span>")
|
||||
|
||||
@@ -0,0 +1,102 @@
|
||||
/obj/screen/nifsc
|
||||
icon = 'icons/mob/screen_nifsc.dmi'
|
||||
|
||||
/obj/screen/nifsc/MouseEntered(location,control,params)
|
||||
flick(icon_state + "_anim", src)
|
||||
openToolTip(usr, src, params, title = name, content = desc)
|
||||
|
||||
/obj/screen/nifsc/MouseExited()
|
||||
closeToolTip(usr)
|
||||
|
||||
/obj/screen/nifsc/Click()
|
||||
closeToolTip(usr)
|
||||
|
||||
/obj/screen/nifsc/reenter
|
||||
name = "Re-enter NIF"
|
||||
desc = "Return into the NIF"
|
||||
icon_state = "reenter"
|
||||
|
||||
/obj/screen/nifsc/reenter/Click()
|
||||
..()
|
||||
var/mob/living/carbon/brain/caught_soul/CS = usr
|
||||
CS.reenter_soulcatcher()
|
||||
|
||||
/obj/screen/nifsc/arproj
|
||||
name = "AR project"
|
||||
desc = "Project your form into Augmented Reality for those around your predator with the appearance of your loaded character."
|
||||
icon_state = "arproj"
|
||||
|
||||
/obj/screen/nifsc/arproj/Click()
|
||||
..()
|
||||
var/mob/living/carbon/brain/caught_soul/CS = usr
|
||||
CS.ar_project()
|
||||
|
||||
/obj/screen/nifsc/jumptoowner
|
||||
name = "Jump back to host"
|
||||
desc = "Jumb back to the Soulcather host"
|
||||
icon_state = "jump"
|
||||
|
||||
/obj/screen/nifsc/jumptoowner/Click()
|
||||
..()
|
||||
var/mob/living/carbon/brain/caught_soul/CS = usr
|
||||
CS.jump_to_owner()
|
||||
|
||||
/obj/screen/nifsc/nme
|
||||
name = "Emote into Soulcatcher"
|
||||
desc = "Emote into the NIF's Soulcatcher (circumventing AR emoting)"
|
||||
icon_state = "nme"
|
||||
|
||||
/obj/screen/nifsc/nme/Click()
|
||||
..()
|
||||
var/mob/living/carbon/brain/caught_soul/CS = usr
|
||||
CS.nme()
|
||||
|
||||
/obj/screen/nifsc/nsay
|
||||
name = "Speak into Soulcatcher"
|
||||
desc = "Speak into the NIF's Soulcatcher (circumventing AR speaking)"
|
||||
icon_state = "nsay"
|
||||
|
||||
/obj/screen/nifsc/nsay/Click()
|
||||
..()
|
||||
var/mob/living/carbon/brain/caught_soul/CS = usr
|
||||
CS.nsay()
|
||||
|
||||
|
||||
/mob/living/carbon/brain/caught_soul/create_mob_hud(datum/hud/HUD, apply_to_client = TRUE)
|
||||
..()
|
||||
|
||||
var/list/adding = list()
|
||||
HUD.adding = adding
|
||||
|
||||
var/obj/screen/using
|
||||
|
||||
using = new /obj/screen/nifsc/reenter()
|
||||
using.screen_loc = ui_nifsc_reenter
|
||||
using.hud = src
|
||||
adding += using
|
||||
|
||||
using = new /obj/screen/nifsc/arproj()
|
||||
using.screen_loc = ui_nifsc_arproj
|
||||
using.hud = src
|
||||
adding += using
|
||||
|
||||
using = new /obj/screen/nifsc/jumptoowner()
|
||||
using.screen_loc = ui_nifsc_jumptoowner
|
||||
using.hud = src
|
||||
adding += using
|
||||
|
||||
using = new /obj/screen/nifsc/nme()
|
||||
using.screen_loc = ui_nifsc_nme
|
||||
using.hud = src
|
||||
adding += using
|
||||
|
||||
using = new /obj/screen/nifsc/nsay()
|
||||
using.screen_loc = ui_nifsc_nsay
|
||||
using.hud = src
|
||||
adding += using
|
||||
|
||||
|
||||
if(client && apply_to_client)
|
||||
client.screen = list()
|
||||
client.screen += HUD.adding
|
||||
client.screen += client.void
|
||||
@@ -5,7 +5,6 @@ SUBSYSTEM_DEF(overlays)
|
||||
priority = FIRE_PRIORITY_OVERLAYS
|
||||
init_order = INIT_ORDER_OVERLAY
|
||||
|
||||
var/initialized = FALSE
|
||||
var/list/queue // Queue of atoms needing overlay compiling (TODO-VERIFY!)
|
||||
var/list/stats
|
||||
var/list/overlay_icon_state_caches // Cache thing
|
||||
@@ -22,7 +21,6 @@ var/global/image/appearance_bro = new() // Temporarily super-global because of B
|
||||
stats = list()
|
||||
|
||||
/datum/controller/subsystem/overlays/Initialize()
|
||||
initialized = TRUE
|
||||
fire(mc_check = FALSE)
|
||||
..()
|
||||
|
||||
|
||||
@@ -22,6 +22,7 @@ PROCESSING_SUBSYSTEM_DEF(chemistry)
|
||||
/datum/controller/subsystem/processing/chemistry/Initialize()
|
||||
initialize_chemical_reactions()
|
||||
initialize_chemical_reagents()
|
||||
..()
|
||||
|
||||
//Chemical Reactions - Initialises all /datum/chemical_reaction into a list
|
||||
// It is filtered into multiple lists within a list.
|
||||
|
||||
@@ -4,9 +4,6 @@
|
||||
// Also handles initialization and processing of overmap sectors.
|
||||
//
|
||||
|
||||
// This global variable exists for legacy support so we don't have to rename every shuttle_controller to SSshuttles yet.
|
||||
var/global/datum/controller/subsystem/shuttles/shuttle_controller
|
||||
|
||||
SUBSYSTEM_DEF(shuttles)
|
||||
name = "Shuttles"
|
||||
wait = 2 SECONDS
|
||||
@@ -35,9 +32,6 @@ SUBSYSTEM_DEF(shuttles)
|
||||
|
||||
var/tmp/list/current_run // Shuttles remaining to process this fire() tick
|
||||
|
||||
/datum/controller/subsystem/shuttles/PreInit()
|
||||
global.shuttle_controller = src // TODO - Remove this! Change everything to point at SSshuttles intead
|
||||
|
||||
/datum/controller/subsystem/shuttles/Initialize(timeofday)
|
||||
last_landmark_registration_time = world.time
|
||||
// Find all declared shuttle datums and initailize them. (Okay, queue them for initialization a few lines further down)
|
||||
|
||||
@@ -49,10 +49,7 @@ var/global/datum/controller/subsystem/ticker/ticker
|
||||
/datum/controller/subsystem/ticker/Initialize()
|
||||
pregame_timeleft = config.pregame_time
|
||||
send2mainirc("Server lobby is loaded and open at byond://[config.serverurl ? config.serverurl : (config.server ? config.server : "[world.address]:[world.port]")]")
|
||||
|
||||
// Set up the global announcer
|
||||
GLOB.autospeaker = new (null, null, null, 1)
|
||||
|
||||
GLOB.autospeaker = new (null, null, null, 1) //Set up Global Announcer
|
||||
return ..()
|
||||
|
||||
/datum/controller/subsystem/ticker/fire(resumed = FALSE)
|
||||
@@ -186,11 +183,6 @@ var/global/datum/controller/subsystem/ticker/ticker
|
||||
if(adm["total"] == 0)
|
||||
send2adminirc("A round has started with no admins online.")
|
||||
|
||||
/* supply_controller.process() //Start the supply shuttle regenerating points -- TLE // handled in scheduler
|
||||
master_controller.process() //Start master_controller.process()
|
||||
lighting_controller.process() //Start processing DynamicAreaLighting updates
|
||||
*/
|
||||
|
||||
current_state = GAME_STATE_PLAYING
|
||||
Master.SetRunLevel(RUNLEVEL_GAME)
|
||||
|
||||
|
||||
@@ -26,6 +26,12 @@
|
||||
name = "mechanical trap"
|
||||
path =/obj/item/weapon/beartrap
|
||||
|
||||
/datum/category_item/autolathe/devices/barbedwire
|
||||
name = "barbed wire"
|
||||
path = /obj/item/weapon/material/barbedwire
|
||||
hidden = 1
|
||||
resources = list(DEFAULT_WALL_MATERIAL = 10000)
|
||||
|
||||
/datum/category_item/autolathe/devices/electropack
|
||||
name = "electropack"
|
||||
path =/obj/item/device/radio/electropack
|
||||
|
||||
@@ -48,6 +48,11 @@
|
||||
path = /obj/item/weapon/reagent_containers/spray
|
||||
resources = list(MAT_PLASTIC = 2000)
|
||||
|
||||
/datum/category_item/autolathe/devices/slowwire
|
||||
name = "snare wire"
|
||||
path = /obj/item/weapon/material/barbedwire/plastic
|
||||
resources = list(MAT_PLASTIC = 10000)
|
||||
|
||||
/datum/category_item/autolathe/tools/spraynozzle
|
||||
name = "spray nozzle"
|
||||
path = /obj/item/weapon/reagent_containers/spray
|
||||
|
||||
+7
-3
@@ -55,6 +55,9 @@
|
||||
|
||||
var/rev_cooldown = 0
|
||||
var/tcrystals = 0
|
||||
var/list/purchase_log = new
|
||||
var/used_TC = 0
|
||||
|
||||
|
||||
// the world.time since the mob has been brigged, or -1 if not at all
|
||||
var/brigged_since = -1
|
||||
@@ -73,7 +76,7 @@
|
||||
|
||||
/datum/mind/New(var/key)
|
||||
src.key = key
|
||||
|
||||
purchase_log = list()
|
||||
..()
|
||||
|
||||
/datum/mind/proc/transfer_to(mob/living/new_character)
|
||||
@@ -510,8 +513,9 @@
|
||||
|
||||
//HUMAN
|
||||
/mob/living/carbon/human/mind_initialize()
|
||||
..()
|
||||
if(!mind.assigned_role) mind.assigned_role = USELESS_JOB //defualt //VOREStation Edit - Visitor not Assistant
|
||||
. = ..()
|
||||
if(!mind.assigned_role)
|
||||
mind.assigned_role = USELESS_JOB //defualt //VOREStation Edit - Visitor not Assistant
|
||||
|
||||
//slime
|
||||
/mob/living/simple_mob/slime/mind_initialize()
|
||||
|
||||
@@ -15,11 +15,14 @@
|
||||
shoes = /obj/item/clothing/shoes/boots/swat
|
||||
gloves = /obj/item/clothing/gloves/swat
|
||||
l_ear = /obj/item/device/radio/headset/ert
|
||||
belt = /obj/item/weapon/gun/energy/gun
|
||||
glasses = /obj/item/clothing/glasses/sunglasses
|
||||
back = /obj/item/weapon/storage/backpack/satchel
|
||||
id_type = /obj/item/weapon/card/id/centcom/ERT
|
||||
pda_type = /obj/item/device/pda/centcom
|
||||
|
||||
post_equip(var/mob/living/carbon/human/H)
|
||||
..()
|
||||
ert.add_antagonist(H.mind)
|
||||
|
||||
/decl/hierarchy/outfit/job/clown
|
||||
name = OUTFIT_JOB_NAME("Clown")
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
|
||||
#define GOAL_GENERAL "Common Goal"
|
||||
#define GOAL_MEDICAL "Medical Goal"
|
||||
#define GOAL_SECURITY "Security Goal"
|
||||
#define GOAL_ENGINEERING "Engineering Goal"
|
||||
#define GOAL_CARGO "Cargo Goal"
|
||||
#define GOAL_RESEARCH "Research Goal"
|
||||
@@ -0,0 +1,101 @@
|
||||
|
||||
GLOBAL_LIST(department_goals)
|
||||
GLOBAL_LIST(active_department_goals)
|
||||
|
||||
/hook/startup/proc/initializeDepartmentGoals()
|
||||
GLOB.department_goals = list(GOAL_GENERAL, GOAL_MEDICAL, GOAL_SECURITY, GOAL_ENGINEERING, GOAL_CARGO, GOAL_RESEARCH)
|
||||
GLOB.active_department_goals = list(GOAL_GENERAL, GOAL_MEDICAL, GOAL_SECURITY, GOAL_ENGINEERING, GOAL_CARGO, GOAL_RESEARCH)
|
||||
|
||||
for(var/category in GLOB.department_goals)
|
||||
GLOB.department_goals[category] = list()
|
||||
|
||||
for(var/subtype in subtypesof(/datum/goal))
|
||||
var/datum/goal/SG = new subtype()
|
||||
|
||||
if(SG.name == "goal")
|
||||
continue
|
||||
|
||||
if(SG.category == category)
|
||||
GLOB.department_goals[category] |= SG
|
||||
|
||||
for(var/category in GLOB.active_department_goals)
|
||||
GLOB.active_department_goals[category] = list()
|
||||
var/list/cat_goals = GLOB.department_goals[category]
|
||||
|
||||
var/goal_count = rand(2,4)
|
||||
|
||||
for(var/count = 1 to goal_count)
|
||||
var/datum/goal/G
|
||||
|
||||
if(LAZYLEN(cat_goals))
|
||||
G = pick(cat_goals)
|
||||
|
||||
if(G)
|
||||
G.active_goal = TRUE
|
||||
cat_goals -= G
|
||||
|
||||
GLOB.active_department_goals[category] |= G
|
||||
return 1
|
||||
|
||||
/hook/roundend/proc/checkDepartmentGoals()
|
||||
for(var/category in GLOB.active_department_goals)
|
||||
var/list/cat_goals = GLOB.active_department_goals[category]
|
||||
|
||||
to_world("<span class='filter_system'><b>[category]</b></span>")
|
||||
|
||||
if(!LAZYLEN(cat_goals))
|
||||
to_world("<span class='filter_system'>There were no assigned goals!</span>")
|
||||
|
||||
else
|
||||
for(var/datum/goal/G in cat_goals)
|
||||
var/success = G.check_completion()
|
||||
to_world("<span class='filter_system'>[success ? "<span class='notice'>[G.name]</span>" : "<span class='warning'>[G.name]</span>"]</span>")
|
||||
to_world("<span class='filter_system'>[G.goal_text]</span>")
|
||||
return 1
|
||||
|
||||
/datum/goal
|
||||
var/name = "goal"
|
||||
|
||||
var/goal_text = "Do nothing! Congratulations."
|
||||
|
||||
var/active_goal = FALSE
|
||||
|
||||
var/category = GOAL_GENERAL
|
||||
|
||||
/datum/goal/proc/check_completion()
|
||||
return FALSE
|
||||
|
||||
/datum/goal/common
|
||||
name = "goal"
|
||||
|
||||
goal_text = "Congratulations, you still do nothing."
|
||||
|
||||
/datum/goal/medical
|
||||
name = "goal"
|
||||
|
||||
goal_text = "Congratulations, you still do nothing."
|
||||
category = GOAL_MEDICAL
|
||||
|
||||
/datum/goal/security
|
||||
name = "goal"
|
||||
|
||||
goal_text = "Congratulations, you still do nothing."
|
||||
category = GOAL_SECURITY
|
||||
|
||||
/datum/goal/engineering
|
||||
name = "goal"
|
||||
|
||||
goal_text = "Congratulations, you still do nothing."
|
||||
category = GOAL_ENGINEERING
|
||||
|
||||
/datum/goal/cargo
|
||||
name = "goal"
|
||||
|
||||
goal_text = "Congratulations, you still do nothing."
|
||||
category = GOAL_CARGO
|
||||
|
||||
/datum/goal/research
|
||||
name = "goal"
|
||||
|
||||
goal_text = "Congratulations, you still do nothing."
|
||||
category = GOAL_RESEARCH
|
||||
@@ -77,6 +77,14 @@
|
||||
containertype = /obj/structure/closet/crate/focalpoint
|
||||
containername = "advanced hull shield generator crate"
|
||||
|
||||
/datum/supply_pack/eng/pointdefense
|
||||
name = "Point Defense Turret"
|
||||
contains = list(/obj/machinery/porta_turret/pointdefense/orderable)
|
||||
cost = 70
|
||||
containertype = /obj/structure/closet/crate/large/secure/heph
|
||||
containername = "point defense crate"
|
||||
access = access_security
|
||||
|
||||
/datum/supply_pack/eng/electrical
|
||||
name = "Electrical maintenance crate"
|
||||
contains = list(
|
||||
|
||||
@@ -84,7 +84,8 @@
|
||||
/obj/item/toy/plushie/borgplushie/scrubpuppy,
|
||||
/obj/item/toy/plushie/foxbear,
|
||||
/obj/item/toy/plushie/nukeplushie,
|
||||
/obj/item/toy/plushie/otter)
|
||||
/obj/item/toy/plushie/otter,
|
||||
/obj/item/toy/plushie/vox)
|
||||
//VOREStation Add End
|
||||
name = "Plushies Crate"
|
||||
cost = 15
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
/obj/item/weapon/reagent_containers/glass/paint/purple,
|
||||
/obj/item/weapon/reagent_containers/glass/paint/black,
|
||||
/obj/item/weapon/reagent_containers/glass/paint/white,
|
||||
/obj/item/weapon/contraband/poster,
|
||||
/obj/item/weapon/contraband/poster/custom,
|
||||
/obj/item/weapon/wrapping_paper = 3
|
||||
)
|
||||
cost = 10
|
||||
|
||||
@@ -186,4 +186,14 @@
|
||||
|
||||
/datum/category_item/underwear/undershirt/pinkblack_tshirt
|
||||
name = "Pink and Black T-Shirt"
|
||||
icon_state = "pinkblack_tshirt"
|
||||
icon_state = "pinkblack_tshirt"
|
||||
|
||||
/datum/category_item/underwear/undershirt/turtle
|
||||
name = "Turtleneck"
|
||||
icon_state = "turtleneck"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/category_item/underwear/undershirt/sleevelessturtle
|
||||
name = "Turtleneck, Sleeveless"
|
||||
icon_state = "sleevelessturtle"
|
||||
has_color = TRUE
|
||||
@@ -18,3 +18,5 @@
|
||||
name = "Void cell"
|
||||
path = /obj/item/weapon/cell/device/weapon/recharge/alien/hybrid
|
||||
item_cost = DEFAULT_TELECRYSTAL_AMOUNT * 1.5
|
||||
antag_roles = list("ert")
|
||||
blacklisted = 1
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
This type comes with a directional shield projector, a supressive fire energy weapon, \
|
||||
a stunbaton, handcuffs, an agent ID, energy sword, pinpointer, and a jetpack."
|
||||
item_cost = DEFAULT_TELECRYSTAL_AMOUNT * 1.5
|
||||
antag_roles = list("mercenary")
|
||||
antag_roles = list("mercenary", "ert") //VOREStation Edit
|
||||
path = /obj/item/weapon/antag_spawner/syndicate_drone/protector
|
||||
|
||||
/datum/uplink_item/item/backup/syndicate_drone_combat_medic
|
||||
@@ -21,7 +21,7 @@
|
||||
a powerful hypospray that can create many potent chemicals, an agent ID, energy \
|
||||
sword, pinpointer, and a jetpack."
|
||||
item_cost = DEFAULT_TELECRYSTAL_AMOUNT * 1.5
|
||||
antag_roles = list("mercenary")
|
||||
antag_roles = list("mercenary", "ert") //VOREStation Edit
|
||||
path = /obj/item/weapon/antag_spawner/syndicate_drone/combat_medic
|
||||
|
||||
/datum/uplink_item/item/backup/syndicate_drone_mechanist
|
||||
@@ -31,5 +31,5 @@
|
||||
a cryptographic sequencer, an AI detector, the ability to analyze and repair full-body prosthetics, \
|
||||
a set of construction materials, an ionic rapier, an agent ID, energy sword, pinpointer, and a jetpack."
|
||||
item_cost = DEFAULT_TELECRYSTAL_AMOUNT * 1.5
|
||||
antag_roles = list("mercenary")
|
||||
antag_roles = list("mercenary", "ert") //VOREStation Edit
|
||||
path = /obj/item/weapon/antag_spawner/syndicate_drone/mechanist
|
||||
@@ -22,22 +22,22 @@
|
||||
desc = "Buys you one random item."
|
||||
|
||||
/datum/uplink_item/item/badassery/random_one/buy(var/obj/item/device/uplink/U, var/mob/user)
|
||||
var/datum/uplink_item/item = default_uplink_selection.get_random_item(U.uses)
|
||||
var/datum/uplink_item/item = default_uplink_selection.get_random_item((user ? user.mind.tcrystals : DEFAULT_TELECRYSTAL_AMOUNT), U)
|
||||
return item.buy(U, user)
|
||||
|
||||
/datum/uplink_item/item/badassery/random_one/can_buy(obj/item/device/uplink/U)
|
||||
return default_uplink_selection.get_random_item(U.uses, U) != null
|
||||
/datum/uplink_item/item/badassery/random_one/can_buy(var/obj/item/device/uplink/U, var/telecrystals)
|
||||
return default_uplink_selection.get_random_item(telecrystals, U) != null
|
||||
|
||||
/datum/uplink_item/item/badassery/random_many
|
||||
name = "Random Items"
|
||||
desc = "Buys you as many random items you can afford. Convenient packaging NOT included."
|
||||
|
||||
/datum/uplink_item/item/badassery/random_many/cost(var/telecrystals)
|
||||
/datum/uplink_item/item/badassery/random_many/cost(obj/item/device/uplink/U, var/telecrystals)
|
||||
return max(1, telecrystals)
|
||||
|
||||
/datum/uplink_item/item/badassery/random_many/get_goods(var/obj/item/device/uplink/U, var/loc)
|
||||
/datum/uplink_item/item/badassery/random_many/get_goods(var/obj/item/device/uplink/U, var/loc, var/mob/M)
|
||||
var/list/bought_items = list()
|
||||
for(var/datum/uplink_item/UI in get_random_uplink_items(U, U.uses, loc))
|
||||
for(var/datum/uplink_item/UI in get_random_uplink_items(U, M.mind.tcrystals, loc))
|
||||
UI.purchase_log(U)
|
||||
var/obj/item/I = UI.get_goods(U, loc)
|
||||
if(istype(I))
|
||||
@@ -47,7 +47,7 @@
|
||||
|
||||
/datum/uplink_item/item/badassery/random_many/purchase_log(obj/item/device/uplink/U)
|
||||
feedback_add_details("traitor_uplink_items_bought", "[src]")
|
||||
log_and_message_admins("used \the [U.loc] to buy \a [src]")
|
||||
log_and_message_admins("used \the [U.loc] to buy \a [src] at random")
|
||||
|
||||
/****************
|
||||
* Surplus Crate *
|
||||
|
||||
@@ -100,3 +100,66 @@
|
||||
name = "Healing Nanite pill bottle"
|
||||
item_cost = 30
|
||||
path = /obj/item/weapon/storage/pill_bottle/healing_nanites
|
||||
|
||||
/datum/uplink_item/item/medical/vermicetol
|
||||
name = "Vermicetol Bottle"
|
||||
item_cost = 30
|
||||
path = /obj/item/weapon/reagent_containers/glass/bottle/vermicetol
|
||||
antag_roles = list("ert")
|
||||
blacklisted = 1
|
||||
|
||||
/datum/uplink_item/item/medical/dermaline
|
||||
name = "Dermaline Bottle"
|
||||
item_cost = 30
|
||||
path = /obj/item/weapon/reagent_containers/glass/bottle/dermaline
|
||||
antag_roles = list("ert")
|
||||
blacklisted = 1
|
||||
|
||||
/datum/uplink_item/item/medical/carthatoline
|
||||
name = "Carthatoline Bottle"
|
||||
item_cost = 30
|
||||
path = /obj/item/weapon/reagent_containers/glass/bottle/carthatoline
|
||||
antag_roles = list("ert")
|
||||
blacklisted = 1
|
||||
|
||||
/datum/uplink_item/item/medical/dexalinp
|
||||
name = "Dexalin Plus Bottle"
|
||||
item_cost = 30
|
||||
path = /obj/item/weapon/reagent_containers/glass/bottle/dexalinp
|
||||
antag_roles = list("ert")
|
||||
blacklisted = 1
|
||||
|
||||
/datum/uplink_item/item/medical/tramadol
|
||||
name = "Tramadol Bottle"
|
||||
item_cost = 30
|
||||
path = /obj/item/weapon/reagent_containers/glass/bottle/tramadol
|
||||
antag_roles = list("ert")
|
||||
blacklisted = 1
|
||||
|
||||
/datum/uplink_item/item/medical/arithrazine
|
||||
name = "Arithrazine Bottle"
|
||||
item_cost = 50
|
||||
path = /obj/item/weapon/reagent_containers/glass/bottle/arithrazine
|
||||
antag_roles = list("ert")
|
||||
blacklisted = 1
|
||||
|
||||
/datum/uplink_item/item/medical/corophizine
|
||||
name = "Corophizine Bottle"
|
||||
item_cost = 50
|
||||
path = /obj/item/weapon/reagent_containers/glass/bottle/corophizine
|
||||
antag_roles = list("ert")
|
||||
blacklisted = 1
|
||||
|
||||
/datum/uplink_item/item/medical/rezadone
|
||||
name = "Rezadone Bottle"
|
||||
item_cost = 50
|
||||
path = /obj/item/weapon/reagent_containers/glass/bottle/rezadone
|
||||
antag_roles = list("ert")
|
||||
blacklisted = 1
|
||||
|
||||
/datum/uplink_item/item/medical/defib
|
||||
name = "Combat Defibrilator"
|
||||
item_cost = 90
|
||||
path = /obj/item/device/defib_kit/compact/combat
|
||||
antag_roles = list("mercenary", "ert")
|
||||
blacklisted = 1
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
category = /datum/uplink_category/telecrystals
|
||||
blacklisted = 1
|
||||
|
||||
/datum/uplink_item/item/telecrystal/get_goods(var/obj/item/device/uplink/U, var/loc)
|
||||
return new /obj/item/stack/telecrystal(loc, cost(U.uses))
|
||||
/datum/uplink_item/item/telecrystal/get_goods(var/obj/item/device/uplink/U, var/loc, var/mob/M)
|
||||
return new /obj/item/stack/telecrystal(loc, cost(U, M.mind.tcrystals))
|
||||
|
||||
/datum/uplink_item/item/telecrystal/one
|
||||
name = "Telecrystal - 01"
|
||||
@@ -35,5 +35,5 @@
|
||||
/datum/uplink_item/item/telecrystal/all
|
||||
name = "Telecrystals - Empty Uplink"
|
||||
|
||||
/datum/uplink_item/item/telecrystal/all/cost(var/telecrystals)
|
||||
return max(1, telecrystals)
|
||||
/datum/uplink_item/item/telecrystal/all/cost(obj/item/device/uplink/U, mob/M)
|
||||
return max(1, M.mind.tcrystals)
|
||||
@@ -92,6 +92,12 @@
|
||||
desc = "A device which is capable of disrupting subspace communications, preventing the use of headsets, PDAs, and communicators within \
|
||||
a radius of seven meters. It runs off weapon cells, which can be replaced as needed. One cell will last for approximately ten minutes."
|
||||
|
||||
/datum/uplink_item/item/tools/wall_elecrtifier
|
||||
name = "Wall Electrifier"
|
||||
item_cost = 10
|
||||
path = /obj/item/weapon/cell/spike
|
||||
desc = "A modified powercell which will electrify walls and reinforced floors in a 3x3 tile range around it. Always active."
|
||||
|
||||
/datum/uplink_item/item/tools/emag
|
||||
name = "Cryptographic Sequencer"
|
||||
item_cost = 30
|
||||
|
||||
@@ -26,6 +26,11 @@
|
||||
item_cost = 5
|
||||
path = /obj/item/device/survivalcapsule
|
||||
|
||||
/datum/uplink_item/item/tools/popcabin
|
||||
name = "Cabin Capsule"
|
||||
item_cost = 5
|
||||
path = /obj/item/device/survivalcapsule/popcabin
|
||||
|
||||
/datum/uplink_item/item/tools/nanopaste
|
||||
name = "Nanopaste (Advanced)"
|
||||
item_cost = 10
|
||||
@@ -36,11 +41,26 @@
|
||||
item_cost = 10
|
||||
path = /obj/item/clothing/suit/space/void/autolok
|
||||
|
||||
/datum/uplink_item/item/tools/inflatable
|
||||
name = "Inflatables"
|
||||
item_cost = 10
|
||||
path = /obj/item/weapon/storage/briefcase/inflatable
|
||||
|
||||
/datum/uplink_item/item/tools/elitetablet
|
||||
name = "Tablet (Advanced)"
|
||||
item_cost = 15
|
||||
path = /obj/item/modular_computer/tablet/preset/custom_loadout/advanced
|
||||
|
||||
/datum/uplink_item/item/tools/metal
|
||||
name = "Metal (50 sheets)"
|
||||
item_cost = 15
|
||||
path = /obj/fiftyspawner/steel
|
||||
|
||||
/datum/uplink_item/item/tools/glass
|
||||
name = "Glass (50 sheets)"
|
||||
item_cost = 15
|
||||
path = /obj/fiftyspawner/glass
|
||||
|
||||
/datum/uplink_item/item/tools/elitelaptop
|
||||
name = "Laptop (Advanced)"
|
||||
item_cost = 20
|
||||
|
||||
@@ -6,12 +6,6 @@
|
||||
..()
|
||||
items = list()
|
||||
|
||||
/datum/uplink_category/proc/can_view(obj/item/device/uplink/U)
|
||||
for(var/datum/uplink_item/item in items)
|
||||
if(item.can_view(U))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
datum/uplink_category/ammunition
|
||||
name = "Ammunition"
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@ var/datum/uplink/uplink = new()
|
||||
var/item_cost = 0
|
||||
var/datum/uplink_category/category // Item category
|
||||
var/list/datum/antagonist/antag_roles // Antag roles this item is displayed to. If empty, display to all.
|
||||
var/blacklisted = 0
|
||||
var/blacklisted = FALSE
|
||||
|
||||
/datum/uplink_item/item
|
||||
var/path = null
|
||||
@@ -48,50 +48,34 @@ var/datum/uplink/uplink = new()
|
||||
if(!extra_args)
|
||||
return
|
||||
|
||||
if(!can_buy(U))
|
||||
if(!can_buy(U, user.mind.tcrystals))
|
||||
return
|
||||
|
||||
if(U.CanUseTopic(user, GLOB.tgui_inventory_state) != STATUS_INTERACTIVE)
|
||||
if(U.tgui_status(user, GLOB.tgui_deep_inventory_state) != STATUS_INTERACTIVE)
|
||||
return
|
||||
|
||||
var/cost = cost(U.uses, U)
|
||||
var/cost = cost(U, user.mind.tcrystals)
|
||||
|
||||
var/goods = get_goods(U, get_turf(user), user, extra_args)
|
||||
if(!goods)
|
||||
return
|
||||
|
||||
purchase_log(U)
|
||||
purchase_log(user)
|
||||
user.mind.tcrystals -= cost
|
||||
U.used_TC += cost
|
||||
user.mind.used_TC += cost
|
||||
return goods
|
||||
|
||||
// Any additional arguments you wish to send to the get_goods
|
||||
/datum/uplink_item/proc/extra_args(var/mob/user)
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
/datum/uplink_item/proc/can_buy(obj/item/device/uplink/U)
|
||||
if(cost(U.uses, U) > U.uses)
|
||||
return 0
|
||||
/datum/uplink_item/proc/can_buy(var/obj/item/device/uplink/U, var/telecrystals)
|
||||
if(cost(U, telecrystals) > telecrystals)
|
||||
return FALSE
|
||||
|
||||
return can_view(U)
|
||||
return TRUE
|
||||
|
||||
/datum/uplink_item/proc/can_view(obj/item/device/uplink/U)
|
||||
// Making the assumption that if no uplink was supplied, then we don't care about antag roles
|
||||
if(!U || !antag_roles.len)
|
||||
return 1
|
||||
|
||||
// With no owner, there's no need to check antag status.
|
||||
if(!U.uplink_owner)
|
||||
return 0
|
||||
|
||||
for(var/antag_role in antag_roles)
|
||||
var/datum/antagonist/antag = all_antag_types[antag_role]
|
||||
if(!isnull(antag))
|
||||
if(antag.is_antagonist(U.uplink_owner))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/datum/uplink_item/proc/cost(var/telecrystals, obj/item/device/uplink/U)
|
||||
/datum/uplink_item/proc/cost(obj/item/device/uplink/U, mob/M)
|
||||
. = item_cost
|
||||
if(U)
|
||||
. = U.get_item_cost(src, .)
|
||||
@@ -100,19 +84,19 @@ var/datum/uplink/uplink = new()
|
||||
return desc
|
||||
|
||||
// get_goods does not necessarily return physical objects, it is simply a way to acquire the uplink item without paying
|
||||
/datum/uplink_item/proc/get_goods(var/obj/item/device/uplink/U, var/loc)
|
||||
return 0
|
||||
/datum/uplink_item/proc/get_goods(var/obj/item/device/uplink/U, var/loc, mob/user)
|
||||
return FALSE
|
||||
|
||||
/datum/uplink_item/proc/log_icon()
|
||||
return
|
||||
|
||||
/datum/uplink_item/proc/purchase_log(obj/item/device/uplink/U)
|
||||
/datum/uplink_item/proc/purchase_log(mob/M)
|
||||
feedback_add_details("traitor_uplink_items_bought", "[src]")
|
||||
log_and_message_admins("used \the [U.loc] to buy \a [src]")
|
||||
U.purchase_log[src] = U.purchase_log[src] + 1
|
||||
log_and_message_admins("\the [M] bought \a [src] through the uplink")
|
||||
M.mind.purchase_log[src] += 1
|
||||
|
||||
datum/uplink_item/dd_SortValue()
|
||||
return cost(INFINITY)
|
||||
return item_cost
|
||||
|
||||
/********************************
|
||||
* *
|
||||
@@ -133,7 +117,7 @@ datum/uplink_item/dd_SortValue()
|
||||
A.put_in_any_hand_if_possible(I)
|
||||
return I
|
||||
|
||||
/datum/uplink_item/item/get_goods(var/obj/item/device/uplink/U, var/loc)
|
||||
/datum/uplink_item/item/get_goods(var/obj/item/device/uplink/U, var/loc, var/mob/user)
|
||||
var/obj/item/I = new path(loc)
|
||||
return I
|
||||
|
||||
@@ -208,7 +192,7 @@ datum/uplink_item/dd_SortValue()
|
||||
|
||||
/proc/get_surplus_items(var/obj/item/device/uplink/U, var/remaining_TC, var/loc)
|
||||
var/list/bought_items = list()
|
||||
var/override = 1
|
||||
var/override = TRUE
|
||||
while(remaining_TC)
|
||||
var/datum/uplink_item/I = all_uplink_selection.get_random_item(remaining_TC, U, bought_items, override)
|
||||
if(!I)
|
||||
|
||||
@@ -103,7 +103,7 @@
|
||||
name = "Anti-Materiel Rifle (14.5mm)"
|
||||
item_cost = DEFAULT_TELECRYSTAL_AMOUNT
|
||||
path = /obj/item/weapon/gun/projectile/heavysniper
|
||||
antag_roles = list("mercenary")
|
||||
antag_roles = list("mercenary", "ert") //VOREStation Edit
|
||||
|
||||
/datum/uplink_item/item/visible_weapons/heavysnipertraitor
|
||||
name = "Anti-Materiel Rifle (14.5mm)"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/datum/wires/mines
|
||||
wire_count = 6
|
||||
wire_count = 7
|
||||
randomize = TRUE
|
||||
holder_type = /obj/effect/mine
|
||||
proper_name = "Explosive Wires"
|
||||
@@ -7,6 +7,7 @@
|
||||
/datum/wires/mines/New(atom/_holder)
|
||||
wires = list(WIRE_EXPLODE, WIRE_EXPLODE_DELAY, WIRE_DISARM, WIRE_BADDISARM)
|
||||
return ..()
|
||||
#define WIRE_TRAP 64
|
||||
|
||||
/datum/wires/mines/get_status()
|
||||
. = ..()
|
||||
@@ -29,7 +30,13 @@
|
||||
|
||||
if(WIRE_DISARM)
|
||||
C.visible_message("[bicon(C)] *click!*", "[bicon(C)] *click!*")
|
||||
new C.mineitemtype(get_turf(C))
|
||||
var/obj/effect/mine/MI = new C.mineitemtype(get_turf(C))
|
||||
|
||||
if(C.trap)
|
||||
MI.trap = C.trap
|
||||
C.trap = null
|
||||
MI.trap.forceMove(MI)
|
||||
|
||||
spawn(0)
|
||||
qdel(C)
|
||||
|
||||
@@ -37,6 +44,15 @@
|
||||
C.visible_message("[bicon(C)] *BEEPBEEPBEEP*", "[bicon(C)] *BEEPBEEPBEEP*")
|
||||
spawn(20)
|
||||
C.explode()
|
||||
|
||||
if(WIRE_TRAP)
|
||||
C.visible_message("[bicon(C)] *click!*", "[bicon(C)] *click!*")
|
||||
|
||||
if(mend)
|
||||
C.visible_message("[bicon(C)] - The mine recalibrates[C.camo_net ? ", revealing \the [C.trap] inside." : "."]")
|
||||
|
||||
C.alpha = 255
|
||||
|
||||
..()
|
||||
|
||||
/datum/wires/mines/on_pulse(wire)
|
||||
@@ -57,6 +73,10 @@
|
||||
|
||||
if(WIRE_BADDISARM)
|
||||
C.visible_message("[bicon(C)] *ping*", "[bicon(C)] *ping*")
|
||||
|
||||
if(WIRE_TRAP)
|
||||
C.visible_message("[bicon(C)] *ping*", "[bicon(C)] *ping*")
|
||||
|
||||
..()
|
||||
|
||||
/datum/wires/mines/interactable(mob/user)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/datum/antagonist/proc/print_player_summary()
|
||||
|
||||
if(!current_antagonists.len)
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
var/text = "<br><br><font size = 2><b>The [current_antagonists.len == 1 ? "[role_text] was" : "[role_text_plural] were"]:</b></font>"
|
||||
for(var/datum/mind/P in current_antagonists)
|
||||
@@ -21,7 +21,7 @@
|
||||
else
|
||||
text += "<font color='red'>Fail.</font>"
|
||||
feedback_add_details(feedback_tag,"[O.type]|FAIL")
|
||||
failed = 1
|
||||
failed = TRUE
|
||||
num++
|
||||
if(failed)
|
||||
text += "<br><font color='red'><B>The [role_text] has failed.</B></font>"
|
||||
@@ -32,7 +32,7 @@
|
||||
text += "<BR><FONT size = 2>Their objectives were:</FONT>"
|
||||
var/num = 1
|
||||
for(var/datum/objective/O in global_objectives)
|
||||
text += print_objective(O, num, 1)
|
||||
text += print_objective(O, num, TRUE)
|
||||
num++
|
||||
|
||||
// Display the results.
|
||||
@@ -68,14 +68,14 @@
|
||||
/datum/antagonist/proc/print_player_full(var/datum/mind/ply)
|
||||
var/text = print_player_lite(ply)
|
||||
|
||||
var/TC_uses = 0
|
||||
var/uplink_true = 0
|
||||
var/TC_uses = FALSE
|
||||
var/uplink_true = FALSE
|
||||
var/purchases = ""
|
||||
for(var/obj/item/device/uplink/H in world_uplinks)
|
||||
if(H && H.uplink_owner && H.uplink_owner == ply)
|
||||
TC_uses += H.used_TC
|
||||
uplink_true = 1
|
||||
purchases += get_uplink_purchases(H)
|
||||
for(var/mob/M in player_list)
|
||||
if(M.mind && M.mind.used_TC)
|
||||
TC_uses += M.mind.used_TC
|
||||
uplink_true = TRUE
|
||||
purchases += get_uplink_purchases(M.mind)
|
||||
if(uplink_true)
|
||||
text += " (used [TC_uses] TC)"
|
||||
if(purchases)
|
||||
@@ -83,18 +83,8 @@
|
||||
|
||||
return text
|
||||
|
||||
/proc/print_ownerless_uplinks()
|
||||
var/has_printed = 0
|
||||
for(var/obj/item/device/uplink/H in world_uplinks)
|
||||
if(isnull(H.uplink_owner) && H.used_TC)
|
||||
if(!has_printed)
|
||||
has_printed = 1
|
||||
to_world("<b>Ownerless Uplinks</b>")
|
||||
to_world("[H.loc] (used [H.used_TC] TC)")
|
||||
to_world(get_uplink_purchases(H))
|
||||
|
||||
/proc/get_uplink_purchases(var/obj/item/device/uplink/H)
|
||||
/proc/get_uplink_purchases(var/datum/mind/M)
|
||||
var/list/refined_log = new()
|
||||
for(var/datum/uplink_item/UI in H.purchase_log)
|
||||
refined_log.Add("[H.purchase_log[UI]]x[UI.log_icon()][UI.name]")
|
||||
for(var/datum/uplink_item/UI in M.purchase_log)
|
||||
refined_log.Add("[M.purchase_log[UI]]x[UI.log_icon()][UI.name]")
|
||||
. = english_list(refined_log, nothing_text = "")
|
||||
|
||||
@@ -50,13 +50,12 @@
|
||||
var/turf/base_turf //The base turf type of the area, which can be used to override the z-level's base turf
|
||||
var/forbid_events = FALSE // If true, random events will not start inside this area.
|
||||
var/no_spoilers = FALSE // If true, makes it much more difficult to see what is inside an area with things like mesons.
|
||||
var/soundproofed = FALSE // If true, blocks sounds from other areas and prevents hearers on other areas from hearing the sounds within.
|
||||
|
||||
/area/Initialize()
|
||||
. = ..()
|
||||
|
||||
luminosity = !(dynamic_lighting)
|
||||
icon_state = ""
|
||||
|
||||
return INITIALIZE_HINT_LATELOAD // Areas tradiationally are initialized AFTER other atoms.
|
||||
|
||||
/area/LateInitialize()
|
||||
@@ -67,7 +66,6 @@
|
||||
power_change() // all machines set to current power level, also updates lighting icon
|
||||
if(no_spoilers)
|
||||
set_spoiler_obfuscation(TRUE)
|
||||
return INITIALIZE_HINT_LATELOAD
|
||||
|
||||
// Changes the area of T to A. Do not do this manually.
|
||||
// Area is expected to be a non-null instance.
|
||||
@@ -379,9 +377,9 @@ var/list/mob/living/forced_ambiance_list = new
|
||||
// Ambience goes down here -- make sure to list each area seperately for ease of adding things in later, thanks! Note: areas adjacent to each other should have the same sounds to prevent cutoff when possible.- LastyScratch
|
||||
if(!(L && L.is_preference_enabled(/datum/client_preference/play_ambiance)))
|
||||
return
|
||||
|
||||
|
||||
var/volume_mod = L.get_preference_volume_channel(VOLUME_CHANNEL_AMBIENCE)
|
||||
|
||||
|
||||
// If we previously were in an area with force-played ambiance, stop it.
|
||||
if((L in forced_ambiance_list) && initial)
|
||||
L << sound(null, channel = CHANNEL_AMBIENCE_FORCED)
|
||||
|
||||
@@ -134,7 +134,7 @@
|
||||
for(var/i in loc)
|
||||
var/atom/movable/thing = i
|
||||
// We don't call parent so we are calling this for byond
|
||||
thing.Crossed(src)
|
||||
thing.Crossed(src, oldloc)
|
||||
|
||||
// We're a multi-tile object (multiple locs)
|
||||
else if(. && newloc)
|
||||
|
||||
+3
-17
@@ -202,23 +202,9 @@ var/global/list/datum/dna/gene/dna_genes[0]
|
||||
|
||||
// Technically custom_species is not part of the UI, but this place avoids merge problems.
|
||||
src.custom_species = character.custom_species
|
||||
if(istype(character.species,/datum/species/custom))
|
||||
var/datum/species/custom/CS = character.species
|
||||
src.species_traits = CS.traits.Copy()
|
||||
src.base_species = CS.base_species
|
||||
src.blood_color = CS.blood_color
|
||||
|
||||
if(istype(character.species,/datum/species/xenochimera))
|
||||
var/datum/species/xenochimera/CS = character.species
|
||||
//src.species_traits = CS.traits.Copy() //No traits
|
||||
src.base_species = CS.base_species
|
||||
src.blood_color = CS.blood_color
|
||||
|
||||
if(istype(character.species,/datum/species/alraune))
|
||||
var/datum/species/alraune/CS = character.species
|
||||
//src.species_traits = CS.traits.Copy() //No traits
|
||||
src.base_species = CS.base_species
|
||||
src.blood_color = CS.blood_color
|
||||
src.base_species = character.species.base_species
|
||||
src.blood_color = character.species.blood_color
|
||||
src.species_traits = character.species.traits.Copy()
|
||||
|
||||
// +1 to account for the none-of-the-above possibility
|
||||
SetUIValueRange(DNA_UI_EAR_STYLE, ear_style + 1, ear_styles_list.len + 1, 1)
|
||||
|
||||
@@ -237,20 +237,9 @@
|
||||
|
||||
// Technically custom_species is not part of the UI, but this place avoids merge problems.
|
||||
H.custom_species = dna.custom_species
|
||||
if(istype(H.species,/datum/species/custom))
|
||||
var/datum/species/custom/CS = H.species
|
||||
var/datum/species/custom/new_CS = CS.produceCopy(dna.base_species,dna.species_traits,src)
|
||||
new_CS.blood_color = dna.blood_color
|
||||
|
||||
if(istype(H.species,/datum/species/xenochimera))
|
||||
var/datum/species/xenochimera/CS = H.species
|
||||
var/datum/species/xenochimera/new_CS = CS.produceCopy(dna.base_species,dna.species_traits,src)
|
||||
new_CS.blood_color = dna.blood_color
|
||||
|
||||
if(istype(H.species,/datum/species/alraune))
|
||||
var/datum/species/alraune/CS = H.species
|
||||
var/datum/species/alraune/new_CS = CS.produceCopy(dna.base_species,dna.species_traits,src)
|
||||
new_CS.blood_color = dna.blood_color
|
||||
H.species.blood_color = dna.blood_color
|
||||
var/datum/species/S = H.species
|
||||
S.produceCopy(dna.base_species,dna.species_traits,src)
|
||||
// VOREStation Edit End
|
||||
|
||||
H.force_update_organs() //VOREStation Add - Gotta do this too
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
var/last_activation = 0
|
||||
|
||||
/obj/structure/cult/pylon/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
START_PROCESSING(SSobj, src)
|
||||
|
||||
/obj/structure/cult/pylon/attack_hand(mob/M as mob)
|
||||
|
||||
@@ -292,7 +292,6 @@ var/global/list/additional_antag_types = list()
|
||||
antag.check_victory()
|
||||
antag.print_player_summary()
|
||||
sleep(10)
|
||||
print_ownerless_uplinks()
|
||||
|
||||
var/clients = 0
|
||||
var/surviving_humans = 0
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
/obj/effect/meteor/big=3,
|
||||
/obj/effect/meteor/flaming=1,
|
||||
/obj/effect/meteor/irradiated=3
|
||||
)
|
||||
)
|
||||
|
||||
//for threatening meteor event
|
||||
/var/list/meteors_threatening = list(
|
||||
@@ -206,6 +206,21 @@
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/effect/meteor/bullet_act(var/obj/item/projectile/Proj)
|
||||
if(Proj.excavation_amount)
|
||||
get_hit()
|
||||
if(!QDELETED(src))
|
||||
wall_power -= Proj.excavation_amount + Proj.damage + (Proj.hitscan * 25) // Instant-impact projectiles are inherently better at dealing with meteors.
|
||||
wall_power = max(1, wall_power)
|
||||
|
||||
if(wall_power < Proj.excavation_amount)
|
||||
if(prob(min(90, 100 - Proj.damage)))
|
||||
die(TRUE)
|
||||
else
|
||||
die(FALSE)
|
||||
return
|
||||
return
|
||||
|
||||
/obj/effect/meteor/proc/make_debris()
|
||||
for(var/throws = dropamt, throws > 0, throws--)
|
||||
var/obj/item/O = new meteordrop(get_turf(src))
|
||||
|
||||
@@ -27,4 +27,22 @@ var/const/access_pilot = 67
|
||||
/datum/access/entertainment
|
||||
id = access_entertainment
|
||||
desc = "Entertainment Backstage"
|
||||
region = ACCESS_REGION_GENERAL
|
||||
region = ACCESS_REGION_GENERAL
|
||||
|
||||
/var/const/access_mime = 138
|
||||
/datum/access/mime
|
||||
id = access_mime
|
||||
desc = "Mime Office"
|
||||
region = ACCESS_REGION_GENERAL
|
||||
|
||||
/var/const/access_clown = 136
|
||||
/datum/access/clown
|
||||
id = access_clown
|
||||
desc = "Clown Office"
|
||||
region = ACCESS_REGION_GENERAL
|
||||
|
||||
/var/const/access_tomfoolery = 137
|
||||
/datum/access/tomfoolery
|
||||
id = access_tomfoolery
|
||||
desc = "Tomfoolery Closet"
|
||||
region = ACCESS_REGION_GENERAL
|
||||
|
||||
@@ -26,13 +26,13 @@
|
||||
access_all_personal_lockers, access_maint_tunnels, access_bar, access_janitor, access_construction, access_morgue,
|
||||
access_crematorium, access_kitchen, access_cargo, access_cargo_bot, access_mailsorting, access_qm, access_hydroponics, access_lawyer,
|
||||
access_chapel_office, access_library, access_research, access_mining, access_heads_vault, access_mining_station,
|
||||
access_hop, access_RC_announce, access_keycard_auth)
|
||||
access_hop, access_RC_announce, access_clown, access_tomfoolery, access_mime, access_keycard_auth)
|
||||
minimal_access = list(access_security, access_sec_doors, access_brig, access_forensics_lockers,
|
||||
access_medical, access_engine, access_change_ids, access_ai_upload, access_eva, access_heads,
|
||||
access_all_personal_lockers, access_maint_tunnels, access_bar, access_janitor, access_construction, access_morgue,
|
||||
access_crematorium, access_kitchen, access_cargo, access_cargo_bot, access_mailsorting, access_qm, access_hydroponics, access_lawyer,
|
||||
access_chapel_office, access_library, access_research, access_mining, access_heads_vault, access_mining_station,
|
||||
access_hop, access_RC_announce, access_keycard_auth)
|
||||
access_hop, access_RC_announce, access_clown, access_tomfoolery, access_mime, access_keycard_auth)
|
||||
|
||||
/datum/alt_title/deputy_manager
|
||||
title = "Deputy Manager"
|
||||
|
||||
@@ -56,14 +56,14 @@
|
||||
departments = list(DEPARTMENT_CIVILIAN)
|
||||
department_flag = CIVILIAN
|
||||
faction = "Station"
|
||||
total_positions = -1
|
||||
spawn_positions = -1
|
||||
total_positions = 1
|
||||
spawn_positions = 1
|
||||
supervisors = "the spirit of laughter"
|
||||
selection_color = "#515151"
|
||||
economic_modifier = 1
|
||||
job_description = "A Clown is there to entertain the crew and keep high morale using various harmless pranks and ridiculous jokes!"
|
||||
whitelist_only = 1
|
||||
latejoin_only = 1
|
||||
latejoin_only = 0
|
||||
outfit_type = /decl/hierarchy/outfit/job/clown
|
||||
pto_type = PTO_CIVILIAN
|
||||
alt_titles = list("Jester" = /datum/alt_title/jester, "Fool" = /datum/alt_title/fool)
|
||||
@@ -76,9 +76,9 @@
|
||||
|
||||
/datum/job/clown/get_access()
|
||||
if(config.assistant_maint)
|
||||
return list(access_maint_tunnels, access_entertainment)
|
||||
return list(access_maint_tunnels, access_entertainment, access_clown, access_tomfoolery)
|
||||
else
|
||||
return list(access_entertainment)
|
||||
return list(access_entertainment, access_clown, access_tomfoolery)
|
||||
|
||||
/datum/job/mime
|
||||
title = "Mime"
|
||||
@@ -86,15 +86,15 @@
|
||||
departments = list(DEPARTMENT_CIVILIAN)
|
||||
department_flag = CIVILIAN
|
||||
faction = "Station"
|
||||
total_positions = -1
|
||||
spawn_positions = -1
|
||||
total_positions = 1
|
||||
spawn_positions = 1
|
||||
supervisors = "the spirit of performance"
|
||||
selection_color = "#515151"
|
||||
economic_modifier = 1
|
||||
job_description = "A Mime is there to entertain the crew and keep high morale using unbelievable performances and acting skills!"
|
||||
alt_titles = list("Poseur" = /datum/alt_title/poseur)
|
||||
whitelist_only = 1
|
||||
latejoin_only = 1
|
||||
latejoin_only = 0
|
||||
outfit_type = /decl/hierarchy/outfit/job/mime
|
||||
pto_type = PTO_CIVILIAN
|
||||
|
||||
@@ -103,6 +103,6 @@
|
||||
|
||||
/datum/job/mime/get_access()
|
||||
if(config.assistant_maint)
|
||||
return list(access_maint_tunnels, access_entertainment)
|
||||
return list(access_maint_tunnels, access_entertainment, access_tomfoolery, access_mime)
|
||||
else
|
||||
return list(access_entertainment)
|
||||
return list(access_entertainment, access_tomfoolery, access_mime)
|
||||
|
||||
@@ -529,5 +529,5 @@
|
||||
stasis_level = 100 //Just one setting
|
||||
|
||||
/obj/machinery/sleeper/survival_pod/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
RefreshParts(1)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/machinery/computer/arcade/
|
||||
/obj/machinery/computer/arcade
|
||||
name = "random arcade"
|
||||
desc = "random arcade machine"
|
||||
icon_state = "arcade"
|
||||
@@ -25,15 +25,15 @@
|
||||
/obj/item/toy/stickhorse = 2
|
||||
)
|
||||
|
||||
/obj/machinery/computer/arcade/New()
|
||||
..()
|
||||
/obj/machinery/computer/arcade/Initialize()
|
||||
. = ..()
|
||||
// If it's a generic arcade machine, pick a random arcade
|
||||
// circuit board for it and make the new machine
|
||||
if(!circuit)
|
||||
var/choice = pick(subtypesof(/obj/item/weapon/circuitboard/arcade) - /obj/item/weapon/circuitboard/arcade/clawmachine)
|
||||
var/obj/item/weapon/circuitboard/CB = new choice()
|
||||
new CB.build_path(loc, CB)
|
||||
qdel(src)
|
||||
return INITIALIZE_HINT_QDEL
|
||||
|
||||
/obj/machinery/computer/arcade/proc/prizevend()
|
||||
if(!(contents-circuit).len)
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
light_color = "#315ab4"
|
||||
|
||||
/obj/machinery/computer/cloning/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
pods = list()
|
||||
records = list()
|
||||
set_scan_temp("Scanner ready.", "good")
|
||||
|
||||
@@ -168,9 +168,9 @@
|
||||
if(reas)
|
||||
reason = reas
|
||||
if("duration")
|
||||
var/dur = input("Duration (in minutes) during which pass is valid (up to 120 minutes).", "Duration") as num|null
|
||||
var/dur = input("Duration (in minutes) during which pass is valid (up to 360 minutes).", "Duration") as num|null //VOREStation Edit
|
||||
if(dur)
|
||||
if(dur > 0 && dur <= 120)
|
||||
if(dur > 0 && dur <= 360) //VOREStation Edit
|
||||
duration = dur
|
||||
else
|
||||
to_chat(usr, "<span class='warning'>Invalid duration.</span>")
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
|
||||
|
||||
/obj/machinery/computer/med_data/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
field_edit_questions = list(
|
||||
// General
|
||||
"sex" = "Please select new sex:",
|
||||
|
||||
@@ -335,7 +335,7 @@
|
||||
name = "Monitor Decryption Key"
|
||||
|
||||
/obj/item/weapon/paper/monitorkey/Initialize()
|
||||
..() //Late init
|
||||
..()
|
||||
return INITIALIZE_HINT_LATELOAD
|
||||
|
||||
/obj/item/weapon/paper/monitorkey/LateInitialize()
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
var/title = "Mass Driver Controls"
|
||||
|
||||
/obj/machinery/computer/pod/Initialize()
|
||||
..() //Not returning parent because lateload
|
||||
..()
|
||||
return INITIALIZE_HINT_LATELOAD
|
||||
|
||||
/obj/machinery/computer/pod/LateInitialize()
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
var/static/list/field_edit_choices
|
||||
|
||||
/obj/machinery/computer/secure_data/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
field_edit_questions = list(
|
||||
// General
|
||||
"name" = "Please enter new name:",
|
||||
@@ -317,16 +317,16 @@
|
||||
if(!length(t1))
|
||||
return
|
||||
|
||||
for(var/datum/data/record/R in data_core.security)
|
||||
if(t1 == lowertext(R.fields["name"]) || t1 == lowertext(R.fields["id"]) || t1 == lowertext(R.fields["b_dna"]))
|
||||
active2 = R
|
||||
for(var/datum/data/record/R in data_core.general)
|
||||
if(t1 == lowertext(R.fields["name"]) || t1 == lowertext(R.fields["id"]) || t1 == lowertext(R.fields["fingerprint"]))
|
||||
active1 = R
|
||||
break
|
||||
if(!active2)
|
||||
set_temp("Security record not found. You must enter the person's exact name, ID or DNA.", "danger")
|
||||
if(!active1)
|
||||
set_temp("Security record not found. You must enter the person's exact name, ID, or fingerprint.", "danger")
|
||||
return
|
||||
for(var/datum/data/record/E in data_core.general)
|
||||
if(E.fields["name"] == active2.fields["name"] && E.fields["id"] == active2.fields["id"])
|
||||
active1 = E
|
||||
for(var/datum/data/record/E in data_core.security)
|
||||
if(E.fields["name"] == active1.fields["name"] && E.fields["id"] == active1.fields["id"])
|
||||
active2 = E
|
||||
break
|
||||
screen = SEC_DATA_RECORD
|
||||
if("print_p")
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
var/static/list/field_edit_choices
|
||||
|
||||
/obj/machinery/computer/skills/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
field_edit_questions = list(
|
||||
// General
|
||||
"name" = "Please input new name:",
|
||||
|
||||
@@ -1,111 +1,8 @@
|
||||
/*
|
||||
CONTAINS:
|
||||
Deployable items
|
||||
Barricades
|
||||
*/
|
||||
|
||||
//Barricades!
|
||||
/obj/structure/barricade
|
||||
name = "barricade"
|
||||
desc = "This space is blocked off by a barricade."
|
||||
icon = 'icons/obj/structures.dmi'
|
||||
icon_state = "barricade"
|
||||
anchored = 1.0
|
||||
density = 1.0
|
||||
var/health = 100
|
||||
var/maxhealth = 100
|
||||
var/datum/material/material
|
||||
|
||||
/obj/structure/barricade/New(var/newloc, var/material_name)
|
||||
..(newloc)
|
||||
if(!material_name)
|
||||
material_name = "wood"
|
||||
material = get_material_by_name("[material_name]")
|
||||
if(!material)
|
||||
qdel(src)
|
||||
return
|
||||
name = "[material.display_name] barricade"
|
||||
desc = "This space is blocked off by a barricade made of [material.display_name]."
|
||||
color = material.icon_colour
|
||||
maxhealth = material.integrity
|
||||
health = maxhealth
|
||||
|
||||
/obj/structure/barricade/get_material()
|
||||
return material
|
||||
|
||||
/obj/structure/barricade/attackby(obj/item/W as obj, mob/user as mob)
|
||||
user.setClickCooldown(user.get_attack_speed(W))
|
||||
if(istype(W, /obj/item/stack))
|
||||
var/obj/item/stack/D = W
|
||||
if(D.get_material_name() != material.name)
|
||||
return //hitting things with the wrong type of stack usually doesn't produce messages, and probably doesn't need to.
|
||||
if(health < maxhealth)
|
||||
if(D.get_amount() < 1)
|
||||
to_chat(user, "<span class='warning'>You need one sheet of [material.display_name] to repair \the [src].</span>")
|
||||
return
|
||||
visible_message("<span class='notice'>[user] begins to repair \the [src].</span>")
|
||||
if(do_after(user,20) && health < maxhealth)
|
||||
if(D.use(1))
|
||||
health = maxhealth
|
||||
visible_message("<span class='notice'>[user] repairs \the [src].</span>")
|
||||
return
|
||||
return
|
||||
else
|
||||
switch(W.damtype)
|
||||
if("fire")
|
||||
health -= W.force * 1
|
||||
if("brute")
|
||||
health -= W.force * 0.75
|
||||
if(material == (get_material_by_name(MAT_WOOD) || get_material_by_name(MAT_SIFWOOD)))
|
||||
playsound(src, 'sound/effects/woodcutting.ogg', 100, 1)
|
||||
else
|
||||
playsound(src, 'sound/weapons/smash.ogg', 50, 1)
|
||||
CheckHealth()
|
||||
..()
|
||||
|
||||
/obj/structure/barricade/proc/CheckHealth()
|
||||
if(health <= 0)
|
||||
dismantle()
|
||||
return
|
||||
|
||||
/obj/structure/barricade/take_damage(var/damage)
|
||||
health -= damage
|
||||
CheckHealth()
|
||||
return
|
||||
|
||||
/obj/structure/barricade/attack_generic(var/mob/user, var/damage, var/attack_verb)
|
||||
visible_message("<span class='danger'>[user] [attack_verb] the [src]!</span>")
|
||||
if(material == get_material_by_name("resin"))
|
||||
playsound(src, 'sound/effects/attackblob.ogg', 100, 1)
|
||||
else if(material == (get_material_by_name(MAT_WOOD) || get_material_by_name(MAT_SIFWOOD)))
|
||||
playsound(src, 'sound/effects/woodcutting.ogg', 100, 1)
|
||||
else
|
||||
playsound(src, 'sound/weapons/smash.ogg', 50, 1)
|
||||
user.do_attack_animation(src)
|
||||
health -= damage
|
||||
CheckHealth()
|
||||
return
|
||||
|
||||
/obj/structure/barricade/proc/dismantle()
|
||||
material.place_dismantled_product(get_turf(src))
|
||||
visible_message("<span class='danger'>\The [src] falls apart!</span>")
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
/obj/structure/barricade/ex_act(severity)
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
dismantle()
|
||||
if(2.0)
|
||||
health -= 25
|
||||
CheckHealth()
|
||||
|
||||
/obj/structure/barricade/CanPass(atom/movable/mover, turf/target)//So bullets will fly over and stuff.
|
||||
if(istype(mover) && mover.checkpass(PASSTABLE))
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
//Actual Deployable machinery stuff
|
||||
/obj/machinery/deployable
|
||||
name = "deployable"
|
||||
desc = "deployable"
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
var/close_sound = 'sound/machines/door/blastdoorclose.ogg'
|
||||
var/damage = BLAST_DOOR_CRUSH_DAMAGE
|
||||
var/multiplier = 1 // The multiplier for how powerful our YEET is.
|
||||
var/istransparent = 0
|
||||
|
||||
closed_layer = ON_WINDOW_LAYER // Above airlocks when closed
|
||||
var/id = 1.0
|
||||
@@ -108,10 +109,13 @@
|
||||
src.density = 1
|
||||
update_nearby_tiles()
|
||||
src.update_icon()
|
||||
src.set_opacity(1)
|
||||
if(src.istransparent)
|
||||
src.set_opacity(0)
|
||||
else
|
||||
src.set_opacity(1)
|
||||
sleep(15)
|
||||
src.operating = 0
|
||||
|
||||
|
||||
// Blast door crushing.
|
||||
for(var/turf/turf in locs)
|
||||
for(var/atom/movable/AM in turf)
|
||||
@@ -276,10 +280,11 @@
|
||||
// Parameters: None
|
||||
// Description: Closes the door. Does necessary checks.
|
||||
/obj/machinery/door/blast/close()
|
||||
|
||||
if (src.operating || (stat & BROKEN || stat & NOPOWER))
|
||||
return
|
||||
force_close()
|
||||
|
||||
force_close()
|
||||
|
||||
// Proc: repair()
|
||||
// Parameters: None
|
||||
@@ -323,5 +328,52 @@ obj/machinery/door/blast/regular/open
|
||||
icon_state = "shutter1"
|
||||
damage = SHUTTER_CRUSH_DAMAGE
|
||||
|
||||
// SUBTYPE: Transparent
|
||||
// Not technically a blast door but operates like one. Allows air and light.
|
||||
obj/machinery/door/blast/gate
|
||||
name = "thick gate"
|
||||
icon_state_open = "tshutter0"
|
||||
icon_state_opening = "tshutterc0"
|
||||
icon_state_closed = "tshutter1"
|
||||
icon_state_closing = "tshutterc1"
|
||||
icon_state = "tshutter1"
|
||||
damage = SHUTTER_CRUSH_DAMAGE
|
||||
maxhealth = 400
|
||||
block_air_zones = 0
|
||||
opacity = 0
|
||||
istransparent = 1
|
||||
|
||||
obj/machinery/door/blast/gate/open
|
||||
icon_state = "tshutter0"
|
||||
density = 0
|
||||
|
||||
/obj/machinery/door/blast/gate/thin
|
||||
name = "thin gate"
|
||||
icon_state_open = "shutter2_0"
|
||||
icon_state_opening = "shutter2_c0"
|
||||
icon_state_closed = "shutter2_1"
|
||||
icon_state_closing = "shutter2_c1"
|
||||
icon_state = "shutter2_1"
|
||||
maxhealth = 200
|
||||
opacity = 0
|
||||
|
||||
/obj/machinery/door/blast/gate/thin/open
|
||||
icon_state = "shutter2_1"
|
||||
density = 0
|
||||
|
||||
/obj/machinery/door/blast/gate/bars
|
||||
name = "prison bars"
|
||||
icon_state_open = "bars_0"
|
||||
icon_state_opening = "bars_c0"
|
||||
icon_state_closed = "bars_1"
|
||||
icon_state_closing = "bars_c1"
|
||||
icon_state = "bars_1"
|
||||
maxhealth = 600
|
||||
opacity = 0
|
||||
|
||||
/obj/machinery/door/blast/gate/bars/open
|
||||
icon_state = "bars_1"
|
||||
density = 0
|
||||
|
||||
#undef BLAST_DOOR_CRUSH_DAMAGE
|
||||
#undef SHUTTER_CRUSH_DAMAGE
|
||||
@@ -40,7 +40,6 @@
|
||||
|
||||
/obj/machinery/door_timer/Initialize()
|
||||
..()
|
||||
//Doors need to go first, and can't rely on init order, so come back to me.
|
||||
return INITIALIZE_HINT_LATELOAD
|
||||
|
||||
/obj/machinery/door_timer/LateInitialize()
|
||||
|
||||
@@ -68,6 +68,7 @@
|
||||
L.updateicon()
|
||||
|
||||
area.power_change()
|
||||
GLOB.lights_switched_on_roundstat++
|
||||
|
||||
/obj/machinery/light_switch/power_change()
|
||||
|
||||
|
||||
@@ -164,7 +164,7 @@ GLOBAL_LIST_BOILERPLATE(allCasters, /obj/machinery/newscaster)
|
||||
securityCaster = 1
|
||||
|
||||
/obj/machinery/newscaster/Initialize()
|
||||
..() //Not returning . because lateload below
|
||||
..()
|
||||
allCasters += src
|
||||
unit_no = ++unit_no_cur
|
||||
paper_remaining = 15
|
||||
|
||||
@@ -371,10 +371,13 @@ GLOBAL_LIST_BOILERPLATE(pointdefense_turrets, /obj/machinery/power/pointdefense)
|
||||
|
||||
|
||||
/obj/effect/projectile/tracer/pointdefense
|
||||
icon = 'icons/obj/projectiles_vr.dmi'
|
||||
icon_state = "beam_pointdef"
|
||||
|
||||
/obj/effect/projectile/muzzle/pointdefense
|
||||
icon = 'icons/obj/projectiles_vr.dmi'
|
||||
icon_state = "muzzle_pointdef"
|
||||
|
||||
/obj/effect/projectile/impact/pointdefense
|
||||
icon = 'icons/obj/projectiles_vr.dmi'
|
||||
icon_state = "impact_pointdef"
|
||||
|
||||
@@ -74,6 +74,7 @@
|
||||
var/check_anomalies = TRUE //checks if it can shoot at unidentified lifeforms (ie xenos)
|
||||
var/check_synth = FALSE //if active, will shoot at anything not an AI or cyborg
|
||||
var/check_all = FALSE //If active, will fire on anything, including synthetics.
|
||||
var/fire_at_movement = FALSE // If active, will fire on the most recent thing to move in range, as soon as possible.
|
||||
var/ailock = FALSE // AI cannot use this
|
||||
var/check_down = FALSE //If active, will shoot to kill when lethals are also on
|
||||
var/faction = null //if set, will not fire at people in the same faction for any reason.
|
||||
@@ -95,6 +96,8 @@
|
||||
var/timeout = 10 // When a turret pops up, then finds nothing to shoot at, this number decrements until 0, when it pops down.
|
||||
var/can_salvage = TRUE // If false, salvaging doesn't give you anything.
|
||||
|
||||
var/stay_up = FALSE // If true, the turret will remain open while it is powered.
|
||||
|
||||
/obj/machinery/porta_turret/crescent
|
||||
req_one_access = list(access_cent_specops)
|
||||
enabled = FALSE
|
||||
@@ -276,6 +279,31 @@
|
||||
)
|
||||
return data
|
||||
|
||||
/obj/machinery/porta_turret/pointdefense
|
||||
name = "point-defense turret"
|
||||
turret_type = "core"
|
||||
desc = "A basic ship-mounted rock-breaker."
|
||||
description_info = "This turret is capable of blasting incoming meteors into gravel, but it is very limited in range."
|
||||
|
||||
installation = /obj/item/weapon/gun/energy/mininglaser
|
||||
|
||||
check_arrest = FALSE
|
||||
check_records = FALSE
|
||||
check_weapons = FALSE
|
||||
check_access = FALSE
|
||||
check_anomalies = FALSE
|
||||
check_synth = FALSE
|
||||
check_all = FALSE
|
||||
fire_at_movement = TRUE
|
||||
stay_up = TRUE
|
||||
ailock = FALSE
|
||||
check_down = FALSE
|
||||
|
||||
/obj/machinery/porta_turret/pointdefense/orderable
|
||||
enabled = FALSE
|
||||
anchored = FALSE
|
||||
locked = FALSE
|
||||
|
||||
/obj/machinery/porta_turret/Initialize()
|
||||
//Sets up a spark system
|
||||
spark_system = new /datum/effect/effect/system/spark_spread
|
||||
@@ -322,6 +350,8 @@
|
||||
var/obj/item/projectile/P = initial(E.projectile_type)
|
||||
//var/obj/item/ammo_casing/shottype = E.projectile_type
|
||||
|
||||
//GLOB.moved_event.register_global(src, /obj/machinery/porta_turret/proc/point_defense) //VOREStation Removal
|
||||
|
||||
projectile = P
|
||||
lethal_projectile = projectile
|
||||
shot_sound = initial(P.fire_sound)
|
||||
@@ -377,11 +407,18 @@
|
||||
lethal_shot_sound = 'sound/weapons/eluger.ogg'
|
||||
shot_sound = 'sound/weapons/Taser.ogg'
|
||||
|
||||
/obj/machinery/porta_turret/proc/HasController()
|
||||
var/area/A = get_area(src)
|
||||
return A && A.turret_controls.len > 0
|
||||
if(/obj/item/weapon/gun/energy/mininglaser)
|
||||
lethal_icon_color = "green"
|
||||
lethal_projectile = /obj/item/projectile/beam/mininglaser
|
||||
lethal_shot_sound = 'sound/weapons/eluger.ogg'
|
||||
icon_color = "red"
|
||||
projectile = /obj/item/projectile/beam/weaklaser
|
||||
shot_sound = 'sound/weapons/Laser.ogg'
|
||||
|
||||
/obj/machinery/porta_turret/proc/isLocked(mob/user)
|
||||
if(locked && !issilicon(user))
|
||||
to_chat(user, "<span class='notice'>Controls locked.</span>")
|
||||
return 1
|
||||
if(HasController())
|
||||
return TRUE
|
||||
if(isrobot(user) || isAI(user))
|
||||
@@ -409,6 +446,10 @@
|
||||
/obj/machinery/porta_turret/attack_hand(mob/user)
|
||||
tgui_interact(user)
|
||||
|
||||
/obj/machinery/porta_turret/proc/HasController()
|
||||
var/area/A = get_area(src)
|
||||
return A && A.turret_controls.len > 0
|
||||
|
||||
/obj/machinery/porta_turret/tgui_interact(mob/user, datum/tgui/ui = null)
|
||||
if(HasController())
|
||||
to_chat(user, "<span class='notice'>[src] can only be controlled using the assigned turret controller.</span>")
|
||||
@@ -671,6 +712,10 @@
|
||||
popDown()
|
||||
return
|
||||
|
||||
if(stay_up)
|
||||
timeout = 10
|
||||
popUp()
|
||||
|
||||
var/list/targets = list() //list of primary targets
|
||||
var/list/secondarytargets = list() //targets that are least important
|
||||
|
||||
@@ -693,7 +738,7 @@
|
||||
if(!tryToShootAt(targets))
|
||||
if(!tryToShootAt(secondarytargets)) // if no valid targets, go for secondary targets
|
||||
timeout--
|
||||
if(timeout <= 0)
|
||||
if(timeout <= 0 && !stay_up)
|
||||
spawn()
|
||||
popDown() // no valid targets, close the cover
|
||||
|
||||
@@ -701,6 +746,14 @@
|
||||
use_power(20000)
|
||||
health = min(health+1, maxhealth) // 1HP for 20kJ
|
||||
|
||||
// We're expecting the first arg to be a target, for this we don't care about previous and next turfs.
|
||||
/obj/machinery/porta_turret/proc/point_defense(var/atom/movable/Targ)
|
||||
if((stat & (NOPOWER|BROKEN)) || !fire_at_movement) // Are we even able or supposed to fire at non-moving targets?
|
||||
return
|
||||
|
||||
if((isliving(Targ) && assess_living(Targ)) || ((istype(Targ, /obj/item) || istype(Targ, /obj/effect/meteor)) && Targ.invisibility < INVISIBILITY_LEVEL_ONE && Targ in view(7,src))) // Is the target a living thing, if so, is it a valid target? Or if it's not living, is it in sight?
|
||||
target(Targ) // Yes? Blast it.
|
||||
|
||||
/obj/machinery/porta_turret/proc/assess_and_assign(var/mob/living/L, var/list/targets, var/list/secondarytargets)
|
||||
switch(assess_living(L))
|
||||
if(TURRET_PRIORITY_TARGET)
|
||||
@@ -727,10 +780,10 @@
|
||||
if(L.stat == DEAD && !emagged) //if the perp is dead, no need to bother really
|
||||
return TURRET_NOT_TARGET //move onto next potential victim!
|
||||
|
||||
if(get_dist(src, L) > 7) //if it's too far away, why bother?
|
||||
if(get_dist(src, get_turf(L)) > 7) //if it's too far away, why bother?
|
||||
return TURRET_NOT_TARGET
|
||||
|
||||
if(!(L in check_trajectory(L, src))) //check if we have true line of sight
|
||||
if(!(L in check_trajectory(get_turf(L), src))) //check if we have true line of sight
|
||||
return TURRET_NOT_TARGET
|
||||
|
||||
if(emagged) // If emagged not even the dead get a rest
|
||||
@@ -837,8 +890,9 @@
|
||||
last_target = target
|
||||
spawn()
|
||||
popUp() //pop the turret up if it's not already up.
|
||||
set_dir(get_dir(src, target)) //even if you can't shoot, follow the target
|
||||
playsound(src, 'sound/machines/turrets/turret_rotate.ogg', 100, 1) // Play rotating sound
|
||||
if(dir != get_dir(src, target))
|
||||
set_dir(get_dir(src, target)) //even if you can't shoot, follow the target
|
||||
playsound(src, 'sound/machines/turrets/turret_rotate.ogg', 100, 1) // Play rotating sound
|
||||
spawn()
|
||||
shootAt(target)
|
||||
return 1
|
||||
@@ -903,6 +957,8 @@
|
||||
var/check_anomalies
|
||||
var/check_all
|
||||
var/check_down
|
||||
var/fire_at_movement
|
||||
var/stay_up
|
||||
var/ailock
|
||||
|
||||
/obj/machinery/porta_turret/proc/setState(var/datum/turret_checks/TC)
|
||||
@@ -919,6 +975,8 @@
|
||||
check_anomalies = TC.check_anomalies
|
||||
check_all = TC.check_all
|
||||
check_down = TC.check_down
|
||||
fire_at_movement = TC.fire_at_movement
|
||||
stay_up = TC.stay_up
|
||||
ailock = TC.ailock
|
||||
|
||||
power_change()
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
updateUsrDialog()
|
||||
return
|
||||
var/mob/M = locate(href_list["traitormob"])
|
||||
if(M.mind.special_role || jobban_isbanned(M, "Syndicate"))
|
||||
if(M.mind.tcrystals > 0 || jobban_isbanned(M, "Syndicate"))
|
||||
temptext = "<i>We have no need for you at this time. Have a pleasant day.</i><br>"
|
||||
updateUsrDialog()
|
||||
return
|
||||
@@ -33,7 +33,9 @@
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/N = M
|
||||
to_chat(N, "<B>Access granted, here are the supplies!</B>")
|
||||
traitors.equip(N)
|
||||
traitors.spawn_uplink(N)
|
||||
N.mind.tcrystals = DEFAULT_TELECRYSTAL_AMOUNT
|
||||
N.mind.accept_tcrystals = 1
|
||||
message_admins("[N]/([N.ckey]) has recieved an uplink and telecrystals from the syndicate beacon.")
|
||||
|
||||
updateUsrDialog()
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
sleep(2)
|
||||
go_out()
|
||||
sleep(2)
|
||||
del(src)
|
||||
qdel(src)
|
||||
|
||||
/obj/machinery/transportpod/relaymove(mob/user as mob)
|
||||
if(user.stat)
|
||||
|
||||
@@ -28,9 +28,12 @@
|
||||
var/check_synth = FALSE //if active, will shoot at anything not an AI or cyborg
|
||||
var/check_all = FALSE //If active, will shoot at anything.
|
||||
var/check_down = TRUE //If active, won't shoot laying targets.
|
||||
var/stay_up = FALSE //If active, the turret will not pop-down unless it loses power or is disabled.
|
||||
var/fire_at_movement = FALSE //If active, the turret will prioritize objects or creatures that move in its range.
|
||||
var/ailock = FALSE //Silicons cannot use this
|
||||
|
||||
var/syndicate = FALSE
|
||||
|
||||
req_access = list(access_ai_upload)
|
||||
|
||||
/obj/machinery/turretid/stun
|
||||
@@ -194,6 +197,8 @@
|
||||
TC.check_anomalies = check_anomalies
|
||||
TC.check_all = check_all
|
||||
TC.check_down = check_down
|
||||
TC.stay_up = stay_up
|
||||
TC.fire_at_movement = fire_at_movement
|
||||
TC.ailock = ailock
|
||||
|
||||
if(istype(control_area))
|
||||
|
||||
@@ -572,7 +572,7 @@ GLOBAL_LIST_EMPTY(vending_products)
|
||||
vend_ready = 1
|
||||
currently_vending = null
|
||||
SStgui.update_uis(src)
|
||||
|
||||
GLOB.items_sold_shift_roundstat++
|
||||
|
||||
/obj/machinery/vending/proc/do_logging(datum/stored_item/vending_product/R, mob/user, var/vending = 0)
|
||||
if(user.GetIdCard())
|
||||
|
||||
@@ -753,7 +753,9 @@
|
||||
/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)
|
||||
/obj/item/toy/plushie/otter = 1,
|
||||
/obj/item/toy/plushie/vox = 1,
|
||||
/obj/item/toy/mistletoe = 1)
|
||||
//VOREStation Add End
|
||||
premium = list(/obj/item/weapon/reagent_containers/food/drinks/bottle/champagne = 1,
|
||||
/obj/item/weapon/storage/trinketbox = 2)
|
||||
@@ -793,7 +795,9 @@
|
||||
/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)
|
||||
/obj/item/toy/plushie/otter = 50,
|
||||
/obj/item/toy/plushie/vox = 50,
|
||||
/obj/item/toy/mistletoe = 50)
|
||||
//VOREStation Add End
|
||||
|
||||
|
||||
|
||||
@@ -1446,7 +1446,7 @@
|
||||
/obj/item/seeds/riceseed = 3,
|
||||
/obj/item/seeds/rose = 3,
|
||||
/obj/item/seeds/soyaseed = 3,
|
||||
/obj/item/seeds/spineapple = 3,
|
||||
/obj/item/seeds/pineapple = 3,
|
||||
/obj/item/seeds/sugarcaneseed = 3,
|
||||
/obj/item/seeds/sunflowerseed = 3,
|
||||
/obj/item/seeds/shandseed = 2,
|
||||
@@ -3940,7 +3940,7 @@
|
||||
/obj/item/weapon/reagent_containers/food/snacks/slice/mushroompizza = 10,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/slice/orangecake = 10,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/slice/peanutcake = 10,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/slice/pineapple = 10,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/pineappleslice = 10,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/slice/plaincake = 10,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/slice/pumpkinpie = 10,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/slice/tofubread = 10,
|
||||
@@ -4404,7 +4404,7 @@
|
||||
/obj/item/weapon/reagent_containers/food/snacks/slice/mushroompizza = 10,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/slice/orangecake = 10,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/slice/peanutcake = 10,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/slice/pineapple = 10,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/pineappleslice = 10,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/slice/plaincake = 10,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/slice/pumpkinpie = 10,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/slice/tofubread = 10,
|
||||
@@ -4576,7 +4576,7 @@
|
||||
/obj/item/seeds/riceseed = 3,
|
||||
/obj/item/seeds/rose = 3,
|
||||
/obj/item/seeds/soyaseed = 3,
|
||||
/obj/item/seeds/spineapple = 3,
|
||||
/obj/item/seeds/pineapple = 3,
|
||||
/obj/item/seeds/sugarcaneseed = 3,
|
||||
/obj/item/seeds/sunflowerseed = 3,
|
||||
/obj/item/seeds/shandseed = 2,
|
||||
|
||||
@@ -33,6 +33,9 @@
|
||||
|
||||
defence_mode_possible = 1
|
||||
|
||||
icon_scale_x = 1.5
|
||||
icon_scale_y = 1.5
|
||||
|
||||
/*
|
||||
/obj/mecha/combat/durand/New()
|
||||
..()
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
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.
|
||||
ME.attach(src)
|
||||
ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/cannon(src)
|
||||
|
||||
@@ -31,6 +31,9 @@
|
||||
|
||||
overload_possible = 1
|
||||
|
||||
icon_scale_x = 1.35
|
||||
icon_scale_y = 1.35
|
||||
|
||||
//Not quite sure how to move those yet.
|
||||
/obj/mecha/combat/gygax/get_commands()
|
||||
var/output = {"<div class='wr'>
|
||||
|
||||
@@ -44,6 +44,9 @@
|
||||
/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster
|
||||
)
|
||||
|
||||
icon_scale_x = 1.5
|
||||
icon_scale_y = 1.5
|
||||
|
||||
/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"
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
switch_dmg_type_possible = TRUE
|
||||
|
||||
/obj/mecha/combat/phazon/equipped/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
starting_equipment = list(
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/rcd,
|
||||
/obj/item/mecha_parts/mecha_equipment/gravcatapult
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
. += "<span class='warning'><b>It is completely destroyed.</b></span>"
|
||||
|
||||
/obj/item/mecha_parts/component/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
integrity = max_integrity
|
||||
|
||||
if(start_damaged)
|
||||
|
||||
@@ -49,6 +49,9 @@
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/proc/add_equip_overlay(obj/mecha/M as obj)
|
||||
return
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/proc/update_chassis_page()
|
||||
if(chassis)
|
||||
send_byjax(chassis.occupant,"exosuit.browser","eq_list",chassis.get_equipment_list())
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
var/obj/item/weapon/inflatable_dispenser/my_deployer = null
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/powertool/inflatables/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
my_deployer = my_tool
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/powertool/inflatables/Topic(href, href_list)
|
||||
|
||||
@@ -26,9 +26,10 @@
|
||||
pr_repair_droid = null
|
||||
..()
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/repair_droid/attach(obj/mecha/M as obj)
|
||||
/obj/item/mecha_parts/mecha_equipment/repair_droid/add_equip_overlay(obj/mecha/M as obj)
|
||||
..()
|
||||
droid_overlay = new(src.icon, icon_state = "repair_droid")
|
||||
if(!droid_overlay)
|
||||
droid_overlay = new(src.icon, icon_state = "repair_droid")
|
||||
M.add_overlay(droid_overlay)
|
||||
return
|
||||
|
||||
|
||||
@@ -37,15 +37,19 @@
|
||||
my_shield = null
|
||||
..()
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/combat_shield/add_equip_overlay(obj/mecha/M as obj)
|
||||
..()
|
||||
if(!drone_overlay)
|
||||
drone_overlay = new(src.icon, icon_state = "shield_droid")
|
||||
M.overlays += drone_overlay
|
||||
return
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/combat_shield/attach(obj/mecha/M as obj)
|
||||
..()
|
||||
if(chassis)
|
||||
my_shield.shield_health = 0
|
||||
my_shield.my_mecha = chassis
|
||||
my_shield.forceMove(chassis)
|
||||
|
||||
drone_overlay = new(src.icon, icon_state = "shield_droid")
|
||||
M.overlays += drone_overlay
|
||||
return
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/combat_shield/detach()
|
||||
|
||||
@@ -318,7 +318,7 @@
|
||||
equip_type = EQUIP_HULL
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/crisis_drone/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
drone_overlay = new(src.icon, icon_state = droid_state)
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/crisis_drone/Destroy()
|
||||
@@ -467,11 +467,15 @@
|
||||
if(enabled)
|
||||
set_ready_state(0)
|
||||
log_message("Activated.")
|
||||
chassis.overlays += drone_overlay
|
||||
else
|
||||
set_ready_state(1)
|
||||
log_message("Deactivated.")
|
||||
chassis.overlays -= drone_overlay
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/crisis_drone/add_equip_overlay(obj/mecha/M as obj)
|
||||
..()
|
||||
if(enabled)
|
||||
M.add_overlay(drone_overlay)
|
||||
return
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/crisis_drone/Topic(href, href_list)
|
||||
..()
|
||||
|
||||
@@ -198,7 +198,7 @@
|
||||
var/weapons_only_cycle = FALSE //So combat mechs don't switch to their equipment at times.
|
||||
|
||||
/obj/mecha/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
for(var/path in starting_components)
|
||||
var/obj/item/mecha_parts/component/C = new path(src)
|
||||
@@ -208,6 +208,7 @@
|
||||
for(var/path in starting_equipment)
|
||||
var/obj/item/mecha_parts/mecha_equipment/ME = new path(src)
|
||||
ME.attach(src)
|
||||
update_transform()
|
||||
|
||||
/obj/mecha/drain_power(var/drain_check)
|
||||
|
||||
@@ -321,6 +322,8 @@
|
||||
if(smoke_possible) //Just making sure nothing is running.
|
||||
qdel(smoke_system)
|
||||
|
||||
GLOB.mech_destroyed_roundstat++
|
||||
|
||||
QDEL_NULL(pr_int_temp_processor)
|
||||
QDEL_NULL(pr_inertial_movement)
|
||||
QDEL_NULL(pr_give_air)
|
||||
@@ -1576,11 +1579,12 @@
|
||||
src.verbs += /obj/mecha/verb/eject
|
||||
src.Entered(mmi_as_oc)
|
||||
src.Move(src.loc)
|
||||
src.icon_state = src.reset_icon()
|
||||
update_icon()
|
||||
set_dir(dir_in)
|
||||
src.log_message("[mmi_as_oc] moved in as pilot.")
|
||||
if(!hasInternalDamage())
|
||||
src.occupant << sound('sound/mecha/nominal.ogg',volume=50)
|
||||
update_icon()
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
@@ -1883,7 +1887,7 @@
|
||||
src.forceMove(src.loc)
|
||||
src.verbs += /obj/mecha/verb/eject
|
||||
src.log_append_to_last("[H] moved in as pilot.")
|
||||
src.icon_state = src.reset_icon()
|
||||
update_icon()
|
||||
//VOREStation Edit Add
|
||||
if(occupant.hud_used)
|
||||
minihud = new (occupant.hud_used, src)
|
||||
@@ -2003,7 +2007,7 @@
|
||||
occupant.clear_alert("mech damage")
|
||||
occupant.in_enclosed_vehicle = 0
|
||||
occupant = null
|
||||
icon_state = src.reset_icon()+"-open"
|
||||
update_icon()
|
||||
set_dir(dir_in)
|
||||
verbs -= /obj/mecha/verb/eject
|
||||
|
||||
@@ -2663,13 +2667,6 @@
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/obj/mecha/proc/reset_icon()
|
||||
if (initial_icon)
|
||||
icon_state = initial_icon
|
||||
else
|
||||
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)
|
||||
|
||||
|
||||
@@ -0,0 +1,65 @@
|
||||
|
||||
|
||||
/obj/mecha
|
||||
// Show the pilot.
|
||||
var/show_pilot = FALSE
|
||||
|
||||
// The state of the 'face', or the thing that overlays on the pilot. If this isn't set, it will probably look really weird.
|
||||
var/face_state = null
|
||||
var/icon/face_overlay
|
||||
|
||||
var/icon/pilot_image
|
||||
|
||||
// How many pixels do we bump the pilot upward?
|
||||
var/pilot_lift = 0
|
||||
|
||||
/obj/mecha/update_transform()
|
||||
// Now for the regular stuff.
|
||||
var/matrix/M = matrix()
|
||||
M.Scale(icon_scale_x, icon_scale_y)
|
||||
M.Translate(0, 16*(icon_scale_y-1))
|
||||
animate(src, transform = M, time = 10)
|
||||
return
|
||||
|
||||
/obj/mecha/update_icon()
|
||||
if(!initial_icon)
|
||||
initial_icon = initial(icon_state)
|
||||
|
||||
if(occupant)
|
||||
icon_state = initial_icon
|
||||
else
|
||||
icon_state = "[initial_icon]-open"
|
||||
|
||||
cut_overlays()
|
||||
|
||||
if(show_pilot)
|
||||
if(occupant)
|
||||
pilot_image = getCompoundIcon(occupant)
|
||||
|
||||
if(!istype(occupant, /mob/living/carbon/brain))
|
||||
|
||||
var/icon/Cutter
|
||||
|
||||
if("[initial_icon]_cutter" in icon_states(icon))
|
||||
Cutter = new(src.icon, "[initial_icon]_cutter")
|
||||
|
||||
if(Cutter)
|
||||
pilot_image.Blend(Cutter, ICON_MULTIPLY, y = (-1 * pilot_lift))
|
||||
|
||||
var/image/Pilot = image(pilot_image)
|
||||
|
||||
Pilot.pixel_y = pilot_lift
|
||||
|
||||
add_overlay(Pilot)
|
||||
else
|
||||
pilot_image = null
|
||||
|
||||
if(face_state && !face_overlay)
|
||||
face_overlay = new(src.icon, icon_state = face_state)
|
||||
|
||||
if(face_overlay)
|
||||
add_overlay(face_overlay)
|
||||
|
||||
for(var/obj/item/mecha_parts/mecha_equipment/ME in equipment)
|
||||
ME.add_equip_overlay(src)
|
||||
return
|
||||
@@ -17,6 +17,9 @@
|
||||
step_energy_drain = 6
|
||||
var/obj/item/clothing/glasses/hud/health/mech/hud
|
||||
|
||||
icon_scale_x = 1.2
|
||||
icon_scale_y = 1.2
|
||||
|
||||
/obj/mecha/medical/odysseus/New()
|
||||
..()
|
||||
hud = new /obj/item/clothing/glasses/hud/health/mech(src)
|
||||
@@ -124,7 +127,7 @@
|
||||
C.images += holder
|
||||
*/
|
||||
/obj/mecha/medical/odysseus/loaded/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/tool/sleeper
|
||||
ME.attach(src)
|
||||
ME = new /obj/item/mecha_parts/mecha_equipment/tool/sleeper
|
||||
|
||||
@@ -24,6 +24,9 @@
|
||||
/obj/item/mecha_parts/component/electrical
|
||||
)
|
||||
|
||||
icon_scale_x = 1.2
|
||||
icon_scale_y = 1.2
|
||||
|
||||
/obj/mecha/working/ripley/Destroy()
|
||||
for(var/atom/movable/A in src.cargo)
|
||||
A.loc = loc
|
||||
@@ -67,7 +70,7 @@
|
||||
max_special_equip = 1
|
||||
|
||||
/obj/mecha/working/ripley/deathripley/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp/safety
|
||||
ME.attach(src)
|
||||
return
|
||||
@@ -77,7 +80,7 @@
|
||||
name = "APLU \"Miner\""
|
||||
|
||||
/obj/mecha/working/ripley/mining/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
//Attach drill
|
||||
if(prob(25)) //Possible diamond drill... Feeling lucky?
|
||||
var/obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill/D = new /obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill
|
||||
@@ -92,6 +95,20 @@
|
||||
for(var/obj/item/mecha_parts/mecha_tracking/B in src.contents)//Deletes the beacon so it can't be found easily
|
||||
qdel (B)
|
||||
|
||||
/obj/mecha/working/ripley/antique
|
||||
name = "APLU \"Geiger\""
|
||||
desc = "You can't beat the classics."
|
||||
icon_state = "ripley-old"
|
||||
initial_icon = "ripley-old"
|
||||
|
||||
show_pilot = TRUE
|
||||
pilot_lift = 5
|
||||
|
||||
max_utility_equip = 1
|
||||
max_universal_equip = 3
|
||||
|
||||
icon_scale_x = 1
|
||||
icon_scale_y = 1
|
||||
|
||||
//Vorestation Edit Start
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
create_reagents(100)
|
||||
|
||||
/obj/effect/decal/cleanable/chemcoating/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
var/turf/T = get_turf(src)
|
||||
if(T)
|
||||
for(var/obj/O in get_turf(src))
|
||||
|
||||
@@ -90,6 +90,39 @@
|
||||
serial_number = given_serial
|
||||
..(loc)
|
||||
|
||||
//Selectable subtype
|
||||
/obj/item/weapon/contraband/poster/custom
|
||||
name = "rolled-up poly-poster"
|
||||
desc = "The poster comes with its own automatic adhesive mechanism, for easy pinning to any vertical surface. This one is made from some kind of e-paper, and could display almost anything!"
|
||||
poster_type = /obj/structure/sign/poster/custom
|
||||
|
||||
/obj/item/weapon/contraband/poster/custom/New(turf/loc, var/given_serial = 0)
|
||||
if(given_serial == 0)
|
||||
serial_number = 1 //Decidedly unrandom
|
||||
else
|
||||
serial_number = given_serial
|
||||
..(loc)
|
||||
|
||||
/obj/item/weapon/contraband/poster/custom/verb/select_poster()
|
||||
set name = "Set Poster type"
|
||||
set category = "Object"
|
||||
set desc = "Click to choose a poster to display."
|
||||
|
||||
var/mob/M = usr
|
||||
var/list/options = list()
|
||||
for(var/datum/poster/posteroption in poster_designs)
|
||||
options[posteroption.listing_name] = posteroption
|
||||
|
||||
var/choice = input(M,"Choose a poster!","Customize Poster") in options
|
||||
if(src && choice && !M.stat && in_range(M,src))
|
||||
var serial = poster_designs.Find(options[choice])
|
||||
serial_number = serial
|
||||
name = "rolled-up poly-poster - No.[serial]"
|
||||
to_chat(M, "The poster is now: [choice].")
|
||||
return 1
|
||||
|
||||
|
||||
|
||||
//############################## THE ACTUAL DECALS ###########################
|
||||
|
||||
/obj/structure/sign/poster
|
||||
@@ -187,6 +220,7 @@
|
||||
// Description suffix
|
||||
var/desc=""
|
||||
var/icon_state=""
|
||||
var/listing_name=""
|
||||
|
||||
// NT poster subtype.
|
||||
/obj/structure/sign/poster/nanotrasen
|
||||
@@ -201,3 +235,8 @@
|
||||
set_poster(design)
|
||||
|
||||
..(newloc, placement_dir, serial, itemtype)
|
||||
|
||||
//Non-Random Posters
|
||||
|
||||
/obj/structure/sign/poster/custom
|
||||
roll_type = /obj/item/weapon/contraband/poster/custom
|
||||
@@ -1,290 +1,348 @@
|
||||
// baystation12 posters
|
||||
/datum/poster/bay_1
|
||||
icon_state="bsposter1"
|
||||
name = "Unlucky Space Explorer"
|
||||
desc = "This particular one depicts a skeletal form within a space suit."
|
||||
name = "PSA: Unlucky Space Explorer"
|
||||
desc = "This grim PSA depicts a skeletal form within a space suit. Thousands die every year as a result of failing to follow EVA safety guidelines."
|
||||
listing_name = "PSA - EVA Accidents"
|
||||
|
||||
/datum/poster/bay_2
|
||||
icon_state="bsposter2"
|
||||
name = "Positronic Logic Conflicts"
|
||||
desc = "This particular one depicts the cold, unmoving stare of a particular advanced AI."
|
||||
name = "PSA: Disobedient Drones"
|
||||
desc = "This PSA depicts the cold, unmoving stare of a particularly advanced AI. Contact information for the Emergent Intelligence Oversight is included."
|
||||
listing_name = "PSA - Emergent Drones"
|
||||
|
||||
/datum/poster/bay_3
|
||||
icon_state="bsposter3"
|
||||
name = "Paranoia"
|
||||
desc = "This particular one warns of the dangers of trusting your co-workers too much."
|
||||
name = "PSA: Corporate Espionage"
|
||||
desc = "This PSA warns of the dangers of trusting your co-workers with sensitive department information. They may be spying for a rival corporation, or worse!"
|
||||
listing_name = "PSA - Corporate Espionage"
|
||||
|
||||
/datum/poster/bay_4
|
||||
icon_state="bsposter4"
|
||||
name = "Keep Calm"
|
||||
desc = "This particular one is of a famous New Earth design, although a bit modified. Someone has scribbled an O over the A on the poster."
|
||||
desc = "An incredibly vague message, presented in a classic form. Someone has scribbled an O over the A on the poster."
|
||||
listing_name = "PSA - Keep Calm"
|
||||
|
||||
/datum/poster/bay_5
|
||||
icon_state="bsposter5"
|
||||
name = "Martian Warlord"
|
||||
desc = "This particular one depicts the cartoony mug of a certain Martial Warmonger."
|
||||
name = "PSA: Saboteurs!"
|
||||
desc = "A company PSA reminding employees to keep an eye out for suspicious activity, and report it immediately."
|
||||
listing_name = "PSA - Saboteur"
|
||||
|
||||
/datum/poster/bay_6
|
||||
icon_state="bsposter6"
|
||||
name = "Technological Singularity"
|
||||
desc = "This particular one is of the blood-curdling symbol of a long-since defeated enemy of humanity."
|
||||
name = "Eradicator XV"
|
||||
desc = "An ad for the fifteenth installment in the Eradicator movie franchise, about a violent robotic uprising hellbent on wiping out humanity."
|
||||
listing_name = "Ad - Eradicator XV"
|
||||
|
||||
/datum/poster/bay_7
|
||||
icon_state="bsposter7"
|
||||
name = "Wasteland"
|
||||
desc = "This particular one is of a couple of ragged gunmen, one male and one female, on top of a mound of rubble. The number \"12\" is visible on their blue jumpsuits."
|
||||
name = "Wasteland: Battle for Earth"
|
||||
desc = "This action movie ad shows a couple of ragged post-apocalyptic gunmen, one male and one female, on top of a mound of rubble."
|
||||
listing_name = "Ad - Battle for Earth"
|
||||
|
||||
/datum/poster/bay_8
|
||||
icon_state="bsposter8"
|
||||
name = "Pinup Girl Cindy"
|
||||
desc = "This particular one is of a historical corporate PR girl, Cindy, in a particularly feminine pose."
|
||||
desc = "This is a vintage 2450s pin-up of NanoTrasen's PR girl, Cindy, in a particularly feminine pose."
|
||||
listing_name = "Pin-up - Cindi"
|
||||
|
||||
/datum/poster/bay_9
|
||||
icon_state="bsposter9"
|
||||
name = "Pinup Girl Amy"
|
||||
desc = "This particular one is of Amy, the nymphomaniac urban legend of deep space. How this photograph came to be is not known."
|
||||
desc = "This pin-up is of Amy, one of NanoTrasen's most popular PR models."
|
||||
listing_name = "Pin-up - Amy"
|
||||
|
||||
/datum/poster/bay_10
|
||||
icon_state="bsposter10"
|
||||
name = "Don't Panic"
|
||||
desc = "This particular one depicts some sort of star in a grimace. The \"Don't Panic\" is written in big, friendly letters."
|
||||
desc = "This ad for Vey-Medical anxiety pills depicts some sort of star in a grimace. The \"Don't Panic\" is written in big, friendly letters."
|
||||
listing_name = "Ad - Don't panic."
|
||||
|
||||
/datum/poster/bay_11
|
||||
icon_state="bsposter11"
|
||||
name = "Underwater Laboratory"
|
||||
desc = "This particular one is of the fabled last crew of a previous Company project."
|
||||
name = "Underwater Living"
|
||||
desc = "This immigration poster encourages you to move to Earth;s premiere underwater city, Atlantis. One bedroom apartments start at half your salary."
|
||||
listing_name = "Ad - Atlantis"
|
||||
|
||||
/datum/poster/bay_12
|
||||
icon_state="bsposter12"
|
||||
name = "Rogue AI"
|
||||
desc = "This particular one depicts the shell of the infamous AI that catastropically comandeered one of humanity's earliest space stations. Back then, the Company was just known as TriOptimum."
|
||||
name = "Beware Rogue AI"
|
||||
desc = "This ad for the Emergent Intelligence Oversight Recruitment Division depicts a menacing AI and asks if you're a bad enough dude to take it on."
|
||||
listing_name = "Recruitment - EIO"
|
||||
|
||||
/datum/poster/bay_13
|
||||
icon_state="bsposter13"
|
||||
name = "User of the Arcane Arts"
|
||||
desc = "This particular one depicts a wizard, casting a spell. You can't really make out if it's an actual photograph or a computer-generated image."
|
||||
name = "Become A User of the Arcane Arts"
|
||||
desc = "This ad for popular Virtual Reality online game 'Wiz Online' depicts a wizard, casting a spell. You can't really make out if it's an actual photograph or a computer-generated image. Incredible graphics!"
|
||||
listing_name = "Ad - Wiz Online"
|
||||
|
||||
/datum/poster/bay_14
|
||||
icon_state="bsposter14"
|
||||
name = "Levitating Skull"
|
||||
desc = "This particular one is the portrait of a flying enchanted skull. Its adventures along with its fabled companion are now fading through history..."
|
||||
desc = "This tacky ad is a portrait of the flying enchanted skull, Bones. Its adventures along with its fabled companion are showing now on a broadcast service near you!"
|
||||
listing_name = "Ad - Bones Adventures"
|
||||
|
||||
/datum/poster/bay_15
|
||||
icon_state="bsposter15"
|
||||
name = "Augmented Legend"
|
||||
desc = "This particular one is of an obviously augmented individual, gazing towards the sky. The cyber-city in the backround is rather punkish."
|
||||
desc = "This ad for Ward-Takahashi cybernetic implants shows obviously augmented individual, gazing towards the sky. Is your body augmented?"
|
||||
listing_name = "Ad - Ward-Takahashi Augments"
|
||||
|
||||
/datum/poster/bay_16
|
||||
icon_state="bsposter16"
|
||||
name = "Dangerous Static"
|
||||
desc = "This particular one depicts nothing remarkable other than a rather mesmerising pattern of monitor static. There's a tag on the sides of the poster, but it's ripped off."
|
||||
name = "Snow Crash"
|
||||
desc = "This particular one depicts nothing remarkable other than a rather mesmerising pattern of monitor static. You think it's an ad for something, but you're not sure what."
|
||||
listing_name = "Ad - Snow Crash"
|
||||
|
||||
/datum/poster/bay_17
|
||||
icon_state="bsposter17"
|
||||
name = "Pinup Girl Val"
|
||||
desc = "Luscious Val McNeil, the vertically challenged Legal Extraordinaire, winner of Miss Space two years running and favoured pinup girl of Lawyers Weekly."
|
||||
listing_name = "Pin-up - Val"
|
||||
|
||||
/datum/poster/bay_18
|
||||
icon_state="bsposter18"
|
||||
name = "Derpman, Enforcer of the State"
|
||||
desc = "Here to protect and serve... your donuts! A generously proportioned man, he teaches you the value of hiding your snacks."
|
||||
desc = "An ad for Centauri Provisions donuts. Officer Derpman is here to protect and serve... your donuts! A generously proportioned man, he teaches you the value of hiding your snacks."
|
||||
listing_name = "Ad - Officer Derpman Donuts"
|
||||
|
||||
/datum/poster/bay_19
|
||||
icon_state="bsposter19"
|
||||
name = "Respect an Unathi"
|
||||
desc = "This poster depicts a well dressed looking Unathi receiving a prestigious award. It appears to espouse greater co-operation and harmony between the two races."
|
||||
desc = "This poster depicts a sharply dressed Unathi receiving a prestigious award. It appears to espouse greater co-operation and harmony between humanity and the Unathi."
|
||||
listing_name = "PSA - Unathi"
|
||||
|
||||
/datum/poster/bay_20
|
||||
icon_state="bsposter20"
|
||||
name = "Skrell Twilight"
|
||||
desc = "This poster depicts a mysteriously inscrutable, alien scene. Numerous Skrell can be seen conversing amidst great, crystalline towers rising above crashing waves"
|
||||
name = "Skrell Tourism"
|
||||
desc = "This tourism poster depicts a mysteriously inscrutable, alien scene. Numerous Skrell can be seen conversing amidst great, crystalline towers rising above crashing waves."
|
||||
listing_name = "Ad - Skrellian Tourism"
|
||||
|
||||
/datum/poster/bay_21
|
||||
icon_state="bsposter21"
|
||||
name = "Join the Fuzz!"
|
||||
desc = "It's a nice recruitment poster of a white haired Chinese woman that says; \"Big Guns, Hot Women, Good Times. Security. We get it done.\""
|
||||
listing_name = "Recruitment - NanoTrasen Security - Pinup"
|
||||
|
||||
/datum/poster/bay_22
|
||||
icon_state="bsposter22"
|
||||
name = "Looking for a career with excitement?"
|
||||
desc = "A recruitment poster starring a dark haired woman with glasses and a purple shirt that has \"Got Brains? Got Talent? Not afraid of electric flying monsters that want to suck the soul out of you? Then Xenobiology could use someone like you!\" written on the bottom."
|
||||
listing_name = "Recruitment - Xenobiology"
|
||||
|
||||
/datum/poster/bay_23
|
||||
icon_state="bsposter23"
|
||||
name = "Safety first: because electricity doesn't wait!"
|
||||
desc = "A safety poster starring a clueless looking redhead with frazzled hair. \"Every year, hundreds of NT employees expose themselves to electric shock. Play it safe. Avoid suspicious doors after electrical storms, and always wear protection when doing electric maintenance.\""
|
||||
listing_name = "Safety - Electric Shock"
|
||||
|
||||
/datum/poster/bay_24
|
||||
icon_state="bsposter24"
|
||||
name = "Responsible medbay habits, No #259"
|
||||
desc = "A poster with a nervous looking geneticist on it states; \"Friends Tell Friends They're Clones. It can cause severe and irreparable emotional trauma if a person is not properly informed of their recent demise. Always follow your contractual obligation and inform them of their recent rejuvenation.\""
|
||||
listing_name = "Medical - Clone Disclosure"
|
||||
|
||||
/datum/poster/bay_25
|
||||
icon_state="bsposter25"
|
||||
name = "Irresponsible medbay habits, No #2"
|
||||
desc = "This is a safety poster starring a perverted looking naked doctor. \"Sexual harassment is never okay. REPORT any acts of sexual deviance or harassment that disrupt a healthy working environment.\""
|
||||
listing_name = "Medical - Sexual Harassment"
|
||||
|
||||
/datum/poster/bay_26
|
||||
icon_state="bsposter26"
|
||||
name = "The Men We Knew"
|
||||
desc = "This movie poster depicts a group of soldiers fighting a large mech, the movie seems to be a patriotic war movie."
|
||||
desc = "This movie poster depicts a group of soldiers fighting a large mech, it seems to be some kind of movie set during the Hegemony War."
|
||||
listing_name = "Ad - Men We Knew"
|
||||
|
||||
/datum/poster/bay_27
|
||||
icon_state="bsposter27"
|
||||
name = "Plastic Sheep Can't Scream"
|
||||
desc = "This is a movie poster for an upcoming horror movie, it features an AI in the front of it."
|
||||
desc = "This is a movie poster for an upcoming horror movie, featuring a frightening looking robotic creature."
|
||||
listing_name = "Ad - Plastic Sheep Can't Scream"
|
||||
|
||||
/datum/poster/bay_28
|
||||
icon_state="bsposter28"
|
||||
name = "The Stars Know Love"
|
||||
desc = "This is a movie poster. A bleeding woman is shown drawing a heart in her blood on the window of space ship, it seems to be a romantic Drama."
|
||||
desc = "This is a movie poster. A bleeding woman is shown drawing a heart in her blood on the window of space ship, it seems to be a romantic drama."
|
||||
listing_name = "Ad - The Stars Know Love"
|
||||
|
||||
/datum/poster/bay_29
|
||||
icon_state="bsposter29"
|
||||
name = "Winter Is Coming"
|
||||
desc = "On the poster is a frighteningly large wolf, he warns: \"Only YOU can keep the station from freezing during planetary occultation!\""
|
||||
desc = "On the poster is a frighteningly large wolf, he warns: \"Only YOU can keep yourself from freezing this winter!\". Below is the logo of NanoThreads clothing."
|
||||
listing_name = "Ad - Cold-weather Gear"
|
||||
|
||||
/datum/poster/bay_30
|
||||
icon_state="bsposter30"
|
||||
name = "Ambrosia Vulgaris"
|
||||
desc = "Just looking at this poster makes you feel a little bit dizzy."
|
||||
desc = "It's an ad for getting absolutely shitfaced on psychadelics. Just looking at this poster makes you feel a little bit dizzy. Use responsibly."
|
||||
listing_name = "Ad - Ambrosia Vulgaris"
|
||||
|
||||
/datum/poster/bay_31
|
||||
icon_state="bsposter31"
|
||||
name = "Donut Corp"
|
||||
desc = "This is an advertisement for Donut Corp, the new innovation in donut technology!"
|
||||
name = "Donut Panic"
|
||||
desc = "This is an advertisement for Donut Panic, the bi-monthly periodical for donut lovers galaxy-wide."
|
||||
listing_name = "Ad - Donuts Panic"
|
||||
|
||||
/datum/poster/bay_32
|
||||
icon_state="bsposter32"
|
||||
name = "Eat!"
|
||||
desc = "A poster depicting a hamburger. The poster orders you to consume the hamburger."
|
||||
desc = "A NanoPastures poster depicting a synthmeat hamburger. The poster COMMANDS you to consume the hamburger."
|
||||
listing_name = "Ad - Hamburger"
|
||||
|
||||
/datum/poster/bay_33
|
||||
icon_state="bsposter33"
|
||||
name = "Tools, tools, tools"
|
||||
desc = "You can never have enough tools, thats for sure!"
|
||||
name = "Tools, tools, tools!"
|
||||
desc = "Xion Manufacturing reminds you: Never trust an off-brand tool. "
|
||||
listing_name = "Ad - Xion Tools"
|
||||
|
||||
/datum/poster/bay_34
|
||||
icon_state="bsposter34"
|
||||
name = "Power Up!"
|
||||
desc = "High reward, higher risk!"
|
||||
desc = "NanoTrasen are leaders in Phoron-based supermatter power! High reward, higher risk!"
|
||||
listing_name = "Ad - Phoron Power"
|
||||
|
||||
/datum/poster/bay_35
|
||||
icon_state="bsposter35"
|
||||
name = "Lamarr"
|
||||
desc = "This is a poster depicting the pet and mascot of the science department."
|
||||
name = "Kendrick"
|
||||
desc = "This is a poster depicting the pet and mascot of the science department, and national corporate ambassador for slime-based science solutions.."
|
||||
listing_name = "Ad - Slime Science"
|
||||
|
||||
/datum/poster/bay_36
|
||||
icon_state="bsposter36"
|
||||
name = "Fancy Borg"
|
||||
desc = "A poster depicting a cyborg using the service module. 'Fancy Borg' is written on it."
|
||||
desc = "A poster depicting a cyborg dressed to the nines. An ad for cybernetics enthusiast magazine, Borg Fancy."
|
||||
listing_name = "Ad - Borg Fancy A"
|
||||
|
||||
/datum/poster/bay_37
|
||||
icon_state="bsposter37"
|
||||
name = "Fancier Borg"
|
||||
desc = "A poster depicting a cyborg using the service module. 'Fancy Borg' is written on it. This is even fancier than the first poster."
|
||||
desc = "A poster depicting a cyborg dressed to the nines. An ad for cybernetics enthusiast magazine, Borg Fancy. This is even fancier than the other poster."
|
||||
listing_name = "Ad - Borg Fancy B"
|
||||
|
||||
/datum/poster/bay_38
|
||||
icon_state="bsposter38"
|
||||
name = "Toaster Love"
|
||||
desc = "This is a poster of a toaster containing two slices of bread. The word LOVE is written in big pink letters underneath."
|
||||
desc = "This is a poster of a toaster containing two slices of bread. The word LOVE is written in big pink letters underneath. An ad for a cybernetics 'enthusiast' magazine. "
|
||||
listing_name = "Ad - Toaster Love"
|
||||
|
||||
/datum/poster/bay_39
|
||||
icon_state="bsposter39"
|
||||
name = "Responsible medbay habits, No #91"
|
||||
desc = "A safety poster with a chemist holding a vial. \"Always wear safety gear while handling dangerous chemicals, even if it concerns only small amounts.\""
|
||||
listing_name = "Safety - Chemicals"
|
||||
|
||||
/datum/poster/bay_40
|
||||
icon_state="bsposter40"
|
||||
name = "Agreeable work environment"
|
||||
desc = "This poster depicts a young woman in a stylish dress. \"Try to aim for a pleasant atmosphere in the workspace. A friendly word can do more than forms in triplicate.\""
|
||||
listing_name = "PSA - Agreeable Work Environment"
|
||||
|
||||
/datum/poster/bay_41
|
||||
icon_state="bsposter41"
|
||||
name = "Professional work environment"
|
||||
desc = "A safety poster featuring a green haired woman in a shimmering blue dress. \"As an Internal Affairs Agent, your job is to create a fair and agreeable work environment for the crewmembers, as discreetly and professionally as possible.\""
|
||||
listing_name = "Recruitment - Internal Affairs"
|
||||
|
||||
/datum/poster/bay_42
|
||||
icon_state="bsposter42"
|
||||
name = "Engineering pinup"
|
||||
desc = "This is pin-up poster. A half-naked girl with white hair, toned muscles and stunning blue eyes looks back at you from the poster. Her welding helmet, tattoos and grey jumpsuit hanging around her waist gives a bit of a rugged feel."
|
||||
listing_name = "Pin-up - Engineer"
|
||||
|
||||
/datum/poster/bay_43
|
||||
icon_state="bsposter43"
|
||||
name = "Responsible medbay habits, No #3"
|
||||
desc = "A safety poster with a purple-haired surgeon. She looks a bit cross. \"Let the surgeons do their work. NEVER replace or remove a surgery tool from where the surgeon put it.\""
|
||||
listing_name = "Safety - Surgical Tools"
|
||||
|
||||
/datum/poster/bay_44
|
||||
icon_state="bsposter44"
|
||||
name = "Time for a drink?"
|
||||
desc = "This poster depicts a friendly-looking Tajaran holding a tray of drinks."
|
||||
desc = "This poster for a brand for \"Tajaran-style\" rum produced by Gilthari Exports depicts a friendly-looking Tajaran holding a tray of drinks."
|
||||
listing_name = "Ad - Rarkajar Rum"
|
||||
|
||||
/datum/poster/bay_45
|
||||
icon_state="bsposter45"
|
||||
name = "Responsible engineering habits, No #1"
|
||||
desc = "A safety poster featuring a blue haired engineer. \"When repairing a machine or construction, always aim for long-term solutions.\""
|
||||
listing_name = "Safety - No Shortcut Fixes"
|
||||
|
||||
/datum/poster/bay_46
|
||||
icon_state="bsposter46"
|
||||
name = "Inspirational lawyer"
|
||||
desc = "An inspirational poster depicting a Skrellian lawyer. He seems to be shouting something, while pointing fiercely to the right."
|
||||
desc = "An inspirational poster depicting a Skrellian lawyer. He seems to be shouting something, while pointing fiercely to the right. It's an ad for a NanoTrasen subsidiary law firm."
|
||||
listing_name = "Ad - NanoTrasen Law"
|
||||
|
||||
/datum/poster/bay_47
|
||||
icon_state="bsposter47"
|
||||
name = "Security pinup"
|
||||
desc = "This is a pin-up poster. A dark skinned white haired girl poses in the sunlight wearing a tank top with her stomach exposed. The text on the poster states \"M, Succubus of Security.\" and a lipstick mark stains the top right corner, as if kissed by the model herself."
|
||||
listing_name = "Pin-up - Security"
|
||||
|
||||
/datum/poster/bay_48
|
||||
icon_state="bsposter48"
|
||||
name = "Borg pinup?"
|
||||
desc = "This is a.. pin-up poster? It is a diagram on an old model of cyborg with a note scribbled in marker on the bottom, on the top there is a large XO written in red marker."
|
||||
name = "Remote Drones 4 U"
|
||||
desc = "This is an ad for a fairly basic model of drone produced by Grayson Manufactories Ltd. for use in hazardous environments."
|
||||
listing_name = "Ad - Grayson Drones"
|
||||
|
||||
/datum/poster/bay_49
|
||||
icon_state="bsposter49"
|
||||
name = "Engineering recruitment"
|
||||
desc = "This is a poster showing an engineer relaxing by a computer, the text states \"Living the life! Join Engineering today!\""
|
||||
listing_name = "Recruitment - Engineering"
|
||||
|
||||
/datum/poster/bay_50
|
||||
icon_state="bsposter50"
|
||||
name = "Pinup Girl Cindy Kate"
|
||||
desc = "This particular one is of Cindy Kate, a seductive performer well known among less savoury circles."
|
||||
desc = "This particular one is of Cindy Kate, a seductive virtual performer well known among less savoury exonet circles."
|
||||
listing_name = "Pin-up - Cindi-Kate"
|
||||
|
||||
/datum/poster/bay_51
|
||||
icon_state="bsposter51"
|
||||
name = "space appreciation poster"
|
||||
desc = "This is a poster produced by the Generic Space Company, as a part of a series of commemorative posters on the wonders of space. One of three."
|
||||
name = "space tourism poster"
|
||||
desc = "This is a poster produced by the Visit Space Society. This one is targeted at planet-dwellers, suggesting they generally visit space."
|
||||
listing_name = "Tourism - Space"
|
||||
|
||||
/datum/poster/bay_52
|
||||
icon_state="bsposter52"
|
||||
name = "fire safety poster"
|
||||
desc = "This is a poster reminding you of what you should do if you are on fire, or if you are at a dance party."
|
||||
listing_name = "Safety - Stop Drop and Roll"
|
||||
|
||||
/datum/poster/bay_53
|
||||
icon_state="bsposter53"
|
||||
name = "fire extinguisher poster"
|
||||
desc = "This is a poster reminding you of what you should use to put out a fire."
|
||||
listing_name = "Safety - Fire Extinguishers"
|
||||
|
||||
/datum/poster/bay_54
|
||||
icon_state="bsposter54"
|
||||
name = "firefighter poster"
|
||||
desc = "This is a poster of a particularly stern looking firefighter. The caption reads, \"Only you can prevent space fires.\""
|
||||
listing_name = "Safety - Prevent Fires"
|
||||
|
||||
/datum/poster/bay_55
|
||||
icon_state="bsposter55"
|
||||
name = "Earth appreciation poster"
|
||||
desc = "This is a poster produced by the Generic Space Company, as a part of a series of commemorative posters on the wonders of space. Two of three."
|
||||
name = "Binma tourism poster"
|
||||
desc = "This is a poster produced by the Visit Space Society. This one suggests you visit the exotic garden world of Binma, and try not to get eaten."
|
||||
listing_name = "Tourism - Binma"
|
||||
|
||||
/datum/poster/bay_56
|
||||
icon_state="bsposter56"
|
||||
name = "Mars appreciation poster"
|
||||
desc = "This is a poster produced by the Generic Space Company, as a part of a series of commemorative posters on the wonders of space. Three of three."
|
||||
desc = "This is a poster produced by the Visit Space Society. This one suggests you visit historic Mars. Come for the domes, stay for the monuments to hubris!"
|
||||
|
||||
/datum/poster/bay_57
|
||||
icon_state="bsposter57"
|
||||
name = "space carp warning poster"
|
||||
desc = "This poster tells of the dangers of space carp infestations."
|
||||
listing_name = "Safety - Carp"
|
||||
|
||||
/datum/poster/bay_58
|
||||
icon_state="bsposter58"
|
||||
name = "space carp information poster"
|
||||
desc = "This poster showcases an old spacer saying on the dangers of migrant space carp."
|
||||
desc = "This poster showcases an old spacer saying on the dangers of migrant space carp."
|
||||
listing_name = "Safety - Carp Information"
|
||||
|
||||
|
||||
@@ -2,41 +2,49 @@
|
||||
icon_state="polposter1"
|
||||
name = "Safety!"
|
||||
desc = "A poster advising you to learn how to put on your internals at a moment's notice."
|
||||
listing_name = "Safety - Internals"
|
||||
|
||||
/datum/poster/pol_2
|
||||
icon_state="polposter2"
|
||||
name = "Safety!"
|
||||
desc = "A blue and white colored poster. This one advises you to wear your safety goggles when handling chemicals."
|
||||
listing_name = "Safety - Goggles"
|
||||
|
||||
/datum/poster/pol_3
|
||||
icon_state="polposter3"
|
||||
name = "Safety!"
|
||||
desc = "A safety poster instructing you to comply with the authorities, especially in an emergency."
|
||||
listing_name = "Safety - Follow Instruction"
|
||||
|
||||
/datum/poster/pol_4
|
||||
icon_state="polposter4"
|
||||
name = "Clean Hands Save Lives"
|
||||
desc = "A safety poster reminding you to wash your hands."
|
||||
listing_name = "Safety - Hand Washing"
|
||||
|
||||
/datum/poster/pol_5
|
||||
icon_state="polposter5"
|
||||
name = "Help!"
|
||||
desc = "This poster depicts a man helping another man get up."
|
||||
listing_name = "Safety - Help Others"
|
||||
|
||||
/datum/poster/pol_6
|
||||
icon_state="polposter6"
|
||||
name = "Walk!"
|
||||
desc = "This poster depicts a man walking, presumably to encourage you not to run in the halls."
|
||||
listing_name = "Safety - No Running"
|
||||
|
||||
/datum/poster/pol_7
|
||||
icon_state="polposter7"
|
||||
name = "Place your signs!"
|
||||
desc = "A safety poster reminding custodial staff to place wet floor signs where needed. This reminder's rarely heeded."
|
||||
listing_name = "Safety - Wet Floor Signs"
|
||||
|
||||
/datum/poster/pol_8
|
||||
icon_state="polposter8"
|
||||
name = "Safety!"
|
||||
desc = "An advertisement / safety poster for EVA training and certification. Training is available at your local Central Command."
|
||||
listing_name = "Safety - EVA Training"
|
||||
|
||||
/datum/poster/pol_9
|
||||
icon_state="poster10" //Recycling this icon
|
||||
@@ -44,52 +52,138 @@
|
||||
desc = "This poster appears to be reference material for maintenance personnel, instructing to always wear insulated gloves, that wirecutters and \
|
||||
a multitool are the optimal tools to use, and where to find the maintenance panel on most airlocks. Unfortunately, the poster does not mention any \
|
||||
wire codes."
|
||||
listing_name = "Safety - Airlock Maintenance"
|
||||
|
||||
/datum/poster/pol_10
|
||||
icon_state="polposter9"
|
||||
name = "orchid"
|
||||
desc = "This poster appears strangely familiar, depicting the flower of a tree native to the planet Earth."
|
||||
listing_name = "General - Orchid"
|
||||
|
||||
// A new subset of poster datum for Security posters.
|
||||
/datum/poster/pol_11
|
||||
icon_state="polposter10"
|
||||
name = "firefighter pinup"
|
||||
desc = "A buff firefighter with his shirt off. Maybe he's trying to raise awareness about fire safety, but you're a little distracted."
|
||||
listing_name = "Pin-up - Firefighter"
|
||||
|
||||
/datum/poster/pol_12
|
||||
icon_state="polposter11"
|
||||
name = "CHUCK"
|
||||
desc = "With the budget Cyber Solutions 'Chuck' model work drone, your days of menial labour are numbered! \"With Cyber Solutions, there's always someone beside you, helping you. You know their face. You know my face.\""
|
||||
listing_name = "Ad - Chuck"
|
||||
|
||||
/datum/poster/pol_13
|
||||
icon_state="polposter12"
|
||||
name = "New You"
|
||||
desc = "An ad for Kaleidoscope Cosmetics. \"The common factor in all your failed relationships is you. Fix it with affordable gene therapy!\""
|
||||
listing_name = "Ad - Kaleidoscope"
|
||||
|
||||
/datum/poster/pol_14
|
||||
icon_state="polposter13"
|
||||
name = "Take a Taxi"
|
||||
desc = "An ad for the Major Bill's Transportation drone-operated taxi service operating in most major cities throughout Solar space."
|
||||
listing_name = "Ad - Taxi"
|
||||
|
||||
/datum/poster/pol_15
|
||||
icon_state="polposter14"
|
||||
name = "Adopt A Teshpet"
|
||||
desc = "An ad for definitively racist virtual pet game, Teshpets."
|
||||
listing_name = "Ad - Teshpets"
|
||||
|
||||
/datum/poster/pol_16
|
||||
icon_state="polposter15"
|
||||
name = "Train and Fight"
|
||||
desc = "This poster of sweaty, near-naked wrestlers is the most masculine thing you've ever seen. You can barely tell where one man ends and the other begins. Always seek manliness!"
|
||||
listing_name = "Pinup - Wrestling"
|
||||
|
||||
/datum/poster/nt_3
|
||||
icon_state = "ntposter03"
|
||||
name = "Mechatronic Safety"
|
||||
desc = "This poster displays three cutting-edge gygaxes standing in line in front of a man in plain clothes.\
|
||||
The poster's captions explain the importance of knowing how to operate a mechatronic vehicle safely, especially near other personnel.\
|
||||
The image seems important."
|
||||
listing_name = "Safety - Mech Operation"
|
||||
|
||||
/datum/poster/nt_4
|
||||
icon_state = "ntposter04"
|
||||
name = "Beware Aetotheans"
|
||||
desc = "This poster displays a distinctly hostile-looking red Promethean in a black coat. The fine-print around the edges warns the reader about the dangers posed by Almachi Prometheans."
|
||||
listing_name = "Safety - Aetothean Danger"
|
||||
|
||||
/datum/poster/nt_5
|
||||
icon_state = "ntposter05"
|
||||
name = "Promethean"
|
||||
desc = "This poster displays a friendly-looking green Promethean in a labcoat. The fine-print around the edges talks about the benefits Prometheans give in laboratories."
|
||||
listing_name = "Safety - Prometheans"
|
||||
|
||||
/datum/poster/nt_6
|
||||
icon_state = "ntposter06"
|
||||
name = "NanoTrasen"
|
||||
desc = "This poster showcases an NT emblem. There is writing in the ring around the inner points, probably some sort of slogan no one bothers to memorize."
|
||||
listing_name = "Ad - NanoTrasen"
|
||||
|
||||
/datum/poster/nt_7
|
||||
icon_state = "ntposter07"
|
||||
name = "SolGov"
|
||||
desc = "This poster showcases an SCG emblem. The outer ring reads,\
|
||||
\"<font face='times new roman ms'>NIL MORTALIBUS ARDUI EST</font>\".\
|
||||
Solar Confederate Government."
|
||||
listing_name = "Political - SolGov"
|
||||
|
||||
/datum/poster/nt_8
|
||||
icon_state = "ntposter08"
|
||||
name = "wildlife hazard"
|
||||
desc = "This SifGov poster warns against attempting to kill a fully grown giant spider or other hostile life-form alone."
|
||||
listing_name = "Safety - Spiders"
|
||||
|
||||
// A new subset of poster datum for ONLY 'Internal' NanoTrasen posters, given to Security.
|
||||
/datum/poster/nanotrasen
|
||||
icon_state = "polposter1"
|
||||
name = "Safety!"
|
||||
desc = "A poster advising you to learn how to put on your internals at a moment's notice."
|
||||
listing_name = "Safety - Internals"
|
||||
|
||||
/datum/poster/nanotrasen/pol_2
|
||||
icon_state="polposter2"
|
||||
name = "Safety!"
|
||||
desc = "A blue and white colored poster. This one advises you to wear your safety goggles when handling chemicals."
|
||||
listing_name = "Safety - Goggles"
|
||||
|
||||
/datum/poster/nanotrasen/pol_3
|
||||
icon_state="polposter3"
|
||||
name = "Safety!"
|
||||
desc = "A safety poster instructing you to comply with the authorities, especially in an emergency."
|
||||
listing_name = "Safety - Follow Instruction"
|
||||
|
||||
/datum/poster/nanotrasen/pol_4
|
||||
icon_state="polposter4"
|
||||
name = "Clean Hands Save Lives"
|
||||
desc = "A safety poster reminding you to wash your hands."
|
||||
listing_name = "Safety - Hand Washing"
|
||||
|
||||
/datum/poster/nanotrasen/pol_5
|
||||
icon_state="polposter5"
|
||||
name = "Help!"
|
||||
desc = "This poster depicts a man helping another man get up."
|
||||
listing_name = "Safety - Help Others"
|
||||
|
||||
/datum/poster/nanotrasen/pol_6
|
||||
icon_state="polposter6"
|
||||
name = "Walk!"
|
||||
desc = "This poster depicts a man walking, presumably to encourage you not to run in the halls."
|
||||
listing_name = "Safety - No Running"
|
||||
|
||||
/datum/poster/nanotrasen/pol_7
|
||||
icon_state="polposter7"
|
||||
name = "Place your signs!"
|
||||
desc = "A safety poster reminding custodial staff to place wet floor signs where needed. This reminder's rarely heeded."
|
||||
listing_name = "Safety - Wet Floor Signs"
|
||||
|
||||
/datum/poster/nanotrasen/pol_8
|
||||
icon_state="polposter8"
|
||||
name = "Safety!"
|
||||
desc = "An advertisement / safety poster for EVA training and certification. Training is available at your local Central Command."
|
||||
listing_name = "Safety - EVA Training"
|
||||
|
||||
/datum/poster/nanotrasen/pol_9
|
||||
icon_state="poster10"
|
||||
@@ -97,81 +191,97 @@
|
||||
desc = "This poster appears to be reference material for maintenance personnel, instructing to always wear insulated gloves, that wirecutters and \
|
||||
a multitool are the optimal tools to use, and where to find the maintenance panel on most airlocks. Unfortunately, the poster does not mention any \
|
||||
wire codes."
|
||||
listing_name = "Safety - Airlock Maintenance"
|
||||
|
||||
/datum/poster/nanotrasen/pol_10
|
||||
icon_state="polposter9"
|
||||
name = "orchid"
|
||||
desc = "This poster suggests a feeling of peace. It depicts the flower of a tree native to the planet Earth."
|
||||
listing_name = "General - Orchid"
|
||||
|
||||
/datum/poster/nanotrasen/bay_9
|
||||
icon_state="bsposter9"
|
||||
name = "Pinup Girl Amy"
|
||||
desc = "This particular one is of Amy, the nymphomaniac urban legend of deep space. How this photograph came to be is not known."
|
||||
listing_name = "Pin-up - Amy"
|
||||
|
||||
/datum/poster/nanotrasen/bay_21
|
||||
icon_state="bsposter21"
|
||||
name = "Join the Fuzz!"
|
||||
desc = "It's a nice recruitment poster of a white haired Chinese woman that says; \"Big Guns, Hot Women, Good Times. Security. We get it done.\""
|
||||
listing_name = "Recruitment - NanoTrasen Security - Pinup"
|
||||
|
||||
/datum/poster/nanotrasen/bay_22
|
||||
icon_state="bsposter22"
|
||||
name = "Looking for a career with excitement?"
|
||||
desc = "A recruitment poster starring a dark haired woman with glasses and a purple shirt that has \"Got Brains? Got Talent? Not afraid of electric flying monsters that want to suck the soul out of you? Then Xenobiology could use someone like you!\" written on the bottom."
|
||||
listing_name = "Recruitment - Xenobiology"
|
||||
|
||||
/datum/poster/nanotrasen/bay_23
|
||||
icon_state="bsposter23"
|
||||
name = "Safety first: because electricity doesn't wait!"
|
||||
desc = "A safety poster starring a clueless looking redhead with frazzled hair. \"Every year, hundreds of NT employees expose themselves to electric shock. Play it safe. Avoid suspicious doors after electrical storms, and always wear protection when doing electric maintenance.\""
|
||||
listing_name = "Safety - Electric Shock"
|
||||
|
||||
/datum/poster/nanotrasen/bay_24
|
||||
icon_state="bsposter24"
|
||||
name = "Responsible medbay habits, No #259"
|
||||
desc = "A poster with a nervous looking geneticist on it states; \"Friends Tell Friends They're Clones. It can cause severe and irreparable emotional trauma if a person is not properly informed of their recent demise. Always follow your contractual obligation and inform them of their recent rejuvenation.\""
|
||||
listing_name = "Medical - Clone Disclosure"
|
||||
|
||||
/datum/poster/nanotrasen/bay_25
|
||||
icon_state="bsposter25"
|
||||
name = "Irresponsible medbay habits, No #2"
|
||||
desc = "This is a safety poster starring a perverted looking naked doctor. \"Sexual harassment is never okay. REPORT any acts of sexual deviance or harassment that disrupt a healthy working environment.\""
|
||||
listing_name = "Medical - Sexual Harassment"
|
||||
|
||||
/datum/poster/nanotrasen/bay_49
|
||||
icon_state="bsposter49"
|
||||
name = "Engineering recruitment"
|
||||
desc = "This is a poster showing an engineer relaxing by a computer, the text states \"Living the life! Join Engineering today!\""
|
||||
listing_name = "Recruitment - Engineering"
|
||||
|
||||
/datum/poster/nanotrasen/bay_52
|
||||
icon_state="bsposter52"
|
||||
name = "fire safety poster"
|
||||
desc = "This is a poster reminding you of what you should do if you are on fire, or if you are at a dance party."
|
||||
listing_name = "Safety - Stop Drop And Roll"
|
||||
|
||||
/datum/poster/nanotrasen/bay_53
|
||||
icon_state="bsposter53"
|
||||
name = "fire extinguisher poster"
|
||||
desc = "This is a poster reminding you of what you should use to put out a fire."
|
||||
listing_name = "Safety - Extinguishers"
|
||||
|
||||
/datum/poster/nanotrasen/bay_54
|
||||
icon_state="bsposter54"
|
||||
name = "firefighter poster"
|
||||
desc = "This is a poster of a particularly stern looking firefighter. The caption reads, \"Only you can prevent space fires.\""
|
||||
listing_name = "Safety - Prevent Fires"
|
||||
|
||||
/datum/poster/nanotrasen/bay_57
|
||||
icon_state="bsposter57"
|
||||
name = "space carp warning poster"
|
||||
desc = "This poster tells of the dangers of space carp infestations."
|
||||
listing_name = "Safety - Carp"
|
||||
|
||||
/datum/poster/nanotrasen/bay_58
|
||||
icon_state="bsposter58"
|
||||
name = "space carp information poster"
|
||||
desc = "This poster showcases an old spacer saying on the dangers of migrant space carp."
|
||||
listing_name = "Safety - Carp Information"
|
||||
|
||||
/datum/poster/nanotrasen/nt_1
|
||||
icon_state = "ntposter01"
|
||||
name = "Security recruitment"
|
||||
desc = "This poster showcases an NT security guard in an excited pose, with a small blurb about the importance of Security."
|
||||
listing_name = "Recruitment - NanoTrasen Security - Importance"
|
||||
|
||||
/datum/poster/nanotrasen/nt_2
|
||||
icon_state = "ntposter02"
|
||||
name = "Security recruitment"
|
||||
desc = "This poster showcases an NT security guard in an excited pose, with a small blurb about Security Employee benefits."
|
||||
listing_name = "Recruitment - NanoTrasen Security - Benefits"
|
||||
|
||||
/datum/poster/nanotrasen/nt_3
|
||||
icon_state = "ntposter03"
|
||||
@@ -179,6 +289,7 @@
|
||||
desc = "This poster displays three cutting-edge gygaxes standing in line in front of a man in plain clothes.\
|
||||
The poster's captions explain the importance of knowing how to operate a mechatronic vehicle safely, especially near other personnel.\
|
||||
The image seems important."
|
||||
listing_name = "Safety - Mech Operation"
|
||||
|
||||
//VOREStation Removal Start TFF 17/12/19 - lore not used in our station's own lore.
|
||||
/*
|
||||
@@ -186,6 +297,7 @@
|
||||
icon_state = "ntposter04"
|
||||
name = "Beware Aetotheans"
|
||||
desc = "This poster displays a distinctly hostile-looking red Promethean in a black coat. The fine-print around the edges warns the reader about the dangers posed by Almachi Prometheans."
|
||||
listing_name = "Safety - Aetothean Danger"
|
||||
*/
|
||||
//VOREstation Removal End
|
||||
|
||||
@@ -193,11 +305,13 @@
|
||||
icon_state = "ntposter05"
|
||||
name = "Promethean"
|
||||
desc = "This poster displays a friendly-looking green Promethean in a labcoat. The fine-print around the edges talks about the benefits Prometheans give in laboratories."
|
||||
listing_name = "Safety - Prometheans"
|
||||
|
||||
/datum/poster/nanotrasen/nt_6
|
||||
icon_state = "ntposter06"
|
||||
name = "NanoTrasen"
|
||||
desc = "This poster showcases an NT emblem. There is writing in the ring around the inner points, probably some sort of slogan no one bothers to memorize."
|
||||
listing_name = "Ad - NanoTrasen"
|
||||
|
||||
/datum/poster/nanotrasen/nt_7
|
||||
icon_state = "ntposter07"
|
||||
@@ -205,13 +319,16 @@
|
||||
desc = "This poster showcases an SCG emblem. The outer ring reads,\
|
||||
\"<font face='times new roman ms'>NIL MORTALIBUS ARDUI EST</font>\".\
|
||||
Solar Confederate Government."
|
||||
listing_name = "Political - SolGov"
|
||||
|
||||
/datum/poster/nanotrasen/nt_8
|
||||
icon_state = "ntposter08"
|
||||
name = "wildlife hazard"
|
||||
desc = "This poster warns against attempting to kill a fully grown giant spider or other hostile life-form alone."
|
||||
listing_name = "Safety - Spiders"
|
||||
|
||||
/datum/poster/nanotrasen/nt_9
|
||||
icon_state = "ntposter09"
|
||||
name = "Regulations and You"
|
||||
desc = "This poster showcases an NT security guard reading from her PDA. The blurb advocates for the reader to keep corporate regulations in mind at all times, as an emergency can occur at any time."
|
||||
desc = "This SifGov poster showcases an NT security guard reading from her PDA. The blurb advocates for the reader to keep corporate regulations in mind at all times, as an emergency can occur at any time."
|
||||
listing_name = "Safety - Corporate Regulations"
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
/obj/effect/decal/warning_stripes
|
||||
icon = 'icons/effects/warning_stripes.dmi'
|
||||
|
||||
/obj/effect/decal/warning_stripes/New()
|
||||
/obj/effect/decal/warning_stripes/Initialize()
|
||||
. = ..()
|
||||
var/turf/T=get_turf(src)
|
||||
var/image/I=image(icon, icon_state = icon_state, dir = dir)
|
||||
I.color=color
|
||||
T.overlays += I
|
||||
qdel(src)
|
||||
return INITIALIZE_HINT_QDEL
|
||||
|
||||
@@ -33,6 +33,9 @@ would spawn and follow the beaker, even if it is carried or thrown.
|
||||
|
||||
proc/start()
|
||||
|
||||
Destroy()
|
||||
holder = null
|
||||
return ..()
|
||||
|
||||
/////////////////////////////////////////////
|
||||
// GENERIC STEAM SPREAD SYSTEM
|
||||
|
||||
@@ -7,29 +7,72 @@
|
||||
icon_state = "uglymine"
|
||||
var/triggered = 0
|
||||
var/smoke_strength = 3
|
||||
var/mineitemtype = /obj/item/weapon/mine
|
||||
var/obj/item/weapon/mine/mineitemtype = /obj/item/weapon/mine
|
||||
var/panel_open = 0
|
||||
var/datum/wires/mines/wires = null
|
||||
register_as_dangerous_object = TRUE
|
||||
var/camo_net = FALSE // Will the mine 'cloak' on deployment?
|
||||
|
||||
/obj/effect/mine/New()
|
||||
// The trap item will be triggered in some manner when detonating. Default only checks for grenades.
|
||||
var/obj/item/trap = null
|
||||
|
||||
/obj/effect/mine/Initialize()
|
||||
icon_state = "uglyminearmed"
|
||||
wires = new(src)
|
||||
. = ..()
|
||||
if(ispath(trap))
|
||||
trap = new trap(src)
|
||||
register_dangerous_to_step()
|
||||
if(camo_net)
|
||||
alpha = 50
|
||||
|
||||
/obj/effect/mine/Destroy()
|
||||
unregister_dangerous_to_step()
|
||||
if(trap)
|
||||
QDEL_NULL(trap)
|
||||
qdel_null(wires)
|
||||
return ..()
|
||||
|
||||
/obj/effect/mine/Moved(atom/oldloc)
|
||||
. = ..()
|
||||
if(.)
|
||||
var/turf/old_turf = get_turf(oldloc)
|
||||
var/turf/new_turf = get_turf(src)
|
||||
if(old_turf != new_turf)
|
||||
old_turf.unregister_dangerous_object(src)
|
||||
new_turf.register_dangerous_object(src)
|
||||
|
||||
/obj/effect/mine/proc/explode(var/mob/living/M)
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread()
|
||||
triggered = 1
|
||||
s.set_up(3, 1, src)
|
||||
s.start()
|
||||
explosion(loc, 0, 2, 3, 4) //land mines are dangerous, folks.
|
||||
visible_message("\The [src.name] detonates!")
|
||||
|
||||
if(trap)
|
||||
trigger_trap(M)
|
||||
visible_message("\The [src.name] flashes as it is triggered!")
|
||||
|
||||
else
|
||||
explosion(loc, 0, 2, 3, 4) //land mines are dangerous, folks.
|
||||
visible_message("\The [src.name] detonates!")
|
||||
|
||||
qdel(s)
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/mine/proc/trigger_trap(var/mob/living/victim)
|
||||
if(istype(trap, /obj/item/weapon/grenade))
|
||||
var/obj/item/weapon/grenade/G = trap
|
||||
trap = null
|
||||
G.forceMove(get_turf(src))
|
||||
if(victim.ckey)
|
||||
msg_admin_attack("[key_name_admin(victim)] stepped on \a [src.name], triggering [trap]")
|
||||
G.activate()
|
||||
|
||||
if(istype(trap, /obj/item/device/transfer_valve))
|
||||
var/obj/item/device/transfer_valve/TV = trap
|
||||
trap = null
|
||||
TV.forceMove(get_turf(src))
|
||||
TV.toggle_valve()
|
||||
|
||||
/obj/effect/mine/bullet_act()
|
||||
if(prob(50))
|
||||
explode()
|
||||
@@ -63,6 +106,9 @@
|
||||
"<span class='notice'>You very carefully screw the mine's panel [panel_open ? "open" : "closed"].</span>")
|
||||
playsound(src, W.usesound, 50, 1)
|
||||
|
||||
// Panel open, stay uncloaked, or uncloak if already cloaked. If you don't cloak on place, ignore it and just be normal alpha.
|
||||
alpha = camo_net ? (panel_open ? 255 : 50) : 255
|
||||
|
||||
else if((W.is_wirecutter() || istype(W, /obj/item/device/multitool)) && panel_open)
|
||||
interact(user)
|
||||
else
|
||||
@@ -74,6 +120,9 @@
|
||||
user.set_machine(src)
|
||||
wires.Interact(user)
|
||||
|
||||
/obj/effect/mine/camo
|
||||
camo_net = TRUE
|
||||
|
||||
/obj/effect/mine/dnascramble
|
||||
mineitemtype = /obj/item/weapon/mine/dnascramble
|
||||
|
||||
@@ -193,6 +242,9 @@
|
||||
spawn(0)
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/mine/emp/camo
|
||||
camo_net = TRUE
|
||||
|
||||
/obj/effect/mine/incendiary
|
||||
mineitemtype = /obj/item/weapon/mine/incendiary
|
||||
|
||||
@@ -208,6 +260,26 @@
|
||||
spawn(0)
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/mine/gadget
|
||||
mineitemtype = /obj/item/weapon/mine/gadget
|
||||
|
||||
/obj/effect/mine/gadget/explode(var/mob/living/M)
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread()
|
||||
triggered = 1
|
||||
s.set_up(3, 1, src)
|
||||
s.start()
|
||||
|
||||
if(trap)
|
||||
trigger_trap(M)
|
||||
visible_message("\The [src.name] flashes as it is triggered!")
|
||||
|
||||
else
|
||||
explosion(loc, 0, 0, 2, 2)
|
||||
visible_message("\The [src.name] detonates!")
|
||||
|
||||
qdel(s)
|
||||
qdel(src)
|
||||
|
||||
/////////////////////////////////////////////
|
||||
// The held item version of the above mines
|
||||
/////////////////////////////////////////////
|
||||
@@ -219,6 +291,10 @@
|
||||
var/countdown = 10
|
||||
var/minetype = /obj/effect/mine //This MUST be an /obj/effect/mine type, or it'll runtime.
|
||||
|
||||
var/obj/item/trap = null
|
||||
|
||||
var/list/allowed_gadgets = null
|
||||
|
||||
/obj/item/weapon/mine/attack_self(mob/user as mob) // You do not want to move or throw a land mine while priming it... Explosives + Sudden Movement = Bad Times
|
||||
add_fingerprint(user)
|
||||
msg_admin_attack("[key_name_admin(user)] primed \a [src]")
|
||||
@@ -231,11 +307,39 @@
|
||||
prime(user, TRUE)
|
||||
return
|
||||
|
||||
/obj/item/weapon/mine/attackby(obj/item/W as obj, mob/living/user as mob)
|
||||
if(W.is_screwdriver() && trap)
|
||||
to_chat(user, "<span class='notice'>You begin removing \the [trap].</span>")
|
||||
if(do_after(user, 10 SECONDS))
|
||||
to_chat(user, "<span class='notice'>You finish disconnecting the mine's trigger.</span>")
|
||||
trap.forceMove(get_turf(src))
|
||||
trap = null
|
||||
return
|
||||
|
||||
if(LAZYLEN(allowed_gadgets) && !trap)
|
||||
var/allowed = FALSE
|
||||
|
||||
for(var/path in allowed_gadgets)
|
||||
if(istype(W, path))
|
||||
allowed = TRUE
|
||||
break
|
||||
|
||||
if(allowed)
|
||||
user.drop_from_inventory(W)
|
||||
W.forceMove(src)
|
||||
trap = W
|
||||
|
||||
..()
|
||||
|
||||
/obj/item/weapon/mine/proc/prime(mob/user as mob, var/explode_now = FALSE)
|
||||
visible_message("\The [src.name] beeps as the priming sequence completes.")
|
||||
var/obj/effect/mine/R = new minetype(get_turf(src))
|
||||
src.transfer_fingerprints_to(R)
|
||||
R.add_fingerprint(user)
|
||||
if(trap)
|
||||
R.trap = trap
|
||||
trap = null
|
||||
R.trap.forceMove(R)
|
||||
if(explode_now)
|
||||
R.explode(user)
|
||||
spawn(0)
|
||||
@@ -286,8 +390,14 @@
|
||||
desc = "A small explosive mine with a fire symbol on the side."
|
||||
minetype = /obj/effect/mine/incendiary
|
||||
|
||||
/obj/item/weapon/mine/gadget
|
||||
name = "gadget mine"
|
||||
desc = "A small pressure-triggered device. If no component is added, the internal release bolts will detonate in unison when triggered."
|
||||
|
||||
allowed_gadgets = list(/obj/item/weapon/grenade, /obj/item/device/transfer_valve)
|
||||
|
||||
// This tells AI mobs to not be dumb and step on mines willingly.
|
||||
/obj/item/weapon/mine/is_safe_to_step(mob/living/L)
|
||||
if(!L.hovering)
|
||||
return FALSE
|
||||
return ..()
|
||||
return ..()
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
..()
|
||||
|
||||
/obj/effect/temporary_effect/eruption/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
flick("[icon_state]_create",src)
|
||||
|
||||
/obj/effect/temporary_effect/eruption/Destroy()
|
||||
|
||||
@@ -159,7 +159,6 @@
|
||||
|
||||
/obj/effect/spawner/newbomb/Initialize(newloc)
|
||||
..(newloc)
|
||||
|
||||
var/obj/item/device/transfer_valve/V = new(src.loc)
|
||||
var/obj/item/weapon/tank/phoron/PT = new(V)
|
||||
var/obj/item/weapon/tank/oxygen/OT = new(V)
|
||||
@@ -183,19 +182,14 @@
|
||||
OT.air_contents.temperature = PHORON_MINIMUM_BURN_TEMPERATURE+1
|
||||
OT.air_contents.update_values()
|
||||
|
||||
|
||||
var/obj/item/device/assembly/S = new assembly_type(V)
|
||||
|
||||
|
||||
V.attached_device = S
|
||||
|
||||
S.holder = V
|
||||
S.toggle_secure()
|
||||
|
||||
V.update_icon()
|
||||
|
||||
qdel(src)
|
||||
|
||||
return INITIALIZE_HINT_QDEL
|
||||
|
||||
|
||||
///////////////////////
|
||||
|
||||
@@ -610,9 +610,6 @@ var/list/global/slot_flags_enumeration = list(
|
||||
. = ..()
|
||||
if(blood_overlay)
|
||||
overlays.Remove(blood_overlay)
|
||||
if(istype(src, /obj/item/clothing/gloves))
|
||||
var/obj/item/clothing/gloves/G = src
|
||||
G.transfer_blood = 0
|
||||
|
||||
/obj/item/reveal_blood()
|
||||
if(was_bloodied && !fluorescent)
|
||||
|
||||
@@ -1,3 +1,103 @@
|
||||
// Etc UI-only vars
|
||||
/obj/item/device/communicator
|
||||
// Stuff for moving cameras
|
||||
var/turf/last_camera_turf
|
||||
// Stuff needed to render the map
|
||||
var/map_name
|
||||
var/obj/screen/map_view/cam_screen
|
||||
var/list/cam_plane_masters
|
||||
var/obj/screen/background/cam_background
|
||||
var/obj/screen/skybox/local_skybox
|
||||
|
||||
// Proc: setup_tgui_camera()
|
||||
// Parameters: None
|
||||
// Description: This sets up all of the variables above to handle in-UI map windows.
|
||||
/obj/item/device/communicator/proc/setup_tgui_camera()
|
||||
map_name = "communicator_[REF(src)]_map"
|
||||
|
||||
// Initialize map objects
|
||||
cam_screen = new
|
||||
cam_screen.name = "screen"
|
||||
cam_screen.assigned_map = map_name
|
||||
cam_screen.del_on_map_removal = FALSE
|
||||
cam_screen.screen_loc = "[map_name]:1,1"
|
||||
|
||||
cam_plane_masters = get_tgui_plane_masters()
|
||||
|
||||
for(var/plane in cam_plane_masters)
|
||||
var/obj/screen/instance = plane
|
||||
instance.assigned_map = map_name
|
||||
instance.del_on_map_removal = FALSE
|
||||
instance.screen_loc = "[map_name]:CENTER"
|
||||
|
||||
local_skybox = new()
|
||||
local_skybox.assigned_map = map_name
|
||||
local_skybox.del_on_map_removal = FALSE
|
||||
local_skybox.screen_loc = "[map_name]:CENTER,CENTER"
|
||||
cam_plane_masters += local_skybox
|
||||
|
||||
cam_background = new
|
||||
cam_background.assigned_map = map_name
|
||||
cam_background.del_on_map_removal = FALSE
|
||||
|
||||
// Proc: update_active_camera_screen()
|
||||
// Parameters: None
|
||||
// Description: This refreshes the camera location
|
||||
/obj/item/device/communicator/proc/update_active_camera_screen()
|
||||
if(!video_source?.can_use())
|
||||
show_static()
|
||||
return
|
||||
|
||||
var/newturf = get_turf(video_source)
|
||||
if(!is_on_same_plane_or_station(get_z(newturf), get_z(src)))
|
||||
show_static()
|
||||
return
|
||||
|
||||
var/obj/item/device/communicator/communicator = video_source.loc
|
||||
if(istype(communicator))
|
||||
if(communicator.selfie_mode)
|
||||
var/mob/target = get(communicator, /mob)
|
||||
if(istype(target))
|
||||
cam_screen.vis_contents = list(target)
|
||||
else
|
||||
cam_screen.vis_contents = list(communicator)
|
||||
cam_background.fill_rect(1, 1, 1, 1)
|
||||
cam_background.icon_state = "clear"
|
||||
local_skybox.cut_overlays()
|
||||
return
|
||||
|
||||
// If we're not forcing an update for some reason and the cameras are in the same location,
|
||||
// we don't need to update anything.
|
||||
if(last_camera_turf == newturf)
|
||||
return
|
||||
|
||||
// We get a new turf in case they've moved in the last half decisecond (it's BYOND, it might happen)
|
||||
last_camera_turf = get_turf(video_source)
|
||||
|
||||
if(!is_on_same_plane_or_station(get_z(last_camera_turf), get_z(src)))
|
||||
show_static()
|
||||
return
|
||||
|
||||
var/list/visible_turfs = list()
|
||||
var/list/visible_things = view(video_range, last_camera_turf)
|
||||
for(var/turf/visible_turf in visible_things)
|
||||
visible_turfs += visible_turf
|
||||
|
||||
cam_screen.vis_contents = visible_turfs
|
||||
cam_background.icon_state = "clear"
|
||||
cam_background.fill_rect(1, 1, (video_range * 2), (video_range * 2))
|
||||
|
||||
local_skybox.cut_overlays()
|
||||
local_skybox.add_overlay(SSskybox.get_skybox(get_z(last_camera_turf)))
|
||||
local_skybox.scale_to_view(video_range * 2)
|
||||
local_skybox.set_position("CENTER", "CENTER", (world.maxx>>1) - last_camera_turf.x, (world.maxy>>1) - last_camera_turf.y)
|
||||
|
||||
/obj/item/device/communicator/proc/show_static()
|
||||
cam_screen.vis_contents.Cut()
|
||||
cam_background.icon_state = "scanline2"
|
||||
cam_background.fill_rect(1, 1, (video_range * 2), (video_range * 2))
|
||||
local_skybox.cut_overlays()
|
||||
|
||||
// Proc: tgui_state()
|
||||
// Parameters: User
|
||||
// Description: This tells TGUI to only allow us to be interacted with while in a mob inventory.
|
||||
@@ -9,7 +109,15 @@
|
||||
// Description: This proc handles opening the UI. It's basically just a standard stub.
|
||||
/obj/item/device/communicator/tgui_interact(mob/user, datum/tgui/ui, datum/tgui/parent_ui, datum/tgui_state/custom_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui)
|
||||
// Update the camera every SStgui tick in case it moves
|
||||
update_active_camera_screen()
|
||||
if(!ui)
|
||||
// Register map objects
|
||||
user.client.register_map_obj(cam_screen)
|
||||
for(var/plane in cam_plane_masters)
|
||||
user.client.register_map_obj(plane)
|
||||
user.client.register_map_obj(cam_background)
|
||||
// Setup UI
|
||||
ui = new(user, src, "Communicator", name)
|
||||
if(custom_state)
|
||||
ui.set_state(custom_state)
|
||||
@@ -188,6 +296,7 @@
|
||||
data["target_feed"] = data["feeds"][newsfeed_channel]
|
||||
else
|
||||
data["target_feed"] = null
|
||||
data["selfie_mode"] = selfie_mode
|
||||
|
||||
return data
|
||||
|
||||
@@ -200,6 +309,7 @@
|
||||
if(data_core)
|
||||
data_core.get_manifest_list()
|
||||
data["manifest"] = PDA_Manifest
|
||||
data["mapRef"] = map_name
|
||||
return data
|
||||
|
||||
// Proc: tgui-act()
|
||||
@@ -231,6 +341,9 @@
|
||||
if("toggle_ringer")
|
||||
ringer = !ringer
|
||||
|
||||
if("selfie_mode")
|
||||
selfie_mode = !selfie_mode
|
||||
|
||||
if("add_hex")
|
||||
var/hex = params["add_hex"]
|
||||
add_to_EPv2(hex)
|
||||
@@ -324,3 +437,4 @@
|
||||
if("newsfeed")
|
||||
newsfeed_channel = text2num(params["newsfeed"])
|
||||
|
||||
#undef DEFAULT_MAP_SIZE
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user