mirror of
https://github.com/fallout2-ce/fallout2-ce.git
synced 2026-07-27 16:47:11 -07:00
* actions: refactor code around death anim selection * add Death Anim hook from sfall * AI review fixes * Rename constants for force field PID/FID
167 lines
4.9 KiB
Plaintext
167 lines
4.9 KiB
Plaintext
#include "../sfall/sfall.h"
|
|
#include "../sfall/dik.h"
|
|
#include "../sfall/define_lite.h"
|
|
#include "../test_utils.h"
|
|
|
|
#include "../sfall/lib.arrays.h"
|
|
|
|
variable last_game_mode;
|
|
variable gamemodechange_assertions_enabled := false;
|
|
variable gamemodechange_reported := false;
|
|
|
|
procedure test_with_args(variable arg1) begin
|
|
display_msg("test_w_arg" + arg1);
|
|
end
|
|
|
|
procedure test_wo_args begin
|
|
display_msg("test_wo_args");
|
|
end
|
|
|
|
procedure tohit_handler begin
|
|
variable
|
|
attacker := get_sfall_arg_at(1),
|
|
target := get_sfall_arg_at(2),
|
|
chanceRaw := get_sfall_arg_at(7);
|
|
|
|
display_msg(string_format("tohit %s -> %s (%d)", obj_name(attacker), obj_name(target), chanceRaw));
|
|
if (attacker == dude_obj) then
|
|
set_sfall_return(100);
|
|
else if (target == dude_obj) then
|
|
set_sfall_return(0);
|
|
|
|
end
|
|
|
|
procedure useobj_handler begin
|
|
variable
|
|
user := get_sfall_arg,
|
|
item := get_sfall_arg;
|
|
|
|
display_msg(string_format("useobj %s (%s)", obj_name(user), obj_name(item)));
|
|
set_sfall_return(2);
|
|
end
|
|
|
|
procedure useobjon_handler begin
|
|
variable args := get_sfall_args,
|
|
target := args[0],
|
|
user := args[1],
|
|
item := args[2];
|
|
|
|
display_msg(string_format("useobjon %s (%s) -> %s [len: %d]", obj_name(user), obj_name(item), obj_name(target), len_array(args)));
|
|
set_sfall_return(0);
|
|
end
|
|
|
|
procedure keypress_handler begin
|
|
variable
|
|
pressed := get_sfall_arg_at(0),
|
|
key := get_sfall_arg_at(1);
|
|
|
|
display_msg(string_format("keypress %d dx: %d", pressed, key));
|
|
|
|
if (not pressed) then return;
|
|
|
|
if (key == DIK_F2) then begin
|
|
display_msg(string_format("tile %d, elev %d, map %d", tile_under_cursor, elevation(dude_obj), cur_map_index));
|
|
end if (key == DIK_F3) then begin
|
|
if (key_pressed(DIK_LCONTROL)) then begin
|
|
variable cr := obj_under_cursor(true, false);
|
|
if (cr) then
|
|
critter_dmg(cr, 1000, DMG_BYPASS_ARMOR);
|
|
end else
|
|
move_to(dude_obj, tile_under_cursor, elevation(dude_obj));
|
|
end
|
|
end
|
|
|
|
procedure gamemodechange_handler begin
|
|
variable
|
|
event_type := get_sfall_arg_at(0),
|
|
previous_mode := get_sfall_arg_at(1),
|
|
current_mode := get_game_mode;
|
|
|
|
display_msg(string_format("gamemodechange event=%d prev=%d cur=%d", event_type, previous_mode, current_mode));
|
|
|
|
if (not gamemodechange_assertions_enabled) then begin
|
|
last_game_mode := current_mode;
|
|
return;
|
|
end
|
|
|
|
call assertTrue("gamemodechange event_type is 0 or 1", event_type == 0 or event_type == 1);
|
|
call assertEquals("gamemodechange previous mode", previous_mode, last_game_mode);
|
|
if (event_type == 0) then
|
|
call assertNotEquals("gamemodechange mode changed", current_mode, previous_mode);
|
|
else if (not gamemodechange_reported) then begin
|
|
gamemodechange_reported := true;
|
|
call report_test_results("hook_gamemodechange");
|
|
end
|
|
|
|
last_game_mode := current_mode;
|
|
end
|
|
|
|
procedure combatdamage_handler begin
|
|
variable args := get_sfall_args;
|
|
|
|
display_msg(sprintf("combatdamage %s", debug_array_str(args)));
|
|
|
|
set_sfall_return(10); // target dmg
|
|
set_sfall_return(5);
|
|
set_sfall_return(0);
|
|
set_sfall_return(DAM_HIT); // attacker flag
|
|
set_sfall_return(10); // knockback
|
|
end
|
|
|
|
|
|
procedure barterprice_handler begin
|
|
variable
|
|
args := get_sfall_args,
|
|
value := args[2],
|
|
caps := args[4],
|
|
offerValue := args[7],
|
|
offerTable := args[6],
|
|
offerCaps := item_caps_total(offerTable);
|
|
|
|
display_msg(sprintf("barterprice %s", debug_array_str(args)));
|
|
|
|
set_sfall_return((value - caps) * 2 + caps);
|
|
set_sfall_return((offerValue - offerCaps) / 2 + offerCaps);
|
|
end
|
|
|
|
#define ANIM_fall_back (20)
|
|
#define ANIM_fall_front (21)
|
|
#define ANIM_fire_dance (33)
|
|
|
|
procedure deathanim_handler begin
|
|
variable
|
|
args := get_sfall_args;
|
|
|
|
display_msg(sprintf("deathanim %s", debug_array_str(args)));
|
|
|
|
set_sfall_return(ANIM_fire_dance);
|
|
end
|
|
|
|
procedure start begin
|
|
//call test_with_args(777);
|
|
display_msg("start hook test");
|
|
|
|
if (not game_loaded) then return;
|
|
|
|
add_obj_to_inven(dude_obj, create_object_sid(40, 0, 0, -1));
|
|
add_obj_to_inven(dude_obj, create_object_sid(76, 0, 0, -1));
|
|
add_obj_to_inven(dude_obj, create_object_sid(85, 0, 0, -1));
|
|
|
|
last_game_mode := get_game_mode;
|
|
gamemodechange_assertions_enabled := true;
|
|
|
|
register_hook_proc(HOOK_KEYPRESS, keypress_handler);
|
|
register_hook_proc(HOOK_TOHIT, tohit_handler);
|
|
register_hook_proc(HOOK_USEOBJ, useobj_handler);
|
|
register_hook_proc(HOOK_USEOBJON, useobjon_handler);
|
|
register_hook_proc(HOOK_GAMEMODECHANGE, gamemodechange_handler);
|
|
register_hook_proc(HOOK_COMBATDAMAGE, combatdamage_handler);
|
|
register_hook_proc(HOOK_BARTERPRICE, barterprice_handler);
|
|
register_hook_proc(HOOK_DEATHANIM2, deathanim_handler);
|
|
end
|
|
|
|
|
|
procedure map_enter_p_proc begin
|
|
display_msg("Map Enter hook test");
|
|
end
|