Commit Graph

162 Commits

Author SHA1 Message Date
5b76cf4dc9 test(06-02): cover damage calculator, final effect and comparer
- MainDamageCalculator: base, defeat, all special branches, guard recursion/warn 137, negative-damage flag, critical limit
- MainEnemyFinalEffect: solid/mimic/unchanged branches and priority
- MainEnemyComparer: base attributes, special count/code/value deep equality
2026-09-14 09:04:23 +08:00
c80516deb7 fix(event): 采纳七个内建并修正 touched-jsdoc 门禁
- event.test.ts 与 03-EVENT-CONTRACT.md 同步为七个内建(移除 touchFront/EventTouchFront)

- check-touched-jsdoc 按 dev.md 豁免继承/implements 成员,补充防误删说明

- 刷新 Phase 01-03 验证指纹,三个阶段恢复 passed
2026-09-13 23:38:46 +08:00
b623e8ac98 fix: 勇士事件移动时不应记录录像 2026-09-13 20:42:48 +08:00
0ba70e1a63 docs(event-contract): sync with current built-in names and collection design
- built-in names: setBlock/moveBlock/removeBlock/moveHero/stepHero/touchFront/
  insertEvents/insertEvent (class names Event*)
- removeBlock: static by default, dynamic:true also removes dynamic tiles
- touchFront: steps the hero forward; the mover produces the OnTouch on bump
- GameEventSystem.collectEvent owns source collection; mover enter/leave/hit reuse it
- IBlockEventEnv gains required system and nullable heroFloor; utils.ts keeps only
  getPossibleMap/getPossibleLayer
2026-09-13 20:40:15 +08:00
a66be585d1 feat(event): rework built-ins and centralize trigger collection
- rename deleteBlock -> removeBlock (dynamic tiles need dynamic:true),
  moveHeroStep -> stepHero; touchFront steps forward and lets the mover bump
- GameEventSystem.collectEvent owns point/tile source collection; moverImpl
  enter/leave/hit reuse it with OnEnter/OnLeave/OnTouch
- IBlockEventEnv gains required system field and nullable heroFloor
- MapLayer.removeBlock added and setBlock guarded by inMap; GameMap owns floorId
- IObjectMover.push accepts readonly steps
- update event/eventDispatch tests to the current implementation (fixtures
  supply system, hero location snapshots, renamed registrations)

Verified: data type gate 0 in-scope; vitest 19 files / 112 tests pass; prettier
and eslint clean on touched files.
2026-09-13 20:37:32 +08:00
f0fd2f54a1 refactor(event): class-based built-ins, shared utils, single registration
- rewrite every built-in as EventXxx implements BuiltInFunction<P, E>
  (setBlock/moveBlock/deleteBlock/moveHero/moveHeroStep/touchFront/
  insertEvents/insertEvent), matching the EventSetBlock reference style
- move shared helpers to event/utils.ts (getPossibleMap, getPossibleLayer,
  getEventExecutor, enter/exitEventInsert); utils is not exported via index
- move per-class helpers into private methods (EventTouchFront and
  EventInsertEvents collectInvocations)
- use IObjectMover.push for move sequences instead of manual step calls
- registrations.ts: one createEventRegistrations() writing the eight entries
  in order, categories separated by single-line comments
- remove EventBuiltinName; classes own short string names
- update event tests; core.ts uses createEventRegistrations
2026-09-13 19:17:32 +08:00
5a05eecad1 wip(event): scaffold EventSetBlock class, utils helpers, anon-tokyo workspace dep
- data-state: add @motajs/anon-tokyo workspace dependency
- map.ts: new EventSetBlock BuiltInFunction class (reference style)
- utils.ts: getPossibleMap/getPossibleLayer helpers (not yet wired)

Checkpoint of user-authored in-progress event refactor.
2026-09-13 19:04:25 +08:00
46a38fa0c6 refactor: 录像系统指令 2026-09-13 16:38:19 +08:00
dd4e66a335 refactor(replay): rewrite remaining commands and register in CoreState
- ReplayUseItemCommand / ReplayEquipCommand / ReplayUnequipCommand now extend
  BaseReplayCommand with fixed numeric params and per-false-position logger
  error codes (2006-2010); string item/slot params removed, autoUnload is a
  required bool.
