OBD talk:BINA/OBJC/CHAR: Difference between revisions

From OniGalore
Jump to navigation Jump to search
m (oncc ? ups. however, I can't add more so it time to move on)
m (+cat)
 
(20 intermediate revisions by 5 users not shown)
Line 1: Line 1:
==Talk==
__NOTOC__
==Teams==
Ok, I'm going to ask a few dumb questions
Ok, I'm going to ask a few dumb questions
*How are these teams treated: SecurityGuard, Switzerland, Who are there friends and enemies?  
*How are these teams treated: SecurityGuard, Switzerland, Who are there friends and enemies?  
Line 11: Line 12:


Team 1:
Team 1:
SecurityGaurd+TCTF+Konoko
SecurityGuard+TCTF+Konoko


Team 2:
Team 2:
Line 17: Line 18:


Team 3:
Team 3:
RougeKonoko
RogueKonoko


Others:
Others:
Neutral, Swiss
Neutral, Switzerland


All 3 teams will fight against any other teams. I'm not sure on the "Others", you will have to test them out. As long as you don't have TCTF vs Syndicate vs Konoko vs BGI (4 way battling!), you should be fine. Even then, you may be able to get the Neutral or Swiss team to fight against the other 3, but I guaruntee nothing. I don't know any way to add or change teams, short of engine hacking.  
All 3 teams will fight against any other teams. I'm not sure on the "Others", you will have to test them out. As long as you don't have TCTF vs Syndicate vs Konoko vs BGI (4 way battling!), you should be fine. Even then, you may be able to get the Neutral or Swiss team to fight against the other 3, but I guarantee nothing. I don't know any way to add or change teams, short of engine hacking.  


[[User:Gumby|Gumby]] 04:52, 31 August 2008 (CEST)
[[User:Gumby|Gumby]] 04:52, 31 August 2008 (CEST)


Here's the pseudocode of the function that decides who is friend/enemey. Friend/Foe have the obvious meaning and PotentialFoe means that the AI will act as a foe only if it is attacked.
Here's the pseudocode of the function that decides who is friend/enemy. Friend/Foe have the obvious meaning and PotentialFoe means that the AI will act as a foe only if it is attacked.


   FriendOrFoe AI2rTeam_FriendOrFoe(Team t1, Team t2)
   FriendOrFoe AI2rTeam_FriendOrFoe(Team t1, Team t2)
Line 74: Line 75:
So, the difference between Switzerland and Neutral is that Switzerland will not attack you even if you attack them, but Neutral will retaliate. --[[User:Iritscen|Iritscen]] 15:08, 31 August 2008 (CEST)
So, the difference between Switzerland and Neutral is that Switzerland will not attack you even if you attack them, but Neutral will retaliate. --[[User:Iritscen|Iritscen]] 15:08, 31 August 2008 (CEST)


O_o I guess the SecurityGaurds aren't neccessarily aligned with anyone...interesting.
O_o I guess the SecurityGuards aren't neccessarily aligned with anyone...interesting.


[[User:Gumby|Gumby]] 16:39, 31 August 2008 (CEST)
[[User:Gumby|Gumby]] 16:39, 31 August 2008 (CEST)
Line 80: Line 81:
So which team should BGI be assigned? [[User:EdT|EdT]]
So which team should BGI be assigned? [[User:EdT|EdT]]


RougeKonoko or Neutral in the beginning, depending on how you want the interactions to be, but for the later levels, I'm not quite sure. It depends on who is in the level and the situation. Maybe SecurityGuard. (Actually, that would probably work)
RogueKonoko or Neutral in the beginning, depending on how you want the interactions to be, but for the later levels, I'm not quite sure. It depends on who is in the level and the situation. Maybe SecurityGuard. (Actually, that would probably work)


[[User:Gumby|Gumby]] 18:39, 31 August 2008 (CEST)
[[User:Gumby|Gumby]] 18:39, 31 August 2008 (CEST)


 
{{OBD}}
 
 
==XML==
 
'''general information'''
* '''BINACJBOCharacter.oni''' is level specific. (It can be found in edition/GameDataFolder/level''XX''_... )
* See [[XML basic tutorial|HERE]] if you don't know how to convert an oni file into XML and vice versa.
* See [[OBD_talk:BINA/OBJC|HERE]] if you are searching for more general information such as how to handle object coordinates.
* (An alternative is [[OBD:AISA|AISA]], import not tested.)
 
 
'''XML structure'''
 
<?xml version="1.0" encoding="utf-8"?>
<Oni Version="0.9.28.0">
    <ObjectCollection>
        '''''[...]'''''
    </ObjectCollection>
</Oni>
 
'''''[...]''''' means at least one character. Paste all character data into there (this includes '''<font color="#0A0"><Object ...></font>''' and '''<font color="#0A0"></Object></font>''' tag).
 
'''example'''
 
        '''<font color="#0A0"><Object Id="10067" Type="CHAR"></font>'''
            <Header>
                <Flags>0</Flags>
                <Position>347.216736 756 202.2008</Position>
                <Rotation>0 114.94648 0</Rotation>
            </Header>
            <OSD>
                <Flags>IsPlayer</Flags>
                <Class>barabus</Class>
                <Name>barabus</Name>
                <Weapon></Weapon>
                <Scripts>
                    <Spawn></Spawn>
                    <Die></Die>
                    <Combat></Combat>
                    <Alarm></Alarm>
                    <Hurt></Hurt>
                    <Defeated></Defeated>
                    <OutOfAmmo></OutOfAmmo>
                    <NoPath></NoPath>
                </Scripts>
                <AdditionalHealth>0</AdditionalHealth>
                <Job>
                    <Type>Idle</Type>
                    <PatrolPathId>0</PatrolPathId>
                </Job>
                <Behaviors>
                    <CombatId>9</CombatId>
                    <MeleeId>25</MeleeId>
                    <NeutralId>0</NeutralId>
                </Behaviors>
                <Inventory>
                    <Ammo>
                        <Use>0</Use>
                        <Drop>0</Drop>
                    </Ammo>
                    <EnergyCell>
                        <Use>0</Use>
                        <Drop>0</Drop>
                    </EnergyCell>
                    <Hypo>
                        <Use>0</Use>
                        <Drop>0</Drop>
                    </Hypo>
                    <Shield>
                        <Use>0</Use>
                        <Drop>0</Drop>
                    </Shield>
                    <Invisibility>
                        <Use>0</Use>
                        <Drop>0</Drop>
                    </Invisibility>
                </Inventory>
                <Team>Syndicate</Team>
                <InitialAmmo>100</InitialAmmo>
                <Alert>
                    <Initial>Combat</Initial>
                    <Minimal>Lull</Minimal>
                    <JobStarting>Low</JobStarting>
                    <Investigating>Medium</Investigating>
                </Alert>
                <AlarmGroups>0</AlarmGroups>
                <Pursuit>
                    <nowiki><Strong>4</Strong></nowiki>
                    <Weak>1</Weak>
                    <StrongSeen>4</StrongSeen>
                    <WeakSeen>4</WeakSeen>
                    <Lost>0</Lost>
                </Pursuit>
            </OSD>
        '''<font color="#0A0"></Object></font>'''
 
You can add another character data block beneath an </Object> tag. (Well, add as much characters as you want.)
 
 
{{Table}}
!XML tag
!description
!value type / flags plus description
|-
|<?xml version="1.0" encoding="utf-8"?>
|
|
|-
|valign=top|<Oni Version="...">
| If onisplit exe is newer then extracted file then file cannot be converted back to *.oni
|
|-
|valign=top|<ObjectCollection>
|
|
|-
|valign=top|<Object Id="3860" Type="CHAR">
|Id doesn't matter and CHAR shouldn't become changed so leave them as they are.
|
|-
|<Header>
|
|
|-
|<Flags>
|unknown; usually 0
|
|-
|<Position>
|character is spawned at this xyz-position
|
|-
|<Rotation>
|character is spawned with this rotation
|
|-
|<OSD>
|
|
|-
|valign=top|<Flags>
|valign=top|determines some special properties
|
<!--: "IsPlayer" makes first character (in this file) into the character which is controlled by the player. (Usually not used with other flags.)
:: Multiple characters with "IsPlayer" makes it possible to change the player controlled character by using BSL commands, for example: "chr_delete(Muro);ai2_spawn(barabus)"
::: A delay between spawning the new and deleting the old player character can kick off a camera glitch.
:::: However, this became outdate when Mac engine was patched to be able using chr_set_class.-->
: IsPlayer (if you have two of them then delete one and spawn the other one at same time)
: RandomCostume (flag belongs to [[OBD_talk:ONCV|ONCV]])
: NotInitiallyPresent
: NonCombatant
: CanSpawnMultiple (needs WasSpawned)
: WasSpwaned (...)
: Unkillable (character won't loss more life points if it reaches 1, same as BSL command "chr_unkillable")
: InfiniteAmmo (Raiden: "You got enough ?" Snake points to his head. "Infinite ammo...")
: Omniscient (can't be knocked down)
: HasLSI (this character drops an level specific item like truck keys in [[CHAPTER_14_._DAWN_OF_THE_CHRYSALIS|level 19]])
: Boss (used for boss mode fights. makes the AI ignore this character unless there is nobody else around)
: UpgradeDifficulty (spawns a stronger enemy if you play on medium or hard)
: NoAutoDrop (doesn't drop "used" shield, "used" invisibility and LSI when killed)
|-
|<Class>
|ONCC name without file pre- and suffix. Interesting for BSL command "chr_set_class"
|
|-
|<Name>
|used by various BSL commands
|
|-
|<Weapon>
|character is spawned with weapon specified in here; weapon looked up by name (makes also custom weapons available)
|
|-
|valign=top|<Scripts>
|valign=top|independent from BSL main function
|
: <Spawn> (called when character is spawned)
: <Die> (called when character dies (health reaches 0); can work multiple times)
: <Combat> (called when character notices an enemy; works only once)
: <Alarm> (called when character is alarmed)
: <Hurt> (called when character is hurt for the first time; works only once)
: <Defeated> (called when character is "defeated" (health reaches 1); works only once)
: <OutOfAmmo> (called when character runs out of ammo (reloads a weapon with the last clip/cell); works only once, and the character must have the ammo at spawn-time)
: <font style="color:#777"><NoPath> (should be called when a character has trouble pathfinding, but isn't</font>)
|-
|valign=top|<AdditionalHealth>
|''main'' health is stored in ONCC, "additional health" will be added to that ''main'' health
|
|-
|<Job>
|
|
|-
|valign=top|<Type>
|
|
: None
: Idle
: <font color="#777">Guard (never used in Oni)</font>
: Patrol
: <font color="#777">Teambattle (never used in Oni)</font>
|-
|valign=top|<Behaviors>
|specified by IDs linking to melee, combat and neutral profile collection file
|
|-
|valign=top|[[OBD_talk:BINA/OBJC/CMBT|<CombatId>]]
|
|
: 0 (Stand_and_Fire)
: 1 (Murder)
: 2 (Shoot_And_Fight)
: 3 (Take_my_Big_Black_Stuff)
: 4 (Assault)
: 5 (Civilian)
: 6 (Pursuit)
: 7 (Group_battle)
: 8 (Watchman)
: 9 (Barabbas_TCTF)
: 10 (COMGUY)
: 11 (SuperNinja)
: 12 (Griffin)
: 13 (Mutant_Muro)
: 14 (Alarm Guard)
: 15 (Non-Combatant)
: 16 (Griffin_Final)
: 207 (Sniper)
: 208 (Sniper For Joe)
: 17 (Average_striker; new profile for AE)
|-
|<MeleeId>
|[[OBD:BINA/OBJC/MELE#All_profiles_sorted_by_ID|here are all melee IDs sorted by ID]]
|
|-
|<NeutralId>
|[[OBD:BINA/OBJC/NEUT|...]] (no overview so far)
|
|-
|<Inventory>
|
|
|-
|valign=top|<Ammo>
|
|
:<Use> (characters can uses such items by given amount; AI cannot use hypos)
:<Drop> (AI characters drops such items when defeated)
|-
|valign=top|<EnergyCell>
|
|
:<Use>
:<Drop>
|-
|valign=top|<Hypo>
|
|
:<Use>
:<Drop>
|-
|valign=top|<Shield>
|
|
:<Use>
:<Drop>
|-
|valign=top|<Invisibility>
|
|
:<Use>
:<Drop>
|-
|valign=top|<Team>
|
|
: Konoko
: TCTF
: Syndicate
: Neutral
: SecurityGuard
: RogueKonoko
: Switzlerland (is melee-immune)
: SyndicateAccessory
|-
|<InitialAmmo>
|ammo in weapon, percent value: 0 - 100, ''overload'' not tested
|
|-
|<Alert>
|
|
|-
|valign=top|<Initial>
|valign=top|initial alert level
|
:lull
:low
:medium
:high
:combat
|-
|valign=top|<Minimal>
|valign=top|minimal alert level
|
:lull
:low
:medium
:high
:combat
|-
|valign=top|<JobStarting>
|valign=top|alert level when starting a job
|
:lull
:low
:medium
:high
:combat
|-
|valign=top|<Investigating>
|valign=top|alert level when investigating
|
:lull
:low
:medium
:high
:combat
|-
|valign=top|<AlarmGroups>
|character will be alarmed by script command ai2_tripalarm(N) or alarm console; N can be 0 up to 31
|
|-
|valign=top|<Pursuit>
|[[CHAR#Less_basic_setup_-_Inventory.2C_team.2C_jobs.2C_alert.2Fpursuit|HERE]] are information about "Alert" and "Pursuit".
|
|-
|valign=top|<nowiki><Strong></nowiki>
|
|
: 0
: 1
: 2
: 3
: 4
|-
|valign=top|<Weak>
|
|
: 0
: 1
: 2
: 3
: 4
|-
|valign=top|<StrongSeen>
|
|
: 0
: 1
: 2
: 3
: 4
|-
|valign=top|<WeakSeen>
|
|
: 0
: 1
: 2
: 3
: 4
|-
|valign=top|<Lost>
|
|
: 0
: 1
: 2
: 3
: 4
|}

Latest revision as of 16:06, 4 May 2022

Teams

Ok, I'm going to ask a few dumb questions

  • How are these teams treated: SecurityGuard, Switzerland, Who are there friends and enemies?
  • How is SyndicateAccessory different from Syndicate?
  • Is it possible to add BGI as another team?
  • Can the properties of a team be changed? ie: defining its friends and enemies

EdT 23:55, 30 August 2008 (CEST)

From what I remember, from testing with KvW:

Team 1: SecurityGuard+TCTF+Konoko

Team 2: Syndicate+SyndicateAccessory

Team 3: RogueKonoko

Others: Neutral, Switzerland

All 3 teams will fight against any other teams. I'm not sure on the "Others", you will have to test them out. As long as you don't have TCTF vs Syndicate vs Konoko vs BGI (4 way battling!), you should be fine. Even then, you may be able to get the Neutral or Swiss team to fight against the other 3, but I guarantee nothing. I don't know any way to add or change teams, short of engine hacking.

Gumby 04:52, 31 August 2008 (CEST)

Here's the pseudocode of the function that decides who is friend/enemy. Friend/Foe have the obvious meaning and PotentialFoe means that the AI will act as a foe only if it is attacked.

 FriendOrFoe AI2rTeam_FriendOrFoe(Team t1, Team t2)
   if (LastManStanding)
       return Foe;
   else if (t1 = t2) or (t1 = Switzerland) or (t2 = Switzerland)
       return Friend;
   else if (t1 = Konoko)
       if (t2 = TCTF)
           return Friend;
       else if (t1 = Syndicate)
           return Foe;
       else
           return PotentialFoe;
   else if (t1 = TCTF)
       if (t2 = Konoko)
           return Friend;
       else if (t2 = Syndicate) or (t2 = RogueKonoko)
           return Foe;
       else
           return PotentialFoe;
   else if (t1 = Syndicate)
       if (t2 = SyndicateAccessory)
           return Friend;
       else
           return Foe;
   else if (t1 = Neutral)
       return PotentialFoe;
   else if (t1 = SecurityGuard)
       if (t2 = Syndicate) or (t2 = RogueKonoko)
           return Foe;
       else 
           return PotentialFoe;
   else if (t1 = RogueKonoko)
       if (t2 = Syndicate) or (t2 = TCTF)
           return Foe;
       else
           return PotentialFoe;
   else if (t1 = SyndicateAccessory)
       if (t2 = Syndicate)
           return Friend;
       else
           return PotentialFoe;

Neo

So, the difference between Switzerland and Neutral is that Switzerland will not attack you even if you attack them, but Neutral will retaliate. --Iritscen 15:08, 31 August 2008 (CEST)

O_o I guess the SecurityGuards aren't neccessarily aligned with anyone...interesting.

Gumby 16:39, 31 August 2008 (CEST)

So which team should BGI be assigned? EdT

RogueKonoko or Neutral in the beginning, depending on how you want the interactions to be, but for the later levels, I'm not quite sure. It depends on who is in the level and the situation. Maybe SecurityGuard. (Actually, that would probably work)

Gumby 18:39, 31 August 2008 (CEST)