Hard Light Productions Forums
Modding, Mission Design, and Coding => FS2 Open Coding - The Source Code Project (SCP) => Nightly Builds => Topic started by: Zacam on November 06, 2009, 01:32:53 am
-
Here is the nightly for Windows on 05 Nov 2009 - Revision 5641
fso-WIN-20091105_r5641-SSE.7z (http://www.mediafire.com/file/z0fy1ze2zzw/fso-WIN-20091105_r5641-SSE.7z)
MD5Sum: 1FBD2494BAFFECD4459CFE619D7460D8
fso-WIN-20091105_r5641-SSE2.7z (http://www.mediafire.com/file/yt0ztjytdmn/fso-WIN-20091105_r5641-SSE2.7z)
MD5Sum: CC8D74BF14DD4ACA8657E30262E69A6A
fso-WIN-20091105_r5641-INF-SSE.7z (http://www.mediafire.com/file/nhi43ywtomm/fso-WIN-20091105_r5641-INF-SSE.7z)
MD5Sum: EB418182B3CD1FBA3980D66876CFF42B
fso-WIN-20091105_r5641-INF-SSE2.7z (http://www.mediafire.com/file/nlfekttxmkm/fso-WIN-20091105_r5641-INF-SSE2.7z)
MD5Sum: CEB5D070E095989154F3C475D9AE41AA
All packages also include the PDB files necessary for Debugging and posting errors.
This now includes Release versions of FRED in all flavors.
------------------------------------------------------------------------
r5637 | portej05 | 2009-11-02 23:28:25 -0800 (Mon, 02 Nov 2009) | 1 line
Changed paths:
M /trunk/fs2_open/code/lab/wmcgui.cpp
Fix Assert in WMCGUI.cpp (Vector subscript out of range)
------------------------------------------------------------------------
r5639 | portej05 | 2009-11-04 05:03:02 -0800 (Wen, 04 Nov 2009) | 2 lines
Changed paths:
M /trunk/fs2_open/code/globalincs/windebug.cpp
Fix for memory debugging functions.
Totals are now more accurate!
------------------------------------------------------------------------
r5640 | karajorma | 2009-11-04 22:16:15 -0800 (Wen, 04 Nov 2009) | 1 line
Changed paths:
M /trunk/fs2_open/code/parse/sexp.cpp
M /trunk/fs2_open/code/weapon/swarm.cpp
Doh x2
------------------------------------------------------------------------
r5641 | Sushi | 2009-11-05 14:46:54 -0800 (Thu, 05 Nov 2009) | 1 line
Changed paths:
M /trunk/fs2_open/code/ai/ai.h
M /trunk/fs2_open/code/ai/aibig.cpp
M /trunk/fs2_open/code/ai/aicode.cpp
AI Profiles entries in AI.tbl are now overrides instead of multipliers.
------------------------------------------------------------------------
***Please note: For those of you counting on the Multipliers version of the AI flags, make a version based on over-rides to test the behaviour with, but be aware that the final release code may be in multipliers or a mixed bag.
This portion of the code is still volatile and as with anything, subject to change until Final is released.
-
Thank you Sushi & Zacam. :) Finally got rid of those stupid multipliers.
-
This portion of the code is still volatile and as with anything, subject to change until Final is released.
And even then if we realize something completely sucks. Tune in next week to find out what I'm rambling about!
-
The use of overrides instead of multipliers presents a big problem for multiple ai_profiles where you want to have things like $Glide Strafe Percent: off by default but have an alternate profile where it is on. With the multipliers you could set each AI class and then just set the defaults in the additional ai_profile. With overrides there is no way to set up a system like this. This build makes all these features totally useless for TBP.
-
Use of multipliers poses different problem. With multipliers you're forced to have settings like $Glide Strafe Percent in ai_profiles, which takes effect in all AI classes. This is something you may not want.
Consider a situation where you do not want retail AI classes to make use of any of the new AI features, but you still want to have custom AI classes to do just that. With multipliers that is not possible. Flags like $allow vertical dodge isn't AFAIK supported in ai.tbl, but that's a minor issue really and still close enough to retail behavior.
Multipliers would probably be better for total conversions who do not use or need retail AI classes, but for mods overrides work better. Multipliers are also annoying to calculate for every single AI class and difficulty level, you just can't look at the value in ai.tbl and see what it really translates to. I prefer overrides for its simplicity.
-
I agree they are a pain to calculate but preserving retail behavior (in this case TBP final behavior) is exactly what I am trying to do. Adding a new profile that allows the FREDder to pick if he wants to use the new glide features or not by choosing the appropriate profile. This cannot be done with overrides.
Another solution might be to have the toggle in ai_profiles and use overrides in AI. So if a particular ai_profiles has the feature disabled it just ignores the overrides.
BTW Allow vertical dodge is supported in AI.tbl http://www.hard-light.net/wiki/index.php/Ai.tbl#AI_Profiles_Overrides
-
While getting a haircut I was thinking about a solution.
Normally ai.tbl entry is like this (taken from the wiki entry)
$Name: Captain
$accuracy: 0.5 0.55 0.6 0.65 0.7
$evasion: 10, 20, 30, 40, 50
$courage: 10, 20, 30, 40, 50
$patience: 10, 20, 30, 40, 50
$Get Away Chance: 0.40, 0.45, 0.50, 0.55, 0.6
$Autoscale by AI Class Index: NO
$AI In Range Time: 2, 1.6, 1.2, 0.8, 0.4
$Primary Ammo Burst Multiplier: 0.6, 0.65, 0.7, 0.75, 0.8
$Glide Attack Percent: 30, 40, 50, 60, 70
$allow rapid secondary dumbfire: NO
$allow vertical dodge: YES
Now, to use one AI class with multiple AI profiles, you could use something like this
$Name: Captain
$accuracy: 0.5 0.55 0.6 0.65 0.7
$evasion: 10, 20, 30, 40, 50
$courage: 10, 20, 30, 40, 50
$patience: 10, 20, 30, 40, 50
$Get Away Chance: 0.40, 0.45, 0.50, 0.55, 0.6
$Autoscale by AI Class Index: NO
$AI In Range Time: 2, 1.6, 1.2, 0.8, 0.4
$Primary Ammo Burst Multiplier: 0.6, 0.65, 0.7, 0.75, 0.8
$Glide Attack Percent: 30, 40, 50, 60, 70
$allow rapid secondary dumbfire: NO
$allow vertical dodge: YES
$Profile: CustomProfile1
$Primary Ammo Burst Multiplier: 0.7, 0.75, 0.8, 0.85, 0.9
$Glide Attack Percent: 40, 50, 60, 70, 80
$Profile: CustomProfile2
$Primary Ammo Burst Multiplier: 0, 0, 0, 0, 0
$Glide Attack Percent: 0, 0, 0, 0, 0
In above example, when AI profile called CustomProfile1 is selected, AI class uses higher $Primary Ammo Burst Multiplier and $Glide Attack Percent values, overriding those that were set above $Profile: CustomProfile. And when profile called CustomProfile2 is used, those are disabled.
How does this sound?
-
Apparently, we're damned if we do and damned if we don't. :mad: Both ways screw somebody over. I still think overrides are the lesser evil, but we need to do something about FUBAR's scenario too...
I think Fury's idea is going in the right direction, although I'd be inclined to move the profile-switch stuff to a higher level, outside of the AI classes. So the structure of AI.tbl could be something like this.
(AI Class)
(AI Class)
(AI Class)
.
.
.
#AI Profile Name
(AI Class overrides)
(AI Class overrides)
#end
#AI Profile Name
(AI Class overrides)
(AI Class overrides)
#end
The initial AI classes would be the defaults. But then, if you specify an AI profile, you can specify modifications to those AI classes that only apply to specific AI profiles. All of the stuff involving profiles would, of course, be optional.
Or, a completely alternative approach would be an AI Profiles YES/NO flag that specifies whether the override or multiplier method is used.
This discussion should probably be split out of this thread, too, and moved somewhere with a bit greater visibility.
-
Not 100% certain but it seems to be a 180 from what I was proposing and I don't see how it would work with an ai_profile that doesn't have things like $Glide Attack Percent. I do think we are on the same page though
What I was thinking was something like this:
AI profiles has 2 entries. This is the original one:
$Profile Name: TBP
$Player Afterburner Recharge Scale: 5, 3, 2, 1.5, 1
$Max Beam Friendly Fire Damage: 0, 5, 10, 20, 30
$Player Countermeasure Life Scale: 3, 2, 1.5, 1.25, 1
$AI Countermeasure Firing Chance: 0.2, 0.3, 0.5, 0.9, 1.1
$AI In Range Time: 2, 1.4, 0.75, 0, -1
$AI Always Links Ammo Weapons: 95, 80, 60, 40, 20
$AI Maybe Links Ammo Weapons: 90, 60, 40, 20, 10
$AI Always Links Energy Weapons: 100, 80, 60, 40, 20
$AI Maybe Links Energy Weapons: 90, 60, 40, 20, 10
$Max Missles Locked on Player: 2, 3, 4, 7, 99
$Max Player Attackers: 2, 3, 4, 5, 99
$Max Incoming Asteroids: 1, 1, 2, 2, 3
$Player Damage Factor: 0.25, 0.5, 0.65, 0.85, 1
$Player Subsys Damage Factor: 0.2, 0.4, 0.6, 0.8, 1
$Predict Position Delay: 2, 1.5, 1.33, 0.5, 0
$AI Shield Manage Delay: 5, 4, 2.5, 1.2, 0.1
$Friendly AI Fire Delay Scale: 2, 1.4, 1.25, 1.1, 1
$Hostile AI Fire Delay Scale: 4, 2.5, 1.75, 1.25, 1
$AI Turn Time Scale: 3, 2.2, 1.6, 1.3, 1
$Player Shield Recharge Scale: 4, 2, 1.5, 1.25, 1
$Player Weapon Recharge Scale: 10, 4, 2.5, 2, 1.5
$big ships can attack beam turrets on untargeted ships: YES
$smart primary weapon selection: YES
$smart secondary weapon selection: YES
$smart shield management: NO
$allow rapid secondary dumbfire: NO
$huge turret weapons ignore bombs: NO
$don't insert random turret fire delay: YES
$hack improve non-homing swarm turret fire accuracy: YES
$shockwaves damage small ship subsystems: YES
$navigation subsystem governs warpout capability: NO
$ignore lower bound for minimum speed of docked ship: NO
$multi allow empty secondaries: YES
$allow event and goal scoring in multiplayer: YES
As you can see there is no ability for any of the new features even defined. An additional profile to use them could look something like this:
$Profile Name: TBP_Glide
$Player Afterburner Recharge Scale: 5, 3, 2, 1.5, 1
$Max Beam Friendly Fire Damage: 0, 5, 10, 20, 30
$Player Countermeasure Life Scale: 3, 2, 1.5, 1.25, 1
$AI Countermeasure Firing Chance: 0.2, 0.3, 0.5, 0.9, 1.1
$AI In Range Time: 2, 1.4, 0.75, 0, -1
$AI Always Links Ammo Weapons: 95, 80, 60, 40, 20
$AI Maybe Links Ammo Weapons: 90, 60, 40, 20, 10
$AI Always Links Energy Weapons: 100, 80, 60, 40, 20
$AI Maybe Links Energy Weapons: 90, 60, 40, 20, 10
$Max Missles Locked on Player: 2, 3, 4, 7, 99
$Max Player Attackers: 2, 3, 4, 5, 99
$Max Incoming Asteroids: 1, 1, 2, 2, 3
$Player Damage Factor: 0.25, 0.5, 0.65, 0.85, 1
$Player Subsys Damage Factor: 0.2, 0.4, 0.6, 0.8, 1
$Predict Position Delay: 2, 1.5, 1.33, 0.5, 0
$AI Shield Manage Delay: 5, 4, 2.5, 1.2, 0.1
$Friendly AI Fire Delay Scale: 2, 1.4, 1.25, 1.1, 1
$Hostile AI Fire Delay Scale: 4, 2.5, 1.75, 1.25, 1
$AI Turn Time Scale: 3, 2.2, 1.6, 1.3, 1
$Glide Strafe Percent Enable: Yes
$Glide Strafe Percent: 40, 50, 60, 70, 80
$Player Shield Recharge Scale: 4, 2, 1.5, 1.25, 1
$Player Weapon Recharge Scale: 10, 4, 2.5, 2, 1.5
$big ships can attack beam turrets on untargeted ships: YES
$smart primary weapon selection: YES
$smart secondary weapon selection: YES
$smart shield management: NO
$allow rapid secondary dumbfire: NO
$huge turret weapons ignore bombs: NO
$don't insert random turret fire delay: YES
$hack improve non-homing swarm turret fire accuracy: YES
$shockwaves damage small ship subsystems: YES
$navigation subsystem governs warpout capability: NO
$ignore lower bound for minimum speed of docked ship: NO
$multi allow empty secondaries: YES
$allow event and goal scoring in multiplayer: YES
In this example I only enabled $glide strafe percent. The line for enable may not be needed it may just be enabled automatically if the values aren't all 0.
Sorry was replying while Sushi replied.........
-
My proposal would cover what you're trying to do: the only difference is that instead of modifying the new AI profile directly, you'd modify an override for it in AI.tbl. In other words, you'd just add something to AI.tbl which says "when the AI profile is X, the AI class is adjusted like Y..."
So, at the bottom of AI.tbl, you'd add something like:
#Profile TBP_Glide
$Name: Captain
$Glide Attack Percent: 40, 50, 60, 70, 80
$Name: Major
$Glide Attack Percent: 45, 55, 65, 75, 85
#end
Except with all of the AI classes now capable of gliding listed.
-
OK I see what you mean. That would probably work well and could in the long run be more flexible.
-
Consensus! Yay!
-
I would like to point out that instead of having profile-specific overrides at the end of ai.tbl, it would be better if located within the AI class as in my example. There you can compare global and profile specific settings in one glance, instead of scrolling back and forth to compare values of one and same AI class.
-
I would like to point out that instead of having profile-specific overrides at the end of ai.tbl, it would be better if located within the AI class as in my example. There you can compare global and profile specific settings in one glance, instead of scrolling back and forth to compare values of one and same AI class.
Maybe. FUBAR & others, what do you think?
I do think that all others being equal, the parse code will be easier if I move the profile-specific section to the end. Remember, the current AI profile isn't known at the time the tables are parsed, so I'm going to have to store all the info somewhere until mission-loading time.
I haven't yet decided if it would be better to store a separate set of AI classes for each possible AI Profile or to create a more specialized data structure for Profile-specific AI class settings.
-
I think putting it all under one AI while a decent idea for a few ai_profiles will start to get really messy and harder to read the more profiles you have. Having the default profile be the default and the overrides for all others grouped by profile would be much easier. A third solution might be going back to only retail entries for each AI class then having a separate overrides section for each profile. Something like this:
$Name: Coward
$accuracy: 0.8 0.85 0.9 0.95 1.0
$evasion: 40, 50, 60, 80, 100
$courage: 50, 50, 50, 50, 50
$patience: 40, 50, 60, 80, 100
$Name: Captain
$accuracy: 0.5 0.55 0.6 0.65 0.7
$evasion: 10, 20, 30, 40, 50
$courage: 10, 20, 30, 40, 50
$patience: 10, 20, 30, 40, 50
$Name: Colonel
$accuracy: 0.7 0.75 0.8 0.85 0.9
$evasion: 30, 40, 50, 70, 90
$courage: 30, 40, 50, 70, 90
$patience: 30, 40, 50, 70, 90
$Name: General
$accuracy: 0.8 0.85 0.9 0.95 1.0
$evasion: 40, 50, 60, 80, 100
$courage: 40, 50, 60, 80, 100
$patience: 40, 50, 60, 80, 100
$Name: Perfect
$accuracy: 1.0 1.0 1.0 1.0 1.0
$evasion: 100, 100, 100, 100, 100
$courage: 100, 100, 100, 100, 100
$patience: 100, 100, 100, 100, 100
#Overrides
$Profile: TBP
$Class: Captain
+Glide Attack Percent: 20, 30, 40, 50, 60
$Class: General
+Glide Attack Percent: 60, 75, 85, 95, 100
$Profile: Glide
$$allow vertical dodge: YES
$Class: Captain
+Glide Attack Percent: 40, 50, 60, 70, 80
$Class: General
+Glide Attack Percent: 60, 70, 80, 90, 100
$Profile: Multi
$allow vertical dodge: YES
$Class: Captain
+Glide Attack Percent: 45, 55, 65, 75, 85
$Class: General
+Glide Attack Percent: 60, 70, 80, 90, 100
$End
So it's like reading a mini AI profile for each AI class. You could even copy all the AI profile settings that can be changed to each override even if you don't change them for ease of reading.