Skip to content

Commit

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

Ух блять...
Добавление нового гейта - зеленая планета с заброшенным плазмадобывающим
комплексом "MC-16".
В модули добавлена косметика: новые полы - неразрушаемая трава и углы
берега реки; деревья в количестве 1 штука (зато какое..); деревянные
ящики; фальшивая стена в виде книжного шкафа, декали травы (использованы
единично для объемных и красивых зарослей).

Новые симплмобы - большая пантера (больше хп, больше скорости, увороты),
ядовитая змея (яд - нейротоксин, вводит 3u. за укус), унати-подобные
аборигены (быстрые, даже наверное слишком) и спавнеры под них.
Лут: На территории комплекса - ресурсы, 3 бластера (2 старых лазергана и
1 самозаряжающийся мини пистолет), 300 кредитов, запчасти к мехам,
документы NT в сейфе, всякая приятная мелочь;
На территории джунглей: 1 старый лазерган, потрепанный Рипли, шаттл
синдиката с бладред модсьютом (нужна карта оперативника, можно найти под
конец) и документами синдиката, церемониальный клеймор.
На территории пиратской пещеры: прототип лазергана, энергетическая
сабля, 2500 кредитов, одежда капитана, всякие брюлики;
На территории пещерного храма: снаряжение аборигенов - маски, костяная
броня, одежда, топор, лук, колчаны (из 3х колчанов полный только один),
труп оперативника синдиката с картой оперативника, другая мелочь.

Большую часть контента можно урезать.

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

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

Больше гейтов - больше гейтов (это очень плохо).

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

