mirror of
https://github.com/sfall-team/sfall.git
synced 2026-07-27 16:52:34 -07:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
914c653d69 | ||
|
|
6d412e97fc | ||
|
|
1141348efe | ||
|
|
5c9d512d12 | ||
|
|
d36031613d | ||
|
|
cf277efc85 | ||
|
|
9a3b770182 | ||
|
|
fa9aa6dc6f | ||
|
|
3d99f6ea66 | ||
|
|
a02d90a52e | ||
|
|
ce5e9cd990 | ||
|
|
c71ca95665 | ||
|
|
2f750a8a4b | ||
|
|
ac28d7293b | ||
|
|
51dfee26d3 | ||
|
|
cbe6be6c46 | ||
|
|
349d217257 | ||
|
|
4e9d4f2f37 | ||
|
|
5eac185bfe | ||
|
|
e696db4b7b | ||
|
|
88d9126b18 | ||
|
|
a1d18983e4 | ||
|
|
8179583160 | ||
|
|
876616fc7d | ||
|
|
008692bec7 | ||
|
|
0dd8ea5335 | ||
|
|
bf9deabded | ||
|
|
11bcbe2013 | ||
|
|
806e09e501 | ||
|
|
2eb1c64bc3 | ||
|
|
a9cde5757f | ||
|
|
f16ba16d21 | ||
|
|
0ce02e2a12 | ||
|
|
96447ca1d3 | ||
|
|
a7355ad937 | ||
|
|
2badb5fdd2 | ||
|
|
282a491718 | ||
|
|
43fcaf41e1 | ||
|
|
3df322b80e | ||
|
|
0945382369 | ||
|
|
69ccc1cfab | ||
|
|
ac4e4c7868 | ||
|
|
d46bb42efd | ||
|
|
aa132d9951 | ||
|
|
dfb7779e87 | ||
|
|
19df2f9eec | ||
|
|
e6d30d7def | ||
|
|
c657a9ef86 | ||
|
|
cbccc7de4e | ||
|
|
8fa54d8255 | ||
|
|
46a5616b34 | ||
|
|
ff4757d529 | ||
|
|
b0a35eec49 | ||
|
|
d553e9cbdd | ||
|
|
d2b1cdec46 | ||
|
|
37b4a18770 | ||
|
|
fd1067373a | ||
|
|
82b75f4ea2 | ||
|
|
435180d157 | ||
|
|
694d97e123 | ||
|
|
a27f020edc | ||
|
|
da5484668c | ||
|
|
600360638e | ||
|
|
19be167c19 | ||
|
|
deaaf6a137 | ||
|
|
29da941582 | ||
|
|
b178e15b31 | ||
|
|
2491cb22af | ||
|
|
85afa1e4d8 | ||
|
|
64da4dce6c | ||
|
|
e10b7ca718 | ||
|
|
586d41cce8 | ||
|
|
30d249f02e | ||
|
|
467d895ba6 | ||
|
|
bfaed2eb68 | ||
|
|
a43a28fe8b | ||
|
|
5dd8c441b9 | ||
|
|
440cfbd72c | ||
|
|
1db8988368 | ||
|
|
6ecc1fcd1f | ||
|
|
6c8bbea764 | ||
|
|
d947150dc1 | ||
|
|
f5ecaa8bd2 | ||
|
|
e389bb0dc5 | ||
|
|
94296b40d8 | ||
|
|
fab5aa2f2f | ||
|
|
703073e255 | ||
|
|
d888161128 | ||
|
|
ea921aabbd | ||
|
|
b263b69fa3 | ||
|
|
6bb56b0f95 | ||
|
|
9a4f0c7505 | ||
|
|
c89a18522d | ||
|
|
c7ccb7f2c2 | ||
|
|
b25ca683f3 | ||
|
|
e28b3a5796 | ||
|
|
a9c74501df | ||
|
|
b03b93d6fc | ||
|
|
1f696b9f12 | ||
|
|
3d2d1cdf2a | ||
|
|
42347ac062 | ||
|
|
007b415740 | ||
|
|
35d2491bcb | ||
|
|
ece76ee726 | ||
|
|
d6f4a23527 | ||
|
|
045ad2f5d7 | ||
|
|
13703f1a3b | ||
|
|
58bb77d79f | ||
|
|
229371e4ab | ||
|
|
1884e279c7 | ||
|
|
e81d79e43e | ||
|
|
f731de7a25 | ||
|
|
0d6bc33279 |
@@ -13,18 +13,25 @@ Count=0
|
||||
[1]
|
||||
; drug item PID
|
||||
PID=0
|
||||
|
||||
; set a limit on the count of first and second delayed effects when using the drug, i.e. if the queue has delayed effects from the drug,
|
||||
; and their count is greater or equal to NumEffects, it is not possible to obtain new effects from using the drug
|
||||
; this count is 4 for Buffout/Mentats/Psycho/Jet
|
||||
; e.g. this count is 4 for Buffout/Mentats/Psycho/Jet
|
||||
; set -1 to leave this parameter unchanged
|
||||
NumEffects=-1
|
||||
|
||||
; the duration of the addiction effect in game minutes (i.e. 1440 = 24 game hours)
|
||||
; set to 0 to use the default time (7 days for all drugs except Jet)
|
||||
; set to 0 to use the default time of 7 days (as all drugs except Jet)
|
||||
AddictTime=0
|
||||
|
||||
; the number of the global variable from vault13.gam responsible for displaying addiction in the character screen
|
||||
; if you set GvarID with numbers: 21-26, 295, 296, or variable numbers that have already been declared in previous sections,
|
||||
; the TextID and FrmID options in this section will be ignored
|
||||
; set to 0 if the addiction is not required
|
||||
GvarID=0
|
||||
|
||||
; the index number from editor.msg to display the title of the addiction (the description uses the index number of TextID + 100)
|
||||
TextID=-1
|
||||
|
||||
; the line number (0-indexed) of the corresponding FRM in skilldex.lst
|
||||
FrmID=-1
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
;This file handles modifications to perks and traits
|
||||
;When adding extra perks to a mod, it's advisable to use
|
||||
; the fake perk scripting functions rather than make modifications
|
||||
; in this file, as some perks have hardcoded effects which may
|
||||
; catch you out
|
||||
;Since traits need to be picked before any scripts run, they
|
||||
; have an additional NoHardcode option in this file which can
|
||||
|
||||
;When adding extra perks to a mod, it's advisable to use the fake perk scripting functions rather than make modifications
|
||||
; in this file, as some perks have hardcoded effects which may catch you out
|
||||
|
||||
;Since traits need to be picked before any scripts run, they have an additional NoHardcode option in this file which can
|
||||
; be used to remove their hardcoded effects, and add new stat/skill effects
|
||||
|
||||
[PerksTweak]
|
||||
@@ -31,41 +30,35 @@ WeaponHandlingBonus=3
|
||||
;Set to 1 to enable the modifications for perks
|
||||
Enable=0
|
||||
|
||||
;Name=The name of the perk (max 63 characters)
|
||||
;Desc=The description of the perk (max 255 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
|
||||
;Name: The name of the perk (max 63 characters)
|
||||
;Desc: The description of the perk (max 255 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/Skill2: The first/second skill (or -1 for none) to check, but if you set a specific bit 0x4000000 (67108864), it checks GVAR.
|
||||
; For example, if Skill1=0x4000004, then the perk will check GVAR_BAD_MONSTER (0x4000000 + 4) on Skill1Mag value
|
||||
|
||||
;Skill1Mag/Skill2Mag: Positive value is used as the minimum requirements of the first/second 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
|
||||
|
||||
;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)
|
||||
|
||||
;You can add simple extra perks with ID numbers from 119 to 255
|
||||
; that do not require using scripting functions to change player stats, and can also be used for Armor perks
|
||||
;These parameters are only for extra perks
|
||||
;Stat1-Stat2 = same as Stat
|
||||
;Stat1Mag-Stat2Mag = same as StatMag
|
||||
;Skill3-Skill5 = The skill to be modified (or -1 for none)
|
||||
;Skill3Mod-Skill5Mod = The increased/decreased value to the modified skill
|
||||
;Stat1/Stat2: same as Stat
|
||||
;Stat1Mag/Stat2Mag: same as StatMag
|
||||
;Skill3-Skill5: The skill to be modified (or -1 for none)
|
||||
;Skill3Mod-Skill5Mod: The increased/decreased value to the modified skill
|
||||
|
||||
;##############################################################################
|
||||
;This is a modification to vanilla perk 0
|
||||
|
||||
@@ -40,7 +40,7 @@ Image=24
|
||||
ButtonCount=3
|
||||
|
||||
;Set the appearance of the elevator
|
||||
MainFrm=148
|
||||
ButtonsFrm=151
|
||||
MainFrm=148 ; EL_VAULT.FRM
|
||||
ButtonsFrm=151 ; EL_MIL3.FRM
|
||||
|
||||
;Set up the exit points for all three buttons (see examples above)
|
||||
|
||||
@@ -21,6 +21,7 @@ CheckLOS=0
|
||||
; 16 - bright yellow
|
||||
; 32 - dark yellow
|
||||
; 64 - purple
|
||||
; You can set a custom color from the game palette by multiplying the color index value by 256 (available since sfall 4.2.7)
|
||||
OutlineColor=16
|
||||
|
||||
; Motion Scanner mode:
|
||||
|
||||
+48
-40
@@ -1,5 +1,5 @@
|
||||
;sfall configuration settings
|
||||
;v4.2.4
|
||||
;v4.2.8
|
||||
|
||||
[Main]
|
||||
;Change to 1 if you want to use command line args to tell sfall to use another ini file.
|
||||
@@ -18,10 +18,10 @@ UseCommandLine=0
|
||||
;The greater numbers take precedence over lesser numbers
|
||||
;PatchFile0=mods\RP_data
|
||||
|
||||
;Path to the folder in which the game will automatically search and load custom .dat files
|
||||
;The data load order of the .dat files in the folder will be in reverse alphabetical order of the filenames
|
||||
;The .dat files specified in the PatchFileXX options will have higher priority than others
|
||||
;Uncomment the option to specify a different folder path. The default path is <GameRoot>\mods\
|
||||
;Path to the folder in which the game will automatically search and load custom files (by *.dat mask, including folders)
|
||||
;The data load order of the files in the folder will be in reverse alphabetical order of the filenames
|
||||
;The files placed in this folder will have higher priority than the PatchFileXX options
|
||||
;This option has no effect in v4.2.6 or later. The default path is <GameRoot>\mods\
|
||||
;AutoSearchPath=mods
|
||||
|
||||
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
||||
@@ -44,7 +44,7 @@ SpeedMulti9=900
|
||||
;The initial speed at game startup
|
||||
SpeedMultiInitial=100
|
||||
|
||||
;Set to 1 to also affect the playback speed of mve video files without an audio track
|
||||
;Set to 1 to also affect the playback speed of MVE video files without an audio track
|
||||
AffectPlayback=0
|
||||
|
||||
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
||||
@@ -69,8 +69,14 @@ WindowData=0
|
||||
|
||||
;Uncomment the option to use a hardware shader (requires DX9 graphics mode)
|
||||
;The shader file <name>.fx must be placed in <GameRoot>\<master_patches>\shaders\ and must contain one technique with one or more passes
|
||||
;You can specify multiple shader files, separated by commas
|
||||
;GlobalShaderFile=global.fx
|
||||
|
||||
;Set to 1 to automatically enable linear texture filtering when the scale factor is not an integer
|
||||
;Set to 2 to force-enable linear texture filtering
|
||||
;This can be used in conjunction with the GlobalShaderFile option
|
||||
TextureFilter=1
|
||||
|
||||
;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
|
||||
@@ -84,7 +90,8 @@ GPUBlt=0
|
||||
;Requires DX9 graphics mode and v2.0 pixel shader support (see GPUBlt option)
|
||||
Use32BitHeadGraphics=0
|
||||
|
||||
;Set to 1 to automatically search for alternative avi video files when Fallout tries to play the game movies
|
||||
;Set to 1 to automatically search for alternative AVI video files when Fallout tries to play the game movies
|
||||
;Set to 2 to force AVI videos to fit the screen width
|
||||
;Requires DX9 graphics mode
|
||||
AllowDShowMovies=0
|
||||
|
||||
@@ -121,20 +128,20 @@ WorldMapTerrainInfo=0
|
||||
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
||||
[Sound]
|
||||
;Sets the number of allowed simultaneous sound effects
|
||||
;Set to 0 to leave the default unchanged (i.e. 4)
|
||||
;Set to 0 to leave the default unchanged (i.e. 4). The maximum is 32
|
||||
NumSoundBuffers=0
|
||||
|
||||
;Set to 1 to allow attaching sound files to combat float messages
|
||||
AllowSoundForFloats=0
|
||||
|
||||
;Set to 1 to automatically search for alternative formats (mp3/wma/wav) when Fallout tries to play an acm
|
||||
;Set to 2 to play alternative music files even if original acm files are not present in the music folder
|
||||
;Set to 1 to automatically search for alternative formats (mp3/wma/wav) when Fallout tries to play an ACM
|
||||
;Set to 2 to play alternative music files even if original ACM files are not present in the music folder
|
||||
;This does not effect the play_sfall_sound and stop_sfall_sound script functions
|
||||
AllowDShowSound=0
|
||||
|
||||
;Set to 1 to override the music path used by default (i.e. data\sound\music\) if not present in the cfg
|
||||
;Set to 2 to overwrite all occurances of the music path
|
||||
OverrideMusicDir=2
|
||||
;Set to 1 to override the default music path with data\sound\music\ if music_path is not present in the cfg
|
||||
;Set to 2 to overwrite all occurrences of the music path
|
||||
OverrideMusicDir=1
|
||||
|
||||
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
||||
[Input]
|
||||
@@ -193,7 +200,7 @@ SpeedKey9=0x00
|
||||
;Set to -1 for either ctrl key, -2 for either alt key or -3 for either shift key
|
||||
WindowScrollKey=0
|
||||
|
||||
;A key to press to reload your currently equipped weapon
|
||||
;A key to press to reload your currently equipped weapon or use the active item
|
||||
;Set to 0 if you don't want a reload key, or a DX scancode otherwise
|
||||
ReloadWeaponKey=0
|
||||
|
||||
@@ -284,7 +291,8 @@ DialogGenderWords=0
|
||||
;FemaleDefaultModel=hfjmps
|
||||
|
||||
;To change the various ingame movies, modify the next 17 lines
|
||||
;Most of these can also be changed ingame via script.
|
||||
;You can also define additional movies by adding Movie18 - Movie32 lines
|
||||
;Most of these can also be changed ingame via script
|
||||
Movie1=iplogo.mve
|
||||
Movie2=intro.mve
|
||||
Movie3=elder.mve
|
||||
@@ -340,7 +348,7 @@ 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
|
||||
;Set to 1 to disable the Horrigan encounter
|
||||
DisableHorrigan=0
|
||||
|
||||
;Set to 1 to disable the random element in NPC levelling.
|
||||
@@ -361,7 +369,7 @@ SingleCore=1
|
||||
OverrideArtCacheSize=0
|
||||
|
||||
;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.
|
||||
;Note that even with this option enabled, it is still not advisable to save in combat at all (obsolete information)
|
||||
;Set to 2 to block all saving in combat
|
||||
SaveInCombatFix=1
|
||||
|
||||
@@ -369,9 +377,9 @@ SaveInCombatFix=1
|
||||
;Player's level is capped once the highest specified level is reached
|
||||
;XPTable=50,100,200
|
||||
|
||||
;Set to 1 to enable additional weapon animation codes from o-t
|
||||
;Set to 1 to enable additional weapon animation codes from o to t
|
||||
;The 4 byte value at 0x39 of weapon protos may range from 0 to 15 rather than 0 to 10
|
||||
;Since the letters 'n' and 'r' are in use for other animations, an animation code of 11 corrisponds to 's' and 15 to 't'
|
||||
;Since the letters 'n' and 'r' are in use for other animations, an animation code of 11 corresponds to 's' and 15 to 't'
|
||||
AdditionalWeaponAnims=1
|
||||
|
||||
;Uncomment these lines to modify the default modifiers for aimed shots at specific bodyparts
|
||||
@@ -404,14 +412,14 @@ AlwaysReloadMsgs=0
|
||||
PlayIdleAnimOnReload=0
|
||||
|
||||
;Changes the timer (in days) for deleting corpses on a map after you leave (valid range: 0..13)
|
||||
;The corpses of critters with 'Ages' flag or on maps with 'dead_bodies_age=No' set in maps.txt will not disappear
|
||||
;The corpses of critters with 'Ages' flag set or on maps with 'dead_bodies_age=No' set in maps.txt will not disappear
|
||||
;Default is 6. Set to 0 for a 12-hour timer
|
||||
CorpseDeleteTime=6
|
||||
|
||||
;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 (WinXP/2000: if processes have equal priority)
|
||||
;Set to 1 (or some higher number if needed, the maximum is 127) to prevent 100% CPU use
|
||||
;Set to 1 (or some higher number if needed) to prevent 100% CPU use. The maximum is 127
|
||||
ProcessorIdle=-1
|
||||
|
||||
;Set to 1 if using the hero appearance mod
|
||||
@@ -532,10 +540,11 @@ RemoveCriticalTimelimits=0
|
||||
;Change the colour of the font used on the main menu for the button text
|
||||
;MainMenuBigFontColour=0x3C
|
||||
|
||||
;Two alternate fixes to the interaction between HtH attacks and the fast shot trait
|
||||
;0 - Fallout 2 original behaviour
|
||||
;1 - Haenlomal's fix, called shots are enabled for HtH attacks
|
||||
;2 - Restoring the -1 AP bonus for HtH attacks (i.e. Fallout 1 behaviour)
|
||||
;Alternative behaviors to the Fast Shot trait
|
||||
;0 - Fallout 2 original behavior: -1 AP cost for ranged weapons; aimed attacks are disabled
|
||||
;1 - Haenlomal's fix: aimed attacks are enabled for melee/unarmed weapons and HtH attacks
|
||||
;2 - Alternative behavior: apply -1 AP cost to melee/unarmed weapons and HtH attacks
|
||||
;3 - Fallout 1 original behavior: -1 AP cost for all weapons; aimed attacks are disabled
|
||||
FastShotFix=1
|
||||
|
||||
;Set to 1 to boost the maximum number of script names from 1450 to 10000
|
||||
@@ -554,8 +563,10 @@ CritterInvSizeLimit=100
|
||||
;2 - Motion sensor doesn't require charges
|
||||
MotionScannerFlags=1
|
||||
|
||||
;Set to non-0 to adjust the maximum encounter table size
|
||||
;Default is 40, and the maximum is 127
|
||||
;Set a value greater than 40 to change the maximum encounter table size (enc_## in worldmap.txt)
|
||||
;Default is 40, and the maximum is 100
|
||||
;Note: Setting this greater than 50 requires renumbering all message lines for the encounter tables in worldmap.msg
|
||||
;The messages for each table must be numbered from (3000 + table number * 100) to (3099 + table number * 100)
|
||||
EncounterTableSize=0
|
||||
|
||||
;Set to 1 to disable the pipboy alarm button
|
||||
@@ -574,8 +585,8 @@ SuperStimExploitFix=0
|
||||
InventoryApCost=4
|
||||
QuickPocketsApCostReduction=2
|
||||
|
||||
;Set to 1 to allow objects seeing through other objects that have their ShootThru flag set
|
||||
;Note that enabling this option can cause unexpected NPC behavior in some situations
|
||||
;Set to 1 to fix obj_can_see_obj script function to allow critters to see through objects with 'ShootThru' flag set and other critters in front of them
|
||||
;Note that enabling this option can cause unexpected NPC behavior in some cases, e.g. initiating combat or dialogue when the player is behind certain obstacles
|
||||
ObjCanSeeObj_ShootThru_Fix=0
|
||||
|
||||
;Set to 1 to fix the broken obj_can_hear_obj script function
|
||||
@@ -585,11 +596,10 @@ ObjCanHearObjFix=0
|
||||
;If the argument value is -1, the mood will be determined by the local variable 0 of the script (vanilla behavior)
|
||||
StartGDialogFix=0
|
||||
|
||||
;Set to 1 to fix and repurpose the unused called_shot/num_attacks arguments of attack_complex script function
|
||||
;This also changes the behavior of the result flags arguments
|
||||
;called_shot - additional damage, when the damage received by the target is above the specified minimum damage
|
||||
;Set to 1 to fix attacker_results/target_results arguments and repurpose the unused called_shot/num_attacks arguments of attack_complex script function
|
||||
;New behavior of the arguments:
|
||||
;called_shot - additional damage when hitting the target
|
||||
;num_attacks - the number of free action points on the first turn only
|
||||
;attacker_results - unused, must be 0 or not equal to the target_results argument when specifying result flags for the target
|
||||
AttackComplexFix=0
|
||||
|
||||
;Set to 1 to fix the issue with the division operator treating negative integers as unsigned
|
||||
@@ -696,8 +706,9 @@ NumbersInDialogue=0
|
||||
;Set to 1 to use Fallout's normal text font instead of DOS-like font on the world map
|
||||
WorldMapFontPatch=0
|
||||
|
||||
;Set to 1 to keep the selected attack mode when moving the weapon between active item slots
|
||||
KeepWeaponSelectMode=1
|
||||
;Set to 1 to use Fallout's normal text font for death screen subtitles
|
||||
;Requires changing the color of subtitles in death.pal palette to white color (index 220) to display the text correctly
|
||||
DeathScreenFontPatch=0
|
||||
|
||||
;Set to 1 to display full item description for weapon/ammo in the barter screen
|
||||
FullItemDescInBarter=0
|
||||
@@ -715,13 +726,10 @@ PartyMemberExtraInfo=0
|
||||
;that overrides First Aid/Doctor functions has very limited usefulness
|
||||
PartyMemberSkillFix=0
|
||||
|
||||
;Set to 1 to skip loading all game settings except the game/combat difficulty from a saved game
|
||||
;Set to 1 to skip loading all game settings except the game/combat difficulty from saved games
|
||||
;Set to 2 to also skip loading the game/combat difficulty settings
|
||||
SkipLoadingGameSettings=0
|
||||
|
||||
;Set to 1 to prevent the inventory/loot/automap interfaces from being placed on top of other script-created windows
|
||||
InterfaceDontMoveOnTop=0
|
||||
|
||||
;Overrides the global variable number used to show the special death message of the Modoc toilet explosion
|
||||
;Set to -1 to disable the special death message when the global variable is set
|
||||
SpecialDeathGVAR=491
|
||||
@@ -831,7 +839,7 @@ DontDeleteProtos=0
|
||||
;Set to 1 to force sfall to inject all hooks code into the game, even if corresponding hook scripts don't exist
|
||||
InjectAllGameHooks=0
|
||||
|
||||
;Set to 1 to force sfall to search for global scripts every time the game loads rather than only once on the first game start
|
||||
;Set to 1 to force sfall to search for global/hook scripts every time the game loads rather than only the first time
|
||||
AlwaysFindScripts=0
|
||||
|
||||
;Set to 1 to force critters to display combat float messages
|
||||
|
||||
Binary file not shown.
@@ -12,52 +12,58 @@ Requires sfall 3.5 or higher
|
||||
|
||||
*/
|
||||
|
||||
#include "..\headers\define_extra.h"
|
||||
#include "..\headers\sfall\sfall.h"
|
||||
#include "..\headers\sfall\define_extra.h"
|
||||
|
||||
procedure set_ammo_mod;
|
||||
procedure start;
|
||||
procedure map_enter_p_proc;
|
||||
|
||||
variable ammoIni;
|
||||
variable ammoData;
|
||||
variable enabled;
|
||||
|
||||
procedure set_ammo_mod begin
|
||||
variable pid, dmg_mod, i := 1;
|
||||
|
||||
while (i > 0) do begin
|
||||
pid := get_ini_setting(ammoIni + "|" + i + "|pid");
|
||||
if (pid < 1) then break;
|
||||
set_proto_data(pid, PROTO_AM_AC_MOD, get_ini_setting(ammoIni + "|" + i + "|ac_adjust"));
|
||||
set_proto_data(pid, PROTO_AM_DR_MOD, get_ini_setting(ammoIni + "|" + i + "|dr_adjust"));
|
||||
|
||||
// dam_mult and dam_div must be positive integers
|
||||
dmg_mod := get_ini_setting(ammoIni + "|" + i + "|dam_mult");
|
||||
if (dmg_mod < 1) then dmg_mod := 1;
|
||||
set_proto_data(pid, PROTO_AM_DMG_MULT, dmg_mod);
|
||||
dmg_mod := get_ini_setting(ammoIni + "|" + i + "|dam_div");
|
||||
if (dmg_mod < 1) then dmg_mod := 1;
|
||||
set_proto_data(pid, PROTO_AM_DMG_DIV, dmg_mod);
|
||||
|
||||
i++;
|
||||
end
|
||||
//debug_msg("AmmoMod: " + ammoIni + " - set " + (i - 1) + " ammo protos.");
|
||||
end
|
||||
|
||||
procedure start begin
|
||||
variable i := 1, ammo, ammoPid, dmgMod;
|
||||
if game_loaded then begin
|
||||
ammoIni := get_ini_setting("ddraw.ini|Misc|DamageFormula");
|
||||
if (ammoIni == 1 or ammoIni == 2) then
|
||||
enabled := get_ini_setting("ddraw.ini|Misc|DamageFormula");
|
||||
if (enabled == 1 or enabled == 2) then
|
||||
ammoIni := "AmmoGlovz.ini";
|
||||
else if (ammoIni == 5) then
|
||||
else if (enabled == 5) then
|
||||
ammoIni := "AmmoYAAM.ini";
|
||||
else
|
||||
ammoIni := "AmmoMod.ini";
|
||||
|
||||
enabled := get_ini_setting(ammoIni + "|1|pid");
|
||||
if (enabled > 0) then call set_ammo_mod;
|
||||
if (enabled <= 0) then return;
|
||||
|
||||
ammoData := create_array_map;
|
||||
ammoPid := enabled; // pid from the first section
|
||||
while (ammoPid > 0) do begin
|
||||
ammo := create_array_map; // create permanent arrays
|
||||
ammo.ac_adjust := get_ini_setting(ammoIni + "|" + i + "|ac_adjust");
|
||||
ammo.dr_adjust := get_ini_setting(ammoIni + "|" + i + "|dr_adjust");
|
||||
// dam_mult and dam_div must be positive integers
|
||||
dmgMod := get_ini_setting(ammoIni + "|" + i + "|dam_mult");
|
||||
ammo.dam_mult := dmgMod if (dmgMod > 0) else 1;
|
||||
dmgMod := get_ini_setting(ammoIni + "|" + i + "|dam_div");
|
||||
ammo.dam_div := dmgMod if (dmgMod > 0) else 1;
|
||||
ammoData[ammoPid] := ammo;
|
||||
i++;
|
||||
ammoPid := get_ini_setting(ammoIni + "|" + i + "|pid");
|
||||
end
|
||||
call map_enter_p_proc;
|
||||
debug_msg("Ammo INI Loader mod: " + ammoIni + " - set " + (i - 1) + " ammo protos.");
|
||||
end
|
||||
end
|
||||
|
||||
procedure map_enter_p_proc begin
|
||||
if (enabled > 0) then call set_ammo_mod;
|
||||
variable pid, values;
|
||||
if (enabled > 0) then begin
|
||||
foreach (pid: values in ammoData) begin
|
||||
set_proto_data(pid, PROTO_AM_AC_MOD, values.ac_adjust);
|
||||
set_proto_data(pid, PROTO_AM_DR_MOD, values.dr_adjust);
|
||||
set_proto_data(pid, PROTO_AM_DMG_MULT, values.dam_mult);
|
||||
set_proto_data(pid, PROTO_AM_DMG_DIV, values.dam_div);
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Binary file not shown.
@@ -1,14 +1,13 @@
|
||||
/*
|
||||
|
||||
Auto Doors mod v1.1 for Fallout 2 by Mr.Stalin
|
||||
Auto Doors mod v1.2 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)
|
||||
NOTE: this script requires compiler from sfall modderspack with -s option (short circuit evaluation)
|
||||
|
||||
*/
|
||||
|
||||
@@ -30,8 +29,8 @@ procedure combatturn_handler;
|
||||
#define PORTAL (0)
|
||||
#define DOOR_FLAGS (0x24)
|
||||
|
||||
variable only_once := 0;
|
||||
variable arrayPid;
|
||||
variable onlyOnce := 0;
|
||||
variable pidDoors;
|
||||
|
||||
procedure start begin
|
||||
if game_loaded then begin
|
||||
@@ -41,11 +40,11 @@ procedure start begin
|
||||
set_global_script_repeat(40); // for sfall 3.x
|
||||
call map_enter_p_proc;
|
||||
end else begin
|
||||
if (only_once == 1 and combat_is_initialized) then begin
|
||||
only_once := 2;
|
||||
if (onlyOnce == 1 and combat_is_initialized) then begin
|
||||
onlyOnce := 2;
|
||||
call set_door_flag(0); // reset flag when entering combat mode
|
||||
end else if (only_once == 2 and not(combat_is_initialized)) then begin
|
||||
only_once := 1;
|
||||
end else if (onlyOnce == 2 and not(combat_is_initialized)) then begin
|
||||
onlyOnce := 1;
|
||||
if (sfall_ver_major >= 4) then set_global_script_repeat(0);
|
||||
call set_door_flag(FLAG_WALKTHRU); // set flag after combat mode ends
|
||||
end
|
||||
@@ -53,34 +52,35 @@ procedure start begin
|
||||
end
|
||||
|
||||
procedure map_enter_p_proc begin
|
||||
if (arrayPid) then begin
|
||||
// when changing maps, delete the current array to create a new one
|
||||
free_array(arrayPid);
|
||||
arrayPid := 0;
|
||||
if (pidDoors) then begin
|
||||
// when changing the map, delete the current array to create a new one
|
||||
free_array(pidDoors);
|
||||
pidDoors := 0;
|
||||
end
|
||||
only_once := 1;
|
||||
onlyOnce := 1;
|
||||
call set_door_flag(FLAG_WALKTHRU); // set flag when entering the map
|
||||
end
|
||||
|
||||
procedure set_door_flag(variable state) begin
|
||||
variable objectMap, obj, objPid, i;
|
||||
|
||||
if (arrayPid) then begin
|
||||
if (pidDoors) then begin
|
||||
call set_door_flag_array(state);
|
||||
return;
|
||||
end
|
||||
|
||||
objectMap := list_as_array(LIST_SCENERY);
|
||||
arrayPid := create_array(0, 0);
|
||||
pidDoors := create_array(0, 0);
|
||||
|
||||
foreach (obj in objectMap) begin
|
||||
objPid := obj_pid(obj);
|
||||
|
||||
if (proto_data(objPid, sc_type) != PORTAL) or is_in_array(objPid, arrayPid) then
|
||||
if (proto_data(objPid, sc_type) != PORTAL or get_proto_data(objPid, DOOR_FLAGS) or is_in_array(objPid, pidDoors)) then begin
|
||||
continue; // next object
|
||||
end
|
||||
|
||||
resize_array(arrayPid, i + 1);
|
||||
arrayPid[i] := objPid;
|
||||
resize_array(pidDoors, i + 1);
|
||||
pidDoors[i] := objPid; // add pid to array
|
||||
i++;
|
||||
set_proto_data(objPid, DOOR_FLAGS, state);
|
||||
end
|
||||
@@ -88,14 +88,14 @@ end
|
||||
|
||||
procedure set_door_flag_array(variable state) begin
|
||||
variable objPid;
|
||||
foreach (objPid in arrayPid) begin
|
||||
foreach (objPid in pidDoors) begin
|
||||
set_proto_data(objPid, DOOR_FLAGS, state);
|
||||
end
|
||||
end
|
||||
|
||||
procedure combatturn_handler begin
|
||||
if (only_once == 1) then begin
|
||||
only_once := 2;
|
||||
if (onlyOnce == 1) then begin
|
||||
onlyOnce := 2;
|
||||
call set_door_flag_array(0);
|
||||
set_global_script_repeat(60);
|
||||
end
|
||||
|
||||
Binary file not shown.
@@ -1,85 +1,104 @@
|
||||
procedure start;
|
||||
procedure GetBoozes;
|
||||
procedure update_shader;
|
||||
|
||||
variable perception;
|
||||
variable boozes;
|
||||
variable shader1;
|
||||
variable shader2;
|
||||
variable shader3;
|
||||
variable shader4;
|
||||
variable drunk_level;
|
||||
variable next_reduction;
|
||||
variable begin
|
||||
perception;
|
||||
boozes;
|
||||
shader1;
|
||||
shader2;
|
||||
shader3;
|
||||
shader4;
|
||||
drunk_level;
|
||||
next_reduction;
|
||||
booze_pids;
|
||||
end
|
||||
|
||||
procedure start begin
|
||||
variable new_pe;
|
||||
variable new_booze;
|
||||
variable drunk_count;
|
||||
if (metarule(22,0)) then return;
|
||||
variable new_pe, new_booze, drunk_count;
|
||||
|
||||
if (metarule(22, 0)) then return; //is_loading_game
|
||||
if (game_loaded) then begin
|
||||
if(not graphics_funcs_available) then begin
|
||||
if (not graphics_funcs_available) then begin
|
||||
display_msg("ERROR: You must set sfall to use graphics mode 4 or 5 to use this mod");
|
||||
return;
|
||||
end else begin
|
||||
//new_pe:=create_object_sid(125, 0, 0, -1);
|
||||
// pid list of the items for the mod to apply the effect
|
||||
booze_pids := [/*124,*/ 125];
|
||||
|
||||
fix_array(booze_pids);
|
||||
//new_pe := create_object_sid(125, 0, 0, -1);
|
||||
//add_mult_objs_to_inven(dude_obj, new_pe, 10);
|
||||
perception:=get_pc_extra_stat(1);
|
||||
boozes:=obj_is_carrying_obj_pid(dude_obj, 125);
|
||||
set_global_script_repeat(25);
|
||||
set_global_script_repeat(-1);
|
||||
shader1:=load_shader("booze1.fx");
|
||||
shader2:=load_shader("booze2.fx");
|
||||
shader3:=load_shader("booze3.fx");
|
||||
shader4:=load_shader("booze4.fx");
|
||||
drunk_level:=0;
|
||||
next_reduction:=0;
|
||||
perception := get_pc_extra_stat(1);
|
||||
boozes := GetBoozes;
|
||||
|
||||
set_global_script_repeat(50);
|
||||
set_global_script_type(1);
|
||||
|
||||
shader1 := load_shader("booze1.fx");
|
||||
shader2 := load_shader("booze2.fx");
|
||||
shader3 := load_shader("booze3.fx");
|
||||
shader4 := load_shader("booze4.fx");
|
||||
//display_msg("Init: " + perception + ", " + boozes);
|
||||
end
|
||||
end else begin
|
||||
new_pe:=get_pc_extra_stat(1);
|
||||
new_booze:=obj_is_carrying_obj_pid(dude_obj, 125);
|
||||
if( (perception != new_pe) or (boozes != new_booze) ) then begin
|
||||
new_pe := get_pc_extra_stat(1);
|
||||
new_booze := GetBoozes;
|
||||
if ((perception != new_pe) orElse (boozes != new_booze)) then begin
|
||||
//display_msg("var change: " + perception + ", " + boozes + " -> " + new_pe + ", " + new_booze);
|
||||
if ( (perception > new_pe) and (boozes > new_booze) ) then begin
|
||||
if ( (perception - new_pe) < (boozes - new_booze) ) then begin
|
||||
drunk_count:=perception - new_pe;
|
||||
if ((perception > new_pe) andAlso (boozes > new_booze)) then begin
|
||||
variable pe_diff := perception - new_pe;
|
||||
variable booze_diff := boozes - new_booze;
|
||||
if (pe_diff < booze_diff) then begin
|
||||
drunk_count := pe_diff;
|
||||
end else begin
|
||||
drunk_count:=boozes - new_booze;
|
||||
drunk_count := booze_diff;
|
||||
end
|
||||
drunk_level:=drunk_level + (drunk_count*10);
|
||||
drunk_level += (drunk_count * 10);
|
||||
//display_msg("Increasing booze count: " + drunk_level);
|
||||
call update_shader;
|
||||
next_reduction:=game_time + game_ticks(6);
|
||||
next_reduction := game_time + game_ticks(6);
|
||||
end
|
||||
perception:=new_pe;
|
||||
boozes:=new_booze;
|
||||
perception := new_pe;
|
||||
boozes := new_booze;
|
||||
end
|
||||
if( (next_reduction != 0 ) and (game_time >= next_reduction) ) then begin
|
||||
drunk_level:=drunk_level - 1;
|
||||
if(drunk_level == 0) then next_reduction:=0;
|
||||
else next_reduction:=next_reduction + game_ticks(6);
|
||||
if ((next_reduction != 0) andAlso (game_time >= next_reduction)) then begin
|
||||
drunk_level -= 1;
|
||||
if (drunk_level == 0) then
|
||||
next_reduction := 0;
|
||||
else
|
||||
next_reduction += game_ticks(6);
|
||||
call update_shader;
|
||||
//display_msg("Decreasing booze count: " + drunk_level);
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
procedure GetBoozes begin
|
||||
variable pid, count_booze := 0;
|
||||
foreach (pid in booze_pids) begin
|
||||
count_booze += obj_is_carrying_obj_pid(dude_obj, pid);
|
||||
end
|
||||
return count_booze;
|
||||
end
|
||||
|
||||
procedure update_shader begin
|
||||
if(drunk_level >= 100) then begin
|
||||
if (drunk_level >= 100) then begin
|
||||
deactivate_shader(shader1);
|
||||
deactivate_shader(shader2);
|
||||
deactivate_shader(shader3);
|
||||
activate_shader(shader4);
|
||||
end else if(drunk_level >= 50) then begin
|
||||
end else if (drunk_level >= 50) then begin
|
||||
deactivate_shader(shader1);
|
||||
deactivate_shader(shader2);
|
||||
activate_shader(shader3);
|
||||
deactivate_shader(shader4);
|
||||
end else if(drunk_level >= 25) then begin
|
||||
end else if (drunk_level >= 25) then begin
|
||||
deactivate_shader(shader1);
|
||||
activate_shader(shader2);
|
||||
deactivate_shader(shader3);
|
||||
deactivate_shader(shader4);
|
||||
end else if(drunk_level > 0) then begin
|
||||
end else if (drunk_level > 0) then begin
|
||||
activate_shader(shader1);
|
||||
deactivate_shader(shader2);
|
||||
deactivate_shader(shader3);
|
||||
|
||||
@@ -0,0 +1,128 @@
|
||||
/*************************************************************
|
||||
LumaSharpen version 1.5.0 for Reshade 3.x
|
||||
by Christian Cann Schuldt Jensen ~ CeeJay.dk
|
||||
|
||||
It blurs the original pixel with the surrounding pixels and then subtracts this blur to sharpen the image.
|
||||
It does this in luma to avoid color artifacts and allows limiting the maximum sharpning to avoid or lessen halo artifacts.
|
||||
This is similar to using Unsharp Mask in Photoshop.
|
||||
|
||||
Adapted to sfall by Mr.Stalin
|
||||
*************************************************************/
|
||||
|
||||
// Strength of the sharpening
|
||||
// min 0.1, max 3.0
|
||||
#define sharp_strength 0.75
|
||||
|
||||
// Limits maximum amount of sharpening a pixel receives. This helps avoid "haloing" artifacts which would otherwise occur when you raised the strength too much
|
||||
// min 0.0, max 1.0, step 0.005
|
||||
#define sharp_clamp 0.035
|
||||
|
||||
// Offset bias adjusts the radius of the sampling pattern. I designed the pattern for an offset bias of 1.0, but feel free to experiment
|
||||
// min 0.0, max 6.0
|
||||
#define offset_bias 1.0
|
||||
|
||||
//------------------------------------------------------//
|
||||
// Developer settings //
|
||||
//------------------------------------------------------//
|
||||
|
||||
#define CoefLuma float3(0.2126, 0.7152, 0.0722) // BT.709 & sRBG luma coefficient (Monitors and HD Television)
|
||||
//#define CoefLuma float3(0.299, 0.587, 0.114) // BT.601 luma coefficient (SD Television)
|
||||
//#define CoefLuma float3(1.0/3.0, 1.0/3.0, 1.0/3.0) // Equal weight coefficient
|
||||
|
||||
sampler s0;
|
||||
|
||||
float2 rcpres; // pixel size
|
||||
|
||||
float4 LumaSharpenPS(float4 color : COLOR0, float2 tex : TEXCOORD) : COLOR0
|
||||
{
|
||||
// Get the original pixel
|
||||
float3 ori = tex2D(s0, tex).rgb; // ori = original pixel
|
||||
|
||||
// Combining the strength and luma multipliers
|
||||
float3 sharp_strength_luma = (CoefLuma * sharp_strength); // I'll be combining even more multipliers with it later on
|
||||
|
||||
//------------------------------------------------------//
|
||||
// Sampling patterns //
|
||||
//------------------------------------------------------//
|
||||
float3 blur_ori;
|
||||
|
||||
// [ NW, , NE ] Each texture lookup (except ori)
|
||||
// [ ,ori, ] samples 4 pixels
|
||||
// [ SW, , SE ]
|
||||
|
||||
// -- Pattern 2 -- A 9 tap gaussian using 4+1 texture fetches.
|
||||
//
|
||||
// -- Gaussian filter --
|
||||
// [ .25, .50, .25] [ 1 , 2 , 1 ]
|
||||
// [ .50, 1, .50] = [ 2 , 4 , 2 ]
|
||||
// [ .25, .50, .25] [ 1 , 2 , 1 ]
|
||||
|
||||
blur_ori = tex2D(s0, tex + float2(rcpres.x, -rcpres.y) * 0.5 * offset_bias).rgb; // South East
|
||||
blur_ori += tex2D(s0, tex - rcpres * 0.5 * offset_bias).rgb; // South West
|
||||
blur_ori += tex2D(s0, tex + rcpres * 0.5 * offset_bias).rgb; // North East
|
||||
blur_ori += tex2D(s0, tex - float2(rcpres.x, -rcpres.y) * 0.5 * offset_bias).rgb; // North West
|
||||
blur_ori *= 0.25; // Divide by 4 the number of texture fetches
|
||||
|
||||
// -- Pattern 3 -- An experimental 17 tap gaussian using 4+1 texture fetches.
|
||||
// Wider is less sensitive to noise but also to fine details.
|
||||
// -- Gaussian filter --
|
||||
// [ , 4 , 6 , , ]
|
||||
// [ ,16 ,24 ,16 , 4 ]
|
||||
// [ 6 ,24 , ,24 , 6 ]
|
||||
// [ 4 ,16 ,24 ,16 , ]
|
||||
// [ , , 6 , 4 , ]
|
||||
|
||||
//blur_ori = tex2D(s0, tex + rcpres * float2(0.4, -1.2) * offset_bias).rgb; // South South East
|
||||
//blur_ori += tex2D(s0, tex - rcpres * float2(1.2, 0.4) * offset_bias).rgb; // West South West
|
||||
//blur_ori += tex2D(s0, tex + rcpres * float2(1.2, 0.4) * offset_bias).rgb; // East North East
|
||||
//blur_ori += tex2D(s0, tex - rcpres * float2(0.4, -1.2) * offset_bias).rgb; // North North West
|
||||
//blur_ori *= 0.25; // Divide by the number of texture fetches
|
||||
//sharp_strength_luma *= 0.51;
|
||||
|
||||
// -- Pattern 4 -- A 9 tap high pass (pyramid filter) using 4+1 texture fetches.
|
||||
// Pyramid has a slightly more aggresive look
|
||||
// -- Gaussian filter --
|
||||
// [ .50, .50, .50] [ 1 , 1 , 1 ]
|
||||
// [ .50, , .50] = [ 1 , , 1 ]
|
||||
// [ .50, .50, .50] [ 1 , 1 , 1 ]
|
||||
|
||||
//blur_ori = tex2D(s0, tex + float2(0.5 * rcpres.x, -rcpres.y * offset_bias)).rgb; // South South East
|
||||
//blur_ori += tex2D(s0, tex + float2(offset_bias * -rcpres.x, 0.5 * -rcpres.y)).rgb; // West South West
|
||||
//blur_ori += tex2D(s0, tex + float2(offset_bias * rcpres.x, 0.5 * rcpres.y)).rgb; // East North East
|
||||
//blur_ori += tex2D(s0, tex + float2(0.5 * -rcpres.x, rcpres.y * offset_bias)).rgb; // North North West
|
||||
////blur_ori += (2 * ori); // Probably not needed. Only serves to lessen the effect.
|
||||
//blur_ori /= 4.0; // Divide by the number of texture fetches
|
||||
//sharp_strength_luma *= 0.666; // Adjust strength to aproximate the strength of pattern 2
|
||||
|
||||
//------------------------------------------------------//
|
||||
// Sharpen //
|
||||
//------------------------------------------------------//
|
||||
|
||||
// Calculate the sharpening --
|
||||
float3 sharp = ori - blur_ori; // Subtracting the blurred image from the original image
|
||||
|
||||
// Adjust strength of the sharpening and clamp it
|
||||
float4 sharp_strength_luma_clamp = float4(sharp_strength_luma * (0.5 / sharp_clamp), 0.5); // Roll part of the clamp into the dot
|
||||
|
||||
//sharp_luma = saturate((0.5 / sharp_clamp) * sharp_luma + 0.5); // scale up and clamp
|
||||
float sharp_luma = saturate(dot(float4(sharp, 1.0), sharp_strength_luma_clamp)); // Calculate the luma, adjust the strength, scale up and clamp
|
||||
sharp_luma = (sharp_clamp * 2.0) * sharp_luma - sharp_clamp; // scale down
|
||||
|
||||
// Combining the values to get the final sharpened pixel
|
||||
float3 outputcolor = ori + sharp_luma; // Add the sharpening to the the original.
|
||||
|
||||
//------------------------------------------------------//
|
||||
// Returning the output //
|
||||
//------------------------------------------------------//
|
||||
|
||||
// Show sharpening pattern
|
||||
// Visualize the strength of the sharpen\nThis is useful for seeing what areas the sharpning affects the most
|
||||
//outputcolor = saturate(0.5 + (sharp_luma * 4.0)).rrr; //outputcolor = abs(sharp * 4.0);
|
||||
|
||||
return float4(saturate(outputcolor), 1);
|
||||
}
|
||||
|
||||
technique LumaSharpen
|
||||
{
|
||||
pass P0 { PixelShader = compile ps_2_0 LumaSharpenPS(); }
|
||||
}
|
||||
@@ -1,4 +1,23 @@
|
||||
// Status: WIP
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Blur filter setting
|
||||
//
|
||||
// min: blurFalloff 8, sharpness 10/8
|
||||
// mid: blurFalloff 6, sharpness 8
|
||||
// max: blurFalloff 4, sharpness 6
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
#define blurFalloff 4.0
|
||||
#define sharpness 6.0
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Sharpen filter setting
|
||||
//
|
||||
// min: Sharpen 0.5, EdgeSharpen 1.0
|
||||
// mid: Sharpen 1.0, EdgeSharpen -0.25
|
||||
// max: Sharpen 1.75, EdgeSharpen -0.5 (1.5, -0.25)
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
#define Sharpen 0.5
|
||||
#define EdgeSharpen 1.0
|
||||
|
||||
|
||||
texture bloomMap;
|
||||
sampler s0;
|
||||
@@ -12,6 +31,93 @@ sampler BloomSampler : samplerstate
|
||||
AddressV = Clamp;
|
||||
};
|
||||
|
||||
// Variables that set the width and height of the current game resolution from sfall (only for global shaders)
|
||||
int w;
|
||||
int h;
|
||||
|
||||
// the pixel size is computed as: 1.0f / resolution
|
||||
float2 rcpres;
|
||||
|
||||
// system ticks (received from sfall)
|
||||
//int tickcount;
|
||||
|
||||
static const float2 wPass = float2(1, 0);
|
||||
static const float2 hPass = float2(0, 1);
|
||||
|
||||
float Brightness(float3 color)
|
||||
{
|
||||
return 0.299 * color.r + 0.587 * color.g + 0.114 * color.b;
|
||||
}
|
||||
|
||||
float3 BlurFunction(float2 uv, float brightness, inout float totalWeight)
|
||||
{
|
||||
float3 pointColor = (tex2Dlod(s0, float4(uv, 0, 0)).rgb);
|
||||
|
||||
float diff = abs(brightness - Brightness(pointColor));
|
||||
float weight = exp2((-0.25 * blurFalloff) - (diff * sharpness));
|
||||
totalWeight += weight;
|
||||
|
||||
return pointColor * weight;
|
||||
}
|
||||
|
||||
float4 BlurDeltaPassPS(float2 uv : TEXCOORD0, uniform float2 delta) : COLOR0
|
||||
{
|
||||
float3 sumColor = (tex2D(s0, uv).rgb);
|
||||
float brightness = Brightness(sumColor);
|
||||
|
||||
delta *= rcpres;
|
||||
float totalWeight = 1;
|
||||
|
||||
float2 pointUV = uv + delta;
|
||||
sumColor += BlurFunction(pointUV, brightness, totalWeight);
|
||||
|
||||
pointUV = uv - delta;
|
||||
sumColor += BlurFunction(pointUV, brightness, totalWeight);
|
||||
|
||||
return float4((sumColor / totalWeight), 1);
|
||||
}
|
||||
|
||||
static const float2 wDelta = float2(1, 0) * rcpres;
|
||||
static const float2 hDelta = float2(0, 1) * rcpres;
|
||||
|
||||
float4 BlurPS(float4 color : COLOR0, float2 uv : TEXCOORD0) : COLOR0
|
||||
{
|
||||
float totalWeight = 1;
|
||||
|
||||
float3 sumColor = (tex2D(s0, uv).rgb);
|
||||
float brightness = Brightness(sumColor);
|
||||
|
||||
float2 pointUV = uv + wDelta;
|
||||
sumColor += BlurFunction(pointUV, brightness, totalWeight);
|
||||
|
||||
pointUV = uv - wDelta;
|
||||
sumColor += BlurFunction(pointUV, brightness, totalWeight);
|
||||
|
||||
pointUV = uv + hDelta;
|
||||
sumColor += BlurFunction(pointUV, brightness, totalWeight);
|
||||
|
||||
pointUV = uv - hDelta;
|
||||
sumColor += BlurFunction(pointUV, brightness, totalWeight);
|
||||
|
||||
return float4((sumColor / totalWeight), 1);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Bloom effect setting
|
||||
//
|
||||
// min: BloomIntensity .8
|
||||
// mid: BloomIntensity .85
|
||||
// max: BloomIntensity .9
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
#define BaseIntensity 1.2
|
||||
#define BaseSaturation 1.0
|
||||
|
||||
#define BloomIntensity 0.8
|
||||
#define BloomSaturation 0.35
|
||||
|
||||
#define BloomThreshold 0.35
|
||||
#define BlurPower 0.002
|
||||
|
||||
// pseudo gauss blur
|
||||
static const float2 offsets[12] = {
|
||||
-0.326212, -0.405805,
|
||||
@@ -28,89 +134,122 @@ static const float2 offsets[12] = {
|
||||
-0.791559, -0.597705,
|
||||
};
|
||||
|
||||
float w;
|
||||
float h;
|
||||
static const float2 resolution = float2(w, h);
|
||||
|
||||
// blur setting
|
||||
static const float blurFalloff = 8;
|
||||
static const float sharpness = 4;
|
||||
|
||||
float4 AdjustSaturation(float4 color, float saturation) {
|
||||
float4 AdjustSaturation(float4 color, float saturation)
|
||||
{
|
||||
float grey = dot(color, float3(0.3, 0.59, 0.11));
|
||||
|
||||
return lerp(grey, color, saturation);
|
||||
}
|
||||
|
||||
float Brightness(float3 color)
|
||||
float4 BloomPS(float4 color : COLOR0, float2 texCoord : TEXCOORD0) : COLOR0
|
||||
{
|
||||
return color.r * color.g - 0.75 * color.b;
|
||||
}
|
||||
|
||||
float3 BlurFunction(float2 uv, float brightness, inout float totalWeight)
|
||||
{
|
||||
float3 pointColor =(tex2Dlod(s0, float4(uv, 0, 0)).rgb);
|
||||
float diff = abs(brightness - Brightness(pointColor));
|
||||
float weight = exp2(-0.25 * blurFalloff - diff * sharpness);
|
||||
totalWeight += weight;
|
||||
|
||||
return pointColor * weight;
|
||||
}
|
||||
|
||||
float4 BlurPS(float2 uv : TEXCOORD0, uniform float2 delta) : COLOR0
|
||||
{
|
||||
float3 sumColor = (tex2D(s0, uv).rgb);
|
||||
float totalWeight = 1;
|
||||
float brightness = Brightness(sumColor);
|
||||
delta *= (1 / resolution);
|
||||
float radius = 1;
|
||||
|
||||
float2 pointUV = uv + delta * radius;
|
||||
sumColor += BlurFunction(pointUV, brightness, totalWeight);
|
||||
pointUV = uv - delta * radius;
|
||||
sumColor += BlurFunction(pointUV, brightness, totalWeight);
|
||||
|
||||
return float4((sumColor / totalWeight),1);
|
||||
// return AdjustSaturation(Color, 0.5);
|
||||
}
|
||||
|
||||
float4 BloomT(float2 texCoord : TEXCOORD0) : COLOR0 {
|
||||
float4 c = tex2D(s0, texCoord);
|
||||
float BloomThreshold = 0.2;
|
||||
|
||||
return saturate((c - BloomThreshold) / (1 - BloomThreshold));
|
||||
}
|
||||
|
||||
float4 Bloom(float4 color : COLOR0, float2 texCoord : TEXCOORD0) : COLOR0 {
|
||||
float BaseIntensity = 1.0;
|
||||
float BaseSaturation = 1;
|
||||
float BloomIntensity = 1; // 0.4
|
||||
float BloomSaturation = 0.5;
|
||||
float BlurPower = 0.01;
|
||||
float BloomThreshold = 0.5;
|
||||
|
||||
float4 original = tex2D(s0, texCoord);
|
||||
|
||||
// blur
|
||||
float4 sum = tex2D(s0, texCoord);
|
||||
for(int i = 0; i < 12; i++){
|
||||
sum += tex2D(s0, texCoord + BlurPower * offsets[i]);
|
||||
}
|
||||
sum /= 13;
|
||||
|
||||
original = AdjustSaturation(original, BaseSaturation) * BaseIntensity;
|
||||
sum = AdjustSaturation(sum, BloomSaturation) * BloomIntensity;
|
||||
float sum = (original.r + original.g + original.b) * 0.333;
|
||||
if (sum >= 0.95) return original;
|
||||
|
||||
sum = saturate((sum - BloomThreshold) / (1 - BloomThreshold));
|
||||
// bloom blur
|
||||
float4 bloomBlur = tex2D(s0, texCoord);
|
||||
for(int i = 0; i < 12; i++)
|
||||
{
|
||||
bloomBlur += tex2D(s0, texCoord + BlurPower * offsets[i]);
|
||||
}
|
||||
bloomBlur *= 0.085;
|
||||
|
||||
return sum + original;
|
||||
// return sum;
|
||||
float intensity = BloomIntensity - lerp(0.0, 0.2, sum);
|
||||
bloomBlur = AdjustSaturation(bloomBlur, BloomSaturation) * intensity;
|
||||
bloomBlur = saturate((bloomBlur - BloomThreshold) / (1 - BloomThreshold));
|
||||
|
||||
return bloomBlur + original;
|
||||
}
|
||||
|
||||
technique Blur
|
||||
static const float CoefBlur = (Sharpen * 0.5);
|
||||
static const float CoefOrig = (1 + CoefBlur);
|
||||
|
||||
// for the sharpen edge
|
||||
#define SharpenEdge 0.4
|
||||
static const float sharpenVal0 = (Sharpen * (1.5 + EdgeSharpen));
|
||||
static const float sharpenVal1 = ((sharpenVal0 - 1) / 8.0);
|
||||
|
||||
// pixel "width"
|
||||
static const float px = rcpres.x;
|
||||
static const float py = rcpres.y;
|
||||
|
||||
// for the blur filter
|
||||
#define mean 1.0
|
||||
static const float dx = (mean * px);
|
||||
static const float dy = (mean * py);
|
||||
|
||||
float4 SharpenComplexPS(float4 color : COLOR0, float2 texCoord : TEXCOORD0) : COLOR0
|
||||
{
|
||||
// pass P2 { PixelShader = compile ps_2_0 BloomT(); }
|
||||
// pass P3 { PixelShader = compile ps_2_0 Bloom(); }
|
||||
Pass P0 { PixelShader = compile ps_3_0 BlurPS(float2(1, 0)); }
|
||||
Pass P1 { PixelShader = compile ps_3_0 BlurPS(float2(0, 1)); }
|
||||
float4 c0 = tex2D(s0, texCoord); // get original pixel
|
||||
|
||||
// edge detection
|
||||
// Get neighbor points
|
||||
// [ c1, c2, c3 ]
|
||||
// [ c4, c0, c5 ]
|
||||
// [ c6, c7, c8 ]
|
||||
float4 c1 = tex2D(s0, texCoord + float2(-px, -py));
|
||||
float4 c2 = tex2D(s0, texCoord + float2( 0, -py));
|
||||
float4 c3 = tex2D(s0, texCoord + float2( px, -py));
|
||||
float4 c4 = tex2D(s0, texCoord + float2(-px, 0));
|
||||
float4 c5 = tex2D(s0, texCoord + float2( px, 0));
|
||||
float4 c6 = tex2D(s0, texCoord + float2(-px, py));
|
||||
float4 c7 = tex2D(s0, texCoord + float2( 0, py));
|
||||
float4 c8 = tex2D(s0, texCoord + float2( px, py));
|
||||
|
||||
// using Sobel filter
|
||||
// horizontal gradient
|
||||
// [ -1, 0, 1 ]
|
||||
// [ -2, 0, 2 ]
|
||||
// [ -1, 0, 1 ]
|
||||
float delta1 = (c3 + 2 * c5 + c8) - (c1 + 2 * c4 + c6);
|
||||
|
||||
// vertical gradient
|
||||
// [ -1, - 2, -1 ]
|
||||
// [ 0, 0, 0 ]
|
||||
// [ 1, 2, 1 ]
|
||||
float4 c13 = c1 + c3;
|
||||
float4 c68 = c6 + c8;
|
||||
float delta2 = (c68 + 2 * c7) - (c13 + 2 * c2);
|
||||
|
||||
// computation
|
||||
if (sqrt(mul(delta1, delta1) + mul(delta2, delta2)) > SharpenEdge) {
|
||||
// if we have an edge, use sharpen
|
||||
return c0 * sharpenVal0 - (c13 + c2 + c4 + c5 + c68 + c7) * sharpenVal1;
|
||||
|
||||
// Display edges in red...
|
||||
//return float4( 1.0, 0.0, 0.0, 0.0 );
|
||||
} else {
|
||||
// else return corrected image
|
||||
|
||||
// compute blurred image (gaussian filter)
|
||||
c1 = tex2D(s0, texCoord + float2(-dx, -dy));
|
||||
c2 = tex2D(s0, texCoord + float2( 0, -dy));
|
||||
c3 = tex2D(s0, texCoord + float2( dx, -dy));
|
||||
c4 = tex2D(s0, texCoord + float2(-dx, 0));
|
||||
c5 = tex2D(s0, texCoord + float2( dx, 0));
|
||||
c6 = tex2D(s0, texCoord + float2(-dx, dy));
|
||||
c7 = tex2D(s0, texCoord + float2( 0, dy));
|
||||
c8 = tex2D(s0, texCoord + float2( dx, dy));
|
||||
|
||||
// gaussian filter
|
||||
// [ 1, 2, 1 ]
|
||||
// [ 2, 4, 2 ]
|
||||
// [ 1, 2, 1 ]
|
||||
// to normalize the values, we need to divide by the coeff sum
|
||||
float4 flou = (c1 + c3 + c6 + c8 + 2 * (c2 + c4 + c5 + c7) + 4 * c0) * 0.0625; // 1 / (1+2+1+2+4+2+1+2+1) = 1 / 16 = 0.0625
|
||||
|
||||
// substract blurred image from original image
|
||||
return (CoefOrig * c0 - CoefBlur * flou);
|
||||
}
|
||||
}
|
||||
|
||||
technique BlurBloom
|
||||
{
|
||||
//pass P0 { PixelShader = compile ps_3_0 BlurDeltaPassPS(wPass); }
|
||||
//pass P1 { PixelShader = compile ps_3_0 BlurDeltaPassPS(hPass); }
|
||||
|
||||
pass P0 { PixelShader = compile ps_3_0 BlurPS(); }
|
||||
pass P3 { PixelShader = compile ps_2_0 BloomPS(); }
|
||||
pass P2 { PixelShader = compile ps_2_0 SharpenComplexPS(); }
|
||||
}
|
||||
|
||||
@@ -0,0 +1,106 @@
|
||||
// Shader from Media Player Classic - Home Cinema
|
||||
// Adapted to sfall by Mr.Stalin
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Sharpen filter setting
|
||||
//
|
||||
// min: Sharpen 0.5, EdgeSharpen 1.0
|
||||
// mid: Sharpen 1.0, EdgeSharpen -0.25
|
||||
// max: Sharpen 1.75, EdgeSharpen -0.5 (1.5, -0.25)
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
#define Sharpen 0.5
|
||||
#define EdgeSharpen 1.1
|
||||
|
||||
sampler s0;
|
||||
|
||||
// Variables that set the width and height of the current game resolution from sfall
|
||||
float w;
|
||||
float h;
|
||||
float2 rcpres; // pixel size
|
||||
|
||||
static const float CoefBlur = (Sharpen * 0.5);
|
||||
static const float CoefOrig = (1 + CoefBlur);
|
||||
|
||||
// for the sharpen edge
|
||||
#define SharpenEdge 0.4
|
||||
static const float sharpenVal0 = (Sharpen * (1.5 + EdgeSharpen));
|
||||
static const float sharpenVal1 = ((sharpenVal0 - 1) / 8.0);
|
||||
|
||||
// pixel "width"
|
||||
static const float px = rcpres.x;
|
||||
static const float py = rcpres.y;
|
||||
|
||||
// for the blur filter
|
||||
#define mean 1.0
|
||||
static const float dx = (mean * px);
|
||||
static const float dy = (mean * py);
|
||||
|
||||
float4 SharpenComplexPS(float4 color : COLOR0, float2 texCoord : TEXCOORD0) : COLOR0
|
||||
{
|
||||
float4 c0 = tex2D(s0, texCoord); // get original pixel
|
||||
|
||||
// edge detection
|
||||
// Get neighbor points
|
||||
// [ c1, c2, c3 ]
|
||||
// [ c4, c0, c5 ]
|
||||
// [ c6, c7, c8 ]
|
||||
float4 c1 = tex2D(s0, texCoord + float2(-px, -py));
|
||||
float4 c2 = tex2D(s0, texCoord + float2( 0, -py));
|
||||
float4 c3 = tex2D(s0, texCoord + float2( px, -py));
|
||||
float4 c4 = tex2D(s0, texCoord + float2(-px, 0));
|
||||
float4 c5 = tex2D(s0, texCoord + float2( px, 0));
|
||||
float4 c6 = tex2D(s0, texCoord + float2(-px, py));
|
||||
float4 c7 = tex2D(s0, texCoord + float2( 0, py));
|
||||
float4 c8 = tex2D(s0, texCoord + float2( px, py));
|
||||
|
||||
// using Sobel filter
|
||||
// horizontal gradient
|
||||
// [ -1, 0, 1 ]
|
||||
// [ -2, 0, 2 ]
|
||||
// [ -1, 0, 1 ]
|
||||
float delta1 = (c3 + 2 * c5 + c8) - (c1 + 2 * c4 + c6);
|
||||
|
||||
// vertical gradient
|
||||
// [ -1, - 2, -1 ]
|
||||
// [ 0, 0, 0 ]
|
||||
// [ 1, 2, 1 ]
|
||||
float4 c13 = c1 + c3;
|
||||
float4 c68 = c6 + c8;
|
||||
float delta2 = (c68 + 2 * c7) - (c13 + 2 * c2);
|
||||
|
||||
// computation
|
||||
if (sqrt(mul(delta1, delta1) + mul(delta2, delta2)) > SharpenEdge) {
|
||||
// if we have an edge, use sharpen
|
||||
return c0 * sharpenVal0 - (c13 + c2 + c4 + c5 + c68 + c7) * sharpenVal1;
|
||||
|
||||
// Display edges in red...
|
||||
//return float4( 1.0, 0.0, 0.0, 0.0 );
|
||||
} else {
|
||||
// else return corrected image
|
||||
|
||||
// compute blurred image (gaussian filter)
|
||||
c1 = tex2D(s0, texCoord + float2(-dx, -dy));
|
||||
c2 = tex2D(s0, texCoord + float2( 0, -dy));
|
||||
c3 = tex2D(s0, texCoord + float2( dx, -dy));
|
||||
c4 = tex2D(s0, texCoord + float2(-dx, 0));
|
||||
c5 = tex2D(s0, texCoord + float2( dx, 0));
|
||||
c6 = tex2D(s0, texCoord + float2(-dx, dy));
|
||||
c7 = tex2D(s0, texCoord + float2( 0, dy));
|
||||
c8 = tex2D(s0, texCoord + float2( dx, dy));
|
||||
|
||||
// gaussian filter
|
||||
// [ 1, 2, 1 ]
|
||||
// [ 2, 4, 2 ]
|
||||
// [ 1, 2, 1 ]
|
||||
// to normalize the values, we need to divide by the coeff sum
|
||||
float4 flou = (c1 + c3 + c6 + c8 + 2 * (c2 + c4 + c5 + c7) + 4 * c0) * 0.0625; // 1 / (1+2+1+2+4+2+1+2+1) = 1 / 16 = 0.0625
|
||||
|
||||
// substract blurred image from original image
|
||||
return (CoefOrig * c0 - CoefBlur * flou);
|
||||
}
|
||||
}
|
||||
|
||||
technique SharpenT
|
||||
{
|
||||
pass P0 { PixelShader = compile ps_2_0 SharpenComplexPS(); }
|
||||
}
|
||||
@@ -1,7 +1,5 @@
|
||||
/*
|
||||
Example implementation of the algorithm of how the game engine checks if one critter sees another critter.
|
||||
|
||||
NOTE: the AllowUnsafeScripting option must be enabled.
|
||||
*/
|
||||
|
||||
#include "..\headers\define.h"
|
||||
@@ -9,10 +7,8 @@
|
||||
#include "..\headers\sfall\sfall.h"
|
||||
#include "..\headers\sfall\define_extra.h"
|
||||
|
||||
#define can_see_(source, target) call_offset_r2(0x412BEC, source, target)
|
||||
#define obj_dist_(target, source) call_offset_r2(0x48BBD4, target, source)
|
||||
|
||||
procedure start;
|
||||
procedure can_see(variable obj1, variable obj2);
|
||||
|
||||
procedure start begin
|
||||
if game_loaded then begin
|
||||
@@ -21,40 +17,50 @@ procedure start begin
|
||||
variable
|
||||
source := get_sfall_arg,
|
||||
target := get_sfall_arg,
|
||||
original := get_sfall_arg,
|
||||
hookType := get_sfall_arg, /* new arg */
|
||||
engine := get_sfall_arg,
|
||||
type := get_sfall_arg, /* new arg */
|
||||
result := 0,
|
||||
distance;
|
||||
distance, seeDistance, seeText;
|
||||
|
||||
if target then begin
|
||||
distance := get_critter_stat(source, STAT_pe);
|
||||
seeDistance := get_critter_stat(source, STAT_pe);
|
||||
|
||||
if can_see_(source, target) then begin
|
||||
distance *= 5;
|
||||
if (get_flags(target) bwand FLAG_TRANSGLASS) then distance /= 2;
|
||||
if can_see(source, target) then begin
|
||||
seeDistance *= 5;
|
||||
if (get_flags(target) bwand FLAG_TRANSGLASS) then seeDistance /= 2;
|
||||
end else if combat_is_initialized then begin
|
||||
distance *= 2;
|
||||
seeDistance *= 2;
|
||||
end
|
||||
|
||||
if (target == dude_obj) then begin
|
||||
if sneak_success then begin
|
||||
distance /= 4;
|
||||
if has_skill(target, SKILL_SNEAK) > 120 then distance -= 1;
|
||||
seeDistance /= 4;
|
||||
if has_skill(target, SKILL_SNEAK) > 120 then seeDistance -= 1;
|
||||
end else if dude_is_sneaking then begin
|
||||
distance := distance * 2 / 3;
|
||||
seeDistance := (seeDistance * 2) / 3; // distance div 1.5
|
||||
end
|
||||
end
|
||||
|
||||
if obj_dist_(target, source) <= distance then result := 1;
|
||||
distance := tile_distance_objs(source, target);
|
||||
if (get_flags(source) bwand FLAG_MULTIHEX) then distance--;
|
||||
if (get_flags(target) bwand FLAG_MULTIHEX) then distance--;
|
||||
|
||||
// example
|
||||
if (result) then begin
|
||||
display_msg("hs_withinperception: " + obj_name(source) + " sees " + obj_name(target) + " [original: " + original + " script: " + result + "]");
|
||||
end else begin
|
||||
display_msg("hs_withinperception: " + obj_name(source) + " does not see " + obj_name(target) + " [original: " + original + " script: " + result + "]");
|
||||
end
|
||||
if (distance <= seeDistance) then result := 1;
|
||||
|
||||
seeText = " does not see > ";
|
||||
if (result) then seeText = " sees > ";
|
||||
|
||||
// Example
|
||||
display_msg("hs_withinperception: " + obj_name(source) + seeText + obj_name(target) + " [engine: " + engine + ", script: " + result + "]");
|
||||
|
||||
/* override engine result */
|
||||
//set_sfall_return(result);
|
||||
end
|
||||
|
||||
//set_sfall_return(result);
|
||||
end
|
||||
end
|
||||
|
||||
procedure can_see(variable obj1, variable obj2) begin
|
||||
variable dir = obj_get_rot(obj1) - rotation_to_tile(tile_num(obj1), tile_num(obj2));
|
||||
if (dir < 0) then dir = -dir;
|
||||
return (dir <= 1) or (dir == 5);
|
||||
end
|
||||
|
||||
Binary file not shown.
@@ -0,0 +1,264 @@
|
||||
procedure start;
|
||||
|
||||
variable rainshaderdef;
|
||||
variable snowshaderdef;
|
||||
variable sandshaderdef;
|
||||
variable rainshaderesc;
|
||||
variable snowshaderesc;
|
||||
variable sandshaderesc;
|
||||
variable rainshaderinv;
|
||||
variable snowshaderinv;
|
||||
variable sandshaderinv;
|
||||
variable rainshadermap;
|
||||
variable snowshadermap;
|
||||
variable sandshadermap;
|
||||
variable rainshaderskd;
|
||||
variable snowshaderskd;
|
||||
variable sandshaderskd;
|
||||
|
||||
variable cshader;
|
||||
variable active;
|
||||
|
||||
procedure update_shader(variable shader) begin
|
||||
if (shader == cshader) then begin
|
||||
return;
|
||||
end
|
||||
if (cshader == 1) then begin
|
||||
deactivate_shader(rainshaderdef);
|
||||
deactivate_shader(rainshaderesc);
|
||||
deactivate_shader(rainshaderinv);
|
||||
deactivate_shader(rainshadermap);
|
||||
deactivate_shader(rainshaderskd);
|
||||
end else if (cshader == 2) then begin
|
||||
deactivate_shader(snowshaderdef);
|
||||
deactivate_shader(snowshaderesc);
|
||||
deactivate_shader(snowshaderinv);
|
||||
deactivate_shader(snowshadermap);
|
||||
deactivate_shader(snowshaderskd);
|
||||
end else if (cshader == 3) then begin
|
||||
deactivate_shader(sandshaderdef);
|
||||
deactivate_shader(sandshaderesc);
|
||||
deactivate_shader(sandshaderinv);
|
||||
deactivate_shader(sandshadermap);
|
||||
deactivate_shader(sandshaderskd);
|
||||
end
|
||||
if (shader == 1) then begin
|
||||
activate_shader(rainshaderdef);
|
||||
activate_shader(rainshaderesc);
|
||||
activate_shader(rainshaderinv);
|
||||
activate_shader(rainshadermap);
|
||||
activate_shader(rainshaderskd);
|
||||
end else if (shader == 2) then begin
|
||||
activate_shader(snowshaderdef);
|
||||
activate_shader(snowshaderesc);
|
||||
activate_shader(snowshaderinv);
|
||||
activate_shader(snowshadermap);
|
||||
activate_shader(snowshaderskd);
|
||||
end else if (shader == 3) then begin
|
||||
activate_shader(sandshaderdef);
|
||||
activate_shader(sandshaderesc);
|
||||
activate_shader(sandshaderinv);
|
||||
activate_shader(sandshadermap);
|
||||
activate_shader(sandshaderskd);
|
||||
end
|
||||
|
||||
cshader := shader;
|
||||
|
||||
if (shader == 0) then begin
|
||||
force_graphics_refresh(0);
|
||||
end else begin
|
||||
force_graphics_refresh(1);
|
||||
end
|
||||
end
|
||||
|
||||
procedure on_game_load begin
|
||||
variable tmp;
|
||||
if (graphics_funcs_available) then begin
|
||||
display_msg("Weather mod: Shader functions available");
|
||||
end else return;
|
||||
|
||||
rainshaderdef := load_shader("weather\\rain-def.fx");
|
||||
snowshaderdef := load_shader("weather\\snow-def.fx");
|
||||
sandshaderdef := load_shader("weather\\sand-def.fx");
|
||||
rainshaderesc := load_shader("weather\\rain-esc.fx");
|
||||
snowshaderesc := load_shader("weather\\snow-esc.fx");
|
||||
sandshaderesc := load_shader("weather\\sand-esc.fx");
|
||||
rainshaderinv := load_shader("weather\\rain-inv.fx");
|
||||
snowshaderinv := load_shader("weather\\snow-inv.fx");
|
||||
sandshaderinv := load_shader("weather\\sand-inv.fx");
|
||||
rainshadermap := load_shader("weather\\rain-map.fx");
|
||||
snowshadermap := load_shader("weather\\snow-map.fx");
|
||||
sandshadermap := load_shader("weather\\sand-map.fx");
|
||||
rainshaderskd := load_shader("weather\\rain-skd.fx");
|
||||
snowshaderskd := load_shader("weather\\snow-skd.fx");
|
||||
sandshaderskd := load_shader("weather\\sand-skd.fx");
|
||||
|
||||
if (rainshaderdef == -1 or snowshaderdef == -1 or sandshaderdef == -1) then begin
|
||||
display_msg("Weather mod error: Could not load default shaders");
|
||||
return;
|
||||
end
|
||||
if (rainshaderesc == -1 or snowshaderesc == -1 or sandshaderesc == -1) then begin
|
||||
display_msg("Weather mod error: Could not load escape shaders");
|
||||
return;
|
||||
end
|
||||
if (rainshaderinv == -1 or snowshaderinv == -1 or sandshaderinv == -1) then begin
|
||||
display_msg("Weather mod error: Could not load inventory shaders");
|
||||
return;
|
||||
end
|
||||
if (rainshadermap == -1 or snowshadermap == -1 or sandshadermap == -1) then begin
|
||||
display_msg("Weather mod error: Could not load automap shaders");
|
||||
return;
|
||||
end
|
||||
if (rainshaderskd == -1 or snowshaderskd == -1 or sandshaderskd == -1) then begin
|
||||
display_msg("Weather mod error: Could not load skilldex shaders");
|
||||
return;
|
||||
end
|
||||
|
||||
tmp := get_shader_texture(rainshaderdef, 2);
|
||||
set_shader_texture(rainshaderesc, "tex2", tmp);
|
||||
set_shader_texture(rainshaderinv, "tex2", tmp);
|
||||
set_shader_texture(rainshadermap, "tex2", tmp);
|
||||
set_shader_texture(rainshaderskd, "tex2", tmp);
|
||||
|
||||
tmp := get_shader_texture(snowshaderdef, 2);
|
||||
set_shader_texture(snowshaderesc, "tex2", tmp);
|
||||
set_shader_texture(snowshaderinv, "tex2", tmp);
|
||||
set_shader_texture(snowshadermap, "tex2", tmp);
|
||||
set_shader_texture(snowshaderskd, "tex2", tmp);
|
||||
|
||||
tmp := get_shader_texture(sandshaderdef, 2);
|
||||
set_shader_texture(sandshaderesc, "tex2", tmp);
|
||||
set_shader_texture(sandshaderinv, "tex2", tmp);
|
||||
set_shader_texture(sandshadermap, "tex2", tmp);
|
||||
set_shader_texture(sandshaderskd, "tex2", tmp);
|
||||
|
||||
tmp := get_shader_texture(rainshaderdef, 1);
|
||||
set_shader_texture(snowshaderdef, "tex1", tmp);
|
||||
set_shader_texture(sandshaderdef, "tex1", tmp);
|
||||
|
||||
tmp := get_shader_texture(rainshaderesc, 1);
|
||||
set_shader_texture(snowshaderesc, "tex1", tmp);
|
||||
set_shader_texture(sandshaderesc, "tex1", tmp);
|
||||
|
||||
tmp := get_shader_texture(rainshaderinv, 1);
|
||||
set_shader_texture(snowshaderinv, "tex1", tmp);
|
||||
set_shader_texture(sandshaderinv, "tex1", tmp);
|
||||
|
||||
tmp := get_shader_texture(rainshadermap, 1);
|
||||
set_shader_texture(snowshadermap, "tex1", tmp);
|
||||
set_shader_texture(sandshadermap, "tex1", tmp);
|
||||
|
||||
tmp := get_shader_texture(rainshaderskd, 1);
|
||||
set_shader_texture(snowshaderskd, "tex1", tmp);
|
||||
set_shader_texture(sandshaderskd, "tex1", tmp);
|
||||
|
||||
set_shader_mode(rainshaderdef, 30653); // 0x77bd
|
||||
set_shader_mode(snowshaderdef, 30653);
|
||||
set_shader_mode(sandshaderdef, 30653);
|
||||
set_shader_mode(rainshaderesc, 30645); // 0x77b5
|
||||
set_shader_mode(snowshaderesc, 30645);
|
||||
set_shader_mode(sandshaderesc, 30645);
|
||||
set_shader_mode(rainshaderinv, 26557); // 0x67bd
|
||||
set_shader_mode(snowshaderinv, 26557);
|
||||
set_shader_mode(sandshaderinv, 26557);
|
||||
set_shader_mode(rainshadermap, 22461); // 0x57bd
|
||||
set_shader_mode(snowshadermap, 22461);
|
||||
set_shader_mode(sandshadermap, 22461);
|
||||
set_shader_mode(rainshaderskd, 14269); // 0x37bd
|
||||
set_shader_mode(snowshaderskd, 14269);
|
||||
set_shader_mode(sandshaderskd, 14269);
|
||||
|
||||
set_shader_mode(rainshaderesc, 2147483656); // 0x80000008
|
||||
set_shader_mode(snowshaderesc, 2147483656);
|
||||
set_shader_mode(sandshaderesc, 2147483656);
|
||||
set_shader_mode(rainshaderinv, 2147487744); // 0x80001000
|
||||
set_shader_mode(snowshaderinv, 2147487744);
|
||||
set_shader_mode(sandshaderinv, 2147487744);
|
||||
set_shader_mode(rainshadermap, 2147491840); // 0x80002000
|
||||
set_shader_mode(snowshadermap, 2147491840);
|
||||
set_shader_mode(sandshadermap, 2147491840);
|
||||
set_shader_mode(rainshaderskd, 2147500032); // 0x80004000
|
||||
set_shader_mode(snowshaderskd, 2147500032);
|
||||
set_shader_mode(sandshaderskd, 2147500032);
|
||||
|
||||
//set_global_script_repeat(50);
|
||||
end
|
||||
|
||||
procedure update_region begin
|
||||
variable tmp;
|
||||
variable rain := 50;
|
||||
variable snow := 25;
|
||||
variable sand := 25;
|
||||
|
||||
snow += rain;
|
||||
sand += snow;
|
||||
|
||||
tmp := random(1,100);
|
||||
if (tmp <= rain) then begin
|
||||
display_msg("It's raining");
|
||||
active := 1;
|
||||
end else if (tmp <= snow) then begin
|
||||
display_msg("It's snowing");
|
||||
active := 2;
|
||||
end else if (tmp <= sand) then begin
|
||||
display_msg("It's sandstorming");
|
||||
active := 3;
|
||||
end else begin
|
||||
display_msg("No weather");
|
||||
active := 0;
|
||||
end
|
||||
|
||||
//call update_shader(active);
|
||||
end
|
||||
|
||||
procedure update_weather begin
|
||||
variable tmp = random(10, 90) / 100.0;
|
||||
|
||||
call update_shader(active);
|
||||
|
||||
if (active == 1) then begin
|
||||
set_shader_float(rainshaderdef, "speed", 500 - (tmp * 300));
|
||||
set_shader_float(rainshaderdef, "multi", 1.5 + tmp * 6.5);
|
||||
set_shader_float(rainshaderesc, "speed", 500 - (tmp * 300));
|
||||
set_shader_float(rainshaderesc, "multi", 1.5 + tmp * 6.5);
|
||||
set_shader_float(rainshaderinv, "speed", 500 - (tmp * 300));
|
||||
set_shader_float(rainshaderinv, "multi", 1.5 + tmp * 6.5);
|
||||
set_shader_float(rainshadermap, "speed", 500 - (tmp * 300));
|
||||
set_shader_float(rainshadermap, "multi", 1.5 + tmp * 6.5);
|
||||
set_shader_float(rainshaderskd, "speed", 500 - (tmp * 300));
|
||||
set_shader_float(rainshaderskd, "multi", 1.5 + tmp * 6.5);
|
||||
end else if (active == 2) then begin
|
||||
set_shader_float(snowshaderdef, "speed", 800 - (tmp * 200));
|
||||
set_shader_float(snowshaderdef, "multi", 0.5 + tmp * 0.5);
|
||||
set_shader_float(snowshaderesc, "speed", 800 - (tmp * 200));
|
||||
set_shader_float(snowshaderesc, "multi", 0.5 + tmp * 0.5);
|
||||
set_shader_float(snowshaderinv, "speed", 800 - (tmp * 200));
|
||||
set_shader_float(snowshaderinv, "multi", 0.5 + tmp * 0.5);
|
||||
set_shader_float(snowshadermap, "speed", 800 - (tmp * 200));
|
||||
set_shader_float(snowshadermap, "multi", 0.5 + tmp * 0.5);
|
||||
set_shader_float(snowshaderskd, "speed", 800 - (tmp * 200));
|
||||
set_shader_float(snowshaderskd, "multi", 0.5 + tmp * 0.5);
|
||||
end else begin
|
||||
set_shader_float(sandshaderdef, "speed", 400 - (tmp * 200));
|
||||
set_shader_float(sandshaderdef, "multi", tmp);
|
||||
set_shader_float(sandshaderesc, "speed", 400 - (tmp * 200));
|
||||
set_shader_float(sandshaderesc, "multi", tmp);
|
||||
set_shader_float(sandshaderinv, "speed", 400 - (tmp * 200));
|
||||
set_shader_float(sandshaderinv, "multi", tmp);
|
||||
set_shader_float(sandshadermap, "speed", 400 - (tmp * 200));
|
||||
set_shader_float(sandshadermap, "multi", tmp);
|
||||
set_shader_float(sandshaderskd, "speed", 400 - (tmp * 200));
|
||||
set_shader_float(sandshaderskd, "multi", tmp);
|
||||
end
|
||||
|
||||
//display_msg("Shader active: "+tmp);
|
||||
end
|
||||
|
||||
procedure start begin
|
||||
variable tmp;
|
||||
if (game_loaded) then begin
|
||||
call on_game_load;
|
||||
call update_region;
|
||||
call update_weather;
|
||||
end
|
||||
end
|
||||
@@ -340,6 +340,9 @@ There are several changes in this version of sslc which may result in problems f
|
||||
=== Changelog ===
|
||||
=================
|
||||
|
||||
> sfall 4.2.7
|
||||
- added ability to declare local variables anywhere in the procedure body
|
||||
|
||||
> sfall 4.2.3
|
||||
- fixed compiler giving "assignment operator expected" error when a variable-like macro is not being defined properly
|
||||
- added new logical operators "AndAlso", "OrElse" for short-circuit evaluation of logical expressions
|
||||
|
||||
@@ -2,6 +2,9 @@
|
||||
#ifndef DEFINE_EXTRA_H
|
||||
#define DEFINE_EXTRA_H
|
||||
|
||||
/* Combat Flags */
|
||||
#define DAM_PRESERVE_FLAGS 0x80000000 // keep the existing result flags when setting new flags in attack_complex (for sfall)
|
||||
|
||||
#define BODY_HIT_HEAD (0)
|
||||
#define BODY_HIT_LEFT_ARM (1)
|
||||
#define BODY_HIT_RIGHT_ARM (2)
|
||||
@@ -102,10 +105,11 @@
|
||||
#define CFLG_NOKNOCKDOWN CFLG_NOKNOCKBACK // obsolete
|
||||
|
||||
/* Window flags */
|
||||
#define WIN_FLAG_MOVEONTOP (0x4)
|
||||
#define WIN_FLAG_HIDDEN (0x8)
|
||||
#define WIN_FLAG_DONTMOVE (0x2) // does not move the window to the foreground when clicking on the window
|
||||
#define WIN_FLAG_MOVEONTOP (0x4) // places the window on top of other windows
|
||||
#define WIN_FLAG_HIDDEN (0x8) // hidden window
|
||||
#define WIN_FLAG_EXCLUSIVE (0x10)
|
||||
#define WIN_FLAG_TRANSPARENT (0x20)
|
||||
#define WIN_FLAG_TRANSPARENT (0x20) // transparent window flag, the window color with index 0 will be transparent
|
||||
|
||||
/* Message window flags */
|
||||
#define MSGBOX_AUTOSIZE (0x0)
|
||||
@@ -414,9 +418,11 @@
|
||||
#define C_ATTACK_SOURCE (0x00)
|
||||
#define C_ATTACK_HIT_MODE (0x04)
|
||||
#define C_ATTACK_WEAPON (0x08)
|
||||
#define C_ATTACK_UNUSED (0x0C)
|
||||
#define C_ATTACK_DAMAGE_SOURCE (0x10) // Amount
|
||||
#define C_ATTACK_FLAGS_SOURCE (0x14) // see DAM_* values in define.h
|
||||
#define C_ATTACK_ROUNDS (0x18)
|
||||
#define C_ATTACK_MESSAGE (0x1C) // message number set from the critical table
|
||||
#define C_ATTACK_TARGET (0x20)
|
||||
#define C_ATTACK_BODY_PART (0x28)
|
||||
#define C_ATTACK_DAMAGE_TARGET (0x2C) // Amount
|
||||
@@ -455,4 +461,19 @@
|
||||
#define C_ATTACK_KNOCKBACK_VALUE5 (0xB0)
|
||||
#define C_ATTACK_KNOCKBACK_VALUE6 (0xB4)
|
||||
|
||||
/* Playback mode defines for the soundplay function */
|
||||
#define soundraw (0x80000000) // sfall flag
|
||||
#define Stereo8bit (soundstereo)
|
||||
#define Stereo8bitLoop (soundstereo bwor soundloop)
|
||||
#define Mono16bit (sound16bit)
|
||||
#define Mono16bitLoop (sound16bit bwor soundloop)
|
||||
#define Stereo16bit (soundstereo bwor sound16bit)
|
||||
#define Stereo16bitLoop (soundstereo bwor sound16bit bwor soundloop)
|
||||
|
||||
// Adjust (reduce) volume for soundplay and play_sfall_sound
|
||||
// range: 0x0000XXXX (max volume) - 0x7FFFXXXX (mute)
|
||||
#define SoundVolume25 (0x20000000)
|
||||
#define SoundVolumeHalf (0x40000000)
|
||||
#define SoundVolume75 (0x60000000)
|
||||
|
||||
#endif // DEFINE_EXTRA_H
|
||||
|
||||
@@ -89,6 +89,7 @@
|
||||
#define WINTYPE_CHARACTER (5)
|
||||
#define WINTYPE_SKILLDEX (6)
|
||||
#define WINTYPE_ESCMENU (7) // escape menu
|
||||
#define WINTYPE_AUTOMAP (8)
|
||||
|
||||
//Valid flags for force_encounter_with_flags
|
||||
#define ENCOUNTER_FLAG_NO_CAR (0x1)
|
||||
@@ -262,97 +263,127 @@
|
||||
#define party_member_list_all party_member_list(1)
|
||||
|
||||
// fake perks/traits add mode flags
|
||||
#define ADD_PERK_MODE_TRAIT (1) // add to the player's traits
|
||||
#define ADD_PERK_MODE_PERK (2) // add to the player's perks
|
||||
#define ADD_PERK_MODE_TRAIT (1) // add to the player's traits list
|
||||
#define ADD_PERK_MODE_PERK (2) // add to the player's perks list
|
||||
#define ADD_PERK_MODE_REMOVE (4) // remove from the list of selectable perks (after added to the player)
|
||||
|
||||
// sfall_funcX macros
|
||||
#define add_extra_msg_file(name) sfall_func1("add_extra_msg_file", name)
|
||||
#define add_global_timer_event(time, fixedParam) sfall_func2("add_g_timer_event", time, fixedParam)
|
||||
#define add_iface_tag sfall_func0("add_iface_tag")
|
||||
#define add_trait(traitID) sfall_func1("add_trait", traitID)
|
||||
#define art_cache_clear sfall_func0("art_cache_clear")
|
||||
#define attack_is_aimed sfall_func0("attack_is_aimed")
|
||||
#define car_gas_amount sfall_func0("car_gas_amount")
|
||||
#define create_win(winName, x, y, w, h) sfall_func5("create_win", winName, x, y, w, h)
|
||||
#define create_win_flag(winName, x, y, w, h, flag) sfall_func6("create_win", winName, x, y, w, h, flag)
|
||||
#define critter_inven_obj2(obj, type) sfall_func2("critter_inven_obj2", obj, type)
|
||||
#define dialog_message(text) sfall_func1("dialog_message", text)
|
||||
#define dialog_obj sfall_func0("dialog_obj")
|
||||
#define display_stats sfall_func0("display_stats")
|
||||
#define draw_image(pathFile, frame, x, y, noTrans) sfall_func5("draw_image", pathFile, frame, x, y, noTrans)
|
||||
#define draw_image_scaled(pathFile, frame, x, y, w, h) sfall_func6("draw_image_scaled", pathFile, frame, x, y, w, h)
|
||||
#define exec_map_update_scripts sfall_func0("exec_map_update_scripts")
|
||||
#define floor2(value) sfall_func1("floor2", value)
|
||||
#define get_can_rest_on_map(map, elev) sfall_func2("get_can_rest_on_map", map, elev)
|
||||
#define get_current_inven_size(obj) sfall_func1("get_current_inven_size", obj)
|
||||
#define get_cursor_mode sfall_func0("get_cursor_mode")
|
||||
#define get_flags(obj) sfall_func1("get_flags", obj)
|
||||
#define get_ini_section(file, sect) sfall_func2("get_ini_section", file, sect)
|
||||
#define get_ini_sections(file) sfall_func1("get_ini_sections", file)
|
||||
#define get_interface_x(winType) sfall_func2("get_window_attribute", winType, 1)
|
||||
#define get_interface_y(winType) sfall_func2("get_window_attribute", winType, 2)
|
||||
#define get_inven_ap_cost sfall_func0("get_inven_ap_cost")
|
||||
#define get_map_enter_position sfall_func0("get_map_enter_position")
|
||||
#define get_metarule_table sfall_func0("get_metarule_table")
|
||||
#define get_object_ai_data(obj, aiParam) sfall_func2("get_object_ai_data", obj, aiParam)
|
||||
#define get_object_data(obj, offset) sfall_func2("get_object_data", obj, offset)
|
||||
#define get_outline(obj) sfall_func1("get_outline", obj)
|
||||
#define get_sfall_arg_at(argNum) sfall_func1("get_sfall_arg_at", argNum)
|
||||
#define get_string_pointer(text) sfall_func1("get_string_pointer", text)
|
||||
#define get_text_width(text) sfall_func1("get_text_width", text)
|
||||
#define has_fake_perk_npc(npc, perk) sfall_func2("has_fake_perk_npc", npc, perk)
|
||||
#define has_fake_trait_npc(npc, trait) sfall_func2("has_fake_trait_npc", npc, trait)
|
||||
#define hide_window(winName) sfall_func1("hide_window", winName)
|
||||
#define intface_hide sfall_func0("intface_hide")
|
||||
#define intface_is_hidden sfall_func0("intface_is_hidden")
|
||||
#define intface_is_shown(winType) sfall_func1("get_window_attribute", winType)
|
||||
#define intface_redraw sfall_func0("intface_redraw")
|
||||
#define intface_show sfall_func0("intface_show")
|
||||
#define inventory_redraw(invSide) sfall_func1("inventory_redraw", invSide)
|
||||
#define item_make_explosive(pid, activePid, min, max) sfall_func4("item_make_explosive", pid, activePid, min, max)
|
||||
#define item_weight(obj) sfall_func1("item_weight", obj)
|
||||
#define lock_is_jammed(obj) sfall_func1("lock_is_jammed", obj)
|
||||
#define loot_obj sfall_func0("loot_obj")
|
||||
#define message_box(text) sfall_func1("message_box", text)
|
||||
#define metarule_exist(metaruleName) sfall_func1("metarule_exist", metaruleName)
|
||||
#define npc_engine_level_up(toggle) sfall_func1("npc_engine_level_up", toggle)
|
||||
#define obj_under_cursor(onlyCritter, includeDude) sfall_func2("obj_under_cursor", onlyCritter, includeDude)
|
||||
#define objects_in_radius(tile, radius, elev, type) sfall_func4("objects_in_radius", tile, radius, elev, type)
|
||||
#define outlined_object sfall_func0("outlined_object")
|
||||
#define real_dude_obj sfall_func0("real_dude_obj")
|
||||
#define remove_all_timer_events sfall_func0("remove_timer_event")
|
||||
#define remove_timer_event(fixedParam) sfall_func1("remove_timer_event", fixedParam)
|
||||
#define set_can_rest_on_map(map, elev, value) sfall_func3("set_can_rest_on_map", map, elev, value)
|
||||
#define set_car_intface_art(artIndex) sfall_func1("set_car_intface_art", artIndex)
|
||||
#define set_cursor_mode(mode) sfall_func1("set_cursor_mode", mode)
|
||||
#define set_drugs_data(type, pid, value) sfall_func3("set_drugs_data", type, pid, value)
|
||||
#define set_dude_obj(critter) sfall_func1("set_dude_obj", critter)
|
||||
#define set_flags(obj, flags) sfall_func2("set_flags", obj, flags)
|
||||
#define set_iface_tag_text(tag, text, color) sfall_func3("set_iface_tag_text", tag, text, color)
|
||||
#define set_ini_setting(setting, value) sfall_func2("set_ini_setting", setting, value)
|
||||
#define set_map_enter_position(tile, elev, rot) sfall_func3("set_map_enter_position", tile, elev, rot)
|
||||
#define set_object_data(obj, offset, value) sfall_func3("set_object_data", obj, offset, value)
|
||||
#define set_outline(obj, color) sfall_func2("set_outline", obj, color)
|
||||
#define set_rest_heal_time(time) sfall_func1("set_rest_heal_time", time)
|
||||
#define set_rest_mode(mode) sfall_func1("set_rest_mode", mode)
|
||||
#define set_terrain_name(x, y, name) sfall_func3("set_terrain_name", x, y, name)
|
||||
#define set_town_title(areaID, title) sfall_func2("set_town_title", areaID, title)
|
||||
#define set_unique_id(obj) sfall_func1("set_unique_id", obj)
|
||||
#define set_unjam_locks_time(time) sfall_func1("set_unjam_locks_time", time)
|
||||
#define set_window_flag(winID, flag, value) sfall_func3("set_window_flag", winID, flag, value)
|
||||
#define show_window(winName) sfall_func1("show_window", winName)
|
||||
#define spatial_radius(obj) sfall_func1("spatial_radius", obj)
|
||||
#define string_compare(str1, str2) sfall_func2("string_compare", str1, str2)
|
||||
#define string_compare_locale(str1, str2, codePage) sfall_func3("string_compare", str1, str2, codePage)
|
||||
#define string_format(format, a1, a2) sfall_func3("string_format", format, a1, a2)
|
||||
#define string_tolower(text) sfall_func2("string_to_case", text, 0)
|
||||
#define string_toupper(text) sfall_func2("string_to_case", text, 1)
|
||||
#define tile_by_position(x, y) sfall_func2("tile_by_position", x, y)
|
||||
#define tile_refresh_display sfall_func0("tile_refresh_display")
|
||||
#define unjam_lock(obj) sfall_func1("unjam_lock", obj)
|
||||
#define unset_unique_id(obj) sfall_func2("set_unique_id", obj, -1)
|
||||
#define unwield_slot(critter, slot) sfall_func2("unwield_slot", critter, slot)
|
||||
// instantly apply the item to dude_obj (w/o animation)
|
||||
#define use_item_on_dude(item) set_self(dude_obj); \
|
||||
set_self(dude_obj); \
|
||||
use_obj_on_obj(item, dude_obj); \
|
||||
set_self(0)
|
||||
|
||||
// returns the corrected tile distance between two objects to the distance variable (return value >= 9996 is an error when getting the distance)
|
||||
#define distance_objs(distance, obj1, obj2) distance := tile_distance_objs(obj1, obj2) - 1; \
|
||||
if (get_flags(obj1) bwand FLAG_MULTIHEX) then distance--; \
|
||||
if (get_flags(obj2) bwand FLAG_MULTIHEX) then distance--
|
||||
|
||||
|
||||
/* sfall metarule3 function macros */
|
||||
// sets the number of days (range 1...127) for the Frank Horrigan encounter, or disable the encounter if days is set to 0
|
||||
#define set_horrigan_days(day) metarule3(200, day, 0, 0)
|
||||
// clears the keyboard input buffer, use it in the HOOK_KEYPRESS hook to clear keyboard events before calling functions that are waiting for keyboard input
|
||||
#define clear_keyboard_buffer metarule3(201, 0, 0, 0)
|
||||
|
||||
|
||||
/* sfall_funcX macros */
|
||||
#define add_extra_msg_file(name) sfall_func1("add_extra_msg_file", name)
|
||||
#define add_global_timer_event(time, fixedParam) sfall_func2("add_g_timer_event", time, fixedParam)
|
||||
#define add_iface_tag sfall_func0("add_iface_tag")
|
||||
#define add_trait(traitID) sfall_func1("add_trait", traitID)
|
||||
#define art_cache_clear sfall_func0("art_cache_clear")
|
||||
#define attack_is_aimed sfall_func0("attack_is_aimed")
|
||||
#define car_gas_amount sfall_func0("car_gas_amount")
|
||||
#define combat_data sfall_func0("combat_data")
|
||||
#define create_win(winName, x, y, w, h) sfall_func5("create_win", winName, x, y, w, h)
|
||||
#define create_win_flag(winName, x, y, w, h, flag) sfall_func6("create_win", winName, x, y, w, h, flag)
|
||||
#define critter_inven_obj2(obj, type) sfall_func2("critter_inven_obj2", obj, type)
|
||||
#define dialog_message(text) sfall_func1("dialog_message", text)
|
||||
#define dialog_obj sfall_func0("dialog_obj")
|
||||
#define display_stats sfall_func0("display_stats")
|
||||
#define draw_image(artFile, frame, x, y, noTrans) sfall_func5("draw_image", artFile, frame, x, y, noTrans)
|
||||
#define draw_image_scaled(artFile, frame, x, y, w, h) sfall_func6("draw_image_scaled", artFile, frame, x, y, w, h)
|
||||
#define exec_map_update_scripts sfall_func0("exec_map_update_scripts")
|
||||
#define floor2(value) sfall_func1("floor2", value)
|
||||
#define get_can_rest_on_map(map, elev) sfall_func2("get_can_rest_on_map", map, elev)
|
||||
#define get_current_inven_size(obj) sfall_func1("get_current_inven_size", obj)
|
||||
#define get_cursor_mode sfall_func0("get_cursor_mode")
|
||||
#define get_flags(obj) sfall_func1("get_flags", obj)
|
||||
#define get_ini_section(file, sect) sfall_func2("get_ini_section", file, sect)
|
||||
#define get_ini_sections(file) sfall_func1("get_ini_sections", file)
|
||||
#define get_interface_x(winType) sfall_func2("get_window_attribute", winType, 1)
|
||||
#define get_interface_y(winType) sfall_func2("get_window_attribute", winType, 2)
|
||||
#define get_inven_ap_cost sfall_func0("get_inven_ap_cost")
|
||||
#define get_map_enter_position sfall_func0("get_map_enter_position")
|
||||
#define get_metarule_table sfall_func0("get_metarule_table")
|
||||
#define get_object_ai_data(obj, aiParam) sfall_func2("get_object_ai_data", obj, aiParam)
|
||||
#define get_object_data(obj, offset) sfall_func2("get_object_data", obj, offset)
|
||||
#define get_outline(obj) sfall_func1("get_outline", obj)
|
||||
#define get_pc_stat_max(stat) sfall_func1("get_stat_max", stat)
|
||||
#define get_pc_stat_min(stat) sfall_func1("get_stat_min", stat)
|
||||
#define get_npc_stat_max(stat) sfall_func2("get_stat_max", stat, 1)
|
||||
#define get_npc_stat_min(stat) sfall_func2("get_stat_min", stat, 1)
|
||||
#define get_sfall_arg_at(argNum) sfall_func1("get_sfall_arg_at", argNum)
|
||||
#define get_string_pointer(text) sfall_func1("get_string_pointer", text)
|
||||
#define get_text_width(text) sfall_func1("get_text_width", text)
|
||||
#define has_fake_perk_npc(npc, perk) sfall_func2("has_fake_perk_npc", npc, perk)
|
||||
#define has_fake_trait_npc(npc, trait) sfall_func2("has_fake_trait_npc", npc, trait)
|
||||
#define hide_window(winName) sfall_func1("hide_window", winName)
|
||||
#define interface_art_draw(winID, artFile, x, y) sfall_func4("interface_art_draw", winID, artFile, x, y)
|
||||
#define interface_art_draw_frame(winID, artID, x, y, frame) sfall_func5("interface_art_draw", winID, artID, x, y, frame)
|
||||
#define interface_art_draw_ex(winID, artID, x, y, frame, param) sfall_func6("interface_art_draw", winID, artID, x, y, frame, param)
|
||||
#define interface_print(text, winType, x, y, color) sfall_func5("interface_print", text, winType, x, y, color)
|
||||
#define interface_print_width(text, winType, x, y, color, w) sfall_func6("interface_print", text, winType, x, y, color, w)
|
||||
#define interface_redraw_all sfall_func1("intface_redraw", 1)
|
||||
#define intface_hide sfall_func0("intface_hide")
|
||||
#define intface_is_hidden sfall_func0("intface_is_hidden")
|
||||
#define intface_is_shown(winType) sfall_func1("get_window_attribute", winType)
|
||||
#define intface_redraw sfall_func0("intface_redraw")
|
||||
#define intface_show sfall_func0("intface_show")
|
||||
#define inventory_redraw(invSide) sfall_func1("inventory_redraw", invSide)
|
||||
#define item_make_explosive(pid, activePid, min, max) sfall_func4("item_make_explosive", pid, activePid, min, max)
|
||||
#define item_weight(obj) sfall_func1("item_weight", obj)
|
||||
#define lock_is_jammed(obj) sfall_func1("lock_is_jammed", obj)
|
||||
#define loot_obj sfall_func0("loot_obj")
|
||||
#define message_box(text) sfall_func1("message_box", text)
|
||||
#define metarule_exist(metaruleName) sfall_func1("metarule_exist", metaruleName)
|
||||
#define npc_engine_level_up(toggle) sfall_func1("npc_engine_level_up", toggle)
|
||||
#define obj_under_cursor(onlyCritter, includeDude) sfall_func2("obj_under_cursor", onlyCritter, includeDude)
|
||||
#define objects_in_radius(tile, radius, elev, type) sfall_func4("objects_in_radius", tile, radius, elev, type)
|
||||
#define outlined_object sfall_func0("outlined_object")
|
||||
#define real_dude_obj sfall_func0("real_dude_obj")
|
||||
#define remove_all_timer_events sfall_func0("remove_timer_event")
|
||||
#define remove_timer_event(fixedParam) sfall_func1("remove_timer_event", fixedParam)
|
||||
#define set_can_rest_on_map(map, elev, value) sfall_func3("set_can_rest_on_map", map, elev, value)
|
||||
#define set_car_intface_art(artIndex) sfall_func1("set_car_intface_art", artIndex)
|
||||
#define set_cursor_mode(mode) sfall_func1("set_cursor_mode", mode)
|
||||
#define set_drugs_data(type, pid, value) sfall_func3("set_drugs_data", type, pid, value)
|
||||
#define set_dude_obj(critter) sfall_func1("set_dude_obj", critter)
|
||||
#define set_flags(obj, flags) sfall_func2("set_flags", obj, flags)
|
||||
#define set_iface_tag_text(tag, text, color) sfall_func3("set_iface_tag_text", tag, text, color)
|
||||
#define set_ini_setting(setting, value) sfall_func2("set_ini_setting", setting, value)
|
||||
#define set_map_enter_position(tile, elev, rot) sfall_func3("set_map_enter_position", tile, elev, rot)
|
||||
#define set_object_data(obj, offset, value) sfall_func3("set_object_data", obj, offset, value)
|
||||
#define set_outline(obj, color) sfall_func2("set_outline", obj, color)
|
||||
#define set_rest_heal_time(time) sfall_func1("set_rest_heal_time", time)
|
||||
#define set_rest_mode(mode) sfall_func1("set_rest_mode", mode)
|
||||
#define set_terrain_name(x, y, name) sfall_func3("set_terrain_name", x, y, name)
|
||||
#define set_town_title(areaID, title) sfall_func2("set_town_title", areaID, title)
|
||||
#define set_unique_id(obj) sfall_func1("set_unique_id", obj)
|
||||
#define set_unjam_locks_time(time) sfall_func1("set_unjam_locks_time", time)
|
||||
#define set_window_flag(winID, flag, value) sfall_func3("set_window_flag", winID, flag, value)
|
||||
#define show_window(winName) sfall_func1("show_window", winName)
|
||||
#define spatial_radius(obj) sfall_func1("spatial_radius", obj)
|
||||
#define string_compare(str1, str2) sfall_func2("string_compare", str1, str2)
|
||||
#define string_compare_locale(str1, str2, codePage) sfall_func3("string_compare", str1, str2, codePage)
|
||||
#define string_format(format, a1, a2) sfall_func3("string_format", format, a1, a2)
|
||||
#define string_tolower(text) sfall_func2("string_to_case", text, 0)
|
||||
#define string_toupper(text) sfall_func2("string_to_case", text, 1)
|
||||
#define tile_by_position(x, y) sfall_func2("tile_by_position", x, y)
|
||||
#define tile_refresh_display sfall_func0("tile_refresh_display")
|
||||
#define unjam_lock(obj) sfall_func1("unjam_lock", obj)
|
||||
#define unset_unique_id(obj) sfall_func2("set_unique_id", obj, -1)
|
||||
#define unwield_slot(critter, slot) sfall_func2("unwield_slot", critter, slot)
|
||||
|
||||
#define set_fake_perk_npc(npc, perk, level, image, desc) sfall_func5("set_fake_perk_npc", npc, perk, level, image, desc)
|
||||
#define set_fake_trait_npc(npc, trait, active, image, desc) sfall_func5("set_fake_trait_npc", npc, trait, active, image, desc)
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user