From 69ef47218bb687a3ef854fd959fbc2432be34401 Mon Sep 17 00:00:00 2001 From: AppleSheep <101231815+ClearZer0@users.noreply.github.com> Date: Sun, 22 Dec 2024 11:26:08 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B5=8B=E8=AF=95=E5=9C=B0=E5=9B=BE=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=20(#10)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * stuff * 修复错误的代码 * Update .gitignore * 添加测试地图 Loenn教程目录 * Update to_do_list.md * 移除dll * 重写通过模板创建项目 * 完善跨mod交互 迁移测试地图至新的模板 * Update docs/advanced/cross_mod_interactions.md Co-authored-by: Saplonily Mason * request stuff * Update basic_env.md --------- Co-authored-by: Saplonily Mason --- .gitignore | 6 +- docs/advanced/cross_mod_interactions.md | 58 +++++++++- docs/arc/project_template.md | 87 +++++++++++++++ .../images/base_env => arc}/rename_proj.png | Bin docs/coding_challenges/simple_texturing.md | 22 ++-- docs/coding_challenges/test_map.md | 8 ++ docs/coding_setup/basic_env.md | 103 +++++++++--------- .../images/base_env/external_template.png | Bin 0 -> 48029 bytes .../images/base_env/inplace_template.png | Bin 0 -> 39840 bytes .../images/base_env/vs_template.png | Bin 0 -> 61707 bytes docs/loenn/basic_configurations.md | 8 ++ docs/loenn/effect_structs.md | 1 + docs/loenn/entity_structs.md | 1 + docs/loenn/folder_structure.md | 2 + docs/loenn/nodes.md | 1 + docs/loenn/rendering.md | 15 +++ docs/loenn/trigger_structs.md | 1 + docs/misc/change_log.md | 13 ++- docs/misc/to_do_list.md | 11 +- docs/resources/CelesteModTutorial.zip | Bin 0 -> 13536 bytes mkdocs.yml | 10 ++ src/CelesteModTutorial/Dialog/English.txt | 9 ++ .../Dialog/Simplified Chinese.txt | 9 ++ .../objects/PassByRefill/pass_by_refill.png | Bin 0 -> 736 bytes .../Loenn/entities/PassByRefill.lua | 20 ++++ .../entities/PassByRefillWithTexture.lua | 21 ++++ src/CelesteModTutorial/Loenn/lang/en_gb.lang | 4 + .../triggers/SetPassByRefillDashesTrigger.lua | 20 ++++ .../Maps/CelesteModTutorial/Test.bin | Bin 0 -> 790 bytes src/CelesteModTutorial/Source/.everestignore | 0 .../Source/CelesteMod.props | 66 +++++++++++ .../Source/CelesteMod.targets | 32 ++++++ .../Source/CelesteModTutorial.csproj | 20 ++++ .../Source/CelesteModTutorialModule.cs | 25 +++++ .../Source/CelesteModTutorialSaveData.cs | 6 + .../Source/CelesteModTutorialSession.cs | 6 + .../Source/CelesteModTutorialSettings.cs | 6 + .../Source/Entities/PassByRefill.cs | 52 +++++++++ .../Entities/PassByRefillWithTexture.cs | 50 +++++++++ .../Triggers/SetPassByRefillDashesTrigger.cs | 40 +++++++ src/CelesteModTutorial/everest.yaml | 6 + 41 files changed, 663 insertions(+), 76 deletions(-) create mode 100644 docs/arc/project_template.md rename docs/{coding_setup/images/base_env => arc}/rename_proj.png (100%) create mode 100644 docs/coding_challenges/test_map.md create mode 100644 docs/coding_setup/images/base_env/external_template.png create mode 100644 docs/coding_setup/images/base_env/inplace_template.png create mode 100644 docs/coding_setup/images/base_env/vs_template.png create mode 100644 docs/loenn/basic_configurations.md create mode 100644 docs/loenn/effect_structs.md create mode 100644 docs/loenn/entity_structs.md create mode 100644 docs/loenn/folder_structure.md create mode 100644 docs/loenn/nodes.md create mode 100644 docs/loenn/rendering.md create mode 100644 docs/loenn/trigger_structs.md create mode 100644 docs/resources/CelesteModTutorial.zip create mode 100644 src/CelesteModTutorial/Dialog/English.txt create mode 100644 src/CelesteModTutorial/Dialog/Simplified Chinese.txt create mode 100644 src/CelesteModTutorial/Graphics/Atlases/Gameplay/objects/PassByRefill/pass_by_refill.png create mode 100644 src/CelesteModTutorial/Loenn/entities/PassByRefill.lua create mode 100644 src/CelesteModTutorial/Loenn/entities/PassByRefillWithTexture.lua create mode 100644 src/CelesteModTutorial/Loenn/lang/en_gb.lang create mode 100644 src/CelesteModTutorial/Loenn/triggers/SetPassByRefillDashesTrigger.lua create mode 100644 src/CelesteModTutorial/Maps/CelesteModTutorial/Test.bin create mode 100644 src/CelesteModTutorial/Source/.everestignore create mode 100644 src/CelesteModTutorial/Source/CelesteMod.props create mode 100644 src/CelesteModTutorial/Source/CelesteMod.targets create mode 100644 src/CelesteModTutorial/Source/CelesteModTutorial.csproj create mode 100644 src/CelesteModTutorial/Source/CelesteModTutorialModule.cs create mode 100644 src/CelesteModTutorial/Source/CelesteModTutorialSaveData.cs create mode 100644 src/CelesteModTutorial/Source/CelesteModTutorialSession.cs create mode 100644 src/CelesteModTutorial/Source/CelesteModTutorialSettings.cs create mode 100644 src/CelesteModTutorial/Source/Entities/PassByRefill.cs create mode 100644 src/CelesteModTutorial/Source/Entities/PassByRefillWithTexture.cs create mode 100644 src/CelesteModTutorial/Source/Triggers/SetPassByRefillDashesTrigger.cs create mode 100644 src/CelesteModTutorial/everest.yaml diff --git a/.gitignore b/.gitignore index 0f9f08d..09fe61d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,8 @@ site/** .VSCodeCounter/** .vs/** -.idea/ \ No newline at end of file +.idea/ +**/Source/bin/** +**/Source/obj/** +**/Source/.vs/** +**/Source/CelesteModTutorial.sln \ No newline at end of file diff --git a/docs/advanced/cross_mod_interactions.md b/docs/advanced/cross_mod_interactions.md index 6cd2eb7..3df75d0 100644 --- a/docs/advanced/cross_mod_interactions.md +++ b/docs/advanced/cross_mod_interactions.md @@ -35,14 +35,14 @@ public static bool GravityHelperLoaded; public override void Load() { // 获取 GravityHelperModule 的元数据 - EverestModuleMetadata gravityHelper = new() + EverestModuleMetadata gravityHelperMetadata = new() { Name = "GravityHelper", Version = new Version(1, 2, 20) }; // 判断 GravityHelper 是否成功加载 - GravityHelperLoaded = Everest.Loader.DependencyLoaded(gravityHelper); + GravityHelperLoaded = Everest.Loader.DependencyLoaded(gravityHelperMetadata); } ``` @@ -148,13 +148,61 @@ if (MyCelesteModAPI.MultiplyByTwo(myNumber) > 400) 通过这种方式, 我们可以在自己的 Mod 中访问并调用其他 Mod 提供的功能, 而不需要直接依赖该 Mod 的程序集. - + +`lib-stripped` 是指剥离了所有方法实现的程序集, 仅保留类型和方法签名. +我们可以通过 [`NStrip`](https://github.com/bbepis/NStrip) 或 [`BepInEx.AssemblyPublicizer `](https://github.com/BepInEx/BepInEx.AssemblyPublicizer) 的 `strip-only` 模式等工具对目标程序集进行剥离. +完成后我们可以直接引用被剥离的程序集. @@ -192,7 +240,7 @@ public override void Load() PlayerGravityComponentProperty = gravityHelperModuleType?.GetProperty("PlayerComponent", BindingFlags.NonPublic | BindingFlags.Static); // 反射获取 GravityHelper.Components.SetPlayerGravity 方法 - SetPlayerGravityMethod = playerComponent?.GetValue(null)?.GetType().GetMethod("SetGravity", BindingFlags.Public | BindingFlags.Instance); + SetPlayerGravityMethod = PlayerGravityComponentProperty?.GetValue(null)?.GetType().GetMethod("SetGravity", BindingFlags.Public | BindingFlags.Instance); // 反射获取 GravityHelper.GravityHelperModule.ShouldInvertPlayer 属性 IsPlayerInvertedProperty = gravityHelperModuleType?.GetProperty("ShouldInvertPlayer", BindingFlags.Public | BindingFlags.Static); diff --git a/docs/arc/project_template.md b/docs/arc/project_template.md new file mode 100644 index 0000000..fbab2db --- /dev/null +++ b/docs/arc/project_template.md @@ -0,0 +1,87 @@ +!!! info + 在蔚蓝国外社区流行着另一个 mod 项目模板, 不过我个人不太喜欢它, 不过你需要的话[这是 Github 主页](https://github.com/EverestAPI/CelesteModTemplate) + 所以这里主要使用我个人制作也是个人最常用的一个. + +\_(:з」∠)\_ +根据一些反馈我们发现旧的手动配置环境的方式非常的复杂难操作( +所以呢这里就推荐一种新的配置环境的方式 - **使用模板** +考虑到 nuget 安装模板也需要一定的命令行基础... +所以这里考虑[提供直接的下载链接](https://hongshitieli.lanzouj.com/iJfRz1l0iffg), +或者你也可以选择使用 `dotnet cli` 从 nuget 上的模板安装: + +!!! note + 你可能还需要安装 `.NET 8 SDK` 来使用该模板, 你可以[在这里](https://get.dot.net)找到它 + +??? info "使用 dotnet cli 从模板新建项目" + 首先在一个你喜欢的位置放置你的项目文件夹, 名字即为你的项目名, 例如 `MyCelesteMod`: + ```bat + mkdir MyCelesteMod + cd MyCelesteMod + ``` + 然后在此位置安装 nuget 上我的 mod 模板(如果你没有安装的话): + ```bat + dotnet new install Saladim.CelesteModTemplate + ``` + 然后你就能使用这条指令直接创建项目了: + ```bat + dotnet new sapcelestemode + ``` + 名字即为上层文件夹名, 或者你可以使用 `-n` 参数重写项目名字: + ```bat + dotnet new sapcelestemod -n MySuperCelesteMod + ``` + 模板目前默认不会创建针对 Everest Core 的 Code Mod, 如果你需要的话你可以传入 `--core-only true` 参数: + ```bat + dotnet new sapcelestemod --core-only true + ``` + +完成后使用你喜欢的编辑器打开项目(对于 vs 直接打开 .csproj 文件), 那么按理来说你会看到这几个文件: + +- CelesteMod.props +- CelesteMod.targets +- Common.props +- MyCelesteModModule.cs +- MyCelesteMod.csproj + +以及你的项目, 它的名字是 `MyCelesteMod`, 不同于旧的方法, 在这里你的配置过程很简单: + +- 首先打开 `Common.props`, **将里面的 `CelesteRootPath` 内的内容改成你的蔚蓝安装位置** + +```xml hl_lines="3" + + + C:\Program Files (x86)\Steam\steamapps\common\Celeste + true + true + ModFolder + + +``` + +现在你可以按下 `Ctrl+B` 或者手动点击 `生成->生成解决方案`, +如果你在你的 vs 输出里面看到了类似这两句: + +``` +1>MyCelesteMod -> D:\User\temp\cm\bin\x86\Debug\net452\MyCelesteMod.dll +1>MyCelesteMod -> C:/Program Files (x86)/Steam/steamapps/common/Celeste/Mods/MyCelesteMod_copy/MyCelesteMod.dll +``` + +并且你在你的蔚蓝 Mod 目录下找到了这个被创建的目录, +那么你的环境就算是配完了, 如果你很感兴趣这之中发生了什么, 要引用哪些程序集, 这个模板背后干了什么, 你可以去看那复杂的旧的配置方法. +!!! note + 这个模板使用 `msbuild` 帮助了你很多事! + 比如当你编译完项目之后它会复制编译结果到项目目录的 `ModFolder` 目录下, + 然后将整个 `ModFolder` 复制到蔚蓝的 `Mods\{你的mod名}_copy` 文件夹下! + 所以当我们需要更改一些比如说 loenn 的配置文件, `everest.yaml` 的内容, 你的测试地图等时, + 你只需要简单地重新编译一遍项目, 然后等待模板来帮你做剩下的活! + + +## 更改细节 + +通过模板的话依然有些东西需要自行更改, 比如这个 Mod 的名字. +更改 Mod 的名字很简单, 你只需要简单地在 vs 里重命名项目的名字 +比如我想叫做 `MyAwesomeMod`, 那么你可以通过这样: +![awesome mod!](rename_proj.png) + +顺便别忘了把类似 `MyCelesteModModule.cs` 的文件名也改成类似 `MyAwesomeModModule.cs`, +以及改名后清理一下 ModFolder 下面可能有的一些以过去名字命名的 .dll 和 .pdb 文件! \ No newline at end of file diff --git a/docs/coding_setup/images/base_env/rename_proj.png b/docs/arc/rename_proj.png similarity index 100% rename from docs/coding_setup/images/base_env/rename_proj.png rename to docs/arc/rename_proj.png diff --git a/docs/coding_challenges/simple_texturing.md b/docs/coding_challenges/simple_texturing.md index 3924257..d04952b 100644 --- a/docs/coding_challenges/simple_texturing.md +++ b/docs/coding_challenges/simple_texturing.md @@ -59,11 +59,12 @@ ok 那么现在我们该在代码这边来点贴图了, 这里我们会用到之 - Graphics - Atlases - Gameplay - - `MyCelesteMod` - - pass_by_refill.png + - objects + - PassByRefill + - pass_by_refill.png `pass_by_refill.png` 即我们的贴图, 如果你同时也是一位 mapper 的话你一定很熟悉这个文件夹套套乐! -在代码这边, 我们使用 `GFX.Game["MyCelesteMod/pass_by_refill"]` 来获取这个贴图, 它是一个 `MTexture` 类型的实例, 在获取到这个贴图后, +在代码这边, 我们使用 `GFX.Game["objects/PassByRefill/pass_by_refill"]` 来获取这个贴图, 它是一个 `MTexture` 类型的实例, 在获取到这个贴图后, 我们 `new` 一个 `Monocle.Image`, 然后在构造函数中传入它, 然后使用 `this.Add` 函数挂载到我们的这个实体上, 总的代码应该是这样的: ```cs title="PassByRefill.cs" public PassByRefill(Vector2 position, int dashes) @@ -73,16 +74,17 @@ public PassByRefill(Vector2 position, int dashes) Hitbox hitbox = new(64, 64); Collider = hitbox; - MTexture tex = GFX.Game["MyCelesteMod/pass_by_refill"]; + MTexture tex = GFX.Game["objects/PassByRefill/pass_by_refill"]; Image image = new(tex); this.Add(image); } ``` !!! info - `GFX` 是蔚蓝中的一个管理贴图的类, 我们用它获取到一个贴图组 `Game`, 然后向它检索一个名为 `MyCelesteMod/pass_by_refill` 的贴图, 你可能会疑惑为什么这里的路径只需要后半部分, - 这是因为 `GFX.Game` 只会检索 `Atlases/Graphics/Gameplay` 中的内容. - 同样的, `GFX.Portraits` 只会检索 `Atlases/Graphics/Portraits` 中的内容. + `GFX` 是蔚蓝中的一个管理贴图的类, 我们用它获取到一个贴图组 `Game`, 然后向它检索一个名为 `objects/PassByRefill/pass_by_refill` 的贴图, 你可能会疑惑为什么这里的路径只需要后半部分, + + 这是因为 `GFX.Game` 只会检索 `Graphics/Atlases/Gameplay` 中的内容. + 同样的, `GFX.Portraits` 只会检索 `Graphics/Atlases/Portraits` 中的内容. 顺便记得删掉我们重写的 `Render` 函数, 我们不再需要它了. 总的类应该是这样的: ```cs title="PassByRefill.cs" @@ -99,7 +101,7 @@ public class PassByRefill : Entity Hitbox hitbox = new(64, 64); Collider = hitbox; - MTexture tex = GFX.Game["MyCelesteMod/pass_by_refill"]; + MTexture tex = GFX.Game["objects/PassByRefill/pass_by_refill"]; Image image = new(tex); this.Add(image); } @@ -171,7 +173,7 @@ public class PassByRefill : Entity 然后设置 entity 的 `texture` 属性, 这会让 Loenn 为其设置贴图: ```lua -entity.texture = "MyCelesteMod/pass_by_refill" +entity.texture = "objects/PassByRefill/pass_by_refill" ``` 顺便设置贴图原点为左上角, 否则 Loenn 中的显示可能会与实际游戏中的不同: ```lua @@ -197,7 +199,7 @@ entity.fieldInformation = } } -entity.texture = "MyCelesteMod/pass_by_refill" +entity.texture = "objects/PassByRefill/pass_by_refill" entity.justification = { 0.0, 0.0 } return entity diff --git a/docs/coding_challenges/test_map.md b/docs/coding_challenges/test_map.md new file mode 100644 index 0000000..1f23de0 --- /dev/null +++ b/docs/coding_challenges/test_map.md @@ -0,0 +1,8 @@ +# 测试地图 + +实战部分附带一张测试地图供读者下载下来乱弄研究与测试, +你可以在[这里](../resources/CelesteModTutorial.zip)进行下载. +代码你可以在 `Source` 目录下找到. + +!!! info + 下载并解压后别忘了生成 Mod 的 `dll` 文件! \ No newline at end of file diff --git a/docs/coding_setup/basic_env.md b/docs/coding_setup/basic_env.md index c7b4f8d..01e297b 100644 --- a/docs/coding_setup/basic_env.md +++ b/docs/coding_setup/basic_env.md @@ -52,14 +52,18 @@ Everest 需求我们使用 FNA 版本的蔚蓝, 而 Linux 和 MacOS 上的蔚蓝 ## 通过模板创建项目 !!! info - 在蔚蓝国外社区流行着另一个 mod 项目模板, 不过我个人不太喜欢它, 不过你需要的话[这是 Github 主页](https://github.com/EverestAPI/CelesteModTemplate) - 所以这里主要使用我个人制作也是个人最常用的一个. - -\_(:з」∠)\_ -根据一些反馈我们发现旧的手动配置环境的方式非常的复杂难操作( -所以呢这里就推荐一种新的配置环境的方式 - **使用模板** -考虑到 nuget 安装模板也需要一定的命令行基础... -所以这里考虑[提供直接的下载链接](https://hongshitieli.lanzouj.com/iJfRz1l0iffg), + 在蔚蓝国外社区流行着另一个 mod 项目模板, [这是它的 Github 主页](https://github.com/EverestAPI/CelesteModTemplate) + 不过这里主要介绍使用我个人制作也是个人最常用的一个. + +!!! note + 项目模板在重构的教程中进行了更新, 旧版你可以在[归档-通过模板创建项目](../arc/project_template.md)中找到(不推荐) + +我们在这里提供两种模板: + +- 外部: 在蔚蓝根目录外编写代码. +- 就地: 在 `Celeste/Mods/<你的 Mod 名称>/Source` 中编写代码. + +我们在下面会使用 `Visual Studio` 进行演示. 或者你也可以选择使用 `dotnet cli` 从 nuget 上的模板安装: !!! note @@ -75,43 +79,42 @@ Everest 需求我们使用 FNA 版本的蔚蓝, 而 Linux 和 MacOS 上的蔚蓝 ```bat dotnet new install Saladim.CelesteModTemplate ``` - 然后你就能使用这条指令直接创建项目了: - ```bat - dotnet new sapcelestemod - ``` - 名字即为上层文件夹名, 或者你可以使用 `-n` 参数重写项目名字: + 然后你就能使用这条指令直接创建外部模板了: ```bat - dotnet new sapcelestemod -n MySuperCelesteMod + dotnet new sapcelestemode ``` - 模板目前默认不会创建针对 Everest Core 的 Code Mod, 如果你需要的话你可以传入 `--core-only true` 参数: + 如果需要就地模板使用这条指令: ```bat - dotnet new sapcelestemod --core-only true + dotnet new sapcelestemodi ``` - -完成后使用你喜欢的编辑器打开项目(对于 vs 直接打开 .csproj 文件), 那么按理来说你会看到这几个文件: - -- CelesteMod.props -- CelesteMod.targets -- Common.props -- MyCelesteModModule.cs -- MyCelesteMod.csproj - -以及你的项目, 它的名字是 `MyCelesteMod`, 不同于旧的方法, 在这里你的配置过程很简单: - -- 首先打开 `Common.props`, **将里面的 `CelesteRootPath` 内的内容改成你的蔚蓝安装位置** - -```xml hl_lines="3" - - - C:\Program Files (x86)\Steam\steamapps\common\Celeste - true - true - ModFolder - - + 下面是可选择的一些参数: + + - `-n`: 你的 Mod 名称, 默认为 `MyCelesteMod`, 用于重写项目名字, 例如 `-n YourCelesteMod`. + - `-c`: 指定蔚蓝根目录(只对外部模板生效), 例如 `-c "C:\Program Files\steam\steamapps\Celeste"`. + - `-up`: 是否使用 Publicize 后的 Celeste 程序集, 默认开启, 关闭可以 `-up false`. + - `-ua`: 是否使用 Celeste Mod 分析器, 默认开启, 关闭可以 `-ua false`. + - `-ss`: 向项目中添加 `Session` 类并在 `Module` 中自动配置, 默认关闭. + - `-st`: 向项目中添加 `Settings` 类并在 `Module` 中自动配置, 默认关闭. + - `-sd`: 向项目中添加 `SaveData` 类并在 `Module` 中自动配置, 默认关闭. + - `-ev`: 指定 `everest.yaml` 中的 `EverestCore` 版本, 默认为 `4465`. + - `-mv`: 指定 `everest.yaml` 中的你的 Mod 的初始版本, 默认为 `0.1.0`. + +首先我们打开命令行, 输入以下命令进行安装: +```bat +dotnet new install Saladim.CelesteModTemplate ``` -现在你可以按下 `Ctrl+B` 或者手动点击 `生成->生成解决方案`, +完成后打开 `Visual Studio`, 选择 `创建新项目`, 然后在搜索框中输入 `Celeste`, 你应该能看到以下两个模板: +![vs_template](images/base_env/vs_template.png) + +### 外部模板 + +选择并填写好项目名称之后, 你应该能看到以下内容: +![external_template](images/base_env/external_template.png) + +其中的各选项详细信息可以把鼠标移到旁边的 `info` 图标进行查看. + +完成创建后你可以按下 `Ctrl+B` 或者手动点击 `生成->生成解决方案`, 如果你在你的 vs 输出里面看到了类似这两句: ``` @@ -128,16 +131,16 @@ Everest 需求我们使用 FNA 版本的蔚蓝, 而 Linux 和 MacOS 上的蔚蓝 所以当我们需要更改一些比如说 loenn 的配置文件, `everest.yaml` 的内容, 你的测试地图等时, 你只需要简单地重新编译一遍项目, 然后等待模板来帮你做剩下的活! +### 就地模板 -## 更改细节 +就地模板在进行项目名称填写时你应该会看到以下内容: +![inplace_template](images/base_env/inplace_template.png) -通过模板的话依然有些东西需要自行更改, 比如这个 Mod 的名字. -更改 Mod 的名字很简单, 你只需要简单地在 vs 里重命名项目的名字 -比如我想叫做 `MyAwesomeMod`, 那么你可以通过这样: -![awesome mod!](images/base_env/rename_proj.png) +这里的 `项目名称` 就是你的 Mod 名称. +`位置` 我们需要改到蔚蓝的 `Mods` 目录下, 例如 `C:\Program Files\steam\steamapps\Celeste\Mods`. +填写完成后我们还需要勾选 `将解决方案和项目放在同一目录中`. -顺便别忘了把类似 `MyCelesteModModule.cs` 的文件名也改成类似 `MyAwesomeModModule.cs`, -以及改名后清理一下 ModFolder 下面可能有的一些以过去名字命名的 .dll 和 .pdb 文件! +后面的项目配置基本与外部模板一致, 除了 `Celeste 所在的目录`. 这项已经在上一步的 `位置` 填写过了所以不需要再填写. ## Module 类 @@ -256,12 +259,12 @@ D3D11 Adapter: Intel(R) UHD Graphics 630 - MyCelesteMod (你的根目录) - ModFolder + - Code + - MyCelesteMod.dll + - MyCelesteMod.pdb - everest.yaml - - MyCelesteMod.dll - - MyCelesteMod.pdb - CelesteMod.props - CelesteMod.targets - - Common.props - MyCelesteMod.csproj - MyCelesteModModule.cs @@ -272,4 +275,4 @@ D3D11 Adapter: Intel(R) UHD Graphics 630 - 直接强制重新构建项目 (vs 中 "生成" -> "重新生成项目") - 在项目根目录执行 `msbuild -target:PostModBuild` 命令行 -> 好像是有更好的解决方法, 不过鉴于本人 MSBuild 知识不足只能做成这样了(x \ No newline at end of file +> 好像是有更好的解决方法, 不过鉴于本人 MSBuild 知识不足只能做成这样了(x diff --git a/docs/coding_setup/images/base_env/external_template.png b/docs/coding_setup/images/base_env/external_template.png new file mode 100644 index 0000000000000000000000000000000000000000..7444b43326b08bf9c738d8430c9efbbf0ccf474e GIT binary patch literal 48029 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
A~Jj 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 literal 0 HcmV?d00001 diff --git a/docs/coding_setup/images/base_env/inplace_template.png b/docs/coding_setup/images/base_env/inplace_template.png new file mode 100644 index 0000000000000000000000000000000000000000..afe26d4a5063f8c2af366cd3a88903e36f14195a GIT binary patch literal 39840 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 literal 0 HcmV?d00001 diff --git a/docs/loenn/basic_configurations.md b/docs/loenn/basic_configurations.md new file mode 100644 index 0000000..8cb3c87 --- /dev/null +++ b/docs/loenn/basic_configurations.md @@ -0,0 +1,8 @@ +# Loenn 基础配置 + +## Lua + +## EntityData + +## 基础结构 + diff --git a/docs/loenn/effect_structs.md b/docs/loenn/effect_structs.md new file mode 100644 index 0000000..47a2f7b --- /dev/null +++ b/docs/loenn/effect_structs.md @@ -0,0 +1 @@ +# Effect 结构 \ No newline at end of file diff --git a/docs/loenn/entity_structs.md b/docs/loenn/entity_structs.md new file mode 100644 index 0000000..185ea56 --- /dev/null +++ b/docs/loenn/entity_structs.md @@ -0,0 +1 @@ +# Entity 结构 \ No newline at end of file diff --git a/docs/loenn/folder_structure.md b/docs/loenn/folder_structure.md new file mode 100644 index 0000000..690f718 --- /dev/null +++ b/docs/loenn/folder_structure.md @@ -0,0 +1,2 @@ +# Loenn 目录结构 + diff --git a/docs/loenn/nodes.md b/docs/loenn/nodes.md new file mode 100644 index 0000000..be51292 --- /dev/null +++ b/docs/loenn/nodes.md @@ -0,0 +1 @@ +# Loenn 节点 \ No newline at end of file diff --git a/docs/loenn/rendering.md b/docs/loenn/rendering.md new file mode 100644 index 0000000..f332a58 --- /dev/null +++ b/docs/loenn/rendering.md @@ -0,0 +1,15 @@ +# Loenn 绘制 + +## sprite 函数 + +## Loenn 绘制相关插件 + +### struct.drawable_line + +### struct.drawable_rectangle + +### struct.drawable_sprite + +### struct.drawable_nine_patch + +### struct.drawable_text \ No newline at end of file diff --git a/docs/loenn/trigger_structs.md b/docs/loenn/trigger_structs.md new file mode 100644 index 0000000..7588be9 --- /dev/null +++ b/docs/loenn/trigger_structs.md @@ -0,0 +1 @@ +# Trigger 结构 \ No newline at end of file diff --git a/docs/misc/change_log.md b/docs/misc/change_log.md index c233c54..f09ceaf 100644 --- a/docs/misc/change_log.md +++ b/docs/misc/change_log.md @@ -17,9 +17,14 @@ ### 2024.12.11 * 添加夜间模式 -* 分离阅读代码 -* 分离 StateMachine +* 分离[阅读代码](../coding_setup/code_reading.md) +* 分离 [StateMachine](../components/statemachine.md) -### 2024.12.15 +### 2024.12.16 +* 添加[跨 Mod 交互](../advanced/cross_mod_interactions.md) + +### 2024.12.21 * 更新项目模板 -* 添加跨 Mod 交互 +* 归档并重写[基础环境配置-通过模板创建项目](../coding_setup/basic_env.md) +* 添加[测试地图](../coding_challenges/test_map.md) +* 完善[跨 Mod 交互](../advanced/cross_mod_interactions.md) diff --git a/docs/misc/to_do_list.md b/docs/misc/to_do_list.md index 02119fd..d30de67 100644 --- a/docs/misc/to_do_list.md +++ b/docs/misc/to_do_list.md @@ -10,15 +10,14 @@ | 计划 | 状态 | | ----------------------------- | ------ | -| 完善跨 mod 交互 | 进行中 | -| 添加测试地图 | 进行中 | -| 更新基础环境配置-模板使用 | 准备中 | +| 分离 Loenn 节及补充 | 进行中 | +| 重写 EC 架构相关 | 准备中 | | everest 自带事件 | 计划中 | -| publicizer 的使用 | 计划中 | | 分离已有的组件进行重写 | 计划中 | | 完善 VisualStudio C# 调试 | 计划中 | -| 重构 hook 节 | 计划中 | +| 重构 Hook 节 | 计划中 | | 分离 DynamicData 相关 | 计划中 | | 完善 StateMachine | 计划中 | -| 添加 Effext 相关 | 计划中 | +| 添加 Effect 相关 | 计划中 | | 添加 Collider 相关 | 计划中 | + diff --git a/docs/resources/CelesteModTutorial.zip b/docs/resources/CelesteModTutorial.zip new file mode 100644 index 0000000000000000000000000000000000000000..08d1e839e9bc6d6118b20ede33e975393fcfdb39 GIT binary patch literal 13536 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 x}changes speed at which characters are displayed{>>} +# {# 000000}this text is black{#} (uses HEX color values) +# {+MENU_BEGIN} inserts the dialog from the MENU_BEGIN value (in English, "CLIMB") +# {n} creates a newline, without a page break +# {0.5} creates a 0.5 second pause +# {big}this text is large{/big} diff --git a/src/CelesteModTutorial/Dialog/Simplified Chinese.txt b/src/CelesteModTutorial/Dialog/Simplified Chinese.txt new file mode 100644 index 0000000..c1782fc --- /dev/null +++ b/src/CelesteModTutorial/Dialog/Simplified Chinese.txt @@ -0,0 +1,9 @@ +# Inline Text Commands: +# {~}wavy text{/~} +# {!}impact text{/!} +# {>> x}changes speed at which characters are displayed{>>} +# {# 000000}this text is black{#} (uses HEX color values) +# {+MENU_BEGIN} inserts the dialog from the MENU_BEGIN value (in English, "CLIMB") +# {n} creates a newline, without a page break +# {0.5} creates a 0.5 second pause +# {big}this text is large{/big} diff --git a/src/CelesteModTutorial/Graphics/Atlases/Gameplay/objects/PassByRefill/pass_by_refill.png b/src/CelesteModTutorial/Graphics/Atlases/Gameplay/objects/PassByRefill/pass_by_refill.png new file mode 100644 index 0000000000000000000000000000000000000000..575424216e02963e29f35131837428214350af16 GIT binary patch literal 736 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qt-3{0h-E{-7;ac^gz%@%f)ICg(-&dShW7cNa( z3F(ZrW>pdX6Qu-N{>dtRdvS2_@~V##A66**Q{-w5jj{=0Ef!$$)azPW*C3ypIlFXz zdHQa{FS|C(v^lS6y!rfY?$77m?6GIk7P9SE*s}I(!QOhEi;sP$*Pgg6U#YmZ_apDd zUDt19chpoRw{Og9%&t>0-+&cC)rxIQQR=`D%RNB1ZiTU2Ho>aM%X^?Le6_wJ2S zVTa#2e~<62cM%SpMk8l%MvG`+ceT>eA3DhgJrC`PwsazT2X|KhJ&n zbNkh`X~&Kp@)a$eDX>pq&Y81{qtq&YK9GB& zricM5e#0VE@Kwn@J0N$$&nFB}@ePHml&-woQw!uOd_Ktt6;F5^;=1B;p5zSkyV%OSS}58zp9v7xVQSjS-#EvKbLmD yJuM{_D0C%GM@89IR`_As_G4vFL-(yYY5&bG_1nuL?nS^<$>8bg=d#Wzp$P!dP)&LO literal 0 HcmV?d00001 diff --git a/src/CelesteModTutorial/Loenn/entities/PassByRefill.lua b/src/CelesteModTutorial/Loenn/entities/PassByRefill.lua new file mode 100644 index 0000000..17a48c2 --- /dev/null +++ b/src/CelesteModTutorial/Loenn/entities/PassByRefill.lua @@ -0,0 +1,20 @@ +local entity = {} + +entity.name = "CelesteModTutorial/PassByRefill" +entity.placements = { + name = "normal", + data = { + width = 16, + height = 16, + dashes = 1 + } +} + +entity.fieldInformation = +{ + dashes = { + fieldType = "integer" + } +} + +return entity \ No newline at end of file diff --git a/src/CelesteModTutorial/Loenn/entities/PassByRefillWithTexture.lua b/src/CelesteModTutorial/Loenn/entities/PassByRefillWithTexture.lua new file mode 100644 index 0000000..fd67658 --- /dev/null +++ b/src/CelesteModTutorial/Loenn/entities/PassByRefillWithTexture.lua @@ -0,0 +1,21 @@ +local entity = {} + +entity.name = "CelesteModTutorial/PassByRefillWithTexture" +entity.placements = { + name = "normal", + data = { + dashes = 1 + } +} + +entity.fieldInformation = +{ + dashes = { + fieldType = "integer" + } +} + +entity.texture = "objects/PassByRefill/pass_by_refill" +entity.justification = { 0.0, 0.0 } + +return entity \ No newline at end of file diff --git a/src/CelesteModTutorial/Loenn/lang/en_gb.lang b/src/CelesteModTutorial/Loenn/lang/en_gb.lang new file mode 100644 index 0000000..373971e --- /dev/null +++ b/src/CelesteModTutorial/Loenn/lang/en_gb.lang @@ -0,0 +1,4 @@ +entities.CelesteModTutorial/PassByRefill.placements.name.normal=PassByRefill +entities.CelesteModTutorial/PassByRefillWithTexture.placements.name.normal=PassByRefillWithTexture + +triggers.CelesteModTutorial/SetPassByRefillDashesTrigger.placements.name.normal=SetPassByRefillDashesTrigger \ No newline at end of file diff --git a/src/CelesteModTutorial/Loenn/triggers/SetPassByRefillDashesTrigger.lua b/src/CelesteModTutorial/Loenn/triggers/SetPassByRefillDashesTrigger.lua new file mode 100644 index 0000000..597c758 --- /dev/null +++ b/src/CelesteModTutorial/Loenn/triggers/SetPassByRefillDashesTrigger.lua @@ -0,0 +1,20 @@ +local trigger = {} + +trigger.name = "CelesteModTutorial/SetPassByRefillDashesTrigger" +trigger.placements = { + name = "normal", + data = { + width = 16, + height = 16, + dashes = 2 + } +} + +trigger.fieldInformation = +{ + dashes = { + fieldType = "integer" + } +} + +return trigger \ No newline at end of file diff --git a/src/CelesteModTutorial/Maps/CelesteModTutorial/Test.bin b/src/CelesteModTutorial/Maps/CelesteModTutorial/Test.bin new file mode 100644 index 0000000000000000000000000000000000000000..6fc2d922b6be674621aa0073c3268c3d72ced928 GIT binary patch literal 790 zcmZuu+fv&w5M4R8twE79l2Vhu>0>{k zpVZIj%7tl|;bEoKo^zzLt9ZYA*c~L@_15# z$TS+$oT(Ib$t}HAX)l4G6sgU_97UE}KS5*JJhED38EVtu(w;X@4Z675$#9ommGh1lE<#wMNvp4^SV1K4!sc$` zGmX*ZP_O*faa;LrAjnchNe>}cJ6;I6h^=T2mm~Y0T?u4^(}3; zDcY`l7Xa?jVU@tTD?Fg&F~t)IZoxVwHA0sh@{Fjj>A+~;bcHvRY)~vyY(el2Zn|m< zyf178*l!MWbD7}Ri&sAcued+4g_ep0X%e0p1S2P`18pZ literal 0 HcmV?d00001 diff --git a/src/CelesteModTutorial/Source/.everestignore b/src/CelesteModTutorial/Source/.everestignore new file mode 100644 index 0000000..e69de29 diff --git a/src/CelesteModTutorial/Source/CelesteMod.props b/src/CelesteModTutorial/Source/CelesteMod.props new file mode 100644 index 0000000..7fc2704 --- /dev/null +++ b/src/CelesteModTutorial/Source/CelesteMod.props @@ -0,0 +1,66 @@ + + + + Library + ../../../ + net7.0 + true + + true + + false + false + true + true + + + + + + + + + + + + + + + + $(CelesteRootPath)/Celeste.dll + False + + + + $(CelesteRootPath)/FNA.dll + False + + + $(CelesteRootPath)/MMHOOK_Celeste.dll + False + + + $(CelesteRootPath)/YamlDotNet.dll + False + + + $(CelesteRootPath)/MonoMod.Utils.dll + False + + + $(CelesteRootPath)/Mono.Cecil.dll + False + + + $(CelesteRootPath)/MonoMod.RuntimeDetour.dll + False + + + + \ No newline at end of file diff --git a/src/CelesteModTutorial/Source/CelesteMod.targets b/src/CelesteModTutorial/Source/CelesteMod.targets new file mode 100644 index 0000000..1e9a245 --- /dev/null +++ b/src/CelesteModTutorial/Source/CelesteMod.targets @@ -0,0 +1,32 @@ + + + + + <_CompileOutput Include="$(OutputPath)/**"/> + + + + + + + + + + + + + + + + + + $(CelesteRootPath)/Mods/Cache/%(Identity).%(Identity).dll + $(CelesteRootPath)/Mods/Cache/%(Identity).%(AssemblyName).dll + false + + + + \ No newline at end of file diff --git a/src/CelesteModTutorial/Source/CelesteModTutorial.csproj b/src/CelesteModTutorial/Source/CelesteModTutorial.csproj new file mode 100644 index 0000000..c1877a4 --- /dev/null +++ b/src/CelesteModTutorial/Source/CelesteModTutorial.csproj @@ -0,0 +1,20 @@ + + + + + Celeste.Mod.CelesteModTutorial + latest + enable + + + + + false + + + false + + + + + \ No newline at end of file diff --git a/src/CelesteModTutorial/Source/CelesteModTutorialModule.cs b/src/CelesteModTutorial/Source/CelesteModTutorialModule.cs new file mode 100644 index 0000000..c49d11a --- /dev/null +++ b/src/CelesteModTutorial/Source/CelesteModTutorialModule.cs @@ -0,0 +1,25 @@ +namespace Celeste.Mod.CelesteModTutorial +{ + public class CelesteModTutorialModule : EverestModule + { + public static CelesteModTutorialModule Instance { get; private set; } + + public override Type SettingsType => typeof(CelesteModTutorialSettings); + public static CelesteModTutorialSettings Settings => (CelesteModTutorialSettings)Instance._Settings; + + public override Type SessionType => typeof(CelesteModTutorialSession); + public static CelesteModTutorialSession Session => (CelesteModTutorialSession)Instance._Session; + + public override Type SaveDataType => typeof(CelesteModTutorialSaveData); + public static CelesteModTutorialSaveData SaveData => (CelesteModTutorialSaveData)Instance._SaveData; + + public override void Load() + { + Instance = this; + } + + public override void Unload() + { + } + } +} \ No newline at end of file diff --git a/src/CelesteModTutorial/Source/CelesteModTutorialSaveData.cs b/src/CelesteModTutorial/Source/CelesteModTutorialSaveData.cs new file mode 100644 index 0000000..6c4985b --- /dev/null +++ b/src/CelesteModTutorial/Source/CelesteModTutorialSaveData.cs @@ -0,0 +1,6 @@ +namespace Celeste.Mod.CelesteModTutorial +{ + public class CelesteModTutorialSaveData : EverestModuleSaveData + { + } +} \ No newline at end of file diff --git a/src/CelesteModTutorial/Source/CelesteModTutorialSession.cs b/src/CelesteModTutorial/Source/CelesteModTutorialSession.cs new file mode 100644 index 0000000..4bbecbf --- /dev/null +++ b/src/CelesteModTutorial/Source/CelesteModTutorialSession.cs @@ -0,0 +1,6 @@ +namespace Celeste.Mod.CelesteModTutorial +{ + public class CelesteModTutorialSession : EverestModuleSession + { + } +} \ No newline at end of file diff --git a/src/CelesteModTutorial/Source/CelesteModTutorialSettings.cs b/src/CelesteModTutorial/Source/CelesteModTutorialSettings.cs new file mode 100644 index 0000000..ee33861 --- /dev/null +++ b/src/CelesteModTutorial/Source/CelesteModTutorialSettings.cs @@ -0,0 +1,6 @@ +namespace Celeste.Mod.CelesteModTutorial +{ + public class CelesteModTutorialSettings : EverestModuleSettings + { + } +} \ No newline at end of file diff --git a/src/CelesteModTutorial/Source/Entities/PassByRefill.cs b/src/CelesteModTutorial/Source/Entities/PassByRefill.cs new file mode 100644 index 0000000..6a03ebb --- /dev/null +++ b/src/CelesteModTutorial/Source/Entities/PassByRefill.cs @@ -0,0 +1,52 @@ +using Celeste.Mod.Entities; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Celeste.Mod.CelesteModTutorial.Entities; + +[Tracked] +[CustomEntity("CelesteModTutorial/PassByRefill")] +public class PassByRefill : Entity +{ + public int Dashes = 0; + + public PassByRefill(Vector2 position, Vector2 size, int dashes) + { + Position = position; + Collider = new Hitbox(64f, 64f); + Dashes = dashes; + } + + public PassByRefill(EntityData data, Vector2 offset) + : this(data.Position + offset, new Vector2(data.Width, data.Height), data.Int("dashes")) + { + + } + + public override void Update() + { + base.Update(); + + // 获取 Player 实例 (别害怕!) + var player = Scene.Tracker.GetEntity(); + + // 检测是否与玩家碰撞 + if (player is not null && CollideCheck(player)) + { + // 如果碰撞了, 那么设置它的冲刺数 + player.Dashes = Dashes; + } + } + + public override void Render() + { + base.Render(); + + Color c = Color.Red; + c.A = 127; + Draw.Rect(Position, Width, Height, c); + } +} diff --git a/src/CelesteModTutorial/Source/Entities/PassByRefillWithTexture.cs b/src/CelesteModTutorial/Source/Entities/PassByRefillWithTexture.cs new file mode 100644 index 0000000..d886b86 --- /dev/null +++ b/src/CelesteModTutorial/Source/Entities/PassByRefillWithTexture.cs @@ -0,0 +1,50 @@ +using Celeste.Mod.Entities; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Celeste.Mod.CelesteModTutorial.Entities; + +[Tracked] +[CustomEntity("CelesteModTutorial/PassByRefillWithTexture")] +public class PassByRefillWithTexture : Entity +{ + public int Dashes = 0; + + public PassByRefillWithTexture(Vector2 position, int dashes) + { + Position = position; + Collider = new Hitbox(64f, 64f); + Dashes = dashes; + + // 获取材质 + MTexture tex = GFX.Game["objects/PassByRefill/pass_by_refill"]; + + // 向实体添加 Image 组件 + Image image = new(tex); + Add(image); + } + + public PassByRefillWithTexture(EntityData data, Vector2 offset) + : this(data.Position + offset, data.Int("dashes")) + { + + } + + public override void Update() + { + base.Update(); + + // 获取 Player 实例 (别害怕!) + var player = Scene.Tracker.GetEntity(); + + // 检测是否与玩家碰撞 + if (player is not null && CollideCheck(player)) + { + // 如果碰撞了, 那么设置它的冲刺数 + player.Dashes = Dashes; + } + } +} diff --git a/src/CelesteModTutorial/Source/Triggers/SetPassByRefillDashesTrigger.cs b/src/CelesteModTutorial/Source/Triggers/SetPassByRefillDashesTrigger.cs new file mode 100644 index 0000000..b575f4c --- /dev/null +++ b/src/CelesteModTutorial/Source/Triggers/SetPassByRefillDashesTrigger.cs @@ -0,0 +1,40 @@ +using Celeste.Mod.CelesteModTutorial.Entities; +using Celeste.Mod.Entities; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Celeste.Mod.CelesteModTutorial.Triggers; + +[CustomEntity("CelesteModTutorial/SetPassByRefillDashesTrigger")] +public class SetPassByRefillDashesTrigger : Trigger +{ + public int Dashes; + + public SetPassByRefillDashesTrigger(EntityData data, Vector2 offset) + : base(data, offset) + { + Dashes = data.Int("dashes"); + } + + public override void OnEnter(Player player) + { + base.OnEnter(player); + + // 获取所有的 PassByRefill + var refills = Scene.Tracker.GetEntities().Cast(); + foreach (var refill in refills) + { + refill.Dashes = Dashes; + } + + // 获取所有的 PassByRefillWithTexture + var refillsWithTexture = Scene.Tracker.GetEntities().Cast(); + foreach (var refillWithTexture in refillsWithTexture) + { + refillWithTexture.Dashes = Dashes; + } + } +} diff --git a/src/CelesteModTutorial/everest.yaml b/src/CelesteModTutorial/everest.yaml new file mode 100644 index 0000000..ff276d4 --- /dev/null +++ b/src/CelesteModTutorial/everest.yaml @@ -0,0 +1,6 @@ +- Name: CelesteModTutorial + Version: 0.1.0 + DLL: Code/CelesteModTutorial.dll + Dependencies: + - Name: EverestCore + Version: 1.4465.0