![image](https://github.com/ss220club/Paradise-SS220/assets/139562134/ff773974-6a91-42d6-9bde-a2661a3548f9)


## Тестирование
Работает на локалке, выглядит прилично.
За тесты страшно.

## Changelog

:cl:
add: новая карта для гейта: gate_lizard; новые симплмобы; косметические
объекты для карты.
/:cl:

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

---------

Co-authored-by: Furior <[email protected]>
  • Loading branch information
konushi and Furrior authored Sep 24, 2023
1 parent d59bbec commit 1c8bca7
Show file tree
Hide file tree
Showing 29 changed files with 60,988 additions and 0 deletions.
60,593 changes: 60,593 additions & 0 deletions _maps/map_files220/RandomZLevels/gate_lizard.dmm

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions config/example/config.toml
Original file line number Diff line number Diff line change
Expand Up @@ -850,6 +850,7 @@ enabled_away_missions = [
"_maps/map_files220/RandomZLevels/wildwest.dmm",
"_maps/map_files220/RandomZLevels/terrorspiders.dmm",
"_maps/map_files220/RandomZLevels/blackmarketpackers.dmm",
"_maps/map_files220/RandomZLevels/gate_lizard.dmm",
]


Expand Down
6 changes: 6 additions & 0 deletions modular_ss220/aesthetics/decals/code/decals.dm
Original file line number Diff line number Diff line change
Expand Up @@ -110,3 +110,9 @@
icon_state = "dust"
base_icon_state = "dust"
mouse_opacity = FALSE

/* GRASS */
/obj/effect/turf_decal/grass
icon = 'modular_ss220/aesthetics/decals/icons/grass.dmi'
icon_state = "grass_edge_big"
base_icon_state = "grass_edge"
Binary file added modular_ss220/aesthetics/decals/icons/grass.dmi
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
3 changes: 3 additions & 0 deletions modular_ss220/maps220/_maps220.dme
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,6 @@
#include "code/nanomap.dm"
#include "code/spawners.dm"
#include "code/walls.dm"
#include "code/floors.dm"
#include "code/effects.dm"
#include "code/objects.dm"
57 changes: 57 additions & 0 deletions modular_ss220/maps220/code/Areas/gateway.dm
Original file line number Diff line number Diff line change
Expand Up @@ -212,3 +212,60 @@
name = "BMP Mining"
icon_state = "awaycontent17"
requires_power = TRUE

/* Jungle Planet */
/area/awaymission/jungle_planet
name = "Jungle"
icon_state = "away"
report_alerts = FALSE

/area/awaymission/jungle_planet/outside
name = "Jungle"
dynamic_lighting = DYNAMIC_LIGHTING_DISABLED
icon_state = "awaycontent1"
always_unpowered = TRUE
ambientsounds = list('modular_ss220/aesthetics_sounds/sound/area_ambient/jungle1.ogg', 'modular_ss220/aesthetics_sounds/sound/area_ambient/jungle2.ogg', 'modular_ss220/aesthetics_sounds/sound/area_ambient/jungle3.ogg')

/area/awaymission/jungle_planet/outside/abandoned
name = "Abandoned"
dynamic_lighting = DYNAMIC_LIGHTING_FORCED
icon_state = "awaycontent5"

/area/awaymission/jungle_planet/outside/river
name = "River"
icon_state = "awaycontent2"
ambientsounds = list('modular_ss220/aesthetics_sounds/sound/area_ambient/river.ogg')

/area/awaymission/jungle_planet/outside/waterfall
name = "Waterfall"
icon_state = "awaycontent3"
ambientsounds = list('modular_ss220/aesthetics_sounds/sound/area_ambient/waterfall.ogg')

/area/awaymission/jungle_planet/outside/cave
name = "Cave"
icon_state = "awaycontent4"
dynamic_lighting = DYNAMIC_LIGHTING_FORCED
ambientsounds = list('modular_ss220/aesthetics_sounds/sound/area_ambient/cave_ambient2.ogg', 'modular_ss220/aesthetics_sounds/sound/area_ambient/cave_ambient3.ogg', 'modular_ss220/aesthetics_sounds/sound/area_ambient/cave_waterdrops.ogg')

/area/awaymission/jungle_planet/outside/cave/small
name = "Small Cave"
icon_state = "awaycontent7"
ambientsounds = list('modular_ss220/aesthetics_sounds/sound/area_ambient/cave_waterfall.ogg', 'modular_ss220/aesthetics_sounds/sound/area_ambient/cave_waterdrops.ogg')

/area/awaymission/jungle_planet/outside/cave/pirate
name = "Pirate Cave"
icon_state = "awaycontent6"
always_unpowered = FALSE
requires_power = FALSE
ambientsounds = list('modular_ss220/aesthetics_sounds/sound/area_ambient/cave_waterdrops.ogg')

/area/awaymission/jungle_planet/inside
name = "Hangar 2"
dynamic_lighting = DYNAMIC_LIGHTING_ENABLED
icon_state = "awaycontent8"
requires_power = TRUE

/area/awaymission/jungle_planet/inside/complex
name = "MC-16"
icon_state = "awaycontent9"
ambientsounds = list('modular_ss220/aesthetics_sounds/sound/area_ambient/ambient_pulse1.ogg', 'modular_ss220/aesthetics_sounds/sound/area_ambient/ambient_pulse2.ogg')
18 changes: 18 additions & 0 deletions modular_ss220/maps220/code/effects.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
//firefly
/obj/effect/firefly
name = "firefly"
desc = ""
icon = 'modular_ss220/maps220/icons/effects.dmi'
icon_state = "fire_fly1"
light_color = "#F8F6E6"
light_power = 4
light_range = 2
mouse_opacity = MOUSE_OPACITY_TRANSPARENT

/obj/effect/firefly/blue
icon_state = "fire_fly3"
light_color = "#4169E1"

/obj/effect/firefly/green
icon_state = "fire_fly2"
light_color = "#228B22"
54 changes: 54 additions & 0 deletions modular_ss220/maps220/code/floors.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
/* Beach */
/turf/simulated/floor/beach/away/coastline/beachcorner
name = "beachcorner"
icon = 'modular_ss220/maps220/icons/floors.dmi'
icon_state = "beachcorner"
base_icon_state = "beachcorner"
footstep = FOOTSTEP_WATER
barefootstep = FOOTSTEP_WATER
clawfootstep = FOOTSTEP_WATER
heavyfootstep = FOOTSTEP_WATER
baseturf = /turf/simulated/floor/beach/away/coastline/beachcorner

/turf/simulated/floor/beach/away/water/deep/dense_canpass
name = "Deep Water"
smoothing_groups = list()
water_overlay_image = null
icon_state = "seadeep"
baseturf = /turf/simulated/floor/beach/away/water/deep

/turf/simulated/floor/beach/away/water/deep/dense_canpass/CanPass (atom/movable/mover, border_dir)
.=..()
if(isliving(mover))
return FALSE

/* Indestructible */
/turf/simulated/floor/indestructible/grass
name = "grass patch"
icon = 'icons/turf/floors/grass.dmi'
icon_state = "grass"
base_icon_state = "grass"
smoothing_flags = SMOOTH_BITMASK
smoothing_groups = list(SMOOTH_GROUP_TURF, SMOOTH_GROUP_GRASS)
canSmoothWith = list(SMOOTH_GROUP_GRASS, SMOOTH_GROUP_JUNGLE_GRASS)
layer = ABOVE_OPEN_TURF_LAYER
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
footstep = FOOTSTEP_GRASS
barefootstep = FOOTSTEP_GRASS
clawfootstep = FOOTSTEP_GRASS
heavyfootstep = FOOTSTEP_GENERIC_HEAVY
transform = matrix(1, 0, -9, 0, 1, -9)

/turf/simulated/floor/indestructible/grass/jungle
name = "jungle grass"
icon = 'icons/turf/floors/junglegrass.dmi'
icon_state = "junglegrass"
base_icon_state = "junglegrass"
smoothing_groups = list(SMOOTH_GROUP_TURF, SMOOTH_GROUP_GRASS, SMOOTH_GROUP_JUNGLE_GRASS)

/turf/simulated/floor/indestructible/grass/no_creep
smoothing_flags = null
smoothing_groups = null
canSmoothWith = null
layer = GRASS_UNDER_LAYER
transform = null
214 changes: 214 additions & 0 deletions modular_ss220/maps220/code/mobs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -276,3 +276,217 @@
minbodytemp = 0
loot = list(/obj/effect/spawner/lootdrop/maintenance/three = 1)

/* Jungle Mob */
/mob/living/simple_animal/hostile/jungle_lizard
name = "tribal lizardman"
desc = "Представитель коренного населения этой планеты. Этот варвар не потерпит незваных гостей."
icon = 'modular_ss220/maps220/icons/simple_human.dmi'
icon_state = "lizardman_1"
icon_living = "lizardman_1"
icon_dead = "lizard_dead"
speak = list("RAWR!","HSS-sss-ss!!!","Azkh'a Azss'ss!","Ssshazi's Ghzass!")
speak_chance = 2
turns_per_move = 5
mob_biotypes = MOB_ORGANIC | MOB_HUMANOID
sentience_type = SENTIENCE_OTHER
speed = -0.5
move_to_delay = 2
stat_attack = UNCONSCIOUS
robust_searching = 1
maxHealth = 80
health = 80
harm_intent_damage = 8
melee_damage_lower = 5
melee_damage_upper = 10
attacktext = "рвёт"
attack_sound = 'sound/weapons/punch1.ogg'
a_intent = INTENT_HARM
faction = list("junglemob")
check_friendly_fire = 1
status_flags = CANPUSH
unsuitable_atmos_damage = 10
loot = list(/obj/effect/decal/cleanable/blood/gibs)
del_on_death = 1
footstep_type = FOOTSTEP_MOB_SHOE

/mob/living/simple_animal/hostile/jungle_lizard/meele
icon_state = "lizardman_2"
icon_living = "lizardman_2"
maxHealth = 70
health = 70

/mob/living/simple_animal/hostile/jungle_lizard/spearman
name = "tribal spearman"
desc = "Представитель коренного населения этой планеты. Вооружен острым копьем, крепким деревянным баклером и яростным желанием защищать свои земли."
icon_state = "lizardman_spear"
icon_living = "lizardman_spear"
maxHealth = 100
health = 100
melee_damage_lower = 15
melee_damage_upper = 15
rapid_melee = 2
attack_sound = 'sound/weapons/bladeslice.ogg'
attacktext = "колет"

/mob/living/simple_animal/hostile/jungle_lizard/archer
name = "tribal archer"
desc = "Представитель коренного населения этой планеты. Вооружен мастерски сделанным композитным луком и смертоносными стрелами."
icon_state = "lizardman_bow"
icon_living = "lizardman_bow"
ranged = 1
retreat_distance = 5
minimum_distance = 6
projectiletype = /obj/item/projectile/bullet/arrow
projectilesound = 'sound/weapons/grenadelaunch.ogg'
attacktext = "стреляет"

/obj/item/projectile/bullet/arrow //not reusable
name = "arrow"
icon_state = "arrow"
range = 10
damage = 25
damage_type = BRUTE

/mob/living/simple_animal/hostile/jungle_lizard/axeman
name = "tribal axeman"
desc = "Представитель коренного населения этой планеты. Закован в плотный самодельный костяной панцырь и вооружен огромным топором, таким же опасным, как и он сам."
icon_state = "lizardman_axe"
icon_living = "lizardman_axe"
maxHealth = 160
health = 160
melee_damage_lower = 25
melee_damage_upper = 25
attack_sound = 'sound/weapons/bladeslice.ogg'
attacktext = "рубит"

/mob/living/simple_animal/hostile/jungle_lizard/leader
name = "tribal leader"
desc = "Представитель коренного населения этой планеты. Этот ящер заслужил свое звание жестокостью и кровожадностью по отношению к врагам."
icon_state = "lizardman_leader"
icon_living = "lizardman_leader"
maxHealth = 200
health = 200
melee_damage_lower = 30
melee_damage_upper = 30
attack_sound = 'sound/weapons/bladeslice.ogg'
attacktext = "рубит"
damage_coeff = list(BRUTE = 0.8, BURN = 0.8, TOX = 1, CLONE = 2, STAMINA = 1, OXY = 1)

/mob/living/simple_animal/hostile/panther/huge_panther
name = "huge panther"
desc = "Большой, гладкий черный кот с острыми клыками и когтями. Этот выглядит особенно огромным."
maxHealth = 120
health = 120
harm_intent_damage = 5
melee_damage_lower = 15
melee_damage_upper = 18
rapid_melee = 2
move_to_delay = 2
speed = -2
dodging = 1
sidestep_per_cycle = 2
faction = list("junglemob")

/mob/living/simple_animal/hostile/poison_snake
name = "poison snake"
desc = "Изворотливая змея, незаметно скользящая своим брюхом по земле. Яд многих из них может быть смертельно опасным."
icon_state = "snake"
icon_living = "snake"
icon_dead = "snake_dead"
speak_emote = list("hisses")
tts_seed = "Ladyvashj"
health = 20
maxHealth = 20
attacktext = "кусает"
attack_sound = 'sound/weapons/bite.ogg'
melee_damage_lower = 5
melee_damage_upper = 6
obj_damage = 0
response_help = "pets"
response_disarm = "shoos"
response_harm = "steps on"
ventcrawler = VENTCRAWLER_ALWAYS
density = FALSE
pass_flags = PASSTABLE | PASSMOB
mob_size = MOB_SIZE_SMALL
gold_core_spawnable = HOSTILE_SPAWN
environment_smash = ENVIRONMENT_SMASH_NONE
faction = list("junglemob")

/mob/living/simple_animal/hostile/poison_snake
var/poison_per_bite = 3
var/poison_type = "neurotoxin2"

/mob/living/simple_animal/hostile/poison_snake/AttackingTarget()
. = ..()
if(. && isliving(target))
var/mob/living/L = target
if(L.reagents && !poison_per_bite == 0)
L.reagents.add_reagent(poison_type, poison_per_bite)
return .

/* Jungle Mob Spawners */
/obj/effect/landmark/awaymissions/gate_lizard/mine_spawner
icon = 'icons/obj/items.dmi'
icon_state = "fleshtrap"
var/id = null
var/triggered = 0
var/faction = null
var/safety_z_check = 1

/obj/effect/landmark/awaymissions/gate_lizard/mob_spawn
name = "spawner"
icon = 'modular_ss220/maps220/icons/simple_human.dmi'
var/id = null
var/jungle_mob = null

/obj/effect/landmark/awaymissions/gate_lizard/mine_spawner/Crossed(AM as mob|obj, oldloc)
if(!isliving(AM))
return
var/mob/living/M = AM
if(faction && (faction in M.faction))
return
triggerlandmark(M)

/obj/effect/landmark/awaymissions/gate_lizard/mine_spawner/proc/triggerlandmark(mob/living/victim)
if(triggered)
return
victim.spawn_alert(victim)
for(var/obj/effect/landmark/awaymissions/gate_lizard/mob_spawn/S in GLOB.landmarks_list)
if(safety_z_check && S.z != z)
continue
if(S.id == id)
new S.jungle_mob(get_turf(S))
triggered = 1
qdel(src)

/mob/living/proc/spawn_alert(atom/A) // Вызывает появление восклицательного знака над головой при наступании на маркер
var/image/I
I = image('icons/obj/cardboard_boxes.dmi', A, "cardboard_special", A.layer+1)
var/list/viewing = list()
for(var/mob/M in viewers(A))
if(M.client)
viewing |= M.client
flick_overlay(I,viewing,8)
I.alpha = 0
animate(I, pixel_z = 32, alpha = 255, time = 5, easing = ELASTIC_EASING)

/obj/effect/landmark/awaymissions/gate_lizard/mob_spawn/melee
name = "Melee"
icon_state = "spawner"
jungle_mob = /mob/living/simple_animal/hostile/jungle_lizard

/obj/effect/landmark/awaymissions/gate_lizard/mob_spawn/melee_spear
name = "Spearman"
icon_state = "spawner_spear"
jungle_mob = /mob/living/simple_animal/hostile/jungle_lizard/spearman

/obj/effect/landmark/awaymissions/gate_lizard/mob_spawn/melee_axe
name = "Axeman"
icon_state = "spawner_axe"
jungle_mob = /mob/living/simple_animal/hostile/jungle_lizard/axeman

/obj/effect/landmark/awaymissions/gate_lizard/mob_spawn/ranged
name = "Bowman"
icon_state = "spawner_bow"
jungle_mob = /mob/living/simple_animal/hostile/jungle_lizard/archer
Loading

0 comments on commit 1c8bca7

Please sign in to comment.