Files
7c84aaee4b Paicontroller subsystem port (#19165)
* to subsystem

* wip subsystem pain

* some big recoding

* seperated

* oop

* fucking lua

* working on tgui foundation

* compile fixes

* nice and clean

* type

* inviting works

* unit testing

* agony

* test good

* typo

* that should be the basics

* Complete recode of pai saving

* restore fluff text

* migration

* pai notification automation

* swap

* length

* more fixes

* pai sprite datums

* type 13 uses all four directions

* eye handling

* use accessors

* working on icontests

* fix

* hologram eye test

* oop

* wait that doesn't work at all

* text

* eye colors and holo eyes

* lots of fixes

* fix those up

* organized

* belly cap

* that too

* death sprites

* resting eyes

* resting flag

* bad check here

* fixing icon files

* proper file

* garble

* fix some states

* pai death

* collapse pai files into single file

* allow some restricted pai interactions

* lamp

* block invites button

* collapse in remaining vr file

* this is actually needed

* documenting and organizing

* update to TGprefs

* remove gun toggle verb on pai

* forbid default name joins

* pai cable retraction

* various pai fixes

* icon forge pai

* pai eyes

* type 13 iconstate

* directionless

* small fix

* pai dir fix

* missing icon

* no fresh pais

* oops

* fixed pai join

* fixed change chassis

* pai UI

* .

* .

* reuse

* .

* .

* .

* push that

* Horro rmasks

* pai invite data change

* splitting

* use refs

* initial

* with PAI

* soem more

* .

* .

* .

* .

* ugh

* next

* pai invite

* only preview

* that

* use from char pref

* fixed pai invite not working

* small tgui fixes

* remove temp code

* .

* pai comments properly sent

* ooc

* horror

* need to use this for now

* .

* fix

* lol

* raw mob spawn fix

* pai software

* push

---------

Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com>
2026-03-03 23:59:27 +01:00

143 lines
4.4 KiB
Plaintext

GLOBAL_LIST_EMPTY(robot_sprite_sheets)
/datum/asset/spritesheet_batched/robot_icons
_abstract = /datum/asset/spritesheet_batched/robot_icons
name = "robot_icons"
var/module_type
/datum/asset/spritesheet_batched/robot_icons/standard
name = "robot_icons_standard"
module_type = "Standard"
/datum/asset/spritesheet_batched/robot_icons/service
name = "robot_icons_service"
module_type = "Service"
/datum/asset/spritesheet_batched/robot_icons/clerical
name = "robot_icons_clerical"
module_type = "Clerical"
/datum/asset/spritesheet_batched/robot_icons/clown
name = "robot_icons_clown"
module_type = "Clown"
/datum/asset/spritesheet_batched/robot_icons/command
name = "robot_icons_command"
module_type = "Command"
/datum/asset/spritesheet_batched/robot_icons/research
name = "robot_icons_research"
module_type = "Research"
/datum/asset/spritesheet_batched/robot_icons/miner
name = "robot_icons_miner"
module_type = "Miner"
/datum/asset/spritesheet_batched/robot_icons/crisis
name = "robot_icons_crisis"
module_type = "Crisis"
/* Modul not in use
/datum/asset/spritesheet_batched/robot_icons/surgeon
name = "robot_icons_surgeon"
module_type = "Surgeon"
*/
/datum/asset/spritesheet_batched/robot_icons/security
name = "robot_icons_security"
module_type = "Security"
/datum/asset/spritesheet_batched/robot_icons/combat
name = "robot_icons_combat"
module_type = "Combat"
/datum/asset/spritesheet_batched/robot_icons/exploration
name = "robot_icons_exploration"
module_type = "Exploration"
/datum/asset/spritesheet_batched/robot_icons/engineering
name = "robot_icons_engineering"
module_type = "Engineering"
/datum/asset/spritesheet_batched/robot_icons/janitor
name = "robot_icons_janitor"
module_type = "Janitor"
/datum/asset/spritesheet_batched/robot_icons/gravekeeper
name = "robot_icons_gravekeeper"
module_type = "Gravekeeper"
/datum/asset/spritesheet_batched/robot_icons/lost
name = "robot_icons_lost"
module_type = "Lost"
/datum/asset/spritesheet_batched/robot_icons/protector
name = "robot_icons_protector"
module_type = "Protector"
/datum/asset/spritesheet_batched/robot_icons/mechanist
name = "robot_icons_mechanist"
module_type = "Mechanist"
/datum/asset/spritesheet_batched/robot_icons/combat_medic
name = "robot_icons_combat_medic"
module_type = "Combat Medic"
/datum/asset/spritesheet_batched/robot_icons/ninja
name = "robot_icons_ninja"
module_type = "Ninja"
/datum/asset/spritesheet_batched/robot_icons/create_spritesheets()
if(!module_type)
return
for(var/datum/robot_sprite/S as anything in SSrobot_sprites.cyborg_sprites_by_module[module_type])
if(!S.name || !S.sprite_icon_state) // snowflake out those customs... they suck
continue
var/datum/universal_icon/I_N = uni_icon(S.sprite_icon, S.sprite_icon_state, NORTH)
var/datum/universal_icon/I_S = uni_icon(S.sprite_icon, S.sprite_icon_state, SOUTH)
var/datum/universal_icon/I_W = uni_icon(S.sprite_icon, S.sprite_icon_state, WEST)
var/datum/universal_icon/I_E = uni_icon(S.sprite_icon, S.sprite_icon_state, EAST)
if(S.has_eye_sprites)
var/datum/universal_icon/I_NE = uni_icon(S.sprite_icon, "[S.sprite_icon_state]-eyes", NORTH)
if(I_NE)
I_N.blend_icon(I_NE, ICON_OVERLAY)
var/datum/universal_icon/I_SE = uni_icon(S.sprite_icon, "[S.sprite_icon_state]-eyes", SOUTH)
if(I_SE)
I_S.blend_icon(I_SE, ICON_OVERLAY)
var/datum/universal_icon/I_WE = uni_icon(S.sprite_icon, "[S.sprite_icon_state]-eyes", WEST)
if(I_WE)
I_W.blend_icon(I_WE, ICON_OVERLAY)
var/datum/universal_icon/I_EE = uni_icon(S.sprite_icon, "[S.sprite_icon_state]-eyes", EAST)
if(I_EE)
I_E.blend_icon(I_EE, ICON_OVERLAY)
if(S.icon_x > S.icon_y)
var/buffer = (S.icon_x - S.icon_y) / 2
I_N.crop(0, -buffer, S.icon_x, S.icon_y + buffer)
I_S.crop(0, -buffer, S.icon_x, S.icon_y + buffer)
I_W.crop(0, -buffer, S.icon_x, S.icon_y + buffer)
I_E.crop(0, -buffer, S.icon_x, S.icon_y + buffer)
else if (S.icon_x < S.icon_y)
var/buffer = (S.icon_y - S.icon_x) / 2
I_N.crop(-buffer, 0, S.icon_x + buffer, S.icon_y)
I_S.crop(-buffer, 0, S.icon_x + buffer, S.icon_y)
I_W.crop(-buffer, 0, S.icon_x + buffer, S.icon_y)
I_E.crop(-buffer, 0, S.icon_x + buffer, S.icon_y)
I_N.scale(120, 120)
I_S.scale(120, 120)
I_W.scale(120, 120)
I_E.scale(120, 120)
var/imgid = sanitize_css_class_name("[S.type]")
insert_icon(imgid + "N", I_N)
insert_icon(imgid + "S", I_S)
insert_icon(imgid + "W", I_W)
insert_icon(imgid + "E", I_E)
GLOB.robot_sprite_sheets[module_type] = src