Skip to content

Commit

Permalink
s
Browse files Browse the repository at this point in the history
  • Loading branch information
Paxilmaniac committed Dec 15, 2024
1 parent c07b7e8 commit 26c5fe3
Show file tree
Hide file tree
Showing 22 changed files with 417 additions and 11 deletions.
35 changes: 35 additions & 0 deletions code/__DEFINES/~doppler_defines/robot_defines.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
/// Resting for borgs, especially if we ever get more than one type
#define ROBOT_REST_NORMAL 1

/// Features that a specific borg skin has
#define SKIN_FEATURES "skin_features"

// Icon file locations for modular borg icons
/// Medical
#define CYBORG_ICON_MED_TALL 'modular_doppler/big_borg_lmao/icons/tallrobot_med.dmi'
/// Engineer
#define CYBORG_ICON_ENG_TALL 'modular_doppler/big_borg_lmao/icons/tallrobot_eng.dmi'
/// Peacekeeper
#define CYBORG_ICON_PEACEKEEPER_TALL 'modular_doppler/big_borg_lmao/icons/tallrobot_pk.dmi'
/// Service
#define CYBORG_ICON_SERVICE_TALL 'modular_doppler/big_borg_lmao/icons/tallrobot_serv.dmi'
/// Service
#define CYBORG_ICON_MINING_TALL 'modular_doppler/big_borg_lmao/icons/tallrobot_mine.dmi'
/// Janitor
#define CYBORG_ICON_JANI_TALL 'modular_doppler/big_borg_lmao/icons/tallrobot_jani.dmi'
/// Evil
#define CYBORG_ICON_SYNDIE_TALL 'modular_doppler/big_borg_lmao/icons/tallrobot_syndi.dmi'
/// Ninja (Evil)
#define CYBORG_ICON_NINJA_TALL 'modular_doppler/big_borg_lmao/icons/tallrobot_ninja.dmi'

//Defines for model features, set in the model_features list of a robot model datum. Are they a dogborg? Is the model small? etc.
/// Cyborgs with unique sprites for when they get totally broken down.
#define TRAIT_R_UNIQUEWRECK "unique_wreck"
/// Or when tipped over.
#define TRAIT_R_UNIQUETIP "unique_tip"
/// 32x64 skins
#define TRAIT_R_TALL "tall_borg"
/// Any model small enough to reject the shrinker upgrade.
#define TRAIT_R_SMALL "small_chassis"
/// Any model that has a custom front panel
#define TRAIT_R_UNIQUEPANEL "unique_openpanel"
15 changes: 9 additions & 6 deletions code/_globalvars/traits/_traits.dm
Original file line number Diff line number Diff line change
Expand Up @@ -586,7 +586,6 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_IGNORE_FIRE_PROTECTION" = TRAIT_IGNORE_FIRE_PROTECTION,
"TRAIT_LEFT_EYE_SCAR" = TRAIT_LEFT_EYE_SCAR,
"TRAIT_RIGHT_EYE_SCAR" = TRAIT_RIGHT_EYE_SCAR,
"TRAIT_SYSTEM_SHOCK" = TRAIT_SYSTEM_SHOCK, // DOPPLER EDIT ADDITION
),
/obj/item = list(
"TRAIT_APC_SHOCKING" = TRAIT_APC_SHOCKING,
Expand Down Expand Up @@ -735,12 +734,11 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_TURF_IGNORE_SLIPPERY" = TRAIT_TURF_IGNORE_SLIPPERY,
"TRAIT_TURF_IGNORE_SLOWDOWN" = TRAIT_TURF_IGNORE_SLOWDOWN,
),
// DOPPLER EDIT ADDITION START - MODULAR TRAITS
/obj/item/toy/plush/modular = list(
/obj/item/toy/plush/modular = list( // DOPPLER EDIT ADDITION START - MODULAR TRAITS
"TRAIT_CURRENTLY_GLASSBLOWING" = TRAIT_CURRENTLY_GLASSBLOWING,
"TRAIT_ANIMALISTIC" = TRAIT_ANIMALISTIC,
"TRAIT_GLASSBLOWING" = TRAIT_GLASSBLOWING,
"TRAIT_OXYIMMUNE" = TRAIT_OXYIMMUNE, //Doppler Edit Addition - Needed for hemophages.
"TRAIT_OXYIMMUNE" = TRAIT_OXYIMMUNE,
"TRAIT_XENOARCH_QUALIFIED" = TRAIT_XENOARCH_QUALIFIED,
"TRAIT_DETECTIVE" = TRAIT_DETECTIVE,
"TRAIT_EXCITABLE" = TRAIT_EXCITABLE,
Expand All @@ -751,8 +749,13 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_CHARGING" = TRAIT_CHARGING,
"TRAIT_LEFT_HANDED" = TRAIT_LEFT_HANDED,
"TRAIT_SPEECH_ONLY_MUTE" = TRAIT_SPEECH_ONLY_MUTE,
),
// DOPPLER EDIT ADDITION END
"TRAIT_R_UNIQUEWRECK" = TRAIT_R_UNIQUEWRECK,
"TRAIT_R_UNIQUETIP" = TRAIT_R_UNIQUETIP,
"TRAIT_R_TALL" = TRAIT_R_TALL,
"TRAIT_R_SMALL" = TRAIT_R_SMALL,
"TRAIT_R_UNIQUEPANEL" = TRAIT_R_UNIQUEPANEL,
"TRAIT_SYSTEM_SHOCK" = TRAIT_SYSTEM_SHOCK,
), // DOPPLER EDIT ADDITION END
))

