Add get_combat_free_move for better mod compatibility

This commit is contained in:
phobos2077
2023-06-08 21:36:09 +02:00
parent b317ed71ce
commit 1c34f85789
8 changed files with 40 additions and 6 deletions
+6
View File
@@ -1566,12 +1566,18 @@
- __NOTE:__ refer to the description of **ComputeSpray_\*** settings in ddraw.ini for details of the bullet distribution of burst attacks - __NOTE:__ refer to the description of **ComputeSpray_\*** settings in ddraw.ini for details of the bullet distribution of burst attacks
macro: sfall.h macro: sfall.h
- name:
detail: int get_combat_free_move
doc: Returns current "bonus move" points of a current critter's turn. For NPC's this is always 0, unless changed by set_combat_free_move.
macro: sfall.h
- name: set_combat_free_move - name: set_combat_free_move
detail: void set_combat_free_move(int value) detail: void set_combat_free_move(int value)
doc: | doc: |
Allows changing "bonus move" points (yellow lights on the interface bar) that can only be used for movement, not attacking Allows changing "bonus move" points (yellow lights on the interface bar) that can only be used for movement, not attacking
- Can be called from `HOOK_COMBATTURN` at the start of the turn (will not work on `dude_obj`) - Can be called from `HOOK_COMBATTURN` at the start of the turn (will not work on `dude_obj`)
- Can be called from `HOOK_STDPROCEDURE` with `combat_proc` event (will work on both NPCs and `dude_obj`) - Can be called from `HOOK_STDPROCEDURE` with `combat_proc` event (will work on both NPCs and `dude_obj`)
macro: sfall.h
- name: Car - name: Car
items: items:
@@ -1,6 +1,10 @@
#ifndef COMMAND_EXTRA_H #ifndef COMMAND_EXTRA_H
#define COMMAND_EXTRA_H #define COMMAND_EXTRA_H
#include "define_lite.h"
#include "define_extra.h"
#define ammo_caliber(ammoPid) get_proto_data(ammoPid, PROTO_AM_CALIBER) #define ammo_caliber(ammoPid) get_proto_data(ammoPid, PROTO_AM_CALIBER)
#define obj_name_safe(obj) (obj_name(obj) if obj else "(null)") #define obj_name_safe(obj) (obj_name(obj) if obj else "(null)")
#define get_active_weapon(critter) critter_inven_obj(critter, (2 - active_hand) if critter == dude_obj else INVEN_TYPE_RIGHT_HAND) #define get_active_weapon(critter) critter_inven_obj(critter, (2 - active_hand) if critter == dude_obj else INVEN_TYPE_RIGHT_HAND)
+16 -6
View File
@@ -9,6 +9,8 @@
#ifndef LIB_STRINGS_H #ifndef LIB_STRINGS_H
#define LIB_STRINGS_H #define LIB_STRINGS_H
#include "sfall.h"
#define is_in_string(str, sub) (string_pos(str, sub) != -1) #define is_in_string(str, sub) (string_pos(str, sub) != -1)
#define string_starts_with(str, sub) (substr(str, 0, strlen(sub)) == sub) #define string_starts_with(str, sub) (substr(str, 0, strlen(sub)) == sub)
@@ -166,14 +168,22 @@ end
* Useful in cunjunction with is_in_array() * Useful in cunjunction with is_in_array()
*/ */
procedure string_split_ints(variable str, variable split) begin procedure string_split_ints(variable str, variable split) begin
variable i := 0; variable n;
variable list; variable list, result, val;
if (str == "" or typeof(str) != VALTYPE_STR) then
return temp_array_list(0);
list := string_split(str, split); list := string_split(str, split);
while (i < len_array(list)) do begin result := temp_array_list(0);
list[i] := atoi(list[i]); foreach (val in list) begin
i++; if val != "" then begin
resize_array(result, n + 1);
result[n] := atoi(val);
n += 1;
end end
return list; end
return result;
end end
+1
View File
@@ -298,6 +298,7 @@
#define exec_map_update_scripts sfall_func0("exec_map_update_scripts") #define exec_map_update_scripts sfall_func0("exec_map_update_scripts")
#define floor2(value) sfall_func1("floor2", value) #define floor2(value) sfall_func1("floor2", value)
#define get_can_rest_on_map(map, elev) sfall_func2("get_can_rest_on_map", map, elev) #define get_can_rest_on_map(map, elev) sfall_func2("get_can_rest_on_map", map, elev)
#define get_combat_free_move sfall_func0("get_combat_free_move")
#define get_current_inven_size(obj) sfall_func1("get_current_inven_size", obj) #define get_current_inven_size(obj) sfall_func1("get_current_inven_size", obj)
#define get_current_terrain_name sfall_func0("get_terrain_name") #define get_current_terrain_name sfall_func0("get_terrain_name")
#define get_cursor_mode sfall_func0("get_cursor_mode") #define get_cursor_mode sfall_func0("get_cursor_mode")
@@ -1077,6 +1077,12 @@ sfall_funcX metarule functions
- `centerMult/targetMult`: multiplier values are capped at divisor values - `centerMult/targetMult`: multiplier values are capped at divisor values
- __NOTE:__ refer to the description of **ComputeSpray_\*** settings in ddraw.ini for details of the bullet distribution of burst attacks - __NOTE:__ refer to the description of **ComputeSpray_\*** settings in ddraw.ini for details of the bullet distribution of burst attacks
----
##### get_combat_free_move
`int sfall_func0("get_combat_free_move")`
- Returns current "bonus move" points of a current critter's turn. For NPC's this is always 0, unless changed by set_combat_free_move.
---- ----
##### set_combat_free_move ##### set_combat_free_move
`void sfall_func1("set_combat_free_move", int value)` `void sfall_func1("set_combat_free_move", int value)`
@@ -265,6 +265,10 @@ void mf_set_spray_settings(OpcodeContext& ctx) {
BurstMods::SetComputeSpraySettings(centerMult, centerDiv, targetMult, targetDiv); BurstMods::SetComputeSpraySettings(centerMult, centerDiv, targetMult, targetDiv);
} }
void mf_get_combat_free_move(OpcodeContext& ctx) {
ctx.setReturn(fo::var::combat_free_move);
}
void mf_set_combat_free_move(OpcodeContext& ctx) { void mf_set_combat_free_move(OpcodeContext& ctx) {
long value = ctx.arg(0).rawValue(); long value = ctx.arg(0).rawValue();
if (value < 0) value = 0; if (value < 0) value = 0;
@@ -58,6 +58,8 @@ void mf_combat_data(OpcodeContext&);
void mf_set_spray_settings(OpcodeContext&); void mf_set_spray_settings(OpcodeContext&);
void mf_get_combat_free_move(OpcodeContext&);
void mf_set_combat_free_move(OpcodeContext&); void mf_set_combat_free_move(OpcodeContext&);
} }
@@ -83,6 +83,7 @@ static const SfallMetarule metarules[] = {
{"exec_map_update_scripts", mf_exec_map_update_scripts, 0, 0}, {"exec_map_update_scripts", mf_exec_map_update_scripts, 0, 0},
{"floor2", mf_floor2, 1, 1, 0, {ARG_NUMBER}}, {"floor2", mf_floor2, 1, 1, 0, {ARG_NUMBER}},
{"get_can_rest_on_map", mf_get_rest_on_map, 2, 2, -1, {ARG_INT, ARG_INT}}, {"get_can_rest_on_map", mf_get_rest_on_map, 2, 2, -1, {ARG_INT, ARG_INT}},
{"get_combat_free_move", mf_get_combat_free_move, 0, 0},
{"get_current_inven_size", mf_get_current_inven_size, 1, 1, 0, {ARG_OBJECT}}, {"get_current_inven_size", mf_get_current_inven_size, 1, 1, 0, {ARG_OBJECT}},
{"get_cursor_mode", mf_get_cursor_mode, 0, 0}, {"get_cursor_mode", mf_get_cursor_mode, 0, 0},
{"get_flags", mf_get_flags, 1, 1, 0, {ARG_OBJECT}}, {"get_flags", mf_get_flags, 1, 1, 0, {ARG_OBJECT}},