Skip to content

Commit

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

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

Добавляем режим ВОКС-Рейдеров.
Основа режима - ВОКСам нужно продавать ништяки своей машине-торговле, и
после в консольке покупать снаряжение или товары для торговли со
станцией.
ВОКСы рассчитаны на кооперацию, из-за чего все средства получаемые из
рейдов принадлежат всей группе без индивидуализма.

Каждое снаряжение хорошо в своей мере.
Снаряжение рейдеров подходит для космических рейдов. Снаряжение
наемников же подходит для ведения боевых действий в условиях атмосферы с
нормальным давлением. Все снаряжение специализировано и помогает
владельцу в конкретной задаче, оберегая его от внешних угроз.

Роадмапа:
- [x] База режима под антаг микс и режим игры
- [x] Антаг микс и сценарии режимов возникающих не среди экипажа.
- [x] Доделать режим сценария под антаг-микс
- [ ] МАЖОР Ивент-события прибытия ВОКСов как Абдукторов
- [x] Выдача антажки
- [x] ХУДы
- [x] Цельки ВОКСов
- [x] Экипировка рейдеров
- [x] Экипировка наемников
- [x] Наушники и частоты ВОКСов
- [x] Вокс-трейдер для выдачи кредитов
- [x] Магазин для покупки снаряжения
- [x] База паков для покупки
- [x] Паки для покупки
- [x] Интерфейс магазинов
#1423
- [x] Вооружение,
- [x] Био-оружие, 
- [x] Био-снаряжение.
- [x] Био-инжекторы.
- [x] Медицинское снаряжение (возвращаем боевые шприцеметы и не только)
- [x] Карта базирования ВОКСов и их корабля.
- [x] Наборы снаряжения со скидками
- [x] Скидки при продаже технологичных товаров.
- [x] Невозможность продать товары ВОКСов.
- [x] Wiki https://wiki.ss220.club/index.php/Вокс-Рейдер

Closes #91 - и то это не порт. Я их сделал с нуля.

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

Режим с несколькими вариантами развития, РП и лейтгеймом.

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

Худы

