Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
783 commits
Select commit Hold shift + click to select a range
541b909
Allow plant bits to be swept
liz-lavenza Mar 28, 2025
597ab67
Adjust bedsheets to be below items
liz-lavenza Mar 28, 2025
e0d27ab
Add a new fantasy music track
liz-lavenza Mar 27, 2025
9b255f5
Add Adventure to Shaded Hills lobby music
liz-lavenza Mar 28, 2025
6154ff8
Add east/west divider sprites
liz-lavenza Mar 28, 2025
8cd83e9
Improve Shaded Hills maps
liz-lavenza Mar 28, 2025
d1cb824
Add stumps to Shaded Hills forest noisemap
liz-lavenza Mar 28, 2025
00f51ab
Add random forest litter to Shaded Hills forest
liz-lavenza Mar 28, 2025
bcc24f4
Adjust daubed wattle wall colour
liz-lavenza Mar 29, 2025
ab04e2b
Remove /obj/item/kitchen abstract type
liz-lavenza Mar 29, 2025
df4c639
Fix Cannot slip on soap #4946
out-of-phaze Mar 15, 2025
41c3043
Fix pushing off of dense objects in space
out-of-phaze Mar 28, 2025
a02951e
Automatic changelog generation [ci skip]
NebulaSS13Bot Apr 2, 2025
66b72d9
Merge pull request #4982 from liz-lavenza/naked-no-pockets
MistakeNot4892 Apr 3, 2025
ed90959
Add linting for each modpack separately
out-of-phaze Mar 27, 2025
a193e09
Merge pull request #4972 from out-of-phaze/codequality/modpack-linting
MistakeNot4892 Apr 3, 2025
91caf49
Merge pull request #4977 from liz-lavenza/staging-fixes-mar-29
MistakeNot4892 Apr 5, 2025
c524ef7
Merge pull request #4980 from liz-lavenza/dev-tweaks-mar-29
MistakeNot4892 Apr 5, 2025
4056c72
Merge pull request #4979 from liz-lavenza/colour-helpers
MistakeNot4892 Apr 5, 2025
3bb62a7
Merge pull request #4983 from liz-lavenza/shaded-map-mar-29
MistakeNot4892 Apr 5, 2025
4c3232c
Automatic changelog generation for PR #4983 [ci skip]
NebulaSS13Bot Apr 5, 2025
25459a3
Automatic changelog generation [ci skip]
NebulaSS13Bot Apr 6, 2025
c915222
Merge pull request #4981 from liz-lavenza/species-blurb
MistakeNot4892 Apr 6, 2025
906b868
Automatic changelog generation [ci skip]
NebulaSS13Bot Apr 11, 2025
670f619
Fix tajaran clothing overrides
Cerebulon Apr 6, 2025
69c2c89
Automatic changelog generation for PR #4985 [ci skip]
NebulaSS13Bot Apr 12, 2025
71a8725
Automatic changelog generation [ci skip]
NebulaSS13Bot Apr 13, 2025
f900b76
Add toggle browser inspect admin verb for debugging Web UIs
Zandario Apr 12, 2025
0a6500e
Fixed wrong variable type
Zandario Apr 12, 2025
e54c240
Removed uneccessary condition check
Zandario Apr 12, 2025
1624050
Automatic changelog generation for PR #4987 [ci skip]
NebulaSS13Bot Apr 13, 2025
b24b796
Automatic changelog generation [ci skip]
NebulaSS13Bot Apr 14, 2025
846aef4
Fix simple_animal natural weapons not working
out-of-phaze Apr 15, 2025
85c57f3
Automatic changelog generation [ci skip]
NebulaSS13Bot Apr 22, 2025
6797e67
Automatic changelog generation [ci skip]
NebulaSS13Bot Apr 28, 2025
c1bf6f3
Merge pull request #4988 from out-of-phaze/staging-fix/carp-window
MistakeNot4892 Apr 28, 2025
5a98a6f
Improve wooden chest overlays
liz-lavenza Mar 18, 2025
2240622
Fix sharpened weapon damage calculation
liz-lavenza Mar 18, 2025
ec667ef
Fix missing or broken icon states
liz-lavenza Mar 27, 2025
02107dd
Add mapping preview colours to various types
liz-lavenza Mar 27, 2025
f85a7ea
Make wood tiles take colour from material
liz-lavenza Mar 27, 2025
3d062a9
Make grass flooring use material colour
liz-lavenza Mar 27, 2025
971aba2
Fix mob modifier and stamina bar screen objects
liz-lavenza Mar 27, 2025
2775fc9
Fix not being able to put whetstones in storage
liz-lavenza Mar 27, 2025
c5fdef9
Fix premapped doormats having random offsets
liz-lavenza Mar 27, 2025
0f4473c
Fix damage-category item effects causing weapons to deal zero damage
liz-lavenza Mar 27, 2025
e8317dd
Unset TILE_BOUND for multitile objects
liz-lavenza Mar 27, 2025
5c4902f
Allow wood and stone to smooth with wattle and daub walls
liz-lavenza Mar 27, 2025
fd6b547
Prevent forging dirt bars or making dirt billets
liz-lavenza Mar 27, 2025
2128a4d
Fix new hand slots not updating until you swap hands
liz-lavenza Mar 28, 2025
273e3df
Fix horses all being the same colour
liz-lavenza Mar 28, 2025
0c53d90
Add support for buckle shifting based on atom offset
liz-lavenza Mar 28, 2025
b6e1054
Adjust large cask rack naming code
liz-lavenza Mar 28, 2025
9c982b5
Fix descriptions for plastered wattle walls
liz-lavenza Mar 28, 2025
2c2683c
Fix reverb in foresters' hut
liz-lavenza Mar 28, 2025
1a8306b
Merge pull request #4976 from liz-lavenza/dev-fixes-mar-29
out-of-phaze May 1, 2025
5676e8d
Merge branch 'stable' of https://github.com/NebulaSS13/Nebula into st…
out-of-phaze May 2, 2025
f539d76
Merge pull request #4992 from out-of-phaze/stagingupdate
out-of-phaze May 2, 2025
55b8b2d
Merge branch 'staging' of https://github.com/NebulaSS13/Nebula into d…
out-of-phaze May 2, 2025
88c55e2
Merge pull request #4993 from out-of-phaze/devupdate
out-of-phaze May 2, 2025
0eb1ab9
Automatic changelog generation [ci skip]
NebulaSS13Bot May 4, 2025
da4185d
Fixes overmap trading hubs being uninteractable
Neerti May 5, 2025
1e5bca8
Merge pull request #4994 from Neerti/nebula_merchant_hub_fix
MistakeNot4892 May 7, 2025
d718c5d
Make shotgun shells use the single icon system
out-of-phaze May 8, 2025
1b9e252
Fix issues with ammo interactions
out-of-phaze May 8, 2025
ae71275
Fix ammo casing colors and materials
out-of-phaze May 8, 2025
e9f29e3
Fix windows not properly handling material alteration
out-of-phaze May 8, 2025
a6f50c8
Fix placed reinforced windows being in an inconsistent state
out-of-phaze May 8, 2025
0006367
Fix potential href exploit in stack crafting
out-of-phaze May 9, 2025
71f1543
Allow staging to compile on 516
out-of-phaze May 9, 2025
a0d425e
Fix window jittering from fullscreen pref being reapplied unnecessarily
out-of-phaze May 9, 2025
87813ff
Merge pull request #4999 from out-of-phaze/fix/stack-href
MistakeNot4892 May 10, 2025
0d0a550
Merge pull request #4997 from out-of-phaze/fix/window-bugs
MistakeNot4892 May 10, 2025
cc24e73
Merge pull request #4996 from out-of-phaze/fix/shotholder
MistakeNot4892 May 10, 2025
616fec9
Merge pull request #5000 from out-of-phaze/staging-fix/staging-516
MistakeNot4892 May 10, 2025
9052141
Add a user agent to the BYOND install script
out-of-phaze May 10, 2025
4692693
Fix unit test BYOND installation cache
out-of-phaze May 11, 2025
8de372d
Fix color hex checker regular experssion
out-of-phaze May 11, 2025
593bed0
Automatic changelog generation [ci skip]
NebulaSS13Bot May 11, 2025
7532d3d
Merge pull request #5005 from out-of-phaze/stable-fix/byond-curl
out-of-phaze May 11, 2025
f4ebd20
Merge branch 'stable' of https://github.com/NebulaSS13/Nebula into st…
out-of-phaze May 11, 2025
0386839
Merge pull request #5006 from out-of-phaze/stagingupdate
out-of-phaze May 11, 2025
818e24c
Merge branch 'staging' of https://github.com/NebulaSS13/Nebula into d…
out-of-phaze May 11, 2025
f0926c7
Merge pull request #5007 from out-of-phaze/devupdate
out-of-phaze May 11, 2025
bb03b6b
Fix airlock lights not working properly
out-of-phaze May 9, 2025
ceb3f06
Fix dev branch issues with matter
out-of-phaze May 9, 2025
d3449d7
Fix NanoUI map runtime
out-of-phaze May 9, 2025
0d307d1
Fix bug with walnut laminate material
out-of-phaze May 9, 2025
bd511cf
Diona collision bug workaround (#4990)
markoatonc May 11, 2025
2534e07
Merge pull request #5001 from out-of-phaze/stable-fix/window-jitter
MistakeNot4892 May 12, 2025
50a233e
Merge pull request #5003 from out-of-phaze/stable-fix/airlock-lights
MistakeNot4892 May 12, 2025
fd8ad4f
Merge pull request #5004 from out-of-phaze/fix/dev-05-10-25
MistakeNot4892 May 12, 2025
c0dbbf4
Merge pull request #5008 from NebulaSS13/stable
MistakeNot4892 May 12, 2025
ed46756
Minor camera fixes and tweaks, for stable
Neerti May 9, 2025
133e527
Fixes inability to sell to merchants due to overly eager telepads
Neerti May 12, 2025
ae11d28
Merge pull request #5009 from Neerti/nebula_xray_camera_fix_stable
MistakeNot4892 May 12, 2025
3c37a7c
Merchant pad validity checks are now on the objects themselves
Neerti May 13, 2025
07471ab
Merge pull request #5010 from Neerti/nebula_merchant_pad_fix
MistakeNot4892 May 13, 2025
33c49f4
Automatic changelog generation [ci skip]
NebulaSS13Bot May 14, 2025
c1a5597
Fix temporary genetic conditions not being removed
out-of-phaze May 15, 2025
7d78dfb
lighting: Update ambience impl, general updates
Lohikar Jan 5, 2025
9c61b04
cascade: Commit crimes against performance to fix compile
Lohikar May 8, 2025
bb010ed
lighting: Move ambience into own file
Lohikar May 8, 2025
58753c5
lighting: Ambience groups
Lohikar May 8, 2025
4455693
lighting: Fix some accidentally reverted doc comments
Lohikar May 8, 2025
0e2014f
ambience: Docs, fix logic error in clear_ambient_light()
Lohikar May 8, 2025
c03a275
Jiggle bitshift count
Lohikar May 8, 2025
104e2a7
ambience: Properly mark globals
Lohikar May 8, 2025
88745c8
Automatic changelog generation [ci skip]
NebulaSS13Bot May 16, 2025
7ab8d5e
Merge pull request #5012 from out-of-phaze/staging-fix/genetic-removal
MistakeNot4892 May 16, 2025
4af95a9
Merge branch 'stable' of github.com:NebulaSS13/Nebula into stagingupdate
MistakeNot4892 May 16, 2025
3ff5be5
Merge pull request #5013 from MistakeNot4892/stagingupdate
MistakeNot4892 May 16, 2025
6bda709
RPD now dispenses colored pipes
Typhin May 16, 2025
1f7637f
Fix being unable to D-notice newscaster channels
out-of-phaze May 15, 2025
98ec6f4
Fix window spawners not blocking atmos
out-of-phaze May 14, 2025
1f00de5
More psionics subsystem priority define into psionics modpack
out-of-phaze May 13, 2025
9be2146
Move and do a quality pass on tape recorder code
out-of-phaze May 13, 2025
2b18905
Refactor stimulants/antidepressants to reduce code duplication
out-of-phaze May 14, 2025
db76f06
Refactor syndie cigarettes to reduce code duplication
out-of-phaze May 14, 2025
1a153d2
Replace hardcoded lighting overlay check
out-of-phaze May 14, 2025
abd37d7
Fix get_other_examine_strings being expensive due to string ops
out-of-phaze May 15, 2025
5eb82e2
Fix plated catwalk activation not propagating correctly
out-of-phaze May 13, 2025
acb56c5
Make chameleon disguise verbs use a define to avoid code duplication
out-of-phaze May 14, 2025
2444a29
Merge branch 'staging' of github.com:NebulaSS13/Nebula into devupdate
MistakeNot4892 May 17, 2025
feff427
Split human get_other_examine_strings() into separate handlers
out-of-phaze May 15, 2025
aedd154
Add laser interaction to xenoarch crystal
out-of-phaze May 13, 2025
7d50f82
Reimplement ion thruster power cost lost to merge skew
out-of-phaze Mar 24, 2025
59bcb86
Make the recipe material unit test more robust
out-of-phaze May 17, 2025
c090d85
Remove unnecessary amount override for haystack recipe
out-of-phaze May 17, 2025
7260ed9
Fix tank dispenser recipe producing a full tank dispenser
out-of-phaze May 17, 2025
adaddf2
Merge pull request #5015 from Typhin/staging
MistakeNot4892 May 17, 2025
7d08794
Merge pull request #5030 from MistakeNot4892/devupdate
MistakeNot4892 May 17, 2025
ae84b89
Merge pull request #5016 from out-of-phaze/stable-fix/psi-priority
MistakeNot4892 May 18, 2025
ceb7197
Merge pull request #5017 from out-of-phaze/fix/newscaster-dnotice
MistakeNot4892 May 18, 2025
be20f80
Merge pull request #5018 from out-of-phaze/feature/crystal-interaction
MistakeNot4892 May 18, 2025
19442e2
Merge pull request #5019 from out-of-phaze/stable-fix/sim-overlay
MistakeNot4892 May 18, 2025
15bee9c
Merge pull request #5020 from out-of-phaze/codequality/taperecorder
MistakeNot4892 May 18, 2025
0ceb773
Merge pull request #5021 from out-of-phaze/codequality/psych
MistakeNot4892 May 18, 2025
6e4bd4a
Merge pull request #5022 from out-of-phaze/fix/window-active-edge
MistakeNot4892 May 18, 2025
42b692a
Merge pull request #5024 from out-of-phaze/stable-fix/catwalk-active
MistakeNot4892 May 18, 2025
42d7e72
Merge pull request #5025 from out-of-phaze/fix/cheap-examine
MistakeNot4892 May 18, 2025
cd2f896
Merge pull request #5026 from out-of-phaze/feature/examine-handlerifi…
MistakeNot4892 May 18, 2025
64e100b
Merge pull request #5027 from out-of-phaze/codequality/chameleon-verbs
MistakeNot4892 May 18, 2025
ff68556
Merge pull request #5028 from out-of-phaze/stable-fix/thruster
MistakeNot4892 May 18, 2025
2a2fd31
Merge pull request #5029 from out-of-phaze/fix/recipe-amount
MistakeNot4892 May 18, 2025
abb88b3
Merge branch 'stable' of github.com:NebulaSS13/Nebula into stagingupdate
MistakeNot4892 May 18, 2025
1179bec
Merge pull request #5034 from MistakeNot4892/stagingupdate
MistakeNot4892 May 18, 2025
0e0528f
Merge pull request #5035 from NebulaSS13/staging
MistakeNot4892 May 18, 2025
0a0c46f
Fix mob snapshot not tracking skin color or tone
out-of-phaze Mar 24, 2025
2a74a73
Implement weather particles wind_intensity var
out-of-phaze Mar 24, 2025
1cee5cc
Improve stack recipe material validation
out-of-phaze May 18, 2025
1ff5cc8
Lower FileAlreadyIncluded pragma to disabled
out-of-phaze May 23, 2025
c2d001e
Merge pull request #5036 from out-of-phaze/fix/od-include
out-of-phaze May 23, 2025
a99148a
Merge pull request #5031 from out-of-phaze/refactor/recipe-validation
MistakeNot4892 May 24, 2025
1e062a6
Fix locked machines failing panel opening unit test
out-of-phaze May 26, 2025
5b433a3
Copy default panel-closed test to wall frame construction state
out-of-phaze May 26, 2025
3e4b040
Add hacky workaround for self destruct storage
out-of-phaze May 26, 2025
575723f
Exempt light fixtures from panel opening unit test
out-of-phaze May 26, 2025
818d550
Expand wall frame attackby validation for hackables
out-of-phaze May 26, 2025
0405f49
Make disconnecting a wall-mounted igniter use wirecutters
out-of-phaze May 26, 2025
2a41018
Fix HIDETAIL not hiding tails
out-of-phaze May 26, 2025
9ffb8b9
Fix issues with ZM discovery and updates
out-of-phaze May 26, 2025
4084ce5
Merge pull request #4978 from liz-lavenza/target-fixes
out-of-phaze May 26, 2025
62fd33e
Automatic changelog generation [ci skip]
NebulaSS13Bot May 27, 2025
c0c2db3
Lower FileAlreadyIncluded pragma to disabled
out-of-phaze May 23, 2025
eb238f9
Merge pull request #5042 from out-of-phaze/staging-fix/od-ci
out-of-phaze May 28, 2025
1a62b05
Fix has_trait not working for species traits
out-of-phaze May 28, 2025
8fb897a
Convert trait proc names to snake_case
out-of-phaze May 28, 2025
88ebe18
Automatic changelog generation [ci skip]
NebulaSS13Bot May 29, 2025
d271980
Merge pull request #5023 from out-of-phaze/codequality/cig
MistakeNot4892 May 29, 2025
e7dc178
Merge pull request #5037 from out-of-phaze/fix/part-lock-test
MistakeNot4892 May 29, 2025
7ec085c
Merge pull request #5039 from out-of-phaze/stable-fix/tail-hiding
MistakeNot4892 May 29, 2025
a9aea17
Merge pull request #5041 from out-of-phaze/staging-fix/has-trait
MistakeNot4892 May 30, 2025
9924aa1
Automatic changelog generation [ci skip]
NebulaSS13Bot May 31, 2025
b3e9de3
Merge branch 'stable' of https://github.com/NebulaSS13/Nebula into st…
out-of-phaze Jun 3, 2025
79dc45e
Fix ion thrusters only working when unpowered
out-of-phaze Jun 3, 2025
ea01b70
Prevent suit cyclers from rotating with shuttles
out-of-phaze Jun 3, 2025
d09c07e
Merge pull request #5044 from out-of-phaze/stable-fix/ion-thruster
out-of-phaze Jun 6, 2025
d9ad05a
Fix runtimes from items in nullspace being forcemoved
out-of-phaze Jun 3, 2025
62a35da
Make discover_movable no-op prior to zcopy init
out-of-phaze Jun 6, 2025
b9ec316
Fix solid turfs not blocking spacedrift
out-of-phaze Jun 6, 2025
69c9ed2
Add some comments to spacemove defines and procs
out-of-phaze Jun 6, 2025
828ab97
Fix being unable to attack fabricators
out-of-phaze Jun 6, 2025
be0681a
Fix being unable to attack vending machines
out-of-phaze Jun 6, 2025
b1e66a2
Automatic changelog generation [ci skip]
NebulaSS13Bot Jun 8, 2025
82ba518
Merge pull request #5040 from out-of-phaze/stable-fix/zm-correctness
MistakeNot4892 Jun 8, 2025
7b3401d
Merge branch 'stable' of https://github.com/NebulaSS13/Nebula into st…
out-of-phaze Jun 8, 2025
b042fc9
Merge pull request #5043 from out-of-phaze/stagingupdate
out-of-phaze Jun 8, 2025
951484b
Fix errors discovered by unit tests
out-of-phaze Aug 25, 2024
7361804
Add support for migration directories to update_paths
out-of-phaze Aug 27, 2024
c3a2bba
Add missing oldtile floor decals
out-of-phaze Aug 27, 2024
8cbe69a
Fix incorrect pipe dispenser migrations
out-of-phaze Aug 27, 2024
91140f4
Fix mis-named yellow dress
out-of-phaze Aug 30, 2024
c8ee7b5
Add a handful of legacy migrations (mostly clothing)
out-of-phaze Aug 30, 2024
95f53f3
Add partially-constructed light fixture presets
out-of-phaze Sep 1, 2024
7f93e2e
Add red back-mounted oxygen tank
out-of-phaze Sep 1, 2024
076f903
Add mobile oxygen pumps
out-of-phaze Sep 6, 2024
28da263
Add additional legacy migrations for mech parts
out-of-phaze Aug 28, 2024
89c4dd0
Fix article capitalization in emote strings
out-of-phaze Sep 6, 2024
205acef
Fix incorrect usage of bool for material opacity
out-of-phaze Sep 6, 2024
e939102
Add/expand cryopod visible messages
out-of-phaze Sep 6, 2024
f9c5da0
Add security newscaster preset
out-of-phaze Sep 6, 2024
62ce9a0
Add hidden SMES preset for use in submaps
out-of-phaze Sep 6, 2024
a4e093c
Piecemeal corrections to cherrypicks/merges.
MistakeNot4892 Jun 8, 2025
bce09a0
Several string tweaks from Polaris.
MistakeNot4892 Jun 8, 2025
ff0bbe4
Updating test.
MistakeNot4892 Jun 8, 2025
4b26ddc
Fixing runtime in undies code.
MistakeNot4892 Jun 8, 2025
04dbb07
Fix CAMERA_CAMERA_
MistakeNot4892 Jun 8, 2025
fa56557
Porting robot cryopods from Lighthouse.
MistakeNot4892 Jun 8, 2025
b5959b2
Porting permits from Polaris/Lighthouse.
MistakeNot4892 Jun 8, 2025
47757d5
Fixes erroneous setting of abstract_type on avian bodytype.
MistakeNot4892 Jun 8, 2025
23fd03e
Removed erroneous language inclusion.
MistakeNot4892 Jun 9, 2025
2bf4080
Merge pull request #5049 from out-of-phaze/staging-fix/mach-attack
MistakeNot4892 Jun 10, 2025
4f9efee
Added CRLF rules for .txt and .md
MistakeNot4892 Jun 11, 2025
b1b0ff5
Readded monitor head.
MistakeNot4892 Jun 8, 2025
3778b67
Fix produce bin UI issues
out-of-phaze Jun 12, 2025
9ec9711
Rename a var from `usr` to `user`
ike709 Jun 14, 2025
6e62ab2
Remove defunct gateway code
out-of-phaze Jun 15, 2025
8ed3576
Remove gateway from Exodus map
out-of-phaze Jun 15, 2025
e54233b
Merge pull request #5057 from ike709/patch-2
out-of-phaze Jun 15, 2025
aa2e773
Fix missing allergen_flags on bones
out-of-phaze Mar 24, 2025
d59720c
Remove defunct nutriment_animal material variable
out-of-phaze Jun 15, 2025
6858bc8
Remove some entirely-unused variables
out-of-phaze Mar 24, 2025
17031fa
Remove entirely-unused procs
out-of-phaze Mar 24, 2025
cceba17
Merge pull request #5052 from MistakeNot4892/fix/polneb
out-of-phaze Jun 15, 2025
5b4d009
Automatic changelog generation [ci skip]
NebulaSS13Bot Jun 15, 2025
7939f8c
Improve computer scanner and printer behavior
out-of-phaze Mar 24, 2025
909e9ce
Implement unused vars in paperwork code
out-of-phaze Mar 24, 2025
1e66a43
Clean unused fax machine code
out-of-phaze Mar 24, 2025
7c36b36
Clean up and improve photocopier code
out-of-phaze Mar 24, 2025
882238d
Automatic changelog generation [ci skip]
NebulaSS13Bot Jun 16, 2025
d31c11b
Merge pull request #5060 from out-of-phaze/codequality/unused-slimmed
out-of-phaze Jun 17, 2025
50eb662
Merge pull request #5059 from out-of-phaze/staging-fix/bone-meal
out-of-phaze Jun 17, 2025
1f3233f
Merge pull request #5058 from out-of-phaze/codequality/gateway-remove
out-of-phaze Jun 17, 2025
b5bd9b1
Merge pull request #5061 from out-of-phaze/codequality/paperwork-unused
MistakeNot4892 Jun 19, 2025
b00e16f
Rename BYOND 516 var conflicts
ike709 Jun 20, 2025
fb9004f
Merge pull request #5062 from ike709/patch-3
MistakeNot4892 Jun 22, 2025
ea0d96d
Update goal_ambition.dm
amylizzle Jun 25, 2025
a134a4f
Merge pull request #5063 from amylizzle/patch-1
MistakeNot4892 Jun 27, 2025
fb59920
Adding byond executable mirror to build scripts.
MistakeNot4892 Jul 3, 2025
0873239
Bumping BYOND minor version.
MistakeNot4892 Jul 3, 2025
349ab2f
Merge pull request #5065 from MistakeNot4892/tweak/byond_mirror
MistakeNot4892 Jul 3, 2025
1a6fcd5
Fixes blue hairflower.
MistakeNot4892 Jul 1, 2025
7ac26fc
Merge pull request #5064 from MistakeNot4892/stable
MistakeNot4892 Jul 3, 2025
6b4a006
Merge branch 'stable' of github.com:NebulaSS13/Nebula into stagingupdate
MistakeNot4892 Jul 3, 2025
67fc76e
Merge pull request #5067 from MistakeNot4892/stagingupdate
MistakeNot4892 Jul 3, 2025
d1199cf
Merge branch 'staging' of github.com:NebulaSS13/Nebula into devupdate
MistakeNot4892 Jul 3, 2025
ba5a59b
Merge pull request #5068 from MistakeNot4892/devupdate
MistakeNot4892 Jul 3, 2025
6af7bc1
Merge branch 'dev' of github.com:NebulaSS13/Nebula into poldev
MistakeNot4892 Jul 8, 2025
89f0e0a
Merge branch 'master' of https://github.com/PolarisSS13/Polaris-Neb i…
MistakeNot4892 Jul 13, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@ indent_size = 4
[*.dmm]
end_of_line = crlf

[*.dme]
end_of_line = crlf

[*.py]
indent_style = space
indent_size = 4
Expand All @@ -20,3 +23,8 @@ indent_size = 4
indent_style = space
indent_size = 2

[*.txt]
end_of_line = crlf

[*.md]
end_of_line = crlf
3 changes: 3 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,6 @@ html/changelog.html merge=union
# Declare files that will always have CRLF line endings on checkout.
*.dm text eol=crlf
*.dmm text eol=crlf
*.dme text eol=crlf
*.txt text eol=crlf
*.md text eol=crlf
4 changes: 3 additions & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,13 @@ on:
branches:
- master
pull_request:
branches:
- master
workflow_dispatch:

env:
BYOND_MAJOR: "515"
BYOND_MINOR: "1643"
BYOND_MINOR: "1647"
SPACEMAN_DMM_VERSION: suite-1.9

jobs:
Expand Down
7 changes: 4 additions & 3 deletions code/__defines/misc.dm
Original file line number Diff line number Diff line change
Expand Up @@ -384,9 +384,10 @@
#define CRAYON_DRAW_ARROW "arrow"

// Enum for results of is_space_movement_permitted()
#define SPACE_MOVE_SUPPORTED (-1)
#define SPACE_MOVE_FORBIDDEN 0
#define SPACE_MOVE_PERMITTED 1
// Note that it may also return an instance of /atom/movable, which acts as SPACE_MOVE_SUPPORTED.
#define SPACE_MOVE_SUPPORTED (-1) //! Mob should run space-slipping checks.
#define SPACE_MOVE_FORBIDDEN 0 //! Mob should begin spacedrift.
#define SPACE_MOVE_PERMITTED 1 //! Mob should stop/prevent spacedrift.

// Default UI style applied to client prefs.
#define DEFAULT_UI_STYLE /decl/ui_style/midnight
Expand Down
2 changes: 0 additions & 2 deletions code/_global_vars/lists/names.dm
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
// All variables here use double quotes to able load information on every startup.

var/global/list/ai_names = file2list("config/names/ai.txt")
var/global/list/wizard_first = file2list("config/names/wizardfirst.txt")
var/global/list/wizard_second = file2list("config/names/wizardsecond.txt")

var/global/list/verbs = file2list("config/names/verbs.txt")
var/global/list/adjectives = file2list("config/names/adjectives.txt")
Expand Down
12 changes: 0 additions & 12 deletions code/_onclick/ghost.dm
Original file line number Diff line number Diff line change
Expand Up @@ -61,15 +61,3 @@
/obj/effect/portal/attack_ghost(mob/user)
if(target)
user.forceMove(get_turf(target))

/obj/machinery/gateway/centerstation/attack_ghost(mob/user)
if(awaygate)
user.forceMove(awaygate.loc)
else
to_chat(user, "[src] has no destination.")

/obj/machinery/gateway/centeraway/attack_ghost(mob/user)
if(stationgate)
user.forceMove(stationgate.loc)
else
to_chat(user, "[src] has no destination.")
10 changes: 8 additions & 2 deletions code/controllers/subsystems/zcopy.dm
Original file line number Diff line number Diff line change
Expand Up @@ -494,6 +494,8 @@ SUBSYSTEM_DEF(zcopy)
// return: is-invalid
/datum/controller/subsystem/zcopy/proc/discover_movable(atom/movable/object)
ASSERT(!QDELETED(object))
if(init_state < SS_INITSTATE_STARTED)
return FALSE // no-op, discover_movable is only valid during or after zcopy init

var/turf/Tloc = object.loc
if (!isturf(Tloc) || !MOVABLE_SHALL_MIMIC(object))
Expand All @@ -503,12 +505,13 @@ SUBSYSTEM_DEF(zcopy)

ZM_RECORD_START

var/above_needs_discovery = FALSE
if (!object.bound_overlay)
var/atom/movable/openspace/mimic/M = new(T)
object.bound_overlay = M
M.z_flags = object.z_flags // Necessary to ensure MOVABLE_IS_ON_ZTURF works
M.associated_atom = object
if (TURF_IS_MIMICKING(M.loc))
.(M)
above_needs_discovery = TRUE

var/override_depth
var/original_type = object.type
Expand Down Expand Up @@ -559,6 +562,9 @@ SUBSYSTEM_DEF(zcopy)
ZM_RECORD_STOP
ZM_RECORD_WRITE(discovery_stats, "Depth [OO.depth] on [OO.z]")

if (above_needs_discovery && MOVABLE_IS_ON_ZTURF(OO))
discover_movable(OO) // recursion!

return FALSE

/datum/controller/subsystem/zcopy/proc/flush_z_state(turf/T)
Expand Down
15 changes: 7 additions & 8 deletions code/datums/storage/_storage.dm
Original file line number Diff line number Diff line change
Expand Up @@ -244,27 +244,26 @@ var/global/list/_test_storage_items = list()

/datum/storage/proc/update_ui_after_item_insertion(obj/item/inserted, click_params)
prepare_ui()
storage_ui?.on_insertion()
storage_ui?.on_insertion(inserted)

/datum/storage/proc/update_ui_after_item_removal(obj/item/removed)
if(QDELETED(holder))
return
prepare_ui()
storage_ui?.on_post_remove()
storage_ui?.on_post_remove(removed)

//Call this proc to handle the removal of an item from the storage item. The item will be moved to the atom sent as new_target
/datum/storage/proc/remove_from_storage(mob/user, obj/item/removing, atom/new_location, skip_update)
if(!istype(removing))
return FALSE
new_location = new_location || get_turf(holder)
storage_ui?.on_pre_remove(removing)
if(ismob(holder?.loc))
removing.dropped(user)
if(ismob(new_location))
removing.hud_layerise()
else
removing.reset_plane_and_layer()
// This doesn't call dropped anymore because it's not leaving a mob slot directly.
// If something needs to duplicate dropped() functionality on removal from a storage object,
// it should be done in on_exit_storage instead.
removing.forceMove(new_location)
if(!ismob(new_location)) // inventory slot equipped() already handles hud_layerise
removing.reset_plane_and_layer() // this should be done post-move to avoid wasting an icon update
if(!skip_update)
update_ui_after_item_removal(removing)
if(removing.maptext)
Expand Down
36 changes: 28 additions & 8 deletions code/datums/storage/_storage_ui.dm
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
/datum/storage_ui/proc/after_close(mob/user)
return

/datum/storage_ui/proc/on_insertion()
/datum/storage_ui/proc/on_insertion(obj/item/inserted)
return

/datum/storage_ui/proc/on_pre_remove(obj/item/removing)
Expand All @@ -44,6 +44,9 @@
/datum/storage_ui/proc/on_hand_attack(mob/user)
return

/datum/storage_ui/proc/get_displayed_contents()
return

// Default subtype
/datum/storage_ui/default
var/obj/screen/storage/boxes/boxes
Expand Down Expand Up @@ -99,20 +102,29 @@
/datum/storage_ui/default/on_pre_remove(obj/item/removing)
for(var/mob/user in is_seeing)
user.client?.screen -= removing
// if being moved to an inventory slot or other storage item, this will be re-set after the transfer is done
removing.screen_loc = null

/datum/storage_ui/default/on_hand_attack(mob/user)
for(var/mob/other_user in is_seeing)
if (other_user.active_storage == _storage)
_storage.close(other_user)

/datum/storage_ui/default/get_displayed_contents()
return _storage?.get_contents()

/datum/storage_ui/default/show_to(mob/user)
if(!istype(user))
return
// TODO: move this to the interaction that opens the storage object rather than handling it on the UI
// because i really hate calling get_contents followed by get_displayed_contents
// the issue is that some things call atom.storage.show_to() directly rather than using open()
var/list/contents = _storage?.get_contents()
if(user.active_storage != _storage)
for(var/obj/item/I in contents)
if(I.on_found(user))
return
var/list/displayed_contents = get_displayed_contents()
if(user.active_storage)
user.active_storage.hide_from(user)
if(user.client)
Expand All @@ -123,8 +135,8 @@
user.client.screen -= closer
user.client.screen -= contents
user.client.screen += closer
if(length(contents))
user.client.screen += contents
if(length(displayed_contents))
user.client.screen += displayed_contents
if(_storage.storage_slots)
user.client.screen += boxes
else
Expand Down Expand Up @@ -306,19 +318,27 @@
row_num = round((adjusted_contents-1) / 7) // 7 is the maximum allowed width.
arrange_item_slots(row_num, clamp(adjusted_contents - 1, 0, 6))

// Only display one item for each key.
/datum/storage_ui/default/produce_bin/get_displayed_contents()
. = list()
var/list/displayed = list()
for(var/obj/item/food/grown/produce in _storage.get_contents())
var/produce_key = get_key_for_object(produce)
if(displayed[produce_key])
continue
displayed[produce_key] = TRUE
. += produce

//This proc draws out the inventory and places the items on it. It uses the standard position.
/datum/storage_ui/default/produce_bin/arrange_item_slots(rows, cols)
var/cx = SCREEN_LOC_MOD_FIRST
var/cy = SCREEN_LOC_MOD_SECOND + rows
boxes.screen_loc = "LEFT+[SCREEN_LOC_MOD_FIRST]:[SCREEN_LOC_MOD_DIVIDED],BOTTOM+[SCREEN_LOC_MOD_SECOND]:[SCREEN_LOC_MOD_DIVIDED] to LEFT+[SCREEN_LOC_MOD_FIRST + cols]:[SCREEN_LOC_MOD_DIVIDED],BOTTOM+[SCREEN_LOC_MOD_SECOND + rows]:[SCREEN_LOC_MOD_DIVIDED]"

var/list/counts = get_seed_counts()
var/list/displayed = list()
for(var/obj/item/food/grown/produce in _storage.get_contents())
// get_displayed_contents already handles deduplication
for(var/obj/item/food/grown/produce in get_displayed_contents())
var/produce_key = get_key_for_object(produce)
if(displayed[produce_key])
continue
displayed[produce_key] = TRUE
produce.screen_loc = "LEFT+[cx]:[SCREEN_LOC_MOD_DIVIDED],BOTTOM+[cy]:[SCREEN_LOC_MOD_DIVIDED]"
produce.maptext_x = 2
produce.maptext_y = 2
Expand Down
72 changes: 37 additions & 35 deletions code/datums/traits/_traits.dm
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,18 @@
// certain number of them at character generation and they will alter some interactions with the world.

/mob/living
var/list/traits
/// A list of mob-specific traits, for when the list differs from the species list.
/// Overrides the species list; if it's identical to it, it will be unset.
/// Code using the traits system should use get_traits() instead.
VAR_PRIVATE/list/_mob_traits

/mob/living/proc/has_trait(trait_type, trait_level = TRAIT_LEVEL_EXISTS)
SHOULD_NOT_OVERRIDE(TRUE)
SHOULD_NOT_SLEEP(TRUE)
return (trait_type in traits) && (!trait_level || traits[trait_type] >= trait_level)
var/list/actual_traits = get_traits()
return (trait_type in actual_traits) && (!trait_level || actual_traits[trait_type] >= trait_level)

/mob/living/proc/GetTraitLevel(trait_type)
/mob/living/proc/get_trait_level(trait_type)
SHOULD_NOT_SLEEP(TRUE)
var/traits = get_traits()
if(!traits)
Expand All @@ -24,61 +28,59 @@
/mob/living/get_traits()
RETURN_TYPE(/list)
var/decl/species/our_species = get_species()
return traits || our_species?.traits
return _mob_traits || our_species?.traits

/mob/living/proc/set_trait(trait_type, trait_level)
SHOULD_NOT_SLEEP(TRUE)
var/decl/species/our_species = get_species()
var/decl/trait/trait = GET_DECL(trait_type)
if(!trait.validate_level(trait_level))
return FALSE
if(our_species && !traits) // If species traits haven't been setup before, check if we need to do so now
if(our_species && !_mob_traits) // If species traits haven't been setup before, check if we need to do so now
var/species_level = our_species.traits[trait_type]
if(species_level == trait_level) // Matched the default species trait level, ignore
return TRUE
traits = our_species.traits.Copy() // The setup is to simply copy the species list of traits
if(!(trait_type in traits))
LAZYSET(traits, trait_type, trait_level)
_mob_traits = our_species.traits.Copy() // The setup is to simply copy the species list of traits
if(!(trait_type in _mob_traits))
LAZYSET(_mob_traits, trait_type, trait_level)
trait.apply_trait(src)
return TRUE

/mob/living/proc/RemoveTrait(trait_type, canonize = TRUE)
/mob/living/proc/remove_trait(trait_type, canonize = TRUE)
var/decl/species/our_species = get_species()
// If traits haven't been set up, but we're trying to remove a trait that exists on the species then set up traits
if(!traits && LAZYISIN(our_species?.traits, trait_type))
traits = our_species.traits.Copy()
if(LAZYLEN(traits))
LAZYREMOVE(traits, trait_type)
if(!_mob_traits && LAZYISIN(our_species?.traits, trait_type))
_mob_traits = our_species.traits.Copy()
if(LAZYLEN(_mob_traits))
LAZYREMOVE(_mob_traits, trait_type)
// Check if we can just default back to species traits.
if(canonize)
CanonizeTraits()
canonize_traits()

/// Removes a trait unless it exists on the species.
/// If it does exist on the species, we reset it to the species' trait level.
/mob/living/proc/RemoveExtrinsicTrait(trait_type)
/mob/living/proc/remove_extrinsic_trait(trait_type)
var/decl/species/our_species = get_species()
if(!LAZYACCESS(our_species?.traits, trait_type))
RemoveTrait(trait_type)
else if(our_species?.traits[trait_type] != GetTraitLevel(trait_type))
remove_trait(trait_type)
else if(our_species?.traits[trait_type] != get_trait_level(trait_type))
set_trait(trait_type, our_species?.traits[trait_type])

/mob/living/proc/clear_extrinsic_traits()
_mob_traits = null

/// Sets the traits list to null if it's identical to the species list.
/// Returns TRUE if the list was reset and FALSE otherwise.
/mob/living/proc/CanonizeTraits()
if(!traits) // Already in canonical form.
/mob/living/proc/canonize_traits()
if(!_mob_traits) // Already in canonical form.
return FALSE
var/decl/species/our_species = get_species()
if(!our_species) // Doesn't apply without a species.
return FALSE
var/list/missing_traits = traits ^ our_species?.traits
var/list/matched_traits = traits & our_species?.traits
if(LAZYLEN(missing_traits))
return FALSE
for(var/trait in matched_traits) // inside this loop we know our_species exists and has traits
if(traits[trait] != our_species.traits[trait])
return FALSE
traits = null
return TRUE
if(_mob_traits ~= our_species.traits)
_mob_traits = null
return TRUE
return FALSE

/decl/trait
abstract_type = /decl/trait
Expand Down Expand Up @@ -194,10 +196,10 @@
return (istype(holder))

// Called by preferences selection for HTML display.
/decl/trait/proc/get_trait_selection_data(var/datum/category_item/player_setup_item/traits/caller, var/list/ticked_traits = list(), var/recurse_level = 0, var/ignore_children_if_unticked = 1, var/ignore_unticked)
/decl/trait/proc/get_trait_selection_data(var/datum/category_item/player_setup_item/traits/trait_caller, var/list/ticked_traits = list(), var/recurse_level = 0, var/ignore_children_if_unticked = 1, var/ignore_unticked)

var/ticked = (type in ticked_traits)
if((ignore_unticked && !ticked) || (caller && !is_available_to_select(caller.pref)))
if((ignore_unticked && !ticked) || (trait_caller && !is_available_to_select(trait_caller.pref)))
return ""

var/result = "<tr><td style='max-width:50%;'>"
Expand All @@ -211,10 +213,10 @@
incompatible_trait_taken = TRUE
break

var/chargen_name = get_chargen_name(caller.pref)
var/chargen_desc = get_chargen_desc(caller.pref)
if(istype(caller) && (ticked || caller.get_trait_total() + trait_cost <= get_config_value(/decl/config/num/max_character_traits)) && !incompatible_trait_taken)
result += "<a href='byond://?src=\ref[caller];toggle_trait=\ref[src]'>[ticked ? "<font color='#E67300'>[chargen_name]</font>" : "[chargen_name]"] ([trait_cost])</a>"
var/chargen_name = get_chargen_name(trait_caller.pref)
var/chargen_desc = get_chargen_desc(trait_caller.pref)
if(istype(trait_caller) && (ticked || trait_caller.get_trait_total() + trait_cost <= get_config_value(/decl/config/num/max_character_traits)) && !incompatible_trait_taken)
result += "<a href='byond://?src=\ref[trait_caller];toggle_trait=\ref[src]'>[ticked ? "<font color='#E67300'>[chargen_name]</font>" : "[chargen_name]"] ([trait_cost])</a>"
else
result += ticked ? "<font color='#E67300'>[chargen_name]</font>" : "[chargen_name]"

Expand All @@ -227,7 +229,7 @@
result += "</td></tr>"
if(LAZYLEN(children) && !(ignore_children_if_unticked && !ticked))
for(var/decl/trait/trait in children)
result += trait.get_trait_selection_data(caller, ticked_traits, (recurse_level+1), ignore_children_if_unticked)
result += trait.get_trait_selection_data(trait_caller, ticked_traits, (recurse_level+1), ignore_children_if_unticked)
return result

/// Shows `show_to` a browser window describing the character setup traits taken by `src`.
Expand Down
Loading
Loading