Tactics Ogre: Reborn [+119] Compatible with 1.05

Upload your cheat tables here (No requests)
cryosaur
Novice Cheater
Novice Cheater
Posts: 20
Joined: Mon Nov 21, 2022 11:42 am
Reputation: 10

Re: Tactics Ogre: Reborn [+119] Compatible with 1.05

Post by cryosaur »

Sorry for the delayed reply. I got a few PMs, but it would probably help others if I answered them here instead.

The v1.0.7 address of the Skills table pointer is: Tactics Ogre Reborn.exe+D682D8

I might have done so before, but here is part of my custom CT and an explanation of what each part is/does:

Code: Select all

<CheatEntry>
  <Description>"Mods"</Description>
  <Options moHideChildren="1"/>
  <Color>800080</Color>
  <GroupHeader>1</GroupHeader>
  <CheatEntries>
    <CheatEntry>
      <Description>"Skills"</Description>
      <Color>800080</Color>
      <VariableType>String</VariableType>
      <Length>4</Length>
      <ZeroTerminate>0</ZeroTerminate>
      <Address>Tactics Ogre Reborn.exe+D682D8</Address>
      <Offsets>
        <Offset>0</Offset>
      </Offsets>
      <CheatEntries>
        <CheatEntry>
          <Description>"First Aid I"</Description>
          <Color>800080</Color>
          <VariableType>Byte</VariableType>
          <Address>+10+66*1BF</Address>
          <CheatEntries>
            <CheatEntry>
              <Description>"Class Set - RuneFencer: 10"</Description>
              <Color>800080</Color>
              <VariableType>Byte</VariableType>
              <Address>+15</Address>
              <Hotkeys>
                <Hotkey>
                  <Action>Set Value</Action>
                  <Keys>
                    <Key>17</Key>
                    <Key>32</Key>
                  </Keys>
                  <Value>10</Value>
                </Hotkey>
              </Hotkeys>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
        <CheatEntry>
          <Description>"First Aid II"</Description>
          <Color>800080</Color>
          <VariableType>Byte</VariableType>
          <Address>+10+66*1C0</Address>
          <CheatEntries>
            <CheatEntry>
              <Description>"Class Set - RuneFencer: 22"</Description>
              <Color>800080</Color>
              <VariableType>Byte</VariableType>
              <Address>+15</Address>
              <Hotkeys>
                <Hotkey>
                  <Action>Set Value</Action>
                  <Keys>
                    <Key>17</Key>
                    <Key>32</Key>
                  </Keys>
                  <Value>22</Value>
                </Hotkey>
              </Hotkeys>
            </CheatEntry>
          </CheatEntries>
        </CheatEntry>
        <CheatEntry>
          <Description>"First Aid III"</Description>
...
          <Address>+10+66*1C1</Address>
...
              <Description>"Class Set - RuneFencer: 34"</Description>
...
                  <Value>34</Value>
...
        <CheatEntry>
          <Description>"First Aid IV"</Description>
...
          <Address>+10+66*1C2</Address>
...
              <Description>"Class Set - RuneFencer: 50"</Description>
...
                  <Value>50</Value>
...
      </CheatEntries>
    </CheatEntry>
  </CheatEntries>
</CheatEntry>
The top/first part--"Mods"--is just a wrapper to group all my "permanent" custom cheats together in one place, and so it has GroupHeader = 1(yes/true). HideChildren is turned on so it is collapsed by default.

Next is the "Skills" 'cheat', which is not actually a cheat exactly. What it does is have the address of the pointer to the Skills data table, which enables its subordinate cheats to use that address as a reference base. The vartype=string, length=4, and 0-terminated=no parts describe the Value that is supposed to be found at the beginning of the address pointed to: it should be text "xlce", so I can quickly open the Mods group, and see "Skills | P->{address} | String[4] | xlce" if everything is working correctly. Address is where to find the pointer to the data table. The Offset 0 thing indicates that this Address contains a pointer--use the value found at the Address as another address.

After that is a bunch of 'cheats' each pointing to one skill, one record in the skills table. Description is the name of the skill. Don't really care what the value type is, as this 'cheat' won't modify anything. Address is where the action happens here: the first + indicates that it is using an offset from the address of its parent 'cheat': if the parent was pointing to address 1000, a child with address +42 would point to address 1042. Keep in mind that the raw XML of the <Address> tag is interpreted as a hexadecimal, not base-10. All the data tables have a header that is 0x10 (16) bytes long, which is what the +10 is for: to skip over 0x10 bytes. Each record in the Skills data table is 0x66 (102) bytes wide (says so in the header), so we have +10+66. There are a bunch of sources to find which record to look up; anyone can use my [Link] to start off, or look around for something better. If you count the first record as #0, the First Aid 1 record that I'm looking for is #447 or 0x1BF, and so we have the full address of +10+66*1BF.

The sub-subordinate record is an actual cheat--something that modifies the game. Description is what it is supposed to do; for example, allow the RuneFencer class to learn First Aid 1 at level 10. VariableType is kind of value being modified at this Address. Address here also starts with a +, indicating that it is an offset from the address of its parent 'cheat'; in a record in the Skills table, if the first byte is #0 the part that controls if/when the RuneFencer class can use it is a 1-byte value at #21 (0x15). So the Address is +15, and VariableType = byte. Finally, there is that Hotkey stuff--if you don't want to manually go in and (re)set this each time, you set up a hotkey that can do stuff; you still have to use the hotkey each time you run the game, but this is the best you can do without actually re-writing the game's data. This one here is Action = Set Value, to write the Value to the address when the hotkey 17+32 (Ctrl+Space) is pressed. Value is 10 (0x0A) = learn at level 10 (for RuneFencer), which is written over the game's value here of 0xFF = cannot learn + cannot use.

The other records are there, some abbreviated to only show differences. Notice that you can have the same key combination activate multiple cheats' Hotkey Action.

Let's see... answer some questions... Velocity Shift is Skill record #739, so use Address +10+66*2E3. Byte for Lord class is #60, so use Address +3C. White Knights get it at Level 0x12 (18), so use Value = 18 or a higher unless you're extra-greedy.

How to use this cheat table?
  1. Install Cheat Engine
  2. Double-click the .CT file in order to open it.
  3. Click the PC icon in Cheat Engine in order to select the game process.
  4. Keep the list.
  5. Activate the trainer options by checking boxes or setting values from 0 to 1

cryosaur
Novice Cheater
Novice Cheater
Posts: 20
Joined: Mon Nov 21, 2022 11:42 am
Reputation: 10

Re: Tactics Ogre: Reborn [+119] Compatible with 1.05

Post by cryosaur »

... To answer some older questions:
Recovery Time (RT) is a calculated statistic that Units cannot grow/shrink via Level. There is no RT modifier field in a Unit record to be saved as part of a save game. All sources of RT that you can tamper with are part of hardcoded data that the game re-reads every time it is run, so your cheats have to be re-applied if you want custom RT values: to a Unit Template, Class, or Equipment. You can permanently modify this hardcoded data, but not with a CE table.

I've never tried tampering with the voice settings so I don't know if that part of your CT works.

Some Unit tampering (changing portrait, sprite) requires some unknown rebuilding/recalculation process for the changes to be properly applied. The quickest known way to make it happen--after you make your changes--is opening and closing the Warren Report. Not sure if class set is part of it, but give it a try. You should do it anyway, for any Unit changes.

Post Reply