102 Patches: Detours to the Rescue
C reference for DttR maintainers and modders.
Loading...
Searching...
No Matches
dttr_util_unstable.h
Go to the documentation of this file.
1
7
8#ifndef DTTR_UTIL_UNSTABLE_H
9#define DTTR_UTIL_UNSTABLE_H
10
11#include <stdbool.h>
12#include <stddef.h>
13#include <stdint.h>
14
15#include <dttr_core.h>
16#ifndef DTTR_SDK_ENABLE_UNSTABLE
17#error "Define DTTR_SDK_ENABLE_UNSTABLE before including dttr_util_unstable.h"
18#endif
19#include <dttr_pcdogs.h>
20
21#ifndef DTTR_UTIL_API
22#define DTTR_UTIL_API extern
23#endif
24
25#ifdef __cplusplus
26extern "C" {
27#endif
28
39
44 const void *ptr_
45) {
46 return (const DTTR_PCDOGS_T_Level_RuntimeData *)ptr_;
47}
48
59
63static inline bool DTTR_Util_SameActor(
64 const DTTR_PCDOGS_T_Actor_State *left,
65 const DTTR_PCDOGS_T_Actor_State *right
66) {
67 return left != NULL && left == right;
68}
69
72#define DTTR_UTIL_PKG_DEFAULT_TOC_COUNT 138u
73
93
106
117
126
128
130 const DTTR_Util_PkgVisit *visit,
131 void *userdata
132);
133
135 const DTTR_Core_Context *ctx,
136 int32_t toc_index,
137 const DTTR_PCDOGS_T_PKG_TOCEntry *entry,
138 void *userdata,
139 void **out_entry,
140 size_t *out_size,
141 DTTR_Util_PkgVisitStatus *out_status
142);
143
145 const DTTR_Core_Context *ctx,
146 int32_t toc_index,
147 const DTTR_PCDOGS_T_PKG_TOCEntry *entry,
148 void *entry_data,
149 void *userdata
150);
151
168
181
190
192
194 const DTTR_Core_Context *ctx,
195 const DTTR_Util_PkgWalkOptions *options,
196 DTTR_Util_PkgVisitor visitor,
197 void *userdata
198);
199
201
203 const DTTR_Util_PkgVisit *visit
204) {
205 return visit && visit->kind == DTTR_UTIL_PKG_VISIT_TOC_ENTRY
206 ? (const DTTR_PCDOGS_T_PKG_TOCEntry *)visit->ptr
207 : NULL;
208}
209
210static inline const void *DTTR_Util_PkgVisit_AsLoadedEntry(
211 const DTTR_Util_PkgVisit *visit
212) {
213 return visit && visit->kind == DTTR_UTIL_PKG_VISIT_LOADED_ENTRY ? visit->ptr : NULL;
214}
215
217 const DTTR_Util_PkgVisit *visit
218) {
219 return visit && visit->kind == DTTR_UTIL_PKG_VISIT_LEVEL_RUNTIME_DATA
220 ? (const DTTR_PCDOGS_T_Level_RuntimeData *)visit->ptr
221 : NULL;
222}
223
225 const DTTR_Util_PkgVisit *visit
226) {
227 return visit && visit->kind == DTTR_UTIL_PKG_VISIT_MESH_NODE
228 ? (const DTTR_PCDOGS_T_Mesh_Node *)visit->ptr
229 : NULL;
230}
231
233 const DTTR_Util_PkgVisit *visit
234) {
235 return visit && visit->kind == DTTR_UTIL_PKG_VISIT_MATERIAL_ENTRY
236 ? (const DTTR_PCDOGS_T_Material_Entry *)visit->ptr
237 : NULL;
238}
239
241 const DTTR_Util_PkgVisit *visit
242) {
243 return visit && visit->kind == DTTR_UTIL_PKG_VISIT_SCENE_NODE
244 ? (const DTTR_PCDOGS_T_Scene_Node *)visit->ptr
245 : NULL;
246}
247
249 const DTTR_Util_PkgVisit *visit
250) {
251 return visit && visit->kind == DTTR_UTIL_PKG_VISIT_SPRITE_ENTRY
253 : NULL;
254}
255
257 const DTTR_Util_PkgVisit *visit
258) {
259 return visit && visit->kind == DTTR_UTIL_PKG_VISIT_COLLISION_SHAPE
260 ? (const DTTR_PCDOGS_T_PKG_CollisionShape *)visit->ptr
261 : NULL;
262}
263
264#ifdef __cplusplus
265}
266#endif
267
268#endif // DTTR_UTIL_UNSTABLE_H
void void * ctx
DTTR_Graphics_COM_DirectDrawSurface7 DWORD flags void NULL
DTTR_PCDOGS_API const struct dttr_pcdogs_function_accessor_Entity_GetActiveActorFromList *const DTTR_PCDOGS_F_Entity_GetActiveActorFromList
Accessor object for Entity_GetActiveActorFromList.
bool DTTR_ResultOK(DTTR_Result result)
Definition core.c:78
DTTR_Util_PkgVisitAction(* DTTR_Util_PkgVisitor)(const DTTR_Util_PkgVisit *visit, void *userdata)
static const void * DTTR_Util_PkgVisit_AsLoadedEntry(const DTTR_Util_PkgVisit *visit)
DTTR_UTIL_API const char * DTTR_Util_PkgVisitStatusName(DTTR_Util_PkgVisitStatus status)
static bool DTTR_Util_SameActor(const DTTR_PCDOGS_T_Actor_State *left, const DTTR_PCDOGS_T_Actor_State *right)
DTTR_Util_PkgVisitKind
Object kind reported to a package visitor.
@ DTTR_UTIL_PKG_VISIT_TOC_ENTRY
@ DTTR_UTIL_PKG_VISIT_SCENE_NODE
@ DTTR_UTIL_PKG_VISIT_LEVEL_RUNTIME_DATA
@ DTTR_UTIL_PKG_VISIT_SPRITE_ENTRY
@ DTTR_UTIL_PKG_VISIT_MESH_NODE
@ DTTR_UTIL_PKG_VISIT_LOADED_ENTRY
@ DTTR_UTIL_PKG_VISIT_COLLISION_SHAPE
@ DTTR_UTIL_PKG_VISIT_UNSUPPORTED
@ DTTR_UTIL_PKG_VISIT_MATERIAL_ENTRY
static const DTTR_PCDOGS_T_Level_RuntimeData * DTTR_Util_LevelDataAsRuntimeDataConst(const void *ptr_)
static DTTR_PCDOGS_T_Actor_State * DTTR_Util_GetActiveActor(const DTTR_Core_Context *ctx)
static const DTTR_PCDOGS_T_Level_RuntimeData * DTTR_Util_PkgVisit_AsLevelRuntimeData(const DTTR_Util_PkgVisit *visit)
DTTR_Util_PkgVisitAction
Visitor return value controlling traversal below the current visit.
@ DTTR_UTIL_PKG_VISIT_LOAD_AND_RECURSE
@ DTTR_UTIL_PKG_VISIT_RECURSE
@ DTTR_UTIL_PKG_VISIT_SKIP_SUBTREE
@ DTTR_UTIL_PKG_VISIT_STOP
@ DTTR_UTIL_PKG_VISIT_CONTINUE
DTTR_UTIL_API DTTR_Util_PkgWalkResult DTTR_Util_PkgWalk(const DTTR_Core_Context *ctx, const DTTR_Util_PkgWalkOptions *options, DTTR_Util_PkgVisitor visitor, void *userdata)
static const DTTR_PCDOGS_T_PKG_CollisionShape * DTTR_Util_PkgVisit_AsCollisionShape(const DTTR_Util_PkgVisit *visit)
static const DTTR_PCDOGS_T_Scene_Node * DTTR_Util_PkgVisit_AsSceneNode(const DTTR_Util_PkgVisit *visit)
bool(* DTTR_Util_PkgLoadEntryFn)(const DTTR_Core_Context *ctx, int32_t toc_index, const DTTR_PCDOGS_T_PKG_TOCEntry *entry, void *userdata, void **out_entry, size_t *out_size, DTTR_Util_PkgVisitStatus *out_status)
static const DTTR_PCDOGS_T_Mesh_Node * DTTR_Util_PkgVisit_AsMeshNode(const DTTR_Util_PkgVisit *visit)
#define DTTR_UTIL_API
static const DTTR_PCDOGS_T_Graphics_SpriteContext * DTTR_Util_PkgVisit_AsSpriteContext(const DTTR_Util_PkgVisit *visit)
DTTR_UTIL_API DTTR_Util_PkgWalkOptions DTTR_Util_PkgWalk_DefaultOptions()
static DTTR_PCDOGS_T_Level_RuntimeData * DTTR_Util_LevelDataAsRuntimeDataMutable(void *ptr_)
static const DTTR_PCDOGS_T_PKG_TOCEntry * DTTR_Util_PkgVisit_AsTOCEntry(const DTTR_Util_PkgVisit *visit)
DTTR_Util_PkgWalkDomain
Package subtree families that the walker can expose.
@ DTTR_UTIL_PKG_DOMAIN_ALL_KNOWN
@ DTTR_UTIL_PKG_DOMAIN_TOC
@ DTTR_UTIL_PKG_DOMAIN_COLLISION
@ DTTR_UTIL_PKG_DOMAIN_SPRITE
@ DTTR_UTIL_PKG_DOMAIN_MESH
@ DTTR_UTIL_PKG_DOMAIN_ENTRY
@ DTTR_UTIL_PKG_DOMAIN_LEVEL
@ DTTR_UTIL_PKG_DOMAIN_SCENE
@ DTTR_UTIL_PKG_DOMAIN_KNOWN_CHILDREN
@ DTTR_UTIL_PKG_DOMAIN_MATERIAL
void(* DTTR_Util_PkgFreeEntryFn)(const DTTR_Core_Context *ctx, int32_t toc_index, const DTTR_PCDOGS_T_PKG_TOCEntry *entry, void *entry_data, void *userdata)
static const DTTR_PCDOGS_T_Material_Entry * DTTR_Util_PkgVisit_AsMaterialEntry(const DTTR_Util_PkgVisit *visit)
DTTR_Util_PkgVisitStatus
Per-visit and whole-walk status values.
@ DTTR_UTIL_PKG_STATUS_UNRESOLVED_SYMBOL
@ DTTR_UTIL_PKG_STATUS_OK
@ DTTR_UTIL_PKG_STATUS_INVALID_ARGUMENT
@ DTTR_UTIL_PKG_STATUS_LOAD_FAILED
@ DTTR_UTIL_PKG_STATUS_DECODE_UNSUPPORTED
@ DTTR_UTIL_PKG_STATUS_UNKNOWN_ENTRY_KIND
@ DTTR_UTIL_PKG_STATUS_BOUNDS_INVALID
Concrete runtime level-data block carried by Level_Data* APIs.
Package TOC entry used by the package table. Size-lane aliases share this storage.
A single callback frame. Pointers are visit-lifetime unless documented by PCDOGS.
DTTR_Util_PkgVisitKind kind
const void * loaded_entry_base
const DTTR_Util_PkgVisit * parent
DTTR_Util_PkgVisitStatus status
const DTTR_PCDOGS_T_PKG_TOCEntry * toc_entry
Walker configuration. Use DTTR_Util_PkgWalk_DefaultOptions() for defaults.
const DTTR_PCDOGS_T_PKG_TOCEntry * toc_entries
DTTR_Util_PkgLoadEntryFn load_entry
DTTR_Util_PkgFreeEntryFn free_entry
Aggregate walk result. Non-fatal per-entry failures keep traversal moving.
DTTR_Util_PkgVisitStatus status