Skip to content

Commit 80f852f

Browse files
committed
2026-04-25 火堆、时间线
1 parent ee9eb95 commit 80f852f

10 files changed

Lines changed: 512 additions & 45 deletions

File tree

BaseLib/04 - 添加卡牌属性/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,8 @@ public class MyKeywords
7777

7878
和塔1不同,关键词提示是通过描述染色(`[gold]易伤[/gold]`)然后添加卡牌提示文本实现的。
7979

80+
例如,你给卡牌加上`消耗`就会自动给你加它的提示文本。但是如果你的卡牌没有`消耗`但是描述中是`“消耗一张牌”`,就通过这种方式添加提示文本。
81+
8082
仅需在卡牌类中重载`ExtraHoverTips`即可:
8183

8284
```csharp

BaseLib/14 - 添加新人物/README.md

Lines changed: 134 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,9 @@ public class TestCharacter : PlaceholderCharacterModel
113113
public override Color NameColor => new(0.5f, 0.5f, 1f);
114114
// 能量图标轮廓颜色
115115
public override Color EnergyLabelOutlineColor => new(0.1f, 0.1f, 1f);
116-
116+
// 地图绘制颜色
117+
public override Color MapDrawingColor => new(0.5f, 0.5f, 1f);
118+
117119
// 人物性别(男女中立)
118120
public override CharacterGender Gender => CharacterGender.Masculine;
119121

@@ -224,6 +226,8 @@ TestCharacter (Node2D)
224226

225227
![alt text](../../images/image18.png)
226228

229+
* 附赠资源提供了一个单图尽可能覆盖全屏的场景,只要把图片换成你的人物背景图即可。
230+
227231
### 人物动画
228232

229233
* 其中`Visuals`可以更改成任意继承了`Node2D`的类型,例如`SpineSprite``Sprite2D``AnimatedSprite2D`或是`AnimationPlayer`,或者在它之下新建节点都可。
@@ -241,6 +245,7 @@ TestCharacter (Node2D)
241245
`public override string CustomEnergyCounterPath => "res://test/scenes/test_energy_counter.tscn";`
242246

243247
* 建议从原版或者下面的附赠资源处复制一份tscn快速开始。
248+
244249
创建一个`Control`类型的新场景,设定以下结构:
245250

246251
```
@@ -272,9 +277,7 @@ TestCharacterMerchant (Node2D)
272277

273278
* 如果你使用Spine模型,第一个子节点放置`SpineSprite`,且动画名是`relaxed_loop`
274279

275-
* 如果你使用其他动画,创建一个继承了`NMerchantCharacter`的节点,并在`_ready`函数里播放你自己的动画。
276-
277-
* 静态图就不需要了。
280+
* 如果你使用其他动画,创建一个继承了`NMerchantCharacter`的节点,并在`_Ready`函数里播放你自己的动画。静态图就不需要了。
278281

279282
```csharp
280283
using MegaCrit.Sts2.Core.Nodes.Screens.Shops;
@@ -287,6 +290,35 @@ public partial class TestCharacterMerchant : NMerchantCharacter
287290
}
288291
```
289292

293+
## 自定义火堆模型
294+
295+
修改`AssetProfile`里的:
296+
297+
```csharp
298+
Scenes: new(
299+
RestSiteAnimPath: "res://RitsuTest/scenes/test_character_rest_site.tscn"
300+
)
301+
```
302+
* 建议从原版或者下面的附赠资源处复制一份tscn快速开始。
303+
304+
创建一个`Node2D`类型的新场景,设定以下结构:
305+
306+
```
307+
TestCharacterRestSite (Node2D)
308+
├── Node (任意)
309+
└── ControlRoot (Control) %
310+
├── SelectionReticle (Control) %
311+
├── Hitbox (Control) %
312+
├── ThoughtBubbleRight (Control) %
313+
└── ThoughtBubbleLeft (Control) %
314+
```
315+
316+
* 自行更换`Node`的类型制作动画,也可以添加更多节点。人物朝向右边。
317+
318+
* 如果你使用spine模型,代码会找到所有是SpineSprite类型的节点,根据当前幕数播放`overgrowth_loop``hive_loop`或者`glory_loop`动画。这些动画的区别只是光照颜色不同。
319+
320+
* 如果你使用其他动画,只要把Node换成你的类型就行了。可以创建一个自定义脚本(继承`NRestSiteCharacter`)然后自行播放动画。
321+
290322
## 本地化文件
291323

