Skip to content

Commit

Permalink
Add: Skrellian SDTF weapon&armor (#1566)
Browse files Browse the repository at this point in the history
<!-- Пишите **НИЖЕ** заголовков и **ВЫШЕ** комментариев, иначе что то
может пойти не так. -->
<!-- Вы можете прочитать Contributing.MD, если хотите узнать больше. -->

## Что этот PR делает

Скреллианская винтовка, рельсотрон и пистолет для будущего гейта и
щитспавна.
МОД воинов Раскинта и МОД гвардейцев Императора для будущего гейта и
щитспавна.
Виброклинок воинов Раскинта и гвардейцев Императора для будущего гейта и
щитспавна.
Опционально добавление для торговцев скреллов в будущем.
Прееквипы воинов, офицеров и гвардейцев Императора.

Дополнительно, Sakhno со скользящим затвором, для будущего гейта.

## Почему это хорошо для игры

Скреллы классные, скреллы крутые, а лорно-верных шмоток, предметов и
оружия нет. С учетом будущего дополнения лора скреллов, боевое
снаряжение для ОСС будет кстати. Пока что щитспавн онли.

## Изображения изменений
Боевой МОД Раскинта
<img width="127" alt="dreamseeker_kxSqqW4a4m"
src="https://github.com/user-attachments/assets/0ce660a0-8864-437f-8ccd-0595494e0d4b">
<img width="127" alt="dreamseeker_hEb9EnQ80n"
src="https://github.com/user-attachments/assets/f434bc64-12eb-4fdd-8c9b-08012ee7dafe">
МОД гвардии Императора
<img width="127" alt="dreamseeker_csTTztVFTZ"
src="https://github.com/user-attachments/assets/efb11644-6172-4662-9a96-85187126a209">
<img width="126" alt="dreamseeker_NBhLodjU2X"
src="https://github.com/user-attachments/assets/8b7aa8cb-e7fa-4c1c-8774-a72f03b29ee9">
Пистолет, энерговинтовка, рельсотрон, виброклинок и гвардейский
виброклинок
<img width="155" alt="dreamseeker_KgQJPYkRGF"
src="https://github.com/user-attachments/assets/09c349c1-348e-43f9-824f-e0f1c92c0a37">
<img width="130" alt="dreamseeker_Gw4x3XNbYl"
src="https://github.com/user-attachments/assets/4c259486-b502-438c-8cab-1a2475b35e16">
<img width="129" alt="dreamseeker_k9llavhxuf"
src="https://github.com/user-attachments/assets/fbc6a646-a15e-4da3-855d-36c6beea9010">
<img width="128" alt="dreamseeker_a7IcnOHGJw"
src="https://github.com/user-attachments/assets/db4b97cb-953f-4b0a-b921-61d882e16f3e">
<img width="129" alt="dreamseeker_DRD7LgIHDc"
src="https://github.com/user-attachments/assets/bcfdb8dd-b032-4ade-87bd-494c85d7c5a0">

## Тестирование

Локалка, ворк

## Changelog

:cl:
add: Оборонительные Силы Скреллов получили две винтовки, пистолет,
виброклинки, боевой МОД Раскинта и МОД гвардейцев Императора. Пока для
щитспавна. Но скоро можно будет найти в раунде.
/:cl:

<!-- Оба :cl:'а должны быть на месте, что-бы чейнджлог работал! Вы
можете написать свой ник справа от первого :cl:, если хотите. Иначе
будет использован ваш ник на ГитХабе. -->
<!-- Вы можете использовать несколько записей с одинаковым префиксом
(Они используются только для иконки в игре) и удалить ненужные. Помните,
что чейнджлог должен быть понятен обычным игроком. -->
<!-- Если чейнджлог не влияет на игроков(например, это рефактор), вы
можете исключить всю секцию. -->

---------

Co-authored-by: Mikhail Dzianishchyts <[email protected]>
  • Loading branch information
konushi and m-dzianishchyts authored Oct 21, 2024
1 parent dcbad14 commit eba2cc5
Show file tree
Hide file tree
Showing 27 changed files with 798 additions and 7 deletions.
8 changes: 4 additions & 4 deletions code/modules/mod/mod_control.dm
Original file line number Diff line number Diff line change
Expand Up @@ -127,14 +127,14 @@
if(length(req_access))
locked = TRUE
new_core?.install(src)
helmet = new /obj/item/clothing/head/mod(src)
helmet = build_head() // SS220 EDIT - original: new /obj/item/clothing/head/mod(src)
mod_parts += helmet
chestplate = new /obj/item/clothing/suit/mod(src)
chestplate = build_suit() // SS220 EDIT - original: new /obj/item/clothing/suit/mod(src)
chestplate.allowed += theme.allowed_suit_storage
mod_parts += chestplate
gauntlets = new /obj/item/clothing/gloves/mod(src)
gauntlets = build_gloves() // SS220 EDIT - original: new /obj/item/clothing/gloves/mod(src)
mod_parts += gauntlets
boots = new /obj/item/clothing/shoes/mod(src)
boots = build_shoes() // SS220 EDIT - original: new /obj/item/clothing/shoes/mod(src)
mod_parts += boots
var/list/all_parts = mod_parts + src
for(var/obj/item/part as anything in all_parts)
Expand Down
1 change: 1 addition & 0 deletions modular_ss220/clothing/_clothing.dme
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,4 @@
#include "code/shoes.dm"
#include "code/suits.dm"
#include "code/under.dm"
#include "code/mod.dm"
280 changes: 280 additions & 0 deletions modular_ss220/clothing/code/mod.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,280 @@
// MARK: MODsuit clothes
/obj/item/clothing/head/mod/exclusive
icon = 'modular_ss220/clothing/icons/object/mod_clothing.dmi'
item_state = 'modular_ss220/clothing/icons/mob/mod_clothing.dmi'
icon_override = 'modular_ss220/clothing/icons/mob/mod_clothing.dmi'
sprite_sheets = list(
"Human" = 'modular_ss220/clothing/icons/mob/mod_clothing.dmi',
"Skrell" = 'modular_ss220/clothing/icons/mob/species/skrell/mod_clothing.dmi',
)

/obj/item/clothing/suit/mod/exclusive
icon = 'modular_ss220/clothing/icons/object/mod_clothing.dmi'
item_state = 'modular_ss220/clothing/icons/mob/mod_clothing.dmi'
icon_override = 'modular_ss220/clothing/icons/mob/mod_clothing.dmi'
sprite_sheets = list(
"Human" = 'modular_ss220/clothing/icons/mob/mod_clothing.dmi',
"Skrell" = 'modular_ss220/clothing/icons/mob/species/skrell/mod_clothing.dmi',
)

/obj/item/clothing/gloves/mod/exclusive
icon = 'modular_ss220/clothing/icons/object/mod_clothing.dmi'
item_state = 'modular_ss220/clothing/icons/mob/mod_clothing.dmi'
icon_override = 'modular_ss220/clothing/icons/mob/mod_clothing.dmi'
sprite_sheets = list(
"Human" = 'modular_ss220/clothing/icons/mob/mod_clothing.dmi',
"Skrell" = 'modular_ss220/clothing/icons/mob/species/skrell/mod_clothing.dmi',
)

/obj/item/clothing/shoes/mod/exclusive
icon = 'modular_ss220/clothing/icons/object/mod_clothing.dmi'
item_state = 'modular_ss220/clothing/icons/mob/mod_clothing.dmi'
icon_override = 'modular_ss220/clothing/icons/mob/mod_clothing.dmi'
sprite_sheets = list(
"Human" = 'modular_ss220/clothing/icons/mob/mod_clothing.dmi',
"Skrell" = 'modular_ss220/clothing/icons/mob/species/skrell/mod_clothing.dmi',
)

// MARK: MODsuit control
/obj/item/mod/control/proc/build_head()
return new /obj/item/clothing/head/mod(src)

/obj/item/mod/control/proc/build_suit()
return new /obj/item/clothing/suit/mod(src)

/obj/item/mod/control/proc/build_gloves()
return new /obj/item/clothing/gloves/mod(src)

/obj/item/mod/control/proc/build_shoes()
return new /obj/item/clothing/shoes/mod(src)

/obj/item/mod/control/proc/is_any_part_deployed()
for(var/obj/item/part as anything in mod_parts)
if(part.loc != src)
return TRUE
return FALSE

// This is kinda sick but we need to retract it before the actual species change.
/obj/item/mod/control/proc/pre_species_gain(datum/species/new_species)
if(!wearer)
return
if(is_any_part_deployed() && !theme.is_species_allowed(new_species))
// Deactivate MODsuit to respect the species allowed.
to_chat(wearer, span_warning("Ошибка видовой принадлежности! Деактивация."))
if(active)
var/old_activation_step_time = activation_step_time
activation_step_time = 0.1 SECONDS // gotta go fast
toggle_activate(wearer, force_deactivate = TRUE)
activation_step_time = old_activation_step_time
quick_deploy(wearer)

/obj/item/mod/control/quick_deploy(mob/user)
user = user || loc // why the fuck this is nullable
if(!is_any_part_deployed() && !theme.is_species_allowed(user.dna.species))
to_chat(user, span_warning("Ошибка видовой принадлежности! Развертывание недоступно."))
playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE)
return FALSE
return ..()

