Merge branch 'master' into content-stuff

This commit is contained in:
Mosley
2024-10-24 15:21:03 -05:00
36 changed files with 273242 additions and 61 deletions

View File

@@ -9,18 +9,18 @@ on:
- upstream-merge
jobs:
run_linters:
if: "!contains(github.event.head_commit.message, '[ci skip]')"
if: ( !contains(github.event.head_commit.message, '[ci skip]') )
name: Run Linters
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4
- name: Restore SpacemanDMM cache
uses: actions/cache@v2
uses: actions/cache@v4
with:
path: ~/SpacemanDMM
key: ${{ runner.os }}-spacemandmm-${{ secrets.CACHE_PURGE_KEY }}
- name: Restore Yarn cache
uses: actions/cache@v2
uses: actions/cache@v4
with:
path: tgui/.yarn/cache
key: ${{ runner.os }}-yarn-${{ secrets.CACHE_PURGE_KEY }}-${{ hashFiles('tgui/yarn.lock') }}
@@ -30,7 +30,7 @@ jobs:
${{ runner.os }}-
- name: Install Tools
run: |
pip3 install setuptools
pip3 install setuptools --upgrade
bash tools/ci/install_node.sh
bash tools/ci/install_spaceman_dmm.sh dreamchecker
tools/bootstrap/python -c ''
@@ -52,13 +52,13 @@ jobs:
outputFile: output-annotations.txt
compile_all_maps:
if: "!contains(github.event.head_commit.message, '[ci skip]')"
if: ( !contains(github.event.head_commit.message, '[ci skip]') )
name: Compile Maps
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Restore BYOND cache
uses: actions/cache@v3
uses: actions/cache@v4
with:
path: ~/BYOND
key: ${{ runner.os }}-byond-${{ secrets.CACHE_PURGE_KEY }}
@@ -67,9 +67,8 @@ jobs:
bash tools/ci/install_byond.sh
source $HOME/BYOND/byond/bin/byondsetup
tools/build/build --ci dm -DCIBUILDING -DCITESTING -DALL_MAPS
run_all_tests:
if: "!contains(github.event.head_commit.message, '[ci skip]')"
if: ( !contains(github.event.head_commit.message, '[ci skip]') )
name: Integration Tests
runs-on: ubuntu-22.04
services:
@@ -81,14 +80,14 @@ jobs:
- 3306
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Restore BYOND cache
uses: actions/cache@v3
uses: actions/cache@v4
with:
path: ~/BYOND
key: ${{ runner.os }}-byond-${{ secrets.CACHE_PURGE_KEY }}
- name: Restore Yarn cache
uses: actions/cache@v3
uses: actions/cache@v4
with:
path: tgui/.yarn/cache
key: ${{ runner.os }}-yarn-${{ secrets.CACHE_PURGE_KEY }}-${{ hashFiles('tgui/yarn.lock') }}
@@ -116,15 +115,14 @@ jobs:
source $HOME/BYOND/byond/bin/byondsetup
tools/build/build --ci -DCIBUILDING
bash tools/ci/run_server.sh
test_windows:
if: "!contains(github.event.head_commit.message, '[ci skip]')"
if: ( !contains(github.event.head_commit.message, '[ci skip]') )
name: Windows Build
runs-on: windows-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Restore Yarn cache
uses: actions/cache@v3
uses: actions/cache@v4
with:
path: tgui/.yarn/cache
key: ${{ runner.os }}-yarn-${{ secrets.CACHE_PURGE_KEY }}-${{ hashFiles('tgui/yarn.lock') }}
@@ -141,7 +139,7 @@ jobs:
md deploy
bash tools/deploy.sh ./deploy
- name: Deploy artifact
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: deploy
path: deploy

View File

@@ -8,9 +8,9 @@ jobs:
if: "!contains(github.event.head_commit.message, '[ci skip]')"
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Setup cache
uses: actions/cache@v3
uses: actions/cache@v4
with:
path: ~/SpacemanDMM
key: ${{ runner.os }}-spacemandmm-${{ secrets.CACHE_PURGE_KEY }}

View File

@@ -11,7 +11,7 @@ jobs:
name: Update the TGS DMAPI
steps:
- name: Clone
uses: actions/checkout@v3
uses: actions/checkout@v4
- name: Branch
run: |

1
_maps/4nalstation.dm Normal file
View File

@@ -0,0 +1 @@
#define FORCE_MAP "_maps/4nalstation.json"

30
_maps/4nalstation.json Normal file
View File

