* I hate TGUI even if its better than what we had before
* this is why linters exist
* you need to be a Head or the Warden to get items
* does this please you linter?
* foundation
* basic interactions
* yea I can spell okay?
* linters please leave me alone
* begone debug code
* if you are dead, no interacting
* linters leave me alone
* linters are stealing my soul
* forgot to do this
* sound framework, probably wont work though
* max length, and interaction cooldowns
* message can now be a list and minor code improve
* I am a slave and linters are my master
* fix improper static reference
* add json loading/saving functionality
* default for message is now a list
* jsonize def interactions; implement requirements
* bad
* bug fix; CtrlShiftClick to interact
* minor qol fix
* fix CtrlShiftClick and remove debug code
* haha docker has security measures
* this was painful
* why are you in this branch
* begone
* bruh
* begone
Co-authored-by: Matthew <matthew@tfaluc.com>
Co-authored-by: Matthew J <GoldenKeyboard@users.noreply.github.com>
* Fixes bug with atoms (including new players!!!!) not spawned from the holodeck being deleted by it if they happened to be initialized at the same time (#57510)
About The Pull Request
Fixes#57446
yeah not my best moment, holodeck currently sets SSatoms to add every call to InitAtom() to a list and then give it back to the holodeck console (it actually goes through map_template/holodeck to do it but whatever). However it turns out atom/New() calls InitAtom too, so if an atom is created while SSatoms is still creating the list to give to the holodeck then that atom is added to the list regardless of whether or not its actually from the holodeck template.
Now theres an extra argument to InitAtom that tells it whether its spawned directly from a map template (ie, its part of the input list of uninitialized atoms that InitializeAtoms was given) or otherwise the output list that the holodeck uses is populated by calling GetAllContents on all atom/movables spawned directly from the template.
also renamed some vars in initTemplateBounds because it was hard to reason what it was doing and made it use as anything
also note that loading a map template with returns_created_atoms = TRUE will no longer track atoms that arent in the map file but are spawned directly onto a turf, currently nothing does this with the holodeck (which is the only map template that has this feature)
by the way this bug is my fault
Why It's Good For The Game
incredibly incredibly unlucky new players dont deserve to be deleted just because they didnt spawn in the holodeck
Changelog
🆑
fix: the holodeck is no longer so powerful that it can destroy anything and everything that dares to start existing while it's busy loading programs
/🆑
* Fixes bug with atoms (including new players!!!!) not spawned from the holodeck being deleted by it if they happened to be initialized at the same time
Co-authored-by: Kylerace <kylerlumpkin1@gmail.com>
* Refactors Holodeck to Use Map Templates, Again! Black Magic OOM Crashing No Longer Included (#55645)
Refactors the holodeck to use map templates instead of copy_contents_to, which every maintainer seems to have complaints about.
Fixes#41485 because the matches become part of the spawned list created by ssatoms
Fixes#54789 because the holodeck area no longer has the NO_TELEPORT flag
Fixes#55676 because the map templates cant be changed midround unlike the program copies in the centcom z level
Fixes#49318 because the holodeck no longer creates new areas like the original did
This pr also changes initTemplateBounds to be a /datum/map_template proc instead of a parsed_map proc. This was mainly so I wouldn't have to duplicate vars between map_template and parsed_map. It's also nice because there's no longer a parsed_map proc inside the map_template file, especially when it didn't need to be a parsed_map proc.
The holodeck sims wont take up space in the centcom z level any more (which allows for more possible programs in the future), and map templates are more heavily tested. This is also a chance to future proof the holodeck against bugs. Holodeck also seems more responsive. This should allow for a second custom holodeck in some future ruin as well, although that of course will not be in play for the near future because of the offstation content ban. Also I documented the fuck out of the holodeck
* Refactors Holodeck to Use Map Templates, Again! Black Magic OOM Crashing No Longer Included
Co-authored-by: Kylerace <kylerlumpkin1@gmail.com>
* The Great Radio Rework: NTNET Part 1 of many.
* Update airlock.dm
Co-authored-by: WarlockD <warlockd@gmail.com>
Co-authored-by: Gandalf2k15 <jzo123@hotmail.com>
* Initialize and LateInitialize runs correctly at round start (#54594)
I've been pulling my hair out on this one. Ever since I started my ntnet project, I could never get LateInitalize to work right. Apparently it has never worked right. How it was set up before on server start
Station map loads, Does NOT run Initialize(mapload = TRUE)
Generates space, lavaland/icebox ruins
Loads a ruin, DOES run Initialize(mapload = TRUE) EXCEPT on areas
End of mapping system
Atom system Initialized and it checks and runs Initialize(mapload = TRUE) on world
You see the issue? Initialize and by extension LateInitialize is run in blocks. Worst, LateInitialize is run on turfs FIRST in ruins BEFORE Initialize is ever run on the other atoms. While there isn't much in Area, there is map_generator so I am sure it caused some grief for map creators.
The NEW order now is
Station map loads, Does NOT run Initialize(mapload = TRUE)
Generates space, lavaland/icebox ruins
Loads a ruin, Does NOT run Initialize(mapload = TRUE)
End of mapping system
Atom system Initialized and it checks and runs Initialize(mapload = TRUE) on world
Also if you dynamicly load a map, like snowdin or such, it will Initialize all atoms at once and then run LateInitialize properly
* Initialize and LateInitialize runs correctly at round start
Co-authored-by: WarlockD <warlockd@gmail.com>
* Some shuttes rework. Allow many shuttles of one template to work at the same time. (#53993)
* add replace button to shuttle panel
load button now only load new shuttle
* shuttle teplate loads as shuttle
* new shuttle console connects to shuttle
* new navigation computer connect to shurrle
* docking_port id now unique
add count to id if id already in work
* many docks from one base tenplate
* up
* fix unregister
* up
* up
* up
* block multiple shuttle loading
* return preview button
* up id generation
* Some shuttes rework. Allow many shuttles of one template to work at the same time.
Co-authored-by: Dennok <Deneles@yandex.ru>
* Fix loading templates in new z-levels being off by one turf (#54135)
Due to how byond maps start at 1,1 and not 0,0 when loading a map that
is the same size as the world the map will start loading at 0,0 in the
world which is outside the map. load_map defaults the x and y offsets
to 1 for a reason!
Though you can load a map that is larger (257 x 257) than the world as
a band aid for issue.
* Fix loading templates in new z-levels being off by one turf.
Co-authored-by: TheChosenEvilOne <34602646+TheChosenEvilOne@users.noreply.github.com>
* Fix ruins overlapping the station and away missions increasing world size (#53558)
Changes the bounds size proc from async to not. We need to make sure
the bounds on map templates are correct before they are spawned or
weird issues can happen. Fixes#53542. Fixes#53562.
* Fix ruins overlapping the station and away missions increasing world size
Co-authored-by: Whoneedspacee <yougotreallyowned@gmail.com>
* fix meter work on un initialized pipe
* fix runtime in process_cell
whet it try to call to wrong type turf
* fix roundstart runtime in debug sungery disc
* fix return_air() runtime
Runtime in pipes.dm, line 52: Cannot read null.air
* s
* Update surgery.dm
* Update pipes.dm
* Update meter.dm
* Update LINDA_turf_tile.dm
* Disable atmos processing in outer border on load.
* Update map_template.dm
* Update map_template.dm
* Update map_template.dm
* Update pipes.dm
more runtimes for good of runtimes
* Move the preloader datum to its own file
* Prettify some of the map loader docs
* Use src rather than usr in map template verbs
* Cache parsed templates between upload and first use
* Validate map templates uploaded by admins before use
* Add href token to validation report links
* Remove duplicate initTemplateBounds method
* Move dmmRegex var to the type that actually uses it
* Keep a single, static map_loader datum
* Combine maploader into parsed_map
* Remove some redundant parameters from parsed_map/load
* Move file2text into parsed_map/New
* Narrow the scope of the map loading lock
* Remove redundant xcrdStart var
* Fix argument names in station reloader
* Move offsets from parsing to loading only
* Tidy argument handling on parsed_map/load
* Store modelCache, track nonexistent atom paths
* Use raw strings to specify the regexes
* Remove cropMap from parsed_map/New
* Don't parse maps twice when checking multi-z validity
Speeds up SSmapping init by approximately 10%.
* Bring the documentation (somewhat) up to speed
* No, I don't know why this fixes it
* Fixes loading zlevels with static lighting.
* Actually this whole part is unnecessary now because change turf handles the change properly now.
* Correct
cl ninjanomnom
fix: Shuttles have proper baseturfs now.
fix: Mineral walls properly use their baseturfs when destroyed/drilled.
add: A new engineering goggle mode allows you to see the shuttle area you're standing in.
admin: Buildmode works a bit better with baseturfs now and can properly only remove the top layer of turfs when editing. Note that as a result the order you place turfs is important and a wall placed on space means when the wall is removed there will be space underneath.
/cl
This adds an area hook for turfs getting the PlaceOnTop proc called so shuttle areas are able to intercept it and add a special turf used for determining where the bottom of the shuttle is. I'm not too certain on this being the best way to handle it but the alternatives restrict the kind of turfs that are allowed to be on shuttles which I didn't want to do as it was part of the whole intent of the baseturf change to allow any turf type on shuttles.
The alternative to the area hook would require a tool which attaches turfs to a shuttle which is why there's a shuttle area viewing tool in this pr. I considered doing it this way first but decided it was too clunky.
In addition to other changes:
Tiled/Reinforced floors have proper baseturfs now.
A large amount of the remaining ChangeTurf calls were swapped over to various baseturf helpers so, for example, mining doesn't create a lavaland turf if somehow the mineral wall is on plating.
Escape pods, the aux base, and syndicate drop pod have been converted over to shuttle templates as well.
The error when the timid var is set incorrectly has been changed to a stack_trace.
The change turf file has been made all lowercase as per standard.
* Remove ZLEVEL_STATION_PRIMARY
* Add Up and Down traits for use by ladders and chasms
* Give map_config creation its own proc
* Combine LoadConfig and ValidateJSON and remove transition_config
* Make space linkage a z-level trait
* Remove ZLEVEL_EMPTY_SPACE
* Update uses of GetFullMapPath
* Handle multi-Z stations and load Lavaland and Reebe at runtime
* Remove unused space maps
* Fix inappropriate z-expansion in map reader, improve logging
* Update comments relating to z-level configuration
* Add Lavaland and Reebe to ALL_MAPS
* Add a proc for getting the station center
* Add a couple of comments to ZTRAIT defines
* Remove unused global_map list
* Refactor weather to use the trait system
* Un-hardcode the transit z-level
* Use Z traits to determine Portal Storm event areas
* Fix loading away missions containing anything that reads traits
* Reorganize the mapping code
* Finish this up
* Reee line endings
* FUCKING LINE ENDINGS
* LINARU ENDARU
* >PLS SET REPO LINE ENDINGS
* Comments
* Hoisted by my own travis.yml changes