![image](https://github.com/ss220club/Paradise-SS220/assets/41479614/83e5da3e-fea7-421e-9706-241706a5ae03)

Снаряжение

![image](https://github.com/ss220club/Paradise-SS220/assets/41479614/e5e9582a-026c-41dd-8795-4d4c97331a99)

![image](https://github.com/ss220club/Paradise-SS220/assets/41479614/b01698d8-305e-4b65-8e6b-46db69cc3d3a)

![image](https://github.com/ss220club/Paradise-SS220/assets/41479614/b6bfcb87-6918-46f0-a131-5c2049d3efa0)

![image](https://github.com/ss220club/Paradise-SS220/assets/41479614/bc67a43d-c1b9-4784-ba40-01c1ba0a15e2)

![image](https://github.com/ss220club/Paradise-SS220/assets/41479614/82827819-9a10-452c-b28d-b4ef0a8467b6)

![image](https://github.com/ss220club/Paradise-SS220/assets/41479614/1f8788c6-d955-4725-97be-5cd82d831dbf)

![image](https://github.com/ss220club/Paradise-SS220/assets/41479614/bbe9151f-a61a-419b-990a-5654a17932ed)

![image](https://github.com/ss220club/Paradise-SS220/assets/41479614/7f60cf6b-eef1-4b28-9cfa-7d5547bb8c2c)

![image](https://github.com/ss220club/Paradise-SS220/assets/41479614/5846f9ee-5fd1-4b3b-9f20-19454fe1bfc1)

![image](https://github.com/ss220club/Paradise-SS220/assets/41479614/e8e7f6fa-a2e8-40ee-ac0b-efa21f28b0c3)

![image](https://github.com/ss220club/Paradise-SS220/assets/41479614/b57bc92f-fddc-468d-843e-c2b47b0f28f9)

![image](https://github.com/ss220club/Paradise-SS220/assets/41479614/950788ad-bbea-4ed9-b961-688657e3906c)

![image](https://github.com/ss220club/Paradise-SS220/assets/41479614/ea660c4e-4add-4b98-b503-c6c57691e43a)

![image](https://github.com/ss220club/Paradise-SS220/assets/41479614/0011aef2-4057-42f1-895b-6d645f1fd865)

![image](https://github.com/ss220club/Paradise-SS220/assets/41479614/612aeb43-62c7-49e7-8a92-39e84db64293)

![image](https://github.com/ss220club/Paradise-SS220/assets/41479614/64d60874-79c1-4465-978a-7fd44653a681)

![image](https://github.com/ss220club/Paradise-SS220/assets/41479614/d824e1c2-b664-4bf2-810b-40e6c49e657a)

![image](https://github.com/ss220club/Paradise-SS220/assets/41479614/2e07cad4-9d8c-4203-b9f8-85f61bff9f5d)

![image](https://github.com/ss220club/Paradise-SS220/assets/41479614/f6c960ae-71c4-420d-a447-36f63add371d)

![image](https://github.com/ss220club/Paradise-SS220/assets/41479614/229d036d-2703-4fca-b836-aaee5014a881)


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

![image](https://github.com/ss220club/Paradise-SS220/assets/41479614/182913fa-cc44-420f-866a-a07106256e9b)


## Changelog

:cl:
add: Добавлен режим ВОКС-Рейдеров
https://wiki.ss220.club/index.php/Вокс-Рейдер
/:cl:

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

---------

Co-authored-by: Legendaxe <[email protected]>
Co-authored-by: paradisess13[bot] <165046124+paradisess13[bot]@users.noreply.github.com>
  • Loading branch information
3 people authored Aug 28, 2024
1 parent 2136faf commit 3699b33
Show file tree
Hide file tree
Showing 102 changed files with 11,082 additions and 2,040 deletions.
7,918 changes: 5,908 additions & 2,010 deletions _maps/map_files220/generic/centcomm.dmm

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions code/__DEFINES/hud.dm
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@
#define ANTAG_HUD_ZOMBIE 22
// SS220 EDIT - START
#define ANTAG_HUD_BLOOD_BROTHER 23
#define ANTAG_HUD_VOX_RAIDER 24
// SS220 EDIT - END

// Notification action types
Expand Down
1 change: 1 addition & 0 deletions code/datums/mind.dm
Original file line number Diff line number Diff line change
Expand Up @@ -567,6 +567,7 @@
sections["traitor"] = memory_edit_traitor()
// SS220 EDIT - START
sections["blood_brother"] = memory_edit_blood_brother()
sections["vox_raider"] = memory_edit_vox_raider()
// SS220 EDIT - END
if(!issilicon(current))
/** CULT ***/
Expand Down
6 changes: 6 additions & 0 deletions code/modules/admin/verbs/one_click_antag.dm
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,12 @@
<a href='byond://?src=[UID()];makeAntag=6'>Make Vampires</a><br>
<a href='byond://?src=[UID()];makeAntag=7'>Make Abductor Team (Requires Ghosts)</a><br>
"}
// SS220 ADD - Start
dat += {"
<a href='byond://?src=[UID()];makeAntag=8'>Make Blood Brothers Team</a><br>
<a href='byond://?src=[UID()];makeAntag=9'>Make Vox Raiders</a><br>
"}
// SS220 ASS - End
usr << browse(dat, "window=oneclickantag;size=400x400")
return

Expand Down
1 change: 1 addition & 0 deletions code/modules/mob/living/carbon/human/species/vox.dm
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,7 @@
..()
updatespeciescolor(H)
H.update_icons()
H.faction |= list("Vox")

/datum/species/vox/updatespeciescolor(mob/living/carbon/human/H, owner_sensitive = 1) //Handling species-specific skin-tones for the Vox race.
if(H.dna.species.bodyflags & HAS_ICON_SKIN_TONE)
Expand Down
2 changes: 1 addition & 1 deletion code/modules/projectiles/projectile/bullets.dm
Original file line number Diff line number Diff line change
Expand Up @@ -191,7 +191,7 @@

/obj/item/projectile/bullet/meteorshot/New()
..()
SpinAnimation()
SpinAnimation(5)

/obj/item/projectile/bullet/mime
damage = 40
Expand Down
10 changes: 10 additions & 0 deletions config/example/config.toml
Original file line number Diff line number Diff line change
Expand Up @@ -1123,5 +1123,15 @@ tag = "blood_brothers"
"Solar Federation General",
]

[[antag_mix_gamemode_configuration.antag_scenarios_configuration]]
tag = "vox_raiders"

[antag_mix_gamemode_configuration.antag_scenarios_configuration.params]
"required_players" = 45
"cost" = 45
"weight" = 1
"antag_cap" = 4
"team_size" = 4
"candidates_required" = 2

################################################################
Binary file modified icons/mob/hud/antaghud.dmi
Binary file not shown.
2 changes: 1 addition & 1 deletion modular_ss220/_defines220/_defines220.dme
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
#include "code/signals_mob/signals_mob_main.dm"
#include "code/signals_mob/signals_mob_silicon.dm"
#include "code/signals_mob/signals_mob_simple.dm"
#include "code/role_preferences.dm"
#include "code/antagonists.dm"
#include "code/gamemode.dm"
#include "code/signals_keybindings.dm"
#include "code/signals_obj.dm"
Expand Down
6 changes: 6 additions & 0 deletions modular_ss220/_defines220/code/antagonists.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#define ROLE_BLOOD_BROTHER "blood brother"
#define ROLE_VOX_RAIDER "vox raider"

#define VOX_RAID_FREQ 1220

GLOBAL_LIST_EMPTY(raider_spawn)
3 changes: 3 additions & 0 deletions modular_ss220/_defines220/code/gamemode.dm
Original file line number Diff line number Diff line change
@@ -1 +1,4 @@
#define SPECIAL_ROLE_BLOOD_BROTHER "Blood Brother"
#define SPECIAL_ROLE_VOX_RAIDER "Vox Raider"

#define isvoxcash(W) (istype(W, /obj/item/stack/vox_cash))
1 change: 0 additions & 1 deletion modular_ss220/_defines220/code/role_preferences.dm

This file was deleted.

19 changes: 17 additions & 2 deletions modular_ss220/antagonists/_antagonists.dm
Original file line number Diff line number Diff line change
@@ -1,8 +1,23 @@
/datum/modpack/antagonists
name = "Антагонисты и режимы"
desc = "Добавляет новые режимы и антагонистов."
author = "Gaxeer, dj-34"
author = "Gaxeer, dj-34, PhantomRU"

/datum/modpack/antagonists/initialize()
GLOB.special_roles |= ROLE_BLOOD_BROTHER
GLOB.huds += new/datum/atom_hud/antag/hidden()
GLOB.special_roles |= ROLE_BLOOD_BROTHER

GLOB.huds += new/datum/atom_hud/antag()
GLOB.special_roles |= ROLE_VOX_RAIDER

SSradio.ANTAG_FREQS |= list(VOX_RAID_FREQ)

SSradio.radiochannels |= list(
//"Special Ops" = DTH_FREQ,
"VoxCom" = VOX_RAID_FREQ,
)

GLOB.department_radio_keys |= list(
":VR" = "VoxCom", "#VR" = "VoxCom", ".VR" = "VoxCom",
":vr" = "VoxCom", "#vr" = "VoxCom", ".vr" = "VoxCom",
)
62 changes: 62 additions & 0 deletions modular_ss220/antagonists/_antagonists_vox_raiders.dme
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
//#include "_antagonists.dm"

// Antag Mix
// #include "code/antag_mix/antag_mix.dm"
// #include "code/antag_mix/scenarios/antag_scenario.dm"
// #include "code/antag_mix/scenarios/antag_team_scenario.dm"
// #include "code/antag_mix/scenarios/minor_scenarios.dm"
#include "code/antag_mix/scenarios/major_scenarios.dm"
// #include "code/configuration/antag_mix_configuration.dm"
// #include "code/mind/memory_edit.dm"
#include "code/antag_datum.dm"
#include "code/objectives.dm"
#include "code/completion.dm"

// Objects
#include "code/landmarks.dm"
#include "code/radio.dm"
#include "code/guns/dartgun_ammo.dm"
#include "code/guns/dartgun.dm"
#include "code/guns/spikegun_ammo.dm"
#include "code/guns/spikegun.dm"
#include "code/guns/biogun_ammo.dm"
#include "code/guns/biogun.dm"

// Blood Brothers
//#include "code/blood_brothers/blood_brothers_datum.dm"
//#include "code/blood_brothers/blood_brothers_team.dm"

// Vox Raiders
#include "code/vox_raider/vox_raider_datum.dm"
#include "code/vox_raider/vox_raider_mode.dm"
#include "code/vox_raider/vox_raider_team.dm"

// Vox Raiders - Objects
#include "code/vox_raider/objects/vox_cash.dm"
#include "code/vox_raider/objects/packs/vox_shop_defines.dm"
#include "code/vox_raider/objects/vox_shop.dm"
#include "code/vox_raider/objects/vox_trade_instrument.dm"
#include "code/vox_raider/objects/vox_trade.dm"
#include "code/vox_raider/objects/vox_objects.dm"
#include "code/vox_raider/clothing/vox_backpack.dm"
#include "code/vox_raider/clothing/vox_clothing.dm"
#include "code/vox_raider/clothing/vox_gloves.dm"
#include "code/vox_raider/clothing/vox_outfit.dm"
#include "code/vox_raider/clothing/vox_shoes.dm"
#include "code/vox_raider/clothing/vox_suit_armor.dm"
#include "code/vox_raider/clothing/vox_suit_rig.dm"

// Vox Raiders - Packs
#include "code/vox_raider/objects/packs/vox_shop_pack.dm"
#include "code/vox_raider/objects/packs/vox_shop_pack_bio.dm"
#include "code/vox_raider/objects/packs/vox_shop_pack_clothes.dm"
#include "code/vox_raider/objects/packs/vox_shop_pack_consumables.dm"
#include "code/vox_raider/objects/packs/vox_shop_pack_equipment.dm"
#include "code/vox_raider/objects/packs/vox_shop_pack_goods.dm"
#include "code/vox_raider/objects/packs/vox_shop_pack_medicine.dm"
#include "code/vox_raider/objects/packs/vox_shop_pack_melee.dm"
#include "code/vox_raider/objects/packs/vox_shop_pack_merc.dm"
#include "code/vox_raider/objects/packs/vox_shop_pack_raider.dm"
#include "code/vox_raider/objects/packs/vox_shop_pack_dart.dm"
#include "code/vox_raider/objects/packs/vox_shop_pack_spike.dm"
#include "code/vox_raider/objects/packs/vox_shop_pack_kit.dm"
40 changes: 40 additions & 0 deletions modular_ss220/antagonists/code/antag_datum.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
/datum/antagonist/proc/make_body(loc_spawn, datum/mind/mind, try_use_preference = FALSE, species_name = null, list/possible_species)
var/datum/character_save/character
var/mob/living/carbon/human/H = mind.current
if(!H)
H = new
H.forceMove(get_turf(loc_spawn))
var/new_name = H.real_name

var/client/client = mind.current.client
if(try_use_preference && client && client.prefs && length(client.prefs.character_saves))
var/temp_species_name = species_name
if(!temp_species_name)
if(length(possible_species))
temp_species_name = pick(possible_species)
else
temp_species_name = "Human"
for(var/datum/character_save/temp_character in client.prefs.character_saves)
if(temp_character.species == temp_species_name)
character = temp_character
species_name = temp_species_name
new_name = random_name(character.gender, character.species)
break

if(!character)
// Randomize appearance
character = new
if(!species_name)
species_name = pick(get_safe_species())
character.species = species_name
new_name = random_name(H.gender, species_name)
character.randomise()

character.copy_to(H)
H.rename_character(H.real_name, new_name)

// species
H.cleanSE() //No fat/blind/colourblind/epileptic/whatever ops.
H.overeatduration = 0
H.flavor_text = null
H.update_body()
18 changes: 15 additions & 3 deletions modular_ss220/antagonists/code/antag_mix/antag_mix.dm
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,20 @@
var/max_antag_fraction = 1
/// How much budget has left
var/budget = 0
/// Scenarious for choose
var/list/datum/antag_scenario/list_scenarios = list()
/// List of scenarios chosen on `pre_setup` stage, and which will be applied on `post_setup`
var/list/datum/antag_scenario/executed_scenarios = list()


/datum/game_mode/antag_mix/New()
. = ..()
apply_configuration()
list_scenarios = subtypesof(/datum/antag_scenario)


/datum/game_mode/antag_mix/pre_setup()
var/list/datum/antag_scenario/possible_scenarios = subtypesof(/datum/antag_scenario)
var/list/datum/antag_scenario/possible_scenarios = list_scenarios

var/list/mob/new_player/ready_players = get_ready_players()
var/ready_players_amount = length(ready_players)
Expand All @@ -26,6 +29,7 @@

var/list/datum/antag_scenario/acceptable_scenarios = initialize_acceptable_scenarios(possible_scenarios, ready_players_amount)
if(!length(acceptable_scenarios))
log_antag_mix("Invalid game mode pre setup antag_mix - acceptable scenarios.")
return FALSE

budget = calculate_budget(ready_players_amount)
Expand Down Expand Up @@ -97,7 +101,7 @@
if(!length(drafted_scenarios) || (current_antag_fraction >= max_antag_fraction))
break

var/datum/antag_scenario/picked_scenario = pickweight(drafted_scenarios)
var/datum/antag_scenario/picked_scenario = length(drafted_scenarios) == 1 ? drafted_scenarios[1] : pickweight(drafted_scenarios)
if(picked_scenario.cost > budget_left)
drafted_scenarios.Remove(picked_scenario)
continue
Expand All @@ -114,11 +118,17 @@
log_antag_mix("Scenario '[picked_scenario.name]' with: cost '[picked_scenario.cost]', weight '[picked_scenario.weight]' was picked [picked_scenarios[picked_scenario]] times")
log_antag_mix("Antagonist fraction is '[current_antag_fraction]'")

if(picked_scenario.execution_once)
drafted_scenarios.Remove(picked_scenario)

if(!length(picked_scenarios))
log_antag_mix("No antag scenarios were picked. Let another game mode roll.")
return FALSE

for(var/picked_scenario in picked_scenarios)
log_debug("Antag mix picked scenario: [picked_scenario], spend budget [picked_scenarios[picked_scenario] - 1] times, left budget: [budget_left], players ready: [players_ready_amount]")
//var/scaled_times_picked = length(picked_scenarios) > 1 ? picked_scenarios[picked_scenario] - 1 : 1
//spend_budget(pre_execute_scenario(picked_scenario, scaled_times_picked, players_ready_amount))
spend_budget(pre_execute_scenario(picked_scenario, picked_scenarios[picked_scenario] - 1, players_ready_amount))

if(budget != budget_left && current_antag_fraction < max_antag_fraction && length(drafted_scenarios))
Expand All @@ -134,13 +144,15 @@

/datum/game_mode/antag_mix/proc/pre_execute_scenario(datum/antag_scenario/scenario_to_pre_execute, scaled_times, players_ready_amount)
if(!scenario_to_pre_execute)
log_antag_mix("Scenario '[scenario_to_pre_execute.name]' can't pre execute.")
return 0

log_antag_mix("Scenario '[scenario_to_pre_execute.name]' params: scaled_times [scaled_times]; players_ready_amount: [players_ready_amount]")
scenario_to_pre_execute.trim_candidates()

scenario_to_pre_execute.scaled_times = scaled_times
if(!scenario_to_pre_execute.pre_execute(players_ready_amount))
log_antag_mix("Scenario '[scenario_to_pre_execute.name]' failed to pre execute")
log_antag_mix("Scenario '[scenario_to_pre_execute.name]' failed to pre execute.")
return 0

executed_scenarios |= scenario_to_pre_execute
Expand Down
Loading

0 comments on commit 3699b33

Please sign in to comment.