292324
创建`{modId}/localization/{Language}/characters.json`,填写以下内容:
@@ -447,11 +479,12 @@ public partial class TestCharacterMerchant : NMerchantCharacter
447479
<img src="../../images/energy_test_big.png" alt="energy_test_big" style="width:74px; height:74px; object-fit:contain; max-width:none; flex:0 0 auto;" />
448480
</div>
449481

450-
`test_bg.tscn`:
482+
### test_bg.tscn
483+
451484
```tscn
452485
[gd_scene load_steps=2 format=3 uid="uid://cejqjeipgqe0n"]
453486
454-
[ext_resource type="Texture2D" uid="uid://ddxmxgyyfy8mn" path="res://icon.svg" id="1_c8lhi"]
487+
[ext_resource type="Texture2D" uid="uid://hn2nofekpwrp" path="res://icon.svg" id="1_c8lhi"]
455488
456489
[node name="TestBg" type="Control"]
457490
layout_mode = 3
@@ -460,36 +493,51 @@ anchor_left = 0.5
460493
anchor_top = 0.5
461494
anchor_right = 0.5
462495
anchor_bottom = 0.5
463-
offset_left = -1790.0
464-
offset_top = -1043.0
465-
offset_right = 1790.0
466-
offset_bottom = 1043.0
496+
offset_left = -960.0
497+
offset_top = -540.0
498+
offset_right = 1600.0
499+
offset_bottom = 660.0
467500
grow_horizontal = 2
468501
grow_vertical = 2
469-
metadata/_edit_lock_ = true
502+
pivot_offset = Vector2(1280, 600)
470503
471-
[node name="ColorRect" type="ColorRect" parent="."]
504+
[node name="Control" type="Control" parent="."]
505+
layout_mode = 1
506+
anchors_preset = 8
507+
anchor_left = 0.5
508+
anchor_top = 0.5
509+
anchor_right = 0.5
510+
anchor_bottom = 0.5
511+
offset_left = -1280.0
512+
offset_top = -600.0
513+
offset_right = 640.0
514+
offset_bottom = 478.0
515+
grow_horizontal = 2
516+
grow_vertical = 2
517+
518+
[node name="ColorRect" type="ColorRect" parent="Control"]
472519
layout_mode = 1
473520
anchors_preset = 15
474521
anchor_right = 1.0
475522
anchor_bottom = 1.0
476523
grow_horizontal = 2
477524
grow_vertical = 2
478525
color = Color(0.44705883, 0.49803922, 1, 1)
479-
metadata/_edit_lock_ = true
480526
481-
[node name="Icon" type="TextureRect" parent="."]
527+
[node name="Icon" type="TextureRect" parent="Control"]
482528
layout_mode = 1
483-
anchors_preset = -1
529+
anchors_preset = 15
484530
anchor_right = 1.0
485531
anchor_bottom = 1.0
486-
offset_left = 1774.0
487-
offset_top = 792.0
488-
offset_right = -1259.0
489-
offset_bottom = -747.0
532+
offset_left = -28.0
533+
offset_top = 67.0
534+
offset_right = 612.0
535+
offset_bottom = 189.0
490536
grow_horizontal = 2
491537
grow_vertical = 2
538+
scale = Vector2(0.82, 0.82)
492539
texture = ExtResource("1_c8lhi")
540+
expand_mode = 1
493541
494542
[node name="ash1" type="CPUParticles2D" parent="."]
495543
position = Vector2(1832, -17)
@@ -523,7 +571,8 @@ scale_amount_max = 10.0
523571
color = Color(0.121879734, 0.15283081, 0.33476263, 1)
524572
```
525573

526-
`test_character.tscn`:
574+
### test_character.tscn
575+
527576
```tscn
528577
[gd_scene load_steps=2 format=3 uid="uid://c4dnpxxd6ldei"]
529578
@@ -553,7 +602,7 @@ unique_name_in_owner = true
553602
position = Vector2(0, -72)
554603
```
555604

556-
`test_energy_counter.tscn`:
605+
### test_energy_counter.tscn
557606