- remove isNumber/isItem/isBoolean/isSlot/resolveSlot helpers; all logic now
  lives in the command classes.
- drop createReplayCommandItems/registerReplayCommandItems; CoreState owns a
  private registerReplayCommand() registering the eight stable codes directly.
- prune unused replay boundary types from replay/types.ts.
- fix ReplaySandbox: a replay ending on a run of moves now finalizes the
  trailing run through notExecuted (previously the last move never started).
- rewrite commands.test.ts for the base-class design and direct registration.

Verified: data type gate 0 in-scope; vitest 19 files / 112 tests pass; prettier
and eslint clean on touched files.
2026-09-13 15:39:12 +08:00
37bfb77301 refactor(replay): add command base class and rewrite move/teleport
- BaseReplayCommand with name/paramTypes and assertParameter guard
- add optional IReplayCommand.notExecuted for trailing-step finalization
- sandbox invokes previous command notExecuted when the next command differs
- rewrite ReplayMoveCommand (batched step + notExecuted start/await) and ReplayTeleportCommand
- add replay logger error codes 2001-2005 and warn 175

NOTE: command tests still reference the pre-rewrite class names; updated in follow-up.
2026-09-13 15:16:51 +08:00
521413fea4 style(03-19): normalize touched event JSDoc to multiline
- Convert map, hero, event, and registration-assembly function JSDoc
  into multiline form for every touched declaration
- Preserve export-only barrels, class-owned registration order, direct
  Statement[] insertion, hero front-touch ownership, and Chinese event
  test comments
2026-09-12 13:26:13 +08:00
cabee3cc01 style(03-19): normalize touched replay JSDoc to multiline
- Convert replay command, helper, and registry JSDoc into multiline form
- Add declaration-aware script/check-touched-jsdoc.ts scanner that
  inventories constructors as explicit exemptions and fails any other
  touched top-level function or class method without multiline JSDoc
2026-09-12 13:24:06 +08:00
a69130c8ad test(03-18): cover event registration ownership and barrel purity
- Assert the real eight-entry class registry, fresh per-group instances,
  and the three-map/three-hero/two-control ownership split
- Prove every class owns its stable name and function, classes originate
  from their owning modules, and hero owns the front-touch registration
- Verify both event barrels stay export-only while prior public event
  symbols remain reachable from the data-state root index
2026-09-11 23:10:37 +08:00
0dc30aace8 refactor(03-18): move event registration assembly out of the barrel
- Add event/registrations.ts as the sole direct-construction assembler for
  the eight class-based registrations in stable map/hero/control order
- Reduce event/index.ts and data-state/src/index.ts to export-only barrels
  that re-export the four public registration creators
- Point CoreState at event/registrations and record the ownership and
  public-export boundaries in the event contract
2026-09-11 23:02:15 +08:00
cb716f699e refactor(03-18): own event registrations as explicit classes
- Replace generic per-invocation registration factories with explicit
  SetBlock/MoveBlock/DeleteBlock, MoveHero/MoveHeroStep/TouchFront, and
  InsertEvents/InsertEvent registration classes
- Move eventTouchFront, invocation collection, and target resolution into
  the hero event layer while keeping awaited OnTouch behavior
