From 72384e1030fe04f5aaa509372791006b9de723b7 Mon Sep 17 00:00:00 2001 From: Furior <68264134+Furrior@users.noreply.github.com> Date: Sat, 23 Sep 2023 22:01:38 +0700 Subject: [PATCH] Mpacks-things (#229) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Что этот PR делает Небольшой рефактор модпаков и документации по ним ## Почему это хорошо для игры ## Изображения изменений ## Тестирование ## Changelog --- modular_ss220/README.md | 21 +++++++++------------ modular_ss220/_modpacks.dm | 20 +++++++++++--------- modular_ss220/create_modpack.bat | 13 +++++++++++++ 3 files changed, 33 insertions(+), 21 deletions(-) create mode 100644 modular_ss220/create_modpack.bat diff --git a/modular_ss220/README.md b/modular_ss220/README.md index 57edda14603c..c66b9ead6657 100644 --- a/modular_ss220/README.md +++ b/modular_ss220/README.md @@ -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 @@ -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/` соответственно. Лучше всего, если модпак будет использовать собственные ассеты и не обращаться к *пакам* или же другим модпакам. diff --git a/modular_ss220/_modpacks.dm b/modular_ss220/_modpacks.dm index dd115aa7f56e..7c9a2d8615df 100644 --- a/modular_ss220/_modpacks.dm +++ b/modular_ss220/_modpacks.dm @@ -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" diff --git a/modular_ss220/create_modpack.bat b/modular_ss220/create_modpack.bat new file mode 100644 index 000000000000..4747e88f810f --- /dev/null +++ b/modular_ss220/create_modpack.bat @@ -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'"