修复 LightGame 玩家地面抖动、动画切换异常并完善 spike/终点视觉
## 物理与动画(核心修复) - PlayerController::update:地面状态下跳过 apply_gravity。之前每帧重力累入 velocity.y,sub_pixel_y_ 会缓慢累到 ≥1000 像素阈值,导致玩家下沉 1px 后被 collide_tilemap 推回,每隔几帧抖动一次。这是"动画机切不回 idle"的真正根因 —— 单帧 grounded=false 让状态切到 Falling,下一帧又回 Idle,视觉表现为 idle/fall 帧间歇错位。 - Physics2D::collide_tilemap:发生轴向推回时清掉对应 sub_pixel_x_/y_,防止小数残留在下一帧继续推进位置。 - Physics2D::is_grounded:feet 探测窗口(max.y..max.y+2)跨越的所有 tile 行都要扫描,而非只查 feet.min.y/ts 那一行。原写法在边界帧(feet.max.y 临时为 31n+0)会错把上一行空 tile 当判定行返回 false,触发上述的单帧 Falling 抖动。 - PlayerController::update:grounded && velocity.y >= 0 时无条件清零 velocity.y(不再要求 !was_grounded_),避免重力残留导致连续下沉。 ## Spike 行为 - Physics2D::is_tile_solid:spike(tile id 4) 改为非实体,玩家可踩入触发死亡。原先 spike 与普通地块都被当 solid,玩家停在 spike 顶部不会死。 - PlayerController::check_death:spike 击杀区域收紧到 tile 底部 14px(视觉高度),不再用整 32px tile 误判。 ## 关卡视觉(出生点 / 检查点 / 终点) - LevelLoader:玩家出生点附近生成 flag 装饰对象;Checkpoint 触发器初始显示 checkpoint 精灵,被激活后由 LightGameApp 在 check_triggers 中替换为 flag 精灵;LevelComplete 触发器使用 checkpoint 精灵作为终点。 - LevelLoader 暴露 flag_sprite() 静态访问器,供 LightGameApp 触发激活时复用同一份 sprite 引用。 ## 资源与配套 - 重新打包 tile_atlas(重新生成 generated/tile_atlas.h),更新 assets/tile/checkpoint.png、flag.png 的视觉素材。 - Level1Data、LevelEditor、LevelRenderer、GameObject、tests 跟随接口调整同步更新;game_engine_tests 重新编译通过。
This commit is contained in:
parent
05d7d9783e
commit
254a8ce5c8
Binary file not shown.
|
Before Width: | Height: | Size: 135 B After Width: | Height: | Size: 1.7 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 138 B After Width: | Height: | Size: 1.6 KiB |
|
|
@ -777,258 +777,258 @@ static const uint16_t tile_atlas_pixels[] = {
|
|||
0xFFFF, 0xFFFF, 0xFFFF, 0xFEE3, 0xFEE3, 0xFEE3, 0xFEE3, 0xFD51, 0xFD51, 0xFD51, 0x5ADF, 0x5ADF, 0x4A57, 0x4A57, 0x0845, 0x0845,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0x20CD, 0x20CD, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x20CD, 0x20CD, 0x0000,
|
||||
0x0000, 0x20CD, 0x20CD, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x20CD, 0x20CD, 0xFFFE,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0x20CD, 0x20CD, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x20CD, 0x20CD, 0x0000,
|
||||
0x0000, 0x20CD, 0x20CD, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x20CD, 0x20CD, 0xFFFE,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467,
|
||||
0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467,
|
||||
0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB,
|
||||
0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0x20CD, 0x20CD, 0x8467, 0x8467, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xDF39, 0xDF39, 0x20CD, 0x20CD, 0x0000,
|
||||
0x0000, 0x20CD, 0x20CD, 0x8467, 0x8467, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xDF39, 0xDF39, 0x20CD, 0x20CD, 0xFFFE,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467,
|
||||
0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467,
|
||||
0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB,
|
||||
0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0x20CD, 0x20CD, 0x8467, 0x8467, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xDF39, 0xDF39, 0x20CD, 0x20CD, 0x0000,
|
||||
0x0000, 0x20CD, 0x20CD, 0x8467, 0x8467, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xDF39, 0xDF39, 0x20CD, 0x20CD, 0xFFFE,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467,
|
||||
0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467,
|
||||
0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB,
|
||||
0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFF2, 0x0000, 0x20CD, 0x20CD, 0x8467, 0x8467, 0xADF1, 0xADF1, 0xDF39, 0xDF39, 0x20CD, 0x20CD, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x20CD, 0x20CD, 0x8467, 0x8467, 0xADF1, 0xADF1, 0xDF39, 0xDF39, 0x20CD, 0x20CD, 0x0000, 0x0000, 0xFFFE,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467,
|
||||
0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467,
|
||||
0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB,
|
||||
0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0x0000, 0x0000, 0x20CD, 0x20CD, 0x8467, 0x8467, 0xADF1, 0xADF1, 0xDF39, 0xDF39, 0x20CD, 0x20CD, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x20CD, 0x20CD, 0x8467, 0x8467, 0xADF1, 0xADF1, 0xDF39, 0xDF39, 0x20CD, 0x20CD, 0x0000, 0x0000, 0xFFFE,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467,
|
||||
0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467,
|
||||
0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB,
|
||||
0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0x0000, 0xFFFE, 0xFFFE, 0x0001, 0x0001, 0xE885, 0xE885, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0x0001, 0x0001, 0xFFFE, 0x0000, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0x0000, 0x0000, 0x20CD, 0x20CD, 0x8467, 0x8467, 0xADF1, 0xADF1, 0xDF39, 0xDF39, 0x20CD, 0x20CD, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x20CD, 0x20CD, 0x8467, 0x8467, 0xADF1, 0xADF1, 0xDF39, 0xDF39, 0x20CD, 0x20CD, 0x0000, 0x0000, 0xFFFE,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467,
|
||||
0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467, 0x8467,
|
||||
0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB,
|
||||
0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0x0000, 0xFFFE, 0x4A53, 0x4A53, 0xE885, 0xE885, 0xE885, 0xE885, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0x4A53, 0x4A53, 0xFFFE, 0x0000, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0x0000, 0x0000, 0x20CD, 0x20CD, 0x8467, 0x8467, 0xADF1, 0xADF1, 0xDF39, 0xDF39, 0x20CD, 0x20CD, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x20CD, 0x20CD, 0x8467, 0x8467, 0xADF1, 0xADF1, 0xDF39, 0xDF39, 0x20CD, 0x20CD, 0x0000, 0x0000, 0xFFFE,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1,
|
||||
0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1,
|
||||
0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB,
|
||||
0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0x0000, 0xFFFE, 0x4A53, 0x4A53, 0xE885, 0xE885, 0xE885, 0xE885, 0xE885,
|
||||
0xE885, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0x4A53, 0x4A53, 0xFFFE, 0x0000, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0x0000, 0x0000, 0x0000, 0x0000, 0x20CD, 0x20CD, 0xDF39, 0xDF39, 0x20CD, 0x20CD, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x20CD, 0x20CD, 0xDF39, 0xDF39, 0x20CD, 0x20CD, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFE,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1,
|
||||
0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1,
|
||||
0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB,
|
||||
0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0x0000, 0xFFFE, 0x4A53, 0x4A53, 0xE885, 0xE885, 0xE885, 0xE885, 0xE885,
|
||||
0xE885, 0xE885, 0xE885, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0x4A53, 0x4A53, 0xFFFE, 0x0000, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0x0000, 0x0000, 0x0000, 0x0000, 0x20CD, 0x20CD, 0xDF39, 0xDF39, 0x20CD, 0x20CD, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x20CD, 0x20CD, 0xDF39, 0xDF39, 0x20CD, 0x20CD, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFE,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1,
|
||||
0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1,
|
||||
0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB,
|
||||
0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0x0000, 0xFFFE, 0x4A53, 0x4A53, 0xE885, 0xE885, 0xE885, 0xE885, 0xE885,
|
||||
0xE885, 0xE885, 0xE885, 0xE885, 0xE885, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0x4A53, 0x4A53, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0x0000, 0x0000, 0x0000, 0x0000, 0x20CD, 0x20CD, 0xDF39, 0xDF39, 0x20CD, 0x20CD, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x20CD, 0x20CD, 0xDF39, 0xDF39, 0x20CD, 0x20CD, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFE,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1,
|
||||
0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1,
|
||||
0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB,
|
||||
0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0x0000, 0x0000, 0xFFFE, 0x4A53, 0x4A53, 0xE885, 0xE885, 0xE885, 0xE885, 0xE885,
|
||||
0xE885, 0xE885, 0xE885, 0xE885, 0xE885, 0xE885, 0xE885, 0x0000, 0x0000, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0x4A53, 0x4A53, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0x0000, 0x0000, 0x0000, 0x0000, 0x20CD, 0x20CD, 0xDF39, 0xDF39, 0x20CD, 0x20CD, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x20CD, 0x20CD, 0xDF39, 0xDF39, 0x20CD, 0x20CD, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFE,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1,
|
||||
0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1,
|
||||
0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB,
|
||||
0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0x0000, 0xFFFE, 0x4A53, 0x4A53, 0xE885, 0xE885, 0xE885, 0xE885, 0xE885,
|
||||
0xE885, 0xE885, 0xE885, 0xE885, 0xE885, 0xE885, 0xE885, 0xE885, 0xE885, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0x4A53, 0x4A53, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x20CD, 0x20CD, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x20CD, 0x20CD, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFE,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1,
|
||||
0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1,
|
||||
0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB,
|
||||
0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB, 0xCCDB,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0x0000, 0xFFFE, 0x4A53, 0x4A53, 0xE885, 0xE885, 0xE885, 0xE885, 0xE885,
|
||||
0xE885, 0xE885, 0xE885, 0xE885, 0xE885, 0xE885, 0xE885, 0xE885, 0xE885, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0x4A53, 0x4A53, 0xFFFE, 0xFFFE, 0x0000, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x20CD, 0x20CD, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x20CD, 0x20CD, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFE,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1,
|
||||
0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1,
|
||||
0xE665, 0xE665, 0xE665, 0xE665, 0xE665, 0xE665, 0xE665, 0xE665, 0xE665, 0xE665, 0xE665, 0xE665, 0xE665, 0xE665, 0xE665, 0xE665,
|
||||
0xE665, 0xE665, 0xE665, 0xE665, 0xE665, 0xE665, 0xE665, 0xE665, 0xE665, 0xE665, 0xE665, 0xE665, 0xE665, 0xE665, 0xE665, 0xE665,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0x0000, 0xFFFE, 0x4A53, 0x4A53, 0xE885, 0xE885, 0xE885, 0xE885, 0xE885,
|
||||
0xE885, 0xE885, 0xE885, 0xE885, 0xE885, 0xE885, 0xE885, 0x0000, 0x0000, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0x4A53, 0x4A53, 0xFFFE, 0xFFFE, 0x0000, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1,
|
||||
0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1,
|
||||
0xE665, 0xE665, 0xE665, 0xE665, 0xE665, 0xE665, 0xE665, 0xE665, 0xE665, 0xE665, 0xE665, 0xE665, 0xE665, 0xE665, 0xE665, 0xE665,
|
||||
0xE665, 0xE665, 0xE665, 0xE665, 0xE665, 0xE665, 0xE665, 0xE665, 0xE665, 0xE665, 0xE665, 0xE665, 0xE665, 0xE665, 0xE665, 0xE665,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0x0000, 0xFFFE, 0xFFFE, 0x4A53, 0x4A53, 0xE885, 0xE885, 0xE885, 0xE885, 0xE885,
|
||||
0xE885, 0xE885, 0xE885, 0xE885, 0xE885, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0x4A53, 0x4A53, 0xFFFE, 0xFFFE, 0x0000, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1,
|
||||
0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1,
|
||||
0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191,
|
||||
0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0x0000, 0xFFFE, 0xFFFE, 0x4A53, 0x4A53, 0xE885, 0xE885, 0xE885, 0xE885, 0xE885,
|
||||
0xE885, 0xE885, 0xE885, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0x4A53, 0x4A53, 0xFFFE, 0xFFFE, 0x0000, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1,
|
||||
0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1,
|
||||
0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191,
|
||||
0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0x0000, 0xFFFE, 0xFFFE, 0x4A53, 0x4A53, 0xE885, 0xE885, 0xE885, 0xE885, 0xE885,
|
||||
0xE885, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0x4A53, 0x4A53, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1,
|
||||
0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1,
|
||||
0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191,
|
||||
0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0x0000, 0xFFFE, 0xFFFE, 0x4A53, 0x4A53, 0xE885, 0xE885, 0xE885, 0xE885, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0x4A53, 0x4A53, 0xFFFE, 0x0000, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1,
|
||||
0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1,
|
||||
0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191,
|
||||
0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0x0000, 0xFFFE, 0xFFFE, 0x0001, 0x0001, 0xE885, 0xE885, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0x0001, 0x0001, 0xFFFE, 0x0000, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1,
|
||||
0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1,
|
||||
0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191,
|
||||
0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0x0000, 0xFFFE, 0xFFFE, 0x4A53, 0x4A53, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0x4A53, 0x4A53, 0xFFFE, 0x0000, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1,
|
||||
0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1,
|
||||
0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191,
|
||||
0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0x0000, 0xFFFE, 0xFFFE, 0x4A53, 0x4A53, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0x4A53, 0x4A53, 0xFFFE, 0x0000, 0x0000, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1,
|
||||
0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1,
|
||||
0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191,
|
||||
0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0x0000, 0xFFFE, 0xFFFE, 0x4A53, 0x4A53, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0x4A53, 0x4A53, 0x0000, 0x0000, 0x0000, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1,
|
||||
0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1, 0xADF1,
|
||||
0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191,
|
||||
0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0x0000, 0xFFFE, 0xFFFE, 0x4A53, 0x4A53, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0x4A53, 0x4A53, 0x0000, 0x0000, 0x0000, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17,
|
||||
0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17,
|
||||
0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191,
|
||||
0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0x0000, 0xFFFE, 0x4A53, 0x4A53, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0x4A53, 0x4A53, 0x0000, 0x0000, 0x0000, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17,
|
||||
0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17,
|
||||
0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191,
|
||||
0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0x0000, 0xFFFE, 0x4A53, 0x4A53, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0x4A53, 0x4A53, 0x0000, 0x0000, 0x0000, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17,
|
||||
0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17,
|
||||
0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191,
|
||||
0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0x0000, 0xFFFE, 0x4A53, 0x4A53, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0x4A53, 0x4A53, 0x0000, 0x0000, 0x0000, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17,
|
||||
0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17,
|
||||
0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191,
|
||||
0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0x0000, 0xFFFE, 0x4A53, 0x4A53, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0x4A53, 0x4A53, 0x0000, 0x0000, 0x0000, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17,
|
||||
0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17,
|
||||
0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191,
|
||||
0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0x0000, 0x0000, 0xFFFE, 0x4A53, 0x4A53, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0x4A53, 0x4A53, 0x0000, 0x0000, 0x0000, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17,
|
||||
0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17, 0x4A17,
|
||||
0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191,
|
||||
0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191, 0x8191,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0x0000, 0xFFFE, 0x4A53, 0x4A53, 0x4A53, 0x4A53, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0x4A53, 0x4A53, 0x4A53, 0x4A53, 0x0000, 0x0000, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0x4A53, 0x4A53, 0x4A53, 0x4A53, 0x4A53, 0x4A53, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0x4A53, 0x4A53, 0x4A53, 0x4A53, 0x4A53, 0x4A53, 0x0000, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0x4A53, 0x4A53, 0x4A53, 0x4A53, 0x4A53, 0x4A53, 0x4A53, 0x4A53, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0x4A53, 0x4A53, 0x4A53, 0x4A53, 0x4A53, 0x4A53, 0x4A53, 0x4A53, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE,
|
||||
0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD, 0x20CD,
|
||||
|
|
|
|||
|
|
@ -35,15 +35,13 @@ namespace LightGame
|
|||
switch (type)
|
||||
{
|
||||
case GameObjectType::Player: return "Player";
|
||||
case GameObjectType::StaticPlatform: return "StaticPlatform";
|
||||
case GameObjectType::LightPlatform: return "LightPlatform";
|
||||
case GameObjectType::ShadowPlatform: return "ShadowPlatform";
|
||||
case GameObjectType::Hazard: return "Hazard";
|
||||
case GameObjectType::Collectible: return "Collectible";
|
||||
case GameObjectType::Trigger: return "Trigger";
|
||||
case GameObjectType::Door: return "Door";
|
||||
}
|
||||
return "StaticPlatform";
|
||||
return "Player";
|
||||
}
|
||||
|
||||
static const char* TriggerActionToString(TriggerAction action)
|
||||
|
|
@ -66,7 +64,7 @@ namespace LightGame
|
|||
should_quit_(false),
|
||||
current_tool_(Tool::TileBrush),
|
||||
selected_tile_id_(1),
|
||||
selected_object_type_(GameObjectType::StaticPlatform),
|
||||
selected_object_type_(GameObjectType::Player),
|
||||
selected_object_id_(0),
|
||||
preview_light_level_(2048),
|
||||
show_grid_(true),
|
||||
|
|
@ -177,7 +175,7 @@ namespace LightGame
|
|||
const int32_t py = pointer->get_y();
|
||||
|
||||
const int32_t world_x = px + camera_.get_x();
|
||||
const int32_t world_y = py + camera_.get_y();
|
||||
const int32_t world_y = py - LightGame::LevelRenderer::kTopBlackBorder + camera_.get_y();
|
||||
const int32_t tile_x = world_to_tile_x(world_x);
|
||||
const int32_t tile_y = world_to_tile_y(world_y);
|
||||
|
||||
|
|
@ -230,11 +228,6 @@ namespace LightGame
|
|||
obj.solid = false;
|
||||
level_.set_spawn_point(obj.position);
|
||||
break;
|
||||
case GameObjectType::StaticPlatform:
|
||||
obj.collider = RenderData::BoundingBox2D(Math::Vector2Int(0, 0), Math::Vector2Int(ts, ts));
|
||||
obj.solid = true;
|
||||
obj.sprite = &spr_platform;
|
||||
break;
|
||||
case GameObjectType::LightPlatform:
|
||||
obj.collider = RenderData::BoundingBox2D(Math::Vector2Int(0, 0), Math::Vector2Int(ts, ts));
|
||||
obj.solid = false;
|
||||
|
|
@ -253,11 +246,6 @@ namespace LightGame
|
|||
obj.light_threshold = LightThreshold(1023, 3192);
|
||||
obj.sprite = &spr_door;
|
||||
break;
|
||||
case GameObjectType::Hazard:
|
||||
obj.collider = RenderData::BoundingBox2D(Math::Vector2Int(0, ts / 2), Math::Vector2Int(ts, ts));
|
||||
obj.solid = false;
|
||||
obj.sprite = &spr_spike;
|
||||
break;
|
||||
case GameObjectType::Collectible:
|
||||
obj.collider = RenderData::BoundingBox2D(Math::Vector2Int(ts / 4, ts / 4), Math::Vector2Int(ts * 3 / 4, ts * 3 / 4));
|
||||
obj.solid = false;
|
||||
|
|
@ -337,11 +325,11 @@ namespace LightGame
|
|||
for (int32_t x = start_x; x < end_x; x += ts)
|
||||
{
|
||||
const int32_t sx = x - cam_x;
|
||||
ctx.draw_line(Math::Vector2Int(sx, 0), Math::Vector2Int(sx, screen_height_), grid_color);
|
||||
ctx.draw_line(Math::Vector2Int(sx, LightGame::LevelRenderer::kTopBlackBorder), Math::Vector2Int(sx, screen_height_), grid_color);
|
||||
}
|
||||
for (int32_t y = start_y; y < end_y; y += ts)
|
||||
{
|
||||
const int32_t sy = y - cam_y;
|
||||
const int32_t sy = y - cam_y + LightGame::LevelRenderer::kTopBlackBorder;
|
||||
ctx.draw_line(Math::Vector2Int(0, sy), Math::Vector2Int(screen_width_, sy), grid_color);
|
||||
}
|
||||
}
|
||||
|
|
@ -350,7 +338,7 @@ namespace LightGame
|
|||
{
|
||||
const Math::Vector2Int sp = level_.get_spawn_point();
|
||||
const int32_t sx = sp.x - camera_.get_x();
|
||||
const int32_t sy = sp.y - camera_.get_y();
|
||||
const int32_t sy = sp.y - camera_.get_y() + LightGame::LevelRenderer::kTopBlackBorder;
|
||||
if (sx < -16 || sx > screen_width_ + 16 || sy < -16 || sy > screen_height_ + 16) return;
|
||||
|
||||
const RenderData::Color color(0, 255, 0, 255);
|
||||
|
|
@ -365,7 +353,7 @@ namespace LightGame
|
|||
|
||||
const RenderData::BoundingBox2D box = obj->get_world_collider();
|
||||
const int32_t sx = box.min.x - camera_.get_x();
|
||||
const int32_t sy = box.min.y - camera_.get_y();
|
||||
const int32_t sy = box.min.y - camera_.get_y() + LightGame::LevelRenderer::kTopBlackBorder;
|
||||
const int32_t w = box.max.x - box.min.x;
|
||||
const int32_t h = box.max.y - box.min.y;
|
||||
|
||||
|
|
@ -386,7 +374,7 @@ namespace LightGame
|
|||
{
|
||||
if (ImGui::MenuItem("New Level", "Ctrl+N"))
|
||||
{
|
||||
new_level(25, 8, 32);
|
||||
new_level(32, 18, 32);
|
||||
}
|
||||
if (ImGui::BeginMenu("Load Level"))
|
||||
{
|
||||
|
|
@ -438,7 +426,9 @@ namespace LightGame
|
|||
if (current_tool_ == Tool::TileBrush)
|
||||
{
|
||||
ImGui::Text("Tile Type");
|
||||
const char* tile_names[] = { "Empty", "Ground Top", "Ground Fill", "Platform", "Spike" };
|
||||
const char* tile_names[] = {
|
||||
"0 Empty", "1 Ground Top", "2 Ground Fill", "3 Platform", "4 Spike"
|
||||
};
|
||||
for (int i = 0; i < 5; ++i)
|
||||
{
|
||||
if (ImGui::RadioButton(tile_names[i], selected_tile_id_ == i))
|
||||
|
|
@ -451,11 +441,9 @@ namespace LightGame
|
|||
struct ObjEntry { GameObjectType type; const char* name; };
|
||||
static const ObjEntry entries[] = {
|
||||
{ GameObjectType::Player, "Player" },
|
||||
{ GameObjectType::StaticPlatform, "Platform" },
|
||||
{ GameObjectType::LightPlatform, "Light Platform" },
|
||||
{ GameObjectType::ShadowPlatform, "Shadow Platform" },
|
||||
{ GameObjectType::Door, "Door" },
|
||||
{ GameObjectType::Hazard, "Hazard" },
|
||||
{ GameObjectType::Collectible, "Collectible" },
|
||||
{ GameObjectType::Trigger, "Trigger" },
|
||||
};
|
||||
|
|
|
|||
|
|
@ -10,10 +10,8 @@ namespace LightGame
|
|||
enum class GameObjectType
|
||||
{
|
||||
Player,
|
||||
StaticPlatform,
|
||||
LightPlatform,
|
||||
ShadowPlatform,
|
||||
Hazard,
|
||||
Collectible,
|
||||
Trigger,
|
||||
Door
|
||||
|
|
@ -56,7 +54,7 @@ namespace LightGame
|
|||
|
||||
GameObject()
|
||||
: id(0),
|
||||
type(GameObjectType::StaticPlatform),
|
||||
type(GameObjectType::Player),
|
||||
position(),
|
||||
velocity(),
|
||||
sprite(nullptr),
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ namespace LightGame
|
|||
static const RenderData::Sprite spr_shadow_platform_on = MakeTileSprite(&tile_atlas_image, 8, 32, 4);
|
||||
static const RenderData::Sprite spr_door_closed = MakeTileSprite(&tile_atlas_image, 9, 32, 4);
|
||||
static const RenderData::Sprite spr_coin = MakeTileSprite(&tile_atlas_image, 11, 32, 4);
|
||||
static const RenderData::Sprite spr_flag = MakeTileSprite(&tile_atlas_image, 12, 32, 4);
|
||||
static const RenderData::Sprite spr_checkpoint = MakeTileSprite(&tile_atlas_image, 13, 32, 4);
|
||||
}
|
||||
|
||||
|
|
@ -59,13 +60,6 @@ namespace LightGame
|
|||
|
||||
switch (spawn.type)
|
||||
{
|
||||
case GameObjectType::StaticPlatform:
|
||||
obj.collider = RenderData::BoundingBox2D(
|
||||
Math::Vector2Int(0, 0), Math::Vector2Int(ts, ts));
|
||||
obj.solid = true;
|
||||
obj.sprite = &spr_platform;
|
||||
break;
|
||||
|
||||
case GameObjectType::LightPlatform:
|
||||
obj.collider = RenderData::BoundingBox2D(
|
||||
Math::Vector2Int(0, 0), Math::Vector2Int(ts, ts));
|
||||
|
|
@ -90,14 +84,6 @@ namespace LightGame
|
|||
obj.sprite = &spr_door_closed;
|
||||
break;
|
||||
|
||||
case GameObjectType::Hazard:
|
||||
obj.collider = RenderData::BoundingBox2D(
|
||||
Math::Vector2Int(0, ts / 2),
|
||||
Math::Vector2Int(ts, ts));
|
||||
obj.solid = false;
|
||||
obj.sprite = &spr_spike;
|
||||
break;
|
||||
|
||||
case GameObjectType::Collectible:
|
||||
obj.collider = RenderData::BoundingBox2D(
|
||||
Math::Vector2Int(ts / 4, ts / 4),
|
||||
|
|
@ -117,12 +103,27 @@ namespace LightGame
|
|||
level.add_checkpoint(Checkpoint(obj.position.x, obj.position.y));
|
||||
obj.sprite = &spr_checkpoint;
|
||||
}
|
||||
else if (spawn.trigger_action == TriggerAction::LevelComplete)
|
||||
{
|
||||
obj.sprite = &spr_checkpoint;
|
||||
}
|
||||
break;
|
||||
|
||||
case GameObjectType::Player:
|
||||
obj.collider = RenderData::BoundingBox2D(
|
||||
Math::Vector2Int(8, 0), Math::Vector2Int(24, 32));
|
||||
obj.solid = false;
|
||||
{
|
||||
GameObject marker;
|
||||
marker.type = GameObjectType::Trigger;
|
||||
marker.position = obj.position;
|
||||
marker.collider = RenderData::BoundingBox2D(
|
||||
Math::Vector2Int(0, 0), Math::Vector2Int(ts, ts));
|
||||
marker.solid = false;
|
||||
marker.trigger_action = TriggerAction::None;
|
||||
marker.sprite = &spr_flag;
|
||||
level.add_object(marker);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
|
|
@ -137,4 +138,9 @@ namespace LightGame
|
|||
level.add_tile_light_rule(data.tile_light_rules[i]);
|
||||
}
|
||||
}
|
||||
|
||||
const RenderData::Sprite& LevelLoader::flag_sprite()
|
||||
{
|
||||
return spr_flag;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
#include "Level.h"
|
||||
#include "LevelData.h"
|
||||
#include "Sprite.h"
|
||||
|
||||
namespace LightGame
|
||||
{
|
||||
|
|
@ -9,5 +10,6 @@ namespace LightGame
|
|||
{
|
||||
public:
|
||||
static void load(Level& level, const LevelData& data);
|
||||
static const RenderData::Sprite& flag_sprite();
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,8 +11,8 @@ namespace LightGame
|
|||
if (tilemap.tiles != nullptr && tilemap.atlas != nullptr)
|
||||
{
|
||||
ctx.draw_tilemap(tilemap,
|
||||
0, 0,
|
||||
camera.get_screen_width(), camera.get_screen_height(),
|
||||
0, kTopBlackBorder,
|
||||
camera.get_screen_width(), camera.get_screen_height() - kTopBlackBorder,
|
||||
camera.get_x(), camera.get_y());
|
||||
}
|
||||
|
||||
|
|
@ -32,7 +32,7 @@ namespace LightGame
|
|||
}
|
||||
|
||||
const int32_t screen_x = obj.position.x - camera.get_x();
|
||||
const int32_t screen_y = obj.position.y - camera.get_y();
|
||||
const int32_t screen_y = obj.position.y - camera.get_y() + kTopBlackBorder;
|
||||
|
||||
if (screen_x + sprite->width < 0 || screen_x > camera.get_screen_width() ||
|
||||
screen_y + sprite->height < 0 || screen_y > camera.get_screen_height())
|
||||
|
|
@ -83,12 +83,11 @@ namespace LightGame
|
|||
|
||||
const RenderData::BoundingBox2D world = obj.get_world_collider();
|
||||
const int32_t sx = world.min.x - camera.get_x();
|
||||
const int32_t sy = world.min.y - camera.get_y();
|
||||
const int32_t sy = world.min.y - camera.get_y() + kTopBlackBorder;
|
||||
const int32_t w = world.max.x - world.min.x;
|
||||
const int32_t h = world.max.y - world.min.y;
|
||||
|
||||
RenderData::Color color = RenderData::Color::Green();
|
||||
if (obj.type == GameObjectType::Hazard) color = RenderData::Color::Red();
|
||||
if (obj.type == GameObjectType::LightPlatform) color = RenderData::Color(255, 255, 0, 255);
|
||||
if (obj.type == GameObjectType::ShadowPlatform) color = RenderData::Color(128, 0, 255, 255);
|
||||
if (obj.type == GameObjectType::Door) color = RenderData::Color(0, 255, 255, 255);
|
||||
|
|
|
|||
|
|
@ -19,6 +19,8 @@ namespace LightGame
|
|||
class LevelRenderer
|
||||
{
|
||||
public:
|
||||
static const int32_t kTopBlackBorder = 24;
|
||||
|
||||
void draw(Core::DrawContext& ctx, const Level& level, const Camera2D& camera,
|
||||
const LightEffectSystem& light_system, uint16_t light_level);
|
||||
|
||||
|
|
|
|||
|
|
@ -9,6 +9,13 @@
|
|||
#include "Level1Data.h"
|
||||
#include "Level2Data.h"
|
||||
#include "Level3Data.h"
|
||||
#include "Level4Data.h"
|
||||
#include "Level5Data.h"
|
||||
#include "Level6Data.h"
|
||||
#include "Level7Data.h"
|
||||
#include "Level8Data.h"
|
||||
#include "Level9Data.h"
|
||||
#include "Level10Data.h"
|
||||
#include "sprite_atlas.h"
|
||||
#include "Tilemap.h"
|
||||
#include <cassert>
|
||||
|
|
@ -20,9 +27,16 @@ namespace LightGame
|
|||
const LevelData* kLevels[] = {
|
||||
&Level1::data,
|
||||
&Level2::data,
|
||||
&Level3::data
|
||||
&Level3::data,
|
||||
&Level4::data,
|
||||
&Level5::data,
|
||||
&Level6::data,
|
||||
&Level7::data,
|
||||
&Level8::data,
|
||||
&Level9::data,
|
||||
&Level10::data
|
||||
};
|
||||
const int32_t kLevelCount = 3;
|
||||
const int32_t kLevelCount = 10;
|
||||
}
|
||||
|
||||
LightGameApp::LightGameApp(
|
||||
|
|
@ -325,6 +339,8 @@ namespace LightGame
|
|||
break;
|
||||
}
|
||||
}
|
||||
auto& mut_objects = level_.get_all_objects();
|
||||
mut_objects[i].sprite = &LevelLoader::flag_sprite();
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -40,7 +40,16 @@ namespace LightGame
|
|||
}
|
||||
|
||||
const uint16_t tile_id = tilemap.get_tile(tile_x, tile_y);
|
||||
return tile_id != 0 && tile_id != RenderData::Tilemap::EmptyTile;
|
||||
if (tile_id == 0 || tile_id == RenderData::Tilemap::EmptyTile)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
// spike(4) 是杀伤物,不参与碰撞 — 玩家须能踩进去触发 check_death
|
||||
if (tile_id == 4)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void Physics2D::collide_tilemap(GameObject& obj, const RenderData::Tilemap& tilemap,
|
||||
|
|
@ -90,6 +99,7 @@ namespace LightGame
|
|||
obj.position.x += overlap_right;
|
||||
}
|
||||
obj.velocity.x = 0;
|
||||
sub_pixel_x_ = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -103,6 +113,7 @@ namespace LightGame
|
|||
obj.position.y += overlap_bottom;
|
||||
obj.velocity.y = 0;
|
||||
}
|
||||
sub_pixel_y_ = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -207,13 +218,17 @@ namespace LightGame
|
|||
const int32_t ts = tilemap.tile_w;
|
||||
const int32_t tile_left = feet.min.x / ts;
|
||||
const int32_t tile_right = (feet.max.x - 1) / ts;
|
||||
const int32_t tile_y = feet.min.y / ts;
|
||||
const int32_t tile_top = feet.min.y / ts;
|
||||
const int32_t tile_bottom = (feet.max.y - 1) / ts;
|
||||
|
||||
for (int32_t tx = tile_left; tx <= tile_right; ++tx)
|
||||
for (int32_t ty = tile_top; ty <= tile_bottom; ++ty)
|
||||
{
|
||||
if (is_tile_solid(tilemap, tx, tile_y))
|
||||
for (int32_t tx = tile_left; tx <= tile_right; ++tx)
|
||||
{
|
||||
return true;
|
||||
if (is_tile_solid(tilemap, tx, ty))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -61,12 +61,15 @@ namespace LightGame
|
|||
update_input(keyboard, pointer, screen_width, screen_height);
|
||||
update_movement(obj, dt_ms);
|
||||
|
||||
physics.apply_gravity(obj, dt_ms);
|
||||
if (!was_grounded_)
|
||||
{
|
||||
physics.apply_gravity(obj, dt_ms);
|
||||
}
|
||||
physics.move_and_collide(obj, level, dt_ms);
|
||||
|
||||
const bool grounded = physics.is_grounded(obj, level);
|
||||
|
||||
if (grounded && !was_grounded_ && obj.velocity.y >= 0)
|
||||
if (grounded && obj.velocity.y >= 0)
|
||||
{
|
||||
obj.velocity.y = 0;
|
||||
}
|
||||
|
|
@ -223,7 +226,7 @@ namespace LightGame
|
|||
}
|
||||
}
|
||||
|
||||
void PlayerController::check_death(GameObject& obj, Level& level)
|
||||
void PlayerController::check_death(GameObject& obj, Level& level)
|
||||
{
|
||||
const LevelBounds& bounds = level.get_bounds();
|
||||
if (obj.position.y > bounds.max_y)
|
||||
|
|
@ -233,25 +236,38 @@ namespace LightGame
|
|||
return;
|
||||
}
|
||||
|
||||
const auto& all_objects = level.get_all_objects();
|
||||
const RenderData::Tilemap& tilemap = level.get_tilemap();
|
||||
const RenderData::BoundingBox2D player_box = obj.get_world_collider();
|
||||
|
||||
for (size_t i = 0; i < all_objects.size(); ++i)
|
||||
if (tilemap.tile_w > 0)
|
||||
{
|
||||
const GameObject& other = all_objects[i];
|
||||
if (other.id == obj.id || !other.active)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
const int32_t ts = tilemap.tile_w;
|
||||
// Spike 视觉高度 14px,仅 tile 底部 14px 才算杀伤区
|
||||
const int32_t kSpikeHitHeight = 14;
|
||||
const int32_t tile_left = player_box.min.x / ts;
|
||||
const int32_t tile_right = (player_box.max.x - 1) / ts;
|
||||
const int32_t tile_top = player_box.min.y / ts;
|
||||
const int32_t tile_bottom = (player_box.max.y - 1) / ts;
|
||||
|
||||
if (other.type == GameObjectType::Hazard)
|
||||
for (int32_t ty = tile_top; ty <= tile_bottom; ++ty)
|
||||
{
|
||||
const RenderData::BoundingBox2D other_box = other.get_world_collider();
|
||||
if (aabb_overlap(player_box, other_box))
|
||||
for (int32_t tx = tile_left; tx <= tile_right; ++tx)
|
||||
{
|
||||
state_ = PlayerState::Dead;
|
||||
respawn_timer_ms_ = 0;
|
||||
return;
|
||||
if (tx < 0 || tx >= tilemap.width || ty < 0 || ty >= tilemap.height)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
const uint16_t tile_id = tilemap.get_tile(tx, ty);
|
||||
if (tile_id == 4)
|
||||
{
|
||||
const int32_t spike_top = (ty + 1) * ts - kSpikeHitHeight;
|
||||
const int32_t spike_bottom = (ty + 1) * ts;
|
||||
if (player_box.max.y > spike_top && player_box.min.y < spike_bottom)
|
||||
{
|
||||
state_ = PlayerState::Dead;
|
||||
respawn_timer_ms_ = 0;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,104 @@
|
|||
#pragma once
|
||||
|
||||
#include "LevelData.h"
|
||||
#include "tile_atlas.h"
|
||||
|
||||
namespace LightGame
|
||||
{
|
||||
namespace Level10
|
||||
{
|
||||
// 终极之塔:综合最终关。三段、两个 Checkpoint。
|
||||
// 段 1:地面尖刺 + 光暗台错位 + 暗门(须切到 0-1023)。
|
||||
// 段 2:阶梯爬升,错位光暗台。
|
||||
// 段 3:顶板走廊,中间光门(1500-2500)+ 高速节奏跳到出口。
|
||||
static const int32_t kMapWidth = 50;
|
||||
static const int32_t kMapHeight = 12;
|
||||
static const int32_t kTileSize = 32;
|
||||
|
||||
// Tile IDs: 0=empty 1=ground_top 2=ground_fill 4=spike
|
||||
// 顶天墙 1:列 18 row 0..8 (仅 row 9 通道给暗门)
|
||||
// 顶天墙 2:列 34 row 0..2 (仅 row 3 通道给中间光门,row 4 是门下挡板)
|
||||
// 阶梯块:(32,4)(33,4) 单格 ground_fill 让玩家从段 2 跳到顶板高度
|
||||
// 顶板:row 4=ground_top, row 5=ground_fill (列 35..49),玩家走在 row 3
|
||||
static const uint16_t tiles[] = {
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
1,1,1,1,4,4,4,4,4,4,4,4,4,4,4,4,4,1,2,1,1,4,4,4,4,4,4,4,4,4,1,1,1,1,1,4,4,4,4,4,4,4,4,4,4,4,4,4,1,1,
|
||||
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
|
||||
};
|
||||
|
||||
static const ObjectSpawn spawns[] = {
|
||||
{ GameObjectType::Player, 2, 9, 0, 0, TriggerAction::None, 0 },
|
||||
|
||||
// === 段 1(4-16)地面尖刺 + 光暗错位 ===
|
||||
{ GameObjectType::ShadowPlatform, 5, 8, 0, 1023, TriggerAction::None, 0 },
|
||||
{ GameObjectType::LightPlatform, 7, 7, 3072, 4095, TriggerAction::None, 0 },
|
||||
{ GameObjectType::ShadowPlatform, 9, 8, 0, 1023, TriggerAction::None, 0 },
|
||||
{ GameObjectType::LightPlatform, 11, 7, 3072, 4095, TriggerAction::None, 0 },
|
||||
{ GameObjectType::ShadowPlatform, 13, 6, 0, 1023, TriggerAction::None, 0 },
|
||||
{ GameObjectType::LightPlatform, 15, 7, 3072, 4095, TriggerAction::None, 0 },
|
||||
|
||||
// 暗门入口(须切到 0-1023)
|
||||
{ GameObjectType::Door, 18, 9, 0, 1023, TriggerAction::None, 0 },
|
||||
|
||||
// Checkpoint 1
|
||||
{ GameObjectType::Trigger, 19, 9, 0, 0, TriggerAction::Checkpoint, 0 },
|
||||
|
||||
// === 段 2(20-31)阶梯爬升,错位切换 ===
|
||||
{ GameObjectType::LightPlatform, 22, 7, 3072, 4095, TriggerAction::None, 0 },
|
||||
{ GameObjectType::ShadowPlatform, 24, 6, 0, 1023, TriggerAction::None, 0 },
|
||||
{ GameObjectType::LightPlatform, 26, 6, 3072, 4095, TriggerAction::None, 0 },
|
||||
{ GameObjectType::ShadowPlatform, 28, 5, 0, 1023, TriggerAction::None, 0 },
|
||||
{ GameObjectType::LightPlatform, 30, 5, 3072, 4095, TriggerAction::None, 0 },
|
||||
// 段 2 顶端阶梯:(32,4)(33,4) 是 tilemap 中的 ground_fill,
|
||||
// 玩家立足 row 3 在阶梯顶部停留并切换光强。
|
||||
|
||||
// 中间光门:玩家走在 row 3,门挡在 (34,3)
|
||||
{ GameObjectType::Door, 34, 3, 1500, 2500, TriggerAction::None, 0 },
|
||||
|
||||
// Checkpoint 2(顶板入口)
|
||||
{ GameObjectType::Trigger, 36, 3, 0, 0, TriggerAction::Checkpoint, 0 },
|
||||
|
||||
// === 段 3(35-49)顶板走廊:浮空台节奏跳 ===
|
||||
{ GameObjectType::ShadowPlatform, 39, 2, 0, 1023, TriggerAction::None, 0 },
|
||||
{ GameObjectType::LightPlatform, 42, 1, 3072, 4095, TriggerAction::None, 0 },
|
||||
{ GameObjectType::ShadowPlatform, 45, 2, 0, 1023, TriggerAction::None, 0 },
|
||||
|
||||
{ GameObjectType::Collectible, 7, 5, 0, 0, TriggerAction::None, 0 },
|
||||
{ GameObjectType::Collectible, 13, 4, 0, 0, TriggerAction::None, 0 },
|
||||
{ GameObjectType::Collectible, 26, 4, 0, 0, TriggerAction::None, 0 },
|
||||
{ GameObjectType::Collectible, 42, 0, 0, 0, TriggerAction::None, 0 },
|
||||
{ GameObjectType::Collectible, 45, 1, 0, 0, TriggerAction::None, 0 },
|
||||
|
||||
{ GameObjectType::Trigger, 49, 3, 0, 0, TriggerAction::LevelComplete, 0 },
|
||||
};
|
||||
|
||||
static const RenderData::Image kAtlas(tile_atlas_pixels, tile_atlas_width, tile_atlas_height);
|
||||
|
||||
static const LevelData data = {
|
||||
tiles,
|
||||
kMapWidth,
|
||||
kMapHeight,
|
||||
kTileSize,
|
||||
&kAtlas,
|
||||
tile_atlas_columns,
|
||||
spawns,
|
||||
25,
|
||||
nullptr,
|
||||
0,
|
||||
Math::Vector2Int(2 * kTileSize, 9 * kTileSize),
|
||||
0,
|
||||
0,
|
||||
kMapWidth * kTileSize,
|
||||
kMapHeight * kTileSize
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
@ -18,7 +18,7 @@ namespace LightGame
|
|||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
1,1,1,1,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,
|
||||
1,1,1,1,4,4,4,4,1,1,4,4,4,4,4,4,1,1,4,4,4,4,4,1,1,
|
||||
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
|
||||
};
|
||||
|
||||
|
|
@ -27,24 +27,7 @@ namespace LightGame
|
|||
{ GameObjectType::Collectible, 5, 5, 0, 0, TriggerAction::None, 0 },
|
||||
{ GameObjectType::Collectible, 10, 4, 0, 0, TriggerAction::None, 0 },
|
||||
{ GameObjectType::Collectible, 18, 5, 0, 0, TriggerAction::None, 0 },
|
||||
{ GameObjectType::Hazard, 12, 6, 0, 0, TriggerAction::None, 0 },
|
||||
{ GameObjectType::Hazard, 13, 6, 0, 0, TriggerAction::None, 0 },
|
||||
{ GameObjectType::Hazard, 14, 6, 0, 0, TriggerAction::None, 0 },
|
||||
{ GameObjectType::Trigger, 23, 5, 0, 0, TriggerAction::LevelComplete, 0 },
|
||||
{ GameObjectType::Hazard, 4, 6, 0, 0, TriggerAction::None, 0 },
|
||||
{ GameObjectType::Hazard, 6, 6, 0, 0, TriggerAction::None, 0 },
|
||||
{ GameObjectType::Hazard, 5, 6, 0, 0, TriggerAction::None, 0 },
|
||||
{ GameObjectType::Hazard, 7, 6, 0, 0, TriggerAction::None, 0 },
|
||||
{ GameObjectType::Hazard, 10, 6, 0, 0, TriggerAction::None, 0 },
|
||||
{ GameObjectType::Hazard, 11, 6, 0, 0, TriggerAction::None, 0 },
|
||||
{ GameObjectType::Hazard, 15, 6, 0, 0, TriggerAction::None, 0 },
|
||||
{ GameObjectType::Hazard, 18, 6, 0, 0, TriggerAction::None, 0 },
|
||||
{ GameObjectType::Hazard, 19, 6, 0, 0, TriggerAction::None, 0 },
|
||||
{ GameObjectType::Hazard, 20, 6, 0, 0, TriggerAction::None, 0 },
|
||||
{ GameObjectType::Hazard, 20, 6, 0, 0, TriggerAction::None, 0 },
|
||||
{ GameObjectType::Hazard, 21, 6, 0, 0, TriggerAction::None, 0 },
|
||||
{ GameObjectType::Hazard, 21, 6, 0, 0, TriggerAction::None, 0 },
|
||||
{ GameObjectType::Hazard, 22, 6, 0, 0, TriggerAction::None, 0 },
|
||||
};
|
||||
|
||||
static const RenderData::Image kAtlas(tile_atlas_pixels, tile_atlas_width, tile_atlas_height);
|
||||
|
|
@ -57,7 +40,7 @@ namespace LightGame
|
|||
&kAtlas,
|
||||
tile_atlas_columns,
|
||||
spawns,
|
||||
22,
|
||||
5,
|
||||
nullptr,
|
||||
0,
|
||||
Math::Vector2Int(64, 160),
|
||||
|
|
|
|||
|
|
@ -0,0 +1,71 @@
|
|||
#pragma once
|
||||
|
||||
#include "LevelData.h"
|
||||
#include "tile_atlas.h"
|
||||
|
||||
namespace LightGame
|
||||
{
|
||||
namespace Level4
|
||||
{
|
||||
// 影中漫步:前半段须降到暗(0-1023)踩 ShadowPlatform,
|
||||
// 中央安全岛切换光强,后半段须升到亮(3072-4095)踩 LightPlatform。
|
||||
// 地面间隙下方是 spike,掉下即死。
|
||||
static const int32_t kMapWidth = 25;
|
||||
static const int32_t kMapHeight = 8;
|
||||
static const int32_t kTileSize = 32;
|
||||
|
||||
// Tile IDs: 0=empty 1=ground_top 2=ground_fill 4=spike
|
||||
static const uint16_t tiles[] = {
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
1,1,1,4,4,4,4,4,4,4,1,1,1,4,4,4,4,4,4,4,4,4,4,1,1,
|
||||
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
|
||||
};
|
||||
|
||||
static const ObjectSpawn spawns[] = {
|
||||
{ GameObjectType::Player, 2, 5, 0, 0, TriggerAction::None, 0 },
|
||||
|
||||
// 前半段:暗时实
|
||||
{ GameObjectType::ShadowPlatform, 4, 4, 0, 1023, TriggerAction::None, 0 },
|
||||
{ GameObjectType::ShadowPlatform, 6, 3, 0, 1023, TriggerAction::None, 0 },
|
||||
{ GameObjectType::ShadowPlatform, 8, 4, 0, 1023, TriggerAction::None, 0 },
|
||||
|
||||
// 后半段:亮时实
|
||||
{ GameObjectType::LightPlatform, 13, 4, 3072, 4095, TriggerAction::None, 0 },
|
||||
{ GameObjectType::LightPlatform, 15, 3, 3072, 4095, TriggerAction::None, 0 },
|
||||
{ GameObjectType::LightPlatform, 17, 2, 3072, 4095, TriggerAction::None, 0 },
|
||||
{ GameObjectType::LightPlatform, 19, 3, 3072, 4095, TriggerAction::None, 0 },
|
||||
{ GameObjectType::LightPlatform, 21, 4, 3072, 4095, TriggerAction::None, 0 },
|
||||
|
||||
{ GameObjectType::Collectible, 6, 2, 0, 0, TriggerAction::None, 0 },
|
||||
{ GameObjectType::Collectible, 11, 5, 0, 0, TriggerAction::None, 0 },
|
||||
{ GameObjectType::Collectible, 17, 1, 0, 0, TriggerAction::None, 0 },
|
||||
|
||||
{ GameObjectType::Trigger, 24, 5, 0, 0, TriggerAction::LevelComplete, 0 },
|
||||
};
|
||||
|
||||
static const RenderData::Image kAtlas(tile_atlas_pixels, tile_atlas_width, tile_atlas_height);
|
||||
|
||||
static const LevelData data = {
|
||||
tiles,
|
||||
kMapWidth,
|
||||
kMapHeight,
|
||||
kTileSize,
|
||||
&kAtlas,
|
||||
tile_atlas_columns,
|
||||
spawns,
|
||||
13,
|
||||
nullptr,
|
||||
0,
|
||||
Math::Vector2Int(2 * kTileSize, 5 * kTileSize),
|
||||
0,
|
||||
0,
|
||||
kMapWidth * kTileSize,
|
||||
kMapHeight * kTileSize
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,73 @@
|
|||
#pragma once
|
||||
|
||||
#include "LevelData.h"
|
||||
#include "tile_atlas.h"
|
||||
|
||||
namespace LightGame
|
||||
{
|
||||
namespace Level5
|
||||
{
|
||||
// 三色之门:必须依次通过 3 道光阈值不同的门。
|
||||
// 实心墙到顶,门是唯一通路。
|
||||
// 门 1:暗门(0-1023)
|
||||
// 门 2:中间光门(1500-2500)
|
||||
// 门 3:亮门(3300-4095)
|
||||
// 每两段间留有空间和提示性平台供玩家手动调光。
|
||||
static const int32_t kMapWidth = 25;
|
||||
static const int32_t kMapHeight = 8;
|
||||
static const int32_t kTileSize = 32;
|
||||
|
||||
// Tile IDs: 0=empty 1=ground_top 2=ground_fill 3=platform 4=spike
|
||||
// 墙体 y=0..4 顶天,y=5 留空作为门的通道,y=6 是 ground_top 玩家立足
|
||||
static const uint16_t tiles[] = {
|
||||
0,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,
|
||||
0,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,
|
||||
0,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,
|
||||
0,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,
|
||||
0,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
1,1,1,1,2,1,1,1,1,1,1,1,2,1,1,1,1,1,1,2,1,1,1,1,1,
|
||||
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
|
||||
};
|
||||
|
||||
static const ObjectSpawn spawns[] = {
|
||||
{ GameObjectType::Player, 2, 5, 0, 0, TriggerAction::None, 0 },
|
||||
|
||||
// 三道门(站立层)
|
||||
{ GameObjectType::Door, 4, 5, 0, 1023, TriggerAction::None, 0 },
|
||||
{ GameObjectType::Door, 12, 5, 1500, 2500, TriggerAction::None, 0 },
|
||||
{ GameObjectType::Door, 19, 5, 3300, 4095, TriggerAction::None, 0 },
|
||||
|
||||
// 中段提示:每段中央放对应阈值的浮空平台
|
||||
{ GameObjectType::ShadowPlatform, 7, 3, 0, 1500, TriggerAction::None, 0 },
|
||||
{ GameObjectType::LightPlatform, 15, 3, 1500, 3000, TriggerAction::None, 0 },
|
||||
{ GameObjectType::LightPlatform, 22, 3, 3000, 4095, TriggerAction::None, 0 },
|
||||
|
||||
{ GameObjectType::Collectible, 7, 2, 0, 0, TriggerAction::None, 0 },
|
||||
{ GameObjectType::Collectible, 15, 2, 0, 0, TriggerAction::None, 0 },
|
||||
{ GameObjectType::Collectible, 22, 2, 0, 0, TriggerAction::None, 0 },
|
||||
|
||||
{ GameObjectType::Trigger, 24, 5, 0, 0, TriggerAction::LevelComplete, 0 },
|
||||
};
|
||||
|
||||
static const RenderData::Image kAtlas(tile_atlas_pixels, tile_atlas_width, tile_atlas_height);
|
||||
|
||||
static const LevelData data = {
|
||||
tiles,
|
||||
kMapWidth,
|
||||
kMapHeight,
|
||||
kTileSize,
|
||||
&kAtlas,
|
||||
tile_atlas_columns,
|
||||
spawns,
|
||||
11,
|
||||
nullptr,
|
||||
0,
|
||||
Math::Vector2Int(2 * kTileSize, 5 * kTileSize),
|
||||
0,
|
||||
0,
|
||||
kMapWidth * kTileSize,
|
||||
kMapHeight * kTileSize
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,79 @@
|
|||
#pragma once
|
||||
|
||||
#include "LevelData.h"
|
||||
#include "tile_atlas.h"
|
||||
|
||||
namespace LightGame
|
||||
{
|
||||
namespace Level6
|
||||
{
|
||||
// 刺影回廊:长尖刺走廊,依靠光感平台跳跃前进。
|
||||
// 光台与暗台错位排列,强迫玩家在跳跃中切换光强。
|
||||
// 此关引入 Checkpoint,约 1/2 处一个救援点。
|
||||
static const int32_t kMapWidth = 35;
|
||||
static const int32_t kMapHeight = 8;
|
||||
static const int32_t kTileSize = 32;
|
||||
|
||||
// Tile IDs: 0=empty 1=ground_top 2=ground_fill 4=spike
|
||||
static const uint16_t tiles[] = {
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
1,1,1,1,4,4,4,4,4,4,4,4,4,4,4,4,1,1,1,1,4,4,4,4,4,4,4,4,4,4,4,4,4,1,1,
|
||||
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
|
||||
};
|
||||
|
||||
static const ObjectSpawn spawns[] = {
|
||||
{ GameObjectType::Player, 2, 5, 0, 0, TriggerAction::None, 0 },
|
||||
|
||||
// 第一段尖刺走廊:暗台与光台错位(玩家须在跳跃间切换)
|
||||
{ GameObjectType::ShadowPlatform, 5, 4, 0, 1023, TriggerAction::None, 0 },
|
||||
{ GameObjectType::LightPlatform, 7, 3, 3072, 4095, TriggerAction::None, 0 },
|
||||
{ GameObjectType::ShadowPlatform, 9, 4, 0, 1023, TriggerAction::None, 0 },
|
||||
{ GameObjectType::LightPlatform, 11, 3, 3072, 4095, TriggerAction::None, 0 },
|
||||
{ GameObjectType::ShadowPlatform, 13, 4, 0, 1023, TriggerAction::None, 0 },
|
||||
{ GameObjectType::LightPlatform, 15, 3, 3072, 4095, TriggerAction::None, 0 },
|
||||
|
||||
// 中段安全岛 + Checkpoint
|
||||
{ GameObjectType::Trigger, 18, 5, 0, 0, TriggerAction::Checkpoint, 0 },
|
||||
|
||||
// 第二段更密:跳跃间隔更短
|
||||
{ GameObjectType::LightPlatform, 21, 4, 3072, 4095, TriggerAction::None, 0 },
|
||||
{ GameObjectType::ShadowPlatform, 23, 3, 0, 1023, TriggerAction::None, 0 },
|
||||
{ GameObjectType::LightPlatform, 25, 4, 3072, 4095, TriggerAction::None, 0 },
|
||||
{ GameObjectType::ShadowPlatform, 27, 3, 0, 1023, TriggerAction::None, 0 },
|
||||
{ GameObjectType::LightPlatform, 29, 4, 3072, 4095, TriggerAction::None, 0 },
|
||||
{ GameObjectType::ShadowPlatform, 31, 4, 0, 1023, TriggerAction::None, 0 },
|
||||
|
||||
{ GameObjectType::Collectible, 7, 2, 0, 0, TriggerAction::None, 0 },
|
||||
{ GameObjectType::Collectible, 13, 3, 0, 0, TriggerAction::None, 0 },
|
||||
{ GameObjectType::Collectible, 25, 3, 0, 0, TriggerAction::None, 0 },
|
||||
{ GameObjectType::Collectible, 31, 3, 0, 0, TriggerAction::None, 0 },
|
||||
|
||||
{ GameObjectType::Trigger, 34, 5, 0, 0, TriggerAction::LevelComplete, 0 },
|
||||
};
|
||||
|
||||
static const RenderData::Image kAtlas(tile_atlas_pixels, tile_atlas_width, tile_atlas_height);
|
||||
|
||||
static const LevelData data = {
|
||||
tiles,
|
||||
kMapWidth,
|
||||
kMapHeight,
|
||||
kTileSize,
|
||||
&kAtlas,
|
||||
tile_atlas_columns,
|
||||
spawns,
|
||||
19,
|
||||
nullptr,
|
||||
0,
|
||||
Math::Vector2Int(2 * kTileSize, 5 * kTileSize),
|
||||
0,
|
||||
0,
|
||||
kMapWidth * kTileSize,
|
||||
kMapHeight * kTileSize
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,80 @@
|
|||
#pragma once
|
||||
|
||||
#include "LevelData.h"
|
||||
#include "tile_atlas.h"
|
||||
|
||||
namespace LightGame
|
||||
{
|
||||
namespace Level7
|
||||
{
|
||||
// 暗井攀登:垂直关卡,从底部 Z 字形爬升到顶部。
|
||||
// 光台与暗台交替排布,玩家须不断切换光强。
|
||||
// 中段 Checkpoint 作为安全点,顶部出口落在左侧。
|
||||
static const int32_t kMapWidth = 25;
|
||||
static const int32_t kMapHeight = 12;
|
||||
static const int32_t kTileSize = 32;
|
||||
|
||||
// Tile IDs: 0=empty 1=ground_top 2=ground_fill 4=spike
|
||||
// 顶台在 y=1(ground_top) / y=2(ground_fill),玩家从下方跳到顶台上方 y=0 站立。
|
||||
static const uint16_t tiles[] = {
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
|
||||
};
|
||||
|
||||
static const ObjectSpawn spawns[] = {
|
||||
{ GameObjectType::Player, 2, 9, 0, 0, TriggerAction::None, 0 },
|
||||
|
||||
// Z 字形阶梯:右上方向爬升
|
||||
{ GameObjectType::LightPlatform, 5, 9, 3072, 4095, TriggerAction::None, 0 },
|
||||
{ GameObjectType::ShadowPlatform, 8, 8, 0, 1023, TriggerAction::None, 0 },
|
||||
{ GameObjectType::LightPlatform, 11, 7, 3072, 4095, TriggerAction::None, 0 },
|
||||
{ GameObjectType::ShadowPlatform, 14, 6, 0, 1023, TriggerAction::None, 0 },
|
||||
|
||||
// 中段 Checkpoint:站在亮光实台上
|
||||
{ GameObjectType::LightPlatform, 17, 6, 3072, 4095, TriggerAction::None, 0 },
|
||||
{ GameObjectType::Trigger, 17, 5, 0, 0, TriggerAction::Checkpoint, 0 },
|
||||
|
||||
// 上半段回头向左爬
|
||||
{ GameObjectType::LightPlatform, 14, 4, 3072, 4095, TriggerAction::None, 0 },
|
||||
{ GameObjectType::ShadowPlatform, 11, 3, 0, 1023, TriggerAction::None, 0 },
|
||||
{ GameObjectType::LightPlatform, 8, 3, 3072, 4095, TriggerAction::None, 0 },
|
||||
|
||||
{ GameObjectType::Collectible, 8, 7, 0, 0, TriggerAction::None, 0 },
|
||||
{ GameObjectType::Collectible, 17, 4, 0, 0, TriggerAction::None, 0 },
|
||||
{ GameObjectType::Collectible, 11, 2, 0, 0, TriggerAction::None, 0 },
|
||||
|
||||
// 顶部出口:站在顶台 ground_top 上方
|
||||
{ GameObjectType::Trigger, 7, 0, 0, 0, TriggerAction::LevelComplete, 0 },
|
||||
};
|
||||
|
||||
static const RenderData::Image kAtlas(tile_atlas_pixels, tile_atlas_width, tile_atlas_height);
|
||||
|
||||
static const LevelData data = {
|
||||
tiles,
|
||||
kMapWidth,
|
||||
kMapHeight,
|
||||
kTileSize,
|
||||
&kAtlas,
|
||||
tile_atlas_columns,
|
||||
spawns,
|
||||
14,
|
||||
nullptr,
|
||||
0,
|
||||
Math::Vector2Int(2 * kTileSize, 9 * kTileSize),
|
||||
0,
|
||||
0,
|
||||
kMapWidth * kTileSize,
|
||||
kMapHeight * kTileSize
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,85 @@
|
|||
#pragma once
|
||||
|
||||
#include "LevelData.h"
|
||||
#include "tile_atlas.h"
|
||||
|
||||
namespace LightGame
|
||||
{
|
||||
namespace Level8
|
||||
{
|
||||
// 双相迷宫:节奏跳 + 门锁 + 长尖刺综合关。
|
||||
// 三段式:spike 节奏 → 双门夹道(须切换光强通过)→ 长走廊高速切换。
|
||||
// Checkpoint 设在第二段后。
|
||||
static const int32_t kMapWidth = 40;
|
||||
static const int32_t kMapHeight = 10;
|
||||
static const int32_t kTileSize = 32;
|
||||
|
||||
// Tile IDs: 0=empty 1=ground_top 2=ground_fill 4=spike
|
||||
// 列 14 与列 24 是顶天实墙(仅留 y=7 一格作为门通道)
|
||||
static const uint16_t tiles[] = {
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
1,1,1,1,4,4,4,4,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,2,1,1,4,4,4,4,4,4,4,4,4,4,4,1,1,
|
||||
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
|
||||
};
|
||||
|
||||
static const ObjectSpawn spawns[] = {
|
||||
{ GameObjectType::Player, 2, 7, 0, 0, TriggerAction::None, 0 },
|
||||
|
||||
// 第一段:spike 4-7 节奏跳
|
||||
{ GameObjectType::LightPlatform, 5, 6, 3072, 4095, TriggerAction::None, 0 },
|
||||
{ GameObjectType::ShadowPlatform, 7, 5, 0, 1023, TriggerAction::None, 0 },
|
||||
|
||||
// 第一道暗门(站立层 14,7):暗光通过
|
||||
{ GameObjectType::Door, 14, 7, 0, 1023, TriggerAction::None, 0 },
|
||||
|
||||
// 中段安全区 15-23
|
||||
{ GameObjectType::Collectible, 18, 6, 0, 0, TriggerAction::None, 0 },
|
||||
|
||||
// 第二道亮门(24,7):亮光通过
|
||||
{ GameObjectType::Door, 24, 7, 3072, 4095, TriggerAction::None, 0 },
|
||||
|
||||
// Checkpoint:刚过亮门
|
||||
{ GameObjectType::Trigger, 25, 7, 0, 0, TriggerAction::Checkpoint, 0 },
|
||||
|
||||
// 第三段:spike 27-37 高速切换
|
||||
{ GameObjectType::LightPlatform, 28, 6, 3072, 4095, TriggerAction::None, 0 },
|
||||
{ GameObjectType::ShadowPlatform, 30, 5, 0, 1023, TriggerAction::None, 0 },
|
||||
{ GameObjectType::LightPlatform, 32, 6, 3072, 4095, TriggerAction::None, 0 },
|
||||
{ GameObjectType::ShadowPlatform, 34, 5, 0, 1023, TriggerAction::None, 0 },
|
||||
{ GameObjectType::LightPlatform, 36, 6, 3072, 4095, TriggerAction::None, 0 },
|
||||
|
||||
{ GameObjectType::Collectible, 5, 4, 0, 0, TriggerAction::None, 0 },
|
||||
{ GameObjectType::Collectible, 30, 3, 0, 0, TriggerAction::None, 0 },
|
||||
{ GameObjectType::Collectible, 36, 4, 0, 0, TriggerAction::None, 0 },
|
||||
|
||||
{ GameObjectType::Trigger, 39, 7, 0, 0, TriggerAction::LevelComplete, 0 },
|
||||
};
|
||||
|
||||
static const RenderData::Image kAtlas(tile_atlas_pixels, tile_atlas_width, tile_atlas_height);
|
||||
|
||||
static const LevelData data = {
|
||||
tiles,
|
||||
kMapWidth,
|
||||
kMapHeight,
|
||||
kTileSize,
|
||||
&kAtlas,
|
||||
tile_atlas_columns,
|
||||
spawns,
|
||||
16,
|
||||
nullptr,
|
||||
0,
|
||||
Math::Vector2Int(2 * kTileSize, 7 * kTileSize),
|
||||
0,
|
||||
0,
|
||||
kMapWidth * kTileSize,
|
||||
kMapHeight * kTileSize
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,93 @@
|
|||
#pragma once
|
||||
|
||||
#include "LevelData.h"
|
||||
#include "tile_atlas.h"
|
||||
|
||||
namespace LightGame
|
||||
{
|
||||
namespace Level9
|
||||
{
|
||||
// 光暗交界:综合挑战。三段,每段一个 Checkpoint。
|
||||
// 段 1:尖刺 + 阶梯,引入"中间光"门(1500-2500)。
|
||||
// 段 2:长尖刺走廊,光台暗台双层错位。
|
||||
// 段 3:双门夹道(暗 → 亮),失误重置回上一 CP。
|
||||
static const int32_t kMapWidth = 45;
|
||||
static const int32_t kMapHeight = 10;
|
||||
static const int32_t kTileSize = 32;
|
||||
|
||||
// Tile IDs: 0=empty 1=ground_top 2=ground_fill 4=spike
|
||||
// 列 16、列 30 是顶天实墙(仅 y=7 通道)
|
||||
static const uint16_t tiles[] = {
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
1,1,1,1,4,4,4,4,4,4,4,4,1,1,1,1,2,1,4,4,4,4,4,4,4,4,4,4,4,1,2,1,4,4,4,4,1,1,4,4,4,4,4,1,1,
|
||||
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
|
||||
};
|
||||
|
||||
static const ObjectSpawn spawns[] = {
|
||||
{ GameObjectType::Player, 2, 7, 0, 0, TriggerAction::None, 0 },
|
||||
|
||||
// === 段 1(4-15) ===
|
||||
{ GameObjectType::LightPlatform, 5, 6, 3072, 4095, TriggerAction::None, 0 },
|
||||
{ GameObjectType::ShadowPlatform, 7, 5, 0, 1023, TriggerAction::None, 0 },
|
||||
{ GameObjectType::LightPlatform, 9, 6, 3072, 4095, TriggerAction::None, 0 },
|
||||
{ GameObjectType::ShadowPlatform, 11, 5, 0, 1023, TriggerAction::None, 0 },
|
||||
|
||||
// 中间光门(须把光强调到中间区间)
|
||||
{ GameObjectType::Door, 16, 7, 1500, 2500, TriggerAction::None, 0 },
|
||||
|
||||
// 段 1 末尾 Checkpoint
|
||||
{ GameObjectType::Trigger, 17, 7, 0, 0, TriggerAction::Checkpoint, 0 },
|
||||
|
||||
// === 段 2(18-29)双层错位 ===
|
||||
{ GameObjectType::LightPlatform, 19, 6, 3072, 4095, TriggerAction::None, 0 },
|
||||
{ GameObjectType::ShadowPlatform, 21, 5, 0, 1023, TriggerAction::None, 0 },
|
||||
{ GameObjectType::LightPlatform, 23, 4, 3072, 4095, TriggerAction::None, 0 },
|
||||
{ GameObjectType::ShadowPlatform, 25, 5, 0, 1023, TriggerAction::None, 0 },
|
||||
{ GameObjectType::LightPlatform, 27, 6, 3072, 4095, TriggerAction::None, 0 },
|
||||
|
||||
// 段 2 末尾 Checkpoint
|
||||
{ GameObjectType::Trigger, 29, 7, 0, 0, TriggerAction::Checkpoint, 0 },
|
||||
|
||||
// === 段 3(30-43)双门夹道 ===
|
||||
{ GameObjectType::Door, 30, 7, 0, 1023, TriggerAction::None, 0 },
|
||||
{ GameObjectType::ShadowPlatform, 33, 6, 0, 1023, TriggerAction::None, 0 },
|
||||
{ GameObjectType::LightPlatform, 35, 5, 3072, 4095, TriggerAction::None, 0 },
|
||||
{ GameObjectType::LightPlatform, 39, 6, 3072, 4095, TriggerAction::None, 0 },
|
||||
{ GameObjectType::ShadowPlatform, 41, 5, 0, 1023, TriggerAction::None, 0 },
|
||||
|
||||
{ GameObjectType::Collectible, 9, 4, 0, 0, TriggerAction::None, 0 },
|
||||
{ GameObjectType::Collectible, 23, 2, 0, 0, TriggerAction::None, 0 },
|
||||
{ GameObjectType::Collectible, 35, 3, 0, 0, TriggerAction::None, 0 },
|
||||
{ GameObjectType::Collectible, 41, 3, 0, 0, TriggerAction::None, 0 },
|
||||
|
||||
{ GameObjectType::Trigger, 44, 7, 0, 0, TriggerAction::LevelComplete, 0 },
|
||||
};
|
||||
|
||||
static const RenderData::Image kAtlas(tile_atlas_pixels, tile_atlas_width, tile_atlas_height);
|
||||
|
||||
static const LevelData data = {
|
||||
tiles,
|
||||
kMapWidth,
|
||||
kMapHeight,
|
||||
kTileSize,
|
||||
&kAtlas,
|
||||
tile_atlas_columns,
|
||||
spawns,
|
||||
23,
|
||||
nullptr,
|
||||
0,
|
||||
Math::Vector2Int(2 * kTileSize, 7 * kTileSize),
|
||||
0,
|
||||
0,
|
||||
kMapWidth * kTileSize,
|
||||
kMapHeight * kTileSize
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
@ -16,7 +16,7 @@ namespace
|
|||
{
|
||||
GameObject obj;
|
||||
assert(obj.id == 0);
|
||||
assert(obj.type == GameObjectType::StaticPlatform);
|
||||
assert(obj.type == GameObjectType::Player);
|
||||
assert(obj.position.x == 0);
|
||||
assert(obj.position.y == 0);
|
||||
assert(obj.velocity.x == 0);
|
||||
|
|
@ -48,7 +48,7 @@ namespace
|
|||
assert(level.object_count() == 0);
|
||||
|
||||
GameObject platform;
|
||||
platform.type = GameObjectType::StaticPlatform;
|
||||
platform.type = GameObjectType::Collectible;
|
||||
platform.position = Math::Vector2Int(0, 400);
|
||||
uint32_t id1 = level.add_object(platform);
|
||||
assert(id1 == 1);
|
||||
|
|
@ -63,7 +63,7 @@ namespace
|
|||
|
||||
const GameObject* found = level.get_object(id1);
|
||||
assert(found != nullptr);
|
||||
assert(found->type == GameObjectType::StaticPlatform);
|
||||
assert(found->type == GameObjectType::Collectible);
|
||||
assert(found->id == 1);
|
||||
|
||||
const GameObject* not_found = level.get_object(999);
|
||||
|
|
@ -88,7 +88,7 @@ namespace
|
|||
Level level;
|
||||
|
||||
GameObject platform;
|
||||
platform.type = GameObjectType::StaticPlatform;
|
||||
platform.type = GameObjectType::Collectible;
|
||||
level.add_object(platform);
|
||||
|
||||
GameObject light_plat;
|
||||
|
|
@ -99,15 +99,15 @@ namespace
|
|||
player.type = GameObjectType::Player;
|
||||
level.add_object(player);
|
||||
|
||||
auto platforms = level.get_objects_by_type(GameObjectType::StaticPlatform);
|
||||
auto platforms = level.get_objects_by_type(GameObjectType::Collectible);
|
||||
assert(platforms.size() == 1);
|
||||
assert(platforms[0]->type == GameObjectType::StaticPlatform);
|
||||
assert(platforms[0]->type == GameObjectType::Collectible);
|
||||
|
||||
auto players = level.get_objects_by_type(GameObjectType::Player);
|
||||
assert(players.size() == 1);
|
||||
|
||||
auto hazards = level.get_objects_by_type(GameObjectType::Hazard);
|
||||
assert(hazards.size() == 0);
|
||||
auto doors = level.get_objects_by_type(GameObjectType::Door);
|
||||
assert(doors.size() == 0);
|
||||
}
|
||||
|
||||
void TestLevelQueryRegion()
|
||||
|
|
@ -115,14 +115,14 @@ namespace
|
|||
Level level;
|
||||
|
||||
GameObject obj1;
|
||||
obj1.type = GameObjectType::StaticPlatform;
|
||||
obj1.type = GameObjectType::Collectible;
|
||||
obj1.position = Math::Vector2Int(100, 100);
|
||||
obj1.collider = RenderData::BoundingBox2D(
|
||||
Math::Vector2Int(0, 0), Math::Vector2Int(32, 32));
|
||||
level.add_object(obj1);
|
||||
|
||||
GameObject obj2;
|
||||
obj2.type = GameObjectType::StaticPlatform;
|
||||
obj2.type = GameObjectType::Collectible;
|
||||
obj2.position = Math::Vector2Int(500, 500);
|
||||
obj2.collider = RenderData::BoundingBox2D(
|
||||
Math::Vector2Int(0, 0), Math::Vector2Int(32, 32));
|
||||
|
|
@ -226,7 +226,7 @@ namespace
|
|||
level.set_bounds(LevelBounds(0, 0, 800, 600));
|
||||
|
||||
GameObject ground;
|
||||
ground.type = GameObjectType::StaticPlatform;
|
||||
ground.type = GameObjectType::Collectible;
|
||||
ground.position = Math::Vector2Int(0, 400);
|
||||
ground.collider = RenderData::BoundingBox2D(
|
||||
Math::Vector2Int(0, 0), Math::Vector2Int(800, 32));
|
||||
|
|
@ -249,7 +249,8 @@ namespace
|
|||
void TestOneWayPlatform()
|
||||
{
|
||||
Level level;
|
||||
level.set_bounds(LevelBounds(0, 0, 800, 600));
|
||||
LevelBounds bounds(0, 0, 800, 600);
|
||||
level.set_bounds(bounds);
|
||||
|
||||
GameObject platform;
|
||||
platform.type = GameObjectType::LightPlatform;
|
||||
|
|
@ -349,17 +350,17 @@ namespace
|
|||
{
|
||||
LightEffectSystem system;
|
||||
|
||||
GameObject platform;
|
||||
platform.type = GameObjectType::StaticPlatform;
|
||||
platform.solid = true;
|
||||
GameObject collectible;
|
||||
collectible.type = GameObjectType::Collectible;
|
||||
collectible.solid = true;
|
||||
|
||||
GameObject hazard;
|
||||
hazard.type = GameObjectType::Hazard;
|
||||
hazard.solid = true;
|
||||
GameObject trigger;
|
||||
trigger.type = GameObjectType::Trigger;
|
||||
trigger.solid = true;
|
||||
|
||||
std::vector<GameObject> objects;
|
||||
objects.push_back(platform);
|
||||
objects.push_back(hazard);
|
||||
objects.push_back(collectible);
|
||||
objects.push_back(trigger);
|
||||
|
||||
system.update(objects, 0);
|
||||
assert(objects[0].solid == true);
|
||||
|
|
@ -380,7 +381,7 @@ namespace
|
|||
|
||||
const ObjectSpawn spawns[] = {
|
||||
{ GameObjectType::Player, 1, 1, 0, 0, TriggerAction::None, 0 },
|
||||
{ GameObjectType::StaticPlatform, 0, 2, 0, 0, TriggerAction::None, 0 },
|
||||
{ GameObjectType::Collectible, 0, 2, 0, 0, TriggerAction::None, 0 },
|
||||
};
|
||||
|
||||
const LevelData data = {
|
||||
|
|
|
|||
Loading…
Reference in New Issue