- Keep map and control modules limited to their own registration ownership
2026-09-11 22:59:16 +08:00
febdcdc967 refactor: align state system replay and path contracts 2026-09-11 22:36:09 +08:00
4bd6a463d6 test(03-17): cover replay registry construction
- Assert direct stable registry construction
- Guard against formatter suppressions and duplicate directional classes
- Retain deferred movement and pathfinding ordering coverage
2026-09-11 22:22:21 +08:00
df7d1e12c2 fix(03-17): await replay movement completion
- Remove replay-safety decoration from command implementations
- Await directional and pathfinding controller completion
- Collapse directional commands into one parameterized class
2026-09-11 22:21:01 +08:00
4e318e6ce1 refactor(03-15): order replay class internals consistently
- Keep private command actions before their execute callers per project conventions
2026-09-11 14:32:20 +08:00
f5c6b06c59 test(03-15): cover independent replay command ownership
- Verify distinct command classes, fresh instances, stable order, and extension registration
- Add structural ownership regressions without changing replay or user-owned decorator boundaries
2026-09-11 14:28:24 +08:00
13162b2406 fix(03-15): split replay commands into independent classes
- Replace the shared replay entrance object with eight owned instruction classes
- Preserve stable registration order and replay command extension boundaries
2026-09-11 14:22:01 +08:00
e4e39f7b2b fix(03-10): restore compatibility loading path
- Remove Phase 3 legacy dependency and serialized loading adapters
- Restore SaveSystem, converter, bridge, and loading callback assembly
2026-09-11 13:52:54 +08:00
32fb1154e2 test(03-14): cover synchronous replay command completion
- Prove movement and pathfinding return without controller waits
- Assert synchronous nested replay-safety restoration
- Guard user-owned attribute decorator placement
2026-09-11 13:43:23 +08:00
7ffc6c4171 fix(03-14): restore synchronous replay command handling
- Remove Promise settlement from replay safety restoration
- Adapt command booleans to the existing Promise boundary
- Preserve stable replay interfaces and user-owned decorator placement
2026-09-11 13:38:38 +08:00
7315681272 test(03-13): cover direct event body execution
- Exercise eventInsertEvent with an inline Statement[] body
- Prove the body mutates the event layer without an event-store id
- Document the superseding direct-body event contract
2026-09-11 13:28:33 +08:00
2f14d8a0ae fix(03-13): execute single event bodies directly
- Accept anon-tokyo Statement[] bodies for eventInsertEvent
- Execute bodies through the existing interpreter without event-store lookup
- Preserve eventInsertEvents as the ordered id-sequence path
2026-09-11 13:25:48 +08:00
d2ebf1cefc test(03-12): cover module-owned event registrations
- Exercise all eight approved registrations with valid typed parameters
- Retain awaited behavior and missing-target safety without nullish guard tests
2026-09-11 11:11:48 +08:00
9c39895620 refactor(03-12): move event registrations into modules
- Keep the barrel limited to registration assembly and exports
- Give map, hero, and control modules typed registration builders without hot-path shape validation
2026-09-11 11:08:49 +08:00
c0444510d1 chore: 调整引入 2026-09-11 09:56:03 +08:00
a111b8dcd4 feat(03-07): wire serialized event loading boundary
- Register validated serialized events through the CoreState load seam
- Bind raw map event ids with MapState.fromRaw before replay execution
2026-09-10 20:12:47 +08:00
160a0d5c34 test(03-09): prove production replay safety boundaries
- Exercise decorated movement, item, and equipment registry calls\n- Assert deferred collection settlement and pure path/validation exclusion
2026-09-10 19:53:26 +08:00
fc9a1adae3 feat(03-09): decorate production replay command entrances
- Route all five state-changing command entrances through replay safety collection\n- Keep command validation, slot resolution, and registration helpers outside the decoration boundary
2026-09-10 19:49:54 +08:00
82687b2f56 style(03-08): format event guard coverage
- Restore repository CRLF and Prettier layout for the changed event files
2026-09-10 18:50:33 +08:00
f8cae08bd9 test(03-08): cover nullish event registrations
- Exercise all eight registration functions with null and undefined\n- Assert resolved void results and unchanged fixture state
2026-09-10 18:48:57 +08:00
95df6a0198 fix(03-08): guard registered event parameters
- Return safely before parsing nullish or non-object runtime parameters\n- Cover the real eventSetBlock registration with a null regression
2026-09-10 18:47:26 +08:00
232df083f7 fix(03-05): complete data closure coverage and Node combat gate 2026-09-10 17:52:28 +08:00
09481451d4 feat(03-03): assemble CoreState replay registry
- Bind the L2 pathfinder to each fresh hero state
- Give each CoreState an independent ReplaySystem
- Assert all eight stable commands are assembled at the top level
2026-09-10 16:44:46 +08:00
e7714894a0 feat(03-03): add async-safe replay commands
- Preserve replay collection context through async decorator settlement
- Add stable command items with awaited movement and pathfinding
- Return explicit failures for invalid item and equipment actions
2026-09-10 16:43:30 +08:00
3134537d30 feat(03-02): implement approved event built-ins
- Add map, hero, touch, and temporary event controls
- Register exactly eight built-ins through top-level event assembly
- Cover awaited behavior and safe failure with explicit fixtures
2026-09-10 16:25:02 +08:00
a12b2d2db8 feat(03-06): migrate legacy tiles to events maps
- Convert optional legacy events with safe empty defaults
- Cover TileStore consumption without trigger scalar output
2026-09-10 15:55:32 +08:00
4eec08638e feat(03-01): add awaited replay movement tracer
- exercise source-aware event mutation on a fixed map
- verify Node replay reaches its normal end state
2026-09-10 15:43:26 +08:00
a707be4856 feat(03-01): add Node-safe core state construction
- isolate legacy loading behind internal dependencies
- provide memory saves and remove singleton back-edges
2026-09-10 15:35:01 +08:00
7f19773477 chore(03): checkpoint data layer structure 2026-09-10 13:30:53 +08:00
26f7ad6b2e refactor(02-06): align pathfinding structure with user scope 2026-09-10 11:21:53 +08:00
93453db417 fix(02-04): guard nullable static event sources
- Preserve dynamic event collection while narrowing static tile access
- Record the moverImpl type diagnostic as resolved
2026-09-10 09:38:02 +08:00
7a3b6e35c1 fix(02-03): support pathfinding interruption handoff
- Queue new movement until the stopped controller settles
- Register pathfinding controller diagnostics and regression coverage
2026-09-09 21:22:49 +08:00
6cde84ec31 feat(02-03): add teleport fallback and touch handling
- Detect event-bearing paths and fall back to step movement
- Handle adjacent no-pass targets with OnTouch dispatch and facing
2026-09-09 21:18:01 +08:00
2759df531e feat(02-03): wire hero pathfinding movement
- Bind the hero predicate and event layer into the L2 finder
- Execute translated paths through the hero mover and export the L3 entry
2026-09-09 21:13:30 +08:00
68a150882c refactor(02-03): extract hero pass predicate
- Move passability and hit checks behind IPassPredicate
- Keep hero mover event dispatch and move codes unchanged
2026-09-09 21:06:07 +08:00
1d9b180d5f docs(test): describe individual test cases 2026-09-09 13:33:42 +08:00
4349e67669 docs(test): require test scope comments 2026-09-09 13:12:10 +08:00
a297311ea6 feat(event): complete phase one event system 2026-09-09 12:01:21 +08:00
5f855d0ccc fix(01-11): wire legacy maps to event layers
- assign each legacy event alias layer to GameMap.eventLayer\n- add regression coverage for map-layer ownership and initialization state
2026-09-09 10:58:20 +08:00
22056140bd fix(01-07): dispatch events with source-aware trigger matching
- Carry each event id with its real point or tile environment.
- Filter mismatched triggers before execution and include every dynamic tile in priority order.
2026-09-09 00:18:00 +08:00
7eeab32134 refactor: 游戏地图接口重构 2026-08-21 01:39:47 +08:00
1717400945 refactor: 触发器 2026-07-27 18:04:05 +08:00
f4c77d152f feat: 楼层切换 2026-07-26 20:22:36 +08:00
4bf39062a8 feat: MapStore 2026-07-17 22:42:16 +08:00
3ac14f8757 feat: 勇士身上的道具 2026-07-03 20:05:31 +08:00
74370bba3a feat: 装备道具属性 2026-07-02 19:41:13 +08:00
2d6f709201 chore: 调整存档系统初始化位置 2026-07-01 23:49:22 +08:00
9b3c3a4e40 feat: 道具效果存储 2026-07-01 23:45:06 +08:00
e72ad36e8d refactor: 存档系统迁移至 L0 2026-07-01 20:53:29 +08:00
94a16b31ba chore: 调整 DefaultHeroMoveTopImpl 的构造器参数 2026-06-30 00:06:57 +08:00
3d72954bb2 refactor: 移动顶层实施对象 2026-06-29 23:58:52 +08:00
1ce0283743 feat: 勇士默认撞击行为 2026-06-29 21:44:22 +08:00
c4bcecdf8a feat: 勇士撞击行为 2026-06-29 19:57:46 +08:00
0508dfb9e4 feat: 地形通行性判断 2026-06-28 22:42:27 +08:00
eb34d63e96 feat: 图块信息接口 2026-06-28 19:32:46 +08:00
fadcc98864 refactor: 跟随者与勇士移动 2026-06-27 20:33:49 +08:00
566ffc586a chore: 战斗返回值调整 2026-06-17 20:24:28 +08:00
604c77f7c7 refactor: 怪物接口拓展自 IStateBaseExtended 2026-06-12 22:55:08 +08:00
c48f91c25c refactor: 修改 mover 名称 2026-05-29 14:07:21 +08:00
370f285964 refactor: 删除污染严重的 TEnemy 和 THero,仅在战斗系统中包含 2026-05-17 23:56:40 +08:00
13e8547a37 refactor: 触发器类型问题 2026-05-17 23:27:29 +08:00
03dc5ea60b feat: 触发器收集 2026-05-17 22:56:01 +08:00
7428f41c93 refactor: 移除 data-utils 包 2026-05-17 22:03:22 +08:00
0f5b1f4d80 refactor: 删除旧 Range 接口 2026-05-17 21:50:49 +08:00
b779e62eb2 refactor: 统一三个数据层的接口风格 2026-05-17 21:38:29 +08:00
8f4c4b7df2 refactor: 将 Layer 0 单独放到一个包 2026-05-17 21:32:23 +08:00
bf781c5ee8 feat: 静态触发器存储 2026-05-17 20:49:08 +08:00
13fc4e1b7c refactor: TileStore 2026-05-17 16:31:08 +08:00
9ada0796b3 refactor: Layer2 数据拆分至 data-system 2026-05-16 17:06:18 +08:00
93b5349248 refactor: 激光地图伤害换用新 IFaceManager 接口 2026-05-12 19:59:10 +08:00
8ea0c12024 refactor: 新增朝向系统 2026-05-12 15:20:50 +08:00
fbdd609001 feat: 动态图层 2026-05-11 23:35:46 +08:00
4c48b63e7e refactor: 地图分区与尺寸优化 2026-05-06 19:57:11 +08:00
c43bfa2ab0 refactor: 地图存档的加载适配 2026-04-26 15:31:27 +08:00
476f735adc refactor: manager 的复用方案 & fix: 类型错误
Co-authored-by: Copilot <copilot@github.com>
2026-04-24 23:12:18 +08:00
8c1becc9f1 refactor: 存档系统 & 勇士属性存档
Co-authored-by: Copilot <copilot@github.com>
2026-04-24 17:29:13 +08:00
ec59a44efc refactor: CoreState 一部分类型声明挪到 data-base 2026-04-21 21:01:53 +08:00
1a569804d8 refactor: getFlag
Some checks failed
CodeQL / Analyze (javascript) (push) Has been cancelled
2026-04-21 15:46:59 +08:00
51e9d758d8 refactor: 渲染端结构 2026-04-19 22:52:32 +08:00
ebae685a4e refactor: flag 系统 2026-04-18 22:39:37 +08:00
ebfe59b4f5 chore: 注释调整与接口微调 2026-04-18 16:22:58 +08:00
79d06c31df refactor: 伤害计算 2026-04-17 17:49:24 +08:00
eaa725553b refactor: 怪物系统与勇士属性系统联动 2026-04-17 15:34:44 +08:00
92ff489811 refactor: 勇士状态
Some checks failed
CodeQL / Analyze (javascript) (push) Has been cancelled
2026-04-16 22:31:39 +08:00
c22a51829d refactor: IHeroState 2026-04-16 17:15:04 +08:00
89936416e1 chore: 添加必要注释 2026-04-16 13:30:52 +08:00