/obj/item/mod/control/deploy(mob/user, obj/item/part, mass)
user = user || loc // why the fuck this is nullable
if(!mass && part.loc != user && !theme.is_species_allowed(user.dna.species))
to_chat(user, span_warning("Ошибка видовой принадлежности! Развертывание недоступно."))
playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE)
return FALSE
return ..()

/obj/item/mod/control/pre_equipped/exclusive
icon = 'modular_ss220/clothing/icons/object/mod_clothing.dmi'
icon_override = 'modular_ss220/clothing/icons/mob/mod_clothing.dmi'

/obj/item/mod/control/pre_equipped/exclusive/build_head()
return new /obj/item/clothing/head/mod/exclusive(src)

/obj/item/mod/control/pre_equipped/exclusive/build_suit()
return new /obj/item/clothing/suit/mod/exclusive(src)

/obj/item/mod/control/pre_equipped/exclusive/build_gloves()
return new /obj/item/clothing/gloves/mod/exclusive(src)

/obj/item/mod/control/pre_equipped/exclusive/build_shoes()
return new /obj/item/clothing/shoes/mod/exclusive(src)

// MARK: MODsuit Theme
/datum/mod_theme
/// Which species are allowed to deploy MODsuit. Consider empty list as no restriction.
var/list/species_allowed = list()

