TUTORIAL: Assignment.act file (Updated)

Resources for NBA Live 2005.

TUTORIAL: Assignment.act file (Updated)

Postby CarolusXCI on Tue Dec 26, 2023 3:35 am

Note: based on Patr1ck's (Pdub) tutorial from 2007, I decided to write this (updated) one, with some new discoveries and also more accurate descriptions for some of the features present within the file.

Assignment.act is a file that is contained within ai/aiact.viv. It is the main set of instructions used by the AI during its offensive situations. It can be exported from aiact.viv using EA Graphics Editor or bigGUI, edited using notepad and then imported back using the same tools.

This file comprised of four sections, each with a specific function, namely:

- QUALIFICATION: defines actors (i.e. players) that are going to perform some actions depending on some situations, based on qualifiers.
- SITUATION: defines specific in-game situations, also based on dozens of different qualifiers.
- ACTION: defines individual actions, such as “pass”, “shoot”, “pump fake”, etc. It works almost like buttons to be pressed by the AI.
- JOB: chains the other sections together into instructions to the AI.

QUALIFICATION

The QUALIFICATION section looks like this:

Code: Select all
QUALIFICATION
25
_DEFAULT/0!0!0!0!0!0!0!0!0!0!0!;
All players/31!0!0!0!0!0!0!0!0!0!0!;
Perimeter players/30!0!0!0!0!0!0!0!0!0!0!;
Post players/3!0!0!0!0!0!0!0!0!0!0!;
Point guard/16!0!0!0!0!0!0!0!0!0!0!;
Good 3pt shooter/31!0!0!0!0!0!0!0!70!0!0!;
Good inside scoring/31!0!0!0!0!0!0!0!0!70!0!;
Good dribble /31!70!70!70!0!0!0!0!0!0!0!;

Just a side note: by default the entries come one after another on a single line, but you can press enter after every “;” sign to make it easier to read. The game will load it normally.

The first number determines the number of individual entries within this section (in this case "25"). Each entry is comprised of a label (important for identification purposes only), as well as numeric qualifiers, each separated by an exclamation mark. On NBA Live 2005, there are 11 qualifiers in total, being one for player position and the other ten for player attributes. By the time the current tutorial has been published, I am not 100% certain of what each qualifiers represents, but here are some good guesses based on experimentation and experience:

From left to right:

1) PLAYER POSITION: this is the trickiest qualifier to modify, so I will elaborate a little bit further. First, in order to read it porperly you will need to convert it from decimal to binary. For instance, the entry “Point Guard” has a “16” as the first qualifier, which is “10000” in binary. Now, each digit of the binary value represents a position, which are in order: PG, SG, SF, PF, C. This means that for this entry in particular, the first position “PG” is ticked (1) while the other four are unticked (0). Thus, whenever this entry is used to give some instruction to the AI, only point guards will be considered as actors.
Let’s take another example: the label “All players” has it as “31”. This corresponds to “11111” in binary. Therefore, players from any position can be qualified as actors. "Post players" has "3", which is "00011" in binary, meaning that only PF and C are considered "post player" actors. And so on.

The other qualifiers are all attribute based, and go as follows.
2) SPEED
3) QUICKNESS
4) DRIBBLE
5) FIELD GOALS
6) DUNK
7) PASS
8) OFF. AWARENESS
9) 3 POINTERS
10) INSIDE SCORING
11) PRIMACY

In those cases, a player is qualified as an actor if his attributes are higher than the ones present in a particular QUALIFICATION entry. Let’s use an example. On the excerpt above, “Good dribble” has the first qualifier as “31” (i.e. all positions), then the next three qualifiers are set at 70, with the rest at 0. This means that a player is tagged with “Good dribble” if his SPEED (2nd qualifier), QUICKNESS (3rd) and DRIBBLE (4th) are above 70.


SITUATION

Code: Select all
SITUATION
105
_DEFAULT/0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!2!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!2!0!2!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!;
Shot: out of time/0!0!0!0!0!0!0!1!0!0!0!0!0!0!0!0!0!0!0!2!0!0!0!0!0!0!0!0!0!0!0!0!0!4!0!1!0!1!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!;


This section is by far the most complicated and difficult to be modded. It is comprised of way more entries than the QUALIFICATION section (105 on NBA Live 2005 by default), each having 75 qualifiers. These qualifiers are used to describe certain in-game situations (just like the qualifiers in the previous section describe the actors). I assume these values can represent states such as “guarded?”, “above the arc?”, “past the half court?”, but also non-binary ones, such as “how many players on the fast break?”, “how many players on the paint?”, “how many seconds left on shot clock?” and so on.

For example, the entry “Drive: defender in air” has qualifiers set in a way that, based on those, the game knows when you (USER) bit on a pump fake, opening a drive lane to the AI. Unfortunately, these things are so difficult to reproduce and test systematically that I haven’t even bothered to do anything with it. Sometimes even trial and error is hard, since you can tweak values as much as you want and don’t even notice what was changed, or have some sort of placebo effect setting in. Therefore, for the SITUATION section I always assumed that whatever description is labelling the entry is a good depiction of the in-game situation, and try to live with that. I never felt like more SITUATION entries needed to be added anyway.


ACTION

Code: Select all
ACTION
21
_DEFAULT/0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!;
Quick shot/0!0!0!0!0!0!0!0!1!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!;
Pass/0!0!0!0!0!0!0!0!0!1!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!;
Drive/0!0!0!1!0!0!0!0!0!0!0!0!0!0!0!0!1!0!0!0!0!0!0!0!0!;
Court transition/0!0!0!0!0!1!1!0!0!0!0!0!0!0!0!0!1!0!0!0!0!0!0!0!0!;


