Skip to content

Commit

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

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

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

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

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

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

## Changelog

<!-- Оба 🆑'а должны быть на месте, что-бы чейнджлог работал! Вы
можете написать свой ник справа от первого 🆑, если хотите. Иначе
будет использован ваш ник на ГитХабе. -->
<!-- Вы можете использовать несколько записей с одинаковым префиксом
(Они используются только для иконки в игре) и удалить ненужные. Помните,
что чейнджлог должен быть понятен обычным игроком. -->
<!-- Если чейнджлог не влияет на игроков(например, это рефактор), вы
можете исключить всю секцию. -->
  • Loading branch information
Furrior committed Sep 23, 2023
1 parent fb003b7 commit 72384e1
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 21 deletions.
21 changes: 9 additions & 12 deletions modular_ss220/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,14 @@
- `.dm` файла с датумом, содержащем информацию о паке
- Остальных файлов пака

Быстро создать модпак можно с помощью скрипта `modular_ss220/create_modpack.bat`.

### Структура модпака

Если мы условимся, что наш пак будет называется `hello_world`, то это будет выглядеть так:

```text
mods/hello_world
modular_ss220/hello_world
|- _hello_world.dm
|- _hello_world.dme
|- any_file.dm
Expand All @@ -36,43 +38,38 @@ mods/hello_world

А теперь каждый файл по отдельности:

### `mods/hello_world/_hello_world.dme`
### `modular_ss220/hello_world/_hello_world.dme`

```dm
#ifndef MODPACK_HELLO_WORLD
#define MODPACK_HELLO_WORLD
#include "_hello_world.dm"
#include "any_file.dm"
// ...
#include "some_file.dm"
#endif
```

Здесь подключаются все необходимые файлы, включая файл с синглтоном. Ничего особенного.
Здесь подключаются все необходимые файлы, включая файл с датумом модпака. Ничего особенного.

Стоит лишь учитывать, что пути локальные, а не глобальные.

### `mods/hello_world/_hello_world.dm`
### `modular_ss220/hello_world/_hello_world.dm`

```dm
/datum/modpack/hello_world
name = "Hello world"
desc = "Описание модпака"
author = "SuhEugene"
author = "SuhEugene" // Хороший мужик, систему модапаков у него 'позаимствована'.
```

- `name` - Имя пака. Необязательно такое же, как в коде, но желательно.
- `desc` - Очевидно, описание пака. Хотелось бы, чтобы оно было достаточно подробным, чтобы можно было понять что содержит пак, но не сильно замудрённым, чтобы любой игрок осилил буквы.
- `author` - Никнейм на гитхабе, тег дискорда или даже несколько таких. Просто чтобы обозначить автора(ов) в простейшей форме.

### `mods/hello_world/any_file.dm`
### `modular_ss220/hello_world/any_file.dm`

Это просто любой файл. Как в названии и написано. И название необязательно такое. Просто какой-либо угодно файл с dm кодом.

## Ассеты

Этим обобщающим словом обычно называют картинки и звуки. Их я попрошу оставлять в папке `mods/hello_world/icons/` и в `mods/hello_world/sound/` соответственно.
Этим обобщающим словом обычно называют картинки и звуки. Их я попрошу оставлять в папке `modular_ss220/hello_world/icons/` и в `modular_ss220/hello_world/sound/` соответственно.
Лучше всего, если модпак будет использовать собственные ассеты и не обращаться к *пакам* или же другим модпакам.
20 changes: 11 additions & 9 deletions modular_ss220/_modpacks.dm
Original file line number Diff line number Diff line change
Expand Up @@ -2,34 +2,36 @@

SUBSYSTEM_DEF(modpacks)
name = "Modpacks"
init_order = INIT_ORDER_SOUNDS
init_order = INIT_ORDER_MODPACKS
flags = SS_NO_FIRE
var/list/loaded_modpacks = list()
var/list/loaded_modpacks

/datum/controller/subsystem/modpacks/Initialize()
var/list/all_modpacks = list()
for(var/modpack in subtypesof(/datum/modpack/))
all_modpacks.Add(new modpack)

loaded_modpacks = list()
// Pre-init and register all compiled modpacks.
for(var/datum/modpack/package as anything in all_modpacks)
var/fail_msg = package.pre_initialize()
if(QDELETED(package))
CRASH("Modpack of type [package.type] is null or queued for deletion.")
stack_trace("Modpack of type [package.type] is null or queued for deletion.")
if(fail_msg)
CRASH("Modpack [package.name] failed to pre-initialize: [fail_msg].")
stack_trace("Modpack [package.type] failed to pre-initialize: [fail_msg].")
if(loaded_modpacks[package.name])
CRASH("Attempted to register duplicate modpack name [package.name].")
stack_trace("Attempted to register duplicate modpack name: [package.name].")
loaded_modpacks.Add(package)

// Handle init and post-init (two stages in case a modpack needs to implement behavior based on the presence of other packs).
for(var/datum/modpack/package as anything in all_modpacks)
for(var/datum/modpack/package as anything in loaded_modpacks)
var/fail_msg = package.initialize()
if(fail_msg)
CRASH("Modpack [(istype(package) && package.name) || "Unknown"] failed to initialize: [fail_msg]")
for(var/datum/modpack/package as anything in all_modpacks)
stack_trace("Modpack [(istype(package) && package.name) || "Unknown"] failed to initialize: [fail_msg]")
for(var/datum/modpack/package as anything in loaded_modpacks)
var/fail_msg = package.post_initialize()
if(fail_msg)
CRASH("Modpack [(istype(package) && package.name) || "Unknown"] failed to post-initialize: [fail_msg]")
stack_trace("Modpack [(istype(package) && package.name) || "Unknown"] failed to post-initialize: [fail_msg]")

/client/verb/modpacks_list()
set name = "Modpacks List"
Expand Down
13 changes: 13 additions & 0 deletions modular_ss220/create_modpack.bat
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
@echo off
set /p modpackName=Enter modpack name :

xcopy "example" "%modpackName%" /s /i

ren "%modpackName%\_example.dm" "_%modpackName%.dm"
ren "%modpackName%\_example.dme" "_%modpackName%.dme"
ren "%modpackName%\code\example.dm" "%modpackName%.dm"

Powershell -Command "(Get-Content '%modpackName%\_%modpackName%.dm') -replace 'Example modpack', '%modpackName%' | Set-Content '%modpackName%\_%modpackName%.dm'"
Powershell -Command "(Get-Content '%modpackName%\_%modpackName%.dme') -replace 'Example modpack', '%modpackName%' | Set-Content '%modpackName%\_%modpackName%.dme'"
Powershell -Command "(Get-Content '%modpackName%\_%modpackName%.dm') -replace 'example', '%modpackName%' | Set-Content '%modpackName%\_%modpackName%.dm'"
Powershell -Command "(Get-Content '%modpackName%\_%modpackName%.dme') -replace 'example', '%modpackName%' | Set-Content '%modpackName%\_%modpackName%.dme'"

0 comments on commit 72384e1

Please sign in to comment.