/datum/mod_theme/proc/is_species_allowed(datum/species/species)
if(!length(species_allowed))
return TRUE
if(!(species.name in species_allowed))
return FALSE
return TRUE

/mob/living/carbon/human/change_dna(datum/dna/new_dna, include_species_change)
if(istype(back, /obj/item/mod/control))
INVOKE_ASYNC(back, TYPE_PROC_REF(/obj/item/mod/control, pre_species_gain), new_dna.species)
return ..()

/mob/living/carbon/human/set_species(datum/species/new_species, use_default_color = FALSE, delay_icon_update = FALSE, skip_same_check = FALSE, retain_damage = FALSE, transformation = FALSE, keep_missing_bodyparts = FALSE)
if(istype(back, /obj/item/mod/control))
INVOKE_ASYNC(back, TYPE_PROC_REF(/obj/item/mod/control, pre_species_gain), new_species)
return ..()

// MARK: Skrell elite MODsuit - Raskinta
/datum/mod_theme/skrell_raskinta
name = "\improper raskinta"
desc = "Боевая броня с функцией костюма для ВКД, созданная для воинов Раскинта Ме'керр-Кэтиш."
extended_desc = "Массивный бронекостюм, выполненный в черно-синих цветах, является отличительной чертой \
военных формирований Раскинта-Кэтиш. Защитные пластины состоят из укрепленной керамики, в то время как \
каркасные пластины выполнены из сплавов вороной пластали, позволяющей эффективно поглощать и рассеивать энергию \
через радиаторные отводы на \"хвостовых\" окончаниях шлема. \
Этот костюм является самым часто встречаемым в штурмовых отрядах Оборонительных Сил Скреллов."
default_skin = "skrell_elite"
armor_type_1 = /obj/item/mod/armor/mod_theme_skrell_raskinta
flag_2_flags = RAD_PROTECT_CONTENTS_2
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
siemens_coefficient = 0
slowdown_inactive = 1
slowdown_active = 0.25
complexity_max = DEFAULT_MAX_COMPLEXITY + 5
allowed_suit_storage = list(
/obj/item/ammo_box,
/obj/item/ammo_casing,
/obj/item/restraints/handcuffs,
/obj/item/flash,
/obj/item/melee/baton,
/obj/item/gun,
/obj/item/melee/vibroblade,
)
species_allowed = list("Skrell")
skins = list(
"skrell_elite" = list(
MOD_ICON_OVERRIDE = 'modular_ss220/clothing/icons/object/mod_clothing.dmi',
HELMET_FLAGS = list(
UNSEALED_LAYER = COLLAR_LAYER,

SEALED_CLOTHING = THICKMATERIAL | STOPSPRESSUREDMAGE | BLOCK_GAS_SMOKE_EFFECT | BLOCKHAIR,
UNSEALED_INVISIBILITY = HIDEFACE,
SEALED_INVISIBILITY = HIDEMASK | HIDEEYES | HIDEFACE,
SEALED_COVER = HEADCOVERSMOUTH | HEADCOVERSEYES,
),
CHESTPLATE_FLAGS = list(
UNSEALED_CLOTHING = THICKMATERIAL,
SEALED_CLOTHING = STOPSPRESSUREDMAGE,
SEALED_INVISIBILITY = HIDEJUMPSUIT | HIDETAIL,
),
GAUNTLETS_FLAGS = list(
UNSEALED_CLOTHING = THICKMATERIAL,
SEALED_CLOTHING = STOPSPRESSUREDMAGE,
CAN_OVERSLOT = TRUE,
),
BOOTS_FLAGS = list(
UNSEALED_CLOTHING = THICKMATERIAL,
SEALED_CLOTHING = STOPSPRESSUREDMAGE,
CAN_OVERSLOT = TRUE,
),
),
)