After the game identifies actors and situations, it needs to take actions, and this section lists which ones are possible. Similar to the other sections, each entry is followed by a bunch of numbers (NBA Live 2005 has 25 in total for this section). In this case, however, they are not really “qualifiers” like before, but “commands”, just like buttons that the AI shall press. As such, they are all binary (1 = press, 0 = don't). Let us have a closer look.

The entry “Quick shot” has 24 zeroes and only one “1”, which is located at the 9th value. On the whole ACTION section, this is the only entry where the 9th value is occupied by the value 1, leading us to assume that the 9th value corresponds to the shot button. In this case I do not know exactly what each command represents, but here is my educated guess:

1) Right stick moves – no dribble
2) Right stick moves – with dribble, standing
3) Right stick moves – with dribble, moving
4) Hold down turbo
5) ?
6) ?
7) Directional pressed after another command
8) ?
9) Shot button - hold
10) Pass button
11) ?
12) ?
13) ?
14) Step back
15) Dunk/layup
16) ?
17) Directional pressed after another command
18) ?
19) ?
20) Pro hop
21) ?
22) Back down button – hold
23) Back down button – tap
24) Pass button
25) Shot button – hold

This section lacks experimentation, at least from my side. Although it is not nearly as overwhelming as the SITUATION section, it is easy to crash your game depending on what you try to modify. Nevertheless, for instance, we do know that the Live 2005 AI never shoots leaning shots; it also does not use step backs. Changing the ACTION section may be a way to make these moves available for the CPU.


JOB

Code: Select all
JOB
82
_DEFAULT/1!0!0!0!0!0!1!;
Pass: to pg/1!4!2!0!41!2!1!;
Shot: out of time/1!0!1!1!0!1!1!;
Drive: open drive/1!0!3!0!0!3!1!;
Pass: from ground in frontcourt/1!1!7!7!4!2!1!;
Pass: from ground in backcourt/1!1!8!8!6!2!1!;
Transition: point guard/4!0!9!0!0!4!1!;


This is where the magic happens. This sections tells the CPU which actors should be used in which situations, and then which actions should be taken and with which probability. Each entry is comprised of seven values, which in turn reference entries from previous sections. It works as follows:

1) Actor #1 (refers to QUALIFICATION section)
2) Actor #2 (refers to QUALIFICATION section)
3) Situation #1 (refers to SITUATION section)
4) Situation #2 (refers to SITUATION section)
5) Situation #3 (refers to SITUATION section)
6) Action (refers to ACTION section)
7) Relative probability

Let me give an example. The “Pass to PG” entry has the following values: 1, 4, 2, 0, 41, 2, 1. Breaking it down, it is telling the CPU the following:

1) Actor #1 is the entry “1” on the QUALIFICATION section, which by default represent “All players”. These are the actors that are going to perform the action. (note: the first entry is represented by number “0”; number “1” is actually the second entry of a given section)

2) Actor #2 is the entry 4 on the QUALIFICATION section, which by default represents “Point guard”. These are the actors at which the action will be targeted.

3) Situation #1 is the entry “2” on the SITUATION section, which by default represents “Passer: to PG”. This is a situation where Actor #1 will perform the action.

4) Situation #2 is the entry “0” on the SITUATION section, which by default represents “_DEFAULT”. This is a blank entry, meaning that no situation is specified here.

5) Situation #3 is the entry “41” on the SITUATION section, which by default represents “Receiver: to PG”. Normally Situation #3 is intended to Actor #2.

6) Action is the entry “2” on the ACTION section, which by default represents “Pass”. This is the action Actor #1 will perform, whereby Actor #2 will be the recipient.

7) Relative probability is “1”. This means that if the game ever comes across this combination of Actors and Situations, it will review all JOB entries that makes reference to these and compare their probabilities.

In this case, this the only one available, so the game will always make a player pass to the PG if the situational criteria are met. However, in the post, for example, a player can shoot a hook shot, pump fake, try standing right stick moves, back down the opponent, try a drop step, spin, dunk, etc. Those are all different JOB entries that use the same actor and same situation; In this case, the game will then randomly pick one of the actions, depending on their respective probability values. For example, if the hook shot action has a “50” and all other actions have “1”, this means that it will be much more likely that the player will try a hook shoot as soon as it gets the ball in the post in comparison to all other possible actions.

________________________________

That is it for the assignment.act file. This tutorial should be also useful for NBA Live 2004, as well as 06-08.
This topic was moved from NBA Live 2005 by Andrew on Tue Jan 16, 2024 10:19 pm.
User avatar
CarolusXCI
 
Posts: 370
Joined: Sat Nov 19, 2011 11:23 pm
Location: Austria, Brazil

Re: TUTORIAL: Assignment.act file (Updated)

Postby Jaybaby0713 on Tue Jan 16, 2024 9:06 pm

Thanks for this bro!!! you really helped to explain this very well nice update sir :applaud:
Jaybaby0713
 
Posts: 4
Joined: Tue May 16, 2023 8:46 am

Re: TUTORIAL: Assignment.act file (Updated)

Postby Andrew on Tue Jan 16, 2024 10:19 pm

Nicely done, appreciate you sharing the knowledge!
User avatar
Andrew
Retro Basketball Gamer
Administrator
 
Posts: 113956
Joined: Thu Aug 22, 2002 8:51 pm
Location: Australia


Return to NBA Live 2005 Tutorials & FAQs

Who is online

Users browsing this forum: No registered users and 1 guest