mirror of
https://github.com/sfall-team/sfall.git
synced 2026-07-27 16:52:34 -07:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
061a3925e6 | ||
|
|
c6fa6bac30 | ||
|
|
0988004245 | ||
|
|
e59af7e88a | ||
|
|
7cf1b60b38 | ||
|
|
a8919367ea | ||
|
|
0a44f7118a | ||
|
|
cda56aca7d | ||
|
|
761124aaf4 | ||
|
|
8e6a961fba | ||
|
|
cca0fe0cb6 | ||
|
|
180761c489 | ||
|
|
540b68070b | ||
|
|
466b79f5e8 | ||
|
|
b1f847afbc | ||
|
|
31fbddb612 | ||
|
|
0c547da134 | ||
|
|
cc5561d3d6 | ||
|
|
66ff811bcd | ||
|
|
27963fd064 | ||
|
|
dc88193ff6 | ||
|
|
2c36ad9a2a | ||
|
|
9d34a4c70a | ||
|
|
548039d5bc | ||
|
|
49c4bb2479 | ||
|
|
75b275159f | ||
|
|
52f42af913 | ||
|
|
b195a8ab02 | ||
|
|
796e834a9d | ||
|
|
df4e847c59 | ||
|
|
0a48ed3048 | ||
|
|
7414c8a361 | ||
|
|
90a9ee5f15 | ||
|
|
314100f231 | ||
|
|
9c92e2f487 | ||
|
|
2d3a4d6c34 | ||
|
|
a936f35c80 | ||
|
|
3479bc6893 | ||
|
|
ff1aac40f5 | ||
|
|
6142d95a60 | ||
|
|
c4fc3d2c8b | ||
|
|
40cca2452d | ||
|
|
33a5c7428a | ||
|
|
55e935e18c | ||
|
|
398ad650b9 | ||
|
|
9c7f34ffb2 | ||
|
|
6a2a7ee82f | ||
|
|
849ae49bfb | ||
|
|
ed9c6c7508 | ||
|
|
57f4deb5cf | ||
|
|
c6da5169b8 | ||
|
|
72f3abe3c9 | ||
|
|
5d12d815dd | ||
|
|
502a5764a5 | ||
|
|
13976a5278 | ||
|
|
a35487d0aa | ||
|
|
f1102afbc3 | ||
|
|
4071a65f73 | ||
|
|
8d813a952e | ||
|
|
c1b7e729a8 | ||
|
|
12070f5e3d | ||
|
|
63b2025468 | ||
|
|
44ad268aed | ||
|
|
2305128adc | ||
|
|
112c931ea3 | ||
|
|
8e3ae04aec | ||
|
|
89ec203483 | ||
|
|
21cbcb4a03 | ||
|
|
76c9d63d3e | ||
|
|
962e7f0056 | ||
|
|
950b9949c0 | ||
|
|
648bffedc6 | ||
|
|
058cc0bb96 | ||
|
|
9e79b01a27 | ||
|
|
37e3ccb410 | ||
|
|
82db339ff9 | ||
|
|
74d3cb9707 | ||
|
|
e0f0ee0f7d | ||
|
|
107335749f | ||
|
|
c66add00e7 | ||
|
|
d4d8b3a06c | ||
|
|
fcd3bd05f0 | ||
|
|
ae6a6e80d3 | ||
|
|
c0557ddbc1 | ||
|
|
46dd02b566 | ||
|
|
4c3f255915 | ||
|
|
de01fdf065 | ||
|
|
1e6d2229dd | ||
|
|
317c4d4c05 | ||
|
|
31b244e5f3 | ||
|
|
066280a7ca | ||
|
|
535595a997 | ||
|
|
41b15b8838 | ||
|
|
2cd79c1033 | ||
|
|
cc9807344a | ||
|
|
6c31cc43a0 | ||
|
|
b345140fba |
@@ -1,10 +1,9 @@
|
||||
;This file handles modifications to perks and traits
|
||||
;When adding extra perks to a mod, it's advisable to use
|
||||
; the fake perk scripting functions rather than make modifications
|
||||
; in this file, as some perks have hardcoded effects which may
|
||||
; catch you out
|
||||
;Since traits need to be picked before any scripts run, they
|
||||
; have an additional NoHardcode option in this file which can
|
||||
|
||||
;When adding extra perks to a mod, it's advisable to use the fake perk scripting functions rather than make modifications
|
||||
; in this file, as some perks have hardcoded effects which may catch you out
|
||||
|
||||
;Since traits need to be picked before any scripts run, they have an additional NoHardcode option in this file which can
|
||||
; be used to remove their hardcoded effects, and add new stat/skill effects
|
||||
|
||||
[PerksTweak]
|
||||
@@ -31,31 +30,25 @@ WeaponHandlingBonus=3
|
||||
;Set to 1 to enable the modifications for perks
|
||||
Enable=0
|
||||
|
||||
;Name=The name of the perk (max 63 characters)
|
||||
;Desc=The description of the perk (max 255 characters)
|
||||
;Image=The line number (0-indexed) of the corresponding FRM in skilldex.lst
|
||||
;Ranks=The number of perk levels
|
||||
;Level=The minimum required level
|
||||
;Type=If 0, the perk checks only Skill1 for skill requirements; if 1, it checks
|
||||
; Skill1 or Skill2; if 2, it checks both Skill1 and Skill2
|
||||
;Stat=The modified stat or -1 if you don't want to change any stats
|
||||
;StatMag=The increased/decreased value to the modified stat
|
||||
;Skill1=The first skill (or -1 for none) to check, but if you set a specific bit
|
||||
; (67108864 or 0x4000000), it checks GVAR. For example, if Skill1=67108864, then
|
||||
; the perk will check GVAR_PLAYER_REPUTATION (67108864 + 0) on Skill1Mag value
|
||||
;Skill1Mag=Positive value is used as the minimum requirements of the first
|
||||
; skill/GVAR, and a negative value is interpreted as the maximum requirement.
|
||||
; For example, with Skill1=0 and Skill1Mag=100, if player has small guns skill
|
||||
; >= 100 and meets all other requirements, the perk will be available in the
|
||||
; selection window; with Skill1=1 and Skill1Mag=-120, the perk will not be
|
||||
; available if player has big guns skill >= 120
|
||||
;Skill2=The second skill/GVAR (or -1 for none) to check
|
||||
;Skill2Mag=Same as Skill1Mag, but for Skill2
|
||||
;STR-LCK=Positive values are used as minimum requirements of SPECIAL stats, and
|
||||
; negative values are interpreted as maximum requirements. For some special
|
||||
; perks processed by the engine (e.g. PERK_armor_powered and PERK_armor_combat),
|
||||
; the values are not used as requirements but to add to corresponding SPECIAL
|
||||
; stats
|
||||
;Name: The name of the perk (max 63 characters)
|
||||
;Desc: The description of the perk (max 255 characters)
|
||||
;Image: The line number (0-indexed) of the corresponding FRM in skilldex.lst
|
||||
;Ranks: The number of perk levels
|
||||
;Level: The minimum required level
|
||||
;Type: If 0, the perk checks only Skill1 for skill requirements; if 1, it checks Skill1 or Skill2; if 2, it checks both Skill1 and Skill2
|
||||
;Stat: The modified stat or -1 if you don't want to change any stats
|
||||
;StatMag: The increased/decreased value to the modified stat
|
||||
|
||||
;Skill1/Skill2: The first/second skill (or -1 for none) to check, but if you set a specific bit 0x4000000 (67108864), it checks GVAR.
|
||||
; For example, if Skill1=0x4000004, then the perk will check GVAR_BAD_MONSTER (0x4000000 + 4) on Skill1Mag value
|
||||
|
||||
;Skill1Mag/Skill2Mag: Positive value is used as the minimum requirements of the first/second skill/GVAR, and a negative value is interpreted as the maximum requirement.
|
||||
; For example, with Skill1=0 and Skill1Mag=100, if player has small guns skill >= 100 and meets all other requirements, the perk will be available in the
|
||||
; selection window; with Skill1=1 and Skill1Mag=-120, the perk will not be available if player has big guns skill >= 120
|
||||
|
||||
;STR-LCK: Positive values are used as minimum requirements of SPECIAL stats, and negative values are interpreted as maximum requirements.
|
||||
; For some special perks processed by the engine (e.g. PERK_armor_powered and PERK_armor_combat), the values are not used as requirements
|
||||
; but to add to corresponding SPECIAL stats
|
||||
|
||||
;If the value is set to -99999, the variable will be ignored (similar to comment out that line)
|
||||
|
||||
@@ -63,7 +56,7 @@ Enable=0
|
||||
;This is a modification to perk 119
|
||||
[119]
|
||||
Name=Example
|
||||
Desc=This is an example perk~Second line
|
||||
Desc=This is an example perk description
|
||||
Image=72
|
||||
Ranks=1
|
||||
Level=1
|
||||
|
||||
@@ -40,7 +40,7 @@ Image=24
|
||||
ButtonCount=3
|
||||
|
||||
;Set the appearance of the elevator
|
||||
MainFrm=148
|
||||
ButtonsFrm=151
|
||||
MainFrm=148 ; EL_VAULT.FRM
|
||||
ButtonsFrm=151 ; EL_MIL3.FRM
|
||||
|
||||
;Set up the exit points for all three buttons (see examples above)
|
||||
|
||||
+45
-27
@@ -1,5 +1,5 @@
|
||||
;sfall configuration settings
|
||||
;v3.8.25
|
||||
;v3.8.28.1
|
||||
|
||||
[Main]
|
||||
;Change to 1 if you want to use command line args to tell sfall to use another ini file.
|
||||
@@ -28,7 +28,7 @@ SpeedMulti9=900
|
||||
;The initial speed at game startup
|
||||
SpeedMultiInitial=100
|
||||
|
||||
;Set to 1 to also affect the playback speed of mve video files without an audio track
|
||||
;Set to 1 to also affect the playback speed of MVE video files without an audio track
|
||||
AffectPlayback=0
|
||||
|
||||
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
||||
@@ -53,8 +53,14 @@ WindowData=0
|
||||
|
||||
;Uncomment the option to use a hardware shader (requires DX9 graphics mode)
|
||||
;The shader file <name>.fx must be placed in <GameRoot>\<master_patches>\shaders\ and must contain one technique with one or more passes
|
||||
;You can specify multiple shader files, separated by commas
|
||||
;GlobalShaderFile=global.fx
|
||||
|
||||
;Set to 1 to automatically enable linear texture filtering when the scale factor is not an integer
|
||||
;Set to 2 to force-enable linear texture filtering
|
||||
;This can be used in conjunction with the GlobalShaderFile option
|
||||
TextureFilter=1
|
||||
|
||||
;Set to 1 to do the palette conversion on the GPU
|
||||
;Set to 2 to do the palette conversion on the CPU
|
||||
;Set to 0 to pick automatically
|
||||
@@ -68,7 +74,8 @@ GPUBlt=0
|
||||
;Requires DX9 graphics mode and v2.0 pixel shader support (see GPUBlt option)
|
||||
Use32BitHeadGraphics=0
|
||||
|
||||
;Set to 1 to automatically search for alternative avi video files when Fallout tries to play the game movies
|
||||
;Set to 1 to automatically search for alternative AVI video files when Fallout tries to play the game movies
|
||||
;Set to 2 to force AVI videos to fit the screen width
|
||||
;Requires DX9 graphics mode
|
||||
AllowDShowMovies=0
|
||||
|
||||
@@ -99,13 +106,13 @@ NumSoundBuffers=0
|
||||
;Set to 1 to allow attaching sound files to combat float messages
|
||||
AllowSoundForFloats=0
|
||||
|
||||
;Set to 1 to automatically search for alternative formats (mp3/wma/wav) when Fallout tries to play an acm
|
||||
;Set to 2 to play alternative music files even if original acm files are not present in the music folder
|
||||
;Set to 1 to automatically search for alternative formats (mp3/wma/wav) when Fallout tries to play an ACM
|
||||
;Set to 2 to play alternative music files even if original ACM files are not present in the music folder
|
||||
;This does not effect the play_sfall_sound and stop_sfall_sound script functions
|
||||
AllowDShowSound=0
|
||||
|
||||
;Set to 1 to override the music path used by default (i.e. data\sound\music\) if not present in the cfg
|
||||
;Set to 2 to overwrite all occurances of the music path
|
||||
;Set to 1 to override the default music path with data\sound\music\ if music_path is not present in the cfg
|
||||
;Set to 2 to overwrite all occurrences of the music path
|
||||
OverrideMusicDir=1
|
||||
|
||||
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
||||
@@ -183,6 +190,7 @@ HighlightCorpses=1
|
||||
;16 - bright yellow
|
||||
;32 - dark yellow
|
||||
;64 - purple
|
||||
;You can set a custom color from the game palette by multiplying the color index value by 256 (available since sfall 3.8.27)
|
||||
OutlineColor=16
|
||||
|
||||
;A key to press to reload your currently equipped weapon or use the active item
|
||||
@@ -267,7 +275,8 @@ DataLoadOrderPatch=1
|
||||
;FemaleDefaultModel=hfjmps
|
||||
|
||||
;To change the various ingame movies, modify the next 17 lines
|
||||
;Most of these can also be changed ingame via script.
|
||||
;You can also define additional movies by adding Movie18 - Movie32 lines
|
||||
;Most of these can also be changed ingame via script
|
||||
Movie1=iplogo.mve
|
||||
Movie2=intro.mve
|
||||
Movie3=elder.mve
|
||||
@@ -323,7 +332,7 @@ DialogueFix=1
|
||||
;Prevents you from using number keys to enter unvisited areas on a town map
|
||||
TownMapHotkeysFix=1
|
||||
|
||||
;Set to 1 to disable the horrigan encounter
|
||||
;Set to 1 to disable the Horrigan encounter
|
||||
DisableHorrigan=0
|
||||
|
||||
;Set to 1 to disable the random element in NPC levelling.
|
||||
@@ -352,9 +361,9 @@ SaveInCombatFix=1
|
||||
;Player's level is capped once the highest specified level is reached
|
||||
;XPTable=50,100,200
|
||||
|
||||
;Set to 1 to enable additional weapon animation codes from o-t
|
||||
;Set to 1 to enable additional weapon animation codes from o to t
|
||||
;The 4 byte value at 0x39 of weapon protos may range from 0 to 15 rather than 0 to 10
|
||||
;Since the letters 'n' and 'r' are in use for other animations, an animation code of 11 corrisponds to 's' and 15 to 't'
|
||||
;Since the letters 'n' and 'r' are in use for other animations, an animation code of 11 corresponds to 's' and 15 to 't'
|
||||
AdditionalWeaponAnims=1
|
||||
|
||||
;Uncomment these lines to modify the default modifiers for aimed shots at specific bodyparts
|
||||
@@ -387,7 +396,7 @@ AlwaysReloadMsgs=0
|
||||
PlayIdleAnimOnReload=0
|
||||
|
||||
;Changes the timer (in days) for deleting corpses on a map after you leave (valid range: 0..13)
|
||||
;The corpses of critters with 'Ages' flag or on maps with 'dead_bodies_age=No' set in maps.txt will not disappear
|
||||
;The corpses of critters with 'Ages' flag set or on maps with 'dead_bodies_age=No' set in maps.txt will not disappear
|
||||
;Default is 6. Set to 0 for a 12-hour timer
|
||||
CorpseDeleteTime=6
|
||||
|
||||
@@ -515,10 +524,11 @@ RemoveCriticalTimelimits=0
|
||||
;Change the colour of the font used on the main menu for the button text
|
||||
;MainMenuBigFontColour=0x3C
|
||||
|
||||
;Two alternate fixes to the interaction between HtH attacks and the fast shot trait
|
||||
;0 - Fallout 2 original behaviour
|
||||
;1 - Haenlomal's fix, called shots are enabled for HtH attacks
|
||||
;2 - Restoring the -1 AP bonus for HtH attacks (i.e. Fallout 1 behaviour)
|
||||
;Alternative behaviors to the Fast Shot trait
|
||||
;0 - Fallout 2 original behavior: -1 AP cost for ranged weapons; aimed attacks are disabled
|
||||
;1 - Haenlomal's fix: aimed attacks are enabled for melee/unarmed weapons and HtH attacks
|
||||
;2 - Alternative behavior: apply -1 AP cost to melee/unarmed weapons and HtH attacks
|
||||
;3 - Fallout 1 original behavior: -1 AP cost for all weapons; aimed attacks are disabled
|
||||
FastShotFix=1
|
||||
|
||||
;Set to 1 to boost the maximum number of script names from 1450 to 10000
|
||||
@@ -538,8 +548,10 @@ CritterInvSizeLimit=100
|
||||
;4 - Motion sensor is required to use the item highlight feature
|
||||
MotionScannerFlags=1
|
||||
|
||||
;Set to non-0 to adjust the maximum encounter table size
|
||||
;Default is 40, and the maximum is 127
|
||||
;Set a value greater than 40 to change the maximum encounter table size (enc_## in worldmap.txt)
|
||||
;Default is 40, and the maximum is 100
|
||||
;Note: Setting this greater than 50 requires renumbering all message lines for the encounter tables in worldmap.msg
|
||||
;The messages for each table must be numbered from (3000 + table number * 100) to (3099 + table number * 100)
|
||||
EncounterTableSize=0
|
||||
|
||||
;Set to 1 to disable the pipboy alarm button
|
||||
@@ -558,8 +570,8 @@ SuperStimExploitFix=0
|
||||
InventoryApCost=4
|
||||
QuickPocketsApCostReduction=2
|
||||
|
||||
;Set to 1 to allow objects seeing through other objects that have their ShootThru flag set
|
||||
;Note that enabling this option can cause unexpected NPC behavior in some situations
|
||||
;Set to 1 to fix obj_can_see_obj script function to allow critters to see through objects with 'ShootThru' flag set and other critters in front of them
|
||||
;Note that enabling this option can cause unexpected NPC behavior in some cases, e.g. initiating combat or dialogue when the player is behind certain obstacles
|
||||
ObjCanSeeObj_ShootThru_Fix=0
|
||||
|
||||
;Set to 1 to fix the broken obj_can_hear_obj script function
|
||||
@@ -569,11 +581,10 @@ ObjCanHearObjFix=0
|
||||
;If the argument value is -1, the mood will be determined by the local variable 0 of the script (vanilla behavior)
|
||||
StartGDialogFix=0
|
||||
|
||||
;Set to 1 to fix and repurpose the unused called_shot/num_attacks arguments of attack_complex script function
|
||||
;This also changes the behavior of the result flags arguments
|
||||
;called_shot - additional damage, when the damage received by the target is above the specified minimum damage
|
||||
;Set to 1 to fix attacker_results/target_results arguments and repurpose the unused called_shot/num_attacks arguments of attack_complex script function
|
||||
;New behavior of the arguments:
|
||||
;called_shot - additional damage when hitting the target
|
||||
;num_attacks - the number of free action points on the first turn only
|
||||
;attacker_results - unused, must be 0 or not equal to the target_results argument when specifying result flags for the target
|
||||
AttackComplexFix=0
|
||||
|
||||
;Set to 1 to fix the issue with the division operator treating negative integers as unsigned
|
||||
@@ -676,6 +687,9 @@ CarPlacedTileFix=1
|
||||
InstantWeaponEquip=0
|
||||
|
||||
;To add additional game msg files, uncomment the next line and set a comma delimited list of filenames without .msg extension
|
||||
;By default, the files will have consecutive numbers assigned beginning with 0
|
||||
;You can use the syntax 'filename:number' to manually assign numbers to specific msg files, with each pair separated by a comma
|
||||
;If a file after the specified pair does not have a number assigned, it will have the next consecutive number from the last pair
|
||||
;You need to use the message_str_game script function to get messages from the files
|
||||
;ExtraGameMsgFileList=
|
||||
|
||||
@@ -685,6 +699,10 @@ NumbersInDialogue=0
|
||||
;Set to 1 to use Fallout's normal text font instead of DOS-like font on the world map
|
||||
WorldMapFontPatch=0
|
||||
|
||||
;Set to 1 to use Fallout's normal text font for death screen subtitles
|
||||
;Requires changing the color of subtitles in death.pal palette to white color (index 220) to display the text correctly
|
||||
DeathScreenFontPatch=0
|
||||
|
||||
;Set to 1 to display full item description for weapon/ammo in the barter screen
|
||||
FullItemDescInBarter=0
|
||||
|
||||
@@ -698,9 +716,6 @@ PartyMemberExtraInfo=0
|
||||
;Set to 2 to also skip loading the game/combat difficulty settings
|
||||
SkipLoadingGameSettings=0
|
||||
|
||||
;Set to 1 to prevent the inventory/loot/automap interfaces from being placed on top of other script-created windows
|
||||
InterfaceDontMoveOnTop=0
|
||||
|
||||
;Overrides the global variable number used to show the special death message of the Modoc toilet explosion
|
||||
;Set to -1 to disable the special death message when the global variable is set
|
||||
SpecialDeathGVAR=491
|
||||
@@ -790,6 +805,9 @@ HideObjIsNullMsg=0
|
||||
;Has pretty nasty side effects when saving/reloading, so don't use for regular gameplay
|
||||
DontDeleteProtos=0
|
||||
|
||||
;Set to 1 to force sfall to search for global scripts every time the game loads rather than only the first time
|
||||
AlwaysFindScripts=0
|
||||
|
||||
;Set to 1 to force critters to display combat float messages
|
||||
;Requires AllowSoundForFloats to be enabled
|
||||
Test_ForceFloats=0
|
||||
|
||||
Binary file not shown.
@@ -12,52 +12,58 @@ Requires sfall 3.5 or higher
|
||||
|
||||
*/
|
||||
|
||||
#include "..\headers\define_extra.h"
|
||||
#include "..\headers\sfall\sfall.h"
|
||||
#include "..\headers\sfall\define_extra.h"
|
||||
|
||||
procedure set_ammo_mod;
|
||||
procedure start;
|
||||
procedure map_enter_p_proc;
|
||||
|
||||
variable ammoIni;
|
||||
variable ammoData;
|
||||
variable enabled;
|
||||
|
||||
procedure set_ammo_mod begin
|
||||
variable pid, dmg_mod, i := 1;
|
||||
|
||||
while (i > 0) do begin
|
||||
pid := get_ini_setting(ammoIni + "|" + i + "|pid");
|
||||
if (pid < 1) then break;
|
||||
set_proto_data(pid, PROTO_AM_AC_MOD, get_ini_setting(ammoIni + "|" + i + "|ac_adjust"));
|
||||
set_proto_data(pid, PROTO_AM_DR_MOD, get_ini_setting(ammoIni + "|" + i + "|dr_adjust"));
|
||||
|
||||
// dam_mult and dam_div must be positive integers
|
||||
dmg_mod := get_ini_setting(ammoIni + "|" + i + "|dam_mult");
|
||||
if (dmg_mod < 1) then dmg_mod := 1;
|
||||
set_proto_data(pid, PROTO_AM_DMG_MULT, dmg_mod);
|
||||
dmg_mod := get_ini_setting(ammoIni + "|" + i + "|dam_div");
|
||||
if (dmg_mod < 1) then dmg_mod := 1;
|
||||
set_proto_data(pid, PROTO_AM_DMG_DIV, dmg_mod);
|
||||
|
||||
i++;
|
||||
end
|
||||
//debug_msg("AmmoMod: " + ammoIni + " - set " + (i - 1) + " ammo protos.");
|
||||
end
|
||||
|
||||
procedure start begin
|
||||
variable i := 1, ammo, ammoPid, dmgMod;
|
||||
if game_loaded then begin
|
||||
ammoIni := get_ini_setting("ddraw.ini|Misc|DamageFormula");
|
||||
if (ammoIni == 1 or ammoIni == 2) then
|
||||
enabled := get_ini_setting("ddraw.ini|Misc|DamageFormula");
|
||||
if (enabled == 1 or enabled == 2) then
|
||||
ammoIni := "AmmoGlovz.ini";
|
||||
else if (ammoIni == 5) then
|
||||
else if (enabled == 5) then
|
||||
ammoIni := "AmmoYAAM.ini";
|
||||
else
|
||||
ammoIni := "AmmoMod.ini";
|
||||
|
||||
enabled := get_ini_setting(ammoIni + "|1|pid");
|
||||
if (enabled > 0) then call set_ammo_mod;
|
||||
if (enabled <= 0) then return;
|
||||
|
||||
ammoData := create_array_map;
|
||||
ammoPid := enabled; // pid from the first section
|
||||
while (ammoPid > 0) do begin
|
||||
ammo := create_array_map; // create permanent arrays
|
||||
ammo.ac_adjust := get_ini_setting(ammoIni + "|" + i + "|ac_adjust");
|
||||
ammo.dr_adjust := get_ini_setting(ammoIni + "|" + i + "|dr_adjust");
|
||||
// dam_mult and dam_div must be positive integers
|
||||
dmgMod := get_ini_setting(ammoIni + "|" + i + "|dam_mult");
|
||||
ammo.dam_mult := dmgMod if (dmgMod > 0) else 1;
|
||||
dmgMod := get_ini_setting(ammoIni + "|" + i + "|dam_div");
|
||||
ammo.dam_div := dmgMod if (dmgMod > 0) else 1;
|
||||
ammoData[ammoPid] := ammo;
|
||||
i++;
|
||||
ammoPid := get_ini_setting(ammoIni + "|" + i + "|pid");
|
||||
end
|
||||
call map_enter_p_proc;
|
||||
debug_msg("Ammo INI Loader mod: " + ammoIni + " - set " + (i - 1) + " ammo protos.");
|
||||
end
|
||||
end
|
||||
|
||||
procedure map_enter_p_proc begin
|
||||
if (enabled > 0) then call set_ammo_mod;
|
||||
variable pid, values;
|
||||
if (enabled > 0) then begin
|
||||
foreach (pid: values in ammoData) begin
|
||||
set_proto_data(pid, PROTO_AM_AC_MOD, values.ac_adjust);
|
||||
set_proto_data(pid, PROTO_AM_DR_MOD, values.dr_adjust);
|
||||
set_proto_data(pid, PROTO_AM_DMG_MULT, values.dam_mult);
|
||||
set_proto_data(pid, PROTO_AM_DMG_DIV, values.dam_div);
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Binary file not shown.
@@ -1,14 +1,13 @@
|
||||
/*
|
||||
|
||||
Auto Doors mod v1.1 for Fallout 2 by Mr.Stalin
|
||||
Auto Doors mod v1.2 for Fallout 2 by Mr.Stalin
|
||||
----------------------------------------------
|
||||
|
||||
- allows the player to automatically open/walk through unlocked doors when not in combat
|
||||
|
||||
Requires sfall 3.7b or higher
|
||||
|
||||
NOTE: this script requires compiler from sfall modderspack with -s option
|
||||
(short circuit evaluation)
|
||||
NOTE: this script requires compiler from sfall modderspack with -s option (short circuit evaluation)
|
||||
|
||||
*/
|
||||
|
||||
@@ -30,8 +29,8 @@ procedure combatturn_handler;
|
||||
#define PORTAL (0)
|
||||
#define DOOR_FLAGS (0x24)
|
||||
|
||||
variable only_once := 0;
|
||||
variable arrayPid;
|
||||
variable onlyOnce := 0;
|
||||
variable pidDoors;
|
||||
|
||||
procedure start begin
|
||||
if game_loaded then begin
|
||||
@@ -41,11 +40,11 @@ procedure start begin
|
||||
set_global_script_repeat(40); // for sfall 3.x
|
||||
call map_enter_p_proc;
|
||||
end else begin
|
||||
if (only_once == 1 and combat_is_initialized) then begin
|
||||
only_once := 2;
|
||||
if (onlyOnce == 1 and combat_is_initialized) then begin
|
||||
onlyOnce := 2;
|
||||
call set_door_flag(0); // reset flag when entering combat mode
|
||||
end else if (only_once == 2 and not(combat_is_initialized)) then begin
|
||||
only_once := 1;
|
||||
end else if (onlyOnce == 2 and not(combat_is_initialized)) then begin
|
||||
onlyOnce := 1;
|
||||
if (sfall_ver_major >= 4) then set_global_script_repeat(0);
|
||||
call set_door_flag(FLAG_WALKTHRU); // set flag after combat mode ends
|
||||
end
|
||||
@@ -53,34 +52,35 @@ procedure start begin
|
||||
end
|
||||
|
||||
procedure map_enter_p_proc begin
|
||||
if (arrayPid) then begin
|
||||
// when changing maps, delete the current array to create a new one
|
||||
free_array(arrayPid);
|
||||
arrayPid := 0;
|
||||
if (pidDoors) then begin
|
||||
// when changing the map, delete the current array to create a new one
|
||||
free_array(pidDoors);
|
||||
pidDoors := 0;
|
||||
end
|
||||
only_once := 1;
|
||||
onlyOnce := 1;
|
||||
call set_door_flag(FLAG_WALKTHRU); // set flag when entering the map
|
||||
end
|
||||
|
||||
procedure set_door_flag(variable state) begin
|
||||
variable objectMap, obj, objPid, i;
|
||||
|
||||
if (arrayPid) then begin
|
||||
if (pidDoors) then begin
|
||||
call set_door_flag_array(state);
|
||||
return;
|
||||
end
|
||||
|
||||
objectMap := list_as_array(LIST_SCENERY);
|
||||
arrayPid := create_array(0, 0);
|
||||
pidDoors := create_array(0, 0);
|
||||
|
||||
foreach (obj in objectMap) begin
|
||||
objPid := obj_pid(obj);
|
||||
|
||||
if (proto_data(objPid, sc_type) != PORTAL) or is_in_array(objPid, arrayPid) then
|
||||
if (proto_data(objPid, sc_type) != PORTAL or get_proto_data(objPid, DOOR_FLAGS) or is_in_array(objPid, pidDoors)) then begin
|
||||
continue; // next object
|
||||
end
|
||||
|
||||
resize_array(arrayPid, i + 1);
|
||||
arrayPid[i] := objPid;
|
||||
resize_array(pidDoors, i + 1);
|
||||
pidDoors[i] := objPid; // add pid to array
|
||||
i++;
|
||||
set_proto_data(objPid, DOOR_FLAGS, state);
|
||||
end
|
||||
@@ -88,14 +88,14 @@ end
|
||||
|
||||
procedure set_door_flag_array(variable state) begin
|
||||
variable objPid;
|
||||
foreach (objPid in arrayPid) begin
|
||||
foreach (objPid in pidDoors) begin
|
||||
set_proto_data(objPid, DOOR_FLAGS, state);
|
||||
end
|
||||
end
|
||||
|
||||
procedure combatturn_handler begin
|
||||
if (only_once == 1) then begin
|
||||
only_once := 2;
|
||||
if (onlyOnce == 1) then begin
|
||||
onlyOnce := 2;
|
||||
call set_door_flag_array(0);
|
||||
set_global_script_repeat(60);
|
||||
end
|
||||
|
||||
Binary file not shown.
@@ -1,51 +1,60 @@
|
||||
procedure start;
|
||||
procedure GetBoozes;
|
||||
procedure update_shader;
|
||||
|
||||
variable perception;
|
||||
variable boozes;
|
||||
variable shader1;
|
||||
variable shader2;
|
||||
variable shader3;
|
||||
variable shader4;
|
||||
variable drunk_level;
|
||||
variable next_reduction;
|
||||
variable begin
|
||||
perception;
|
||||
boozes;
|
||||
shader1;
|
||||
shader2;
|
||||
shader3;
|
||||
shader4;
|
||||
drunk_level;
|
||||
next_reduction;
|
||||
booze_pids;
|
||||
end
|
||||
|
||||
procedure start begin
|
||||
variable new_pe;
|
||||
variable new_booze;
|
||||
variable drunk_count;
|
||||
if (metarule(22,0)) then return;
|
||||
variable new_pe, new_booze, drunk_count;
|
||||
|
||||
if (metarule(22, 0)) then return; //is_loading_game
|
||||
if (game_loaded) then begin
|
||||
if (not graphics_funcs_available) then begin
|
||||
display_msg("ERROR: You must set sfall to use graphics mode 4 or 5 to use this mod");
|
||||
return;
|
||||
end else begin
|
||||
// pid list of the items for the mod to apply the effect
|
||||
booze_pids := [/*124,*/ 125];
|
||||
|
||||
fix_array(booze_pids);
|
||||
//new_pe := create_object_sid(125, 0, 0, -1);
|
||||
//add_mult_objs_to_inven(dude_obj, new_pe, 10);
|
||||
perception := get_pc_extra_stat(1);
|
||||
boozes:=obj_is_carrying_obj_pid(dude_obj, 125);
|
||||
set_global_script_repeat(25);
|
||||
set_global_script_repeat(-1);
|
||||
boozes := GetBoozes;
|
||||
|
||||
set_global_script_repeat(50);
|
||||
set_global_script_type(1);
|
||||
|
||||
shader1 := load_shader("booze1.fx");
|
||||
shader2 := load_shader("booze2.fx");
|
||||
shader3 := load_shader("booze3.fx");
|
||||
shader4 := load_shader("booze4.fx");
|
||||
drunk_level:=0;
|
||||
next_reduction:=0;
|
||||
//display_msg("Init: " + perception + ", " + boozes);
|
||||
end
|
||||
end else begin
|
||||
new_pe := get_pc_extra_stat(1);
|
||||
new_booze:=obj_is_carrying_obj_pid(dude_obj, 125);
|
||||
if( (perception != new_pe) or (boozes != new_booze) ) then begin
|
||||
new_booze := GetBoozes;
|
||||
if ((perception != new_pe) orElse (boozes != new_booze)) then begin
|
||||
//display_msg("var change: " + perception + ", " + boozes + " -> " + new_pe + ", " + new_booze);
|
||||
if ( (perception > new_pe) and (boozes > new_booze) ) then begin
|
||||
if ( (perception - new_pe) < (boozes - new_booze) ) then begin
|
||||
drunk_count:=perception - new_pe;
|
||||
if ((perception > new_pe) andAlso (boozes > new_booze)) then begin
|
||||
variable pe_diff := perception - new_pe;
|
||||
variable booze_diff := boozes - new_booze;
|
||||
if (pe_diff < booze_diff) then begin
|
||||
drunk_count := pe_diff;
|
||||
end else begin
|
||||
drunk_count:=boozes - new_booze;
|
||||
drunk_count := booze_diff;
|
||||
end
|
||||
drunk_level:=drunk_level + (drunk_count*10);
|
||||
drunk_level += (drunk_count * 10);
|
||||
//display_msg("Increasing booze count: " + drunk_level);
|
||||
call update_shader;
|
||||
next_reduction := game_time + game_ticks(6);
|
||||
@@ -53,16 +62,26 @@ procedure start begin
|
||||
perception := new_pe;
|
||||
boozes := new_booze;
|
||||
end
|
||||
if( (next_reduction != 0 ) and (game_time >= next_reduction) ) then begin
|
||||
drunk_level:=drunk_level - 1;
|
||||
if(drunk_level == 0) then next_reduction:=0;
|
||||
else next_reduction:=next_reduction + game_ticks(6);
|
||||
if ((next_reduction != 0) andAlso (game_time >= next_reduction)) then begin
|
||||
drunk_level -= 1;
|
||||
if (drunk_level == 0) then
|
||||
next_reduction := 0;
|
||||
else
|
||||
next_reduction += game_ticks(6);
|
||||
call update_shader;
|
||||
//display_msg("Decreasing booze count: " + drunk_level);
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
procedure GetBoozes begin
|
||||
variable pid, count_booze := 0;
|
||||
foreach (pid in booze_pids) begin
|
||||
count_booze += obj_is_carrying_obj_pid(dude_obj, pid);
|
||||
end
|
||||
return count_booze;
|
||||
end
|
||||
|
||||
procedure update_shader begin
|
||||
if (drunk_level >= 100) then begin
|
||||
deactivate_shader(shader1);
|
||||
|
||||
@@ -0,0 +1,128 @@
|
||||
/*************************************************************
|
||||
LumaSharpen version 1.5.0 for Reshade 3.x
|
||||
by Christian Cann Schuldt Jensen ~ CeeJay.dk
|
||||
|
||||
It blurs the original pixel with the surrounding pixels and then subtracts this blur to sharpen the image.
|
||||
It does this in luma to avoid color artifacts and allows limiting the maximum sharpning to avoid or lessen halo artifacts.
|
||||
This is similar to using Unsharp Mask in Photoshop.
|
||||
|
||||
Adapted to sfall by Mr.Stalin
|
||||
*************************************************************/
|
||||
|
||||
// Strength of the sharpening
|
||||
// min 0.1, max 3.0
|
||||
#define sharp_strength 0.75
|
||||
|
||||
// Limits maximum amount of sharpening a pixel receives. This helps avoid "haloing" artifacts which would otherwise occur when you raised the strength too much
|
||||
// min 0.0, max 1.0, step 0.005
|
||||
#define sharp_clamp 0.035
|
||||
|
||||
// Offset bias adjusts the radius of the sampling pattern. I designed the pattern for an offset bias of 1.0, but feel free to experiment
|
||||
// min 0.0, max 6.0
|
||||
#define offset_bias 1.0
|
||||
|
||||
//------------------------------------------------------//
|
||||
// Developer settings //
|
||||
//------------------------------------------------------//
|
||||
|
||||
#define CoefLuma float3(0.2126, 0.7152, 0.0722) // BT.709 & sRBG luma coefficient (Monitors and HD Television)
|
||||
//#define CoefLuma float3(0.299, 0.587, 0.114) // BT.601 luma coefficient (SD Television)
|
||||
//#define CoefLuma float3(1.0/3.0, 1.0/3.0, 1.0/3.0) // Equal weight coefficient
|
||||
|
||||
sampler s0;
|
||||
|
||||
float2 rcpres; // pixel size
|
||||
|
||||
float4 LumaSharpenPS(float4 color : COLOR0, float2 tex : TEXCOORD) : COLOR0
|
||||
{
|
||||
// Get the original pixel
|
||||
float3 ori = tex2D(s0, tex).rgb; // ori = original pixel
|
||||
|
||||
// Combining the strength and luma multipliers
|
||||
float3 sharp_strength_luma = (CoefLuma * sharp_strength); // I'll be combining even more multipliers with it later on
|
||||
|
||||
//------------------------------------------------------//
|
||||
// Sampling patterns //
|
||||
//------------------------------------------------------//
|
||||
float3 blur_ori;
|
||||
|
||||
// [ NW, , NE ] Each texture lookup (except ori)
|
||||
// [ ,ori, ] samples 4 pixels
|
||||
// [ SW, , SE ]
|
||||
|
||||
// -- Pattern 2 -- A 9 tap gaussian using 4+1 texture fetches.
|
||||
//
|
||||
// -- Gaussian filter --
|
||||
// [ .25, .50, .25] [ 1 , 2 , 1 ]
|
||||
// [ .50, 1, .50] = [ 2 , 4 , 2 ]
|
||||
// [ .25, .50, .25] [ 1 , 2 , 1 ]
|
||||
|
||||
blur_ori = tex2D(s0, tex + float2(rcpres.x, -rcpres.y) * 0.5 * offset_bias).rgb; // South East
|
||||
blur_ori += tex2D(s0, tex - rcpres * 0.5 * offset_bias).rgb; // South West
|
||||
blur_ori += tex2D(s0, tex + rcpres * 0.5 * offset_bias).rgb; // North East
|
||||
blur_ori += tex2D(s0, tex - float2(rcpres.x, -rcpres.y) * 0.5 * offset_bias).rgb; // North West
|
||||
blur_ori *= 0.25; // Divide by 4 the number of texture fetches
|
||||
|
||||
// -- Pattern 3 -- An experimental 17 tap gaussian using 4+1 texture fetches.
|
||||
// Wider is less sensitive to noise but also to fine details.
|
||||
// -- Gaussian filter --
|
||||
// [ , 4 , 6 , , ]
|
||||
// [ ,16 ,24 ,16 , 4 ]
|
||||
// [ 6 ,24 , ,24 , 6 ]
|
||||
// [ 4 ,16 ,24 ,16 , ]
|
||||
// [ , , 6 , 4 , ]
|
||||
|
||||
//blur_ori = tex2D(s0, tex + rcpres * float2(0.4, -1.2) * offset_bias).rgb; // South South East
|
||||
//blur_ori += tex2D(s0, tex - rcpres * float2(1.2, 0.4) * offset_bias).rgb; // West South West
|
||||
//blur_ori += tex2D(s0, tex + rcpres * float2(1.2, 0.4) * offset_bias).rgb; // East North East
|
||||
//blur_ori += tex2D(s0, tex - rcpres * float2(0.4, -1.2) * offset_bias).rgb; // North North West
|
||||
//blur_ori *= 0.25; // Divide by the number of texture fetches
|
||||
//sharp_strength_luma *= 0.51;
|
||||
|
||||
// -- Pattern 4 -- A 9 tap high pass (pyramid filter) using 4+1 texture fetches.
|
||||
// Pyramid has a slightly more aggresive look
|
||||
// -- Gaussian filter --
|
||||
// [ .50, .50, .50] [ 1 , 1 , 1 ]
|
||||
// [ .50, , .50] = [ 1 , , 1 ]
|
||||
// [ .50, .50, .50] [ 1 , 1 , 1 ]
|
||||
|
||||
//blur_ori = tex2D(s0, tex + float2(0.5 * rcpres.x, -rcpres.y * offset_bias)).rgb; // South South East
|
||||
//blur_ori += tex2D(s0, tex + float2(offset_bias * -rcpres.x, 0.5 * -rcpres.y)).rgb; // West South West
|
||||
//blur_ori += tex2D(s0, tex + float2(offset_bias * rcpres.x, 0.5 * rcpres.y)).rgb; // East North East
|
||||
//blur_ori += tex2D(s0, tex + float2(0.5 * -rcpres.x, rcpres.y * offset_bias)).rgb; // North North West
|
||||
////blur_ori += (2 * ori); // Probably not needed. Only serves to lessen the effect.
|
||||
//blur_ori /= 4.0; // Divide by the number of texture fetches
|
||||
//sharp_strength_luma *= 0.666; // Adjust strength to aproximate the strength of pattern 2
|
||||
|
||||
//------------------------------------------------------//
|
||||
// Sharpen //
|
||||
//------------------------------------------------------//
|
||||
|
||||
// Calculate the sharpening --
|
||||
float3 sharp = ori - blur_ori; // Subtracting the blurred image from the original image
|
||||
|
||||
// Adjust strength of the sharpening and clamp it
|
||||
float4 sharp_strength_luma_clamp = float4(sharp_strength_luma * (0.5 / sharp_clamp), 0.5); // Roll part of the clamp into the dot
|
||||
|
||||
//sharp_luma = saturate((0.5 / sharp_clamp) * sharp_luma + 0.5); // scale up and clamp
|
||||
float sharp_luma = saturate(dot(float4(sharp, 1.0), sharp_strength_luma_clamp)); // Calculate the luma, adjust the strength, scale up and clamp
|
||||
sharp_luma = (sharp_clamp * 2.0) * sharp_luma - sharp_clamp; // scale down
|
||||
|
||||
// Combining the values to get the final sharpened pixel
|
||||
float3 outputcolor = ori + sharp_luma; // Add the sharpening to the the original.
|
||||
|
||||
//------------------------------------------------------//
|
||||
// Returning the output //
|
||||
//------------------------------------------------------//
|
||||
|
||||
// Show sharpening pattern
|
||||
// Visualize the strength of the sharpen\nThis is useful for seeing what areas the sharpning affects the most
|
||||
//outputcolor = saturate(0.5 + (sharp_luma * 4.0)).rrr; //outputcolor = abs(sharp * 4.0);
|
||||
|
||||
return float4(saturate(outputcolor), 1);
|
||||
}
|
||||
|
||||
technique LumaSharpen
|
||||
{
|
||||
pass P0 { PixelShader = compile ps_2_0 LumaSharpenPS(); }
|
||||
}
|
||||
@@ -1,4 +1,23 @@
|
||||
// Status: WIP
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Blur filter setting
|
||||
//
|
||||
// min: blurFalloff 8, sharpness 10/8
|
||||
// mid: blurFalloff 6, sharpness 8
|
||||
// max: blurFalloff 4, sharpness 6
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
#define blurFalloff 4.0
|
||||
#define sharpness 6.0
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Sharpen filter setting
|
||||
//
|
||||
// min: Sharpen 0.5, EdgeSharpen 1.0
|
||||
// mid: Sharpen 1.0, EdgeSharpen -0.25
|
||||
// max: Sharpen 1.75, EdgeSharpen -0.5 (1.5, -0.25)
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
#define Sharpen 0.5
|
||||
#define EdgeSharpen 1.0
|
||||
|
||||
|
||||
texture bloomMap;
|
||||
sampler s0;
|
||||
@@ -12,6 +31,93 @@ sampler BloomSampler : samplerstate
|
||||
AddressV = Clamp;
|
||||
};
|
||||
|
||||
// Variables that set the width and height of the current game resolution from sfall (only for global shaders)
|
||||
int w;
|
||||
int h;
|
||||
|
||||
// the pixel size is computed as: 1.0f / resolution
|
||||
float2 rcpres;
|
||||
|
||||
// system ticks (received from sfall)
|
||||
//int tickcount;
|
||||
|
||||
static const float2 wPass = float2(1, 0);
|
||||
static const float2 hPass = float2(0, 1);
|
||||
|
||||
float Brightness(float3 color)
|
||||
{
|
||||
return 0.299 * color.r + 0.587 * color.g + 0.114 * color.b;
|
||||
}
|
||||
|
||||
float3 BlurFunction(float2 uv, float brightness, inout float totalWeight)
|
||||
{
|
||||
float3 pointColor = (tex2Dlod(s0, float4(uv, 0, 0)).rgb);
|
||||
|
||||
float diff = abs(brightness - Brightness(pointColor));
|
||||
float weight = exp2((-0.25 * blurFalloff) - (diff * sharpness));
|
||||
totalWeight += weight;
|
||||
|
||||
return pointColor * weight;
|
||||
}
|
||||
|
||||
float4 BlurDeltaPassPS(float2 uv : TEXCOORD0, uniform float2 delta) : COLOR0
|
||||
{
|
||||
float3 sumColor = (tex2D(s0, uv).rgb);
|
||||
float brightness = Brightness(sumColor);
|
||||
|
||||
delta *= rcpres;
|
||||
float totalWeight = 1;
|
||||
|
||||
float2 pointUV = uv + delta;
|
||||
sumColor += BlurFunction(pointUV, brightness, totalWeight);
|
||||
|
||||
pointUV = uv - delta;
|
||||
sumColor += BlurFunction(pointUV, brightness, totalWeight);
|
||||
|
||||
return float4((sumColor / totalWeight), 1);
|
||||
}
|
||||
|
||||
static const float2 wDelta = float2(1, 0) * rcpres;
|
||||
static const float2 hDelta = float2(0, 1) * rcpres;
|
||||
|
||||
float4 BlurPS(float4 color : COLOR0, float2 uv : TEXCOORD0) : COLOR0
|
||||
{
|
||||
float totalWeight = 1;
|
||||
|
||||
float3 sumColor = (tex2D(s0, uv).rgb);
|
||||
float brightness = Brightness(sumColor);
|
||||
|
||||
float2 pointUV = uv + wDelta;
|
||||
sumColor += BlurFunction(pointUV, brightness, totalWeight);
|
||||
|
||||
pointUV = uv - wDelta;
|
||||
sumColor += BlurFunction(pointUV, brightness, totalWeight);
|
||||
|
||||
pointUV = uv + hDelta;
|
||||
sumColor += BlurFunction(pointUV, brightness, totalWeight);
|
||||
|
||||
pointUV = uv - hDelta;
|
||||
sumColor += BlurFunction(pointUV, brightness, totalWeight);
|
||||
|
||||
return float4((sumColor / totalWeight), 1);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Bloom effect setting
|
||||
//
|
||||
// min: BloomIntensity .8
|
||||
// mid: BloomIntensity .85
|
||||
// max: BloomIntensity .9
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
#define BaseIntensity 1.2
|
||||
#define BaseSaturation 1.0
|
||||
|
||||
#define BloomIntensity 0.8
|
||||
#define BloomSaturation 0.35
|
||||
|
||||
#define BloomThreshold 0.35
|
||||
#define BlurPower 0.002
|
||||
|
||||
// pseudo gauss blur
|
||||
static const float2 offsets[12] = {
|
||||
-0.326212, -0.405805,
|
||||
@@ -28,89 +134,122 @@ static const float2 offsets[12] = {
|
||||
-0.791559, -0.597705,
|
||||
};
|
||||
|
||||
float w;
|
||||
float h;
|
||||
static const float2 resolution = float2(w, h);
|
||||
|
||||
// blur setting
|
||||
static const float blurFalloff = 8;
|
||||
static const float sharpness = 4;
|
||||
|
||||
float4 AdjustSaturation(float4 color, float saturation) {
|
||||
float4 AdjustSaturation(float4 color, float saturation)
|
||||
{
|
||||
float grey = dot(color, float3(0.3, 0.59, 0.11));
|
||||
|
||||
return lerp(grey, color, saturation);
|
||||
}
|
||||
|
||||
float Brightness(float3 color)
|
||||
float4 BloomPS(float4 color : COLOR0, float2 texCoord : TEXCOORD0) : COLOR0
|
||||
{
|
||||
return color.r * color.g - 0.75 * color.b;
|
||||
}
|
||||
|
||||
float3 BlurFunction(float2 uv, float brightness, inout float totalWeight)
|
||||
{
|
||||
float3 pointColor =(tex2Dlod(s0, float4(uv, 0, 0)).rgb);
|
||||
float diff = abs(brightness - Brightness(pointColor));
|
||||
float weight = exp2(-0.25 * blurFalloff - diff * sharpness);
|
||||
totalWeight += weight;
|
||||
|
||||
return pointColor * weight;
|
||||
}
|
||||
|
||||
float4 BlurPS(float2 uv : TEXCOORD0, uniform float2 delta) : COLOR0
|
||||
{
|
||||
float3 sumColor = (tex2D(s0, uv).rgb);
|
||||
float totalWeight = 1;
|
||||
float brightness = Brightness(sumColor);
|
||||
delta *= (1 / resolution);
|
||||
float radius = 1;
|
||||
|
||||
float2 pointUV = uv + delta * radius;
|
||||
sumColor += BlurFunction(pointUV, brightness, totalWeight);
|
||||
pointUV = uv - delta * radius;
|
||||
sumColor += BlurFunction(pointUV, brightness, totalWeight);
|
||||
|
||||
return float4((sumColor / totalWeight),1);
|
||||
// return AdjustSaturation(Color, 0.5);
|
||||
}
|
||||
|
||||
float4 BloomT(float2 texCoord : TEXCOORD0) : COLOR0 {
|
||||
float4 c = tex2D(s0, texCoord);
|
||||
float BloomThreshold = 0.2;
|
||||
|
||||
return saturate((c - BloomThreshold) / (1 - BloomThreshold));
|
||||
}
|
||||
|
||||
float4 Bloom(float4 color : COLOR0, float2 texCoord : TEXCOORD0) : COLOR0 {
|
||||
float BaseIntensity = 1.0;
|
||||
float BaseSaturation = 1;
|
||||
float BloomIntensity = 1; // 0.4
|
||||
float BloomSaturation = 0.5;
|
||||
float BlurPower = 0.01;
|
||||
float BloomThreshold = 0.5;
|
||||
|
||||
float4 original = tex2D(s0, texCoord);
|
||||
|
||||
// blur
|
||||
float4 sum = tex2D(s0, texCoord);
|
||||
for(int i = 0; i < 12; i++){
|
||||
sum += tex2D(s0, texCoord + BlurPower * offsets[i]);
|
||||
}
|
||||
sum /= 13;
|
||||
|
||||
original = AdjustSaturation(original, BaseSaturation) * BaseIntensity;
|
||||
sum = AdjustSaturation(sum, BloomSaturation) * BloomIntensity;
|
||||
float sum = (original.r + original.g + original.b) * 0.333;
|
||||
if (sum >= 0.95) return original;
|
||||
|
||||
sum = saturate((sum - BloomThreshold) / (1 - BloomThreshold));
|
||||
|
||||
return sum + original;
|
||||
// return sum;
|
||||
}
|
||||
|
||||
technique Blur
|
||||
// bloom blur
|
||||
float4 bloomBlur = tex2D(s0, texCoord);
|
||||
for(int i = 0; i < 12; i++)
|
||||
{
|
||||
// pass P2 { PixelShader = compile ps_2_0 BloomT(); }
|
||||
// pass P3 { PixelShader = compile ps_2_0 Bloom(); }
|
||||
Pass P0 { PixelShader = compile ps_3_0 BlurPS(float2(1, 0)); }
|
||||
Pass P1 { PixelShader = compile ps_3_0 BlurPS(float2(0, 1)); }
|
||||
bloomBlur += tex2D(s0, texCoord + BlurPower * offsets[i]);
|
||||
}
|
||||
bloomBlur *= 0.085;
|
||||
|
||||
float intensity = BloomIntensity - lerp(0.0, 0.2, sum);
|
||||
bloomBlur = AdjustSaturation(bloomBlur, BloomSaturation) * intensity;
|
||||
bloomBlur = saturate((bloomBlur - BloomThreshold) / (1 - BloomThreshold));
|
||||
|
||||
return bloomBlur + original;
|
||||
}
|
||||
|
||||
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 BlurBloom
|
||||
{
|
||||
//pass P0 { PixelShader = compile ps_3_0 BlurDeltaPassPS(wPass); }
|
||||
//pass P1 { PixelShader = compile ps_3_0 BlurDeltaPassPS(hPass); }
|
||||
|
||||
pass P0 { PixelShader = compile ps_3_0 BlurPS(); }
|
||||
pass P3 { PixelShader = compile ps_2_0 BloomPS(); }
|
||||
pass P2 { PixelShader = compile ps_2_0 SharpenComplexPS(); }
|
||||
}
|
||||
|
||||
@@ -0,0 +1,106 @@
|
||||
// Shader from Media Player Classic - Home Cinema
|
||||
// Adapted to sfall by Mr.Stalin
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Sharpen filter setting
|
||||
//
|
||||
// min: Sharpen 0.5, EdgeSharpen 1.0
|
||||
// mid: Sharpen 1.0, EdgeSharpen -0.25
|
||||
// max: Sharpen 1.75, EdgeSharpen -0.5 (1.5, -0.25)
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
#define Sharpen 0.5
|
||||
#define EdgeSharpen 1.1
|
||||
|
||||
sampler s0;
|
||||
|
||||
// Variables that set the width and height of the current game resolution from sfall
|
||||
float w;
|
||||
float h;
|
||||
float2 rcpres; // pixel size
|
||||
|
||||
static const float CoefBlur = (Sharpen * 0.5);
|
||||
static const float CoefOrig = (1 + CoefBlur);
|
||||
|
||||
// for the sharpen edge
|
||||
#define SharpenEdge 0.4
|
||||
static const float sharpenVal0 = (Sharpen * (1.5 + EdgeSharpen));
|
||||
static const float sharpenVal1 = ((sharpenVal0 - 1) / 8.0);
|
||||
|
||||
// pixel "width"
|
||||
static const float px = rcpres.x;
|
||||
static const float py = rcpres.y;
|
||||
|
||||
// for the blur filter
|
||||
#define mean 1.0
|
||||
static const float dx = (mean * px);
|
||||
static const float dy = (mean * py);
|
||||
|
||||
float4 SharpenComplexPS(float4 color : COLOR0, float2 texCoord : TEXCOORD0) : COLOR0
|
||||
{
|
||||
float4 c0 = tex2D(s0, texCoord); // get original pixel
|
||||
|
||||
// edge detection
|
||||
// Get neighbor points
|
||||
// [ c1, c2, c3 ]
|
||||
// [ c4, c0, c5 ]
|
||||
// [ c6, c7, c8 ]
|
||||
float4 c1 = tex2D(s0, texCoord + float2(-px, -py));
|
||||
float4 c2 = tex2D(s0, texCoord + float2( 0, -py));
|
||||
float4 c3 = tex2D(s0, texCoord + float2( px, -py));
|
||||
float4 c4 = tex2D(s0, texCoord + float2(-px, 0));
|
||||
float4 c5 = tex2D(s0, texCoord + float2( px, 0));
|
||||
float4 c6 = tex2D(s0, texCoord + float2(-px, py));
|
||||
float4 c7 = tex2D(s0, texCoord + float2( 0, py));
|
||||
float4 c8 = tex2D(s0, texCoord + float2( px, py));
|
||||
|
||||
// using Sobel filter
|
||||
// horizontal gradient
|
||||
// [ -1, 0, 1 ]
|
||||
// [ -2, 0, 2 ]
|
||||
// [ -1, 0, 1 ]
|
||||
float delta1 = (c3 + 2 * c5 + c8) - (c1 + 2 * c4 + c6);
|
||||
|
||||
// vertical gradient
|
||||
// [ -1, - 2, -1 ]
|
||||
// [ 0, 0, 0 ]
|
||||
// [ 1, 2, 1 ]
|
||||
float4 c13 = c1 + c3;
|
||||
float4 c68 = c6 + c8;
|
||||
float delta2 = (c68 + 2 * c7) - (c13 + 2 * c2);
|
||||
|
||||
// computation
|
||||
if (sqrt(mul(delta1, delta1) + mul(delta2, delta2)) > SharpenEdge) {
|
||||
// if we have an edge, use sharpen
|
||||
return c0 * sharpenVal0 - (c13 + c2 + c4 + c5 + c68 + c7) * sharpenVal1;
|
||||
|
||||
// Display edges in red...
|
||||
//return float4( 1.0, 0.0, 0.0, 0.0 );
|
||||
} else {
|
||||
// else return corrected image
|
||||
|
||||
// compute blurred image (gaussian filter)
|
||||
c1 = tex2D(s0, texCoord + float2(-dx, -dy));
|
||||
c2 = tex2D(s0, texCoord + float2( 0, -dy));
|
||||
c3 = tex2D(s0, texCoord + float2( dx, -dy));
|
||||
c4 = tex2D(s0, texCoord + float2(-dx, 0));
|
||||
c5 = tex2D(s0, texCoord + float2( dx, 0));
|
||||
c6 = tex2D(s0, texCoord + float2(-dx, dy));
|
||||
c7 = tex2D(s0, texCoord + float2( 0, dy));
|
||||
c8 = tex2D(s0, texCoord + float2( dx, dy));
|
||||
|
||||
// gaussian filter
|
||||
// [ 1, 2, 1 ]
|
||||
// [ 2, 4, 2 ]
|
||||
// [ 1, 2, 1 ]
|
||||
// to normalize the values, we need to divide by the coeff sum
|
||||
float4 flou = (c1 + c3 + c6 + c8 + 2 * (c2 + c4 + c5 + c7) + 4 * c0) * 0.0625; // 1 / (1+2+1+2+4+2+1+2+1) = 1 / 16 = 0.0625
|
||||
|
||||
// substract blurred image from original image
|
||||
return (CoefOrig * c0 - CoefBlur * flou);
|
||||
}
|
||||
}
|
||||
|
||||
technique SharpenT
|
||||
{
|
||||
pass P0 { PixelShader = compile ps_2_0 SharpenComplexPS(); }
|
||||
}
|
||||
@@ -1,7 +1,5 @@
|
||||
/*
|
||||
Example implementation of the algorithm of how the game engine checks if one critter sees another critter.
|
||||
|
||||
NOTE: the AllowUnsafeScripting option must be enabled.
|
||||
*/
|
||||
|
||||
#include "..\headers\define.h"
|
||||
@@ -9,10 +7,8 @@
|
||||
#include "..\headers\sfall\sfall.h"
|
||||
#include "..\headers\sfall\define_extra.h"
|
||||
|
||||
#define can_see_(source, target) call_offset_r2(0x412BEC, source, target)
|
||||
#define obj_dist_(target, source) call_offset_r2(0x48BBD4, target, source)
|
||||
|
||||
procedure start;
|
||||
procedure can_see(variable obj1, variable obj2);
|
||||
|
||||
procedure start begin
|
||||
if game_loaded then begin
|
||||
@@ -21,40 +17,50 @@ procedure start begin
|
||||
variable
|
||||
source := get_sfall_arg,
|
||||
target := get_sfall_arg,
|
||||
original := get_sfall_arg,
|
||||
hookType := get_sfall_arg, /* new arg */
|
||||
engine := get_sfall_arg,
|
||||
type := get_sfall_arg, /* new arg */
|
||||
result := 0,
|
||||
distance;
|
||||
distance, seeDistance, seeText;
|
||||
|
||||
if target then begin
|
||||
distance := get_critter_stat(source, STAT_pe);
|
||||
seeDistance := get_critter_stat(source, STAT_pe);
|
||||
|
||||
if can_see_(source, target) then begin
|
||||
distance *= 5;
|
||||
if (get_flags(target) bwand FLAG_TRANSGLASS) then distance /= 2;
|
||||
if can_see(source, target) then begin
|
||||
seeDistance *= 5;
|
||||
if (get_flags(target) bwand FLAG_TRANSGLASS) then seeDistance /= 2;
|
||||
end else if combat_is_initialized then begin
|
||||
distance *= 2;
|
||||
seeDistance *= 2;
|
||||
end
|
||||
|
||||
if (target == dude_obj) then begin
|
||||
if sneak_success then begin
|
||||
distance /= 4;
|
||||
if has_skill(target, SKILL_SNEAK) > 120 then distance -= 1;
|
||||
seeDistance /= 4;
|
||||
if has_skill(target, SKILL_SNEAK) > 120 then seeDistance -= 1;
|
||||
end else if dude_is_sneaking then begin
|
||||
distance := distance * 2 / 3;
|
||||
seeDistance := (seeDistance * 2) / 3; // distance div 1.5
|
||||
end
|
||||
end
|
||||
|
||||
if obj_dist_(target, source) <= distance then result := 1;
|
||||
distance := tile_distance_objs(source, target);
|
||||
if (get_flags(source) bwand FLAG_MULTIHEX) then distance--;
|
||||
if (get_flags(target) bwand FLAG_MULTIHEX) then distance--;
|
||||
|
||||
// example
|
||||
if (result) then begin
|
||||
display_msg("hs_withinperception: " + obj_name(source) + " sees " + obj_name(target) + " [original: " + original + " script: " + result + "]");
|
||||
end else begin
|
||||
display_msg("hs_withinperception: " + obj_name(source) + " does not see " + obj_name(target) + " [original: " + original + " script: " + result + "]");
|
||||
end
|
||||
end
|
||||
if (distance <= seeDistance) then result := 1;
|
||||
|
||||
seeText = " does not see > ";
|
||||
if (result) then seeText = " sees > ";
|
||||
|
||||
// Example
|
||||
display_msg("hs_withinperception: " + obj_name(source) + seeText + obj_name(target) + " [engine: " + engine + ", script: " + result + "]");
|
||||
|
||||
/* override engine result */
|
||||
//set_sfall_return(result);
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
procedure can_see(variable obj1, variable obj2) begin
|
||||
variable dir = obj_get_rot(obj1) - rotation_to_tile(tile_num(obj1), tile_num(obj2));
|
||||
if (dir < 0) then dir = -dir;
|
||||
return (dir <= 1) or (dir == 5);
|
||||
end
|
||||
|
||||
Binary file not shown.
@@ -0,0 +1,264 @@
|
||||
procedure start;
|
||||
|
||||
variable rainshaderdef;
|
||||
variable snowshaderdef;
|
||||
variable sandshaderdef;
|
||||
variable rainshaderesc;
|
||||
variable snowshaderesc;
|
||||
variable sandshaderesc;
|
||||
variable rainshaderinv;
|
||||
variable snowshaderinv;
|
||||
variable sandshaderinv;
|
||||
variable rainshadermap;
|
||||
variable snowshadermap;
|
||||
variable sandshadermap;
|
||||
variable rainshaderskd;
|
||||
variable snowshaderskd;
|
||||
variable sandshaderskd;
|
||||
|
||||
variable cshader;
|
||||
variable active;
|
||||
|
||||
procedure update_shader(variable shader) begin
|
||||
if (shader == cshader) then begin
|
||||
return;
|
||||
end
|
||||
if (cshader == 1) then begin
|
||||
deactivate_shader(rainshaderdef);
|
||||
deactivate_shader(rainshaderesc);
|
||||
deactivate_shader(rainshaderinv);
|
||||
deactivate_shader(rainshadermap);
|
||||
deactivate_shader(rainshaderskd);
|
||||
end else if (cshader == 2) then begin
|
||||
deactivate_shader(snowshaderdef);
|
||||
deactivate_shader(snowshaderesc);
|
||||
deactivate_shader(snowshaderinv);
|
||||
deactivate_shader(snowshadermap);
|
||||
deactivate_shader(snowshaderskd);
|
||||
end else if (cshader == 3) then begin
|
||||
deactivate_shader(sandshaderdef);
|
||||
deactivate_shader(sandshaderesc);
|
||||
deactivate_shader(sandshaderinv);
|
||||
deactivate_shader(sandshadermap);
|
||||
deactivate_shader(sandshaderskd);
|
||||
end
|
||||
if (shader == 1) then begin
|
||||
activate_shader(rainshaderdef);
|
||||
activate_shader(rainshaderesc);
|
||||
activate_shader(rainshaderinv);
|
||||
activate_shader(rainshadermap);
|
||||
activate_shader(rainshaderskd);
|
||||
end else if (shader == 2) then begin
|
||||
activate_shader(snowshaderdef);
|
||||
activate_shader(snowshaderesc);
|
||||
activate_shader(snowshaderinv);
|
||||
activate_shader(snowshadermap);
|
||||
activate_shader(snowshaderskd);
|
||||
end else if (shader == 3) then begin
|
||||
activate_shader(sandshaderdef);
|
||||
activate_shader(sandshaderesc);
|
||||
activate_shader(sandshaderinv);
|
||||
activate_shader(sandshadermap);
|
||||
activate_shader(sandshaderskd);
|
||||
end
|
||||
|
||||
cshader := shader;
|
||||
|
||||
if (shader == 0) then begin
|
||||
force_graphics_refresh(0);
|
||||
end else begin
|
||||
force_graphics_refresh(1);
|
||||
end
|
||||
end
|
||||
|
||||
procedure on_game_load begin
|
||||
variable tmp;
|
||||
if (graphics_funcs_available) then begin
|
||||
display_msg("Weather mod: Shader functions available");
|
||||
end else return;
|
||||
|
||||
rainshaderdef := load_shader("weather\\rain-def.fx");
|
||||
snowshaderdef := load_shader("weather\\snow-def.fx");
|
||||
sandshaderdef := load_shader("weather\\sand-def.fx");
|
||||
rainshaderesc := load_shader("weather\\rain-esc.fx");
|
||||
snowshaderesc := load_shader("weather\\snow-esc.fx");
|
||||
sandshaderesc := load_shader("weather\\sand-esc.fx");
|
||||
rainshaderinv := load_shader("weather\\rain-inv.fx");
|
||||
snowshaderinv := load_shader("weather\\snow-inv.fx");
|
||||
sandshaderinv := load_shader("weather\\sand-inv.fx");
|
||||
rainshadermap := load_shader("weather\\rain-map.fx");
|
||||
snowshadermap := load_shader("weather\\snow-map.fx");
|
||||
sandshadermap := load_shader("weather\\sand-map.fx");
|
||||
rainshaderskd := load_shader("weather\\rain-skd.fx");
|
||||
snowshaderskd := load_shader("weather\\snow-skd.fx");
|
||||
sandshaderskd := load_shader("weather\\sand-skd.fx");
|
||||
|
||||
if (rainshaderdef == -1 or snowshaderdef == -1 or sandshaderdef == -1) then begin
|
||||
display_msg("Weather mod error: Could not load default shaders");
|
||||
return;
|
||||
end
|
||||
if (rainshaderesc == -1 or snowshaderesc == -1 or sandshaderesc == -1) then begin
|
||||
display_msg("Weather mod error: Could not load escape shaders");
|
||||
return;
|
||||
end
|
||||
if (rainshaderinv == -1 or snowshaderinv == -1 or sandshaderinv == -1) then begin
|
||||
display_msg("Weather mod error: Could not load inventory shaders");
|
||||
return;
|
||||
end
|
||||
if (rainshadermap == -1 or snowshadermap == -1 or sandshadermap == -1) then begin
|
||||
display_msg("Weather mod error: Could not load automap shaders");
|
||||
return;
|
||||
end
|
||||
if (rainshaderskd == -1 or snowshaderskd == -1 or sandshaderskd == -1) then begin
|
||||
display_msg("Weather mod error: Could not load skilldex shaders");
|
||||
return;
|
||||
end
|
||||
|
||||
tmp := get_shader_texture(rainshaderdef, 2);
|
||||
set_shader_texture(rainshaderesc, "tex2", tmp);
|
||||
set_shader_texture(rainshaderinv, "tex2", tmp);
|
||||
set_shader_texture(rainshadermap, "tex2", tmp);
|
||||
set_shader_texture(rainshaderskd, "tex2", tmp);
|
||||
|
||||
tmp := get_shader_texture(snowshaderdef, 2);
|
||||
set_shader_texture(snowshaderesc, "tex2", tmp);
|
||||
set_shader_texture(snowshaderinv, "tex2", tmp);
|
||||
set_shader_texture(snowshadermap, "tex2", tmp);
|
||||
set_shader_texture(snowshaderskd, "tex2", tmp);
|
||||
|
||||
tmp := get_shader_texture(sandshaderdef, 2);
|
||||
set_shader_texture(sandshaderesc, "tex2", tmp);
|
||||
set_shader_texture(sandshaderinv, "tex2", tmp);
|
||||
set_shader_texture(sandshadermap, "tex2", tmp);
|
||||
set_shader_texture(sandshaderskd, "tex2", tmp);
|
||||
|
||||
tmp := get_shader_texture(rainshaderdef, 1);
|
||||
set_shader_texture(snowshaderdef, "tex1", tmp);
|
||||
set_shader_texture(sandshaderdef, "tex1", tmp);
|
||||
|
||||
tmp := get_shader_texture(rainshaderesc, 1);
|
||||
set_shader_texture(snowshaderesc, "tex1", tmp);
|
||||
set_shader_texture(sandshaderesc, "tex1", tmp);
|
||||
|
||||
tmp := get_shader_texture(rainshaderinv, 1);
|
||||
set_shader_texture(snowshaderinv, "tex1", tmp);
|
||||
set_shader_texture(sandshaderinv, "tex1", tmp);
|
||||
|
||||
tmp := get_shader_texture(rainshadermap, 1);
|
||||
set_shader_texture(snowshadermap, "tex1", tmp);
|
||||
set_shader_texture(sandshadermap, "tex1", tmp);
|
||||
|
||||
tmp := get_shader_texture(rainshaderskd, 1);
|
||||
set_shader_texture(snowshaderskd, "tex1", tmp);
|
||||
set_shader_texture(sandshaderskd, "tex1", tmp);
|
||||
|
||||
set_shader_mode(rainshaderdef, 30653); // 0x77bd
|
||||
set_shader_mode(snowshaderdef, 30653);
|
||||
set_shader_mode(sandshaderdef, 30653);
|
||||
set_shader_mode(rainshaderesc, 30645); // 0x77b5
|
||||
set_shader_mode(snowshaderesc, 30645);
|
||||
set_shader_mode(sandshaderesc, 30645);
|
||||
set_shader_mode(rainshaderinv, 26557); // 0x67bd
|
||||
set_shader_mode(snowshaderinv, 26557);
|
||||
set_shader_mode(sandshaderinv, 26557);
|
||||
set_shader_mode(rainshadermap, 22461); // 0x57bd
|
||||
set_shader_mode(snowshadermap, 22461);
|
||||
set_shader_mode(sandshadermap, 22461);
|
||||
set_shader_mode(rainshaderskd, 14269); // 0x37bd
|
||||
set_shader_mode(snowshaderskd, 14269);
|
||||
set_shader_mode(sandshaderskd, 14269);
|
||||
|
||||
set_shader_mode(rainshaderesc, 2147483656); // 0x80000008
|
||||
set_shader_mode(snowshaderesc, 2147483656);
|
||||
set_shader_mode(sandshaderesc, 2147483656);
|
||||
set_shader_mode(rainshaderinv, 2147487744); // 0x80001000
|
||||
set_shader_mode(snowshaderinv, 2147487744);
|
||||
set_shader_mode(sandshaderinv, 2147487744);
|
||||
set_shader_mode(rainshadermap, 2147491840); // 0x80002000
|
||||
set_shader_mode(snowshadermap, 2147491840);
|
||||
set_shader_mode(sandshadermap, 2147491840);
|
||||
set_shader_mode(rainshaderskd, 2147500032); // 0x80004000
|
||||
set_shader_mode(snowshaderskd, 2147500032);
|
||||
set_shader_mode(sandshaderskd, 2147500032);
|
||||
|
||||
//set_global_script_repeat(50);
|
||||
end
|
||||
|
||||
procedure update_region begin
|
||||
variable tmp;
|
||||
variable rain := 50;
|
||||
variable snow := 25;
|
||||
variable sand := 25;
|
||||
|
||||
snow += rain;
|
||||
sand += snow;
|
||||
|
||||
tmp := random(1,100);
|
||||
if (tmp <= rain) then begin
|
||||
display_msg("It's raining");
|
||||
active := 1;
|
||||
end else if (tmp <= snow) then begin
|
||||
display_msg("It's snowing");
|
||||
active := 2;
|
||||
end else if (tmp <= sand) then begin
|
||||
display_msg("It's sandstorming");
|
||||
active := 3;
|
||||
end else begin
|
||||
display_msg("No weather");
|
||||
active := 0;
|
||||
end
|
||||
|
||||
//call update_shader(active);
|
||||
end
|
||||
|
||||
procedure update_weather begin
|
||||
variable tmp = random(10, 90) / 100.0;
|
||||
|
||||
call update_shader(active);
|
||||
|
||||
if (active == 1) then begin
|
||||
set_shader_float(rainshaderdef, "speed", 500 - (tmp * 300));
|
||||
set_shader_float(rainshaderdef, "multi", 1.5 + tmp * 6.5);
|
||||
set_shader_float(rainshaderesc, "speed", 500 - (tmp * 300));
|
||||
set_shader_float(rainshaderesc, "multi", 1.5 + tmp * 6.5);
|
||||
set_shader_float(rainshaderinv, "speed", 500 - (tmp * 300));
|
||||
set_shader_float(rainshaderinv, "multi", 1.5 + tmp * 6.5);
|
||||
set_shader_float(rainshadermap, "speed", 500 - (tmp * 300));
|
||||
set_shader_float(rainshadermap, "multi", 1.5 + tmp * 6.5);
|
||||
set_shader_float(rainshaderskd, "speed", 500 - (tmp * 300));
|
||||
set_shader_float(rainshaderskd, "multi", 1.5 + tmp * 6.5);
|
||||
end else if (active == 2) then begin
|
||||
set_shader_float(snowshaderdef, "speed", 800 - (tmp * 200));
|
||||
set_shader_float(snowshaderdef, "multi", 0.5 + tmp * 0.5);
|
||||
set_shader_float(snowshaderesc, "speed", 800 - (tmp * 200));
|
||||
set_shader_float(snowshaderesc, "multi", 0.5 + tmp * 0.5);
|
||||
set_shader_float(snowshaderinv, "speed", 800 - (tmp * 200));
|
||||
set_shader_float(snowshaderinv, "multi", 0.5 + tmp * 0.5);
|
||||
set_shader_float(snowshadermap, "speed", 800 - (tmp * 200));
|
||||
set_shader_float(snowshadermap, "multi", 0.5 + tmp * 0.5);
|
||||
set_shader_float(snowshaderskd, "speed", 800 - (tmp * 200));
|
||||
set_shader_float(snowshaderskd, "multi", 0.5 + tmp * 0.5);
|
||||
end else begin
|
||||
set_shader_float(sandshaderdef, "speed", 400 - (tmp * 200));
|
||||
set_shader_float(sandshaderdef, "multi", tmp);
|
||||
set_shader_float(sandshaderesc, "speed", 400 - (tmp * 200));
|
||||
set_shader_float(sandshaderesc, "multi", tmp);
|
||||
set_shader_float(sandshaderinv, "speed", 400 - (tmp * 200));
|
||||
set_shader_float(sandshaderinv, "multi", tmp);
|
||||
set_shader_float(sandshadermap, "speed", 400 - (tmp * 200));
|
||||
set_shader_float(sandshadermap, "multi", tmp);
|
||||
set_shader_float(sandshaderskd, "speed", 400 - (tmp * 200));
|
||||
set_shader_float(sandshaderskd, "multi", tmp);
|
||||
end
|
||||
|
||||
//display_msg("Shader active: "+tmp);
|
||||
end
|
||||
|
||||
procedure start begin
|
||||
variable tmp;
|
||||
if (game_loaded) then begin
|
||||
call on_game_load;
|
||||
call update_region;
|
||||
call update_weather;
|
||||
end
|
||||
end
|
||||
@@ -340,6 +340,9 @@ There are several changes in this version of sslc which may result in problems f
|
||||
=== Changelog ===
|
||||
=================
|
||||
|
||||
> sfall 4.2.7
|
||||
- added ability to declare local variables anywhere in the procedure body
|
||||
|
||||
> sfall 4.2.3
|
||||
- fixed compiler giving "assignment operator expected" error when a variable-like macro is not being defined properly
|
||||
- added new logical operators "AndAlso", "OrElse" for short-circuit evaluation of logical expressions
|
||||
|
||||
@@ -1,13 +1,9 @@
|
||||
/*
|
||||
Copyright 1998-2003 Interplay Entertainment Corp. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef COMMAND_H
|
||||
#define COMMAND_H
|
||||
|
||||
|
||||
#define critter_is_armed(x) (((obj_item_subtype(critter_inven_obj(x,INVEN_TYPE_RIGHT_HAND))) == item_type_weapon) or \
|
||||
#define critter_is_armed(x) (((obj_item_subtype(critter_inven_obj(x,INVEN_TYPE_RIGHT_HAND))) == item_type_weapon) orElse \
|
||||
((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_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_agility (get_critter_stat(dude_obj,STAT_ag))
|
||||
#define dude_luck (get_critter_stat(dude_obj,STAT_lu))
|
||||
#ifndef dude_level
|
||||
#define dude_level (get_pc_stat(PCSTAT_level))
|
||||
#endif
|
||||
#define dude_age (get_critter_stat(dude_obj,STAT_age))
|
||||
#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_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_HARDENED_POWER_ARMOR))) > 0)
|
||||
|
||||
#define dude_wielding_knife ((obj_pid(critter_inven_obj(dude_obj,INVEN_TYPE_RIGHT_HAND)) == PID_KNIFE) or \
|
||||
(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_RIPPER) or \
|
||||
(obj_pid(critter_inven_obj(dude_obj,INVEN_TYPE_RIGHT_HAND)) == PID_COMBAT_KNIFE) or \
|
||||
(obj_pid(critter_inven_obj(dude_obj,INVEN_TYPE_LEFT_HAND)) == PID_KNIFE) or \
|
||||
(obj_pid(critter_inven_obj(dude_obj,INVEN_TYPE_LEFT_HAND)) == PID_THROWING_KNIFE) or \
|
||||
(obj_pid(critter_inven_obj(dude_obj,INVEN_TYPE_LEFT_HAND)) == PID_RIPPER) or \
|
||||
(obj_pid(critter_inven_obj(dude_obj,INVEN_TYPE_LEFT_HAND)) == PID_COMBAT_KNIFE))
|
||||
#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) orElse \
|
||||
(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) orElse \
|
||||
(obj_pid(critter_inven_obj(dude_obj,INVEN_TYPE_RIGHT_HAND)) == PID_SWITCHBLADE) orElse \
|
||||
(obj_pid(critter_inven_obj(dude_obj,INVEN_TYPE_RIGHT_HAND)) == PID_SHIV) orElse \
|
||||
(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_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 \
|
||||
(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_MK2) 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) orElse \
|
||||
(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))
|
||||
|
||||
#define dude_wearing_leather_armor ((obj_pid(critter_inven_obj(dude_obj,INVEN_TYPE_WORN)) == PID_LEATHER_ARMOR) or \
|
||||
(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_ARMOR_MK_II) 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) orElse \
|
||||
(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))
|
||||
|
||||
#define dude_wearing_combat_armor ((obj_pid(critter_inven_obj(dude_obj,INVEN_TYPE_WORN)) == PID_COMBAT_ARMOR) or \
|
||||
(obj_pid(critter_inven_obj(dude_obj,INVEN_TYPE_WORN)) == PID_BROTHERHOOD_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) orElse \
|
||||
(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))
|
||||
|
||||
#define dude_wearing_vault_suit COND019(1)
|
||||
#define dude_has_gambling_skills ((dude_iq > 3) and (has_skill(dude_obj, SKILL_GAMBLING) >= 25))
|
||||
#define dude_has_gambling_skills ((dude_iq > 3) andAlso (has_skill(dude_obj, SKILL_GAMBLING) >= 25))
|
||||
|
||||
#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_running (art_anim(obj_art_fid(dude_obj)) == ANIM_running)
|
||||
#define dude_is_poisoned (get_poison(dude_obj))
|
||||
#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 \
|
||||
(critter_state(dude_obj) bwand DAM_CRIP_LEG_RIGHT) or \
|
||||
(critter_state(dude_obj) bwand DAM_CRIP_ARM_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) orElse \
|
||||
(critter_state(dude_obj) bwand DAM_CRIP_ARM_LEFT) orElse \
|
||||
(critter_state(dude_obj) bwand DAM_CRIP_ARM_RIGHT))
|
||||
|
||||
#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_is_pornstar dude_has_porn_star_rep
|
||||
#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_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 self_name (obj_name(self_obj))
|
||||
#define self_gender (get_critter_stat(self_obj,STAT_gender))
|
||||
#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_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))
|
||||
|
||||
#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); \
|
||||
add_timer_event(obj, time, 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
|
||||
******************************************************************/
|
||||
|
||||
#define morning ((game_time_hour >= 600) and (game_time_hour < 700))
|
||||
#define morning ((game_time_hour >= 600) andAlso (game_time_hour < 700))
|
||||
#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
|
||||
#define evening ((game_time_hour >= 1800) and (game_time_hour < 1900))
|
||||
#define evening ((game_time_hour >= 1800) andAlso (game_time_hour < 1900))
|
||||
#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
|
||||
|
||||
#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_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 game_time_advance_hour(x) game_time_advance(ticks_til_hour(x))
|
||||
|
||||
@@ -219,9 +219,7 @@
|
||||
/***************************************************************
|
||||
**************** Dialogue Information ***********************
|
||||
***************************************************************/
|
||||
#ifndef floater
|
||||
#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 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_sick(x) float_msg(dude_obj, message_str(NAME,x), FLOAT_COLOR_SICK)
|
||||
|
||||
|
||||
#define FLOAT_COLOR_NORMAL FLOAT_MSG_YELLOW
|
||||
#define FLOAT_COLOR_SICK FLOAT_MSG_GREEN
|
||||
#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_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
|
||||
******************************************************************/
|
||||
@@ -385,59 +380,12 @@
|
||||
#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_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
|
||||
******************************************************************/
|
||||
#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 \
|
||||
debug_msg(" mark_on_map("+x+")"); \
|
||||
mark_area_known(MARK_TYPE_TOWN, x, MARK_STATE_KNOWN); \
|
||||
@@ -448,63 +396,11 @@
|
||||
mark_area_known(MARK_TYPE_TOWN, x, MARK_STATE_UNKNOWN); \
|
||||
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 *********************************************
|
||||
********** 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 **********************
|
||||
*******************************************************************************************************************/
|
||||
#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
|
||||
#define pid_weight(x) proto_data(x,it_weight)
|
||||
|
||||
@@ -2,6 +2,9 @@
|
||||
#ifndef DEFINE_EXTRA_H
|
||||
#define DEFINE_EXTRA_H
|
||||
|
||||
/* Combat Flags */
|
||||
#define DAM_PRESERVE_FLAGS 0x80000000 // keep the existing result flags when setting new flags in attack_complex (for sfall)
|
||||
|
||||
#define BODY_HIT_HEAD (0)
|
||||
#define BODY_HIT_LEFT_ARM (1)
|
||||
#define BODY_HIT_RIGHT_ARM (2)
|
||||
@@ -102,10 +105,11 @@
|
||||
#define CFLG_NOKNOCKDOWN CFLG_NOKNOCKBACK // obsolete
|
||||
|
||||
/* Window flags */
|
||||
#define WIN_FLAG_MOVEONTOP (0x4)
|
||||
#define WIN_FLAG_HIDDEN (0x8)
|
||||
#define WIN_FLAG_DONTMOVE (0x2) // does not move the window to the foreground when clicking on the window
|
||||
#define WIN_FLAG_MOVEONTOP (0x4) // places the window on top of other windows
|
||||
#define WIN_FLAG_HIDDEN (0x8) // hidden window
|
||||
#define WIN_FLAG_EXCLUSIVE (0x10)
|
||||
#define WIN_FLAG_TRANSPARENT (0x20)
|
||||
#define WIN_FLAG_TRANSPARENT (0x20) // transparent window flag, the window color with index 0 will be transparent
|
||||
|
||||
/* Message window flags */
|
||||
#define MSGBOX_AUTOSIZE (0x0)
|
||||
@@ -337,4 +341,66 @@
|
||||
#define OBJ_DATA_DAMAGE_LAST_TURN (0x48)
|
||||
#define OBJ_DATA_WHO_HIT_ME (0x54) // current target of the critter
|
||||
|
||||
// compute attack result data offsets
|
||||
#define C_ATTACK_SOURCE (0x00)
|
||||
#define C_ATTACK_HIT_MODE (0x04)
|
||||
#define C_ATTACK_WEAPON (0x08)
|
||||
#define C_ATTACK_UNUSED (0x0C)
|
||||
#define C_ATTACK_DAMAGE_SOURCE (0x10) // Amount
|
||||
#define C_ATTACK_FLAGS_SOURCE (0x14) // see DAM_* values in define.h
|
||||
#define C_ATTACK_ROUNDS (0x18)
|
||||
#define C_ATTACK_MESSAGE (0x1C) // message number set from the critical table
|
||||
#define C_ATTACK_TARGET (0x20)
|
||||
#define C_ATTACK_BODY_PART (0x28)
|
||||
#define C_ATTACK_DAMAGE_TARGET (0x2C) // Amount
|
||||
#define C_ATTACK_FLAGS_TARGET (0x30) // see DAM_*
|
||||
#define C_ATTACK_KNOCKBACK_VALUE (0x34)
|
||||
#define C_ATTACK_MAIN_TARGET (0x38)
|
||||
#define C_ATTACK_AROUND_NUMBER (0x3C) // The number of critters around the target
|
||||
#define C_ATTACK_TARGET1 (0x40)
|
||||
#define C_ATTACK_TARGET2 (0x44)
|
||||
#define C_ATTACK_TARGET3 (0x48)
|
||||
#define C_ATTACK_TARGET4 (0x4C)
|
||||
#define C_ATTACK_TARGET5 (0x50)
|
||||
#define C_ATTACK_TARGET6 (0x54)
|
||||
#define C_ATTACK_BODY_PART1 (0x58)
|
||||
#define C_ATTACK_BODY_PART2 (0x5C)
|
||||
#define C_ATTACK_BODY_PART3 (0x60)
|
||||
#define C_ATTACK_BODY_PART4 (0x64)
|
||||
#define C_ATTACK_BODY_PART5 (0x68)
|
||||
#define C_ATTACK_BODY_PART6 (0x6C)
|
||||
#define C_ATTACK_DAMAGE_TARGET1 (0x70) // Amount
|
||||
#define C_ATTACK_DAMAGE_TARGET2 (0x74)
|
||||
#define C_ATTACK_DAMAGE_TARGET3 (0x78)
|
||||
#define C_ATTACK_DAMAGE_TARGET4 (0x7C)
|
||||
#define C_ATTACK_DAMAGE_TARGET5 (0x80)
|
||||
#define C_ATTACK_DAMAGE_TARGET6 (0x84)
|
||||
#define C_ATTACK_FLAGS_TARGET1 (0x88) // see DAM_*
|
||||
#define C_ATTACK_FLAGS_TARGET2 (0x8C)
|
||||
#define C_ATTACK_FLAGS_TARGET3 (0x90)
|
||||
#define C_ATTACK_FLAGS_TARGET4 (0x94)
|
||||
#define C_ATTACK_FLAGS_TARGET5 (0x98)
|
||||
#define C_ATTACK_FLAGS_TARGET6 (0x9C)
|
||||
#define C_ATTACK_KNOCKBACK_VALUE1 (0xA0)
|
||||
#define C_ATTACK_KNOCKBACK_VALUE2 (0xA4)
|
||||
#define C_ATTACK_KNOCKBACK_VALUE3 (0xA8)
|
||||
#define C_ATTACK_KNOCKBACK_VALUE4 (0xAC)
|
||||
#define C_ATTACK_KNOCKBACK_VALUE5 (0xB0)
|
||||
#define C_ATTACK_KNOCKBACK_VALUE6 (0xB4)
|
||||
|
||||
/* Playback mode defines for the soundplay function */
|
||||
#define soundraw (0x80000000) // sfall flag
|
||||
#define Stereo8bit (soundstereo)
|
||||
#define Stereo8bitLoop (soundstereo bwor soundloop)
|
||||
#define Mono16bit (sound16bit)
|
||||
#define Mono16bitLoop (sound16bit bwor soundloop)
|
||||
#define Stereo16bit (soundstereo bwor sound16bit)
|
||||
#define Stereo16bitLoop (soundstereo bwor sound16bit bwor soundloop)
|
||||
|
||||
// Adjust (reduce) volume for soundplay and play_sfall_sound
|
||||
// range: 0x0000XXXX (max volume) - 0x7FFFXXXX (mute)
|
||||
#define SoundVolume25 (0x20000000)
|
||||
#define SoundVolumeHalf (0x40000000)
|
||||
#define SoundVolume75 (0x60000000)
|
||||
|
||||
#endif // DEFINE_EXTRA_H
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
// This file holds all of the things that should be preprocessed.
|
||||
|
||||
// script.h: Script Procedure Types //
|
||||
// Script Procedure Types //
|
||||
#define no_proc (0)
|
||||
#define start_proc (1)
|
||||
#define spatial_proc (2)
|
||||
@@ -41,7 +41,7 @@
|
||||
#define METARULE_IS_LOADGAME 22
|
||||
#define is_loading_game metarule(METARULE_IS_LOADGAME, 0)
|
||||
|
||||
// script.h: Script Combat Procedure SubTypes //
|
||||
// Script Combat Procedure SubTypes //
|
||||
#define COMBAT_SUBTYPE_WEAPON_USED (1)
|
||||
#define COMBAT_SUBTYPE_HIT_SUCCEEDED (2)
|
||||
#define COMBAT_SUBTYPE_SEQUENCING (3)
|
||||
@@ -102,19 +102,16 @@
|
||||
|
||||
// dialogue defines //
|
||||
#define start_dialogue(X,Y) start_gdialog(-1,X,Y,-1,-1)
|
||||
|
||||
// head_anim enums
|
||||
//#define very_good_reaction (0)
|
||||
#define good_fidget (1)
|
||||
//#define good_to_neutral (2)
|
||||
//#define neutral_to_good (3)
|
||||
#define neutral_fidget (4)
|
||||
//#define neutral_to_bad (5)
|
||||
//#define bad_to_neutral (6)
|
||||
#define bad_fidget (7)
|
||||
//#define very_bad_reaction (8)
|
||||
//#define good_phonemes (9)
|
||||
//#define neutral_phonemes (10)
|
||||
//#define bad_phonemes (11)
|
||||
|
||||
// Mood defines //
|
||||
#define GOOD_REACTION (49)
|
||||
#define NEUTRAL_REACTION (50)
|
||||
#define BAD_REACTION (51)
|
||||
|
||||
// Head defines //
|
||||
#define HEAD_MARCUS (1) //marcus -- Party Member (found in Broken Hills)
|
||||
@@ -129,9 +126,7 @@
|
||||
#define HEAD_HAKUNIN (10) // Hakunin -- Found in Arroyo
|
||||
#define HEAD_BOSS (11)
|
||||
#define HEAD_DYING_HAKUNIN (12)
|
||||
/*
|
||||
#define HEAD_OVERSEER (1) //ovrsr -- vault
|
||||
*/
|
||||
|
||||
// Head defines //
|
||||
#define BACKGROUND1 (2) // rstymetl
|
||||
#define BACKGROUND_HUB (3) //hub.frm
|
||||
@@ -145,6 +140,7 @@
|
||||
#define BACKGROUND_MASTER (11) //master.frm
|
||||
#define BACKGROUND_FOLLOWER (12) //follow.frm
|
||||
#define BACKGROUND_RAIDERS (13) //raider.frm
|
||||
|
||||
// Start of Fallout 2: Backgrounds
|
||||
#define BACKGROUND_CAVE (14) //cave0001.frm
|
||||
#define BACKGROUND_ENCLAVE (15) //enclave.frm
|
||||
@@ -153,14 +149,6 @@
|
||||
#define BACKGROUND_PRESIDENT (18) // pres.frm
|
||||
#define BACKGROUND_TENT (19) // tent.frm
|
||||
#define BACKGROUND_ADOBE (20) // Adobe.frm
|
||||
// Mood defines //
|
||||
#define GOOD_REACTION (49)
|
||||
#define NEUTRAL_REACTION (50)
|
||||
#define BAD_REACTION (51)
|
||||
//#define BAD_REACTION (49)
|
||||
//#define NEUTRAL_REACTION (50)
|
||||
//#define GOOD_REACTION (51)
|
||||
|
||||
|
||||
// ----------------------------------------------------------------------- //
|
||||
// ----------------------------------------------------------------------- //
|
||||
@@ -174,11 +162,11 @@
|
||||
// ----------------------------------------------------------------------- //
|
||||
// ----------------------------------------------------------------------- //
|
||||
|
||||
|
||||
// Trait defines //
|
||||
#define TRAIT_PERK (0)
|
||||
#define TRAIT_OBJECT (1)
|
||||
#define TRAIT_TRAIT (2)
|
||||
|
||||
// Perk Trait Types
|
||||
#define PERK_bonus_awareness (0)
|
||||
#define PERK_bonus_hth_attacks (1)
|
||||
@@ -207,7 +195,7 @@
|
||||
#define PERK_sniper (24)
|
||||
#define PERK_silent_death (25)
|
||||
#define PERK_action_boy (26)
|
||||
///#define PERK_mental_block (27) -- Disabled FO2
|
||||
#define PERK_mental_block (27) //-- Disabled FO2
|
||||
#define PERK_lifegiver (28)
|
||||
#define PERK_dodger (29)
|
||||
#define PERK_snakeater (30)
|
||||
@@ -216,15 +204,15 @@
|
||||
#define PERK_master_thief (33)
|
||||
#define PERK_speaker (34)
|
||||
#define PERK_heave_ho (35)
|
||||
///#define PERK_friendly_foe (36) -- Disabled FO2
|
||||
#define PERK_friendly_foe (36) //-- Disabled FO2
|
||||
#define PERK_pickpocket (37)
|
||||
#define PERK_ghost (38)
|
||||
#define PERK_cult_of_personality (39)
|
||||
///#define PERK_scrounger (40) -- Disabled FO2
|
||||
#define PERK_scrounger (40) //-- Disabled FO2
|
||||
#define PERK_explorer (41)
|
||||
///#define PERK_flower_child (42) -- Disabled FO2
|
||||
#define PERK_flower_child (42) //-- Disabled FO2
|
||||
#define PERK_pathfinder (43)
|
||||
///#define PERK_animal_friend (44) -- Disabled FO2
|
||||
#define PERK_animal_friend (44) //-- Disabled FO2
|
||||
#define PERK_scout (45)
|
||||
#define PERK_mysterious_stranger (46)
|
||||
#define PERK_ranger (47)
|
||||
@@ -233,27 +221,27 @@
|
||||
#define PERK_swift_learner (50)
|
||||
#define PERK_tag (51)
|
||||
#define PERK_mutate (52)
|
||||
//#define PERK_add_nuka // Do NOT USE! Engine ONLY!
|
||||
//#define PERK_add_buffout // Do NOT USE! Engine ONLY!
|
||||
//#define PERK_add_mentats // Do NOT USE! Engine ONLY!
|
||||
//#define PERK_add_psycho // Do NOT USE! Engine ONLY!
|
||||
//#define PERK_add_radaway // Do NOT USE! Engine ONLY!
|
||||
//#define PERK_weapon_long_range // Do NOT USE! Engine ONLY!
|
||||
//#define PERK_weapon_accurate // Do NOT USE! Engine ONLY!
|
||||
//#define PERK_weapon_penetrate // Do NOT USE! Engine ONLY!
|
||||
//#define PERK_weapon_knockback // Do NOT USE! Engine ONLY!
|
||||
//#define PERK_armor_powered // Do NOT USE! Engine ONLY!
|
||||
//#define PERK_armor_combat // Do NOT USE! Engine ONLY!
|
||||
// Note: Fallout 2: New Perks // Do NOT USE! Engine ONLY!
|
||||
//#define PERK_weapon_scope_range // Do NOT USE! Engine ONLY!
|
||||
//#define PERK_weapon_fast_reload // Do NOT USE! Engine ONLY!
|
||||
//#define PERK_weapon_night_sight // Do NOT USE! Engine ONLY!
|
||||
//#define PERK_weapon_flameboy // Do NOT USE! Engine ONLY!
|
||||
//#define PERK_armor_advanced_1 // Do NOT USE! Engine ONLY!
|
||||
//#define PERK_armor_advanced_2 // Do NOT USE! Engine ONLY!
|
||||
//#define PERK_add_jet // Do NOT USE! Engine ONLY!
|
||||
//#define PERK_add_tragic // Do NOT USE! Engine ONLY!
|
||||
//#define PERK_armor_charisma // Do NOT USE! Engine ONLY!
|
||||
#define PERK_add_nuka (53) // Do NOT USE! Engine ONLY!
|
||||
#define PERK_add_buffout (54) // Do NOT USE! Engine ONLY!
|
||||
#define PERK_add_mentats (55) // Do NOT USE! Engine ONLY!
|
||||
#define PERK_add_psycho (56) // Do NOT USE! Engine ONLY!
|
||||
#define PERK_add_radaway (57) // Do NOT USE! Engine ONLY!
|
||||
#define PERK_weapon_long_range (58) // Do NOT USE! Engine ONLY!
|
||||
#define PERK_weapon_accurate (59) // Do NOT USE! Engine ONLY!
|
||||
#define PERK_weapon_penetrate (60) // Do NOT USE! Engine ONLY!
|
||||
#define PERK_weapon_knockback (61) // Do NOT USE! Engine ONLY!
|
||||
#define PERK_armor_powered (62) // Do NOT USE! Engine ONLY!
|
||||
#define PERK_armor_combat (63) // Do NOT USE! Engine ONLY!
|
||||
// Note: Fallout 2: New Perks
|
||||
#define PERK_weapon_scope_range (64) // Do NOT USE! Engine ONLY!
|
||||
#define PERK_weapon_fast_reload (65) // Do NOT USE! Engine ONLY!
|
||||
#define PERK_weapon_night_sight (66) // Do NOT USE! Engine ONLY!
|
||||
#define PERK_weapon_flameboy (67) // Do NOT USE! Engine ONLY!
|
||||
#define PERK_armor_advanced_1 (68) // Do NOT USE! Engine ONLY!
|
||||
#define PERK_armor_advanced_2 (69) // Do NOT USE! Engine ONLY!
|
||||
#define PERK_add_jet (70) // Do NOT USE! Engine ONLY!
|
||||
#define PERK_add_tragic (71) // Do NOT USE! Engine ONLY!
|
||||
#define PERK_armor_charisma (72) // Do NOT USE! Engine ONLY!
|
||||
#define PERK_gecko_skinning_perk (73)
|
||||
#define PERK_dermal_armor_perk (74)
|
||||
#define PERK_dermal_enhancement_perk (75)
|
||||
@@ -307,7 +295,9 @@
|
||||
#define OBJECT_CUR_ROT (10)
|
||||
#define OBJECT_VISIBILITY (666)
|
||||
#define OBJECT_CUR_WEIGHT (669)
|
||||
|
||||
#define obj_is_visible_flag(WHO) has_trait(TRAIT_OBJECT,WHO,OBJECT_VISIBILITY)
|
||||
|
||||
// Trait Types
|
||||
#define TRAIT_fast_metabolism (0)
|
||||
#define TRAIT_bruiser (1)
|
||||
@@ -329,8 +319,7 @@
|
||||
// ----------------------------------------------------------------------- //
|
||||
// ----------------------------------------------------------------------- //
|
||||
|
||||
// proto.h: stats //
|
||||
// SPECIAL System stats
|
||||
// SPECIAL System stats: strength, perception, endurance, charisma, intelligence, agility, luck
|
||||
#define STAT_st (0)
|
||||
#define STAT_pe (1)
|
||||
#define STAT_en (2)
|
||||
@@ -339,14 +328,12 @@
|
||||
#define STAT_ag (5)
|
||||
#define STAT_lu (6)
|
||||
#define STAT_max_hp (7)
|
||||
/// strength, perception, endurance, charisma, intelligence, agility,
|
||||
/// luck, // luck MUST be the last basic stat
|
||||
// luck MUST be the last basic stat
|
||||
// derived stats
|
||||
#define STAT_max_hit_points (7)
|
||||
#define STAT_max_move_points (8)
|
||||
#define STAT_ac (9)
|
||||
///#define STAT_unarmed_dmg (10)
|
||||
#define STAT_unused (10)
|
||||
#define STAT_unused (10) // used in sfall for critter inventory size (see CritterInvSizeLimitMode)
|
||||
#define STAT_melee_dmg (11)
|
||||
#define STAT_carry_amt (12)
|
||||
#define STAT_sequence (13)
|
||||
@@ -391,7 +378,7 @@
|
||||
// ----------------------------------------------------------------------- //
|
||||
// ----------------------------------------------------------------------- //
|
||||
|
||||
// skill.h: Skill Equates //
|
||||
// Skill Equates //
|
||||
// the following are skills for the SPECIAL system
|
||||
#define SKILL_SMALL_GUNS (0)
|
||||
#define SKILL_BIG_GUNS (1)
|
||||
@@ -418,7 +405,7 @@
|
||||
// ----------------------------------------------------------------------- //
|
||||
// ----------------------------------------------------------------------- //
|
||||
|
||||
// reaction.h: Reaction Levels //
|
||||
// Reaction Levels //
|
||||
#define rl_disastrous (0)
|
||||
#define rl_very_bad (1)
|
||||
#define rl_bad (2)
|
||||
@@ -428,15 +415,11 @@
|
||||
#define rl_very_good (6)
|
||||
#define rl_excellent (7)
|
||||
|
||||
|
||||
// proto.h //
|
||||
//#define LOAD_MAP_INDEX (32)
|
||||
|
||||
// proto.h //
|
||||
#define GENDER_MALE (0)
|
||||
#define GENDER_FEMALE (1)
|
||||
|
||||
|
||||
// critter_state States //
|
||||
#define CRITTER_IS_NORMAL (0)
|
||||
#define CRITTER_IS_DEAD (1)
|
||||
@@ -445,7 +428,6 @@
|
||||
#define is_critter_dead(who) (critter_state(who) bwand CRITTER_IS_DEAD)
|
||||
#define is_critter_prone(who) (critter_state(who) bwand CRITTER_IS_PRONE)
|
||||
|
||||
|
||||
// inventory Equates //
|
||||
#define INVEN_TYPE_WORN (0)
|
||||
#define INVEN_TYPE_RIGHT_HAND (1)
|
||||
@@ -454,7 +436,6 @@
|
||||
#define INVEN_TYPE_INV_COUNT (-2)
|
||||
#define inven_count(WHO) critter_inven_obj(WHO, INVEN_TYPE_INV_COUNT)
|
||||
|
||||
|
||||
// ----------------------------------------------------------------------- //
|
||||
// ----------------------------------------------------------------------- //
|
||||
|
||||
@@ -469,7 +450,6 @@
|
||||
#define item_type_misc_item (5)
|
||||
#define item_type_key_item (6)
|
||||
|
||||
|
||||
/* Item data_members */
|
||||
#define it_pid (0)
|
||||
#define it_name (1)
|
||||
@@ -508,7 +488,6 @@
|
||||
#define CR_BODY_QUADRUPED 1
|
||||
#define CR_BODY_ROBOTIC 2
|
||||
|
||||
|
||||
/* Scenery data_members */
|
||||
#define sc_pid (0)
|
||||
#define sc_name (1)
|
||||
@@ -536,7 +515,6 @@
|
||||
#define wa_material (9)
|
||||
|
||||
/* Tile data_members */
|
||||
// NONE
|
||||
|
||||
/* Misc data_members */
|
||||
#define mi_pid (0)
|
||||
@@ -548,75 +526,37 @@
|
||||
#define mi_flags (6)
|
||||
#define mi_flags_ext (7)
|
||||
|
||||
|
||||
// ----------------------------------------------------------------------- //
|
||||
// ----------------------------------------------------------------------- //
|
||||
|
||||
/* Combat Flags */
|
||||
|
||||
// WIP! These are old and incorrect now, look below! 6/18/97 JLR
|
||||
|
||||
/*
|
||||
#define DAM_KNOCKED_OUT (1) // 0x00000001 // valid flags for damage_results
|
||||
#define DAM_STUNNED (2) // 0x00000002
|
||||
#define DAM_KNOCKED_DOWN (4) // 0x00000004
|
||||
#define DAM_DODGED (8) // 0x00000008
|
||||
#define DAM_CRIP_LEG_LEFT (16) // 0x00000010
|
||||
#define DAM_CRIP_LEG_RIGHT (32) // 0x00000020
|
||||
#define DAM_CRIP_FOOT_LEFT (64) // 0x00000040
|
||||
#define DAM_CRIP_FOOT_RIGHT (128) // 0x00000080
|
||||
#define DAM_CRIP_ARM_LEFT (256) // 0x00000100
|
||||
#define DAM_CRIP_ARM_RIGHT (512) // 0x00000200
|
||||
#define DAM_CRIP_HAND_LEFT (1024) // 0x00000400
|
||||
#define DAM_CRIP_HAND_RIGHT (2048) // 0x00000800
|
||||
#define DAM_BLIND_EYE_LEFT (4096) // 0x00001000
|
||||
#define DAM_BLIND_EYE_RIGHT (8192) // 0x00002000
|
||||
#define DAM_DECAPITATED (16384) // 0x00004000
|
||||
#define DAM_SURPRISED (32768) // 0x00008000
|
||||
#define DAM_DEATH_1 (65536) // 0x00010000
|
||||
#define DAM_DEATH_2 (131072) // 0x00020000
|
||||
#define DAM_DEATH_3 (262144) // 0x00040000
|
||||
#define DAM_HIT (524288) // 0x00080000 // true if hit or critical hit
|
||||
#define DAM_UNBALANCED (1048576) // 0x00100000
|
||||
#define DAM_DEAF (2097152) // 0x00200000
|
||||
#define DAM_DROP_WEAPON (4194304) // 0x00400000
|
||||
#define DAM_BREAK_WEAPON (8388608) // 0x00800000
|
||||
#define DAM_UNREADY_WEAPON_LEFT (16777216) // 0x01000000
|
||||
#define DAM_UNREADY_WEAPON_RIGHT (33554432) // 0x02000000
|
||||
#define DAM_EXPLODE_WEAPON (67108864) // 0x04000000
|
||||
#define DAM_DUD_SHOT (134217728) // 0x08000000
|
||||
#define DAM_IGNORE_DR (268435456) // 0x10000000
|
||||
#define DAM_CRITICAL (536870912) // 0x20000000 // could be a critical hit or critical miss
|
||||
#define DAM_ON_FIRE (1073741824) // 0x40000000
|
||||
*/
|
||||
|
||||
#define DAM_KNOCKED_OUT 1
|
||||
#define DAM_KNOCKED_DOWN 2
|
||||
#define DAM_CRIP_LEG_LEFT 4
|
||||
#define DAM_CRIP_LEG_RIGHT 8
|
||||
#define DAM_CRIP_ARM_LEFT 16
|
||||
#define DAM_CRIP_ARM_RIGHT 32
|
||||
#define DAM_BLIND 64
|
||||
#define DAM_DEAD 128
|
||||
#define DAM_HIT 256
|
||||
#define DAM_CRITICAL 512 // could be a critical hit or critical miss
|
||||
#define DAM_ON_FIRE 1024
|
||||
#define DAM_BYPASS 2048
|
||||
#define DAM_EXPLODE 4096
|
||||
#define DAM_DESTROY 8192
|
||||
#define DAM_DROP 16384
|
||||
#define DAM_LOSE_TURN 32768
|
||||
#define DAM_HIT_SELF 65536
|
||||
#define DAM_LOSE_AMMO 131072
|
||||
#define DAM_DUD 262144
|
||||
#define DAM_HURT_SELF 524288
|
||||
#define DAM_RANDOM_HIT 1048576
|
||||
#define DAM_CRIP_RANDOM 2097152
|
||||
#define DAM_BACKWASH 4194304
|
||||
|
||||
// valid flags for damage_results
|
||||
#define DAM_KNOCKED_OUT 0x1
|
||||
#define DAM_KNOCKED_DOWN 0x2
|
||||
#define DAM_CRIP_LEG_LEFT 0x4
|
||||
#define DAM_CRIP_LEG_RIGHT 0x8
|
||||
#define DAM_CRIP_ARM_LEFT 0x10
|
||||
#define DAM_CRIP_ARM_RIGHT 0x20
|
||||
#define DAM_BLIND 0x40
|
||||
#define DAM_DEAD 0x80
|
||||
#define DAM_HIT 0x100 // hit or critical hit
|
||||
#define DAM_CRITICAL 0x200 // could be a critical hit or critical miss
|
||||
#define DAM_ON_FIRE 0x400
|
||||
#define DAM_BYPASS 0x800
|
||||
#define DAM_EXPLODE 0x1000
|
||||
#define DAM_DESTROY 0x2000
|
||||
#define DAM_DROP 0x4000
|
||||
#define DAM_LOSE_TURN 0x8000
|
||||
#define DAM_HIT_SELF 0x10000
|
||||
#define DAM_LOSE_AMMO 0x20000
|
||||
#define DAM_DUD 0x40000
|
||||
#define DAM_HURT_SELF 0x80000
|
||||
#define DAM_RANDOM_HIT 0x100000
|
||||
#define DAM_CRIP_RANDOM 0x200000
|
||||
#define DAM_BACKWASH 0x400000
|
||||
// Fallout 2:
|
||||
#define DAM_PERFORM_REVERSE 8388608
|
||||
#define critter_uninjure(WHO, FLAGS) critter_injure(WHO, (FLAGS BWOR DAM_PERFORM_REVERSE))
|
||||
#define DAM_PERFORM_REVERSE 0x800000
|
||||
#define critter_uninjure(WHO, FLAGS) critter_injure(WHO, (FLAGS bwor DAM_PERFORM_REVERSE))
|
||||
|
||||
#define DMG_normal_dam 0
|
||||
#define DMG_laser 1
|
||||
@@ -744,11 +684,9 @@
|
||||
#define wm_get_subtile_state(XPOS,YPOS) metarule3(METARULE3_WM_SUBTILE_STATE,XPOS,YPOS,0)
|
||||
|
||||
// Begin <objptr> tile_get_next_critter(tile, elevation, lastCritter)
|
||||
//CMH
|
||||
//Note these defines are really messey.
|
||||
#define METARULE3_TILE_GET_NEXT_CRITTER (106)
|
||||
#define tile_get_next_critter(tile, elevation, lastCritter) metarule3(METARULE3_TILE_GET_NEXT_CRITTER, tile, elevation, lastCritter)
|
||||
//CMH
|
||||
// End
|
||||
|
||||
#define METARULE3_ART_SET_BASE_FID_NUM (107)
|
||||
@@ -780,6 +718,8 @@
|
||||
#define INVEN_CMD_INDEX_PTR (13)
|
||||
#define inven_ptr(WHO,WHERE) inven_cmds(WHO,INVEN_CMD_INDEX_PTR,WHERE)
|
||||
|
||||
|
||||
/* Extra */
|
||||
/* GSound Values */
|
||||
// gsound_character_types
|
||||
#define snd_human (0)
|
||||
@@ -820,14 +760,10 @@
|
||||
#define hit_left_weapon_reload (6)
|
||||
#define hit_right_weapon_reload (7)
|
||||
|
||||
/* Extra */
|
||||
|
||||
#define fadeout(X) gfade_out(X)
|
||||
#define fadein(X) gfade_in(X)
|
||||
|
||||
#define fade_out gfade_out(1)
|
||||
#define fade_in gfade_in(1)
|
||||
|
||||
/* Time Information (in Ticks) */
|
||||
|
||||
#define ONE_GAME_SECOND (10)
|
||||
#define ONE_GAME_MINUTE (60 * ONE_GAME_SECOND)
|
||||
#define ONE_GAME_HOUR (60 * ONE_GAME_MINUTE)
|
||||
@@ -840,56 +776,35 @@
|
||||
#define bit_2 (2)
|
||||
#define bit_3 (4)
|
||||
#define bit_4 (8)
|
||||
#define bit_5 (16)
|
||||
#define bit_6 (32)
|
||||
#define bit_7 (64)
|
||||
#define bit_8 (128)
|
||||
#define bit_9 (256)
|
||||
#define bit_10 (512)
|
||||
#define bit_11 (1024)
|
||||
#define bit_12 (2048)
|
||||
#define bit_13 (4096)
|
||||
#define bit_14 (8192)
|
||||
#define bit_15 (16384)
|
||||
#define bit_16 (32768)
|
||||
#define bit_17 (65536)
|
||||
#define bit_18 (131072)
|
||||
#define bit_19 (262144)
|
||||
#define bit_20 (524288)
|
||||
#define bit_21 (1048576)
|
||||
#define bit_22 (2097152)
|
||||
#define bit_23 (4194304)
|
||||
#define bit_24 (8388608)
|
||||
#define bit_25 (16777216)
|
||||
#define bit_26 (33554432)
|
||||
#define bit_27 (67108864)
|
||||
#define bit_28 (134217728)
|
||||
#define bit_29 (268435456)
|
||||
#define bit_30 (536870912)
|
||||
#define bit_31 (1073741824)
|
||||
#define bit_32 (-2147483648)
|
||||
#define bit_ALL (-1)
|
||||
|
||||
/* macros for pickup_p_proc responses. */
|
||||
#define REACTION_TG 1
|
||||
#define REACTION_G 2
|
||||
#define REACTION_TC 3
|
||||
#define REACTION_C 4
|
||||
|
||||
#define R_CALL_THROUGH 1
|
||||
#define R_NOCALL_THROUGH -1
|
||||
|
||||
#ifndef PICKUP_THRESH
|
||||
#define PICKUP_THRESH 1
|
||||
#endif
|
||||
|
||||
#ifndef CALL_PICKUP
|
||||
#define CALL_PICKUP R_NOCALL_THROUGH
|
||||
#endif
|
||||
|
||||
#ifndef NPC_REACTION_VAR
|
||||
#define NPC_REACTION_VAR (-1)
|
||||
#endif
|
||||
#define bit_5 (0x10)
|
||||
#define bit_6 (0x20)
|
||||
#define bit_7 (0x40)
|
||||
#define bit_8 (0x80)
|
||||
#define bit_9 (0x100)
|
||||
#define bit_10 (0x200)
|
||||
#define bit_11 (0x400)
|
||||
#define bit_12 (0x800)
|
||||
#define bit_13 (0x1000)
|
||||
#define bit_14 (0x2000)
|
||||
#define bit_15 (0x4000)
|
||||
#define bit_16 (0x8000)
|
||||
#define bit_17 (0x10000)
|
||||
#define bit_18 (0x20000)
|
||||
#define bit_19 (0x40000)
|
||||
#define bit_20 (0x80000)
|
||||
#define bit_21 (0x100000)
|
||||
#define bit_22 (0x200000)
|
||||
#define bit_23 (0x400000)
|
||||
#define bit_24 (0x800000)
|
||||
#define bit_25 (0x1000000)
|
||||
#define bit_26 (0x2000000)
|
||||
#define bit_27 (0x4000000)
|
||||
#define bit_28 (0x8000000)
|
||||
#define bit_29 (0x10000000)
|
||||
#define bit_30 (0x20000000)
|
||||
#define bit_31 (0x40000000)
|
||||
#define bit_32 (0x80000000)
|
||||
#define bit_ALL (0xFFFFFFFF)
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -70,6 +70,7 @@
|
||||
#define WINTYPE_CHARACTER (5)
|
||||
#define WINTYPE_SKILLDEX (6)
|
||||
#define WINTYPE_ESCMENU (7) // escape menu
|
||||
#define WINTYPE_AUTOMAP (8)
|
||||
|
||||
//Valid flags for force_encounter_with_flags
|
||||
#define ENCOUNTER_FLAG_NO_CAR (0x1)
|
||||
@@ -234,8 +235,8 @@
|
||||
#define party_member_list_all party_member_list(1)
|
||||
|
||||
// fake perks/traits add mode flags
|
||||
#define ADD_PERK_MODE_TRAIT (1) // add to the player's traits
|
||||
#define ADD_PERK_MODE_PERK (2) // add to the player's perks
|
||||
#define ADD_PERK_MODE_TRAIT (1) // add to the player's traits list
|
||||
#define ADD_PERK_MODE_PERK (2) // add to the player's perks list
|
||||
#define ADD_PERK_MODE_REMOVE (4) // remove from the list of selectable perks (after added to the player)
|
||||
|
||||
// instantly apply the item to dude_obj (w/o animation)
|
||||
@@ -244,19 +245,35 @@
|
||||
use_obj_on_obj(item, dude_obj); \
|
||||
set_self(0)
|
||||
|
||||
// sfall_funcX macros
|
||||
// returns the corrected tile distance between two objects to the distance variable (return value >= 9996 is an error when getting the distance)
|
||||
#define distance_objs(distance, obj1, obj2) distance := tile_distance_objs(obj1, obj2) - 1; \
|
||||
if (get_flags(obj1) bwand FLAG_MULTIHEX) then distance--; \
|
||||
if (get_flags(obj2) bwand FLAG_MULTIHEX) then distance--
|
||||
|
||||
|
||||
/* sfall metarule3 function macros */
|
||||
// sets the number of days (range 1...127) for the Frank Horrigan encounter, or disable the encounter if days is set to 0
|
||||
#define set_horrigan_days(day) metarule3(200, day, 0, 0)
|
||||
// clears the keyboard input buffer, use it in the HOOK_KEYPRESS hook to clear keyboard events before calling functions that are waiting for keyboard input
|
||||
#define clear_keyboard_buffer metarule3(201, 0, 0, 0)
|
||||
|
||||
|
||||
/* sfall_funcX macros */
|
||||
#define add_global_timer_event(time, fixedParam) sfall_func2("add_g_timer_event", time, fixedParam)
|
||||
#define add_iface_tag sfall_func0("add_iface_tag")
|
||||
#define add_trait(traitID) sfall_func1("add_trait", traitID)
|
||||
#define art_cache_clear sfall_func0("art_cache_clear")
|
||||
#define attack_is_aimed sfall_func0("attack_is_aimed")
|
||||
#define car_gas_amount sfall_func0("car_gas_amount")
|
||||
#define clear_window sfall_func0("win_fill_color")
|
||||
#define combat_data sfall_func0("combat_data")
|
||||
#define create_win(winName, x, y, w, h) sfall_func5("create_win", winName, x, y, w, h)
|
||||
#define create_win_flag(winName, x, y, w, h, flag) sfall_func6("create_win", winName, x, y, w, h, flag)
|
||||
#define critter_inven_obj2(obj, type) sfall_func2("critter_inven_obj2", obj, type)
|
||||
#define dialog_obj sfall_func0("dialog_obj")
|
||||
#define display_stats sfall_func0("display_stats")
|
||||
#define draw_image(pathFile, frame, x, y, noTrans) sfall_func5("draw_image", pathFile, frame, x, y, noTrans)
|
||||
#define draw_image_scaled(pathFile, frame, x, y, w, h) sfall_func6("draw_image_scaled", pathFile, frame, x, y, w, h)
|
||||
#define draw_image(artFile, frame, x, y, noTrans) sfall_func5("draw_image", artFile, frame, x, y, noTrans)
|
||||
#define draw_image_scaled(artFile, frame, x, y, w, h) sfall_func6("draw_image_scaled", artFile, frame, x, y, w, h)
|
||||
#define exec_map_update_scripts sfall_func0("exec_map_update_scripts")
|
||||
#define floor2(value) sfall_func1("floor2", value)
|
||||
#define get_current_inven_size(obj) sfall_func1("get_current_inven_size", obj)
|
||||
@@ -269,9 +286,19 @@
|
||||
#define get_metarule_table sfall_func0("get_metarule_table")
|
||||
#define get_object_data(obj, offset) sfall_func2("get_object_data", obj, offset)
|
||||
#define get_outline(obj) sfall_func1("get_outline", obj)
|
||||
#define get_pc_stat_max(stat) sfall_func1("get_stat_max", stat)
|
||||
#define get_pc_stat_min(stat) sfall_func1("get_stat_min", stat)
|
||||
#define get_npc_stat_max(stat) sfall_func2("get_stat_max", stat, 1)
|
||||
#define get_npc_stat_min(stat) sfall_func2("get_stat_min", stat, 1)
|
||||
#define get_sfall_arg_at(argNum) sfall_func1("get_sfall_arg_at", argNum)
|
||||
#define get_text_width(text) sfall_func1("get_text_width", text)
|
||||
#define hide_window(winName) sfall_func1("hide_window", winName)
|
||||
#define interface_art_draw(winID, artFile, x, y) sfall_func4("interface_art_draw", winID, artFile, x, y)
|
||||
#define interface_art_draw_frame(winID, artID, x, y, frame) sfall_func5("interface_art_draw", winID, artID, x, y, frame)
|
||||
#define interface_art_draw_ex(winID, artID, x, y, frame, param) sfall_func6("interface_art_draw", winID, artID, x, y, frame, param)
|
||||
#define interface_print(text, winType, x, y, color) sfall_func5("interface_print", text, winType, x, y, color)
|
||||
#define interface_print_width(text, winType, x, y, color, w) sfall_func6("interface_print", text, winType, x, y, color, w)
|
||||
#define interface_redraw_all sfall_func1("intface_redraw", 1)
|
||||
#define intface_hide sfall_func0("intface_hide")
|
||||
#define intface_is_hidden sfall_func0("intface_is_hidden")
|
||||
#define intface_is_shown(winType) sfall_func1("get_window_attribute", winType)
|
||||
@@ -290,6 +317,7 @@
|
||||
#define real_dude_obj sfall_func0("real_dude_obj")
|
||||
#define remove_all_timer_events sfall_func0("remove_timer_event")
|
||||
#define remove_timer_event(fixedParam) sfall_func1("remove_timer_event", fixedParam)
|
||||
#define set_car_intface_art(artIndex) sfall_func1("set_car_intface_art", artIndex)
|
||||
#define set_cursor_mode(mode) sfall_func1("set_cursor_mode", mode)
|
||||
#define set_flags(obj, flags) sfall_func2("set_flags", obj, flags)
|
||||
#define set_iface_tag_text(tag, text, color) sfall_func3("set_iface_tag_text", tag, text, color)
|
||||
@@ -314,5 +342,6 @@
|
||||
#define unjam_lock(obj) sfall_func1("unjam_lock", obj)
|
||||
#define unset_unique_id(obj) sfall_func2("set_unique_id", obj, -1)
|
||||
#define unwield_slot(critter, slot) sfall_func2("unwield_slot", critter, slot)
|
||||
#define win_fill_color(x, y, width, height, color) sfall_func5("win_fill_color", x, y, width, height, color)
|
||||
|
||||
#endif
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user