Edited the description of hook/functions in the previous commit

Rewrote ASM code for tile_under_cursor script function.
This commit is contained in:
NovaRain
2019-12-14 00:43:09 +08:00
parent 0bf9a322c1
commit a68498453c
5 changed files with 26 additions and 34 deletions
+5 -4
View File
@@ -653,10 +653,11 @@ int ret1 - pass -1 to cancel the execution of the handler (only for HOOK_STD
HOOK_TARGETOBJECT (hs_targetobject.int) HOOK_TARGETOBJECT (hs_targetobject.int)
Runs whenever the targeting cursor hovers over something. Runs when the targeting cursor moves over an object, or when the player tries to attack the target object.
You can override the target object or prevent the player from attacking the chosen target.
int arg1 - event type: 0 - when hovering over the target, 1 - when clicking on the target int arg1 - event type: 0 - when the cursor moves over the object, 1 - when trying to attack the target object
int arg2 - 1 if the target is a valid object, 0 otherwise int arg2 - 1 when the target object is valid to attack, 0 otherwise
Obj arg3 - the target object Obj arg3 - the target object
int ret1 - overrides the target object mixed ret1 - overrides the target object, or pass -1 to prevent the player from attacking the object
+4 -4
View File
@@ -690,12 +690,12 @@ optional argument:
> array sfall_func3("objects_in_radius", int tile, int radius, int elevation) > array sfall_func3("objects_in_radius", int tile, int radius, int elevation)
> array sfall_func4("objects_in_radius", int tile, int radius, int elevation, int type) > array sfall_func4("objects_in_radius", int tile, int radius, int elevation, int type)
- returns an array of objects of a type (see OBJ_TYPE_* constants in define_extra.h) within the specified radius from the given tile - returns an array of objects of a type (see OBJ_TYPE_* constants in define_extra.h) within the specified radius from the given tile
- The radius is limited to 50 hexes - passing -1 to the type argument or not specifying it will return all objects within the radius
- passing -1 to the type argument or not specifying it will return all types of objects - the radius is limited to 50 hexes
> int sfall_func2("tile_by_position", int x, int y) > int sfall_func2("tile_by_position", int x, int y)
- returns the tile number at the x/y position relative to the top-left corner of the screen - returns the tile number at the x, y position relative to the top-left corner of the screen
- returns -1 if the position is outside of the screen - if the position is outside of the range of tiles, it will return -1
------------------------ ------------------------
------ MORE INFO ------- ------ MORE INFO -------
+1 -1
View File
@@ -68,7 +68,7 @@
/* /*
Returns the value to the script Returns the value to the script
eax register must contain the script_ptr eax and ebx register must contain the script_ptr
edx register must contain the returned value edx register must contain the returned value
*/ */
#define _RET_VAL_INT __asm { \ #define _RET_VAL_INT __asm { \
+4 -3
View File
@@ -689,7 +689,7 @@ normalPerk:
pop edx; pop edx;
test eax, eax; test eax, eax;
jnz end; jnz end;
// fix gain perks // fix gain perks (add to base stats instead of bonus stats)
cmp edx, PERK_gain_strength_perk; cmp edx, PERK_gain_strength_perk;
jl end; jl end;
cmp edx, PERK_gain_luck_perk; cmp edx, PERK_gain_luck_perk;
@@ -868,7 +868,7 @@ static void PerkSetup() {
if (perksEnable) { if (perksEnable) {
char num[4]; char num[4];
for (int i = 0; i < PERK_count; i++) { for (int i = 0; i < PERK_count; i++) {
_itoa_s(i, num, 10); _itoa(i, num, 10);
if (iniGetString(num, "Name", "", &Name[i * maxNameLen], maxNameLen - 1, perksFile)) { if (iniGetString(num, "Name", "", &Name[i * maxNameLen], maxNameLen - 1, perksFile)) {
perks[i].name = &Name[i * maxNameLen]; perks[i].name = &Name[i * maxNameLen];
} }
@@ -1450,10 +1450,11 @@ void Perks::init() {
FastShotTraitFix(); FastShotTraitFix();
// Disable gain perks for bonus stats
for (int i = STAT_st; i <= STAT_lu; i++) SafeWrite8(GainStatPerks[i][0], (BYTE)GainStatPerks[i][1]); for (int i = STAT_st; i <= STAT_lu; i++) SafeWrite8(GainStatPerks[i][0], (BYTE)GainStatPerks[i][1]);
PerkEngineInit(); PerkEngineInit();
HookCall(0x442729, PerkInitWrapper); // game_init_ HookCall(0x442729, PerkInitWrapper); // game_init_
if (GetConfigString("Misc", "PerksFile", "", &perksFile[2], MAX_PATH - 3)) { if (GetConfigString("Misc", "PerksFile", "", &perksFile[2], MAX_PATH - 3)) {
perksFile[0] = '.'; perksFile[0] = '.';
+12 -22
View File
@@ -937,29 +937,19 @@ end:
void __declspec(naked) op_tile_under_cursor() { void __declspec(naked) op_tile_under_cursor() {
__asm { __asm {
push edx; mov esi, ebx;
push ecx; sub esp, 8;
push ebx; lea edx, [esp];
mov ecx, eax; lea eax, [esp + 4];
sub esp, 8;
lea edx, [esp];
lea eax, [esp+4];
call fo::funcoffs::mouse_get_position_; call fo::funcoffs::mouse_get_position_;
mov ebx, dword ptr ds:[FO_VAR_map_elevation]; pop edx;
mov edx, [esp]; pop eax;
mov eax, [esp+4]; call fo::funcoffs::tile_num_; // ebx - unused
call fo::funcoffs::tile_num_; mov edx, eax; // tile
mov edx, eax; mov ebx, esi;
mov eax, ecx; mov eax, esi;
call fo::funcoffs::interpretPushLong_; _J_RET_VAL_TYPE(VAR_TYPE_INT);
mov eax, ecx; // retn;
mov edx, VAR_TYPE_INT;
call fo::funcoffs::interpretPushShort_;
add esp, 8;
pop ebx;
pop ecx;
pop edx;
retn;
} }
} }