@@ -0,0 +1,30 @@
{
"version": 1,
"map_name": "4Nal Station",
"map_path": "splurt_maps/map_files/4Nalstation",
"map_file": "4NaL_Station.dmm",
"shuttles": {
"cargo": "cargo_box",
"ferry": "ferry_fancy",
"whiteship": "whiteship_fournal",
"emergency": "emergency_fournal"
},
"traits": [
{
"Up": 1,
"Baseturf": "/turf/open/openspace",
"Linkage": "Cross"
},
{
"Up": 1,
"Down": -1,
"Baseturf": "/turf/open/openspace",
"Linkage": "Cross"
},
{
"Down": -1,
"Baseturf": "/turf/open/openspace",
"Linkage": "Cross"
}
]
}

View File

@@ -18,6 +18,7 @@
#include "map_files\SyndicateStation\SyndicateBoxStation.dmm"
#include "splurt_maps\map_files\Smexistation\Snaxi_Splurt.dmm"
#include "map_files\BoxedInStation\BoxedInStation.dmm"
#include "splurt_maps\map_files\4Nalstation\4Nal_station.dmm"
#ifdef CIBUILDING
#include "templates.dm"

View File

@@ -0,0 +1,500 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/template_noop,
/area/template_noop)
"b" = (
/obj/machinery/light/small,
/obj/structure/closet/emcloset,
/turf/open/floor/oldshuttle,
/area/shuttle/arrival)
"e" = (
/obj/structure/chair/comfy/shuttle,
/turf/open/floor/oldshuttle,
/area/shuttle/arrival)
"f" = (
/obj/structure/window/shuttle,
/turf/open/floor/oldshuttle,
/area/shuttle/arrival)
"g" = (
/obj/structure/chair/comfy/shuttle{
dir = 4
},
/turf/open/floor/oldshuttle,
/area/shuttle/arrival)
"h" = (
/obj/machinery/requests_console{
department = "Arrival shuttle";
name = "Arrivals Shuttle console"
},
/turf/closed/wall/mineral/titanium,
/area/shuttle/arrival)
"i" = (
/obj/docking_port/mobile/arrivals{
dir = 1;
dwidth = 1;
height = 32;
name = "fournal arrivals shuttle";
width = 9
},
/obj/structure/shuttle/engine/propulsion,
/turf/open/space/basic,
/area/shuttle/arrival)
"j" = (
/obj/machinery/computer{
dir = 4;
name = "Shuttle computer"
},
/turf/open/floor/oldshuttle,
/area/shuttle/arrival)
"k" = (
/obj/machinery/computer{
dir = 8;
name = "Shuttle computer"
},
/turf/open/floor/oldshuttle,
/area/shuttle/arrival)
"m" = (
/turf/closed/wall/mineral/titanium,
/area/shuttle/arrival)
"n" = (
/obj/structure/closet/wardrobe/white,
/turf/open/floor/oldshuttle,
/area/shuttle/arrival)
"o" = (
/obj/machinery/door/airlock/shuttle{
name = "Arrival Shuttle Airlock"
},
/obj/structure/fans/tiny,
/turf/open/floor/oldshuttle,
/area/shuttle/arrival)
"p" = (
/obj/machinery/light/small,
/obj/item/kirbyplants{
icon_state = "plant-10"
},
/turf/open/floor/oldshuttle,
/area/shuttle/arrival)
"r" = (
/obj/structure/chair/comfy/shuttle{
dir = 1
},
/turf/open/floor/oldshuttle,
/area/shuttle/arrival)
"u" = (
/obj/machinery/holopad,
/turf/open/floor/oldshuttle,
/area/shuttle/arrival)
"v" = (
/obj/effect/spawner/structure/window/shuttle,
/obj/structure/grille,
/turf/open/floor/oldshuttle,
/area/shuttle/arrival)
"x" = (
/obj/structure/closet/wardrobe/mixed,
/turf/open/floor/oldshuttle,
/area/shuttle/arrival)
"y" = (
/obj/machinery/door/airlock/shuttle{
name = "Arrival Shuttle Airlock"
},
/turf/open/floor/oldshuttle,
/area/shuttle/arrival)
"z" = (
/turf/open/floor/oldshuttle,
/area/shuttle/arrival)
"A" = (
/obj/machinery/status_display/evac,
/turf/closed/wall/mineral/titanium,
/area/shuttle/arrival)
"B" = (
/obj/structure/chair/comfy/shuttle{
dir = 8
},
/obj/machinery/light{
dir = 4
},
/turf/open/floor/oldshuttle,
/area/shuttle/arrival)
"F" = (
/obj/structure/shuttle/engine/heater,
/turf/closed/wall/mineral/titanium,
/area/shuttle/arrival)
"G" = (
/obj/structure/extinguisher_cabinet{
pixel_x = 26
},
/turf/open/floor/oldshuttle,
/area/shuttle/arrival)
"I" = (
/obj/structure/shuttle/engine/propulsion,
/turf/open/space/basic,
/area/shuttle/arrival)
"J" = (
/obj/machinery/computer{
dir = 2;
name = "Shuttle computer"
},
/turf/open/floor/oldshuttle,
/area/shuttle/arrival)
"M" = (
/obj/structure/chair/comfy/shuttle{
desc = "A comfortable looking seat that's clearly an upgrade for a Captain.";
dir = 1;
name = "Captain's Chair"
},
/turf/open/floor/oldshuttle,
/area/shuttle/arrival)
"N" = (
/obj/structure/chair/comfy/shuttle{
dir = 8
},
/turf/open/floor/oldshuttle,
/area/shuttle/arrival)
"Q" = (
/obj/machinery/vending/wallmed{
name = "Emergency NanoMed";
use_power = 0
},
/turf/closed/wall/mineral/titanium,
/area/shuttle/arrival)
"R" = (
/obj/structure/closet/emcloset,
/turf/open/floor/oldshuttle,
/area/shuttle/arrival)
"T" = (
/obj/structure/table/reinforced,
/obj/item/storage/secure/briefcase{
pixel_x = -2;
pixel_y = 4
},
/obj/item/storage/toolbox/emergency,
/obj/machinery/light{
dir = 8
},
/turf/open/floor/oldshuttle,
/area/shuttle/arrival)
"U" = (
/obj/machinery/status_display/ai,
/turf/closed/wall/mineral/titanium,
/area/shuttle/arrival)
"V" = (
/obj/structure/table/reinforced,
/obj/item/storage/dice,
/obj/machinery/light{
dir = 8
},
/turf/open/floor/oldshuttle,
/area/shuttle/arrival)
"X" = (
/obj/structure/extinguisher_cabinet{
pixel_x = -25
},
/turf/open/floor/oldshuttle,
/area/shuttle/arrival)
(1,1,1) = {"
a
a
a
a
a
m
m
m
m
m
m
a
a
a
a
a
a
m
m
m
a
a
a
a
a
a
a
a
a
a
a
a
"}
(2,1,1) = {"
a
a
m
m
m
m
V
g
g
T
m
m
a
a
a
a
m
m
m
m
m
a
a
a
a
a
a
a
a
a
F
i
"}
(3,1,1) = {"
a
v
m
b
Q
X
z
z
z
z
r
m
m
a
m
m
m
m
a
a
m
m
a
a
a
a
a
a
a
m
F
I
"}
(4,1,1) = {"
v
v
j
z
A
z
N
N
N
z
z
x
m
m
m
m
m
a
a
a
m
m
a
a
a
a
a
a
m
F
I
a
"}
(5,1,1) = {"
v
J
M
z
y
z
f
f
f
e
u
z
R
m
m
a
a
a
a
a
a
m
m
a
a
a
a
a
F
I
a
a
"}
(6,1,1) = {"
v
v
k
z
U
z
g
g
g
z
z
n
m
m
a
a
a
a
a
a
a
m
m
a
a
a
a
m
m
a
a
a
"}
(7,1,1) = {"
a
v
m
p
h
G
z
z
z
z
r
m
m
a
a
a
a
a
a
a
a
a
m
m
m
a
m
m
a
a
a
a
"}
(8,1,1) = {"
a
a
m
m
m
m
B
z
z
B
m
m
a
a
a
a
a
a
a
a
a
a
a
m
m
m
m
a
a
a
a
a
"}
(9,1,1) = {"
a
a
a
a
a
m
m
o
o
m
m
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
"}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -91,7 +91,11 @@
. = 1
//Please don't roast me too hard
//Oh don't worry, We Will.
/client/MouseMove(object, location, control, params)
if(!COOLDOWN_FINISHED(src, next_mousemove))
return
COOLDOWN_START(src, next_mousemove, 0) //COOLDOWN_FINISHED() sees the world tick and cooldown timer being equal as a state wherein the cooldown has not finished. So the cooldown timer here is 0 to throttle only for the rest of the tick.
mouseParams = params
mouse_location_ref = WEAKREF(location)
mouse_object_ref = WEAKREF(object)
@@ -105,6 +109,9 @@
..()
/client/MouseDrag(src_object,atom/over_object,src_location,over_location,src_control,over_control,params)
if(!COOLDOWN_FINISHED(src, next_mousedrag))
return
COOLDOWN_START(src, next_mousedrag, 0) //See comment in MouseMove() for why this is 0.
mouseParams = params
mouse_location_ref = WEAKREF(over_location)
mouse_object_ref = WEAKREF(over_object)

View File

@@ -348,5 +348,7 @@
/datum/config_entry/str_list/randomizing_station_name_message
default = list()
/datum/config_entry/flag/toast_notification_on_init
/// Gives the ability to send players a maptext popup.
/datum/config_entry/flag/popup_admin_pm

View File

@@ -223,6 +223,10 @@ GLOBAL_REAL(Master, /datum/controller/master) = new
// Sort subsystems by display setting for easy access.
sortTim(subsystems, GLOBAL_PROC_REF(cmp_subsystem_display))
if(world.system_type == MS_WINDOWS && CONFIG_GET(flag/toast_notification_on_init) && !length(GLOB.clients))
world.shelleo("start /min powershell -ExecutionPolicy Bypass -File tools/initToast/initToast.ps1 -name \"[world.name]\" -icon %CD%\\icons\\ui_icons\\common\\tg_16.png -port [world.port]")
// Set world options.
world.change_fps(CONFIG_GET(number/fps))
var/initialized_tod = REALTIMEOFDAY

View File

@@ -668,6 +668,7 @@ RLD
icon_state = "arcd"
item_state = "oldrcd"
has_ammobar = FALSE
upgrade = TRUE
// RAPID LIGHTING DEVICE

View File

@@ -6,10 +6,12 @@
can_unwrench = TRUE
construction_type = /obj/item/pipe/binary
interaction_flags_machine = INTERACT_MACHINE_OFFLINE | INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON | INTERACT_MACHINE_SET_MACHINE
pipe_state = "relief_valve-t"
shift_underlay_only = FALSE
var/opened = FALSE
var/open_pressure = ONE_ATMOSPHERE * 3
var/close_pressure = ONE_ATMOSPHERE
pipe_state = "relief_valve-t"
/obj/machinery/atmospherics/components/binary/relief_valve/layer1
piping_layer = PIPING_LAYER_MIN

View File

@@ -24,11 +24,13 @@
return ..()
/obj/machinery/atmospherics/components/unary/portables_connector/update_icon_nopipes()
icon_state = "connector"
cut_overlays()
if(showpipe)
var/image/cap = getpipeimage(icon, "connector_cap", initialize_directions, piping_layer = piping_layer)
add_overlay(cap)
icon_state = "connector"
/obj/machinery/atmospherics/components/unary/portables_connector/process_atmos()
if(!connected_device)
return
@@ -37,7 +39,7 @@
/obj/machinery/atmospherics/components/unary/portables_connector/can_unwrench(mob/user)
. = ..()
if(. && connected_device)
to_chat(user, "<span class='warning'>You cannot unwrench [src], detach [connected_device] first!</span>")
to_chat(user, span_warning("You cannot unwrench [src], detach [connected_device] first!"))
return FALSE
/obj/machinery/atmospherics/components/unary/portables_connector/portableConnectorReturnAir()

View File

@@ -189,3 +189,7 @@
/// AFK tracking
var/last_activity = 0
/// The next point in time at which the client is allowed to send a mousemove() or mousedrag()
COOLDOWN_DECLARE(next_mousemove)
COOLDOWN_DECLARE(next_mousedrag)

View File

@@ -356,7 +356,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
///loadout stuff
var/gear_points = 10
var/list/gear_categories
var/list/loadout_data = list()
var/list/loadout_data
var/list/unlockable_loadout_data = list()
var/loadout_slot = 1 //goes from 1 to MAXIMUM_LOADOUT_SAVES
var/gear_category
@@ -533,7 +533,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
//calculate your gear points from the chosen item
gear_points = CONFIG_GET(number/initial_gear_points)
var/list/chosen_gear = loadout_data["SAVE_[loadout_slot]"]
if(chosen_gear)
if(islist(chosen_gear))
loadout_errors = 0
for(var/loadout_item in chosen_gear)
var/loadout_item_path = loadout_item[LOADOUT_ITEM]
@@ -1229,6 +1229,11 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "</tr></table>"
if(LOADOUT_CHAR_TAB)
dat += "<table align='center' width='100%'>"
dat += "<tr><td colspan=4><center><b>Loadout slot</b></center></td></tr>"
dat += "<tr><td colspan=4><center>"
for(var/iteration in 1 to MAXIMUM_LOADOUT_SAVES)
dat += "<a [loadout_slot == iteration ? "class='linkOn'" : "href='?_src_=prefs;preference=gear;select_slot=[iteration]'"]>[iteration]</a>"
dat += "</center></td></tr>"
dat += "<tr><td colspan=4><center><i style=\"color: grey;\">You can only choose one item per category, unless it's an item that spawns in your backpack or hands.</center></td></tr>"
dat += "<tr><td colspan=4><center><b>"
@@ -4148,6 +4153,14 @@ GLOBAL_LIST_EMPTY(preferences_datums)
qdel(offer_datum)
if(href_list["preference"] == "gear")
if(href_list["select_slot"])
var/chosen = text2num(href_list["select_slot"])
if(!chosen)
return
chosen = floor(chosen)
if(chosen > MAXIMUM_LOADOUT_SAVES || chosen < 1)
return
loadout_slot = chosen
if(href_list["clear_loadout"])
loadout_data["SAVE_[loadout_slot]"] = list()
save_preferences()

View File

@@ -1122,7 +1122,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
belly_prefs = json_from_file["belly_prefs"]
//gear loadout
if(S["loadout"])
if(istext(S["loadout"]))
loadout_data = safe_json_decode(S["loadout"])
var/list/sanitize_current_slot = loadout_data["SAVE_[loadout_slot]"]
if(LAZYLEN(sanitize_current_slot))
@@ -1150,6 +1150,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
loadout_data["SAVE_[loadout_slot]"] = list()
else
loadout_data = list()
//let's remember their last used slot, i'm sure "oops i brought the wrong stuff" will be an issue now
S["loadout_slot"] >> loadout_slot
//try to fix any outdated data if necessary
//preference updating will handle saving the updated data for us.
@@ -1384,6 +1386,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
S["pregnancy_inflation"] >> pregnancy_inflation
S["pregnancy_breast_growth"] >> pregnancy_breast_growth
//SPLURT EDIT END
loadout_slot = sanitize_num_clamp(loadout_slot, 1, MAXIMUM_LOADOUT_SAVES, 1, TRUE)
cit_character_pref_load(S)
@@ -1628,10 +1632,11 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
//SPLURT EDIT END
//gear loadout
if(length(loadout_data))
if(islist(loadout_data))
S["loadout"] << safe_json_encode(loadout_data)
else
S["loadout"] << safe_json_encode(list())
WRITE_FILE(S["loadout_slot"], loadout_slot)
if(length(tcg_cards))
S["tcg_cards"] << safe_json_encode(tcg_cards)

View File

@@ -13,28 +13,40 @@
. = ..()
AddComponent(/datum/component/plumbing/simple_supply, bolt)
/obj/machinery/plumbing/grinder_chemical/can_be_rotated(mob/user,rotation_type)
/obj/machinery/plumbing/grinder_chemical/examine(mob/user)
. = ..()
. += span_notice("The input direction for this item can be rotated by using CTRL+SHIFT+CLICK")
/obj/machinery/plumbing/grinder_chemical/CtrlShiftClick(mob/user)
if(anchored)
to_chat(user, "<span class='warning'>It is fastened to the floor!</span>")
return FALSE
switch(eat_dir)
if(WEST)
balloon_alert(user, "set to north")
eat_dir = NORTH
return TRUE
if(EAST)
balloon_alert(user, "set to south")
eat_dir = SOUTH
return TRUE
if(NORTH)
balloon_alert(user, "set to east")
eat_dir = EAST
return TRUE
if(SOUTH)
balloon_alert(user, "set to west")
eat_dir = WEST
return TRUE
return TRUE
/obj/machinery/plumbing/grinder_chemical/CanAllowThrough(atom/movable/AM)
. = ..()
if(!anchored)
return
var/move_dir = get_dir(loc, AM.loc)
if(move_dir == eat_dir)
return TRUE
@@ -61,4 +73,8 @@
return
I.on_grind()
reagents.add_reagent_list(I.grind_results)
if(I.reagents) //If the thing has any reagents inside of it, grind them up.
I.reagents.trans_to(reagents, I.reagents.total_volume)
qdel(I)

View File

@@ -307,7 +307,7 @@
dwidth = 11
height = 22
width = 35
shuttlekeys = list("whiteship_meta", "whiteship_pubby", "whiteship_box", "whiteship_cere", "whiteship_kilo", "whiteship_donut", "whiteship_delta")
shuttlekeys = list("whiteship_meta", "whiteship_pubby", "whiteship_box", "whiteship_cere", "whiteship_kilo", "whiteship_donut", "whiteship_delta", "whiteship_fournal")
/obj/docking_port/stationary/picked
///Holds a list of map name strings for the port to pick from
@@ -329,7 +329,7 @@
dwidth = 11
height = 22
width = 35
shuttlekeys = list("whiteship_meta", "whiteship_pubby", "whiteship_box", "whiteship_cere", "whiteship_kilo", "whiteship_donut", "whiteship_delta")
shuttlekeys = list("whiteship_meta", "whiteship_pubby", "whiteship_box", "whiteship_cere", "whiteship_kilo", "whiteship_donut", "whiteship_delta", "whiteship_fournal")
/obj/docking_port/mobile
name = "shuttle"

View File

@@ -543,3 +543,7 @@ RANDOMIZING_STATION_NAME_MESSAGE %NEW_STATION_NAME%? %NEW_STATION_NAME%! %NEW_ST
RANDOMIZING_STATION_NAME_MESSAGE A popular social network application had already claimed the trademark of %CURRENT_STATION_NAME%, the station has been renamed to %NEW_STATION_NAME%.
RANDOMIZING_STATION_NAME_MESSAGE We're pulling a prank on %RANDOM_CREWMEMBER%, so we've changed the station's name to %NEW_STATION_NAME%.
RANDOMIZING_STATION_NAME_MESSAGE %RANDOM_NAME% made us change the station name, which is now %NEW_STATION_NAME%.
## Comment to disable sending a toast notification on the host server when initializations complete.
## Even if this is enabled, a notification will only be sent if there are no clients connected.
TOAST_NOTIFICATION_ON_INIT

View File

@@ -8,14 +8,15 @@ export BYOND_MAJOR=515
export BYOND_MINOR=1634
#rust_g git tag
export RUST_G_VERSION=3.0.0
export RUST_G_VERSION=3.3.0
#node version
export NODE_VERSION=16
export NODE_VERSION_PRECISE=16.13.1
export NODE_VERSION_LTS=20.13.0
# compatiblility mode MUST work with windows 7
export NODE_VERSION_COMPAT=20.2.0
# SpacemanDMM git tag
export SPACEMAN_DMM_VERSION=suite-1.8
export SPACEMAN_DMM_VERSION=suite-1.9
# Python version for mapmerge and other tools
export PYTHON_VERSION=3.9.0

View File

@@ -17,3 +17,8 @@
2024-10-16:
cyfause:
- bugfix: allow facial hair on anthromorph species
2024-10-24:
Sara:
- rscadd: Added a full new station.
- rscadd: Added new shuttles, arrival, escape, and whiteship.
- rscadd: Added new lore page for the station.

Binary file not shown.

After

Width:  |  Height:  |  Size: 795 B

View File

@@ -12,3 +12,18 @@
description = "An evacuation ship formerly used by NT SOCOM Divisions, it's long since been outclassed, de-milled, and cast aside as an evacuation ship for when a shuttle is in very, very plausible danger. It's not the best, but almost nothing can make it worse."
credit_cost = 7500
admin_notes = "Built with a lot of fans and RWalls to resist bombing and atmospheric attacks. Might be a bit large for certain stations."
/datum/map_template/shuttle/arrival/fournal
suffix = "fournal"
name = "arrival shuttle (fournal)"
/datum/map_template/shuttle/whiteship/fournal
suffix = "fournal"
name = "KnotTailus"
/datum/map_template/shuttle/emergency/fournal
suffix = "fournal"
name = "The DreadKnotted"
description = "Cere's taller but lankier cousin, this is more an art peice included when we got our advanced location, big, 'stylish', and well stocked."
admin_notes = "Seriously big, even larger than the Delta shuttle, and probably will get a few groans."
credit_cost = 10000

View File

@@ -9,3 +9,11 @@
/area/engineering/break_room/atmos
name = "Atmospherics Break Room"
/area/ruin/powered/ylva
name = "Tower of Ylva"
icon_state = "purple"
/area/ruin/unpowered/ylvaturf
name = "Ylva Outskirts"
icon_state = "spacecontent26"

View File

@@ -0,0 +1,9 @@
/turf/open/floor/plasteel/dark/texcorner
icon = 'modular_splurt/icons/turf/floors.dmi'
icon_state = "textured_darkcorner"
base_icon_state = "textured_darkcorner"
/turf/open/floor/plasteel/hallway
icon = 'icons/turf/floors.dmi'
icon_state = "hallway_floor"
base_icon_state = "hallway_floor"

View File

@@ -0,0 +1,22 @@
/obj/item/paper/fluff/instaloss_regret
name = "Semen and femcum stained note"
info = {""<b>—3rd—</b>
I finally got all the materials together, had to steal most of them from that witch everyone loves, but I did. Today's the day that I perform my first summoning. I think I will go for a low-class cubus, probably of the suc variety, after all a sexy, busty lady such as I can't be tempted by a lowly whore!
<br><br>
<b>—7th—</b>
I was wrong... It appears using that witch's reagents changed the result, something obvious in hindsight... along with assuming that I could control a cubus... I ended up calling a hellhound cubus, it finally left a few hours ago, but with the swell of my belly and the leak of my breast I fear it left a gift... I dare not leave this room for now, as my reputation would be ruined, I'll just let this pass... at least their type seem to gestate fast.
<br><br>
<b>—26th—</b>
He's back, come for his child like any caring father, and seems to be here for me as well, I'm not even sure I want to resist, my knees shake, my heart quickens, and I go slicker than snowmelt in his presence..."
<br>
<br><br>
Most of the rest of the note is illegible, smeared ink, off-white stains, and worse smudge it. On the back remains a single note in a different script, seemingly burned in with exactness rather than inked.
<br><br>
'I will help you, you bratty child, even if I believe you deserve such a fate for stealing from my poor student...
<br>
<br><br>
<i>~Ylva, Chosen of the Wilds Near and Far'</i>"}
/obj/item/paper/fluff/fournal_lore
name = "Placeholder"
info = {"Placeholder until I get time to lore"}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

@@ -4685,6 +4685,7 @@
#include "modular_splurt\code\game\turfs\simulated\chasm.dm"
#include "modular_splurt\code\game\turfs\simulated\floor\fancy_floor.dm"
#include "modular_splurt\code\game\turfs\simulated\floor\mineral_floor.dm"
#include "modular_splurt\code\game\turfs\simulated\floor\plasteel_floor.dm"
#include "modular_splurt\code\game\turfs\simulated\floor\plating\asteroid.dm"
#include "modular_splurt\code\game\turfs\simulated\wall\mineral_walls.dm"
#include "modular_splurt\code\game\turfs\simulated\wall\misc_walls.dm"
@@ -5014,6 +5015,7 @@
#include "modular_splurt\code\modules\mob\living\simple_animal\hostile\werewolves\icewolf.dm"
#include "modular_splurt\code\modules\mob\living\simple_animal\hostile\werewolves\themosley.dm"
#include "modular_splurt\code\modules\mob\living\simple_animal\hostile\werewolves\werewolf.dm"
#include "modular_splurt\code\modules\paperwork\4nal_paperwork.dm"
#include "modular_splurt\code\modules\paperwork\pen.dm"
#include "modular_splurt\code\modules\power\cell.dm"
#include "modular_splurt\code\modules\power\reactor\fluffed.dm"

View File

@@ -16,13 +16,13 @@ if [ "$TG_BOOTSTRAP_CACHE" ]; then
fi
OldPWD="$PWD"
cd "$Bootstrap/../.."
. ./dependencies.sh # sets NODE_VERSION_PRECISE
. ./dependencies.sh # sets NODE_VERSION_LTS
cd "$OldPWD"
NodeVersion="$NODE_VERSION_PRECISE"
NodeVersion="$NODE_VERSION_LTS"
NodeFullVersion="node-v$NodeVersion-win-x64"
NodeDir="$Cache/$NodeFullVersion"
NodeExe="$NodeDir/node.exe"
Log="$Cache/last-command.log"
is_vendored="1"
# If a bootstrapped Node is not present, search on $PATH.
if [ "$(uname)" = "Linux" ] || [ ! -f "$NodeExe" ]; then
@@ -39,6 +39,7 @@ if [ "$(uname)" = "Linux" ] || [ ! -f "$NodeExe" ]; then
fi
elif command -v node >/dev/null 2>&1; then
NodeExe="node"
is_vendored="0"
else
echo
if command -v apt-get >/dev/null 2>&1; then
@@ -62,23 +63,11 @@ if [ "$(uname)" = "Linux" ] || [ ! -f "$NodeExe" ]; then
fi
fi
# Cheap shell function if tee.exe is not available
if ! command -v tee >/dev/null 2>&1; then
tee() {
# Fudge: assume $1 is always "-a"
while read -r line; do
echo "$line" >> "$2"
echo "$line"
done
}
fi
# Invoke Node with all command-line arguments
mkdir -p "$Cache"
printf '%s\n' "$NodeExe" "$@" > "$Log"
printf -- '---\n' >> "$Log"
exec 4>&1
PATH="$(readlink -f "$NodeDir"):$PATH" # Set PATH so that recursive calls find it
exitstatus=$({ { set +e; "$NodeExe" "$@" 2>&1 3>&-; printf %s $? >&3; } 4>&- | tee -a "$Log" 1>&4; } 3>&1)
exec 4>&-
exit "$exitstatus"
if [ "$is_vendored" = "1" ]; then
PATH="$(readlink -f "$NodeDir"):$PATH"
echo "Using vendored Node $("$NodeExe" --version)"
else
echo "Using system-wide Node $("$NodeExe" --version)"
fi
exec "$NodeExe" "$@"

View File

@@ -29,7 +29,16 @@ $Cache = "$BaseDir\.cache"
if ($Env:TG_BOOTSTRAP_CACHE) {
$Cache = $Env:TG_BOOTSTRAP_CACHE
}
$NodeVersion = Extract-Variable -Path "$BaseDir\..\..\dependencies.sh" -Key "NODE_VERSION_PRECISE"
# Get OS version
$OSMajor = (Get-WmiObject -Class Win32_OperatingSystem).Version.Split(".")[0]
# Set Node version based on OS version
if ($OSMajor -lt 10) {
# Anything under Windows 10
$NodeVersion = Extract-Variable -Path "$BaseDir\..\..\dependencies.sh" -Key "NODE_VERSION_COMPAT"
}
else {
$NodeVersion = Extract-Variable -Path "$BaseDir\..\..\dependencies.sh" -Key "NODE_VERSION_LTS"
}
$NodeSource = "https://nodejs.org/download/release/v$NodeVersion/win-x64/node.exe"
$NodeTargetDir = "$Cache\node-v$NodeVersion-x64"
$NodeTarget = "$NodeTargetDir\node.exe"

View File

@@ -5,6 +5,6 @@ source dependencies.sh
if [[ -e ~/.nvm/nvm.sh ]]; then
source ~/.nvm/nvm.sh
nvm install $NODE_VERSION
nvm use $NODE_VERSION
nvm install $NODE_VERSION_COMPAT
nvm use $NODE_VERSION_COMPAT
fi

View File

@@ -0,0 +1,32 @@
param([string]$name, [string]$icon, [Int32]$port=80)
$hkcu = [Microsoft.Win32.RegistryKey]::OpenBaseKey('CurrentUser','default')
$amuid_hkey = $hkcu.CreateSubKey('SOFTWARE\Classes\AppUserModelId\Tgstation.Tgstation', $true, [Microsoft.Win32.RegistryOptions]::Volatile)
if ($name) { $amuid_hkey.SetValue('DisplayName', $name) }
if ($icon) { $amuid_hkey.SetValue('IconUri', $icon) }
[Windows.UI.Notifications.ToastNotificationManager, Windows.UI.Notifications, ContentType = WindowsRuntime] > $null
$notifier = [Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier('Tgstation.Tgstation')
[Windows.Data.Xml.Dom.XmlDocument, Windows.Data.Xml.Dom, ContentType = WindowsRuntime] > $null
$xml = New-Object Windows.Data.Xml.Dom.XmlDocument
$xml.LoadXml(@"
<toast>
<visual>
<binding template="ToastGeneric">
<text>Initialization Complete</text>
</binding>
</visual>
<actions>
<action content="Launch Dream Seeker" activationType="protocol" arguments="byond://127.0.0.1:$port"/>
</actions>
</toast>
"@)
[Windows.UI.Notifications.ToastNotification, Windows.UI.Notifications, ContentType = WindowsRuntime] > $null
$toast = New-Object Windows.UI.Notifications.ToastNotification $xml
$notifier.Show($toast)

View File

@@ -1,5 +1,5 @@
pygit2==1.11.1
bidict==0.22.0
bidict==0.22.1
Pillow==10.3.0
# changelogs