mirror of
https://github.com/sfall-team/sfall.git
synced 2026-07-27 16:52:34 -07:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
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 | ||
|
|
fcdb5633d4 | ||
|
|
4e2bfd6b08 | ||
|
|
8c0fab1f6b | ||
|
|
05f15f0262 | ||
|
|
147cb50a66 | ||
|
|
b8968c5334 | ||
|
|
4f6b68ca93 | ||
|
|
0ff6157b42 | ||
|
|
2bbb92420f | ||
|
|
4678f41b5a | ||
|
|
7439ba2634 | ||
|
|
4c047bf8a3 | ||
|
|
694b699f15 | ||
|
|
25b408816a | ||
|
|
b819423d2a | ||
|
|
720f937b4f | ||
|
|
25094253e5 | ||
|
|
bdffc061d3 | ||
|
|
dfe4b6b2e0 | ||
|
|
972d978882 | ||
|
|
e99cca2b87 | ||
|
|
108719ac83 | ||
|
|
6feda61424 | ||
|
|
19c94b8513 | ||
|
|
af7b5cbb6b | ||
|
|
56009e1634 | ||
|
|
7bd3bd4128 | ||
|
|
696be7fac5 | ||
|
|
66dd966d8a | ||
|
|
8ce9ae89eb | ||
|
|
361e961b38 | ||
|
|
f8c1bf1ebb | ||
|
|
748cbb030a | ||
|
|
473fbf81b4 | ||
|
|
225f36808d | ||
|
|
879315b4d0 | ||
|
|
971be61d95 |
@@ -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
|
||||
;Desc=The description of the perk
|
||||
;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
|
||||
|
||||
+122
-92
@@ -1,5 +1,5 @@
|
||||
;sfall configuration settings
|
||||
;v3.7
|
||||
;v3.8.8
|
||||
|
||||
[Main]
|
||||
;Change to 1 if you want to use command line args to tell sfall to use another ini file.
|
||||
@@ -48,31 +48,31 @@ SpeedMultiInitial=100
|
||||
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
||||
[Graphics]
|
||||
;Set to 0 for 8 bit fullscreen
|
||||
;Set to 4 for dx9 fullscreen
|
||||
;Set to 5 for dx9 windowed
|
||||
;A dx9 mode is required for any graphics related script extender functions to work (i.e. fullscreen shaders)
|
||||
;Set to 4 for DX9 fullscreen
|
||||
;Set to 5 for DX9 windowed
|
||||
;A DX9 mode is required for any graphics related script extender functions to work (i.e. fullscreen shaders)
|
||||
;Modes 1, 2 and 3 are no longer supported
|
||||
Mode=0
|
||||
|
||||
;If using a dx9 mode, this changes the resolution
|
||||
;If using a DX9 mode, this changes the resolution
|
||||
;The graphics are simply stretched to fit the new window; this does _not_ let you see more of the map
|
||||
;If set to 0, use Fallout's native resolution
|
||||
GraphicsWidth=0
|
||||
GraphicsHeight=0
|
||||
|
||||
;Set to 1 to do the palette conversion on the gpu
|
||||
;Set to 2 to do the palette conversion on the cpu
|
||||
;Set to 1 to do the palette conversion on the GPU
|
||||
;Set to 2 to do the palette conversion on the CPU
|
||||
;Set to 0 to pick automatically
|
||||
;GPU is faster, but requires v2.0 pixel shader support
|
||||
GPUBlt=0
|
||||
|
||||
;Set to 1 to allow using 32 bit graphics for talking heads
|
||||
;Requires graphics mode 4 or 5, and gpublt set to 1
|
||||
;Requires graphics mode 4 or 5, and GPUBlt set to 1
|
||||
Use32BitHeadGraphics=0
|
||||
|
||||
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
||||
[Input]
|
||||
;Set to 1 to enable the mouse scroll wheel to scroll through your inventory
|
||||
;Set to 1 to enable the mouse scroll wheel to scroll through inventory, barter, and loot screens
|
||||
UseScrollWheel=1
|
||||
|
||||
;The mouse Z position is divided by this modifier to calculate the number of inventory
|
||||
@@ -98,7 +98,7 @@ ReverseMouseButtons=0
|
||||
BackgroundKeyboard=0
|
||||
BackgroundMouse=0
|
||||
|
||||
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
||||
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
||||
|
||||
;The modifier key you have to hold down to change any speed settings
|
||||
;Set to 0 if you don't want to use a modifier key, or a DX scancode otherwise
|
||||
@@ -131,16 +131,25 @@ WindowScrollKey=0
|
||||
ToggleItemHighlightsKey=42
|
||||
|
||||
;Set to 1 to also highlight containers
|
||||
;Set to 2 for purple outlines
|
||||
HighlightContainers=0
|
||||
|
||||
;Set the color of outlines, available colors:
|
||||
;0x01 - glowing red
|
||||
;0x02 - red
|
||||
;0x04 - grey
|
||||
;0x08 - glowing green
|
||||
;0x10 - bright yellow
|
||||
;0x20 - dark yellow
|
||||
;0x40 - purple
|
||||
OutlineColor=0x10
|
||||
|
||||
;A key to press to reload your currently equipped weapon
|
||||
ReloadWeaponKey=0
|
||||
|
||||
;A key to press to open a debug game editor
|
||||
DebugEditorKey=0
|
||||
|
||||
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
||||
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
||||
[Misc]
|
||||
|
||||
;Time limit in years. Must be between -3 and 13
|
||||
@@ -164,24 +173,10 @@ WorldMapFPSPatch=1
|
||||
;Controls the world map speed if WorldMapFPSPatch is 1. Higher values cause slower movement
|
||||
WorldMapDelay2=66
|
||||
|
||||
;XX OBSOLETE XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
||||
;XX
|
||||
;XX ;This will change the physical speed at which you move across the map
|
||||
;XX ;Set to 0 to leave at the default. (i.e. limited by vwait in windowed mode, or by processor speed in fullscreen)
|
||||
;XX ;If set to something other than 0, it enforces a maximum fps on the world map screen.
|
||||
;XX ;Changing this to something other than 0 is not recommended if you've already applied a world map speed patch to your Fallout exe.
|
||||
;XX WorldMapFPS=0
|
||||
;XX
|
||||
;XX ;Only set to 1 if your systems high performance timer is unreliable for some reason
|
||||
;XX ForceLowResolutionTimer=0
|
||||
;XX
|
||||
;XX ;Set to 1 to enable Ray's patch to make world map encounter rate independent of your travel speed
|
||||
;XX WorldMapEncounterFix=0
|
||||
;XX WorldMapEncounterRate=6
|
||||
;XX
|
||||
;XX ;Obsolete, but can still be used if you know what it does.
|
||||
;XX ;WorldMapDelay=0
|
||||
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
||||
;Set to 1 to enable Ray's patch to make world map encounter rate independent of your travel speed
|
||||
;Higher values of WorldMapEncounterRate cause a slower encounter rate
|
||||
WorldMapEncounterFix=0
|
||||
WorldMapEncounterRate=5
|
||||
|
||||
;The number of slots available in the locations list panel of the world map
|
||||
;Set to 0 to leave unchanged. 17 is default.
|
||||
@@ -201,9 +196,14 @@ WorldMapSlots=0
|
||||
;To use a patch file other than patch000.dat, uncomment the next line and add your new file name
|
||||
;If you want to check for multiple patch files, you can include a %d in the file name (sprintf syntax)
|
||||
;By default, only the first patch file found will be used.
|
||||
;If you want to load multiple patch files at once, uncomment the NumberPatchLoop line and set it to the number of files to check for
|
||||
;If you want to load multiple patch files (up to 1000) at once, uncomment the MultiPatches line and set it to 1
|
||||
;PatchFile=patch%03d.dat
|
||||
;NumberPatchLoop=100
|
||||
;MultiPatches=0
|
||||
|
||||
;Set to 1 to enable the modified data load order for the engine to find game data
|
||||
;Original: patchXXX.dat > critter_patches > critter_dat > f2_res_patches > f2_res_dat > master_patches > master_dat
|
||||
;Modified: master_patches > critter_patches > patchXXX.dat > critter_dat > f2_res_patches > f2_res_dat > master_dat
|
||||
DataLoadOrderPatch=0
|
||||
|
||||
;To change the default and starting player models, uncomment the next four lines.
|
||||
;The default models can also be changed ingame via script
|
||||
@@ -233,6 +233,7 @@ Movie16=artimer4.mve
|
||||
Movie17=credits.mve
|
||||
|
||||
;To change the starting year, month or day, uncomment the next 3 lines
|
||||
;Both StartMonth and StartDay are 0-indexed
|
||||
;StartYear=-1
|
||||
;StartMonth=-1
|
||||
;StartDay=-1
|
||||
@@ -247,11 +248,12 @@ Movie17=credits.mve
|
||||
;PerksFile=Perks.ini
|
||||
|
||||
;Set to 1 if you want the pipboy to be available at the start of the game
|
||||
;Set to 2 to make the pipboy available by only skipping the vault suit movie check
|
||||
PipBoyAvailableAtGameStart=0
|
||||
|
||||
;Set to 1 to double the number of available kill types
|
||||
;If you use this, you need to provide the extra descriptions in proto.msg (entries from 1450 to 1487 are names and 1488 to 1525 are descriptions)
|
||||
;Changing this option mid game will not invalidate old save games, but the players kill counters will be completely screwed.
|
||||
;Changing this option mid game will not invalidate old save games, but the player's kill counters will be completely screwed.
|
||||
;Setting this to 1 may cause problems if the player kills more than 32767 of any one critter type
|
||||
;Additional kill types must have their new critical tables set! (See the OverrideCriticalTable option)
|
||||
ExtraKillTypes=0
|
||||
@@ -267,11 +269,14 @@ DamageFormula=0
|
||||
;Prevents you from using 0 to escape from dialogue at any time.
|
||||
DialogueFix=1
|
||||
|
||||
;Prevents you from using number keys to enter unvisited areas on a town map
|
||||
TownMapHotkeysFix=1
|
||||
|
||||
;Set to 1 to disable the horrigan encounter
|
||||
DisableHorrigan=0
|
||||
|
||||
;Set to 1 to disable the random element in npc levelling.
|
||||
;This will cause all npc party members to automatically level up as soon as the player reaches the requirements
|
||||
;Set to 1 to disable the random element in NPC levelling.
|
||||
;This will cause all NPC party members to automatically level up as soon as the player reaches the requirements
|
||||
NPCAutoLevel=0
|
||||
|
||||
;Change the initial starting location and world map viewport
|
||||
@@ -287,9 +292,6 @@ SingleCore=1
|
||||
;Set to 1 to override the art_chache_size setting in fallout2.cfg
|
||||
OverrideArtCacheSize=0
|
||||
|
||||
;Set to 1 to fix issues with the GainXXX perks not giving all the bonuses that they should
|
||||
GainStatPerkFix=1
|
||||
|
||||
;Prevents you from saving in combat except at the start of your turn to avoid a few bugs
|
||||
;Note that even with this option enabled, it is still not advisable to save in combat at all.
|
||||
;Set to 2 to block all saving in combat
|
||||
@@ -298,8 +300,8 @@ SaveInCombatFix=1
|
||||
;Point at an ini file containing elevator data
|
||||
;ElevatorsFile=Elevators.ini
|
||||
|
||||
;Uncomment and set to a comma delimited list of numbers to use a custom xp table.
|
||||
;Players level is capped once the highest specified level is reached
|
||||
;Uncomment and set a comma delimited list of numbers to use a custom xp table.
|
||||
;Player's level is capped once the highest specified level is reached
|
||||
;XPTable=50,100,200
|
||||
|
||||
;Set to 1 to enable additional weapon animations codes from o-t
|
||||
@@ -308,15 +310,14 @@ SaveInCombatFix=1
|
||||
AdditionalWeaponAnims=1
|
||||
|
||||
;Uncomment these lines to modify the default modifiers for aimed shots at specific bodyparts
|
||||
;BodypartHitMod0=-40
|
||||
;BodypartHitMod1=-30
|
||||
;BodypartHitMod2=-30
|
||||
;BodypartHitMod3=0
|
||||
;BodypartHitMod4=-20
|
||||
;BodypartHitMod5=-20
|
||||
;BodypartHitMod6=-60
|
||||
;BodypartHitMod7=-30
|
||||
;BodypartHitMod8=0
|
||||
;BodyHit_Head=-40
|
||||
;BodyHit_Left_Arm=-30
|
||||
;BodyHit_Right_Arm=-30
|
||||
;BodyHit_Torso_Uncalled=0
|
||||
;BodyHit_Right_Leg=-20
|
||||
;BodyHit_Left_Leg=-20
|
||||
;BodyHit_Eyes=-60
|
||||
;BodyHit_Groin=-30
|
||||
|
||||
;Set to 1 to use a CriticalOverrides.ini file to override the default critical table
|
||||
;Set to 2 to use the default critical with bug fixes (doesn't require an ini)
|
||||
@@ -340,7 +341,7 @@ CorpseLineOfFireFix=0
|
||||
;Set a number of milliseconds to idle each input loop
|
||||
;Set to -1 to disable
|
||||
;Set to 0 to idle only if other processes are waiting for processor time
|
||||
;Set to 1 (or some higher number if needed) to prevent 100% cpu use
|
||||
;Set to 1 (or some higher number if needed, the maximum is 127) to prevent 100% CPU use
|
||||
ProcessorIdle=-1
|
||||
|
||||
;Set to 1 if using the hero appearance mod
|
||||
@@ -349,17 +350,17 @@ EnableHeroAppearanceMod=0
|
||||
;Set to 1 to skip the 3 opening movies
|
||||
SkipOpeningMovies=0
|
||||
|
||||
;Causes npc's who complete their combat turn with ap left over will try and find other ways to spend it.
|
||||
;Only npcs with ap left equal to or greater than the value given here will be considered.
|
||||
;Causes NPCs who complete their combat turn with ap left over will try and find other ways to spend it.
|
||||
;Only NPCs with ap left equal to or greater than the value given here will be considered.
|
||||
;Set to 0 to disable
|
||||
NPCsTryToSpendExtraAP=0
|
||||
|
||||
;Allows the use of tiles over 80*36 in size. sfall will just split and resave them at startup
|
||||
;Set to 1 to check all tiles on started (slow)
|
||||
;set to 2 if you provide a XLtiles.lst file in art/tiles/ containing a list of the tile ids that need checking
|
||||
;Set to 2 if you provide a XLtiles.lst file in art/tiles/ containing a list of the tile ids that need checking
|
||||
AllowLargeTiles=0
|
||||
|
||||
;Change the skilldex cursor frm numbers
|
||||
;Change the Skilldex cursor frm numbers
|
||||
;Default is 293 for all skills
|
||||
Lockpick=293
|
||||
Steal=293
|
||||
@@ -381,7 +382,7 @@ UseScrollingQuestsList=1
|
||||
;PremadeFIDs=201,203,202
|
||||
|
||||
;Use this line to modify the list of cities and their associated global variables used for city reputations
|
||||
;Syntax is 'city id : global id',with each city/global pair separated by a comma.
|
||||
;Syntax is 'city id : global id', with each city/global pair separated by a comma.
|
||||
;CityRepsCount=19
|
||||
;CityRepsList=0:47,2:48,1:49,4:50,5:51,3:52,8:53,6:54,7:55,13:56,10:57,11:59,14:61,17:63,19:64,18:65,25:66,9:294,20:308
|
||||
|
||||
@@ -391,10 +392,12 @@ UseScrollingQuestsList=1
|
||||
;Set to 1 to add additional pages of save slots
|
||||
ExtraSaveSlots=0
|
||||
|
||||
;Set to 1 to speed up the hp/ac counter animations
|
||||
;Set to 1 to speed up the HP/AC counter animations
|
||||
;Set to 2 to update the HP/AC counters instantly
|
||||
SpeedInterfaceCounterAnims=0
|
||||
|
||||
;These lines allow you to control the karma frm's displayed on the character screen
|
||||
;Number of KarmaPoints should be 1 less than number of KarmaFRMs
|
||||
;KarmaFRMsCount=3
|
||||
;KarmaFRMs=47,48,49
|
||||
;KarmaPoints=-100,100
|
||||
@@ -402,7 +405,7 @@ SpeedInterfaceCounterAnims=0
|
||||
;Set to 1 to allow science and repair to be used on the player, or 2 for all critters. (Rather than only brahmin/robots)
|
||||
ScienceOnCritters=0
|
||||
|
||||
;Modify this value to change the players speed of rotation on the inventory and character screens
|
||||
;Modify this value to change the player's speed of rotation on the inventory and character screens
|
||||
;Default is 166
|
||||
SpeedInventoryPCRotation=166
|
||||
|
||||
@@ -416,23 +419,17 @@ BonusHtHDamageFix=1
|
||||
;Set to 1 to display additional points of damage from Bonus HtH/Ranged Damage perks in the inventory
|
||||
DisplayBonusDamage=0
|
||||
|
||||
;Modify the maximum number of animations allowed to run on a map. (Default is 32)
|
||||
;Modify the maximum number of animations allowed to run on a map. (Default is 32, and the maximum is 127)
|
||||
AnimationsAtOnceLimit=120
|
||||
|
||||
;Set to 1 to fix issues with the wield_obj_critter script function.
|
||||
WieldObjCritterFix=1
|
||||
|
||||
;Set to 1 to remove the limits that stop the player rolling critical successes/misses in the first few days of game time
|
||||
RemoveCriticalTimelimits=0
|
||||
|
||||
;Set to 1 to enable party members with level 6 protos to reach level 6
|
||||
NPCStage6Fix=0
|
||||
|
||||
;Set to 1 to fix the problem with melee weapon equiped npcs being unable to attack multi-hex critters
|
||||
MultiHexPathingFix=1
|
||||
|
||||
;Change the colour of the font used on the main menu for the Fallout/sfall version number
|
||||
;It's the last byte ('3c' by default,) that picks the colour used. The first byte supplies additional flags
|
||||
;It's the last byte ('3c' by default) that picks the colour used. The first byte supplies additional flags
|
||||
;MainMenuFontColour=0x0600003c
|
||||
|
||||
;Two alternate fixes to the interaction between HtH attacks and the fast shot trait
|
||||
@@ -453,7 +450,7 @@ BoostScriptDialogLimit=0
|
||||
;DerivedStats=Stats.ini
|
||||
|
||||
;These options modify the checks to see if a critter can carry an additional item, changing which items are counted towards the weight limit and adding an additional size check
|
||||
;Set the mode to 0 to disable the size check, 1 to apply to pc only, 2 to apply to the pc and party members, or 3 to apply to all critters
|
||||
;Set the mode to 0 to disable the size check, 1 to apply to the PC only, 2 to apply to the PC and party members, or 3 to apply to all critters
|
||||
;Only the PC uses CritterInvSizeLimit. Other critters will use the extra unused stat (STAT_unused = 10)
|
||||
;Add 4 to the mode to limit the weight check to used items only
|
||||
CritterInvSizeLimitMode=0
|
||||
@@ -472,6 +469,12 @@ EncounterTableSize=0
|
||||
;Set to 1 to disable the pipboy alarm button
|
||||
DisablePipboyAlarm=0
|
||||
|
||||
;Uncomment the next four lines to move the main menu buttons and credit text (the 'Copyright(c)' line on the main menu)
|
||||
;MainMenuOffsetX=0
|
||||
;MainMenuOffsetY=0
|
||||
;MainMenuCreditsOffsetX=0
|
||||
;MainMenuCreditsOffsetY=0
|
||||
|
||||
;Prevents you from using super stims on a critter who is at full health.
|
||||
SuperStimExploitFix=0
|
||||
|
||||
@@ -482,13 +485,15 @@ QuickPocketsApCostReduction=2
|
||||
;Set to 1 to allow objects seeing through other objects with their ShootThru flag set
|
||||
ObjCanSeeObj_ShootThru_Fix=0
|
||||
|
||||
;These options change the bullet distribution of burst attacks
|
||||
;All the bullets are divided into three groups: central, left and right. These three groups will then travel along three parallel tracks, trying to hit targets on the way
|
||||
;Set the mod to 1 to enable the next four lines
|
||||
;Set to 1 to enable the balanced bullet distribution formula for burst attacks
|
||||
ComputeSprayMod=0
|
||||
|
||||
;These options modify the bullet distribution of burst attacks if ComputeSprayMod is 1
|
||||
;All the bullets are divided into three groups: central, left and right
|
||||
;These three groups will then travel along three parallel tracks, trying to hit targets on the way
|
||||
;CenterMult/Div set the ratio of how many bullets go to the central group, and remaining bullets are divided equally to left and right sides
|
||||
;TargetMult/Div set the ratio of how many bullets in the central group will attack the primary target directly
|
||||
;Multipliers are capped at divisor values.
|
||||
ComputeSprayMod=0
|
||||
;Multipliers are capped at divisor values
|
||||
ComputeSpray_CenterMult=1
|
||||
ComputeSpray_CenterDiv=3
|
||||
ComputeSpray_TargetMult=1
|
||||
@@ -524,43 +529,54 @@ CheckWeaponAmmoCost=0
|
||||
CombatPanelAnimDelay=1000
|
||||
;Controls the speed of dialog panel animations (lower - faster; valid range: 0..255)
|
||||
DialogPanelAnimDelay=33
|
||||
;Controls the speed of pipboy alarm clock animations (lower - faster; valid range: 0..127)
|
||||
PipboyTimeAnimDelay=50
|
||||
|
||||
;Allows you to directly control other critters in combat
|
||||
;Set to 0 to disable
|
||||
;Set to 1 to control all critters in combat
|
||||
;Set to 2 to control all party members
|
||||
;If you want to control only specific critters, uncomment the ControlCombatPIDList line and set it to a comma delimited list of PIDs
|
||||
;If you want to control only specific critters, uncomment the ControlCombatPIDList line and set a comma delimited list of PIDs
|
||||
ControlCombat=0
|
||||
;ControlCombatPIDList=62,89,97,107,160,161
|
||||
|
||||
;Set to 1 to stack empty identical weapons, no matter what type of ammo was loaded before
|
||||
StackEmptyWeapons=0
|
||||
|
||||
;Changes the way weapon reloading works when you drag ammo onto a weapon in the inventory
|
||||
;Set to -1 to disable (vanilla behavior with the 'Move Items' window)
|
||||
;Set to 0 to use all the ammo boxes to reload
|
||||
;Set to 1 or more to reserve the specified amount of ammo boxes and use all the rest to reload
|
||||
;If the amount of ammo boxes in the inventory is less than or equal to the reserve, only one box will be used
|
||||
ReloadReserve=-1
|
||||
|
||||
;Allows 9 options (lines of text) to be displayed correctly in a dialog window
|
||||
DialogOptions9Lines=0
|
||||
DialogOptions9Lines=1
|
||||
|
||||
;Set to 1 to leave the music playing in dialogue with talking heads
|
||||
EnableMusicInDialogue=0
|
||||
|
||||
;Prevents 'Too Many Items' bug from corrupting game saves
|
||||
TooManyItemsBugFix=1
|
||||
;Set to 1 to prevent the player from running while sneaking without Silent Running perk
|
||||
DontTurnOffSneakIfYouRun=0
|
||||
|
||||
;Set to 1 to fix a minor visual glitch when picking up a solo item from the top of inventory with a stack of multiple items at the bottom
|
||||
;Also fixes the inability to reload weapons by dragging ammo onto weapons in the inventory list
|
||||
InventoryDragIssuesFix=1
|
||||
;Set to 1 to fix the bug that unable to sell used geiger counters or stealth boys
|
||||
CanSellUsedGeiger=1
|
||||
|
||||
;Set to 1 to add proper checks for NPC's addiction instead of always using global variables
|
||||
;Also fixes Jet Antidote not working on NPCs
|
||||
NPCDrugAddictionFix=1
|
||||
|
||||
;Set to 1 to fix issues with NPC stats being dropped unreasonably if one has mutiple of the same armor in inventory and equips the armor,
|
||||
;And either you order NPC to remove the armor through dialog or one levels up
|
||||
ArmorCorruptsNPCStatsFix=1
|
||||
|
||||
;Set to 1 to fix the bug that NPCs become unresponsive and act like walking containers if you move to another map while they are under 'lost next turn' critical miss effect
|
||||
NPCTurnsIntoContainerFix=1
|
||||
|
||||
;Set to 1 to fix issues with being able to charge the car with using cells on scenary/critters and cells getting consumed even when the car is already fully charged
|
||||
;Set to 1 to fix the issue with being able to charge the car by using cells on other scenary/critters
|
||||
CarChargingFix=1
|
||||
|
||||
;Set to 1 to skip weapon equip/unequip animations when performing various actions
|
||||
InstantWeaponEquip=0
|
||||
|
||||
;To add additional game msg files, uncomment the next line and set a comma delimited list of filenames without .msg extension
|
||||
;You need to use the message_str_game script function to get messages from the files
|
||||
;ExtraGameMsgFileList=
|
||||
|
||||
;Set to 1 to display numbered dialogue options
|
||||
NumbersInDialogue=0
|
||||
|
||||
;Set to 1 to display sfall built-in credits at the bottom of credits.txt contents instead of at the top
|
||||
CreditsAtBottom=0
|
||||
|
||||
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
||||
[Debugging]
|
||||
@@ -570,18 +586,32 @@ CarChargingFix=1
|
||||
;Set to 1 to enable sfall debugging mode
|
||||
Enable=0
|
||||
|
||||
;Fallout 2 Debug Patch
|
||||
;Set to 1 to enable debugging output to screen or 2 to create a debug.log file
|
||||
;While you don't need to create an environment variable, you do still need to set the appropriate lines in fallout2.cfg
|
||||
;-------
|
||||
;[debug]
|
||||
;mode=environment
|
||||
;output_map_data_info=1
|
||||
;show_load_info=1
|
||||
;show_script_messages=1
|
||||
;show_tile_num=1
|
||||
;[sound]
|
||||
;debug=1
|
||||
;debug_sfxc=1
|
||||
;-------
|
||||
DebugMode=0
|
||||
|
||||
;Change to 1 to skip the compatibility mode check
|
||||
SkipCompatModeCheck=0
|
||||
|
||||
;Set to 1 to skip the executable file size check
|
||||
;Does not require enabling sfall debugging mode
|
||||
SkipSizeCheck=0
|
||||
|
||||
;If you're testing changes to the Fallout exe, you can override the crc that sfall looks for here
|
||||
;If you're testing changes to the Fallout exe, you can override the CRC that sfall looks for here
|
||||
;You can use several hex values, separated by commas
|
||||
;Does not require enabling sfall debugging mode
|
||||
;ExtraCRC=0x00000000,0x00000000
|
||||
|
||||
;Set to 1 to stop Fallout from deleting non readonly protos at startup
|
||||
@@ -591,7 +621,7 @@ DontDeleteProtos=0
|
||||
;Set to 1 to give scripts direct access to Fallout's address space, and to make arbitrary calls into Fallout's code
|
||||
AllowUnsafeScripting=0
|
||||
|
||||
;These options control what output is saved in the debug log
|
||||
;These options control what output is saved in the debug log (sfall-log.txt)
|
||||
|
||||
;Prints messages duing sfall initialization
|
||||
Init=0
|
||||
|
||||
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
|
||||
@@ -0,0 +1,9 @@
|
||||
"Take All" Hotkey mod for Fallout 2 by NovaRain
|
||||
----------------------------------------
|
||||
|
||||
- makes pressing the semicolon key send an uppercase A after a semicolon.
|
||||
- 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 *.int file to your scripts folder.
|
||||
|
||||
This mod is a simple example of how you can use HOOK_KEYPRESS hooks.
|
||||
@@ -6,7 +6,7 @@ This folder contains documentation about sfall scripting extensions.
|
||||
dik.h - DX scancodes constants for use with key_pressed function and HOOK_KEYPRESS
|
||||
|
||||
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
|
||||
|
||||
|
||||
@@ -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,47 @@
|
||||
#define OBJ_TYPE_MISC (5)
|
||||
#define OBJ_TYPE_SPATIAL (6)
|
||||
|
||||
/* 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
|
||||
#define ATKMODE_PRI_KICK 2
|
||||
#define ATKMODE_PRI_SWING 3
|
||||
#define ATKMODE_PRI_THRUST 4
|
||||
#define ATKMODE_PRI_THROW 5
|
||||
#define ATKMODE_PRI_SINGLE 6
|
||||
#define ATKMODE_PRI_BURST 7
|
||||
#define ATKMODE_PRI_FLAME 8
|
||||
#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
|
||||
|
||||
/* 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
|
||||
@@ -64,11 +83,13 @@
|
||||
#define PROTO_IT_SIZE (112)
|
||||
#define PROTO_IT_WEIGHT (116)
|
||||
#define PROTO_IT_COST (120)
|
||||
#define PROTO_IT_INV_FID (124)
|
||||
|
||||
// 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 +161,10 @@
|
||||
#define PROTO_DR_ADDICT_DELAY (100)
|
||||
|
||||
// critters
|
||||
#define PROTO_CR_ACTION_FLAGS (32)
|
||||
#define PROTO_CR_FLAGS (32)
|
||||
#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)
|
||||
@@ -205,5 +225,4 @@
|
||||
#define WPN_ANIM_MINIGUN (0x09) // (L)
|
||||
#define WPN_ANIM_ROCKET_LAUNCHER (0x0A) // (M)
|
||||
|
||||
|
||||
#endif // DEFINE_EXTRA_H
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,7 +1,7 @@
|
||||
#ifndef H_DIK
|
||||
#define H_DIK
|
||||
|
||||
// Listed are keyboard scan code constants (in decimal), taken from dinput.h
|
||||
// Listed are keyboard scan code constants (in decimal), taken from dinput.h
|
||||
|
||||
#define DIK_ESCAPE 1
|
||||
#define DIK_1 2
|
||||
@@ -14,9 +14,9 @@
|
||||
#define DIK_8 9
|
||||
#define DIK_9 10
|
||||
#define DIK_0 11
|
||||
#define DIK_MINUS 12 /* - on main keyboard */
|
||||
#define DIK_MINUS 12 /* - on main keyboard */
|
||||
#define DIK_EQUALS 13
|
||||
#define DIK_BACK 14 /* backspace */
|
||||
#define DIK_BACK 14 /* backspace */
|
||||
#define DIK_TAB 15
|
||||
#define DIK_Q 16
|
||||
#define DIK_W 17
|
||||
@@ -116,20 +116,20 @@
|
||||
#define DIK_RWIN 0xDC /* Right Windows key */
|
||||
#define DIK_APPS 0xDD /* AppMenu key */
|
||||
|
||||
#define DIK_BACKSPACE DIK_BACK /* backspace */
|
||||
#define DIK_NUMPADSTAR DIK_MULTIPLY /* * on numeric keypad */
|
||||
#define DIK_LALT DIK_LMENU /* left Alt */
|
||||
#define DIK_CAPSLOCK DIK_CAPITAL /* CapsLock */
|
||||
#define DIK_NUMPADMINUS DIK_SUBTRACT /* - on numeric keypad */
|
||||
#define DIK_NUMPADPLUS DIK_ADD /* + on numeric keypad */
|
||||
#define DIK_NUMPADPERIOD DIK_DECIMAL /* . on numeric keypad */
|
||||
#define DIK_NUMPADSLASH DIK_DIVIDE /* / on numeric keypad */
|
||||
#define DIK_RALT DIK_RMENU /* right Alt */
|
||||
#define DIK_UPARROW DIK_UP /* UpArrow on arrow keypad */
|
||||
#define DIK_PGUP DIK_PRIOR /* PgUp on arrow keypad */
|
||||
#define DIK_LEFTARROW DIK_LEFT /* LeftArrow on arrow keypad */
|
||||
#define DIK_RIGHTARROW DIK_RIGHT /* RightArrow on arrow keypad */
|
||||
#define DIK_DOWNARROW DIK_DOWN /* DownArrow on arrow keypad */
|
||||
#define DIK_PGDN DIK_NEXT /* PgDn on arrow keypad */
|
||||
#define DIK_BACKSPACE DIK_BACK /* backspace */
|
||||
#define DIK_NUMPADSTAR DIK_MULTIPLY /* * on numeric keypad */
|
||||
#define DIK_LALT DIK_LMENU /* left Alt */
|
||||
#define DIK_CAPSLOCK DIK_CAPITAL /* CapsLock */
|
||||
#define DIK_NUMPADMINUS DIK_SUBTRACT /* - on numeric keypad */
|
||||
#define DIK_NUMPADPLUS DIK_ADD /* + on numeric keypad */
|
||||
#define DIK_NUMPADPERIOD DIK_DECIMAL /* . on numeric keypad */
|
||||
#define DIK_NUMPADSLASH DIK_DIVIDE /* / on numeric keypad */
|
||||
#define DIK_RALT DIK_RMENU /* right Alt */
|
||||
#define DIK_UPARROW DIK_UP /* UpArrow on arrow keypad */
|
||||
#define DIK_PGUP DIK_PRIOR /* PgUp on arrow keypad */
|
||||
#define DIK_LEFTARROW DIK_LEFT /* LeftArrow on arrow keypad */
|
||||
#define DIK_RIGHTARROW DIK_RIGHT /* RightArrow on arrow keypad */
|
||||
#define DIK_DOWNARROW DIK_DOWN /* DownArrow on arrow keypad */
|
||||
#define DIK_PGDN DIK_NEXT /* PgDn on arrow keypad */
|
||||
|
||||
#endif
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,162 @@
|
||||
|
||||
#ifndef LIB_INVEN_H
|
||||
#define LIB_INVEN_H
|
||||
|
||||
#include "define_lite.h"
|
||||
|
||||
/**
|
||||
Inventory contents as temp array to be used in foreach
|
||||
*/
|
||||
procedure inven_as_array(variable critter) begin
|
||||
variable i:=0, list;
|
||||
list := temp_array(100, 4);
|
||||
while (inven_ptr(critter, i)) do begin
|
||||
if (i>=len_array(list)) then
|
||||
resize_array(list, len_array(list) + 100);
|
||||
list[i] := inven_ptr(critter, i);
|
||||
i++;
|
||||
end
|
||||
resize_array(list, i);
|
||||
return list;
|
||||
end
|
||||
|
||||
|
||||
procedure add_items_pid(variable who_obj, variable the_pid, variable pid_qty) begin
|
||||
variable item;
|
||||
item := create_object(the_pid,0,0);
|
||||
add_mult_objs_to_inven(who_obj, item, (pid_qty));
|
||||
return item;
|
||||
end
|
||||
|
||||
// aliases:
|
||||
#define add_item_pid(obj, pid) add_items_pid(obj, pid, 1)
|
||||
|
||||
#ifndef critter_wearing_armor
|
||||
#define critter_wearing_armor(x) (obj_item_subtype(critter_inven_obj(x,INVEN_TYPE_WORN)) == item_type_armor)
|
||||
#endif
|
||||
|
||||
procedure unwield_armor(variable who_obj) begin
|
||||
variable armor;
|
||||
if (not(who_obj)) then return;
|
||||
if (critter_wearing_armor(who_obj)) then begin
|
||||
armor := critter_inven_obj(who_obj,INVEN_TYPE_WORN);
|
||||
rm_obj_from_inven(who_obj, armor);
|
||||
add_obj_to_inven(who_obj, armor);
|
||||
end
|
||||
end
|
||||
|
||||
procedure remove_items_pid(variable who_obj, variable the_pid, variable pid_qty) begin
|
||||
variable begin
|
||||
item;
|
||||
removed_qty;
|
||||
tmp;
|
||||
end
|
||||
if (not(who_obj)) then return;
|
||||
removed_qty := obj_is_carrying_obj_pid(who_obj,the_pid);
|
||||
if (pid_qty < removed_qty and pid_qty != -1) then begin
|
||||
removed_qty := pid_qty;
|
||||
end
|
||||
if (removed_qty > 0) then begin
|
||||
item := obj_carrying_pid_obj(who_obj, the_pid);
|
||||
if (obj_type(who_obj) == 1) then begin
|
||||
if (critter_inven_obj(who_obj,INVEN_TYPE_WORN) == item) then begin
|
||||
call unwield_armor(who_obj);
|
||||
end else if ((critter_inven_obj(who_obj, INVEN_TYPE_LEFT_HAND) == item) or (critter_inven_obj(who_obj, INVEN_TYPE_RIGHT_HAND) == item)) then begin
|
||||
inven_unwield(who_obj);
|
||||
end
|
||||
end
|
||||
tmp := rm_mult_objs_from_inven(who_obj, item, removed_qty);
|
||||
destroy_object(item);
|
||||
end
|
||||
end
|
||||
|
||||
procedure remove_item_obj(variable who_obj, variable item) begin
|
||||
if (obj_type(who_obj) == 1) then begin
|
||||
if (critter_inven_obj(who_obj,INVEN_TYPE_WORN) == item) then begin
|
||||
call unwield_armor(who_obj);
|
||||
end else if ((critter_inven_obj(who_obj, INVEN_TYPE_LEFT_HAND) == item) or (critter_inven_obj(who_obj, INVEN_TYPE_RIGHT_HAND) == item)) then begin
|
||||
inven_unwield(who_obj);
|
||||
end
|
||||
end
|
||||
rm_obj_from_inven(who_obj, item);
|
||||
destroy_object(item);
|
||||
end
|
||||
|
||||
// aliases:
|
||||
#define remove_item_pid(obj, pid) remove_items_pid(obj, pid, 1)
|
||||
#define remove_all_items_pid(obj, pid) remove_items_pid(obj, pid, -1)
|
||||
|
||||
/**
|
||||
Set item quantity in inventory, by item pid
|
||||
*/
|
||||
procedure set_items_qty_pid(variable invenobj, variable itempid, variable newcount)
|
||||
begin
|
||||
variable begin
|
||||
count;
|
||||
obj;
|
||||
end
|
||||
count := obj_is_carrying_obj_pid(invenobj, itempid);
|
||||
if (newcount > count) then begin
|
||||
obj := create_object_sid(itempid, 0, 0, -1);
|
||||
add_mult_objs_to_inven(invenobj, obj, newcount - count);
|
||||
end else if (newcount < count) then begin
|
||||
call remove_items_pid(invenobj, itempid, count - newcount);
|
||||
end
|
||||
end
|
||||
|
||||
/*
|
||||
|
||||
procedure check_restock_item(the_item, min_amt, max_amt, res_perc)
|
||||
restock_amt := random(min_amt, max_amt);
|
||||
if (obj_is_carrying_obj_pid(self_obj, the_item) < restock_amt) then begin
|
||||
if (res_perc >= random(1,100)) then begin
|
||||
stock_pid_qty(self_obj, the_item, restock_amt)
|
||||
end
|
||||
end else begin
|
||||
stock_pid_qty(self_obj, the_item, restock_amt)
|
||||
end
|
||||
procedure check_restock_item_min_limit(the_item, min_amt, max_amt, res_perc)
|
||||
if (obj_is_carrying_obj_pid(self_obj, the_item) < min_amt) then begin
|
||||
check_restock_item(the_item, min_amt, max_amt, res_perc)
|
||||
end
|
||||
*/
|
||||
|
||||
|
||||
procedure reduce_merchant_loot(variable critter, variable moneyPercent, variable probArmor, variable probDrugs, variable probWeapons, variable probAmmo, variable probMisc) begin
|
||||
variable inv, item, it, prob, tmp;
|
||||
inv := inven_as_array(critter);
|
||||
item_caps_adjust(critter, -(item_caps_total(critter) * moneyPercent / 100));
|
||||
//display_msg("total items "+len_array(inv));
|
||||
foreach item in inv begin
|
||||
if (obj_pid(item) != PID_BOTTLE_CAPS) then begin
|
||||
it := obj_item_subtype(item);
|
||||
if (it == item_type_armor) then
|
||||
prob := probArmor;
|
||||
else if (it == item_type_drug) then
|
||||
prob := probDrugs;
|
||||
else if (it == item_type_weapon) then
|
||||
prob := probWeapons;
|
||||
else if (it == item_type_ammo) then
|
||||
prob := probAmmo;
|
||||
else
|
||||
prob := probMisc;
|
||||
if (random(0, 99) < prob) then begin
|
||||
//display_msg("remove "+obj_name(item));
|
||||
call remove_all_items_pid(critter, obj_pid(item));
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
procedure item_by_attack_type(variable critter, variable type) begin
|
||||
variable slot;
|
||||
if (type > 3 and type != ATKTYPE_LWEP_RELOAD and type != ATKTYPE_RWEP_RELOAD) then
|
||||
return 0;
|
||||
if (type < 2 or type == ATKTYPE_LWEP_RELOAD) then
|
||||
slot := INVEN_TYPE_LEFT_HAND;
|
||||
else
|
||||
slot := INVEN_TYPE_RIGHT_HAND;
|
||||
return critter_inven_obj(critter, slot);
|
||||
end
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,47 @@
|
||||
#ifndef LIB_MATH_H
|
||||
#define LIB_MATH_H
|
||||
|
||||
/**
|
||||
Numbers...
|
||||
*/
|
||||
|
||||
#define MAX(x, y) ((x > y) * x + (x <= y) * y)
|
||||
#define MIN(x, y) ((x < y) * x + (x >= y) * y)
|
||||
#define in_range(x, from, to) (x >= from and x <= to)
|
||||
|
||||
procedure max(variable x, variable y) begin
|
||||
if (x > y) then return x;
|
||||
return y;
|
||||
end
|
||||
|
||||
procedure min(variable x, variable y) begin
|
||||
if (x < y) then return x;
|
||||
return y;
|
||||
end
|
||||
|
||||
/*procedure round(variable val) begin
|
||||
variable intp;
|
||||
intp := floor(val);
|
||||
if ((val-intp) >= 0.5) then intp++;
|
||||
return intp;
|
||||
end*/
|
||||
|
||||
procedure ceil(variable val) begin
|
||||
variable intp;
|
||||
intp := floor(val);
|
||||
if (abs(val-intp) > 0.0) then begin
|
||||
intp++;
|
||||
end
|
||||
return intp;
|
||||
end
|
||||
|
||||
|
||||
procedure cap_number(variable num, variable min, variable max) begin
|
||||
if (num > max) then num := max;
|
||||
else if (num < min) then num := min;
|
||||
return num;
|
||||
end
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,85 @@
|
||||
#ifndef LIB_MISC_H
|
||||
#define LIB_MISC_H
|
||||
|
||||
/**
|
||||
Some generic procedures
|
||||
*/
|
||||
/*
|
||||
procedure round(variable val) begin
|
||||
variable intp;
|
||||
intp := floor(val);
|
||||
if ((val-intp) >= 0.5) then intp++;
|
||||
return intp;
|
||||
end*/
|
||||
|
||||
// this fixes strange behavior when using negative float values
|
||||
// looks like the only way to create correct negative float is to use atof()
|
||||
// DEPRECATED as of sfall 3.4 (engine bug fixed)
|
||||
/*procedure itof_safe(variable var) begin
|
||||
if (var < 0) then begin
|
||||
var := atof("-"+(-var));
|
||||
end
|
||||
return var;
|
||||
end*/
|
||||
|
||||
// Parse keyboard shortcut definition
|
||||
procedure parse_hotkey(variable string) begin
|
||||
variable lst;
|
||||
variable n;
|
||||
lst := string_split(string, "+");
|
||||
if (len_array(lst) == 0) then
|
||||
return 0;
|
||||
n := atoi(lst[0]);
|
||||
if (len_array(lst) > 1) then
|
||||
n += atoi(lst[1])*0x10000;
|
||||
return n;
|
||||
end
|
||||
|
||||
// Check if shortcut is pressed
|
||||
procedure hotkey_pressed(variable n) begin
|
||||
if (n < 0x10000) then
|
||||
return key_pressed(n);
|
||||
else
|
||||
return key_pressed(n bwand 0xFFFF) and key_pressed((n bwand 0xFFFF0000) / 0x10000);
|
||||
end
|
||||
|
||||
// same as above, but suited for hs_keypress hook when keycode is already known
|
||||
procedure hotkey_pressed_now(variable n, variable key) begin
|
||||
if (n < 0x10000) then
|
||||
return key == n;
|
||||
else begin
|
||||
variable k1 := (n bwand 0xFFFF),
|
||||
k2 := ((n bwand 0xFFFF0000) / 0x10000);
|
||||
if (k1 == key) then begin
|
||||
if (key_pressed(k2)) then return true;
|
||||
end else if (k2 == key) then begin
|
||||
if (key_pressed(k1)) then return true;
|
||||
end
|
||||
return false;
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
/**
|
||||
Attempt to make list_as_array safe
|
||||
*/
|
||||
/*procedure list_as_array_safe(variable type) begin
|
||||
variable list, item, arr, i;
|
||||
list := list_begin(type);
|
||||
arr := temp_array(100, 4);
|
||||
i := 0;
|
||||
item := list_next(list);
|
||||
while (item) do begin
|
||||
if (len_array(arr) == i) then resize_array(arr, len_array(arr) + 100);
|
||||
arr[i] := item;
|
||||
item := list_next(list);
|
||||
i++;
|
||||
end
|
||||
resize_array(arr, i);
|
||||
list_end(list);
|
||||
return arr;
|
||||
end*/
|
||||
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,243 @@
|
||||
/**
|
||||
|
||||
This library contains procedures to work with strings.
|
||||
|
||||
@author phobos2077
|
||||
|
||||
*/
|
||||
|
||||
#ifndef LIB_STRINGS_H
|
||||
#define LIB_STRINGS_H
|
||||
|
||||
#define is_in_string(str, substr) (string_pos(str, substr) != -1)
|
||||
#define string_starts_with(str, substr) (string_pos(str, substr) == 0)
|
||||
|
||||
/**
|
||||
* Returns position of first occurance of substr in str, or -1 if not found
|
||||
*/
|
||||
procedure string_pos(variable str, variable subst) begin
|
||||
variable lst, n;
|
||||
lst := string_split(str, subst);
|
||||
if (len_array(lst) < 2) then
|
||||
return -1;
|
||||
return strlen(lst[0]);
|
||||
end
|
||||
|
||||
/**
|
||||
* Join array of strings using delimeter
|
||||
*/
|
||||
procedure string_join(variable array, variable join) begin
|
||||
variable str, i, len;
|
||||
str := "";
|
||||
len := len_array(array);
|
||||
if (len > 0) then begin
|
||||
str := array[0];
|
||||
for (i:=1; i<len; i++) begin
|
||||
str += join + array[i];
|
||||
end
|
||||
end
|
||||
return str;
|
||||
end
|
||||
|
||||
/**
|
||||
* replaces all occurances of substring in a string with another substring
|
||||
*/
|
||||
#define string_replace(str, search, replace) (string_join(string_split(str, search), replace))
|
||||
|
||||
/**
|
||||
* sprintf with two arguments
|
||||
*/
|
||||
procedure sprintf2(variable str, variable arg1, variable arg2) begin
|
||||
variable split, len, i, j, arg;
|
||||
split := string_split(str, "%");
|
||||
len := len_array(split);
|
||||
str := "";
|
||||
if (len > 0) then begin
|
||||
str := split[0];
|
||||
j := 0;
|
||||
for (i := 1; i < len; i++) begin
|
||||
if (split[i] == "") then begin
|
||||
if (i < len - 1) then begin
|
||||
str += "%" + split[i+1];
|
||||
i++;
|
||||
end
|
||||
end else begin
|
||||
if (j == 0) then
|
||||
arg := arg1;
|
||||
else if (j == 1) then
|
||||
arg := arg2;
|
||||
else
|
||||
arg := 0;
|
||||
|
||||
str += sprintf("%" + split[i], arg);
|
||||
j++;
|
||||
end
|
||||
end
|
||||
end
|
||||
return str;
|
||||
end
|
||||
|
||||
/**
|
||||
* sprintf with unlimited number of arguments
|
||||
*/
|
||||
procedure sprintf_array(variable str, variable args) begin
|
||||
variable split, len, i, j;
|
||||
split := string_split(str, "%");
|
||||
len := len_array(split);
|
||||
str := "";
|
||||
if (len > 0) then begin
|
||||
str := split[0];
|
||||
j := 0;
|
||||
for (i := 1; i < len; i++) begin
|
||||
if (split[i] == "") then begin
|
||||
if (i < len - 1) then begin
|
||||
str += "%" + split[i+1];
|
||||
i++;
|
||||
end
|
||||
end else begin
|
||||
str += sprintf("%" + split[i], args[j]);
|
||||
j++;
|
||||
end
|
||||
end
|
||||
end
|
||||
return str;
|
||||
end
|
||||
|
||||
/**
|
||||
* Returns position of last occurance of substr in str, or -1 if not found
|
||||
*/
|
||||
/*procedure string_rpos(variable str, variable substr) begin
|
||||
variable lst, n;
|
||||
lst := string_split(str, substr);
|
||||
n := len_array(lst);
|
||||
if (n < 2) then
|
||||
return -1;
|
||||
return string_len(str) - (string_len(lst[n-1]) + string_len(substr));
|
||||
end*/
|
||||
|
||||
/**
|
||||
* Basically the same as string_split, but delim is of type char instead of string
|
||||
*/
|
||||
procedure string_get_tokens(variable str, variable delim) begin
|
||||
variable lst, line, token, maxlen, len, count;
|
||||
count := 1;
|
||||
maxlen := 4;
|
||||
token := tokenize(str, 0, delim);
|
||||
//if (token != 0) then
|
||||
//count := 1;
|
||||
line := token;
|
||||
while (line != str) do begin
|
||||
count += 1;
|
||||
len := strlen(token);
|
||||
if (len > maxlen) then
|
||||
maxlen := len;
|
||||
token := tokenize(str, line, delim);
|
||||
if (token != 0) then
|
||||
line += delim + token;
|
||||
end
|
||||
//end
|
||||
|
||||
return count;
|
||||
end
|
||||
|
||||
procedure string_repeat(variable str, variable count) begin
|
||||
variable out := "", i := 0;
|
||||
while (i < count) do begin
|
||||
out += str;
|
||||
i++;
|
||||
end
|
||||
return out;
|
||||
end
|
||||
|
||||
/**
|
||||
* Workaround for string_split bug in sfall 3.3
|
||||
* DEPRECATED as of sfall 3.4 (bug fixed)
|
||||
*/
|
||||
procedure string_split_safe(variable str, variable split) begin
|
||||
variable lst;
|
||||
str += split;
|
||||
lst := string_split(str, split);
|
||||
resize_array(lst, len_array(lst) - 1);
|
||||
return lst;
|
||||
end
|
||||
|
||||
/**
|
||||
* The same as sfall string_split, but returns array of integers instead
|
||||
* Useful in cunjunction with is_in_array()
|
||||
*/
|
||||
procedure string_split_ints(variable str, variable split) begin
|
||||
variable i := 0;
|
||||
variable list;
|
||||
list := string_split(str, split);
|
||||
while (i < len_array(list)) do begin
|
||||
list[i] := atoi(list[i]);
|
||||
i++;
|
||||
end
|
||||
return list;
|
||||
end
|
||||
|
||||
|
||||
/**
|
||||
String parse functions. Idea taken from KLIMaka on TeamX forums.
|
||||
Placeholders in format %d% are replaced from string. d refers to variable index (starting from 1).
|
||||
You can repeat one placeholder multiple times, or use placeholders in any order.
|
||||
|
||||
Example:
|
||||
parse_str_2("Hello, %2%. I have only $%1% to spare.", money_amount, dude_name);
|
||||
Will return:
|
||||
Hello, Killiano. I have only $1200 to spare.
|
||||
|
||||
The *_list function takes a temp_array as second parameter.
|
||||
*/
|
||||
|
||||
#define _TOKENIZE_BEGIN \
|
||||
variable token, rest, line, result, n; \
|
||||
line := tokenize(str, 0, '%'); \
|
||||
result := line; \
|
||||
while line != str do begin \
|
||||
token := tokenize(str, line, '%'); \
|
||||
line += "%" + token; \
|
||||
if token == "" then result += "%"; \
|
||||
else begin
|
||||
|
||||
#define _TOKENIZE_END \
|
||||
end \
|
||||
rest := tokenize(str, line, '%'); \
|
||||
if (rest != 0) then begin \
|
||||
line += "%" + rest; \
|
||||
result += rest; \
|
||||
end \
|
||||
end \
|
||||
return result;
|
||||
|
||||
|
||||
procedure parse_str_list(variable str, variable list) begin
|
||||
_TOKENIZE_BEGIN
|
||||
n := atoi(token) - 1;
|
||||
if (n >= 0 and n < len_array(list)) then result += list[n];
|
||||
_TOKENIZE_END
|
||||
end
|
||||
|
||||
procedure parse_str_2(variable str, variable x1, variable x2) begin
|
||||
_TOKENIZE_BEGIN
|
||||
n := atoi(token);
|
||||
if (n == 1) then result += x1;
|
||||
else if (n == 2) then result += x2;
|
||||
_TOKENIZE_END
|
||||
end
|
||||
|
||||
procedure parse_str_4(variable str, variable x1, variable x2, variable x3, variable x4) begin
|
||||
_TOKENIZE_BEGIN
|
||||
n := atoi(token);
|
||||
if (n == 1) then result += x1;
|
||||
else if (n == 2) then result += x2;
|
||||
else if (n == 3) then result += x3;
|
||||
else if (n == 4) then result += x4;
|
||||
_TOKENIZE_END
|
||||
end
|
||||
|
||||
#undef _TOKENIZE_BEGIN
|
||||
#undef _TOKENIZE_END
|
||||
|
||||
#endif
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user