[MDB IGNORE] [PRE-ALPHA] MiniStation (#22568)
* Create MiniStation new.dmm * ministation * Update MiniStation.dmm * Update MiniStation.dmm * Update MiniStation.dmm * ministayion * Update MiniStation.dmm * Update MiniStation.dmm * Update MiniStation.dmm * actual changes oops * Update MiniStation.dmm * Update MiniStation.dmm * miniaturestation * Update maps.txt * more fixes * fixes broken path * more fixes * Update MiniStation.dmm * Update MiniStation.dmm * filters * robotics changes * fixes pipes * Update MiniStation.dmm * Update MiniStation.dmm * Update MiniStation.dmm * spawns + job overrides * Update MiniStation.dmm * Update MiniStation.dmm * Update MiniStation.dmm * Update MiniStation.dmm * more work * Update MiniStation.dmm * misc stuff * maint stuff * uopdates * fixes bad area and chair * tool storage + fixes * mining APC * cargo + hooks up some disposals * more disposals + launcher * lights * more fixes * Update MiniStation.dmm * Update MiniStation.dmm * more fixes * sink * remove sign * expand janitor room * Update MiniStation.dmm * ai stuff + more firealarms * meeting room, etc * fixes wire * Update MiniStation.dmm * fixes * Update MiniStation.dmm * yep! * atmos area * fixes some map errors * bookbinder * robo shutters * stair and chem fix * fixes bad decals * honesly no clue what's different * disposals + pets * Update MiniStation.dmm * asteroid area * more fixes * medbay mixup * choom button * wire toxin room to grid * remove this * more fixes * Update ai_whale.dmm * more cameras * Update networking_machines.dm * update freezer * Update MiniStation.dmm * Update MiniStation.dmm * Update MiniStation.dmm * new service * hawk + tuah + backrooms * special charters * remove that lol * move him a little * Update MiniStation.dmm * yeah * Update MiniStation.dmm * psych office + more fixes + robo stuff * thermomachines * Update MiniStation.dmm * maints + APCs * all this stuff * cameras * air alarms * RD office and the like * Update MiniStation.dmm * fixes these * glass floors * Update MiniStation.dmm * more firelocks * Update MiniStation.dmm * Update MiniStation.dmm * Update MiniStation.dmm * Update MiniStation.dmm * Update MiniStation.dmm * extra pipe moment * Update MiniStation.dmm * looking up and down/fixes * neat * wire * Update MiniStation.dmm * fixes some issues * asdad * better SM stuff * amon gus * fixing falling * Update MiniStation.dmm * Update MiniStation.dmm * fixes this * fixes * Update MiniStation.dmm * remove stairs * Update MiniStation.dmm * Update MiniStation.dmm * Update MiniStation.dmm * fixes some ai stuff * Update MiniStation.dmm * adds some missing bells * maint * more maint stuff * ai upload and goodbye meeting room * fixes multiz pda stuff * fixes locker * ministation fixes * requested changes * shadows * removes shadows * adds medhuds * no smoking * move up/down * correct medhuds * brig stuff * cameras * fixes * more lights * more fixes * fix one turf * idk randomstuff * more lights * navigation nation (thanks plant) * fixes + better flooring * jamie changes * myriad changes * some more stuff * server room fix
@@ -531,16 +531,6 @@
|
||||
/obj/structure/lattice/catwalk,
|
||||
/turf/open/space/basic,
|
||||
/area/space/nearstation)
|
||||
"jT" = (
|
||||
/obj/structure/ethernet_cable{
|
||||
icon_state = "0-2"
|
||||
},
|
||||
/obj/machinery/ai/networking{
|
||||
label = "Computer Science - 2";
|
||||
roundstart_connection = "Subcontroller"
|
||||
},
|
||||
/turf/open/floor/circuit/green/telecomms,
|
||||
/area/ai_monitored/turret_protected/ai)
|
||||
"jY" = (
|
||||
/obj/machinery/telecomms/broadcaster/preset_right,
|
||||
/turf/open/floor/circuit/green/telecomms/mainframe,
|
||||
@@ -970,6 +960,16 @@
|
||||
},
|
||||
/turf/open/floor/plasteel/dark/telecomms,
|
||||
/area/ai_monitored/turret_protected/ai)
|
||||
"qx" = (
|
||||
/obj/structure/ethernet_cable{
|
||||
icon_state = "0-2"
|
||||
},
|
||||
/obj/machinery/ai/networking{
|
||||
label = "Main Core";
|
||||
roundstart_connection = "Computer Science"
|
||||
},
|
||||
/turf/open/floor/circuit/green/telecomms,
|
||||
/area/ai_monitored/turret_protected/ai)
|
||||
"rm" = (
|
||||
/obj/machinery/power/terminal{
|
||||
dir = 8
|
||||
@@ -4738,7 +4738,7 @@ jR
|
||||
PH
|
||||
kY
|
||||
PH
|
||||
jT
|
||||
qx
|
||||
AS
|
||||
uV
|
||||
zW
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
#include "map_files\YogStation\Yogstation.dmm"
|
||||
#include "map_files\IceMeta\IceMeta.dmm"
|
||||
#include "map_files\GaxStation\GaxStation.dmm"
|
||||
#include "map_files\MiniStation\MiniStation.dmm"
|
||||
#include "map_files\ManateeStation\ManateeStation.dmm"
|
||||
#include "map_files\DonutStation\DonutStation.dmm"
|
||||
#ifdef TRAVISBUILDING
|
||||
|
||||
@@ -8,5 +8,14 @@
|
||||
"ferry": "ferry_fancy",
|
||||
"emergency": "emergency_box"
|
||||
},
|
||||
"cryo_spawn": true
|
||||
"cryo_spawn": true,
|
||||
"job_changes": {
|
||||
"Captain": {
|
||||
"special_charter": "ship"
|
||||
},
|
||||
"Psychiatrist": {
|
||||
"spawn_positions": 0,
|
||||
"total_positions": 0
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -45,5 +45,10 @@
|
||||
"No Parallax": true
|
||||
}
|
||||
],
|
||||
"minetype": "none"
|
||||
"minetype": "none",
|
||||
"job_changes": {
|
||||
"Captain": {
|
||||
"special_charter": "moon"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,5 +7,10 @@
|
||||
"ferry": "ferry_fancy",
|
||||
"whiteship": "whiteship_box",
|
||||
"emergency": "emergency_box"
|
||||
},
|
||||
"job_changes": {
|
||||
"Captain": {
|
||||
"special_charter": "asteroid"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -37498,17 +37498,6 @@
|
||||
},
|
||||
/turf/open/space/basic,
|
||||
/area/space/nearstation)
|
||||
"seS" = (
|
||||
/obj/docking_port/stationary{
|
||||
dwidth = 2;
|
||||
height = 5;
|
||||
name = "fore bay 1";
|
||||
roundstart_template = /datum/map_template/shuttle/labour/gax;
|
||||
shuttle_id = "laborcamp_home";
|
||||
width = 9
|
||||
},
|
||||
/turf/open/space/basic,
|
||||
/area/space)
|
||||
"sfo" = (
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 4
|
||||
@@ -72710,12 +72699,12 @@ vRP
|
||||
vRP
|
||||
vRP
|
||||
ubS
|
||||
tkl
|
||||
tkl
|
||||
tkl
|
||||
tkl
|
||||
tkl
|
||||
tkl
|
||||
vRP
|
||||
vRP
|
||||
vRP
|
||||
vRP
|
||||
vRP
|
||||
vRP
|
||||
dll
|
||||
dll
|
||||
dll
|
||||
@@ -72967,7 +72956,7 @@ vRP
|
||||
vRP
|
||||
vRP
|
||||
aCD
|
||||
tkl
|
||||
vRP
|
||||
vRP
|
||||
vRP
|
||||
vRP
|
||||
@@ -73224,7 +73213,7 @@ vRP
|
||||
vRP
|
||||
vRP
|
||||
ubS
|
||||
tkl
|
||||
vRP
|
||||
vRP
|
||||
vRP
|
||||
vRP
|
||||
@@ -73481,12 +73470,12 @@ vRP
|
||||
vRP
|
||||
vRP
|
||||
aCD
|
||||
tkl
|
||||
vRP
|
||||
vRP
|
||||
vRP
|
||||
vRP
|
||||
seS
|
||||
vRP
|
||||
vRP
|
||||
eAe
|
||||
lUn
|
||||
bOF
|
||||
@@ -73738,7 +73727,7 @@ vRP
|
||||
vRP
|
||||
vRP
|
||||
ubS
|
||||
tkl
|
||||
vRP
|
||||
vRP
|
||||
vRP
|
||||
vRP
|
||||
@@ -73995,7 +73984,7 @@ vRP
|
||||
vRP
|
||||
vRP
|
||||
ubS
|
||||
tkl
|
||||
vRP
|
||||
vRP
|
||||
vRP
|
||||
vRP
|
||||
@@ -74252,7 +74241,7 @@ vRP
|
||||
vRP
|
||||
vRP
|
||||
aCD
|
||||
tkl
|
||||
vRP
|
||||
vRP
|
||||
vRP
|
||||
vRP
|
||||
@@ -74509,7 +74498,7 @@ vRP
|
||||
vRP
|
||||
vRP
|
||||
aCD
|
||||
tkl
|
||||
vRP
|
||||
vRP
|
||||
vRP
|
||||
vRP
|
||||
@@ -74766,7 +74755,7 @@ vRP
|
||||
vRP
|
||||
vRP
|
||||
aCD
|
||||
tkl
|
||||
vRP
|
||||
vRP
|
||||
vRP
|
||||
vRP
|
||||
@@ -75023,7 +75012,7 @@ vRP
|
||||
vRP
|
||||
vRP
|
||||
ubS
|
||||
tkl
|
||||
vRP
|
||||
vRP
|
||||
vRP
|
||||
vRP
|
||||
@@ -75280,12 +75269,12 @@ vRP
|
||||
vRP
|
||||
vRP
|
||||
ubS
|
||||
tkl
|
||||
tkl
|
||||
tkl
|
||||
tkl
|
||||
tkl
|
||||
tkl
|
||||
vRP
|
||||
vRP
|
||||
vRP
|
||||
vRP
|
||||
vRP
|
||||
vRP
|
||||
tkl
|
||||
aCD
|
||||
lMu
|
||||
|
||||
178102
_maps/map_files/MiniStation/MiniStation.dmm
Normal file
1
_maps/ministation.dm
Normal file
@@ -0,0 +1 @@
|
||||
#define FORCE_MAP "ministation"
|
||||
56
_maps/ministation.json
Normal file
@@ -0,0 +1,56 @@
|
||||
{
|
||||
"map_name": "MiniStation",
|
||||
"map_path": "map_files/MiniStation",
|
||||
"map_file": "MiniStation.dmm",
|
||||
"shuttles": {
|
||||
"emergency": "emergency_box",
|
||||
"ferry": "ferry_fancy",
|
||||
"cargo": "cargo_box",
|
||||
"whiteship": "whiteship_box"
|
||||
},
|
||||
"cryo_spawn": true,
|
||||
"traits": [
|
||||
{
|
||||
"Up": true,
|
||||
"Linkage": null
|
||||
},
|
||||
{
|
||||
"Down": true,
|
||||
"Baseturf": "/turf/open/openspace",
|
||||
"Linkage": "Cross"
|
||||
}
|
||||
],
|
||||
"job_changes": {
|
||||
"Captain": {
|
||||
"special_charter": "asteroid"
|
||||
},
|
||||
"Artist": {
|
||||
"spawn_positions": 0,
|
||||
"total_positions": 0
|
||||
},
|
||||
"Lawyer": {
|
||||
"spawn_positions": 0,
|
||||
"total_positions": 0
|
||||
},
|
||||
"Brig Physician": {
|
||||
"spawn_positions": 0,
|
||||
"total_positions": 0
|
||||
},
|
||||
"Clerk": {
|
||||
"spawn_positions": 0,
|
||||
"total_positions": 0
|
||||
},
|
||||
"Paramedic": {
|
||||
"spawn_positions": 1,
|
||||
"total_positions": 1
|
||||
},
|
||||
"Cook": {
|
||||
"spawn_positions": 1,
|
||||
"total_positions": 1
|
||||
},
|
||||
"Chemist": {
|
||||
"spawn_positions": 1,
|
||||
"total_positions": 1
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -101,6 +101,7 @@
|
||||
#define CLICK_CD_HANDCUFFED 1 SECONDS
|
||||
#define CLICK_CD_RESIST 2 SECONDS
|
||||
#define CLICK_CD_GRABBING 1 SECONDS
|
||||
#define CLICK_CD_LOOK_UP 0.5 SECONDS
|
||||
|
||||
//Cuff resist speeds
|
||||
#define FAST_CUFFBREAK 1
|
||||
|
||||
@@ -100,12 +100,14 @@
|
||||
#define ui_combat_toggle "EAST-3:24,SOUTH:5"
|
||||
#define ui_zonesel "EAST-1:28,SOUTH:5"
|
||||
#define ui_acti_alt "EAST-1:28,SOUTH:5" //alternative intent switcher for when the interface is hidden (F12)
|
||||
#define ui_crafting "EAST-4:22,SOUTH:5"
|
||||
#define ui_building "EAST-4:22,SOUTH:21"
|
||||
#define ui_crafting "EAST-4:4,SOUTH:5"
|
||||
#define ui_building "EAST-4:4,SOUTH:21"
|
||||
#define ui_borg_pull "EAST-2:26,SOUTH+1:7"
|
||||
#define ui_borg_radio "EAST-1:28,SOUTH+1:7"
|
||||
#define ui_borg_intents "EAST-2:26,SOUTH:5"
|
||||
#define ui_language_menu "EAST-4:6,SOUTH:21"
|
||||
#define ui_language_menu "EAST-5:20,SOUTH:21"
|
||||
#define ui_move_up "EAST-4:22, SOUTH:21"
|
||||
#define ui_move_down "EAST-4:22, SOUTH:5"
|
||||
|
||||
//Upper-middle right (alerts)
|
||||
#define ui_alert1 "EAST-1:28,CENTER+5:27"
|
||||
@@ -218,6 +220,8 @@
|
||||
#define ui_ghost_chem "SOUTH: 22,CENTER+3:-8"
|
||||
#define ui_ghost_nanite "SOUTH: 6,CENTER+3:8"
|
||||
#define ui_ghost_wound "SOUTH: 22,CENTER+3:8"
|
||||
#define ui_ghost_move_up "SOUTH: 22,CENTER+3:24"
|
||||
#define ui_ghost_move_down "SOUTH: 6,CENTER+3:24"
|
||||
|
||||
// Defines relating to action button positions
|
||||
|
||||
|
||||
@@ -203,3 +203,6 @@ Always compile, always use that verb, and always make sure that it works for wha
|
||||
#define MAP_JOB_CHECK if(SSmapping.config.map_name != JOB_MODIFICATION_MAP_NAME) { return; }
|
||||
#define MAP_JOB_CHECK_BASE if(SSmapping.config.map_name != JOB_MODIFICATION_MAP_NAME) { return ..(); }
|
||||
#define MAP_REMOVE_JOB(jobpath) /datum/job/##jobpath/map_check() { return (SSmapping.config.map_name != JOB_MODIFICATION_MAP_NAME) && ..() }
|
||||
|
||||
/// Checks the job changes in the map config for the passed change key.
|
||||
#define CHECK_MAP_JOB_CHANGE(job, change) SSmapping.config.job_changes?[job]?[change]
|
||||
|
||||
@@ -93,6 +93,16 @@
|
||||
using.icon = ui_style
|
||||
static_inventory += using
|
||||
|
||||
using = new /atom/movable/screen/move(src)
|
||||
using.icon = ui_style
|
||||
using.screen_loc = ui_ghost_move_up
|
||||
static_inventory += using
|
||||
|
||||
using = new /atom/movable/screen/move/down(src)
|
||||
using.icon = ui_style
|
||||
using.screen_loc = ui_ghost_move_down
|
||||
static_inventory += using
|
||||
|
||||
/datum/hud/ghost/show_hud(version = 0, mob/viewmob)
|
||||
// don't show this HUD if observing; show the HUD of the observee
|
||||
var/mob/dead/observer/O = mymob
|
||||
|
||||
@@ -94,6 +94,10 @@ GLOBAL_LIST_INIT(available_ui_styles, list(
|
||||
var/atom/movable/screen/stamina
|
||||
var/atom/movable/screen/healthdoll
|
||||
var/atom/movable/screen/spacesuit
|
||||
|
||||
var/atom/movable/screen/move_up
|
||||
var/atom/movable/screen/move_down
|
||||
|
||||
// subtypes can override this to force a specific UI style
|
||||
var/ui_style
|
||||
|
||||
@@ -242,6 +246,8 @@ GLOBAL_LIST_INIT(available_ui_styles, list(
|
||||
blobpwrdisplay = null
|
||||
alien_plasma_display = null
|
||||
alien_queen_finder = null
|
||||
move_up = null
|
||||
move_down = null
|
||||
|
||||
QDEL_LIST_ASSOC_VAL(master_groups)
|
||||
QDEL_LIST_ASSOC_VAL(plane_master_controllers)
|
||||
|
||||
@@ -292,6 +292,18 @@
|
||||
pull_icon.screen_loc = ui_above_intent
|
||||
static_inventory += pull_icon
|
||||
|
||||
move_up = new /atom/movable/screen/move(src)
|
||||
move_up.icon = ui_style
|
||||
move_up.update_appearance(UPDATE_ICON)
|
||||
//move_up.screen_loc = ui_move_up
|
||||
static_inventory += move_up
|
||||
|
||||
move_down = new /atom/movable/screen/move/down(src)
|
||||
move_down.icon = ui_style
|
||||
move_down.update_appearance(UPDATE_ICON)
|
||||
//move_down.screen_loc = ui_move_down
|
||||
static_inventory += move_down
|
||||
|
||||
devilsouldisplay = new /atom/movable/screen/devil/soul_counter(src)
|
||||
infodisplay += devilsouldisplay
|
||||
|
||||
|
||||
@@ -810,3 +810,24 @@
|
||||
name = "stamina"
|
||||
icon_state = "stamina0"
|
||||
screen_loc = ui_stamina
|
||||
|
||||
/atom/movable/screen/move
|
||||
name = "move up"
|
||||
icon_state = "move_up"
|
||||
screen_loc = ui_move_up
|
||||
var/direction = UP
|
||||
|
||||
/atom/movable/screen/move/Click(location, control, params)
|
||||
. = ..()
|
||||
var/mob/M = usr
|
||||
switch(direction)
|
||||
if(UP)
|
||||
M.up()
|
||||
if(DOWN)
|
||||
M.down()
|
||||
|
||||
/atom/movable/screen/move/down
|
||||
name = "move down"
|
||||
icon_state = "move_down"
|
||||
screen_loc = ui_move_down
|
||||
direction = DOWN
|
||||
|
||||
@@ -154,6 +154,11 @@ SUBSYSTEM_DEF(throwing)
|
||||
if (callback)
|
||||
callback.Invoke()
|
||||
|
||||
if(!thrownthing.currently_z_moving) // I don't think you can zfall while thrown but hey, just in case.
|
||||
var/turf/T = get_turf(thrownthing)
|
||||
if(T && thrownthing.has_gravity(T))
|
||||
T.zFall(thrownthing)
|
||||
|
||||
if(thrownthing)
|
||||
SEND_SIGNAL(thrownthing, COMSIG_MOVABLE_THROW_LANDED, src)
|
||||
|
||||
|
||||
@@ -507,6 +507,8 @@ SUBSYSTEM_DEF(ticker)
|
||||
/datum/controller/subsystem/ticker/proc/check_maprotate()
|
||||
if (!CONFIG_GET(flag/maprotation))
|
||||
return
|
||||
if(SSticker.maprotatechecked || SSmapping.next_map_config) //we already have a map set
|
||||
return
|
||||
//map rotate chance defaults to 75% of the length of the round (in minutes)
|
||||
if (!prob((world.time/600)*CONFIG_GET(number/maprotationchancedelta)))
|
||||
return
|
||||
|
||||
@@ -35,6 +35,9 @@
|
||||
"whiteship" = "whiteship_1",
|
||||
"emergency" = "emergency_box",
|
||||
)
|
||||
|
||||
/// Dictionary of job sub-typepath to template changes dictionary
|
||||
var/job_changes = list()
|
||||
|
||||
/// List of unit tests that are skipped when running this map
|
||||
var/list/skipped_tests
|
||||
@@ -171,6 +174,12 @@
|
||||
if("cryo_spawn" in json)
|
||||
cryo_spawn = json["cryo_spawn"]
|
||||
|
||||
if("job_changes" in json)
|
||||
if(!islist(json["job_changes"]))
|
||||
log_world("map_config \"job_changes\" field is missing or invalid!")
|
||||
return
|
||||
job_changes = json["job_changes"]
|
||||
|
||||
allow_custom_shuttles = json["allow_custom_shuttles"] != FALSE
|
||||
|
||||
#ifdef UNIT_TESTS
|
||||
|
||||
@@ -183,6 +183,9 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
|
||||
name = "Aft (S) Maintenance"
|
||||
icon_state = "amaint"
|
||||
|
||||
/area/maintenance/aft/lower
|
||||
name = "Lower Aft (S) Maintenance"
|
||||
|
||||
/area/maintenance/aft/secondary
|
||||
name = "Aft (S) Maintenance"
|
||||
icon_state = "amaint_2"
|
||||
@@ -191,6 +194,9 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
|
||||
name = "Central Maintenance"
|
||||
icon_state = "maintcentral"
|
||||
|
||||
/area/maintenance/central/lower
|
||||
name = "Lower Central Maintenance"
|
||||
|
||||
/area/maintenance/central/secondary
|
||||
name = "Central Maintenance"
|
||||
icon_state = "maintcentral"
|
||||
@@ -200,6 +206,9 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
|
||||
name = "Fore (N) Maintenance"
|
||||
icon_state = "fmaint"
|
||||
|
||||
/area/maintenance/fore/lower
|
||||
name = "Lower Fore (N) Maintenance"
|
||||
|
||||
/area/maintenance/fore/secondary
|
||||
name = "Fore (N) Maintenance"
|
||||
icon_state = "fmaint_2"
|
||||
@@ -208,6 +217,9 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
|
||||
name = "Starboard (E) Maintenance"
|
||||
icon_state = "smaint"
|
||||
|
||||
/area/maintenance/starboard/lower
|
||||
name = "Lower Starboard (E) Maintenance"
|
||||
|
||||
/area/maintenance/starboard/central
|
||||
name = "Central Starboard (E) Maintenance"
|
||||
icon_state = "smaint"
|
||||
@@ -220,6 +232,9 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
|
||||
name = "Starboard Quarter (SE) Maintenance"
|
||||
icon_state = "asmaint"
|
||||
|
||||
/area/maintenance/starboard/aft/lower
|
||||
name = "Lower Starboard Quarter (SE) Maintenance"
|
||||
|
||||
/area/maintenance/starboard/aft/secondary
|
||||
name = "Secondary Starboard Quarter (SE) Maintenance"
|
||||
icon_state = "asmaint_2"
|
||||
@@ -228,10 +243,16 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
|
||||
name = "Starboard Bow (NE) Maintenance"
|
||||
icon_state = "fsmaint"
|
||||
|
||||
/area/maintenance/starboard/fore/lower
|
||||
name = "Lower Starboard Fore (NE) Maintenance"
|
||||
|
||||
/area/maintenance/port
|
||||
name = "Port (W) Maintenance"
|
||||
icon_state = "pmaint"
|
||||
|
||||
/area/maintenance/port/lower
|
||||
name = "Lower Port (W) Maintenance"
|
||||
|
||||
/area/maintenance/port/central
|
||||
name = "Central Port (W) Maintenance"
|
||||
icon_state = "maintcentral"
|
||||
@@ -240,10 +261,16 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
|
||||
name = "Port Quarter (SW) Maintenance"
|
||||
icon_state = "apmaint"
|
||||
|
||||
/area/maintenance/port/aft/lower
|
||||
name = "Lower Port Quarter (SW) Maintenance"
|
||||
|
||||
/area/maintenance/port/fore
|
||||
name = "Port Bow (NW) Maintenance"
|
||||
icon_state = "fpmaint"
|
||||
|
||||
/area/maintenance/port/fore/lower
|
||||
name = "Lower Port Bow (NW) Maintenance"
|
||||
|
||||
/area/maintenance/disposal
|
||||
name = "Waste Disposal"
|
||||
icon_state = "disposal"
|
||||
|
||||
@@ -274,17 +274,6 @@
|
||||
if(!(impact_flags & ZIMPACT_NO_SPIN))
|
||||
INVOKE_ASYNC(src, PROC_REF(SpinAnimation), 5, 2)
|
||||
SEND_SIGNAL(src, COMSIG_ATOM_ON_Z_IMPACT, impacted_turf, levels)
|
||||
|
||||
//Yog code: since we still handle falling as throwing things
|
||||
var/atom/highest = impacted_turf
|
||||
for(var/i in impacted_turf.contents)
|
||||
var/atom/A = i
|
||||
if(!A.density)
|
||||
continue
|
||||
if(isobj(A) || ismob(A))
|
||||
if(A.layer > highest.layer)
|
||||
highest = A
|
||||
throw_impact(highest)
|
||||
return TRUE
|
||||
|
||||
/*
|
||||
|
||||
@@ -167,11 +167,17 @@
|
||||
/datum/signal/subspace/messaging/New(init_source, init_data)
|
||||
source = init_source
|
||||
data = init_data
|
||||
var/turf/T = get_turf(source)
|
||||
var/turf/T
|
||||
if(istype(source, /datum/computer_file/program)) //programs don't actually have locations
|
||||
var/datum/computer_file/program/P = source
|
||||
T = get_turf_global(P.computer)
|
||||
else
|
||||
T = get_turf_global(source)
|
||||
|
||||
if(T)
|
||||
levels = SSmapping.get_connected_levels(T)
|
||||
else
|
||||
levels = list(2)
|
||||
levels = SSmapping.levels_by_trait(ZTRAIT_STATION) //just assume we're on station..
|
||||
if(!("reject" in data))
|
||||
data["reject"] = TRUE
|
||||
|
||||
|
||||
@@ -419,3 +419,8 @@
|
||||
icon = 'yogstation/icons/effects/station_blood.dmi'
|
||||
icon_state = "kilo"
|
||||
random_icon_states = null
|
||||
|
||||
/obj/effect/decal/cleanable/blood/kilo/gus
|
||||
name = "remember gus"
|
||||
desc = "Never been to Gusstation before."
|
||||
icon_state = "gus"
|
||||
|
||||
@@ -526,3 +526,50 @@
|
||||
singular_name = "smooth iron catwalk floor tile"
|
||||
icon_state = "smoothiron_catwalk"
|
||||
turf_type = /turf/open/floor/catwalk_floor/iron_smooth
|
||||
|
||||
// Glass floors
|
||||
/obj/item/stack/tile/glass
|
||||
name = "glass floor"
|
||||
singular_name = "glass floor tile"
|
||||
desc = "Glass window floors, to let you see... Whatever that is down there."
|
||||
icon_state = "tile_glass"
|
||||
turf_type = /turf/open/floor/glass
|
||||
item_state = "tile-glass"
|
||||
merge_type = /obj/item/stack/tile/glass
|
||||
mats_per_unit = list(/datum/material/glass=SHEET_MATERIAL_AMOUNT * 0.25) // 4 tiles per sheet
|
||||
replace_plating = TRUE
|
||||
|
||||
/obj/item/stack/tile/glass/sixty
|
||||
amount = 60
|
||||
|
||||
/obj/item/stack/tile/rglass
|
||||
name = "reinforced glass floor"
|
||||
singular_name = "reinforced glass floor tile"
|
||||
desc = "Reinforced glass window floors. These bad boys are 50% stronger than their predecessors!"
|
||||
icon_state = "tile_rglass"
|
||||
item_state = "tile-rglass"
|
||||
turf_type = /turf/open/floor/glass/reinforced
|
||||
merge_type = /obj/item/stack/tile/rglass
|
||||
mats_per_unit = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT * 0.125, /datum/material/glass=SHEET_MATERIAL_AMOUNT * 0.25) // 4 tiles per sheet
|
||||
replace_plating = TRUE
|
||||
|
||||
/obj/item/stack/tile/rglass/sixty
|
||||
amount = 60
|
||||
|
||||
/obj/item/stack/tile/glass/plasma
|
||||
name = "plasma glass floor"
|
||||
singular_name = "plasma glass floor tile"
|
||||
desc = "Plasma glass window floors, for when... Whatever is down there is too scary for normal glass."
|
||||
icon_state = "tile_pglass"
|
||||
turf_type = /turf/open/floor/glass/plasma
|
||||
merge_type = /obj/item/stack/tile/glass/plasma
|
||||
mats_per_unit = list(/datum/material/plasma=SHEET_MATERIAL_AMOUNT * 0.125, /datum/material/glass=SHEET_MATERIAL_AMOUNT * 0.25)
|
||||
|
||||
/obj/item/stack/tile/rglass/plasma
|
||||
name = "reinforced plasma glass floor"
|
||||
singular_name = "reinforced plasma glass floor tile"
|
||||
desc = "Reinforced plasma glass window floors, because whatever's downstairs should really stay down there."
|
||||
icon_state = "tile_rpglass"
|
||||
turf_type = /turf/open/floor/glass/reinforced/plasma
|
||||
merge_type = /obj/item/stack/tile/rglass/plasma
|
||||
mats_per_unit = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT * 0.125, /datum/material/plasma=SHEET_MATERIAL_AMOUNT * 0.125, /datum/material/glass=SHEET_MATERIAL_AMOUNT * 0.25)
|
||||
|
||||
121
code/game/turfs/open/floor/glass.dm
Normal file
@@ -0,0 +1,121 @@
|
||||
/turf/open/floor/glass
|
||||
name = "glass floor"
|
||||
desc = "Don't jump on it, or do, I'm not your mom."
|
||||
icon = 'icons/turf/floors/glass.dmi'
|
||||
icon_state = "glass-0"
|
||||
base_icon_state = "glass"
|
||||
baseturfs = /turf/baseturf_bottom
|
||||
layer = GLASS_FLOOR_LAYER
|
||||
underfloor_accessibility = UNDERFLOOR_VISIBLE
|
||||
smoothing_flags = SMOOTH_BITMASK
|
||||
smoothing_groups = SMOOTH_GROUP_TURF_OPEN + SMOOTH_GROUP_FLOOR_TRANSPARENT_GLASS
|
||||
canSmoothWith = SMOOTH_GROUP_FLOOR_TRANSPARENT_GLASS
|
||||
footstep = FOOTSTEP_PLATING
|
||||
barefootstep = FOOTSTEP_HARD_BAREFOOT
|
||||
clawfootstep = FOOTSTEP_HARD_CLAW
|
||||
heavyfootstep = FOOTSTEP_GENERIC_HEAVY
|
||||
floor_tile = /obj/item/stack/tile/glass
|
||||
overfloor_placed = FALSE
|
||||
/// List of /atom/movable/render_step that are being used to make this glass floor glow
|
||||
/// These are OWNED by this floor, they delete when we delete them, not before not after
|
||||
var/list/glow_stuff
|
||||
/// How much alpha to leave when cutting away emissive blockers
|
||||
var/alpha_to_leave = 255
|
||||
/// Color of starlight to use. Defaults to STARLIGHT_COLOR if not set
|
||||
var/starlight_color
|
||||
|
||||
/turf/open/floor/glass/broken_states()
|
||||
return list("glass-damaged1", "glass-damaged2", "glass-damaged3")
|
||||
|
||||
/turf/open/floor/glass/Initialize(mapload)
|
||||
icon_state = "" //Prevent the normal icon from appearing behind the smooth overlays
|
||||
..()
|
||||
return INITIALIZE_HINT_LATELOAD
|
||||
|
||||
/turf/open/floor/glass/LateInitialize()
|
||||
AddElement(/datum/element/turf_z_transparency)
|
||||
setup_glow()
|
||||
|
||||
/turf/open/floor/glass/Destroy()
|
||||
. = ..()
|
||||
QDEL_LIST(glow_stuff)
|
||||
UnregisterSignal(SSdcs, COMSIG_STARLIGHT_COLOR_CHANGED)
|
||||
|
||||
/// If this turf is at the bottom of the local rendering stack
|
||||
/// Then we're gonna make it emissive block so the space below glows
|
||||
/turf/open/floor/glass/proc/setup_glow()
|
||||
if(GET_TURF_PLANE_OFFSET(src) != GET_LOWEST_STACK_OFFSET(z)) // We ain't the bottom brother
|
||||
return
|
||||
// We assume no parallax means no space means no light
|
||||
if(SSmapping.level_trait(z, ZTRAIT_NOPARALLAX))
|
||||
return
|
||||
|
||||
glow_stuff = partially_block_emissives(src, alpha_to_leave)
|
||||
if(!starlight_color)
|
||||
RegisterSignal(SSdcs, COMSIG_STARLIGHT_COLOR_CHANGED, PROC_REF(starlight_changed))
|
||||
else
|
||||
UnregisterSignal(SSdcs, COMSIG_STARLIGHT_COLOR_CHANGED)
|
||||
set_light(2, 1, starlight_color || GLOB.starlight_color, l_height = LIGHTING_HEIGHT_SPACE)
|
||||
|
||||
/turf/open/floor/glass/proc/starlight_changed(datum/source, old_star, new_star)
|
||||
if(light_color == old_star)
|
||||
set_light(l_color = new_star)
|
||||
|
||||
/turf/open/floor/glass/make_plating()
|
||||
return
|
||||
|
||||
/turf/open/floor/glass/icemoon
|
||||
initial_gas_mix = ICEMOON_DEFAULT_ATMOS
|
||||
|
||||
/turf/open/floor/glass/airless
|
||||
initial_gas_mix = AIRLESS_ATMOS
|
||||
|
||||
/turf/open/floor/glass/reinforced
|
||||
name = "reinforced glass floor"
|
||||
desc = "Do jump on it, it can take it."
|
||||
icon = 'icons/turf/floors/reinf_glass.dmi'
|
||||
icon_state = "reinf_glass-0"
|
||||
base_icon_state = "reinf_glass"
|
||||
floor_tile = /obj/item/stack/tile/rglass
|
||||
alpha_to_leave = 206
|
||||
|
||||
/turf/open/floor/glass/reinforced/telecomms
|
||||
initial_gas_mix = TCOMMS_ATMOS
|
||||
|
||||
/turf/open/floor/glass/reinforced/icemoon
|
||||
initial_gas_mix = ICEMOON_DEFAULT_ATMOS
|
||||
|
||||
/turf/open/floor/glass/reinforced/airless
|
||||
initial_gas_mix = AIRLESS_ATMOS
|
||||
|
||||
/turf/open/floor/glass/plasma
|
||||
name = "plasma glass floor"
|
||||
desc = "Studies by the Nanotrasen Materials Safety Division have not yet determined if this is safe to jump on, do so at your own risk."
|
||||
icon = 'icons/turf/floors/plasma_glass.dmi'
|
||||
icon_state = "plasma_glass-0"
|
||||
base_icon_state = "plasma_glass"
|
||||
floor_tile = /obj/item/stack/tile/glass/plasma
|
||||
starlight_color = COLOR_STRONG_VIOLET
|
||||
alpha_to_leave = 255
|
||||
|
||||
/turf/open/floor/glass/plasma/icemoon
|
||||
initial_gas_mix = ICEMOON_DEFAULT_ATMOS
|
||||
|
||||
/turf/open/floor/glass/plasma/airless
|
||||
initial_gas_mix = AIRLESS_ATMOS
|
||||
|
||||
/turf/open/floor/glass/reinforced/plasma
|
||||
name = "reinforced plasma glass floor"
|
||||
desc = "Do jump on it, jump on it while in a mecha, it can take it."
|
||||
icon = 'icons/turf/floors/reinf_plasma_glass.dmi'
|
||||
icon_state = "reinf_plasma_glass-0"
|
||||
base_icon_state = "reinf_plasma_glass"
|
||||
floor_tile = /obj/item/stack/tile/rglass/plasma
|
||||
starlight_color = COLOR_STRONG_VIOLET
|
||||
alpha_to_leave = 206
|
||||
|
||||
/turf/open/floor/glass/reinforced/plasma/icemoon
|
||||
initial_gas_mix = ICEMOON_DEFAULT_ATMOS
|
||||
|
||||
/turf/open/floor/glass/reinforced/plasma/airless
|
||||
initial_gas_mix = AIRLESS_ATMOS
|
||||
@@ -69,10 +69,10 @@
|
||||
return
|
||||
zFall(movable)
|
||||
|
||||
/turf/open/openspace/zAirIn()
|
||||
/turf/open/openspace/zAirIn(direction, turf/source)
|
||||
return TRUE
|
||||
|
||||
/turf/open/openspace/zAirOut()
|
||||
/turf/open/openspace/zAirOut(direction, turf/source)
|
||||
return TRUE
|
||||
|
||||
/turf/open/openspace/zPassIn(direction)
|
||||
|
||||
@@ -256,7 +256,7 @@ GLOBAL_LIST_EMPTY(starlight)
|
||||
|
||||
/turf/open/space/openspace
|
||||
icon = 'icons/turf/floors.dmi'
|
||||
icon_state = MAP_SWITCH("pure_white", "transparent")
|
||||
icon_state = MAP_SWITCH("pure_white", "invisible")
|
||||
plane = TRANSPARENT_FLOOR_PLANE
|
||||
|
||||
/turf/open/space/openspace/Initialize(mapload) // handle plane and layer here so that they don't cover other obs/turfs in Dream Maker
|
||||
@@ -280,10 +280,10 @@ GLOBAL_LIST_EMPTY(starlight)
|
||||
UnregisterSignal(below, COMSIG_TURF_CHANGE)
|
||||
return ..()
|
||||
|
||||
/turf/open/space/openspace/zAirIn()
|
||||
/turf/open/space/openspace/zAirIn(direction, turf/source)
|
||||
return TRUE
|
||||
|
||||
/turf/open/space/openspace/zAirOut()
|
||||
/turf/open/space/openspace/zAirOut(direction, turf/source)
|
||||
return TRUE
|
||||
|
||||
/turf/open/space/openspace/zPassIn(direction)
|
||||
|
||||
@@ -258,13 +258,12 @@ GLOBAL_LIST_EMPTY(station_turfs)
|
||||
/turf/proc/multiz_turf_new(turf/T, dir)
|
||||
SEND_SIGNAL(src, COMSIG_TURF_MULTIZ_NEW, T, dir)
|
||||
|
||||
//zPassIn doesn't necessarily pass an atom!
|
||||
//direction is direction of travel of air
|
||||
/turf/proc/zPassIn(atom/movable/A, direction, turf/source)
|
||||
/turf/proc/zPassIn(direction)
|
||||
return FALSE
|
||||
|
||||
//direction is direction of travel of air
|
||||
/turf/proc/zPassOut(atom/movable/A, direction, turf/destination)
|
||||
/turf/proc/zPassOut(direction)
|
||||
return FALSE
|
||||
|
||||
//direction is direction of travel of air
|
||||
@@ -329,10 +328,6 @@ GLOBAL_LIST_EMPTY(station_turfs)
|
||||
falling_mov.pulledby.stop_pulling()
|
||||
return TRUE
|
||||
|
||||
/turf/proc/can_zFall(atom/movable/A, levels = 1, turf/target)
|
||||
SHOULD_BE_PURE(TRUE)
|
||||
return zPassOut(A, DOWN, target) && target.zPassIn(A, DOWN, src)
|
||||
|
||||
/turf/proc/handleRCL(obj/item/rcl/C, mob/user)
|
||||
if(C.loaded)
|
||||
for(var/obj/structure/cable/LC in src)
|
||||
|
||||
@@ -33,12 +33,103 @@
|
||||
mapname += "\]"
|
||||
|
||||
maprotatechoices[mapname] = VM
|
||||
var/chosenmap = input("Choose a map to change to", "Change Map") as null|anything in maprotatechoices
|
||||
var/chosenmap = input("Choose a map to change to", "Change Map") as null|anything in (maprotatechoices|"Custom")
|
||||
if (!chosenmap)
|
||||
return
|
||||
SSticker.maprotatechecked = 1
|
||||
var/datum/map_config/VM = maprotatechoices[chosenmap]
|
||||
message_admins("[key_name_admin(usr)] is changing the map to [VM.map_name]")
|
||||
log_admin("[key_name(usr)] is changing the map to [VM.map_name]")
|
||||
if (SSmapping.changemap(VM) == 0)
|
||||
message_admins("[key_name_admin(usr)] has changed the map to [VM.map_name]")
|
||||
|
||||
if(chosenmap == "Custom")
|
||||
message_admins("[key_name_admin(usr)] is changing the map to a custom map")
|
||||
log_admin("[key_name(usr)] is changing the map to a custom map")
|
||||
var/datum/map_config/virtual_map = new
|
||||
|
||||
var/map_file = input(usr, "Pick file:", "Map File") as null|file
|
||||
if(isnull(map_file))
|
||||
return
|
||||
|
||||
if(copytext("[map_file]", -4) != ".dmm")//4 == length(".dmm")
|
||||
to_chat(usr, span_warning("Filename must end in '.dmm': [map_file]"))
|
||||
return
|
||||
|
||||
if(fexists("_maps/custom/[map_file]"))
|
||||
fdel("_maps/custom/[map_file]")
|
||||
if(!fcopy(map_file, "_maps/custom/[map_file]"))
|
||||
return
|
||||
// This is to make sure the map works so the server does not start without a map.
|
||||
var/datum/parsed_map/M = new (map_file)
|
||||
if(!M)
|
||||
to_chat(usr, span_warning("Map '[map_file]' failed to parse properly."))
|
||||
return
|
||||
|
||||
if(!M.bounds)
|
||||
to_chat(usr, span_warning("Map '[map_file]' has non-existant bounds."))
|
||||
qdel(M)
|
||||
return
|
||||
|
||||
qdel(M)
|
||||
var/config_file = null
|
||||
var/list/json_value = list()
|
||||
var/config = tgui_alert(usr,"Would you like to upload an additional config for this map?", "Map Config", list("Yes", "No"))
|
||||
if(config == "Yes")
|
||||
config_file = input(usr, "Pick file:", "Config JSON File") as null|file
|
||||
if(isnull(config_file))
|
||||
return
|
||||
if(copytext("[config_file]", -5) != ".json")
|
||||
to_chat(src, span_warning("Filename must end in '.json': [config_file]"))
|
||||
return
|
||||
if(fexists("data/custom_map_json/[config_file]"))
|
||||
fdel("data/custom_map_json/[config_file]")
|
||||
if(!fcopy(config_file, "data/custom_map_json/[config_file]"))
|
||||
return
|
||||
if (virtual_map.LoadConfig("data/custom_map_json/[config_file]", TRUE) != TRUE)
|
||||
to_chat(src, span_warning("Failed to load config: [config_file]. Check that the fields are filled out correctly. \"map_path\": \"custom\" and \"map_file\": \"your_map_name.dmm\""))
|
||||
return
|
||||
json_value = list(
|
||||
"version" = MAP_CURRENT_VERSION,
|
||||
"map_name" = virtual_map.map_name,
|
||||
"map_path" = virtual_map.map_path,
|
||||
"map_file" = virtual_map.map_file,
|
||||
"shuttles" = virtual_map.shuttles,
|
||||
"traits" = virtual_map.traits,
|
||||
"job_changes" = virtual_map.job_changes,
|
||||
)
|
||||
else
|
||||
virtual_map = load_map_config()
|
||||
virtual_map.map_name = input(usr, "Choose the name for the map", "Map Name") as null|text
|
||||
if(isnull(virtual_map.map_name))
|
||||
virtual_map.map_name = "Custom"
|
||||
|
||||
var/shuttles = tgui_alert(usr,"Do you want to modify the shuttles?", "Map Shuttles", list("Yes", "No"))
|
||||
if(shuttles == "Yes")
|
||||
for(var/s in virtual_map.shuttles)
|
||||
var/shuttle = input(usr, s, "Map Shuttles") as null|text
|
||||
if(!shuttle)
|
||||
continue
|
||||
if(!SSmapping.shuttle_templates[shuttle])
|
||||
to_chat(usr, span_warning("No such shuttle as '[shuttle]' exists, using default."))
|
||||
continue
|
||||
virtual_map.shuttles[s] = shuttle
|
||||
|
||||
json_value = list(
|
||||
"version" = MAP_CURRENT_VERSION,
|
||||
"map_name" = virtual_map.map_name,
|
||||
"map_path" = CUSTOM_MAP_PATH,
|
||||
"map_file" = "[map_file]",
|
||||
"shuttles" = virtual_map.shuttles,
|
||||
)
|
||||
|
||||
// If the file isn't removed text2file will just append.
|
||||
if(fexists(PATH_TO_NEXT_MAP_JSON))
|
||||
fdel(PATH_TO_NEXT_MAP_JSON)
|
||||
text2file(json_encode(json_value), PATH_TO_NEXT_MAP_JSON)
|
||||
|
||||
if(SSmapping.changemap(virtual_map))
|
||||
message_admins("[key_name_admin(usr)] has changed the map to [virtual_map.map_name]")
|
||||
log_admin("[key_name_admin(usr)] has changed the map to [virtual_map.map_name]")
|
||||
SSticker.maprotatechecked = 1
|
||||
fdel("data/custom_map_json/[config_file]")
|
||||
else
|
||||
var/datum/map_config/virtual_map = maprotatechoices[chosenmap]
|
||||
if (SSmapping.changemap(virtual_map))
|
||||
message_admins("[key_name_admin(usr)] has changed the map to [virtual_map.map_name]")
|
||||
log_admin("[key_name_admin(usr)] has changed the map to [virtual_map.map_name]")
|
||||
SSticker.maprotatechecked = 1
|
||||
|
||||
@@ -214,7 +214,7 @@
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/thermomachine/freezer
|
||||
name = "Thermomachine"
|
||||
icon_state = "freezer"
|
||||
icon_state = MAP_SWITCH("freezer", "freezer_map")
|
||||
icon_state_off = "freezer"
|
||||
icon_state_on = "freezer_1"
|
||||
icon_state_open = "freezer-o"
|
||||
@@ -237,7 +237,7 @@
|
||||
target_temperature = T0C-80
|
||||
/obj/machinery/atmospherics/components/unary/thermomachine/heater
|
||||
name = "Thermomachine"
|
||||
icon_state = "heater"
|
||||
icon_state = MAP_SWITCH("heater", "heater_map")
|
||||
icon_state_off = "heater"
|
||||
icon_state_on = "heater_1"
|
||||
icon_state_open = "heater-o"
|
||||
|
||||
@@ -88,8 +88,6 @@
|
||||
/// If this job's mail goodies compete with generic goodies.
|
||||
var/exclusive_mail_goodies = FALSE
|
||||
|
||||
var/list/changed_maps = list() // Maps on which the job is changed. Should use the same name as the mapping config
|
||||
|
||||
///The text a person using olfaction will see for the job of the target's scent
|
||||
var/smells_like = "a freeloader"
|
||||
|
||||
@@ -109,45 +107,17 @@
|
||||
*/
|
||||
var/list/minimal_lightup_areas = list()
|
||||
|
||||
/*
|
||||
If you want to change a job on a specific map with this system, you will want to go onto that job datum
|
||||
and add said map's name to the changed_maps list, like so:
|
||||
changed_maps = list("OmegaStation")
|
||||
|
||||
Then, you're going to want to make a proc called "OmegaStationChanges" on the job, which will be the one
|
||||
actually making the changes, like so:
|
||||
|
||||
/datum/job/miner/proc/OmegaStationChanges()
|
||||
|
||||
If you want to remove the job from said map, you will return TRUE in the proc, otherwise you can make
|
||||
whatever changes to the job datum you need to make. For example, say we want to make it so 2 wardens spawn
|
||||
on OmegaStation, we'd do the following:
|
||||
|
||||
/datum/job/warden
|
||||
changed_maps = list("OmegaStation")
|
||||
|
||||
/datum/job/warden/proc/OmegaStationChanges()
|
||||
total_positions = 2
|
||||
spawn_positions = 2
|
||||
|
||||
Here is another example of using this:
|
||||
|
||||
/datum/job/doctor/proc/OmegaStationChanges()
|
||||
total_positions = 3
|
||||
spawn_positions = 3
|
||||
added_access = list()
|
||||
base_access = list(ACCESS_MEDICAL, ACCESS_MORGUE)
|
||||
supervisors = "the captain and the head of personnel"
|
||||
*/
|
||||
|
||||
/datum/job/New()
|
||||
.=..()
|
||||
lightup_areas = typecacheof(lightup_areas)
|
||||
minimal_lightup_areas = typecacheof(minimal_lightup_areas)
|
||||
|
||||
if(changed_maps.len)
|
||||
for(var/map in changed_maps)
|
||||
RegisterSignal(src, map, text2path("[type]/proc/[map]Changes"))
|
||||
var/new_spawn_positions = CHECK_MAP_JOB_CHANGE(title, "spawn_positions")
|
||||
if(isnum(new_spawn_positions))
|
||||
spawn_positions = new_spawn_positions
|
||||
var/new_total_positions = CHECK_MAP_JOB_CHANGE(title, "total_positions")
|
||||
if(isnum(new_total_positions))
|
||||
total_positions = new_total_positions
|
||||
|
||||
//Only override this proc
|
||||
//H is usually a human unless an /equip override transformed it
|
||||
|
||||
@@ -86,6 +86,32 @@
|
||||
|
||||
chameleon_extras = list(/obj/item/gun/energy/e_gun, /obj/item/stamp/captain)
|
||||
|
||||
var/special_charter
|
||||
|
||||
/datum/outfit/job/captain/pre_equip(mob/living/carbon/human/H, visualsOnly)
|
||||
. = ..()
|
||||
special_charter = CHECK_MAP_JOB_CHANGE("Captain", "special_charter")
|
||||
if(!special_charter)
|
||||
return
|
||||
|
||||
backpack_contents -= /obj/item/station_charter
|
||||
|
||||
if(!l_hand)
|
||||
l_hand = /obj/item/station_charter/flag
|
||||
else if(!r_hand)
|
||||
r_hand = /obj/item/station_charter/flag
|
||||
|
||||
/datum/outfit/job/captain/post_equip(mob/living/carbon/human/equipped, visualsOnly)
|
||||
. = ..()
|
||||
if(visualsOnly || !special_charter)
|
||||
return
|
||||
|
||||
var/obj/item/station_charter/flag/celestial_charter = locate() in equipped.held_items
|
||||
if(isnull(celestial_charter))
|
||||
// failed to give out the unique charter, plop on the ground
|
||||
celestial_charter = new(get_turf(equipped))
|
||||
|
||||
|
||||
/datum/outfit/job/captain/hardsuit
|
||||
name = "Captain (Hardsuit)"
|
||||
|
||||
|
||||
@@ -42,8 +42,6 @@
|
||||
/datum/job_department/command,
|
||||
)
|
||||
|
||||
changed_maps = list("YogsPubby")
|
||||
|
||||
mail_goodies = list(
|
||||
/obj/item/stack/sheet/plastic/five = 20, //need that plastic chair
|
||||
/obj/item/clothing/head/hatsky = 10,
|
||||
@@ -76,9 +74,6 @@
|
||||
var/obj/item/clothing/suit/my_suit = H.wear_suit
|
||||
my_suit.attach_badge(badge)
|
||||
|
||||
/datum/job/hos/proc/YogsPubbyChanges()
|
||||
base_access |= ACCESS_CREMATORIUM
|
||||
|
||||
/datum/outfit/job/hos
|
||||
name = "Head of Security"
|
||||
jobtype = /datum/job/hos
|
||||
|
||||
@@ -37,8 +37,10 @@
|
||||
QDEL_LIST(surgeries)
|
||||
return ..()
|
||||
|
||||
/mob/living/onZImpact(turf/T, levels)
|
||||
ZImpactDamage(T, levels)
|
||||
/mob/living/onZImpact(turf/impacted_turf, levels, impact_flags = NONE)
|
||||
if(!isgroundlessturf(impacted_turf))
|
||||
impact_flags |= ZImpactDamage(impacted_turf, levels)
|
||||
|
||||
return ..()
|
||||
|
||||
/mob/living/proc/ZImpactDamage(turf/T, levels)
|
||||
|
||||
@@ -150,3 +150,5 @@
|
||||
var/usable_hands = 2
|
||||
/// What our current gravity state is. Used to avoid duplicate animates and such
|
||||
var/gravity_state = null
|
||||
/// Is the mob looking vertically
|
||||
var/looking_vertically = FALSE
|
||||
|
||||
@@ -238,7 +238,7 @@ GLOBAL_LIST_EMPTY(ai_networking_machines)
|
||||
if(target_label == label)
|
||||
return
|
||||
for(var/obj/machinery/ai/networking/N in GLOB.ai_networking_machines)
|
||||
if(N.z != src.z)
|
||||
if(!is_station_level(N.z) && !is_station_level(src.z) && N.z != src.z) //non-station levels can only connect to their own z level
|
||||
return
|
||||
if(N.label == target_label)
|
||||
if(N.locked)
|
||||
|
||||
@@ -676,27 +676,32 @@ Pass a positive integer as an argument to override a bot's default speed.
|
||||
|
||||
/mob/living/simple_animal/bot/proc/get_next_patrol_target()
|
||||
// search the beacon list for the next target in the list.
|
||||
for(var/obj/machinery/navbeacon/NB in GLOB.navbeacons["[z]"])
|
||||
if(NB.location == next_destination) //Does the Beacon location text match the destination?
|
||||
destination = new_destination //We now know the name of where we want to go.
|
||||
patrol_target = NB.loc //Get its location and set it as the target.
|
||||
next_destination = NB.codes["next_patrol"] //Also get the name of the next beacon in line.
|
||||
return TRUE
|
||||
var/list/connected_levels = SSmapping.get_connected_levels(z)
|
||||
for(var/level in connected_levels)
|
||||
for(var/obj/machinery/navbeacon/NB in GLOB.navbeacons["[level]"])
|
||||
if(NB.location == next_destination) //Does the Beacon location text match the destination?
|
||||
destination = new_destination //We now know the name of where we want to go.
|
||||
patrol_target = NB.loc //Get its location and set it as the target.
|
||||
next_destination = NB.codes["next_patrol"] //Also get the name of the next beacon in line.
|
||||
return TRUE
|
||||
|
||||
/mob/living/simple_animal/bot/proc/find_nearest_beacon()
|
||||
for(var/obj/machinery/navbeacon/NB in GLOB.navbeacons["[z]"])
|
||||
var/dist = get_dist(src, NB)
|
||||
if(nearest_beacon) //Loop though the beacon net to find the true closest beacon.
|
||||
//Ignore the beacon if were are located on it.
|
||||
if(dist>1 && dist<get_dist(src,nearest_beacon_loc))
|
||||
var/list/connected_levels = SSmapping.get_connected_levels(z)
|
||||
for(var/level in connected_levels)
|
||||
for(var/obj/machinery/navbeacon/NB in GLOB.navbeacons["[level]"])
|
||||
|
||||
var/dist = get_dist(src, NB)
|
||||
if(nearest_beacon) //Loop though the beacon net to find the true closest beacon.
|
||||
//Ignore the beacon if were are located on it.
|
||||
if(dist>1 && dist<get_dist(src,nearest_beacon_loc))
|
||||
nearest_beacon = NB.location
|
||||
nearest_beacon_loc = NB.loc
|
||||
next_destination = NB.codes["next_patrol"]
|
||||
else
|
||||
continue
|
||||
else if(dist > 1) //Begin the search, save this one for comparison on the next loop.
|
||||
nearest_beacon = NB.location
|
||||
nearest_beacon_loc = NB.loc
|
||||
next_destination = NB.codes["next_patrol"]
|
||||
else
|
||||
continue
|
||||
else if(dist > 1) //Begin the search, save this one for comparison on the next loop.
|
||||
nearest_beacon = NB.location
|
||||
nearest_beacon_loc = NB.loc
|
||||
patrol_target = nearest_beacon_loc
|
||||
destination = nearest_beacon
|
||||
|
||||
|
||||
@@ -1377,3 +1377,134 @@
|
||||
/mob/setMovetype(newval)
|
||||
. = ..()
|
||||
update_movespeed(FALSE)
|
||||
|
||||
//I am looking respectfully
|
||||
|
||||
/mob/living/verb/lookup()
|
||||
set name = "Look Up"
|
||||
set category = "IC"
|
||||
|
||||
if(looking_vertically)
|
||||
end_look_up()
|
||||
else
|
||||
look_up()
|
||||
|
||||
/mob/living/verb/lookdown()
|
||||
set name = "Look Down"
|
||||
set category = "IC"
|
||||
|
||||
if(looking_vertically)
|
||||
end_look_down()
|
||||
else
|
||||
look_down()
|
||||
|
||||
/**
|
||||
* look_up Changes the perspective of the mob to any openspace turf above the mob
|
||||
*
|
||||
* This also checks if an openspace turf is above the mob before looking up or resets the perspective if already looking up
|
||||
*
|
||||
*/
|
||||
/mob/living/proc/look_up()
|
||||
if(client.perspective != MOB_PERSPECTIVE) //We are already looking up.
|
||||
stop_look_up()
|
||||
if(!can_look_up())
|
||||
return
|
||||
changeNext_move(CLICK_CD_LOOK_UP)
|
||||
RegisterSignal(src, COMSIG_MOVABLE_PRE_MOVE, PROC_REF(stop_look_up)) //We stop looking up if we move.
|
||||
RegisterSignal(src, COMSIG_MOVABLE_MOVED, PROC_REF(start_look_up)) //We start looking again after we move.
|
||||
start_look_up()
|
||||
|
||||
/mob/living/proc/start_look_up()
|
||||
SIGNAL_HANDLER
|
||||
var/turf/ceiling = get_step_multiz(src, UP)
|
||||
if(!ceiling) //We are at the highest z-level.
|
||||
if (prob(0.1))
|
||||
to_chat(src, span_warning("You gaze out into the infinite vastness of deep space, for a moment, you have the impulse to continue travelling, out there, out into the deep beyond, before your conciousness reasserts itself and you decide to stay within travelling distance of the station."))
|
||||
return
|
||||
to_chat(src, span_warning("There's nothing interesting up there."))
|
||||
return
|
||||
else if(!istransparentturf(ceiling)) //There is no turf we can look through above us
|
||||
var/turf/front_hole = get_step(ceiling, dir)
|
||||
if(istransparentturf(front_hole))
|
||||
ceiling = front_hole
|
||||
else
|
||||
for(var/turf/checkhole in TURF_NEIGHBORS(ceiling))
|
||||
if(istransparentturf(checkhole))
|
||||
ceiling = checkhole
|
||||
break
|
||||
if(!istransparentturf(ceiling))
|
||||
to_chat(src, span_warning("You can't see through the floor above you."))
|
||||
return
|
||||
|
||||
looking_vertically = TRUE
|
||||
reset_perspective(ceiling)
|
||||
|
||||
/mob/living/proc/stop_look_up()
|
||||
SIGNAL_HANDLER
|
||||
reset_perspective()
|
||||
|
||||
/mob/living/proc/end_look_up()
|
||||
stop_look_up()
|
||||
looking_vertically = FALSE
|
||||
UnregisterSignal(src, COMSIG_MOVABLE_PRE_MOVE)
|
||||
UnregisterSignal(src, COMSIG_MOVABLE_MOVED)
|
||||
|
||||
/**
|
||||
* look_down Changes the perspective of the mob to any openspace turf below the mob
|
||||
*
|
||||
* This also checks if an openspace turf is below the mob before looking down or resets the perspective if already looking up
|
||||
*
|
||||
*/
|
||||
/mob/living/proc/look_down()
|
||||
if(client.perspective != MOB_PERSPECTIVE) //We are already looking down.
|
||||
stop_look_down()
|
||||
if(!can_look_up()) //if we cant look up, we cant look down.
|
||||
return
|
||||
changeNext_move(CLICK_CD_LOOK_UP)
|
||||
RegisterSignal(src, COMSIG_MOVABLE_PRE_MOVE, PROC_REF(stop_look_down)) //We stop looking down if we move.
|
||||
RegisterSignal(src, COMSIG_MOVABLE_MOVED, PROC_REF(start_look_down)) //We start looking again after we move.
|
||||
start_look_down()
|
||||
|
||||
/mob/living/proc/start_look_down()
|
||||
SIGNAL_HANDLER
|
||||
var/turf/floor = get_turf(src)
|
||||
var/turf/lower_level = get_step_multiz(floor, DOWN)
|
||||
if(!lower_level) //We are at the lowest z-level.
|
||||
to_chat(src, span_warning("You can't see through the floor below you."))
|
||||
return
|
||||
else if(!istransparentturf(floor)) //There is no turf we can look through below us
|
||||
var/turf/front_hole = get_step(floor, dir)
|
||||
if(istransparentturf(front_hole))
|
||||
floor = front_hole
|
||||
lower_level = get_step_multiz(front_hole, DOWN)
|
||||
else
|
||||
// Try to find a hole near us
|
||||
for(var/turf/checkhole in TURF_NEIGHBORS(floor))
|
||||
if(istransparentturf(checkhole))
|
||||
floor = checkhole
|
||||
lower_level = get_step_multiz(checkhole, DOWN)
|
||||
break
|
||||
if(!istransparentturf(floor))
|
||||
to_chat(src, span_warning("You can't see through the floor below you."))
|
||||
return
|
||||
|
||||
looking_vertically = TRUE
|
||||
reset_perspective(lower_level)
|
||||
|
||||
/mob/living/proc/stop_look_down()
|
||||
SIGNAL_HANDLER
|
||||
reset_perspective()
|
||||
|
||||
/mob/living/proc/end_look_down()
|
||||
stop_look_down()
|
||||
looking_vertically = FALSE
|
||||
UnregisterSignal(src, COMSIG_MOVABLE_PRE_MOVE)
|
||||
UnregisterSignal(src, COMSIG_MOVABLE_MOVED)
|
||||
|
||||
///Checks if the user is incapacitated or on cooldown.
|
||||
/mob/living/proc/can_look_up()
|
||||
if(next_move > world.time)
|
||||
return FALSE
|
||||
if(incapacitated(ignore_restraints = TRUE))
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
@@ -525,9 +525,16 @@
|
||||
else
|
||||
to_chat(src, span_warning("You are not Superman."))
|
||||
return
|
||||
|
||||
if(zMove(UP, z_move_flags = ZMOVE_FLIGHT_FLAGS|ZMOVE_FEEDBACK|ventcrawling_flag))
|
||||
to_chat(src, span_notice("You move upwards."))
|
||||
balloon_alert(src, "moving up...")
|
||||
var/move_time = isobserver(src) ? 0 : 1 SECONDS
|
||||
if(hud_used?.move_up && move_time)
|
||||
hud_used.move_up.icon_state = "move_up_using"
|
||||
if(do_after(src, move_time))
|
||||
if(zMove(UP, z_move_flags = ZMOVE_FLIGHT_FLAGS|ZMOVE_FEEDBACK|ventcrawling_flag))
|
||||
to_chat(src, span_notice("You move upwards."))
|
||||
if(hud_used?.move_up)
|
||||
hud_used.move_up.icon_state = initial(hud_used.move_up.icon_state)
|
||||
|
||||
|
||||
///Moves a mob down a z level
|
||||
/mob/verb/down()
|
||||
@@ -549,10 +556,15 @@
|
||||
return loc_atom.relaymove(src, DOWN)
|
||||
|
||||
var/ventcrawling_flag = HAS_TRAIT(src, TRAIT_MOVE_VENTCRAWLING) ? ZMOVE_VENTCRAWLING : 0
|
||||
|
||||
if(zMove(DOWN, z_move_flags = ZMOVE_FLIGHT_FLAGS|ZMOVE_FEEDBACK|ventcrawling_flag))
|
||||
to_chat(src, span_notice("You move down."))
|
||||
return FALSE
|
||||
balloon_alert(src, "moving down...")
|
||||
var/move_time = isobserver(src) ? 0 : 1 SECONDS
|
||||
if(hud_used?.move_down && move_time)
|
||||
hud_used.move_down.icon_state = "move_down_using"
|
||||
if(do_after(src, move_time))
|
||||
if(zMove(DOWN, z_move_flags = ZMOVE_FLIGHT_FLAGS|ZMOVE_FEEDBACK|ventcrawling_flag))
|
||||
to_chat(src, span_notice("You move down."))
|
||||
if(hud_used?.move_down)
|
||||
hud_used.move_down.icon_state = initial(hud_used.move_down.icon_state)
|
||||
|
||||
/mob/abstract_move(atom/destination)
|
||||
var/turf/new_turf = get_turf(destination)
|
||||
|
||||
@@ -40,6 +40,11 @@ map donutstation
|
||||
votable
|
||||
endmap
|
||||
|
||||
map ministation
|
||||
maxplayers 30
|
||||
votable
|
||||
endmap
|
||||
|
||||
# Debug-only maps.
|
||||
|
||||
map multiz_debug
|
||||
|
||||
|
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 7.1 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.4 KiB |
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 6.0 KiB |
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 20 KiB |
@@ -1649,6 +1649,7 @@
|
||||
#include "code\game\turfs\open\river.dm"
|
||||
#include "code\game\turfs\open\water.dm"
|
||||
#include "code\game\turfs\open\floor\fancy_floor.dm"
|
||||
#include "code\game\turfs\open\floor\glass.dm"
|
||||
#include "code\game\turfs\open\floor\hull.dm"
|
||||
#include "code\game\turfs\open\floor\light_floor.dm"
|
||||
#include "code\game\turfs\open\floor\mineral_floor.dm"
|
||||
|
||||
@@ -25,8 +25,6 @@
|
||||
/datum/job_department/medical,
|
||||
)
|
||||
|
||||
changed_maps = list("GaxStation")
|
||||
|
||||
mail_goodies = list(
|
||||
/obj/item/storage/box/hug = 30,
|
||||
/obj/item/storage/pill_bottle/mannitol = 25,
|
||||
|
||||
|
Before Width: | Height: | Size: 847 B After Width: | Height: | Size: 1.1 KiB |