Added reg_anim_animate_and_move script function (closes #497)

This commit is contained in:
NovaRain
2023-12-27 13:18:52 +08:00
parent cfcc66ad1a
commit 7e47607781
7 changed files with 137 additions and 106 deletions
+9 -1
View File
@@ -777,7 +777,9 @@
opcode: 0x825a opcode: 0x825a
- name: reg_anim_animate_and_hide - name: reg_anim_animate_and_hide
detail: void reg_anim_animate_and_hide(ObjectPtr, int animID, int delay) detail: void reg_anim_animate_and_hide(ObjectPtr, int animID, int delay)
doc: Exactly like `reg_anim_animate` but the object will automatically disappear after the last animation frame (but not destroyed). doc: |
Works exactly like `reg_anim_animate` but the object will automatically disappear after the last animation frame (but not destroyed).
- `delay`: delay from the previous animation. A value of -1 will execute the specified animation immediately after the previous one in the sequence ends.
opcode: 0x825b opcode: 0x825b
- name: reg_anim_light - name: reg_anim_light
detail: void reg_anim_light(ObjectPtr, int light, int delay) detail: void reg_anim_light(ObjectPtr, int light, int delay)
@@ -799,6 +801,12 @@
detail: void reg_anim_callback(procedure proc) detail: void reg_anim_callback(procedure proc)
doc: Adds the given procedure to an animation sequence-list and executes it in the registered sequence. doc: Adds the given procedure to an animation sequence-list and executes it in the registered sequence.
opcode: 0x827e opcode: 0x827e
- name: reg_anim_animate_and_move
detail: void reg_anim_animate_and_move(ObjectPtr, int tile, int animID, int delay)
doc: |
Plays the specified animation while simultaneously moving the object to the given tile.
- `delay`: delay from the previous animation. A value of -1 will execute the specified animation immediately after the previous one in the sequence ends.
macro: sfall.h
- name: Art and appearance - name: Art and appearance
items: items:
+1
View File
@@ -364,6 +364,7 @@
#define overlay_clear_rectangle(winType, x, y, w, h) sfall_func6("interface_overlay", winType, 2, x, y, w, h) #define overlay_clear_rectangle(winType, x, y, w, h) sfall_func6("interface_overlay", winType, 2, x, y, w, h)
#define overlay_destroy(winType) sfall_func2("interface_overlay", winType, 0) #define overlay_destroy(winType) sfall_func2("interface_overlay", winType, 0)
#define real_dude_obj sfall_func0("real_dude_obj") #define real_dude_obj sfall_func0("real_dude_obj")
#define reg_anim_animate_and_move(obj, tile, animID, delay) sfall_func4("reg_anim_animate_and_move", obj, tile, animID, delay)
#define remove_all_timer_events sfall_func0("remove_timer_event") #define remove_all_timer_events sfall_func0("remove_timer_event")
#define remove_timer_event(fixedParam) sfall_func1("remove_timer_event", fixedParam) #define remove_timer_event(fixedParam) sfall_func1("remove_timer_event", fixedParam)
#define set_can_rest_on_map(map, elev, value) sfall_func3("set_can_rest_on_map", map, elev, value) #define set_can_rest_on_map(map, elev, value) sfall_func3("set_can_rest_on_map", map, elev, value)
+8 -1
View File
@@ -254,7 +254,8 @@ FUNCTION REFERENCE
----- -----
##### `void reg_anim_animate_and_hide(object obj, int animID, int delay)` ##### `void reg_anim_animate_and_hide(object obj, int animID, int delay)`
- Exactly like `reg_anim_animate` but the object will automatically disappear after the last animation frame (but not destroyed). - Works exactly like `reg_anim_animate` but the object will automatically disappear after the last animation frame (but not destroyed).
- `delay`: delay from the previous animation. A value of -1 will execute the specified animation immediately after the previous one in the sequence ends.
----- -----
##### `void reg_anim_light(object obj, int light, int delay)` ##### `void reg_anim_light(object obj, int light, int delay)`
@@ -1127,6 +1128,12 @@ sfall_funcX metarule functions
**Optional argument:** **Optional argument:**
- `pos`: the position at which to start the search. If negative, it indicates a position starting from the end of the string - `pos`: the position at which to start the search. If negative, it indicates a position starting from the end of the string
----
#### reg_anim_animate_and_move
`void sfall_func4("reg_anim_animate_and_move", object obj, int tile, int animID, int delay)`
- Plays the specified animation while simultaneously moving the object to the given tile
- `delay`: delay from the previous animation. A value of -1 will execute the specified animation immediately after the previous one in the sequence ends
**** ****
_See other documentation files (arrays.md, hookscripts.md) for related functions reference._ _See other documentation files (arrays.md, hookscripts.md) for related functions reference._
+1
View File
@@ -55,6 +55,7 @@ WRAP_WATCOM_FFUNC3(long, obj_new_sid_inst, fo::GameObject*, object, long, sType,
WRAP_WATCOM_FFUNC3(fo::GameObject*, object_under_mouse, long, crSwitch, long, inclDude, long, elevation) WRAP_WATCOM_FFUNC3(fo::GameObject*, object_under_mouse, long, crSwitch, long, inclDude, long, elevation)
WRAP_WATCOM_FFUNC4(void, qsort, void*, base, long, number, long, elSize, DWORD, comp) WRAP_WATCOM_FFUNC4(void, qsort, void*, base, long, number, long, elSize, DWORD, comp)
WRAP_WATCOM_FFUNC4(long, queue_add, long, time, fo::GameObject*, object, void*, data, long, qType) WRAP_WATCOM_FFUNC4(long, queue_add, long, time, fo::GameObject*, object, void*, data, long, qType)
WRAP_WATCOM_FFUNC5(long, register_object_animate_and_move_straight, fo::GameObject*, object, long, tile, long, elevation, long, anim, long, delay)
WRAP_WATCOM_FFUNC4(void, register_object_call, long*, target, long*, source, void*, func, long, delay) WRAP_WATCOM_FFUNC4(void, register_object_call, long*, target, long*, source, void*, func, long, delay)
WRAP_WATCOM_FFUNC4(long, register_object_move_to_object, fo::GameObject*, source, fo::GameObject*, target, long, distance, long, delay) WRAP_WATCOM_FFUNC4(long, register_object_move_to_object, fo::GameObject*, source, fo::GameObject*, target, long, distance, long, delay)
WRAP_WATCOM_FFUNC4(long, register_object_run_to_object, fo::GameObject*, source, fo::GameObject*, target, long, distance, long, delay) WRAP_WATCOM_FFUNC4(long, register_object_run_to_object, fo::GameObject*, source, fo::GameObject*, target, long, distance, long, delay)
@@ -131,6 +131,17 @@ void op_reg_anim_callback(OpcodeContext& ctx) {
); );
} }
void mf_reg_anim_animate_and_move(OpcodeContext& ctx) {
if (!checkCombatMode()) {
auto obj = ctx.arg(0).object();
int tile = ctx.arg(1).rawValue(),
animId = ctx.arg(2).rawValue(),
delay = ctx.arg(3).rawValue();
fo::func::register_object_animate_and_move_straight(obj, tile, obj->elevation, animId, delay);
}
}
void op_explosions_metarule(OpcodeContext& ctx) { void op_explosions_metarule(OpcodeContext& ctx) {
int mode = ctx.arg(0).rawValue(), int mode = ctx.arg(0).rawValue(),
result = ExplosionsMetaruleFunc(mode, ctx.arg(1).rawValue(), ctx.arg(2).rawValue()); result = ExplosionsMetaruleFunc(mode, ctx.arg(1).rawValue(), ctx.arg(2).rawValue());
+2
View File
@@ -40,6 +40,8 @@ void op_reg_anim_take_out(OpcodeContext&);
void op_reg_anim_turn_towards(OpcodeContext&); void op_reg_anim_turn_towards(OpcodeContext&);
void op_reg_anim_callback(OpcodeContext&); void op_reg_anim_callback(OpcodeContext&);
void mf_reg_anim_animate_and_move(OpcodeContext&);
void op_explosions_metarule(OpcodeContext&); void op_explosions_metarule(OpcodeContext&);
void op_art_exists(OpcodeContext&); void op_art_exists(OpcodeContext&);
@@ -131,6 +131,7 @@ static const SfallMetarule metarules[] = {
{"objects_in_radius", mf_objects_in_radius, 3, 4, 0, {ARG_INT, ARG_INT, ARG_INT, ARG_INT}}, {"objects_in_radius", mf_objects_in_radius, 3, 4, 0, {ARG_INT, ARG_INT, ARG_INT, ARG_INT}},
{"outlined_object", mf_outlined_object, 0, 0}, {"outlined_object", mf_outlined_object, 0, 0},
{"real_dude_obj", mf_real_dude_obj, 0, 0}, {"real_dude_obj", mf_real_dude_obj, 0, 0},
{"reg_anim_animate_and_move", mf_reg_anim_animate_and_move, 4, 4, -1, {ARG_OBJECT, ARG_INT, ARG_INT, ARG_INT}},
{"remove_timer_event", mf_remove_timer_event, 0, 1, -1, {ARG_INT}}, {"remove_timer_event", mf_remove_timer_event, 0, 1, -1, {ARG_INT}},
{"set_spray_settings", mf_set_spray_settings, 4, 4, -1, {ARG_INT, ARG_INT, ARG_INT, ARG_INT}}, {"set_spray_settings", mf_set_spray_settings, 4, 4, -1, {ARG_INT, ARG_INT, ARG_INT, ARG_INT}},
{"set_can_rest_on_map", mf_set_rest_on_map, 3, 3, -1, {ARG_INT, ARG_INT, ARG_INT}}, {"set_can_rest_on_map", mf_set_rest_on_map, 3, 3, -1, {ARG_INT, ARG_INT, ARG_INT}},