/obj/item/mod/armor/mod_theme_skrell_raskinta
armor = list(MELEE = 40, BULLET = 25, LASER = 25, ENERGY = 20, BOMB = 25, RAD = INFINITY, FIRE = 200, ACID = 200)

/obj/item/mod/control/pre_equipped/exclusive/skrell_raskinta
theme = /datum/mod_theme/skrell_raskinta
applied_cell = /obj/item/stock_parts/cell/super
applied_modules = list(
/obj/item/mod/module/storage/syndicate,
/obj/item/mod/module/emp_shield,
/obj/item/mod/module/status_readout,
/obj/item/mod/module/flashlight,
/obj/item/mod/module/magboot/advanced,
/obj/item/mod/module/jetpack/advanced,
)
default_pins = list(
/obj/item/mod/module/jetpack/advanced,
/obj/item/mod/module/magboot/advanced,
)

// MARK: Skrell elite MODsuit - Sardaukars
/datum/mod_theme/skrell_sardaukars
name = "\improper emperor guard"
desc = "Элитная боевая броня гвардейцев Скреллианской империи."
extended_desc = "Благодаря высшим технологическим достижениям скреллов этот костюм сочетает в себе \
невероятные показатели защищенности и мобильности, являясь незаменимой вещью на вооружении свирепых Куи'кверр-Кэтиш. \
Носящие его воины являются личной гвардией Императора и выполняют самые сложные задачи по его воле. \
Кроваво-белоснежные цвета, отождествляющие кровь врагов и власть Его Величества, скорее всего последнее \
что вы увидите в своей жизни."
default_skin = "skrell_white"
armor_type_1 = /obj/item/mod/armor/mod_theme_skrell_sardaukars
resistance_flags = FIRE_PROOF
flag_2_flags = RAD_PROTECT_CONTENTS_2
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
siemens_coefficient = 0
slowdown_inactive = 0.5
slowdown_active = 0
complexity_max = DEFAULT_MAX_COMPLEXITY + 10
allowed_suit_storage = list(
/obj/item/ammo_box,
/obj/item/ammo_casing,
/obj/item/restraints/handcuffs,
/obj/item/flash,
/obj/item/melee/baton,
/obj/item/gun,
/obj/item/melee/vibroblade,
)
species_allowed = list("Skrell")
skins = list(
"skrell_white" = list(
MOD_ICON_OVERRIDE = 'modular_ss220/clothing/icons/object/mod_clothing.dmi',
HELMET_FLAGS = list(
UNSEALED_LAYER = COLLAR_LAYER,

SEALED_CLOTHING = THICKMATERIAL | STOPSPRESSUREDMAGE | BLOCK_GAS_SMOKE_EFFECT | BLOCKHAIR,
UNSEALED_INVISIBILITY = HIDEFACE,
SEALED_INVISIBILITY = HIDEMASK | HIDEEYES | HIDEFACE,
SEALED_COVER = HEADCOVERSMOUTH | HEADCOVERSEYES,
),
CHESTPLATE_FLAGS = list(
UNSEALED_CLOTHING = THICKMATERIAL,
SEALED_CLOTHING = STOPSPRESSUREDMAGE,
SEALED_INVISIBILITY = HIDEJUMPSUIT | HIDETAIL,
),
GAUNTLETS_FLAGS = list(
UNSEALED_CLOTHING = THICKMATERIAL,
SEALED_CLOTHING = STOPSPRESSUREDMAGE,
CAN_OVERSLOT = TRUE,
),
BOOTS_FLAGS = list(
UNSEALED_CLOTHING = THICKMATERIAL,
SEALED_CLOTHING = STOPSPRESSUREDMAGE,
CAN_OVERSLOT = TRUE,
),
),
)

/obj/item/mod/armor/mod_theme_skrell_sardaukars
armor = list(MELEE = 120, BULLET = 120, LASER = 100, ENERGY = 50, BOMB = 100, RAD = INFINITY, FIRE = INFINITY, ACID = INFINITY)

