Compare commits

...

1231 Commits

Author SHA1 Message Date
Nim
ca23fddd8a Lyre and flute (#759)
* music

* fix desc

* Update T1_fire_rune.yml

---------

Co-authored-by: Ed <96445749+TheShuEd@users.noreply.github.com>
Co-authored-by: Ed <edwardxperia2000@gmail.com>
2025-01-17 01:26:39 +03:00
Ed
50c502f598 AOE Spells (#758)
* AoE gameplay

* Update T1_fire_rune.yml

* test

* add cool AoE visual
2025-01-17 01:01:44 +03:00
Ed
0783eb1380 Knowledge system (#770)
* remove all requirements

* clean up and renaming to knowledge

* update code

* add admin knowledge verbs

* move shoes under pants

* knowledge based recipes

* clean up

* sewing knowledges

* knowledge dependencies

* knowledge learning objects

* more knowledge

* metallforging skill

* knowledge books

* start knowledges, T1 and T2 books in demiplanes

* remove coins from demiplanes

* roundstart knowledge
2025-01-17 00:08:13 +03:00
Nim
5af56d4655 fiiiiiix (#766) 2025-01-16 01:42:20 +03:00
MetalSage
6e77b82da7 fix (#763)
Co-authored-by: MetalSage <metalsage.official@gmail.com>
2025-01-15 20:14:50 +03:00
Nim
02cfcd620c Inter-Monster tolerance (#761)
* Insects ai

* monster
2025-01-15 17:34:38 +03:00
Ed
e6097da7cc Update CP14MagicEnergyPhotosynthesisComponent.cs 2025-01-15 01:05:28 +03:00
Ed
925738afc2 Workbench update (#760)
* fix workbench icons

* workbench search

* fix 1

* UI finalize

* fix material localization

* restore shard sprite

* Update sewing_table.yml
2025-01-15 00:34:08 +03:00
Ed
cf41cabcea Remove OP (#757)
* remove outdated content

* Update migration.yml

* Update twoHandedStaffs.yml
2025-01-14 14:36:10 +03:00
Ed
87d57df0e6 Omsoyk epic clothing pack (#756)
* new shirts

* pants and dresses

* blue cloak
2025-01-14 12:03:10 +03:00
Ed
51a47eaffc Bunch of gameplay issues (#754)
* fix demiplane contetn filtering

* fix day demiplanes

* remove filled crystals from demiplanes

* remove armored zombies

* added candles in town crates

* remove 20% unefficient of mana moving spells

* fix #622

* revert random Viator commit

* Update demiplane_rifts.yml
2025-01-14 01:41:11 +03:00
Nim
c7c5b4dc4c bench fix (#755) 2025-01-13 23:24:33 +03:00
Nim
2644fe26ea Ashes and Russian translation edits with a couple of minor fixes (#735)
* ash++++

* fix

* по запросу
2025-01-13 23:01:34 +03:00
Nim
732bc267f7 Bench (#751)
* bench

* anchored
2025-01-13 22:59:57 +03:00
Viator-MV
ddd61df7b8 изменение текстуры книги законов
текстура книги законов изменена на подходящую к новым книгам
2025-01-13 21:37:30 +03:00
Ed
025753e689 revert 2025-01-13 18:09:40 +03:00
Ed
368839dd68 Bugixes (#750)
* fix #746

* fix #745

* fix #747

* fix #744

* fix #743

* fix #741

* fix #722
2025-01-13 12:54:46 +03:00
vladimir.s
f5edf03bf6 double hp and mana alerts (#749)
* double hp and mana alerts

* Update alerts.yml

---------

Co-authored-by: Ed <edwardxperia2000@gmail.com>
2025-01-12 23:05:19 +03:00
Ed
b5f70616c3 New lobby art (#748)
* lobby

* back to rus
2025-01-12 22:39:33 +03:00
Nim
e11d8a1c1a fix (#736) 2025-01-12 17:22:19 +03:00
Ed
3cce07be5a switch to eng 2025-01-12 17:10:27 +03:00
Nim
93c4e6068f Balance and fixes (#733)
* issue

* mosquitoes

* 👽
2025-01-12 17:00:35 +03:00
MetalSage
89b9a5c1fe Additive lighting (#685)
* Additive lighting

* adds options for all your optional needs

* one last tiny adjustment before we hit the create pr button

* spaghetti condensing

* add ccvar

* overlight correction

* fix requested changes

* cvar fix

* last fix

* nice

---------

Co-authored-by: deathride58 <deathride58@users.noreply.github.com>
Co-authored-by: MetalSage <metalsage.official@gmail.com>
Co-authored-by: Ed <96445749+TheShuEd@users.noreply.github.com>
Co-authored-by: Ed <edwardxperia2000@gmail.com>
2025-01-12 13:33:06 +03:00
MetalSage
a6847c08e8 Add "Mana Wasting" trait (#732)
* add trait

* Update Resources/Locale/ru-RU/_CP14/magicEnergy/magic-spells.ftl

* fix magic item using

---------

Co-authored-by: MetalSage <metalsage.official@gmail.com>
Co-authored-by: Ed <96445749+TheShuEd@users.noreply.github.com>
Co-authored-by: Ed <edwardxperia2000@gmail.com>
2025-01-12 13:10:45 +03:00
Ed
485ddaa739 map fix 2025-01-12 03:06:51 +03:00
Ed
f2ef46d90e New apprentice role / Новая роль подмастерья (#731)
* new role

* Update role_loadouts.yml

* Update jobs.yml

* Delete g.png
2025-01-12 03:05:47 +03:00
Nim
61897eae4f target (#730) 2025-01-12 02:01:53 +03:00
Ed
4a2c3c9d59 clean up CVars 2025-01-11 13:01:53 +03:00
Ed
3d0f303930 Create Dev.toml 2025-01-11 12:37:03 +03:00
Ed
0af7a7ec64 Alchemist content (#718)
* reinforced vials

* glass recipes

* roundstart alchemist potions
2025-01-10 16:17:32 +03:00
Ed
c41927cdf2 Bugfixes (#716)
* job localization fix

* Update job.ftl

* metall scraps

* tomato seeds craft

* fix #105

* health alerts fixed

* bucket size fix

* hat fix
2025-01-09 22:28:39 +03:00
A.Ne.
c3976dd08d plants inspection, resolve #449 (#615)
* plants inspection, resolve #449

* Update farming.ftl

---------

Co-authored-by: Ed <96445749+TheShuEd@users.noreply.github.com>
2025-01-09 22:05:22 +03:00
Nim
1af112aeb2 candle (#713) 2025-01-09 21:26:14 +03:00
Ed
9ab34417f4 More Bank positions (#715)
* add bank positions

* Update sell.yml
2025-01-09 17:23:35 +03:00
Nim
005a6012be sound (#714) 2025-01-09 16:40:18 +03:00
Ed
f1fc16c6f0 Update CP14IgnitionModifierComponent.cs 2025-01-09 15:27:28 +03:00
Ed
2b0fa46857 david balance pass (#712) 2025-01-09 13:13:35 +03:00
Nim
4366e940cb armor (#710) 2025-01-09 00:46:53 +03:00
Nim
76d828e9fd Мелочи фидбека (#709)
* things

* chees

* hmm

* tag

---------

Co-authored-by: Ed <96445749+TheShuEd@users.noreply.github.com>
2025-01-09 00:46:27 +03:00
Ed
00ecf1f4b6 Health alerts + Modular tools labeling renaming (#708)
* fix health alert

* grips label

* Update grips.yml
2025-01-08 23:22:58 +03:00
Ed
815c031a16 localization sync 2025-01-08 15:31:17 +03:00
Ed
8248fcb07e Events tweaks (#707)
* mosquito + outbreak markers

* Update comoss.yml

* Update monster.yml
2025-01-08 14:16:38 +03:00
Ed
228a7226ff Random events (#706)
* first game event! Closet skeleton!

* demiplane outbreak gamerules

* Update game_presets.yml

* d
2025-01-08 02:55:54 +03:00
Ed
5c21ec2774 fix 2025-01-07 23:41:42 +03:00
Ed
35eb0c48c1 Graves and Tombstones (#705)
* dirt grave

* Update grave.yml

* tombstone

* Update grave.yml
2025-01-07 18:08:47 +03:00
Ed
676b85b22b Update Goblin.xml 2025-01-07 00:24:00 +03:00
Ed
5f2583fab0 Goblin gameplay (#704)
* silva fix

* goblinoids
2025-01-06 23:10:42 +03:00
Ed
8892d3913d Tiefling gameplay (#703)
* tiefling damage mana

* tiefling spell

* tweaks
2025-01-06 17:08:49 +03:00
Ed
71e6bd4f24 Elf (#702) 2025-01-06 14:05:46 +03:00
Ed
b647583b7b Silva species gameplay difference (#701)
* plant growth spell, silva photosyntesis

* playable species guidebook

* fixes
2025-01-06 03:31:59 +03:00
Ed
ed75beb0fb New species: Silva (#700)
* base silva species

* markings

* Update silva.yml
2025-01-05 23:23:18 +03:00
Ed
fe43e51930 Elves are skinny now (#699)
* elf THICC

* Update elf.yml
2025-01-05 20:17:25 +03:00
Nim
9ea8111d9e angel statue (#696) 2025-01-05 19:10:33 +03:00
Ed
639db84a0b dayCycle prototipization (#694) 2025-01-05 19:08:35 +03:00
Ed
9f798b4f6c Sprint loadout action (#698)
* SpellStorage restruct

* Update CP14SpellStorageSystem.cs

* Sprint
2025-01-05 17:46:54 +03:00
Ed
be3064b99c Modular sprites auto coloring (#697)
* axe and dagger update

* more blade processing

* shovel and sickle

* sword

* gardes

* grips

* modular presets

* blade material modifiers

* modular spear blade

* balance sharp garde, add sturdy garde

* Update sturdy.yml
2025-01-05 04:01:31 +03:00
A.Ne.
9a8f66727f modular tool inspection (#683)
* modular tool inspection

* update
2025-01-04 23:43:51 +03:00
Nim
945e74b690 Holiday Gob (#691)
* gob

* festive system
2025-01-04 23:42:09 +03:00
Nim
fc1e9d2638 christmas hat (#695) 2025-01-04 23:34:59 +03:00
Ed
36d02fdf6e Magic spells code expansion (#692)
* split manacost in separate component

* stamina spells

* toggleable actions

* swap activeCasting on ActiveDoAfter

* remove dublication

* Update CP14SharedMagicSystem.ToggleableActions.cs

* EntityWoldTarget

* mana glove done

* fix spell scrolls interrupting

* fix cooldown problem

* clean up, edit stamina system
2025-01-04 21:35:59 +03:00
Ed
a6a4a8da3f Merge pull request #687 from crystallpunk-14/ed-22-12-2024-upstream
Swap to RU lang, + Upstream sync
2025-01-03 18:38:23 +03:00
Ed
be6c2754f9 Update bagel.yml 2025-01-03 18:37:44 +03:00
Ed
86e74a0fc2 Merge branch 'ed-22-12-2024-upstream' of https://github.com/crystallpunk-14/crystall-punk-14 into ed-22-12-2024-upstream 2024-12-30 15:06:39 +03:00
Ed
a75ac73c70 Merge remote-tracking branch 'upstream/master' into ed-22-12-2024-upstream 2024-12-30 15:05:05 +03:00
Ed
4011de828f Merge branch 'master' into ed-22-12-2024-upstream 2024-12-30 15:01:14 +03:00
Ed
5c9ea3f428 fix (#690) 2024-12-30 15:00:02 +03:00
Ed
de6ddb52be pulato (#689) 2024-12-30 13:58:53 +03:00
Viator-MV
3b53c1abbb map update (#688)
* Update comoss.yml

* Update comoss_d.yml

* Update comoss_d.yml

* Update comoss_d.yml

---------

Co-authored-by: Ed <edwardxperia2000@gmail.com>
Co-authored-by: Ed <96445749+TheShuEd@users.noreply.github.com>
2024-12-30 13:58:06 +03:00
Southbridge
4acfec8e36 Amber Station Overhaul (#34113)
* Step 01: Remade arrivals

* Nearly finished, also added new beacons and a holopad

* Wrapped up all changes, also added a beacon for the docking arm
2024-12-30 00:37:05 -07:00
Dylan Hunter Whittingham
608b433da4 Added ID entry for captain on Bagel (#34120)
added id for captain

Co-authored-by: dylanhunter <dylan2.whittingham@live.uwe.ac.uk>
2024-12-29 13:23:18 -07:00
Velcroboy
c2ffc25970 Adds kitchen/botany-locked maints airlock (#34116)
Co-authored-by: Velcroboy <velcroboy333@hotmail.com>
2024-12-29 21:14:36 +03:00
lzk
072b973f3b fix interdimensional teleporter desc (#34108)
Update hand_teleporter.yml
2024-12-28 22:28:58 -05:00
PJBot
da8bb996b1 Automatic changelog update 2024-12-29 03:26:46 +00:00
Velcroboy
d6a9fe1c84 Rolling joints no longer requires a filter (#34106)
* Remove filters from joint crafting

* err

* hmmm

* guhhh

* yyyy

* whitespace

---------

Co-authored-by: Velcroboy <velcroboy333@hotmail.com>
2024-12-28 22:25:39 -05:00
PJBot
a7ca552dfc Automatic changelog update 2024-12-29 02:03:31 +00:00
ArtisticRoomba
e07609b3b3 New cotton baguette, crostini, chevre-chaud, bagel, and croissant foods for moffs (#33508)
* A looooooooot of new cotton foods for the moffs

* address slam's comments on the food for moffs not having any moff food in the food (the food that's intended for moffs)

* alternative sprites for bagel-cottondough.png, baguette-cotton.png, and croissant-cotton.png

* update requested sprites

* change requested sprites

* address part of sloth's review, awaiting response

* address second half of review, fix magical food nutriment mitosis bug
2024-12-29 03:02:24 +01:00
Booblesnoot42
2c41ed0939 Corrected Cotton Dough Recipe (#33988) 2024-12-29 02:56:23 +01:00
PJBot
4bb68c4bac Automatic changelog update 2024-12-29 01:51:56 +00:00
SolStar
bfb256f0ba Add a guaranteed cotton pizza to pizza crates (#33997)
* add guaranteed cotton pizza to pizza crates

* saner parenting

* Use clearer suffix on cotton pizza box
2024-12-29 02:50:49 +01:00
PJBot
9f9553b526 Automatic changelog update 2024-12-29 01:50:11 +00:00
zHonys
5d0d37161d Added support so that smile can use hats (#33924)
* Added support so that smile can use hats

Changed Prototypes/Entities/Mobs/NPCs/pets.yml
Added smile_inventory_template.yml in Resources/Prototypes/inventoryTemplates
Added dir smile_displacement.rsi inside Resources/Textures/Mobs/Pets/smile.rsi
Added smile_displacement.rsi/meta.json
Added smile_displacement.rsi/head.png

* Fixed sprite path in ProtoTypes/Entities/Mobs/NPCs/pets.yml mapping to wrong smile_displacement.rsi
Fixed smile_inventory_template.yml using uiWindowPos as 1,2 instead of 0,1

Moved Resources/Textures/Mobs/Pets/smile.rsi/ to .../Pets/smile/smile.rsi/
Moved Resources/Textures/Mobs/Pets/smile.rsi/smile_displacement.rsi to .../Pets/smile/smile_displacement.rsi

* Minor fixes: removing comments and change naming

Renamed Resources/Textures/Mobs/Pets/smile/smile.rsi To .../Mobs/Pets/Smile/smile.rsi

* Removed smile_inventory_template.yml and used head_inventory_template.yml instead
2024-12-29 02:49:05 +01:00
github-actions[bot]
3f84b04e4c Update Credits (#34109)
Co-authored-by: PJBot <pieterjan.briers+bot@gmail.com>
2024-12-29 01:39:04 +01:00
PJBot
4155440a1b Automatic changelog update 2024-12-28 23:34:22 +00:00
chromiumboy
6c465153ab UI improvements for holopads (#34055)
* Initial commit

* Minor update
2024-12-29 00:33:15 +01:00
PursuitInAshes
01980cb0bf Removes weh.txt from Textures/Parallaxes (#34097)
Removes Unneeded File
2024-12-28 17:52:27 +01:00
PJBot
1b478d46f5 Automatic changelog update 2024-12-28 14:50:11 +00:00
psykana
616d34102b Traitor can no longer get multiple objectives to save/help/kill the same person (#33704)
* Deduplicate traitor objectives

* Remove redundant check
2024-12-28 15:49:03 +01:00
PJBot
b24ab38992 Automatic changelog update 2024-12-28 10:14:21 +00:00
Alpaccalypse
a21d8099a9 Removed Power Monitoring Computer boards from research and lathe recipes. Added default engineering sprites for atmos computer boards. (#34078)
* Defined sprites for Atmospheric Alerts and Monitoring computer boards. Added research unlocks and lathe recipes for them.

* Defined default engineering sprite for atmospherics computer boards. Removed Power Monitoring Computer board from research and lathe recipes.

* Defined engineering sprite for atmos computer boards. Removed Power Monitoring Computer board from research and lathe recipes.
2024-12-28 11:13:13 +01:00
lzk
d92ed75703 Fix wagging action name and desc (#34089) 2024-12-28 13:00:12 +03:00
Leon Friedrich
97dd5513f5 Ignore audio entities in SpawnAndDeleteEntityCountTest (#34021) 2024-12-28 11:54:32 +11:00
PJBot
9acce42f92 Automatic changelog update 2024-12-27 13:35:38 +00:00
Plykiya
860052c383 Fix popup on handcuffing for person being handcuffed (#33639)
* Fix popup on handcuffing for person being handcuffed

* wrap onto newlines to appease the style gods
2024-12-27 16:34:32 +03:00
PJBot
ca0596e6f1 Automatic changelog update 2024-12-27 12:35:38 +00:00
crazybrain23
34e9979dc5 Arrivals blacklist for bluespace lockers and QSIs (#34072)
* Ensure Arrivals Blacklist in Bluespace Locker rule

* While I'm at it, stop the QSI too

* fix thing I broke somehow

* Every bluespace locker arrivals blacklisted

* Add ArrivalsBlacklist to the prototypes too
2024-12-27 13:34:30 +01:00
PJBot
fab5dd178d Automatic changelog update 2024-12-26 22:48:31 +00:00
ArtisticRoomba
bf727b0ab6 Reinforced tables require welding to construct/deconstruct (#33992) 2024-12-26 16:47:22 -06:00
Emisse
52d39aac46 bagel update (#34073) 2024-12-26 00:06:48 -07:00
Southbridge
4b34dd672e Amber Station - Fixed evac shuttle screens (#34071)
Added Devicenetwork component to ensure the screens work
2024-12-25 19:43:53 -07:00
TytosB
392046fc70 Loop Station update and fixes (#34067)
* many changes

* contentingregrationtests

* serialized invalid removed

* blank

* "Changes and fixes as suggested"

* blank

* blank

* added desk bells

* engi rework rework rework

* added gate to content integration

* tweaks

* aaa

* bbb

* added holopads

* ccc

* Update default.yml

* hotfix

* aaa

* bbb

* many many tweaks and fixes

* aaa

---------

Co-authored-by: Emisse <99158783+Emisse@users.noreply.github.com>
2024-12-25 12:16:58 -07:00
Emisse
7803254b6f bagel update (#34062)
* bagel update

* fixgridatmos

* fdsafds
2024-12-25 00:08:35 -07:00
War Pigeon
4064d554d6 Link Core cargo shuttle atmos devices (#34061)
* Link Core cargo shuttle atmos devices

* Remove configurator lines

This matches what the DeviceNetworks in core.yml look like now. Hopefully it works?
2024-12-24 23:21:39 -07:00
Ed
94186c4a6b Update twoHandedStaffs.yml 2024-12-25 09:04:43 +03:00
PJBot
c83532ec3f Automatic changelog update 2024-12-24 02:26:10 +00:00
lzk
1cbc8c1dcc Allow to paint multiple airlocks (#34001)
* Allow to paint multiple airlocks

* oh right
2024-12-24 03:25:03 +01:00
github-actions[bot]
31aec7385d Update Credits (#33998)
Co-authored-by: PJBot <pieterjan.briers+bot@gmail.com>
2024-12-24 03:15:26 +01:00
crazybrain23
4e9862d01f Add crazybrain23 to CODEOWNERS (#34038)
Add myself to CODEOWNERS

Basically just added myself where Nik was since I am also doing headmin things.
2024-12-24 03:14:42 +01:00
PJBot
8fcfca689f Automatic changelog update 2024-12-24 00:25:26 +00:00
Ed
1c33073af4 Multiple items in loadouts (#33193)
* loadouts update

* Update loadout_groups.yml

* darts to candles

* Update Resources/Prototypes/Loadouts/dummy_entities.yml

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2024-12-24 01:24:19 +01:00
August Sun
39b2ce8cef Adds more air alarms and sensors throughout Oasis, linked unlinked air devices (#34046)
Adds more air alarms and sensors throughout Oasis

Co-authored-by: august-sun <45527070+august.sun@users.noreply.github.com>
2024-12-23 17:22:37 -07:00
Pieter-Jan Briers
285e9349b6 Fix race condition causing disconnected admins to appear in adminwho (#34033) 2024-12-24 11:18:31 +11:00
August Sun
2c4be6be00 Increases Marathon cryosleep size, added meteor shielding to Marathon chapelroid (#34044)
Increases Marathon cryosleep size, added meteor shielding to chapelroid

Co-authored-by: august-sun <45527070+august.sun@users.noreply.github.com>
2024-12-23 16:34:01 -07:00
PJBot
843a5de809 Automatic changelog update 2024-12-23 23:26:02 +00:00
Booblesnoot42
2dd99b5669 Removed protolathe from cargo on Amber (#34027) 2024-12-23 16:24:54 -07:00
Booblesnoot42
5d8e916cb2 Remove cog cargo protolathe (#34026)
* Removed protolathe from cargo on Amber

* Removed protolathe from cargo on Cog

* Revert "Removed protolathe from cargo on Amber"

This reverts commit 422db6e34a54c9256e3e1aad2098b64ff4cf0f96.

revert commit that should have been done on another branch
2024-12-23 16:24:47 -07:00
PJBot
030f97b2be Automatic changelog update 2024-12-23 19:55:25 +00:00
amatwiedle
b82605b185 Fix borgs being able to drink from buckets and spray bottles. (#32964)
* Added a check for if the entity trying to drink is a borg.

* Fixed missing namespace issue.

* Improved code conciseness.

* Removed borg chassis check, added stomach check.

* Removed unused namespace

---------

Co-authored-by: dankeaj <andrewjdanke@gmail.com>
2024-12-23 13:54:18 -06:00
Pieter-Jan Briers
f98192daff Fix the sensor monitoring console (#34035)
Still isn't really suitable to just map but at least it doesn't outright NRE anymore.

Alternative to #34032
2024-12-23 20:23:03 +01:00
Ed
661e96831f bruh 2024-12-23 22:13:38 +03:00
slarticodefast
dfc0e0199a minor fix to "silent footsteps for ninja" (#34040)
minor fix
2024-12-23 21:25:03 +03:00
PJBot
38bd2e5c1c Automatic changelog update 2024-12-23 14:25:20 +00:00
mubururu_
4ddd7d3c5f silent footsteps for ninja (#33280)
* waow

* nice suggestion

* nullable sound

* fix stuff

---------

Co-authored-by: Ed <96445749+TheShuEd@users.noreply.github.com>
Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2024-12-23 15:24:09 +01:00
slarticodefast
c873f90f6b Train: fix problematic atmos setup (#34018)
fix atmos setup
2024-12-22 13:41:35 -07:00
ScarKy0
f28c8127e2 Localized holopads for Box (#34011)
I love holopads
2024-12-22 12:56:30 -07:00
Pieter-Jan Briers
1450c4cade Specify privacy policy for Wizard's Den (#34013) 2024-12-22 17:12:37 +01:00
slarticodefast
2ff8238030 Merge stable into master (#34008) 2024-12-22 14:38:39 +01:00
Ed
4173d96d83 Merge remote-tracking branch 'upstream/staging' into ed-22-12-2024-upstream
# Conflicts:
#	Content.IntegrationTests/Tests/PostMapInitTest.cs
#	Content.IntegrationTests/Tests/ResearchTest.cs
#	Resources/Prototypes/Entities/Objects/Decoration/flora.yml
#	Resources/Prototypes/Entities/Objects/Misc/spaceshroom.yml
#	Resources/Prototypes/Maps/Pools/default.yml
2024-12-22 15:48:30 +03:00
Ed
6331379213 swap to RU 2024-12-22 15:45:16 +03:00
Errant
3358801b42 2024-12-20 Release "HoLoopad Holiday" (#34007) 2024-12-22 09:21:53 +01:00
Errant
58181c3412 adjust eshotgun recharge delay (#33996) 2024-12-22 09:02:55 +01:00
PJBot
1abe9db99c Automatic changelog update 2024-12-21 07:03:11 +00:00
Leon Friedrich
7baa1ae070 Update engine to v238.0.0 (#33980) 2024-12-21 18:02:04 +11:00
PJBot
b3551fb000 Automatic changelog update 2024-12-21 06:46:54 +00:00
Leon Friedrich
06e2bba8ab Toolshed refactor (#33598)
* Content changes for engine toolshed PR

* add contains command

* more permissive commands
2024-12-21 17:45:48 +11:00
metalgearsloth
b011dbb61e Update submodule to 237.4.0 (#33976) 2024-12-21 16:08:39 +11:00
metalgearsloth
9f4aa1ebe0 Implement some field-level deltas (#28242)
* Update GasTileOverlayState

* Update DecalGridState

* Update NavMapState

* poke

* poke2

* poke3

* Implement field deltas for guns

* Content done

* Update

---------

Co-authored-by: ElectroJr <leonsfriedrich@gmail.com>
2024-12-21 15:54:11 +11:00
PJBot
1f859167fd Automatic changelog update 2024-12-21 03:29:53 +00:00
JustinWinningham
12c5c7e91b Wood walls from barricades (#33902)
* Wood wall is now built from barricade congraph and on top of a barricade instead of using rods

* Fixed construction instructions for wooden wall

* Wood wall is now built from barricade congraph and on top of a barricade instead of using rods

* Fixed construction instructions for wooden wall

* fixed linter error

* Update Resources/Prototypes/Entities/Structures/Walls/walls.yml

Reasonable suggestion

Co-authored-by: Thomas <87614336+Aeshus@users.noreply.github.com>

* Update Resources/Prototypes/Entities/Structures/Walls/walls.yml

spelling error

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>

* removed ability to build wall from 'junk' wood barrier'

* fixed ability to pry overlay barricades and not allow them to extend to full wood walls

* renamed incorrectly named entity

* fixed default entity graph so as to not complain for unit tests

* corrected my incorrect assumptions and fixed destroy cost

---------

Co-authored-by: Thomas <87614336+Aeshus@users.noreply.github.com>
Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2024-12-21 04:28:46 +01:00
PJBot
00f12e092a Automatic changelog update 2024-12-21 02:15:15 +00:00
ScarKy0
03a54e90f5 Increase syndicate uplink discount amount to 6. (#33950)
* Increase uplink discounts from 3 to 7

* nevermind, 6
2024-12-20 20:14:08 -06:00
PJBot
9a4f9561e6 Automatic changelog update 2024-12-20 22:35:50 +00:00
pocl v
3a917bcb56 Diona chirping & Nymph vocals (#32511)
* Adds chirping to adult diona

* Added vocals for diona nymph

* Nymphs now have a speechsound
2024-12-20 23:34:44 +01:00
PJBot
50cc90fb41 Automatic changelog update 2024-12-20 22:16:46 +00:00
lzk
919fdc0798 Add description of tool qualities to entity (#32436)
* Add description of tool qualities to entity

* LMAO I FORGOT FUCKING FTL FILE

* minor cleanup

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2024-12-20 23:15:40 +01:00
PJBot
bbceffac0e Automatic changelog update 2024-12-20 21:39:33 +00:00
AverageNotDoingAnythingEnjoyer
e4974cba25 Nanotrasen, Syndicate factions are now hostile to Dragons and Carps (#32515)
* Weh

Weh

* Now hostiles too!

Added Dragon to hostile factions for Hostiles

* Nah

Better not do this, I think
2024-12-20 22:38:27 +01:00
PJBot
a89d254425 Automatic changelog update 2024-12-20 21:28:04 +00:00
beck-thompson
a0a405768a Add clearer defib cooldowns! (#31251)
* First commit

* Fix silly test

* Swiched stuff up

* Update Content.Shared/Medical/DefibrillatorComponent.cs

* remove unneeded visuals

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2024-12-20 22:26:56 +01:00
PJBot
0e850ab370 Automatic changelog update 2024-12-20 20:36:01 +00:00
CaptainMaru
5a07413ef8 All hostile turret (#33970)
* All hostile turret

* Other factions are now hostile against "all hostile" too
2024-12-20 23:34:53 +03:00
Errant
1419b8868e combine licence files for StationEvents audio (#33972)
* merge licence files

* actual commit

* whoops
2024-12-20 21:51:03 +03:00
PJBot
f19377d6cb Automatic changelog update 2024-12-20 16:18:20 +00:00
VideoKompany
4c0a1348bd Fix communication console menu (#33655)
fix Communication console
2024-12-20 10:17:13 -06:00
PJBot
f4fd64756f Automatic changelog update 2024-12-20 14:37:03 +00:00
Piras314
34b906640f Remove Clearly Nuclear on Author's Request (#33971)
Revert "New Nukie Song (#25765)"

This reverts commit 806c0d162f.
2024-12-20 15:35:54 +01:00
metalgearsloth
a2912e3922 Add MovementSound (#31313)
Mainly useful for medicalborg so you can get a looping sound and not footsteps playing over and over.

Didn't actually update medborg because footsteps need updating.

Not needed for AI.
2024-12-20 14:51:17 +03:00
IProduceWidgets
864c2257b0 add man-o-war shuttle (#32105)
manowar
2024-12-20 14:36:23 +03:00
chromiumboy
39600f9516 Minor fixes for the holopad (#33969)
Initial commit
2024-12-20 13:51:00 +03:00
github-actions[bot]
7f2907a93a Update Credits (#33865)
Co-authored-by: PJBot <pieterjan.briers+bot@gmail.com>
2024-12-19 22:51:28 +01:00
August Sun
0462993153 Fixes/removes borg spawnpoint from Oasis Engineering, added one to Robotics (#33960)
removed borg spawnpoint from engineering, added one to robotics

Co-authored-by: august-sun <45527070+august.sun@users.noreply.github.com>
2024-12-19 13:02:35 -07:00
ArtisticRoomba
ee72cdacdc Update Fland for holopads (#33962)
* update fland for holopads

* fix duplicate holopad name
2024-12-19 12:55:41 -07:00
TytosB
fe69ef63f0 Loopstation hotfix (#33958)
Co-authored-by: Emisse <99158783+Emisse@users.noreply.github.com>
2024-12-19 20:26:14 +01:00
PJBot
ae5c1f5995 Automatic changelog update 2024-12-19 17:22:37 +00:00
Plykiya
7f6d55a1b6 Fix: Update armor crate description (#33414)
Update armor crate
2024-12-19 18:21:27 +01:00
chromiumboy
209c1769ee Tweaks for the holopad (#33928)
* Initial commit

* AIs get a warning when trying to answer long distance calls

* Better handling of ending telephone calls

* Fixed issue with duplicated holopad window when an AI answers a summons

* Changed how ranges are handled, added the bluespace holopad

* Bug fixes

* More bug fixes

* More bug fixes

* Update Resources/Prototypes/Entities/Structures/Machines/holopad.yml

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>

* Update Resources/Prototypes/Entities/Structures/Machines/holopad.yml

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2024-12-19 18:20:20 +01:00
LevitatingTree
25980d8888 Remove plushie_lizard_mirrored.png (#33855)
* Remove plushie_lizard_mirrored.png

* Remove from meta.json

* Replace mirrored state from yml

---------

Co-authored-by: LevitatingTree <None>
2024-12-19 17:44:48 +01:00
PJBot
efa76be390 Automatic changelog update 2024-12-19 11:32:19 +00:00
Centronias
128721ee4e Logic Gate Compatibility with Non-Logic Signals bugfix (#33792)
:)
2024-12-19 12:31:13 +01:00
SpaceLizard
ef45c16667 Food Container Size Increase (#33842)
* Stuff

* hehe

* moar.
2024-12-19 13:15:48 +03:00
PJBot
2581c24bfe Automatic changelog update 2024-12-19 09:39:31 +00:00
TytosB
043510fb51 New mid pop station: Loop (#33697)
* many changes

* contentingregrationtests

* serialized invalid removed

* blank

* "Changes and fixes as suggested"

* blank

* blank

* added desk bells

* engi rework rework rework

* added gate to content integration

* tweaks

* aaa

* bbb

* added holopads

* ccc

* Update default.yml

---------

Co-authored-by: Emisse <99158783+Emisse@users.noreply.github.com>
2024-12-19 02:38:22 -07:00
ArtisticRoomba
66ea113eda Omega Power Rebalance (#33956)
* fix packed power

* Revert "fix packed power"

This reverts commit 4f44d0673e0a597bea39c594f5b7ace3069433ea.

* fic the entire thing again
2024-12-18 22:13:01 -07:00
ArtisticRoomba
c1b229aea5 Packed Power Rebalance + Gas Sensors Adjustments (#33955)
* fix packed power

* fix that

* fix that as well

* even more fixes

* fix power, again
2024-12-18 20:48:14 -07:00
ArtisticRoomba
28fa7cedc7 Meta Power Rebalance + Gas Pipe Sensors, Holopads (#33949)
power fixes, sensors, dim lights
2024-12-18 18:05:06 -07:00
Southbridge
943be3e75c Amber Statio - Localized Holopads and Balance Updates (#33948)
* Added loc versions of holopads to Amber, and made some adjustments given Acorn's feedback

* fixed the name of the gameroom

* Fixed it in the map file
2024-12-18 17:52:46 -07:00
Spanky
e7d5ab67ec Omega Update (Localized Holopads) (#33946)
* Omega Update (Localized Holopads)

Replaced all holopads with localized versions and a couple tiny misc

* Remove engi protolathe

* Forgot to rename engi fax whoops
2024-12-18 17:52:35 -07:00
PJBot
e70a3b8a21 Automatic changelog update 2024-12-19 00:47:43 +00:00
ArtisticRoomba
9de569d973 Show battery level for selected devices in Power Monitoring Console (#33854)
* Use class instead of out variables

* Show battery level in power monitoring console

* Better color contrast for battery level + localized string

* Add visualization to battery percentage

* Reverts random ChatSystem.cs whitespace change

* Address review

* Show BatteryLevel stats in child view when selecting devices

---------

Co-authored-by: Crotalus <crotalus@users.noreply.github.com>
2024-12-19 01:46:36 +01:00
Winkarst
f7bf694707 Comment LogTypes (#33497)
* Comment LogTypes

* Uncomment unused types

---------

Co-authored-by: Winkarst <74284083+Winkarst-cpu@users.noreply.github.co>
2024-12-19 01:18:04 +01:00
PJBot
383ecdd70f Automatic changelog update 2024-12-19 00:13:07 +00:00
Hannah Giovanna Dawson
c33d3350bd [Christmas] Y'all want a Smite Cranberry? (#33922)
* Add a festive lemon-lime soda variant: cranberry!

* Gave lemon-lime a brand name

* Make the CrateFoodSoftdrinksLarge slightly larger to accomodate the extra drinks.

* Extend the Christmas anomaly with extra jolliness

* Minor spelling mistake. Jollyness will not be denied.

* Removed redundant delay from meta file
2024-12-19 01:11:59 +01:00
Spanky
8f36d7d1c8 Reach/Cargo Update (Holopads & Atmos) (#33943)
* Reach/Cargo Update

Adds holopads and new atmos tech to Reach, and replaces cargo shuttle/ATS holopads with localized versions.

* Fix Invalid

invalidinvalidinvalidinvalidinvalidinvalid
2024-12-18 16:29:21 -07:00
ScarKy0
fa6de41ae9 Localized holopads + atmos network for Oasis (#33941)
Oasis stuff
2024-12-18 16:10:53 -07:00
Spanky
6f42ebf206 Packed Update (Holopads & Engi Stuff) (#33940)
Packed Holopad & Engi Update

Added holopads, atmos network monitor and sensors, advanced SMES, and revamped TEG setup.
2024-12-18 15:42:01 -07:00
ScarKy0
18de5ea986 Localized holopads for Bagel (#33934)
* Stuff

* Requested changes
2024-12-18 14:45:12 -07:00
ArtisticRoomba
52117fdc13 Marathon Power Rebalance + Gas Pipe Sensors, Holopads (#33938)
* fix marathon power

* add holopads

* add requested changes
2024-12-18 14:28:46 -07:00
ScarKy0
8a0edad886 Localized holopads for Cog (#33937)
* coggers

* Requested changes
2024-12-18 13:54:09 -07:00
PJBot
4fe69f2383 Automatic changelog update 2024-12-18 16:33:03 +00:00
ArtisticRoomba
345adcd5d0 New Drazil plushie (inverse lizard plushie) (#33776)
* Hew

* properly attribute hew.ogg

* add to maints locker plushie pool with low chance, clear up grammar

* shhhh nobody saw that linter failure

* adds localization support for Weh and Hew emotes

* fix capitalization error present since circa 2/25/2024

* resolve conflicts, fix sprite, add reversed inhands

* clear up cursed formatting
2024-12-18 17:31:55 +01:00
Ed
18fe8b9df0 Sprite Movement working with AI movement (#33494)
* FINALLY

* Update animals.yml
2024-12-18 17:15:34 +01:00
PJBot
b649517a17 Automatic changelog update 2024-12-18 15:14:46 +00:00
RedBookcase
c1558f689f Mercenary gear contraband tweaks. (#33647)
* Mercenary gear contraband tweaks.

* Fixed Mercenary Combat Gloves to have basic Combat Gloves as a parent again.

* Update Resources/Prototypes/Entities/Clothing/OuterClothing/vests.yml

---------

Co-authored-by: RedBookcase <Usualmoves@gmail.com>
Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2024-12-18 16:13:40 +01:00
PJBot
97a2e0deef Automatic changelog update 2024-12-18 15:06:22 +00:00
SlamBamActionman
659bc8f2de Replace Cellular Slime mob damage with Caustic (#33104)
Cellular gone
2024-12-18 16:05:15 +01:00
Nim
868699a219 More beer, wine and ale (#686)
* more beer

* ru

* comoss fix update, loc change to eng

* Update dwarf.yml

---------

Co-authored-by: Ed <edwardxperia2000@gmail.com>
2024-12-18 17:37:06 +03:00
PJBot
d01839a990 Automatic changelog update 2024-12-18 14:28:05 +00:00
MilenVolf
8359541706 Fix hugging buckled mobs instead of unbuckling (#33635)
* Check buckle.BuckledTo value before hugging interaction

* Make InteractHandEvent to be used by BuckleSystem before InteractionPopupSystem instead of after
2024-12-18 15:26:58 +01:00
PJBot
337ef6c5aa Automatic changelog update 2024-12-18 13:16:13 +00:00
slarticodefast
e7294bdf4f Only disable panicbunker for admins with AdminFlags.Admin (#33879)
* Only disable panicbunker for admins with AdminFlags.Admin

* nicer curly braces
2024-12-18 14:15:04 +01:00
Centronias
6b99493e80 Reduce network burden of the hunger system (#32986)
* reduce network burden of the hunger system

* explicit start + last updated

* remove auto reformat changes to otherwise untouched code

add clamp helper

* imagine making breaking changes, documenting them, and then not thinking to check the yaml

* comments

* Remove unused net manager in hunger system
Remove lastAuthoritativeHungerValue from prototypes
2024-12-18 14:06:02 +01:00
ScarKy0
87f39af1cf Holopad prototypes for mapping (#33931)
* Init

* fix

* Atmosn't

* ID fixes

* locale
2024-12-18 12:38:00 +01:00
PJBot
94594debf3 Automatic changelog update 2024-12-18 11:27:28 +00:00
lzk
6c925d2c82 Make safes craftable (#32694)
* Made the Armory Gun Safe craftable with 10 steel, 10 plasteel, and 5 LV cables.

* Changed gun safe price to 335, to match the cost of its material components. Changed gun safe to start with no accesses when constructed.

* adress the review

* yeah

* wrah

* test fail is not real

---------

Co-authored-by: Ty Ashley <42426760+TyAshley@users.noreply.github.com>
2024-12-18 12:26:19 +01:00
ArtisticRoomba
1c0db473bc Fland Power Rebalance + Gas Pipe Sensors (#33933)
fix fland power
2024-12-18 04:09:50 -07:00
ArtisticRoomba
9f0a8aac7d Cog Power Rebalance + Holopads, Gas Pipe Sensors (#33930)
* fix cog power

* double fix cog power

* trial 3

* fourth go

* i stopped counting
2024-12-18 02:52:21 -07:00
Spanky
50fddd0804 Cargo Shuttle/ATS Update (#33927)
Update Cargo Shuttle/ATS

Adds holopads to the cargo shuttle and ATS. Also replaces the blast door buttons on the cargo shuttle with locked variants.
2024-12-18 01:37:56 -07:00
ArtisticRoomba
42f7279f52 Box Power Rebalance + Holopads, Gas Pipe Sensors (#33929)
* fix power

* Rebalance power, add holopads, add pipenet sensors

* recolor that one pipe I missed + remove invalids

* resave map, if this fails tests one more time, no more cake
2024-12-18 01:17:48 -07:00
Spanky
8b0b822207 Omega Update (Holopads & Engi Stuff) (#33926)
Omega Update

Add holopads, atmospheric network monitors & sensors, and advanced SMES's.
2024-12-17 22:55:09 -07:00
ArtisticRoomba
91b85be1a4 Bagel Power Rebalance + Gas Pipe Sensors (#33925)
* Balances bagel power

* Adds gas pipe sensors

* remove invalids :)
2024-12-17 21:45:50 -07:00
Southbridge
122e307694 Amber Station - Added Holopads, Atmos Monitoring, and Advanced SMESes (#33923)
* Added holopads and atmos network monitoring.

* Added the advanced SMESes to the station and evac shuttle

* Removed an accidentally mapped vox air alarm

* Fixed invalids in the escape shuttle
2024-12-17 21:44:29 -07:00
PJBot
ecc2edea6d Automatic changelog update 2024-12-18 00:13:41 +00:00
slarticodefast
908e476643 Fix admins not being able to health scan slimes (#33884) 2024-12-18 01:12:35 +01:00
Tiniest Shark
aaec1e684e Ground Light Post Crafting Description Fix (#33920)
Updates ground light post's crafting description
2024-12-18 01:03:45 +01:00
PJBot
5863cfc78a Automatic changelog update 2024-12-18 00:00:00 +00:00
ArtisticRoomba
e7330ece9c Adds Advanced SMES, an SMES with higher capacity for mapping (#33757)
* Adds Advanced SMES machine and board to autolathe roundstart

* Make Advanced SMES T2 Advanced Powercells research, reduce cost, remove from random spawner, add sprites by augustsun

* fix attribution formatting

* Update smes.yml to address review

Co-authored-by: ScarKy0 <106310278+ScarKy0@users.noreply.github.com>

* add new sprites and change naming scheme, testing something

* address review, tested it a bit more, works ingame

---------

Co-authored-by: ScarKy0 <106310278+ScarKy0@users.noreply.github.com>
2024-12-18 00:58:53 +01:00
PJBot
27cb17f865 Automatic changelog update 2024-12-17 23:57:11 +00:00
Golinth
a9cf54aca8 Fix AME power generation (#32825)
* Change AME power generation

* Fix negative power, change formula slightly
2024-12-18 00:56:02 +01:00
slarticodefast
984b29082d Update PR size labeler line counts (#33915)
new numbers
2024-12-18 00:40:49 +01:00
ScarKy0
a55d26eb8b Holopads + Atmos Network Console for Bagel (#33921)
Holopads!
2024-12-17 16:17:37 -07:00
Ed
8fbaffe2e7 Gate map: Holopads added (#33918)
Update gate.yml
2024-12-17 14:37:19 -07:00
Myra
77a4cda8bc Master merge: Fix horrible lag in Zombies mode (#33818) (#33917) 2024-12-17 20:19:31 +00:00
psykana
59e955a559 Fix horrible lag in Zombies mode (#33818) 2024-12-17 21:16:05 +01:00
Saphire
3fe576b4c9 Merge main and stable back together 2024-12-18 01:59:46 +06:00
Myra
fb6e85e87e Test can now run on stable prs (#33914)
Make tests also run on stable and staging
2024-12-17 20:40:57 +01:00
PJBot
616ddc1776 Automatic changelog update 2024-12-17 19:19:23 +00:00
chromiumboy
7780b867ac Holopads (#32711)
* Initial resources commit

* Initial code commit

* Added additional resources

* Continuing to build holopad and telephone systems

* Added hologram shader

* Added hologram system and entity

* Holo calls now have a hologram of the user appear on them

* Initial implementation of holopads transmitting nearby chatter

* Added support for linking across multiple telephones/holopads/entities

* Fixed a bunch of bugs

* Tried simplifying holopad entity dependence, added support for mid-call user switching

* Replaced PVS expansion with manually networked sprite states

* Adjusted volume of ring tone

* Added machine board

* Minor features and tweaks

* Resolving merge conflict

* Recommit audio attributions

* Telephone chat adjustments

* Added support for AI interactions with holopads

* Building the holopad UI

* Holopad UI finished

* Further UI tweaks

* Station AI can hear local chatter when being projected from a holopad

* Minor bug fixes

* Added wire panels to holopads

* Basic broadcasting

* Start of emergency broadcasting code

* Fixing issues with broadcasting

* More work on emergency broadcasting

* Updated holopad visuals

* Added cooldown text to emergency broadcast and control lock out screen

* Code clean up

* Fixed issue with timing

* Broadcasting now requires command access

* Fixed some bugs

* Added multiple holopad prototypes with different ranges

* The AI no longer requires power to interact with holopads

* Fixed some additional issues

* Addressing more issues

* Added emote support for holograms

* Changed the broadcast lockout durations to their proper values

* Added AI vision wire to holopads

* Bug fixes

* AI vision and interaction wires can be added to the same wire panel

* Fixed error

* More bug fixes

* Fixed test fail

* Embellished the emergency call lock out window

* Holopads play borg sounds when speaking

* Borg and AI names are listed as the caller ID on the holopad

* Borg chassis can now be seen on holopad holograms

* Holopad returns to a machine frame when badly damaged

* Clarified some text

* Fix merge conflict

* Fixed merge conflict

* Fixing merge conflict

* Fixing merge conflict

* Fixing merge conflict

* Offset menu on open

* AI can alt click on holopads to activate the projector

* Bug fixes for intellicard interactions

* Fixed speech issue with intellicards

* The UI automatically opens for the AI when it alt-clicks on the holopad

* Simplified shader math

* Telephones will auto hang up 60 seconds after the last person on a call stops speaking

* Added better support for AI requests when multiple AI cores are on the station

* The call controls pop up for the AI when they accept a summons from a holopad

* Compatibility mode fix for the hologram shader

* Further shader fixes for compatibility mode

* File clean up

* More cleaning up

* Removed access requirements from quantum holopads so they can used by nukies

* The title of the holopad window now reflects the name of the device

* Linked telephones will lose their connection if both move out of range of each other
2024-12-17 20:18:15 +01:00
Errant
bbf5369f14 Core - remove vox box (#33911)
remove Core vox box
2024-12-17 20:08:22 +01:00
Errant
332f870304 Oasis - remove vox box (#33912)
remove oasis vox box
2024-12-17 20:07:27 +01:00
slarticodefast
0fc2cca10c HOTFIX: Add [MRP] tag to the hostname for Salamander (#33909) 2024-12-17 14:37:53 +01:00
PJBot
ab8447956c Automatic changelog update 2024-12-17 13:36:36 +00:00
Tiniest Shark
32164c2ab8 Anomaly Scanner In-hand Sprites (#33427)
* Adds in-hand sprites to the Anomaly Scanner.

* Revert "Adds in-hand sprites to the Anomaly Scanner."

This reverts commit 257efd032a15d6459043f47106bd537abfe18fad.

im very stupid and need to undo my dumb commit.

* okay actually making sure these are committed this time like a smart boi

* Better version of the sprites based off of /tg station's health analyzer.

* Updated copyright to include link to sprite

* Updated copyright license and commit link

* Update Resources/Textures/Objects/Specific/Research/anomalyscanner.rsi/meta.json

Co-authored-by: Thomas <87614336+Aeshus@users.noreply.github.com>

* Update Resources/Textures/Objects/Specific/Research/anomalyscanner.rsi/meta.json

Aeshus adjusted indentation to better match original file.

Co-authored-by: Thomas <87614336+Aeshus@users.noreply.github.com>

---------

Co-authored-by: Thomas <87614336+Aeshus@users.noreply.github.com>
2024-12-17 14:35:23 +01:00
PJBot
0d31b8c37a Automatic changelog update 2024-12-17 11:57:55 +00:00
Patrik Caes-Sayrs
8f2d16aabf Zombies keep their anomalies on zombification (#33867)
* Zombies keep their anomalies on zombification

* Refactor anombies to isolate anomalies and zombies

InnerBodyAnomalies now send an event when the host dies.
Zombies cancels this event if the host is turning into a zombie.

* Anomazombies: deprecate CancellableEntityEventArgs

CancellableEntityEventArgs is deprecated. Use structs
with bool Cancelled instead.
2024-12-17 14:56:47 +03:00
PJBot
67e5cc2104 Automatic changelog update 2024-12-17 10:07:40 +00:00
Ed
a77fcdec76 Gate map (#32032)
* import

* remove perma asteroid

* remove cyrillic

* ok

* Remove Chromite island, Move AI, add cameras

* remove mapped garbage

* add station anchors

* admeme teleporter

* remove wapr points, add nav beacons

* telecomm, camera servers, some atmos fix

* crew server

* remove white plating, fix MANY pipestacking

* playtest bugs fixing

* big update

* bunch minor fixes

* Update gate.yml

* out of rotation
2024-12-17 13:06:33 +03:00
Southbridge
d90f6ce086 Amber station updates (#33899)
* Fixed various issued identified during playtests.

* Fixed a firelock stuck closed

* Added more cameras and moved others

* Fixed an issue with disposals

* Modified the map a bit after watching some matches and listening to feedback

* Reworked sec some more. Moved perma out into its own separate ship (another design from Frontier) Also performed various improvements to the station.

* Added final touches, ready to PR

* Added some more loot rooms throughout the map

* Changed up some areas in maints that I didn't like

* Removed footprints outside detective's room and wrenched down the logic gates in the ship building airlock

* I totally didn't forget to add the lights
2024-12-16 23:43:55 -07:00
PJBot
038ba39b97 Automatic changelog update 2024-12-17 03:54:23 +00:00
chromiumboy
27e59d35fb Atmospheric network monitor (#32294)
* Updated to latest master version

* Added gas pipe analyzer

* Completed prototype

* Playing with UI display

* Refinement of the main UI

* Renamed gas pipe analyzer to gas pipe sensor

* Added focus network highlighting and map icons for gas pipe sensors

* Added construction graph for gas pipe sensor

* Improved efficiency of atmos pipe and focus pipe network data storage

* Added gas pipe sensor variants

* Fixed gas pipe sensor nav map icon not highlighting on focus

* Rendered pipe lines now get merged together

* Set up appearance handling for the gas pipe sensor, but setting the layers is bugged

* Gas pipe sensor lights turn off when the device is unpowered

* Renamed console

* The gas pipe sensor is now a pipe. Redistributed components between it and its assembly

* AtmosMonitors can now optionally monitor their internal pipe network instead of the surrounding atmosphere

* Massive code clean up

* Added delta states to handle pipe net updates, fixed entity deletion handling

* Nav map blip data has been replaced with prototypes

* Nav map blip fixes

* Nav map colors are now set by the console component

* Made the nav map more responsive to changes in focus

* Updated nav map icons

* Reverted unnecessary namespace changes

* Code tidy up

* Updated sprites and construction graph for gas pipe sensor

* Updated localization files

* Misc bug fixes

* Added missing comment

* Fixed issue with the circuit board for the monitor

* Embellished the background of the console network entries

* Updated console to account for PR #32273

* Removed gas pipe sensor

* Fixing merge conflict

* Update

* Addressing reviews part 1

* Addressing review part 2

* Addressing reviews part 3

* Removed unnecessary references

* Side panel values will be grayed out if there is no gas present in the pipe network

* Declaring colors at the start of some files

* Added a colored stripe to the side of the atmos network entries

* Fixed an issue with pipe sensor blip coloration

* Fixed delay that occurs when toggling gas sensors on/off
2024-12-17 04:53:17 +01:00
PJBot
f4765260cb Automatic changelog update 2024-12-16 19:24:38 +00:00
Ed
36c676741f Christmas anomaly (#33889)
* santa anomaly

* Update anomaly.yml

* injection

* Update anomaly.yml

* Update Resources/Locale/en-US/anomaly/inner_anomaly.ftl

Co-authored-by: ScarKy0 <106310278+ScarKy0@users.noreply.github.com>

* Update Resources/Textures/Structures/Specific/Anomalies/Cores/santa_core.rsi/meta.json

Co-authored-by: Errant <35878406+Errant-4@users.noreply.github.com>

* Update Resources/Textures/Structures/Specific/Anomalies/santa_anom.rsi/meta.json

Co-authored-by: Errant <35878406+Errant-4@users.noreply.github.com>

---------

Co-authored-by: ScarKy0 <106310278+ScarKy0@users.noreply.github.com>
Co-authored-by: Errant <35878406+Errant-4@users.noreply.github.com>
2024-12-16 22:23:31 +03:00
Ed
af7e552d3c Flora clean up (#33839)
* first migrate

* clean up prototypes

* Update polymorph.yml

* Update flora.yml

* and this one

* and this one x2

* and this one x3

* Update migration.yml
2024-12-16 20:20:36 +01:00
PJBot
9eda08cd12 Automatic changelog update 2024-12-16 18:53:16 +00:00
beck-thompson
74e9576e66 Figures can now be activated remotely (#32769)
* First commit

* I'm silly

* weh

* will this work?

* Better design

* Fixes!

* rider :(

* L rider
2024-12-16 19:52:09 +01:00
PJBot
001b0edc7e Automatic changelog update 2024-12-16 17:54:45 +00:00
goet
db69ae67fe Spaceshroom grilling (#31872)
* make spaceshroom cookable on grill

* remove microwave recipe
2024-12-16 18:53:38 +01:00
Intoxicating-Innocence
2ccd471388 Chem master UI (#33328)
* chemmaster buffer has colors now

* I have saved chemists everywhere

* implimented panelcontainers instead of labels, slight visual rework

* added UI changes to input buffer

* fixed some unsightly indentation on brackets and removed redundant minheight specification from verticalstretch elements

* Formatting and code cleanup

* pills still not rendering correctly

* more tinkering, entities finally display correctly

* entities display correctly, pill fields default to max now

* fixed stripes

* fixed excess pillCount bug

* removed cache, fixed tab swapping

---------

Co-authored-by: Saphire <lattice@saphi.re>
2024-12-16 18:17:06 +01:00
PJBot
74f873a9f7 Automatic changelog update 2024-12-16 16:28:47 +00:00
Vexerot
17e3ef32b7 Add Explosion Resistance to SecBelts (#33253)
Added explosion resistance to secbelt
2024-12-16 17:27:40 +01:00
PJBot
c35505c6b4 Automatic changelog update 2024-12-16 15:34:39 +00:00
SlamBamActionman
95328dab68 Add Holy damage (#32755)
* Initial commit

* hoili moili

* now to add sherlock and doctor who

* funny stick

* Oops it was meant to be called metaphysical

* Attribution

* Even BETTER attribution
2024-12-16 16:33:32 +01:00
PJBot
046dde7717 Automatic changelog update 2024-12-16 15:26:13 +00:00
dragonryan06
1e80dd2891 Add the Zombie, a new cocktail (#32802) 2024-12-16 16:25:06 +01:00
PJBot
782a2978f0 Automatic changelog update 2024-12-16 14:20:21 +00:00
deathride58
d8afcdcdf0 Makes admins not count towards the playercount cap (#33424)
* Makes admins not count towards the playercount cap

* Update Content.Shared/CCVar/CCVars.Admin.cs (thx Aeshus

Co-authored-by: Thomas <87614336+Aeshus@users.noreply.github.com>

* Actually fixes whitespace on the comments
Thanks VScode very good IDE

---------

Co-authored-by: Thomas <87614336+Aeshus@users.noreply.github.com>
2024-12-16 17:19:15 +03:00
PJBot
1368092d43 Automatic changelog update 2024-12-16 14:15:57 +00:00
KieueCaprie
881e4d3432 Add an in-hand sprite for the lizard plushie (#32583)
* add hold sprites for lizard plushie

* make the lizard plushie sprites slightly chonkier for those who are not wearing winter clothes.

* me when i hit the noise button and pretend it's shading.

* lizard plushie is not legally-distinct green dinosaur with a long tongue™ (front sprite tongue has been shortened)

* update meta.json
2024-12-16 17:14:51 +03:00
PJBot
2a6800f354 Automatic changelog update 2024-12-16 14:10:28 +00:00
Preston Smith
01c1d8f824 Prevent pulling when teleporting (#33252)
* No more teleporting pulling

* pulled dash

* Update Content.Shared/Ninja/Systems/DashAbilitySystem.cs

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>

* Update Content.Server/Implants/SubdermalImplantSystem.cs

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2024-12-16 17:09:17 +03:00
PJBot
852b3e9bb6 Automatic changelog update 2024-12-16 12:54:28 +00:00
Baa
1f42413416 Fix udder wooly reagent creation V2 (#32905)
* Changed comments to be more clear and uniform.
EggLayer uses NextGrowth instead of frame accumulation.
Egglayer uses much less energy to make eggs, and lay time is randomized for player and AI chicken.

* UdderComponent ReagentId can be changed now
UdderSystem and WoolySystem use SharedSolutionContainerSystem now

* Entities with udders can be examined to see a rough hunger level
udders and wooly stop reagent generation/extra nutrient usage once the solution container is full

* Moved stuff to Shared
AutoPausedField now

* Cleanup moving stuff to Shared

* Oops. Make UdderSystem sealed instead of abstract.

* Switch PopupEntity for PopupClient

* Didn't mean to delete Access

* new() instead of default! prototype
revert egglayer balance change
NextGrowth += timespan   in egglayer

* forgot [Datafield] for NextGrowth

* forgot NetworkedComponent again...

* Renaming Shared Animal to Shared Animals to match Server
Hopefully also resolve merge conflicts.

* Fix incorrect filename

* Update with requested changes
Put UdderSystem dependencies in alphabetical order.
Initialise NextGrowth for Udder and Wooly components on MapInitEvent.
Clean-up EggLayerSystem a little.
Re-write OnExamine function for UdderSystem, improving clarity.
Add full stops to end of udder examine locales.
And more :)

* Add some additional descriptions for cow hunger levels.

* Add Udder and Wooly quantity to AutoNetworkedField

* Account for less than starving threshold.

---------

Co-authored-by: sirionaut <sirionaut@gmail.com>
Co-authored-by: Sirionaut <148076704+Sirionaut@users.noreply.github.com>
Co-authored-by: Tayrtahn <tayrtahn@gmail.com>
2024-12-16 13:53:21 +01:00
PJBot
d5323332a6 Automatic changelog update 2024-12-16 12:34:40 +00:00
Tayrtahn
cf738857fe Add a test to check that lathe recipes are possible (#33868)
* Add a test to check that all lathes accept the materials for all their recipesy

* Add check for storage limit

* Track total recipe material volume

* Check dynamic and emag recipes too

* Move AllLatheRecipesValidTest from ResearchTest to LatheTest

* Extremely minor modernization
2024-12-16 13:34:02 +01:00
beck-thompson
196782774b Add generator scrap (Plasma / uranium scrap) (#32198)
* First commit

* Forgot the shading!

* tweaked  values

* sprite update

* Radiation
2024-12-16 13:33:34 +01:00
metalgearsloth
386e431ea7 LightOnCollide entityquery (#33886) 2024-12-16 13:24:00 +01:00
deltanedas
2635888b6a add SpawnTableOnUse (#32620)
* add SpawnTableOnUse

* make BaseEmitSound more flexible and remove sound from spawntable

* add log

* :trollface:

---------

Co-authored-by: deltanedas <@deltanedas:kde.org>
2024-12-16 15:23:14 +03:00
ActiveMammmoth
cd23805750 Wizard Mind Swap Spell (#33416)
* working mind swap spell

* Removing unncessary spacing

Co-authored-by: Thomas <87614336+Aeshus@users.noreply.github.com>

* Changing mind swap speech

Co-authored-by: keronshb <54602815+keronshb@users.noreply.github.com>

* All requested changes in review

* Stores owned by mind instead of body

* Requested changes, traitor uplink fixed

* Revert "Requested changes, traitor uplink fixed"

This reverts commit 2ceac6733d6a28890f60d2ccef3dafa160a702fd.

* Revert "Stores owned by mind instead of body"

This reverts commit dfb72ab70ed66db50312617f2dce02d0a4e4dfce.

* Separate target and performer stun duration

---------

Co-authored-by: Thomas <87614336+Aeshus@users.noreply.github.com>
Co-authored-by: keronshb <54602815+keronshb@users.noreply.github.com>
2024-12-16 15:12:45 +03:00
PJBot
612f8bedab Automatic changelog update 2024-12-16 12:09:14 +00:00
Plykiya
a4d6f09a4f Cluster grenade refactor and contra markings (#31108)
* Cluster grenade refactor

* oopsies on the name

* Solve client-side errors

* reviews addressed

* filling scattering grenades is now predicted

* reviews addressed
2024-12-16 13:08:07 +01:00
TGRCDev
1266b05b02 Bug fixes for Store UIs with multiple currencies (#33565)
Fixed stores with multiple currencies having bad formatting and non-functional withdraw screens
2024-12-16 14:57:11 +03:00
PJBot
51a45ae640 Automatic changelog update 2024-12-16 11:54:25 +00:00
PJBot
e0a1db6e45 Automatic changelog update 2024-12-16 11:53:18 +00:00
psykana
5e8db16660 Zombies can see Initial Infected (#33665)
* Zombies can see Initial Infected

* Update zombie character info text
2024-12-16 14:53:13 +03:00
Litraxx
46d288cc39 Rename Dungeon Master Laws to not run into copyright problems (#33678)
* Rename Dungeon Master Laws to not run into copyright problems

* Revert direct map changes

* Added renaming of DungeonMasterCircuitBoard to migration.yml

* Remove whitespace changes to oasis.yml

---------

Co-authored-by: Litrax <email@emal.com>
2024-12-16 14:52:03 +03:00
Nim
a248c176ae Crane barrel (#672)
* crane barrel

* fix

* sprite resize, file rename

---------

Co-authored-by: Ed <96445749+TheShuEd@users.noreply.github.com>
2024-12-16 11:43:29 +03:00
Ed
862df73ff2 Demiplane modifiers groups & tiers (#678)
* data setup

* demiplanes modficators combine refactor

* generationProb

* demiplane tiers setup

* migration, and t2 loots

* t2 balance tweaks

* retags

* weather modifiers group

* maplight modifiers

* more passed checks

* wanderer buy positions localization fix

* fixes
2024-12-16 00:38:29 +03:00
Tayrtahn
5958801182 Separate RGlass recipe for autolathe and ore processor (#33876) 2024-12-15 22:02:32 +01:00
A.Ne.
57a795261f mithril and lucens modular parts (#682)
Co-authored-by: Ed <edwardxperia2000@gmail.com>
2024-12-15 22:40:05 +03:00
Ed
e102b5011e Merge remote-tracking branch 'origin/map-upate' 2024-12-15 22:17:29 +03:00
Viator-MV
35c45e70f6 Christmas map (#681)
* Update comoss.yml

* Update comoss_d.yml
2024-12-15 22:11:38 +03:00
A.Ne.
f655f74b03 mithril and lucens (#660)
* mithril and manarium

* Rename manarium to Lucens

* pointlight to tree

* lucens tile

* Update trees.yml

* logs sprite

* Update trees.yml

* delete acacia tiles, recolor lucen example

* tiles new palette

* Update ores.yml

Co-authored-by: Ed <96445749+TheShuEd@users.noreply.github.com>

* tiles update

* Update tiles.ftl

---------

Co-authored-by: Ed <96445749+TheShuEd@users.noreply.github.com>
2024-12-15 12:53:31 +03:00
PJBot
102d4fbc95 Automatic changelog update 2024-12-14 16:04:27 +00:00
Nim
df7b9d1e04 Other colour of the binary channel (#33841)
* radio

* color 2

* console-announcement

* 5ed7aa
2024-12-14 17:03:18 +01:00
Southbridge
7d82d2d5da Amber station updates (#33845)
* Fixed various issued identified during playtests.

* Fixed a firelock stuck closed

* Added more cameras and moved others

* Fixed an issue with disposals

* Modified the map a bit after watching some matches and listening to feedback

* Reworked sec some more. Moved perma out into its own separate ship (another design from Frontier) Also performed various improvements to the station.

* Added final touches, ready to PR
2024-12-14 16:59:43 +01:00
Errant
a3fc690236 Cherry-pick to stable: Amber Station - Playtest Fixes (#33773) (#33811)
Amber Station - Playtest Fixes (#33773)

* Fixed various issued identified during playtests.

* Fixed a firelock stuck closed

* Added more cameras and moved others

* Fixed an issue with disposals

Co-authored-by: Southbridge <7013162+southbridge-fur@users.noreply.github.com>
2024-12-14 16:40:21 +01:00
Ed
58269bb65e Snowballs (#677)
* snowballs

* biome update

* fixes
2024-12-14 14:57:15 +03:00
PJBot
744b105fc6 Automatic changelog update 2024-12-13 23:01:52 +00:00
godisdeadLOL
06071a5d8a Secret stash wrench anchoring fix (#31779)
* secret stash wrench fix

* fix

* cleanup

---------

Co-authored-by: YourUsername <you@example.com>
Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2024-12-14 00:00:45 +01:00
Ed
d7d0977eb6 New year preparation (#674)
* garland

* presents filter

* vladimirs weather

* snowed tilebrick
2024-12-14 01:01:36 +03:00
Ed
4cea96f6eb Garland (#673)
* garland

* presents filter
2024-12-13 22:20:00 +03:00
Ed
e30c5848c5 Update crates.yml 2024-12-13 17:55:54 +03:00
Ed
c9d2b8fb2b remove footprints (#670) 2024-12-13 17:33:42 +03:00
PJBot
2c00abbcae Automatic changelog update 2024-12-13 14:25:41 +00:00
Southbridge
7eb714d38f Monospace Support for Rich Text (#33830)
* Initial Commit

* Moved all this to SS14 on it's own

* Added prototype validation
2024-12-13 15:24:34 +01:00
Ed
e1f67be2a8 Snowdrifts (#669)
* snowdrifts

* Update fire.png

* alerts sprite optimize

* Update wooden.png

* stone wall fix
2024-12-13 16:59:37 +03:00
PJBot
e704f4e9a8 Automatic changelog update 2024-12-13 13:55:04 +00:00
LevitatingTree
b46f487503 Add meat tag to Five Alarm Burger (#33848)
* Add meat tag to Five Alarm Burger

* Revert "Add meat tag to Five Alarm Burger"

This reverts commit e483b5effe63a8cbdcce81eeddc622f5555ae240.

* Re-add tag, but in notepad

* Move tag down to follow hierarchy

---------

Co-authored-by: LevitatingTree <None>
2024-12-13 14:53:56 +01:00
Ed
3f8757dec9 Update migration.yml 2024-12-13 15:06:10 +03:00
PJBot
9329fcf32e Automatic changelog update 2024-12-13 03:11:29 +00:00
lzk
115b3e0519 Increase war ops evac time (#33628) 2024-12-12 21:10:20 -06:00
Ed
eb76a9ef6a Ed 12 12 2024 bugfixes (#668)
* fix #665

* fix #664

* fix #661

* fix #666
2024-12-12 23:00:16 +03:00
Ed
93a49ca398 Snowy (#659)
* snow tiles

* snow trees (2\6)

* +1 tree

* third snow layer, and simple snow biome
2024-12-12 21:51:03 +03:00
onesch
9d7846ed72 Safari hat In-hand Sprites (#33464)
* adds in-hand sprites to the safari hat.

* Update copyright wording

* visual fix

* Resprite in-hand sprites.

* linting meta.json
2024-12-12 18:09:43 +01:00
lzk
18322ec76f fix ghost command error string (#33838) 2024-12-12 11:18:53 -05:00
PJBot
b959a64f2c Automatic changelog update 2024-12-12 14:25:41 +00:00
Winkarst
48f62da2dc Update APE guidebook to contain Sigma particles, Transformation and colors for effects (#33558)
* Update APE guidebook

* Lang error

* Update Resources/ServerInfo/Guidebook/Science/APE.xml

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>

* Update Resources/ServerInfo/Guidebook/Science/APE.xml

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>

* Update Resources/ServerInfo/Guidebook/Science/APE.xml

Co-authored-by: chromiumboy <50505512+chromiumboy@users.noreply.github.com>

* Update Resources/ServerInfo/Guidebook/Science/APE.xml

Co-authored-by: chromiumboy <50505512+chromiumboy@users.noreply.github.com>

---------

Co-authored-by: Winkarst <74284083+Winkarst-cpu@users.noreply.github.co>
Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
Co-authored-by: chromiumboy <50505512+chromiumboy@users.noreply.github.com>
2024-12-12 15:24:34 +01:00
A.Ne.
2b3cc9e868 key rings fix (#620)
* key rings fix

* Update SharedCP14LockKeySystem.cs
2024-12-12 13:12:58 +03:00
onesch
842bbeb85f Warden headdresses In-hand Sprites (#33521)
* Adds in-hand sprites to the warden beret.

* Adds in-hand sprites to the warden cap.

* resprite in-hand sprites to the warden cap.
2024-12-12 02:44:48 +01:00
Ed
c42b77d0c9 Merge pull request #658 from crystallpunk-14/ed-11-12-2024-upstream
Upstream sync
2024-12-11 21:18:17 +03:00
Ed
6c8b0a07f3 yep 2024-12-11 21:17:43 +03:00
PJBot
67d444feb0 Automatic changelog update 2024-12-11 16:22:11 +00:00
BramvanZijp
ce9fc82382 Rework the HoS's Energy Shotgun (Varying energy consumption depending on fire-mode + re-adds a toned down self recharge.) (#32104)
* Rebalance HoS's Energy Shotgun

* SLIGHTLY Up the max charge so the gun properly recharges all of its charges, which matters a lot more with the self charge cooldown system.

* Prevent recharge cooldown if 0 power is used.

* Makes the clientside HUD actually update to reflect the changes in firecost and thus max/current charges.

* Properly fix that recharging to just under full issue instead of applying a budget fix to only the eshotgun.

* Clean up the client ammo UI fix.

* Update the self recharger component to comply with maintainer request.

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>

* Remove code that was made redundant by a hotfix from another PR.

* Make the recharge pause on EMP, document things where needed, clean up code as per maintainer request, add a note to make the code better when power is moved to shared.

* Fix another internal issue

* Code cleanup + fix the rapid recharge verb to remove pause.

* cleanup

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com>
2024-12-11 17:21:04 +01:00
PJBot
5ba868af79 Automatic changelog update 2024-12-11 15:59:10 +00:00
metalgearsloth
1a8e469c58 Fix battery self-recharge mispredicts (#33384) 2024-12-11 16:58:02 +01:00
Velcroboy
976cae9c78 Names camera routers (#33496)
Co-authored-by: Velcroboy <velcroboy333@hotmail.com>
2024-12-11 16:02:15 +01:00
PJBot
fc738b6690 Automatic changelog update 2024-12-11 14:31:38 +00:00
slarticodefast
c28f4fdc7f Fix greytide virus hitting other maps (#33806)
fix greytide virus hitting other maps
2024-12-11 15:30:29 +01:00
TGRCDev
89522e7144 Made anchor visuals generic (#33810)
Added a generic anchor visuals enum
2024-12-11 14:50:20 +01:00
Ed
af918c1253 Update audio_music.yml 2024-12-11 14:53:49 +03:00
Ed
be15a4097c Update cp14-ignoredPrototypes.yml 2024-12-11 14:49:44 +03:00
Ed
cd736e4fd4 Merge remote-tracking branch 'upstream/stable' into ed-11-12-2024-upstream
# Conflicts:
#	Content.IntegrationTests/Tests/PostMapInitTest.cs
#	Content.Shared/Lock/LockSystem.cs
#	Resources/Maps/oasis.yml
#	Resources/Prototypes/Maps/Pools/default.yml
#	Resources/Prototypes/audio.yml
2024-12-11 14:49:02 +03:00
Ed
576bbe91d0 Roofs (#657)
* simple roo system

* tweaks

* roof sprite update

* transparent roof

* wooden roof sprite

* remove weather: false from all tiles

* stone roof + roofs crafting

* final shtrix, maps update

* fuck

* fix checks

* reagent auto vaporize tweaks

* Update base.yml
2024-12-11 14:44:16 +03:00
Ed
e4b60b31c0 Ed 10 12 2024 aah (#656)
* fix ghost zlevel moving

* stairways autorotation

* ladders sprite update

* slow space swimming

* fix wrong wood spawn

* deadly ocean

* Update zLevels.yml
2024-12-10 21:24:06 +03:00
PJBot
7b681b66ae Automatic changelog update 2024-12-10 13:46:28 +00:00
metalgearsloth
2b487baea0 Fix blank newline on empty examine groups (#33813)
Construction always grants a blank newline even if it not currently constructing.
2024-12-10 14:45:20 +01:00
slarticodefast
7ed32f2c7d Merge into master: Derelict icon hotfix (#33768) (#33802) 2024-12-10 11:34:40 +01:00
PJBot
ee10fc246f Automatic changelog update 2024-12-10 10:01:27 +00:00
ArtisticRoomba
0e4728b6d4 Fix: SMES now has wirepanels visuals (#33808)
SMES now has wirepanels visuals
2024-12-10 11:00:17 +01:00
Ed
99786342fb Comoss sewers (zlevels added) (#655)
* comoss zlevel sewers

* Update biome_template_caves.yml

* Update GhostSystem.cs

* Update GhostSystem.cs
2024-12-10 00:43:30 +03:00
ArtisticRoomba
b1fca73f91 Meta station TEG power fixes + misc stuff (#33791)
* Fix Meta TEG power issues, give singulo more scaffold, give AI two cams in singulo containment like other stations

* remove serialized invalids because it happens to the best of us

* properly setup cameras, label substation and atmos APC while I'm here
2024-12-09 14:13:21 -07:00
Ed
22b0f46890 Roundleave ship clean up (#653)
* cryo shuttle rework

* Update entities.ftl
2024-12-09 20:39:56 +03:00
Ed
bec8d7a7d4 Ghost z-levels move actions + mapping z-levels combine command (#654)
* some setup

* fast ghost zlevels-moving

* zlevel combine command for mapping
2024-12-09 20:39:46 +03:00
PJBot
dd96f77faa Automatic changelog update 2024-12-09 17:14:04 +00:00
joshepvodka
9cb46d9343 Bar related tweaks (#33505)
* does everything

* beer flavor revert and linter fix

* Update Resources/Locale/en-US/flavors/flavor-profiles.ftl

Co-authored-by: Thomas <87614336+Aeshus@users.noreply.github.com>

* fix misspelling

* fix yet another misspelling

Co-authored-by: Thomas <87614336+Aeshus@users.noreply.github.com>

* english has weird spellings huh

* im starting to feel ashamed of myself

* this is shameful

---------

Co-authored-by: Thomas <87614336+Aeshus@users.noreply.github.com>
2024-12-09 18:12:57 +01:00
PJBot
35b1c04494 Automatic changelog update 2024-12-09 16:11:20 +00:00
ScarKy0
60bf48ccce You can now pet the AI core. (#33788)
Pettable AI core
2024-12-09 17:10:13 +01:00
ScarKy0
3844352fee Derelict icon hotfix (#33768)
whoops
2024-12-09 13:56:25 +01:00
slarticodefast
8bb4c82890 add "Changes: Audio" label to labeler (#33790)
add audio label to labeler
2024-12-09 11:56:30 +01:00
PJBot
a7957ddf65 Automatic changelog update 2024-12-09 08:55:30 +00:00
deathride58
5ab8e467a5 Adds an introductory message to the user-facing ahelp chat window (#33348)
* Adds an introductory message to the user-facing ahelp chat window

* Update Resources/Locale/en-US/administration/bwoink.ftl

* Update Resources/Locale/en-US/administration/bwoink.ftl

---------

Co-authored-by: chromiumboy <50505512+chromiumboy@users.noreply.github.com>
2024-12-09 09:54:23 +01:00
dylanstrategie
38c35d8315 Major Marathon atmospherics rework (#33688)
* Major Marathon atmospherics rework

* More atmos changes

---------

Co-authored-by: dylanstrategie <188926747+dylanstrategie@users.noreply.github.com~>
2024-12-08 23:21:04 -07:00
sleepyyapril
7fd89806e2 Fix Disposals Ejections (#33468)
* Fix disposals.

* Rename properly

---------

Co-authored-by: sleepyyapril <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>
2024-12-08 22:08:07 -06:00
PJBot
1510e892f0 Automatic changelog update 2024-12-09 03:52:59 +00:00
Plykiya
8f2b19e103 Popup when being pulled shows who is pulling you (#33612)
* Popup when being pulled

* Update Content.Shared/Movement/Pulling/Systems/PullingSystem.cs

Co-authored-by: MilenVolf <63782763+MilenVolf@users.noreply.github.com>

* Update Resources/Locale/en-US/movement/pulling.ftl

Co-authored-by: MilenVolf <63782763+MilenVolf@users.noreply.github.com>

---------

Co-authored-by: MilenVolf <63782763+MilenVolf@users.noreply.github.com>
2024-12-08 21:51:53 -06:00
PJBot
a7e1adf395 Automatic changelog update 2024-12-09 03:42:17 +00:00
Errant
d57e731635 Signal timer duration limit (#33781)
* max duration

* comment
2024-12-08 21:41:11 -06:00
PJBot
670f1a8e28 Automatic changelog update 2024-12-08 23:21:10 +00:00
slarticodefast
ede8a1d377 Fix gas pipe leaking when unanchoring or breaking them (#33774)
* fix gas pipe unanchoring

* remove unneeded update

* revert popup change
2024-12-09 00:20:04 +01:00
PJBot
c4556fcbfe Automatic changelog update 2024-12-08 22:51:22 +00:00
ArtisticRoomba
34bfc59b18 Fix detective Vox spawning with their chosen outer clothing on the floor, force detective to have a selected outerclothing like all other sec roles (#33765)
fix detective vox spawning with their outer clothing on the floor
2024-12-08 23:50:14 +01:00
PJBot
98ad7a872f Automatic changelog update 2024-12-08 22:38:41 +00:00
Pieter-Jan Briers
f9da25881d Singularity equipment can now be activated with E interact (#33762)
These were coded to only listen to InteractHand, which doesn't follow our interaction model properly.
2024-12-08 23:37:32 +01:00
Ed
5384adb2b3 Blacksmith again (#652)
* golden and copper sword

* copper sickle

* maces

* shovels

* modular axes

* fixes
2024-12-09 00:40:27 +03:00
Errant
0c4dd9d1b9 Revert "Simplify separated screen top menu (#33047)" (Stable -> Master) (#33785) 2024-12-08 22:14:34 +01:00
Vasilis The Pikachu
8472603b76 Revert "Simplify separated screen top menu (#33047)"
This reverts commit f27fa1ed30.
2024-12-08 21:36:48 +01:00
Ed
c2b7c5146d second blacksmith 2024-12-08 14:43:12 +03:00
Ed
61454e351c Another blacksmith minor update (#648)
* modular golden sickle

* anvil and furnace resprite

* Update comoss.yml
2024-12-08 14:17:48 +03:00
Southbridge
73d5129644 Amber Station - Playtest Fixes (#33773)
* Fixed various issued identified during playtests.

* Fixed a firelock stuck closed

* Added more cameras and moved others

* Fixed an issue with disposals
2024-12-07 23:31:51 -07:00
PJBot
4661e9ef86 Automatic changelog update 2024-12-08 01:47:48 +00:00
Pieter-Jan Briers
299b13f21b Give silicons proper lobby/character editor previews (#33763)
* Give silicons proper lobby/character editor previews

No more naked dummies, properly show a borg/AI sprite now.

This means taking the JobEntity into account when spawning the dummy. For AIs I had to add a "JobPreviewEntity" field because they'd look like a posibrain otherwise. AI therefore uses a custom dummy entity I defined.

Also I had to add some margins to the UI, because otherwise the 32x32 sprite of the AI would look bad.

* Update Content.Shared/Roles/JobPrototype.cs

* Update Content.Client/Lobby/LobbyUIController.cs

* Update Resources/Prototypes/Entities/Mobs/Player/silicon.yml

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2024-12-08 02:46:41 +01:00
github-actions[bot]
3d53e748fa Update Credits (#33772)
Co-authored-by: PJBot <pieterjan.briers+bot@gmail.com>
2024-12-08 01:57:20 +01:00
Myra
337952dcb4 Codeowners cleanup (#33297) 2024-12-08 01:01:57 +01:00
Ed
dc5333ee18 localization update 2024-12-08 01:19:57 +03:00
Ed
0662299120 Aftertest tweaks (#647)
* fix #641

* fix #639

* add copper, bloodflowers and wild sage into comoss island

* remove additional alchemist and blacksmithes roles

* more roundstart resources for alchemist and blacksmith

* disable footprints system

* cryo shuttle mechanic

* update cargo ship

* veryy magical

* tips update

* fix #635

* green cloak

* Update T0_cure_poison.yml
2024-12-08 00:52:35 +03:00
Emisse
c85642d920 let bagel be played at max pop (#33769) 2024-12-07 14:24:16 -07:00
SpaceManiac
20be8298b7 Organize the Sandbox Panel window (#33684)
* Organize Sandbox Panel

* Map Editing -> Editing

* Unset ToggleMode on Suicide button. Can hardly un-suicide, no?

* Remove 'Link machines' button that has done nothing for 3 years

* Remember Sandbox window's position instead of forcing to center

* Shows Spawns -> Show Spawns

* Remove SandboxSystem.MachineLinking
2024-12-07 19:13:56 +01:00
Ed
80be633aa1 Update ContentLocalizationManager.cs 2024-12-07 20:55:30 +03:00
Ed
264ef809bd Update personal_objectives.yml 2024-12-07 20:49:51 +03:00
Ed
ccc97f0e70 Update CP14SandboxRU.xml 2024-12-07 15:04:28 +03:00
Ed
15017b7c4f personal key loadout 2024-12-07 14:49:02 +03:00
Ed
2d54561a31 Update ContentLocalizationManager.cs 2024-12-07 12:41:51 +03:00
Emisse
7f5c3cf751 infiltrator update (#33759) 2024-12-07 01:36:03 -07:00
Southbridge
cf73cd5ddc Box Station - Now more festive! (#33751)
Added more holiday decorations
2024-12-06 23:53:36 -07:00
PJBot
1a96a2bcc8 Automatic changelog update 2024-12-07 05:59:31 +00:00
Piras314
0d45dfada9 Christmas Nuke Song (#33752)
* 圣诞歌曲

* Update Resources/Audio/StationEvents/attributions.yml

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2024-12-06 23:58:23 -06:00
PJBot
44daf85566 Automatic changelog update 2024-12-07 03:41:00 +00:00
metalgearsloth
9365e3a99b Predicted gas pumps (#33717)
* Predicted gas pumps

I wanted to try out atmos and first thing I found.

* a

* Remove details range
2024-12-07 14:39:52 +11:00
Nim
417668b88b Crayon (#634)
* crayon

* add crayon into loots

---------

Co-authored-by: Ed <edwardxperia2000@gmail.com>
2024-12-07 00:50:54 +03:00
Winkarst
4beb1016cc Make unknown shuttle events trigger an announcement (#33450)
* Make unknown shuttle events trigger an announcement

* Call base at the end

---------

Co-authored-by: Winkarst <74284083+Winkarst-cpu@users.noreply.github.co>
2024-12-06 22:39:35 +01:00
Ed
52a0f44aa1 Bank progression mechanic (#633)
* bank progression mechanic

* loc fix

* minor random fixes

* minor tweaks

* lighthouse

* Vladimirs Alerts!

* offset alerts

* lighthouse
2024-12-07 00:39:05 +03:00
deltanedas
3300ff2a06 clean up random lathe recipes (#31525)
Co-authored-by: deltanedas <@deltanedas:kde.org>
Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2024-12-06 16:45:01 +01:00
MilenVolf
b66fd98514 Localize ai dataset names (#33608)
Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2024-12-06 16:38:00 +01:00
K-Dynamic
e244472546 Samurai dogi is now major contraband (#33699) 2024-12-06 16:36:26 +01:00
0tito
de19418126 Add Sprite changes to Logic Gates to show the input/output state (#33277) 2024-12-06 16:35:48 +01:00
beck
6add781c4a Added several variables to make ClumsyComponent more modular for developers. (#33715)
Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2024-12-06 16:31:31 +01:00
Ed
02cbeee6dc Demiplane fixes (#632)
* limit demiplace wshwooshing by interaction range, fix global gibbing

* Update base.yml

* fix #521
2024-12-06 17:16:38 +03:00
PJBot
d6d95f1a7a Automatic changelog update 2024-12-06 10:16:30 +00:00
Ed
7d410d6094 Fix debris chunks loot spawning (#33747)
Update DungeonJob.PostGenBiome.cs
2024-12-06 11:15:23 +01:00
Errant
2d6e52b21c vox guidebook update poison regen (#33739)
* vox guidebook regen update

* damage number

* skreee
2024-12-06 09:43:11 +01:00
Southbridge
623a35b3fe Amber Station - Added Evac Shuttle (#33743)
* Added evac shuttle and fixed various issues brought up during playtests

* Updated Amber with playtest feedback, removed waste loop and firelocks from evac shuttle
2024-12-06 01:39:25 -07:00
PJBot
94090f7403 Automatic changelog update 2024-12-06 06:23:45 +00:00
ScarKy0
274c3ab0b9 Derelict Borg Revival (#33433)
* Derelictn'tn't Borg!

* Clean *sparkles*

* Removed "S: Awaiting Changes"
2024-12-06 00:22:38 -06:00
PJBot
38c8ffb9b5 Automatic changelog update 2024-12-06 05:28:59 +00:00
Winkarst
52a886947f Add a maintenance panel to bar signs (#33467)
* Add a maintenance panel to bar signs

* Update Resources/Locale/en-US/wires/wire-names.ftl

* AI interactions

---------

Co-authored-by: Winkarst <74284083+Winkarst-cpu@users.noreply.github.co>
Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2024-12-05 23:27:52 -06:00
MilenVolf
d6ba7598bd Fix name duplications (#33740)
* Fix name duplication

* Apply requested changes
2024-12-05 23:19:27 -06:00
Velcroboy
207c849e2d Adds Station Anchor Beacon (#33711)
Co-authored-by: Velcroboy <velcroboy333@hotmail.com>
2024-12-05 22:56:34 -06:00
PJBot
cd1177d9ba Automatic changelog update 2024-12-06 04:53:08 +00:00
IProduceWidgets
3e0b93d071 fix a station event weighting bug (#33584)
* fractional weights dont work in StationEvents

* force-int

* sure why not, we can keep floats I guess.
2024-12-05 22:52:02 -06:00
Ed
64df860b50 Salary for the guards (#631)
* public API

* salary init

* salary finish

* Update entities.ftl

* Update salary.yml
2024-12-06 00:59:37 +03:00
PJBot
0e6ec2e1af Automatic changelog update 2024-12-05 21:40:46 +00:00
IProduceWidgets
8f3973b2eb set n2 survival box sprite layers (#33733) 2024-12-05 22:39:39 +01:00
PJBot
97ece026d5 Automatic changelog update 2024-12-05 21:18:37 +00:00
Pieter-Jan Briers
dc8b859916 Give vox health regen for poison below 20 damage (#33722) 2024-12-05 22:17:27 +01:00
Ed
ce34c6f2a0 Update lockTypes.yml 2024-12-05 21:25:34 +03:00
Ed
8252418fdc Update personalHouse.yml 2024-12-05 18:19:10 +03:00
Winkarst
ce672acf91 Fix meteor's ArithmeticException (#33556)
Co-authored-by: Winkarst <74284083+Winkarst-cpu@users.noreply.github.co>
2024-12-05 13:20:27 +01:00
Ed
094fbc445f localization sync 2024-12-05 14:43:43 +03:00
Ed
319cd18ee8 demiplane closing - adventurers tp out and gib (#629) 2024-12-05 12:35:38 +03:00
Leon Friedrich
6f51aa4b15 More device configurator serialization fixes (#33664)
More device configurator invalid entity serialization fixes
2024-12-05 09:36:49 +01:00
Spessmann
59bce41390 Cog vox box removal (#33730)
removed vox box ggggggggggggg
2024-12-04 20:01:56 -07:00
Southbridge
bcf2b9afeb Box Station - Removed Vox Box (#33729)
* Removed vox box and removed nearby fuel tank as well

* made all dirt decals consistent
2024-12-04 19:54:59 -07:00
Emisse
90c8776a60 bagel update (#33726)
* bagel update

* remove invalid

* remove invalid
2024-12-04 19:54:45 -07:00
Southbridge
da68ae94c1 Amber Station - Removed Vox Box (#33725)
Removed Vox Box
2024-12-04 17:02:36 -07:00
Ed
304e1a268a Balance pack (#628)
* map fixes, move crystalls from houses into startgear

* fix lock types

* fix item throwing, reduce lock powers, add lockpick into anvil

* new store positions

* restruct swords

* nerf skeleton, bone halberd
2024-12-05 00:29:14 +03:00
PJBot
fbfcccbe16 Automatic changelog update 2024-12-04 16:51:01 +00:00
keronshb
82528dce37 Adds Store on Collide and Wand of the Locker (#33710)
* Adds wand of locker and locker projectile

* Adds IsOpen method to check if storage is open

* Adds store on collide

* Adds Store On Collide to Wizard Locker

* Adds Lock API

* Adds locking support

* Adds resist override and custom visual layers

* Fixes decursed states, adds comment for a future visualizer

* adds locker wand visuals and descriptions

* shrinks locker radius, moves TODO for throw support

* Adds whitelist and moves storage and lock logic into their own methods

* Adds support to disable store on collide after the first open. Fixes prediction issues with disabling.

* Adds wand of locker to the grimoire

* Adds wizard access prototype

* Adds Wizard to universal access

* Moves Lock on collide to on collide method

* Comments

* Changes layer order

* Fixes prediction issues when locking.

* Adds Wiz access to universal ID
2024-12-04 17:49:54 +01:00
A.Ne.
e6a6900719 Prototypes for Guard (#616)
* Prototypes for Guard

* imperial laws

* merge

* yml clean up

* flags + change in imperial laws

* map update

* guard clothing resprite

* cool guard helmet

* guards grip and halberd

* fill cabinets, add guard commander stamp

* key and keyring fix

* Update arenas.yml

* Update migration.yml

* tapestry fix

* guidebook spacing

* Update meta.json

* add bold tags

* Update flags_wallmount.yml

---------

Co-authored-by: Ed <edwardxperia2000@gmail.com>
2024-12-04 18:11:33 +03:00
Hreno
152cf3388b Add cooldown to buttons in borg's laws UI (#31490) 2024-12-04 21:16:41 +11:00
Tap
2e26ca786d Fix for towels not having a cooldown for cleaning (#33700)
Added a delay to cleaning with the towel
2024-12-04 21:14:59 +11:00
PJBot
fc8f7fb0ba Automatic changelog update 2024-12-04 10:14:29 +00:00
Pieter-Jan Briers
c10a72be39 Fix layout on wires UI (#33714)
Layout would break for machines with >6 lights because the column count was hardcoded. Uncap the UI width and fix the rows count instead.

Lights with less than 4 characters of text weren't aligned right, now they are.
2024-12-04 21:13:22 +11:00
PJBot
7ffd8012f6 Automatic changelog update 2024-12-04 02:43:25 +00:00
Partmedia
cf202e805d Fix sinks and toilets not draining (#33691)
* Fix AutoDrain

Per the system comments, AutoDrain is designed to automatically move
puddles into the drain (like a floor drain). Drains without AutoDrain
are still supposed to gradually empty the buffer, but not remove puddles
(like sinks and toilets).

However, a logic error in the original implementation causes drains with
AutoDrain set to false to simply not work. Hence sinks never emptied.

* Update documentation
2024-12-04 03:42:16 +01:00
Southbridge
87182635b6 Amber Improvements (#33707)
* Various changes (see PR)

* variantized, fixedgridatmos, tiledwalls
2024-12-03 16:59:16 -07:00
Ed
0e88b6dc6f Table fences (#626)
* collision fucks

* map update
2024-12-03 16:21:07 +03:00
Ed
f6630e1ec9 Key distribution system (#625)
* data restruct

* yay

* Update arenas.yml

* fixes

* auto labeling

* shuffle
2024-12-03 12:34:07 +03:00
Southbridge
2c2a435dbd Amber Station Seasonal Update (#33698)
Made some modifications requested by reviewers prior to and after map merge, also added holiday decorations!
2024-12-02 21:58:02 -07:00
PJBot
bfd005a37f Automatic changelog update 2024-12-03 03:00:54 +00:00
CheddaCheez
e50c98c618 Add missing nacho recipes (#33637)
* Nacho recipes, nutrition, and trash

In meal_recipes.yml: Add recipes for Nachos, Cheesy Nachos, and Cuban Nachos.

In meals.yml: Add a solutions container to regular nachos so it lines up with the others, and add a small plate as trash to each one.

* Volumes, nutritional tweaks, and flavor

In meals.yml: Lowered maxVol on nachos to leave 5 units of space. Nachos nutriment and vitamin lowered for costing so little. A cheese wedge is 3.75 nutriment, so cheesy having 4 more total nutritional value lines up nicely to me.

Cuban nachos had too little volume to fit its reagents in the first place, so increased maxVol by 10. Chili peppers are 4 nutri / 4 vitamin and ketchup has a touch of tomato, so bumped to 8 and 5. Capsaicin lowered partly to make it an even 20u. Ketchup dilutes I guess. Also they don't have cheese so I changed the flavor profile to tomato instead.

In meal_recipes.yml: Cuban Nachos recipe tweaked to require one less pepper. Given above numbers, this fits the nutritional value imo.
2024-12-02 20:59:47 -06:00
Luiz Costa
029b0374e9 Juiceable slimeballs (#33660)
adds extractable component to slimeball prototype
2024-12-02 20:51:00 -06:00
Velcroboy
c1491e91b8 Adds a morgue locked maints airlock (#33693)
Co-authored-by: Velcroboy <velcroboy333@hotmail.com>
2024-12-02 20:46:55 -06:00
SpaceRox1244
2e31eb32cb Makes kukri not use combat knife's storage sprite (#33661) 2024-12-02 20:41:42 -06:00
PJBot
f0829a6652 Automatic changelog update 2024-12-03 02:25:45 +00:00
Southbridge
e4e84aea74 New Low-Mid Pop Station - Amber Station (#33441)
* Initial Commit with two departments done

* Checkpointing work

* Added most of service and science

* Started work on medbay

* Modified TEG setup and set up atmos pipes for engineering

* Re-added medbay, added chapel and janitorial, started routing disposals and generally the final layout of the map is coming together

* Plenty of additions, too many to list in a commit message

* Major update

* Nearly done with the map, just have to do decals and emergency lights

* Added all decals, only thing missing is department signs

* Toned back the dirt decals a bunch, added hallway signs and other decorations

* Finishing touches on the map before testing.

* Fixed invalids

* Renamed the station to Amber, and made a couple adjustments

* Completely redid cargo, added maints around sec

* Added Amber to the map post init integration test

* Many small updates addressing issues.

* Ran a script to update all the camera names, also ran fixgridatmos, fixrotations, tilewalls, and variantize

* Started addressing some of the issues brough up by Emisse and others

* Addressed all issues mentioned by reviewers. Added mail system.

* Wrapped up meeting all the issues raised by reviewers, also did a bunch of testing and resolved issues found during those tests

* Addressed additional requested changes, and nabbed some ship designs from Frontier. Redesigned south east maints and surrounding meteor nets based off of those designs

* Making a couple more requested changes

* Reduced the amount of Nitrogen Closets, made several small adjustments. Ready for review again!

* Removed invalids!

* web edit lmao

---------

Co-authored-by: Emisse <99158783+Emisse@users.noreply.github.com>
2024-12-02 19:24:37 -07:00
SpaceManiac
b800d98260 Fix lobby countdown not showing hours (#33685) 2024-12-02 13:29:44 -08:00
PJBot
cc804bf316 Automatic changelog update 2024-12-02 19:45:08 +00:00
JIPDawg
638a1dc489 Fixed ghost role rules for some syndicate familiars (#32457)
* fix ghost role rules for some syndicate familiars

* change from monkey rules to Team Antag rules.

* Resolve reviews + Fix rules for LoneOp and Xenos

* ghostrole rules

---------

Co-authored-by: JIPDawg <JIPDawg93@gmail.com>
Co-authored-by: Errant <35878406+Errant-4@users.noreply.github.com>
2024-12-02 20:43:59 +01:00
dylanstrategie
7f966ab9b1 Touching up Bagel Security Brig (#33680)
* Touching up Bagel Security Brig

* Added a few missing door names

* Last door name I promise

* Address feedback

* Forgot to delete old shutter button

---------

Co-authored-by: dylanstrategie <188926747+dylanstrategie@users.noreply.github.com~>
2024-12-02 04:29:45 -07:00
PJBot
560fd8dd77 Automatic changelog update 2024-12-01 22:10:41 +00:00
MilenVolf
b3841e8414 Fix BuckleSystem always marking InteractHandEvent as Handled (#33602)
* Add check before marking event as handled

* Update Content.Shared/Buckle/SharedBuckleSystem.Interaction.cs

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>

* Cleanup

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2024-12-01 23:09:34 +01:00
Ed
7e6e4709c4 Ed 01 12 2024 rapier (#623)
* Rapier blade

* file restruct

* golden garde

* iron sharp garde

* copper garde
2024-12-02 00:08:23 +03:00
MilenVolf
d4067bcaab Fix wrong system usage (#33679)
Fix wrong system using
2024-12-01 11:34:18 -08:00
Ed
c6ac192dfb Gold & Copper modular parts 1 (#621)
* gold & copper daggers

* copper and gold short grip

* gold & copper grips

* golden pickaxe

* copper pickaxe

* Update anvil.yml
2024-12-01 20:11:59 +03:00
PJBot
237324e268 Automatic changelog update 2024-12-01 06:31:13 +00:00
IProduceWidgets
bf312f2306 Update Snowasis (#33364)
* Update Snowasis

* Appease test gods

* Woops had the leftward animation backwards. Fixed.

* add santa suits and envelopes to chapel

* It looks worse unscaled but whatever.

* fix ghost role

* examines
2024-11-30 23:30:01 -07:00
MilenVolf
5fdf03c216 Replace obsolete GetTilesIntersecting methods (#32455)
* Remove usage of obsolete GetTilesIntersecting round 1

* Oop wrong uids

* Remove usage of obsolete GetLocalTilesIntersecting round 2

* Remove usage of obsolete GetLocalTilesIntersecting final round

* weh

* Fix using `SharedMapSystem` in `StencilOverlay`
2024-12-01 12:56:47 +11:00
Nikolai Korolev
2d405c9652 Fix formatting IDE0055 warnings in VS Code (#33669) 2024-12-01 12:51:26 +11:00
github-actions[bot]
3984f0aa0a Update Credits (#33670)
Co-authored-by: PJBot <pieterjan.briers+bot@gmail.com>
2024-12-01 12:51:12 +11:00
PJBot
a46323d9f9 Automatic changelog update 2024-11-30 20:12:50 +00:00
Token
061b1b8adb Fix makeghostroleraffle command where 4 arguments (#31836)
Fix makeghostroleraffle command with 4 arguments
2024-11-30 21:11:44 +01:00
PJBot
44ef60a642 Automatic changelog update 2024-11-30 19:32:46 +00:00
Preston Smith
efb35d7953 Require Wield To Activate Double-bladed ESword (#32869)
* Add MeleeRequiresWield component

* Prevent world activation
2024-11-30 20:31:40 +01:00
PJBot
720fccf3f3 Automatic changelog update 2024-11-30 17:26:15 +00:00
Winkarst
ab36b15080 Fix borgs not getting names on roundstart (#33578)
* Fix borgs not getting names on roundstart

* Glory to the NT

* Allow riggable to take in multiple reagents

* Revert

---------

Co-authored-by: Winkarst <74284083+Winkarst-cpu@users.noreply.github.co>
2024-11-30 18:25:09 +01:00
PJBot
766389a66b Automatic changelog update 2024-11-30 16:24:33 +00:00
Plykiya
fb76cd952e Fix for inspecting entities in the stripping window (#33644)
Handle it
2024-11-30 17:23:26 +01:00
PJBot
3d984603f1 Automatic changelog update 2024-11-30 16:15:45 +00:00
Plykiya
450bf813b8 Fix for inspecting entities in hand (#33642)
Actually inspect entity in hands
2024-11-30 17:14:39 +01:00
PJBot
973f42b3b2 Automatic changelog update 2024-11-30 16:00:03 +00:00
Plykiya
021c9832ef Fix for handcuffing someone more than once (#33646)
* Fix for over-cuffing someone

* comment
2024-11-30 16:58:56 +01:00
Ed
bb43b37fd8 Bugfixes (#619)
* clean up

* Update empire_orders.yml
2024-11-30 14:16:48 +03:00
PJBot
86791583f9 Automatic changelog update 2024-11-30 06:24:58 +00:00
compilatron
08db47cb28 Cog/Marathon: Airlock fixes (#33621)
* Fixes the TEG airlock on marathon

* Fixes the atmos external airlock on cog
2024-11-29 23:23:50 -07:00
lunarcomets
b45c9d5129 fix PermanentBlindnessComponent to be not so permanent (#33292)
* adjust min blindness back to 0 when PermanentBlindnessComponent is removed

* mapinit changes

* remove OnRemove, move changes to OnShutdown

* goodbye event

* dependency removal

* final adjustment

---------

Co-authored-by: lunarcomets <luanrcomets2@gmail,com>
2024-11-30 13:56:52 +11:00
PJBot
e9ef00f475 Automatic changelog update 2024-11-30 02:55:44 +00:00
VideoKompany
54a9dce68d add locale to Shuttle Console Map tab (#33651)
fixed
2024-11-30 13:54:37 +11:00
PJBot
17a224c86a Automatic changelog update 2024-11-30 02:49:12 +00:00
Gansu
9236e9e5b9 Fix for arrivals deleting nuke (#33659)
Adds FTLSmashImmune to nuke prototype to stop it from arrival smashing
Adds a comment in FasterThanLight to indicate where the FTLSmashImmuneComponent is checked

Co-authored-by: aa5g21 <aa5g21@soton.ac.uk>
2024-11-30 13:48:04 +11:00
MilenVolf
6c86d7b32b Cleanup some Client atmos systems (#33634)
* Cleanup `ScrubberControl.xaml.cs`

* Minor cleanups

* Another pile of minor cleanups

* Apply requested changes

* Rename "which" into "bound". Add whitespace after "if"
2024-11-30 02:33:29 +01:00
Ed
373d3a892b New Comoss island map (#618)
* Create island_new.yml

* first map state
2024-11-30 01:08:44 +03:00
PJBot
f99331aa00 Automatic changelog update 2024-11-29 12:52:21 +00:00
MossyGreySlope
87d6b0b79b Rename nitrogen internals crate (#33545)
* rename nitrogen internals crate

* nitrogen internals crate description

* migrate CrateNitrogenInternals ID
2024-11-29 13:51:15 +01:00
PJBot
bbdadd7144 Automatic changelog update 2024-11-29 09:47:31 +00:00
DrSmugleaf
3ad227a904 Add admin log for ghost warping (#33636) 2024-11-29 10:46:24 +01:00
Myra
422d1a9d32 Remove grasshopper from the panic bunker message (#33638)
Can be retargetted to stable if preferred, which will then be a hotfix
2024-11-29 20:27:14 +11:00
PJBot
2e340578ff Automatic changelog update 2024-11-29 08:15:22 +00:00
Alice "Arimah" Heurlin
360f6982f4 Display GPS coordinates on their own line (#33625) 2024-11-29 11:14:14 +03:00
Alpha-Two
93bdd813c4 Fix gender, maybe (#33631)
Co-authored-by: Alpha-Two <alpha2.5232@gmail.com>
2024-11-29 08:54:46 +01:00
Ed
109edeb4b5 Modular weapon crafting WIP (#611)
* data initalizing

* modular assembling

* grips and blades sprites

* first prototypes

* jewerly decoration

* disassemble modular weapon

* grip start stats

* blade modifiers

* inhand sprites generation

* resprites inhand, add sickle, add attempt modify size

* auto inhand sprite parsing

* icon default parsing

* spear blade

* mace ball

* sword blade

* sharedization + autonetwork hotswipe

* wielding sprite support!

* iron long grip

* wielded sickle, fix ERROR sprite if state not added

* Update grips.yml

* wielded spear + ruby rework

* wielding damage bonus modifier

* modular size fix

* fix storedOffset rotation

* parts offset

* fix inheriting modifiers

* some bugfix and balance tweaks

* DPS Meter

* fix dividing by zero

* rebalance

* replace baseknife to modular knife. Delete ice knife spell

* sickle and mace modular replace

* modular spear & sword replacement. add wielded icons

* Update CP14DPSMeterSystem.cs

* back to serverization

* grip disassemble drop again

* clothing sprite generation code

* back slot long grips and mace

* remove jewerly slot, add more clothing states

* finish clothing states

* shovel modular

* YEEEEE

* anvil modular craft

* bugfixes

* more integration check fixes
2024-11-29 01:31:42 +03:00
Myra
b53c8ea60e Approval labeler fix electric boogaloo (#33633)
Nik told me to not name this "nya"
2024-11-28 21:54:01 +01:00
Nikolai Korolev
4a21ed87db Update Content.PatreonParser to use net8.0 TargetFramework (#33559)
Update Content.PatreonParse to use net8.0 targetframework
2024-11-28 20:13:26 +01:00
PJBot
6463e7e08e Automatic changelog update 2024-11-28 13:42:10 +00:00
beck-thompson
a790955b76 Light verb is now predicted (#33622)
Fix
2024-11-29 00:41:01 +11:00
SpaceRox1244
f6813e39c7 Makes knives fly straight when thrown (#33615)
Gives knives a thrown angle
2024-11-28 16:09:47 +03:00
SpaceManiac
a206acc220 Fix swapped uniform printer east/west sprites (#33442)
Fix uniform printer sprites rotating the wrong way
2024-11-28 21:38:33 +11:00
Mifia
de613e45f8 Fix gauze eyepatch flying pixel (#33564)
boo
2024-11-28 21:34:43 +11:00
AlexUm
ac65c5a55d Fix version for electril_grill meta.json (#33611)
fix

fixing the version thing in meta json for electril grill textures

Co-authored-by: Arthur Kustenko <arthur.kustenko@learnet.se>
2024-11-28 21:30:13 +11:00
ScarKy0
9704ed7a00 Added Oppenhopper poster to the game. (#33588)
* o7

* -

* oppenhopper v2

* Update Resources/Prototypes/Entities/Structures/Wallmounts/Signs/posters.yml

* Update Resources/Prototypes/Entities/Structures/Wallmounts/Signs/posters.yml

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2024-11-28 11:08:43 +01:00
Flareguy
56fd7cbb6f Removes burnt tiles (#33422)
remove burnt tiles
2024-11-28 09:49:41 +03:00
Myra
1bc65624c8 Merge stable into master: Hotfix the randomly occurring DeleteAllThenGhost test failures (#33593) 2024-11-27 09:05:31 +00:00
PJBot
1b6c9e866b Automatic changelog update 2024-11-27 05:56:21 +00:00
slarticodefast
8ea388b309 Fix windoor and high security door not showing electrocution HUD (#33551) 2024-11-27 16:55:14 +11:00
PJBot
6187675c27 Automatic changelog update 2024-11-27 05:33:46 +00:00
slarticodefast
c861c56a69 Fix space ambient music (#33594) 2024-11-27 16:32:39 +11:00
Errant
eb9540364e Hotfix the randomly occurring DeleteAllThenGhost test failures (#33582)
* clear mindrole on component shutdown

* let it go
2024-11-27 00:56:35 +01:00
dylanstrategie
ab7221efad Added two N2 lockers to Reach (#33409)
Co-authored-by: dylanstrategie <188926747+dylanstrategie@users.noreply.github.com~>
2024-11-26 13:04:34 -07:00
PJBot
dfc3562bfc Automatic changelog update 2024-11-26 13:51:29 +00:00
Winkarst
41d2cf166d Make shuttle airlocks not snapcardinals (#33557)
* Make shuttle airlocks not snapcardinals

* Update Resources/Prototypes/Entities/Structures/Doors/Airlocks/shuttle.yml

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>

* Update Resources/Prototypes/Entities/Structures/Doors/Airlocks/shuttle.yml

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>

---------

Co-authored-by: Winkarst <74284083+Winkarst-cpu@users.noreply.github.co>
Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2024-11-27 00:51:13 +11:00
slarticodefast
470c869ce2 Greytide Virus station event (#33547)
* proof of concept

* full implementation

* I commited a crime

* t

* min players increase
2024-11-27 00:50:20 +11:00
Intoxicating-Innocence
d5225d1f46 Ghost role drop-down alignment (#33397)
* dropdown shares margin width with children

* removed dependency that rider added for some reason

* reduced vertical margin from 8 to 2
2024-11-26 09:28:31 +01:00
PJBot
a69fc39fc0 Automatic changelog update 2024-11-26 01:00:41 +00:00
metalgearsloth
f27fa1ed30 Simplify separated screen top menu (#33047) 2024-11-26 01:59:34 +01:00
slarticodefast
e9eca826d8 minor AI cleanup (#33555)
* minor cleanup

* to
2024-11-26 09:39:04 +11:00
Vasilis
f0e9de8489 "Borgimorph" Release 2024-11-22 (#33544) 2024-11-25 15:25:04 +00:00
Flareguy
b8c8f7d0f8 Adds more diona names (#33066)
* adds more diona names

* more stuff

* AHHHHHHHHHHHHHHHHHHHHHHH

* further additions

* removes depression + adds comment

* fixes + remove some weird stuff + more stuff

* remove haste
2024-11-25 14:51:41 +01:00
PJBot
b8466d8321 Automatic changelog update 2024-11-25 12:36:20 +00:00
Niels Huylebroeck
49724a9b9d Turn off PointLights on VendingMachines when broken or off. (#33513)
The light itself should already turn off due to `LitOnPowered`
component, but the broken state of a VendingMachine did not.

Fixes  #33382
2024-11-25 13:35:14 +01:00
PJBot
ae576abe1f Automatic changelog update 2024-11-25 12:25:04 +00:00
Minemoder5000
45cf4ec340 Shark plushies now goes rawr on hit. (#33540)
Shark goes rawr more
2024-11-25 13:23:57 +01:00
Nikolai Korolev
ea7f5433ac Fix RA0003 warning for ChatBox (#33531) 2024-11-25 22:53:12 +11:00
Ben
32f48d974f removed obsolete netmessage creator (#33542)
removed opsolete netmessage createor
2024-11-25 22:39:10 +11:00
Errant
14103e7a86 Hotfix babyproof arrivals terminal and arrivals shuttle (#33538) 2024-11-25 12:12:11 +01:00
PJBot
da9b2e6a10 Automatic changelog update 2024-11-25 07:21:39 +00:00
Schrödinger
f53e3ec3c1 [BUGFIX] "Ghost" in the lobby lets you see the whole chat (#33529)
* fix bug, in ghost command lobby

* fix

* Fix build
2024-11-25 10:20:31 +03:00
IProduceWidgets
9a898bb98e babyproof arrivals shuttle (#33284)
* babyproof arrivals shuttle

* always powered lights

* uncuttable cables from terminal PR.

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2024-11-25 07:59:37 +01:00
IProduceWidgets
86a3d1636f baby proof the terminal (#33281)
* baby proof the terminal

* Make a couple exceptions for items that you might take with you.

* alwayspoweredlights

* Uncuttable cables since cablecomp is a snowflake construction system

* chairs and vendors

* rerun heisentests

* rerun tests again
2024-11-25 07:59:01 +01:00
PJBot
ed2cd23309 Automatic changelog update 2024-11-25 04:28:02 +00:00
slarticodefast
3c6c5ab6c9 fix airlocks inconsistently auto-closing after unbolting (#33524)
fix door auto close timer
2024-11-25 15:26:54 +11:00
kosticia
d642ee7707 Delete HOS headset from warden's locker (#33234)
* add headset

* Add icons

* Meta change

* fix

* Revert + delete headset from locker
2024-11-25 01:46:33 +01:00
Ed
8057fad4d3 Skeleton demiplane antag (#609)
* skeletons! ack

* nerf skeletons
2024-11-24 22:08:05 +03:00
mubururu_
cae49ae0d2 various material & ore inhands (#33342)
* begin

* bones + pyrotten + goliath hide inhands

* Update Resources/Prototypes/Entities/Objects/Materials/materials.yml

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>

* Update Resources/Textures/Objects/Materials/materials.rsi/meta.json

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>

* Update Resources/Textures/Objects/Materials/materials.rsi/meta.json

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>

* Update Resources/Textures/Objects/Materials/materials.rsi/meta.json

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>

* pyrottOn

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2024-11-24 17:24:13 +01:00
Ed
191112a8a8 Tampestry (#607)
* Update T0_cure_heat.yml

* tampestry

* palisade wip
2024-11-24 18:27:18 +03:00
A.Ne.
406f22de3f closed door interact popup, resolve #564 (#600)
* closed door interact popup, resolve #564

* tweak

* uh

* removed old comment

* Update attributions.yml

* fix

* Update CP14SharedDoorInteractionPopupSystem.cs

* fixes

---------

Co-authored-by: Ed <96445749+TheShuEd@users.noreply.github.com>
Co-authored-by: Ed <edwardxperia2000@gmail.com>
2024-11-24 15:54:42 +03:00
Nim
b72c2bfb7b Mosquitoes (#593)
* mos

* more fix

* spawner

* balance review

---------

Co-authored-by: Ed <96445749+TheShuEd@users.noreply.github.com>
Co-authored-by: Ed <edwardxperia2000@gmail.com>
2024-11-24 15:22:35 +03:00
A.Ne.
dbc2fd689a follow on use inhand (#606) 2024-11-24 14:36:35 +03:00
Ed
897a9cf683 localization sync (#597)
* localization sync

* init

* Update entities.ftl

* внезапный респрайт лома
2024-11-24 14:33:02 +03:00
A.Ne.
b37113f7f2 add multiple parents supproting (#598)
* add multiple parents supproting

* change yaml path for parsing

* Update yaml_parser.py

* Update localization_helper.py

* fix
2024-11-24 13:40:20 +03:00
Ed
42127c4682 Guards roles and clothings (#608)
* white-blue chainmails for guard

* steal cloaks from mercenaryes to guards

* loadouts

* guard cloak resprite

* job spawners

* skills

* Update migration.yml

* Update crates.yml

* remove recipes

* Update jobs.yml

* Update migration.yml
2024-11-24 13:39:53 +03:00
PJBot
91b9d4a7f0 Automatic changelog update 2024-11-24 08:50:37 +00:00
deltanedas
e436a50c36 fix exped caves generation (#32890)
Co-authored-by: deltanedas <@deltanedas:kde.org>
2024-11-24 09:49:31 +01:00
PJBot
84df2b857e Automatic changelog update 2024-11-24 08:12:54 +00:00
MilenVolf
aa80a88cc4 Allow shuttles on planets to make FTL jump (#33507)
This check conflicts with an attempt to FTL from the planet before expedition ends
2024-11-24 11:11:47 +03:00
PJBot
2229a6a04b Automatic changelog update 2024-11-24 04:21:08 +00:00
Winkarst
f706170ee1 Draw muzzle flash below mobs (#33465)
* Draw muzzle flash below mobs

* Better naming

---------

Co-authored-by: Winkarst <74284083+Winkarst-cpu@users.noreply.github.co>
2024-11-24 15:20:00 +11:00
github-actions[bot]
ef89d5cc21 Update Credits (#33503)
Co-authored-by: PJBot <pieterjan.briers+bot@gmail.com>
2024-11-24 12:56:18 +11:00
PJBot
e958c0c9b0 Automatic changelog update 2024-11-23 16:54:04 +00:00
metalgearsloth
11dbf50ed6 Add delay to AutoOrient (#33479)
It functions identically to how V1 of orientation worked and it's incredibly annoying.
2024-11-23 17:52:58 +01:00
PJBot
8522ffe8ce Automatic changelog update 2024-11-23 15:15:19 +00:00
IProduceWidgets
fab9993a3b babyproof arrivals shuttle (#33284)
* babyproof arrivals shuttle

* always powered lights

* uncuttable cables from terminal PR.

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2024-11-23 16:14:13 +01:00
PJBot
4cecf99e65 Automatic changelog update 2024-11-23 11:42:43 +00:00
goet
855547a2d4 Ensure wires can always be cut (#32447)
ensure wires are always cut
2024-11-23 12:41:37 +01:00
PJBot
45af6a13fc Automatic changelog update 2024-11-23 11:21:05 +00:00
metalgearsloth
11dae2ff93 Don't show drag-drop outline if climbing (#33477)
It won't actually do anything.
2024-11-23 12:19:59 +01:00
Ed
ae01ebda0e Merge pull request #595 from crystallpunk-14/ed-20-11-2024-upstream-sync
Upstream sync
2024-11-23 13:44:10 +03:00
PJBot
bde85858a3 Automatic changelog update 2024-11-23 09:32:14 +00:00
metalgearsloth
c3786a56dc Fix door animations mispredicting if closing is interrupted (#33481)
* Fix door animations mispredicting if closing is interrupted

On master it will flicker states a little bit partially due to it not being predicted.

Instead we'll just set it straight back to opening (no animation is ever played anyway).

* no log
2024-11-23 10:31:07 +01:00
eoineoineoin
bdf4a46edf Minor improvements & fixes to Shuttle Console UI (#31623)
* Fix grids and docks being culled from display prematurely

* Fix inconsistent disabling of "Undock" buttons

* Add a radar icon to indicate where the controlling console is

* Tidy up math

Remove lots of sketchy transforms-of-transforms, which should have been
as single matrix multiply. Assign proper names to matrices. Remove some
redundant calculations.

* Feedback
2024-11-23 17:55:09 +11:00
MetalSage
a42bacd3a9 Fix startingGear storage (#33394)
* fix starting gear storage

* removal of unused

---------

Co-authored-by: MetalSage <metalsage.official@gmail.com>
2024-11-23 17:54:35 +11:00
PJBot
1e93e12330 Automatic changelog update 2024-11-23 06:42:34 +00:00
Winkarst
0a587c9ccc Disable submit admin note button on switch to note (#33456)
Co-authored-by: Winkarst <74284083+Winkarst-cpu@users.noreply.github.co>
2024-11-23 17:41:28 +11:00
PJBot
7feafcbe95 Automatic changelog update 2024-11-23 06:38:21 +00:00
metalgearsloth
5409815be9 Allow AI and observers to see electrified doors (#33466) 2024-11-23 17:37:14 +11:00
PJBot
d8ecf12fca Automatic changelog update 2024-11-23 02:54:55 +00:00
metalgearsloth
616907009d Fix salvage vendor inventory (#33437) 2024-11-23 13:53:47 +11:00
Ed
fff97fa819 adapt 2024-11-23 03:12:45 +03:00
PJBot
6bc205484f Automatic changelog update 2024-11-22 22:51:50 +00:00
IProduceWidgets
a28adf4ae4 baby proof the terminal (#33281)
* baby proof the terminal

* Make a couple exceptions for items that you might take with you.

* alwayspoweredlights

* Uncuttable cables since cablecomp is a snowflake construction system

* chairs and vendors

* rerun heisentests

* rerun tests again
2024-11-22 23:50:41 +01:00
Ed
677e5194d6 Merge remote-tracking branch 'upstream/master' into ed-20-11-2024-upstream-sync
# Conflicts:
#	Content.Server/Chemistry/EntitySystems/InjectorSystem.cs
#	Content.Server/Traits/TraitSystem.cs
#	Content.Shared/CCVar/CCVars.cs
#	Content.Shared/Inventory/InventorySystem.Relay.cs
#	Resources/Maps/box.yml
#	Resources/Maps/core.yml
2024-11-23 01:48:24 +03:00
slarticodefast
de516905f0 another rename 2024-11-22 23:39:05 +01:00
slarticodefast
306277afe0 rename 2024-11-22 23:05:36 +01:00
slarticodefast
08bfb43feb cleanup 2024-11-22 23:02:59 +01:00
slarticodefast
5a9a2d463b Merge branch 'master' into powerhud 2024-11-22 19:38:55 +01:00
slarticodefast
09ca45a621 Merge staging into master (#33462) 2024-11-22 18:32:30 +01:00
Pieter-Jan Briers
b4ec946bd9 Fix sandbox error with new HWID code. (#33461)
Oops
2024-11-22 18:14:46 +01:00
c4llv07e
646d41d3a7 Add telegram to the server info-links (#33459) 2024-11-22 16:38:41 +01:00
Ed
a6c7bc5993 haha 2024-11-22 14:49:48 +03:00
Ed
66fe15f8c7 Balance tweaks (#604)
* x2 damage

* Update CP14MagicWeaknessSystem.cs

* split cure burn

* split blood purification

* extinguish torch by interact

* Update torch.yml

* Update T0_cure_heat.yml

* fix fireSpread
2024-11-22 14:14:22 +03:00
Vasilis
94ac0b1399 Modern HWID integration (#33265) 2024-11-22 11:08:51 +00:00
PJBot
a3edf04dd3 Automatic changelog update 2024-11-22 03:47:17 +00:00
chromiumboy
403528cbf3 Gas pipe sensors (#33128)
* Initial commit

* Monitored pipe node is now referenced by name

* Review changes

* Simplified construction

* Tweaked deconstruction to match other binary atmos devices

* Helper function removal

* Updated attribution
2024-11-21 21:46:10 -06:00
PJBot
38c70d6c9b Automatic changelog update 2024-11-22 02:57:12 +00:00
DrSmugleaf
5a751a820a Fix admin ghosts not being able to see items in pockets or interact with them (#31076)
* Fix admin ghosts not being able to see items in pouches or interact with them

* fix

* oops

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2024-11-22 03:56:05 +01:00
slarticodefast
3758715bdc electrification hud 2024-11-22 00:43:02 +01:00
Ed
8ad951183c Merge branch 'master' into ed-20-11-2024-upstream-sync 2024-11-21 22:50:28 +03:00
Ed
548433baca Torch craft (#603)
* fix

* Update crates.yml

* loadout torch, flint craft workbench
2024-11-21 22:48:14 +03:00
Ed
96fc06a443 Fire update (#602)
* fire spread fixes and optimization

* fix liquid drops nefty and suffix

* some sharedization

* melee fire extinguish

* clean up fireSpread system

* caution popup

* cuffable zombies

* fix zombie AI

* lighter

* torch integration attempt

* fix torch igniting

* yml tweaks

* bonus flammable damage
2024-11-21 22:01:14 +03:00
Vasilis
4f703ae9ce Fix approval labeler (#33440)
* Fix approval labeler

* Update labeler-review.yml

* Update labeler-review.yml
2024-11-21 17:51:18 +01:00
PJBot
11ee2f9a37 Automatic changelog update 2024-11-21 14:21:21 +00:00
IProduceWidgets
f5930bb566 Coal presents and chrimmas tree options. Presents no longer itemify (#33147)
* Dont ensure ItemComp because it could lead to weirds, and also PickupOrDrop handles non-items already.

* presents and tree

* woops

* reviews a
2024-11-21 15:20:11 +01:00
ThatGuyUSA
0f0b141f21 Syndicate item fix ups (#33435)
tweaks and fixes
2024-11-21 14:22:57 +01:00
Pieter-Jan Briers
75a096b6bd Merge remote-tracking branch 'upstream/master' into 24-10-29-modern-hwid 2024-11-21 01:26:01 +01:00
metalgearsloth
beeffdb5e1 Update to Robust v237.2.0 (#33436) 2024-11-21 11:16:55 +11:00
Pieter-Jan Briers
5c0a32b8b8 Update to Robust v237.2.0 2024-11-21 00:07:12 +01:00
MissKay1994
c02a027cf1 Update salvage.yml 2024-11-20 18:06:19 -05:00
MissKay1994
e96e80bc95 Update salvage.yml 2024-11-20 18:05:01 -05:00
A.Ne.
4fcfab972d demiplane crates fix #589 (#599)
* demiplane crates fix #589

* change component to MapGridComponent

* simplification

* Update CP14DemiplanSystem.Generation.cs

---------

Co-authored-by: Ed <edwardxperia2000@gmail.com>
2024-11-20 23:37:44 +03:00
A.Ne.
4abd793ef9 lockkey system tweak (#601)
* lockkey system tweak

* Update SharedCP14LockKeySystem.cs

---------

Co-authored-by: Ed <edwardxperia2000@gmail.com>
2024-11-20 23:16:00 +03:00
MissKay1994
f23b6522b2 Update cargo_vending.yml 2024-11-20 04:44:33 -05:00
MissKay1994
693e5f1fad Update salvage.yml 2024-11-20 03:40:54 -05:00
metalgearsloth
cb246f5d7d Set airlock unlit layers as invisible (#32484)
Doesn't really affect anything due to appearance bulldozing this but this aligns with their actual normal states so.
2024-11-20 11:10:05 +03:00
PJBot
f9533a637a Automatic changelog update 2024-11-20 07:56:20 +00:00
metalgearsloth
98caf50626 Ion storm refactor (#33311) 2024-11-20 18:55:12 +11:00
metalgearsloth
a9be561ea7 Merge branch 'master' into ion-storm-refactor 2024-11-20 18:22:08 +11:00
PJBot
4f3ac3ea68 Automatic changelog update 2024-11-20 07:19:45 +00:00
metalgearsloth
59b09383ca Capacitor Crafting Change (#31966) 2024-11-20 18:18:37 +11:00
PJBot
a7003acd77 Automatic changelog update 2024-11-20 05:57:05 +00:00
metalgearsloth
a818c2a134 Temporarily make singularity a bit harder to loose as non-antag (#33358) 2024-11-20 16:55:58 +11:00
metalgearsloth
8acbf87d8f Move PlayerBeforeSpawnEvent and PlayerSpawnCompleteEvent to Shared (#33428) 2024-11-20 16:53:18 +11:00
DrSmugleaf
f5d0e955e3 Fix imports 2024-11-19 21:16:49 -08:00
DrSmugleaf
b8b33b97af Move PlayerBeforeSpawnEvent and PlayerSpawnCompleteEvent to Shared 2024-11-19 21:15:15 -08:00
Saphire
44db676b24 Actually make the emagging popup work properly 2024-11-20 09:32:50 +06:00
PJBot
1b3672e095 Automatic changelog update 2024-11-20 02:06:21 +00:00
metalgearsloth
75acce0d62 Fix: Examine Damage now specifies no damage (#33064) 2024-11-20 13:05:15 +11:00
PJBot
a13a4f7a99 Automatic changelog update 2024-11-20 02:00:37 +00:00
metalgearsloth
b177a1d019 Coloured Light Cost Reduction (#33376) 2024-11-20 12:59:31 +11:00
metalgearsloth
0ec23362fe Merge into master: Increase softcap back to 80 (#33400) (#33419) 2024-11-20 12:56:29 +11:00
PJBot
7e8e2c7212 Automatic changelog update 2024-11-20 01:55:55 +00:00
qwerltaz
e98383d572 Construction menu grid view (#32577)
* button

* implement populate grid view

* tweak min width

* Make grid button toggle visible

* tweak min window size

* fix missing recipe button when mirroring item

* make grid buttons toggleable

* align button texture vertically

* selected grid item has plain color background

* tweak window width so all buttons look good

* rename select method, defer colouring

* get icon better

* whoops

* simpler button toggle

* spritesys frame0, move spritesys

* delete old sprite system refs
2024-11-20 12:54:49 +11:00
beck-thompson
1fa1975e60 Fix toggle verbs (#32138)
First commit

Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
2024-11-20 12:53:52 +11:00
Saphire
9c666457c2 Move some of the new singularity code into shared
Hopefully without explosions yay
2024-11-20 07:53:10 +06:00
SlamBamActionman
6e53cd98a4 Add emag functionality 2024-11-20 07:53:10 +06:00
PJBot
35e2c641c1 Automatic changelog update 2024-11-20 01:06:27 +00:00
Plykiya
fdf3df9fbd Crew monitoring crate updated to contain flatpacks, science access instead of engi (#33417)
* Make a crew monitoring crate with flatpacks

* fix image

* migration
2024-11-20 12:05:20 +11:00
Saphire Lattice
eebf06d9d6 Automatically add "Approved" to maintainer PRs (#33337)
* Add an Approved labeler for maintainer PRs

* Be extra safe with conditions
2024-11-20 12:03:52 +11:00
PJBot
ed1ae96fa2 Automatic changelog update 2024-11-20 01:01:45 +00:00
SlamBamActionman
89392e2424 Remove drag & drop dropping items from containers (#32706)
* Initial commit

* Update based on maintainer discussion

* Forgot to remove this woops
2024-11-20 12:00:38 +11:00
PJBot
efa28fc650 Automatic changelog update 2024-11-20 00:58:08 +00:00
MilenVolf
2002de9bb0 Localize planet dataset names (#33398)
* Localize planet names (borer)

* DatasetPrototype -> LocalizedDatasetPrototype

* Apply requested changes
2024-11-20 11:57:43 +11:00
Plykiya
7f5bae99bb Fix security riot crate (#33415)
* move riot crate from security to armory category

* Move riot crate to armory, actually make it require armory access to unlock
2024-11-20 11:57:01 +11:00
Pieter-Jan Briers
c4e2eb9d02 .NET 9 forward compatibility changes (#33421)
This doesn't switch the projects over to .NET 9, but it does make them work on .NET 9 when we decide to switch in the future.
2024-11-20 11:17:45 +11:00
Ed
ed638c94a8 Merge remote-tracking branch 'upstream/stable' into ed-20-11-2024-upstream-sync
# Conflicts:
#	Resources/Maps/cog.yml
2024-11-20 00:34:51 +03:00
Ed
e79b046c4a Magic redesign (#594)
* water spell textures

* water creation spell

* mana consume, and mana glove

* remove mana transfer ring

* Update migration.yml

* copy Wizden loadout PR

* add sprite component to all spells

* spell dummy loadouts

* delete spell traits

* really give spells from loadouts

* update crates fill and demiplane spawners

* beer creation spell, fix passivedamage

* Update PassiveDamageSystem.cs
2024-11-20 00:23:44 +03:00
A.Ne.
ec278dc98f LocaleHelperRefactor (#592)
* refactor

* refactor Prototype class init
2024-11-20 00:22:42 +03:00
PJBot
42ee90e53e Automatic changelog update 2024-11-19 20:32:47 +00:00
ArZarLordOfMango
a949cf33e9 Toggle clothing fix (#32826)
* toggle clothing fix

* some adding
2024-11-19 21:31:37 +01:00
nikthechampiongr
895648aa2c Increase softcap back to 80 (#33400) 2024-11-19 13:13:02 +01:00
PJBot
0e2e6a001f Automatic changelog update 2024-11-19 05:08:09 +00:00
ScarKy0
437a586906 Welded secret doors no longer say they are welded shut. (#33365)
Init
2024-11-18 23:07:02 -06:00
PJBot
10ee37a47c Automatic changelog update 2024-11-19 03:00:50 +00:00
Ilya246
909235cdbe fix viewing nav slowing shuttle down (#32381)
fix
2024-11-19 03:59:42 +01:00
Spessmann
dffece473a Cog update (#33410)
removed fun
2024-11-18 19:17:57 -07:00
Saphire
68eaf6ff25 Bump the failsafe timer down 2024-11-19 08:11:10 +06:00
Spanky
96d2fe477d Service Worker Job Icon Change (#33361)
* Changes the Server Worker job icon to a bowtie.

* Removes grey from icon to better fit existing art.

* Updated ID card sprite.

* Edit respective meta.json files.
2024-11-18 23:37:34 +01:00
faint
79ff990ddf Replace direct uses of GameTicker dictionary with TryGetValue (#33222)
Fix station events schedulers, antag selection and possibly other systems acting weird in a rare scenario
2024-11-18 21:57:50 +03:00
Ed
d67f7619c4 Edgefication (#590)
* bloat

* bloat 2

* bloat 3

* final bloat

* Update icon.ico

* Create integration_test_run.bat

* Arggh

* Disable some tests

* revert roomfill clearexisting changes
2024-11-18 14:40:52 +03:00
SpaceManiac
647db6aa87 Shift air alarm sprites to better reflect their direction (#33379)
* Shift Air Alarm sprites to better reflect their direction

* Fix two frames of west-facing sprite being one pixel off

* Indicate that sprites are no longer exactly tgstation's
2024-11-18 03:51:08 -06:00
PJBot
b0fd9d5a55 Automatic changelog update 2024-11-18 06:33:17 +00:00
Ubaser
824efd4b25 Dim light bulbs (#33383)
add
2024-11-17 23:32:07 -07:00
Justice League
97be261631 Reduced cost of coloured light fixtures 2024-11-17 18:55:57 -05:00
ThatGuyUSA
31d5a66866 Chemical synthesis kit tweak (#33345)
* butcherable surgery caps

* readded cardboard box

* butcherable now?

* butcherable now?

* one day ill figure this out

* changed label of hyperzine syringe

* removed the thing in hats.yml that wasn't supposed to be here

* Update Resources/Prototypes/Entities/Objects/Specific/Medical/healing.yml

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2024-11-17 23:08:20 +01:00
ScarKy0
e290588624 Changes + Cleanup 2024-11-17 20:23:45 +01:00
ActiveMammmoth
22987fc77f Wizard Summon Guns/Magic (#32692)
* mostly done but there's a bug with spawning

* RandomGlobalSpawnSpellEvent now actually works

* Summon Guns/Magic is working

* Added sound, cap gun, and auto pick up

* Added all requested changes/fixes from reviews

* Halving cooldowns
2024-11-17 17:46:31 +01:00
Spanky
c7f83523ef Packed Update (Christmas Edition) (#33356)
Christmasified Packed station.
2024-11-16 23:35:57 -07:00
Spanky
f484118e2d Omega Update (Christmas Edition) (#33357)
* Christmasift Omega station.

* Add cryosleeper to bridge.
2024-11-16 23:35:41 -07:00
PJBot
96b9d1a714 Automatic changelog update 2024-11-17 03:28:38 +00:00
SpaceRox1244
d9c677e91b Adds paper label visuals to closets and lockers (#33318)
* Modifies label sprites and adds label visuals to closets

* Removes redundant GenericVisualizer component
2024-11-16 21:27:29 -06:00
github-actions[bot]
0991b6bbe8 Update Credits (#33360)
Co-authored-by: PJBot <pieterjan.briers+bot@gmail.com>
2024-11-17 13:03:59 +11:00
ThatGuyUSA
5cd92431b9 Throwing Knife description tweak (#33349)
changed description
2024-11-16 19:03:14 -06:00
Saphire
476f90df09 Fix the component defaults 2024-11-17 04:31:41 +06:00
Saphire
01d6df3d0a Fix Fluent string ID copypaste fail 2024-11-17 04:18:00 +06:00
Saphire
a68c6cb29e Temporarily make singularity a bit harder to loose as non-antag 2024-11-17 04:01:38 +06:00
Ed
ef6f23e4b8 Remove demiplan fun (#587)
* disable roomfills

* demiplan examination random disable
2024-11-16 17:37:06 +03:00
Ed
06308961ed Revert "Revert "Added personal signature system"" (#586)
* Revert "Revert "Added personal signature system (#382)" (#471)"

This reverts commit 9f93931057.

* Update pen.yml
2024-11-16 17:30:38 +03:00
Emisse
bdab41248d bagel christmas update (#33347) 2024-11-16 01:42:33 -07:00
Southbridge
f071bf65e0 Marathon holiday update (#33335)
* Added holiday decorations, and modified emergency lights to have a better layout.

* Added a couple more emergency lights after finding a couple spots that were wway too dark during testing, also gave the warden a crew monitor
2024-11-15 23:35:23 -07:00
Southbridge
f5b63b8393 Box Holiday Update (#33340)
Added holiday decorations with presents and various fixes
2024-11-15 23:29:23 -07:00
Spessmann
d9a5ffbef4 Cog christmas update (#33344)
christmas updoot
2024-11-15 23:29:09 -07:00
PJBot
47f94d1139 Automatic changelog update 2024-11-16 05:10:35 +00:00
dffdff2423
2c82a2dfc0 Add admin remarks button to lobby (#31761) 2024-11-15 23:09:29 -06:00
PJBot
7077b930f2 Automatic changelog update 2024-11-16 04:31:53 +00:00
K-Dynamic
4f659b9d6d Solar assembly crate buff (#33019)
* more flatpacks + glass

* solar crate price increase

* price increase

* 1250 spesos

* Update Resources/Prototypes/Catalog/Fills/Crates/engines.yml

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2024-11-15 22:30:47 -06:00
MossyGreySlope
11963e50b1 Fix server crash when the seed extractor is used on the dev map (#33312)
handle event when using seed extractor

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2024-11-15 21:57:33 -06:00
PJBot
6bcfe6fb3d Automatic changelog update 2024-11-16 03:40:25 +00:00
Saphire Lattice
1f5eb6a08b Fix utensils not being thrown away (#33326) 2024-11-15 21:39:19 -06:00
PJBot
c4e8751ee6 Automatic changelog update 2024-11-16 03:27:57 +00:00
Southbridge
862c2ac858 BRB sign in the Bureaucracy Crate (#33341)
Added the brb sign to the Bureaucracy Crate
2024-11-15 21:26:47 -06:00
PJBot
4426bbe784 Automatic changelog update 2024-11-16 03:26:15 +00:00
Saphire Lattice
e7e1d96051 Improve crayon UI to not be stuck in 1996 (#33101)
* Improve crayon UI to not be stuck in 1996

* Make a horrifying crayon spaghetti

* Crayon

* Undeprecate the crayon, describe the crayon
2024-11-15 21:25:06 -06:00
ScarKy0
3173a3461e S: Awaiting Changes 2024-11-16 02:06:52 +01:00
ScarKy0
7d82a7bf5c Merge branch 'space-wizards:master' into ion-storm-refactor 2024-11-16 00:50:48 +01:00
PJBot
abdefbd622 Automatic changelog update 2024-11-15 23:47:08 +00:00
beck-thompson
da4fa9bea9 Clumsy system refactor (#31147)
* First commit

* Fixes

* Added the noise

* Renames

* Timespan

* Fixed space

* entity -> ent

* This shouldn't work

* opps....

* Datafield name change

* Better comments

* small comment

* Personal skill issue

* Event renames and stuff

* Couple fixes

* Defib ref fixes (Silly me)

* Added clumsy back!

* no hard code clumsy!

* Identity fix

* Event name change

* Comment change

* Function name change

* opp

* Update names

* Damage stuff!

* Fixes!

* Fixes

* opps

* This was hidden away!!

* negative diff feeds me
2024-11-16 00:46:01 +01:00
SpaceRox1244
09d0565413 Adds gorilla gauntlet storage sprite and updates hit sound (#33167)
* Adds storage sprite for gorilla gauntlet

* Specifies a heavier hitsound for gorilla gauntlet

* Modifies gauntlet icon and storage sprite

* Updates credit to my new username
2024-11-15 16:48:28 -06:00
PJBot
6683dc9037 Automatic changelog update 2024-11-15 21:22:14 +00:00
lzk
089f190266 Add succumb action 10 sec delay (#32985)
* Add succumb action 10 sec delay

* add somthing

* add delay to last words as well

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2024-11-15 22:21:08 +01:00
Ed
7a0fb9fc15 fix wallmounted (#585) 2024-11-15 23:54:58 +03:00
PJBot
3a6ae97566 Automatic changelog update 2024-11-15 20:53:26 +00:00
RedBookcase
4fc7a4c56e Edited Snow White reaction to output proper amount of drink. (#33331)
Co-authored-by: RedBookcase <Usualmoves@gmail.com>
2024-11-16 02:52:19 +06:00
Ubaser
cf96679d0b New ruin variant (#33332)
add
2024-11-15 12:18:44 -07:00
Ubaser
97ce69fef6 Command external airlocks (#33333)
add
2024-11-15 14:40:52 +01:00
PJBot
e3b611085b Automatic changelog update 2024-11-15 06:56:00 +00:00
Preston Smith
465170f1e1 Prevent Digiboard recycling (#33315)
* add `HighRiskItem` tag

* Correct tags

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2024-11-15 13:54:53 +07:00
Ubaser
b4e0362ed4 Update Core (#33325)
add
2024-11-14 21:59:35 -07:00
Saphire
f75be07a05 Merge hotfix #33287 from "stable" into "master"
- Rule amendment - Remove role abandonment aHelp requirement. (#33287)
- Merges PR #33324
2024-11-15 10:11:54 +06:00
PJBot
606d44bcb0 Automatic changelog update 2024-11-15 03:25:36 +00:00
beck-thompson
dfda557d4b Note expiry time is now relative instead of using timestamps (#33262)
* Add the stuff

* Loc fix

* fixes

* Change
2024-11-15 10:24:27 +07:00
Repo
530a741b7b Rule amendment - Remove role abandonment aHelp requirement. (#33287)
* Role abandonment aHelp requirement.

* disable roundstart chat message

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2024-11-15 13:54:20 +11:00
scrivoy
d205d17ba3 Meta Station: Add a fully functional TEG room (#32941)
* initial commit

* delete WIP-marker.md

* add TEG room, move gas chambers up

* remove outside burn chamber button, add naming to APC, SMES, Substation

* add HV below TEG Substation

* removed invalids
2024-11-14 18:04:14 -07:00
scrivoy
2c9f2279d6 Marathon Station: Added air alarms to CMO, Surgery, Security Checkpoint (#33213)
* add air alarms to sec checkpoint, cmo and western surgery

* decals and cleanup
2024-11-14 14:30:16 -07:00
ScarKy0
3b9365160c or was it 2024-11-14 18:32:02 +01:00
ScarKy0
9a5c49b961 epic empty commit 2024-11-14 18:31:50 +01:00
ScarKy0
53ce812356 slash 2024-11-14 18:18:39 +01:00
PJBot
0437ec6d56 Automatic changelog update 2024-11-14 17:09:42 +00:00
Pieter-Jan Briers
1bebb3390c Borg type switching. (#32586)
* Borg type switching.

This allows borgs (new spawn or constructed) to select their chassis type on creation, like in SS13. This removes the need for the many different chassis types, and means round-start borgs can actually play the game immediately instead of waiting for science to unlock everything.

New borgs have an additional action that allows them to select their type. This opens a nice window with basic information about the borgs and a select button. Once a type has been selected it is permanent for that borg chassis.

These borg types also immediately start the borg with specific modules, so they do not need to be printed. Additional modules can still be inserted for upgrades, though this is now less critical. The built-in modules cannot be removed, but are shown in the UI.

The modules that each borg type starts with:

* Generic: tools
* Engineering: advanced tools, construction, RCD, cable
* Salvage: Grappling gun, appraisal, mining
* Janitor: cleaning, light replacer
* Medical: treatment
* Service: music, service, clowning

Specialized borgs have 3 additional module slots available on top of the ones listed above, generic borgs have 5.

Borg types are specified in a new BorgTypePrototype. These prototypes specify all information about the borg type. It is assigned to the borg entity through a mix of client side, server, and shared code. Some of the involved components were made networked, others are just ensured they're set on both sides of the wire.

The most gnarly change is the inventory template prototype, which needs to change purely to modify the borg hat offset. I managed to bodge this in with an API that *probably* won't explode for specifically for this use case, but it's still not the most clean of API designs.

Parts for specific borg chassis have been removed (so much deleted YAML) and specialized borg modules that are in the base set of a type have been removed from the exosuit fab as there's no point to printing those.

The ability to "downgrade" a borg so it can select a new chassis, like in SS13, is something that would be nice, but was not high enough priority for me to block the feature on. I did keep it in mind with some of the code, so it may be possible in the future.

There is no fancy animation when selecting borg types like in SS13, because I didn't think it was high priority, and it would add a lot of complex code.

* Fix sandbox failure due to collection expression.

* Module tweak

Fix salvage borg modules still having research/lathe recipes

Engie borg has regular tool module, not advanced.

* Fix inventory system breakage

* Fix migrations

Some things were missing

* Guidebook rewordings & review

* MinWidth on confirm selection button
2024-11-14 11:08:35 -06:00
PJBot
669bc148f9 Automatic changelog update 2024-11-14 16:57:29 +00:00
CheddaCheez
815e37e512 Fix mime broken vow alert (#33303)
Swap VowAlert and VowBrokenAlert on lines 149 and 150 so that the proper alerts are cleared and shown
2024-11-14 19:56:21 +03:00
ScarKy0
ace158df0e Yippee! 2024-11-14 17:53:15 +01:00
ScarKy0
0f30639cf2 progress 2024-11-14 17:21:03 +01:00
ScarKy0
5dbea42751 derelicn't for real 2024-11-14 15:05:14 +01:00
ScarKy0
c86201308a guh 2024-11-14 15:01:04 +01:00
SlamBamActionman
75ec546550 Update Label workflows to use new labels (#33310)
* Update labeler.yml

* Update labeler-needsreview.yml

* Update labeler-staging.yml

* Update labeler-stable.yml

* Update labeler-untriaged.yml

* Create labeler-size.yml

* Update labeler-size.yml

* Update labeler-size.yml

* Update conflict-labeler.yml

* Rename conflict-labeler.yml to labeler-conflict.yml
2024-11-14 14:57:05 +01:00
ScarKy0
e9c66cfe98 Merge branch 'ion-storm-refactor' of https://github.com/ScarKy0/space-station-14 into ion-storm-refactor 2024-11-14 14:55:24 +01:00
ScarKy0
4f754b814b derelictn't (for now) 2024-11-14 14:55:01 +01:00
ScarKy0
755f322e29 Merge branch 'master' into ion-storm-refactor 2024-11-14 14:45:55 +01:00
keronshb
5e54536141 Hotfix 33160 (#33302) 2024-11-14 00:22:10 -05:00
keronshb
f2b7743bdd Half Revert #31978 (#33160)
Hotfix
2024-11-13 23:54:31 -05:00
PJBot
b91c977f7a Automatic changelog update 2024-11-13 23:37:44 +00:00
keronshb
fa3a04a527 Ethereal Jaunt Spell for Wizard & Jaunt ECS (#33201)
* Act

* Adds Jaunt ECS and related prototypes

* Adds jaunt sounds

* Adds enter and exit sound support to polymorphs

* Updates jaunt description

* Adds jaunt action sprite and changes jaunt polymorph to use it

* Adds Jaunt and upgrade to the wizard grimoire

* Makes base mob jaunt parent off of incorporeal and basemob, adds blue ghost sprite for ethereal jaunt

* Update Resources/Locale/en-US/store/spellbook-catalog.ftl

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>

* Update Resources/Prototypes/Entities/Mobs/Player/jaunt_mobs.yml

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>

* Update Resources/Prototypes/Entities/Mobs/Player/jaunt_mobs.yml

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>

* Update Resources/Prototypes/Entities/Mobs/Player/jaunt_mobs.yml

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>

* Update Content.Shared/Polymorph/PolymorphPrototype.cs

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>

* Update Content.Shared/Polymorph/PolymorphPrototype.cs

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>

* removes meta changes

* removes other meta changes

* adds context menu and a description to basemobjaunt

* comments for jaunt component and adds on component shutdown method

* Update Content.Shared/Jaunt/JauntComponent.cs

* Update Content.Shared/Jaunt/JauntComponent.cs

* Update Content.Shared/Jaunt/JauntComponent.cs

* Update Resources/Prototypes/Catalog/spellbook_catalog.yml

---------

Co-authored-by: lzk <124214523+lzk228@users.noreply.github.com>
Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2024-11-14 00:36:37 +01:00
PJBot
9643598c70 Automatic changelog update 2024-11-13 23:28:39 +00:00
dffdff2423
51d2b51ad0 tag:with toolshed command (#31751) 2024-11-14 06:27:31 +07:00
Vasilis
6f7066eda8 Separate CCVars into separate files (#33268) 2024-11-13 18:27:55 +00:00
Ed
5bcc378bbe Clean up, increase build stability (#583)
* Update base.yml

* bandit -> sociopath

* some fixes

* syringe

* vaults

* Update ContentAudioSystem.CP14AmbientLoop.cs
2024-11-13 17:56:07 +03:00
PJBot
c978eefedb Automatic changelog update 2024-11-13 12:31:47 +00:00
Ubaser
8cf279e200 Window sprite tweaks (#33282)
* add

* yes
2024-11-13 13:30:40 +01:00
Spessmann
99b4604d50 Cog fixes (#33285)
fixed the map (for real this time)
2024-11-12 20:07:47 -07:00
PJBot
52c1708117 Automatic changelog update 2024-11-13 03:00:54 +00:00
August Sun
bd2d0ee5e5 Added the ability to microwave inert flesh anomaly cores to turn into an anomalous meat mass (#33223)
* First round of anomaly core functionalities added

* Added sliceTime to anom meat mass and cooked version

* Adds SmokeOnUse component, system and shared system, adds new functions to inert electrical anom core

* Added more functions

* Final touches to branch

* Cleaning up some of the metadata for sprites and component definitions

* PR_Changes_v2_rev.0_Final_FINALFORREALTHISTIME.yml

* Lol jk these goddamn tests why me

* Quick updates based on feedback

* more changes to improve

* additional fixes and edits

* Changed tech core functionality

* added magboot functionality to grav core

* fixed issue with bluespace core sizing

* Reverting changes per request

* extra file to be deleted

* File cleanup

* Update chemicals.ftl

* Update cores.yml

* Update cores.yml

* Update meta.json

* Update chemicals.yml

* Update Resources/Prototypes/Entities/Objects/Consumable/Food/meat.yml

Co-authored-by: chromiumboy <50505512+chromiumboy@users.noreply.github.com>

* Update meal_recipes.yml

* Update cores.yml

---------

Co-authored-by: august-sun <45527070+august.sun@users.noreply.github.com>
Co-authored-by: chromiumboy <50505512+chromiumboy@users.noreply.github.com>
2024-11-12 20:59:47 -06:00
cohanna
21074bd98d oops 2024-11-12 19:14:28 -07:00
cohanna
e9f6a02f18 un-reverted fixes 2024-11-12 19:05:56 -07:00
SpaceRox1244
af3593a3b7 Adds new sprites for shotgun shell boxes (#33176)
* Adds new sprites for shotgun shell boxes

* Adds second set of mag visuals for slug and uranium casings

* Fixes yaml that I messed up

* Changes credit to new username before merging happens
2024-11-12 17:45:59 -06:00
PJBot
cc3712be0c Automatic changelog update 2024-11-12 21:04:21 +00:00
Repo
ef51700094 Fix unban/editing role bans placed in groups. (#30659)
* On editing a roleban, get all the bans with the same time.

* forgoten newline

* Update to check for player ID too.
2024-11-12 22:03:13 +01:00
MilenVolf
8b154899b5 Allow editing angle of the fired projectile (#33254)
Add Angle datafield to `ProjectileComponent`. It allows to change the angle of the fired projectile
2024-11-12 20:11:02 +01:00
PJBot
8776c71e59 Automatic changelog update 2024-11-12 12:07:50 +00:00
Preston Smith
70e3650246 Make Droppers Respect Closed/Sealed Containers (#33011)
* Make droppers respect closed/sealed

* Combine nested

* Optimize conditions a bit
2024-11-12 19:06:43 +07:00
Ed
df4900e148 Demiplan examination (#578)
* demiplan examining

* cargo demiplanes update

* Update positions_buy.ftl

* Update crates.yml
2024-11-12 13:33:19 +03:00
Ed
b106554cfe Prototypes work (#579)
* wrench

* station crates

* bottles

* barrel openable

* Update crates.yml

* mop fix

* broom fix

* crossbolt size fix

* bottles fix

* Update closets.yml

* Update anvil.yml

* Update crates.yml
2024-11-12 12:42:45 +03:00
Ed
a1966d8671 improve BiomeDunGen (#33113)
* improve BiomeDunGen

* forgot lol

* Update DungeonJob.PostGenBiome.cs

* Update DungeonJob.PostGenBiome.cs
2024-11-11 23:19:54 -06:00
Simon
806e1e46cb Separate CCVars into separate files 2024-11-12 03:10:25 +01:00
Pieter-Jan Briers
4f3db43696 Integrate Modern HWID into content
This should be the primary changes for the future-proof "Modern HWID" system implemented into Robust and the auth server.

HWIDs in the database have been given an additional column representing their version, legacy or modern. This is implemented via an EF Core owned entity. By manually setting the column name of the main value column, we can keep DB compatibility and the migration is just adding some type columns.

This new HWID type has to be plumbed through everywhere, resulting in some breaking changes for the DB layer and such.

New bans and player records are placed with the new modern HWID. Old bans are still checked against legacy HWIDs.

Modern HWIDs are presented with a "V2-" prefix to admins, to allow distinguishing them. This is also integrated into the parsing logic for placing new bans.

There's also some code cleanup to reduce copy pasting around the place from my changes.

Requires latest engine to support ImmutableArray<byte> in NetSerializer.
2024-11-12 01:51:54 +01:00
Pieter-Jan Briers
36aceb178c Database SnakeCaseNaming fixes
Fixes formatting of owned entity type property names. These are normally named "FooBar_Baz" by EF Core, but the snake case thing was turning them into "foo_bar__baz". The double underscore is now fixed.

We don't *yet* have any EF Core owned entity in use, but I am planning to add one. I don't know if downstreams are using any so this should still be marked as a breaking change.

Also fixed it creating and dropping a Compiled Regex instance for every name, the regex is now cached (and pregenerated).
2024-11-12 01:51:54 +01:00
PJBot
37958378cb Automatic changelog update 2024-11-11 22:59:38 +00:00
Andrew Montagne
1136200dc8 BUGFIX: Fix APEs being able to be turned on without power (#32493)
Add a check to see the APC is powered before turning the emitter on.
2024-11-11 23:58:31 +01:00
Vasilis
bbdbad5691 Merge Shell Gun Hotfix into Master (#33260) 2024-11-11 18:14:15 +00:00
BramvanZijp
991bbc2d4f Merge branch 'stable' of https://github.com/space-wizards/space-station-14 into HotFixtoMaster 2024-11-11 18:52:49 +01:00
PJBot
b9c2b0c41b Automatic changelog update 2024-11-11 16:13:45 +00:00
BramvanZijp
a138fede2b Make the Flare Gun & Security Shell Gun be unbolted by default. (#33248) 2024-11-11 17:12:36 +01:00
Ed
0196f6158a update (#577) 2024-11-11 12:05:23 +03:00
BramvanZijp
197d9e68dc HOTFIX: Fix Security Shell Gun being uncraftable. (#33247)
* Sec Shell Gun Craftability Hotfix

* Capital Fix
2024-11-10 21:22:03 -06:00
leonidussaks
21979a7b5f Fix vape use without check if doafter cancelled (#33245)
vape small fix
2024-11-10 21:17:03 -06:00
Ed
ae4fa34b90 New demiplan location, MORE ZOMBIES (#576)
* new location, increase zombie spawnrate

* new caves demiplan location
2024-11-10 22:59:02 +03:00
Psycrow
45dc4739fd Update drinks_cups.yml (#570)
* Update drinks_cups.yml

* Testing

* Revert "не то жмал"

* Пришлось мне пройти через это

* mug -> vial

* test

* Делаем мир легче
2024-11-10 22:08:24 +03:00
Jaraten
caee7c1f97 stone & wooden decals (#574)
* stone & wooden decals

* typo

* fucken github
2024-11-10 22:07:13 +03:00
Ed
6f0bb473d2 Simple resurrection spell (#575)
* resurrection spell

* Update spawners.yml
2024-11-10 19:17:04 +03:00
Ed
84e07c1ded Next spellStorage experiment (#572)
* scroll spells

* refactor magic system

* Update spawners.yml

* safe use

* Update magic-spells.ftl

* fix magic containers

* fix mole

* all scrolls

* remove shadow step ring

* fix scrolls
2024-11-10 16:15:08 +03:00
Vasilis The Pikachu
63f2c8491c Merge remote-tracking branch 'upstream/staging' into stable-test 2024-11-10 14:10:53 +01:00
scrivoy
9b7200607b Omega Station: Fix Air Alarm in CMO office (#33216)
move air alarm and link devices
2024-11-10 04:40:02 -07:00
Shaddap1
1c8992ffbe Goliath rebalance (#31492)
Update asteroid.yml
2024-11-10 04:28:55 -07:00
Preston Smith
2801ebea8d Optimization! 2024-11-10 00:45:54 -06:00
PJBot
9396ce302a Automatic changelog update 2024-11-10 04:27:57 +00:00
IProduceWidgets
33b780fd1f tweak: weather command tooltip (#33130)
clear weather tip
2024-11-09 22:26:51 -06:00
Armok
d939e991bb Removed bola stam damage (#32989) 2024-11-09 22:32:54 -05:00
github-actions[bot]
d1c66d71e7 Update Credits (#33237)
Co-authored-by: PJBot <pieterjan.briers+bot@gmail.com>
2024-11-10 01:46:58 +01:00
PJBot
675e42df24 Automatic changelog update 2024-11-09 19:30:38 +00:00
ScarKy0
287a9a07de Intellicards now have a doAfter. (#33198)
* init

* cleanup

* Oops! Forgot something

* addressing changes

* guh

* guh 2.0

* some cleanup

* all bless the intellicard

* Yippee

* small locale thing

* changes + small bugfix

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2024-11-09 13:29:29 -06:00
Ed
c8ab937cf0 Spell scrolls (#571)
* scroll spells

* refactor magic system

* Update spawners.yml

* safe use

* Update magic-spells.ftl
2024-11-09 17:55:16 +03:00
Ed
6147740f3e Try fix master constantly fails (#567)
* try to fix

* Update entities.ftl

* Update entities.ftl

* Update entities.ftl

* Update entities.ftl

* Update entities.ftl

* Update entities.ftl
2024-11-09 13:07:12 +03:00
Flareguy
40044203e6 The Jumpsuit Re-Detailening (#33096)
* jumpsuit detailening

* jumpskirt stuff

* meta.json

* update meta.json

* meta.json fix fix

* meta.json fix fix fix
2024-11-09 16:56:16 +11:00
SlamBamActionman
1e368ae300 Add a Walking alert (#32954)
* Initial commit

* Review feedback changes

* ProtoId

* TempCommit

* First attempt to have client alerts

* Review changes
2024-11-08 18:28:24 -06:00
Errant
b9685850fa Label workflow - staging (#33221) 2024-11-08 22:59:38 +01:00
Errant
41b84fc29d Label workflow - stable (#33220) 2024-11-08 22:59:27 +01:00
Psycrow
2f91247fa2 Fix stone breeds (#559)
* Fix Stone Breeds

* Fix 1

* FIx 2

* Fix 3

* Round 4

* Final Fix
2024-11-08 21:33:19 +03:00
PJBot
6ed2ab9e85 Automatic changelog update 2024-11-08 14:51:26 +00:00
Boaz1111
fea5769cc5 dark green jumpsuit recolor, casual green jumpsuits added (#31710)
* green

* fix material arbitrage

* lighter
2024-11-08 15:50:14 +01:00
Jezithyr
84338686a3 Stable Merge (#33218) 2024-11-08 03:46:22 -08:00
Psycrow
8013b883c1 Add throwing tomatoes and fix (#548)
* Add throwing tomatoes and fix

Tomatoes like in real life

* Update produce.yml

* Update produce.yml
2024-11-08 14:15:45 +03:00
deltanedas
80e148c265 cham projector fixes/rewrite (#27111)
* cant disguise to thing in a container

* copy cigarette visualiser

* prevent aghost throwing an error

* make disguises die in space

* fuck it rewrite it to not use polymorph

* fix action troll

* oop

* add vebr

* add access to the components

* 2/3

* fix

* relay damage from disguise to user

* fix integrity

* :trollface:

* :trollface:

* m

* kill integrity

* fix a bug

* review

* remove them from component

* relay flash effect to the disguise

* fix icon being weird

* change method since multiple systems cant handle same network event

* :trollface:

* actually network Disguise real

---------

Co-authored-by: deltanedas <@deltanedas:kde.org>
2024-11-08 12:15:41 +01:00
Psycrow
682b0f7b78 Delete structures on workbench (#549)
* Transfer of crafting barrels

* Sorry, error fix

* Come on, Work!
2024-11-08 13:29:02 +03:00
deltanedas
667daa168f pass Actor to cartridge messages (#33210)
* pass Actor to cartridge messages

* NonSerialized gaming

---------

Co-authored-by: deltanedas <@deltanedas:kde.org>
2024-11-08 10:38:41 +01:00
Nim
c7b230857f Royal pumpkin (#547)
* royal pumpkin

* Secret zombie fix

---------

Co-authored-by: Ed <96445749+TheShuEd@users.noreply.github.com>
2024-11-08 10:26:08 +03:00
Nim
e062d386fc Herbal bandages and gauze (#545)
* gauze and bandage

* fix

* spawn

* dele

* doAfter buff

---------

Co-authored-by: Ed <96445749+TheShuEd@users.noreply.github.com>
Co-authored-by: Ed <edwardxperia2000@gmail.com>
2024-11-08 09:26:31 +03:00
FN
012855475e Fix cursed mask bug (#33014)
* One line fix

* Removed redundant using

* Allocation improvement
2024-11-07 20:59:05 -06:00
SolStar
261c18f764 Fix research disk crash (#33205)
* Fix reserach disk crash

* remove extra whitespace

* removed args.handled where args are not handled
2024-11-07 18:29:03 -06:00
Emisse
6a1d631b14 fix invalids core (#33215)
fix invalids
2024-11-07 16:23:28 -07:00
scrivoy
9ee47b927b Core Station: Telecoms air alarm connection to atmos devices (#33214)
link air alarm in coms room
2024-11-07 16:18:12 -07:00
PJBot
03723afee6 Automatic changelog update 2024-11-07 22:03:35 +00:00
PopGamer46
d13765fa5c Fixes Lambordeere bolt buttons not being connected (#33065)
* fix

* oops, used savemap instead of savegrid
2024-11-07 15:02:24 -07:00
K-Dynamic
8257dc87de Meta map: remove arrivals chair, changed maints shotgun to beanbag rounds (#32981)
remove chair + changed maints db to rubber
2024-11-07 15:01:57 -07:00
Spessmann
fc0d85b487 Cog update (fixes) (#33202)
fixed cog again
2024-11-07 15:01:35 -07:00
Ed
87dc3f9fa5 Order board (#546)
* orders board! work for the Witcher

* stamps

* wtf

* Update closets.yml
2024-11-08 00:10:59 +03:00
Nim
12a838ac8e Zombies on style (#531)
* zombie styl

* random

* randomrandom

* random3

* random4

* random5

* Random6

* random7

* mega zombie nerf

* Update zombie.yml

---------

Co-authored-by: Ed <96445749+TheShuEd@users.noreply.github.com>
Co-authored-by: Ed <edwardxperia2000@gmail.com>
2024-11-07 23:20:03 +03:00
Ed
ab7296ff4a Demiplan ruins (#544)
* ruins

* Update spawners.yml
2024-11-07 17:45:21 +03:00
Ed
ebac4a2eec Spellcasting upgrade (#543)
* move to gurps magic types

* spell traits, categorize spells

* Update TraitSystem.cs

* magic spells item provider

* Update twoHandedStaffs.yml

* Update CP14MagicManacostModifySystem.cs

* Update CP14SpellStorageSystem.cs

* some funny shit

* fix problems 1

* FIX

* more funny broken shit

* predict slowdown, fixes funny

* EntityTarget action

* fixes

* Update T1_sphere_of_light.yml

* fix demiplan loot centering

* predict movement!
2024-11-07 16:04:49 +03:00
ScarKy0
379fb4cb6a AI can now speak once more. (#33196)
Yippee
2024-11-07 11:25:16 +01:00
cohanna
6c7336b0a8 oops reverted too much 2024-11-06 22:01:10 -07:00
cohanna
18971f2705 Reverted #31978 2024-11-06 21:39:02 -07:00
Ed
7e4fb90e02 Spell T0 traits, recategorize magic (#540)
* move to gurps magic types

* spell traits, categorize spells

* Update TraitSystem.cs

* magic spells item provider

* Update twoHandedStaffs.yml

* Update CP14MagicManacostModifySystem.cs

* Update CP14SpellStorageSystem.cs
2024-11-06 18:02:37 +03:00
PJBot
5b0761dab2 Automatic changelog update 2024-11-06 14:40:22 +00:00
SlamBamActionman
b15d5a7f27 Changes to "Burst" firemode; Drozd, WT550 and C20-r (#31292)
* Initial commit

* Change burst fire variable to be a set value rather than a multiplier
2024-11-06 15:39:16 +01:00
PJBot
e72d63e8a9 Automatic changelog update 2024-11-06 14:28:17 +00:00
BramvanZijp
d588409909 Rework the Flare Gun & add a Security Shell Gun. (#32829)
* Rework flaregun and add security shell gun

* Make flare gun twice as likely to appear in emergency lockers

* Security shell gun can now fire lethal shells like the flare gun used to be able to.

* Rebalance the sec shell gun material cost to primarily be steel instead of plastic

* Define the ShellShotgunLight tag in tags.yml

* Leave the no lethal shells for normal flareguns to a different PR.

* Move a comment to re-run checks.

* Bye bye lethal shells from plastic guns.

* Fix weird whitespace issue.

* Make the sec shell gun inherit the normal flare gun.

* Remove the rack verb and update the sec shell gun description

* Remove the ability to fire lethals from flare guns, pending blowing up the gun

---------

Co-authored-by: SlamBamActionman <slambamactionman@gmail.com>
2024-11-06 15:27:10 +01:00
Plykiya
ed865ae973 make admeme mouse eternally hungry and thirsty by increasing decay rate (#33153)
* make admeme mouse eternally hungry and thirsty by increasing decay rate

* no starving slowdown, fix unnecessary declarations

* REVERTUS DELETUS
2024-11-06 15:19:02 +01:00
Ed
0f091b4cdf Merge pull request #542 from crystallpunk-14/ed-06-11-2024-upstream
Ed 06 11 2024 upstream
2024-11-06 17:06:40 +03:00
Ed
955145a9a5 Merge remote-tracking branch 'upstream/master' into ed-06-11-2024-upstream
# Conflicts:
#	Resources/Changelog/Changelog.yml
#	Resources/Credits/GitHub.txt
#	Resources/Prototypes/Entities/Mobs/Player/silicon.yml
2024-11-06 16:53:24 +03:00
Ed
ae27cf7e08 Revert "Merge remote-tracking branch 'upstream/master' into ed-06-11-2024-upstream"
This reverts commit 1579da881a, reversing
changes made to a9bdab0705.
2024-11-06 16:52:08 +03:00
Ed
1579da881a Merge remote-tracking branch 'upstream/master' into ed-06-11-2024-upstream 2024-11-06 16:51:42 +03:00
PJBot
24e6b9f42c Automatic changelog update 2024-11-06 13:21:12 +00:00
slarticodefast
8ddc5435a6 remove wanted list cartridge from captain PDA (#33084)
remove wanted list from captain PDA
2024-11-06 14:20:05 +01:00
Ed
a9bdab0705 Magic types, magic clothing (#539)
* magic types + auto magic spell description

* manacost calculation event

* manacost ffect clothing

* Update orbs.yml

* magic type not required
2024-11-06 08:44:03 +03:00
PJBot
d18dba982b Automatic changelog update 2024-11-06 03:30:07 +00:00
Baptr0b0t
bcfacec287 Fix AI in Intelicard can see through walls (#33177)
setdrawfov added
2024-11-05 21:28:58 -06:00
slarticodefast
1ded8e7f03 fix artifact debug assert (#33171)
* fix artifact debug assert

* do the same for EffectBigIron

* 1 tab less
2024-11-05 23:12:35 +01:00
PJBot
2382162d72 Automatic changelog update 2024-11-05 18:19:35 +00:00
Errant
da19abdc76 Don't show Reinforcement codewords on round end (#33181)
Don't show unused codeword sets
2024-11-05 19:18:28 +01:00
Errant
3972a25258 HOTFIX latejoin traitor activations (#33180) 2024-11-05 19:03:14 +01:00
PJBot
564606a532 Automatic changelog update 2024-11-05 16:59:31 +00:00
Kirus59
cb59826dcb Hunger and thirst huds fix (#32832)
* Hunger and thirst huds fix

* delete poor caching
2024-11-05 17:58:23 +01:00
Ed
b5df675187 Spellcaster slowdown, mole nerf, new shoulder slot, healing staff (#538)
* healing staff sprite

* new back slot and move all big things to whis slot

* replace ring to staff

* caster sowdown! Mole rebalance

* loadouts fix

* fix weapon rotation

* Update spawners.yml
2024-11-05 19:05:40 +03:00
Ed
c3d4303270 directional windows fix (#537) 2024-11-05 13:26:34 +03:00
Ed
120386bb2d Windows + weapon shiny (#536)
* add wooden window crafting

* weapon resprite

* Update anvil.yml

* Update walls.yml
2024-11-05 12:12:21 +03:00
PJBot
aef7dd514b Automatic changelog update 2024-11-05 00:13:37 +00:00
DrSmugleaf
8f87bad83c Fix DisplayVotes doing nothing for a vote (#33170) 2024-11-05 01:12:29 +01:00
Nim
26cf6dc01a petting (#535) 2024-11-04 18:35:56 +03:00
Ed
54c7a40967 Blacksmith role (#534)
* disable crowbar door prying

* blacksmith role

* finish role

* map update

* more recipes to anvil

* Update arenas.yml

* glass!

* ores rebalance
2024-11-04 16:25:19 +03:00
PJBot
01ac967640 Automatic changelog update 2024-11-04 11:24:18 +00:00
Zachary Higgs
a3f10ccfbb Add Silicon Law cues to Every method a Silicon can have their laws change (#32887)
* Silicon Law Sound cue refactor

- Added CueEntityMind to Silicon Law system to more uniformally
send sounds to minds

- Switch all previous MindPlaySound to instead call to the new method

* Change SiliconLawEui to cue the mind

* CR: TryGetComponent and Change the Documentation

- Remove GetComponentOrNull for  _entityManager.TryGetComponent

- Change SiliconLawProviderComponent.LawUploadSound to be more general
rather than just referencing lawboards

* Update Content.Server/Silicons/Laws/SiliconLawEui.cs

* Update Content.Shared/Silicons/Laws/Components/SiliconLawProviderComponent.cs

* Silicon-law-cue-refactor - CR:

- Roll the cuing into NotifyLawsChanged via an optional variable for the
cue

- Modify "SetLaws" to take in an optional soundProvider for the cue

- modify Emagged, Ion, Eui and SetLaws to instead send the sound cue via
NotifyLawsChanged

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2024-11-04 12:23:12 +01:00
Ed
c21dd891f3 Endscreen message + command objectives updadte (#533)
* add simple end screen common goals

* finish common objectives endscreen

* personal objectives endscreen

* Update personal_objectives.yml

* new empire objectives
2024-11-04 13:41:09 +03:00
cohanna
69c0f8773f we hate powergaming 2024-11-04 03:10:29 -07:00
PJBot
4ba8e351fe Automatic changelog update 2024-11-04 03:34:57 +00:00
Preston Smith
5b4f4237a3 Fix: Web Clothing Butcher Issues (#33121)
* Make boot web cost equal to one cloth

* Make boots and coat butcher into web

* Remove unneeded default
2024-11-03 21:33:51 -06:00
PJBot
75dd790aa6 Automatic changelog update 2024-11-04 03:25:28 +00:00
Boolean-Buckeye
ad78b30ca3 make emergency lights (de)constructable (#32945)
* add an emergency light node to the LightFixture construction graph
* add a recipe entry to the construction menu for emergency light
* make emergency light entity at the emergency light node on the graph
* Make emergency light destroy to 1 steel and 1 glass shard to match
  the construction recipe

Co-authored-by: BooleanBuckeye <booleanbuckeye@gmail.com>
2024-11-03 21:24:22 -06:00
Tr1bute
f5fac7c5f2 Made the SpeciesChange mutation no longer transfer with Sterile Swabs. (#33126)
Made the SpeciesChange mutation no longer persist.

There was an issue where swabbing a mutated plant species: I.e Blood Tomato to a regular Tomato sapling would transfer the species mutation. It would not actually get the effect, which is probably why it went under the radar. This change makes it so that the SpeciesChange mutation cannot be transferred via swabbing.
2024-11-03 21:09:07 -06:00
Michael Krebs
5d9acb7643 fix: Remove duplicate light blue towel from misc loadout (#33145)
remove duplicate towel from misc loadout
2024-11-03 21:06:52 -06:00
PJBot
b8b958dfdb Automatic changelog update 2024-11-04 00:57:47 +00:00
Tr1bute
83f7d3f3df Added Popup for the Ligneous plant mutation when using hands. (#33136)
* Added Popup for the Ligneous plant mutation when using hands.

There was some confusion for players with the Ligneous mutation which makes the plant harvestable only with sharp tools. Adding a popup with the message "The plant is too tough." to give them a hint to use something other than just their hands.

I decided to only put the message when attempting to harvest using hands, as the intent is clear that the player just wanted to harvest, but wasn't able to. Using any other tools like a crowbar or a screwdriver will not trigger the popup.

* Update Resources/Locale/en-US/botany/components/plant-holder-component.ftl

Co-authored-by: SlamBamActionman <83650252+SlamBamActionman@users.noreply.github.com>

---------

Co-authored-by: SlamBamActionman <83650252+SlamBamActionman@users.noreply.github.com>
2024-11-04 01:56:41 +01:00
PJBot
9a5152832a Automatic changelog update 2024-11-04 00:50:49 +00:00
MilenVolf
cc3a19c212 Collapsible ghost roles menu (#32717)
* Make ghost roles collapsible

* Save `BodyVisible` state of each `Collapsible` box

* Make ghost role collapsible only when group has more than 1 role

* Make it a little prettier

* Make only ghost role buttons collapsible

* Apply requested changes

* Typo

* Small cleanup

* Store in list, instead of iterating

* Make unique ids more unique

* Move it out of the cycle

* Make _collapsibleBoxes into dictionary and use key instead of Collapsible boxes names

Added TODO. So after the problem will be fixed in `GhostRolesEui`, it should be mirrored and fixed here too.

* Put TODO in GhostRolesEui. I guess Issue must be made for this

* Use HashSet instead of Dictionary as suggested. Invert the HashSet, so being present means it uncollapsed

I decided to invert HashSet to _uncollapsedStates, because players surely will have more collapsed buttons than opened, so we optimise memory usage a little bit.

* Remove extra space from ghost roles window

* Add buttons stretching. Size 3:1
2024-11-04 01:49:42 +01:00
Ed
16a0b99daf Magic crystal lanterns + Aftertest balance (#532)
* lamp visual update

* deleete ice floor spell

* mana gift spell

* magic lantern

* wallmount crystal lamps

* QoL

* crafting

* Update StyleNano.cs

* examining simplify

* rings name

* remove snakes modifier

* trinkets update

* remove snakes, add boars and rabbits to demiplans

* Update flashlight.yml

* fix

* Update test.yml

* Update migration.yml

* ыы
2024-11-04 00:55:15 +03:00
Nim
98854c01d7 Mole and small hydra (#527)
* mobs

* fix sprite

* fix f
2024-11-03 19:39:33 +03:00
Ed
53df2848c4 Demiplan polishing v4 (#530)
* Wizden PR copy

* sync

* Update DungeonJob.PostGenBiome.cs

* Update DungeonJob.PostGenBiome.cs

* some rebalance

* required exits and enters!

* room fill fix

* snakes nerf

* enable En-US localization for playtest

* guidebook update

* hotfix!!!

* anchoring deletion

* trying fix caves

* Update RoomFillSystem.cs

* disable locations for test

* Update CP14SpawnRandomDemiplaneJob.cs

* Update required_layers.yml

* Revert "Update required_layers.yml"

This reverts commit 2dd33db282.

* finally

* Update ContentLocalizationManager.cs

* Update spawners.yml

* Update test.yml

* fix
2024-11-03 14:40:21 +03:00
PJBot
a0ef431255 Automatic changelog update 2024-11-03 11:26:38 +00:00
Plykiya
912ac2c069 Bugfix: Wielding now uses identity system. (#33134)
Make wielding system use identity
2024-11-03 12:25:30 +01:00
github-actions[bot]
d2a487dc9e Update Credits (#33125)
Co-authored-by: PJBot <pieterjan.briers+bot@gmail.com>
2024-11-03 02:21:44 +01:00
Flareguy
d993582d00 Fix broken computer white shadows (#33103)
fix broken computer white shadows
2024-11-03 00:16:18 +01:00
Flareguy
4a39341e46 Delete conveyor_old.rsi (#33102) 2024-11-02 23:23:40 +01:00
RiceMar1244
0ba3350c7e Combat and survival knife storage/inhand sprites (#33111)
* Adds storage sprites for combat knife and survival knife. Replaces inhand sprites.

* Fixes meta.json copyright
2024-11-02 14:55:15 -05:00
Milon
6f1eeba191 change ShowHealthBars and ShowHealthIcons to use protoId (#32355)
use protoId
2024-11-02 17:59:38 +01:00
Errant
190d965c52 Hotfix add debug info to traitor activation (#33119)
* Add debug messages to traitor activation

* more debug
2024-11-02 17:49:44 +01:00
Scribbles0
65462d8ca5 Cardboard Box Capacity 4 -> 5 (#32743)
* capacity upgrade

* comment update
2024-11-02 17:21:35 +01:00
PJBot
a3ce9b0db4 Automatic changelog update 2024-11-02 15:13:31 +00:00
joshepvodka
8c1281adf7 Adds headphones to loadouts (#33067)
added headphones to trinkets
2024-11-02 16:12:25 +01:00
PJBot
db4b2e0a6f Automatic changelog update 2024-11-02 15:05:28 +00:00
Centronias
e7ca4b8f2f Intercoms and Radios both pick up proximate speech (#32737)
* Deduping of recent messages should consider the channel it's being sent to

* rerun actions
2024-11-02 16:04:22 +01:00
Ed
51f4ec84d5 Demiplan polishing v3 (#529)
* Wizden PR copy

* sync

* Update DungeonJob.PostGenBiome.cs

* Update DungeonJob.PostGenBiome.cs

* some rebalance

* required exits and enters!

* room fill fix

* snakes nerf

* enable En-US localization for playtest

* guidebook update

* hotfix!!!
2024-11-02 17:46:19 +03:00
PJBot
7614c2fba7 Automatic changelog update 2024-11-02 13:25:14 +00:00
deltanedas
11f0dc420f clean up tools lathe recipes (#31521)
* clean up tools lathe recipes

* add medical and cooking tools

* add result

* add result to others

* review

* engine

---------

Co-authored-by: deltanedas <@deltanedas:kde.org>
2024-11-02 14:24:08 +01:00
PJBot
131e492e6f Automatic changelog update 2024-11-02 13:22:16 +00:00
nikthechampiongr
9520e829de Allow for the ai's laws to be changed from its core and eye (#32461)
* Allow for the ai's laws to be changed from its core and eye

* Address reviews
2024-11-02 14:21:10 +01:00
PJBot
d1ab60f7bb Automatic changelog update 2024-11-02 13:20:40 +00:00
AftrLite
4f68315584 Adds a new AME sound effect! (#33097)
* Changes the AME sound effect to not be the default MetalThud.

* Was told on discord to make a minor change to autorerun the tests due to the Build & Test Debug failing!

* Attribution and licensing, as requsted by deathride58

* Fixes the high-pitched squeak audible to some people!

* Audio file tweaked by SlamBamActionMan to eliminate a weird squeak they were still able to hear. Thanks!
2024-11-02 14:19:33 +01:00
PJBot
2a6314bf90 Automatic changelog update 2024-11-02 10:08:58 +00:00
Ubaser
1c2fd6a11b Service workers antagonist fix. (#31359)
* add

* Revert "add"

This reverts commit 25da34b0fead5812fe5800c9bf5dd7b10ef48d7d.

* antagonism allowed™️
2024-11-02 05:07:51 -05:00
PJBot
fcbf515203 Automatic changelog update 2024-11-02 09:54:25 +00:00
K-Dynamic
b000a3e387 Hasten handcraft gauze recipe & decrease techfab gauze cost (#32744)
* med lathe gauze price reduction

* gauze craft doafter time

* 3 second doafter craft
2024-11-02 10:53:18 +01:00
PJBot
7276fff9c1 Automatic changelog update 2024-11-02 09:52:51 +00:00
K-Dynamic
05ae40400c Pills are explosion resistant (partially reverts #15851) (#32458)
* idk how to revert a pr so I just deleted some lines

* pill destructible with explosion resistance

* comment for explosion resist

* "and" to "but"

---------

Co-authored-by: SlamBamActionman <83650252+SlamBamActionman@users.noreply.github.com>
2024-11-02 20:51:44 +11:00
PJBot
51b8101dc2 Automatic changelog update 2024-11-02 09:30:23 +00:00
metalgearsloth
1c8eed8b45 Add on-call functionality for adminning (#30443)
* Add on-call functionality for adminning

The first time an ahelp gets SOS it gets relayed to the specified channel with the specified ping. Every time after that it doesn't until it gets a non-SOS response received.

* Remove redundant name

Pretty sure this already gets chucked on the name of the msg itself I think it just didn't show in screenshot because they were subsequent.

* Update Content.Server/Administration/Systems/BwoinkSystem.cs

Co-authored-by: Chief-Engineer <119664036+Chief-Engineer@users.noreply.github.com>

---------

Co-authored-by: Chief-Engineer <119664036+Chief-Engineer@users.noreply.github.com>
Co-authored-by: deathride58 <deathride58@users.noreply.github.com>
2024-11-02 10:29:16 +01:00
PJBot
2537bff7ba Automatic changelog update 2024-11-02 01:34:34 +00:00
Vasilis
957b8de89b Add cvars to votekick to customize requirements for the initiator. (#32490) 2024-11-01 21:34:23 -04:00
Brandon Li
26194e2f41 Fix ItemSlotSystem popup Logic (#28856)
* move popup call out of `CanInsert` into `OnInteractUsing`

* im stupid and `reason` is completely unnecessary

Signed-off-by: Brandon Li <sirbrandonthenerd@gmail.com>

* return early when `itemSlots.Slots.Count == 0`

* tweak logic for triggering popups

* change popup logic again

* Consolidate whitelist check

* Get any popup message not just last failed slot

* Apply suggestions from code review

Co-authored-by: chromiumboy <50505512+chromiumboy@users.noreply.github.com>

* yoink

Co-authored-by: ShadowCommander <10494922+ShadowCommander@users.noreply.github.com>

---------

Signed-off-by: Brandon Li <sirbrandonthenerd@gmail.com>
Co-authored-by: ShadowCommander <10494922+ShadowCommander@users.noreply.github.com>
Co-authored-by: chromiumboy <50505512+chromiumboy@users.noreply.github.com>
2024-11-01 20:33:26 -05:00
Preston Smith
146ae8a6a6 Give Nukies a Hand Labeler (#33053)
* Add hand-labeler to nukie planet

* Rearrange nukie chem table
2024-11-02 01:44:15 +01:00
UBlueberry
3382743086 Minor antagonist guidebook changes (#32824)
* took a two month nap. accidentally pushed too many buttons. let's try this again. added thieves to antagonists.xml

* even after that nap, i don't feel well-rested at all.

* please don't kill me for using webedit

* capitalization, typo

* Apply suggestions from code review (more period moving)

Thanks Evan, very cool

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>

* guess you could say im not pro-proper noun

* typo

* Update Resources/ServerInfo/Guidebook/Antagonist/Nuclear Operatives.xml

* ok

Co-authored-by: SlamBamActionman <83650252+SlamBamActionman@users.noreply.github.com>

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
Co-authored-by: SlamBamActionman <83650252+SlamBamActionman@users.noreply.github.com>
2024-11-02 01:42:20 +01:00
Ed
2b9d949eea Demiplan polishing 2 (#528)
* wizden PR copy

* starter rooms

* grass geode location, new modifiers
2024-11-02 00:59:55 +03:00
Ed
3b520ac69c Demiplan modifiers (#526)
* simple modifiers

* modifier tag filtering

* Update CP14DemiplanSystem.Generation.cs

* Update rocks.yml

* move loot to modifier

* move enemies to modificators

* fix filtering

* modifier rariry

* reward and difficulty limits

* rebalance and optimize calculation

* Update test.yml

* wizden PR copy

* move all alchemy reagents to modifiers
2024-11-01 18:08:57 +03:00
Jaraten
7124eb5335 galasass (#525) 2024-11-01 14:45:53 +03:00
Nim
ac732c6180 Pig and boar (#507)
* pig and boar

* boar

* speed

* tweak
2024-11-01 10:48:50 +03:00
PJBot
844a92026f Automatic changelog update 2024-11-01 06:23:45 +00:00
Ed
f9fea9e6ed Demiplan polishing (#524)
* 10 -> 20 sharpening stone durability

* auto destroy demiplans try 2 (better)

* start demiplan protection time

* buying demiplan key

* increase island size
2024-11-01 09:23:22 +03:00
Minemoder5000
b8a98de784 Remove CargoPallet component from the cargo pallet (#33022)
* Change cargo shuttle pallets to catwalks.

* Remove CargoPallet component from the cargo pallet.

* Undo cargo shuttle changes.
2024-11-01 09:22:38 +03:00
metalgearsloth
d7a1753c7d Add CanLoad for biomes (#33050)
CPUJob to come later.
2024-10-31 23:18:06 -04:00
deltanedas
c9cd778133 add IsMemberOfAny to faction system (#32975)
* add IsMemberOfAny to faction system

* pro

---------

Co-authored-by: deltanedas <@deltanedas:kde.org>
2024-10-31 21:34:27 -05:00
PJBot
c8259c6c0f Automatic changelog update 2024-11-01 02:33:34 +00:00
ScarKy0
e17d152838 Borgs can no longer see mindshield + AI can no longer toggle off seeing job icons (#33069)
* :(

* Removed the sprite + updated RSI
2024-10-31 21:32:28 -05:00
PJBot
b1a8eee52f Automatic changelog update 2024-11-01 02:07:53 +00:00
RumiTiger
6ce80d914d Muffins (#29318)
* Update meta.json

* Add files via upload

* Update misc.yml

* Update meal_recipes.yml

* Update meta.json

* Add files via upload

* Update plate.yml

* Update food_baked_single.yml

* Update dinnerware.yml

* Update cooking.yml

* Update misc.yml

* Add files via upload

* Delete Resources/Textures/Objects/Consumable/Food/Baked/misc.rsi/muffin-cherry.png

* Add files via upload

* Update meta.json

* Update misc.yml

* Update meal_recipes.yml

* Update meta.json

* Fix meta.json

* Fix meta.json again

* Update misc.yml

* Update misc.yml

* Update misc.yml

* Update misc.yml

* Update meta.json

* Update meta.json

* Update misc.yml

* Update meal_recipes.yml

* Update Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/misc.yml

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>

* Update dinnerware.yml

* Delete cherry

* Add files via upload

* Delete banana

* Add banana

* Delete chocolate

* Add chocolate

* lathe recipe fix

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2024-10-31 22:06:46 -04:00
PJBot
25b3898b28 Automatic changelog update 2024-11-01 02:05:15 +00:00
PopGamer46
d708a150e1 Fixes bolt lights of previously unpowered bolted doors (#33063)
fix
2024-10-31 22:04:08 -04:00
PJBot
973aeb1aaa Automatic changelog update 2024-11-01 01:54:01 +00:00
SlamBamActionman
06da4fcc60 Allow votekicks to be initiated in the lobby (#32528)
Initial commit
2024-10-31 21:52:55 -04:00
SlamBamActionman
b3190b8935 Lower in-round votekick requirements (#32953)
Initial commit
2024-10-31 21:47:59 -04:00
PJBot
59f1287aa3 Automatic changelog update 2024-11-01 01:44:18 +00:00
Khoa Nguyen
835d0b4d4a Fixed trash not being spawned when throwing pies (#33013)
* Fixed trash not being spawned when throwing pies

* Completely removed trash component flag check prior to the spawn loop
2024-10-31 21:43:11 -04:00
Moomoobeef
cf0d6c482e ExaminableDamage now puts its message at the bottom and in color (#32820)
* the examineableDamage component now puts its messages at the bottom, and in color

* god help us if something is priority -100 :godo:
2024-11-01 01:21:05 +01:00
deathride58
a399c1ec7c Fixes tailthump breaking positional audio by making it mono (#33092) 2024-10-31 22:33:06 +01:00
PJBot
45aa782ec4 Automatic changelog update 2024-10-31 21:32:04 +00:00
deathride58
56d62311b1 Fixes tailthump breaking positional audio by making it mono (#33092) 2024-10-31 22:30:58 +01:00
Vasilis
2282e3c352 Revert #28358 (#33090) 2024-10-31 19:51:44 +01:00
PJBot
d2baf18759 Automatic changelog update 2024-10-31 18:47:26 +00:00
SlamBamActionman
4626904fa8 [#20285 fix] Carp Plush and Rehydratables can now be put into mop bucket (#33079)
* Make shark plush janitor-bucketable

* fix bucketed grey shark texture

* Make sprites less shiny and adapt copyright notice

* Made shark way way less shiny

* Allow carp plush and rehydratables in mop bucket.

* Remove old mop bucket shark sprites

* Fix post-merge bugs

* Fix errors

* Move ReactiveContainer stuff to shared

That should mean it is now predicted.

* Custom eject verb for the mop bucket

* Fixes OnSolutionChange, removes pop-up as there already is one.

* .ftl is not necessary as the custom pop-up was removed

* Review fixes

* Update Content.Shared/Chemistry/Components/ReactiveContainerComponent.cs

* Update Content.Shared/Chemistry/EntitySystems/ReactiveContainerSystem.cs

---------

Co-authored-by: Psychpsyo <psychpsyo@gmail.com>
Co-authored-by: Psychpsyo <60073468+Psychpsyo@users.noreply.github.com>
Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2024-10-31 19:46:19 +01:00
SpaceLizard
1c2a96590b Fixed spelling mistake in water blaster description. (#33087)
Fixed minor spelling mistake
2024-10-31 19:07:29 +01:00
Justice League
33516b77ed Fixed minor spelling mistake 2024-10-31 13:28:17 -04:00
Ed
5c4b5d1572 Demiplans expeditions (#523)
* simple expedition generation

* add simple test key

* expedition map component

* some funny procedural testing

* refactor expeditions from planetbiome to islanddungeons

* some work

* fix: grid dungeon, not map planet dungeon

* unhardcode map components

* finish T1 expedition generation

* Update preset.yml

* indestructable stone

* mob water occlusion

* caves T1 expedition

* Update CP14SpawnExpeditionJob.cs

* Delete shared MissionParams

* rename to demiplans

* pass mapid into job

* demiplan connections

* demiplan exits

* random entry points

* Update config.yml

* some cleanup and renaming

* radius one-time teleport

* rename connections to exitPoint

* merge entry and exit point into rift component

* demipan closing - all rifts deletion

* demiplanEEEEEE

* fixes

* delete floating visuals

* Update CP14DemiplaneTravelingSystem.cs

* intro and outro demiplan music

* rift cores and flashing

* pulling support

* pulling fix + generatordata fix?

* auto destrot demiplans??
2024-10-31 19:13:44 +03:00
Vasilis
d446a3e8e9 Potencially fix approved labeler (#33083) 2024-10-31 16:05:42 +01:00
PJBot
bca8d95191 Automatic changelog update 2024-10-31 14:54:44 +00:00
BramvanZijp
a08da9d31f More pda space (#32601)
* Rebalance the max programs that a PDA can hold

* Give Caps PDA more programs too.

* Make the max programs a static 8

* I forgor sec and med

* CaseCase

* Empty commit to re-run checks

* The final change, I hope.
2024-10-31 15:53:38 +01:00
PJBot
872adb5c93 Automatic changelog update 2024-10-31 14:13:33 +00:00
SlamBamActionman
55861b4fcf [#28722 fix] Add notification for dependent wearables being dropped (#33078)
* add notification for dependent wearables being dropped

* fix dropped item popup redundancy
- did a check to see if any item was dropped, instead of making a notification for each item being dropped.

* change popup to client-only variant

* fix redundant messages, add plural locale string

* fix conventions, fix locale input to be more intuitive

---------

Co-authored-by: Justin <justinbrick1@gmail.com>
2024-10-31 15:12:26 +01:00
PJBot
a875bf3c64 Automatic changelog update 2024-10-31 13:27:53 +00:00
Jarmer123
4261698371 Add a spare bible to PietyVend (#32363)
Update chapel.yml
2024-10-31 14:26:45 +01:00
AJCM-git
f5e5646400 New workflow to apply the pr approved label (#28358)
* New workflow to apply the pr approved label

* Maybe fix permissions
2024-10-31 12:22:13 +01:00
PJBot
826bd1ab45 Automatic changelog update 2024-10-31 10:57:15 +00:00
Boaz1111
a3dc0eb75a Pill Bottles can only store pills now (#33074)
* no longer absurd

* Update Resources/Prototypes/Entities/Objects/Specific/chemistry.yml

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2024-10-31 11:56:07 +01:00
PJBot
fdd713a0f0 Automatic changelog update 2024-10-30 09:16:36 +00:00
Alzore
4b467685b2 Nukie med bundle now costs 24 tc and contains a unique defibrillator (#32720)
* a-few-injectors

* comment

* defib-ops-when
2024-10-30 10:15:30 +01:00
PJBot
827d00eb18 Automatic changelog update 2024-10-30 07:42:56 +00:00
Alzore
6834bc1fbd Add 3 bottle boxes to nanomed plus (#33018)
three bottle boxes in nanomed plus
2024-10-30 01:41:51 -06:00
PJBot
0f1e11c356 Automatic changelog update 2024-10-30 07:41:40 +00:00
Alzore
010638d0e9 Make the security belt contain more useful items by default (#32291)
* replace tear gas and flashbang with holobarrier and sec radio

* holobarrier-belt-fix
2024-10-30 01:40:33 -06:00
PJBot
d4db338ec6 Automatic changelog update 2024-10-30 07:39:27 +00:00
Alzore
0aa46f6a2a Give proto-kinetic crushers, glaives, and daggers better inhands. Update the crusher and glaive icons. (#32212)
* inhands

* better inhands

* indent
2024-10-30 01:38:19 -06:00
Preston Smith
03843734e4 Add no damage phrase and logic 2024-10-29 22:25:42 -05:00
Flareguy
3d70cdf23c Various Vaugely Connected Sprite Updates™: Encryption Keys, Station Map, Brig Timer (#32786)
* various resprites (encryption keys + signal screens + station map)

* brig timer update

* fixes n shit
2024-10-30 14:12:49 +11:00
Milon
440da3c640 fix chameleon projector bot whitelist (#33055)
fix
2024-10-30 02:03:06 +01:00
Preston Smith
907a9cef10 Fix: Make Plushie Damage Unexaminable (#33061)
Set hidden to true
2024-10-30 01:52:43 +01:00
Ed
16e23098db Merge pull request #520 from crystallpunk-14/ed-29-10-2024-upstream
Stable upstream sync
2024-10-29 15:15:14 +03:00
Ed
4e2af32ebe Merge pull request #522 from crystallpunk-14/ed-29-10-2024-guides-and-skills
Ed 29 10 2024 guides and skills
2024-10-29 14:55:50 +03:00
Ed
60f8c2c56f remove cvar! 2024-10-29 14:41:41 +03:00
Ed
df53f9a01f remove ship target point 2024-10-29 14:18:27 +03:00
Ed
2f57f11771 Cargo namespace 2024-10-29 12:18:35 +03:00
Ed
e6bbc3900f Delete CP14ExpeditionSystem 2024-10-29 12:15:16 +03:00
Ed
f5503352b9 add GuideHelp to alchemy equipment 2024-10-29 12:06:23 +03:00
Ed
817c53d98f Merge branch 'master' into ed-29-10-2024-upstream 2024-10-29 11:51:03 +03:00
Ed
cc80518d2f World minor changes (#519)
* x2 weather time

* remove alchemy test and battle royale maps, add simple island map

* island map + ocean parallax

* map floor occluder sys

* undercliff test

* update sand and ocean sprite

* Revert "undercliff test"

This reverts commit c484fe630a.

* more experiments

* Revert "more experiments"

This reverts commit a7f30fd608.

* Update default.yml

* Update debug.yml
2024-10-29 11:48:52 +03:00
Ed
ae3cbd6092 Merge remote-tracking branch 'upstream/stable' into ed-29-10-2024-upstream
# Conflicts:
#	Content.Server/Chat/Managers/ChatSanitizationManager.cs
#	Content.Server/Temperature/Systems/TemperatureSystem.cs
#	Content.Shared/Localizations/ContentLocalizationManager.cs
2024-10-29 11:16:56 +03:00
PJBot
a8c512c769 Automatic changelog update 2024-10-29 05:09:03 +00:00
metalgearsloth
94e686ca9c Fix separated game screen bumping (#33046)
I don't really understand why RecordedSplitContainer exists but removing it looks identical and fixes the panel bumping occasionally.
2024-10-29 16:07:57 +11:00
PJBot
a5a5840ee0 Automatic changelog update 2024-10-29 05:01:37 +00:00
deltanedas
63f8aba359 fix lava expeds (#33042)
Co-authored-by: deltanedas <@deltanedas:kde.org>
2024-10-29 00:00:28 -05:00
Moomoobeef
6236d1abb3 Updated an incorrect sprite in the smite menu (#33043)
changed the synth sprite used in the icon for the instrumentify smite out for the more accurate supersynth sprite
2024-10-28 23:35:48 +01:00
lzk
dc3a2f6d28 add StartDelay bool to actions (#33026)
* add StartDelay bool to actions

* forgot summary
2024-10-28 23:21:14 +01:00
joshepvodka
7ac2d9a8bd Adds beacon to core station's vox box (#33004)
* added vox beacon

* changed name to vox break room

* added vox box station beacon

* fixes messed up diff
2024-10-28 16:05:01 -06:00
joshepvodka
dbef6cbecc Adds beacon to oasis station's vox box (#33003)
* added vox beacon

* changed name to vox break room

* added vox box station beacon
2024-10-28 16:04:49 -06:00
joshepvodka
e900ad7742 Adds beacon to bagel station's vox box (#33002)
* added vox beacon

* changed name to vox break room

* added voxbox station beacon
2024-10-28 16:04:37 -06:00
joshepvodka
93315d4695 Adds beacon to box station's vox box (#33001)
* added vox beacon

* changed name to vox break room

* added vox box station beacon
2024-10-28 16:04:10 -06:00
joshepvodka
30017bc2d8 Adds beacon to cog station vox box (#33000)
* added vox beacon

* changed name to vox break room

* added vox box station beacon
2024-10-28 16:03:13 -06:00
PJBot
1ef5b2226a Automatic changelog update 2024-10-28 21:26:41 +00:00
August Sun
67332502c1 Extends the minimum round time for meteor swarm events (#32876)
* adjusted minimum timers in meteorswarms.yml

* Updated timer minimum from 20 to 15 minutes

* Reduced minimum timer to 10 minutes as a result of other meteor changes

---------

Co-authored-by: august-sun <45527070+august.sun@users.noreply.github.com>
2024-10-28 22:25:33 +01:00
PJBot
f86798792b Automatic changelog update 2024-10-28 18:01:10 +00:00
Stalen
0468c0f6bb Fix playtime formatting (#32974) 2024-10-28 19:00:37 +01:00
Stalen
24f79c3ecc Fix playtime formatting (#32974) 2024-10-28 19:00:00 +01:00
BramvanZijp
a4717556e1 Fix loneop spawnrate by reverting it to not use the shuttle event system. (#32942)
Fix loneop spawnrate by reverting it to not use the custom shuttle event system.
2024-10-28 18:52:21 +01:00
Theodore Lukin
ee445c4938 make ai speak robotically (#33025) 2024-10-28 18:36:35 +01:00
FluffMe
08d0077719 Fix TestSuicideByHeldItem and TestSuicideByHeldItemSpreadDamage (#33030) 2024-10-28 11:52:49 +01:00
Ed
b14c75390c biological weapon (#518) 2024-10-28 13:05:01 +03:00
Vasilis
7e526da521 Fix Bug With Uppercase Radio Keys (#32997) (master) (#33031)
Co-authored-by: Thomas <87614336+Aeshus@users.noreply.github.com>
2024-10-28 00:35:23 +01:00
Thomas
4fbe50ab28 Fix Bug With Uppercase Radio Keys (#32997) 2024-10-27 11:41:29 -07:00
Ed
3e43d0695f Some tile update + dayflin resprite (#517)
* foundtion update

* dirt from grass and seedbed craft rebalance

* crowbar, tile prying

* fix high fence

* yellow dayflin sprite update

* fix currency calculation bug

* Update sewing_table.yml
2024-10-27 21:37:15 +03:00
Ed
2850665e33 Tavern map update (#516)
* recursive currency calculation

* map update

* fix
2024-10-27 17:09:06 +03:00
Nim
c2404d6c0c Zombies climbing in and other things (#515)
* hehe

* tweak
2024-10-27 14:42:11 +03:00
PJBot
a1c36dcb79 Automatic changelog update 2024-10-27 04:27:02 +00:00
slarticodefast
4252fdffb9 fix pie throwing sound not playing (#33017) 2024-10-27 15:25:54 +11:00
github-actions[bot]
6486cdf183 Update Credits (#33016)
Co-authored-by: PJBot <pieterjan.briers+bot@gmail.com>
2024-10-27 15:24:45 +11:00
Ed
546e1d8fa1 Tomatoes + farming trading (#513)
* farm trading

* ruond prices

* add tomatoes sprites

* TOMATOES

* Update tomatoes.yml
2024-10-27 01:26:22 +03:00
Moomoobeef
9d6e6257bd Removed the name "Hujsak" (#32998)
removed hujsak
2024-10-26 12:29:40 -05:00
PJBot
427817e237 Automatic changelog update 2024-10-26 17:23:15 +00:00
Saphire Lattice
a95c8baf28 Add health analyzer unrevivability warning (#32636)
* Add health analyzer unrevivability warning

* Remove errornous comment
2024-10-26 19:22:08 +02:00
Ed
08a4c4340d Bank implementation (#512)
* get currency refactor

* bank work

* finish vault markers

* add bank doors

* map update

* loadouts

* Update CP14StationTravelingStoreShipTargetComponent.cs

* oopsie
2024-10-26 18:18:30 +03:00
PJBot
dcb615d678 Automatic changelog update 2024-10-26 04:01:56 +00:00
Moomoobeef
97ef4637fd bowls now make drinking sounds (#32819) 2024-10-25 23:00:49 -05:00
Ilya246
5a10bf0954 add atmosia to devmap (#32460)
change
2024-10-25 22:04:27 -05:00
PJBot
988b62074f Automatic changelog update 2024-10-26 02:17:52 +00:00
BramvanZijp
66432c5cd8 Fix loneop spawnrate by reverting it to not use the shuttle event system. (#32942)
Fix loneop spawnrate by reverting it to not use the custom shuttle event system.
2024-10-26 13:16:45 +11:00
PJBot
6998fa83a4 Automatic changelog update 2024-10-25 22:48:20 +00:00
slarticodefast
e3f442e790 Add flash reaction effect (#32377)
add flash reaction effect
2024-10-26 00:47:11 +02:00
Vasilis The Pikachu
9b0ae98836 Merge branch 'staging' of ssh://github.com/space-wizards/space-station-14 into staging 2024-10-25 21:11:20 +02:00
Jezithyr
ae1c5572fc Applying Fix from #32764 to staging 2024-10-25 21:09:56 +02:00
Vasilis The Pikachu
c28665c7d3 Merge branch 'staging' of ssh://github.com/space-wizards/space-station-14 into staging 2024-10-25 20:33:08 +02:00
chromiumboy
1307733c4b Make atmos alert computer colors private variables (#32992) 2024-10-24 23:34:52 -07:00
chromiumboy
5ff5a72a7c Fix multiplying colors of differing nullabilities (#32991) 2024-10-24 21:06:38 -07:00
Ed
c31f1ad130 Banker and commandant outfit + fix purchase bugs (#509)
* reaname QM to commandant, and merchant to banker

* Update game_presets.yml

* add bureaucracy crate

* fix buying

* bowler hats

* reorganize shirt folders

* cloak refactor, add commandant cloak

* Update battle_royale_temp.yml

* Update migration.yml
2024-10-25 00:23:35 +03:00
Ed
0f6dd2905d Bandit antag (#508)
* remove default antags

* simple bandit antag

* greetings audio and gear

* fixes

* Update AntagPreferenceTest.cs

* gamemodes

* Update game_presets.yml
2024-10-24 18:19:14 +03:00
Ed
f2b8713dc2 Clouds overlay fix + Syringe + Localization visuals (#506)
* fix cloud

* add syringes to alchemist

* remove barrel crafting

* Revert "remove barrel crafting"

This reverts commit d3c5a26136.

* add localization visuals
2024-10-24 14:11:15 +03:00
Ed
4e3c70a9d1 Iron doors (#505)
* iron doors

* shirt desc partial fix

* fix
2024-10-24 12:38:12 +03:00
Thomas
d4da9923ea Fix Emote Chat Sanitizer (#32940)
* Fix bug?

* Fix :)

* aaaa

* AAAA!!!

* comment

* Nicer code

* What's a pull requestWhat's a pull request?
2024-10-24 16:10:13 +11:00
PJBot
79c35e0a41 Automatic changelog update 2024-10-24 03:42:11 +00:00
hyphenationc
5a86b88f8f adds Meat Tag to FoodMeatSnake (#32965) 2024-10-23 22:41:03 -05:00
Spanky
92c49afcf2 Packed Update (#32971)
Packed map update, significantly changes arrivals, perma, AI core, and misc other QOL.
2024-10-23 16:19:35 -06:00
Ed
0652c3f0b4 Prazat jewelry stones (#504)
* marble floor

* fix

* bank wallpaper, marble floor resprite

* marble window

* rename whitebrick wall to marble wall, delete iron walls

* job desc fix

* jewelry

* Update jewelry.yml
2024-10-23 21:25:58 +03:00
Nim
1d43bad57f Dinosaur - Yumkaraptor (#492)
* dino

* sprite

* fix

* ForkFiltered

* Yumkaraptor

* Update meta.json

* Update meta.json

---------

Co-authored-by: Ed <96445749+TheShuEd@users.noreply.github.com>
2024-10-23 21:25:49 +03:00
FN
1ebe48978e Fix (#503) 2024-10-23 19:44:07 +03:00
PJBot
05a00515ed Automatic changelog update 2024-10-23 12:51:06 +00:00
chromiumboy
d2216835d8 Visualized regions for NavMapControl (#31910)
* Atmospheric alerts computer

* Moved components, restricted access to them

* Minor tweaks

* The screen will now turn off when the computer is not powered

* Bug fix

* Adjusted label

* Updated to latest master version

* Initial commit

* Tidy up

* Add firelocks to the nav map

* Add nav map regions to atmos alerts computer

* Added support for multiple region overlay sets per grid

* Fixed issue where console values were not updating correctly

* Fixing merge conflict

* Fixing merge conflicts

* Finished all major features

* Removed station map regions (to be re-added in a separate PR)

* Improved clarity

* Adjusted the color saturation of the regions displayed on the atmos alerts computer
2024-10-23 14:49:58 +02:00
PJBot
3b0d8e63a1 Automatic changelog update 2024-10-22 23:52:55 +00:00
UBlueberry
c1d5e6fc4d In-hand apprasial tool sprite (#32849)
* golden apprasial tool when

* thanks evan. very cool
2024-10-23 10:51:49 +11:00
PJBot
445cad4955 Automatic changelog update 2024-10-22 23:37:58 +00:00
BramvanZijp
ee8dedea9c Several Ninja Suit power cell upgrade fixes. (#32902)
* Fix several jank issues with space ninja cell upgrades.

* Rework the code to comply with maintainer request.

* Fix some naming convention & formatting errors.

* Change from a custom check to an item whitelist to avoid power cages from fitting.

* Make the EntityUid of GetCellScore non nullable.

* Remove a line from a previous solution to the above problem I forgot to remove.

* Fix the magic number issue.
2024-10-23 10:36:51 +11:00
nikthechampiongr
2b02545f97 Hotfix server config changes for playercap and Levi bunker (#32925)
Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2024-10-23 00:34:11 +02:00
PJBot
8f52a3448e Automatic changelog update 2024-10-22 17:02:25 +00:00
Southbridge
5d6ec18b2a Add Nuclear Cola centrifuge recipe (#32441)
* Initial implementation

* currently it crashes on load, don't know why, maybe changing the products will provide some insight

* I was overlooking part of the yaml formatting.
2024-10-22 19:01:18 +02:00
PJBot
5e637aa7bf Automatic changelog update 2024-10-22 13:50:46 +00:00
ScarKy0
9873efd514 Adding intellicard functionality. (#32347)
* init

* im so confused

* clean

* sprite update

* :|

* further attempts

* be blessed for it works

* Very prestigious pAI

* cleaning up

* Intellicard in RD locker

* PAIn't

* .Clear()n't

* .Clear()n't for real this time

* Cleaning up

* Whoopsie Daisy
2024-10-22 15:49:39 +02:00
PJBot
fc2bb79ef3 Automatic changelog update 2024-10-22 13:04:49 +00:00
ScarKy0
62f5a31c4a Syringe gun! (#32112)
* Init testing

* copyright

* oops

* Tracking the embed entity uid

* testing stuff for gradual injection

* work

* weh

* god save me

* bleh

* Yippee!

* Again

* Mini syringe ammo

* cleaning up

* mini syringes have a texture for fill amount

* -3 cool points :(

* hitboxes

* init cleanup

* much needed fixes

* Fixes
2024-10-23 00:03:42 +11:00
PJBot
94bbf7262c Automatic changelog update 2024-10-22 09:01:37 +00:00
Moomoobeef
5f1b848c08 Ammo boxes now have sprites for being parially filled! (#32930)
Initial Commit

Created new sprites for all the partial fills and modified the ammo-case ymls to accomodate the new stages
2024-10-22 11:00:28 +02:00
Spessmann
8142ac007f Cog sec maints updated (#32948)
updated sec maints
2024-10-22 00:30:31 -06:00
PJBot
7d91bcba3e Automatic changelog update 2024-10-22 05:40:44 +00:00
Southbridge
a227c3bb42 Box Station - Resolved #32771, #32949, and #32921 (#32950)
* Resolved #32771, #32949,  and #32921

* Resolved build issue
2024-10-21 23:39:34 -06:00
Ed
dacac22663 Marble (#502)
* marble floor

* fix

* bank wallpaper, marble floor resprite

* marble window

* rename whitebrick wall to marble wall, delete iron walls
2024-10-21 23:35:06 +03:00
PJBot
afd4c73bec Automatic changelog update 2024-10-21 12:45:49 +00:00
No Elka
8a5d9a3321 Let station AI use long range fax machines (#32929)
* Change stuff

* Gotcha boss
2024-10-21 14:44:43 +02:00
Ed
41d3ccab8b Locks update (#501)
* massive code refactor

* fix

* ftl fix

* rider pet pet

* hacking doAfter

* Update SharedCP14LockKeySystem.cs

* optimization

* Update migration.yml

* Update migration.yml
2024-10-21 14:20:05 +03:00
PJBot
04e422bd3f Automatic changelog update 2024-10-21 03:51:13 +00:00
MendaxxDev
b5687e4c73 prevent typing sound from playing when AI interacts with consoles (#32906)
* prevent typing sound from playing when AI interacts with consoles

* cleanup
2024-10-20 22:50:05 -05:00
PJBot
1d2ad3c335 Automatic changelog update 2024-10-21 03:44:23 +00:00
Stomf
0b8d6a1bd5 Mutetoxin buff (#32915)
* Fixes smile's ghost role to not need a raffle, very nice

* a simplier solution

* Mute toxin buffed to be more like glue

* buffed the toxin even more

* Update Resources/Prototypes/Entities/Mobs/NPCs/pets.yml

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2024-10-20 22:43:14 -05:00
Ed
8c06677ff4 Ru localization update (#500)
* Update entities.ftl

* fix

* Update entities.ftl
2024-10-20 23:27:33 +03:00
Ed
85463d380f Bank preparation (#499)
* TownSend condition

* personal objectives update

* add common objectives

* add common objectives

* tweaks

* quartermaster and merchant

* job spawner icons

* add merchants to tavern map
2024-10-20 21:20:16 +03:00
Pieter-Jan Briers
c221ef06b9 System to automatically restart server after certain uptime. (#32814) 2024-10-20 16:46:22 +02:00
nikthechampiongr
eec533cb77 Reduce player softcap for wizden servers and panic bunker wizden Levi (#32908)
* Reduce player softcap for wizden servers and panic bunker wizden Leviathan

* Fix bunker message

* Make sure it actually activates by default and make it turn off when an admin joins

* Update Resources/ConfigPresets/WizardsDen/wizardsDen.toml

The voices

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2024-10-20 12:13:51 +02:00
Spessmann
4c3fd3130d Cog small update (#32922)
based sigma
2024-10-19 22:17:10 -06:00
Jajsha
8cf5f93b9f Fix starting gear multiple storage fills and tests (#32718)
* fix things

* maybe fix everything
2024-10-20 14:43:17 +11:00
PJBot
628f51bb3d Automatic changelog update 2024-10-20 03:42:50 +00:00
Calecute
b7bd7c1d68 Blunt damage will do stamina damage on wide attacks (#32422)
Fix: blunt damage will now do stamina damage on wide attacks.
2024-10-20 14:41:44 +11:00
PJBot
088ec569fe Automatic changelog update 2024-10-20 02:47:38 +00:00
beck-thompson
69849bfb30 MMIs and positronic brains now talk like pAIs in plushies (#32914)
* commit

* spacing fix
2024-10-19 21:46:31 -05:00
github-actions[bot]
a62ddf2f99 Update Credits (#32916)
Co-authored-by: PJBot <pieterjan.briers+bot@gmail.com>
2024-10-20 02:38:14 +02:00
Pieter-Jan Briers
928877f0ef HOTFIX (stable) submodule update (#32900)
Update submodule

This fixes an important memory leak.
2024-10-19 18:05:48 +02:00
PJBot
a4750b3a9e Automatic changelog update 2024-10-19 15:32:52 +00:00
Łukasz Lindert
0a105213b4 Fix for low zombie blood (#32532)
fix for low zombie blood

Co-authored-by: Łuaksz <test@test.com>
2024-10-19 17:31:45 +02:00
PJBot
77a2907535 Automatic changelog update 2024-10-19 14:52:37 +00:00
Pieter-Jan Briers
73a82d5615 HOTFIX submodule update (#32897)
Update submodule

This fixes an important memory leak.
2024-10-19 16:51:29 +02:00
MendaxxDev
109e0bcf96 exponential backoff for admin logs db update (#32865)
* exponential backoff for admin logs db update

* Update Content.Server/Database/ServerDbBase.cs

---------

Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com>
2024-10-19 12:28:49 +02:00
PJBot
7e0e6416a7 Automatic changelog update 2024-10-19 02:41:23 +00:00
beck-thompson
c4233cc0a4 Scalpels now cut like knives (#32858)
* im so tired

* silly me

* yeah

* Update Resources/Prototypes/Entities/Objects/Specific/Medical/surgery.yml

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2024-10-18 21:40:17 -05:00
Ed
78e94b1623 Airship + Unittest (#496)
* wings

* update cargo shuttle

* update goblin sound

* add new unit test

* Update CP14EntityTest.cs

* Update CP14RitualTest.cs

* add buy and sell hints

* paper reading

* hardwork

* clean task

* body forkfiltered

* Update crystal.yml

* more fork flitered

* Update basic.yml

* Update wild.yml

* Update CP14EntityTest.cs

* realise pusharing

* pusharing alchemical vials

* coin disappear works

* Fix
2024-10-19 01:09:15 +03:00
PJBot
bf14b3cdaa Automatic changelog update 2024-10-18 19:21:12 +00:00
Pieter-Jan Briers
22938a9a56 Allow strip removing items if you're holding something (#32750)
You were already able to strip more items at once from somebody than you could hold, and they would drop to the floor. This matched the behavior in SS13.

Annoyingly, however, you were not allowed to *start* a stripping action if you're holding something. This just feels like an annoying paper cut, so this is no longer a thing.
2024-10-18 21:20:04 +02:00
IProduceWidgets
091e4c1cb0 Add Towels (#32235)
* Towels

* make smoler

* Huh, wonder why that didnt fail locally. The curse of CaPiTaLiZaTiOn

* Teal swapped for LightBlue for medical.

* Appease the linter?

* magic?

* mimery

* lefthandedness
2024-10-18 17:24:43 +02:00
Errant
b137b0caa2 HOTFIX Plushies no longer delete items when recycled (#32882)
Fix: Plushies no longer delete items when recycled (#32838)

fix

Co-authored-by: beck-thompson <107373427+beck-thompson@users.noreply.github.com>
2024-10-18 16:59:50 +02:00
PJBot
758c9e464e Automatic changelog update 2024-10-18 13:43:20 +00:00
Ilya246
fca95ef250 ghost locator maints loot (#32323)
* implement

* react to revenants/AI eye

* rare maints loot

* sprite

* description

* review

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>

* do changes

* stats

* networked

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2024-10-18 15:42:13 +02:00
Errant
cf1b3b0913 Merge spider clan charges can be armed again (#32866) to Master (#32881)
HOTFIX spider clan charges can be armed again (#32866)

* fix ninja bomb component check

* remove TryGetRole
2024-10-18 15:38:16 +02:00
Errant
e04e3a6250 HOTFIX spider clan charges can be armed again (#32866)
* fix ninja bomb component check

* remove TryGetRole
2024-10-18 15:17:18 +02:00
PJBot
304d1d5934 Automatic changelog update 2024-10-18 12:59:14 +00:00
beck-thompson
15290486dc Fix: Plushies no longer delete items when recycled (#32838)
fix
2024-10-18 14:58:07 +02:00
PJBot
7fc27a18f6 Automatic changelog update 2024-10-18 12:56:51 +00:00
Errant
23e4f81b30 Traitor activation fix for missing PDA (#30359)
* Implant the uplink if no PDA is found

* comments

* tidy up loose ends

* Whoops usually I start with the namespace, how did I forget it, shame shame

* Consistent data type for starting TC balance, misc changes

* Implant briefing, guidebook

* Update AutoTraitor, add uplink, codeword and briefing parameters to TraitorRuleComponent,  no pda for reinforcements

* engine 5c0ce43

* pass pda to AddUplink

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>

* nicer string handling

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>

* case typo 1

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>

* case typo 2

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>

* case typo 3

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>

* minor layout changes

* removed redundant implant check

* minor cleanup

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2024-10-18 14:55:43 +02:00
Ed
f14177bf86 Alchemist update (#497)
* rebalance alchemy resource

* lockers alternative

* map update
2024-10-18 14:56:01 +03:00
beck-thompson
338781c243 Fix: Radio jammer now doesn't show setting changes to other players (#32817)
* fix

* Other fix
2024-10-18 12:04:45 +02:00
PJBot
3da9e93b3d Automatic changelog update 2024-10-18 10:04:18 +00:00
JIPDawg
c606f7144c Set Salamander round restart time to 5 minutes (#32776)
Set round restart time to 5 minutes

Edited the .toml to allow people 5 minutes on centcom for extended RP.
2024-10-18 12:03:12 +02:00
PJBot
103c1dc221 Automatic changelog update 2024-10-18 09:44:12 +00:00
Theodore Lukin
c78b5ae83d Fix warden being and qm being not considered head for tot kill head objective (#32721)
* fixed warden being and qm being not considered head for traitor kill head objective

* fixed hypothetical warden traitor not getting disk objective

* change suggested by deltanedas

* cleanup

* cleanup

* fix

* changed as suggested

* removed a dot in the comment

* removed an empty line

* reformulation
2024-10-18 11:43:05 +02:00
Leon Friedrich
adb7aee831 Fix PlantHolder interactions & InteractionSystem assert (#32874) 2024-10-18 16:40:36 +11:00
PJBot
ab86745c4e Automatic changelog update 2024-10-18 03:29:36 +00:00
Plykiya
ea19a159f8 Remove flares and shotgun flares from lathe options (#32563)
Remove flares and shotgun flares from lathe recipes
2024-10-17 22:28:30 -05:00
PJBot
0bdc57dce8 Automatic changelog update 2024-10-18 03:09:39 +00:00
Catofquestionableethics
22749db3fe Added relevant tags to several cakes, and changed chem in Spacemans cake (#32830) 2024-10-17 22:08:32 -05:00
PJBot
aac3d73456 Automatic changelog update 2024-10-18 02:43:56 +00:00
Stomf
73b2b36243 Fixes smile's ghost role to not need a raffle, very nice (#32837)
* Fixes smile's ghost role to not need a raffle, very nice

* a simplier solution
2024-10-17 21:42:49 -05:00
Spessmann
81c654ddce Cog update (engi buff) (#32875)
krill issue
2024-10-17 19:46:06 -06:00
PJBot
ac120f7ce9 Automatic changelog update 2024-10-17 21:34:06 +00:00
slarticodefast
1518dc94a3 fix playtime stats window (#32856) 2024-10-17 23:32:59 +02:00
Scribbles0
48f8aac732 Fland AI core LV change (#32770)
small ai core lv change
2024-10-17 12:18:43 -06:00
PJBot
3b3a7a6a73 Automatic changelog update 2024-10-17 14:02:41 +00:00
Thomas
876c44cd66 Sanitize shorthand emotes throughought the whole message (#28645)
* Rename ChatSanitizationManager to ChatEmoteSanitizationManager

The prior name was kind of confusing as there's a emote one and
then now there's also chat expansion happening in the accent system,
so knowing which I actually need to edit is useful.

So, I just need to keep myself not confused.

* Rename smileyToEmote and remove punctuation duplicates

The name SmileyToEmote is just... Bad.

Plus, I needed to remove the punctuation duplicates as that would
break any kind of regex parsing that I tried.

* Switch to regex from checking end of string

I also changed from System.Globalization to ILocalizationManager.

Writing that regex was definitely an experience.

* Document regex and the manager

* Rename it back

* Simplify regex
2024-10-17 16:01:32 +02:00
PJBot
ea96e8a1cf Automatic changelog update 2024-10-17 11:07:15 +00:00
Vasilis
a739b21b04 Change the window titlebar to show the joined server (#32547)
* Change the window titlebar to show the joined server

Requires https://github.com/space-wizards/RobustToolbox/pull/5475/

* Totally not a webedit

* Can you tell what cvar I copied?

* And this kids is why we don't webedit

* Reviews

---------

Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com>
2024-10-17 13:06:07 +02:00
Ed
9a8d30022a Wallpaper update + paper folder (#495)
* paper folders

* Update CP14WorkbenchSystem.cs

* wallpaper update

* Update walls.yml

* remove cable sprites

* Update migration.yml
2024-10-17 13:08:36 +03:00
scrivoy
b3c61530bf Enhance Vending Machine UI: Adjust Minimum Height for better User Experience (#32851)
set FancyWindow MinHeight to 210
2024-10-16 23:34:31 -05:00
PJBot
ddec2fff70 Automatic changelog update 2024-10-17 04:01:58 +00:00
Callmore
7039f87bd4 Fix saving prefered quick store item locations (#32480)
this was just copypasted without any context wasn't it
2024-10-16 23:00:52 -05:00
PJBot
9889f8db9d Automatic changelog update 2024-10-17 03:42:13 +00:00
Zachary Higgs
79a23d3e0b Give AI a Sound Cue when an Antimov board is inserted (#32625)
* Subversion Board Insertion Audio Notification

Add Subversion flag and SubversionSound to SiliconLawProviderComponent

Add new Method (OnSubversionInserted)
to SiliconLawSystem to handle a Subversive
SiliconLawProviderComponent and play it's SubversionSound

Add Check for Subversive law provider to OnUpdaterInsert that
calls OnSubversionInserted if the SiliconLawProviderComponent is
Subversive

* Fix subversion Sound

- Change out Weh sound used to test that subversion sounds can be
changed by prototype for a a not yet present Antimov subversion sound

* Make it not just subversive

- Remove OnSubversionInserted and move the MindPlaySound in the
OnUpdaterInsert so long as LawUploadSound exists

- Modify SubversionSound into LawUploadSound

- Remove the Subversion flag

- Just use emagged_borg.ogg until the better one is made

* Remove errant spaces and a errant namespace

* CR Fixes - Add generic Lawboard insert cue

- Combine the If statements per /pull/32625#discussion_r1786926400
inside OnUpdaterInsert

- Remove the ViewVariables(VVAccess.ReadWrite) per
pull/32625#discussion_r1786924433

- Add Cryo_warning.ogg from TGStation, the sound utilized for Law Upload
cue, Attribution.

* CR Add a placeholder Antimov notification sound

- Add a new sound kitbashed from the cryo_sound used for uploading
and the emagged noise

* Add self referential source attribution

- also fix an errant space

* Add more bespoke Sound by ps3moira + attributions
2024-10-16 22:41:06 -05:00
PJBot
fae5c89ef7 Automatic changelog update 2024-10-17 03:22:10 +00:00
lzk
e891838d4b Fix holosignsystem popup (#32808) 2024-10-16 22:21:04 -05:00
PJBot
dccd00999c Automatic changelog update 2024-10-17 03:13:36 +00:00
deltanedas
18c8a803ff enable ejecting in biogenerator UI (#32854)
* enable ejecting in biogenerator UI

* allow inserting too

---------

Co-authored-by: deltanedas <@deltanedas:kde.org>
2024-10-16 22:12:30 -05:00
PJBot
8b74244ae9 Automatic changelog update 2024-10-17 01:58:49 +00:00
SlamBamActionman
1c49c638d8 Added new Microphone instrument style "Kweh" (#32848)
* Initial commit

* Attribution
2024-10-17 12:57:42 +11:00
scrivoy
0bee22e7e2 Fix Reagent Description for Bananium (#32810)
* changed bananium desc

* removed bananium name and desc ftl string
2024-10-16 20:45:36 -05:00
LittleNyanCat
c027919618 Several small SFX tweaks (#28897)
* Several small sfx tweaks

* fix small yml oopsie

* Redo the basin code to use events

* now uses an event for when the transfer is successful, not when there's just an attempt

* forgot to remove this

* Update Content.Server/Botany/Components/PlantHolderComponent.cs

Co-authored-by: Nemanja <98561806+EmoGarbage404@users.noreply.github.com>

* Update Content.Server/Botany/Systems/PlantHolderSystem.cs

Co-authored-by: Nemanja <98561806+EmoGarbage404@users.noreply.github.com>

* adds sound variations to shoes as well

* variations on honkbots and the H.O.N.K mech

* Update Content.Server/Botany/Systems/PlantHolderSystem.cs

* Update Content.Server/Botany/Systems/PlantHolderSystem.cs

* fix compile issue

* oops forgot to delete this

* cleanup

---------

Co-authored-by: Nemanja <98561806+EmoGarbage404@users.noreply.github.com>
Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2024-10-16 20:38:02 -05:00
PJBot
dec9ff69ec Automatic changelog update 2024-10-16 22:33:38 +00:00
IProduceWidgets
05ac74dfcd FTL coordinate disk command for admins: ftldisk (#28075)
* Add robo control comp, also de-reinforce a lot of walls.

* Revert "Add robo control comp, also de-reinforce a lot of walls."

This reverts commit b6be6b616aa9732b81e02bed76e3c9ae103cf7cb.

* FTLdiskburner command to make FTL disks.

* Elegant failure on mistyped ID.

* even more more eleganter failures.

* foo

* bar

* I have reached completion

* prevent id confusion

* I'm givin' her all she's got captain!

* a bit more hug boxing for safe destinations.

* comments for foo

* extra thoughts.

* cleanup

* continuen't

* Improve feedback strings

* reviewer QOL

* Reviewer QOL 2

* handle easy reviews

* Add comments to clarify reviews

* howdoicode to the rescue.

* ftldisk in hand

* ftl.ftl

* funny disk case

* loc

* unusing
2024-10-17 00:33:08 +02:00
deltanedas
cc17acbda8 fix grappling hooks getting bricked (#32738)
Co-authored-by: deltanedas <@deltanedas:kde.org>
2024-10-17 09:32:32 +11:00
PJBot
8aac87a2fe Automatic changelog update 2024-10-16 22:25:38 +00:00
IProduceWidgets
8cafd7261d Fix omega cursed smite code. (#32844)
* le fixo smotes

* CURSE OF BLINDNESS

* Guh
2024-10-17 09:24:31 +11:00
lzk
f387f66387 Fix uplink name (#32846) 2024-10-17 09:23:25 +11:00
Ed
ebca84d28f Minor fixes (#494)
* minor loadout tweaks

* wooden counter

* fix parry predicting

* tables crafting simplify
2024-10-16 17:32:41 +03:00
PJBot
2a22964e51 Automatic changelog update 2024-10-16 10:06:03 +00:00
Minemoder5000
17319c7fc0 New reptile sounds (#32064)
* Adds emotes to the Reptilian species: Tailthump, Hiss
Todo: Huff

* Adds emotes to the Reptilian species: Tailthump, Hiss
Todo: Huff

* Added ReptilianBodyEmotes to speech_emote_sounds.yml, yada yada yada

* added sound and changed volume

* fix thingies

* fixed bug with reptilians not being able to do default emotes

* lowered the volume of the hiss and huff

* reformat the yml

* Add sigh keywords to the huff

* Undo changes to BuildChecker.csproj

* Add icons to the emotes

* Remove sigh triggers from the huff emote since it breaks normal sighing.

* Remove the Huff and Hiss since i cant find good audio for it

* i forgor

* Changed attribution

* Credit Sarahon for the tailslap

---------

Co-authored-by: nicho <nicholasnewsom577@gmail.com>
2024-10-16 12:04:55 +02:00
PJBot
81a8646c4d Automatic changelog update 2024-10-16 03:58:37 +00:00
slarticodefast
87981f3886 Fix plant holder double solution transfer (#32813) 2024-10-15 20:57:30 -07:00
Ed
5b4a7f6edc Ed 15 10 2024 entity hided (#493)
* test

* hide ss14 ents

* Update basic_cloak.yml
2024-10-15 16:53:54 +03:00
Ed
a83d6f0d87 locale (#491)
* locale

* delete ss14 items generated locales
2024-10-15 16:21:07 +03:00
Ed
5d89812abc Merge pull request #490 from crystallpunk-14/ed-15-10-2024-upstream
Ed 15 10 2024 upstream
2024-10-15 15:41:02 +03:00
Ed
31d39b36ae Update CP14ExpeditionSystem.cs 2024-10-15 15:28:16 +03:00
Ed
dc47bb2283 Merge remote-tracking branch 'upstream/stable' into ed-15-10-2024-upstream
# Conflicts:
#	Content.Server/Station/Systems/StationSpawningSystem.cs
2024-10-15 15:25:44 +03:00
Ed
d259191d3d Cargo system (#487)
* simple storeship arriving

* pupu

* ship cycling

* buy positions prototypes

* i hate UI

* PriceControl

* second tab ui

* baloon! pallets!

* update shop in town

* setup billboard timer

* split to sell and buy categories

* renaming gaming

* actually selling

* fix infinity selling

* improve timer

* move description too rigt part UI

* bar selling

* iron cabinet

* purge currency categories

* remove town balance, add money box

* special proposal, FTLImmune anchor

* fix UI

* remove tests buying

* Update CP14StoreWindow.xaml.cs

* currency converter

* currency clean up

* Update CP14CargoSystem.cs

* clean up part 2

* rider petpet

* coins audio

* coin improvment

* Update coins.yml

* translate

* more coins roundstart

* Update wallet.yml

* Update wallet.yml

* generate coin problem fix

* refactor proto reading

* fixes

* huh

* shuttle logshit fix, add to tavern map

* Update CP14StationTravelingStoreShipTargetComponent.cs
2024-10-15 15:22:06 +03:00
PJBot
d871313899 Automatic changelog update 2024-10-15 08:29:36 +00:00
K-Dynamic
7e2c6ea3ea Adds nitrogen to engi tank dispenser (#32565)
nitrogen to engi tank dispenser
2024-10-15 10:28:28 +02:00
PJBot
7532d6f26e Automatic changelog update 2024-10-14 22:00:15 +00:00
Ada
a7741fe9e2 Arcade Prize Additions (#32309)
* rearranged existing arcade rewards for clarity and added more

* removed tesla toy

* removed plushie throngler

* removed singularity toy, readded tesla toy

* removed tesla toy again :(

* Readded accidentally removed PlushieRainbowLizard
2024-10-14 23:59:07 +02:00
mubururu_
6654e00411 organ sprite touch-ups (#32762)
* does work?

* fix

* shrunk organs to normal size of small

* made brains and liver look better

* made stomach slightly less bright

* unique sprite for diona lungs + inhands

* unique sprite for vox lungs + inhands
2024-10-14 13:32:32 +02:00
scrivoy
8c17624896 Marathon: Add EVA Helmets to Perma and add Disposal Unit front of Atmos (#32799)
add: EVA helmets to perma, disposals bin atmos
2024-10-14 05:23:41 -06:00
Errant
519a6b2474 HOTFIX: Fix tech anomaly nexttimer (#32805) (#32807)
Fix tech anomaly nexttimer (#32805)

Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
2024-10-14 11:41:31 +02:00
Ed
4425b77c90 Return RU lang 2024-10-14 11:39:12 +03:00
PJBot
f5ab4f5cb6 Automatic changelog update 2024-10-14 07:07:25 +00:00
metalgearsloth
573f490896 Fix tech anomaly nexttimer (#32805) 2024-10-14 18:06:18 +11:00
ScarKy0
5be82d2a7f Cyborg module action icons (#32505)
* Init

* added jani and medical

* + sci and service modules

* + syndi modules

* fixing up

* geiger counter stuff
2024-10-14 18:05:40 +11:00
PJBot
a7339a5bf9 Automatic changelog update 2024-10-14 05:56:54 +00:00
Kevin Matuschzik
906913563e Fixed portal artifacts targeting the Ai (#32677)
* Added checks to not target AIs and people in containers

* made the change to use IsEntityInContainer. Much Better!

* returned old Mindquerry and removed wrong use of admin logger

* guard statment

* removed unnecessery refs and fixed position swap

* Minor change

---------

Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com>
2024-10-14 16:55:46 +11:00
Джексон Миссиссиппи
9b71757c07 cleanup melee (#32486)
* it removes warns ig

* Quick fix

---------

Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com>
2024-10-14 16:40:59 +11:00
Leon Friedrich
97f6097dad Add IsQueuedForDeletion checks to interaction system (#32526) 2024-10-14 15:13:35 +11:00
Leon Friedrich
30ada26315 Remove inaccurate admin log when moving a held item (#32525)
Remove inaccurate admin log when switching held item
2024-10-14 15:05:40 +11:00
PJBot
dd6433c44b Automatic changelog update 2024-10-14 03:55:38 +00:00
metalgearsloth
71c9894903 Jobreq format (#32806)
* Format job requirements as hours and minutes

* Use TimeSpan.ToString for playtime instead of custom method

* wehflicts

---------

Co-authored-by: jmcb <joelsgp@protonmail.com>
2024-10-14 14:54:31 +11:00
OnyxTheBrave
d79b34de9a Fix Industrial Reagent Grinder sprite (#32758)
Updated to reflect the RecyclerVisualLayers no longer having a forward reverse or off visual effect.
2024-10-14 14:53:56 +11:00
PJBot
59490d8259 Automatic changelog update 2024-10-14 03:31:38 +00:00
Pieter-Jan Briers
4a5178a538 Fix role ban loading bugs (#32725)
This code was a mess. Now it's less of a mess and user UserDbDataManager now.

Fixes the following bugs:

* If you connect to a server, restart your client, connect again in the same round, you role bans would not be visible in the client.
* If you role ban somebody who is not connected to the server, then they connect within the round, they will only have the recently-applied ban.

Likely fixes #24781, #27282
2024-10-14 14:30:31 +11:00
lzk
9ceb971535 ping emisse for shuttle changes (#32768) 2024-10-14 14:06:32 +11:00
Leon Friedrich
2d60a4684c Hide role entities in the spawn menu (#32798) 2024-10-14 14:05:49 +11:00
Leon Friedrich
4e0018697f Add role prototype validation tests (#32801)
* Add role prototype validation test

* Rejig GetPrototypesWithComponent

* More tests n stuff
2024-10-14 14:05:25 +11:00
PJBot
870eb439f3 Automatic changelog update 2024-10-13 22:52:54 +00:00
K-Dynamic
0bec8af824 rainbow lizard plushie (#32564)
* rainbow weh

* plushie loot table

* arcade loot pool

* remove from plushie crate

* fuk
2024-10-14 00:51:46 +02:00
TeaMaki
076c692878 Warden Hat Texture Change (#32253) 2024-10-14 00:36:56 +02:00
Pieter-Jan Briers
796764d755 Fix some rounds failing to end due to mind roles (#32792) (#32793)
* Fix some rounds failing to end due to mind roles

Fixes #32791

This is caused by ShowRoundEndScoreboard running into a bug trying to display antags: some player is showing up as antag with MindIsAntagonist(), but has no antag roles listed in MindGetAllRoleInfo().

This was caused by one of the roles of the player having the Antag boolean set, but having no AntagPrototype set.

The responsible mind role appeared to be MindRoleSubvertedSilicon which is missing a set for the SubvertedSilicon antag prototype.

I also added resilience to the round-end code to make it so that an exception showing the scoreboard (and sending the Discord message) would not cause the round end logic to completely abort from an exception.

I am planning to add an integration test to cover this bug (no prototype in mind roles), but I'll leave that for not-the-immediate-hotfix.

* At least one maintainer approved this tiny PR without reading it, not naming names.
2024-10-13 23:00:40 +02:00
Pieter-Jan Briers
c7b0d5a27c Fix some rounds failing to end due to mind roles (#32792)
* Fix some rounds failing to end due to mind roles

Fixes #32791

This is caused by ShowRoundEndScoreboard running into a bug trying to display antags: some player is showing up as antag with MindIsAntagonist(), but has no antag roles listed in MindGetAllRoleInfo().

This was caused by one of the roles of the player having the Antag boolean set, but having no AntagPrototype set.

The responsible mind role appeared to be MindRoleSubvertedSilicon which is missing a set for the SubvertedSilicon antag prototype.

I also added resilience to the round-end code to make it so that an exception showing the scoreboard (and sending the Discord message) would not cause the round end logic to completely abort from an exception.

I am planning to add an integration test to cover this bug (no prototype in mind roles), but I'll leave that for not-the-immediate-hotfix.

* At least one maintainer approved this tiny PR without reading it, not naming names.
2024-10-13 22:55:15 +02:00
github-actions[bot]
56ba3fdf09 Update Credits (#32774)
Co-authored-by: PJBot <pieterjan.briers+bot@gmail.com>
2024-10-13 18:06:40 +02:00
Errant
e5ad32fe93 Fix random test fail in DeleteAllThenGhost (#32753)
It's simple. We kill the heisentest
2024-10-13 17:31:38 +02:00
Errant
30effd5ccd Fix random test fail in DeleteAllThenGhost (#32753)
It's simple. We kill the heisentest
2024-10-13 17:28:26 +02:00
Ed
648505dc15 Switch to ENG language 2024-10-13 15:02:57 +03:00
PJBot
0e3f3536ff Automatic changelog update 2024-10-13 11:26:56 +00:00
SlamBamActionman
9bf7c44585 Add poster about the SSD term (#32736)
* moff

* Attribution
2024-10-13 22:25:49 +11:00
PJBot
7af913ad13 Automatic changelog update 2024-10-13 08:23:11 +00:00
SkaldetSkaeg
8093a49943 Block emotes for sleeping (#32779)
* Block emotes

* typing issue

* Update Content.Shared/Bed/Sleep/SleepingSystem.cs

Co-authored-by: MilenVolf <63782763+MilenVolf@users.noreply.github.com>

---------

Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
Co-authored-by: MilenVolf <63782763+MilenVolf@users.noreply.github.com>
2024-10-13 19:22:05 +11:00
PJBot
52937a2e64 Automatic changelog update 2024-10-13 06:39:39 +00:00
BramvanZijp
2e3db0e2c5 Increase AI Playtime Requirements (#32007)
* Increase AI Playtime Requirement

* Change silicon supervisor message

* Slightly lower AI time requirement and change borg supervisor to be just its laws for now.

* Leave the supervisor to another PR

* Comply with maintainer request

* Comply with another maintainer request because they forgor.
2024-10-13 17:38:32 +11:00
Jezithyr
af72f2e17c Applying Fix from #32764 to staging 2024-10-12 22:21:44 -07:00
John
7c6ff536eb Fixing Thief Beacon Role Check Logic (to use new mindrole system) (#32764) 2024-10-12 22:20:03 -07:00
PJBot
1f6bab7957 Automatic changelog update 2024-10-13 04:57:00 +00:00
Golinth
561d55e7a4 Firebot Tweaks (#32629)
Removed random sentience and some other minor tweaks
2024-10-13 15:55:51 +11:00
Theodore Lukin
7f42c0a531 Qm external access (#32631)
gave qm external access
2024-10-13 15:55:12 +11:00
Nim
40959cf422 fix resp (#488) 2024-10-13 02:09:41 +03:00
KingFroozy
214a20da8e Changes to CE's suits (#29850)
* Changes to ce sprites

* Adjustments

* More changes i guess

* Love life, get skirt

* Bitlessdark

* fkingforcepush

* upd №?
2024-10-12 21:13:39 +02:00
lzk
b999752e88 Update omega evac (#32748)
- rename to evac omega
- add screens
2024-10-12 13:03:55 -06:00
Scribbles0
561297495f Marathon AI tweaks (#32756)
* camera tweaks

* add intercoms
2024-10-12 13:03:31 -06:00
slarticodefast
4704309b4e Fix SpawnAndDeleteAllEntitiesInTheSameSpot heisentest (#32330)
What happened was that the new tech anomaly randomly triggered a signal sink on the portable generator, which is currently broken and throws an error if the that sink is activated.

The resolve needed logMissing = false because it does not expect the ActiveGeneratorRevvingComponent to exist.
2024-10-12 11:54:48 -07:00
slarticodefast
d6d8c55d57 Don't error on missing component in ChangeHeat (#32451) 2024-10-12 11:52:05 -07:00
Nim
a6fc5e6ace Rabbit (#486)
* rabbit

* meat

* гладить

* тоже гладить
2024-10-12 20:01:13 +03:00
eoineoineoin
70b7747fdd Make APC UI work correctly with multiple users (#32465)
* Make APC UI work correctly with multiple users

* Check access only on client, when constructing UI

* Do TODO (Thanks, Robust 236.1)

---------

Co-authored-by: Eoin Mcloughlin <helloworld@eoinrul.es>
2024-10-12 19:21:43 +11:00
Errant
a9ecf805e5 Fix random test fail in DeleteAllThenGhost (#32753)
It's simple. We kill the heisentest
2024-10-11 21:17:01 +02:00
Saphire Lattice
729de28844 Fix Centcom cloning scanner (#32746)
* Fix Centcom cloning scanner

* Fix uid conflict
2024-10-11 03:00:54 -06:00
lzk
7a4cefa8ac update fland (#32747)
add captain id card
2024-10-11 02:35:46 -06:00
scrivoy
e98af125dc Fixed capitalization in Interface description (#32739) 2024-10-10 21:40:41 +02:00
PJBot
bc64676747 Automatic changelog update 2024-10-10 14:36:43 +00:00
nikthechampiongr
e7b7e2270d Fix bounties(and potentially other things) running out of ids (#32700)
* Make NameIdentifier Ids get refreshed after round restarts

Before this commit the existing values would just get shuffled.
This means that eventually the server would run out of ids to give to
new entities for different groups. As a result everything would get id 0

* Comply with what seemingly is the convention for sawmills

* Make it impossible to insert a bounty with a duplicate id

* Reduce duplication

* Remove unused sawmill

* Fix rustbrain and skill issue

* Aaaa

* Apply suggestions from code review

---------

Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com>
2024-10-10 16:35:35 +02:00
PJBot
740288eb96 Automatic changelog update 2024-10-10 08:50:05 +00:00
Errant
93c7bdc134 Mind Role Entities (#31318)
* Mind Role Entities wip

* headrev count fix

* silicon stuff, cleanup

* exclusive antag config, cleanup

* jobroleadd overwerite

* logging stuff

* MindHasRole cleanup, admin log stuff

* last second cleanup

* ocd

* minor cleanup

* remove createdTime datafield

* now actually using the event replacement I made for role time tracking

* weh
2024-10-10 10:48:56 +02:00
Pieter-Jan Briers
3e078ab3e0 Fix error log when recycling something with small material counts. (#32723)
* Fix error log when recycling something with small material counts.

MaterialStorageSystem.SpawnMultipleFromMaterial now doesn't call StackSystem.SpawnMultiple if it tries to spawn zero. This happens because the recycler calls SpawnMultipleFromMaterial for everything recycled, even if the amount it has stored is < the amount for one sheet.

* Update Content.Server/Materials/MaterialStorageSystem.cs

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2024-10-10 03:29:26 +02:00
PJBot
ac16a05fef Automatic changelog update 2024-10-09 18:02:38 +00:00
beck-thompson
327466a6e2 Plushies can now have pAIs stuffed into them (v2)! (#30805)
* First commit

* I forgot silly me

* Actually added comments

* spellin

* fixes

* more blacklists

* Minor fixes

* Speech Verb also changes now

* Simple name stuff

* Other fixes

* remove one line of whitespace

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2024-10-09 20:01:32 +02:00
chavonadelal
6d99597349 Job title localization (#32338)
* Job title localization

* Correcting fields
2024-10-09 17:05:36 +02:00
Ed
844b4d4616 underworld (#485) 2024-10-09 16:19:38 +03:00
PJBot
fc1c709d44 Automatic changelog update 2024-10-09 12:45:45 +00:00
beck-thompson
5a41cc81b3 Decrease price of radio jammer from 4 tc -> 3 tc (#32472)
* First commit

* increase price by one tc
2024-10-09 14:44:38 +02:00
lzk
d450b613d6 fix typo (#32712) 2024-10-09 14:41:07 +02:00
PJBot
b657aba2e1 Automatic changelog update 2024-10-09 11:56:57 +00:00
SlamBamActionman
ddaa0e83c6 Add admin log for codewords (#32531)
* initial commit

* Delta review
2024-10-09 13:55:48 +02:00
Pieter-Jan Briers
1dbbf315c7 Update submodule to v236.1.0 (#32704) 2024-10-09 13:41:03 +02:00
Ed
b9df2a495a some blacksmith bandage (#483)
* anvil

* iron and copper ore walls + procedural cave update

* vladimirs rocks

* furnace

* Revert "furnace"

This reverts commit f378e4fb85.

* Revert "vladimirs rocks"

This reverts commit b2c6a193fc.

* Revert "iron and copper ore walls + procedural cave update"

This reverts commit dc6d70b10e.

* Revert "anvil"

This reverts commit 3ab1649992.

* Reapply "anvil"

This reverts commit 91c226d18d.

* huh

* fuck anvil

* Revert "fuck anvil"

This reverts commit 3c3a87c25e.

* Revert "huh"

This reverts commit 7fb44b4908.

* fix comment

* Reapply "iron and copper ore walls + procedural cave update"

This reverts commit 891c3ba0aa.

* Reapply "vladimirs rocks"

This reverts commit 4f2eaef6c1.

* Reapply "furnace"

This reverts commit 9d7e042ddf.

* Update anvil.yml

* Update workbenchs.yml

* Update workbenchs.yml

* Update workbenchs.yml

* Update workbenchs.yml

* Update workbenchs.yml

* Update workbenchs.yml

* Update workbenchs.yml

* Update workbenchs.yml

* Update workbenchs.yml

* EVIL anvil

* Update workbenchs.yml
2024-10-09 13:40:06 +03:00
PJBot
357e998cbb Automatic changelog update 2024-10-08 23:30:49 +00:00
beck-thompson
384ff7e8f6 Add pumpkin pie! (#32623)
* first commit

* Licence fix

* rosysyntax licence change (permission granted!)

* simplify

* Better wording
2024-10-09 10:29:41 +11:00
Nim
1ca7456363 AI Factions (#481)
* factions

* CP14

* Update ai_factions.yml

---------

Co-authored-by: Ed <96445749+TheShuEd@users.noreply.github.com>
2024-10-08 22:52:46 +03:00
PJBot
dc2899c274 Automatic changelog update 2024-10-08 18:30:44 +00:00
K-Dynamic
6f9b4f4226 CHIMP and APE particle speed increase (#32690)
* swap omega and delta particle colours

* remove upgrade doafter

* explicit syndicate chip description

* Syndicate CHIMP stealth

* fast projectile speed

* 10 to 12 shots

* buff heat dmg

* upgrade chip mentions omega particle

* Revert "remove upgrade doafter"

This reverts commit 8a321980b7a384daca06215656494e0c116e7333.

* Revert "explicit syndicate chip description"

This reverts commit c803c773739a61fc5b3a6cb90810622a6d5846c9.

* Revert "Syndicate CHIMP stealth"

This reverts commit 698a108580892addabf8d51494a72e1ee651b8e6.

* Revert "10 to 12 shots"

This reverts commit 858ac0392be0549eb0a288648413d1020cabae1a.

* Revert "swap omega and delta particle colours"

This reverts commit 4c000b2f110a5d35f317cb61cb5b03ea32841ad5.

* Revert "buff heat dmg"

This reverts commit 02a8690dafbd41631b098e51ef9afba5b6ee6ac4.
2024-10-08 20:29:37 +02:00
PJBot
28f576dae8 Automatic changelog update 2024-10-08 09:54:56 +00:00
Plykiya
1366f6b405 Replace the Librarian's round-start D10 with a D20 (#32648)
Replace D10 with a D20
2024-10-08 11:53:50 +02:00
averystarbit
0e0887bd49 Added proper capitalisation for supervisors when entering the game (#32683)
changed punctuation for jobs, added proper capitalization and comma usa
2024-10-08 11:52:46 +02:00
PJBot
1f04117edf Automatic changelog update 2024-10-08 09:52:31 +00:00
shamp
922dd0bce6 Fix cloth dupe (#32685)
Update curtains.yml
2024-10-08 11:51:23 +02:00
lzk
33042b00d0 Fix cryo locale again (#32654)
* Fix cryo locale again

* yeep
2024-10-08 11:50:54 +02:00
Ubaser
38fd54a1bf Update Core (#32665)
* add

* remove invalids

* fix

* yes
2024-10-07 19:59:06 -06:00
PJBot
34df781668 Automatic changelog update 2024-10-07 22:43:51 +00:00
Saphire Lattice
f22f9e39c5 Change minibomb to be explosion resistant and start timer on damage (#32429)
* Make minibomb explosion resistant and trigger timer on damage

* Tune damage behaviour and threshold for minibomb
2024-10-08 00:42:42 +02:00
Pieter-Jan Briers
eecbfb63a0 Move client dumpentities command to "DEBUG" (#32687) 2024-10-07 19:19:42 +02:00
Scribbles0
6b10e00da4 oasis update (#32679)
sec apcs and ai core wiring
2024-10-06 19:24:44 -06:00
PJBot
a6c468b697 Automatic changelog update 2024-10-06 13:34:08 +00:00
Golinth
46a2eb545e Fully Revert Clown Waddling (#32652)
Fully revert Clown Waddling (revival of #29161)

A sad day, see #29156 for discussion
2024-10-06 15:33:02 +02:00
PJBot
35fc1b4037 Automatic changelog update 2024-10-06 12:49:56 +00:00
Арт
867efe8b5b Add flowers to loadout (#32097)
* Add_Poppy&Lily

* Add_FlowerWreath

* Add_Headflowers

Sprites, meta, prototype

* Id_Changes

* Changes

* Update_Sprite

* Desc_Change

* Scale_Change

* Sprite_Scaling
2024-10-06 14:48:49 +02:00
Spessmann
126c1786de Cog update fix (#32657)
* fixes for cog

* ok fixed that
2024-10-05 20:30:10 -06:00
PJBot
386e59b462 Automatic changelog update 2024-10-05 18:45:55 +00:00
slarticodefast
eb4e422cb0 fix light bulbs not fitting into the trash bag (#32452)
fix trash
2024-10-05 12:44:47 -06:00
Spessmann
2287df13bd Cog engineering DIY update (#32651)
engineers forced to do work, sobbing
2024-10-05 12:08:39 -06:00
The Canned One
b0c5023fda Fix comments in StartIonStormedComponent.cs 2024-10-05 16:48:45 +02:00
The Canned One
b35d2902d4 Fixed cyborgs with the StartIonStormedComponent (which is just the Derelict Cyborg right now) not showing up as 'antag' in the admin player overlay. 2024-10-05 15:09:36 +02:00
TakoDragon
db64ad9c4d Marathon Removed double walls and a wrong cable (#32603)
removed double walls and cable fucks
2024-10-04 17:18:46 -06:00
NotSoDamn
644d7ab682 BaseAdvancedPen migration (#32638)
* Update migration.yml

* Update Resources/migration.yml

Co-authored-by: lzk <124214523+lzk228@users.noreply.github.com>

---------

Co-authored-by: lzk <124214523+lzk228@users.noreply.github.com>
2024-10-04 23:13:30 +03:00
PJBot
ec4acdebbf Automatic changelog update 2024-10-04 09:35:55 +00:00
Saphire Lattice
94c8018ff3 Change the syndicate charge to start a timer on signal (#32423)
* Change the syndicate charge to start a timer on signal

* Actually add the component in question

* Add default link for TimerStart signal
2024-10-04 11:34:48 +02:00
PJBot
fbb6f17add Automatic changelog update 2024-10-04 08:44:51 +00:00
Saphire Lattice
88f060d51a Make the explosions throw the container/item they originated from (#32428)
Extra fun if it's something that can trigger multiple times
2024-10-04 10:43:45 +02:00
The Canned One
d7ed5b4386 remove whitespace. 2024-10-04 08:35:16 +02:00
The Canned One
581a4d14fc minor Derelict Cyborg code changes. 2024-10-04 08:31:55 +02:00
PJBot
8b65186bfa Automatic changelog update 2024-10-04 05:40:57 +00:00
SoulFN
9e054c1f9d Give dragon pull ability (#32568) 2024-10-04 15:39:50 +10:00
PJBot
423d394af1 Automatic changelog update 2024-10-04 02:56:43 +00:00
Plykiya
295e63193c Two additional checks to prevent FTLing stations (#32558)
Add two additional checks to prevent FTLing
2024-10-04 12:55:36 +10:00
Jezithyr
570c166517 Disable Auto-Publish (#32627)
disable auto publish
2024-10-04 03:16:32 +02:00
PJBot
7edd1c6d52 Automatic changelog update 2024-10-04 01:14:09 +00:00
Southbridge
c0d67429ab Box Station - Connected Recycler, rerouted power for Singlo Substation, added law boards to AI upload room (#32608)
* Fixed #32443 and #30375

* Fixed duplicate ID issue, and added lawboards to resolve #32581

* Removed Overlord board and added Crewsimov

* Removed invalid UserInterface component
2024-10-03 19:12:59 -06:00
The Canned One
d863e3c5ca Derelict Cyborg no longer appears on the endround 'Game Information' screen. It still appears in the Player Manifest. 2024-10-03 14:03:14 +02:00
The Canned One
00aaffbc00 removed whitespace 2024-10-03 13:51:38 +02:00
The Canned One
3aff20173c Removed 1 line of whitespace. 2024-10-03 13:26:29 +02:00
The Canned One
9dc90a258e Changed DerelictCyborgSpawn event's frequency from 6 to 5, even though i didn't want to. 2024-10-03 12:43:51 +02:00
The Canned One
4b633fde9c Fixed IonStorms sometimes affecting the laws of the current AI and future Cyborgs and AI's, including those in subsequent rounds. 2024-10-03 12:32:50 +02:00
The Canned One
963009a440 Changes IonStorm related code with no gameplay changes. 2024-10-03 11:34:24 +02:00
The Canned One
08de5aeae1 Derelict cyborg minor yaml changes. 2024-10-01 18:07:41 +02:00
The Canned One
d0114d9738 added a code summary 2024-10-01 14:04:33 +02:00
The Canned One
7169788e16 changed very minor stuff with no gameplay alterations. 2024-10-01 11:23:19 +02:00
The Canned One
36390b23d1 Small changes - hopefully good ones. 2024-10-01 11:11:58 +02:00
The Canned One
c6fe5682c2 changed almost nothing 2024-10-01 10:57:51 +02:00
The Canned One
1abc60b995 moved a bit of IonStorm code elsewhere 2024-10-01 10:42:52 +02:00
The Canned One
834b6ebaaa Cleaned up a bit of the Derelict Cyborg code. 2024-10-01 10:02:25 +02:00
Golden Can
eaa6017ada Update Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml
Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2024-09-30 18:32:47 +02:00
Golden Can
e75a71d7d3 Update Content.Server/Silicons/Laws/StartIonStormedSystem.cs
Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2024-09-30 18:31:36 +02:00
Golden Can
0cc1f32b3b Update Resources/Textures/Mobs/Silicon/chassis.rsi/meta.json
Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2024-09-30 18:28:39 +02:00
Golden Can
a4e7ad008c Update Resources/Prototypes/Entities/Mobs/Player/silicon.yml
Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2024-09-30 18:24:38 +02:00
Golden Can
eb1168a831 Update Resources/Prototypes/Entities/Mobs/Player/silicon.yml
Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2024-09-30 18:24:28 +02:00
The Canned One
4c8a235e61 Minor alterations to the Derelict Cyborg and its ghostrole description 2024-09-30 12:12:10 +02:00
The Canned One
f226f28e52 Derelict Cyborgs are now very likely to be affected by ion storms. 2024-09-30 10:03:21 +02:00
The Canned One
bad25e3397 Split part of IonStormRule into IonStormSystem. Added StartIonStormed which also uses IonStormSystem. Added StartIonStormedComponent. Changed stuff related to the Derelict Cyborg. Derelict Cyborg now spawns with a randomized lawset. 2024-09-29 19:01:59 +02:00
The Canned One
964ef33fc7 Fixed accidental removal of something from a meta.json file. 2024-09-28 10:50:33 +02:00
The Canned One
c3fa1b45d0 Added Derelict Cyborg midround event. 2024-09-28 10:18:40 +02:00
The Canned One
602541b548 minor changes to the Derelict Cyborg 2024-09-27 20:11:04 +02:00
The Canned One
30018a3ab1 added Derelict Cyborgs with basic functionality. 2024-09-27 18:10:51 +02:00
TheWaffleJesus
daf674e37b changed capacitor yaml for substation and memory cell 2024-09-08 10:01:08 +01:00
TheWaffleJesus
1f22dfda7b changed from tag to material and added icon for capacitor 2024-09-08 09:34:08 +01:00
4778 changed files with 994638 additions and 231184 deletions

39
.github/CODEOWNERS vendored
View File

@@ -2,49 +2,30 @@
# Sorting by path instead of by who added it one day :(
# this isn't how codeowners rules work pls read the first comment instead of trying to force a sorting order
/Resources/ConfigPresets/WizardsDen/ @Chief-Engineer
# Moony's Gargantuan List Of Things She Cares About, or MGLOTSCA for short.
# You need to add your name to these entries, not make a new one, if you care about them.
/Content.*/Toolshed/ @moonheart08
**/Toolshed/** @moonheart08
*Command.cs @moonheart08
/Content.*/Administration/ @moonheart08 @DrSmugleaf @Chief-Engineer
/Content.*/Station/ @moonheart08
/Content.*/Maps/ @moonheart08
/Content.*/GameTicking/ @moonheart08 @EmoGarbage404
/Resources/ServerInfo/ @moonheart08 @Chief-Engineer
/Resources/ServerInfo/Guidebook/ @moonheart08 @EmoGarbage404
/Resources/ServerInfo/Guidebook/ServerRules/ @Chief-Engineer
/Resources/engineCommandPerms.yml @moonheart08 @Chief-Engineer
/Resources/clientCommandPerms.yml @moonheart08 @Chief-Engineer
/Resources/ConfigPresets/WizardsDen/ @nikthechampiongr @crazybrain23
/Content.*/Administration/ @DrSmugleaf @nikthechampiongr @crazybrain23
/Resources/ServerInfo/ @nikthechampiongr @crazybrain23
/Resources/ServerInfo/Guidebook/ServerRules/ @nikthechampiongr @crazybrain23
/Resources/Prototypes/Maps/ @Emisse
/Resources/Prototypes/Maps/** @Emisse
/Resources/Prototypes/Body/ @DrSmugleaf # suffering
/Resources/Prototypes/Entities/Mobs/Player/ @DrSmugleaf
/Resources/Prototypes/Entities/Mobs/Species/ @DrSmugleaf
/Resources/Prototypes/Guidebook/rules.yml @Chief-Engineer
/Resources/Prototypes/Guidebook/rules.yml @nikthechampiongr @crazybrain23
/Content.*/Body/ @DrSmugleaf
/Content.YAMLLinter @DrSmugleaf
/Content.Shared/Damage/ @DrSmugleaf
/Content.*/Anomaly/ @EmoGarbage404 @TheShuEd
/Content.*/Lathe/ @EmoGarbage404
/Content.*/Materials/ @EmoGarbage404
/Content.*/Mech/ @EmoGarbage404
/Content.*/Research/ @EmoGarbage404
/Content.*/Stack/ @EmoGarbage404
/Content.*/Xenoarchaeology/ @EmoGarbage404
/Content.*/Zombies/ @EmoGarbage404
/Resources/Prototypes/Entities/Structures/Specific/anomalies.yml @EmoGarbage404 @TheShuEd
/Resources/Prototypes/Research/ @EmoGarbage404
/Content.*/Anomaly/ @TheShuEd
/Resources/Prototypes/Entities/Structures/Specific/anomalies.yml @TheShuEd
/Content.*/Forensics/ @ficcialfaint
# SKREEEE
/Content.*.Database/ @PJB3005 @DrSmugleaf
/Content.Shared.Database/Log*.cs @PJB3005 @DrSmugleaf @Chief-Engineer
/Content.Shared.Database/Log*.cs @PJB3005 @DrSmugleaf @nikthechampiongr @crazybrain23
/Pow3r/ @PJB3005
/Content.Server/Power/Pow3r/ @PJB3005
@@ -52,7 +33,7 @@
/Content.*/Atmos/ @Partmedia
/Content.*/Botany/ @Partmedia
#Jezi
# Jezi
/Content.*/Medical @Jezithyr
/Content.*/Body @Jezithyr

6
.github/labeler.yml vendored
View File

@@ -16,7 +16,11 @@
- changed-files:
- any-glob-to-any-file: '**/*.swsl'
"No C#":
"Changes: Audio":
- changed-files:
- any-glob-to-any-file: '**/*.ogg'
"Changes: No C#":
- changed-files:
# Equiv to any-glob-to-all as long as this has one matcher. If ALL changed files are not C# files, then apply label.
- all-globs-to-all-files: "!**/*.cs"

View File

@@ -2,11 +2,11 @@
on:
push:
branches: [ master, staging, trying ]
branches: [ master, staging, stable ]
merge_group:
pull_request:
types: [ opened, reopened, synchronize, ready_for_review ]
branches: [ master ]
branches: [ master, staging, stable ]
jobs:
build:

View File

@@ -2,11 +2,11 @@ name: Build & Test Debug
on:
push:
branches: [ master, staging, trying ]
branches: [ master, staging, stable ]
merge_group:
pull_request:
types: [ opened, reopened, synchronize, ready_for_review ]
branches: [ master ]
branches: [ master, staging, stable ]
jobs:
build:

View File

@@ -16,6 +16,6 @@ jobs:
- name: Check for Merge Conflicts
uses: eps1lon/actions-label-merge-conflict@v3.0.0
with:
dirtyLabel: "Merge Conflict"
dirtyLabel: "S: Merge Conflict"
repoToken: "${{ secrets.GITHUB_TOKEN }}"
commentOnDirty: "This pull request has conflicts, please resolve those before we can evaluate the pull request."

View File

@@ -10,7 +10,7 @@ jobs:
steps:
- uses: actions-ecosystem/action-add-labels@v1
with:
labels: "Status: Needs Review"
labels: "S: Needs Review"
- uses: actions-ecosystem/action-remove-labels@v1
with:
labels: "Status: Awaiting Changes"
labels: "S: Awaiting Changes"

23
.github/workflows/labeler-review.yml vendored Normal file
View File

@@ -0,0 +1,23 @@
name: "Labels: Approved"
on:
pull_request_review:
types: [submitted]
jobs:
add_label:
# Change the repository name after you've made sure the team name is correct for your fork!
if: ${{ (github.repository == 'space-wizards/space-station-14') && (github.event.review.state == 'APPROVED') }}
permissions:
contents: read
pull-requests: write
runs-on: ubuntu-latest
steps:
- uses: tspascoal/get-user-teams-membership@v3
id: checkUserMember
with:
username: ${{ github.actor }}
team: "content-maintainers,junior-maintainers"
GITHUB_TOKEN: ${{ secrets.LABELER_PAT }}
- if: ${{ steps.checkUserMember.outputs.isTeamMember == 'true' }}
uses: actions-ecosystem/action-add-labels@v1
with:
labels: "S: Approved"

20
.github/workflows/labeler-size.yml vendored Normal file
View File

@@ -0,0 +1,20 @@
name: "Labels: Size"
on: pull_request_target
jobs:
size-label:
runs-on: ubuntu-latest
steps:
- name: size-label
uses: "pascalgn/size-label-action@v0.5.5"
env:
GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
with:
# Custom size configuration
sizes: >
{
"0": "XS",
"10": "S",
"100": "M",
"1000": "L",
"5000": "XL"
}

16
.github/workflows/labeler-stable.yml vendored Normal file
View File

@@ -0,0 +1,16 @@
name: "Labels: Branch stable"
on:
pull_request_target:
types:
- opened
branches:
- 'stable'
jobs:
add_label:
runs-on: ubuntu-latest
steps:
- uses: actions-ecosystem/action-add-labels@v1
with:
labels: "Branch: Stable"

16
.github/workflows/labeler-staging.yml vendored Normal file
View File

@@ -0,0 +1,16 @@
name: "Labels: Branch staging"
on:
pull_request_target:
types:
- opened
branches:
- 'staging'
jobs:
add_label:
runs-on: ubuntu-latest
steps:
- uses: actions-ecosystem/action-add-labels@v1
with:
labels: "Branch: Staging"

View File

@@ -3,6 +3,8 @@
on:
issues:
types: [opened]
pull_request_target:
types: [opened]
jobs:
add_label:
@@ -11,4 +13,4 @@ jobs:
- uses: actions-ecosystem/action-add-labels@v1
if: join(github.event.issue.labels) == ''
with:
labels: "Status: Untriaged"
labels: "S: Untriaged"

View File

@@ -5,8 +5,8 @@ concurrency:
on:
workflow_dispatch:
schedule:
- cron: '0 10 * * *'
# schedule:
# - cron: '0 10 * * *'
jobs:
build:

View File

@@ -2,7 +2,7 @@
on:
push:
branches: [ master, staging, trying ]
branches: [ master, staging, stable ]
paths:
- '**.cs'
- '**.csproj'
@@ -16,7 +16,7 @@ on:
merge_group:
pull_request:
types: [ opened, reopened, synchronize, ready_for_review ]
branches: [ master ]
branches: [ master, staging, stable ]
paths:
- '**.cs'
- '**.csproj'

View File

@@ -1,7 +1,7 @@
name: RGA schema validator
on:
push:
branches: [ master, staging, trying ]
branches: [ master, staging, stable ]
merge_group:
pull_request:
types: [ opened, reopened, synchronize, ready_for_review ]

View File

@@ -2,7 +2,7 @@ name: RSI Validator
on:
push:
branches: [ staging, trying ]
branches: [ master, staging, stable ]
merge_group:
pull_request:
paths:

View File

@@ -1,7 +1,7 @@
name: Map file schema validator
on:
push:
branches: [ master, staging, trying ]
branches: [ master, staging, stable ]
merge_group:
pull_request:
types: [ opened, reopened, synchronize, ready_for_review ]

View File

@@ -2,7 +2,7 @@ name: YAML Linter
on:
push:
branches: [ master, staging, trying ]
branches: [ master, staging, stable ]
merge_group:
pull_request:
types: [ opened, reopened, synchronize, ready_for_review ]

View File

@@ -258,13 +258,13 @@ namespace Content.Client.Actions
public void LinkAllActions(ActionsComponent? actions = null)
{
if (_playerManager.LocalEntity is not { } user ||
!Resolve(user, ref actions, false))
{
return;
}
if (_playerManager.LocalEntity is not { } user ||
!Resolve(user, ref actions, false))
{
return;
}
LinkActions?.Invoke(actions);
LinkActions?.Invoke(actions);
}
public override void Shutdown()

View File

@@ -22,11 +22,11 @@ namespace Content.Client.Administration.UI.BanPanel;
[GenerateTypedNameReferences]
public sealed partial class BanPanel : DefaultWindow
{
public event Action<string?, (IPAddress, int)?, bool, byte[]?, bool, uint, string, NoteSeverity, string[]?, bool>? BanSubmitted;
public event Action<string?, (IPAddress, int)?, bool, ImmutableTypedHwid?, bool, uint, string, NoteSeverity, string[]?, bool>? BanSubmitted;
public event Action<string>? PlayerChanged;
private string? PlayerUsername { get; set; }
private (IPAddress, int)? IpAddress { get; set; }
private byte[]? Hwid { get; set; }
private ImmutableTypedHwid? Hwid { get; set; }
private double TimeEntered { get; set; }
private uint Multiplier { get; set; }
private bool HasBanFlag { get; set; }
@@ -371,9 +371,8 @@ public sealed partial class BanPanel : DefaultWindow
private void OnHwidChanged()
{
var hwidString = HwidLine.Text;
var length = 3 * (hwidString.Length / 4) - hwidString.TakeLast(2).Count(c => c == '=');
Hwid = new byte[length];
if (HwidCheckbox.Pressed && !(string.IsNullOrEmpty(hwidString) && LastConnCheckbox.Pressed) && !Convert.TryFromBase64String(hwidString, Hwid, out _))
ImmutableTypedHwid? hwid = null;
if (HwidCheckbox.Pressed && !(string.IsNullOrEmpty(hwidString) && LastConnCheckbox.Pressed) && !ImmutableTypedHwid.TryParse(hwidString, out hwid))
{
ErrorLevel |= ErrorLevelEnum.Hwid;
HwidLine.ModulateSelfOverride = Color.Red;
@@ -390,7 +389,7 @@ public sealed partial class BanPanel : DefaultWindow
Hwid = null;
return;
}
Hwid = Convert.FromHexString(hwidString);
Hwid = hwid;
}
private void OnTypeChanged()

View File

@@ -8,6 +8,7 @@
<Label Name="ExpiryLabel" Text="{Loc admin-note-editor-expiry-label}" Visible="False" />
<HistoryLineEdit Name="ExpiryLineEdit" PlaceHolder="{Loc admin-note-editor-expiry-placeholder}"
Visible="False" HorizontalExpand="True" />
<OptionButton Name="ExpiryLengthDropdown" Visible="False" />
</BoxContainer>
<BoxContainer Orientation="Horizontal" HorizontalExpand="True">
<OptionButton Name="TypeOption" HorizontalAlignment="Center" />

View File

@@ -17,6 +17,17 @@ public sealed partial class NoteEdit : FancyWindow
[Dependency] private readonly IGameTiming _gameTiming = default!;
[Dependency] private readonly IClientConsoleHost _console = default!;
private enum Multipliers
{
Minutes,
Hours,
Days,
Weeks,
Months,
Years,
Centuries
}
public event Action<int, NoteType, string, NoteSeverity?, bool, DateTime?>? SubmitPressed;
public NoteEdit(SharedAdminNote? note, string playerName, bool canCreate, bool canEdit)
@@ -31,6 +42,20 @@ public sealed partial class NoteEdit : FancyWindow
ResetSubmitButton();
// It's weird to use minutes as the IDs, but it works and makes sense kind of :)
ExpiryLengthDropdown.AddItem(Loc.GetString("admin-note-button-minutes"), (int) Multipliers.Minutes);
ExpiryLengthDropdown.AddItem(Loc.GetString("admin-note-button-hours"), (int) Multipliers.Hours);
ExpiryLengthDropdown.AddItem(Loc.GetString("admin-note-button-days"), (int) Multipliers.Days);
ExpiryLengthDropdown.AddItem(Loc.GetString("admin-note-button-weeks"), (int) Multipliers.Weeks);
ExpiryLengthDropdown.AddItem(Loc.GetString("admin-note-button-months"), (int) Multipliers.Months);
ExpiryLengthDropdown.AddItem(Loc.GetString("admin-note-button-years"), (int) Multipliers.Years);
ExpiryLengthDropdown.AddItem(Loc.GetString("admin-note-button-centuries"), (int) Multipliers.Centuries);
ExpiryLengthDropdown.OnItemSelected += OnLengthChanged;
ExpiryLengthDropdown.SelectId((int) Multipliers.Weeks);
ExpiryLineEdit.OnTextChanged += OnTextChanged;
TypeOption.AddItem(Loc.GetString("admin-note-editor-type-note"), (int) NoteType.Note);
TypeOption.AddItem(Loc.GetString("admin-note-editor-type-message"), (int) NoteType.Message);
TypeOption.AddItem(Loc.GetString("admin-note-editor-type-watchlist"), (int) NoteType.Watchlist);
@@ -134,6 +159,7 @@ public sealed partial class NoteEdit : FancyWindow
SecretCheckBox.Pressed = false;
SeverityOption.Disabled = false;
PermanentCheckBox.Pressed = true;
SubmitButton.Disabled = true;
UpdatePermanentCheckboxFields();
break;
case (int) NoteType.Message: // Message: these are shown to the player when they log on
@@ -172,8 +198,9 @@ public sealed partial class NoteEdit : FancyWindow
{
ExpiryLabel.Visible = !PermanentCheckBox.Pressed;
ExpiryLineEdit.Visible = !PermanentCheckBox.Pressed;
ExpiryLengthDropdown.Visible = !PermanentCheckBox.Pressed;
ExpiryLineEdit.Text = !PermanentCheckBox.Pressed ? DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") : string.Empty;
ExpiryLineEdit.Text = !PermanentCheckBox.Pressed ? 1.ToString() : string.Empty;
}
private void OnSecretPressed(BaseButton.ButtonEventArgs _)
@@ -187,6 +214,16 @@ public sealed partial class NoteEdit : FancyWindow
SeverityOption.SelectId(args.Id);
}
private void OnLengthChanged(OptionButton.ItemSelectedEventArgs args)
{
ExpiryLengthDropdown.SelectId(args.Id);
}
private void OnTextChanged(HistoryLineEdit.LineEditEventArgs args)
{
ParseExpiryTime();
}
private void OnSubmitButtonPressed(BaseButton.ButtonEventArgs args)
{
if (!ParseExpiryTime())
@@ -263,13 +300,24 @@ public sealed partial class NoteEdit : FancyWindow
return true;
}
if (string.IsNullOrWhiteSpace(ExpiryLineEdit.Text) || !DateTime.TryParse(ExpiryLineEdit.Text, out var result) || DateTime.UtcNow > result)
if (string.IsNullOrWhiteSpace(ExpiryLineEdit.Text) || !uint.TryParse(ExpiryLineEdit.Text, out var inputInt))
{
ExpiryLineEdit.ModulateSelfOverride = Color.Red;
return false;
}
ExpiryTime = result.ToUniversalTime();
var mult = ExpiryLengthDropdown.SelectedId switch
{
(int) Multipliers.Minutes => TimeSpan.FromMinutes(1).TotalMinutes,
(int) Multipliers.Hours => TimeSpan.FromHours(1).TotalMinutes,
(int) Multipliers.Days => TimeSpan.FromDays(1).TotalMinutes,
(int) Multipliers.Weeks => TimeSpan.FromDays(7).TotalMinutes,
(int) Multipliers.Months => TimeSpan.FromDays(30).TotalMinutes,
(int) Multipliers.Years => TimeSpan.FromDays(365).TotalMinutes,
(int) Multipliers.Centuries => TimeSpan.FromDays(36525).TotalMinutes,
_ => throw new ArgumentOutOfRangeException(nameof(ExpiryLengthDropdown.SelectedId), "Multiplier out of range :(")
};
ExpiryTime = DateTime.UtcNow.AddMinutes(inputInt * mult);
ExpiryLineEdit.ModulateSelfOverride = null;
return true;
}

View File

@@ -2,6 +2,7 @@ using System.Linq;
using Content.Shared.Alert;
using JetBrains.Annotations;
using Robust.Client.Player;
using Robust.Shared.GameStates;
using Robust.Shared.Player;
using Robust.Shared.Prototypes;
@@ -24,8 +25,7 @@ public sealed class ClientAlertsSystem : AlertsSystem
SubscribeLocalEvent<AlertsComponent, LocalPlayerAttachedEvent>(OnPlayerAttached);
SubscribeLocalEvent<AlertsComponent, LocalPlayerDetachedEvent>(OnPlayerDetached);
SubscribeLocalEvent<AlertsComponent, AfterAutoHandleStateEvent>(ClientAlertsHandleState);
SubscribeLocalEvent<AlertsComponent, ComponentHandleState>(OnHandleState);
}
protected override void LoadPrototypes()
{
@@ -47,6 +47,16 @@ public sealed class ClientAlertsSystem : AlertsSystem
}
}
private void OnHandleState(Entity<AlertsComponent> alerts, ref ComponentHandleState args)
{
if (args.Current is not AlertComponentState cast)
return;
alerts.Comp.Alerts = cast.Alerts;
UpdateHud(alerts);
}
protected override void AfterShowAlert(Entity<AlertsComponent> alerts)
{
UpdateHud(alerts);
@@ -57,11 +67,6 @@ public sealed class ClientAlertsSystem : AlertsSystem
UpdateHud(alerts);
}
private void ClientAlertsHandleState(Entity<AlertsComponent> alerts, ref AfterAutoHandleStateEvent args)
{
UpdateHud(alerts);
}
private void UpdateHud(Entity<AlertsComponent> entity)
{
if (_playerManager.LocalEntity == entity.Owner)

View File

@@ -1,8 +1,4 @@
using Robust.Shared.GameObjects;
namespace Content.Client.Atmos.Components;
[RegisterComponent]
public sealed partial class PipeColorVisualsComponent : Component
{
}
public sealed partial class PipeColorVisualsComponent : Component;

View File

@@ -1,6 +1,5 @@
<BoxContainer xmlns="https://spacestation14.io"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:s="clr-namespace:Content.Client.Stylesheets"
xmlns:gfx="clr-namespace:Robust.Client.Graphics;assembly=Robust.Client"
xmlns:controls="clr-namespace:Content.Client.UserInterface.Controls"
Orientation="Vertical" HorizontalExpand ="True" Margin="0 0 0 3">
@@ -62,7 +61,7 @@
</PanelContainer>
</BoxContainer>
<!-- If the alarm is inactive, this is label is diplayed instead -->
<!-- If the alarm is inactive, this is label is displayed instead -->
<Label Name="NoDataLabel" Text="{Loc 'atmos-alerts-window-no-data-available'}" HorizontalAlignment="Center" Margin="0 15" FontColorOverride="#a9a9a9" ReservesSpace="False" Visible="False"></Label>
<!-- Silencing progress bar -->

View File

@@ -31,19 +31,6 @@ public sealed partial class AtmosAlarmEntryContainer : BoxContainer
[AtmosAlarmType.Danger] = "atmos-alerts-window-danger-state",
};
private Dictionary<Gas, string> _gasShorthands = new Dictionary<Gas, string>()
{
[Gas.Ammonia] = "NH₃",
[Gas.CarbonDioxide] = "CO₂",
[Gas.Frezon] = "F",
[Gas.Nitrogen] = "N₂",
[Gas.NitrousOxide] = "N₂O",
[Gas.Oxygen] = "O₂",
[Gas.Plasma] = "P",
[Gas.Tritium] = "T",
[Gas.WaterVapor] = "H₂O",
};
public AtmosAlarmEntryContainer(NetEntity uid, EntityCoordinates? coordinates)
{
RobustXamlLoader.Load(this);
@@ -136,8 +123,9 @@ public sealed partial class AtmosAlarmEntryContainer : BoxContainer
GasGridContainer.RemoveAllChildren();
var gasData = focusData.Value.GasData.Where(g => g.Key != Gas.Oxygen);
var keyValuePairs = gasData.ToList();
if (gasData.Count() == 0)
if (keyValuePairs.Count == 0)
{
// No other gases
var gasLabel = new Label()
@@ -158,17 +146,14 @@ public sealed partial class AtmosAlarmEntryContainer : BoxContainer
else
{
// Add an entry for each gas
foreach ((var gas, (var mol, var percent, var alert)) in gasData)
foreach ((var gas, (var mol, var percent, var alert)) in keyValuePairs)
{
var gasPercent = (FixedPoint2)0f;
gasPercent = percent * 100f;
if (!_gasShorthands.TryGetValue(gas, out var gasShorthand))
gasShorthand = "X";
FixedPoint2 gasPercent = percent * 100f;
var gasAbbreviation = Atmospherics.GasAbbreviations.GetValueOrDefault(gas, Loc.GetString("gas-unknown-abbreviation"));
var gasLabel = new Label()
{
Text = Loc.GetString("atmos-alerts-window-other-gases-value", ("shorthand", gasShorthand), ("value", gasPercent)),
Text = Loc.GetString("atmos-alerts-window-other-gases-value", ("shorthand", gasAbbreviation), ("value", gasPercent)),
FontOverride = normalFont,
FontColorOverride = GetAlarmStateColor(alert),
HorizontalAlignment = HAlignment.Center,

View File

@@ -14,8 +14,6 @@ public sealed class AtmosAlertsComputerBoundUserInterface : BoundUserInterface
_menu = new AtmosAlertsComputerWindow(this, Owner);
_menu.OpenCentered();
_menu.OnClose += Close;
EntMan.TryGetComponent<TransformComponent>(Owner, out var xform);
}
protected override void UpdateState(BoundUserInterfaceState state)
@@ -24,9 +22,6 @@ public sealed class AtmosAlertsComputerBoundUserInterface : BoundUserInterface
var castState = (AtmosAlertsComputerBoundInterfaceState) state;
if (castState == null)
return;
EntMan.TryGetComponent<TransformComponent>(Owner, out var xform);
_menu?.UpdateUI(xform?.Coordinates, castState.AirAlarms, castState.FireAlarms, castState.FocusData);
}

View File

@@ -1,7 +1,6 @@
<controls:FancyWindow xmlns="https://spacestation14.io"
xmlns:ui="clr-namespace:Content.Client.Pinpointer.UI"
xmlns:controls="clr-namespace:Content.Client.UserInterface.Controls"
xmlns:gfx="clr-namespace:Robust.Client.Graphics;assembly=Robust.Client"
Title="{Loc 'atmos-alerts-window-title'}"
Resizable="False"
SetSize="1120 750"

View File

@@ -23,6 +23,7 @@ public sealed partial class AtmosAlertsComputerWindow : FancyWindow
{
private readonly IEntityManager _entManager;
private readonly SpriteSystem _spriteSystem;
private readonly SharedNavMapSystem _navMapSystem;
private EntityUid? _owner;
private NetEntity? _trackedEntity;
@@ -42,19 +43,32 @@ public sealed partial class AtmosAlertsComputerWindow : FancyWindow
private const float SilencingDuration = 2.5f;
// Colors
private Color _wallColor = new Color(64, 64, 64);
private Color _tileColor = new Color(28, 28, 28);
private Color _monitorBlipColor = Color.Cyan;
private Color _untrackedEntColor = Color.DimGray;
private Color _regionBaseColor = new Color(154, 154, 154);
private Color _inactiveColor = StyleNano.DisabledFore;
private Color _statusTextColor = StyleNano.GoodGreenFore;
private Color _goodColor = Color.LimeGreen;
private Color _warningColor = new Color(255, 182, 72);
private Color _dangerColor = new Color(255, 67, 67);
public AtmosAlertsComputerWindow(AtmosAlertsComputerBoundUserInterface userInterface, EntityUid? owner)
{
RobustXamlLoader.Load(this);
_entManager = IoCManager.Resolve<IEntityManager>();
_spriteSystem = _entManager.System<SpriteSystem>();
_navMapSystem = _entManager.System<SharedNavMapSystem>();
// Pass the owner to nav map
_owner = owner;
NavMap.Owner = _owner;
// Set nav map colors
NavMap.WallColor = new Color(64, 64, 64);
NavMap.TileColor = Color.DimGray * NavMap.WallColor;
NavMap.WallColor = _wallColor;
NavMap.TileColor = _tileColor;
// Set nav map grid uid
var stationName = Loc.GetString("atmos-alerts-window-unknown-location");
@@ -179,6 +193,9 @@ public sealed partial class AtmosAlertsComputerWindow : FancyWindow
// Add tracked entities to the nav map
foreach (var device in console.AtmosDevices)
{
if (!device.NetEntity.Valid)
continue;
if (!NavMap.Visible)
continue;
@@ -209,7 +226,7 @@ public sealed partial class AtmosAlertsComputerWindow : FancyWindow
if (consoleCoords != null && consoleUid != null)
{
var texture = _spriteSystem.Frame0(new SpriteSpecifier.Texture(new ResPath("/Textures/Interface/NavMap/beveled_circle.png")));
var blip = new NavMapBlip(consoleCoords.Value, texture, Color.Cyan, true, false);
var blip = new NavMapBlip(consoleCoords.Value, texture, _monitorBlipColor, true, false);
NavMap.TrackedEntities[consoleUid.Value] = blip;
}
@@ -258,7 +275,7 @@ public sealed partial class AtmosAlertsComputerWindow : FancyWindow
VerticalAlignment = VAlignment.Center,
};
label.SetMarkup(Loc.GetString("atmos-alerts-window-no-active-alerts", ("color", StyleNano.GoodGreenFore.ToHexNoAlpha())));
label.SetMarkup(Loc.GetString("atmos-alerts-window-no-active-alerts", ("color", _statusTextColor.ToHexNoAlpha())));
AlertsTable.AddChild(label);
}
@@ -270,6 +287,34 @@ public sealed partial class AtmosAlertsComputerWindow : FancyWindow
else
MasterTabContainer.SetTabTitle(0, Loc.GetString("atmos-alerts-window-tab-alerts", ("value", activeAlarmCount)));
// Update sensor regions
NavMap.RegionOverlays.Clear();
var prioritizedRegionOverlays = new Dictionary<NavMapRegionOverlay, int>();
if (_owner != null &&
_entManager.TryGetComponent<TransformComponent>(_owner, out var xform) &&
_entManager.TryGetComponent<NavMapComponent>(xform.GridUid, out var navMap))
{
var regionOverlays = _navMapSystem.GetNavMapRegionOverlays(_owner.Value, navMap, AtmosAlertsComputerUiKey.Key);
foreach (var (regionOwner, regionOverlay) in regionOverlays)
{
var alarmState = GetAlarmState(regionOwner);
if (!TryGetSensorRegionColor(regionOwner, alarmState, out var regionColor))
continue;
regionOverlay.Color = regionColor;
var priority = (_trackedEntity == regionOwner) ? 999 : (int)alarmState;
prioritizedRegionOverlays.Add(regionOverlay, priority);
}
// Sort overlays according to their priority
var sortedOverlays = prioritizedRegionOverlays.OrderBy(x => x.Value).Select(x => x.Key).ToList();
NavMap.RegionOverlays = sortedOverlays;
}
// Auto-scroll re-enable
if (_autoScrollAwaitsUpdate)
{
@@ -290,7 +335,7 @@ public sealed partial class AtmosAlertsComputerWindow : FancyWindow
var coords = _entManager.GetCoordinates(metaData.NetCoordinates);
if (_trackedEntity != null && _trackedEntity != metaData.NetEntity)
color *= Color.DimGray;
color *= _untrackedEntColor;
var selectable = true;
var blip = new NavMapBlip(coords, _spriteSystem.Frame0(texture), color, _trackedEntity == metaData.NetEntity, selectable);
@@ -298,6 +343,24 @@ public sealed partial class AtmosAlertsComputerWindow : FancyWindow
NavMap.TrackedEntities[metaData.NetEntity] = blip;
}
private bool TryGetSensorRegionColor(NetEntity regionOwner, AtmosAlarmType alarmState, out Color color)
{
color = Color.White;
var blip = GetBlipTexture(alarmState);
if (blip == null)
return false;
// Color the region based on alarm state and entity tracking
color = blip.Value.Item2 * _regionBaseColor;
if (_trackedEntity != null && _trackedEntity != regionOwner)
color *= _untrackedEntColor;
return true;
}
private void UpdateUIEntry(AtmosAlertsComputerEntry entry, int index, Control table, AtmosAlertsComputerComponent console, AtmosAlertsFocusDeviceData? focusData = null)
{
// Make new UI entry if required
@@ -534,13 +597,13 @@ public sealed partial class AtmosAlertsComputerWindow : FancyWindow
switch (alarmState)
{
case AtmosAlarmType.Invalid:
output = (new SpriteSpecifier.Texture(new ResPath("/Textures/Interface/NavMap/beveled_circle.png")), StyleNano.DisabledFore); break;
output = (new SpriteSpecifier.Texture(new ResPath("/Textures/Interface/NavMap/beveled_circle.png")), _inactiveColor); break;
case AtmosAlarmType.Normal:
output = (new SpriteSpecifier.Texture(new ResPath("/Textures/Interface/NavMap/beveled_circle.png")), Color.LimeGreen); break;
output = (new SpriteSpecifier.Texture(new ResPath("/Textures/Interface/NavMap/beveled_circle.png")), _goodColor); break;
case AtmosAlarmType.Warning:
output = (new SpriteSpecifier.Texture(new ResPath("/Textures/Interface/NavMap/beveled_triangle.png")), new Color(255, 182, 72)); break;
output = (new SpriteSpecifier.Texture(new ResPath("/Textures/Interface/NavMap/beveled_triangle.png")), _warningColor); break;
case AtmosAlarmType.Danger:
output = (new SpriteSpecifier.Texture(new ResPath("/Textures/Interface/NavMap/beveled_square.png")), new Color(255, 67, 67)); break;
output = (new SpriteSpecifier.Texture(new ResPath("/Textures/Interface/NavMap/beveled_square.png")), _dangerColor); break;
}
return output;

View File

@@ -0,0 +1,40 @@
using Content.Shared.Atmos.Components;
namespace Content.Client.Atmos.Consoles;
public sealed class AtmosMonitoringConsoleBoundUserInterface : BoundUserInterface
{
[ViewVariables]
private AtmosMonitoringConsoleWindow? _menu;
public AtmosMonitoringConsoleBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey) { }
protected override void Open()
{
base.Open();
_menu = new AtmosMonitoringConsoleWindow(this, Owner);
_menu.OpenCentered();
_menu.OnClose += Close;
}
protected override void UpdateState(BoundUserInterfaceState state)
{
base.UpdateState(state);
if (state is not AtmosMonitoringConsoleBoundInterfaceState castState)
return;
EntMan.TryGetComponent<TransformComponent>(Owner, out var xform);
_menu?.UpdateUI(xform?.Coordinates, castState.AtmosNetworks);
}
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
if (!disposing)
return;
_menu?.Dispose();
}
}

View File

@@ -0,0 +1,295 @@
using Content.Client.Pinpointer.UI;
using Content.Shared.Atmos.Components;
using Content.Shared.Pinpointer;
using Robust.Client.Graphics;
using Robust.Shared.Collections;
using Robust.Shared.Map.Components;
using System.Linq;
using System.Numerics;
namespace Content.Client.Atmos.Consoles;
public sealed partial class AtmosMonitoringConsoleNavMapControl : NavMapControl
{
[Dependency] private readonly IEntityManager _entManager = default!;
public bool ShowPipeNetwork = true;
public int? FocusNetId = null;
private const int ChunkSize = 4;
private readonly Color _basePipeNetColor = Color.LightGray;
private readonly Color _unfocusedPipeNetColor = Color.DimGray;
private List<AtmosMonitoringConsoleLine> _atmosPipeNetwork = new();
private Dictionary<Color, Color> _sRGBLookUp = new Dictionary<Color, Color>();
// Look up tables for merging continuous lines. Indexed by line color
private Dictionary<Color, Dictionary<Vector2i, Vector2i>> _horizLines = new();
private Dictionary<Color, Dictionary<Vector2i, Vector2i>> _horizLinesReversed = new();
private Dictionary<Color, Dictionary<Vector2i, Vector2i>> _vertLines = new();
private Dictionary<Color, Dictionary<Vector2i, Vector2i>> _vertLinesReversed = new();
public AtmosMonitoringConsoleNavMapControl() : base()
{
PostWallDrawingAction += DrawAllPipeNetworks;
}
protected override void UpdateNavMap()
{
base.UpdateNavMap();
if (!_entManager.TryGetComponent<AtmosMonitoringConsoleComponent>(Owner, out var console))
return;
if (!_entManager.TryGetComponent<MapGridComponent>(MapUid, out var grid))
return;
_atmosPipeNetwork = GetDecodedAtmosPipeChunks(console.AtmosPipeChunks, grid);
}
private void DrawAllPipeNetworks(DrawingHandleScreen handle)
{
if (!ShowPipeNetwork)
return;
// Draw networks
if (_atmosPipeNetwork != null && _atmosPipeNetwork.Any())
DrawPipeNetwork(handle, _atmosPipeNetwork);
}
private void DrawPipeNetwork(DrawingHandleScreen handle, List<AtmosMonitoringConsoleLine> atmosPipeNetwork)
{
var offset = GetOffset();
offset = offset with { Y = -offset.Y };
if (WorldRange / WorldMaxRange > 0.5f)
{
var pipeNetworks = new Dictionary<Color, ValueList<Vector2>>();
foreach (var chunkedLine in atmosPipeNetwork)
{
var start = ScalePosition(chunkedLine.Origin - offset);
var end = ScalePosition(chunkedLine.Terminus - offset);
if (!pipeNetworks.TryGetValue(chunkedLine.Color, out var subNetwork))
subNetwork = new ValueList<Vector2>();
subNetwork.Add(start);
subNetwork.Add(end);
pipeNetworks[chunkedLine.Color] = subNetwork;
}
foreach ((var color, var subNetwork) in pipeNetworks)
{
if (subNetwork.Count > 0)
handle.DrawPrimitives(DrawPrimitiveTopology.LineList, subNetwork.Span, color);
}
}
else
{
var pipeVertexUVs = new Dictionary<Color, ValueList<Vector2>>();
foreach (var chunkedLine in atmosPipeNetwork)
{
var leftTop = ScalePosition(new Vector2
(Math.Min(chunkedLine.Origin.X, chunkedLine.Terminus.X) - 0.1f,
Math.Min(chunkedLine.Origin.Y, chunkedLine.Terminus.Y) - 0.1f)
- offset);
var rightTop = ScalePosition(new Vector2
(Math.Max(chunkedLine.Origin.X, chunkedLine.Terminus.X) + 0.1f,
Math.Min(chunkedLine.Origin.Y, chunkedLine.Terminus.Y) - 0.1f)
- offset);
var leftBottom = ScalePosition(new Vector2
(Math.Min(chunkedLine.Origin.X, chunkedLine.Terminus.X) - 0.1f,
Math.Max(chunkedLine.Origin.Y, chunkedLine.Terminus.Y) + 0.1f)
- offset);
var rightBottom = ScalePosition(new Vector2
(Math.Max(chunkedLine.Origin.X, chunkedLine.Terminus.X) + 0.1f,
Math.Max(chunkedLine.Origin.Y, chunkedLine.Terminus.Y) + 0.1f)
- offset);
if (!pipeVertexUVs.TryGetValue(chunkedLine.Color, out var pipeVertexUV))
pipeVertexUV = new ValueList<Vector2>();
pipeVertexUV.Add(leftBottom);
pipeVertexUV.Add(leftTop);
pipeVertexUV.Add(rightBottom);
pipeVertexUV.Add(leftTop);
pipeVertexUV.Add(rightBottom);
pipeVertexUV.Add(rightTop);
pipeVertexUVs[chunkedLine.Color] = pipeVertexUV;
}
foreach ((var color, var pipeVertexUV) in pipeVertexUVs)
{
if (pipeVertexUV.Count > 0)
handle.DrawPrimitives(DrawPrimitiveTopology.TriangleList, pipeVertexUV.Span, color);
}
}
}
private List<AtmosMonitoringConsoleLine> GetDecodedAtmosPipeChunks(Dictionary<Vector2i, AtmosPipeChunk>? chunks, MapGridComponent? grid)
{
var decodedOutput = new List<AtmosMonitoringConsoleLine>();
if (chunks == null || grid == null)
return decodedOutput;
// Clear stale look up table values
_horizLines.Clear();
_horizLinesReversed.Clear();
_vertLines.Clear();
_vertLinesReversed.Clear();
// Generate masks
var northMask = (ulong)1 << 0;
var southMask = (ulong)1 << 1;
var westMask = (ulong)1 << 2;
var eastMask = (ulong)1 << 3;
foreach ((var chunkOrigin, var chunk) in chunks)
{
var list = new List<AtmosMonitoringConsoleLine>();
foreach (var ((netId, hexColor), atmosPipeData) in chunk.AtmosPipeData)
{
// Determine the correct coloration for the pipe
var color = Color.FromHex(hexColor) * _basePipeNetColor;
if (FocusNetId != null && FocusNetId != netId)
color *= _unfocusedPipeNetColor;
// Get the associated line look up tables
if (!_horizLines.TryGetValue(color, out var horizLines))
{
horizLines = new();
_horizLines[color] = horizLines;
}
if (!_horizLinesReversed.TryGetValue(color, out var horizLinesReversed))
{
horizLinesReversed = new();
_horizLinesReversed[color] = horizLinesReversed;
}
if (!_vertLines.TryGetValue(color, out var vertLines))
{
vertLines = new();
_vertLines[color] = vertLines;
}
if (!_vertLinesReversed.TryGetValue(color, out var vertLinesReversed))
{
vertLinesReversed = new();
_vertLinesReversed[color] = vertLinesReversed;
}
// Loop over the chunk
for (var tileIdx = 0; tileIdx < ChunkSize * ChunkSize; tileIdx++)
{
if (atmosPipeData == 0)
continue;
var mask = (ulong)SharedNavMapSystem.AllDirMask << tileIdx * SharedNavMapSystem.Directions;
if ((atmosPipeData & mask) == 0)
continue;
var relativeTile = GetTileFromIndex(tileIdx);
var tile = (chunk.Origin * ChunkSize + relativeTile) * grid.TileSize;
tile = tile with { Y = -tile.Y };
// Calculate the draw point offsets
var vertLineOrigin = (atmosPipeData & northMask << tileIdx * SharedNavMapSystem.Directions) > 0 ?
new Vector2(grid.TileSize * 0.5f, -grid.TileSize * 1f) : new Vector2(grid.TileSize * 0.5f, -grid.TileSize * 0.5f);
var vertLineTerminus = (atmosPipeData & southMask << tileIdx * SharedNavMapSystem.Directions) > 0 ?
new Vector2(grid.TileSize * 0.5f, -grid.TileSize * 0f) : new Vector2(grid.TileSize * 0.5f, -grid.TileSize * 0.5f);
var horizLineOrigin = (atmosPipeData & eastMask << tileIdx * SharedNavMapSystem.Directions) > 0 ?
new Vector2(grid.TileSize * 1f, -grid.TileSize * 0.5f) : new Vector2(grid.TileSize * 0.5f, -grid.TileSize * 0.5f);
var horizLineTerminus = (atmosPipeData & westMask << tileIdx * SharedNavMapSystem.Directions) > 0 ?
new Vector2(grid.TileSize * 0f, -grid.TileSize * 0.5f) : new Vector2(grid.TileSize * 0.5f, -grid.TileSize * 0.5f);
// Since we can have pipe lines that have a length of a half tile,
// double the vectors and convert to vector2i so we can merge them
AddOrUpdateNavMapLine(ConvertVector2ToVector2i(tile + horizLineOrigin, 2), ConvertVector2ToVector2i(tile + horizLineTerminus, 2), horizLines, horizLinesReversed);
AddOrUpdateNavMapLine(ConvertVector2ToVector2i(tile + vertLineOrigin, 2), ConvertVector2ToVector2i(tile + vertLineTerminus, 2), vertLines, vertLinesReversed);
}
}
}
// Scale the vector2is back down and convert to vector2
foreach (var (color, horizLines) in _horizLines)
{
// Get the corresponding sRBG color
var sRGB = GetsRGBColor(color);
foreach (var (origin, terminal) in horizLines)
decodedOutput.Add(new AtmosMonitoringConsoleLine
(ConvertVector2iToVector2(origin, 0.5f), ConvertVector2iToVector2(terminal, 0.5f), sRGB));
}
foreach (var (color, vertLines) in _vertLines)
{
// Get the corresponding sRBG color
var sRGB = GetsRGBColor(color);
foreach (var (origin, terminal) in vertLines)
decodedOutput.Add(new AtmosMonitoringConsoleLine
(ConvertVector2iToVector2(origin, 0.5f), ConvertVector2iToVector2(terminal, 0.5f), sRGB));
}
return decodedOutput;
}
private Vector2 ConvertVector2iToVector2(Vector2i vector, float scale = 1f)
{
return new Vector2(vector.X * scale, vector.Y * scale);
}
private Vector2i ConvertVector2ToVector2i(Vector2 vector, float scale = 1f)
{
return new Vector2i((int)MathF.Round(vector.X * scale), (int)MathF.Round(vector.Y * scale));
}
private Vector2i GetTileFromIndex(int index)
{
var x = index / ChunkSize;
var y = index % ChunkSize;
return new Vector2i(x, y);
}
private Color GetsRGBColor(Color color)
{
if (!_sRGBLookUp.TryGetValue(color, out var sRGB))
{
sRGB = Color.ToSrgb(color);
_sRGBLookUp[color] = sRGB;
}
return sRGB;
}
}
public struct AtmosMonitoringConsoleLine
{
public readonly Vector2 Origin;
public readonly Vector2 Terminus;
public readonly Color Color;
public AtmosMonitoringConsoleLine(Vector2 origin, Vector2 terminus, Color color)
{
Origin = origin;
Terminus = terminus;
Color = color;
}
}

View File

@@ -0,0 +1,69 @@
using Content.Shared.Atmos.Components;
using Content.Shared.Atmos.Consoles;
using Robust.Shared.GameStates;
namespace Content.Client.Atmos.Consoles;
public sealed class AtmosMonitoringConsoleSystem : SharedAtmosMonitoringConsoleSystem
{
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<AtmosMonitoringConsoleComponent, ComponentHandleState>(OnHandleState);
}
private void OnHandleState(EntityUid uid, AtmosMonitoringConsoleComponent component, ref ComponentHandleState args)
{
Dictionary<Vector2i, Dictionary<(int, string), ulong>> modifiedChunks;
Dictionary<NetEntity, AtmosDeviceNavMapData> atmosDevices;
switch (args.Current)
{
case AtmosMonitoringConsoleDeltaState delta:
{
modifiedChunks = delta.ModifiedChunks;
atmosDevices = delta.AtmosDevices;
foreach (var index in component.AtmosPipeChunks.Keys)
{
if (!delta.AllChunks!.Contains(index))
component.AtmosPipeChunks.Remove(index);
}
break;
}
case AtmosMonitoringConsoleState state:
{
modifiedChunks = state.Chunks;
atmosDevices = state.AtmosDevices;
foreach (var index in component.AtmosPipeChunks.Keys)
{
if (!state.Chunks.ContainsKey(index))
component.AtmosPipeChunks.Remove(index);
}
break;
}
default:
return;
}
foreach (var (origin, chunk) in modifiedChunks)
{
var newChunk = new AtmosPipeChunk(origin);
newChunk.AtmosPipeData = new Dictionary<(int, string), ulong>(chunk);
component.AtmosPipeChunks[origin] = newChunk;
}
component.AtmosDevices.Clear();
foreach (var (nuid, atmosDevice) in atmosDevices)
{
component.AtmosDevices[nuid] = atmosDevice;
}
}
}

View File

@@ -0,0 +1,99 @@
<controls:FancyWindow xmlns="https://spacestation14.io"
xmlns:ui="clr-namespace:Content.Client.Atmos.Consoles"
xmlns:controls="clr-namespace:Content.Client.UserInterface.Controls"
xmlns:gfx="clr-namespace:Robust.Client.Graphics;assembly=Robust.Client"
Title="{Loc 'atmos-monitoring-window-title'}"
Resizable="False"
SetSize="1120 750"
MinSize="1120 750">
<BoxContainer Orientation="Vertical">
<!-- Main display -->
<BoxContainer Orientation="Horizontal" VerticalExpand="True" HorizontalExpand="True">
<!-- Nav map -->
<BoxContainer Orientation="Vertical" VerticalExpand="True" HorizontalExpand="True">
<ui:AtmosMonitoringConsoleNavMapControl Name="NavMap" Margin="5 5" VerticalExpand="True" HorizontalExpand="True">
<!-- System warning -->
<PanelContainer Name="SystemWarningPanel"
HorizontalAlignment="Center"
VerticalAlignment="Top"
HorizontalExpand="True"
Margin="0 48 0 0"
Visible="False">
<RichTextLabel Name="SystemWarningLabel" Margin="12 8 12 8"/>
</PanelContainer>
</ui:AtmosMonitoringConsoleNavMapControl>
<!-- Nav map legend -->
<BoxContainer Orientation="Horizontal" Margin="0 10 0 10">
<TextureRect Stretch="KeepAspectCentered"
TexturePath="/Textures/Interface/NavMap/beveled_square.png"
Modulate="#a9a9a9"
SetSize="16 16"
Margin="20 0 5 0"/>
<Label Text="{Loc 'atmos-monitoring-window-label-gas-opening'}"/>
<TextureRect Stretch="KeepAspectCentered"
TexturePath="/Textures/Interface/NavMap/beveled_circle.png"
SetSize="16 16"
Modulate="#a9a9a9"
Margin="20 0 5 0"/>
<Label Text="{Loc 'atmos-monitoring-window-label-gas-scrubber'}"/>
<TextureRect Stretch="KeepAspectCentered"
TexturePath="/Textures/Interface/NavMap/beveled_arrow_east.png"
SetSize="16 16"
Modulate="#a9a9a9"
Margin="20 0 5 0"/>
<Label Text="{Loc 'atmos-monitoring-window-label-gas-flow-regulator'}"/>
<TextureRect Stretch="KeepAspectCentered"
TexturePath="/Textures/Interface/NavMap/beveled_hexagon.png"
SetSize="16 16"
Modulate="#a9a9a9"
Margin="20 0 5 0"/>
<Label Text="{Loc 'atmos-monitoring-window-label-thermoregulator'}"/>
</BoxContainer>
</BoxContainer>
<!-- Atmosphere status -->
<BoxContainer Orientation="Vertical" VerticalExpand="True" SetWidth="440" Margin="0 0 10 10">
<!-- Station name -->
<controls:StripeBack>
<PanelContainer>
<RichTextLabel Name="StationName" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="0 5 0 3"/>
</PanelContainer>
</controls:StripeBack>
<!-- Alarm status (entries added by C# code) -->
<TabContainer Name="MasterTabContainer" VerticalExpand="True" HorizontalExpand="True" Margin="0 10 0 0">
<ScrollContainer HorizontalExpand="True" Margin="8, 8, 8, 8">
<BoxContainer Name="AtmosNetworksTable" Orientation="Vertical" VerticalExpand="True" HorizontalExpand="True" Margin="0 0 0 10"/>
</ScrollContainer>
</TabContainer>
<!-- Overlay toggles -->
<BoxContainer Orientation="Vertical" Margin="0 10 0 0">
<Label Text="{Loc 'atmos-monitoring-window-toggle-overlays'}" Margin="0 0 0 5"/>
<BoxContainer Orientation="Horizontal" HorizontalExpand="True">
<CheckBox Name="ShowPipeNetwork" Text="{Loc 'atmos-monitoring-window-show-pipe-network'}" Pressed="True" HorizontalExpand="True"/>
<CheckBox Name="ShowGasPipeSensors" Text="{Loc 'atmos-monitoring-window-show-gas-pipe-sensors'}" Pressed="False" HorizontalExpand="True"/>
</BoxContainer>
</BoxContainer>
</BoxContainer>
</BoxContainer>
<!-- Footer -->
<BoxContainer Orientation="Vertical">
<PanelContainer StyleClasses="LowDivider" />
<BoxContainer Orientation="Horizontal" Margin="10 2 5 0" VerticalAlignment="Bottom">
<Label Text="{Loc 'atmos-monitoring-window-flavor-left'}" StyleClasses="WindowFooterText" />
<Label Text="{Loc 'atmos-monitoring-window-flavor-right'}" StyleClasses="WindowFooterText"
HorizontalAlignment="Right" HorizontalExpand="True" Margin="0 0 5 0" />
<TextureRect StyleClasses="NTLogoDark" Stretch="KeepAspectCentered"
VerticalAlignment="Center" HorizontalAlignment="Right" SetSize="19 19"/>
</BoxContainer>
</BoxContainer>
</BoxContainer>
</controls:FancyWindow>

View File

@@ -0,0 +1,455 @@
using Content.Client.Pinpointer.UI;
using Content.Client.UserInterface.Controls;
using Content.Shared.Atmos.Components;
using Content.Shared.Prototypes;
using Robust.Client.AutoGenerated;
using Robust.Client.GameObjects;
using Robust.Client.UserInterface;
using Robust.Client.UserInterface.Controls;
using Robust.Client.UserInterface.XAML;
using Robust.Shared.Map;
using Robust.Shared.Prototypes;
using Robust.Shared.Timing;
using Robust.Shared.Utility;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
namespace Content.Client.Atmos.Consoles;
[GenerateTypedNameReferences]
public sealed partial class AtmosMonitoringConsoleWindow : FancyWindow
{
private readonly IEntityManager _entManager;
private readonly IPrototypeManager _protoManager;
private readonly SpriteSystem _spriteSystem;
private EntityUid? _owner;
private NetEntity? _focusEntity;
private int? _focusNetId;
private bool _autoScrollActive = false;
private readonly Color _unfocusedDeviceColor = Color.DimGray;
private ProtoId<NavMapBlipPrototype> _navMapConsoleProtoId = "NavMapConsole";
private ProtoId<NavMapBlipPrototype> _gasPipeSensorProtoId = "GasPipeSensor";
public AtmosMonitoringConsoleWindow(AtmosMonitoringConsoleBoundUserInterface userInterface, EntityUid? owner)
{
RobustXamlLoader.Load(this);
_entManager = IoCManager.Resolve<IEntityManager>();
_protoManager = IoCManager.Resolve<IPrototypeManager>();
_spriteSystem = _entManager.System<SpriteSystem>();
// Pass the owner to nav map
_owner = owner;
NavMap.Owner = _owner;
// Set nav map grid uid
var stationName = Loc.GetString("atmos-monitoring-window-unknown-location");
EntityCoordinates? consoleCoords = null;
if (_entManager.TryGetComponent<TransformComponent>(owner, out var xform))
{
consoleCoords = xform.Coordinates;
NavMap.MapUid = xform.GridUid;
// Assign station name
if (_entManager.TryGetComponent<MetaDataComponent>(xform.GridUid, out var stationMetaData))
stationName = stationMetaData.EntityName;
var msg = new FormattedMessage();
msg.TryAddMarkup(Loc.GetString("atmos-monitoring-window-station-name", ("stationName", stationName)), out _);
StationName.SetMessage(msg);
}
else
{
StationName.SetMessage(stationName);
NavMap.Visible = false;
}
// Set trackable entity selected action
NavMap.TrackedEntitySelectedAction += SetTrackedEntityFromNavMap;
// Update nav map
NavMap.ForceNavMapUpdate();
// Set tab container headers
MasterTabContainer.SetTabTitle(0, Loc.GetString("atmos-monitoring-window-tab-networks"));
// Set UI toggles
ShowPipeNetwork.OnToggled += _ => OnShowPipeNetworkToggled();
ShowGasPipeSensors.OnToggled += _ => OnShowGasPipeSensors();
// Set nav map colors
if (!_entManager.TryGetComponent<AtmosMonitoringConsoleComponent>(_owner, out var console))
return;
NavMap.TileColor = console.NavMapTileColor;
NavMap.WallColor = console.NavMapWallColor;
// Initalize
UpdateUI(consoleCoords, Array.Empty<AtmosMonitoringConsoleEntry>());
}
#region Toggle handling
private void OnShowPipeNetworkToggled()
{
if (_owner == null)
return;
if (!_entManager.TryGetComponent<AtmosMonitoringConsoleComponent>(_owner.Value, out var console))
return;
NavMap.ShowPipeNetwork = ShowPipeNetwork.Pressed;
foreach (var (netEnt, device) in console.AtmosDevices)
{
if (device.NavMapBlip == _gasPipeSensorProtoId)
continue;
if (ShowPipeNetwork.Pressed)
AddTrackedEntityToNavMap(device);
else
NavMap.TrackedEntities.Remove(netEnt);
}
}
private void OnShowGasPipeSensors()
{
if (_owner == null)
return;
if (!_entManager.TryGetComponent<AtmosMonitoringConsoleComponent>(_owner.Value, out var console))
return;
foreach (var (netEnt, device) in console.AtmosDevices)
{
if (device.NavMapBlip != _gasPipeSensorProtoId)
continue;
if (ShowGasPipeSensors.Pressed)
AddTrackedEntityToNavMap(device, true);
else
NavMap.TrackedEntities.Remove(netEnt);
}
}
#endregion
public void UpdateUI
(EntityCoordinates? consoleCoords,
AtmosMonitoringConsoleEntry[] atmosNetworks)
{
if (_owner == null)
return;
if (!_entManager.TryGetComponent<AtmosMonitoringConsoleComponent>(_owner.Value, out var console))
return;
// Reset nav map values
NavMap.TrackedCoordinates.Clear();
NavMap.TrackedEntities.Clear();
if (_focusEntity != null && !console.AtmosDevices.Any(x => x.Key == _focusEntity))
ClearFocus();
// Add tracked entities to the nav map
UpdateNavMapBlips();
// Show the monitor location
var consoleNetEnt = _entManager.GetNetEntity(_owner);
if (consoleCoords != null && consoleNetEnt != null)
{
var proto = _protoManager.Index(_navMapConsoleProtoId);
if (proto.TexturePaths != null && proto.TexturePaths.Length != 0)
{
var texture = _spriteSystem.Frame0(new SpriteSpecifier.Texture(proto.TexturePaths[0]));
var blip = new NavMapBlip(consoleCoords.Value, texture, proto.Color, proto.Blinks, proto.Selectable);
NavMap.TrackedEntities[consoleNetEnt.Value] = blip;
}
}
// Update the nav map
NavMap.ForceNavMapUpdate();
// Clear excess children from the tables
while (AtmosNetworksTable.ChildCount > atmosNetworks.Length)
AtmosNetworksTable.RemoveChild(AtmosNetworksTable.GetChild(AtmosNetworksTable.ChildCount - 1));
// Update all entries in each table
for (int index = 0; index < atmosNetworks.Length; index++)
{
var entry = atmosNetworks.ElementAt(index);
UpdateUIEntry(entry, index, AtmosNetworksTable, console);
}
}
private void UpdateNavMapBlips()
{
if (_owner == null || !_entManager.TryGetComponent<AtmosMonitoringConsoleComponent>(_owner.Value, out var console))
return;
if (NavMap.Visible)
{
foreach (var (netEnt, device) in console.AtmosDevices)
{
// Update the focus network ID, incase it has changed
if (_focusEntity == netEnt)
{
_focusNetId = device.NetId;
NavMap.FocusNetId = _focusNetId;
}
var isSensor = device.NavMapBlip == _gasPipeSensorProtoId;
// Skip network devices if the toggled is off
if (!ShowPipeNetwork.Pressed && !isSensor)
continue;
// Skip gas pipe sensors if the toggle is off
if (!ShowGasPipeSensors.Pressed && isSensor)
continue;
AddTrackedEntityToNavMap(device, isSensor);
}
}
}
private void AddTrackedEntityToNavMap(AtmosDeviceNavMapData metaData, bool isSensor = false)
{
var proto = _protoManager.Index(metaData.NavMapBlip);
if (proto.TexturePaths == null || proto.TexturePaths.Length == 0)
return;
var idx = Math.Clamp((int)metaData.Direction / 2, 0, proto.TexturePaths.Length - 1);
var texture = proto.TexturePaths.Length > 0 ? proto.TexturePaths[idx] : proto.TexturePaths[0];
var color = isSensor ? proto.Color : proto.Color * metaData.PipeColor;
if (_focusNetId != null && metaData.NetId != _focusNetId)
color *= _unfocusedDeviceColor;
var blinks = proto.Blinks || _focusEntity == metaData.NetEntity;
var coords = _entManager.GetCoordinates(metaData.NetCoordinates);
var blip = new NavMapBlip(coords, _spriteSystem.Frame0(new SpriteSpecifier.Texture(texture)), color, blinks, proto.Selectable, proto.Scale);
NavMap.TrackedEntities[metaData.NetEntity] = blip;
}
private void UpdateUIEntry(AtmosMonitoringConsoleEntry data, int index, Control table, AtmosMonitoringConsoleComponent console)
{
// Make new UI entry if required
if (index >= table.ChildCount)
{
var newEntryContainer = new AtmosMonitoringEntryContainer(data);
// On click
newEntryContainer.FocusButton.OnButtonUp += args =>
{
if (_focusEntity == newEntryContainer.Data.NetEntity)
{
ClearFocus();
}
else
{
SetFocus(newEntryContainer.Data.NetEntity, newEntryContainer.Data.NetId);
var coords = _entManager.GetCoordinates(newEntryContainer.Data.Coordinates);
NavMap.CenterToCoordinates(coords);
}
// Update affected UI elements across all tables
UpdateConsoleTable(console, AtmosNetworksTable, _focusEntity);
};
// Add the entry to the current table
table.AddChild(newEntryContainer);
}
// Update values and UI elements
var tableChild = table.GetChild(index);
if (tableChild is not AtmosMonitoringEntryContainer)
{
table.RemoveChild(tableChild);
UpdateUIEntry(data, index, table, console);
return;
}
var entryContainer = (AtmosMonitoringEntryContainer)tableChild;
entryContainer.UpdateEntry(data, data.NetEntity == _focusEntity);
}
private void UpdateConsoleTable(AtmosMonitoringConsoleComponent console, Control table, NetEntity? currTrackedEntity)
{
foreach (var tableChild in table.Children)
{
if (tableChild is not AtmosAlarmEntryContainer)
continue;
var entryContainer = (AtmosAlarmEntryContainer)tableChild;
if (entryContainer.NetEntity != currTrackedEntity)
entryContainer.RemoveAsFocus();
else if (entryContainer.NetEntity == currTrackedEntity)
entryContainer.SetAsFocus();
}
}
private void SetTrackedEntityFromNavMap(NetEntity? focusEntity)
{
if (focusEntity == null)
return;
if (!_entManager.TryGetComponent<AtmosMonitoringConsoleComponent>(_owner, out var console))
return;
foreach (var (netEnt, device) in console.AtmosDevices)
{
if (netEnt != focusEntity)
continue;
if (device.NavMapBlip != _gasPipeSensorProtoId)
return;
// Set new focus
SetFocus(focusEntity.Value, device.NetId);
// Get the scroll position of the selected entity on the selected button the UI
ActivateAutoScrollToFocus();
break;
}
}
protected override void FrameUpdate(FrameEventArgs args)
{
AutoScrollToFocus();
}
private void ActivateAutoScrollToFocus()
{
_autoScrollActive = true;
}
private void AutoScrollToFocus()
{
if (!_autoScrollActive)
return;
var scroll = AtmosNetworksTable.Parent as ScrollContainer;
if (scroll == null)
return;
if (!TryGetVerticalScrollbar(scroll, out var vScrollbar))
return;
if (!TryGetNextScrollPosition(out float? nextScrollPosition))
return;
vScrollbar.ValueTarget = nextScrollPosition.Value;
if (MathHelper.CloseToPercent(vScrollbar.Value, vScrollbar.ValueTarget))
_autoScrollActive = false;
}
private bool TryGetVerticalScrollbar(ScrollContainer scroll, [NotNullWhen(true)] out VScrollBar? vScrollBar)
{
vScrollBar = null;
foreach (var control in scroll.Children)
{
if (control is not VScrollBar)
continue;
vScrollBar = (VScrollBar)control;
return true;
}
return false;
}
private bool TryGetNextScrollPosition([NotNullWhen(true)] out float? nextScrollPosition)
{
nextScrollPosition = null;
var scroll = AtmosNetworksTable.Parent as ScrollContainer;
if (scroll == null)
return false;
var container = scroll.Children.ElementAt(0) as BoxContainer;
if (container == null || container.Children.Count() == 0)
return false;
// Exit if the heights of the children haven't been initialized yet
if (!container.Children.Any(x => x.Height > 0))
return false;
nextScrollPosition = 0;
foreach (var control in container.Children)
{
if (control is not AtmosMonitoringEntryContainer)
continue;
var entry = (AtmosMonitoringEntryContainer)control;
if (entry.Data.NetEntity == _focusEntity)
return true;
nextScrollPosition += control.Height;
}
// Failed to find control
nextScrollPosition = null;
return false;
}
private void SetFocus(NetEntity focusEntity, int focusNetId)
{
_focusEntity = focusEntity;
_focusNetId = focusNetId;
NavMap.FocusNetId = focusNetId;
OnFocusChanged();
}
private void ClearFocus()
{
_focusEntity = null;
_focusNetId = null;
NavMap.FocusNetId = null;
OnFocusChanged();
}
private void OnFocusChanged()
{
UpdateNavMapBlips();
NavMap.ForceNavMapUpdate();
if (!_entManager.TryGetComponent<AtmosMonitoringConsoleComponent>(_owner, out var console))
return;
for (int index = 0; index < AtmosNetworksTable.ChildCount; index++)
{
var entry = (AtmosMonitoringEntryContainer)AtmosNetworksTable.GetChild(index);
if (entry == null)
continue;
UpdateUIEntry(entry.Data, index, AtmosNetworksTable, console);
}
}
}

View File

@@ -0,0 +1,74 @@
<BoxContainer xmlns="https://spacestation14.io"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:s="clr-namespace:Content.Client.Stylesheets"
xmlns:gfx="clr-namespace:Robust.Client.Graphics;assembly=Robust.Client"
xmlns:controls="clr-namespace:Content.Client.UserInterface.Controls"
Orientation="Vertical" HorizontalExpand ="True" Margin="0 0 0 3">
<!-- Network selection button -->
<Button Name="FocusButton" HorizontalExpand="True" VerticalExpand="True" Margin="0 0 6 8" StyleClasses="OpenLeft" Access="Public">
<BoxContainer HorizontalExpand="True" VerticalExpand="True" Orientation="Vertical">
<BoxContainer HorizontalExpand="True" VerticalExpand="True" Orientation="Horizontal" SetHeight="32">
<PanelContainer Name="NetworkColorStripe" HorizontalAlignment="Left" SetWidth="8" VerticalExpand="True" Margin="-8 -2 0 0">
<PanelContainer.PanelOverride>
<gfx:StyleBoxFlat BackgroundColor="#d7d7d7"/>
</PanelContainer.PanelOverride>
</PanelContainer>
<Label Name="NetworkNameLabel" Text="???" HorizontalExpand="True" HorizontalAlignment="Center"/>
</BoxContainer>
<!-- Panel that appears on selecting the device -->
<PanelContainer HorizontalExpand="True" Margin="-8 0 -14 -4" Access="Public">
<PanelContainer.PanelOverride>
<gfx:StyleBoxFlat BackgroundColor="#25252a"/>
</PanelContainer.PanelOverride>
<BoxContainer Name="MainDataContainer" HorizontalExpand="True" VerticalExpand="True" Orientation="Vertical">
<Control>
<BoxContainer HorizontalExpand="True" VerticalExpand="True" Orientation="Vertical">
<BoxContainer HorizontalExpand="True" Orientation="Horizontal">
<Label Name="TemperatureHeaderLabel" Text="{Loc 'atmos-alerts-window-temperature-label'}" HorizontalAlignment="Center" HorizontalExpand="True" FontColorOverride="#a9a9a9" Margin="0 2 0 0" SetHeight="24"></Label>
<Label Name="PressureHeaderLabel" Text="{Loc 'atmos-alerts-window-pressure-label'}" HorizontalAlignment="Center" HorizontalExpand="True" FontColorOverride="#a9a9a9" Margin="0 2 0 0" SetHeight="24"></Label>
<Label Name="TotalMolHeaderLabel" Text="{Loc 'atmos-alerts-window-total-mol-label'}" HorizontalAlignment="Center" HorizontalExpand="True" FontColorOverride="#a9a9a9" Margin="0 2 0 0" SetHeight="24"></Label>
</BoxContainer>
<PanelContainer HorizontalExpand="True">
<PanelContainer.PanelOverride>
<gfx:StyleBoxFlat BackgroundColor="#202023"/>
</PanelContainer.PanelOverride>
<BoxContainer HorizontalExpand="True" Orientation="Horizontal">
<Label Name="TemperatureLabel" Text="???" HorizontalAlignment="Center" HorizontalExpand="True" FontColorOverride="#a9a9a9" Margin="0 2 0 0" SetHeight="24"></Label>
<Label Name="PressureLabel" Text="???" HorizontalAlignment="Center" HorizontalExpand="True" FontColorOverride="#a9a9a9" Margin="0 2 0 0" SetHeight="24"></Label>
<Label Name="TotalMolLabel" Text="???" HorizontalAlignment="Center" HorizontalExpand="True" FontColorOverride="#a9a9a9" Margin="0 2 0 0" SetHeight="24"></Label>
</BoxContainer>
</PanelContainer>
<BoxContainer HorizontalExpand="True" Orientation="Horizontal" Margin="8 0">
<TextureRect Name="ArrowTexture" VerticalAlignment="Center" SetSize="12 12" Stretch="KeepAspectCentered" Margin="3 0" TexturePath="/Textures/Interface/Nano/triangle_right.png"></TextureRect>
<Label Name="GasesHeaderLabel" Text="{Loc 'atmos-monitoring-window-label-gases'}" HorizontalAlignment="Left" HorizontalExpand="True" FontColorOverride="#a9a9a9" Margin="4 0 0 0" SetHeight="24"></Label>
</BoxContainer>
</BoxContainer>
</Control>
<!-- Atmosphere status -->
<Control Name="FocusContainer" ReservesSpace="False" Visible="False">
<!-- Main container for displaying atmospheric data -->
<BoxContainer HorizontalExpand="True" VerticalExpand="True" Orientation="Vertical">
<PanelContainer HorizontalExpand="True">
<PanelContainer.PanelOverride>
<gfx:StyleBoxFlat BackgroundColor="#202023"/>
</PanelContainer.PanelOverride>
<!-- Gas entries added via C# code -->
<GridContainer Name="GasGridContainer" HorizontalExpand="True" Columns = "4"></GridContainer>
</PanelContainer>
</BoxContainer>
</Control>
</BoxContainer>
<!-- If the alarm is inactive, this is label is displayed instead -->
<Label Name="NoDataLabel" Text="{Loc 'atmos-alerts-window-no-data-available'}" HorizontalAlignment="Center" Margin="0 15" FontColorOverride="#a9a9a9" ReservesSpace="False" Visible="False"></Label>
</PanelContainer>
</BoxContainer>
</Button>
</BoxContainer>

View File

@@ -0,0 +1,166 @@
using Content.Client.Stylesheets;
using Content.Shared.Atmos;
using Content.Shared.Atmos.Components;
using Content.Shared.FixedPoint;
using Content.Shared.Temperature;
using Robust.Client.AutoGenerated;
using Robust.Client.Graphics;
using Robust.Client.ResourceManagement;
using Robust.Client.UserInterface.Controls;
using Robust.Client.UserInterface.XAML;
using System.Linq;
namespace Content.Client.Atmos.Consoles;
[GenerateTypedNameReferences]
public sealed partial class AtmosMonitoringEntryContainer : BoxContainer
{
public AtmosMonitoringConsoleEntry Data;
private readonly IEntityManager _entManager;
private readonly IResourceCache _cache;
public AtmosMonitoringEntryContainer(AtmosMonitoringConsoleEntry data)
{
RobustXamlLoader.Load(this);
_entManager = IoCManager.Resolve<IEntityManager>();
_cache = IoCManager.Resolve<IResourceCache>();
Data = data;
// Modulate colored stripe
NetworkColorStripe.Modulate = data.Color;
// Load fonts
var headerFont = new VectorFont(_cache.GetResource<FontResource>("/Fonts/NotoSans/NotoSans-Bold.ttf"), 11);
var normalFont = new VectorFont(_cache.GetResource<FontResource>("/Fonts/NotoSansDisplay/NotoSansDisplay-Regular.ttf"), 11);
// Set fonts
TemperatureHeaderLabel.FontOverride = headerFont;
PressureHeaderLabel.FontOverride = headerFont;
TotalMolHeaderLabel.FontOverride = headerFont;
GasesHeaderLabel.FontOverride = headerFont;
TemperatureLabel.FontOverride = normalFont;
PressureLabel.FontOverride = normalFont;
TotalMolLabel.FontOverride = normalFont;
NoDataLabel.FontOverride = headerFont;
}
public void UpdateEntry(AtmosMonitoringConsoleEntry updatedData, bool isFocus)
{
// Load fonts
var normalFont = new VectorFont(_cache.GetResource<FontResource>("/Fonts/NotoSansDisplay/NotoSansDisplay-Regular.ttf"), 11);
// Update name and values
if (!string.IsNullOrEmpty(updatedData.Address))
NetworkNameLabel.Text = Loc.GetString("atmos-alerts-window-alarm-label", ("name", updatedData.EntityName), ("address", updatedData.Address));
else
NetworkNameLabel.Text = Loc.GetString(updatedData.EntityName);
Data = updatedData;
// Modulate colored stripe
NetworkColorStripe.Modulate = Data.Color;
// Focus updates
if (isFocus)
SetAsFocus();
else
RemoveAsFocus();
// Check if powered
if (!updatedData.IsPowered)
{
MainDataContainer.Visible = false;
NoDataLabel.Visible = true;
return;
}
// Set container visibility
MainDataContainer.Visible = true;
NoDataLabel.Visible = false;
// Update temperature
var isNotVacuum = updatedData.TotalMolData > 1e-6f;
var tempK = (FixedPoint2)updatedData.TemperatureData;
var tempC = (FixedPoint2)TemperatureHelpers.KelvinToCelsius(tempK.Float());
TemperatureLabel.Text = isNotVacuum ?
Loc.GetString("atmos-alerts-window-temperature-value", ("valueInC", tempC), ("valueInK", tempK)) :
Loc.GetString("atmos-alerts-window-invalid-value");
TemperatureLabel.FontColorOverride = isNotVacuum ? Color.DarkGray : StyleNano.DisabledFore;
// Update pressure
PressureLabel.Text = Loc.GetString("atmos-alerts-window-pressure-value", ("value", (FixedPoint2)updatedData.PressureData));
PressureLabel.FontColorOverride = isNotVacuum ? Color.DarkGray : StyleNano.DisabledFore;
// Update total mol
TotalMolLabel.Text = Loc.GetString("atmos-alerts-window-total-mol-value", ("value", (FixedPoint2)updatedData.TotalMolData));
TotalMolLabel.FontColorOverride = isNotVacuum ? Color.DarkGray : StyleNano.DisabledFore;
// Update other present gases
GasGridContainer.RemoveAllChildren();
if (updatedData.GasData.Count() == 0)
{
// No gases
var gasLabel = new Label()
{
Text = Loc.GetString("atmos-alerts-window-other-gases-value-nil"),
FontOverride = normalFont,
FontColorOverride = StyleNano.DisabledFore,
HorizontalAlignment = HAlignment.Center,
VerticalAlignment = VAlignment.Center,
HorizontalExpand = true,
Margin = new Thickness(0, 2, 0, 0),
SetHeight = 24f,
};
GasGridContainer.AddChild(gasLabel);
}
else
{
// Add an entry for each gas
foreach (var (gas, percent) in updatedData.GasData)
{
var gasPercent = (FixedPoint2)0f;
gasPercent = percent * 100f;
var gasAbbreviation = Atmospherics.GasAbbreviations.GetValueOrDefault(gas, Loc.GetString("gas-unknown-abbreviation"));
var gasLabel = new Label()
{
Text = Loc.GetString("atmos-alerts-window-other-gases-value", ("shorthand", gasAbbreviation), ("value", gasPercent)),
FontOverride = normalFont,
HorizontalAlignment = HAlignment.Center,
VerticalAlignment = VAlignment.Center,
HorizontalExpand = true,
Margin = new Thickness(0, 2, 0, 0),
SetHeight = 24f,
};
GasGridContainer.AddChild(gasLabel);
}
}
}
public void SetAsFocus()
{
FocusButton.AddStyleClass(StyleNano.StyleClassButtonColorGreen);
ArrowTexture.TexturePath = "/Textures/Interface/Nano/inverted_triangle.svg.png";
FocusContainer.Visible = true;
}
public void RemoveAsFocus()
{
FocusButton.RemoveStyleClass(StyleNano.StyleClassButtonColorGreen);
ArrowTexture.TexturePath = "/Textures/Interface/Nano/triangle_right.png";
FocusContainer.Visible = false;
}
}

View File

@@ -4,8 +4,6 @@ using Content.Shared.Atmos.Components;
using Content.Shared.Atmos.Piping;
using JetBrains.Annotations;
using Robust.Client.GameObjects;
using Robust.Client.ResourceManagement;
using Robust.Shared.Serialization.TypeSerializers.Implementations;
namespace Content.Client.Atmos.EntitySystems;
@@ -19,7 +17,7 @@ public sealed class AtmosPipeAppearanceSystem : EntitySystem
base.Initialize();
SubscribeLocalEvent<PipeAppearanceComponent, ComponentInit>(OnInit);
SubscribeLocalEvent<PipeAppearanceComponent, AppearanceChangeEvent>(OnAppearanceChanged, after: new[] { typeof(SubFloorHideSystem) });
SubscribeLocalEvent<PipeAppearanceComponent, AppearanceChangeEvent>(OnAppearanceChanged, after: [typeof(SubFloorHideSystem)]);
}
private void OnInit(EntityUid uid, PipeAppearanceComponent component, ComponentInit args)
@@ -84,7 +82,8 @@ public sealed class AtmosPipeAppearanceSystem : EntitySystem
layer.Visible &= visible;
if (!visible) continue;
if (!visible)
continue;
layer.Color = color;
}

View File

@@ -0,0 +1,23 @@
using Content.Client.Atmos.UI;
using Content.Shared.Atmos.Components;
using Content.Shared.Atmos.EntitySystems;
using Content.Shared.Atmos.Piping.Binary.Components;
namespace Content.Client.Atmos.EntitySystems;
public sealed class GasPressurePumpSystem : SharedGasPressurePumpSystem
{
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<GasPressurePumpComponent, AfterAutoHandleStateEvent>(OnPumpUpdate);
}
private void OnPumpUpdate(Entity<GasPressurePumpComponent> ent, ref AfterAutoHandleStateEvent args)
{
if (UserInterfaceSystem.TryGetOpenUi<GasPressurePumpBoundUserInterface>(ent.Owner, GasPressurePumpUiKey.Key, out var bui))
{
bui.Update();
}
}
}

View File

@@ -1,12 +1,7 @@
using System.Collections.Generic;
using Content.Shared.Atmos.Monitor;
using Content.Shared.Power;
using Robust.Client.GameObjects;
using Robust.Client.Graphics;
using Robust.Shared.GameObjects;
using Robust.Shared.IoC;
using Robust.Shared.Maths;
using Robust.Shared.Serialization.Manager.Attributes;
namespace Content.Client.Atmos.Monitor;
@@ -27,7 +22,7 @@ public sealed class AtmosAlarmableVisualsSystem : VisualizerSystem<AtmosAlarmabl
{
foreach (var visLayer in component.HideOnDepowered)
{
if (args.Sprite.LayerMapTryGet(visLayer, out int powerVisibilityLayer))
if (args.Sprite.LayerMapTryGet(visLayer, out var powerVisibilityLayer))
args.Sprite.LayerSetVisible(powerVisibilityLayer, powered);
}
}
@@ -36,7 +31,7 @@ public sealed class AtmosAlarmableVisualsSystem : VisualizerSystem<AtmosAlarmabl
{
foreach (var (setLayer, powerState) in component.SetOnDepowered)
{
if (args.Sprite.LayerMapTryGet(setLayer, out int setStateLayer))
if (args.Sprite.LayerMapTryGet(setLayer, out var setStateLayer))
args.Sprite.LayerSetState(setStateLayer, new RSI.StateId(powerState));
}
}

View File

@@ -1,11 +1,7 @@
using Content.Shared.Atmos;
using Content.Shared.Atmos.Monitor;
using Content.Shared.Atmos.Monitor.Components;
using Robust.Client.GameObjects;
using Robust.Client.UserInterface;
using Robust.Shared.GameObjects;
using Robust.Shared.IoC;
using Robust.Shared.Log;
namespace Content.Client.Atmos.Monitor.UI;
@@ -78,6 +74,7 @@ public sealed class AirAlarmBoundUserInterface : BoundUserInterface
{
base.Dispose(disposing);
if (disposing) _window?.Dispose();
if (disposing)
_window?.Dispose();
}
}

View File

@@ -8,7 +8,6 @@ using Content.Shared.Atmos.Monitor.Components;
using Content.Shared.Atmos.Piping.Unary.Components;
using Content.Shared.Temperature;
using Robust.Client.AutoGenerated;
using Robust.Client.GameObjects;
using Robust.Client.UserInterface.Controls;
using Robust.Client.UserInterface.XAML;
@@ -59,7 +58,7 @@ public sealed partial class AirAlarmWindow : FancyWindow
AirAlarmMode.Fill => "air-alarm-ui-mode-fill",
AirAlarmMode.Panic => "air-alarm-ui-mode-panic",
AirAlarmMode.None => "air-alarm-ui-mode-none",
_ => "error"
_ => "error",
};
_modes.AddItem(Loc.GetString(text));
}
@@ -70,7 +69,7 @@ public sealed partial class AirAlarmWindow : FancyWindow
AirAlarmModeChanged!.Invoke((AirAlarmMode) args.Id);
};
_autoMode.OnToggled += args =>
_autoMode.OnToggled += _ =>
{
AutoModeChanged!.Invoke(_autoMode.Pressed);
};
@@ -176,22 +175,18 @@ public sealed partial class AirAlarmWindow : FancyWindow
public static Color ColorForThreshold(float amount, AtmosAlarmThreshold threshold)
{
threshold.CheckThreshold(amount, out AtmosAlarmType curAlarm);
threshold.CheckThreshold(amount, out var curAlarm);
return ColorForAlarm(curAlarm);
}
public static Color ColorForAlarm(AtmosAlarmType curAlarm)
{
if(curAlarm == AtmosAlarmType.Danger)
return curAlarm switch
{
return StyleNano.DangerousRedFore;
}
else if(curAlarm == AtmosAlarmType.Warning)
{
return StyleNano.ConcerningOrangeFore;
}
return StyleNano.GoodGreenFore;
AtmosAlarmType.Danger => StyleNano.DangerousRedFore,
AtmosAlarmType.Warning => StyleNano.ConcerningOrangeFore,
_ => StyleNano.GoodGreenFore,
};
}

View File

@@ -1,12 +1,8 @@
using System;
using Content.Shared.Atmos.Monitor;
using Content.Shared.Atmos.Monitor.Components;
using Content.Shared.Atmos.Piping.Unary.Components;
using Robust.Client.AutoGenerated;
using Robust.Client.UserInterface.Controls;
using Robust.Client.UserInterface.CustomControls;
using Robust.Client.UserInterface.XAML;
using Robust.Shared.Localization;
namespace Content.Client.Atmos.Monitor.UI.Widgets;
@@ -25,7 +21,7 @@ public sealed partial class PumpControl : BoxContainer
private OptionButton _pressureCheck => CPressureCheck;
private FloatSpinBox _externalBound => CExternalBound;
private FloatSpinBox _internalBound => CInternalBound;
private Button _copySettings => CCopySettings;
private Button _copySettings => CCopySettings;
public PumpControl(GasVentPumpData data, string address)
{
@@ -86,7 +82,7 @@ public sealed partial class PumpControl : BoxContainer
_data.PressureChecks = (VentPressureBound) args.Id;
PumpDataChanged?.Invoke(_address, _data);
};
_copySettings.OnPressed += _ =>
{
PumpDataCopied?.Invoke(_data);

View File

@@ -1,15 +1,9 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Content.Shared.Atmos;
using Content.Shared.Atmos.Monitor;
using Content.Shared.Atmos.Monitor.Components;
using Content.Shared.Atmos.Piping.Unary.Components;
using Robust.Client.AutoGenerated;
using Robust.Client.UserInterface.Controls;
using Robust.Client.UserInterface.CustomControls;
using Robust.Client.UserInterface.XAML;
using Robust.Shared.Localization;
namespace Content.Client.Atmos.Monitor.UI.Widgets;
@@ -27,7 +21,7 @@ public sealed partial class ScrubberControl : BoxContainer
private OptionButton _pumpDirection => CPumpDirection;
private FloatSpinBox _volumeRate => CVolumeRate;
private CheckBox _wideNet => CWideNet;
private Button _copySettings => CCopySettings;
private Button _copySettings => CCopySettings;
private GridContainer _gases => CGasContainer;
private Dictionary<Gas, Button> _gasControls = new();
@@ -77,7 +71,7 @@ public sealed partial class ScrubberControl : BoxContainer
_data.PumpDirection = (ScrubberPumpDirection) args.Id;
ScrubberDataChanged?.Invoke(_address, _data);
};
_copySettings.OnPressed += _ =>
{
ScrubberDataCopied?.Invoke(_data);

View File

@@ -43,7 +43,8 @@ public sealed partial class SensorInfo : BoxContainer
var label = new RichTextLabel();
var fractionGas = amount / data.TotalMoles;
label.SetMarkup(Loc.GetString("air-alarm-ui-gases-indicator", ("gas", $"{gas}"),
label.SetMarkup(Loc.GetString("air-alarm-ui-gases-indicator",
("gas", $"{gas}"),
("color", AirAlarmWindow.ColorForThreshold(fractionGas, data.GasThresholds[gas])),
("amount", $"{amount:0.####}"),
("percentage", $"{(100 * fractionGas):0.##}")));
@@ -53,9 +54,9 @@ public sealed partial class SensorInfo : BoxContainer
var threshold = data.GasThresholds[gas];
var gasThresholdControl = new ThresholdControl(Loc.GetString($"air-alarm-ui-thresholds-gas-title", ("gas", $"{gas}")), threshold, AtmosMonitorThresholdType.Gas, gas, 100);
gasThresholdControl.Margin = new Thickness(20, 2, 2, 2);
gasThresholdControl.ThresholdDataChanged += (type, threshold, arg3) =>
gasThresholdControl.ThresholdDataChanged += (type, alarmThreshold, arg3) =>
{
OnThresholdUpdate!(_address, type, threshold, arg3);
OnThresholdUpdate!(_address, type, alarmThreshold, arg3);
};
_gasThresholds.Add(gas, gasThresholdControl);
@@ -64,7 +65,8 @@ public sealed partial class SensorInfo : BoxContainer
_pressureThreshold = new ThresholdControl(Loc.GetString("air-alarm-ui-thresholds-pressure-title"), data.PressureThreshold, AtmosMonitorThresholdType.Pressure);
PressureThresholdContainer.AddChild(_pressureThreshold);
_temperatureThreshold = new ThresholdControl(Loc.GetString("air-alarm-ui-thresholds-temperature-title"), data.TemperatureThreshold,
_temperatureThreshold = new ThresholdControl(Loc.GetString("air-alarm-ui-thresholds-temperature-title"),
data.TemperatureThreshold,
AtmosMonitorThresholdType.Temperature);
TemperatureThresholdContainer.AddChild(_temperatureThreshold);
@@ -103,7 +105,8 @@ public sealed partial class SensorInfo : BoxContainer
}
var fractionGas = amount / data.TotalMoles;
label.SetMarkup(Loc.GetString("air-alarm-ui-gases-indicator", ("gas", $"{gas}"),
label.SetMarkup(Loc.GetString("air-alarm-ui-gases-indicator",
("gas", $"{gas}"),
("color", AirAlarmWindow.ColorForThreshold(fractionGas, data.GasThresholds[gas])),
("amount", $"{amount:0.####}"),
("percentage", $"{(100 * fractionGas):0.##}")));

View File

@@ -1,7 +1,4 @@
using Content.Client.Message;
using Content.Shared.Atmos;
using Content.Shared.Atmos.Monitor;
using Content.Shared.Temperature;
using Robust.Client.AutoGenerated;
using Robust.Client.UserInterface.Controls;
using Robust.Client.UserInterface.XAML;

View File

@@ -1,12 +1,8 @@
using System;
using Content.Shared.Atmos;
using Content.Shared.Atmos.Monitor;
using Content.Shared.Atmos.Monitor.Components;
using Robust.Client.AutoGenerated;
using Robust.Client.UserInterface.Controls;
using Robust.Client.UserInterface.CustomControls;
using Robust.Client.UserInterface.XAML;
using Robust.Shared.Localization;
// holy FUCK
// this technically works because some of this you can *not* do in XAML but holy FUCK
@@ -115,29 +111,38 @@ public sealed partial class ThresholdControl : BoxContainer
_enabled.Pressed = !_threshold.Ignore;
}
private String LabelForBound(string boundType) //<todo.eoin Replace this with enums
private string LabelForBound(string boundType) //<todo.eoin Replace this with enums
{
return Loc.GetString($"air-alarm-ui-thresholds-{boundType}");
}
public void UpdateThresholdData(AtmosAlarmThreshold threshold, float currentAmount)
{
threshold.CheckThreshold(currentAmount, out AtmosAlarmType alarm, out AtmosMonitorThresholdBound which);
threshold.CheckThreshold(currentAmount, out var alarm, out var bound);
var upperDangerState = AtmosAlarmType.Normal;
var lowerDangerState = AtmosAlarmType.Normal;
var upperWarningState = AtmosAlarmType.Normal;
var lowerWarningState = AtmosAlarmType.Normal;
if(alarm == AtmosAlarmType.Danger)
switch (alarm)
{
if(which == AtmosMonitorThresholdBound.Upper) upperDangerState = alarm;
else lowerDangerState = alarm;
}
else if(alarm == AtmosAlarmType.Warning)
{
if(which == AtmosMonitorThresholdBound.Upper) upperWarningState = alarm;
else lowerWarningState = alarm;
case AtmosAlarmType.Danger:
{
if (bound == AtmosMonitorThresholdBound.Upper)
upperDangerState = alarm;
else
lowerDangerState = alarm;
break;
}
case AtmosAlarmType.Warning:
{
if (bound == AtmosMonitorThresholdBound.Upper)
upperWarningState = alarm;
else
lowerWarningState = alarm;
break;
}
}
_upperBoundControl.SetValue(threshold.UpperBound.Value);

View File

@@ -1,3 +1,4 @@
using System.Globalization;
using System.Linq;
using System.Numerics;
using Content.Client.Atmos.EntitySystems;
@@ -101,14 +102,9 @@ public sealed class AtmosDebugOverlay : Overlay
else
{
// Red-Green-Blue interpolation
if (interp < 0.5f)
{
res = Color.InterpolateBetween(Color.Red, Color.LimeGreen, interp * 2);
}
else
{
res = Color.InterpolateBetween(Color.LimeGreen, Color.Blue, (interp - 0.5f) * 2);
}
res = interp < 0.5f
? Color.InterpolateBetween(Color.Red, Color.LimeGreen, interp * 2)
: Color.InterpolateBetween(Color.LimeGreen, Color.Blue, (interp - 0.5f) * 2);
}
res = res.WithAlpha(0.75f);
@@ -181,7 +177,10 @@ public sealed class AtmosDebugOverlay : Overlay
handle.DrawCircle(tileCentre, 0.05f, Color.Black);
}
private void CheckAndShowBlockDir(AtmosDebugOverlayData data, DrawingHandleWorld handle, AtmosDirection dir,
private void CheckAndShowBlockDir(
AtmosDebugOverlayData data,
DrawingHandleWorld handle,
AtmosDirection dir,
Vector2 tileCentre)
{
if (!data.BlockDirection.HasFlag(dir))
@@ -243,7 +242,7 @@ public sealed class AtmosDebugOverlay : Overlay
var moles = data.Moles == null
? "No Air"
: data.Moles.Sum().ToString();
: data.Moles.Sum().ToString(CultureInfo.InvariantCulture);
handle.DrawString(_font, pos, $"Moles: {moles}");
pos += offset;
@@ -263,7 +262,12 @@ public sealed class AtmosDebugOverlay : Overlay
private void GetGrids(MapId mapId, Box2Rotated box)
{
_grids.Clear();
_mapManager.FindGridsIntersecting(mapId, box, ref _grids, (EntityUid uid, MapGridComponent grid,
_mapManager.FindGridsIntersecting(
mapId,
box,
ref _grids,
(EntityUid uid,
MapGridComponent grid,
ref List<(Entity<MapGridComponent>, DebugMessage)> state) =>
{
if (_system.TileData.TryGetValue(uid, out var data))

View File

@@ -1,65 +1,63 @@
using Content.Shared.Atmos;
using Content.Shared.Atmos.Components;
using Content.Shared.Atmos.Piping.Binary.Components;
using Content.Shared.IdentityManagement;
using Content.Shared.Localizations;
using JetBrains.Annotations;
using Robust.Client.GameObjects;
using Robust.Client.UserInterface;
namespace Content.Client.Atmos.UI
namespace Content.Client.Atmos.UI;
/// <summary>
/// Initializes a <see cref="GasPressurePumpWindow"/> and updates it when new server messages are received.
/// </summary>
[UsedImplicitly]
public sealed class GasPressurePumpBoundUserInterface : BoundUserInterface
{
/// <summary>
/// Initializes a <see cref="GasPressurePumpWindow"/> and updates it when new server messages are received.
/// </summary>
[UsedImplicitly]
public sealed class GasPressurePumpBoundUserInterface : BoundUserInterface
[ViewVariables]
private const float MaxPressure = Atmospherics.MaxOutputPressure;
[ViewVariables]
private GasPressurePumpWindow? _window;
public GasPressurePumpBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey)
{
[ViewVariables]
private const float MaxPressure = Atmospherics.MaxOutputPressure;
}
[ViewVariables]
private GasPressurePumpWindow? _window;
protected override void Open()
{
base.Open();
public GasPressurePumpBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey)
{
}
_window = this.CreateWindow<GasPressurePumpWindow>();
protected override void Open()
{
base.Open();
_window.ToggleStatusButtonPressed += OnToggleStatusButtonPressed;
_window.PumpOutputPressureChanged += OnPumpOutputPressurePressed;
Update();
}
_window = this.CreateWindow<GasPressurePumpWindow>();
public void Update()
{
if (_window == null)
return;
_window.ToggleStatusButtonPressed += OnToggleStatusButtonPressed;
_window.PumpOutputPressureChanged += OnPumpOutputPressurePressed;
}
_window.Title = Identity.Name(Owner, EntMan);
private void OnToggleStatusButtonPressed()
{
if (_window is null) return;
SendMessage(new GasPressurePumpToggleStatusMessage(_window.PumpStatus));
}
if (!EntMan.TryGetComponent(Owner, out GasPressurePumpComponent? pump))
return;
private void OnPumpOutputPressurePressed(string value)
{
var pressure = UserInputParser.TryFloat(value, out var parsed) ? parsed : 0f;
if (pressure > MaxPressure) pressure = MaxPressure;
_window.SetPumpStatus(pump.Enabled);
_window.MaxPressure = pump.MaxTargetPressure;
_window.SetOutputPressure(pump.TargetPressure);
}
SendMessage(new GasPressurePumpChangeOutputPressureMessage(pressure));
}
private void OnToggleStatusButtonPressed()
{
if (_window is null) return;
SendPredictedMessage(new GasPressurePumpToggleStatusMessage(_window.PumpStatus));
}
/// <summary>
/// Update the UI state based on server-sent info
/// </summary>
/// <param name="state"></param>
protected override void UpdateState(BoundUserInterfaceState state)
{
base.UpdateState(state);
if (_window == null || state is not GasPressurePumpBoundUserInterfaceState cast)
return;
_window.Title = (cast.PumpLabel);
_window.SetPumpStatus(cast.Enabled);
_window.SetOutputPressure(cast.OutputPressure);
}
private void OnPumpOutputPressurePressed(float value)
{
SendPredictedMessage(new GasPressurePumpChangeOutputPressureMessage(value));
}
}

View File

@@ -1,22 +1,18 @@
<DefaultWindow xmlns="https://spacestation14.io"
<controls:FancyWindow xmlns="https://spacestation14.io"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
MinSize="200 120" Title="Pressure Pump">
xmlns:controls="clr-namespace:Content.Client.UserInterface.Controls"
SetSize="340 110" MinSize="340 110" Title="Pressure Pump">
<BoxContainer Orientation="Vertical" Margin="5 5 5 5" SeparationOverride="10">
<BoxContainer Orientation="Horizontal" HorizontalExpand="True">
<Label Text="{Loc comp-gas-pump-ui-pump-status}"/>
<Control MinSize="5 0" />
<Label Text="{Loc comp-gas-pump-ui-pump-status}" Margin="0 0 5 0"/>
<Button Name="ToggleStatusButton"/>
<Control HorizontalExpand="True"/>
<Button HorizontalAlignment="Right" Name="SetOutputPressureButton" Text="{Loc comp-gas-pump-ui-pump-set-rate}" Disabled="True" Margin="0 0 5 0"/>
<Button Name="SetMaxPressureButton" Text="{Loc comp-gas-pump-ui-pump-set-max}" />
</BoxContainer>
<BoxContainer Orientation="Horizontal" HorizontalExpand="True">
<Label Text="{Loc comp-gas-pump-ui-pump-output-pressure}"/>
<Control MinSize="5 0" />
<LineEdit Name="PumpPressureOutputInput" MinSize="70 0" />
<Control MinSize="5 0" />
<Button Name="SetMaxPressureButton" Text="{Loc comp-gas-pump-ui-pump-set-max}" />
<Control MinSize="5 0" />
<Control HorizontalExpand="True" />
<Button Name="SetOutputPressureButton" Text="{Loc comp-gas-pump-ui-pump-set-rate}" HorizontalAlignment="Right" Disabled="True"/>
<FloatSpinBox HorizontalExpand="True" Name="PumpPressureOutputInput" MinSize="70 0" />
</BoxContainer>
</BoxContainer>
</DefaultWindow>
</controls:FancyWindow>

View File

@@ -1,14 +1,8 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using Content.Client.Atmos.EntitySystems;
using Content.Client.UserInterface.Controls;
using Content.Shared.Atmos;
using Content.Shared.Atmos.Prototypes;
using Robust.Client.AutoGenerated;
using Robust.Client.UserInterface.Controls;
using Robust.Client.UserInterface.CustomControls;
using Robust.Client.UserInterface.XAML;
using Robust.Shared.Localization;
namespace Content.Client.Atmos.UI
{
@@ -16,12 +10,25 @@ namespace Content.Client.Atmos.UI
/// Client-side UI used to control a gas pressure pump.
/// </summary>
[GenerateTypedNameReferences]
public sealed partial class GasPressurePumpWindow : DefaultWindow
public sealed partial class GasPressurePumpWindow : FancyWindow
{
public bool PumpStatus = true;
public event Action? ToggleStatusButtonPressed;
public event Action<string>? PumpOutputPressureChanged;
public event Action<float>? PumpOutputPressureChanged;
public float MaxPressure
{
get => _maxPressure;
set
{
_maxPressure = value;
PumpPressureOutputInput.Value = MathF.Min(value, PumpPressureOutputInput.Value);
}
}
private float _maxPressure = Atmospherics.MaxOutputPressure;
public GasPressurePumpWindow()
{
@@ -30,23 +37,25 @@ namespace Content.Client.Atmos.UI
ToggleStatusButton.OnPressed += _ => SetPumpStatus(!PumpStatus);
ToggleStatusButton.OnPressed += _ => ToggleStatusButtonPressed?.Invoke();
PumpPressureOutputInput.OnTextChanged += _ => SetOutputPressureButton.Disabled = false;
PumpPressureOutputInput.OnValueChanged += _ => SetOutputPressureButton.Disabled = false;
SetOutputPressureButton.OnPressed += _ =>
{
PumpOutputPressureChanged?.Invoke(PumpPressureOutputInput.Text ??= "");
PumpPressureOutputInput.Value = Math.Clamp(PumpPressureOutputInput.Value, 0f, _maxPressure);
PumpOutputPressureChanged?.Invoke(PumpPressureOutputInput.Value);
SetOutputPressureButton.Disabled = true;
};
SetMaxPressureButton.OnPressed += _ =>
{
PumpPressureOutputInput.Text = Atmospherics.MaxOutputPressure.ToString(CultureInfo.CurrentCulture);
PumpPressureOutputInput.Value = _maxPressure;
SetOutputPressureButton.Disabled = false;
};
}
public void SetOutputPressure(float pressure)
{
PumpPressureOutputInput.Text = pressure.ToString(CultureInfo.CurrentCulture);
PumpPressureOutputInput.Value = pressure;
}
public void SetPumpStatus(bool enabled)

View File

@@ -43,6 +43,8 @@ public sealed partial class ContentAudioSystem
private void CP14UpdateAmbientLoops()
{
return; //DISABLED UNTIL CLIENT ERROR SPAM FIXED
if (_timing.CurTime <= _nextUpdateTime)
return;

View File

@@ -2,6 +2,7 @@ using System.Numerics;
using Content.Client.Chat.Managers;
using Content.Shared.CCVar;
using Content.Shared.Chat;
using Content.Shared.Speech;
using Robust.Client.Graphics;
using Robust.Client.UserInterface;
using Robust.Client.UserInterface.Controls;
@@ -141,7 +142,12 @@ namespace Content.Client.Chat.UI
Modulate = Color.White;
}
var offset = (-_eyeManager.CurrentEye.Rotation).ToWorldVec() * -EntityVerticalOffset;
var baseOffset = 0f;
if (_entityManager.TryGetComponent<SpeechComponent>(_senderEntity, out var speech))
baseOffset = speech.SpeechBubbleOffset;
var offset = (-_eyeManager.CurrentEye.Rotation).ToWorldVec() * -(EntityVerticalOffset + baseOffset);
var worldPos = _transformSystem.GetWorldPosition(xform) + offset;
var lowerCenter = _eyeManager.WorldToScreen(worldPos) / UIScale;

View File

@@ -12,6 +12,7 @@ using Robust.Shared.Utility;
using System.Linq;
using System.Numerics;
using Content.Shared.FixedPoint;
using Robust.Client.Graphics;
using static Robust.Client.UserInterface.Controls.BoxContainer;
namespace Content.Client.Chemistry.UI
@@ -90,10 +91,40 @@ namespace Content.Client.Chemistry.UI
private ReagentButton MakeReagentButton(string text, ChemMasterReagentAmount amount, ReagentId id, bool isBuffer, string styleClass)
{
var button = new ReagentButton(text, amount, id, isBuffer, styleClass);
button.OnPressed += args
=> OnReagentButtonPressed?.Invoke(args, button);
return button;
var reagentTransferButton = new ReagentButton(text, amount, id, isBuffer, styleClass);
reagentTransferButton.OnPressed += args
=> OnReagentButtonPressed?.Invoke(args, reagentTransferButton);
return reagentTransferButton;
}
/// <summary>
/// Conditionally generates a set of reagent buttons based on the supplied boolean argument.
/// This was moved outside of BuildReagentRow to facilitate conditional logic, stops indentation depth getting out of hand as well.
/// </summary>
private List<ReagentButton> CreateReagentTransferButtons(ReagentId reagent, bool isBuffer, bool addReagentButtons)
{
if (!addReagentButtons)
return new List<ReagentButton>(); // Return an empty list if reagentTransferButton creation is disabled.
var buttonConfigs = new (string text, ChemMasterReagentAmount amount, string styleClass)[]
{
("1", ChemMasterReagentAmount.U1, StyleBase.ButtonOpenBoth),
("5", ChemMasterReagentAmount.U5, StyleBase.ButtonOpenBoth),
("10", ChemMasterReagentAmount.U10, StyleBase.ButtonOpenBoth),
("25", ChemMasterReagentAmount.U25, StyleBase.ButtonOpenBoth),
("50", ChemMasterReagentAmount.U50, StyleBase.ButtonOpenBoth),
("100", ChemMasterReagentAmount.U100, StyleBase.ButtonOpenBoth),
(Loc.GetString("chem-master-window-buffer-all-amount"), ChemMasterReagentAmount.All, StyleBase.ButtonOpenLeft),
};
var buttons = new List<ReagentButton>();
foreach (var (text, amount, styleClass) in buttonConfigs)
{
var reagentTransferButton = MakeReagentButton(text, amount, reagent, isBuffer, styleClass);
buttons.Add(reagentTransferButton);
}
return buttons;
}
/// <summary>
@@ -102,25 +133,36 @@ namespace Content.Client.Chemistry.UI
/// <param name="state">State data sent by the server.</param>
public void UpdateState(BoundUserInterfaceState state)
{
var castState = (ChemMasterBoundUserInterfaceState) state;
var castState = (ChemMasterBoundUserInterfaceState)state;
if (castState.UpdateLabel)
LabelLine = GenerateLabel(castState);
// Ensure the Panel Info is updated, including UI elements for Buffer Volume, Output Container and so on
UpdatePanelInfo(castState);
var output = castState.OutputContainerInfo;
BufferCurrentVolume.Text = $" {castState.BufferCurrentVolume?.Int() ?? 0}u";
InputEjectButton.Disabled = castState.InputContainerInfo is null;
OutputEjectButton.Disabled = output is null;
CreateBottleButton.Disabled = output?.Reagents == null;
CreatePillButton.Disabled = output?.Entities == null;
OutputEjectButton.Disabled = castState.OutputContainerInfo is null;
CreateBottleButton.Disabled = castState.OutputContainerInfo?.Reagents == null;
CreatePillButton.Disabled = castState.OutputContainerInfo?.Entities == null;
UpdateDosageFields(castState);
}
//assign default values for pill and bottle fields.
private void UpdateDosageFields(ChemMasterBoundUserInterfaceState castState)
{
var output = castState.OutputContainerInfo;
var remainingCapacity = output is null ? 0 : (output.MaxVolume - output.CurrentVolume).Int();
var holdsReagents = output?.Reagents != null;
var pillNumberMax = holdsReagents ? 0 : remainingCapacity;
var bottleAmountMax = holdsReagents ? remainingCapacity : 0;
var bufferVolume = castState.BufferCurrentVolume?.Int() ?? 0;
PillDosage.Value = (int)Math.Min(bufferVolume, castState.PillDosageLimit);
PillTypeButtons[castState.SelectedPillType].Pressed = true;
PillNumber.IsValid = x => x >= 0 && x <= pillNumberMax;
PillDosage.IsValid = x => x > 0 && x <= castState.PillDosageLimit;
@@ -130,8 +172,19 @@ namespace Content.Client.Chemistry.UI
PillNumber.Value = pillNumberMax;
if (BottleDosage.Value > bottleAmountMax)
BottleDosage.Value = bottleAmountMax;
}
// Avoid division by zero
if (PillDosage.Value > 0)
{
PillNumber.Value = Math.Min(bufferVolume / PillDosage.Value, pillNumberMax);
}
else
{
PillNumber.Value = 0;
}
BottleDosage.Value = Math.Min(bottleAmountMax, bufferVolume);
}
/// <summary>
/// Generate a product label based on reagents in the buffer.
/// </summary>
@@ -178,46 +231,23 @@ namespace Content.Client.Chemistry.UI
var bufferVol = new Label
{
Text = $"{state.BufferCurrentVolume}u",
StyleClasses = {StyleNano.StyleClassLabelSecondaryColor}
StyleClasses = { StyleNano.StyleClassLabelSecondaryColor }
};
bufferHBox.AddChild(bufferVol);
// initialises rowCount to allow for striped rows
var rowCount = 0;
foreach (var (reagent, quantity) in state.BufferReagents)
{
// Try to get the prototype for the given reagent. This gives us its name.
_prototypeManager.TryIndex(reagent.Prototype, out ReagentPrototype? proto);
var reagentId = reagent;
_prototypeManager.TryIndex(reagentId.Prototype, out ReagentPrototype? proto);
var name = proto?.LocalizedName ?? Loc.GetString("chem-master-window-unknown-reagent-text");
if (proto != null)
{
BufferInfo.Children.Add(new BoxContainer
{
Orientation = LayoutOrientation.Horizontal,
Children =
{
new Label {Text = $"{name}: "},
new Label
{
Text = $"{quantity}u",
StyleClasses = {StyleNano.StyleClassLabelSecondaryColor}
},
// Padding
new Control {HorizontalExpand = true},
MakeReagentButton("1", ChemMasterReagentAmount.U1, reagent, true, StyleBase.ButtonOpenRight),
MakeReagentButton("5", ChemMasterReagentAmount.U5, reagent, true, StyleBase.ButtonOpenBoth),
MakeReagentButton("10", ChemMasterReagentAmount.U10, reagent, true, StyleBase.ButtonOpenBoth),
MakeReagentButton("25", ChemMasterReagentAmount.U25, reagent, true, StyleBase.ButtonOpenBoth),
MakeReagentButton("50", ChemMasterReagentAmount.U50, reagent, true, StyleBase.ButtonOpenBoth),
MakeReagentButton("100", ChemMasterReagentAmount.U100, reagent, true, StyleBase.ButtonOpenBoth),
MakeReagentButton(Loc.GetString("chem-master-window-buffer-all-amount"), ChemMasterReagentAmount.All, reagent, true, StyleBase.ButtonOpenLeft),
}
});
}
var reagentColor = proto?.SubstanceColor ?? default(Color);
BufferInfo.Children.Add(BuildReagentRow(reagentColor, rowCount++, name, reagentId, quantity, true, true));
}
}
private void BuildContainerUI(Control control, ContainerInfo? info, bool addReagentButtons)
{
control.Children.Clear();
@@ -228,104 +258,111 @@ namespace Content.Client.Chemistry.UI
{
Text = Loc.GetString("chem-master-window-no-container-loaded-text")
});
return;
}
else
// Name of the container and its fill status (Ex: 44/100u)
control.Children.Add(new BoxContainer
{
// Name of the container and its fill status (Ex: 44/100u)
control.Children.Add(new BoxContainer
Orientation = LayoutOrientation.Horizontal,
Children =
{
Orientation = LayoutOrientation.Horizontal,
Children =
new Label { Text = $"{info.DisplayName}: " },
new Label
{
new Label {Text = $"{info.DisplayName}: "},
new Label
{
Text = $"{info.CurrentVolume}/{info.MaxVolume}",
StyleClasses = {StyleNano.StyleClassLabelSecondaryColor}
}
Text = $"{info.CurrentVolume}/{info.MaxVolume}",
StyleClasses = { StyleNano.StyleClassLabelSecondaryColor }
}
});
IEnumerable<(string Name, ReagentId Id, FixedPoint2 Quantity)> contents;
if (info.Entities != null)
{
contents = info.Entities.Select(x => (x.Id, default(ReagentId), x.Quantity));
}
else if (info.Reagents != null)
});
// Initialises rowCount to allow for striped rows
var rowCount = 0;
// Handle entities if they are not null
if (info.Entities != null)
{
foreach (var (id, quantity) in info.Entities.Select(x => (x.Id, x.Quantity)))
{
contents = info.Reagents.Select(x =>
{
_prototypeManager.TryIndex(x.Reagent.Prototype, out ReagentPrototype? proto);
var name = proto?.LocalizedName
?? Loc.GetString("chem-master-window-unknown-reagent-text");
return (name, Id: x.Reagent, x.Quantity);
})
.OrderBy(r => r.Item1);
control.Children.Add(BuildReagentRow(default(Color), rowCount++, id, default(ReagentId), quantity, false, addReagentButtons));
}
else
}
// Handle reagents if they are not null
if (info.Reagents != null)
{
foreach (var reagent in info.Reagents)
{
return;
_prototypeManager.TryIndex(reagent.Reagent.Prototype, out ReagentPrototype? proto);
var name = proto?.LocalizedName ?? Loc.GetString("chem-master-window-unknown-reagent-text");
var reagentColor = proto?.SubstanceColor ?? default(Color);
control.Children.Add(BuildReagentRow(reagentColor, rowCount++, name, reagent.Reagent, reagent.Quantity, false, addReagentButtons));
}
foreach (var (name, id, quantity) in contents)
{
var inner = new BoxContainer
{
Orientation = LayoutOrientation.Horizontal,
Children =
{
new Label { Text = $"{name}: " },
new Label
{
Text = $"{quantity}u",
StyleClasses = { StyleNano.StyleClassLabelSecondaryColor },
}
}
};
if (addReagentButtons)
{
var cs = inner.Children;
// Padding
cs.Add(new Control { HorizontalExpand = true });
cs.Add(MakeReagentButton(
"1", ChemMasterReagentAmount.U1, id, false, StyleBase.ButtonOpenRight));
cs.Add(MakeReagentButton(
"5", ChemMasterReagentAmount.U5, id, false, StyleBase.ButtonOpenBoth));
cs.Add(MakeReagentButton(
"10", ChemMasterReagentAmount.U10, id, false, StyleBase.ButtonOpenBoth));
cs.Add(MakeReagentButton(
"25", ChemMasterReagentAmount.U25, id, false, StyleBase.ButtonOpenBoth));
cs.Add(MakeReagentButton(
"50", ChemMasterReagentAmount.U50, id, false, StyleBase.ButtonOpenBoth));
cs.Add(MakeReagentButton(
"100", ChemMasterReagentAmount.U100, id, false, StyleBase.ButtonOpenBoth));
cs.Add(MakeReagentButton(
Loc.GetString("chem-master-window-buffer-all-amount"),
ChemMasterReagentAmount.All, id, false, StyleBase.ButtonOpenLeft));
}
control.Children.Add(inner);
}
}
}
public String LabelLine
/// <summary>
/// Take reagent/entity data and present rows, labels, and buttons appropriately. todo sprites?
/// </summary>
private Control BuildReagentRow(Color reagentColor, int rowCount, string name, ReagentId reagent, FixedPoint2 quantity, bool isBuffer, bool addReagentButtons)
{
get
//Colors rows and sets fallback for reagentcolor to the same as background, this will hide colorPanel for entities hopefully
var rowColor1 = Color.FromHex("#1B1B1E");
var rowColor2 = Color.FromHex("#202025");
var currentRowColor = (rowCount % 2 == 1) ? rowColor1 : rowColor2;
if ((reagentColor == default(Color))|(!addReagentButtons))
{
return LabelLineEdit.Text;
reagentColor = currentRowColor;
}
set
//this calls the separated button builder, and stores the return to render after labels
var reagentButtonConstructors = CreateReagentTransferButtons(reagent, isBuffer, addReagentButtons);
// Create the row layout with the color panel
var rowContainer = new BoxContainer
{
LabelLineEdit.Text = value;
Orientation = LayoutOrientation.Horizontal,
Children =
{
new Label { Text = $"{name}: " },
new Label
{
Text = $"{quantity}u",
StyleClasses = { StyleNano.StyleClassLabelSecondaryColor }
},
// Padding
new Control { HorizontalExpand = true },
// Colored panels for reagents
new PanelContainer
{
Name = "colorPanel",
VerticalExpand = true,
MinWidth = 4,
PanelOverride = new StyleBoxFlat
{
BackgroundColor = reagentColor
},
Margin = new Thickness(0, 1)
}
}
};
// Add the reagent buttons after the color panel
foreach (var reagentTransferButton in reagentButtonConstructors)
{
rowContainer.AddChild(reagentTransferButton);
}
//Apply panencontainer to allow for striped rows
return new PanelContainer
{
PanelOverride = new StyleBoxFlat(currentRowColor),
Children = { rowContainer }
};
}
public string LabelLine
{
get => LabelLineEdit.Text;
set => LabelLineEdit.Text = value;
}
}

View File

@@ -30,7 +30,7 @@ public sealed class ClientClothingSystem : ClothingSystem
/// For some context, im currently refactoring inventory. Part of that is slots not being indexed by a massive enum anymore, but by strings.
/// Problem here: Every rsi-state is using the old enum-names in their state. I already used the new inventoryslots ALOT. tldr: its this or another week of renaming files.
/// </summary>
private static readonly Dictionary<string, string> TemporarySlotMap = new()
public static readonly Dictionary<string, string> TemporarySlotMap = new() //CP14 Public
{
{"head", "HELMET"},
{"eyes", "EYES"},
@@ -65,6 +65,7 @@ public sealed class ClientClothingSystem : ClothingSystem
base.Initialize();
SubscribeLocalEvent<ClothingComponent, GetEquipmentVisualsEvent>(OnGetVisuals);
SubscribeLocalEvent<ClothingComponent, InventoryTemplateUpdated>(OnInventoryTemplateUpdated);
SubscribeLocalEvent<InventoryComponent, VisualsChangedEvent>(OnVisualsChanged);
SubscribeLocalEvent<SpriteComponent, DidUnequipEvent>(OnDidUnequip);
@@ -77,11 +78,7 @@ public sealed class ClientClothingSystem : ClothingSystem
if (args.Sprite == null)
return;
var enumerator = _inventorySystem.GetSlotEnumerator((uid, component));
while (enumerator.NextItem(out var item, out var slot))
{
RenderEquipment(uid, item, slot.Name, component);
}
UpdateAllSlots(uid, component);
// No clothing equipped -> make sure the layer is hidden, though this should already be handled by on-unequip.
if (args.Sprite.LayerMapTryGet(HumanoidVisualLayers.StencilMask, out var layer))
@@ -91,6 +88,23 @@ public sealed class ClientClothingSystem : ClothingSystem
}
}
private void OnInventoryTemplateUpdated(Entity<ClothingComponent> ent, ref InventoryTemplateUpdated args)
{
UpdateAllSlots(ent.Owner, clothing: ent.Comp);
}
private void UpdateAllSlots(
EntityUid uid,
InventoryComponent? inventoryComponent = null,
ClothingComponent? clothing = null)
{
var enumerator = _inventorySystem.GetSlotEnumerator((uid, inventoryComponent));
while (enumerator.NextItem(out var item, out var slot))
{
RenderEquipment(uid, item, slot.Name, inventoryComponent, clothingComponent: clothing);
}
}
private void OnGetVisuals(EntityUid uid, ClothingComponent item, GetEquipmentVisualsEvent args)
{
if (!TryComp(args.Equipee, out InventoryComponent? inventory))

View File

@@ -7,7 +7,7 @@ using Robust.Client.GameObjects;
namespace Content.Client.Clothing;
public sealed class FlippableClothingVisualizerSystem : VisualizerSystem<FlippableClothingVisualsComponent>
public sealed class FlippableClothingVisualizerSystem : VisualizerSystem<FlippableClothingVisualsComponent>
{
[Dependency] private readonly SharedItemSystem _itemSys = default!;

View File

@@ -1,6 +1,8 @@
using Content.Shared.Damage.Prototypes;
using Content.Shared.Overlays;
using Robust.Client.Player;
using Robust.Shared.Console;
using Robust.Shared.Prototypes;
using System.Linq;
namespace Content.Client.Commands;
@@ -34,7 +36,7 @@ public sealed class ShowHealthBarsCommand : LocalizedCommands
{
var showHealthBarsComponent = new ShowHealthBarsComponent
{
DamageContainers = args.ToList(),
DamageContainers = args.Select(arg => new ProtoId<DamageContainerPrototype>(arg)).ToList(),
HealthStatusIcon = null,
NetSyncEnabled = false
};

View File

@@ -1,17 +1,62 @@
<controls:FancyWindow xmlns="https://spacestation14.io"
xmlns:controls="clr-namespace:Content.Client.UserInterface.Controls"
Title="{Loc 'comms-console-menu-title'}"
MinSize="400 225">
<BoxContainer Orientation="Vertical" HorizontalExpand="True" VerticalExpand="True" Margin="5">
<TextEdit Name="MessageInput" HorizontalExpand="True" VerticalExpand="True" Margin="0 0 0 5" MinHeight="100" />
<Button Name="AnnounceButton" Text="{Loc 'comms-console-menu-announcement-button'}" ToolTip="{Loc 'comms-console-menu-announcement-button-tooltip'}" StyleClasses="OpenLeft" Access="Public" />
<Button Name="BroadcastButton" Text="{Loc 'comms-console-menu-broadcast-button'}" ToolTip="{Loc 'comms-console-menu-broadcast-button-tooltip'}" StyleClasses="OpenLeft" Access="Public" />
MinSize="400 300">
<OptionButton Name="AlertLevelButton" ToolTip="{Loc 'comms-console-menu-alert-level-button-tooltip'}" StyleClasses="OpenRight" Access="Public" />
<!-- Main Container -->
<BoxContainer Orientation="Vertical"
HorizontalExpand="False"
VerticalExpand="True"
Margin="6 6 6 5">
<Control MinSize="10 10" />
<TextEdit Name="MessageInput"
VerticalExpand="True"
HorizontalExpand="True"
VerticalAlignment="Stretch"
HorizontalAlignment="Stretch"
MinHeight="100"/>
<RichTextLabel Name="CountdownLabel" VerticalExpand="True" />
<Button Name="EmergencyShuttleButton" Text="Placeholder Text" ToolTip="{Loc 'comms-console-menu-emergency-shuttle-button-tooltip'}" Access="Public" />
<!-- ButtonsPart -->
<BoxContainer Orientation="Vertical"
VerticalAlignment="Bottom"
SeparationOverride="4">
<!-- AnnouncePart -->
<BoxContainer Orientation="Vertical"
Margin="0 2">
<Button Name="AnnounceButton"
Access="Public"
Text="{Loc 'comms-console-menu-announcement-button'}"
ToolTip="{Loc 'comms-console-menu-announcement-button-tooltip'}"
StyleClasses="OpenLeft"
Margin="0 0 1 0"
Disabled="True"/>
<Button Name="BroadcastButton"
Access="Public"
Text="{Loc 'comms-console-menu-broadcast-button'}"
ToolTip="{Loc 'comms-console-menu-broadcast-button-tooltip'}"
StyleClasses="OpenBoth"/>
<OptionButton Name="AlertLevelButton"
Access="Public"
ToolTip="{Loc 'comms-console-menu-alert-level-button-tooltip'}"
StyleClasses="OpenRight"/>
</BoxContainer>
<!-- EmergencyPart -->
<BoxContainer Orientation="Vertical"
SeparationOverride="6">
<RichTextLabel Name="CountdownLabel"/>
<Button Name="EmergencyShuttleButton"
Access="Public"
Text="Placeholder Text"
ToolTip="{Loc 'comms-console-menu-emergency-shuttle-button-tooltip'}"/>
</BoxContainer>
</BoxContainer>
</BoxContainer>
</controls:FancyWindow>

View File

@@ -1,15 +1,20 @@
<DefaultWindow xmlns="https://spacestation14.io">
<BoxContainer Orientation="Horizontal" HorizontalExpand="True">
<BoxContainer Orientation="Vertical" HorizontalExpand="True" SizeFlagsStretchRatio="0.4" Margin="0 0 5 0">
<BoxContainer Orientation="Vertical" MinWidth="243" Margin="0 0 5 0">
<BoxContainer Orientation="Horizontal" HorizontalExpand="True" Margin="0 0 0 5">
<LineEdit Name="SearchBar" PlaceHolder="Search" HorizontalExpand="True"/>
<OptionButton Name="OptionCategories" Access="Public" MinSize="130 0"/>
</BoxContainer>
<ItemList Name="Recipes" Access="Public" SelectMode="Single" VerticalExpand="True"/>
<ScrollContainer Name="RecipesGridScrollContainer" VerticalExpand="True" Access="Public" Visible="False">
<GridContainer Name="RecipesGrid" Columns="5" Access="Public"/>
</ScrollContainer>
</BoxContainer>
<BoxContainer Orientation="Vertical" HorizontalExpand="True" SizeFlagsStretchRatio="0.6">
<Button Name="FavoriteButton" Visible="false" HorizontalExpand="False"
HorizontalAlignment="Right" Margin="0 0 0 15"/>
<BoxContainer Orientation="Vertical" HorizontalExpand="True">
<BoxContainer Orientation="Horizontal">
<Button Name="MenuGridViewButton" ToggleMode="True" Text="{Loc construction-menu-grid-view}"/>
<Button Name="FavoriteButton" Visible="false"/>
</BoxContainer>
<Control>
<BoxContainer Orientation="Vertical" HorizontalExpand="True" Margin="0 0 0 5">
<BoxContainer Orientation="Horizontal" Align="Center">

View File

@@ -25,11 +25,16 @@ namespace Content.Client.Construction.UI
OptionButton OptionCategories { get; }
bool EraseButtonPressed { get; set; }
bool GridViewButtonPressed { get; set; }
bool BuildButtonPressed { get; set; }
ItemList Recipes { get; }
ItemList RecipeStepList { get; }
ScrollContainer RecipesGridScrollContainer { get; }
GridContainer RecipesGrid { get; }
event EventHandler<(string search, string catagory)> PopulateRecipes;
event EventHandler<ItemList.Item?> RecipeSelected;
event EventHandler RecipeFavorited;
@@ -72,9 +77,16 @@ namespace Content.Client.Construction.UI
set => EraseButton.Pressed = value;
}
public bool GridViewButtonPressed
{
get => MenuGridViewButton.Pressed;
set => MenuGridViewButton.Pressed = value;
}
public ConstructionMenu()
{
SetSize = MinSize = new Vector2(720, 320);
SetSize = new Vector2(560, 450);
MinSize = new Vector2(560, 320);
IoCManager.InjectDependencies(this);
RobustXamlLoader.Load(this);
@@ -102,6 +114,9 @@ namespace Content.Client.Construction.UI
EraseButton.OnToggled += args => EraseButtonToggled?.Invoke(this, args.Pressed);
FavoriteButton.OnPressed += args => RecipeFavorited?.Invoke(this, EventArgs.Empty);
MenuGridViewButton.OnPressed += _ =>
PopulateRecipes?.Invoke(this, (SearchBar.Text, Categories[OptionCategories.SelectedId]));
}
public event EventHandler? ClearAllGhosts;

View File

@@ -1,7 +1,8 @@
using System.Linq;
using System.Numerics;
using Content.Client.Stylesheets;
using Content.Client.UserInterface.Systems.MenuBar.Widgets;
using Content.Shared.Construction.Prototypes;
using Content.Shared.Tag;
using Content.Shared.Whitelist;
using Robust.Client.GameObjects;
using Robust.Client.Graphics;
@@ -11,7 +12,6 @@ using Robust.Client.UserInterface;
using Robust.Client.UserInterface.Controls;
using Robust.Client.Utility;
using Robust.Shared.Enums;
using Robust.Shared.Graphics;
using Robust.Shared.Prototypes;
using static Robust.Client.UserInterface.Controls.BaseButton;
@@ -33,10 +33,12 @@ namespace Content.Client.Construction.UI
private readonly IConstructionMenuView _constructionView;
private readonly EntityWhitelistSystem _whitelistSystem;
private readonly SpriteSystem _spriteSystem;
private ConstructionSystem? _constructionSystem;
private ConstructionPrototype? _selected;
private List<ConstructionPrototype> _favoritedRecipes = [];
private Dictionary<string, TextureButton> _recipeButtons = new();
private string _selectedCategory = string.Empty;
private string _favoriteCatName = "construction-category-favorites";
private string _forAllCategoryName = "construction-category-all";
@@ -85,6 +87,7 @@ namespace Content.Client.Construction.UI
IoCManager.InjectDependencies(this);
_constructionView = new ConstructionMenu();
_whitelistSystem = _entManager.System<EntityWhitelistSystem>();
_spriteSystem = _entManager.System<SpriteSystem>();
// This is required so that if we load after the system is initialized, we can bind to it immediately
if (_systemManager.TryGetEntitySystem<ConstructionSystem>(out var constructionSystem))
@@ -150,12 +153,24 @@ namespace Content.Client.Construction.UI
PopulateInfo(_selected);
}
private void OnGridViewRecipeSelected(object? sender, ConstructionPrototype? recipe)
{
if (recipe is null)
{
_selected = null;
_constructionView.ClearRecipeInfo();
return;
}
_selected = recipe;
if (_placementManager.IsActive && !_placementManager.Eraser) UpdateGhostPlacement();
PopulateInfo(_selected);
}
private void OnViewPopulateRecipes(object? sender, (string search, string catagory) args)
{
var (search, category) = args;
var recipesList = _constructionView.Recipes;
recipesList.Clear();
var recipes = new List<ConstructionPrototype>();
var isEmptyCategory = string.IsNullOrEmpty(category) || category == _forAllCategoryName;
@@ -170,7 +185,7 @@ namespace Content.Client.Construction.UI
if (recipe.Hide)
continue;
if (!recipe.CrystallPunkAllowed) //CrystallPunk clearing recipes
if (!recipe.CrystallPunkAllowed) //CrystallEdge clearing recipes
continue;
if (_playerManager.LocalSession == null
@@ -204,12 +219,73 @@ namespace Content.Client.Construction.UI
recipes.Sort((a, b) => string.Compare(a.Name, b.Name, StringComparison.InvariantCulture));
foreach (var recipe in recipes)
{
recipesList.Add(GetItem(recipe, recipesList));
}
var recipesList = _constructionView.Recipes;
recipesList.Clear();
// There is apparently no way to set which
var recipesGrid = _constructionView.RecipesGrid;
recipesGrid.RemoveAllChildren();
_constructionView.RecipesGridScrollContainer.Visible = _constructionView.GridViewButtonPressed;
_constructionView.Recipes.Visible = !_constructionView.GridViewButtonPressed;
if (_constructionView.GridViewButtonPressed)
{
foreach (var recipe in recipes)
{
var itemButton = new TextureButton
{
TextureNormal = _spriteSystem.Frame0(recipe.Icon),
VerticalAlignment = Control.VAlignment.Center,
Name = recipe.Name,
ToolTip = recipe.Name,
Scale = new Vector2(1.35f),
ToggleMode = true,
};
var itemButtonPanelContainer = new PanelContainer
{
PanelOverride = new StyleBoxFlat { BackgroundColor = StyleNano.ButtonColorDefault },
Children = { itemButton },
};
itemButton.OnToggled += buttonToggledEventArgs =>
{
SelectGridButton(itemButton, buttonToggledEventArgs.Pressed);
if (buttonToggledEventArgs.Pressed &&
_selected != null &&
_recipeButtons.TryGetValue(_selected.Name, out var oldButton))
{
oldButton.Pressed = false;
SelectGridButton(oldButton, false);
}
OnGridViewRecipeSelected(this, buttonToggledEventArgs.Pressed ? recipe : null);
};
recipesGrid.AddChild(itemButtonPanelContainer);
_recipeButtons[recipe.Name] = itemButton;
var isCurrentButtonSelected = _selected == recipe;
itemButton.Pressed = isCurrentButtonSelected;
SelectGridButton(itemButton, isCurrentButtonSelected);
}
}
else
{
foreach (var recipe in recipes)
{
recipesList.Add(GetItem(recipe, recipesList));
}
}
}
private void SelectGridButton(TextureButton button, bool select)
{
if (button.Parent is not PanelContainer buttonPanel)
return;
button.Modulate = select ? Color.Green : Color.White;
var buttonColor = select ? StyleNano.ButtonColorDefault : Color.Transparent;
buttonPanel.PanelOverride = new StyleBoxFlat { BackgroundColor = buttonColor };
}
private void PopulateCategories(string? selectCategory = null)
@@ -260,11 +336,10 @@ namespace Content.Client.Construction.UI
private void PopulateInfo(ConstructionPrototype prototype)
{
var spriteSys = _systemManager.GetEntitySystem<SpriteSystem>();
_constructionView.ClearRecipeInfo();
_constructionView.SetRecipeInfo(
prototype.Name, prototype.Description, spriteSys.Frame0(prototype.Icon),
prototype.Name, prototype.Description, _spriteSystem.Frame0(prototype.Icon),
prototype.Type != ConstructionType.Item,
!_favoritedRecipes.Contains(prototype));
@@ -277,7 +352,6 @@ namespace Content.Client.Construction.UI
if (_constructionSystem?.GetGuide(prototype) is not { } guide)
return;
var spriteSys = _systemManager.GetEntitySystem<SpriteSystem>();
foreach (var entry in guide.Entries)
{
@@ -293,20 +367,20 @@ namespace Content.Client.Construction.UI
// The padding needs to be applied regardless of text length... (See PadLeft documentation)
text = text.PadLeft(text.Length + entry.Padding);
var icon = entry.Icon != null ? spriteSys.Frame0(entry.Icon) : Texture.Transparent;
var icon = entry.Icon != null ? _spriteSystem.Frame0(entry.Icon) : Texture.Transparent;
stepList.AddItem(text, icon, false);
}
}
private static ItemList.Item GetItem(ConstructionPrototype recipe, ItemList itemList)
private ItemList.Item GetItem(ConstructionPrototype recipe, ItemList itemList)
{
return new(itemList)
{
Metadata = recipe,
Text = recipe.Name,
Icon = recipe.Icon.Frame0(),
Icon = _spriteSystem.Frame0(recipe.Icon),
TooltipEnabled = true,
TooltipText = recipe.Description
TooltipText = recipe.Description,
};
}

View File

@@ -31,7 +31,7 @@ namespace Content.Client.Crayon.UI
private void PopulateCrayons()
{
var crayonDecals = _protoManager.EnumeratePrototypes<DecalPrototype>().Where(x => x.Tags.Contains("crayon"));
_menu?.Populate(crayonDecals);
_menu?.Populate(crayonDecals.ToList());
}
public override void OnProtoReload(PrototypesReloadedEventArgs args)
@@ -44,6 +44,16 @@ namespace Content.Client.Crayon.UI
PopulateCrayons();
}
protected override void ReceiveMessage(BoundUserInterfaceMessage message)
{
base.ReceiveMessage(message);
if (_menu is null || message is not CrayonUsedMessage crayonMessage)
return;
_menu.AdvanceState(crayonMessage.DrawnDecal);
}
protected override void UpdateState(BoundUserInterfaceState state)
{
base.UpdateState(state);

View File

@@ -1,14 +1,13 @@
<DefaultWindow xmlns="https://spacestation14.io"
Title="{Loc 'crayon-window-title'}"
MinSize="250 300"
SetSize="250 300">
MinSize="450 500"
SetSize="450 500">
<BoxContainer Orientation="Vertical">
<ColorSelectorSliders Name="ColorSelector" Visible="False" />
<LineEdit Name="Search" />
<LineEdit Name="Search" Margin="0 0 0 8" PlaceHolder="{Loc 'crayon-window-placeholder'}" />
<ScrollContainer VerticalExpand="True">
<GridContainer Name="Grid" Columns="6">
<!-- Crayon decals get added here by code -->
</GridContainer>
<BoxContainer Name="Grids" Orientation="Vertical">
</BoxContainer>
</ScrollContainer>
</BoxContainer>
</DefaultWindow>

View File

@@ -1,8 +1,10 @@
using System.Collections.Generic;
using System.Linq;
using Content.Client.Stylesheets;
using Content.Shared.Crayon;
using Content.Shared.Decals;
using Robust.Client.AutoGenerated;
using Robust.Client.GameObjects;
using Robust.Client.Graphics;
using Robust.Client.UserInterface.Controls;
using Robust.Client.UserInterface.CustomControls;
@@ -18,7 +20,12 @@ namespace Content.Client.Crayon.UI
[GenerateTypedNameReferences]
public sealed partial class CrayonWindow : DefaultWindow
{
private Dictionary<string, Texture>? _decals;
[Dependency] private readonly IEntitySystemManager _entitySystem = default!;
private readonly SpriteSystem _spriteSystem = default!;
private Dictionary<string, List<(string Name, Texture Texture)>>? _decals;
private List<string>? _allDecals;
private string? _autoSelected;
private string? _selected;
private Color _color;
@@ -28,8 +35,10 @@ namespace Content.Client.Crayon.UI
public CrayonWindow()
{
RobustXamlLoader.Load(this);
IoCManager.InjectDependencies(this);
_spriteSystem = _entitySystem.GetEntitySystem<SpriteSystem>();
Search.OnTextChanged += _ => RefreshList();
Search.OnTextChanged += SearchChanged;
ColorSelector.OnColorChanged += SelectColor;
}
@@ -44,51 +53,94 @@ namespace Content.Client.Crayon.UI
private void RefreshList()
{
// Clear
Grid.DisposeAllChildren();
if (_decals == null)
Grids.DisposeAllChildren();
if (_decals == null || _allDecals == null)
return;
var filter = Search.Text;
foreach (var (decal, tex) in _decals)
var comma = filter.IndexOf(',');
var first = (comma == -1 ? filter : filter[..comma]).Trim();
var names = _decals.Keys.ToList();
names.Sort((a, b) => a == "random" ? 1 : b == "random" ? -1 : a.CompareTo(b));
if (_autoSelected != null && first != _autoSelected && _allDecals.Contains(first))
{
if (!decal.Contains(filter))
_selected = first;
_autoSelected = _selected;
OnSelected?.Invoke(_selected);
}
foreach (var categoryName in names)
{
var locName = Loc.GetString("crayon-category-" + categoryName);
var category = _decals[categoryName].Where(d => locName.Contains(first) || d.Name.Contains(first)).ToList();
if (category.Count == 0)
continue;
var button = new TextureButton()
var label = new Label
{
TextureNormal = tex,
Name = decal,
ToolTip = decal,
Modulate = _color,
Text = locName
};
button.OnPressed += ButtonOnPressed;
if (_selected == decal)
var grid = new GridContainer
{
var panelContainer = new PanelContainer()
Columns = 6,
Margin = new Thickness(0, 0, 0, 16)
};
Grids.AddChild(label);
Grids.AddChild(grid);
foreach (var (name, texture) in category)
{
var button = new TextureButton()
{
PanelOverride = new StyleBoxFlat()
{
BackgroundColor = StyleNano.ButtonColorDefault,
},
Children =
{
button,
},
TextureNormal = texture,
Name = name,
ToolTip = name,
Modulate = _color,
Scale = new System.Numerics.Vector2(2, 2)
};
Grid.AddChild(panelContainer);
}
else
{
Grid.AddChild(button);
button.OnPressed += ButtonOnPressed;
if (_selected == name)
{
var panelContainer = new PanelContainer()
{
PanelOverride = new StyleBoxFlat()
{
BackgroundColor = StyleNano.ButtonColorDefault,
},
Children =
{
button,
},
};
grid.AddChild(panelContainer);
}
else
{
grid.AddChild(button);
}
}
}
}
private void SearchChanged(LineEdit.LineEditEventArgs obj)
{
_autoSelected = ""; // Placeholder to kick off the auto-select in refreshlist()
RefreshList();
}
private void ButtonOnPressed(ButtonEventArgs obj)
{
if (obj.Button.Name == null) return;
_selected = obj.Button.Name;
_autoSelected = null;
OnSelected?.Invoke(_selected);
RefreshList();
}
@@ -107,12 +159,38 @@ namespace Content.Client.Crayon.UI
RefreshList();
}
public void Populate(IEnumerable<DecalPrototype> prototypes)
public void AdvanceState(string drawnDecal)
{
_decals = new Dictionary<string, Texture>();
var filter = Search.Text;
if (!filter.Contains(',') || !filter.Contains(drawnDecal))
return;
var first = filter[..filter.IndexOf(',')].Trim();
if (first.Equals(drawnDecal, StringComparison.InvariantCultureIgnoreCase))
{
Search.Text = filter[(filter.IndexOf(',') + 1)..].Trim();
_autoSelected = first;
}
RefreshList();
}
public void Populate(List<DecalPrototype> prototypes)
{
_decals = [];
_allDecals = [];
prototypes.Sort((a, b) => a.ID.CompareTo(b.ID));
foreach (var decalPrototype in prototypes)
{
_decals.Add(decalPrototype.ID, decalPrototype.Sprite.Frame0());
var category = "random";
if (decalPrototype.Tags.Count > 1 && decalPrototype.Tags[1].StartsWith("crayon-"))
category = decalPrototype.Tags[1].Replace("crayon-", "");
var list = _decals.GetOrNew(category);
list.Add((decalPrototype.ID, _spriteSystem.Frame0(decalPrototype.Sprite)));
_allDecals.Add(decalPrototype.ID);
}
RefreshList();

View File

@@ -124,6 +124,10 @@ public sealed class ColorFlashEffectSystem : SharedColorFlashEffectSystem
continue;
}
var targetEv = new GetFlashEffectTargetEvent(ent);
RaiseLocalEvent(ent, ref targetEv);
ent = targetEv.Target;
EnsureComp<ColorFlashEffectComponent>(ent, out comp);
comp.NetSyncEnabled = false;
comp.Color = sprite.Color;
@@ -132,3 +136,9 @@ public sealed class ColorFlashEffectSystem : SharedColorFlashEffectSystem
}
}
}
/// <summary>
/// Raised on an entity to change the target for a color flash effect.
/// </summary>
[ByRefEvent]
public record struct GetFlashEffectTargetEvent(EntityUid Target);

View File

@@ -0,0 +1,95 @@
using Content.Shared.Electrocution;
using Robust.Client.GameObjects;
using Robust.Client.Player;
using Robust.Shared.Player;
namespace Content.Client.Electrocution;
/// <summary>
/// Shows the Electrocution HUD to entities with the ShowElectrocutionHUDComponent.
/// </summary>
public sealed class ElectrocutionHUDVisualizerSystem : VisualizerSystem<ElectrocutionHUDVisualsComponent>
{
[Dependency] private readonly IPlayerManager _playerMan = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<ShowElectrocutionHUDComponent, ComponentInit>(OnInit);
SubscribeLocalEvent<ShowElectrocutionHUDComponent, ComponentShutdown>(OnShutdown);
SubscribeLocalEvent<ShowElectrocutionHUDComponent, LocalPlayerAttachedEvent>(OnPlayerAttached);
SubscribeLocalEvent<ShowElectrocutionHUDComponent, LocalPlayerDetachedEvent>(OnPlayerDetached);
}
private void OnPlayerAttached(Entity<ShowElectrocutionHUDComponent> ent, ref LocalPlayerAttachedEvent args)
{
ShowHUD();
}
private void OnPlayerDetached(Entity<ShowElectrocutionHUDComponent> ent, ref LocalPlayerDetachedEvent args)
{
RemoveHUD();
}
private void OnInit(Entity<ShowElectrocutionHUDComponent> ent, ref ComponentInit args)
{
if (_playerMan.LocalEntity == ent)
{
ShowHUD();
}
}
private void OnShutdown(Entity<ShowElectrocutionHUDComponent> ent, ref ComponentShutdown args)
{
if (_playerMan.LocalEntity == ent)
{
RemoveHUD();
}
}
// Show the HUD to the client.
// We have to look for all current entities that can be electrified and toggle the HUD layer on if they are.
private void ShowHUD()
{
var electrifiedQuery = AllEntityQuery<ElectrocutionHUDVisualsComponent, AppearanceComponent, SpriteComponent>();
while (electrifiedQuery.MoveNext(out var uid, out var _, out var appearanceComp, out var spriteComp))
{
if (!AppearanceSystem.TryGetData<bool>(uid, ElectrifiedVisuals.IsElectrified, out var electrified, appearanceComp))
continue;
if (electrified)
spriteComp.LayerSetVisible(ElectrifiedLayers.HUD, true);
else
spriteComp.LayerSetVisible(ElectrifiedLayers.HUD, false);
}
}
// Remove the HUD from the client.
// Find all current entities that can be electrified and hide the HUD layer.
private void RemoveHUD()
{
var electrifiedQuery = AllEntityQuery<ElectrocutionHUDVisualsComponent, AppearanceComponent, SpriteComponent>();
while (electrifiedQuery.MoveNext(out var uid, out var _, out var appearanceComp, out var spriteComp))
{
spriteComp.LayerSetVisible(ElectrifiedLayers.HUD, false);
}
}
// Toggle the HUD layer if an entity becomes (de-)electrified
protected override void OnAppearanceChange(EntityUid uid, ElectrocutionHUDVisualsComponent comp, ref AppearanceChangeEvent args)
{
if (args.Sprite == null)
return;
if (!AppearanceSystem.TryGetData<bool>(uid, ElectrifiedVisuals.IsElectrified, out var electrified, args.Component))
return;
var player = _playerMan.LocalEntity;
if (electrified && HasComp<ShowElectrocutionHUDComponent>(player))
args.Sprite.LayerSetVisible(ElectrifiedLayers.HUD, true);
else
args.Sprite.LayerSetVisible(ElectrifiedLayers.HUD, false);
}
}

View File

@@ -4,6 +4,7 @@ using Content.Client.Chat.Managers;
using Content.Client.DebugMon;
using Content.Client.Eui;
using Content.Client.Fullscreen;
using Content.Client.GameTicking.Managers;
using Content.Client.GhostKick;
using Content.Client.Guidebook;
using Content.Client.Input;
@@ -11,6 +12,7 @@ using Content.Client.IoC;
using Content.Client.Launcher;
using Content.Client.Lobby;
using Content.Client.MainMenu;
using Content.Client.Overlays;
using Content.Client.Parallax.Managers;
using Content.Client.Players.PlayTimeTracking;
using Content.Client.Radiation.Overlays;
@@ -71,6 +73,7 @@ namespace Content.Client.Entry
[Dependency] private readonly IReplayLoadManager _replayLoad = default!;
[Dependency] private readonly ILogManager _logManager = default!;
[Dependency] private readonly DebugMonitorManager _debugMonitorManager = default!;
[Dependency] private readonly TitleWindowManager _titleWindowManager = default!;
public override void Init()
{
@@ -140,6 +143,12 @@ namespace Content.Client.Entry
_configManager.SetCVar("interface.resolutionAutoScaleMinimum", 0.5f);
}
public override void Shutdown()
{
base.Shutdown();
_titleWindowManager.Shutdown();
}
public override void PostInit()
{
base.PostInit();
@@ -151,15 +160,17 @@ namespace Content.Client.Entry
_parallaxManager.LoadDefaultParallax();
_overlayManager.AddOverlay(new CP14BasePostProcessOverlay()); // CP14-PostProcess
_overlayManager.AddOverlay(new SingularityOverlay());
_overlayManager.AddOverlay(new RadiationPulseOverlay());
_chatManager.Initialize();
_clientPreferencesManager.Initialize();
_euiManager.Initialize();
_voteManager.Initialize();
_userInterfaceManager.SetDefaultTheme(_configManager.GetCVar(CCVars.UIDefaultInterfaceTheme));
_userInterfaceManager.SetDefaultTheme("SS14DefaultTheme");
_userInterfaceManager.SetActiveTheme(_configManager.GetCVar(CVars.InterfaceTheme));
_documentParsingManager.Initialize();
_titleWindowManager.Initialize();
_baseClient.RunLevelChanged += (_, args) =>
{

View File

@@ -55,7 +55,7 @@ namespace Content.Client.Eui
/// </summary>
protected void SendMessage(EuiMessageBase msg)
{
var netMsg = _netManager.CreateNetMessage<MsgEuiMessage>();
var netMsg = new MsgEuiMessage();
netMsg.Id = Id;
netMsg.Message = msg;

View File

@@ -0,0 +1,8 @@
using Content.Shared.Explosion.EntitySystems;
namespace Content.Client.Explosion;
public sealed class ScatteringGrenadeSystem : SharedScatteringGrenadeSystem
{
}

View File

@@ -0,0 +1,62 @@
using Content.Shared.CCVar;
using Robust.Client;
using Robust.Client.Graphics;
using Robust.Shared;
using Robust.Shared.Configuration;
namespace Content.Client.GameTicking.Managers;
public sealed class TitleWindowManager
{
[Dependency] private readonly IBaseClient _client = default!;
[Dependency] private readonly IClyde _clyde = default!;
[Dependency] private readonly IConfigurationManager _cfg = default!;
[Dependency] private readonly IGameController _gameController = default!;
public void Initialize()
{
_cfg.OnValueChanged(CVars.GameHostName, OnHostnameChange, true);
_cfg.OnValueChanged(CCVars.GameHostnameInTitlebar, OnHostnameTitleChange, true);
_client.RunLevelChanged += OnRunLevelChangedChange;
}
public void Shutdown()
{
_cfg.UnsubValueChanged(CVars.GameHostName, OnHostnameChange);
_cfg.UnsubValueChanged(CCVars.GameHostnameInTitlebar, OnHostnameTitleChange);
}
private void OnHostnameChange(string hostname)
{
var defaultWindowTitle = _gameController.GameTitle();
// Since the game assumes the server name is MyServer and that GameHostnameInTitlebar CCVar is true by default
// Lets just... not show anything. This also is used to revert back to just the game title on disconnect.
if (_client.RunLevel == ClientRunLevel.Initialize)
{
_clyde.SetWindowTitle(defaultWindowTitle);
return;
}
if (_cfg.GetCVar(CCVars.GameHostnameInTitlebar))
// If you really dislike the dash I guess change it here
_clyde.SetWindowTitle(hostname + " - " + defaultWindowTitle);
else
_clyde.SetWindowTitle(defaultWindowTitle);
}
// Clients by default assume game.hostname_in_titlebar is true
// but we need to clear it as soon as we join and actually receive the servers preference on this.
// This will ensure we rerun OnHostnameChange and set the correct title bar name.
private void OnHostnameTitleChange(bool colonthree)
{
OnHostnameChange(_cfg.GetCVar(CVars.GameHostName));
}
// This is just used we can rerun the hostname change function when we disconnect to revert back to just the games title.
private void OnRunLevelChangedChange(object? sender, RunLevelChangedEventArgs runLevelChangedEventArgs)
{
OnHostnameChange(_cfg.GetCVar(CVars.GameHostName));
}
}

View File

@@ -112,7 +112,12 @@ namespace Content.Client.Ghost
_actions.RemoveAction(uid, component.ToggleLightingActionEntity);
_actions.RemoveAction(uid, component.ToggleFoVActionEntity);
_actions.RemoveAction(uid, component.ToggleGhostsActionEntity);
_actions.RemoveAction(uid, component.ToggleGhostHearingActionEntity);
//_actions.RemoveAction(uid, component.ToggleGhostHearingActionEntity); //Dont need in CP14
//CP14
_actions.RemoveAction(uid, component.CP14ZLevelUpActionEntity);
_actions.RemoveAction(uid, component.CP14ZLevelDownActionEntity);
_actions.RemoveAction(uid, component.CP14ToggleRoofActionEntity);
//CP14 end
if (uid != _playerManager.LocalEntity)
return;

View File

@@ -168,8 +168,8 @@ public sealed partial class GuidebookWindow : FancyWindow, ILinkClickHandler
var parent = forcedRoot == null ? null : AddEntry(forcedRoot.Value, null, addedEntries);
foreach (var entry in GetSortedEntries(roots))
{
if (!entry.CrystallPunkAllowed) continue; //CrystallPunk guidebook filter
if (entry.LocFilter is not null && entry.LocFilter != ContentLocalizationManager.Culture) continue; //CrystallPunk guidebook filter
if (!entry.CrystallPunkAllowed) continue; //CrystallEdge guidebook filter
if (entry.LocFilter is not null && entry.LocFilter != ContentLocalizationManager.Culture) continue; //CrystallEdge guidebook filter
AddEntry(entry.Id, parent, addedEntries);
}

View File

@@ -32,7 +32,7 @@ public sealed class GuidebookSystem : EntitySystem
[Dependency] private readonly RgbLightControllerSystem _rgbLightControllerSystem = default!;
[Dependency] private readonly SharedPointLightSystem _pointLightSystem = default!;
[Dependency] private readonly TagSystem _tags = default!;
[Dependency] private readonly IPrototypeManager _proto = default!; //CrystallPunk guidebook filter
[Dependency] private readonly IPrototypeManager _proto = default!; //CrystallEdge guidebook filter
public event Action<List<ProtoId<GuideEntryPrototype>>,
List<ProtoId<GuideEntryPrototype>>?,
@@ -47,7 +47,7 @@ public sealed class GuidebookSystem : EntitySystem
/// <inheritdoc/>
public override void Initialize()
{
SubscribeLocalEvent<GuideHelpComponent, MapInitEvent>(OnCrystallPunkMapInit); //CrystallPunk guidebook filter
SubscribeLocalEvent<GuideHelpComponent, MapInitEvent>(OnCrystallEdgeMapInit); //CrystallEdge guidebook filter
SubscribeLocalEvent<GuideHelpComponent, GetVerbsEvent<ExamineVerb>>(OnGetVerbs);
SubscribeLocalEvent<GuideHelpComponent, ActivateInWorldEvent>(OnInteract);
@@ -57,12 +57,12 @@ public sealed class GuidebookSystem : EntitySystem
OnGuidebookControlsTestGetAlternateVerbs);
}
//CrystallPunk guidebook filter
private void OnCrystallPunkMapInit(Entity<GuideHelpComponent> ent, ref MapInitEvent args)
//CrystallEdge guidebook filter
private void OnCrystallEdgeMapInit(Entity<GuideHelpComponent> ent, ref MapInitEvent args)
{
foreach (var guide in ent.Comp.Guides)
{
var guideProto = _proto.Index<GuideEntryPrototype>(guide);
var guideProto = _proto.Index(guide);
if (!guideProto.CrystallPunkAllowed) //REMOVE unnecessary guidebook
{
RemComp<GuideHelpComponent>(ent);
@@ -70,7 +70,7 @@ public sealed class GuidebookSystem : EntitySystem
}
}
}
//CrystallPunk guidebook filter end
//CrystallEdge guidebook filter end
/// <summary>
/// Gets a user entity to use for verbs and examinations. If the player has no attached entity, this will use a

View File

@@ -130,9 +130,9 @@ namespace Content.Client.Hands.Systems
OnPlayerHandsAdded?.Invoke(hands);
}
public override void DoDrop(EntityUid uid, Hand hand, bool doDropInteraction = true, HandsComponent? hands = null)
public override void DoDrop(EntityUid uid, Hand hand, bool doDropInteraction = true, HandsComponent? hands = null, bool log = true)
{
base.DoDrop(uid, hand, doDropInteraction, hands);
base.DoDrop(uid, hand, doDropInteraction, hands, log);
if (TryComp(hand.HeldEntity, out SpriteComponent? sprite))
sprite.RenderOrder = EntityManager.CurrentTick.Value;

View File

@@ -0,0 +1,101 @@
using Content.Shared.Holopad;
using Content.Shared.Silicons.StationAi;
using Robust.Client.Graphics;
using Robust.Client.UserInterface;
using Robust.Shared.Player;
using System.Numerics;
namespace Content.Client.Holopad;
public sealed class HolopadBoundUserInterface : BoundUserInterface
{
[Dependency] private readonly ISharedPlayerManager _playerManager = default!;
[Dependency] private readonly IClyde _displayManager = default!;
[ViewVariables]
private HolopadWindow? _window;
public HolopadBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey)
{
IoCManager.InjectDependencies(this);
}
protected override void Open()
{
base.Open();
_window = this.CreateWindow<HolopadWindow>();
_window.Title = Loc.GetString("holopad-window-title", ("title", EntMan.GetComponent<MetaDataComponent>(Owner).EntityName));
if (this.UiKey is not HolopadUiKey)
{
Close();
return;
}
var uiKey = (HolopadUiKey)this.UiKey;
// AIs will see a different holopad interface to crew when interacting with them in the world
if (uiKey == HolopadUiKey.InteractionWindow && EntMan.HasComponent<StationAiHeldComponent>(_playerManager.LocalEntity))
uiKey = HolopadUiKey.InteractionWindowForAi;
_window.SetState(Owner, uiKey);
_window.UpdateState(new Dictionary<NetEntity, string>());
// Set message actions
_window.SendHolopadStartNewCallMessageAction += SendHolopadStartNewCallMessage;
_window.SendHolopadAnswerCallMessageAction += SendHolopadAnswerCallMessage;
_window.SendHolopadEndCallMessageAction += SendHolopadEndCallMessage;
_window.SendHolopadStartBroadcastMessageAction += SendHolopadStartBroadcastMessage;
_window.SendHolopadActivateProjectorMessageAction += SendHolopadActivateProjectorMessage;
_window.SendHolopadRequestStationAiMessageAction += SendHolopadRequestStationAiMessage;
// If this call is addressed to an AI, open the window in the bottom right hand corner of the screen
if (uiKey == HolopadUiKey.AiRequestWindow)
_window.OpenCenteredAt(new Vector2(1f, 1f));
// Otherwise offset to the left so the holopad can still be seen
else
_window.OpenCenteredAt(new Vector2(0.3333f, 0.50f));
}
protected override void UpdateState(BoundUserInterfaceState state)
{
base.UpdateState(state);
var castState = (HolopadBoundInterfaceState)state;
EntMan.TryGetComponent<TransformComponent>(Owner, out var xform);
_window?.UpdateState(castState.Holopads);
}
public void SendHolopadStartNewCallMessage(NetEntity receiver)
{
SendMessage(new HolopadStartNewCallMessage(receiver));
}
public void SendHolopadAnswerCallMessage()
{
SendMessage(new HolopadAnswerCallMessage());
}
public void SendHolopadEndCallMessage()
{
SendMessage(new HolopadEndCallMessage());
}
public void SendHolopadStartBroadcastMessage()
{
SendMessage(new HolopadStartBroadcastMessage());
}
public void SendHolopadActivateProjectorMessage()
{
SendMessage(new HolopadActivateProjectorMessage());
}
public void SendHolopadRequestStationAiMessage()
{
SendMessage(new HolopadStationAiRequestMessage());
}
}

View File

@@ -0,0 +1,172 @@
using Content.Shared.Chat.TypingIndicator;
using Content.Shared.Holopad;
using Robust.Client.GameObjects;
using Robust.Client.Graphics;
using Robust.Client.Player;
using Robust.Shared.Prototypes;
using Robust.Shared.Timing;
using System.Linq;
namespace Content.Client.Holopad;
public sealed class HolopadSystem : SharedHolopadSystem
{
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
[Dependency] private readonly IPlayerManager _playerManager = default!;
[Dependency] private readonly IGameTiming _timing = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<HolopadHologramComponent, ComponentInit>(OnComponentInit);
SubscribeLocalEvent<HolopadHologramComponent, BeforePostShaderRenderEvent>(OnShaderRender);
SubscribeAllEvent<TypingChangedEvent>(OnTypingChanged);
SubscribeNetworkEvent<PlayerSpriteStateRequest>(OnPlayerSpriteStateRequest);
SubscribeNetworkEvent<PlayerSpriteStateMessage>(OnPlayerSpriteStateMessage);
}
private void OnComponentInit(EntityUid uid, HolopadHologramComponent component, ComponentInit ev)
{
if (!TryComp<SpriteComponent>(uid, out var sprite))
return;
UpdateHologramSprite(uid);
}
private void OnShaderRender(EntityUid uid, HolopadHologramComponent component, BeforePostShaderRenderEvent ev)
{
if (ev.Sprite.PostShader == null)
return;
ev.Sprite.PostShader.SetParameter("t", (float)_timing.CurTime.TotalSeconds * component.ScrollRate);
}
private void OnTypingChanged(TypingChangedEvent ev, EntitySessionEventArgs args)
{
var uid = args.SenderSession.AttachedEntity;
if (!Exists(uid))
return;
if (!HasComp<HolopadUserComponent>(uid))
return;
var netEv = new HolopadUserTypingChangedEvent(GetNetEntity(uid.Value), ev.IsTyping);
RaiseNetworkEvent(netEv);
}
private void OnPlayerSpriteStateRequest(PlayerSpriteStateRequest ev)
{
var targetPlayer = GetEntity(ev.TargetPlayer);
var player = _playerManager.LocalSession?.AttachedEntity;
// Ignore the request if received by a player who isn't the target
if (targetPlayer != player)
return;
if (!TryComp<SpriteComponent>(player, out var playerSprite))
return;
var spriteLayerData = new List<PrototypeLayerData>();
if (playerSprite.Visible)
{
// Record the RSI paths, state names and shader paramaters of all visible layers
for (int i = 0; i < playerSprite.AllLayers.Count(); i++)
{
if (!playerSprite.TryGetLayer(i, out var layer))
continue;
if (!layer.Visible ||
string.IsNullOrEmpty(layer.ActualRsi?.Path.ToString()) ||
string.IsNullOrEmpty(layer.State.Name))
continue;
var layerDatum = new PrototypeLayerData();
layerDatum.RsiPath = layer.ActualRsi.Path.ToString();
layerDatum.State = layer.State.Name;
if (layer.CopyToShaderParameters != null)
{
var key = (string)layer.CopyToShaderParameters.LayerKey;
if (playerSprite.LayerMapTryGet(key, out var otherLayerIdx) &&
playerSprite.TryGetLayer(otherLayerIdx, out var otherLayer) &&
otherLayer.Visible)
{
layerDatum.MapKeys = new() { key };
layerDatum.CopyToShaderParameters = new PrototypeCopyToShaderParameters()
{
LayerKey = key,
ParameterTexture = layer.CopyToShaderParameters.ParameterTexture,
ParameterUV = layer.CopyToShaderParameters.ParameterUV
};
}
}
spriteLayerData.Add(layerDatum);
}
}
// Return the recorded data to the server
var evResponse = new PlayerSpriteStateMessage(ev.TargetPlayer, spriteLayerData.ToArray());
RaiseNetworkEvent(evResponse);
}
private void OnPlayerSpriteStateMessage(PlayerSpriteStateMessage ev)
{
UpdateHologramSprite(GetEntity(ev.SpriteEntity), ev.SpriteLayerData);
}
private void UpdateHologramSprite(EntityUid uid, PrototypeLayerData[]? layerData = null)
{
if (!TryComp<SpriteComponent>(uid, out var hologramSprite))
return;
if (!TryComp<HolopadHologramComponent>(uid, out var holopadhologram))
return;
for (int i = hologramSprite.AllLayers.Count() - 1; i >= 0; i--)
hologramSprite.RemoveLayer(i);
if (layerData == null || layerData.Length == 0)
{
layerData = new PrototypeLayerData[1];
layerData[0] = new PrototypeLayerData()
{
RsiPath = holopadhologram.RsiPath,
State = holopadhologram.RsiState
};
}
for (int i = 0; i < layerData.Length; i++)
{
var layer = layerData[i];
layer.Shader = "unshaded";
hologramSprite.AddLayer(layerData[i], i);
}
UpdateHologramShader(uid, hologramSprite, holopadhologram);
}
private void UpdateHologramShader(EntityUid uid, SpriteComponent sprite, HolopadHologramComponent holopadHologram)
{
// Find the texture height of the largest layer
float texHeight = sprite.AllLayers.Max(x => x.PixelSize.Y);
var instance = _prototypeManager.Index<ShaderPrototype>(holopadHologram.ShaderName).InstanceUnique();
instance.SetParameter("color1", new Vector3(holopadHologram.Color1.R, holopadHologram.Color1.G, holopadHologram.Color1.B));
instance.SetParameter("color2", new Vector3(holopadHologram.Color2.R, holopadHologram.Color2.G, holopadHologram.Color2.B));
instance.SetParameter("alpha", holopadHologram.Alpha);
instance.SetParameter("intensity", holopadHologram.Intensity);
instance.SetParameter("texHeight", texHeight);
instance.SetParameter("t", (float)_timing.CurTime.TotalSeconds * holopadHologram.ScrollRate);
sprite.PostShader = instance;
sprite.RaiseShaderEvent = true;
}
}

View File

@@ -0,0 +1,118 @@
<controls:FancyWindow xmlns="https://spacestation14.io"
xmlns:controls="clr-namespace:Content.Client.UserInterface.Controls"
xmlns:gfx="clr-namespace:Robust.Client.Graphics;assembly=Robust.Client"
Resizable="False"
MaxSize="400 800"
MinSize="400 150">
<BoxContainer Orientation="Vertical" VerticalExpand="True" HorizontalExpand="True">
<BoxContainer Name="ControlsLockOutContainer" Orientation="Vertical" VerticalExpand="True" HorizontalExpand="True" ReservesSpace="False" Visible="False">
<!-- Header text -->
<controls:StripeBack>
<PanelContainer>
<RichTextLabel Name="EmergencyBroadcastText" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="10 10 10 10" ReservesSpace="False"/>
</PanelContainer>
</controls:StripeBack>
<Label Text="{Loc 'holopad-window-controls-locked-out'}" HorizontalAlignment="Center" Margin="10 5 10 0" ReservesSpace="False"/>
<RichTextLabel Name="LockOutIdText" HorizontalAlignment="Center" Margin="10 5 10 0" ReservesSpace="False"/>
<Label Name="LockOutCountDownText" Text="{Loc 'holopad-window-controls-unlock-countdown'}" HorizontalAlignment="Center" Margin="10 15 10 10" ReservesSpace="False"/>
</BoxContainer>
<BoxContainer Name="ControlsContainer" Orientation="Vertical" VerticalExpand="True" HorizontalExpand="True" ReservesSpace="False">
<!-- Active call controls (either this or the call placement controls will be active) -->
<BoxContainer Name="ActiveCallControlsContainer" Orientation="Vertical" VerticalExpand="True" HorizontalExpand="True" ReservesSpace="False">
<!-- Header text -->
<BoxContainer MinHeight="60" Orientation="Vertical" VerticalAlignment="Center">
<Label Name="CallStatusText" Margin="10 5 10 0" ReservesSpace="False"/>
<BoxContainer Name="CallerIdContainer" Orientation="Vertical" ReservesSpace="False">
<RichTextLabel Name="CallerIdText" HorizontalAlignment="Center" Margin="0 0 0 0"/>
<Label Text="{Loc 'holopad-window-relay-label'}" Margin="10 5 10 0" ReservesSpace="False"/>
<RichTextLabel Name="HolopadIdText" HorizontalAlignment="Center" Margin="0 0 0 10"/>
</BoxContainer>
</BoxContainer>
<!-- Controls (the answer call button is absent when the phone is not ringing) -->
<GridContainer Columns="2" ReservesSpace="False">
<Control HorizontalExpand="True" Margin="10 0 2 5">
<Button Name="AnswerCallButton" Text="{Loc 'holopad-window-answer-call'}" StyleClasses="OpenRight" Margin="0 0 0 5" Disabled="True"/>
</Control>
<Control HorizontalExpand="True" Margin="2 0 10 5">
<Button Name="EndCallButton" Text="{Loc 'holopad-window-end-call'}" StyleClasses="OpenLeft" Margin="0 0 0 5" Disabled="True"/>
</Control>
</GridContainer>
</BoxContainer>
<!-- Call placement controls (either this or the active call controls will be active) -->
<BoxContainer Name="CallPlacementControlsContainer" Orientation="Vertical" VerticalExpand="True" HorizontalExpand="True" ReservesSpace="False">
<controls:StripeBack>
<PanelContainer>
<BoxContainer Orientation="Vertical">
<RichTextLabel Name="SubtitleText" HorizontalAlignment="Center" Margin="0 5 0 0"/>
<RichTextLabel Name="OptionsText" HorizontalAlignment="Center" Margin="0 0 0 5"/>
</BoxContainer>
</PanelContainer>
</controls:StripeBack>
<!-- Request the station AI or activate the holopad projector (only one of these should be active at a time) -->
<BoxContainer Name="RequestStationAiContainer" Orientation="Vertical" ReservesSpace="False" Visible="False">
<Button Name="RequestStationAiButton" Text="{Loc 'holopad-window-request-station-ai'}" Margin="10 5 10 5" Disabled="False"/>
</BoxContainer>
<BoxContainer Name="ActivateProjectorContainer" Orientation="Vertical" ReservesSpace="False" Visible="False">
<Button Name="ActivateProjectorButton" Text="{Loc 'holopad-window-activate-projector'}" Margin="10 5 10 5" Disabled="False"/>
</BoxContainer>
<!-- List of contactable holopads (the list is created in C#) -->
<BoxContainer Name="HolopadContactListContainer" Orientation="Vertical" Margin="10 0 10 5" ReservesSpace="False" Visible="False">
<PanelContainer Name="HolopadContactListHeaderPanel">
<Label Text="{Loc 'holopad-window-select-contact-from-list'}" HorizontalAlignment="Center" Margin="0 3 0 3"/>
</PanelContainer>
<PanelContainer Name="HolopadContactListPanel">
<BoxContainer Orientation="Vertical">
<!-- Contact filter -->
<LineEdit Name="SearchLineEdit" HorizontalExpand="True" Margin="4, 4, 4, 0"
PlaceHolder="{Loc holopad-window-filter-line-placeholder}" />
<ScrollContainer HorizontalExpand="True" VerticalExpand="True" Margin="8, 8, 8, 8" MinHeight="256">
<!-- If there is no data yet, this will be displayed -->
<BoxContainer Name="FetchingAvailableHolopadsContainer" HorizontalAlignment="Center" HorizontalExpand="True" VerticalExpand="True" ReservesSpace="False">
<Label Text="{Loc 'holopad-window-fetching-contacts-list'}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</BoxContainer>
<!-- Container for the contacts -->
<BoxContainer Name="ContactsList" Orientation="Vertical" HorizontalExpand="True" VerticalExpand="True" Margin="10 0 10 0"/>
</ScrollContainer>
</BoxContainer>
</PanelContainer>
</BoxContainer>
<!-- Button to start an emergency broadcast (the user requires a certain level of access to interact with it) -->
<BoxContainer Name="StartBroadcastContainer" Orientation="Vertical" ReservesSpace="False" Visible="False">
<Button Name="StartBroadcastButton" Text="{Loc 'holopad-window-emergency-broadcast'}" Margin="10 0 10 5" Disabled="False" ReservesSpace="False"/>
</BoxContainer>
</BoxContainer>
</BoxContainer>
<!-- Footer -->
<BoxContainer Orientation="Vertical">
<PanelContainer StyleClasses="LowDivider" />
<BoxContainer Orientation="Horizontal" Margin="10 2 5 0" VerticalAlignment="Bottom">
<Label Text="{Loc 'holopad-window-flavor-left'}" StyleClasses="WindowFooterText" />
<Label Text="{Loc 'holopad-window-flavor-right'}" StyleClasses="WindowFooterText"
HorizontalAlignment="Right" HorizontalExpand="True" Margin="0 0 5 0" />
<TextureRect StyleClasses="NTLogoDark" Stretch="KeepAspectCentered"
VerticalAlignment="Center" HorizontalAlignment="Right" SetSize="19 19"/>
</BoxContainer>
</BoxContainer>
</BoxContainer>
</controls:FancyWindow>

View File

@@ -0,0 +1,344 @@
using Content.Client.Popups;
using Content.Client.UserInterface.Controls;
using Content.Shared.Access.Systems;
using Content.Shared.Holopad;
using Content.Shared.Telephone;
using Robust.Client.AutoGenerated;
using Robust.Client.Graphics;
using Robust.Client.Player;
using Robust.Client.UserInterface.Controls;
using Robust.Client.UserInterface.XAML;
using Robust.Shared.Timing;
using Robust.Shared.Utility;
using System.Linq;
namespace Content.Client.Holopad;
[GenerateTypedNameReferences]
public sealed partial class HolopadWindow : FancyWindow
{
[Dependency] private readonly IEntityManager _entManager = default!;
[Dependency] private readonly IPlayerManager _playerManager = default!;
[Dependency] private readonly IGameTiming _timing = default!;
private readonly SharedHolopadSystem _holopadSystem = default!;
private readonly SharedTelephoneSystem _telephoneSystem = default!;
private readonly AccessReaderSystem _accessReaderSystem = default!;
private readonly PopupSystem _popupSystem = default!;
private EntityUid? _owner = null;
private HolopadUiKey _currentUiKey;
private TelephoneState _currentState;
private TelephoneState _previousState;
private TimeSpan _buttonUnlockTime;
private float _updateTimer = 0.25f;
private const float UpdateTime = 0.25f;
private TimeSpan _buttonUnlockDelay = TimeSpan.FromSeconds(0.5f);
public event Action<NetEntity>? SendHolopadStartNewCallMessageAction;
public event Action? SendHolopadAnswerCallMessageAction;
public event Action? SendHolopadEndCallMessageAction;
public event Action? SendHolopadStartBroadcastMessageAction;
public event Action? SendHolopadActivateProjectorMessageAction;
public event Action? SendHolopadRequestStationAiMessageAction;
public HolopadWindow()
{
RobustXamlLoader.Load(this);
IoCManager.InjectDependencies(this);
_holopadSystem = _entManager.System<SharedHolopadSystem>();
_telephoneSystem = _entManager.System<SharedTelephoneSystem>();
_accessReaderSystem = _entManager.System<AccessReaderSystem>();
_popupSystem = _entManager.System<PopupSystem>();
_buttonUnlockTime = _timing.CurTime + _buttonUnlockDelay;
// Assign button actions
AnswerCallButton.OnPressed += args => { OnHolopadAnswerCallMessage(); };
EndCallButton.OnPressed += args => { OnHolopadEndCallMessage(); };
StartBroadcastButton.OnPressed += args => { OnHolopadStartBroadcastMessage(); };
ActivateProjectorButton.OnPressed += args => { OnHolopadActivateProjectorMessage(); };
RequestStationAiButton.OnPressed += args => { OnHolopadRequestStationAiMessage(); };
// XML formatting
AnswerCallButton.AddStyleClass("ButtonAccept");
EndCallButton.AddStyleClass("Caution");
StartBroadcastButton.AddStyleClass("Caution");
HolopadContactListPanel.PanelOverride = new StyleBoxFlat
{
BackgroundColor = new Color(47, 47, 59) * Color.DarkGray,
BorderColor = new Color(82, 82, 82), //new Color(70, 73, 102),
BorderThickness = new Thickness(2),
};
HolopadContactListHeaderPanel.PanelOverride = new StyleBoxFlat
{
BackgroundColor = new Color(82, 82, 82),
};
EmergencyBroadcastText.SetMessage(FormattedMessage.FromMarkupOrThrow(Loc.GetString("holopad-window-emergency-broadcast-in-progress")));
SubtitleText.SetMessage(FormattedMessage.FromMarkupOrThrow(Loc.GetString("holopad-window-subtitle")));
OptionsText.SetMessage(FormattedMessage.FromMarkupOrThrow(Loc.GetString("holopad-window-options")));
}
#region: Button actions
private void OnSendHolopadStartNewCallMessage(NetEntity receiver)
{
SendHolopadStartNewCallMessageAction?.Invoke(receiver);
}
private void OnHolopadAnswerCallMessage()
{
SendHolopadAnswerCallMessageAction?.Invoke();
}
private void OnHolopadEndCallMessage()
{
SendHolopadEndCallMessageAction?.Invoke();
if (_currentUiKey == HolopadUiKey.AiRequestWindow)
Close();
}
private void OnHolopadStartBroadcastMessage()
{
if (_playerManager.LocalSession?.AttachedEntity == null || _owner == null)
return;
var player = _playerManager.LocalSession.AttachedEntity;
if (!_accessReaderSystem.IsAllowed(player.Value, _owner.Value))
{
_popupSystem.PopupClient(Loc.GetString("holopad-window-access-denied"), _owner.Value, player.Value);
return;
}
SendHolopadStartBroadcastMessageAction?.Invoke();
}
private void OnHolopadActivateProjectorMessage()
{
SendHolopadActivateProjectorMessageAction?.Invoke();
}
private void OnHolopadRequestStationAiMessage()
{
SendHolopadRequestStationAiMessageAction?.Invoke();
}
#endregion
public void SetState(EntityUid owner, HolopadUiKey uiKey)
{
_owner = owner;
_currentUiKey = uiKey;
// Determines what UI containers are available to the user.
// Components of these will be toggled on and off when
// UpdateAppearance() is called
switch (uiKey)
{
case HolopadUiKey.InteractionWindow:
RequestStationAiContainer.Visible = true;
HolopadContactListContainer.Visible = true;
StartBroadcastContainer.Visible = true;
break;
case HolopadUiKey.InteractionWindowForAi:
ActivateProjectorContainer.Visible = true;
StartBroadcastContainer.Visible = true;
break;
case HolopadUiKey.AiActionWindow:
HolopadContactListContainer.Visible = true;
StartBroadcastContainer.Visible = true;
break;
case HolopadUiKey.AiRequestWindow:
break;
}
}
public void UpdateState(Dictionary<NetEntity, string> holopads)
{
if (_owner == null || !_entManager.TryGetComponent<TelephoneComponent>(_owner.Value, out var telephone))
return;
// Caller ID text
var callerId = _telephoneSystem.GetFormattedCallerIdForEntity(telephone.LastCallerId.Item1, telephone.LastCallerId.Item2, Color.LightGray, "Default", 11);
var holoapdId = _telephoneSystem.GetFormattedDeviceIdForEntity(telephone.LastCallerId.Item3, Color.LightGray, "Default", 11);
CallerIdText.SetMessage(FormattedMessage.FromMarkupOrThrow(callerId));
HolopadIdText.SetMessage(FormattedMessage.FromMarkupOrThrow(holoapdId));
LockOutIdText.SetMessage(FormattedMessage.FromMarkupOrThrow(callerId));
// Sort holopads alphabetically
var holopadArray = holopads.ToArray();
Array.Sort(holopadArray, AlphabeticalSort);
// Clear excess children from the contact list
while (ContactsList.ChildCount > holopadArray.Length)
ContactsList.RemoveChild(ContactsList.GetChild(ContactsList.ChildCount - 1));
// Make / update required children
for (int i = 0; i < holopadArray.Length; i++)
{
var (netEntity, label) = holopadArray[i];
if (i >= ContactsList.ChildCount)
{
var newContactButton = new HolopadContactButton();
newContactButton.OnPressed += args => { OnSendHolopadStartNewCallMessage(newContactButton.NetEntity); };
ContactsList.AddChild(newContactButton);
}
var child = ContactsList.GetChild(i);
if (child is not HolopadContactButton)
continue;
var contactButton = (HolopadContactButton)child;
contactButton.UpdateValues(netEntity, label);
}
// Update buttons
UpdateAppearance();
}
private void UpdateAppearance()
{
if (_owner == null || !_entManager.TryGetComponent<TelephoneComponent>(_owner.Value, out var telephone))
return;
if (_owner == null || !_entManager.TryGetComponent<HolopadComponent>(_owner.Value, out var holopad))
return;
var hasBroadcastAccess = !_holopadSystem.IsHolopadBroadcastOnCoolDown((_owner.Value, holopad));
var localPlayer = _playerManager.LocalSession?.AttachedEntity;
ControlsLockOutContainer.Visible = _holopadSystem.IsHolopadControlLocked((_owner.Value, holopad), localPlayer);
ControlsContainer.Visible = !ControlsLockOutContainer.Visible;
// Temporarily disable the interface buttons when the call state changes to prevent any misclicks
if (_currentState != telephone.CurrentState)
{
_previousState = _currentState;
_currentState = telephone.CurrentState;
_buttonUnlockTime = _timing.CurTime + _buttonUnlockDelay;
}
var lockButtons = _timing.CurTime < _buttonUnlockTime;
// Make / update required children
foreach (var child in ContactsList.Children)
{
if (child is not HolopadContactButton contactButton)
continue;
var passesFilter = string.IsNullOrEmpty(SearchLineEdit.Text) ||
contactButton.Text?.Contains(SearchLineEdit.Text, StringComparison.CurrentCultureIgnoreCase) == true;
contactButton.Visible = passesFilter;
contactButton.Disabled = (_currentState != TelephoneState.Idle || lockButtons);
}
// Update control text
var cooldown = _holopadSystem.GetHolopadBroadcastCoolDown((_owner.Value, holopad));
var cooldownString = $"{cooldown.Minutes:00}:{cooldown.Seconds:00}";
StartBroadcastButton.Text = _holopadSystem.IsHolopadBroadcastOnCoolDown((_owner.Value, holopad)) ?
Loc.GetString("holopad-window-emergency-broadcast-with-countdown", ("countdown", cooldownString)) :
Loc.GetString("holopad-window-emergency-broadcast");
var lockout = _holopadSystem.GetHolopadControlLockedPeriod((_owner.Value, holopad));
var lockoutString = $"{lockout.Minutes:00}:{lockout.Seconds:00}";
LockOutCountDownText.Text = Loc.GetString("holopad-window-controls-unlock-countdown", ("countdown", lockoutString));
switch (_currentState)
{
case TelephoneState.Idle:
CallStatusText.Text = Loc.GetString("holopad-window-no-calls-in-progress"); break;
case TelephoneState.Calling:
CallStatusText.Text = Loc.GetString("holopad-window-outgoing-call"); break;
case TelephoneState.Ringing:
CallStatusText.Text = (_currentUiKey == HolopadUiKey.AiRequestWindow) ?
Loc.GetString("holopad-window-ai-request") : Loc.GetString("holopad-window-incoming-call"); break;
case TelephoneState.InCall:
CallStatusText.Text = Loc.GetString("holopad-window-call-in-progress"); break;
case TelephoneState.EndingCall:
if (_previousState == TelephoneState.Calling || _previousState == TelephoneState.Idle)
CallStatusText.Text = Loc.GetString("holopad-window-call-rejected");
else
CallStatusText.Text = Loc.GetString("holopad-window-call-ending");
break;
}
// Update control disability
AnswerCallButton.Disabled = (_currentState != TelephoneState.Ringing || lockButtons);
EndCallButton.Disabled = (_currentState == TelephoneState.Idle || _currentState == TelephoneState.EndingCall || lockButtons);
StartBroadcastButton.Disabled = (_currentState != TelephoneState.Idle || !hasBroadcastAccess || lockButtons);
RequestStationAiButton.Disabled = (_currentState != TelephoneState.Idle || lockButtons);
ActivateProjectorButton.Disabled = (_currentState != TelephoneState.Idle || lockButtons);
// Update control visibility
FetchingAvailableHolopadsContainer.Visible = (ContactsList.ChildCount == 0);
ActiveCallControlsContainer.Visible = (_currentState != TelephoneState.Idle || _currentUiKey == HolopadUiKey.AiRequestWindow);
CallPlacementControlsContainer.Visible = !ActiveCallControlsContainer.Visible;
CallerIdContainer.Visible = (_currentState == TelephoneState.Ringing);
AnswerCallButton.Visible = (_currentState == TelephoneState.Ringing);
}
protected override void FrameUpdate(FrameEventArgs args)
{
base.FrameUpdate(args);
_updateTimer += args.DeltaSeconds;
if (_updateTimer >= UpdateTime)
{
_updateTimer -= UpdateTime;
UpdateAppearance();
}
}
private sealed class HolopadContactButton : Button
{
public NetEntity NetEntity;
public HolopadContactButton()
{
HorizontalExpand = true;
SetHeight = 32;
Margin = new Thickness(0f, 1f, 0f, 1f);
ReservesSpace = false;
}
public void UpdateValues(NetEntity netEntity, string label)
{
NetEntity = netEntity;
Text = Loc.GetString("holopad-window-contact-label", ("label", label));
}
}
private int AlphabeticalSort(KeyValuePair<NetEntity, string> x, KeyValuePair<NetEntity, string> y)
{
if (string.IsNullOrEmpty(x.Value))
return -1;
if (string.IsNullOrEmpty(y.Value))
return 1;
return x.Value.CompareTo(y.Value);
}
}

View File

@@ -34,6 +34,7 @@ namespace Content.Client.Info
AddInfoButton("server-info-website-button", CCVars.InfoLinksWebsite);
AddInfoButton("server-info-wiki-button", CCVars.InfoLinksWiki);
AddInfoButton("server-info-forum-button", CCVars.InfoLinksForum);
AddInfoButton("server-info-telegram-button", CCVars.InfoLinksTelegram);
var guidebookController = UserInterfaceManager.GetUIController<GuidebookUIController>();
var guidebookButton = new Button() { Text = Loc.GetString("server-info-guidebook-button") };

View File

@@ -1,3 +1,4 @@
using Content.Shared.Localizations;
using Robust.Client.AutoGenerated;
using Robust.Client.Graphics;
using Robust.Client.UserInterface.Controls;
@@ -16,19 +17,10 @@ public sealed partial class PlaytimeStatsEntry : ContainerButton
RoleLabel.Text = role;
Playtime = playtime; // store the TimeSpan value directly
PlaytimeLabel.Text = ConvertTimeSpanToHoursMinutes(playtime); // convert to string for display
PlaytimeLabel.Text = ContentLocalizationManager.FormatPlaytime(playtime); // convert to string for display
BackgroundColorPanel.PanelOverride = styleBox;
}
private static string ConvertTimeSpanToHoursMinutes(TimeSpan timeSpan)
{
var hours = (int)timeSpan.TotalHours;
var minutes = timeSpan.Minutes;
var formattedTimeLoc = Loc.GetString("ui-playtime-time-format", ("hours", hours), ("minutes", minutes));
return formattedTimeLoc;
}
public void UpdateShading(StyleBoxFlat styleBox)
{
BackgroundColorPanel.PanelOverride = styleBox;

View File

@@ -104,8 +104,7 @@ public sealed partial class PlaytimeStatsWindow : FancyWindow
{
var overallPlaytime = _jobRequirementsManager.FetchOverallPlaytime();
var formattedPlaytime = ConvertTimeSpanToHoursMinutes(overallPlaytime);
OverallPlaytimeLabel.Text = Loc.GetString("ui-playtime-overall", ("time", formattedPlaytime));
OverallPlaytimeLabel.Text = Loc.GetString("ui-playtime-overall", ("time", overallPlaytime));
var rolePlaytimes = _jobRequirementsManager.FetchPlaytimeByRoles();
@@ -134,13 +133,4 @@ public sealed partial class PlaytimeStatsWindow : FancyWindow
_sawmill.Error($"The provided playtime string '{playtimeString}' is not in the correct format.");
}
}
private static string ConvertTimeSpanToHoursMinutes(TimeSpan timeSpan)
{
var hours = (int) timeSpan.TotalHours;
var minutes = timeSpan.Minutes;
var formattedTimeLoc = Loc.GetString("ui-playtime-time-format", ("hours", hours), ("minutes", minutes));
return formattedTimeLoc;
}
}

View File

@@ -235,9 +235,23 @@ namespace Content.Client.Inventory
EntityManager.RaisePredictiveEvent(new InteractInventorySlotEvent(GetNetEntity(item.Value), altInteract: true));
}
protected override void UpdateInventoryTemplate(Entity<InventoryComponent> ent)
{
base.UpdateInventoryTemplate(ent);
if (TryComp(ent, out InventorySlotsComponent? inventorySlots))
{
foreach (var slot in ent.Comp.Slots)
{
if (inventorySlots.SlotData.TryGetValue(slot.Name, out var slotData))
slotData.SlotDef = slot;
}
}
}
public sealed class SlotData
{
public readonly SlotDefinition SlotDef;
public SlotDefinition SlotDef;
public EntityUid? HeldEntity => Container?.ContainedEntity;
public bool Blocked;
public bool Highlighted;

View File

@@ -17,6 +17,7 @@ using Content.Shared.Inventory.VirtualItem;
using Content.Shared.Strip.Components;
using JetBrains.Annotations;
using Robust.Client.GameObjects;
using Robust.Client.Player;
using Robust.Client.UserInterface;
using Robust.Client.UserInterface.Controls;
using Robust.Shared.Input;
@@ -29,10 +30,13 @@ namespace Content.Client.Inventory
[UsedImplicitly]
public sealed class StrippableBoundUserInterface : BoundUserInterface
{
[Dependency] private readonly IPlayerManager _player = default!;
[Dependency] private readonly IUserInterfaceManager _ui = default!;
private readonly ExamineSystem _examine;
private readonly InventorySystem _inv;
private readonly SharedCuffableSystem _cuffable;
private readonly StrippableSystem _strippable;
[ViewVariables]
private const int ButtonSeparation = 4;
@@ -51,6 +55,8 @@ namespace Content.Client.Inventory
_examine = EntMan.System<ExamineSystem>();
_inv = EntMan.System<InventorySystem>();
_cuffable = EntMan.System<SharedCuffableSystem>();
_strippable = EntMan.System<StrippableSystem>();
_virtualHiddenEntity = EntMan.SpawnEntity(HiddenPocketEntityId, MapCoordinates.Nullspace);
}
@@ -185,9 +191,15 @@ namespace Content.Client.Inventory
return;
if (ev.Function == ContentKeyFunctions.ExamineEntity)
{
_examine.DoExamine(slot.Entity.Value);
ev.Handle();
}
else if (ev.Function == EngineKeyFunctions.UseSecondary)
{
_ui.GetUIController<VerbMenuUIController>().OpenVerbMenu(slot.Entity.Value);
ev.Handle();
}
}
private void AddInventoryButton(EntityUid invUid, string slotId, InventoryComponent inv)
@@ -198,7 +210,8 @@ namespace Content.Client.Inventory
var entity = container.ContainedEntity;
// If this is a full pocket, obscure the real entity
if (entity != null && slotDef.StripHidden)
// this does not work for modified clients because they are still sent the real entity
if (entity != null && _strippable.IsStripHidden(slotDef, _player.LocalEntity))
entity = _virtualHiddenEntity;
var button = new SlotButton(new SlotData(slotDef, container));

View File

@@ -5,6 +5,7 @@ using Content.Client.Clickable;
using Content.Client.DebugMon;
using Content.Client.Eui;
using Content.Client.Fullscreen;
using Content.Client.GameTicking.Managers;
using Content.Client.GhostKick;
using Content.Client.Guidebook;
using Content.Client.Launcher;
@@ -57,6 +58,7 @@ namespace Content.Client.IoC
collection.Register<DebugMonitorManager>();
collection.Register<PlayerRateLimitManager>();
collection.Register<SharedPlayerRateLimitManager, PlayerRateLimitManager>();
collection.Register<TitleWindowManager>();
}
}
}

View File

@@ -21,6 +21,22 @@ public sealed class HandheldLightSystem : SharedHandheldLightSystem
SubscribeLocalEvent<HandheldLightComponent, AppearanceChangeEvent>(OnAppearanceChange);
}
/// <remarks>
/// TODO: Not properly predicted yet. Don't call this function if you want a the actual return value!
/// </remarks>
public override bool TurnOff(Entity<HandheldLightComponent> ent, bool makeNoise = true)
{
return true;
}
/// <remarks>
/// TODO: Not properly predicted yet. Don't call this function if you want a the actual return value!
/// </remarks>
public override bool TurnOn(EntityUid user, Entity<HandheldLightComponent> uid)
{
return true;
}
private void OnAppearanceChange(EntityUid uid, HandheldLightComponent? component, ref AppearanceChangeEvent args)
{
if (!Resolve(uid, ref component))

View File

@@ -116,7 +116,7 @@ namespace Content.Client.Lobby
return;
}
Lobby!.StationTime.Text = Loc.GetString("lobby-state-player-status-round-not-started");
Lobby!.StationTime.Text = Loc.GetString("lobby-state-player-status-round-not-started");
string text;
if (_gameTicker.Paused)
@@ -136,6 +136,10 @@ namespace Content.Client.Lobby
{
text = Loc.GetString(seconds < -5 ? "lobby-state-right-now-question" : "lobby-state-right-now-confirmation");
}
else if (difference.TotalHours >= 1)
{
text = $"{Math.Floor(difference.TotalHours)}:{difference.Minutes:D2}:{difference.Seconds:D2}";
}
else
{
text = $"{difference.Minutes}:{difference.Seconds:D2}";

View File

@@ -279,7 +279,7 @@ public sealed class LobbyUIController : UIController, IOnStateEntered<LobbyState
_profileEditor.OnOpenGuidebook += _guide.OpenHelp;
_characterSetup = new CharacterSetupGui(EntityManager, _prototypeManager, _resourceCache, _preferencesManager, _profileEditor);
_characterSetup = new CharacterSetupGui(_profileEditor);
_characterSetup.CloseButton.OnPressed += _ =>
{
@@ -455,7 +455,21 @@ public sealed class LobbyUIController : UIController, IOnStateEntered<LobbyState
{
EntityUid dummyEnt;
if (humanoid is not null)
EntProtoId? previewEntity = null;
if (humanoid != null && jobClothes)
{
job ??= GetPreferredJob(humanoid);
previewEntity = job.JobPreviewEntity ?? (EntProtoId?)job?.JobEntity;
}
if (previewEntity != null)
{
// Special type like borg or AI, do not spawn a human just spawn the entity.
dummyEnt = EntityManager.SpawnEntity(previewEntity, MapCoordinates.Nullspace);
return dummyEnt;
}
else if (humanoid is not null)
{
var dummy = _prototypeManager.Index<SpeciesPrototype>(humanoid.Species).DollPrototype;
dummyEnt = EntityManager.SpawnEntity(dummy, MapCoordinates.Nullspace);
@@ -469,7 +483,8 @@ public sealed class LobbyUIController : UIController, IOnStateEntered<LobbyState
if (humanoid != null && jobClothes)
{
job ??= GetPreferredJob(humanoid);
DebugTools.Assert(job != null);
GiveDummyJobClothes(dummyEnt, humanoid, job);
if (_prototypeManager.HasIndex<RoleLoadoutPrototype>(LoadoutSystem.GetJobPrototype(job.ID)))

View File

@@ -6,6 +6,7 @@
SeparationOverride="0"
Name="InternalHBox">
<SpriteView Scale="2 2"
Margin="0 4 4 4"
OverrideDirection="South"
Name="View"/>
<Label Name="DescriptionLabel"

View File

@@ -2,6 +2,7 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:gfx="clr-namespace:Robust.Client.Graphics;assembly=Robust.Client"
xmlns:style="clr-namespace:Content.Client.Stylesheets"
xmlns:cc="clr-namespace:Content.Client.Administration.UI.CustomControls"
VerticalExpand="True">
<Control>
<PanelContainer Name="BackgroundPanel" />
@@ -10,10 +11,15 @@
<Label Text="{Loc 'character-setup-gui-character-setup-label'}"
Margin="8 0 0 0" VAlign="Center"
StyleClasses="LabelHeadingBigger" />
<Button Name="StatsButton" HorizontalExpand="True"
Text="{Loc 'character-setup-gui-character-setup-stats-button'}"
StyleClasses="ButtonBig"
HorizontalAlignment="Right" />
<cc:CommandButton Name="AdminRemarksButton"
Command="adminremarks"
Text="{Loc 'character-setup-gui-character-setup-adminremarks-button'}"
StyleClasses="ButtonBig" />
<Button Name="RulesButton"
Text="{Loc 'character-setup-gui-character-setup-rules-button'}"
StyleClasses="ButtonBig"/>

View File

@@ -1,6 +1,7 @@
using Content.Client.Info;
using Content.Client.Info.PlaytimeStats;
using Content.Client.Resources;
using Content.Shared.CCVar;
using Content.Shared.Preferences;
using Robust.Client.AutoGenerated;
using Robust.Client.Graphics;
@@ -8,6 +9,7 @@ using Robust.Client.ResourceManagement;
using Robust.Client.UserInterface;
using Robust.Client.UserInterface.Controls;
using Robust.Client.UserInterface.XAML;
using Robust.Shared.Configuration;
using Robust.Shared.Prototypes;
namespace Content.Client.Lobby.UI
@@ -18,28 +20,23 @@ namespace Content.Client.Lobby.UI
[GenerateTypedNameReferences]
public sealed partial class CharacterSetupGui : Control
{
private readonly IClientPreferencesManager _preferencesManager;
private readonly IEntityManager _entManager;
private readonly IPrototypeManager _protomanager;
[Dependency] private readonly IClientPreferencesManager _preferencesManager = default!;
[Dependency] private readonly IEntityManager _entManager = default!;
[Dependency] private readonly IPrototypeManager _protomanager = default!;
[Dependency] private readonly IResourceCache _resourceCache = default!;
[Dependency] private readonly IConfigurationManager _cfg = default!;
private readonly Button _createNewCharacterButton;
public event Action<int>? SelectCharacter;
public event Action<int>? DeleteCharacter;
public CharacterSetupGui(
IEntityManager entManager,
IPrototypeManager protoManager,
IResourceCache resourceCache,
IClientPreferencesManager preferencesManager,
HumanoidProfileEditor profileEditor)
public CharacterSetupGui(HumanoidProfileEditor profileEditor)
{
RobustXamlLoader.Load(this);
_preferencesManager = preferencesManager;
_entManager = entManager;
_protomanager = protoManager;
IoCManager.InjectDependencies(this);
var panelTex = resourceCache.GetTexture("/Textures/Interface/Nano/button.svg.96dpi.png");
var panelTex = _resourceCache.GetTexture("/Textures/Interface/Nano/button.svg.96dpi.png");
var back = new StyleBoxTexture
{
Texture = panelTex,
@@ -56,7 +53,7 @@ namespace Content.Client.Lobby.UI
_createNewCharacterButton.OnPressed += args =>
{
preferencesManager.CreateCharacter(HumanoidCharacterProfile.Random());
_preferencesManager.CreateCharacter(HumanoidCharacterProfile.Random());
ReloadCharacterPickers();
args.Event.Handle();
};
@@ -65,6 +62,8 @@ namespace Content.Client.Lobby.UI
RulesButton.OnPressed += _ => new RulesAndInfoWindow().Open();
StatsButton.OnPressed += _ => new PlaytimeStatsWindow().OpenCentered();
_cfg.OnValueChanged(CCVars.SeeOwnNotes, p => AdminRemarksButton.Visible = p, true);
}
/// <summary>

View File

@@ -140,7 +140,7 @@
</BoxContainer>
<!-- Right side -->
<BoxContainer Orientation="Vertical" VerticalExpand="True" VerticalAlignment="Center">
<SpriteView Name="SpriteView" Scale="8 8" SizeFlagsStretchRatio="1" />
<SpriteView Name="SpriteView" Scale="8 8" Margin="4" SizeFlagsStretchRatio="1" />
<BoxContainer Orientation="Horizontal" HorizontalAlignment="Center" Margin="0 5">
<Button Name="SpriteRotateLeft" Text="◀" StyleClasses="OpenRight" />
<cc:VSeparator Margin="2 0 3 0" />

View File

@@ -36,17 +36,18 @@ public sealed partial class LoadoutContainer : BoxContainer
if (_protoManager.TryIndex(proto, out var loadProto))
{
var ent = _entManager.System<LoadoutSystem>().GetFirstOrNull(loadProto);
var ent = loadProto.DummyEntity ?? _entManager.System<LoadoutSystem>().GetFirstOrNull(loadProto);
if (ent != null)
{
_entity = _entManager.SpawnEntity(ent, MapCoordinates.Nullspace);
Sprite.SetEntity(_entity);
if (ent == null)
return;
var spriteTooltip = new Tooltip();
spriteTooltip.SetMessage(FormattedMessage.FromUnformatted(_entManager.GetComponent<MetaDataComponent>(_entity.Value).EntityDescription));
TooltipSupplier = _ => spriteTooltip;
}
_entity = _entManager.SpawnEntity(ent, MapCoordinates.Nullspace);
Sprite.SetEntity(_entity);
var spriteTooltip = new Tooltip();
spriteTooltip.SetMessage(FormattedMessage.FromUnformatted(_entManager.GetComponent<MetaDataComponent>(_entity.Value).EntityDescription));
TooltipSupplier = _ => spriteTooltip;
}
}

View File

@@ -2,7 +2,6 @@ using Content.Client.Message;
using Content.Client.UserInterface.Systems.EscapeMenu;
using Robust.Client.AutoGenerated;
using Robust.Client.Console;
using Robust.Client.State;
using Robust.Client.UserInterface;
using Robust.Client.UserInterface.XAML;

View File

@@ -0,0 +1,46 @@
using Content.Shared.Movement.Components;
using Content.Shared.Movement.Systems;
using Robust.Client.GameObjects;
using Robust.Shared.Timing;
namespace Content.Client.Movement.Systems;
/// <summary>
/// Controls the switching of motion and standing still animation
/// </summary>
public sealed class ClientSpriteMovementSystem : SharedSpriteMovementSystem
{
[Dependency] private readonly IGameTiming _timing = default!;
private EntityQuery<SpriteComponent> _spriteQuery;
public override void Initialize()
{
base.Initialize();
_spriteQuery = GetEntityQuery<SpriteComponent>();
SubscribeLocalEvent<SpriteMovementComponent, AfterAutoHandleStateEvent>(OnAfterAutoHandleState);
}
private void OnAfterAutoHandleState(Entity<SpriteMovementComponent> ent, ref AfterAutoHandleStateEvent args)
{
if (!_spriteQuery.TryGetComponent(ent, out var sprite))
return;
if (ent.Comp.IsMoving)
{
foreach (var (layer, state) in ent.Comp.MovementLayers)
{
sprite.LayerSetData(layer, state);
}
}
else
{
foreach (var (layer, state) in ent.Comp.NoMovementLayers)
{
sprite.LayerSetData(layer, state);
}
}
}
}

View File

@@ -1,51 +0,0 @@
using Content.Shared.Movement.Components;
using Content.Shared.Movement.Events;
using Content.Shared.Movement.Systems;
using Robust.Client.GameObjects;
using Robust.Shared.Timing;
namespace Content.Client.Movement.Systems;
/// <summary>
/// Handles setting sprite states based on whether an entity has movement input.
/// </summary>
public sealed class SpriteMovementSystem : EntitySystem
{
[Dependency] private readonly IGameTiming _timing = default!;
private EntityQuery<SpriteComponent> _spriteQuery;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<SpriteMovementComponent, MoveInputEvent>(OnSpriteMoveInput);
_spriteQuery = GetEntityQuery<SpriteComponent>();
}
private void OnSpriteMoveInput(EntityUid uid, SpriteMovementComponent component, ref MoveInputEvent args)
{
if (!_timing.IsFirstTimePredicted)
return;
var oldMoving = (SharedMoverController.GetNormalizedMovement(args.OldMovement) & MoveButtons.AnyDirection) != MoveButtons.None;
var moving = (SharedMoverController.GetNormalizedMovement(args.Entity.Comp.HeldMoveButtons) & MoveButtons.AnyDirection) != MoveButtons.None;
if (oldMoving == moving || !_spriteQuery.TryGetComponent(uid, out var sprite))
return;
if (moving)
{
foreach (var (layer, state) in component.MovementLayers)
{
sprite.LayerSetData(layer, state);
}
}
else
{
foreach (var (layer, state) in component.NoMovementLayers)
{
sprite.LayerSetData(layer, state);
}
}
}
}

View File

@@ -1,149 +0,0 @@
using System.Numerics;
using Content.Client.Buckle;
using Content.Client.Gravity;
using Content.Shared.ActionBlocker;
using Content.Shared.Mobs.Systems;
using Content.Shared.Movement.Components;
using Content.Shared.Movement.Systems;
using Robust.Client.Animations;
using Robust.Client.GameObjects;
using Robust.Shared.Animations;
namespace Content.Client.Movement.Systems;
public sealed class WaddleAnimationSystem : SharedWaddleAnimationSystem
{
[Dependency] private readonly AnimationPlayerSystem _animation = default!;
[Dependency] private readonly GravitySystem _gravity = default!;
[Dependency] private readonly ActionBlockerSystem _actionBlocker = default!;
[Dependency] private readonly BuckleSystem _buckle = default!;
[Dependency] private readonly MobStateSystem _mobState = default!;
public override void Initialize()
{
base.Initialize();
SubscribeAllEvent<StartedWaddlingEvent>(OnStartWaddling);
SubscribeLocalEvent<WaddleAnimationComponent, AnimationCompletedEvent>(OnAnimationCompleted);
SubscribeAllEvent<StoppedWaddlingEvent>(OnStopWaddling);
}
private void OnStartWaddling(StartedWaddlingEvent msg, EntitySessionEventArgs args)
{
if (TryComp<WaddleAnimationComponent>(GetEntity(msg.Entity), out var comp))
StartWaddling((GetEntity(msg.Entity), comp));
}
private void OnStopWaddling(StoppedWaddlingEvent msg, EntitySessionEventArgs args)
{
if (TryComp<WaddleAnimationComponent>(GetEntity(msg.Entity), out var comp))
StopWaddling((GetEntity(msg.Entity), comp));
}
private void StartWaddling(Entity<WaddleAnimationComponent> entity)
{
if (_animation.HasRunningAnimation(entity.Owner, entity.Comp.KeyName))
return;
if (!TryComp<InputMoverComponent>(entity.Owner, out var mover))
return;
if (_gravity.IsWeightless(entity.Owner))
return;
if (!_actionBlocker.CanMove(entity.Owner, mover))
return;
// Do nothing if buckled in
if (_buckle.IsBuckled(entity.Owner))
return;
// Do nothing if crit or dead (for obvious reasons)
if (_mobState.IsIncapacitated(entity.Owner))
return;
PlayWaddleAnimationUsing(
(entity.Owner, entity.Comp),
CalculateAnimationLength(entity.Comp, mover),
CalculateTumbleIntensity(entity.Comp)
);
}
private static float CalculateTumbleIntensity(WaddleAnimationComponent component)
{
return component.LastStep ? 360 - component.TumbleIntensity : component.TumbleIntensity;
}
private static float CalculateAnimationLength(WaddleAnimationComponent component, InputMoverComponent mover)
{
return mover.Sprinting ? component.AnimationLength * component.RunAnimationLengthMultiplier : component.AnimationLength;
}
private void OnAnimationCompleted(Entity<WaddleAnimationComponent> entity, ref AnimationCompletedEvent args)
{
if (args.Key != entity.Comp.KeyName)
return;
if (!TryComp<InputMoverComponent>(entity.Owner, out var mover))
return;
PlayWaddleAnimationUsing(
(entity.Owner, entity.Comp),
CalculateAnimationLength(entity.Comp, mover),
CalculateTumbleIntensity(entity.Comp)
);
}
private void StopWaddling(Entity<WaddleAnimationComponent> entity)
{
if (!_animation.HasRunningAnimation(entity.Owner, entity.Comp.KeyName))
return;
_animation.Stop(entity.Owner, entity.Comp.KeyName);
if (!TryComp<SpriteComponent>(entity.Owner, out var sprite))
return;
sprite.Offset = new Vector2();
sprite.Rotation = Angle.FromDegrees(0);
}
private void PlayWaddleAnimationUsing(Entity<WaddleAnimationComponent> entity, float len, float tumbleIntensity)
{
entity.Comp.LastStep = !entity.Comp.LastStep;
var anim = new Animation()
{
Length = TimeSpan.FromSeconds(len),
AnimationTracks =
{
new AnimationTrackComponentProperty()
{
ComponentType = typeof(SpriteComponent),
Property = nameof(SpriteComponent.Rotation),
InterpolationMode = AnimationInterpolationMode.Linear,
KeyFrames =
{
new AnimationTrackProperty.KeyFrame(Angle.FromDegrees(0), 0),
new AnimationTrackProperty.KeyFrame(Angle.FromDegrees(tumbleIntensity), len/2),
new AnimationTrackProperty.KeyFrame(Angle.FromDegrees(0), len/2),
}
},
new AnimationTrackComponentProperty()
{
ComponentType = typeof(SpriteComponent),
Property = nameof(SpriteComponent.Offset),
InterpolationMode = AnimationInterpolationMode.Linear,
KeyFrames =
{
new AnimationTrackProperty.KeyFrame(new Vector2(), 0),
new AnimationTrackProperty.KeyFrame(entity.Comp.HopIntensity, len/2),
new AnimationTrackProperty.KeyFrame(new Vector2(), len/2),
}
}
}
};
_animation.Play(entity.Owner, anim, entity.Comp.KeyName);
}
}

View File

@@ -14,6 +14,7 @@ public abstract class EquipmentHudSystem<T> : EntitySystem where T : IComponent
{
[Dependency] private readonly IPlayerManager _player = default!;
[ViewVariables]
protected bool IsActive;
protected virtual SlotFlags TargetSlots => ~SlotFlags.POCKET;
@@ -102,7 +103,7 @@ public abstract class EquipmentHudSystem<T> : EntitySystem where T : IComponent
args.Components.Add(component);
}
private void RefreshOverlay(EntityUid uid)
protected void RefreshOverlay(EntityUid uid)
{
if (uid != _player.LocalSession?.AttachedEntity)
return;

View File

@@ -21,9 +21,16 @@ public sealed class ShowHealthBarsSystem : EquipmentHudSystem<ShowHealthBarsComp
{
base.Initialize();
SubscribeLocalEvent<ShowHealthBarsComponent, AfterAutoHandleStateEvent>(OnHandleState);
_overlay = new(EntityManager, _prototype);
}
private void OnHandleState(Entity<ShowHealthBarsComponent> ent, ref AfterAutoHandleStateEvent args)
{
RefreshOverlay(ent);
}
protected override void UpdateInternal(RefreshEquipmentHudEvent<ShowHealthBarsComponent> component)
{
base.UpdateInternal(component);

View File

@@ -17,6 +17,7 @@ public sealed class ShowHealthIconsSystem : EquipmentHudSystem<ShowHealthIconsCo
{
[Dependency] private readonly IPrototypeManager _prototypeMan = default!;
[ViewVariables]
public HashSet<string> DamageContainers = new();
public override void Initialize()
@@ -24,6 +25,7 @@ public sealed class ShowHealthIconsSystem : EquipmentHudSystem<ShowHealthIconsCo
base.Initialize();
SubscribeLocalEvent<DamageableComponent, GetStatusIconsEvent>(OnGetStatusIconsEvent);
SubscribeLocalEvent<ShowHealthIconsComponent, AfterAutoHandleStateEvent>(OnHandleState);
}
protected override void UpdateInternal(RefreshEquipmentHudEvent<ShowHealthIconsComponent> component)
@@ -43,6 +45,11 @@ public sealed class ShowHealthIconsSystem : EquipmentHudSystem<ShowHealthIconsCo
DamageContainers.Clear();
}
private void OnHandleState(Entity<ShowHealthIconsComponent> ent, ref AfterAutoHandleStateEvent args)
{
RefreshOverlay(ent);
}
private void OnGetStatusIconsEvent(Entity<DamageableComponent> entity, ref GetStatusIconsEvent args)
{
if (!IsActive)

View File

@@ -22,6 +22,6 @@ public sealed class ShowThirstIconsSystem : EquipmentHudSystem<ShowThirstIconsCo
return;
if (_thirst.TryGetStatusIconPrototype(component, out var iconPrototype))
ev.StatusIcons.Add(iconPrototype!);
ev.StatusIcons.Add(iconPrototype);
}
}

View File

@@ -35,7 +35,7 @@ public sealed partial class StencilOverlay
var matty = Matrix3x2.Multiply(matrix, invMatrix);
worldHandle.SetTransform(matty);
foreach (var tile in grid.Comp.GetTilesIntersecting(worldAABB))
foreach (var tile in _map.GetTilesIntersecting(grid.Owner, grid, worldAABB))
{
// Ignored tiles for stencil
if (_weather.CanWeatherAffect(grid.Owner, grid, tile))

View File

@@ -26,6 +26,7 @@ public sealed partial class StencilOverlay : Overlay
[Dependency] private readonly IPrototypeManager _protoManager = default!;
private readonly ParallaxSystem _parallax;
private readonly SharedTransformSystem _transform;
private readonly SharedMapSystem _map;
private readonly SpriteSystem _sprite;
private readonly WeatherSystem _weather;
@@ -35,11 +36,12 @@ public sealed partial class StencilOverlay : Overlay
private readonly ShaderInstance _shader;
public StencilOverlay(ParallaxSystem parallax, SharedTransformSystem transform, SpriteSystem sprite, WeatherSystem weather)
public StencilOverlay(ParallaxSystem parallax, SharedTransformSystem transform, SharedMapSystem map, SpriteSystem sprite, WeatherSystem weather)
{
ZIndex = ParallaxSystem.ParallaxZIndex + 1;
_parallax = parallax;
_transform = transform;
_map = map;
_sprite = sprite;
_weather = weather;
IoCManager.InjectDependencies(this);
@@ -76,16 +78,16 @@ public sealed partial class StencilOverlay : Overlay
//CP14 Overlays
if (_entManager.TryGetComponent<CP14WorldEdgeComponent>(mapUid, out var worldEdge))
if (_entManager.TryGetComponent<CP14CloudShadowsComponent>(mapUid, out var shadows))
{
DrawWorldEdge(args, worldEdge, invMatrix);
DrawCloudShadows(args, shadows, invMatrix);
}
//CP14 Overlays end
//CP14 Overlays
if (_entManager.TryGetComponent<CP14CloudShadowsComponent>(mapUid, out var shadows))
if (_entManager.TryGetComponent<CP14WorldEdgeComponent>(mapUid, out var worldEdge))
{
DrawCloudShadows(args, shadows, invMatrix);
DrawWorldEdge(args, worldEdge, invMatrix);
}
//CP14 Overlays end

Some files were not shown because too many files have changed in this diff Show More