Skip to content

Commit

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

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

Добавляет в билд плюшевых хомячков, которые будут пищать при наступании,
жамкании, и взрываться красной краской, если вы жамкнете слишком сильно

Добавил 3 спавна рандомных хомячков на 3-ёх картах из 10-и вариантов.
Сам дорисовывал держание хомяков в ручках и на голове

Покуда первое добавление чего-либо в код игры - возможны огромные ошибки
с моей стороны. А ещё я бы сделал звук пищания тише

<!-- Вкратце опишите изменения, которые вносите. -->
<!-- Опишите **все** изменения, так как противное может сказаться на
рассмотрении этого PR'а! -->
<!-- Если вы исправляете Issue, добавьте "Fixes #1234" (где 1234 - номер
Issue) где-нибудь в описании PR'а. Это автоматически закроет Issue после
принятия PR'а. -->

## Почему это хорошо для игры
Новая игрушка. Частично коллекционная. С возможным потенциалом (?)

<!-- Опишите, почему, по вашему, следует добавить эти изменения в игру.
-->

## Изображения изменений
https://youtu.be/4EsNY2iwBlw
<!-- Если вы не меняли карту или спрайты, можете опустить эту секцию.
Если хотите, можете вставить видео. -->

## Тестирование
Играл на локалке. Звал друга для тестов
<!-- Как вы тестировали свой PR, если делали это вовсе? -->

## Changelog

:cl:Romains
add: Добавил плюшевых хомячков
/:cl:

<!-- Оба :cl:'а должны быть на месте, что-бы чейнджлог работал! Вы
можете написать свой ник справа от первого :cl:, если хотите. Иначе
будет использован ваш ник на ГитХабе. -->
<!-- Вы можете использовать несколько записей с одинаковым префиксом
(Они используются только для иконки в игре) и удалить ненужные. Помните,
что чейнджлог должен быть понятен обычным игроком. -->
<!-- Если чейнджлог не влияет на игроков(например, это рефактор), вы
можете исключить всю секцию. -->
  • Loading branch information
