parent
9c6286f94a
commit
393d89f8c4
|
@ -269,6 +269,8 @@ target_sources(${EXECUTABLE_NAME} PUBLIC
|
|||
"src/settings.h"
|
||||
"src/sfall_config.cc"
|
||||
"src/sfall_config.h"
|
||||
"src/sfall_opcodes.cc"
|
||||
"src/sfall_opcodes.h"
|
||||
)
|
||||
|
||||
if(IOS)
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
#include "reaction.h"
|
||||
#include "scripts.h"
|
||||
#include "settings.h"
|
||||
#include "sfall_opcodes.h"
|
||||
#include "skill.h"
|
||||
#include "stat.h"
|
||||
#include "svga.h"
|
||||
|
@ -4834,6 +4835,7 @@ static void opGetPcStat(Program* program)
|
|||
// 0x45CDD4
|
||||
void _intExtraClose_()
|
||||
{
|
||||
sfallOpcodesExit();
|
||||
}
|
||||
|
||||
// 0x45CDD8
|
||||
|
@ -5020,6 +5022,8 @@ void _initIntExtra()
|
|||
interpreterRegisterOpcode(0x8153, opTerminateCombat); // op_terminate_combat
|
||||
interpreterRegisterOpcode(0x8154, opDebugMessage); // op_debug_msg
|
||||
interpreterRegisterOpcode(0x8155, opCritterStopAttacking); // op_critter_stop_attacking
|
||||
|
||||
sfallOpcodesInit();
|
||||
}
|
||||
|
||||
// NOTE: Uncollapsed 0x45D878.
|
||||
|
|
|
@ -0,0 +1,97 @@
|
|||
#include "sfall_opcodes.h"
|
||||
|
||||
#include "art.h"
|
||||
#include "interface.h"
|
||||
#include "interpreter.h"
|
||||
#include "mouse.h"
|
||||
#include "svga.h"
|
||||
|
||||
namespace fallout {
|
||||
|
||||
// active_hand
|
||||
static void opGetCurrentHand(Program* program)
|
||||
{
|
||||
programStackPushInteger(program, interfaceGetCurrentHand());
|
||||
}
|
||||
|
||||
// get_mouse_x
|
||||
static void opGetMouseX(Program* program)
|
||||
{
|
||||
int x;
|
||||
int y;
|
||||
mouseGetPosition(&x, &y);
|
||||
programStackPushInteger(program, x);
|
||||
}
|
||||
|
||||
// get_mouse_y
|
||||
static void opGetMouseY(Program* program)
|
||||
{
|
||||
int x;
|
||||
int y;
|
||||
mouseGetPosition(&x, &y);
|
||||
programStackPushInteger(program, y);
|
||||
}
|
||||
|
||||
// get_screen_width
|
||||
static void opGetScreenWidth(Program* program)
|
||||
{
|
||||
programStackPushInteger(program, screenGetWidth());
|
||||
}
|
||||
|
||||
// get_screen_height
|
||||
static void opGetScreenHeight(Program* program)
|
||||
{
|
||||
programStackPushInteger(program, screenGetHeight());
|
||||
}
|
||||
|
||||
// atoi
|
||||
static void opParseInt(Program* program)
|
||||
{
|
||||
const char* string = programStackPopString(program);
|
||||
programStackPushInteger(program, static_cast<int>(strtol(string, nullptr, 0)));
|
||||
}
|
||||
|
||||
// strlen
|
||||
static void opGetStringLength(Program* program)
|
||||
{
|
||||
const char* string = programStackPopString(program);
|
||||
programStackPushInteger(program, static_cast<int>(strlen(string)));
|
||||
}
|
||||
|
||||
// round
|
||||
static void opRound(Program* program)
|
||||
{
|
||||
float floatValue = programStackPopFloat(program);
|
||||
int integerValue = static_cast<int>(floatValue);
|
||||
float mod = floatValue - static_cast<float>(integerValue);
|
||||
if (abs(mod) >= 0.5) {
|
||||
integerValue += mod > 0.0 ? 1 : -1;
|
||||
}
|
||||
programStackPushInteger(program, integerValue);
|
||||
}
|
||||
|
||||
// art_exists
|
||||
static void opArtExists(Program* program)
|
||||
{
|
||||
int fid = programStackPopInteger(program);
|
||||
programStackPushInteger(program, artExists(fid));
|
||||
}
|
||||
|
||||
void sfallOpcodesInit()
|
||||
{
|
||||
interpreterRegisterOpcode(0x8193, opGetCurrentHand);
|
||||
interpreterRegisterOpcode(0x821C, opGetMouseX);
|
||||
interpreterRegisterOpcode(0x821D, opGetMouseY);
|
||||
interpreterRegisterOpcode(0x8220, opGetScreenWidth);
|
||||
interpreterRegisterOpcode(0x8221, opGetScreenHeight);
|
||||
interpreterRegisterOpcode(0x8237, opParseInt);
|
||||
interpreterRegisterOpcode(0x824F, opGetStringLength);
|
||||
interpreterRegisterOpcode(0x8267, opRound);
|
||||
interpreterRegisterOpcode(0x8274, opArtExists);
|
||||
}
|
||||
|
||||
void sfallOpcodesExit()
|
||||
{
|
||||
}
|
||||
|
||||
} // namespace fallout
|
|
@ -0,0 +1,11 @@
|
|||
#ifndef FALLOUT_SFALL_OPCODES_H_
|
||||
#define FALLOUT_SFALL_OPCODES_H_
|
||||
|
||||
namespace fallout {
|
||||
|
||||
void sfallOpcodesInit();
|
||||
void sfallOpcodesExit();
|
||||
|
||||
} // namespace fallout
|
||||
|
||||
#endif /* FALLOUT_SFALL_OPCODES_H_ */
|
Loading…
Reference in New Issue