Files
nxnative-easy/dm/host/dm_rift.h
T
seedds d1b17080ed smbw-mobile: Mac host boots Mario Wonder v0 into its frame loop
Generic host, gfx and tools taken from d2r-mobile (MIT), with the D2R
gameplay, diagnostics and Blizzard/Granny/movie layers removed.

- hle_hid.c: generic standard-controller layer (all Npad styles)
- hle_sdk16.c: newer-SDK oe/time/pl/vsync/diag hooks
- hle_offline.c: offline stubs for prepo/ldn/socket/ssl/nifm/nsd/friends/ngc/err
- hle_fs.c, hle_account.c: SDK 16 overloads
- loader.c: unreferenced forced hooks only logged (DM_FORCE_STRICT=1 aborts)
- NVN: API 55.15, 13 newer names, ~45 state-only functions, tex_t packed
  to 0x80 (Mario allocates NVNtexture as 0x80; 0x88 corrupted the heap)

Frontier: null read at main+0x64763c inside the frame loop.
2026-10-12 22:04:20 +08:00

29 lines
4.2 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 秘境爬塔(dm_rift.c)
// Rift tower climb (dm_rift.c)
#pragma once
#include <stdint.h>
typedef struct { int tier; float progress; int secs_left, done, guardian, inc; } dm_rift_hud_t;
void dm_rift_tick(uint64_t G, uint64_t player, uint8_t *main_base); // 服务端拍(diag.c) | Server tick (diag.c)
void dm_rift_c2s(uint64_t G, const uint8_t *pkt, uint32_t len); // 客户端命令(点门) | Client command (door tap)
void dm_rift_client_pump(uint8_t *main_base); // 取手柄处(dm_world.c):认击杀、新刷出的怪 | At the controller sampling point (dm_world.c): recognize kills and newly spawned monsters
int dm_rift_hud(dm_rift_hud_t *out); // 前端每帧:秘境进行中 / 刚完成返回 1 | Front end every frame: returns 1 while a rift is in progress / just completed
int dm_rift_active(void);
void dm_rift_gamble_vals(int best, uint32_t *uniq, uint32_t *set); // 赌博加成:最高通关层 → 地狱暗金 / 套装值(十万分之一);best < 1 = 0(不加) | Gambling bonus: highest cleared level -> Hell unique / set values (in units of 1/100000); best < 1 = 0 (no bonus)
typedef struct { int menu, best, unlock, def; unsigned ms; int clvl, tier, done, secs_left; float progress; int inc; } dm_rift_menu_t; // menu 1 = 选层页、2 = 继续 / 放弃;inc = 0 且 done = 超时打倒守护者(没过关) | menu 1 = level selection page, 2 = continue / quit; inc = 0 with done set = Guardian defeated after time ran out (not passed)
int dm_rift_cleared_any(void); // 这个角色打通过任意一层秘境没有(限时内过关才算:最高通关层 ≥ 1)——技能硬点上限的解锁条件(dm_actions.c) | has this character cleared any Greater Rift level (only clears within the time limit count: highest cleared level ≥ 1): the unlock condition for the hard skill point cap (dm_actions.c)
int dm_rift_merc_unlocked(void); // 佣兵新装备位解没解锁(秘境最高通关 ≥ 10 层) | Whether the new mercenary equipment slots are unlocked (highest rift level cleared ≥ 10)
void dm_rift_merc_locked_hint(void); // 没解锁时的提示「通关地狱后打通秘境10层解锁」 | Hint when not unlocked: 「通关地狱后打通秘境10层解锁」(Clear Greater Rift Level 10 to unlock)
int dm_rift_tier_level(int tier, int clvl); // 这一层的怪物等级(9 层以下 0 = 不改) | this level's monster level (below level 9, 0 = unchanged)
int dm_rift_tier_hp_x10(int tier, int clvl); // 这一层怪物生命总倍率 ×10(相对地狱 /players 1 的原生怪) | total life multiplier of this level's monsters ×10 (relative to a native Hell /players 1 monster)
int dm_rift_menu(dm_rift_menu_t *out); // 前端每帧:要显示的页(0 = 不显示) | Front end every frame: the page to show (0 = none)
void dm_rift_menu_close(void); // 关闭(右上角 X) | Close (the X at the top right)
void dm_rift_menu_start(int tier); // 选层页「开始」 | Level selection page 「开始」(Enter Rift)
void dm_rift_menu_continue(void); // 「继续」 | 「继续」(Continue)
void dm_rift_menu_abandon(void);
int dm_rift_menu_pending(void); int dm_rift_menu_seq(void); int dm_rift_swept(uint32_t id); // 「放弃」(放弃后服务端再打开选层页) | 「放弃」(Quit) (after abandoning, the server opens the level selection page again)
void dm_rift_menu_peek(dm_rift_menu_t *out); // 没有要开的页时也取页面读数(编年史「秘境」页) | Fetch the page readout even when there is no page to open (chronicle 「秘境」(Rift) page)
void dm_rift_ui_pump(void); // dm_rift_ui.c:游戏主线程每帧(dm_actions.c) | dm_rift_ui.c: every frame on the game main thread (dm_actions.c)
void dm_rift_ui_on_uimsg(const char *cat, const char *act, const char *arg); // 界面消息(diag.c) | UI messages (diag.c)
typedef struct { int best, clears, deaths, tier, unlock; unsigned ms; int fast[101]; } dm_rift_stats_t;
int dm_rift_stats(dm_rift_stats_t *out); // 积分牌「秘境」页读数(侧文件),没有返回 0 | Kill board 「秘境」(Rift) page readout (sidecar file); returns 0 if there is none