Skip to content

Commit

Permalink
[PORT&FEAT] Mobs pack - Part 1 (#310)
Browse files Browse the repository at this point in the history
## Что этот PR делает

Первая часть порта пака зоопарка и холдеров из моего старого ПРа:
ss220-space/Paradise#2058

### Переноска
Переноска позволяет переносить маленьких и небольших животных с
уменьшением шанса их побега.
Купить переноску возможно в вендомате для животных.

Чтобы выгрузить питомца из переноски, нужно перетащить переноску на пол
или нажать на неё ПКМ, Альт-Клик.

Если дверца открыта - животное сбежит за 5 секунд.
Если дверца закрыта - животное сможет сбежать за 60 секунд, если не
шевелиться.
Чем больше переноска, тем больше животное в размере она может поместить
в себя.
Помещенное животное отражается на переноске, переименовывая её, изменяя
описание и отображаясь на предмете.
**Типы переносок:** Маленькая, Средняя.
**Цвета переносок:** Черная, Голубая, Красная, Желтая, Зеленая,
Фиолетовая

![image](https://user-images.githubusercontent.com/41479614/218785616-681f68a3-c7b3-4e1c-af68-a58560588258.png)

Переноски в руках:

![image](https://user-images.githubusercontent.com/41479614/218785502-ea4a0c09-64b5-43a3-8270-81bf307ee170.png)

![image](https://user-images.githubusercontent.com/41479614/218785441-3657e48c-e58a-4c87-af1e-43faa1e0e71a.png)

## Животные
### Перенос
Существ небольшого размера можно переносить в руках, рюкзаке, карманах и
даже надевать их на голову!
Чтобы взять существо малого размера (мышь, хомяк, крыса) - нужно
взаимодействовать в HELP интенте.
Чтобы взять существо небольшого размера (собака, лиса, кот) - нужно
взаимодействовать в GRAB интенте.
Чтобы взять обезьянку на руки - нужно взять её в GRAB обеими руками.

![image](https://user-images.githubusercontent.com/41479614/218787933-7b20ba55-a0de-487b-819e-d5194c9c6e63.png)

### Новые животные

![image](https://user-images.githubusercontent.com/41479614/218805622-1c5a7f7b-baab-4551-8f87-a1031fcf013b.png)

![image](https://user-images.githubusercontent.com/41479614/218799164-933e7249-3254-4ca1-bc41-b040b61d224b.png)

### Обновление животных
Добавлено 32 новых животных. 
Добавлено 14 именованных животных размещенных по карте. 
Изменено уже существующие ~10 животных - доработаны, перенесены с карт в
код

#### Обновление животных и связанного с ними:


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

Каргония может заказать новых животных, педали могут защитспавнить
больше мобов.
Звуки придают живости окружающему

## Изображения изменений


![image](https://github.com/ss220club/Paradise-SS220/assets/41479614/cddcb123-91fd-4617-80dc-097b7b9f4d68)


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


![image](https://github.com/ss220club/Paradise-SS220/assets/41479614/753c0dfa-62a3-45db-a921-e4cb2f968e66)

![image](https://github.com/ss220club/Paradise-SS220/assets/41479614/e6f299c1-8eec-43de-97ce-372bb14bfafc)


![image](https://github.com/ss220club/Paradise-SS220/assets/41479614/fb3f0240-34f5-4f65-96c4-1d9e7b58c48c)

![image](https://github.com/ss220club/Paradise-SS220/assets/41479614/32df4f72-14e6-4478-9e36-ca31dfbfff4f)

![image](https://github.com/ss220club/Paradise-SS220/assets/41479614/0d8dc3b6-c3bf-45ab-a210-2fe426804fd7)

![image](https://github.com/ss220club/Paradise-SS220/assets/41479614/6aaeb18b-cd14-4e89-ba3b-3b9184c32e09)


![image](https://github.com/ss220club/Paradise-SS220/assets/41479614/978737e4-4297-492a-a956-9f4dec38ad15)

![image](https://github.com/ss220club/Paradise-SS220/assets/41479614/b600b6de-a6e2-4153-b657-f7d13fdcdfbd)


## Changelog

:cl:
add: Добавлен ЗООПАРК
add: Добавлены крысы и возможностью стать ей
add: Добавлены переноски
add: Добавлено немного животных на карту
tweak: Расширенные холдеры, многих животных можно держать
soundadd: Добавлены звуки животным
fix: возвращен ивент с хедкрабами
add: добавлен ивент с расширенным заражением
/:cl:

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

---------

Co-authored-by: dj-34 <[email protected]>
  • Loading branch information
2 people authored and Furrior committed Oct 22, 2023
1 parent 2c893a4 commit 78af516
Show file tree
Hide file tree
Showing 145 changed files with 4,542 additions and 58 deletions.
300 changes: 248 additions & 52 deletions _maps/map_files220/cyberiad/cyberiad.dmm

Large diffs are not rendered by default.

5 changes: 4 additions & 1 deletion code/modules/mob/living/living_defense.dm
Original file line number Diff line number Diff line change
Expand Up @@ -275,7 +275,10 @@

for(var/obj/item/grab/G in grabbed_by)
if(G.assailant == user)
to_chat(user, "<span class='notice'>You already grabbed [src].</span>")
if(holder_type) // SS220 EDIT START
get_scooped(user)
else
to_chat(user, "<span class='notice'>Вы уже схватили [src.name].</span>") // SS220 EDIT END
return

add_attack_logs(user, src, "Grabbed passively", ATKLOG_ALL)
Expand Down
5 changes: 4 additions & 1 deletion code/modules/mob/living/simple_animal/animal_defense.dm
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,10 @@
playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)

if(INTENT_GRAB)
grabbedby(M)
if(holder_type) // SS220 EDIT START
get_scooped(M)
else
grabbedby(M) // SS220 EDIT END

if(INTENT_HARM, INTENT_DISARM)
if(HAS_TRAIT(M, TRAIT_PACIFISM))
Expand Down
2 changes: 1 addition & 1 deletion code/modules/mob/mob.dm
Original file line number Diff line number Diff line change
Expand Up @@ -1218,7 +1218,7 @@ GLOBAL_LIST_INIT(slot_equipment_priority, list( \
to_chat(src, "<span class='warning'>Unable to find any unwelded vents to spawn mice at.</span>")
return FALSE
var/obj/vent_found = pick(found_vents)
var/mob/living/simple_animal/mouse/host = new(vent_found.loc)
var/mob/living/simple_animal/mouse/host = prob(20) ? new /mob/living/simple_animal/mouse/rat(vent_found.loc) : new(vent_found.loc) // SS220 EDIT
host.ckey = src.ckey
to_chat(host, "<span class='info'>You are now a mouse. Try to avoid interaction with players, and do not give hints away that you are more than a simple rodent.</span>")
host.forceMove(vent_found)
Expand Down
2 changes: 1 addition & 1 deletion modular_ss220/events/_events.dm
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/datum/modpack/events
name = "Кастомные ивенты"
desc = "Добавление новых ивентов"
author = "dj-34"
author = "dj-34, PhantomRU"
2 changes: 2 additions & 0 deletions modular_ss220/events/_events.dme
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
#include "_events.dm"

#include "code/new_space_laws.dm"
#include "code/headcrabs.dm"
#include "code/infestation_extended.dm"
72 changes: 72 additions & 0 deletions modular_ss220/events/code/headcrabs.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
#define HEADCRAB_NORMAL 0
#define HEADCRAB_FASTMIX 1
#define HEADCRAB_FAST 2
#define HEADCRAB_POISONMIX 3
#define HEADCRAB_POISON 4
#define HEADCRAB_SPAWNER 5

/datum/event/headcrabs
announceWhen = 10
endWhen = 11
var/locstring
var/headcrab_type

/datum/event/headcrabs/start()
var/list/availableareas = list()
for(var/area/station/maintenance/A in world)
availableareas += A
var/area/randomarea = pick(availableareas)
var/list/turf/simulated/floor/turfs = list()
for(var/turf/simulated/floor/F in randomarea)
if(turf_clear(F))
turfs += F
var/list/spawn_types = list()
var/max_number
headcrab_type = rand(0, 5)
switch(headcrab_type)
if(HEADCRAB_NORMAL)
spawn_types = list(/mob/living/simple_animal/hostile/headcrab)
max_number = 6
if(HEADCRAB_FASTMIX)
spawn_types = list(/mob/living/simple_animal/hostile/headcrab, /mob/living/simple_animal/hostile/headcrab/fast)
max_number = 8
if(HEADCRAB_FAST)
spawn_types = list(/mob/living/simple_animal/hostile/headcrab/fast)
max_number = 6
if(HEADCRAB_POISONMIX)
spawn_types = list(/mob/living/simple_animal/hostile/headcrab, /mob/living/simple_animal/hostile/headcrab/poison)
max_number = 4
if(HEADCRAB_POISON)
spawn_types = list(/mob/living/simple_animal/hostile/headcrab/poison)
max_number = 3
if(HEADCRAB_SPAWNER)
spawn_types = list(/obj/structure/spawner/headcrab)
max_number = 2


var/num = rand(2,max_number)

while(turfs.len > 0 && num > 0)
var/turf/simulated/floor/T = pick(turfs)
turfs.Remove(T)
num--
var/spawn_type = pick(spawn_types)
new spawn_type(T)

if(prob(15))
var/turf/simulated/floor/T = pick(turfs)
new /obj/structure/spawner/headcrab(T)

/datum/event/headcrabs/announce()
GLOB.major_announcement.Announce("Биосканеры фиксируют размножение хедкрабов на борту станции. Избавьтесь от них, прежде чем это начнет влиять на продуктивность станции", "ВНИМАНИЕ: НЕОПОЗНАННЫЕ ФОРМЫ ЖИЗНИ.")

/datum/event_container/mundane/New()
. = ..()
available_events |= new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Headcrab Infestation", /datum/event/headcrabs, 100, list(ASSIGNMENT_SECURITY = 30), TRUE)

#undef HEADCRAB_NORMAL
#undef HEADCRAB_FASTMIX
#undef HEADCRAB_FAST
#undef HEADCRAB_POISONMIX
#undef HEADCRAB_POISON
#undef HEADCRAB_SPAWNER
123 changes: 123 additions & 0 deletions modular_ss220/events/code/infestation_extended.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
#define VERM_RATS 0
#define VERM_AXOLOTL 1
#define VERM_FROGS 2
#define VERM_IGUANAS 3
#define VERM_SNAKES 4
#define VERM_MOTH 5
#define VERM_MOTHROACH 6

/datum/event/infestation/extended
announceWhen = 10
endWhen = 11
var/static/list/spawn_areas_extended = list(
/area/station/service/chapel,
/area/station/service/library,
/area/station/service/hydroponics,
/area/station/service/cafeteria,
/area/station/service/hydroponics,
/area/station/service/bar,
/area/station/service/kitchen,
/area/station/service/janitor,
/area/station/public/construction,
/area/station/public/arcade,
/area/station/public/toilet,
/area/station/public/fitness,
/area/station/engineering/atmos,
/area/station/engineering/tech_storage,
/area/station/security/armory/secure,
/area/station/security/permabrig,
/area/station/security/lobby,
/area/station/security/prison/cell_block/A,
/area/station/security/prison/cell_block/B,
/area/station/security/prison/cell_block/C,
)

/datum/event/infestation/extended/start()
var/list/turf/simulated/floor/turfs = list()
spawn_area_type = pick(spawn_areas_extended)
for(var/areapath in typesof(spawn_area_type))
var/area/A = locate(areapath)
if(!A)
log_debug("Failed to locate area for extended infestation event!")
kill()
return
for(var/turf/simulated/floor/F in A.contents)
if(turf_clear(F))
turfs += F

var/list/spawn_types = list()
var/max_number
vermin = rand(0, 6)
switch(vermin)
if(VERM_RATS)
max_number = 12
var/possible_vermin = rand(0, 2)
switch(possible_vermin)
if(0)
spawn_types = list(/mob/living/simple_animal/mouse/rat)
vermstring = "крыс"
if(1)
spawn_types = list(/mob/living/simple_animal/mouse/rat/irish)
vermstring = "ирландских крыс борцов за независимость"
if(2)
spawn_types = list(/mob/living/simple_animal/mouse/rat/white)
vermstring = "лабораторных крыс"
if(VERM_AXOLOTL)
spawn_types = list(/mob/living/simple_animal/lizard/axolotl)
max_number = 9
vermstring = "аксолотлей"
if(VERM_IGUANAS)
spawn_types = list(/mob/living/simple_animal/hostile/lizard)
max_number = 5
vermstring = "игуанн"
if(prob(10))
spawn_types = list(/mob/living/simple_animal/hostile/lizard/gator)
max_number = 3
vermstring = "аллигаторов"
if(VERM_SNAKES)
spawn_types = list(/mob/living/simple_animal/hostile/poison_snake)
max_number = 9
vermstring = "ядовитых змей"
if(VERM_MOTH)
spawn_types = list(/mob/living/simple_animal/moth)
max_number = 5
vermstring = "молей"
if(VERM_MOTHROACH)
spawn_types = list(/mob/living/simple_animal/mothroach)
max_number = 5
vermstring = "молетараканов"
var/amount_to_spawn = rand(2, max_number)
while(length(turfs) && amount_to_spawn > 0)
var/turf/simulated/floor/T = pick_n_take(turfs)
amount_to_spawn--
var/spawn_type = pick(spawn_types)
new spawn_type(T)


/datum/event/infestation/extended/announce(false_alarm)
var/vermin_chosen = vermstring || pick("неопознанных форм жизни", "золотых жуков", "ошибок", "насекомых", "тараканов", "муравьев", "щиткьюров", "ассистентов", "экипажа", "вульпканинов", "таяринов", "слаймов", "слаймоменов")
if(!spawn_area_type)
if(false_alarm)
spawn_area_type = pick(spawn_areas + spawn_areas_extended)
else
log_debug("Extended Infestation Event didn't provide an area to announce(), something is likely broken.")
kill()

GLOB.minor_announcement.Announce("Биосканеры фиксируют размножение [vermin_chosen] в [initial(spawn_area_type.name)]. Избавьтесь от них, прежде чем это начнет влиять на продуктивность станции.", "ВНИМАНИЕ: НЕОПОЗНАННЫЕ ФОРМЫ ЖИЗНИ.")
spawn_area_type = null

/datum/event/falsealarm/start()
possible_event_types |= /datum/event/infestation/extended
. = ..()

/datum/event_container/mundane/New()
. = ..()
available_events |= new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Vermin Infestation Extended", /datum/event/infestation/extended, 10, list(ASSIGNMENT_JANITOR = 100, ASSIGNMENT_SECURITY = 30))

#undef VERM_RATS
#undef VERM_AXOLOTL
#undef VERM_FROGS
#undef VERM_IGUANAS
#undef VERM_SNAKES
#undef VERM_MOTH
#undef VERM_MOTHROACH
4 changes: 4 additions & 0 deletions modular_ss220/mobs/_mobs.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
/datum/modpack/mobs
name = "Мобы"
desc = "Пак животных, питомцев, холдеров для их держания и изменения."
author = "PhantomRU, dj-34"
37 changes: 37 additions & 0 deletions modular_ss220/mobs/_mobs.dme
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
#include "_mobs.dm"

#include "code/simple_animal/friendly/crab.dm"
#include "code/simple_animal/friendly/farm_animals.dm"
#include "code/simple_animal/friendly/frog.dm"
#include "code/simple_animal/friendly/hamster.dm"
#include "code/simple_animal/friendly/lizard.dm"
#include "code/simple_animal/friendly/moth.dm"
#include "code/simple_animal/friendly/mouse.dm"
#include "code/simple_animal/friendly/possum.dm"
#include "code/simple_animal/friendly/rat.dm"
#include "code/simple_animal/friendly/snail.dm"
#include "code/simple_animal/hostile/alien.dm"
#include "code/simple_animal/hostile/bear.dm"
#include "code/simple_animal/hostile/headcrab.dm"
#include "code/simple_animal/hostile/lizard.dm"
#include "code/simple_animal/hostile/snake.dm"
#include "code/simple_animal/hostile/spider.dm"
#include "code/simple_animal/hostile/syndi_rat.dm"
#include "code/simple_animal/hostile/undead.dm"
#include "code/simple_animal/pets/cat.dm"
#include "code/simple_animal/pets/dog.dm"
#include "code/simple_animal/pets/fashion.dm"
#include "code/simple_animal/pets/fox.dm"
#include "code/simple_animal/pets/pet.dm"
#include "code/simple_animal/pets/rouge.dm"
#include "code/simple_animal/pets/security_dogs.dm"
#include "code/simple_animal/pets/slugcat.dm"
#include "code/simple_animal/items.dm"
#include "code/simple_animal/mobs.dm"
#include "code/simple_animal/named_animals.dm"
#include "code/simple_animal/overrides.dm"
#include "code/supplypacks/crittercrate.dm"
#include "code/supplypacks/pack_animals.dm"
#include "code/mob_holder.dm"
#include "code/mob_spawner.dm"
#include "code/pet_carrier.dm"
Loading

0 comments on commit 78af516

Please sign in to comment.