mirror of
https://github.com/sfall-team/sfall.git
synced 2026-07-27 16:52:34 -07:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
50755832e3 | ||
|
|
f04442d4b7 | ||
|
|
dcbd6b5a23 | ||
|
|
f8aa6c449a | ||
|
|
65c4cf644a | ||
|
|
97fde2950c | ||
|
|
a488e9fc5b | ||
|
|
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]
|
[1]
|
||||||
; drug item PID
|
; drug item PID
|
||||||
PID=0
|
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,
|
; 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
|
; 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
|
; set -1 to leave this parameter unchanged
|
||||||
NumEffects=-1
|
NumEffects=-1
|
||||||
|
|
||||||
; the duration of the addiction effect in game minutes (i.e. 1440 = 24 game hours)
|
; 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
|
AddictTime=0
|
||||||
|
|
||||||
; the number of the global variable from vault13.gam responsible for displaying addiction in the character screen
|
; 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
|
; set to 0 if the addiction is not required
|
||||||
GvarID=0
|
GvarID=0
|
||||||
|
|
||||||
; the index number from editor.msg to display the title of the addiction (the description uses the index number of TextID + 100)
|
; the index number from editor.msg to display the title of the addiction (the description uses the index number of TextID + 100)
|
||||||
TextID=-1
|
TextID=-1
|
||||||
|
|
||||||
; the line number (0-indexed) of the corresponding FRM in skilldex.lst
|
; the line number (0-indexed) of the corresponding FRM in skilldex.lst
|
||||||
FrmID=-1
|
FrmID=-1
|
||||||
|
|||||||
@@ -1,10 +1,9 @@
|
|||||||
;This file handles modifications to perks and traits
|
;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
|
;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
|
; in this file, as some perks have hardcoded effects which may catch you out
|
||||||
; catch you out
|
|
||||||
;Since traits need to be picked before any scripts run, they
|
;Since traits need to be picked before any scripts run, they have an additional NoHardcode option in this file which can
|
||||||
; have an additional NoHardcode option in this file which can
|
|
||||||
; be used to remove their hardcoded effects, and add new stat/skill effects
|
; be used to remove their hardcoded effects, and add new stat/skill effects
|
||||||
|
|
||||||
[PerksTweak]
|
[PerksTweak]
|
||||||
@@ -31,41 +30,35 @@ WeaponHandlingBonus=3
|
|||||||
;Set to 1 to enable the modifications for perks
|
;Set to 1 to enable the modifications for perks
|
||||||
Enable=0
|
Enable=0
|
||||||
|
|
||||||
;Name=The name of the perk (max 63 characters)
|
;Name: The name of the perk (max 63 characters)
|
||||||
;Desc=The description of the perk (max 255 characters)
|
;Desc: The description of the perk (max 255 characters)
|
||||||
;Image=The line number (0-indexed) of the corresponding FRM in skilldex.lst
|
;Image: The line number (0-indexed) of the corresponding FRM in skilldex.lst
|
||||||
;Ranks=The number of perk levels
|
;Ranks: The number of perk levels
|
||||||
;Level=The minimum required level
|
;Level: The minimum required level
|
||||||
;Type=If 0, the perk checks only Skill1 for skill requirements; if 1, it checks
|
;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
|
||||||
; 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
|
||||||
;Stat=The modified stat or -1 if you don't want to change any stats
|
;StatMag: The increased/decreased value to the modified stat
|
||||||
;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
|
;Skill1/Skill2: The first/second skill (or -1 for none) to check, but if you set a specific bit 0x4000000 (67108864), it checks GVAR.
|
||||||
; (67108864 or 0x4000000), it checks GVAR. For example, if Skill1=67108864, then
|
; For example, if Skill1=0x4000004, then the perk will check GVAR_BAD_MONSTER (0x4000000 + 4) on Skill1Mag value
|
||||||
; the perk will check GVAR_PLAYER_REPUTATION (67108864 + 0) on Skill1Mag value
|
|
||||||
;Skill1Mag=Positive value is used as the minimum requirements of the first
|
;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.
|
||||||
; 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
|
||||||
; For example, with Skill1=0 and Skill1Mag=100, if player has small guns skill
|
; selection window; with Skill1=1 and Skill1Mag=-120, the perk will not be available if player has big guns skill >= 120
|
||||||
; >= 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
|
;STR-LCK: Positive values are used as minimum requirements of SPECIAL stats, and negative values are interpreted as maximum requirements.
|
||||||
; available if player has big guns skill >= 120
|
; For some special perks processed by the engine (e.g. PERK_armor_powered and PERK_armor_combat), the values are not used as requirements
|
||||||
;Skill2=The second skill/GVAR (or -1 for none) to check
|
; but to add to corresponding SPECIAL stats
|
||||||
;Skill2Mag=Same as Skill1Mag, but for Skill2
|
|
||||||
;STR-LCK=Positive values are used as minimum requirements of SPECIAL stats, and
|
|
||||||
; negative values are interpreted as maximum requirements. For some special
|
|
||||||
; perks processed by the engine (e.g. PERK_armor_powered and PERK_armor_combat),
|
|
||||||
; the values are not used as requirements but to add to corresponding SPECIAL
|
|
||||||
; stats
|
|
||||||
|
|
||||||
;If the value is set to -99999, the variable will be ignored (similar to comment out that line)
|
;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
|
;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
|
; 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
|
;These parameters are only for extra perks
|
||||||
;Stat1-Stat2 = same as Stat
|
;Stat1/Stat2: same as Stat
|
||||||
;Stat1Mag-Stat2Mag = same as StatMag
|
;Stat1Mag/Stat2Mag: same as StatMag
|
||||||
;Skill3-Skill5 = The skill to be modified (or -1 for none)
|
;Skill3-Skill5: The skill to be modified (or -1 for none)
|
||||||
;Skill3Mod-Skill5Mod = The increased/decreased value to the modified skill
|
;Skill3Mod-Skill5Mod: The increased/decreased value to the modified skill
|
||||||
|
|
||||||
;##############################################################################
|
;##############################################################################
|
||||||
;This is a modification to vanilla perk 0
|
;This is a modification to vanilla perk 0
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ Image=24
|
|||||||
ButtonCount=3
|
ButtonCount=3
|
||||||
|
|
||||||
;Set the appearance of the elevator
|
;Set the appearance of the elevator
|
||||||
MainFrm=148
|
MainFrm=148 ; EL_VAULT.FRM
|
||||||
ButtonsFrm=151
|
ButtonsFrm=151 ; EL_MIL3.FRM
|
||||||
|
|
||||||
;Set up the exit points for all three buttons (see examples above)
|
;Set up the exit points for all three buttons (see examples above)
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ CheckLOS=0
|
|||||||
; 16 - bright yellow
|
; 16 - bright yellow
|
||||||
; 32 - dark yellow
|
; 32 - dark yellow
|
||||||
; 64 - purple
|
; 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
|
OutlineColor=16
|
||||||
|
|
||||||
; Motion Scanner mode:
|
; Motion Scanner mode:
|
||||||
|
|||||||
+48
-40
@@ -1,5 +1,5 @@
|
|||||||
;sfall configuration settings
|
;sfall configuration settings
|
||||||
;v4.2.4
|
;v4.2.8
|
||||||
|
|
||||||
[Main]
|
[Main]
|
||||||
;Change to 1 if you want to use command line args to tell sfall to use another ini file.
|
;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
|
;The greater numbers take precedence over lesser numbers
|
||||||
;PatchFile0=mods\RP_data
|
;PatchFile0=mods\RP_data
|
||||||
|
|
||||||
;Path to the folder in which the game will automatically search and load custom .dat files
|
;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 .dat files in the folder will be in reverse alphabetical order of the filenames
|
;The data load order of the 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
|
;The files placed in this folder will have higher priority than the PatchFileXX options
|
||||||
;Uncomment the option to specify a different folder path. The default path is <GameRoot>\mods\
|
;This option has no effect in v4.2.6 or later. The default path is <GameRoot>\mods\
|
||||||
;AutoSearchPath=mods
|
;AutoSearchPath=mods
|
||||||
|
|
||||||
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
||||||
@@ -44,7 +44,7 @@ SpeedMulti9=900
|
|||||||
;The initial speed at game startup
|
;The initial speed at game startup
|
||||||
SpeedMultiInitial=100
|
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
|
AffectPlayback=0
|
||||||
|
|
||||||
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
||||||
@@ -69,8 +69,14 @@ WindowData=0
|
|||||||
|
|
||||||
;Uncomment the option to use a hardware shader (requires DX9 graphics mode)
|
;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
|
;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
|
;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 1 to do the palette conversion on the GPU
|
||||||
;Set to 2 to do the palette conversion on the CPU
|
;Set to 2 to do the palette conversion on the CPU
|
||||||
;Set to 0 to pick automatically
|
;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)
|
;Requires DX9 graphics mode and v2.0 pixel shader support (see GPUBlt option)
|
||||||
Use32BitHeadGraphics=0
|
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
|
;Requires DX9 graphics mode
|
||||||
AllowDShowMovies=0
|
AllowDShowMovies=0
|
||||||
|
|
||||||
@@ -121,20 +128,20 @@ WorldMapTerrainInfo=0
|
|||||||
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
||||||
[Sound]
|
[Sound]
|
||||||
;Sets the number of allowed simultaneous sound effects
|
;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
|
NumSoundBuffers=0
|
||||||
|
|
||||||
;Set to 1 to allow attaching sound files to combat float messages
|
;Set to 1 to allow attaching sound files to combat float messages
|
||||||
AllowSoundForFloats=0
|
AllowSoundForFloats=0
|
||||||
|
|
||||||
;Set to 1 to automatically search for alternative formats (mp3/wma/wav) when Fallout tries to play an acm
|
;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 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
|
;This does not effect the play_sfall_sound and stop_sfall_sound script functions
|
||||||
AllowDShowSound=0
|
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 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 occurances of the music path
|
;Set to 2 to overwrite all occurrences of the music path
|
||||||
OverrideMusicDir=2
|
OverrideMusicDir=1
|
||||||
|
|
||||||
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
||||||
[Input]
|
[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
|
;Set to -1 for either ctrl key, -2 for either alt key or -3 for either shift key
|
||||||
WindowScrollKey=0
|
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
|
;Set to 0 if you don't want a reload key, or a DX scancode otherwise
|
||||||
ReloadWeaponKey=0
|
ReloadWeaponKey=0
|
||||||
|
|
||||||
@@ -284,7 +291,8 @@ DialogGenderWords=0
|
|||||||
;FemaleDefaultModel=hfjmps
|
;FemaleDefaultModel=hfjmps
|
||||||
|
|
||||||
;To change the various ingame movies, modify the next 17 lines
|
;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
|
Movie1=iplogo.mve
|
||||||
Movie2=intro.mve
|
Movie2=intro.mve
|
||||||
Movie3=elder.mve
|
Movie3=elder.mve
|
||||||
@@ -340,7 +348,7 @@ DialogueFix=1
|
|||||||
;Prevents you from using number keys to enter unvisited areas on a town map
|
;Prevents you from using number keys to enter unvisited areas on a town map
|
||||||
TownMapHotkeysFix=1
|
TownMapHotkeysFix=1
|
||||||
|
|
||||||
;Set to 1 to disable the horrigan encounter
|
;Set to 1 to disable the Horrigan encounter
|
||||||
DisableHorrigan=0
|
DisableHorrigan=0
|
||||||
|
|
||||||
;Set to 1 to disable the random element in NPC levelling.
|
;Set to 1 to disable the random element in NPC levelling.
|
||||||
@@ -361,7 +369,7 @@ SingleCore=1
|
|||||||
OverrideArtCacheSize=0
|
OverrideArtCacheSize=0
|
||||||
|
|
||||||
;Prevents you from saving in combat except at the start of your turn to avoid a few bugs
|
;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
|
;Set to 2 to block all saving in combat
|
||||||
SaveInCombatFix=1
|
SaveInCombatFix=1
|
||||||
|
|
||||||
@@ -369,9 +377,9 @@ SaveInCombatFix=1
|
|||||||
;Player's level is capped once the highest specified level is reached
|
;Player's level is capped once the highest specified level is reached
|
||||||
;XPTable=50,100,200
|
;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
|
;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
|
AdditionalWeaponAnims=1
|
||||||
|
|
||||||
;Uncomment these lines to modify the default modifiers for aimed shots at specific bodyparts
|
;Uncomment these lines to modify the default modifiers for aimed shots at specific bodyparts
|
||||||
@@ -404,14 +412,14 @@ AlwaysReloadMsgs=0
|
|||||||
PlayIdleAnimOnReload=0
|
PlayIdleAnimOnReload=0
|
||||||
|
|
||||||
;Changes the timer (in days) for deleting corpses on a map after you leave (valid range: 0..13)
|
;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
|
;Default is 6. Set to 0 for a 12-hour timer
|
||||||
CorpseDeleteTime=6
|
CorpseDeleteTime=6
|
||||||
|
|
||||||
;Set a number of milliseconds to idle each input loop
|
;Set a number of milliseconds to idle each input loop
|
||||||
;Set to -1 to disable
|
;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 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
|
ProcessorIdle=-1
|
||||||
|
|
||||||
;Set to 1 if using the hero appearance mod
|
;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
|
;Change the colour of the font used on the main menu for the button text
|
||||||
;MainMenuBigFontColour=0x3C
|
;MainMenuBigFontColour=0x3C
|
||||||
|
|
||||||
;Two alternate fixes to the interaction between HtH attacks and the fast shot trait
|
;Alternative behaviors to the Fast Shot trait
|
||||||
;0 - Fallout 2 original behaviour
|
;0 - Fallout 2 original behavior: -1 AP cost for ranged weapons; aimed attacks are disabled
|
||||||
;1 - Haenlomal's fix, called shots are enabled for HtH attacks
|
;1 - Haenlomal's fix: aimed attacks are enabled for melee/unarmed weapons and HtH attacks
|
||||||
;2 - Restoring the -1 AP bonus for HtH attacks (i.e. Fallout 1 behaviour)
|
;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
|
FastShotFix=1
|
||||||
|
|
||||||
;Set to 1 to boost the maximum number of script names from 1450 to 10000
|
;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
|
;2 - Motion sensor doesn't require charges
|
||||||
MotionScannerFlags=1
|
MotionScannerFlags=1
|
||||||
|
|
||||||
;Set to non-0 to adjust the maximum encounter table size
|
;Set a value greater than 40 to change the maximum encounter table size (enc_## in worldmap.txt)
|
||||||
;Default is 40, and the maximum is 127
|
;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
|
EncounterTableSize=0
|
||||||
|
|
||||||
;Set to 1 to disable the pipboy alarm button
|
;Set to 1 to disable the pipboy alarm button
|
||||||
@@ -574,8 +585,8 @@ SuperStimExploitFix=0
|
|||||||
InventoryApCost=4
|
InventoryApCost=4
|
||||||
QuickPocketsApCostReduction=2
|
QuickPocketsApCostReduction=2
|
||||||
|
|
||||||
;Set to 1 to allow objects seeing through other objects that have their ShootThru flag set
|
;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 situations
|
;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
|
ObjCanSeeObj_ShootThru_Fix=0
|
||||||
|
|
||||||
;Set to 1 to fix the broken obj_can_hear_obj script function
|
;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)
|
;If the argument value is -1, the mood will be determined by the local variable 0 of the script (vanilla behavior)
|
||||||
StartGDialogFix=0
|
StartGDialogFix=0
|
||||||
|
|
||||||
;Set to 1 to fix and repurpose the unused called_shot/num_attacks arguments of attack_complex script function
|
;Set to 1 to fix attacker_results/target_results arguments and repurpose the unused called_shot/num_attacks arguments of attack_complex script function
|
||||||
;This also changes the behavior of the result flags arguments
|
;New behavior of the arguments:
|
||||||
;called_shot - additional damage, when the damage received by the target is above the specified minimum damage
|
;called_shot - additional damage when hitting the target
|
||||||
;num_attacks - the number of free action points on the first turn only
|
;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
|
AttackComplexFix=0
|
||||||
|
|
||||||
;Set to 1 to fix the issue with the division operator treating negative integers as unsigned
|
;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
|
;Set to 1 to use Fallout's normal text font instead of DOS-like font on the world map
|
||||||
WorldMapFontPatch=0
|
WorldMapFontPatch=0
|
||||||
|
|
||||||
;Set to 1 to keep the selected attack mode when moving the weapon between active item slots
|
;Set to 1 to use Fallout's normal text font for death screen subtitles
|
||||||
KeepWeaponSelectMode=1
|
;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
|
;Set to 1 to display full item description for weapon/ammo in the barter screen
|
||||||
FullItemDescInBarter=0
|
FullItemDescInBarter=0
|
||||||
@@ -715,13 +726,10 @@ PartyMemberExtraInfo=0
|
|||||||
;that overrides First Aid/Doctor functions has very limited usefulness
|
;that overrides First Aid/Doctor functions has very limited usefulness
|
||||||
PartyMemberSkillFix=0
|
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
|
;Set to 2 to also skip loading the game/combat difficulty settings
|
||||||
SkipLoadingGameSettings=0
|
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
|
;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
|
;Set to -1 to disable the special death message when the global variable is set
|
||||||
SpecialDeathGVAR=491
|
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
|
;Set to 1 to force sfall to inject all hooks code into the game, even if corresponding hook scripts don't exist
|
||||||
InjectAllGameHooks=0
|
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
|
AlwaysFindScripts=0
|
||||||
|
|
||||||
;Set to 1 to force critters to display combat float messages
|
;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 start;
|
||||||
procedure map_enter_p_proc;
|
procedure map_enter_p_proc;
|
||||||
|
|
||||||
variable ammoIni;
|
variable ammoIni;
|
||||||
|
variable ammoData;
|
||||||
variable enabled;
|
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
|
procedure start begin
|
||||||
|
variable i := 1, ammo, ammoPid, dmgMod;
|
||||||
if game_loaded then begin
|
if game_loaded then begin
|
||||||
ammoIni := get_ini_setting("ddraw.ini|Misc|DamageFormula");
|
enabled := get_ini_setting("ddraw.ini|Misc|DamageFormula");
|
||||||
if (ammoIni == 1 or ammoIni == 2) then
|
if (enabled == 1 or enabled == 2) then
|
||||||
ammoIni := "AmmoGlovz.ini";
|
ammoIni := "AmmoGlovz.ini";
|
||||||
else if (ammoIni == 5) then
|
else if (enabled == 5) then
|
||||||
ammoIni := "AmmoYAAM.ini";
|
ammoIni := "AmmoYAAM.ini";
|
||||||
else
|
else
|
||||||
ammoIni := "AmmoMod.ini";
|
ammoIni := "AmmoMod.ini";
|
||||||
|
|
||||||
enabled := get_ini_setting(ammoIni + "|1|pid");
|
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
|
||||||
end
|
end
|
||||||
|
|
||||||
procedure map_enter_p_proc begin
|
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
|
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
|
- allows the player to automatically open/walk through unlocked doors when not in combat
|
||||||
|
|
||||||
Requires sfall 3.7b or higher
|
Requires sfall 3.7b or higher
|
||||||
|
|
||||||
NOTE: this script requires compiler from sfall modderspack with -s option
|
NOTE: this script requires compiler from sfall modderspack with -s option (short circuit evaluation)
|
||||||
(short circuit evaluation)
|
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -30,8 +29,8 @@ procedure combatturn_handler;
|
|||||||
#define PORTAL (0)
|
#define PORTAL (0)
|
||||||
#define DOOR_FLAGS (0x24)
|
#define DOOR_FLAGS (0x24)
|
||||||
|
|
||||||
variable only_once := 0;
|
variable onlyOnce := 0;
|
||||||
variable arrayPid;
|
variable pidDoors;
|
||||||
|
|
||||||
procedure start begin
|
procedure start begin
|
||||||
if game_loaded then begin
|
if game_loaded then begin
|
||||||
@@ -41,11 +40,11 @@ procedure start begin
|
|||||||
set_global_script_repeat(40); // for sfall 3.x
|
set_global_script_repeat(40); // for sfall 3.x
|
||||||
call map_enter_p_proc;
|
call map_enter_p_proc;
|
||||||
end else begin
|
end else begin
|
||||||
if (only_once == 1 and combat_is_initialized) then begin
|
if (onlyOnce == 1 and combat_is_initialized) then begin
|
||||||
only_once := 2;
|
onlyOnce := 2;
|
||||||
call set_door_flag(0); // reset flag when entering combat mode
|
call set_door_flag(0); // reset flag when entering combat mode
|
||||||
end else if (only_once == 2 and not(combat_is_initialized)) then begin
|
end else if (onlyOnce == 2 and not(combat_is_initialized)) then begin
|
||||||
only_once := 1;
|
onlyOnce := 1;
|
||||||
if (sfall_ver_major >= 4) then set_global_script_repeat(0);
|
if (sfall_ver_major >= 4) then set_global_script_repeat(0);
|
||||||
call set_door_flag(FLAG_WALKTHRU); // set flag after combat mode ends
|
call set_door_flag(FLAG_WALKTHRU); // set flag after combat mode ends
|
||||||
end
|
end
|
||||||
@@ -53,34 +52,35 @@ procedure start begin
|
|||||||
end
|
end
|
||||||
|
|
||||||
procedure map_enter_p_proc begin
|
procedure map_enter_p_proc begin
|
||||||
if (arrayPid) then begin
|
if (pidDoors) then begin
|
||||||
// when changing maps, delete the current array to create a new one
|
// when changing the map, delete the current array to create a new one
|
||||||
free_array(arrayPid);
|
free_array(pidDoors);
|
||||||
arrayPid := 0;
|
pidDoors := 0;
|
||||||
end
|
end
|
||||||
only_once := 1;
|
onlyOnce := 1;
|
||||||
call set_door_flag(FLAG_WALKTHRU); // set flag when entering the map
|
call set_door_flag(FLAG_WALKTHRU); // set flag when entering the map
|
||||||
end
|
end
|
||||||
|
|
||||||
procedure set_door_flag(variable state) begin
|
procedure set_door_flag(variable state) begin
|
||||||
variable objectMap, obj, objPid, i;
|
variable objectMap, obj, objPid, i;
|
||||||
|
|
||||||
if (arrayPid) then begin
|
if (pidDoors) then begin
|
||||||
call set_door_flag_array(state);
|
call set_door_flag_array(state);
|
||||||
return;
|
return;
|
||||||
end
|
end
|
||||||
|
|
||||||
objectMap := list_as_array(LIST_SCENERY);
|
objectMap := list_as_array(LIST_SCENERY);
|
||||||
arrayPid := create_array(0, 0);
|
pidDoors := create_array(0, 0);
|
||||||
|
|
||||||
foreach (obj in objectMap) begin
|
foreach (obj in objectMap) begin
|
||||||
objPid := obj_pid(obj);
|
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
|
continue; // next object
|
||||||
|
end
|
||||||
|
|
||||||
resize_array(arrayPid, i + 1);
|
resize_array(pidDoors, i + 1);
|
||||||
arrayPid[i] := objPid;
|
pidDoors[i] := objPid; // add pid to array
|
||||||
i++;
|
i++;
|
||||||
set_proto_data(objPid, DOOR_FLAGS, state);
|
set_proto_data(objPid, DOOR_FLAGS, state);
|
||||||
end
|
end
|
||||||
@@ -88,14 +88,14 @@ end
|
|||||||
|
|
||||||
procedure set_door_flag_array(variable state) begin
|
procedure set_door_flag_array(variable state) begin
|
||||||
variable objPid;
|
variable objPid;
|
||||||
foreach (objPid in arrayPid) begin
|
foreach (objPid in pidDoors) begin
|
||||||
set_proto_data(objPid, DOOR_FLAGS, state);
|
set_proto_data(objPid, DOOR_FLAGS, state);
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
procedure combatturn_handler begin
|
procedure combatturn_handler begin
|
||||||
if (only_once == 1) then begin
|
if (onlyOnce == 1) then begin
|
||||||
only_once := 2;
|
onlyOnce := 2;
|
||||||
call set_door_flag_array(0);
|
call set_door_flag_array(0);
|
||||||
set_global_script_repeat(60);
|
set_global_script_repeat(60);
|
||||||
end
|
end
|
||||||
|
|||||||
Binary file not shown.
@@ -1,85 +1,104 @@
|
|||||||
procedure start;
|
procedure start;
|
||||||
|
procedure GetBoozes;
|
||||||
procedure update_shader;
|
procedure update_shader;
|
||||||
|
|
||||||
variable perception;
|
variable begin
|
||||||
variable boozes;
|
perception;
|
||||||
variable shader1;
|
boozes;
|
||||||
variable shader2;
|
shader1;
|
||||||
variable shader3;
|
shader2;
|
||||||
variable shader4;
|
shader3;
|
||||||
variable drunk_level;
|
shader4;
|
||||||
variable next_reduction;
|
drunk_level;
|
||||||
|
next_reduction;
|
||||||
|
booze_pids;
|
||||||
|
end
|
||||||
|
|
||||||
procedure start begin
|
procedure start begin
|
||||||
variable new_pe;
|
variable new_pe, new_booze, drunk_count;
|
||||||
variable new_booze;
|
|
||||||
variable drunk_count;
|
if (metarule(22, 0)) then return; //is_loading_game
|
||||||
if (metarule(22,0)) then return;
|
|
||||||
if (game_loaded) then begin
|
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");
|
display_msg("ERROR: You must set sfall to use graphics mode 4 or 5 to use this mod");
|
||||||
return;
|
return;
|
||||||
end else begin
|
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);
|
//add_mult_objs_to_inven(dude_obj, new_pe, 10);
|
||||||
perception:=get_pc_extra_stat(1);
|
perception := get_pc_extra_stat(1);
|
||||||
boozes:=obj_is_carrying_obj_pid(dude_obj, 125);
|
boozes := GetBoozes;
|
||||||
set_global_script_repeat(25);
|
|
||||||
set_global_script_repeat(-1);
|
set_global_script_repeat(50);
|
||||||
shader1:=load_shader("booze1.fx");
|
set_global_script_type(1);
|
||||||
shader2:=load_shader("booze2.fx");
|
|
||||||
shader3:=load_shader("booze3.fx");
|
shader1 := load_shader("booze1.fx");
|
||||||
shader4:=load_shader("booze4.fx");
|
shader2 := load_shader("booze2.fx");
|
||||||
drunk_level:=0;
|
shader3 := load_shader("booze3.fx");
|
||||||
next_reduction:=0;
|
shader4 := load_shader("booze4.fx");
|
||||||
//display_msg("Init: " + perception + ", " + boozes);
|
//display_msg("Init: " + perception + ", " + boozes);
|
||||||
end
|
end
|
||||||
end else begin
|
end else begin
|
||||||
new_pe:=get_pc_extra_stat(1);
|
new_pe := get_pc_extra_stat(1);
|
||||||
new_booze:=obj_is_carrying_obj_pid(dude_obj, 125);
|
new_booze := GetBoozes;
|
||||||
if( (perception != new_pe) or (boozes != new_booze) ) then begin
|
if ((perception != new_pe) orElse (boozes != new_booze)) then begin
|
||||||
//display_msg("var change: " + perception + ", " + boozes + " -> " + new_pe + ", " + new_booze);
|
//display_msg("var change: " + perception + ", " + boozes + " -> " + new_pe + ", " + new_booze);
|
||||||
if ( (perception > new_pe) and (boozes > new_booze) ) then begin
|
if ((perception > new_pe) andAlso (boozes > new_booze)) then begin
|
||||||
if ( (perception - new_pe) < (boozes - new_booze) ) then begin
|
variable pe_diff := perception - new_pe;
|
||||||
drunk_count:=perception - new_pe;
|
variable booze_diff := boozes - new_booze;
|
||||||
|
if (pe_diff < booze_diff) then begin
|
||||||
|
drunk_count := pe_diff;
|
||||||
end else begin
|
end else begin
|
||||||
drunk_count:=boozes - new_booze;
|
drunk_count := booze_diff;
|
||||||
end
|
end
|
||||||
drunk_level:=drunk_level + (drunk_count*10);
|
drunk_level += (drunk_count * 10);
|
||||||
//display_msg("Increasing booze count: " + drunk_level);
|
//display_msg("Increasing booze count: " + drunk_level);
|
||||||
call update_shader;
|
call update_shader;
|
||||||
next_reduction:=game_time + game_ticks(6);
|
next_reduction := game_time + game_ticks(6);
|
||||||
end
|
end
|
||||||
perception:=new_pe;
|
perception := new_pe;
|
||||||
boozes:=new_booze;
|
boozes := new_booze;
|
||||||
end
|
end
|
||||||
if( (next_reduction != 0 ) and (game_time >= next_reduction) ) then begin
|
if ((next_reduction != 0) andAlso (game_time >= next_reduction)) then begin
|
||||||
drunk_level:=drunk_level - 1;
|
drunk_level -= 1;
|
||||||
if(drunk_level == 0) then next_reduction:=0;
|
if (drunk_level == 0) then
|
||||||
else next_reduction:=next_reduction + game_ticks(6);
|
next_reduction := 0;
|
||||||
|
else
|
||||||
|
next_reduction += game_ticks(6);
|
||||||
call update_shader;
|
call update_shader;
|
||||||
//display_msg("Decreasing booze count: " + drunk_level);
|
//display_msg("Decreasing booze count: " + drunk_level);
|
||||||
end
|
end
|
||||||
end
|
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
|
procedure update_shader begin
|
||||||
if(drunk_level >= 100) then begin
|
if (drunk_level >= 100) then begin
|
||||||
deactivate_shader(shader1);
|
deactivate_shader(shader1);
|
||||||
deactivate_shader(shader2);
|
deactivate_shader(shader2);
|
||||||
deactivate_shader(shader3);
|
deactivate_shader(shader3);
|
||||||
activate_shader(shader4);
|
activate_shader(shader4);
|
||||||
end else if(drunk_level >= 50) then begin
|
end else if (drunk_level >= 50) then begin
|
||||||
deactivate_shader(shader1);
|
deactivate_shader(shader1);
|
||||||
deactivate_shader(shader2);
|
deactivate_shader(shader2);
|
||||||
activate_shader(shader3);
|
activate_shader(shader3);
|
||||||
deactivate_shader(shader4);
|
deactivate_shader(shader4);
|
||||||
end else if(drunk_level >= 25) then begin
|
end else if (drunk_level >= 25) then begin
|
||||||
deactivate_shader(shader1);
|
deactivate_shader(shader1);
|
||||||
activate_shader(shader2);
|
activate_shader(shader2);
|
||||||
deactivate_shader(shader3);
|
deactivate_shader(shader3);
|
||||||
deactivate_shader(shader4);
|
deactivate_shader(shader4);
|
||||||
end else if(drunk_level > 0) then begin
|
end else if (drunk_level > 0) then begin
|
||||||
activate_shader(shader1);
|
activate_shader(shader1);
|
||||||
deactivate_shader(shader2);
|
deactivate_shader(shader2);
|
||||||
deactivate_shader(shader3);
|
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;
|
texture bloomMap;
|
||||||
sampler s0;
|
sampler s0;
|
||||||
@@ -12,6 +31,93 @@ sampler BloomSampler : samplerstate
|
|||||||
AddressV = Clamp;
|
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
|
// pseudo gauss blur
|
||||||
static const float2 offsets[12] = {
|
static const float2 offsets[12] = {
|
||||||
-0.326212, -0.405805,
|
-0.326212, -0.405805,
|
||||||
@@ -28,89 +134,122 @@ static const float2 offsets[12] = {
|
|||||||
-0.791559, -0.597705,
|
-0.791559, -0.597705,
|
||||||
};
|
};
|
||||||
|
|
||||||
float w;
|
float4 AdjustSaturation(float4 color, float saturation)
|
||||||
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) {
|
|
||||||
float grey = dot(color, float3(0.3, 0.59, 0.11));
|
float grey = dot(color, float3(0.3, 0.59, 0.11));
|
||||||
|
|
||||||
return lerp(grey, color, saturation);
|
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);
|
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;
|
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;
|
float intensity = BloomIntensity - lerp(0.0, 0.2, sum);
|
||||||
// return 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(); }
|
float4 c0 = tex2D(s0, texCoord); // get original pixel
|
||||||
// pass P3 { PixelShader = compile ps_2_0 Bloom(); }
|
|
||||||
Pass P0 { PixelShader = compile ps_3_0 BlurPS(float2(1, 0)); }
|
// edge detection
|
||||||
Pass P1 { PixelShader = compile ps_3_0 BlurPS(float2(0, 1)); }
|
// 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.
|
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"
|
#include "..\headers\define.h"
|
||||||
@@ -9,10 +7,8 @@
|
|||||||
#include "..\headers\sfall\sfall.h"
|
#include "..\headers\sfall\sfall.h"
|
||||||
#include "..\headers\sfall\define_extra.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 start;
|
||||||
|
procedure can_see(variable obj1, variable obj2);
|
||||||
|
|
||||||
procedure start begin
|
procedure start begin
|
||||||
if game_loaded then begin
|
if game_loaded then begin
|
||||||
@@ -21,40 +17,50 @@ procedure start begin
|
|||||||
variable
|
variable
|
||||||
source := get_sfall_arg,
|
source := get_sfall_arg,
|
||||||
target := get_sfall_arg,
|
target := get_sfall_arg,
|
||||||
original := get_sfall_arg,
|
engine := get_sfall_arg,
|
||||||
hookType := get_sfall_arg, /* new arg */
|
type := get_sfall_arg, /* new arg */
|
||||||
result := 0,
|
result := 0,
|
||||||
distance;
|
distance, seeDistance, seeText;
|
||||||
|
|
||||||
if target then begin
|
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
|
if can_see(source, target) then begin
|
||||||
distance *= 5;
|
seeDistance *= 5;
|
||||||
if (get_flags(target) bwand FLAG_TRANSGLASS) then distance /= 2;
|
if (get_flags(target) bwand FLAG_TRANSGLASS) then seeDistance /= 2;
|
||||||
end else if combat_is_initialized then begin
|
end else if combat_is_initialized then begin
|
||||||
distance *= 2;
|
seeDistance *= 2;
|
||||||
end
|
end
|
||||||
|
|
||||||
if (target == dude_obj) then begin
|
if (target == dude_obj) then begin
|
||||||
if sneak_success then begin
|
if sneak_success then begin
|
||||||
distance /= 4;
|
seeDistance /= 4;
|
||||||
if has_skill(target, SKILL_SNEAK) > 120 then distance -= 1;
|
if has_skill(target, SKILL_SNEAK) > 120 then seeDistance -= 1;
|
||||||
end else if dude_is_sneaking then begin
|
end else if dude_is_sneaking then begin
|
||||||
distance := distance * 2 / 3;
|
seeDistance := (seeDistance * 2) / 3; // distance div 1.5
|
||||||
end
|
end
|
||||||
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 (distance <= seeDistance) then result := 1;
|
||||||
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
|
|
||||||
end
|
|
||||||
|
|
||||||
|
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);
|
//set_sfall_return(result);
|
||||||
end
|
end
|
||||||
|
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
|
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 ===
|
=== Changelog ===
|
||||||
=================
|
=================
|
||||||
|
|
||||||
|
> sfall 4.2.7
|
||||||
|
- added ability to declare local variables anywhere in the procedure body
|
||||||
|
|
||||||
> sfall 4.2.3
|
> sfall 4.2.3
|
||||||
- fixed compiler giving "assignment operator expected" error when a variable-like macro is not being defined properly
|
- 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
|
- added new logical operators "AndAlso", "OrElse" for short-circuit evaluation of logical expressions
|
||||||
|
|||||||
@@ -1,13 +1,9 @@
|
|||||||
/*
|
|
||||||
Copyright 1998-2003 Interplay Entertainment Corp. All rights reserved.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef COMMAND_H
|
#ifndef COMMAND_H
|
||||||
#define COMMAND_H
|
#define COMMAND_H
|
||||||
|
|
||||||
|
#define critter_is_armed(x) (((obj_item_subtype(critter_inven_obj(x,INVEN_TYPE_RIGHT_HAND))) == item_type_weapon) orElse \
|
||||||
#define critter_is_armed(x) (((obj_item_subtype(critter_inven_obj(x,INVEN_TYPE_RIGHT_HAND))) == item_type_weapon) or \
|
|
||||||
((obj_item_subtype(critter_inven_obj(x,INVEN_TYPE_LEFT_HAND))) == item_type_weapon))
|
((obj_item_subtype(critter_inven_obj(x,INVEN_TYPE_LEFT_HAND))) == item_type_weapon))
|
||||||
|
|
||||||
#define critter_weight(x) (100 + ((get_critter_stat(x,STAT_gender) == GENDER_MALE) * 50) + (get_critter_stat(x,STAT_st) * 5) - ((get_critter_stat(x,STAT_ag) + get_critter_stat(x,STAT_en))/3))
|
#define critter_weight(x) (100 + ((get_critter_stat(x,STAT_gender) == GENDER_MALE) * 50) + (get_critter_stat(x,STAT_st) * 5) - ((get_critter_stat(x,STAT_ag) + get_critter_stat(x,STAT_en))/3))
|
||||||
#define critter_wearing_armor(x) (obj_item_subtype(critter_inven_obj(x,INVEN_TYPE_WORN)) == item_type_armor)
|
#define critter_wearing_armor(x) (obj_item_subtype(critter_inven_obj(x,INVEN_TYPE_WORN)) == item_type_armor)
|
||||||
|
|
||||||
@@ -21,13 +17,13 @@
|
|||||||
#define dude_iq (get_critter_stat(dude_obj,STAT_iq))
|
#define dude_iq (get_critter_stat(dude_obj,STAT_iq))
|
||||||
#define dude_agility (get_critter_stat(dude_obj,STAT_ag))
|
#define dude_agility (get_critter_stat(dude_obj,STAT_ag))
|
||||||
#define dude_luck (get_critter_stat(dude_obj,STAT_lu))
|
#define dude_luck (get_critter_stat(dude_obj,STAT_lu))
|
||||||
#ifndef dude_level
|
|
||||||
#define dude_level (get_pc_stat(PCSTAT_level))
|
#define dude_level (get_pc_stat(PCSTAT_level))
|
||||||
#endif
|
|
||||||
#define dude_age (get_critter_stat(dude_obj,STAT_age))
|
#define dude_age (get_critter_stat(dude_obj,STAT_age))
|
||||||
#define dude_weight critter_weight(dude_obj)
|
#define dude_weight critter_weight(dude_obj)
|
||||||
|
#define dude_cur_carry who_carry_amount(dude_obj)
|
||||||
|
#define dude_max_carry who_max_carry(dude_obj)
|
||||||
|
|
||||||
#define dude_moron_not_vegetable (((get_critter_stat(dude_obj,STAT_iq)) > 1) and ((get_critter_stat(dude_obj,STAT_iq)) < 3) )
|
#define dude_moron_not_vegetable (((get_critter_stat(dude_obj,STAT_iq)) > 1) andAlso ((get_critter_stat(dude_obj,STAT_iq)) < 3) )
|
||||||
|
|
||||||
#define dude_is_male (dude_gender == GENDER_MALE)
|
#define dude_is_male (dude_gender == GENDER_MALE)
|
||||||
#define dude_is_female (dude_gender == GENDER_FEMALE)
|
#define dude_is_female (dude_gender == GENDER_FEMALE)
|
||||||
@@ -39,43 +35,50 @@
|
|||||||
(obj_is_carrying_obj_pid(dude_obj, PID_ADVANCED_POWER_ARMOR_MK2)) + \
|
(obj_is_carrying_obj_pid(dude_obj, PID_ADVANCED_POWER_ARMOR_MK2)) + \
|
||||||
(obj_is_carrying_obj_pid(dude_obj, PID_HARDENED_POWER_ARMOR))) > 0)
|
(obj_is_carrying_obj_pid(dude_obj, PID_HARDENED_POWER_ARMOR))) > 0)
|
||||||
|
|
||||||
#define dude_wielding_knife ((obj_pid(critter_inven_obj(dude_obj,INVEN_TYPE_RIGHT_HAND)) == PID_KNIFE) or \
|
#define dude_wielding_knife ((obj_pid(critter_inven_obj(dude_obj,INVEN_TYPE_RIGHT_HAND)) == PID_KNIFE) orElse \
|
||||||
(obj_pid(critter_inven_obj(dude_obj,INVEN_TYPE_RIGHT_HAND)) == PID_THROWING_KNIFE) or \
|
(obj_pid(critter_inven_obj(dude_obj,INVEN_TYPE_RIGHT_HAND)) == PID_THROWING_KNIFE) orElse \
|
||||||
(obj_pid(critter_inven_obj(dude_obj,INVEN_TYPE_RIGHT_HAND)) == PID_RIPPER) or \
|
(obj_pid(critter_inven_obj(dude_obj,INVEN_TYPE_RIGHT_HAND)) == PID_RIPPER) orElse \
|
||||||
(obj_pid(critter_inven_obj(dude_obj,INVEN_TYPE_RIGHT_HAND)) == PID_COMBAT_KNIFE) or \
|
(obj_pid(critter_inven_obj(dude_obj,INVEN_TYPE_RIGHT_HAND)) == PID_COMBAT_KNIFE) orElse \
|
||||||
(obj_pid(critter_inven_obj(dude_obj,INVEN_TYPE_LEFT_HAND)) == PID_KNIFE) or \
|
(obj_pid(critter_inven_obj(dude_obj,INVEN_TYPE_RIGHT_HAND)) == PID_SWITCHBLADE) orElse \
|
||||||
(obj_pid(critter_inven_obj(dude_obj,INVEN_TYPE_LEFT_HAND)) == PID_THROWING_KNIFE) or \
|
(obj_pid(critter_inven_obj(dude_obj,INVEN_TYPE_RIGHT_HAND)) == PID_SHIV) orElse \
|
||||||
(obj_pid(critter_inven_obj(dude_obj,INVEN_TYPE_LEFT_HAND)) == PID_RIPPER) or \
|
(obj_pid(critter_inven_obj(dude_obj,INVEN_TYPE_RIGHT_HAND)) == PID_LIL_JESUS_WEAPON) orElse \
|
||||||
(obj_pid(critter_inven_obj(dude_obj,INVEN_TYPE_LEFT_HAND)) == PID_COMBAT_KNIFE))
|
(obj_pid(critter_inven_obj(dude_obj,INVEN_TYPE_RIGHT_HAND)) == PID_WAKIZASHI_BLADE) orElse \
|
||||||
|
(obj_pid(critter_inven_obj(dude_obj,INVEN_TYPE_LEFT_HAND)) == PID_KNIFE) orElse \
|
||||||
|
(obj_pid(critter_inven_obj(dude_obj,INVEN_TYPE_LEFT_HAND)) == PID_THROWING_KNIFE) orElse \
|
||||||
|
(obj_pid(critter_inven_obj(dude_obj,INVEN_TYPE_LEFT_HAND)) == PID_RIPPER) orElse \
|
||||||
|
(obj_pid(critter_inven_obj(dude_obj,INVEN_TYPE_LEFT_HAND)) == PID_COMBAT_KNIFE) orElse \
|
||||||
|
(obj_pid(critter_inven_obj(dude_obj,INVEN_TYPE_LEFT_HAND)) == PID_SWITCHBLADE) orElse \
|
||||||
|
(obj_pid(critter_inven_obj(dude_obj,INVEN_TYPE_LEFT_HAND)) == PID_SHIV) orElse \
|
||||||
|
(obj_pid(critter_inven_obj(dude_obj,INVEN_TYPE_LEFT_HAND)) == PID_LIL_JESUS_WEAPON) orElse \
|
||||||
|
(obj_pid(critter_inven_obj(dude_obj,INVEN_TYPE_LEFT_HAND)) == PID_WAKIZASHI_BLADE))
|
||||||
|
|
||||||
#define dude_wearing_power_armor ((obj_pid(critter_inven_obj(dude_obj,INVEN_TYPE_WORN)) == PID_POWERED_ARMOR) or \
|
#define dude_wearing_power_armor ((obj_pid(critter_inven_obj(dude_obj,INVEN_TYPE_WORN)) == PID_POWERED_ARMOR) orElse \
|
||||||
(obj_pid(critter_inven_obj(dude_obj,INVEN_TYPE_WORN)) == PID_ADVANCED_POWER_ARMOR) or \
|
(obj_pid(critter_inven_obj(dude_obj,INVEN_TYPE_WORN)) == PID_ADVANCED_POWER_ARMOR) orElse \
|
||||||
(obj_pid(critter_inven_obj(dude_obj,INVEN_TYPE_WORN)) == PID_ADVANCED_POWER_ARMOR_MK2) or \
|
(obj_pid(critter_inven_obj(dude_obj,INVEN_TYPE_WORN)) == PID_ADVANCED_POWER_ARMOR_MK2) orElse \
|
||||||
(obj_pid(critter_inven_obj(dude_obj,INVEN_TYPE_WORN)) == PID_HARDENED_POWER_ARMOR))
|
(obj_pid(critter_inven_obj(dude_obj,INVEN_TYPE_WORN)) == PID_HARDENED_POWER_ARMOR))
|
||||||
|
|
||||||
#define dude_wearing_leather_armor ((obj_pid(critter_inven_obj(dude_obj,INVEN_TYPE_WORN)) == PID_LEATHER_ARMOR) or \
|
#define dude_wearing_leather_armor ((obj_pid(critter_inven_obj(dude_obj,INVEN_TYPE_WORN)) == PID_LEATHER_ARMOR) orElse \
|
||||||
(obj_pid(critter_inven_obj(dude_obj,INVEN_TYPE_WORN)) == PID_LEATHER_JACKET) or \
|
(obj_pid(critter_inven_obj(dude_obj,INVEN_TYPE_WORN)) == PID_LEATHER_JACKET) orElse \
|
||||||
(obj_pid(critter_inven_obj(dude_obj,INVEN_TYPE_WORN)) == PID_LEATHER_ARMOR_MK_II) or \
|
(obj_pid(critter_inven_obj(dude_obj,INVEN_TYPE_WORN)) == PID_LEATHER_ARMOR_MK_II) orElse \
|
||||||
(obj_pid(critter_inven_obj(dude_obj,INVEN_TYPE_WORN)) == PID_CURED_LEATHER_ARMOR))
|
(obj_pid(critter_inven_obj(dude_obj,INVEN_TYPE_WORN)) == PID_CURED_LEATHER_ARMOR))
|
||||||
|
|
||||||
#define dude_wearing_combat_armor ((obj_pid(critter_inven_obj(dude_obj,INVEN_TYPE_WORN)) == PID_COMBAT_ARMOR) or \
|
#define dude_wearing_combat_armor ((obj_pid(critter_inven_obj(dude_obj,INVEN_TYPE_WORN)) == PID_COMBAT_ARMOR) orElse \
|
||||||
(obj_pid(critter_inven_obj(dude_obj,INVEN_TYPE_WORN)) == PID_BROTHERHOOD_COMBAT_ARMOR) or \
|
(obj_pid(critter_inven_obj(dude_obj,INVEN_TYPE_WORN)) == PID_BROTHERHOOD_COMBAT_ARMOR) orElse \
|
||||||
(obj_pid(critter_inven_obj(dude_obj,INVEN_TYPE_WORN)) == PID_COMBAT_ARMOR_MK_II))
|
(obj_pid(critter_inven_obj(dude_obj,INVEN_TYPE_WORN)) == PID_COMBAT_ARMOR_MK_II))
|
||||||
|
|
||||||
#define dude_wearing_metal_armor ((obj_pid(critter_inven_obj(dude_obj,INVEN_TYPE_WORN)) == PID_METAL_ARMOR) or \
|
#define dude_wearing_metal_armor ((obj_pid(critter_inven_obj(dude_obj,INVEN_TYPE_WORN)) == PID_METAL_ARMOR) orElse \
|
||||||
(obj_pid(critter_inven_obj(dude_obj,INVEN_TYPE_WORN)) == PID_METAL_ARMOR_MK_II))
|
(obj_pid(critter_inven_obj(dude_obj,INVEN_TYPE_WORN)) == PID_METAL_ARMOR_MK_II))
|
||||||
|
|
||||||
#define dude_wearing_vault_suit COND019(1)
|
#define dude_has_gambling_skills ((dude_iq > 3) andAlso (has_skill(dude_obj, SKILL_GAMBLING) >= 25))
|
||||||
#define dude_has_gambling_skills ((dude_iq > 3) and (has_skill(dude_obj, SKILL_GAMBLING) >= 25))
|
|
||||||
|
|
||||||
#define dude_is_sneaking (using_skill(dude_obj,SKILL_SNEAK))
|
#define dude_is_sneaking (using_skill(dude_obj,SKILL_SNEAK))
|
||||||
#define dude_is_walking (art_anim(obj_art_fid(dude_obj)) == ANIM_walk)
|
#define dude_is_walking (art_anim(obj_art_fid(dude_obj)) == ANIM_walk)
|
||||||
#define dude_is_running (art_anim(obj_art_fid(dude_obj)) == ANIM_running)
|
#define dude_is_running (art_anim(obj_art_fid(dude_obj)) == ANIM_running)
|
||||||
#define dude_is_poisoned (get_poison(dude_obj))
|
#define dude_is_poisoned (get_poison(dude_obj))
|
||||||
#define dude_is_irradiated (get_critter_stat(dude_obj, STAT_current_rad))
|
#define dude_is_irradiated (get_critter_stat(dude_obj, STAT_current_rad))
|
||||||
#define dude_is_crippled ((critter_state(dude_obj) bwand DAM_CRIP_LEG_LEFT) or \
|
#define dude_is_crippled ((critter_state(dude_obj) bwand DAM_CRIP_LEG_LEFT) orElse \
|
||||||
(critter_state(dude_obj) bwand DAM_CRIP_LEG_RIGHT) or \
|
(critter_state(dude_obj) bwand DAM_CRIP_LEG_RIGHT) orElse \
|
||||||
(critter_state(dude_obj) bwand DAM_CRIP_ARM_LEFT) or \
|
(critter_state(dude_obj) bwand DAM_CRIP_ARM_LEFT) orElse \
|
||||||
(critter_state(dude_obj) bwand DAM_CRIP_ARM_RIGHT))
|
(critter_state(dude_obj) bwand DAM_CRIP_ARM_RIGHT))
|
||||||
|
|
||||||
#define dude_cur_rot (has_trait(TRAIT_OBJECT,dude_obj,OBJECT_CUR_ROT))
|
#define dude_cur_rot (has_trait(TRAIT_OBJECT,dude_obj,OBJECT_CUR_ROT))
|
||||||
@@ -99,8 +102,6 @@
|
|||||||
#define dude_has_car (global_var(GVAR_PLAYER_GOT_CAR))
|
#define dude_has_car (global_var(GVAR_PLAYER_GOT_CAR))
|
||||||
#define dude_is_pornstar dude_has_porn_star_rep
|
#define dude_is_pornstar dude_has_porn_star_rep
|
||||||
#define dude_is_high drug_influence(dude_obj)
|
#define dude_is_high drug_influence(dude_obj)
|
||||||
#define dude_found_geck global_var(GVAR_VAULT13_FOUND_GECK)
|
|
||||||
|
|
||||||
|
|
||||||
#define dude_stat_win(X,Y) ((do_check(dude_obj,X,Y)) > (do_check(self_obj,X,0)))
|
#define dude_stat_win(X,Y) ((do_check(dude_obj,X,Y)) > (do_check(self_obj,X,0)))
|
||||||
#define dude_stat_lose(X,Y) ((do_check(dude_obj,X,Y)) < (do_check(self_obj,X,0)))
|
#define dude_stat_lose(X,Y) ((do_check(dude_obj,X,Y)) < (do_check(self_obj,X,0)))
|
||||||
@@ -112,7 +113,6 @@
|
|||||||
|
|
||||||
#define dude_is_addict (has_trait(TRAIT_TRAIT, dude_obj, TRAIT_drug_addict))
|
#define dude_is_addict (has_trait(TRAIT_TRAIT, dude_obj, TRAIT_drug_addict))
|
||||||
|
|
||||||
|
|
||||||
#define self_name (obj_name(self_obj))
|
#define self_name (obj_name(self_obj))
|
||||||
#define self_gender (get_critter_stat(self_obj,STAT_gender))
|
#define self_gender (get_critter_stat(self_obj,STAT_gender))
|
||||||
#define self_strength (get_critter_stat(self_obj,STAT_st))
|
#define self_strength (get_critter_stat(self_obj,STAT_st))
|
||||||
@@ -128,7 +128,7 @@
|
|||||||
#define self_is_armed critter_is_armed(self_obj)
|
#define self_is_armed critter_is_armed(self_obj)
|
||||||
#define self_wearing_armor critter_wearing_armor(self_obj)
|
#define self_wearing_armor critter_wearing_armor(self_obj)
|
||||||
|
|
||||||
#define self_carrying_laser_pistol ((obj_pid(critter_inven_obj(self_obj,INVEN_TYPE_LEFT_HAND)) == PID_LASER_PISTOL) or \
|
#define self_carrying_laser_pistol ((obj_pid(critter_inven_obj(self_obj,INVEN_TYPE_LEFT_HAND)) == PID_LASER_PISTOL) orElse \
|
||||||
(obj_pid(critter_inven_obj(self_obj,INVEN_TYPE_RIGHT_HAND)) == PID_LASER_PISTOL))
|
(obj_pid(critter_inven_obj(self_obj,INVEN_TYPE_RIGHT_HAND)) == PID_LASER_PISTOL))
|
||||||
|
|
||||||
#define self_is_sneaking (using_skill(self_obj,SKILL_SNEAK))
|
#define self_is_sneaking (using_skill(self_obj,SKILL_SNEAK))
|
||||||
@@ -173,19 +173,20 @@
|
|||||||
|
|
||||||
#define flush_add_timer_event(obj, time, param) rm_fixed_timer_event(obj, param); \
|
#define flush_add_timer_event(obj, time, param) rm_fixed_timer_event(obj, param); \
|
||||||
add_timer_event(obj, time, param)
|
add_timer_event(obj, time, param)
|
||||||
|
|
||||||
#define flush_add_timer_event_sec(obj, sec, param) flush_add_timer_event(obj, game_ticks(sec), param)
|
#define flush_add_timer_event_sec(obj, sec, param) flush_add_timer_event(obj, game_ticks(sec), param)
|
||||||
|
|
||||||
/******************************************************************
|
/******************************************************************
|
||||||
General commands getting information about time
|
General commands getting information about time
|
||||||
******************************************************************/
|
******************************************************************/
|
||||||
|
|
||||||
#define morning ((game_time_hour >= 600) and (game_time_hour < 700))
|
#define morning ((game_time_hour >= 600) andAlso (game_time_hour < 700))
|
||||||
#ifndef day
|
#ifndef day
|
||||||
#define day ((game_time_hour >= 700) and (game_time_hour < 1800))
|
#define day ((game_time_hour >= 700) andAlso (game_time_hour < 1800))
|
||||||
#endif
|
#endif
|
||||||
#define evening ((game_time_hour >= 1800) and (game_time_hour < 1900))
|
#define evening ((game_time_hour >= 1800) andAlso (game_time_hour < 1900))
|
||||||
#ifndef night
|
#ifndef night
|
||||||
#define night ((game_time_hour >= 1900) or (game_time_hour < 600))
|
#define night ((game_time_hour >= 1900) orElse (game_time_hour < 600))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define GAME_TIME_SUBSECOND_RESOLUTION (10)
|
#define GAME_TIME_SUBSECOND_RESOLUTION (10)
|
||||||
@@ -200,7 +201,6 @@
|
|||||||
#define GAME_TIME_IN_MINUTES (game_time / (GAME_TIME_SUBSECOND_RESOLUTION * SECONDS_PER_MINUTE))
|
#define GAME_TIME_IN_MINUTES (game_time / (GAME_TIME_SUBSECOND_RESOLUTION * SECONDS_PER_MINUTE))
|
||||||
#define GAME_TIME_IN_SECONDS (game_time / GAME_TIME_SUBSECOND_RESOLUTION)
|
#define GAME_TIME_IN_SECONDS (game_time / GAME_TIME_SUBSECOND_RESOLUTION)
|
||||||
|
|
||||||
|
|
||||||
#define ticks_til_hour(x) ((ONE_GAME_DAY * (game_time_hour > (x))) + ((((x)/100) - (game_time_hour/100)) * ONE_GAME_HOUR) + ((((x)%100) - (game_time_hour%100)) * ONE_GAME_MINUTE))
|
#define ticks_til_hour(x) ((ONE_GAME_DAY * (game_time_hour > (x))) + ((((x)/100) - (game_time_hour/100)) * ONE_GAME_HOUR) + ((((x)%100) - (game_time_hour%100)) * ONE_GAME_MINUTE))
|
||||||
#define game_time_advance_hour(x) game_time_advance(ticks_til_hour(x))
|
#define game_time_advance_hour(x) game_time_advance(ticks_til_hour(x))
|
||||||
|
|
||||||
@@ -219,9 +219,7 @@
|
|||||||
/***************************************************************
|
/***************************************************************
|
||||||
**************** Dialogue Information ***********************
|
**************** Dialogue Information ***********************
|
||||||
***************************************************************/
|
***************************************************************/
|
||||||
#ifndef floater
|
#define floater(x) float_msg(self_obj, message_str(NAME,x), FLOAT_COLOR_NORMAL)
|
||||||
#define floater(x) float_msg(self_obj, message_str(NAME,x), FLOAT_COLOR_NORMAL)
|
|
||||||
#endif
|
|
||||||
#define floater_rand(x,y) floater(random(x,y))
|
#define floater_rand(x,y) floater(random(x,y))
|
||||||
|
|
||||||
#define dude_floater(x) float_msg(dude_obj, message_str(NAME,x), FLOAT_COLOR_NORMAL)
|
#define dude_floater(x) float_msg(dude_obj, message_str(NAME,x), FLOAT_COLOR_NORMAL)
|
||||||
@@ -229,7 +227,6 @@
|
|||||||
#define dude_floater_bad(x) float_msg(dude_obj, message_str(NAME,x), FLOAT_COLOR_BAD)
|
#define dude_floater_bad(x) float_msg(dude_obj, message_str(NAME,x), FLOAT_COLOR_BAD)
|
||||||
#define dude_floater_sick(x) float_msg(dude_obj, message_str(NAME,x), FLOAT_COLOR_SICK)
|
#define dude_floater_sick(x) float_msg(dude_obj, message_str(NAME,x), FLOAT_COLOR_SICK)
|
||||||
|
|
||||||
|
|
||||||
#define FLOAT_COLOR_NORMAL FLOAT_MSG_YELLOW
|
#define FLOAT_COLOR_NORMAL FLOAT_MSG_YELLOW
|
||||||
#define FLOAT_COLOR_SICK FLOAT_MSG_GREEN
|
#define FLOAT_COLOR_SICK FLOAT_MSG_GREEN
|
||||||
#define FLOAT_COLOR_BAD FLOAT_MSG_RED
|
#define FLOAT_COLOR_BAD FLOAT_MSG_RED
|
||||||
@@ -335,9 +332,7 @@
|
|||||||
******************************************************************/
|
******************************************************************/
|
||||||
#define critter_is_male (get_critter_stat(self_obj,STAT_gender) == GENDER_MALE)
|
#define critter_is_male (get_critter_stat(self_obj,STAT_gender) == GENDER_MALE)
|
||||||
#define critter_is_female (get_critter_stat(self_obj,STAT_gender) == GENDER_FEMALE)
|
#define critter_is_female (get_critter_stat(self_obj,STAT_gender) == GENDER_FEMALE)
|
||||||
/*#define critter_is_armed (((obj_item_subtype(critter_inven_obj(self_obj,INVEN_TYPE_RIGHT_HAND))) == item_type_weapon) \
|
|
||||||
or ((obj_item_subtype(critter_inven_obj(self_obj,INVEN_TYPE_LEFT_HAND))) == item_type_weapon))
|
|
||||||
*/
|
|
||||||
/******************************************************************
|
/******************************************************************
|
||||||
General commands setting and getting the map exit
|
General commands setting and getting the map exit
|
||||||
******************************************************************/
|
******************************************************************/
|
||||||
@@ -385,59 +380,12 @@
|
|||||||
#define status_is_warned(status_var) (status_is(status_var, PERSON_WARNED))
|
#define status_is_warned(status_var) (status_is(status_var, PERSON_WARNED))
|
||||||
#define status_is_sex(status_var) (status_is(status_var, PERSON_SEX))
|
#define status_is_sex(status_var) (status_is(status_var, PERSON_SEX))
|
||||||
|
|
||||||
#define status_is_alive(status_var) (not (status_is_killed(status_var) or status_is_assassinated(status_var) or status_is_dead(status_var)))
|
#define status_is_alive(status_var) (not (status_is_killed(status_var) orElse status_is_assassinated(status_var) orElse status_is_dead(status_var)))
|
||||||
|
|
||||||
|
|
||||||
/******************************************************************
|
/******************************************************************
|
||||||
General commands getting information about cities
|
General commands getting information about cities
|
||||||
******************************************************************/
|
******************************************************************/
|
||||||
#define abbey_visible_on_map (town_known(AREA_ABBEY) != MARK_STATE_UNKNOWN)
|
|
||||||
#define arroyo_visible_on_map (town_known(AREA_ARROYO) != MARK_STATE_UNKNOWN)
|
|
||||||
#define broken_hills_visible_on_map (town_known(AREA_BROKEN_HILLS) != MARK_STATE_UNKNOWN)
|
|
||||||
#define colusa_visible_on_map (town_known(AREA_NAVARRO) != MARK_STATE_UNKNOWN)
|
|
||||||
#define den_visible_on_map (town_known(AREA_DEN) != MARK_STATE_UNKNOWN)
|
|
||||||
#define enclave_visible_on_map (town_known(AREA_THE_ENCLAVE) != MARK_STATE_UNKNOWN)
|
|
||||||
#define EPA_visible_on_map (town_known(AREA_EPA) != MARK_STATE_UNKNOWN)
|
|
||||||
#define gecko_visible_on_map (town_known(AREA_GECKO) != MARK_STATE_UNKNOWN)
|
|
||||||
#define klamath_visible_on_map (town_known(AREA_KLAMATH) != MARK_STATE_UNKNOWN)
|
|
||||||
#define military_base_visible_on_map (town_known(AREA_MILITARY_BASE) != MARK_STATE_UNKNOWN)
|
|
||||||
#define modoc_visible_on_map (town_known(AREA_MODOC) != MARK_STATE_UNKNOWN)
|
|
||||||
#define new_CA_republic_visible_on_map (town_known(AREA_NCR) != MARK_STATE_UNKNOWN)
|
|
||||||
#define primitive_tribe_visible_on_map (town_known(AREA_PRIMITIVE_TRIBE) != MARK_STATE_UNKNOWN)
|
|
||||||
#define redding_visible_on_map (town_known(AREA_REDDING) != MARK_STATE_UNKNOWN)
|
|
||||||
#define new_reno_visible_on_map (town_known(AREA_NEW_RENO) != MARK_STATE_UNKNOWN)
|
|
||||||
#define san_francisco_visible_on_map (town_known(AREA_SAN_FRANCISCO) != MARK_STATE_UNKNOWN)
|
|
||||||
#define sierra_army_base_visible_on_map (town_known(AREA_SIERRA_ARMY_BASE) != MARK_STATE_UNKNOWN)
|
|
||||||
#define vault_13_visible_on_map (town_known(AREA_VAULT_13) != MARK_STATE_UNKNOWN)
|
|
||||||
#define vault_15_visible_on_map (town_known(AREA_VAULT_15) != MARK_STATE_UNKNOWN)
|
|
||||||
#define vault_city_visible_on_map (town_known(AREA_VAULT_CITY) != MARK_STATE_UNKNOWN)
|
|
||||||
#define vault_fake_13A_visible_on_map (town_known(AREA_FAKE_VAULT_13A) != MARK_STATE_UNKNOWN)
|
|
||||||
#define vault_fake_13B_visible_on_map (town_known(AREA_FAKE_VAULT_13B) != MARK_STATE_UNKNOWN)
|
|
||||||
|
|
||||||
#define abbey_visit (town_known(AREA_ABBEY) == MARK_STATE_VISITED)
|
|
||||||
#define arroyo_visit (town_known(AREA_ARROYO) == MARK_STATE_VISITED)
|
|
||||||
#define broken_hills_visit (town_known(AREA_BROKEN_HILLS) == MARK_STATE_VISITED)
|
|
||||||
#define colusa_visit (town_known(AREA_NAVARRO) == MARK_STATE_VISITED)
|
|
||||||
#define den_visit (town_known(AREA_DEN) == MARK_STATE_VISITED)
|
|
||||||
#define enclave_visit (town_known(AREA_THE_ENCLAVE) == MARK_STATE_VISITED)
|
|
||||||
#define EPA_visit (town_known(AREA_EPA) == MARK_STATE_VISITED)
|
|
||||||
#define gecko_visit (town_known(AREA_GECKO) == MARK_STATE_VISITED)
|
|
||||||
#define klamath_visit (town_known(AREA_KLAMATH) == MARK_STATE_VISITED)
|
|
||||||
#define military_base_visit (town_known(AREA_MILITARY_BASE) == MARK_STATE_VISITED)
|
|
||||||
#define modoc_visit (town_known(AREA_MODOC) == MARK_STATE_VISITED)
|
|
||||||
#define new_CA_republic_visit (town_known(AREA_NCR) == MARK_STATE_VISITED)
|
|
||||||
#define primitive_tribe_visit (town_known(AREA_PRIMITIVE_TRIBE) == MARK_STATE_VISITED)
|
|
||||||
#define redding_visit (town_known(AREA_REDDING) == MARK_STATE_VISITED)
|
|
||||||
#define new_reno_visit (town_known(AREA_NEW_RENO) == MARK_STATE_VISITED)
|
|
||||||
#define san_francisco_visit (town_known(AREA_SAN_FRANCISCO) == MARK_STATE_VISITED)
|
|
||||||
#define sierra_army_base_visit (town_known(AREA_SIERRA_ARMY_BASE) == MARK_STATE_VISITED)
|
|
||||||
#define vault_13_visit (town_known(AREA_VAULT_13) == MARK_STATE_VISITED)
|
|
||||||
#define vault_15_visit (town_known(AREA_VAULT_15) == MARK_STATE_VISITED)
|
|
||||||
#define vault_city_visit (town_known(AREA_VAULT_CITY) == MARK_STATE_VISITED)
|
|
||||||
#define arroyo_destroyed_visit (town_known(AREA_ARROYO_DESTROYED) == MARK_STATE_VISITED)
|
|
||||||
#define vault_fake_13A_visit (town_known(AREA_FAKE_VAULT_13A) == MARK_STATE_VISITED)
|
|
||||||
#define vault_fake_13B_visit (town_known(AREA_FAKE_VAULT_13B) == MARK_STATE_VISITED)
|
|
||||||
|
|
||||||
#define mark_on_map(x) if (town_known(x) == MARK_STATE_UNKNOWN) then begin \
|
#define mark_on_map(x) if (town_known(x) == MARK_STATE_UNKNOWN) then begin \
|
||||||
debug_msg(" mark_on_map("+x+")"); \
|
debug_msg(" mark_on_map("+x+")"); \
|
||||||
mark_area_known(MARK_TYPE_TOWN, x, MARK_STATE_KNOWN); \
|
mark_area_known(MARK_TYPE_TOWN, x, MARK_STATE_KNOWN); \
|
||||||
@@ -448,63 +396,11 @@
|
|||||||
mark_area_known(MARK_TYPE_TOWN, x, MARK_STATE_UNKNOWN); \
|
mark_area_known(MARK_TYPE_TOWN, x, MARK_STATE_UNKNOWN); \
|
||||||
end
|
end
|
||||||
|
|
||||||
#define mark_abbey_on_map mark_on_map(AREA_ABBEY)
|
|
||||||
#define mark_arroyo_on_map mark_on_map(AREA_ARROYO)
|
|
||||||
#define mark_broken_hills_on_map mark_on_map(AREA_BROKEN_HILLS)
|
|
||||||
#define mark_colusa_on_map mark_on_map(AREA_NAVARRO)
|
|
||||||
#define mark_navarro_on_map mark_on_map(AREA_NAVARRO)
|
|
||||||
#define mark_den_on_map mark_on_map(AREA_DEN)
|
|
||||||
#define mark_enclave_on_map mark_on_map(AREA_THE_ENCLAVE)
|
|
||||||
#define mark_EPA_on_map mark_on_map(AREA_EPA)
|
|
||||||
#define mark_gecko_on_map mark_on_map(AREA_GECKO)
|
|
||||||
#define mark_klamath_on_map mark_on_map(AREA_KLAMATH)
|
|
||||||
#define mark_military_base_on_map mark_on_map(AREA_MILITARY_BASE)
|
|
||||||
#define mark_modoc_on_map mark_on_map(AREA_MODOC)
|
|
||||||
#define mark_new_CA_republic_on_map mark_on_map(AREA_NCR)
|
|
||||||
#define mark_primitive_tribe_on_map mark_on_map(AREA_PRIMITIVE_TRIBE)
|
|
||||||
#define mark_redding_on_map mark_on_map(AREA_REDDING)
|
|
||||||
#define mark_new_reno_on_map mark_on_map(AREA_NEW_RENO)
|
|
||||||
#define mark_san_francisco_on_map mark_on_map(AREA_SAN_FRANCISCO)
|
|
||||||
#define mark_sierra_army_base_on_map mark_on_map(AREA_SIERRA_ARMY_BASE)
|
|
||||||
#define mark_vault_13_on_map mark_on_map(AREA_VAULT_13)
|
|
||||||
#define mark_vault_15_on_map mark_on_map(AREA_VAULT_15)
|
|
||||||
#define mark_vault_city_on_map mark_on_map(AREA_VAULT_CITY)
|
|
||||||
#define mark_vault_fake_13A_on_map mark_on_map(AREA_FAKE_VAULT_13A)
|
|
||||||
#define mark_vault_fake_13B_on_map mark_on_map(AREA_FAKE_VAULT_13B)
|
|
||||||
|
|
||||||
#define unmark_vault_fake_13A_on_map unmark_on_map(AREA_FAKE_VAULT_13A)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*******************************************************************************************************************
|
/*******************************************************************************************************************
|
||||||
********** These represent the players acomplishments through the game *********************************************
|
********** These represent the players acomplishments through the game *********************************************
|
||||||
********** Note: these reflect the Fallout2 variable designers put in the scripts assuming we were *****************
|
********** Note: these reflect the Fallout2 variable designers put in the scripts assuming we were *****************
|
||||||
********** going to have a magic variable to keep track of the player stats throught the game **********************
|
********** going to have a magic variable to keep track of the player stats throught the game **********************
|
||||||
*******************************************************************************************************************/
|
*******************************************************************************************************************/
|
||||||
#define f2_state_v13_looking (0)
|
|
||||||
#define f2_state_v13_known (1) // set -Chris H
|
|
||||||
#define f2_state_v13_found (2) // set -Chris H
|
|
||||||
#define f2_state_v13_entered (3) // set -Chris H
|
|
||||||
#define f2_state_tribe_kidnapped (4) // ### state not set
|
|
||||||
#define f2_state_fix_tanker (5) // didn't need to exist
|
|
||||||
#define f2_state_tanker_fix_known (6) // set -Chris H
|
|
||||||
#define f2_state_tanker_fixed (7) // set -Chris H
|
|
||||||
#define f2_state_enclave_destroyed (8) // ### state not set
|
|
||||||
|
|
||||||
#define set_f2(x) if (global_var(GVAR_FALLOUT_2) < x) then set_global_var(GVAR_FALLOUT_2, x)
|
|
||||||
#define force_f2(x) set_global_var(GVAR_FALLOUT_2, x)
|
|
||||||
#define get_f2(x) (global_var(GVAR_FALLOUT_2) == x)
|
|
||||||
#define f2_flag_any (global_var(GVAR_FALLOUT_2))
|
|
||||||
|
|
||||||
#define Fallout2_vault13_looking get_f2(f2_state_v13_looking)
|
|
||||||
#define Fallout2_vault13_location_known get_f2(f2_state_v13_known)
|
|
||||||
#define Fallout2_vault13_found get_f2(f2_state_v13_found)
|
|
||||||
#define Fallout2_vault13_entered get_f2(f2_state_v13_entered)
|
|
||||||
#define Fallout2_tribe_kidnapped get_f2(f2_state_tribe_kidnapped)
|
|
||||||
#define Fallout2_fix_tanker get_f2(f2_state_fix_tanker)
|
|
||||||
#define Fallout2_tanker_known get_f2(f2_state_tanker_fix_known)
|
|
||||||
#define Fallout2_tanker_fixed get_f2(f2_state_tanker_fixed)
|
|
||||||
#define Fallout2_enclave_destroyed get_f2(f2_state_enclave_destroyed)
|
|
||||||
|
|
||||||
// Info relating to carry weight, how much something costs, and weights
|
// Info relating to carry weight, how much something costs, and weights
|
||||||
#define pid_weight(x) proto_data(x,it_weight)
|
#define pid_weight(x) proto_data(x,it_weight)
|
||||||
|
|||||||
@@ -2,6 +2,9 @@
|
|||||||
#ifndef DEFINE_EXTRA_H
|
#ifndef DEFINE_EXTRA_H
|
||||||
#define 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_HEAD (0)
|
||||||
#define BODY_HIT_LEFT_ARM (1)
|
#define BODY_HIT_LEFT_ARM (1)
|
||||||
#define BODY_HIT_RIGHT_ARM (2)
|
#define BODY_HIT_RIGHT_ARM (2)
|
||||||
@@ -102,10 +105,11 @@
|
|||||||
#define CFLG_NOKNOCKDOWN CFLG_NOKNOCKBACK // obsolete
|
#define CFLG_NOKNOCKDOWN CFLG_NOKNOCKBACK // obsolete
|
||||||
|
|
||||||
/* Window flags */
|
/* Window flags */
|
||||||
#define WIN_FLAG_MOVEONTOP (0x4)
|
#define WIN_FLAG_DONTMOVE (0x2) // does not move the window to the foreground when clicking on the window
|
||||||
#define WIN_FLAG_HIDDEN (0x8)
|
#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_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 */
|
/* Message window flags */
|
||||||
#define MSGBOX_AUTOSIZE (0x0)
|
#define MSGBOX_AUTOSIZE (0x0)
|
||||||
@@ -414,9 +418,11 @@
|
|||||||
#define C_ATTACK_SOURCE (0x00)
|
#define C_ATTACK_SOURCE (0x00)
|
||||||
#define C_ATTACK_HIT_MODE (0x04)
|
#define C_ATTACK_HIT_MODE (0x04)
|
||||||
#define C_ATTACK_WEAPON (0x08)
|
#define C_ATTACK_WEAPON (0x08)
|
||||||
|
#define C_ATTACK_UNUSED (0x0C)
|
||||||
#define C_ATTACK_DAMAGE_SOURCE (0x10) // Amount
|
#define C_ATTACK_DAMAGE_SOURCE (0x10) // Amount
|
||||||
#define C_ATTACK_FLAGS_SOURCE (0x14) // see DAM_* values in define.h
|
#define C_ATTACK_FLAGS_SOURCE (0x14) // see DAM_* values in define.h
|
||||||
#define C_ATTACK_ROUNDS (0x18)
|
#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_TARGET (0x20)
|
||||||
#define C_ATTACK_BODY_PART (0x28)
|
#define C_ATTACK_BODY_PART (0x28)
|
||||||
#define C_ATTACK_DAMAGE_TARGET (0x2C) // Amount
|
#define C_ATTACK_DAMAGE_TARGET (0x2C) // Amount
|
||||||
@@ -455,4 +461,19 @@
|
|||||||
#define C_ATTACK_KNOCKBACK_VALUE5 (0xB0)
|
#define C_ATTACK_KNOCKBACK_VALUE5 (0xB0)
|
||||||
#define C_ATTACK_KNOCKBACK_VALUE6 (0xB4)
|
#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
|
#endif // DEFINE_EXTRA_H
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user