summaryrefslogtreecommitdiff
path: root/src/LivingVillage.Desktop
diff options
context:
space:
mode:
Diffstat (limited to 'src/LivingVillage.Desktop')
-rw-r--r--src/LivingVillage.Desktop/Assets/cjk-glyph-atlas.pngbin80906 -> 85104 bytes
-rw-r--r--src/LivingVillage.Desktop/Assets/cjk-glyphs.txt16
-rw-r--r--src/LivingVillage.Desktop/CjkGlyphAtlas.fs2
-rw-r--r--src/LivingVillage.Desktop/Game.fs53
4 files changed, 70 insertions, 1 deletions
diff --git a/src/LivingVillage.Desktop/Assets/cjk-glyph-atlas.png b/src/LivingVillage.Desktop/Assets/cjk-glyph-atlas.png
index 25d317b..ed1bf37 100644
--- a/src/LivingVillage.Desktop/Assets/cjk-glyph-atlas.png
+++ b/src/LivingVillage.Desktop/Assets/cjk-glyph-atlas.png
Binary files differ
diff --git a/src/LivingVillage.Desktop/Assets/cjk-glyphs.txt b/src/LivingVillage.Desktop/Assets/cjk-glyphs.txt
index 1b9bf67..0191fc0 100644
--- a/src/LivingVillage.Desktop/Assets/cjk-glyphs.txt
+++ b/src/LivingVillage.Desktop/Assets/cjk-glyphs.txt
@@ -42,6 +42,7 @@
册
再
农
+冬
准
几
出
@@ -56,9 +57,11 @@
动
助
匀
+包
单
卖
南
+卷
原
去
友
@@ -69,6 +72,7 @@
各
同
和
+品
回
围
圃
@@ -77,6 +81,7 @@
坏
墙
备
+夏
多
夜
大
@@ -150,6 +155,7 @@
效
敌
数
+料
新
方
无
@@ -159,6 +165,7 @@
明
昏
易
+春
是
晓
晚
@@ -194,6 +201,7 @@
照
物
状
+玩
理
瓦
生
@@ -209,11 +217,13 @@
确
社
离
+秋
移
稳
空
竹
笑
+第
粮
精
系
@@ -232,6 +242,7 @@
耕
聊
职
+背
能
自
范
@@ -264,7 +275,9 @@
足
路
跳
+车
转
+轴
过
近
返
@@ -296,11 +309,14 @@
零
需
面
+页
项
须
食
饥
饿
+香
+鱼
黄
黛
,
diff --git a/src/LivingVillage.Desktop/CjkGlyphAtlas.fs b/src/LivingVillage.Desktop/CjkGlyphAtlas.fs
index 01d6a59..8b42596 100644
--- a/src/LivingVillage.Desktop/CjkGlyphAtlas.fs
+++ b/src/LivingVillage.Desktop/CjkGlyphAtlas.fs
@@ -11,7 +11,7 @@ module CjkGlyphAtlas =
// Keep this table sorted and stable so the generated PNG has a reproducible layout.
let private characterTable =
- "×一上不与业中为主乐乡书买了争事于互交人今从以件价任众会传位体作使保信倍停先入关内册再农准几出分切到前剧力功务动助匀单卖南原去友取受只可各同和回围圃土在坏墙备多夜大天夫失好始子存完定家察对将小尚就层居屋工差己已币帮常平年庄库应庙度开式当录待得心必态怒总恼情愁意戏成或户打找报拒择指挑捕据接提播操收改效敌数新方无日旧时明昏易是晓晚晨景暂更最有未村束板林果标格档桥歉段民水求江没法淡清渔游热照物状理瓦生用田留白的目看真石确社离移稳空竹笑粮精系紧纭纷线结给绝继绪续置翻耕聊职能自范获菜衅行观认讨议记讲论设访试话询说请读谅谈败货贩资走足路跳转过近返还进迫退送选速道邻郎都里量金鉴钱门闭问闯闲间闻附雨零需面项须食饥饿黄黛,:"
+ "×一上不与业中为主乐乡书买了争事于互交人今从以件价任众会传位体作使保信倍停先入关内册再农冬准几出分切到前剧力功务动助匀包单卖南卷原去友取受只可各同和品回围圃土在坏墙备夏多夜大天夫失好始子存完定家察对将小尚就层居屋工差己已币帮常平年庄库应庙度开式当录待得心必态怒总恼情愁意戏成或户打找报拒择指挑捕据接提播操收改效敌数料新方无日旧时明昏易春是晓晚晨景暂更最有未村束板林果标格档桥歉段民水求江没法淡清渔游热照物状玩理瓦生用田留白的目看真石确社离秋移稳空竹笑第粮精系紧纭纷线结给绝继绪续置翻耕聊职背能自范获菜衅行观认讨议记讲论设访试话询说请读谅谈败货贩资走足路跳车转轴过近返还进迫退送选速道邻郎都里量金鉴钱门闭问闯闲间闻附雨零需面页项须食饥饿香鱼黄黛,:"
let characters = characterTable.ToCharArray()
let rowCount = (characters.Length + columns - 1) / columns
diff --git a/src/LivingVillage.Desktop/Game.fs b/src/LivingVillage.Desktop/Game.fs
index b51c7f0..cdfc06b 100644
--- a/src/LivingVillage.Desktop/Game.fs
+++ b/src/LivingVillage.Desktop/Game.fs
@@ -318,6 +318,12 @@ type LivingVillageGame() as this =
let mutable p44Step = 0
let mutable p44PendingName = ""
let mutable p44Pending = false
+ // P61 证据钩子(G1 字形补齐):拍「右上日历(春夏秋冬·第N天)/ 对话页脚(第N/3页 + V 卖出 背包物品×1)」
+ // 两帧,证明新补 16 字在真实游戏 UI 中完整可辨。
+ let p61ShotMode = Environment.GetEnvironmentVariable("LV_P61_SHOT") = "1"
+ let mutable p61Step = 0
+ let mutable p61PendingName = ""
+ let mutable p61Pending = false
// P45 证据钩子:LV_P45_SHOT=1 时拍角色 idle / 行走朝下 / 行走朝右 三帧(真实游戏截图)。
let p45ShotMode = Environment.GetEnvironmentVariable("LV_P45_SHOT") = "1"
let mutable p45Step = 0
@@ -961,6 +967,43 @@ type LivingVillageGame() as this =
(m5View.Prompt |> Option.defaultValue "<none>")
p44Step <- p44Step + 1
+ /// P61 证据(G1):真实世界里拍「右上日历」与「对话页脚/背包文案」两帧。
+ member private this.PrepareP61Shot () =
+ let setHour (hour: float) =
+ let tick = M6Presentation.resolveStartTick (Some hour) false
+ world <- { world with Tick = tick; Time = float tick * Sim.dtSeconds }
+ if not p61Pending then
+ match p61Step with
+ | 0 ->
+ setHour 12.0
+ let npc = world.Npcs.[0]
+ world <- { world with Avatar = { world.Avatar with Pos = npc.Pos } }
+ this.CenterCamera()
+ p61PendingName <- "p61-calendar"
+ p61Pending <- true
+ | 1 ->
+ let nextWorld, nextView = M5Interaction.apply M5Command.Interact world m5View
+ world <- nextWorld
+ m5View <- nextView
+ this.CenterCamera()
+ p61PendingName <- "p61-dialog-footer"
+ p61Pending <- true
+ | _ ->
+ printfn "p61-shot=done"
+ this.Exit()
+
+ /// P61 证据:落盘并打印日历读数(春夏秋冬·第N天)与面板名,供 analyze 核验。
+ member private this.CaptureP61Shot () =
+ if p61Pending then
+ p61Pending <- false
+ System.IO.Directory.CreateDirectory recordDirectory |> ignore
+ this.SaveBackBuffer(sprintf "%s/%s.png" recordDirectory p61PendingName)
+ let reading = HudLayout.calendarReading world.Tick
+ printfn
+ "p61-shot=%s tick=%d calendar=%s panel=%s"
+ p61PendingName world.Tick (HudLayout.calendarLine1 reading) (M5Interaction.panelName m5View)
+ p61Step <- p61Step + 1
+
member private this.PrepareP45Shot () =
let baseTick = M6Presentation.resolveStartTick (Some 12.0) false
let setTick (tick: int64) =
@@ -1942,6 +1985,14 @@ type LivingVillageGame() as this =
else this.DispatchMenuInput Confirm
elif menu.Page = Playing then
this.PrepareP44Shot()
+ elif p61ShotMode then
+ if menu.Page = MainMenu then
+ this.DispatchMenuInput Confirm
+ elif menu.Page = OccupationSelect then
+ if menu.Selected <> 0 then this.DispatchMenuInput Down
+ else this.DispatchMenuInput Confirm
+ elif menu.Page = Playing then
+ this.PrepareP61Shot()
elif p45ShotMode then
if menu.Page = MainMenu then
this.DispatchMenuInput Confirm
@@ -2412,6 +2463,8 @@ type LivingVillageGame() as this =
this.CaptureP43Shot()
if p44ShotMode && menu.Page = Playing then
this.CaptureP44Shot()
+ if p61ShotMode && menu.Page = Playing then
+ this.CaptureP61Shot()
if p45ShotMode && menu.Page = Playing then
this.CaptureP45Shot()
if p46ShotMode then