Tram Driver (#44412)

* tram-stub

* tram driving away

* spriting hell

* it will be our year took a long time to come

* polish

* more

* fixes

* onceagainmorefixed

* e

* fix real

* Update Resources/Prototypes/Loadouts/RoleLoadouts/role_loadouts.yml

Co-authored-by: Whatstone <166147148+whatston3@users.noreply.github.com>

* Update play_time_trackers.yml

* resprite

* additional spriting things

---------

Co-authored-by: nomdéraisonnablementlong <you@example.com>
Co-authored-by: Whatstone <166147148+whatston3@users.noreply.github.com>
This commit is contained in:
KeTuFaisPiKiNut 2026-07-29 17:25:19 -04:00 • committed by GitHub
parent 45f91a84a4
commit b2db76f07c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
46 changed files with 372 additions and 2 deletions

View file

@ -47,6 +47,7 @@ job-description-musician = Entertain the crew with your unique musical talents.
job-description-passenger = Enjoy your stay aboard the station with no obligations!
job-description-reporter = Inform and entertain the station's crew with wireless cameras and news bulletins.
job-description-serviceworker = Assist the bar and kitchen with providing sustenance to the crew.
job-description-tram-driver = Drive around a tram from stop to stop.
# Silicon
job-description-borg = Use your robotic chassis to perform a wide variety of specialized tasks.

View file

@ -46,6 +46,7 @@ job-name-security = Security Officer
job-name-serviceworker = Service Worker
job-name-station-ai = Station AI
job-name-technical-assistant = Technical Assistant
job-name-tram-driver = Tram Driver
job-name-visitor = Visitor
job-name-warden = Warden

View file

@ -208,3 +208,8 @@ loadout-group-reporter-head = Reporter hat
loadout-group-reporter-outerclothing = Reporter vest
loadout-group-psychologist-jumpsuit = Psychologist jumpsuit
loadout-group-tramdriver-jumpsuit = Tram driver jumpsuit
loadout-group-tramdriver-outerclothing = Tram driver suit
loadout-group-tramdriver-hat = Tram driver hat
loadout-group-tramdriver-gloves = Tram driver gloves

View file

@ -1551,3 +1551,19 @@
sprite: Clothing/Head/Hats/mitre_clown.rsi
- type: Clothing
sprite: Clothing/Head/Hats/mitre_clown.rsi
- type: entity
parent: ClothingHeadBase
id: ClothingHeadHatTramDriver
name: tram driver hat
description: It smells like confidence.
components:
- type: Sprite
sprite: Clothing/Head/Hats/tramdriver.rsi
- type: Clothing
sprite: Clothing/Head/Hats/tramdriver.rsi
- type: Tag
tags:
- ClothMade
- Recyclable
- WhitelistChameleon

View file

@ -54,3 +54,18 @@
- Recyclable
- HamsterWearable
- WhitelistChameleon
- type: entity
parent: ClothingNeckBase
id: ClothingNeckTieSerious
name: serious tie
description: A perfectly tied tie to get you through the working day.
components:
- type: Sprite
sprite: Clothing/Neck/Ties/serioustie.rsi
- type: Clothing
sprite: Clothing/Neck/Ties/serioustie.rsi
- type: Item
storedSprite:
state: storage
sprite: Clothing/Neck/Ties/serioustie.rsi

View file

@ -308,3 +308,13 @@
- type: StaticPrice
price: 1500
- type: entity
parent: ClothingOuterBase
id: ClothingOuterSuitTramDriver
name: tram driver suit
description: It protects from everything that could distract you. That is, nothing at all.
components:
- type: Sprite
sprite: Clothing/OuterClothing/Suits/tramdriver.rsi
- type: Clothing
sprite: Clothing/OuterClothing/Suits/tramdriver.rsi

View file

@ -894,6 +894,17 @@
- type: Clothing
sprite: Clothing/Uniforms/Jumpsuit/psychologist.rsi
- type: entity
parent: ClothingUniformBase
id: ClothingUniformJumpsuitTramDriver
name: tram driver jumpsuit
description: Perfectly ironed, for well-prepared professionals.
components:
- type: Sprite
sprite: Clothing/Uniforms/Jumpsuit/tramdriver.rsi
- type: Clothing
sprite: Clothing/Uniforms/Jumpsuit/tramdriver.rsi
- type: entity
parent: ClothingUniformBase
id: ClothingUniformJumpsuitReporter

View file

@ -594,3 +594,15 @@
layers:
- state: green
- state: psychologist
- type: entity
id: SpawnPointTramDriver
parent: SpawnPointJobBase
name: tramdriver
components:
- type: SpawnPoint
job_id: TramDriver
- type: Sprite
layers:
- state: green
- state: tramdriver

View file

@ -1284,6 +1284,25 @@
- type: Icon
state: pda-medical
- type: entity
parent: BasePDA
id: TramDriverPDA
name: tram driver PDA
description: A serious driver will always arrive on time.
components:
- type: Pda
id: TramDriverIDCard
- type: Appearance
appearanceDataInit:
enum.PdaVisuals.PdaType:
!type:String
pda-tramdriver
- type: PdaBorderColor
borderColor: "#454a50"
accentVColor: "#ffc500"
- type: Icon
state: pda-tramdriver
- type: entity
parent: BasePDA
id: ReporterPDA

View file

@ -801,6 +801,24 @@
offset: *icon-offset
state: Zookeeper
- type: entity
parent: IDCardStandard
id: TramDriverIDCard
name: tram driver ID card
components:
- type: Sprite
layers:
- state: default
- state: stripe_top
color: "#ffc500"
- state: stripe_bottom
color: "#454a50"
- sprite: *icon-rsi
offset: *icon-offset
state: TramDriver
- type: PresetIdCard
job: TramDriver
#Supply
- type: entity

View file

@ -0,0 +1,28 @@
# Jumpsuit
- type: loadout
id: TramDriverJumpsuit
equipment:
jumpsuit: ClothingUniformJumpsuitTramDriver
# Outer clothing
- type: loadout
id: TramDriverSuit
equipment:
outerClothing: ClothingOuterSuitTramDriver
# Hat
- type: loadout
id: TramDriverHat
equipment:
head: ClothingHeadHatTramDriver
# Glove
- type: loadout
id: TramDriverGlovesWhite
equipment:
head: ClothingHandsGlovesColorWhite
- type: loadout
id: TramDriverGlovesBlack
equipment:
head: ClothingHandsGlovesColorBlack

View file

@ -1337,6 +1337,35 @@
# minLimit: 0
# loadouts:
- type: loadoutGroup
id: TramDriverJumpsuit
name: loadout-group-tramdriver-jumpsuit
minLimit: 1
maxLimit: 1
loadouts:
- TramDriverJumpsuit
- type: loadoutGroup
id: TramDriverOuterClothing
name: loadout-group-tramdriver-outerclothing
minLimit: 0
loadouts:
- TramDriverSuit
- type: loadoutGroup
id: TramDriverHat
name: loadout-group-tramdriver-hat
loadouts:
- TramDriverHat
- type: loadoutGroup
id: TramDriverGloves
name: loadout-group-tramdriver-gloves
minLimit: 0
loadouts:
- TramDriverGlovesWhite
- TramDriverGlovesBlack
# Other
- type: loadoutGroup

View file

@ -491,6 +491,21 @@
#- PsychologistJobTrinkets
- GroupSpeciesBreathTool
- type: roleLoadout
id: JobTramDriver
groups:
- GroupTankHarness
- CommonBackpack
- TramDriverJumpsuit
- TramDriverOuterClothing #Vest and such
- TramDriverHat
- TramDriverGloves
- Glasses
- Survival
- Trinkets
#- TramDriverJobTrinkets
- GroupSpeciesBreathTool
# These loadouts are used for non-crew spawns, like off-station antags and event mobs
# They will be used without player configuration, thus they will only ever apply what is forced by MinLimit

View file

@ -138,6 +138,7 @@
- ClothingUniformJumpsuitMime
- ClothingUniformJumpskirtMime
- ClothingUniformJumpsuitMusician
- ClothingUniformJumpsuitTramDriver
- type: latheRecipePack
id: WinterCoats
@ -177,6 +178,7 @@
- ClothingNeckTieRed
- ClothingNeckTieDet
- ClothingNeckTieSci
- ClothingNeckTieSerious
- type: latheRecipePack
id: Scarves

View file

@ -617,6 +617,22 @@
id: ClothingUniformJumpskirtWarden
result: ClothingUniformJumpskirtWarden
## Tram Driver
- type: latheRecipe
parent: BaseJumpsuitRecipe
id: ClothingUniformJumpsuitTramDriver
result: ClothingUniformJumpsuitTramDriver
- type: latheRecipe
parent: BaseCoatRecipe
id: ClothingOuterSuitTramDriver
result: ClothingOuterSuitTramDriver
- type: latheRecipe
parent: BaseHatRecipe
id: ClothingHeadHatTramDriver
result: ClothingHeadHatTramDriver
# Command winter coats
- type: latheRecipe
parent: BaseCommandCoatRecipe
@ -923,6 +939,11 @@
id: ClothingNeckTieSci
result: ClothingNeckTieSci
- type: latheRecipe
parent: BaseNeckClothingRecipe
id: ClothingNeckTieSerious
result: ClothingNeckTieSerious
# Scarfs
- type: latheRecipe
parent: BaseNeckClothingRecipe

View file

@ -0,0 +1,38 @@
- type: job
id: TramDriver
name: job-name-tram-driver
description: job-description-tram-driver
playTimeTracker: JobTramDriver
startingGear: TramDriverGear
icon: "JobIconTramDriver"
supervisors: job-supervisors-hop
requirements:
- !type:OverallPlaytimeRequirement # someone that's not doing this job will just be a pain for the station
time: 10h
access:
- Maintenance
- Service # the tram has command + service access
- External # to pick up people trapped in the tramway's space
special: # we don't want it becoming an antag... for now at least
- !type:AddImplantSpecial
implants: [ MindShieldImplant ]
- type: startingGear
id: TramDriverGear
equipment:
shoes: ClothingShoesBootsLaceup
id: TramDriverPDA
ears: ClothingHeadsetService
neck: ClothingNeckTieSerious
- type: chameleonOutfit
id: TramDriverChameleonOutfit
job: TramDriver
equipment:
head: ClothingHeadHatTramDriver
eyes: ClothingEyesGlasses
mask: ClothingMaskBreath
outerClothing: ClothingOuterSuitTramDriver
neck: ClothingNeckTieSerious
belt: ClothingBeltUtility
gloves: ClothingHandsGlovesColorWhite

View file

@ -30,6 +30,7 @@
- Reporter
- Visitor
- ServiceWorker
- TramDriver
- type: department
id: CentralCommand
@ -139,4 +140,5 @@
roles:
- Reporter
- Psychologist
- TramDriver
primary: false

View file

@ -142,6 +142,9 @@
- type: playTimeTracker
id: JobTechnicalAssistant
- type: playTimeTracker
id: JobTramDriver
- type: playTimeTracker
id: JobVisitor

View file

@ -323,6 +323,14 @@
state: Zookeeper
jobName: job-name-zookeeper
- type: jobIcon
parent: JobIcon
id: JobIconTramDriver
icon:
sprite: *icon-rsi
state: TramDriver
jobName: job-name-tramdriver
# Entertainer (like service, but not actually service)
- type: jobIcon

Binary file not shown.

After

Width:  |  Height:  |  Size: 486 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 275 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 365 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 361 B

View file

@ -0,0 +1,26 @@
{
"version": 1,
"license": "CC-BY-3.0",
"copyright": "By ketufaispikinut",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "icon"
},
{
"name": "equipped-HELMET",
"directions": 4
},
{
"name": "inhand-left",
"directions": 4
},
{
"name": "inhand-right",
"directions": 4
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 211 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 457 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 173 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 174 B

View file

@ -0,0 +1,29 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "By ketufaispikinut. Icon state modified from a sprite taken from tgstation at commit https://github.com/tgstation/tgstation/commit/5a73e8f825ff279e82949b9329783a9e3070e2da and edited by Flareguy for Space Station 14 (dettie.rsi)",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "equipped-NECK",
"directions": 4
},
{
"name": "icon"
},
{
"name": "storage"
},
{
"name": "inhand-left",
"directions": 4
},
{
"name": "inhand-right",
"directions": 4
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 357 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 839 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 413 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 571 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 558 B

View file

@ -0,0 +1,26 @@
{
"version": 1,
"license": "CC-BY-3.0",
"copyright": "By ketufaispikinut",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "icon"
},
{
"name": "equipped-OUTERCLOTHING",
"directions": 4
},
{
"name": "inhand-left",
"directions": 4
},
{
"name": "inhand-right",
"directions": 4
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 426 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 440 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 438 B

View file

@ -0,0 +1,26 @@
{
"version": 1,
"license": "CC-BY-3.0",
"copyright": "By ketufaispikinut",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "icon"
},
{
"name": "equipped-INNERCLOTHING",
"directions": 4
},
{
"name": "inhand-left",
"directions": 4
},
{
"name": "inhand-right",
"directions": 4
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 161 B

View file

@ -1,7 +1,7 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "Taken and modified from /tg/station113 from https://github.com/tgstation/tgstation/blob/ce6beb8a4d61235d9a597a7126c407160ed674ea/icons/mob/huds/hud.dmi | Brigmedic icon made by PuroSlavKing (Github) | Zombie icon made by RamZ | Zookeper by netwy (discort) | Rev and Head Rev icon taken from https://tgstation13.org/wiki/HUD and edited by coolmankid12345 (Discord) | Admin recolored from MedicalIntern by TsjipTsjip | StationAi resprite to 8x8 size by lunarcomets | Service Worker resprite by anno_midi (Discord) and spanky-spanky (Github) | service icons darkened by frobnic8 (Discord and Github) | paradoxClone taken from tg station at commit https://github.com/tgstation/tgstation/commit/d0db1ff267557017ae7bde68e6490e70cbb6e42f and modifed by slarticodefast (Github) | Boxer, Chaplain, Janitor, Lawyer, Librarian recoloured by K-Dynamic (github) | Cluwne icon by Professor Renderer (Discord) | QuarterMaster modified by K-Dynamic (github) | Mime and Musician recolor by DinnerCalzone (github) at https://github.com/impstation/imp-station-14/commit/233161f02bab7f9f9c03f09f39638ea7c200ee24 | Wizard originally by ScarKy0 (github) at https://github.com/space-wizards/space-station-14/commit/7c6028bc8037306536dca68f3c2cdd5edec56d14, edited by DinnerCalzone (github) | SyndicateCommander/Corpsman/Operative originally by Archeel1 (github) at https://github.com/space-wizards/space-station-14/commit/1a92ada, edited by DinnerCalzone (github), ninja icon by ThatGuyUSA (github), sus icon by YoungThugSS14 (github)",
"copyright": "Taken and modified from /tg/station113 from https://github.com/tgstation/tgstation/blob/ce6beb8a4d61235d9a597a7126c407160ed674ea/icons/mob/huds/hud.dmi | Brigmedic icon made by PuroSlavKing (Github) | Zombie icon made by RamZ | Zookeper by netwy (discort) | Rev and Head Rev icon taken from https://tgstation13.org/wiki/HUD and edited by coolmankid12345 (Discord) | Admin recolored from MedicalIntern by TsjipTsjip | StationAi resprite to 8x8 size by lunarcomets | Service Worker resprite by anno_midi (Discord) and spanky-spanky (Github) | service icons darkened by frobnic8 (Discord and Github) | paradoxClone taken from tg station at commit https://github.com/tgstation/tgstation/commit/d0db1ff267557017ae7bde68e6490e70cbb6e42f and modifed by slarticodefast (Github) | Boxer, Chaplain, Janitor, Lawyer, Librarian recoloured by K-Dynamic (github) | Cluwne icon by Professor Renderer (Discord) | QuarterMaster modified by K-Dynamic (github) | Mime and Musician recolor by DinnerCalzone (github) at https://github.com/impstation/imp-station-14/commit/233161f02bab7f9f9c03f09f39638ea7c200ee24 | Wizard originally by ScarKy0 (github) at https://github.com/space-wizards/space-station-14/commit/7c6028bc8037306536dca68f3c2cdd5edec56d14, edited by DinnerCalzone (github) | SyndicateCommander/Corpsman/Operative originally by Archeel1 (github) at https://github.com/space-wizards/space-station-14/commit/1a92ada, edited by DinnerCalzone (github), ninja icon by ThatGuyUSA (github), sus icon by YoungThugSS14 (github), TramDriver based on ServiceWorker and made by ketufaispikinut (github)",
"size": {
"x": 8,
"y": 8
@ -246,6 +246,9 @@
},
{
"name": "Zombie"
},
{
"name": "TramDriver"
}
]
}

View file

@ -1,7 +1,7 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "Taken from https://github.com/vgstation-coders/vgstation13/blob/e71d6c4fba5a51f99b81c295dcaec4fc2f58fb19/icons/mob/screen1.dmi | cburn and cluwne made by brainfood1183 (github). brigmed made by PuroSlavKing (Github)",
"copyright": "Taken from https://github.com/vgstation-coders/vgstation13/blob/e71d6c4fba5a51f99b81c295dcaec4fc2f58fb19/icons/mob/screen1.dmi | cburn and cluwne made by brainfood1183 (github). brigmed made by PuroSlavKing (Github). tramdriver by Ketufaispikinut",
"size": {
"x": 32,
"y": 32
@ -199,6 +199,9 @@
{
"name": "technicalassistant"
},
{
"name": "tramdriver"
},
{
"name": "virologist"
},

Binary file not shown.

After

Width:  |  Height:  |  Size: 853 B

View file

@ -250,6 +250,9 @@
0.3
]
]
},
{
"name": "pda-tramdriver"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 504 B