14 static bool isRequired(zenkit::DaedalusScript& vm);
19 auto menuMain()
const -> std::string_view;
22 void tick(uint64_t dt);
33 struct memory_instance :
public zenkit::DaedalusTransientInstance {
34 explicit memory_instance(
DirectMemory &owner, ptr32_t address) : owner(owner), address(address) {}
36 void set_int(zenkit::DaedalusSymbol
const& sym, uint16_t index, std::int32_t value)
override;
37 std::int32_t get_int(zenkit::DaedalusSymbol
const& sym, uint16_t index)
const override;
39 void set_float(zenkit::DaedalusSymbol
const& sym, uint16_t index,
float value)
override;
40 float get_float(zenkit::DaedalusSymbol
const& sym, uint16_t index)
const override;
42 void set_string(zenkit::DaedalusSymbol
const& sym, uint16_t index, std::string_view value)
override;
43 const std::string& get_string(zenkit::DaedalusSymbol
const& sym, uint16_t index)
const override;
54 zenkit::DaedalusVm& vm;
58 uint32_t versionHint = 504628679;
62 char menuName[17] = {};
63 float spawnRange = 1000;
65 ptr32_t oGame_Pointer = 0;
66 ptr32_t gameman_Ptr = 0;
67 ptr32_t zFactory_Ptr = 0;
68 ptr32_t fontMan_Ptr = 0;
69 ptr32_t focusList[6] = {};
71 ptr32_t scriptVariables = 0;
72 ptr32_t scriptSymbols = 0;
74 void setupFunctionTable();
75 void setupIkarusLoops();
76 void setupEngineMemory();
77 void setupEngineText();
79 auto repeat(zenkit::DaedalusVm& vm) -> zenkit::DaedalusNakedCall;
80 auto while_(zenkit::DaedalusVm& vm) -> zenkit::DaedalusNakedCall;
81 auto mem_goto(zenkit::DaedalusVm& vm) -> zenkit::DaedalusNakedCall;
82 void loop_trap(zenkit::DaedalusSymbol* i);
84 uint32_t traceBackExpression(zenkit::DaedalusVm& vm, uint32_t pc);
85 auto findSymbolByAddress(uint32_t addr) ->
const zenkit::DaedalusSymbol*;
88 zenkit::DaedalusSymbol* i =
nullptr;
91 std::unordered_map<uint32_t,LPayload> loopPayload;
92 std::unordered_map<uint32_t,uint32_t> loopBacktrack;
93 std::vector<const zenkit::DaedalusSymbol*> symbolsByAddress;
96 void memoryCallback(
zCParser& p, std::memory_order ord);
97 void memoryCallback(ScriptVar& v, uint32_t index, std::memory_order ord);
98 void memoryCallback(
zCPar_Symbol& s, uint32_t index, std::memory_order ord);
99 void memAssignString(
zString& str, std::string_view cstr);
100 void memFromString(std::string& dst,
const zString& str);
103 void memPrintstacktraceImplementation();
104 void memSendToSpy(
int cat, std::string_view msg);
105 void memReplaceFunc(zenkit::DaedalusFunction dest, zenkit::DaedalusFunction func);
107 ptr32_t ASMINT_InternalStack = 0;
108 ptr32_t ASMINT_CallTarget = 0;
110 void ASMINT_CallMyExternal();
113 void setupMemoryFunctions();
114 auto mem_ptrtoinst(ptr32_t address) -> std::shared_ptr<zenkit::DaedalusInstance>;
115 int mem_insttoptr(
int index);
116 auto _takeref(zenkit::DaedalusVm& vm) -> zenkit::DaedalusNakedCall;
117 int mem_readint (
int address);
118 void mem_writeint (
int address,
int val);
119 void mem_copybytes (
int src,
int dst,
int size);
120 std::string mem_readstring (
int address);
121 auto mem_readstatarr (zenkit::DaedalusVm& vm) -> zenkit::DaedalusNakedCall;
122 auto mem_writestatarr (zenkit::DaedalusVm& vm) -> zenkit::DaedalusNakedCall;
124 int mem_alloc (
int amount);
125 int mem_alloc (
int amount,
const char* comment);
126 void mem_free (
int address);
127 int mem_realloc(
int address,
int oldsz,
int size);
130 void setupDirectFunctions();
131 int mem_getfuncidbyoffset(
int off);
132 void mem_assigninst (
int index,
int ptr);
134 void directCall(zenkit::DaedalusVm& vm, zenkit::DaedalusSymbol& func);
135 auto mem_callbyid (zenkit::DaedalusVm& vm) -> zenkit::DaedalusNakedCall;
136 auto mem_callbyptr(zenkit::DaedalusVm& vm) -> zenkit::DaedalusNakedCall;
138 auto memint_stackpushint (zenkit::DaedalusVm& vm) -> zenkit::DaedalusNakedCall;
140 auto memint_stackpushinst(zenkit::DaedalusVm& vm) -> zenkit::DaedalusNakedCall;
141 auto memint_stackpushvar (zenkit::DaedalusVm& vm) -> zenkit::DaedalusNakedCall;
143 auto memint_popstring (zenkit::DaedalusVm& vm) -> zenkit::DaedalusNakedCall;
145 auto mem_popintresult (zenkit::DaedalusVm& vm) -> zenkit::DaedalusNakedCall;
146 auto mem_popstringresult(zenkit::DaedalusVm& vm) -> zenkit::DaedalusNakedCall;
147 auto mem_popinstresult (zenkit::DaedalusVm& vm) -> zenkit::DaedalusNakedCall;
150 void setupMathFunctions();
151 static int mkf(
int v);
152 static int truncf(
int v);
153 static int roundf(
int v);
154 static int addf(
int a,
int b);
155 static int subf(
int a,
int b);
156 static int mulf(
int a,
int b);
157 static int divf(
int a,
int b);
160 void setupStringsFunctions();
162 void setupWinapiFunctions();
163 void setupUtilityFunctions();
164 void setupHookEngine();
165 void setupzCParserFunctions();
166 void setupInitFileFunctions();
168 void setupUiFunctions();
169 void setupFontFunctions();
170 void tickUi(uint64_t dt);
172 void setupNpcFunctions();
173 void setupWorldFunctions();