# Summary
This PR adds the alt title "Foreign Service Officer" to the consular
role. The alt title can only be selected if the citizenship is set to
"Sol Alliance".
PR is a commission for the_ill_fated and has been pre-approved by human
lore.
## Changes
- Added logic to allow alt titles to be locked to citizenship. It
follows the same logic as faction locking.
- Added "Foreign Service Officer" to the consular role, locked to "Sol
Alliance" citizenship.
## Preview
<img width="874" height="40" alt="Screenshot 2026-02-06 211249"
src="https://github.com/user-attachments/assets/8a017db9-38af-4f57-a9bb-54d8aa5b6c59"
/>
## Description
Hello! First PR here so I figured I'd do a big one ~~and stress out the
maintainers as quickly as possible~~. :)
While going through the process of creating a character the 'faction
select' UI stuck out to me as *functional*, but difficult to parse
visually and pretty dated looking by modern SS13 standards. (Not too
bad, but you know what I mean)
The new version is realistically *bit* too flashy for what it is (a
single-use interface hidden away in the character creation menu), but it
was very good practise for me to get back into DM/TGUI programming so it
works out either way.
I'm very happy to implement any feedback or suggested changes that could
help improve it.
## Actual Description
This PR replaces the old HTML 'faction select' interface with a new TGUI
one, and also cleans up and fixes some adjacent code I bumped into while
working on it.
A couple of notes about the current version:
* The 'Citizenship Check' line is currently non-functional and will
always show a checkmark. I know a lot of the corporations have specific
backgrounds/origins they won't hire people from, but I wasn't sure where
exactly that's enforced in code, if at all.
(I noticed `/datum/faction` has a `blacklisted_citizenship_types`
variable, but it's currently unused.)
* De-adminning or changing species doesn't immediately update the UI to
reflect the changes, you have to click on something new to trigger an
update manually. This doesn't have any actual consequences since I made
sure to sanitise everything, but it is a visual thing.
## Screenshots
<details><summary><b>Collapsed so it doesn't take up so much
room:</b></summary>
### Before
<img width="752" height="482" alt="xziPCYXbkn"
src="https://github.com/user-attachments/assets/334e0609-c2e3-4a33-92ad-15120b78ab35"
/>
### After
<img width="900" height="645" alt="NT"
src="https://github.com/user-attachments/assets/476702c7-c83c-4fee-a2cd-34d912468903"
/>
### Unathi attempting to join Zeng-Hu (Button disabled)
<img width="900" height="645" alt="Unathi fail"
src="https://github.com/user-attachments/assets/c5a256c1-5531-4cbe-8198-27411c1aab9a"
/>
### Faction Pages
<details><summary><b>Stellar Corporate Conglomerate</b></summary>
<img width="900" height="645" alt="SCC"
src="https://github.com/user-attachments/assets/6e8bdb64-a220-41d4-a503-1268f9f93a30"
/>
</details>
<details><summary><b>Nanotrasen</b></summary>
<img width="900" height="645" alt="NT"
src="https://github.com/user-attachments/assets/1ff107b5-7b3e-40e2-8f86-390ce29e165b"
/>
</details>
<details><summary><b>Hephaestus Industries</b></summary>
<img width="900" height="645" alt="HI"
src="https://github.com/user-attachments/assets/6fc23159-990d-4de2-9745-827e11ca0442"
/>
</details>
<details><summary><b>Idris Incorporated</b></summary>
<img width="900" height="645" alt="II"
src="https://github.com/user-attachments/assets/366a9824-81f1-4dd1-b385-4fa3968e39e0"
/>
</details>
<details><summary><b>Orion Express</b></summary>
<img width="900" height="645" alt="OE"
src="https://github.com/user-attachments/assets/5588f0fe-d6c3-44b4-8297-cca4ed991bd8"
/>
</details>
<details><summary><b>Private Military Contracting Group</b></summary>
<img width="900" height="645" alt="PMCG"
src="https://github.com/user-attachments/assets/a3dc6540-bfde-4fb2-939d-11e066b1e316"
/>
</details>
<details><summary><b>Zavodskoi Interstellar</b></summary>
<img width="900" height="645" alt="ZI"
src="https://github.com/user-attachments/assets/a8c2c33d-7138-4164-a9f1-6a2dc3eb3e61"
/>
</details>
<details><summary><b>Zeng-Hu Pharmaceuticals</b></summary>
<img width="900" height="645" alt="ZHP"
src="https://github.com/user-attachments/assets/4535ba80-efcb-4e50-9396-299bc16db2b5"
/>
</details>
<details><summary><b>Independent</b></summary>
<img width="900" height="645" alt="Independent"
src="https://github.com/user-attachments/assets/dcf7b46c-edce-4104-a4f5-000479a9f963"
/>
</details>
<hr>
</details>
## Changelog
- rscadd: "Revamped the 'Faction Select' UI in the occupation menu of
character setup."
- bugfix: "Fixed changing species in character setup not resetting your
faction if it became invalid."
- Not player-facing:
- Fixed the TGUI dev server not working by bumping up the 'source-map'
version. You still have to manually refresh the interface with Ctrl+R or
Ctrl+F5 but it actually links now.
- Added a `wiki_page` variable to each faction to allow for it to be
manually set rather than being exclusively based on the name. (Mostly
just futureproofing)
- Added some line breaks to the faction descriptions to make them more
easily readable.
---------
Signed-off-by: SabreML <57483089+SabreML@users.noreply.github.com>
Co-authored-by: VMSolidus <evilexecutive@gmail.com>
Creates a framework to restrict certain alt titles to certain factions.
As an example and natural logical consequence:
"Corporate Reporter" can only be used by Corporate employees
"Freelance Journalist" can only be used by Independent crew
I plan to use this system in a later PR.
---------
Signed-off-by: FlamingLily <80451102+FlamingLily@users.noreply.github.com>
* SDQL2 update
* fix that verb
* cl
* fix that
* toworld
* this is pointless
* update info
* siiiiick..
* vv edit update
* fix that
* fix editing vars
* fix VV
* Port the /TG/ globals controller.
* part 1
* part 2
* oops
* part 3
* Hollow Purple
* sadas
* bsbsdb
* muda na agaki ta
* ids 1-15
* 16-31
* 41-75
* bring me back to how things used to be before i lost it all
* the strength of mayhem
* final touches
* cl
* protect some vars
* update sdql2 to use glob
* stuff?
* forgot that is not defined there
* whoops
* observ
* but it never gets better
* a
---------
Co-authored-by: Matt Atlas <liermattia@gmail.com>
* Added apprentice alt-titles for Security and Engineering
* CL
* Update html/changelogs/GeneralCamo - Cadet Alt Titles.yml
* Fix build
* Added age restrictions for intern alt-titles per code review
* Fix missing parameter in character setup (broke per-species alt title age restrictions)
* tgui the beginning
* binaries and the like
* Bring in the last of it
* Example radio UI
* delete example
* NTOS Main Menu, start on manifest, tgui states
* tasks.json
* gunnery ui pt 1
* okay
* fix everything
* scss update
* oops
* manifest gigablast
* downloader part 1
* download prt 2
* NTOSDownloader final
* mfw committing to_worlds
* gunnery console pt2
* i cooked
* targeting (finished)
* one vueui down
* voting ui almost done
* MY MIND FEELS LIKE AN ARCH ENEMYYYY
* voting ui down
* photocopier
* ntos config + download fixes
* photocopier 2
* refactor define
* NTOS client manager + fixes
* fax machine final (it also uses toner now)
* marching forwards... left behind...
* ntnrc part 1
* canister
* add quotes
* portable pumps pt1 + more backgrounds
* oops
* finish the portable pump
* freezers
so I'll keep on pushing forward... you haven't seen the last of me... oooooooh...
* doors ui pt1
* finish doors UI (forgive me wildkins it's a bit of shitcode)
* vitals monitor, make things use labeled lists, new backgrounds
* mais j'envoyé aucun mayday...
* maglock pt1
* pour ça je me suis perdu...
* infrared
* fix that
* prox sensor pt1
* prox sensor
* signaler (this was actually pretty hard)
* atmos control pt1
* atmos control pt1.1
* atmos pt 2
* fuel injector
* multitool UI
* jammer
* list viewer
* APC
* portgen
* targeting console updates + SMES ui
* new themes, shield generator
* supermatter
* Add ore detector and (shitty) NTNet Relay
* orderterminal pt1
* orderterminal pt2
* smartfridge
* Add (air-)tank GUI update ore detector size
* Adds Transfer Valves
* Add AtmoScrubber
* analyzer pt1
* weapons analyzer pt2
* bodyscanner pt1
* bodyscanner pt2
* fix this shitcode
* seed storage
* appearance changer
* appearance changer final
* sleeper pt1
* sleeper
* gps
* vehicles
* chem dispenser
* lily request
* holopad
* tgui modules pt1
* ppanel
* damage menu
* fixes
* im here too now
* follow menu, search bars
* quikpay
* quikpay fixes
* circuit printer
* ppanel
* ppanel updates
* pai
* turret controls (i want to kill myself)
* tweak
* remove the boardgame
* guntracker
* implant tracker
* penal mechs
come close to me, come close to me
* chem codex
* pai radio
* doorjack
* pai directives
* signaler removal, sensors
* ghost spawner
* spawnpoint
* fixes
* teleporter
* one more to the chopping block
* account database
* remove divider
* scanner, atmos
* latejoin ui pt1
* latejoin
* records pt1
* RECORDS UI DONE
* delete interpreter & records
* CHAT FUCKING CLIENT
* data updates
* fix some things
* final UI, log
* basic nanoui fix
* antag panel
* remove vueui
* atm update
* vending update
* warrants, cameras
* ntmonitor
* time comes for all
* preserve this legacy
* bring that back (oops)
* rcon, ui auto update for computer UIs, remove rcon computers
* alarm monitoring (a bit broke and also todo: add custom alarm monitoring programs to a few consoles)
* A LIKE SUPREME
* a
* power monitor
* lights on
* fuck this code, fuck nanoui modules, and fuck nanoui
* LEAVE IT OH SO FAR BEHIND
* fix alarm monitoring for synths
* I SAW IN YOU WHAT LIFE WAS MISSING
* comms console
* idcard and record updates
* turn the light on
* arcade
* pt2
* news browser
* static
* crusher
* f
* COULD I JUST SLEIGH THE GOLD FROM THE BALLS? I'M SO FRUSTRATED OH COULD YOU TELL? IF I HEAR ONE MORE VUEUI OR ONE NANOUI I'M GONNA LOSE IT SO LET ME GOOOOOOOOOOOOOOOOO
* codeowners & suit sensors
* html ui style removal
* make lint happy
* resist and disorder
* i slowly get up and turn off the noise, already fed up...
* pleaseeeeeeeeeeeeeee
* THE CREDIT LARP IS NECESSARY
* i hold the keys
* RISE UP
* fix that?
* harry's suggestions xoxo
* runtime fix pt2
* You are the only thing that I still care about
* adds build workflow
* Update update_tgui.yml
* adds some needed steps
* ATM
* misc fixes and tweaks
* fixes 2
* make newscasters usable and fix use power on freezers
* turret control is clearer
---------
Co-authored-by: John Wildkins <john.wildkins@gmail.com>
Co-authored-by: Matt Atlas <liermattia@gmail.com>
Co-authored-by: harryob <55142896+harryob@users.noreply.github.com>
Co-authored-by: Werner <Arrow768@users.noreply.github.com>
Co-authored-by: Geeves <ggrobler447@gmail.com>
Co-authored-by: harryob <me@harryob.live>
* Update the codebase to 515.
* edit that
* WHOOPS
* maor
* maybe works
* libcall and shit
* do that too
* remove that
* auxtools isnt updated so get rid of it
* actually remove auxtools lol
Co-authored-by: Matt Atlas <liermattia@gmail.com>
changes:
rscadd: "Ported a new chat system, Goonchat, that allows for cool things like changing font style, size, spacing, highlighting up to 5 strings in the chat, and DARK MODE."
rscadd: "Repeated chat messages can now get compacted. You can disable this in goonchat settings."
rscadd: "You can change icon style to any font on your system."
tweak: "The game window has been altered a bit to adjust for this."
rscdel: "Removed skin style prefs as they are no longer used."
* Factions may now have their own specific job blacklists for species.
* Fixes CL blacklists for NT, EPMC, Heph, Idris, Zavod and Zeng-Hu
* Update changelog.
Co-authored-by: ParadoxSpace <takyahasu@gmail.com>
Well this was a dumbass mistake. But what happened is that I sent a pointer to a string instead of the string itself. The result was interesting, but non-functional.
Fixes#5778.
Job age requirements now take into account alt titles. Alt titles are automatically limited to only ones a character is old enough for.
The latejoin screen now shows what alt-title you have selected.
The occupation preferences screen now functions differently if only one alt-title is available, or if the base job is not available.
Tidies up the job age requirement system.
Intent of this PR: make factions actually matter.
How we're going to do this:
Make factions limit job choices.
Make factions have alternative loadouts that override job uniforms
Make factions be visible in the employment records.
Revert existing faction loadout options or put them behind a preference, in favour of new shit.
Newscaster stories can now be multiple lines long and contain pencode formatting.
You can now post and view comments on individual newscaster stories.
Newscaster stories have slightly neater styling.
You can now like and dislike newscaster stories, and these are tracked per-story.
Journalists are now their own role, with a Security Correspondent alt-title.
The merchandise store (when has it ever been used?) has been replaced with a journalist's office.
The journalist has a pet spiderling in a jar, named Peter. He's harmless. Probably.
changes:
Changed a lot of string building to use lists & Join() - this should reduce the number of strings generated at runtime.
Fixed a bug where the incidents menu was not populated.
Changed color boxes to use CSS & divs instead of one-cell tables.