MrRomainzZ authored Nov 12, 2023
1 parent b0330d5 commit 149e8aa
Show file tree
Hide file tree
Showing 13 changed files with 193 additions and 5 deletions.
16 changes: 14 additions & 2 deletions _maps/map_files220/MetaStation/MetaStation.dmm
Original file line number Diff line number Diff line change
Expand Up @@ -40047,6 +40047,7 @@
/turf/simulated/floor/plating,
/area/station/maintenance/port)
"cKC" = (
/obj/random/hampter,
/turf/simulated/floor/mech_bay_recharge_floor,
/area/station/maintenance/apmaint)
"cKD" = (
Expand Down Expand Up @@ -45782,6 +45783,13 @@
/obj/structure/cable/yellow,
/turf/simulated/floor/plating,
/area/station/hallway/secondary/exit)
"dAN" = (
/obj/structure/chair{
dir = 8
},
/obj/random/hampter,
/turf/simulated/floor/plating,
/area/station/maintenance/fpmaint)
"dAO" = (
/obj/structure/cable/yellow{
d2 = 2;
Expand Down Expand Up @@ -49485,6 +49493,10 @@
icon_state = "darkgrey"
},
/area/station/engineering/tech_storage)
"fpi" = (
/obj/random/hampter,
/turf/simulated/floor/plating,
/area/station/maintenance/asmaint)
"fpk" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/simple/hidden/cyan{
Expand Down Expand Up @@ -110137,7 +110149,7 @@ aky
anI
aph
aqA
auE
dAN
ksz
auE
aOB
Expand Down Expand Up @@ -126419,7 +126431,7 @@ bHo
emj
cPc
cTk
emj
fpi
gVL
dhl
emj
Expand Down
21 changes: 19 additions & 2 deletions _maps/map_files220/cyberiad/cyberiad.dmm
Original file line number Diff line number Diff line change
Expand Up @@ -70065,6 +70065,16 @@
},
/turf/simulated/floor/plasteel,
/area/station/science/hallway)
"mCW" = (
/obj/structure/chair/stool{
dir = 1
},
/obj/effect/decal/cleanable/dirt,
/obj/random/hampter,
/turf/simulated/floor/plasteel{
icon_state = "grimy"
},
/area/station/maintenance/fpmaint2)
"mDs" = (
/obj/machinery/light/small/directional/east,
/obj/structure/cable{
Expand Down Expand Up @@ -72837,6 +72847,12 @@
},
/turf/simulated/floor/carpet,
/area/station/command/office/hop)
"nDi" = (
/obj/structure/bed,
/obj/machinery/light/small/directional/east,
/obj/random/hampter,
/turf/simulated/floor/plating,
/area/station/maintenance/fore)
"nDq" = (
/obj/structure/disposalpipe/segment{
dir = 4
Expand Down Expand Up @@ -97933,6 +97949,7 @@
/obj/structure/bed,
/obj/item/bedsheet/black,
/obj/effect/spawner/random_spawners/cobweb_right_rare,
/obj/random/hampter,
/turf/simulated/floor/carpet/royalblack,
/area/station/maintenance/apmaint)
"wOf" = (
Expand Down Expand Up @@ -118104,7 +118121,7 @@ aII
aDC
aEK
aFX
aHk
mCW
aHl
aKW
aDD
Expand Down Expand Up @@ -139164,7 +139181,7 @@ nCV
ifJ
dEI
atG
apY
nDi
arS
aqc
auZ
Expand Down
10 changes: 9 additions & 1 deletion _maps/map_files220/delta/delta.dmm
Original file line number Diff line number Diff line change
Expand Up @@ -2739,6 +2739,7 @@
},
/obj/machinery/atmospherics/unary/vent_scrubber/on,
/obj/effect/landmark/damageturf,
/obj/random/hampter,
/turf/simulated/floor/wood/oak,
/area/station/maintenance/electrical_shop)
"arw" = (
Expand Down Expand Up @@ -61762,6 +61763,7 @@
"jvm" = (
/obj/structure/table/reinforced,
/obj/effect/decal/cleanable/dirt,
/obj/random/hampter,
/turf/simulated/floor/plasteel{
icon_state = "redyellowfull"
},
Expand Down Expand Up @@ -69252,6 +69254,12 @@
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/plating,
/area/station/maintenance/aft)
"lYq" = (
/obj/structure/table/wood/poker,
/obj/effect/decal/cleanable/dirt,
/obj/random/hampter,
/turf/simulated/floor/plasteel/grimy,
/area/station/maintenance/abandonedbar)
"lYz" = (
/obj/effect/spawner/random_spawners/grille_maybe,
/obj/structure/cable{
Expand Down Expand Up @@ -123720,7 +123728,7 @@ dcM
daf
lTi
dhv
duT
lYq
dYm
lTi
dmM
Expand Down
4 changes: 4 additions & 0 deletions modular_ss220/hampter/_hampter.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
/datum/modpack/hampter
name = "Hampter Toys"
desc = "Набор игрушек хамптеров. 10 штук. Возврату не подлежат."
author = "RomainzZ, FanTik"
3 changes: 3 additions & 0 deletions modular_ss220/hampter/_hampter.dme
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#include "_hampter.dm"

#include "code/hampter.dm"
143 changes: 143 additions & 0 deletions modular_ss220/hampter/code/hampter.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@
// "Микро-компонент" модульности ради...? Возможно, и, скорее всего, плохая идея.
// Не использовал squeak.dm ибо у squeak есть регистрация COMSIG_ITEM_ATTACK_SELF, который мешает использовать attack_self() с проверкой интентов
/datum/component/plushtoy/Initialize()
. = ..()
// Пищит при ударах
RegisterSignal(parent, list(COMSIG_ATOM_HULK_ATTACK, COMSIG_PARENT_ATTACKBY, COMSIG_MOVABLE_BUMP, COMSIG_ITEM_ATTACK, COMSIG_ITEM_ATTACK_OBJ), PROC_REF(play_squeak))

// Пищит при наступании
RegisterSignal(parent, COMSIG_MOVABLE_CROSSED, PROC_REF(play_squeak_crossed))

// Пищание
/datum/component/plushtoy/proc/play_squeak()
playsound(parent, 'modular_ss220/hampter/sound/squeaktoy.ogg', 50, TRUE, -10)

// Стащенный кусок кода для фикса большого числа писков в зависимости от числа хамптеров в инвентаре
/datum/component/plushtoy/proc/play_squeak_crossed(atom/movable/AM)
if(isitem(AM))
var/obj/item/I = AM
if(I.flags & ABSTRACT)
return
else if(istype(AM, /obj/item/projectile))
var/obj/item/projectile/P = AM
if(P.original != parent)
return
if(ismob(AM))
var/mob/M = AM
if(M.flying)
return
if(isliving(AM))
var/mob/living/L = M
if(L.floating)
return
var/atom/current_parent = parent
if(isturf(current_parent.loc))
play_squeak()


// Спавнер рандомного хамптера для карты
/obj/random/hampter
name = "Random Hampter"
desc = "This is a random hampter spawner"
icon = 'modular_ss220/hampter/icons/hampter.dmi'
icon_state = "hampter"

/obj/random/hampter/item_to_spawn()
return pick(typesof(/obj/item/toy/hampter))


// Хамптер
/obj/item/toy/hampter
name = "Hampter"
desc = "Просто плюшевый хамптер. Самый обычный."
icon = 'modular_ss220/hampter/icons/hampter.dmi'
icon_state = "hampter"
icon_override = 'modular_ss220/hampter/icons/inhead/head.dmi'
lefthand_file = 'modular_ss220/hampter/icons/inhands/hampter_lefthand.dmi'
righthand_file = 'modular_ss220/hampter/icons/inhands/hampter_righthand.dmi'
slot_flags = SLOT_FLAG_HEAD
w_class = WEIGHT_CLASS_TINY
blood_color = "#d42929"
var/squeak = 'modular_ss220/hampter/sound/squeaktoy.ogg'
var/crush = 'modular_ss220/hampter/sound/bone_break_3.ogg'
var/cooldown = 0

// Добавляем наш "микро-компонент" хамптеру
/obj/item/toy/hampter/Initialize(mapload)
. = ..()
AddComponent(/datum/component/plushtoy)

// Действия при взаимодействии в руке при разных интентах
/obj/item/toy/hampter/attack_self(mob/living/carbon/human/user)
. = ..()
// Небольшой кулдаун дабы нельзя было спамить
if(cooldown < world.time - 10)
switch(user.a_intent)
// Если выбрано что угодно кроме харма - жмякаем с писком хамптера
if (INTENT_HELP, INTENT_DISARM, INTENT_GRAB)
playsound(get_turf(src), squeak, 50, 1, -10)

// Если выбран харм, сжимаем хамптера до "краски" (?) в его туловище
if (INTENT_HARM)
// Прописываю это здесь ибо иначе хомяки будут отмечаться кровавыми в игре
blood_DNA = "Plush hampter's paint"

user.visible_message("<span class='warning'>[user] раздавил хамптера в своей руке!</span>", "<span class='warning'>Вы раздавили хамптера в своей руке!</span>")
playsound(get_turf(src), crush, 50, TRUE, -10)

user.hand_blood_color = blood_color
user.transfer_blood_dna(blood_DNA)
// Сколько бы я не хотел ставить 0 - не выйдет. Нельзя будет отмыть руки в раковине
user.bloody_hands = 1
user.update_inv_gloves()

qdel(src)

cooldown = world.time


// Подвиды
/obj/item/toy/hampter/assistant
name = "Assistant Hampter"
desc = "Плюшевый хамптер ассистент. Зачем ему изольки?"
icon_state = "hampter_ass"

/obj/item/toy/hampter/security
name = "Security Hampter"
desc = "Плюшевый хамптер офицер СБ. У него станбатон!"
icon_state = "hampter_sec"

/obj/item/toy/hampter/medical
name = "Medical Hampter"
desc = "Плюшевый хамптер врач. Тащите дефибриллятор!"
icon_state = "hampter_med"

/obj/item/toy/hampter/janitor
name = "Janitor Hampter"
desc = "Плюшевый хамптер уборщик. Переключись на шаг."
icon_state = "hampter_jan"

/obj/item/toy/hampter/old_captain
name = "Old Captain Hampter"
desc = "ПЛюшевый хамптер капитан в старой униформе. Это какой год?"
icon_state = "hampter_old-cap"

/obj/item/toy/hampter/captain
name = "Captain Hampter"
desc = "Плюшевый хамптер капитан. Где его запасная карта?"
icon_state = "hampter_cap"

/obj/item/toy/hampter/syndicate
name = "Syndicate Hampter"
desc = "Плюшевый хамптер агент Синдиката. Ваши активы пострадают."
icon_state = "hampter_sdy"

/obj/item/toy/hampter/deadsquad
name = "Dead Squad Hampter"
desc = "Плюшевый хамптер Отряда Смерти. Все контракты расторгнуты."
icon_state = "hampter_ded"

/obj/item/toy/hampter/ert
name = "ERT Hampter"
desc = "Плюшевый хамптер ОБР. Доложите о ситуации на станции."
icon_state = "hampter_ert"
Binary file added modular_ss220/hampter/icons/hampter.dmi
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file added modular_ss220/hampter/icons/inhead/head.dmi
Binary file not shown.
Binary file added modular_ss220/hampter/sound/bone_break_3.ogg
Binary file not shown.
Binary file added modular_ss220/hampter/sound/squeaktoy.ogg
Binary file not shown.
1 change: 1 addition & 0 deletions modular_ss220/modular_ss220.dme
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
#include "wire_splicing/wiresplicing.dme"
#include "silicons/_silicons.dme"
#include "silicon_hats/_silicon_hats.dme"
#include "hampter/_hampter.dme"

// --- MISC --- //
#include "administration/_administration.dme"
Expand Down

0 comments on commit 149e8aa

Please sign in to comment.