Review dude move/run functions

This commit is contained in:
Alexander Batalov 2022-12-23 15:13:05 +03:00
parent a48d744cde
commit f4775775b8
2 changed files with 20 additions and 26 deletions

View File

@ -302,9 +302,6 @@ static bool gAnimationInStop = false;
// 0x510728 // 0x510728
static bool _anim_in_bk = false; static bool _anim_in_bk = false;
// 0x51072C
static int _lastDestination = -2;
// 0x510730 // 0x510730
static unsigned int _last_time_ = 0; static unsigned int _last_time_ = 0;
@ -2953,7 +2950,7 @@ static void _object_anim_compact()
} }
// 0x417FFC // 0x417FFC
int _check_move(int* a1) int _check_move(int* actionPointsPtr)
{ {
int x; int x;
int y; int y;
@ -2965,15 +2962,14 @@ int _check_move(int* a1)
} }
if (isInCombat()) { if (isInCombat()) {
if (*a1 != -1) { if (*actionPointsPtr != -1) {
if (gPressedPhysicalKeys[SDL_SCANCODE_RCTRL] || gPressedPhysicalKeys[SDL_SCANCODE_LCTRL]) { if (gPressedPhysicalKeys[SDL_SCANCODE_RCTRL] || gPressedPhysicalKeys[SDL_SCANCODE_LCTRL]) {
int hitMode; int hitMode;
bool aiming; bool aiming;
interfaceGetCurrentHitMode(&hitMode, &aiming); interfaceGetCurrentHitMode(&hitMode, &aiming);
int v6 = itemGetActionPointCost(gDude, hitMode, aiming); *actionPointsPtr -= itemGetActionPointCost(gDude, hitMode, aiming);
*a1 = *a1 - v6; if (*actionPointsPtr <= 0) {
if (*a1 <= 0) {
return -1; return -1;
} }
} }
@ -2988,36 +2984,34 @@ int _check_move(int* a1)
} }
// 0x4180B4 // 0x4180B4
int _dude_move(int a1) int _dude_move(int actionPoints)
{ {
int v1; // 0x51072C
int tile = _check_move(&v1); static int lastDestination = -2;
int tile = _check_move(&actionPoints);
if (tile == -1) { if (tile == -1) {
return -1; return -1;
} }
if (_lastDestination == tile) { if (lastDestination == tile) {
return _dude_run(a1); return _dude_run(actionPoints);
} }
_lastDestination = tile; lastDestination = tile;
reg_anim_begin(ANIMATION_REQUEST_RESERVED); reg_anim_begin(ANIMATION_REQUEST_RESERVED);
animationRegisterMoveToTile(gDude, tile, gDude->elevation, a1, 0); animationRegisterMoveToTile(gDude, tile, gDude->elevation, actionPoints, 0);
return reg_anim_end(); return reg_anim_end();
} }
// 0x41810C // 0x41810C
int _dude_run(int a1) int _dude_run(int actionPoints)
{ {
int a4; int tile = _check_move(&actionPoints);
int tile_num; if (tile == -1) {
a4 = a1;
tile_num = _check_move(&a4);
if (tile_num == -1) {
return -1; return -1;
} }
@ -3027,7 +3021,7 @@ int _dude_run(int a1)
reg_anim_begin(ANIMATION_REQUEST_RESERVED); reg_anim_begin(ANIMATION_REQUEST_RESERVED);
animationRegisterRunToTile(gDude, tile_num, gDude->elevation, a4, 0); animationRegisterRunToTile(gDude, tile, gDude->elevation, actionPoints, 0);
return reg_anim_end(); return reg_anim_end();
} }

View File

@ -148,9 +148,9 @@ int pathfinderFindPath(Object* object, int from, int to, unsigned char* rotation
int _make_straight_path(Object* a1, int from, int to, STRUCT_530014_28* pathNodes, Object** a5, int a6); int _make_straight_path(Object* a1, int from, int to, STRUCT_530014_28* pathNodes, Object** a5, int a6);
int _make_straight_path_func(Object* a1, int from, int to, STRUCT_530014_28* a4, Object** a5, int a6, Object* (*a7)(Object*, int, int)); int _make_straight_path_func(Object* a1, int from, int to, STRUCT_530014_28* a4, Object** a5, int a6, Object* (*a7)(Object*, int, int));
void _object_animate(); void _object_animate();
int _check_move(int* a1); int _check_move(int* actionPointsPtr);
int _dude_move(int a1); int _dude_move(int actionPoints);
int _dude_run(int a1); int _dude_run(int actionPoints);
void _dude_fidget(); void _dude_fidget();
void _dude_stand(Object* obj, int rotation, int fid); void _dude_stand(Object* obj, int rotation, int fid);
void _dude_standup(Object* a1); void _dude_standup(Object* a1);