/obj/item/mod/control/pre_equipped/exclusive/skrell_sardaukars
theme = /datum/mod_theme/skrell_sardaukars
applied_cell = /obj/item/stock_parts/cell/bluespace
applied_modules = list(
/obj/item/mod/module/storage/bluespace,
/obj/item/mod/module/emp_shield,
/obj/item/mod/module/flashlight,
/obj/item/mod/module/jetpack/advanced,
/obj/item/mod/module/status_readout,
/obj/item/mod/module/magboot/advanced,
/obj/item/mod/module/visor/thermal
)
default_pins = list(
/obj/item/mod/module/jetpack/advanced,
/obj/item/mod/module/magboot/advanced,
/obj/item/mod/module/visor/thermal
)

/obj/item/mod/control/pre_equipped/exclusive/skrell_sardaukars/Initialize(mapload, new_theme, new_skin, new_core, new_access)
. = ..()
ADD_TRAIT(chestplate, TRAIT_RSG_IMMUNE, ROUNDSTART_TRAIT)
Binary file added modular_ss220/clothing/icons/mob/mod_clothing.dmi
Binary file not shown.
Binary file not shown.
Binary file not shown.
14 changes: 11 additions & 3 deletions modular_ss220/jobs/code/jobs_global_list.dm
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,11 @@ GLOBAL_LIST_INIT(security_positions_ss220, list(
"Security Cadet",
))

// ====================== EVENT ======================
GLOBAL_LIST_INIT(event_ss220, list(
"SDTF Raskinta Katish",
"Emperor Guard",
))

// ====================== DONOR ======================
GLOBAL_LIST_INIT(donor_tier_1_jobs, list(
Expand Down Expand Up @@ -92,13 +97,13 @@ GLOBAL_LIST_INIT(jobs_excluded_from_selection, list("Donor"))
// ====================== SPECIAL ======================
// cant be antags
GLOBAL_LIST_INIT(restricted_jobs_ss220, security_positions_ss220 + (
donor_tier_4_jobs + donor_tier_5_jobs + jobs_excluded_from_selection
donor_tier_4_jobs + donor_tier_5_jobs + jobs_excluded_from_selection + event_ss220
))

// ===================== ALL JOBS =====================

GLOBAL_LIST_INIT(all_jobs_ss220, (list() + (
medical_positions_ss220 + science_positions_ss220 + engineering_positions_ss220 + security_positions_ss220 + all_donor_jobs)))
medical_positions_ss220 + science_positions_ss220 + engineering_positions_ss220 + security_positions_ss220 + all_donor_jobs + event_ss220)))


// ====================== TITLE ======================
Expand Down Expand Up @@ -133,5 +138,8 @@ GLOBAL_LIST_INIT(all_jobs_ss220, (list() + (
/proc/get_all_assistant_titles_ss220()
return GLOB.assistant_donor_jobs + get_alt_titles(GLOB.assistant_donor_jobs)

/proc/get_all_event_titles_ss220()
return GLOB.event_ss220 + get_alt_titles(GLOB.event_ss220)

/proc/get_all_titles_ss220()
return get_all_medical_titles_ss220() + get_all_security_titles_ss220() + get_all_engineering_titles_ss220() + get_all_science_titles_ss220() + get_all_service_titles_ss220() + get_all_supply_titles_ss220() + get_all_assistant_titles_ss220()
return get_all_medical_titles_ss220() + get_all_security_titles_ss220() + get_all_engineering_titles_ss220() + get_all_science_titles_ss220() + get_all_service_titles_ss220() + get_all_supply_titles_ss220() + get_all_assistant_titles_ss220() + get_all_event_titles_ss220()
Binary file modified modular_ss220/jobs/icons/hud.dmi
Binary file not shown.
3 changes: 3 additions & 0 deletions modular_ss220/objects/_objects.dme
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,13 @@
#include "code/weapons/melee/baseball_bat.dm"
#include "code/weapons/melee/electrostaff.dm"
#include "code/weapons/melee/stylet.dm"
#include "code/weapons/melee/vibroblade.dm"
#include "code/weapons/ranged/beretta.dm"
#include "code/weapons/ranged/pneumagun.dm"
#include "code/weapons/ranged/revolvers.dm"
#include "code/weapons/ranged/sslr.dm"
#include "code/weapons/ranged/sakhno.dm"
#include "code/weapons/ranged/skrell_rifle.dm"

// Plushies
#include "code/plushies/hampters.dm"
Expand Down
Loading

0 comments on commit eba2cc5

Please sign in to comment.