558607
```tscn
559608
[gd_scene load_steps=2 format=3 uid="uid://cs3a5onikvhi4"]
@@ -622,4 +671,68 @@ theme_override_font_sizes/font_size = 36
622671
text = "3/3"
623672
horizontal_alignment = 1
624673
vertical_alignment = 1
674+
```
675+
### test_character_merchant.tscn
676+
```tscn
677+
[gd_scene load_steps=2 format=3 uid="uid://pdy0teckf4i"]
678+
679+
[ext_resource type="Texture2D" uid="uid://hn2nofekpwrp" path="res://icon.svg" id="1_diepv"]
680+
681+
[node name="IroncladMerchant" type="Node2D"]
682+
683+
[node name="Icon" type="Sprite2D" parent="."]
684+
texture = ExtResource("1_diepv")
685+
```
686+
687+
### test_character_rest_site.tscn
688+
```tscn
689+
[gd_scene load_steps=2 format=3 uid="uid://bkft7e41sjfud"]
690+
691+
[ext_resource type="Texture2D" uid="uid://hn2nofekpwrp" path="res://icon.svg" id="1_74iws"]
692+
693+
[node name="TestCharacterRestSite" type="Node2D"]
694+
695+
[node name="Sprite" type="Sprite2D" parent="."]
696+
texture = ExtResource("1_74iws")
697+
698+
[node name="Sprite2" type="Sprite2D" parent="."]
699+
position = Vector2(75, -58)
700+
texture = ExtResource("1_74iws")
701+
702+
[node name="ControlRoot" type="Control" parent="."]
703+
layout_mode = 3
704+
anchors_preset = 0
705+
706+
[node name="SelectionReticle" type="Control" parent="ControlRoot"]
707+
unique_name_in_owner = true
708+
anchors_preset = 0
709+
offset_left = -153.0
710+
offset_top = -350.0
711+
offset_right = 267.0
712+
offset_bottom = 320.0
713+
714+
[node name="Hitbox" type="Control" parent="ControlRoot"]
715+
unique_name_in_owner = true
716+
anchors_preset = 0
717+
offset_left = -155.0
718+
offset_top = -165.0
719+
offset_right = 154.0
720+
offset_bottom = 166.0
721+
722+
[node name="ThoughtBubbleRight" type="Control" parent="ControlRoot"]
723+
unique_name_in_owner = true
724+
anchors_preset = 0
725+
offset_left = 121.0
726+
offset_top = -125.0
727+
offset_right = 121.0
728+
offset_bottom = -125.0
729+
730+
[node name="ThoughtBubbleLeft" type="Control" parent="ControlRoot"]
731+
unique_name_in_owner = true
732+
anchors_preset = 0
733+
offset_left = -113.0
734+
offset_top = -95.0
735+
offset_right = -113.0
736+
offset_bottom = -95.0
737+
625738
```

Basics/01 - 环境配置/README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,12 @@ https://github.com/freude916/sts2-quickRestart/blob/main/README.md
3535

