AE:Projectile awareness

From OniGalore
Jump to navigation Jump to search

A page to document fixes to the awareness system

Documentation

Particles spawned with Dodge and alert radii (one without the other won't work so well), gain danger spheres, which can be seen with "ai_showprojectiles = 1". While inside the red sphere (alert), nothing really happens, except that the AI is alerted. When it inside the blue sphere, the AI will attempt to escape outside of the sphere, if the sphere was configured properly. To see if everything is working properly, turn on "ai_showpaths = 1". There should be two blue lines that project out of all AIs who are on the sphere's border or inside the sphere, toward the sphere, no matter where the AI or the sphere goes. (GIF screenshot coming soon)

Things that need to be done to avoid breaking AI danger awareness and dodging:

  • Danger sphere particles should not be attached to a character, wall, or anything else.
  • Danger sphere particles should not rapidly move and change direction.
  • Danger sphere particles must be moving (very slow moving works).
  • Danger sphere particles must have a dodge radius.

Fixing the Engine

PC Version

Offset Old hex New hex Description
0x0009C07C
0x0009C080
0x0009C084
0x0009C110
30
34
38
30
6C
70
74
6C
projectile awareness fixed

All but the last one should be in the latest EXE.

Mac Version

Offset Old hex New hex Description
0x0001650C
0x00016510
0x00016514
0x00016568
0x0001656C
0x00016574
0x0001655C
D1 41 00 5C
D1 01 00 60
D1 21 00 64
C0 01 00 60
C1 A1 00 5C
C0 21 00 64
ED 6B
C0 01 00 74
C1 A1 00 78
C0 21 00 7C
7F 86 E3 78
7F 86 E3 78
7F 86 E3 78
EC 2B
projectile awareness fixed

Fixing AI Logic

Every ONCC has set of parameters which adjust how this ONCC will react on firingspread (ai2_showfiringspreads=1) and projectile dodge sphere (ai2_showprojectiles=1, it is blue sphere). Some of them are already known, some are not. Help please, user:Neo ^_^?


0x128 : General AI2 options:, those bits which interest us are:

  • 0x02 - firingspread/projectile dodge enabled for melee, with weapon AI2 does NOT dodge
  • 0x04 - requires 0x02 to be set; firingspread/projectile dodge enabled for weapons; if AI2 is armed, it tries to face shooter and fire back while dodging.
  • 0x08 - requires 0x02 to be set, overrides 0x04 if both are set; firingspread/projectile dodge enabled for weapons; if AI2 is armed, it doesn't shoot back, just tends to run away, not facing shooter (maybe behavior for case when civillians pick up weapon?)
  • 0x10 - unknown; only "advanced" classes (Konoko, Muro, Mukade, red Furies, red Elites and some more) have this bit set, I have feeling it does something with gunfire dodging, Neo help please?


Next, when bits are properly set, we can set these parameters:

Offset Type Raw Hex Value Description
0x134 int16 0F 00 15 minimal count of frames spent in "danger" zone (firingspread/projectile) after which AI2 will start reacting on it. I can catch why it is here, but let's take into account fact that player can react on sight of armed enemy. AI2 can react only on firingspread/projectile. So in case of AE AI2, I reccomend this field to be 4x nice big ZERO ^_^
0x136 int16 00 00 0 maximal count of frames for AI2 to realize it is in "danger" zone; again I reccomend to set it zero.
0x138 float 00 00 80 3F 1.000000 dodge timer; for how long should AI2 maintain dodge vector when it was created. From what I have seen, AI2 cannot create more than ONE dodge vector. So beware with this value and set it low (but not too much low or character will not react on dodge vector). If you set it high, you will see dodge wall bug pretty often.
0x13C float 00 00 80 3F 1.000000 dodge vector size; how much is AI2 forced to dodge from its original path; again be cautious, if you set it high, you will see dodge wall bug pretty often.
0x140 float 00 00 00 3F 0.500000 unknown; always the same
0x144 float 00 00 C8 41 25.000000 unknown; always the same
0x148 float 00 00 80 3F 1.000000 unknown
0x14C int32 00 00 00 00 0 unknown, affects only AI2 with weapon; if you set it, armed AI2 tends to predict its target's movement, experiment with it and see weird results. Try setting it small value (like 14 00 00 00), then try big value (like 80 00 00 00). With small value I got something like semi-random-AI2-movement.
0x150 int32 05 00 00 00 5 unknown
0x154 int32 0F 00 00 00 15 unknown
0x158 int32 3C 00 00 00 60 unknown


Rest of fileds ("unknown") can be affecting gunfire dodging, but up to this day I haven't figured how. If somebody can, I would be grateful.


Nightmare of AI2 modder: dodge wall bug

  • When AI2 is trying to dodge and it collides with certain types of tiles in pathfinding grid, it tries to slide along and continue dodging. However, if vector aims directly into line of stop-dodge tiles (90°), then AI2 stops at the line and "waits" until vector disappears. Which results in stupid-looking bahavior X_X.
Stop-dodge tiles:
IMPASSABLE (red)
DANGER (orange)
DARK GREEN (stairs)
DARK BLUE & BLUE (Border4, Border3)

How to minimize appearance of dodge wall bug : correctly set dodge timer and dodge vector size to small values, so you have high chance that when near stop-dodge tiles, AI2 will compute next vector that will point along wall, not inside wall. But even then it still happens. Anybody has source for fix ^_^ ?


Enemy awarerness and firingspread/projectile dodging:

In order to be able to dodge, AI2 has to be in definite mode with attacker. That is state when either this AI2 sees attacker with his central vision field (see ONCC) or it was told about enemy via script(ai2_attack "attacker" "victim" for example). Definite mode lasts from last central vision field contact until hostilethreat timer (see ONCC) runs out. During this period, AI2 is given exact location of the enemy it has definite mode with as a flag where it should move.
I don't know why it is that way, but let's accept it until Neo finds it and sees what can be done. If dodging procedure needs coordinates of some enemy in order to work, we can make workaround that it is given some default values (0,0,0 ^_^) if there are currently not any other valid values. And if it is that way that dodging is simply allowed only for "definite mode" AI2s, then we (Neo ^_^) could redirect it so it is avilable for strong awareness mode as well. Since any damage or projectile's red (alert ^_^) sphere put AI2 into "strong mode", it would be enough.

For info about awareness modes, pursuit etc. see CHAR. Maybe you will learn here something abut weird behavior you can sometimes see from AI2s ^_♦.


Fixing the Mad Bomber

Even if you have a fixed Engine and AI, characters will not avoid the Mad Bomber properly. While they may dodge, it will only be in one direction. This is because the sphere is completely static. Luckily for us, this is fixable.

You need to export the particle named "BINA3RAPmad_p04" to an XML file (back it up before making any changes).

Make sure the following lines are set properly:

       <Properties>
           <HasVelocity>true</HasVelocity>
           <HasOrientation>true</HasOrientation>
           <HasPositionOffset>false</HasPositionOffset>
           <HasAttachmentMatrix>false</HasAttachmentMatrix>
           <HasAttractor>true</HasAttractor>
       </Properties>

Now change <Events /> to:

        <Events>
            <Update>
                <AttractHoming>
                    <TurnSpeed>1000</TurnSpeed>
                    <PredictPos>0</PredictPos>
                    <HorizOnly>0</HorizOnly>
                </AttractHoming>
                <SetVelocity>
                    <Speed>10</Speed>
                    <Space>1</Space>
                    <NoSideways>0</NoSideways>
		</SetVelocity>
            </Update>
	</Events>

Finally, change the <Attractor> tags to read:

       <Attractor>
           <Target>Characters</Target>
           <Selector>Distance</Selector>
           <Class />
           <MaxDistance>100</MaxDistance>
           <MaxAngle>60</MaxAngle>
           <AngleSelectMin>0</AngleSelectMin>
           <AngleSelectMax>360</AngleSelectMax>
           <AngleSelectWeight>3</AngleSelectWeight>
       </Attractor>

Replace the old BINA3RAPmad_p04.oni with this one, recombine your level0, and enjoy your new and improved bomber.