mirror of
https://github.com/sfall-team/sfall.git
synced 2026-07-27 16:52:34 -07:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ba3ad33587 | ||
|
|
6e74c3166a | ||
|
|
e320acce0b | ||
|
|
4f48926105 | ||
|
|
5611931063 | ||
|
|
f00022fed6 | ||
|
|
78815425e2 | ||
|
|
9ddddcc120 | ||
|
|
11c15cec93 | ||
|
|
f36bd6fb61 | ||
|
|
26ab38c6c3 | ||
|
|
9b50e6be1e | ||
|
|
2427634ee8 | ||
|
|
36d1d0a5fc | ||
|
|
486f00cdf4 | ||
|
|
b6fd424665 | ||
|
|
3d679db758 | ||
|
|
92e1f919d9 | ||
|
|
d259e8c903 | ||
|
|
dea0e596c3 | ||
|
|
90b39f3dde | ||
|
|
c80224f661 | ||
|
|
d7d8de5e1a | ||
|
|
0a21e4abfa | ||
|
|
1340eeb0d3 | ||
|
|
a350fed4d1 | ||
|
|
402d4f40f2 | ||
|
|
0f49c7f68d | ||
|
|
deb0299776 | ||
|
|
4bb3fa0275 | ||
|
|
da31455cef | ||
|
|
4da10e2fdb | ||
|
|
5426d043c1 | ||
|
|
719cec74d1 | ||
|
|
627fe11c29 | ||
|
|
dcca405b89 | ||
|
|
cce9437d19 | ||
|
|
09b3bf3aed | ||
|
|
08a891a0fc | ||
|
|
e9df81ac78 | ||
|
|
3e982be4b6 | ||
|
|
8a888f387d | ||
|
|
712b4de5f7 | ||
|
|
a3b456cf0a | ||
|
|
9f689863d7 | ||
|
|
b5306406b3 | ||
|
|
ce3b9c172c | ||
|
|
b8a77d77fb | ||
|
|
a01da656c7 | ||
|
|
5eda8dd7a0 | ||
|
|
c05babeda7 | ||
|
|
cc2b95d64e | ||
|
|
fb62bd51b5 | ||
|
|
f4d7ccef40 | ||
|
|
85bb34377c | ||
|
|
af24c6eae4 | ||
|
|
930f463000 | ||
|
|
e1aefcc1ed | ||
|
|
25554ff0b2 | ||
|
|
dad0860d6e | ||
|
|
a7e492a80f | ||
|
|
d9b748c261 | ||
|
|
0aad511e3e | ||
|
|
d117296990 | ||
|
|
e672db53c7 | ||
|
|
25bbd91fc5 | ||
|
|
8db528330b | ||
|
|
f761f7834e | ||
|
|
f6c4e5133c | ||
|
|
2e30c86467 | ||
|
|
1679f7c59d | ||
|
|
9a4cbd4fa9 | ||
|
|
0c561ba677 | ||
|
|
20ccdacee8 | ||
|
|
d44663ce76 | ||
|
|
a196160258 | ||
|
|
55a97a5793 | ||
|
|
3eaa64ee16 | ||
|
|
aa9257ab1c | ||
|
|
81a8fd4863 | ||
|
|
ed260ad7e5 | ||
|
|
9dce3c8d62 | ||
|
|
f28a179c78 | ||
|
|
540abbe273 | ||
|
|
8dda3940d0 | ||
|
|
44b9b24490 | ||
|
|
dafbc357b2 | ||
|
|
02572a5193 | ||
|
|
cab19b5ca0 | ||
|
|
d6952a0c93 | ||
|
|
b996867d65 | ||
|
|
bd18c240f9 | ||
|
|
2ad28e3086 | ||
|
|
ef5ff4e90f | ||
|
|
0a672c1e10 | ||
|
|
01214633f4 | ||
|
|
334e98c4c1 | ||
|
|
78a29ad556 | ||
|
|
e5d14ff845 | ||
|
|
716bfd4156 | ||
|
|
9b67db7208 | ||
|
|
e92ded34e4 | ||
|
|
1689542165 | ||
|
|
2c86201db9 | ||
|
|
d7c9acf713 | ||
|
|
399da0d322 | ||
|
|
774adaa3b0 | ||
|
|
b4d174d91b | ||
|
|
3291f6fe17 | ||
|
|
84f442ca08 | ||
|
|
f5c35eb639 | ||
|
|
514894ed59 | ||
|
|
204810d067 | ||
|
|
ec4ba13a28 | ||
|
|
14a6ef7fc6 | ||
|
|
c3a74070ca | ||
|
|
302fd4bb51 | ||
|
|
c7520c71cf | ||
|
|
45632d6887 | ||
|
|
866c9165c0 | ||
|
|
813abbf452 | ||
|
|
c6864e01f6 | ||
|
|
0eab48932a | ||
|
|
6c3efc5b84 | ||
|
|
cb8d7dc94a | ||
|
|
5786cfb267 | ||
|
|
78dfb530a9 | ||
|
|
d588f2e691 | ||
|
|
daf7a82997 | ||
|
|
9ad2b19e1a | ||
|
|
4b66dd3682 | ||
|
|
4899aeece1 | ||
|
|
946266e367 | ||
|
|
438ea071fc | ||
|
|
89760235c7 | ||
|
|
321f1c6034 | ||
|
|
513338f160 | ||
|
|
08b92542f4 | ||
|
|
46013c94b0 | ||
|
|
7a4ab59089 | ||
|
|
e505e204cb | ||
|
|
7343754d53 | ||
|
|
ae1e17d359 | ||
|
|
32dbe5581d | ||
|
|
a93ad5a9ba | ||
|
|
874b047ce1 | ||
|
|
afa590c5a8 | ||
|
|
b89c52fcec | ||
|
|
ec2d323f75 | ||
|
|
586679b07f | ||
|
|
31834fdfea | ||
|
|
7405e3cb52 | ||
|
|
771230f9b4 | ||
|
|
7b333ca458 | ||
|
|
e7d03fc60a | ||
|
|
61615930b6 | ||
|
|
62e5559aea | ||
|
|
50c91db5ea | ||
|
|
b1624e5acf | ||
|
|
024b1dbf6f | ||
|
|
659da227f4 | ||
|
|
b48549b524 | ||
|
|
bf61051887 | ||
|
|
158234438b | ||
|
|
eb4998ced6 | ||
|
|
9631e08db4 | ||
|
|
52072e29c0 | ||
|
|
28c18c1925 | ||
|
|
77349cbaec | ||
|
|
85845a2d80 | ||
|
|
d8e2e6f1ca | ||
|
|
dd00e130a9 | ||
|
|
6cb8700df5 | ||
|
|
ec0baf3065 | ||
|
|
5265100425 | ||
|
|
c095e54b62 | ||
|
|
229a5516e0 | ||
|
|
f056c53739 | ||
|
|
cb84700bfc | ||
|
|
0f722a50fd | ||
|
|
6b7a10130d | ||
|
|
061302585b | ||
|
|
c3acd1af3e | ||
|
|
411c0a6e98 | ||
|
|
4cc1235dbc | ||
|
|
70a742db81 | ||
|
|
00d4e188d6 | ||
|
|
a30464cfae | ||
|
|
38438d1e9c | ||
|
|
94e4a2043a | ||
|
|
42f70f920e | ||
|
|
f56af79c16 | ||
|
|
955733270c | ||
|
|
9804902af6 | ||
|
|
cfb546ce8a | ||
|
|
de2549eeaa | ||
|
|
cc00a2c162 | ||
|
|
16be32d284 | ||
|
|
16f19824d1 | ||
|
|
535b7edc55 | ||
|
|
573e5324f4 | ||
|
|
e17b722f16 | ||
|
|
7a6e15bae1 | ||
|
|
df34f6c994 | ||
|
|
26874a709e | ||
|
|
45724aa6b3 | ||
|
|
b477a43bd0 | ||
|
|
ca86b5f930 | ||
|
|
f05ec714e7 | ||
|
|
ad1f08378b | ||
|
|
11dfb3e94a | ||
|
|
3668a1c94f | ||
|
|
5cb3ca2a59 | ||
|
|
4ef88959e3 | ||
|
|
4cc9cb0b83 | ||
|
|
363d7a1cc5 | ||
|
|
d9d86e3fe4 | ||
|
|
ce1fd719cf | ||
|
|
1595d75f7c | ||
|
|
6287eefd7c | ||
|
|
3bc84a0040 | ||
|
|
18b34767b6 | ||
|
|
af4bad36d4 | ||
|
|
1a40c40cd3 | ||
|
|
9367139957 | ||
|
|
87f45d26db | ||
|
|
bd2f83d6a8 | ||
|
|
d29b51d5ea | ||
|
|
d276da3d68 | ||
|
|
502897cb6f | ||
|
|
e3739ba7aa | ||
|
|
02beff2b04 | ||
|
|
cf82440753 | ||
|
|
e78e76e35d | ||
|
|
47783c802e | ||
|
|
ce72ef51f8 | ||
|
|
dbc0ebd36f | ||
|
|
db89f5760c | ||
|
|
e864f1f961 | ||
|
|
fafc4a317f | ||
|
|
5d689c0641 | ||
|
|
4a65a6753f | ||
|
|
5dec063c1c | ||
|
|
dbdf414cd9 | ||
|
|
3e2a22fad8 | ||
|
|
13ee06dee2 | ||
|
|
2d3031e583 | ||
|
|
de5c12484d | ||
|
|
c880ae93a9 | ||
|
|
295a5d1437 | ||
|
|
e726ee54ba | ||
|
|
712eafc241 | ||
|
|
d1bf22ec8d | ||
|
|
21d496f392 | ||
|
|
07948206fb | ||
|
|
6a71bf086d | ||
|
|
ec585529c8 | ||
|
|
e6aad27e44 | ||
|
|
f0528740a4 | ||
|
|
bfd8b38547 | ||
|
|
e6086f984e | ||
|
|
2e766cd3c9 | ||
|
|
48f53388fd | ||
|
|
6199f95c38 | ||
|
|
a6d84bd470 | ||
|
|
a11228a5ec | ||
|
|
7784e199af | ||
|
|
53895a4af2 | ||
|
|
354b938d60 | ||
|
|
643d8d3886 | ||
|
|
924c35d011 | ||
|
|
86163bf94c | ||
|
|
21b2d34432 | ||
|
|
98508a9c76 | ||
|
|
f8b232cc09 | ||
|
|
394b4b9967 | ||
|
|
1bea84eb3c | ||
|
|
26159138e0 | ||
|
|
1883009930 | ||
|
|
f1289c1e7d | ||
|
|
c3e4894243 | ||
|
|
2330dd97bb | ||
|
|
90b718122d | ||
|
|
5ca7ed0dc5 | ||
|
|
9bd03bfb76 | ||
|
|
07b7e270b8 | ||
|
|
f9dbbcdca2 | ||
|
|
b8968c5334 | ||
|
|
4f6b68ca93 |
@@ -7,6 +7,34 @@
|
||||
; have an additional NoHardcode option in this file which can
|
||||
; be used to remove their hardcoded effects, and add new stat/skill effects
|
||||
|
||||
;Name=The name of the perk (max 63 characters)
|
||||
;Desc=The description of the perk (max 1023 characters)
|
||||
;Image=The line number (0-indexed) of the corresponding FRM in skilldex.lst
|
||||
;Ranks=The number of perk levels
|
||||
;Level=The minimum required level
|
||||
;Type=If 0, the perk checks only Skill1 for skill requirements; if 1, it checks
|
||||
; Skill1 or Skill2; if 2, it checks both Skill1 and Skill2
|
||||
;Stat=The modified stat or -1 if you don't want to change any stats
|
||||
;StatMag=The increased/decreased value to the modified stat
|
||||
;Skill1=The first skill (or -1 for none) to check, but if you set a specific bit
|
||||
; (67108864 or 0x4000000), it checks GVAR. For example, if Skill1=67108864, then
|
||||
; the perk will check GVAR_PLAYER_REPUTATION (67108864 + 0) on Skill1Mag value
|
||||
;Skill1Mag=Positive value is used as the minimum requirements of the first
|
||||
; skill/GVAR, and a negative value is interpreted as the maximum requirement.
|
||||
; For example, with Skill1=0 and Skill1Mag=100, if player has small guns skill
|
||||
; >= 100 and meets all other requirements, the perk will be available in the
|
||||
; selection window; with Skill1=1 and Skill1Mag=-120, the perk will not be
|
||||
; available if player has big guns skill >= 120
|
||||
;Skill2=The second skill/GVAR (or -1 for none) to check
|
||||
;Skill2Mag=Same as Skill1Mag, but for Skill2
|
||||
;STR-LCK=Positive values are used as minimum requirements of SPECIAL stats, and
|
||||
; negative values are interpreted as maximum requirements. For some special
|
||||
; perks processed by the engine (e.g. PERK_armor_powered and PERK_armor_combat),
|
||||
; the values are not used as requirements but to add to corresponding SPECIAL
|
||||
; stats
|
||||
|
||||
;If the value is set to -99999, the variable will be ignored (similar to comment out that line)
|
||||
|
||||
;This is a modification to perk 119
|
||||
[119]
|
||||
Name=Example
|
||||
@@ -36,4 +64,4 @@ Name=Example
|
||||
Desc=This is an example trait
|
||||
Image=72
|
||||
StatMod=0|-1 ;Subtract 1 from strength
|
||||
SkillMod=0|20|1|-5 ;Add 20 to the players small guns skill and subtract 5 from big guns
|
||||
SkillMod=0|20|1|-5 ;Add 20 to the player's small guns skill and subtract 5 from big guns
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
[sfall]
|
||||
SaveInCombat=Cannot save at this time
|
||||
SaveInCombat=Cannot save at this time.
|
||||
KarmaGain=You gained %d karma.
|
||||
KarmaLoss=You lost %d karma.
|
||||
HighlightFail1=You aren't carrying a motion sensor.
|
||||
@@ -7,8 +7,11 @@ HighlightFail2=Your motion sensor is out of charge.
|
||||
SuperStimExploitMsg=You cannot use a super stim on someone who is not injured!
|
||||
BlockedCombat=You cannot enter combat at this time.
|
||||
SaveSfallDataFail=ERROR saving extended savegame information! Check if other programs interfere with savegame files/folders and try again.
|
||||
PartyLvlMsg=Lvl:
|
||||
PartyACMsg=AC:
|
||||
PartyAddictMsg=Addict
|
||||
|
||||
[AppearanceMod]
|
||||
RaceText=Race
|
||||
StyleText=Style
|
||||
MainButtonText=Appearance
|
||||
MainButtonText=Appearance
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
;Controls the elevators
|
||||
;Image must match up with the image of an existing elevator
|
||||
;Image must match up with the image of an existing elevator (can be overrided in sfall 4.1.4/3.8.14 or newer)
|
||||
;Make sure you specify the correct number of exit targets
|
||||
;The maximum number of elevators is currently capped at 50
|
||||
;Use the line number (0-indexed) of the corresponding FRM in intrface.lst to set the appearance of the elevator
|
||||
|
||||
;Override elevator 0
|
||||
[000]
|
||||
;This elevator uses the frm of the original forth elevator
|
||||
[0]
|
||||
;This elevator will use the settings of the original forth elevator
|
||||
Image=4
|
||||
|
||||
;Set up the first exit point
|
||||
@@ -23,4 +24,23 @@ ID3=50
|
||||
Elevation3=0
|
||||
Tile3=12944
|
||||
|
||||
;No forth exit point
|
||||
;No forth exit point
|
||||
|
||||
;Override FRM images of elevator 0. Set ButtonsFrm to -1 to use default buttons from MainFrm
|
||||
MainFrm=143
|
||||
ButtonsFrm=-1
|
||||
|
||||
|
||||
;An example of a new elevator
|
||||
[24]
|
||||
;Set Image to 24 to create a new elevator type (0-23 are the original elevator types)
|
||||
Image=24
|
||||
|
||||
;Set the number of buttons
|
||||
ButtonCount=3
|
||||
|
||||
;Set the appearance of the elevator
|
||||
MainFrm=148
|
||||
ButtonsFrm=151
|
||||
|
||||
;Set up the exit points for all three buttons (see examples above)
|
||||
|
||||
+188
-84
File diff suppressed because it is too large
Load Diff
Binary file not shown.
@@ -0,0 +1,77 @@
|
||||
/*
|
||||
|
||||
Auto Doors mod for Fallout 2 by Mr.Stalin
|
||||
-----------------------------------------
|
||||
|
||||
- allows the player to automatically open/walk through unlocked doors when not in combat
|
||||
|
||||
Requires sfall 3.7b or higher
|
||||
|
||||
NOTE: this script requires compiler from sfall modderspack with -s option
|
||||
(short circuit evaluation)
|
||||
|
||||
*/
|
||||
|
||||
#include "..\headers\define.h"
|
||||
#include "..\headers\command.h"
|
||||
#include "..\headers\sfall\sfall.h"
|
||||
#include "..\headers\sfall\define_extra.h"
|
||||
|
||||
procedure start;
|
||||
procedure map_enter_p_proc;
|
||||
procedure set_door_flag(variable state);
|
||||
procedure combatturn_handler;
|
||||
|
||||
#define PORTAL (0)
|
||||
#define DOOR_FLAGS (0x24)
|
||||
|
||||
variable only_once := 0;
|
||||
|
||||
procedure start begin
|
||||
if game_loaded then begin
|
||||
if (sfall_ver_major >= 4) then
|
||||
register_hook_proc(HOOK_COMBATTURN, combatturn_handler);
|
||||
else
|
||||
set_global_script_repeat(60);
|
||||
call map_enter_p_proc;
|
||||
end else begin
|
||||
if (only_once == 1 and combat_is_initialized) then begin
|
||||
only_once := 2;
|
||||
call set_door_flag(false);
|
||||
end else if (only_once == 2 and not(combat_is_initialized)) then begin
|
||||
only_once := 1;
|
||||
if (sfall_ver_major >= 4) then
|
||||
set_global_script_repeat(0);
|
||||
call set_door_flag(FLAG_WALKTHRU);
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
procedure map_enter_p_proc begin
|
||||
only_once := 1;
|
||||
call set_door_flag(FLAG_WALKTHRU);
|
||||
end
|
||||
|
||||
procedure set_door_flag(variable state) begin
|
||||
variable objectMap, obj, objPid, arrayPid, i;
|
||||
|
||||
objectMap := list_as_array(LIST_SCENERY);
|
||||
arrayPid := temp_array(1, 0);
|
||||
|
||||
foreach (obj in objectMap) begin
|
||||
objPid := obj_pid(obj);
|
||||
|
||||
if (proto_data(objPid, sc_type) != PORTAL) or is_in_array(objPid, arrayPid) then
|
||||
continue;
|
||||
|
||||
arrayPid[i] := objPid;
|
||||
i++;
|
||||
resize_array(arrayPid, i + 1);
|
||||
set_proto_data(objPid, DOOR_FLAGS, state);
|
||||
end
|
||||
end
|
||||
|
||||
procedure combatturn_handler begin
|
||||
if (only_once == 1) then
|
||||
set_global_script_repeat(60);
|
||||
end
|
||||
@@ -0,0 +1,9 @@
|
||||
Auto Doors mod for Fallout 2 by Mr.Stalin
|
||||
-----------------------------------------
|
||||
|
||||
- allows the player to automatically open/walk through unlocked doors when not in combat
|
||||
|
||||
|
||||
Requires sfall 3.7b or higher.
|
||||
|
||||
To use, copy gl_autodoors.int to your scripts folder.
|
||||
Binary file not shown.
+13
-11
@@ -1,22 +1,24 @@
|
||||
procedure start;
|
||||
procedure start;
|
||||
// adjust include paths if needed
|
||||
#include "..\..\scripting_docs\headers\sfall.h"
|
||||
#include "..\..\scripting_docs\headers\sfall.h"
|
||||
|
||||
#define RESULT_SUCCESS (1)
|
||||
#define RESULT_FAIL (0)
|
||||
|
||||
procedure start begin
|
||||
if not init_hook then begin
|
||||
|
||||
procedure start begin
|
||||
if game_loaded then begin
|
||||
register_hook(HOOK_STEAL);
|
||||
end else begin
|
||||
variable
|
||||
thief := get_sfall_arg,
|
||||
target := get_sfall_arg,
|
||||
item := get_sfall_arg,
|
||||
action := get_sfall_arg,
|
||||
result := RESULT_SUCCESS;
|
||||
|
||||
if (thief == dude_obj) then begin
|
||||
display_msg(sprintf(mstr_skill(570 + result + action*2), obj_name(item)));
|
||||
set_sfall_return(result);
|
||||
end
|
||||
end
|
||||
|
||||
if (thief == dude_obj) then begin
|
||||
display_msg(sprintf(mstr_skill(570 + result + action*2), obj_name(item)));
|
||||
set_sfall_return(result);
|
||||
end
|
||||
end
|
||||
end
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,20 @@
|
||||
procedure start;
|
||||
// adjust include paths if needed
|
||||
#include "..\..\scripting_docs\headers\sfall.h"
|
||||
#include "..\..\scripting_docs\headers\dik.h"
|
||||
|
||||
procedure start begin
|
||||
if game_loaded then begin
|
||||
register_hook(HOOK_KEYPRESS);
|
||||
end else begin
|
||||
variable
|
||||
event := get_sfall_arg,
|
||||
keyDX := get_sfall_arg;
|
||||
|
||||
if (event == 1) and (keyDX == DIK_SEMICOLON) then begin
|
||||
tap_key(DIK_CAPITAL);
|
||||
tap_key(DIK_A);
|
||||
tap_key(DIK_CAPITAL);
|
||||
end
|
||||
end
|
||||
end
|
||||
Binary file not shown.
@@ -1,16 +0,0 @@
|
||||
procedure start;
|
||||
#include ".\HEADERS\dik.h"
|
||||
|
||||
procedure start begin
|
||||
variable event, keyDX;
|
||||
if not init_hook then begin
|
||||
event := get_sfall_arg;
|
||||
keyDX := get_sfall_arg;
|
||||
|
||||
if ((event == 1) and (keyDX == DIK_SEMICOLON)) then begin
|
||||
tap_key(DIK_CAPITAL);
|
||||
tap_key(DIK_A);
|
||||
tap_key(DIK_CAPITAL);
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -2,8 +2,8 @@
|
||||
----------------------------------------
|
||||
|
||||
- makes pressing the semicolon key send an uppercase A after a semicolon.
|
||||
- the uppercase A (shift + A if Caps Lock is off) is the built-in hotkey for the TAKE ALL button on the loot screen.
|
||||
- Note: the uppercase A (shift + A if Caps Lock is off) is the built-in hotkey for the TAKE ALL button on the loot screen.
|
||||
|
||||
To use, copy hs_keypress.int file to your scripts folder.
|
||||
To use, copy *.int file to your scripts folder.
|
||||
|
||||
This mod is a simple example of how you can use HOOK_KEYPRESS hooks.
|
||||
|
||||
@@ -3,13 +3,23 @@ This folder contains documentation about sfall scripting extensions.
|
||||
headers\ - folder contains sfall headers that you should #include in your scripts
|
||||
sfall.h - main sfall header, always include it
|
||||
define_extra.h - some additional preprocessor constants for vanilla engine stuff (proto offsets, etc.)
|
||||
dik.h - DX scancodes constants for use with key_pressed function and HOOK_KEYPRESS
|
||||
|
||||
define_lite.h - a lite version of official define.h
|
||||
dik.h - DX scancodes constants for use with key_pressed function and HOOK_KEYPRESS
|
||||
lib.arrays.h - procedures that will help you use arrays in their full:
|
||||
- use them as stacks, sets
|
||||
- easily compare, copy, slice, cut, add arrays
|
||||
- display array contents (for debugging)
|
||||
- save/load two-dimensional arrays to savegame in one command (e.g. arrays of objects)
|
||||
lib.inven.h - fallout items manipulation functions
|
||||
lib.math.h - a few simple functions for calculations
|
||||
lib.strings.h - search in strings, join, repeat, etc.
|
||||
lib.misc.h - misc stuff
|
||||
|
||||
sfall function notes.txt - incomplete reference for new opcodes
|
||||
sfall function list.txt - list of all sfall opcodes (w/o descriptions)
|
||||
sfall opcode list.txt - list of all sfall opcodes (w/o descriptions)
|
||||
hookscripts.txt - detailed manual for using hook scripts to modify engine behavior
|
||||
arrays.txt - manual for sfall arrays
|
||||
|
||||
If you are/will be using sfall Script Editor, don't forget to check out new compiler documentation in ScriptEditor\docs\sslc_readme.txt,
|
||||
|
||||
If you are/will be using sfall Script Editor, don't forget to check out new compiler documentation in ScriptEditor\docs\sslc_readme.txt,
|
||||
there are numerious new syntax features and extensions to SSL (Star-Trek Scripting language).
|
||||
|
||||
|
||||
|
||||
@@ -9,21 +9,21 @@ Array elements are accessed by index or key. For example:
|
||||
|
||||
// this code puts some string in array "list" at index 5:
|
||||
list[5] := "Value";
|
||||
|
||||
|
||||
|
||||
There are 2 different types of arrays currently available:
|
||||
1) Lists - a set of values with specific size (number of elements), where all elements have numeric indexes starting from zero (0) up to array length minus one.
|
||||
For example:
|
||||
|
||||
|
||||
// this creates list with 3 elements. Element "A" has index 0, element "B" has index 1, element "C" - 2
|
||||
list := ["A", "B", "C"];
|
||||
|
||||
|
||||
Limitations:
|
||||
- all indexes are numeric, starting from 0;
|
||||
- to assign value to a specific index, you must first resize array to contain this index
|
||||
(for example, if list is of size 3 (indexes from 0 to 2), you can't assign value to index 4 unless you change list size to 5 first).
|
||||
|
||||
|
||||
|
||||
2) Maps (or associative arrays) - a set of key=>value pairs, where all elements (values) are accessed by corresponding keys.
|
||||
Differences from list:
|
||||
- maps don't have specific size (to assign values, you don't need to resize array first);
|
||||
@@ -37,24 +37,24 @@ Both array types have their pros and cons and are suited for different tasks.
|
||||
Basically arrays are implemented using number of new operators (scripting functions). But for ease of use, there are some new syntax elements:
|
||||
|
||||
1) Accessing elements. Use square brackets:
|
||||
|
||||
|
||||
display_msg(arr[5]);
|
||||
mymap["price"] := 515.23;
|
||||
|
||||
|
||||
2) Alternative accessing for maps. Use dot:
|
||||
|
||||
display_msg(mymap.name);
|
||||
mymap.price := 232.23;
|
||||
|
||||
|
||||
3) Array expressions. Create and fill arrays with just one expression:
|
||||
|
||||
// create list with 5 values
|
||||
[5, 777, 0, 3.14, "Cool Value"]
|
||||
|
||||
|
||||
// create map:
|
||||
{5: "Five", "health": 50, "speed": 0.252}
|
||||
|
||||
NOTES:
|
||||
|
||||
NOTES:
|
||||
- make sure to call "fix_array" if you want new array to be available in the next frame or "save_array" if you want to use it for a longer period
|
||||
(see next section for details)
|
||||
|
||||
@@ -64,16 +64,16 @@ NOTES:
|
||||
foreach (item in myarray) begin
|
||||
// this block is executed for each array element, where "item" contains current value on each step
|
||||
end
|
||||
|
||||
|
||||
// alternative syntax:
|
||||
foreach (key: item in myarray) begin
|
||||
// "key" will contain current key (or numeric index, for lists)
|
||||
end
|
||||
|
||||
See "Script editor\docs\sslc readme.txt" file for full information on new SSL syntax features.
|
||||
|
||||
|
||||
>>> STORING ARRAYS <<<
|
||||
|
||||
|
||||
Apart from lists/maps arrays are divided by how they are stored.
|
||||
There a 3 types of arrays:
|
||||
|
||||
@@ -85,21 +85,21 @@ where you create temp_array, it will not be available next time your global scri
|
||||
This type of arrays are always available (by their ID) until you start a new game or load a saved game (at which point they are deleted).
|
||||
|
||||
3) Saved. If you want your array to really stay for a while, use function "save_array" to make any array "saved". However, they are, like permanent arrays,
|
||||
"deleted" from memory when loading game. In order to use them properly, you must load them from the savegame using "load_array" whenever you want to use them.
|
||||
"deleted" from memory when loading game. In order to use them properly, you must load them from the savegame using "load_array" whenever you want to use them.
|
||||
Example:
|
||||
|
||||
|
||||
variable savedArray;
|
||||
procedure start begin
|
||||
if game_loaded then begin
|
||||
savedArray := load_array("traps");
|
||||
end else begin
|
||||
foreach trap in traps begin
|
||||
....
|
||||
....
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
>>> PRACTICAL EXAMPLES <<<
|
||||
|
||||
@@ -114,8 +114,8 @@ Example:
|
||||
|
||||
// call it:
|
||||
call give_item(dude_obj, {PID_SHOTGUN: 1, PID_SHOTGUN_SHELLS: 4, PID_STIMPAK: 3});
|
||||
|
||||
|
||||
|
||||
|
||||
> Create arrays of objects (maps) for advanced scripting:
|
||||
|
||||
variable traps;
|
||||
@@ -130,14 +130,14 @@ Example:
|
||||
traps[k] := load_array("trap_"+k); // each object is stored separately
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
procedure add_trap(variable trapArray) begin
|
||||
variable index;
|
||||
index := len_array(traps);
|
||||
save_array("trap_"+k, trapArray);
|
||||
array_push(traps, trapArray);
|
||||
end
|
||||
|
||||
|
||||
// use them:
|
||||
foreach trap in traps begin
|
||||
if (self_elevation == trap["elev"] and tile_distance(self_tile, trap["tile"]) < trap["radius"]) then
|
||||
@@ -151,14 +151,16 @@ Example:
|
||||
|
||||
*mixed means any type
|
||||
|
||||
> int create_array(int size, int nothing):
|
||||
> int create_array(int size, int flags):
|
||||
- creates permanent array (but not "saved")
|
||||
- if size is >= 0, creates list with given size
|
||||
- if size == -1, creates map (associative array)
|
||||
- second argument is not used yet, just use 0
|
||||
- if size == -1 and flags == 2, creates a "lookup" map in which the values of existing keys are read-only and can't be updated.
|
||||
This type of array allows you to store a zero (0) key value
|
||||
- NOTE: in earlier versions (up to 4.1.3/3.8.13) the second argument is not used, just use 0
|
||||
- returns arrayID (valid until array is deleted)
|
||||
|
||||
> int temp_array(int size, int nothing):
|
||||
> int temp_array(int size, int flags):
|
||||
- works exactly like "create_array", only created array becomes "temporary"
|
||||
|
||||
> void fix_array(int arrayID):
|
||||
@@ -169,6 +171,7 @@ Example:
|
||||
- if used on list, "key" must be numeric and within valid index range (0..size-1)
|
||||
- if used on map, key can be of any type
|
||||
- to "unset" a value from map, just set it to zero (0)
|
||||
- NOTE: to add a value of 0 for the key, use the float value of 0.0
|
||||
- this works exactly like statement:
|
||||
arrayID[key] := value;
|
||||
|
||||
@@ -182,7 +185,7 @@ Example:
|
||||
- changes array size
|
||||
- applicable to maps too, but only to reduce elements
|
||||
- there are number of special negative values of "size" which perform various operations on the array,
|
||||
use macros sort_array, sort_array_reverse, reverse_array, shuffle_array from sfall.h header
|
||||
use macros sort_array, sort_array_reverse, reverse_array, shuffle_array from sfall.h header
|
||||
|
||||
> void free_array(int arrayID):
|
||||
- deletes any array
|
||||
|
||||
@@ -2,16 +2,6 @@
|
||||
#ifndef DEFINE_EXTRA_H
|
||||
#define DEFINE_EXTRA_H
|
||||
|
||||
#define ATTACK_MODE_NONE 0
|
||||
#define ATTACK_MODE_PUNCH 1
|
||||
#define ATTACK_MODE_KICK 2
|
||||
#define ATTACK_MODE_SWING 3
|
||||
#define ATTACK_MODE_THRUST 4
|
||||
#define ATTACK_MODE_THROW 5
|
||||
#define ATTACK_MODE_SINGLE 6
|
||||
#define ATTACK_MODE_BURST 7
|
||||
#define ATTACK_MODE_FLAME 8
|
||||
|
||||
#define OBJ_TYPE_ITEM (0)
|
||||
#define OBJ_TYPE_CRITTER (1)
|
||||
#define OBJ_TYPE_SCENERY (2)
|
||||
@@ -20,18 +10,79 @@
|
||||
#define OBJ_TYPE_MISC (5)
|
||||
#define OBJ_TYPE_SPATIAL (6)
|
||||
|
||||
#define WEAPON_TYPE_NONE (0)
|
||||
#define WEAPON_TYPE_UNARMED (1)
|
||||
#define WEAPON_TYPE_MELEE (2)
|
||||
#define WEAPON_TYPE_THROWN (3)
|
||||
#define WEAPON_TYPE_GUNS (4)
|
||||
|
||||
/* Item Common Flags */
|
||||
#define HIDDEN_ITEM 134217728 // 0x08000000 - Hidden Item
|
||||
|
||||
#define ITEM_ACTION_USE 2048 // 0x00000800 - Use (can be used)
|
||||
#define ITEM_ACTION_USEON 4096 // 0x00001000 - Use On Smth (can be used on anything)
|
||||
#define ITEM_ACTION_PICKUP 32768 // 0x00008000 - PickUp
|
||||
|
||||
#define WEAPON_BIGGUN 256 // 0x00000100 - Big Gun
|
||||
#define WEAPON_2HAND 512 // 0x00000200 - 2Hnd (weapon is two-handed)
|
||||
|
||||
#define ATKMODE_PRI_NONE 0
|
||||
#define ATKMODE_PRI_PUNCH 1 // 0001
|
||||
#define ATKMODE_PRI_KICK 2 // 0010
|
||||
#define ATKMODE_PRI_SWING 3 // 0011
|
||||
#define ATKMODE_PRI_THRUST 4 // 0100
|
||||
#define ATKMODE_PRI_THROW 5 // 0101
|
||||
#define ATKMODE_PRI_SINGLE 6 // 0110
|
||||
#define ATKMODE_PRI_BURST 7 // 0111
|
||||
#define ATKMODE_PRI_FLAME 8 // 1000
|
||||
#define ATKMODE_SEC_NONE 0
|
||||
#define ATKMODE_SEC_PUNCH 16 // 0x00000010
|
||||
#define ATKMODE_SEC_KICK 32 // 0x00000020
|
||||
#define ATKMODE_SEC_SWING 48 // 0x00000030
|
||||
#define ATKMODE_SEC_THRUST 64 // 0x00000040
|
||||
#define ATKMODE_SEC_THROW 80 // 0x00000050
|
||||
#define ATKMODE_SEC_SINGLE 96 // 0x00000060
|
||||
#define ATKMODE_SEC_BURST 112 // 0x00000070
|
||||
#define ATKMODE_SEC_FLAME 128 // 0x00000080
|
||||
|
||||
/* Object flags for get/set_flags */
|
||||
#define FLAG_MOUSE_3D (0x1)
|
||||
#define FLAG_WALKTHRU (0x4)
|
||||
#define FLAG_FLAT (0x8)
|
||||
#define FLAG_NOBLOCK (0x10)
|
||||
#define FLAG_LIGHTING (0x20)
|
||||
#define FLAG_TEMP (0x400)
|
||||
#define FLAG_MULTIHEX (0x800)
|
||||
#define FLAG_NOHIGHLIGHT (0x1000)
|
||||
#define FLAG_USED (0x2000)
|
||||
#define FLAG_TRANSRED (0x4000)
|
||||
#define FLAG_TRANSNONE (0x8000)
|
||||
#define FLAG_TRANSWALL (0x10000)
|
||||
#define FLAG_TRANSGLASS (0x20000)
|
||||
#define FLAG_TRANSSTEAM (0x40000)
|
||||
#define FLAG_TRANSENERGY (0x80000)
|
||||
#define FLAG_LEFT_HAND (0x1000000)
|
||||
#define FLAG_RIGHT_HAND (0x2000000)
|
||||
#define FLAG_WORN (0x4000000)
|
||||
#define FLAG_HIDDENITEM (0x8000000)
|
||||
#define FLAG_WALLTRANSEND (0x10000000)
|
||||
#define FLAG_LIGHTTHRU (0x20000000)
|
||||
#define FLAG_SEEN (0x40000000)
|
||||
#define FLAG_SHOOTTHRU (0x80000000)
|
||||
|
||||
|
||||
/* Critter Flags */
|
||||
#define CFLG_BARTER 2 //0x00000002 - Barter (can trade with)
|
||||
#define CFLG_NOSTEAL 32 //0x00000020 - Steal (cannot steal from)
|
||||
#define CFLG_NODROP 64 //0x00000040 - Drop (doesn't drop items)
|
||||
#define CFLG_NOLIMBS 128 //0x00000080 - Limbs (cannot lose limbs)
|
||||
#define CFLG_NOAGES 256 //0x00000100 - Ages (dead body does not disappear)
|
||||
#define CFLG_NOHEAL 512 //0x00000200 - Heal (damage is not cured with time)
|
||||
#define CFLG_INVULN 1024 //0x00000400 - Invulnerable (cannot be hurt)
|
||||
#define CFLG_FLATTN 2048 //0x00000800 - Flatten (leaves no dead body)
|
||||
#define CFLG_SPECIAL 4096 //0x00001000 - Special (there is a special type of death)
|
||||
#define CFLG_RANGED 8192 //0x00002000 - Range (melee attack is possible at a distance)
|
||||
#define CFLG_NOKNOCKDOWN 16384 //0x00004000 - Knock (cannot be knocked down)
|
||||
#define CFLG_BARTER 2 // 0x00000002 - Barter (can trade with)
|
||||
#define CFLG_NOSTEAL 32 // 0x00000020 - Steal (cannot steal from)
|
||||
#define CFLG_NODROP 64 // 0x00000040 - Drop (doesn't drop items)
|
||||
#define CFLG_NOLIMBS 128 // 0x00000080 - Limbs (cannot lose limbs)
|
||||
#define CFLG_NOAGES 256 // 0x00000100 - Ages (dead body does not disappear)
|
||||
#define CFLG_NOHEAL 512 // 0x00000200 - Heal (damage is not cured with time)
|
||||
#define CFLG_INVULN 1024 // 0x00000400 - Invulnerable (cannot be hurt)
|
||||
#define CFLG_FLATTN 2048 // 0x00000800 - Flatten (leaves no dead body)
|
||||
#define CFLG_SPECIAL 4096 // 0x00001000 - Special (there is a special type of death)
|
||||
#define CFLG_RANGED 8192 // 0x00002000 - Range (melee attack is possible at a distance)
|
||||
#define CFLG_NOKNOCKDOWN 16384 // 0x00004000 - Knock (cannot be knocked down)
|
||||
|
||||
//remove inven obj defines
|
||||
#define RMOBJ_CONSUME_DRUG 4666772
|
||||
@@ -56,19 +107,27 @@
|
||||
// offsets for get_proto_data
|
||||
#define PROTO_PID (1)
|
||||
#define PROTO_TEXTID (4)
|
||||
#define PROTO_FID (8)
|
||||
|
||||
// items
|
||||
#define PROTO_IT_LDIST (12)
|
||||
#define PROTO_IT_LINT (16)
|
||||
#define PROTO_IT_FLAG (20)
|
||||
#define PROTO_IT_FLAGS (24)
|
||||
#define PROTO_IT_SCRIPTID (28)
|
||||
#define PROTO_IT_TYPE (32)
|
||||
#define PROTO_IT_MATERIAL (108)
|
||||
#define PROTO_IT_SIZE (112)
|
||||
#define PROTO_IT_WEIGHT (116)
|
||||
#define PROTO_IT_COST (120)
|
||||
#define PROTO_IT_INV_FID (124)
|
||||
#define PROTO_IT_SOUND (128) // byte
|
||||
|
||||
// weapons
|
||||
#define PROTO_WP_ANIM (36)
|
||||
#define PROTO_WP_DMG_MIN (40)
|
||||
#define PROTO_WP_DMG_MAX (44)
|
||||
#define PROTO_WP_DMG_TYPE (48)
|
||||
#define PROTO_WP_RANGE_1 (52)
|
||||
#define PROTO_WP_RANGE_2 (56)
|
||||
#define PROTO_WP_PROJ_PID (60)
|
||||
@@ -140,11 +199,14 @@
|
||||
#define PROTO_DR_ADDICT_DELAY (100)
|
||||
|
||||
// critters
|
||||
#define PROTO_CR_ACTION_FLAGS (32)
|
||||
#define PROTO_CR_LDIST (20)
|
||||
#define PROTO_CR_LINT (24)
|
||||
#define PROTO_CR_FLAG (28)
|
||||
#define PROTO_CR_FLAGS (32) // Critter Flags
|
||||
#define PROTO_CR_SCRIPTID (36)
|
||||
#define PROTO_CR_HEAD_FID (40)
|
||||
#define PROTO_CR_AI_PACKET (44)
|
||||
#define PROTO_CR_TEAM_NUM (48)
|
||||
#define PROTO_CR_FLAGS (52)
|
||||
#define PROTO_CR_BODY_TYPE (388)
|
||||
#define PROTO_CR_KILL_EXP (392)
|
||||
#define PROTO_CR_KILL_TYPE (396)
|
||||
@@ -172,26 +234,26 @@
|
||||
#define CALIBER_7_62MM (18)
|
||||
|
||||
// hidden perks
|
||||
#define PERK_add_nuka (53)
|
||||
#define PERK_add_buffout (54)
|
||||
#define PERK_add_mentats (55)
|
||||
#define PERK_add_psycho (56)
|
||||
#define PERK_add_radaway (57)
|
||||
#define PERK_weapon_long_range (58)
|
||||
#define PERK_weapon_accurate (59)
|
||||
#define PERK_weapon_penetrate (60)
|
||||
#define PERK_weapon_knockback (61)
|
||||
#define PERK_armor_powered (62)
|
||||
#define PERK_armor_combat (63)
|
||||
#define PERK_weapon_scope_range (64)
|
||||
#define PERK_weapon_fast_reload (65)
|
||||
#define PERK_weapon_night_sight (66)
|
||||
#define PERK_weapon_flameboy (67)
|
||||
#define PERK_armor_advanced_1 (68)
|
||||
#define PERK_armor_advanced_2 (69)
|
||||
#define PERK_add_jet (70)
|
||||
#define PERK_add_tragic (71)
|
||||
#define PERK_armor_charisma (72)
|
||||
#define PERK_add_nuka (53)
|
||||
#define PERK_add_buffout (54)
|
||||
#define PERK_add_mentats (55)
|
||||
#define PERK_add_psycho (56)
|
||||
#define PERK_add_radaway (57)
|
||||
#define PERK_weapon_long_range (58)
|
||||
#define PERK_weapon_accurate (59)
|
||||
#define PERK_weapon_penetrate (60)
|
||||
#define PERK_weapon_knockback (61)
|
||||
#define PERK_armor_powered (62)
|
||||
#define PERK_armor_combat (63)
|
||||
#define PERK_weapon_scope_range (64)
|
||||
#define PERK_weapon_fast_reload (65)
|
||||
#define PERK_weapon_night_sight (66)
|
||||
#define PERK_weapon_flameboy (67)
|
||||
#define PERK_armor_advanced_1 (68)
|
||||
#define PERK_armor_advanced_2 (69)
|
||||
#define PERK_add_jet (70)
|
||||
#define PERK_add_tragic (71)
|
||||
#define PERK_armor_charisma (72)
|
||||
|
||||
#define WPN_ANIM_NONE (0x00) // (A)
|
||||
#define WPN_ANIM_KNIFE (0x01) // (D)
|
||||
@@ -205,5 +267,21 @@
|
||||
#define WPN_ANIM_MINIGUN (0x09) // (L)
|
||||
#define WPN_ANIM_ROCKET_LAUNCHER (0x0A) // (M)
|
||||
|
||||
// common object data offsets
|
||||
#define OBJ_DATA_TILENUM (0x04)
|
||||
#define OBJ_DATA_CUR_FRM (0x18) // current frame number
|
||||
#define OBJ_DATA_ROTATION (0x1C)
|
||||
#define OBJ_DATA_FID (0x20)
|
||||
#define OBJ_DATA_ELEVATION (0x28)
|
||||
#define OBJ_DATA_PID (0x64)
|
||||
#define OBJ_DATA_CID (0x68)
|
||||
#define OBJ_DATA_SID (0x78)
|
||||
// items
|
||||
#define OBJ_DATA_CUR_CHARGES (0x3C)
|
||||
// critters
|
||||
#define OBJ_DATA_COMBAT_STATE (0x3C) // flags: 1 - combat, 2 - target is out of range, 4 - flee
|
||||
#define OBJ_DATA_CUR_ACTION_POINT (0x40)
|
||||
#define OBJ_DATA_DAMAGE_LAST_TURN (0x48)
|
||||
#define OBJ_DATA_WHO_HIT_ME (0x54)
|
||||
|
||||
#endif // DEFINE_EXTRA_H
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user