3636
选择一个文本编辑器。可以使用[Visual Studio Code](https://code.visualstudio.com/)或者[Rider](https://www.jetbrains.com/zh-cn/rider/download/?section=windows)(<b>强烈推荐</b>新手使用Rider)。另外也可以使用Visual Studio等其他 IDE。以下只介绍 VS Code 的配置方法。
3737

38+
<b>强烈推荐</b>新手使用Rider
39+
40+
<b>强烈推荐</b>新手使用Rider
41+
42+
<b>强烈推荐</b>新手使用Rider
43+
3844
## 安装VS Code插件(可选)
3945

4046
安装[C# Dev Kit](https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csdevkit)。你还可以安装[Godot Tools](https://marketplace.visualstudio.com/items?itemName=geequlim.godot-tools)等插件。

Basics/03 - 选择基础库/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
| 血条覆盖层(中毒灾厄) ||| - |
2121
| 不挂载脚本场景转换 ||| - |
2222
| 人物非spine动画兼容 ||| - |
23-
| customenum ||| baselib支持对任意enum扩展;ritsulib不支持,但统一管理(例如关键词) |
23+
| customenum ||| baselib支持对任意enum扩展;<br>ritsulib不支持,但统一管理(例如关键词) |
2424
| 一代本地化符号 ||| * |
2525
| FMOD音频 | 🚧 || - |
2626
| 缺少资源时占位警告 ||| - |
@@ -32,7 +32,7 @@
3232
| 卡牌支持AnyPlayer ||| - |
3333
| 快捷键绑定 ||| - |
3434
| 新牌堆 ||| - |
35-
| 内容物ID | 命名空间第一段大写,例如`TEST-TEST_CARD` | modid与分类,例如`TEST_CARD_TEST_CARD` | - |
35+
| 内容物ID | 命名空间第一段大写,<br>例如`TEST-TEST_CARD` | modid与分类,<br>例如`TEST_CARD_TEST_CARD` | - |
3636
| patch | 原始`harmony` | 原始`harmony`以及封装patch系统 | - |
3737
| 非原生玩法内容 ||| 避免重复造轮子。但是会带来臃肿不兼容、抢占patch、抢占你的命名的问题。 |
3838

Basics/08 - 启动参数/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ Godot自带命令行参数: https://docs.godotengine.org/zh-cn/4.x/tutorials/e
2424

2525
复制出两个新的`bat`,其中一个添加`--fastmp=host`参数,作为主机,另一个添加`--fastmp=join --clientId=1001`参数,作为非主机玩家。当然你可以添加更多,记得修改`clientId`
2626

27-
如果提示不是通过steam启动,在根目录创建一个`steam_appid.txt`,里面写`2868840`然后双击修改的bat文件运行即可以一个能输出log的命令行的方式打开游戏。或者添加`--force-steam=off`参数。
27+
如果提示不是通过steam启动,在根目录创建一个`steam_appid.txt`,里面写`2868840`然后双击修改的bat文件运行即可。或者添加`--force-steam=off`参数。
2828

2929
如果你打完一层遇到保存问题,记得以管理员模式启动bat。
3030

Migrations/02 - BaseLib 至 RitsuLib/README.md

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ public class TestCard : ModCardTemplate {} // 其他内容同等换成ModXXXTemp
3737
| 卡牌注册 | `[Pool(typeof(TestCardPool))]` | `[RegisterCard(typeof(TestCardPool))]` |
3838
| 遗物注册 | `[Pool(typeof(TestRelicPool))]` | `[RegisterRelic(typeof(TestRelicPool))]` |
3939
| 药水注册 | `[Pool(typeof(TestPotionPool))]` | `[RegisterPotion(typeof(TestPotionPool))]` |
40+
| 事件注册 | 不用 | `[RegisterSharedEvent]` `[RegisterActEvent(typeof(XXX))]` |
41+
| 先古之民注册 | 不用 | `[RegisterSharedAncient]` `[RegisterActAncient(typeof(XXX))]` |
4042
| 卡牌基类 | `CustomCardModel` | `ModCardTemplate` |
4143
| 遗物基类 | `CustomRelicModel` | `ModRelicTemplate` |
4244
| 药水基类 | `CustomPotionModel` | `ModPotionTemplate` |
@@ -124,7 +126,21 @@ public class TestCard : ModCardTemplate {} // 其他内容同等换成ModXXXTemp
124126
125127
`ritsulib`:
126128
127-
在你的`Init`初始化函数中加上:
129+
给你待变化的卡牌类或者遗物类加上这两个特性:
130+
131+
```csharp
132+
[RegisterCard(typeof(TestCardPool))]
133+
[RegisterArchaicToothTranscendence(typeof(Shiv))] // 让古老牙齿把这张牌变化成指定类型
134+
public class TestCard : ModCardTemplate {}
135+
```
136+
137+
```csharp
138+
[RegisterRelic(typeof(TestRelicPool))]
139+
[RegisterTouchOfOrobasRefinement(typeof(Akabeko))] // 让欧洛巴斯之触把这个遗物变化成指定类型
140+
public class TestRelic : ModRelicTemplate {}
141+
```
142+
143+
或者在你的`Init`初始化函数中加上:
128144

129145
```csharp
130146
public static void Init()

RitsuLib/01 - 添加卡牌/README.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ namespace Test.Scripts;
2727

2828
// 注册卡牌
2929
[RegisterCard(typeof(TestCardPool))]
30-
// 注册成人物起始卡。不需要删除即可。
30+
// 注册成人物起始卡,后面是数量。不需要删除即可。
3131
[RegisterCharacterStarterCard(typeof(TestCharacter), 5)]
3232
public class TestCard : ModCardTemplate
3333
{
@@ -115,6 +115,8 @@ using STS2RitsuLib.Scaffolding.Content;
115115

116116
namespace Test.Scripts;
117117

118+
// 设置Inherit为true允许自动注册该类的所有子类
119+
[RegisterCard(typeof(TestCardPool), Inherit = true)]
118120
public abstract class TestCardModel : ModCardTemplate
119121
{
120122
public override CardAssetProfile AssetProfile => new(

RitsuLib/04 - 添加卡牌属性/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,8 @@ public class MyKeywords
8383

8484
和塔1不同,关键词提示是通过描述染色(`[gold]易伤[/gold]`)然后添加卡牌提示文本实现的。
8585

86+
例如,你给卡牌加上`消耗`就会自动给你加它的提示文本。但是如果你的卡牌没有`消耗`但是描述中是`“消耗一张牌”`,就通过这种方式添加提示文本。
87+
8688
仅需在卡牌类中重载`AdditionalHoverTips`即可:
8789

8890
```csharp

0 commit comments

Comments
 (0)