/// value -> trait name, list of ALL traits that exist in the game, used for any type of accessing.
Expand Down
13 changes: 8 additions & 5 deletions code/_globalvars/traits/admin_tooling.dm
Original file line number Diff line number Diff line change
Expand Up @@ -334,7 +334,6 @@ GLOBAL_LIST_INIT(admin_visible_traits, list(
"TRAIT_IGNORE_FIRE_PROTECTION" = TRAIT_IGNORE_FIRE_PROTECTION,
"TRAIT_LEFT_EYE_SCAR" = TRAIT_LEFT_EYE_SCAR,
"TRAIT_RIGHT_EYE_SCAR" = TRAIT_RIGHT_EYE_SCAR,
"TRAIT_SYSTEM_SHOCK" = TRAIT_SYSTEM_SHOCK, // DOPPLER EDIT ADDITION
),
/obj/item = list(
"TRAIT_APC_SHOCKING" = TRAIT_APC_SHOCKING,
Expand Down Expand Up @@ -397,8 +396,7 @@ GLOBAL_LIST_INIT(admin_visible_traits, list(
/obj/item/organ/lungs = list(
"TRAIT_SPACEBREATHING" = TRAIT_SPACEBREATHING,
),
// DOPPLER EDIT ADDITION START - MODULAR TRAITS
/obj/item/toy/plush/modular = list(
/obj/item/toy/plush/modular = list( // DOPPLER EDIT ADDITION START - MODULAR TRAITS
"TRAIT_CURRENTLY_GLASSBLOWING" = TRAIT_CURRENTLY_GLASSBLOWING,
"TRAIT_ANIMALISTIC" = TRAIT_ANIMALISTIC,
"TRAIT_GLASSBLOWING" = TRAIT_GLASSBLOWING,
Expand All @@ -411,8 +409,13 @@ GLOBAL_LIST_INIT(admin_visible_traits, list(
"TRAIT_CHARGING" = TRAIT_CHARGING,
"TRAIT_LEFT_HANDED" = TRAIT_LEFT_HANDED,
"TRAIT_SPEECH_ONLY_MUTE" = TRAIT_SPEECH_ONLY_MUTE,
),
// DOPPLER EDIT ADDITION END
"TRAIT_R_UNIQUEWRECK" = TRAIT_R_UNIQUEWRECK,
"TRAIT_R_UNIQUETIP" = TRAIT_R_UNIQUETIP,
"TRAIT_R_TALL" = TRAIT_R_TALL,
"TRAIT_R_SMALL" = TRAIT_R_SMALL,
"TRAIT_R_UNIQUEPANEL" = TRAIT_R_UNIQUEPANEL,
"TRAIT_SYSTEM_SHOCK" = TRAIT_SYSTEM_SHOCK,
), // DOPPLER EDIT ADDITION END
))

/// value -> trait name, generated as needed for adminning.
Expand Down
2 changes: 2 additions & 0 deletions code/modules/mob/living/silicon/robot/robot_model.dm
Original file line number Diff line number Diff line change
Expand Up @@ -245,6 +245,8 @@
cyborg.diag_hud_set_aishell()
log_silicon("CYBORG: [key_name(cyborg)] has transformed into the [new_model] model.")

new_model.update_tallborg() // DOPPLER EDIT ADDITION - TALLBORGS

if(transform)
INVOKE_ASYNC(new_model, PROC_REF(do_transform_animation))
qdel(src)
Expand Down
94 changes: 94 additions & 0 deletions modular_doppler/big_borg_lmao/code/robot.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
/mob/living/silicon/robot/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change = TRUE)
. = ..()
if(robot_resting)
robot_resting = FALSE
on_standing_up()
update_icons()

/mob/living/silicon/robot/toggle_resting()
robot_lay_down()

/mob/living/silicon/robot/on_lying_down(new_lying_angle)
if(layer == initial(layer)) //to avoid things like hiding larvas.
layer = LYING_MOB_LAYER //so mob lying always appear behind standing mobs
density = FALSE // We lose density and stop bumping passable dense things.
if(model && model.model_features && (TRAIT_R_TALL in model.model_features))
maptext_height = 32 //Offset base chat-height value
// Resting effects
var/turf/sit_pos = get_turf(src)
var/obj/structure/table/tabled = locate(/obj/structure/table) in sit_pos.contents
if(!tabled)
new /obj/effect/temp_visual/mook_dust/robot(get_turf(src))
playsound(src, 'modular_doppler/big_borg_lmao/sounds/robot_sit.ogg', 25, TRUE)
return
else
new /obj/effect/temp_visual/mook_dust/robot/table(get_turf(src))
playsound(src, 'modular_doppler/big_borg_lmao/sounds/robot_bump.ogg', 50, TRUE)
var/list/items_to_move = list()
for(var/obj/item/gen_item in sit_pos.contents)
if(!gen_item.anchored)
items_to_move += gen_item
if(items_to_move.len >= 8)
break
for(var/obj/item/table_contents in items_to_move)
table_contents.throw_at(get_ranged_target_turf(table_contents, pick(GLOB.cardinals), range = 1), range = 1, speed = 1)

/mob/living/silicon/robot/on_standing_up()
if(layer == LYING_MOB_LAYER)
layer = initial(layer)
density = initial(density) // We were prone before, so we become dense and things can bump into us again.
if(model && model.model_features && (TRAIT_R_TALL in model.model_features))
maptext_height = 48 //Offset value of tallborgs

/mob/living/silicon/robot/proc/rest_style()
set name = "Switch Rest Style"
set category = "AI Commands"
set desc = "Select your resting pose."
if(!can_rest())
to_chat(src, span_warning("You can't do that!"))
return
robot_resting = ROBOT_REST_NORMAL
on_lying_down()
update_icons()

/mob/living/silicon/robot/proc/robot_lay_down()
set name = "Lay down"
set category = "AI Commands"
if(!can_rest())
to_chat(src, span_warning("You can't do that!"))
return
if(stat != CONSCIOUS) //Make sure we don't enable movement when not concious
return
if(robot_resting)
to_chat(src, span_notice("You are now getting up."))
robot_resting = FALSE
mobility_flags = MOBILITY_FLAGS_DEFAULT
on_standing_up()
else
to_chat(src, span_notice("You are now laying down."))
robot_resting = robot_rest_style
on_lying_down()
update_icons()

/mob/living/silicon/robot/update_resting()
. = ..()
if(can_rest())
robot_resting = FALSE
update_icons()

/mob/living/silicon/robot/update_module_innate()
..()
if(hands)
hands.icon = (model.model_select_alternate_icon ? model.model_select_alternate_icon : initial(hands.icon))

/**
* Safe check of the cyborg's model_features list.
*
* model_features is defined in modular_nova\modules\altborgs\code\modules\mob\living\silicon\robot\robot_model.dm.
*/
/mob/living/silicon/robot/proc/can_rest()
if(model && model.model_features && (TRAIT_R_TALL in model.model_features))
if(TRAIT_IMMOBILIZED in _status_traits)
return FALSE
return TRUE
return FALSE
3 changes: 3 additions & 0 deletions modular_doppler/big_borg_lmao/code/robot_defines.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
/mob/living/silicon/robot
var/robot_resting = FALSE
var/robot_rest_style = ROBOT_REST_NORMAL
129 changes: 129 additions & 0 deletions modular_doppler/big_borg_lmao/code/robot_model.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
/obj/item/robot_model
var/icon/cyborg_icon_override
var/sleeper_overlay
var/cyborg_pixel_offset
/// Alternate icon file used for this module's collapsed UI icon
var/model_select_alternate_icon
/// Traits unique to this model, i.e. having a unique dead sprite, being wide or being small enough to reject shrinker modules. Leverages defines in code\__DEFINES\~nova_defines\robot_defines.dm
/// If a sprite overlaps above the standard height, ensure it is not overlapping icons in the selector wheel.
var/list/model_features = list()

/obj/item/robot_model/proc/update_tallborg()
var/mob/living/silicon/robot/cyborg = robot || loc
if (!istype(robot))
return
if (model_features && (TRAIT_R_TALL in model_features))
cyborg.maptext_height = 48 //Runechat blabla
cyborg.AddElement(/datum/element/footstep, FOOTSTEP_MOB_SHOE, 2, -6, sound_vary = TRUE)
add_verb(cyborg, /mob/living/silicon/robot/proc/robot_lay_down)
switch(cyborg_base_icon)
if("mekamine")
cyborg.AddComponent(/datum/component/robot_smoke)
else
cyborg.maptext_height = initial(cyborg.maptext_height)
cyborg.RemoveElement(/datum/element/footstep, FOOTSTEP_MOB_SHOE, 2, -6, sound_vary = TRUE)
remove_verb(cyborg, /mob/living/silicon/robot/proc/robot_lay_down)
if(cyborg.GetComponent(/datum/component/robot_smoke))
qdel(cyborg.GetComponent(/datum/component/robot_smoke))
QDEL_NULL(cyborg.particles) // Removing left over particles

// STANDARD
/obj/item/robot_model/standard
name = "Standard"
borg_skins = list(
"Default" = list(SKIN_ICON_STATE = "robot", SKIN_FEATURES = list(TRAIT_R_SMALL)),
)

// SERVICE
/obj/item/robot_model/service
special_light_key = null
borg_skins = list(
/// 32x32 Skins
"Waitress" = list(SKIN_ICON_STATE = "service_f", SKIN_LIGHT_KEY = "service"),
"Butler" = list(SKIN_ICON_STATE = "service_m", SKIN_LIGHT_KEY = "service"),
"Bro" = list(SKIN_ICON_STATE = "brobot", SKIN_LIGHT_KEY = "service"),
"Tophat" = list(SKIN_ICON_STATE = "tophat", SKIN_HAT_OFFSET = INFINITY),
"Kent" = list(SKIN_ICON_STATE = "kent", SKIN_LIGHT_KEY = "medical", SKIN_HAT_OFFSET = 3),
"Can" = list(SKIN_ICON_STATE = "kent", SKIN_LIGHT_KEY = "medical", SKIN_HAT_OFFSET = 3),
/// 32x64 skins
"Meka" = list(SKIN_ICON_STATE = "mekaserve", SKIN_ICON = CYBORG_ICON_SERVICE_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15),
"Meka (Alt)" = list(SKIN_ICON_STATE = "mekaserve_alt", SKIN_LIGHT_KEY = "mekaserve", SKIN_ICON = CYBORG_ICON_SERVICE_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15),
"NiKA" = list(SKIN_ICON_STATE = "fmekaserv", SKIN_ICON = CYBORG_ICON_SERVICE_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15),
"NiKO" = list(SKIN_ICON_STATE = "mmekaserv", SKIN_ICON = CYBORG_ICON_SERVICE_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15),
)

// MINING
/obj/item/robot_model/miner
special_light_key = null
borg_skins = list(
/// 32x32 Skins
"Lavaland" = list(SKIN_ICON_STATE = "miner", SKIN_LIGHT_KEY = "miner"),
"Asteroid" = list(SKIN_ICON_STATE = "minerOLD", SKIN_LIGHT_KEY = "miner"),
"Spider Miner" = list(SKIN_ICON_STATE = "spidermin", SKIN_LIGHT_KEY = "miner"),
/// 32x64 skins
"Meka" = list(SKIN_ICON_STATE = "mekamine", SKIN_ICON = CYBORG_ICON_MINING_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15),
"K4T (Rookie)" = list(SKIN_ICON_STATE = "k4tmine", SKIN_ICON = CYBORG_ICON_MINING_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15),
"K4T (Veteran)" = list(SKIN_ICON_STATE = "k4tmine_alt1", SKIN_ICON = CYBORG_ICON_MINING_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15),
"NiKA" = list(SKIN_ICON_STATE = "fmekamine", SKIN_ICON = CYBORG_ICON_MINING_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15),
"NiKO" = list(SKIN_ICON_STATE = "mmekamine", SKIN_ICON = CYBORG_ICON_MINING_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15)
)

// CLOWN
/obj/item/robot_model/clown
borg_skins = list(
"Default" = list(SKIN_ICON_STATE = "clown"),
)

// ENGINEERING
/obj/item/robot_model/engineering
borg_skins = list(
/// 32x32 Skins
"Default" = list(SKIN_ICON_STATE = "engineer", SKIN_FEATURES = list(TRAIT_R_SMALL)),
/// 32x64 Skins
"Meka" = list(SKIN_ICON_STATE = "mekaengi", SKIN_ICON = CYBORG_ICON_ENG_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15),
"NiKA" = list(SKIN_ICON_STATE = "fmekaeng", SKIN_ICON = CYBORG_ICON_ENG_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15),
"NiKO" = list(SKIN_ICON_STATE = "mmekaeng", SKIN_ICON = CYBORG_ICON_ENG_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15)
)

// JANITOR
/obj/item/robot_model/janitor
borg_skins = list(
/// 32x32 Skins
"Default" = list(SKIN_ICON_STATE = "janitor"),
/// 32x64 Skins
"Meka" = list(SKIN_ICON_STATE = "mekajani", SKIN_ICON = CYBORG_ICON_JANI_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15),
"NiKA" = list(SKIN_ICON_STATE = "fmekajani", SKIN_ICON = CYBORG_ICON_JANI_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15),
"NiKO" = list(SKIN_ICON_STATE = "mmekajani", SKIN_ICON = CYBORG_ICON_JANI_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15)
)

// MEDICAL
/obj/item/robot_model/medical
borg_skins = list(
/// 32x32 Skins
"Machinified Doctor" = list(SKIN_ICON_STATE = "medical", SKIN_TRAITS = list(TRAIT_R_SMALL)),
"Qualified Doctor" = list(SKIN_ICON_STATE = "qualified_doctor"),
/// 32x64 Skins
"Meka" = list(SKIN_ICON_STATE = "mekamed", SKIN_ICON = CYBORG_ICON_MED_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15),
"K4T (Doc)" = list(SKIN_ICON_STATE = "k4tmed", SKIN_ICON = CYBORG_ICON_MED_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15),
"K4T (Field Medic)" = list(SKIN_ICON_STATE = "k4tmed_alt1", SKIN_ICON = CYBORG_ICON_MED_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15),
"NiKA" = list(SKIN_ICON_STATE = "fmekamed", SKIN_ICON = CYBORG_ICON_MED_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15),
"NiKO" = list(SKIN_ICON_STATE = "mmekamed", SKIN_ICON = CYBORG_ICON_MED_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15)
)

// PEACEKEEPER
/obj/item/robot_model/peacekeeper
borg_skins = list(
/// 32x32 Skins
"Default" = list(SKIN_ICON_STATE = "peace"),
/// 32x64 Skins
"Meka" = list(SKIN_ICON_STATE = "mekapeace", SKIN_ICON = CYBORG_ICON_PEACEKEEPER_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15),
"NiKA" = list(SKIN_ICON_STATE = "fmekapeace", SKIN_ICON = CYBORG_ICON_PEACEKEEPER_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15),
"NiKO" = list(SKIN_ICON_STATE = "mmekapeace", SKIN_ICON = CYBORG_ICON_PEACEKEEPER_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15)
)

// SECURITY
/obj/item/robot_model/security
borg_skins = list(
/// 32x32 Skins
"Default" = list(SKIN_ICON_STATE = "sec"),
)
Loading

0 comments on commit 26c5fe3

Please sign in to comment.