diff --git a/artifacts/scripting/functions.yml b/artifacts/scripting/functions.yml index 03b8affb..38d89cac 100644 --- a/artifacts/scripting/functions.yml +++ b/artifacts/scripting/functions.yml @@ -763,7 +763,7 @@ - makes the specified item (pid) an explosive item like Dynamite or Plastic Explosives - `maxDamage` is optional - `activePid` is for an item with an active timer, can be the same as the `pid` argument - - the item proto must be the **Misc Item** type and have the **Use** action flag + - the item proto must be of the **Misc Item** type and have the **Use** action flag - minDamage/maxDamage are the minimum and maximum explosion damage - using the function on an item that is already set as an explosive will override its previous settings - NOTE: this function does not work for pids of Dynamite and Plastic Explosives @@ -973,7 +973,7 @@ doc: Alters the AC bonus you receive per unused action point at the end of your turn in combat. To allow for fractional values, the value given if divided by 4. (Hence the default value is 4 and not 1.) - name: get_unspent_ap_bonus detail: int get_unspent_ap_bonus - doc: Gets the AC bonus you receive per unused action point at the end of your turn in combat. To allow for fractional values, the value given if divided by 4. (Hence the default value is 4 and not 1.) + doc: Returns the AC bonus you receive per unused action point at the end of your turn in combat. To allow for fractional values, the value given if divided by 4. (Hence the default value is 4 and not 1.) opcode: 0x81e7 - name: set_unspent_ap_perk_bonus detail: void set_unspent_ap_perk_bonus(int multiplier) @@ -1226,7 +1226,7 @@ opcode: 0x823c - name: get_sfall_arg_at detail: mixed get_sfall_arg_at(int argNum) - doc: Gets the value of hook argument with the specified argument number (first argument of hook starts from 0) + doc: Returns the value of hook argument with the specified argument number (first argument of hook starts from 0) macro: sfall.h - name: set_sfall_return detail: void set_sfall_return(any value) @@ -1422,7 +1422,7 @@ macro: sfall.h - name: item_weight detail: int item_weight(ObjectPtr obj) - doc: Gets the current weight of an object. + doc: Returns the weight of an item object. macro: sfall.h - name: spatial_radius @@ -1612,7 +1612,7 @@ - name: get_bodypart_hit_modifier detail: int get_bodypart_hit_modifier(int bodypart) opcode: 0x81df - doc: Gets the hit percentage modifiers for aiming at specific bodyparts. Valid bodypart id's are from 0 to 8. + doc: Returns the hit percentage modifiers for aiming at specific bodyparts. Valid bodypart id's are from 0 to 8. - name: combat_data detail: mixed combat_data doc: | @@ -1631,7 +1631,7 @@ - name: get_critical_table detail: int get_critical_table(int crittertype, int bodypart, int level, int valuetype) opcode: 0x81e2 - doc: Gets current critical table. For details see [critical hit tables](http://falloutmods.wikia.com/wiki/Critical_hit_tables). Requires `OverrideCriticalTable` to be enabled in `ddraw.ini` (already enabled by default). + doc: Returns the current critical table. For details see [critical hit tables](http://falloutmods.wikia.com/wiki/Critical_hit_tables). Requires `OverrideCriticalTable` to be enabled in `ddraw.ini` (already enabled by default). - name: reset_critical_table detail: void reset_critical_table(int crittertype, int bodypart, int level, int valuetype) opcode: 0x81e3 @@ -1846,7 +1846,7 @@ macro: sfall.h - name: get_outline detail: int get_outline(ObjectPtr obj) - doc: Gets the current outline color for an object. + doc: Returns the current outline color of an object. macro: sfall.h - name: set_outline detail: void set_outline(ObjectPtr obj, int color) @@ -2054,7 +2054,7 @@ - name: get_flags detail: int get_flags(ObjectPtr obj) - doc: Gets the current value of object flags (see **define_extra.h** for available flags). + doc: Returns the current value of object flags (see **define_extra.h** for available flags). macro: sfall.h - name: set_flags detail: void set_flags(ObjectPtr obj, int flags) diff --git a/artifacts/scripting/sfall function notes.md b/artifacts/scripting/sfall function notes.md index 5ca94562..c8c0dcd7 100644 --- a/artifacts/scripting/sfall function notes.md +++ b/artifacts/scripting/sfall function notes.md @@ -556,12 +556,12 @@ sfall_funcX metarule functions ---- #### item_weight `int sfall_func1("item_weight", object obj)` -- Gets the current weight of an object +- Returns the weight of an item object ---- #### get_outline `int sfall_func1("get_outline", object obj)` -- Gets the current outline color for an object +- Returns the current outline color of an object ---- #### set_outline @@ -574,7 +574,7 @@ sfall_funcX metarule functions ---- #### get_flags `int sfall_func1("get_flags", object obj)` -- Gets the current value of object flags (see **define_extra.h** for available flags) +- Returns the current value of object flags (see **define_extra.h** for available flags) ----- #### set_flags @@ -723,7 +723,7 @@ sfall_funcX metarule functions `void sfall_func4("item_make_explosive", int pid, int activePid, int min, int max)` - Makes the specified item (pid) an explosive item like Dynamite or Plastic Explosives - `activePid` is for an item with an active timer, can be the same as the `pid` argument -- The item proto must be the **Misc Item** type and have the **Use** action flag +- The item proto must be of the **Misc Item** type and have the **Use** action flag - `min` and `max` are the minimum and maximum explosion damage - Using the function on an item that is already set as an explosive will override its previous settings - __NOTE:__ this function does not work for pid's of Dynamite and Plastic Explosives @@ -899,7 +899,7 @@ sfall_funcX metarule functions ---- #### get_sfall_arg_at `mixed sfall_func1("get_sfall_arg_at", int argNum)` -- Gets the value of hook argument with the specified argument number (*first argument of hook starts from 0*) +- Returns the value of hook argument with the specified argument number (*first argument of hook starts from 0*) ---- #### hide_window diff --git a/sfall/Modules/Scripting/Handlers/Combat.cpp b/sfall/Modules/Scripting/Handlers/Combat.cpp index 6654c283..9683abe0 100644 --- a/sfall/Modules/Scripting/Handlers/Combat.cpp +++ b/sfall/Modules/Scripting/Handlers/Combat.cpp @@ -274,7 +274,7 @@ void mf_set_combat_free_move(OpcodeContext& ctx) { if (value < 0) value = 0; fo::var::combat_free_move = value; - if (fo::var::main_ctd.attacker == fo::var::obj_dude) { + if (fo::var::combat_state & fo::CombatStateFlag::InCombat && fo::var::main_ctd.attacker == fo::var::obj_dude) { fo::func::intface_update_move_points(fo::var::obj_dude->critter.movePoints, fo::var::combat_free_move); } } diff --git a/sfall/Modules/Scripting/Handlers/Inventory.cpp b/sfall/Modules/Scripting/Handlers/Inventory.cpp index 85443ac9..8a917d21 100644 --- a/sfall/Modules/Scripting/Handlers/Inventory.cpp +++ b/sfall/Modules/Scripting/Handlers/Inventory.cpp @@ -104,7 +104,13 @@ void mf_critter_inven_obj2(OpcodeContext& ctx) { } void mf_item_weight(OpcodeContext& ctx) { - ctx.setReturn(fo::func::item_weight(ctx.arg(0).object())); + fo::GameObject* obj = ctx.arg(0).object(); + if (obj->IsNotItem()) { + ctx.printOpcodeError("%s() - the object is not an item.", ctx.getMetaruleName()); + ctx.setReturn(0); + return; + } + ctx.setReturn(fo::func::item_weight(obj)); } void mf_get_current_inven_size(OpcodeContext& ctx) { diff --git a/sfall/Modules/Scripting/Handlers/Stats.cpp b/sfall/Modules/Scripting/Handlers/Stats.cpp index bd074372..e3953911 100644 --- a/sfall/Modules/Scripting/Handlers/Stats.cpp +++ b/sfall/Modules/Scripting/Handlers/Stats.cpp @@ -284,7 +284,9 @@ void op_set_critter_current_ap(OpcodeContext& ctx) { if (ap < 0) ap = 0; obj->critter.movePoints = ap; - if (obj == fo::var::obj_dude) fo::func::intface_update_move_points(ap, fo::var::combat_free_move); + if (obj == fo::var::obj_dude && fo::var::combat_state & fo::CombatStateFlag::InCombat) { + fo::func::intface_update_move_points(ap, fo::var::combat_free_move); + } } else { ctx.printOpcodeError(objNotCritter, ctx.getOpcodeName()); }