[DOCUMENTATION] Offset Index : Decoding OllyDbg

Post Reply
User avatar
Xeno
Patch Team
Posts: 2320
Joined: Wed Nov 25, 2020 5:01 am
Has thanked: 202 times
Been thanked: 795 times

[DOCUMENTATION] Offset Index : Decoding OllyDbg

Post by Xeno »

Offset Index : Decoding Olly is being updated when any more findings. This documentation post is open for coders/patchers to edit when new info is added. (Last updated on 16.02.2023)
Currently updated from all offset threads . Thanks to great work done by John Locke, Tapani, Saturn and all contributors .

Code: Select all

[AE234C] = Number of continents
[AE2350] = Number of nations
[AE2354] = Number of cities
[AE2358] = Number of stadiums
[AE235C] = Total number of clubs ( the number of domestic teams + (the number nations x 2) )
[AE2360] = ?
[AE2364] = Number of staff
[AE2368] = ?
[AE236C] = number of players
[AE2370] = number of staff preferences
[AE2374] = number of staff histories
[AE2378] = Number of club competitions
[AE237C] = Number of club competition hostories
...
[AE2390] = Number of officials
[AE2394] = Number of colours
...
[AE23A4] = stores the memory address where the first continent is stored.
[AE23A8] = ?
[AE23AC] = ?
[AE23B0] = Stores the memory address where the first stadium is stored.
[AE23B4] = Stores the memory address where the first club is stored.
[AE23B8] = ?
[AE23BC] = Stores the memory address where the first person is stored.
[AE23C0] = Stores the memory address where the first non player is stored.
[AE23C4] = Stores the memory address where the first player is stored.
[AE23C8] = Stores the memory address where the first staff preferences is stored.
[AE23CC] = Stores the memory address where the first staff history is stored.
[AE23D0] = Stores the memory address where the first club competition is stored.
[AE23D4] = Stores the memory address where the first club competition history is stored.
...
[AE23E8] = Stores the memory address where the first official is stored
[AE23EC] = Stores the memory address where the first colour is stored
...
[AE2C90] = Current day (of year)(?)
[AE2C92] = Current year

+0 : Match squad restrictions: Foreign players qty (Croatia & South Korea)if used as [EDX] in league rules cpp
+1 : Match squad restrictions: Foreign players, no any restrictions if used as [EDX+1] in league rules cpp, Does not show if player is foreign in squad screen
+2 : Match squad restrictions: Foreign players qty if used as [EDX+2] in league rules cpp
+3 : Match squad restrictions: Foreign Non-EU players qty (Portugal)if used as [EDX+3] in league rules cpp
+4 : person.firstName (4*),
     league.clubComp (4*),
     city.name (26 t),
     club.longName (51 t),
     nation.longName (51 t),
     clubcomp.longName (51 t),
     nonPlayer.currentAbility (2),
     player.squadNumber (1),
     contract.club (4*),
     stadium.name (51 t),
     official.firstName (4*),
     staffHistory.person (4*),
     continent.name (26 t),
     preferences.likedClubOne (4*)
+5 : player.currentAbility (2)
     Match squad restrictions: Foreign Non-EU players qty if used as [EDX+5] in league rules cpp, Shows if player is foreign in squad screen
+6 : nonPlayer.potentialAbility (2)
+7 : player.potentialAbility (2)
     Cup Round name
+8 : nonPlayer.homeRep (2),
     person.secondName (4*),
     official.secondName (4*),
     staffHistory.season (2),
     preferences.likedClubTwo (4*)
     finances.club (4)
+9 : player.homeRep (2)
     Cup Round number
+a : nonPlayer.currentRep (2),
     staffHistory.club (4*)
+b : player.currentRep (2)
     Cup Round draw type
+c : nonPlayer.worldRep (2),
     contract.weeklyWage (4),
     person.commonName (4*),
     official.dateOfBirth (8),
     preferences.likedClubThree (4*)
+d : player.worldRep (2)
     Cup Game 1 tiebreak
+e : nonPlayer.attacking (1),
     staffHistory.onLoan (1)
+f : nonPlayer.business (1),
     player.goalkeeper (1),
     staffHistory.appearances (1)
     Cup Game 2 tiebreak
+10: nonPlayer.coaching (1),
     player.sweeper (1),
     contract.goalBonus (4),
     person.dayOfYearBorn (2),
     staffHistory.goalsScored (1),
     preferences.dislikedClubOne (4*)
+11: nonPlayer.coachingGK (1),
     player.defender (1)
     Cup Game 3 tiebreak
+12: person.yearBorn (2),
     nonPlayer.coachingTechnique (1),
     player.defMid (1)
     Club squad restrictions: Foreign Non-EU players qty in league rules cpp
+13: nonPlayer.directness (1),
     player.midfielder (1)
     Club squad restrictions: Foreign players qty in league rules cpp
+14: nonPlayer.discipline (1),
     player.attMidfielder (1),
     contract.assistBonus (4),
     official.yearOfBirth (2),
     preferences.dislikedClubTwo (4*)
+15: nonPlayer.freeRoles (1),
     player.striker (1)
+16: nonPlayer.interference (1),
     player.wingBack (1),
     official.nationality (4*)
+17: nonPlayer.judgingCA (1),
     player.rightSide (1)
     Cup??? value can change within competitions from round to round, but noticed that it's always 0A for international competitions.
+18: person.age(2),
     nonPlayer.judgingPA (1),
     player.leftSide (1),
     contract.cleanSheetBonus (4),
     preferences.dislikedClubThree (4*)
     Cup Total teams in round
+19: nonPlayer.manManagement (1),
     player.centre (1)
+1a: person.nationality (4*),
     nonPlayer.marking (1),
     player.freeRole (1),
     official.city (4*)
     Cup Ties
+1b: nonPlayer.motivating (1),
     player.acceleration (1)
+1c: league.promoteToDivision (4*),
     nonPlayer.offside (1),
     player.aggression (1),
     contract.nonPromotionClause (1),
     preferences.likedStaffOne (4*)
     Cup New teams entering round
+1d: nonPlayer.patience (1),
     player.agility (1),
     contract.minimumFeeClause (1)
+1e: person.2ndNationality (4*),
     nonPlayer.physio (1),
     player.anticipation (1),
     contract.nonPlayingClause (1),
     official.currentAbility (2),
     continent.nameGender (1)
     city.nameGender (1)
     Cup Total teams already entered into cup
+1f: city.nation (4*),
     nonPlayer.pressing (1),
     player.balance (1),
     contract.relegationClause (1),
     continent.tla (4 t)
+20: league.relegateToDivision (4*),
     nonPlayer.resources (1),
     player.bravery (1),
     contract.managerJobClause (1),
     official.potentialAbility (2),
     clubFinances.playersBoughtLastMonth (4),
     preferences.likedStaffTwo (4*)
     Cup Round Replays
+21: nonPlayer.tactics (1),
     player.consistency (1),
     contract.releaseFee (4)
     Cup Round Legs
+22: person.caps (1),
     nonPlayer.youngsters (1),
     player.corners (1),
     official.reputation (2)
     Cup Days between legs or replays
+23: city.latitude (8 f),
     person.goals (1),
     player.crossing (1),
     nonPlayer.faveGoalkeeper (4*),
     continent.demonym (26 t)
+24: person.nationEmployedBy (4*),
     player.decisions (1),
     official.allowingFlow (1),
     preferences.likedStaffThree (4*)
+25: player.dirtiness (1),
     contract.startDate (8),
     official.discipline (1)
+26: player.dribbling (1),
     official.importantMatches (1)
+27: player.finishing (1),
     nonPlayer.faveSweeper (4*),
     official.pressure (1)
+28: person.jobWithNation (1),
     player.flair (1),
     official.refereeing (1),
     clubFinances.playersSoldLastMonth (4),
     preferences.dislikedStaffOne (4*)
+29: person.jobWithNationStartDate (8),
     player.freeKicks (1),
     official.runningTheLine (1)
+2a: player.handling (1),
     official.timeKeeping (1)
+2b: city.longitude (8 f),
     player.heading (1),
     nonPlayer.faveDefender (4*)
+2c: player.importantMatches (1),
     preferences.dislikedStaffTwo (4*)
     competition group qty
+2d: player.injuryProneness (1),
     contract.endDate (8)
+2e: player.jumping (1)
+2f: player.leadership (1),
     nonPlayer.faveDefMidfielder (4*)
+30: player.leftFoot (1),
     clubFinances.otherCostsLastMonth (4),
     prefences.dislikedStaffThree (4*)
+31: person.jobWithNationEndDate (8),
     player.longShots (1)
+32: player.marking (1)
+33: city.attraction (1),
     player.offTheBall (1),
     nonPlayer.faveMidfielder (4*),
     name.nameId (4)
+34: city.weather (4),
     player.naturalFitness (1),
     clubFinances.interestPaidLastMonth (4)
     match attendance
+35: player.oneOnOnes (1),
     contract.type (1?)
+36: player.pace (1)
+37: player.passing (1),
     stadium.nameGender (1),
     nonPlayer.faveAttMidfielder (4*),
     club.longNameGender (1),
     name.nation (4*)
+38: club.shortName (26 t),
     stadium.city (4*),
     nation.shortName (26 t),
     clubcomp.shortName (26 t),
     player.penalties (1),
     clubFinances.leagueFinesLastMonth (4)
+39: person.club (4*),
     player.positioning (1)
+3a: player.reflexes (1)
     ???league??? type?????????????????
+3b: player.rightFoot (1),
     nonPlayer.faveAttacker (4*),
     name.count (1)
+3c: league.numberOfRounds (2),
     player.stamina (1),
     stadium.capacity (4),
     clubFinances.groundMaintenanceLastMonth (4)
+3d: person.job (1),
     player.strength (1),
     continent.federationLongName (51 t)
+3e: person.clubStartDate (8),
     league.numerOfTeams (2),
     player.tackling (1)
+3f: player.teamWork (1),
     nonPlayer.faveWingBack (4*)
+40: player.technique (1),
     stadium.seating (4),
     person.clubStartYear (2),
     clubFinances.wagesLastMonth (4)
+41: player.throwIns (1)
+42: player.versatility (1),
     person.clubStartDateIsLeapYear (4)
     competition type , 1=club domestic, 2=club international, 4=nation international
+43: player.creativity (1),
     nonPlayer.formation (1)
+44: player.workrate (1),
     stadium.expansionCapacity (4),
     clubFinances.dividendsLastMonth (4)
+45: player.morale (1)
+46: person.clubEndDate (8)
+48: stadium.nearbyStadium (4*),
     clubFinances.bonusesLastMonth (4)
+49: league.numberOfSubsNamed (1)
+4a: league.numberOfSubsUsed (1)
+4c: stadium.isCovered (1),
     clubFinances.signOnFeesLastMonth (4)
+4d: stadium.underSoilHeated (1)
+4e: person.wage (4)
+50: clubFinances.gateReceiptsLastMonth (4)
     competition's suspension ID
+52: person.value (4),
     club.shortNameGender (1)
+53: club.nation (4*),
     clubcomp.abbreviation (4 t),
     nation.tla (4 t)
+54: clubFinances.otherIncomeLastMonth (4)
+56: person.adaptability (1)
+57: club.division (4*),
     person.ambition (1),
     clubcomp.scope (1),
     nation.demonym (26 t)
+58: person.determination (1),
     clubcomp.selected (1),
     clubFinances.prizeMoneyLastMonth (4)
+59: person.loyalty (1),
     clubcomp.continent (4*)
+5a: person.pressure (1)
+5b: club.lastDivision (4*),
     person.professionalism (1)
+5c: person.sportsmanship (1),
     clubFinances.seasonTicketLastMonth (4)
     Cup Prize money for reaching round
+5d: person.temperament (1),
     clubcomp.nation (4*)
+5e: person.squad (1)
+5f: person.classification (1),
     club.lastPosition (1)
+60: person.clubValuation (1),
     club.reserveDivision (4*),
     clubFinances.interestEarnedLastMonth (4)
     Cup Prize money for winning this round
+61: person.player (4*),
     clubcomp.foregroundColour (4*)
+64: club.proStatus (1),
     clubFinances.investmentLastMonth (4)
     Cup Prize money for losing this round
+65: club.bankBalance (4),
     person.preferences (4*),
     clubcomp.backgroundColour (4*)
+68: clubFinances.tvRevenueLastMonth (4)
+69: club.stadium (4*),
     person.nonPlayer (4*),
     clubcomp.reputation (2)
+6c: clubFinances.merchandisingLastMonth (4)
+6d: club.ownsStadium (1),
     person.euroRegistered (1)
+6e: club.reserveStadium (4*)
+70: continent.federationLongNameGender (1),
     clubFinances.playersBoughtThisMonth (4)
+71: nation.continent (4*),
     continent.federationShortName (26 t)
+72: club.homeMatchDay (1)
+73: club.averageAttendance (4)
+74: clubFinances.unknown (4)
+75: nation.region (1)
+76: nation.actualRegion (1)
+77: nation.languageOne (1),
     club.minimumAttendance (4)
+78: nation.languageTwo (1),
     clubFinances.playersSoldThisMonth (4)
+79: nation.languageThree (1)
+7a: nation.capital (4*)
+7b: club.maximumAttendance (4)
+7c: clubFinances.unknown (4)
+7e: nation.developedState (1)
+7f: club.trainingFacilities (1),
     nation.eecMember (1)
+80: club.reputation (2),
     nation.stadium (4*),
     clubFinances.otherCostsThisMonth (4)
+82: club.plc (1)
+83: club.homeKitForeground (4*)
+84: nation.gameImportance (1),
     clubFinances.interestPaidThisMonth (4)
+85: nation.leagueStandard (1)
+86: nation.clubCount (2)
+87: club.homeKitBackground (4*)
+88: nation.staffCount (4),
     clubFinances.leagueFinesThisMonth (4)
+8b: club.awayKitForeground (4*),
     continent.federationShortNameGender (1)
+8c: nation.seasonUpdateDay (2),
     continent.regionalStrength (?),
     clubFinances.groundMaintenanceThisMonth (4)
+8e: nation.reputation (2)
+8f: club.awayKitBackground (4*)
+90: clubFinances.wagesThisMonth (4)
+93: club.thirdKitForeground (4*)
+94: clubFinances.dividendsThisMonth (4)
+97: club.thirdKitBackground (4*)
+98: clubFinances.bonusesThisMonth (4)
+9b: club.likedStaffOne (4*)
+9c: clubFinances.signOnFeesThisMonth (4)
+9f: club.likedStaffTwo (4*)
+a0: clubFinances.gateReceiptsThisMonth (4)
+a3: club.likedStaffThree (4*)
+a4: clubFinances.otherIncomeThisMonth (4)
+a7: club.dislikedStaffOne (4*)
+a8: clubFinances.prizeMoneyThisMonth (4)
+a9: ???league??? possibly related with promotion/relegation play-offs
+ab: club.dislikedStaffTwo (4*)
+ac: clubFinances.seasonTicketsThisMonth (4)
+af: club.dislikedStaffThree (4*)
+b0: clubFinances.interestEarnedThisMonth (4)
+b3: club.rivalClubOne (4*)
+b4: clubFinances.investmentThisMonth (4)
+b7: club.rivalClubTwo (4*)
+b8: clubFinances.tvRevenueThisMonth (4)
+ba: ???league??? possibly related with promotion/relegation play-offs
+bb: club.rivalClubThree (4*)
+bc: clubFinances.merchandisingThisMonth (4)
+be: league.promotion.auto.places (1)
+bf: club.chairman (4*)
     league.promotion.playoff.places (1)
+c0: clubFinances.playersBoughtLastYear (4)
     clubFinances.players.bought.last.year (4)
     league.relegation.playoff.places (1)
+c1: league.relegation.auto.places (1)
+c2: league.points.for.win (1)
+c3: club.directorOne (4*)
     league.points.for.draw (1)
+c4: clubFinances.unknown (4)
     ???league???
+c5: first point tiebreaker.league
+c6: second point tiebreaker.league
+c7: club.directorTwo (4*)
     third point tiebreaker.league
+c8: clubFinances.playersSoldLastYear (4)
+cb: club.directorThree (4*)
+cc: clubFinances.unknown (4)
+cf: club.manager (4*)
+d0: clubFinances.otherExpenditureLastYear (4)
+d3: club.assistantManager (4*)
+d4: clubFinances.interestPaidLastYear (4)
+d7: club.squad (4* x 50)
+d8: clubFinances.leagueFinesLastYear (4)
+dc: clubFinances.groundMaintenanceLastYear (4)
+e0: clubFinances.wagesLastYear (4)
+e2: league.stadiumCapacityRequired (2)
+e4: league.seatingCapacityRequired (2),
     clubFinances.dividendsLastYear (4)
+e8: clubFinances.bonusesLastYear (4)
+ec: clubFinances.signOnFeesLastYear (4)
+ee: ???league??? possibly related with promotion/relegation play-offs
+ef: ???league??? possibly related with promotion/relegation play-offs
+f0: clubFinances.gateReceiptsLastYear (4)
     ???league??? possibly related with promotion/relegation play-offs
+f1: ???league??? possibly related with promotion/relegation play-offs
+f4: clubFinances.otherIncomeLastYear (4)
+f8: clubFinances.prizeMoneyLastYear (4)
+fc: clubFinances.seasonTicketsLastYear (4)
+100: clubFinances.interestEarnedLastYear (4)
+104: clubFinances.InvestmentLastYear (4)
+108: clubFinances.tvRevenueLastYear (4)
+10c: clubFinances.merchandisingLastYear (4)
+110: nation.rivalOne (4*),
      clubFinances.playersBoughtThisYear (4)
+114: nation.rivalTwo (4*),
      clubFinances.unknown (4)
+118: nation.rivalThree (4*),
      clubFinances.playersSoldThisYear (4)
+11c: nation.selected (1),
      clubFinances.unknown (4)
+120: clubFinances.otherCostsThisYear (4)
+124: clubFinances.interestPaidThisYear (4)
+128: clubFinances.leagueFinesThisYear (4)
+12c: clubFinances.groundMaintenanceThisYear (4)
+130: clubFinances.wagesPaidThisYear (4)
+134: clubFinances.dividendsPaidThisYear (4)
+138: clubFinances.bonusesPaidThisYear (4)
+13c: clubFinances.signOnFeesThisYear (4)
+140: clubFinances.gateReceiptsThisYear (4)
+144: clubFinances.otherIncomeThisYear (4)
+148: clubFinances.prizeMoneyThisYear (4)
+14c: clubFinances.seasonTicketsThisYear (4)
+150: clubFinances.interestEarnedThisYear (4)
+154: clubFinances.investmentThisYear (4)
+158: clubFinances.tvRevenueThisYear (4)
+15c: clubFinances.merchandisingThisYear (4)
+19f: club.coaches (4* x 5)
+1b3: club.scouts (4* x 7)
+1cf: club.physios (4* x 3)
+1db: club.euroComp (4*)
+1df: club.euroSeed (1)
+1e0: club.matchSquad (4* x 20)
+230: club.tactics (4, 4, 4, 4)
+240: club.currentTactics (4)
+244: club.hasLinkedClub (1)

– First value is the offset from the start of each object that this information is stored.
– Value in brackets is the number of bytes used
– t = text, f = floating point, * signifies that the value will be a pointer at run time but a simple integer in the data.
C header

Code: Select all

//----------------------------------------------------------------------------
// Project: Championship Manager 3 Program (and subsequent updates)
// Sports Interactive
// Copyright © 1997. All Rights Reserved.
//
// SUBSYSTEM: Fix Application
// FILE: database.h
// AUTHOR: Marc Vaughan
//
// OVERVIEW
// ~~~~~~~~
// Header file for the database access functions.
//
//----------------------------------------------------------------------------

// Ifdef wrapping to prevent multiple inclusions
#ifndef DATABASE_H
#define DATABASE_H

//Added by Graeme Kelly
typedef struct
{
short day; // days from Jan 1st.
short year;
long LeapYear; // =1 if year is a leapyear, 0 otherwise.
} CM_DATE;


// -------------------- //
// Custom Include Files //
// -------------------- //
#include "date.h"
#include "utils.h"
#include "zipdir.h"
#include "club.h"
#include "langlib.h"

// Define for initialising club rep table
#define INITIALISE_TABLE TRUE

// Invalid date def
#define INVALID_DATE CM_DATE( 31, 1900 )

// Languages
#define DB_ALBANIAN 1
#define DB_ARABIC 2
#define DB_BULGARIAN 3
#define DB_CHINESE 4
#define DB_CROATIAN 5
#define DB_CZECH 6
#define DB_DUTCH 7
#define DB_ENGLISH 8
#define DB_FINNISH 9
#define DB_FRENCH 10
#define DB_GERMAN 11
#define DB_GREEK 12
#define DB_HEBREW 13
#define DB_HUNGARIAN 14
#define DB_ITALIAN 15
#define DB_JAPANESE 16
#define DB_KOREAN 17
#define DB_POLISH 18
#define DB_PORTUGUESE 19
#define DB_ROMANIAN 20
#define DB_RUSSIAN 21
#define DB_NORWEGIAN 22
#define DB_SERBIAN 23
#define DB_SPANISH 24
#define DB_TURKISH 25
#define DB_BURMESE 26
#define DB_MALAY 27
#define DB_PERSIAN 28
#define DB_SLOVAK 29
#define DB_SWEDISH 30
#define DB_ICELANDIC 31
#define DB_DANISH 32
#define DB_AFRIKAANS 33
#define _DB_ALBANIAN 34
#define DB_AMHARIC 35
#define DB_ARMENIAN 36
#define DB_AZERI 37
#define DB_BANGLA 38
#define DB_ESTONIAN 39
#define DB_GEORGIAN 40
#define DB_HINDI 41
#define DB_JAVANESE 42
#define DB_KHMER 43
#define DB_KYRGYZ 44
#define DB_LAO 45
#define DB_LATVIAN 46
#define DB_LETBURGESCH 47
#define DB_LITHUANIAN 48
#define DB_MACEDONIAN 49
#define DB_MALAGASY 50
#define DB_MALTESE 51
#define DB_SINHALESE 52
#define DB_SLOVENIAN 53
#define DB_SOMALI 54
#define DB_SWAHILI 55
#define DB_TAJIK 56
#define DB_TAMIL 57
#define DB_THAI 58
#define DB_UZBEK 59
#define VIETNAMESE 60

#define DB_NUMBER_OF_CM3_LANGUAGES 60

// Formation definitions
#define FORMATION_NOT_SET 0
#define FORMATION_532SW 1
#define FORMATION_532 2
#define FORMATION_442 3
#define FORMATION_433 4
#define FORMATION_424 5
#define FORMATION_352 6
#define FORMATION_41212 7
#define FORMATION_451 8
#define FORMATION_343 9

#define DB_NUMBER_OF_FORMATION_SHAPES 10

// NationGroupDefines
#define EEC_COUNTRY 2
#define NON_EEC_COUNTRY 1

// Selected leagues defs (+11c)
#define NOT_SELECTED 0x0000
#define SELECTED_BACKGROUND 0x0001
#define SELECTED_FOREGROUND 0x0002
#define ALL_DIVISIONS_ACTIVE 0x0004

// Compatability defs //
#define cm3_second_name_list cm3_second_names_list
#define CM3_PLAYER CM3_PLAYERS
#define CM3_NON_PLAYER CM3_NON_PLAYERS
#define CM3_CLUB_COMP CM3_CLUB_COMPS
#define cm3_club_tbl cm3_clubs_tbl
#define cm3_club_tbl_sz cm3_clubs_tbl_sz
#define cm3_player_tbl cm3_players_tbl
#define CM3_NAME CM3_NAMES
#define CENTER CENTRE
#define CM3_YOUTH_PLAYER CM3_YOUTH_PLAYERS

// ------------------//
// Constants //
// ----------------- //

#define INDEX_FILENAME "index.dat"

#define DB_CONTINENTS_VERSION 0x01
#define DB_NATIONS_VERSION 0x02
#define DB_CITIES_CORRUPT_ON_MAC 0x01
#define DB_CITIES_VERSION 0x02
#define DB_STADIUMS_VERSION 0x01
#define DB_CLUBS_VERSION 0x02
#define DB_STAFF_VERSION 0x02
#define DB_NON_PLAYERS_VERSION 0x02
#define DB_PLAYERS_VERSION 0x02
#define DB_STAFF_PREFERENCES_VERSION 0x01
#define DB_STAFF_HISTORY_VERSION 0x01
#define DB_CLUB_COMPS_VERSION 0x02
#define DB_CLUB_COMP_HISTORY_VERSION 0x01
#define DB_STAFF_COMPS_VERSION 0x02
#define DB_STAFF_COMP_HISTORY_VERSION 0x01
#define DB_OFFICIALS_VERSION 0x01
#define DB_COLOURS_VERSION 0x01
#define DB_NAMES_VERSION 0x01

// Primary colour definitions
#define PRIMARY_BLACK 1
#define PRIMARY_WHITE 2
#define PRIMARY_GREY 3
#define PRIMARY_YELLOW 4
#define PRIMARY_GREEN 5
#define PRIMARY_BLUE 6
#define PRIMARY_PURPLE 7
#define PRIMARY_RED 8
#define PRIMARY_ORANGE 9
#define PRIMARY_BROWN 10

// Condition level below which a player is considered unable to play
#define CONDITION_INJURED 60

// max number of friendly competitions
#define MAX_FRIENDLY_COMPETITIONS 127

// text lengths
#define LONG_TXT_LENGTH 101
#define STANDARD_TXT_LENGTH 51
#define SHORT_TXT_LENGTH 26

// club staff table sizes
#define DIRECTOR_SIZE 3
#define SQUAD_SIZE 50
#define SCOUT_SIZE 7
#define COACH_SIZE 5
#define PHYSIO_SIZE 3

// max number of human players
#define MAX_HUMAN_PLAYERS 16

// Maximum number of tactics in training at once
#define MAX_TACTIC_TRAINING 4

// Maximum size of a squad for a match
#define TEAM_SZ 20

// Ability defs
#define LOWER_TECHNICAL_ABILITY_LIMIT -125
#define UPPER_TECHNICAL_ABILITY_LIMIT 125
#define LOWER_NON_TECHNICAL_ABILITY_LIMIT 1
#define UPPER_NON_TECHNICAL_ABILITY_LIMIT 20

// ----------------------- //
// Enum definitions //
// ----------------------- //

// Home and away team definitions
#define HOME_TEAM 0
#define AWAY_TEAM 1

// nation region (+75)
#define REGION_AFRICA 1
#define REGION_ASIA 2
#define REGION_BALKAN 3
#define REGION_BRAZIL 4
#define REGION_BRITAIN 5
#define REGION_CARIBBEAN 6
#define REGION_CENTRAL_AMERICA 7
#define REGION_EASTERN_EUROPE 8
#define REGION_FRANCE 9
#define REGION_GERMANY 10
#define REGION_HOLLAND 11
#define REGION_ITALY 12
#define REGION_JAPAN 13
#define REGION_MIDDLE_EAST 14
#define REGION_NORTH_AFRICA 15
#define REGION_NORTH_AMERICA 16
#define REGION_NORTHERN_EUROPE 17
#define REGION_OCEANIA 18
#define REGION_RUSSIA 19
#define REGION_SCANDINAVIA 20
#define REGION_SOUTH_AFRICA 21
#define REGION_SOUTH_AMERICA 22
#define REGION_SOUTHERN_EUROPE 23
#define REGION_SPAIN 24
#define FIRST_REGION 1
#define LAST_REGION 24

// nation actual region (+76)
#define ACTUAL_REGION_AFRICA 1
#define ACTUAL_REGION_ASIA 2
#define ACTUAL_REGION_CARIBBEAN 3
#define ACTUAL_REGION_CENTRAL_AMERICA 4
#define ACTUAL_REGION_CENTRAL_EUROPE 5
#define ACTUAL_REGION_EASTERN_EUROPE 6
#define ACTUAL_REGION_MIDDLE_EAST 7
#define ACTUAL_REGION_NORTH_AFRICA 8
#define ACTUAL_REGION_NORTH_AMERICA 9
#define ACTUAL_REGION_OCEANIA 10
#define ACTUAL_REGION_SCANDINAVIA 11
#define ACTUAL_REGION_SOUTH_AMERICA 12
#define ACTUAL_REGION_SOUTHERN_EUROPE 13
#define ACTUAL_REGION_UK_AND_IRELAND 14
#define FIRST_ACTUAL_REGION 1
#define LAST_ACTUAL_REGION 14

// club professional status
#define PROFESSIONAL 1
#define SEMI_PRO 2
#define AMATEUR 3

// states of development
#define DEVELOPED_STATE 1
#define DEVLOPING_STATE 2
#define THIRD_WORLD_STATE 3

// database days of the week
#define DB_SUN 1
#define DB_MON 2
#define DB_TUE 3
#define DB_WED 4
#define DB_THUR 5
#define DB_FRI 6
#define DB_SAT 7

// staff job for club/nation (+3D)
#define JOB_INVALID_JOB 0
#define JOB_CHAIRMAN 1
#define JOB_MANAGING_DIRECTOR 2
#define JOB_GENERAL_MANAGER 3
#define JOB_DIRECTOR_OF_FOOTBALL 4
#define JOB_MANAGER 5
#define JOB_ASSISTANT_MANAGER 6
#define JOB_RESERVE_TEAM_MANAGER 7
#define JOB_COACH 8
#define JOB_SCOUT 9
#define JOB_PHYSIO 10
#define JOB_PLAYER 11
#define JOB_PLAYER_MANAGER 12
#define JOB_PLAYER_ASSISTANT_MANAGER 13
#define PLAYER_RESERVE_TEAM_MANAGER 14
#define JOB_PLAYER_COACH 15
#define JOB_PLAYER_RETIRED 16
#define JOB_MEDIA_PUNDIT 17

// staff playing squad
#define INVALID_SQUAD 0
#define CLUB_SENIOR_SQUAD 0x01
#define CLUB_RESERVE_SQUAD 0x02
#define NATION_MAIN_SQUAD 0x04
#define NATION_B_SQUAD 0x08

// staff classification (+5F)
#define INVALID_CLASSIFICATION 0
#define NON_PLAYER 1
#define PLAYER 2
#define NON_PLAYER_AND_PLAYER 3
#define YOUTH_PLAYER 4
#define NEW_HUMAN_MANAGER 5
#define SPARE_NON_PLAYER 6

// name tables
#define FIRSTNAME 1
#define SECONDNAME 2
#define COMMONNAME 3

// Player form definitions
#define VERY_POOR 0
#define POOR 1
#define AVERAGE 2
#define GOOD 3
#define VERY_GOOD 4
#define SUPERB 5

// Index file ids //
#define NUM_INDEX_TABLES 22
#define CLUB_TABLE 0
#define NATION_CLUBS_TABLE 1
#define COLOUR_TABLE 2
#define CONTINENT_TABLE 3
#define NATION_TABLE 4
#define STADIUM_TABLE 5
#define STAFF_TABLE 6
#define OFFICIALS_TABLE 7
#define YOUTH_PLAYER_TABLE 8 // Not used
#define NON_PLAYER_TABLE 9
#define PLAYER_TABLE 10
#define STAFF_COMP_TABLE 11
#define CLUB_COMP_TABLE 12
#define FIRST_NAME_TABLE 13
#define SECOND_NAME_TABLE 14
#define COMMON_NAME_TABLE 15
#define NATION_COMP_TABLE 16
#define STAFF_HISTORY_TABLE 17
#define STAFF_COMP_HISTORY_TABLE 18
#define CLUB_COMP_HISTORY_TABLE 19
#define NATION_COMP_HISTORY_TABLE 20
#define CITY_TABLE 21
#define STAFF_PREFERENCES_TABLE 22 // MUX with youth player table

#define test_for_bits_set( info, bits ) ( ( info & bits ) == bits )

// type definitions
#ifndef PLATFORM_MAC
typedef struct cm3_continents CM3_CONTINENTS;
typedef struct cm3_nations CM3_NATIONS;
typedef struct cm3_cities CM3_CITIES;
typedef struct cm3_stadiums CM3_STADIUMS;
typedef struct cm3_clubs CM3_CLUBS;
typedef struct cm3_staff CM3_STAFF;
typedef struct cm3_non_players CM3_NON_PLAYERS;
typedef struct cm3_players CM3_PLAYERS;
typedef struct cm3_staff_preferences CM3_STAFF_PREFERENCES;
typedef struct cm3_staff_history CM3_STAFF_HISTORY;
typedef struct cm3_club_comps CM3_CLUB_COMPS;
typedef struct cm3_club_comp_history CM3_CLUB_COMP_HISTORY;
typedef struct cm3_staff_comps CM3_STAFF_COMPS;
typedef struct cm3_staff_comp_history CM3_STAFF_COMP_HISTORY;
typedef struct cm3_officials CM3_OFFICIALS;
typedef struct cm3_colours CM3_COLOURS;
typedef struct cm3_names CM3_NAMES;
#else
typedef struct mac_cm3_continents CM3_CONTINENTS;
typedef struct mac_cm3_nations CM3_NATIONS;
typedef struct mac_cm3_cities CM3_CITIES;
typedef struct mac_cm3_stadiums CM3_STADIUMS;
typedef struct mac_cm3_clubs CM3_CLUBS;
typedef struct mac_cm3_staff CM3_STAFF;
typedef struct mac_cm3_non_players CM3_NON_PLAYERS;
typedef struct mac_cm3_players CM3_PLAYERS;
typedef struct mac_cm3_staff_preferences CM3_STAFF_PREFERENCES;
typedef struct mac_cm3_staff_history CM3_STAFF_HISTORY;
typedef struct mac_cm3_club_comps CM3_CLUB_COMPS;
typedef struct mac_cm3_club_comp_history CM3_CLUB_COMP_HISTORY;
typedef struct mac_cm3_staff_comps CM3_STAFF_COMPS;
typedef struct mac_cm3_staff_comp_history CM3_STAFF_COMP_HISTORY;
typedef struct mac_cm3_officials CM3_OFFICIALS;
typedef struct mac_cm3_colours CM3_COLOURS;
typedef struct mac_cm3_names CM3_NAMES;

#include "mac_database.h"
#endif


// -------------------------- //
// Continents //
// -------------------------- //

// This structure contains information about a nations name list beginning and
// end within each of the various names tables.
typedef struct
{
long first_name_start_index; // Start index for this nations first names
long second_name_start_index; // Start index for this nations second names
long common_name_start_index; // Start index for this nations common names
long number_first_names; // Total nmber of first names
long number_second_names; // Total number of second names
long number_common_names; // Total number of common names
long first_name_count; // Count of different types of first names
long second_name_count; // Count of different types of second names
long common_name_count; // Count of different types of common names
} NATION_NAME_INDEX_ENTRY;

#ifdef DATABASE_CPP
NATION_NAME_INDEX_ENTRY *nation_name_index_tbl = (NATION_NAME_INDEX_ENTRY*)0;
// Size is the same as the cm3_nations_tbl_sz
#else
extern NATION_NAME_INDEX_ENTRY *nation_name_index_tbl;
#endif


// the following structures need to be byte aligned
#ifdef PLATFORM_MAC
#pragma options align=packed
#endif

// -------------------------- //
// Continents //
// -------------------------- //

struct cm3_continents
{
// original data
long ContinentID;
char ContinentName[ SHORT_TXT_LENGTH ];
char ContinentGenderName;
char ContinentNameThreeLetter[ 4 ];
char ContinentNameContinentality[ SHORT_TXT_LENGTH ];
char ContinentFederationName[ LONG_TXT_LENGTH ];
char ContinentGenderFederationName;
char ContinentFederationNameShort[ SHORT_TXT_LENGTH ];
char ContinentGenderFederationNameShort;
SI_DOUBLE ContinentRegionalStrength;
};

// -------------------------- //
// Nations //
// -------------------------- //

struct cm3_nations
{
// original data
long NationID;
char NationName[ STANDARD_TXT_LENGTH ];
char NationGenderName;
char NationNameShort[ SHORT_TXT_LENGTH ];
char NationGenderNameShort;
char NationNameThreeLetter[ 4 ];
char NationNameNationality[ SHORT_TXT_LENGTH ];
CM3_CONTINENTS *NationContinent;
char NationRegion;
char NationActualRegion;
char NationFirstLanguage;
char NationSecondLanguage;
char NationThirdLanguage;
CM3_CITIES *NationCapitalCity;
char NationStateOfDevelopment;
char NationGroupMembership;
CM3_STADIUMS *NationNationalStadium;
char NationGameImportance;
char NationLeagueStandard;
short NationNumberClubs;
long NationNumberStaff; // Version 0x02 - Added
short NationSeasonUpdateDay; // Version 0x02 - Added
short NationReputation; // Version 0x02 - Changed char->short
CM3_COLOURS *NationForegroundColour1;
CM3_COLOURS *NationBackgroundColour1;
CM3_COLOURS *NationForegroundColour2;
CM3_COLOURS *NationBackgroundColour2;
CM3_COLOURS *NationForegroundColour3;
CM3_COLOURS *NationBackgroundColour3;
SI_DOUBLE NationFIFACoefficient;
SI_DOUBLE NationFIFACoefficient91;
SI_DOUBLE NationFIFACoefficient92;
SI_DOUBLE NationFIFACoefficient93;
SI_DOUBLE NationFIFACoefficient94;
SI_DOUBLE NationFIFACoefficient95;
SI_DOUBLE NationFIFACoefficient96;
SI_DOUBLE NationUEFACoefficient91;
SI_DOUBLE NationUEFACoefficient92;
SI_DOUBLE NationUEFACoefficient93;
SI_DOUBLE NationUEFACoefficient94;
SI_DOUBLE NationUEFACoefficient95;
SI_DOUBLE NationUEFACoefficient96;
CM3_NATIONS *NationRivals1;
CM3_NATIONS *NationRivals2;
CM3_NATIONS *NationRivals3;

// runtime data
char NationLeagueSelected;
long NationShortlistOffset; // Version 0x02 - Added
char NationGamesPlayed; // Version 0x02 - Moved to runtime
};


// WEATHER STRUCTURE DEFINITIONS //
// (Have Fun PJ) //
// This structure defines the current weather settings for an area.

#define SPECIAL_HAIL 1
#define SPECIAL_SLEET 2
#define SPECIAL_SNOW 3

typedef struct
{
char wind;
char precipitation;
char temperature;
char special;
} WEATHER_CONDITION;

// Wind defintion structure, this structure should give the precentage scale
// upon which each of the various wind type will happen within a season.
// Eg. calm - 3 // 0 - 3 % means calm weather occurs
// breezy - 20
// gusty - 75
// strong - 90
// gale - 100
typedef struct
{
char calm;
char breezy;
char gusty;
char strong;
char gale;
} WIND;

// Precipitation weather structure, this structure gives the percentage chance
// of each of the various types of precipitations happening.
typedef struct
{
char dry;
char wet;
char drizzle;
char shower;
char down_pour;
} PRECIPITATION;

// Temperature weather structure, this structure gives the percentage chance
// of each of the various types of precipitations happening.
typedef struct
{
char freezing;
char cold;
char mild;
char fine;
char warm;
char hot;
char very_hot;
} TEMPERATURE;

// This structure defines a seasons weather conditions within CM3.
typedef struct
{
short WeatherSeasonStartDay;
WIND WeatherSeasonWind;
PRECIPITATION WeatherSeasonPrecipitation;
TEMPERATURE WeatherSeasonTemperature;
} WEATHER_SEASON;

// CITY_WEATHER : This structure defines the weather for a particular city.
// This information should be editable through the data editor
// (Thanks PJ)

// Season definitions ... for indexing into CityWeatherSeason
#define SPRING 0
#define SUMMER 1
#define AUTUMN 2
#define WINTER 3

typedef struct
{
long CityWeatherID; // ID of the city (auto generated by editor)
char CityWeatherName[ SHORT_TXT_LENGTH ]; // Name of the city which is modelled (editable)
WEATHER_SEASON CityWeatherSeason[ 4 ]; // Seasonal model for this city (editable)
WEATHER_CONDITION CityWeatherCondition; // Current Weather in this city (not editable)
} CITY_WEATHER;



// -------------------------- //
// Cities //
// -------------------------- //

struct cm3_cities
{
// original data
long CityID;
char CityName[ SHORT_TXT_LENGTH ];
char CityGenderName;
CM3_NATIONS *CityNation;
SI_DOUBLE CityLatitude;
SI_DOUBLE CityLongitude;
char CityAttraction;
long CityWeather;
// CITY_WEATHER *CityWeatherCity; // Weather city to use for this cities weather
};

// -------------------------- //
// Stadiums //
// -------------------------- //

struct cm3_stadiums
{
// original data
long StadiumID;
char StadiumName[ STANDARD_TXT_LENGTH ];
char StadiumGenderName;
CM3_CITIES *StadiumCity;
long StadiumCapacity;
long StadiumSeatingCapacity;
long StadiumExpansionCapacity;
CM3_STADIUMS *StadiumNearbyStadium;
char StadiumCovered;
char StadiumUnderSoilHeating;
};

// -------------------------- //
// Clubs //
// -------------------------- //

struct cm3_clubs
{
// original data
long ClubID;
char ClubName[ STANDARD_TXT_LENGTH ];
char ClubGenderName;
char ClubNameShort[ SHORT_TXT_LENGTH ];
char ClubGenderNameShort;
CM3_NATIONS *ClubNation;
CM3_CLUB_COMPS *ClubDivision;
CM3_CLUB_COMPS *ClubLastDivision;
char ClubLastPosition;
CM3_CLUB_COMPS *ClubReserveDivision;
char ClubProfessionalStatus;
long ClubCash;
CM3_STADIUMS *ClubStadium;
char ClubOwnStadium;
CM3_STADIUMS *ClubReserveStadium;
char ClubHomeMatchDay;
long ClubAttendance;
long ClubMinAttendance;
long ClubMaxAttendance;
char ClubTraining;
short ClubReputation; // Version 0x02 - Changed char->short
char ClubPLC;
CM3_COLOURS *ClubForegroundColour1;
CM3_COLOURS *ClubBackgroundColour1;
CM3_COLOURS *ClubForegroundColour2;
CM3_COLOURS *ClubBackgroundColour2;
CM3_COLOURS *ClubForegroundColour3;
CM3_COLOURS *ClubBackgroundColour3;
CM3_STAFF *ClubFavouriteStaff1;
CM3_STAFF *ClubFavouriteStaff2;
CM3_STAFF *ClubFavouriteStaff3;
CM3_STAFF *ClubDislikedStaff1;
CM3_STAFF *ClubDislikedStaff2;
CM3_STAFF *ClubDislikedStaff3;
CM3_CLUBS *ClubRivals1;
CM3_CLUBS *ClubRivals2;
CM3_CLUBS *ClubRivals3;
CM3_STAFF *ClubChairman;
CM3_STAFF *ClubDirectorList[ DIRECTOR_SIZE ];
CM3_STAFF *ClubManager;
CM3_STAFF *ClubAssistantManager;
CM3_STAFF *ClubSquadList[ SQUAD_SIZE ];
CM3_STAFF *ClubCoachList[ COACH_SIZE ];
CM3_STAFF *ClubScoutList[ SCOUT_SIZE ];
CM3_STAFF *ClubPhysioList[ PHYSIO_SIZE ];

// runtime data
long ClubEuroFlag;
char ClubEuroSeeding;
CM3_STAFF *ClubTeamSelected[ TEAM_SZ ];
long ClubTacticTraining[ MAX_TACTIC_TRAINING ];
long ClubTacticSelected;
char ClubHasLinkedClub;

};

// -------------------------- //
// Staff //
// -------------------------- //

struct cm3_staff
{
long StaffID;
char *StaffFirstName;
char *StaffSecondName;
char *StaffCommonName;
CM_DATE StaffDateOfBirth;
short StaffYearOfBirth;
CM3_NATIONS *StaffNation;
CM3_NATIONS *StaffSecondNation;
unsigned char StaffInternationalApps;
unsigned char StaffInternationalGoals;
CM3_CLUBS *StaffNationContracted;
char StaffJobForNation;
CM_DATE StaffDateJoinedNation;
CM_DATE StaffContractExpiresNation;
CM3_CLUBS *StaffClubContracted;
char StaffJobForClub;
CM_DATE StaffDateJoinedClub;
CM_DATE StaffContractExpiresClub;
long StaffEstimatedWage;
long StaffEstimatedValue;
char StaffAdaptability;
char StaffAmbition;
char StaffDetermination;
char StaffLoyalty;
char StaffPressure;
char StaffProfessionalism;
char StaffSportsmanship;
char StaffTemperament;
char StaffPlayingSquad;
char StaffClassification;
char StaffClubValuation;
CM3_PLAYERS *StaffPlayerData;
CM3_STAFF_PREFERENCES *StaffPreferences; // Version 0x02 - New ptr type
CM3_NON_PLAYERS *StaffNonPlayerData;

// Runtime data //
char StaffSquadSelectedFor; // should be StaffEuroSquadFlag - Kev
};

// -------------------------- //
// Non Players //
// -------------------------- //

struct cm3_non_players
{
long StaffNonPlayerID;
short StaffNonPlayerCurrentAbility;
short StaffNonPlayerPotentialAbility;
short StaffNonPlayerHomeReputation; // Version 0x02 - Changed char->short
short StaffNonPlayerCurrentReputation; // Version 0x02 - Changed char->short
short StaffNonPlayerWorldReputation; // Version 0x02 - Changed char->short
char StaffNonPlayerAttacking;
char StaffNonPlayerBusiness;
char StaffNonPlayerCoaching;
char StaffNonPlayerCoachingGks;
char StaffNonPlayerCoachingTechnique;
char StaffNonPlayerDirectness;
char StaffNonPlayerDiscipline;
char StaffNonPlayerFreeRoles;
char StaffNonPlayerInterference;
char StaffNonPlayerJudgement;
char StaffNonPlayerJudgingPotential;
char StaffNonPlayerManHandling;
char StaffNonPlayerMarking;
char StaffNonPlayerMotivating;
char StaffNonPlayerOffside;
char StaffNonPlayerPatience;
char StaffNonPlayerPhysiotherapy;
char StaffNonPlayerPressing;
char StaffNonPlayerResources;
char StaffNonPlayerTactics;
char StaffNonPlayerYoungsters;
CM3_STAFF *StaffNonPlayerGoalkeeper;
CM3_STAFF *StaffNonPlayerSweeper;
CM3_STAFF *StaffNonPlayerDefender;
CM3_STAFF *StaffNonPlayerDefensiveMidfielder;
CM3_STAFF *StaffNonPlayerMidfielder;
CM3_STAFF *StaffNonPlayerAttackingMidfielder;
CM3_STAFF *StaffNonPlayerAttacker;
CM3_STAFF *StaffNonPlayerWingBack;
char StaffNonPlayerFormationPreferred;
};

// -------------------------- //
// Players //
// -------------------------- //

struct cm3_players
{
// original data
long StaffPlayerID;
char StaffPlayerSquadNumber;
short StaffPlayerCurrentAbility;
short StaffPlayerPotentialAbility;
short StaffPlayerHomeReputation; // Version 0x02 - Changed char->short
short StaffPlayerCurrentReputation; // Version 0x02 - Changed char->short
short StaffPlayerWorldReputation; // Version 0x02 - Changed char->short
char StaffPlayerGoalkeeper;
char StaffPlayerSweeper;
char StaffPlayerDefender;
char StaffPlayerDefensiveMidfielder;
char StaffPlayerMidfielder;
char StaffPlayerAttackingMidfielder;
char StaffPlayerAttacker;
char StaffPlayerWingBack;
char StaffPlayerRightSide;
char StaffPlayerLeftSide;
char StaffPlayerCentral;
char StaffPlayerFreeRole;
char StaffPlayerAcceleration;
char StaffPlayerAggression;
char StaffPlayerAgility;
char StaffPlayerAnticipation;
char StaffPlayerBalance;
char StaffPlayerBravery; // Value
char StaffPlayerConsistency;
char StaffPlayerCorners;
char StaffPlayerCrossing;
char StaffPlayerDecisions;
char StaffPlayerDirtiness;
char StaffPlayerDribbling;
char StaffPlayerFinishing;
char StaffPlayerFlair;
char StaffPlayerFreeKicks;
char StaffPlayerHandling;
char StaffPlayerHeading;
char StaffPlayerImportantMatches;
char StaffPlayerInjuryProneness;
char StaffPlayerJumping;
char StaffPlayerLeadership;
char StaffPlayerLeftFoot;
char StaffPlayerLongShots;
char StaffPlayerMarking;
char StaffPlayerMovement;
char StaffPlayerNaturalFitness;
char StaffPlayerOneOnOnes;
char StaffPlayerPace;
char StaffPlayerPassing;
char StaffPlayerPenalties;
char StaffPlayerPositioning;
char StaffPlayerReflexes;
char StaffPlayerRightFoot;
char StaffPlayerStamina;
char StaffPlayerStrength;
char StaffPlayerTackling;
char StaffPlayerTeamwork;
char StaffPlayerTechnique;
char StaffPlayerThrowIns;
char StaffPlayerVersatility;
char StaffPlayerVision;
char StaffPlayerWorkRate;

// runtime data
char StaffPlayerMorale;
};

// -------------------------- //
// Player details //
// -------------------------- //

struct cm3_staff_preferences
{
long StaffPreferencesID;
CM3_CLUBS *StaffFavouriteClubs1;
CM3_CLUBS *StaffFavouriteClubs2;
CM3_CLUBS *StaffFavouriteClubs3;
CM3_CLUBS *StaffDislikedClubs1;
CM3_CLUBS *StaffDislikedClubs2;
CM3_CLUBS *StaffDislikedClubs3;
CM3_STAFF *StaffFavouriteStaff1;
CM3_STAFF *StaffFavouriteStaff2;
CM3_STAFF *StaffFavouriteStaff3;
CM3_STAFF *StaffDislikedStaff1;
CM3_STAFF *StaffDislikedStaff2;
CM3_STAFF *StaffDislikedStaff3;
};

// -------------------------- //
// Staff History //
// -------------------------- //

struct cm3_staff_history
{
long StaffHistoryID;
CM3_STAFF *StaffHistoryStaff;
short StaffHistoryYear;
CM3_CLUBS *StaffHistoryClub;
char StaffHistoryOnLoan;
unsigned char StaffHistoryApps;
unsigned char StaffHistoryGoals;
};

// -------------------------- //
// Club Competitions //
// -------------------------- //

struct cm3_club_comps
{
long ClubCompID;
char ClubCompName[ STANDARD_TXT_LENGTH ];
char ClubCompGenderName;
char ClubCompNameShort[ SHORT_TXT_LENGTH ];
char ClubCompGenderNameShort;
char ClubCompNameThreeLetter[ 4 ];
char ClubCompScope;
char ClubCompSelected;
CM3_CONTINENTS *ClubCompContinent;
CM3_NATIONS *ClubCompNation;
CM3_COLOURS *ClubCompForegroundColour;
CM3_COLOURS *ClubCompBackgroundColour;
short ClubCompReputation; // Version 0x02 - Changed char->short
};

// -------------------------- //
// Club Competition History //
// -------------------------- //

struct cm3_club_comp_history
{
long ClubCompHistoryID;
CM3_CLUB_COMPS *ClubCompHistoryClubComp;
short ClubCompHistoryYear;
CM3_CLUBS *ClubCompHistoryWinners;
CM3_CLUBS *ClubCompHistoryRunnersUp;
CM3_CLUBS *ClubCompHistoryThirdPlaced;
CM3_CLUBS *ClubCompHistoryHosts;
};

// -------------------------- //
// Staff Competitions //
// -------------------------- //

struct cm3_staff_comps
{
long StaffCompID;
char StaffCompName[ STANDARD_TXT_LENGTH ];
char StaffCompGenderName;
char StaffCompNameShort[ SHORT_TXT_LENGTH ];
char StaffCompGenderNameShort;
CM3_CONTINENTS *StaffCompContinent;
CM3_NATIONS *StaffCompNation;
CM3_COLOURS *StaffCompForegroundColour;
CM3_COLOURS *StaffCompBackgroundColour;
short StaffCompReputation; // Version 0x02 - Changed char->short
};

// -------------------------- //
// Staff Competition History //
// -------------------------- //

struct cm3_staff_comp_history
{
long StaffCompHistoryID;
CM3_STAFF_COMPS *StaffCompHistoryStaffComp;
short StaffCompHistoryYear;
char *StaffCompHistoryFirstPlacedFirstName;
char *StaffCompHistoryFirstPlacedSecondName;
CM3_STAFF *StaffCompHistoryFirstPlacedIndex;
long StaffCompHistoryFirstPlacedInfo;
char *StaffCompHistorySecondPlacedFirstName;
char *StaffCompHistorySecondPlacedSecondName;
CM3_STAFF *StaffCompHistorySecondPlacedIndex;
long StaffCompHistorySecondPlacedInfo;
char *StaffCompHistoryThirdPlacedFirstName;
char *StaffCompHistoryThirdPlacedSecondName;
CM3_STAFF *StaffCompHistoryThirdPlacedIndex;
long StaffCompHistoryThirdPlacedInfo;
};

// -------------------------- //
// Officials //
// -------------------------- //

struct cm3_officials
{
long OfficialID;
char *OfficialFirstName;
char *OfficialSecondName;
CM_DATE OfficialDateOfBirth;
short OfficialYearOfBirth;
CM3_NATIONS *OfficialNation;
CM3_CITIES *OfficialCity;
short OfficialCurrentAbility;
short OfficialPotentialAbility;
short OfficialReputation;
char OfficialAllowingFlow;
char OfficialDiscipline;
char OfficialImportantMatches;
char OfficialPressure;
char OfficialRefereeing;
char OfficialRunningLine;
char OfficialTimekeeping;
};

// -------------------------- //
// Colours //
// -------------------------- //

struct cm3_colours
{
long ColourID;
char ColourName[ STANDARD_TXT_LENGTH ];
unsigned char ColourRedIntensity;
unsigned char ColourGreenIntensity;
unsigned char ColourBlueIntensity;
};

// -------------------------- //
// Names //
// -------------------------- //

// The cm3_names structure contains the information upon a name which is used
// by either the staff or officials within championship manager 3.
struct cm3_names
{
char Name[ STANDARD_TXT_LENGTH ];
long NameID;
long Nation;
char count;
};

// reset alignment
#ifdef PLATFORM_MAC
#pragma options align=reset
#endif

// -------------------------- //
// Variables //
// -------------------------- //

#define MAX_INDEX_NAME 50

// Index file struct //
typedef struct
{
char filename[ MAX_INDEX_NAME + 1 ];
long file_id;
long table_sz;
long offset;
long version;
} INDEX_TABLE;

#ifdef DATABASE_CPP
INDEX_TABLE index_info[ NUM_INDEX_TABLES ];

static BOOL game_format_data = FALSE;
static long num_of_friendlies = 0,
num_of_humans = 0;

// Table sizes //
long cm3_continents_tbl_sz = 0;
long cm3_nations_tbl_sz = 0;
long cm3_cities_tbl_sz = 0;
long cm3_stadiums_tbl_sz = 0;
long cm3_clubs_tbl_sz = 0;
long cm3_nation_clubs_tbl_sz = 0;
long cm3_staff_tbl_sz = 0;
long cm3_non_players_tbl_sz = 0;
long cm3_players_tbl_sz = 0;
long cm3_staff_preferences_tbl_sz = 0;
long cm3_staff_history_tbl_sz = 0;
long cm3_club_comps_tbl_sz = 0;
long cm3_club_comp_history_tbl_sz = 0;
long cm3_nation_club_comps_tbl_sz = 0;
long cm3_nation_club_comp_history_tbl_sz = 0;
long cm3_staff_comps_tbl_sz = 0;
long cm3_staff_comp_history_tbl_sz = 0;
long cm3_officials_tbl_sz = 0;
long cm3_colours_tbl_sz = 0;
long cm3_first_names_list_sz = 0;
long cm3_second_names_list_sz = 0;
long cm3_common_names_list_sz = 0;

char use_real_players = 1;

// Table ptrs //
CM3_CONTINENTS *cm3_continents_tbl = NULL;
CM3_NATIONS *cm3_nations_tbl = NULL;
CM3_CITIES *cm3_cities_tbl = NULL;
CM3_STADIUMS *cm3_stadiums_tbl = NULL;
CM3_CLUBS *cm3_clubs_tbl = NULL;
CM3_CLUBS *cm3_nation_clubs_tbl = NULL;
CM3_STAFF *cm3_staff_tbl = NULL;
CM3_NON_PLAYERS *cm3_non_players_tbl = NULL;
CM3_PLAYERS *cm3_players_tbl = NULL;
CM3_STAFF_PREFERENCES *cm3_staff_preferences_tbl = NULL;
CM3_STAFF_HISTORY *cm3_staff_history_tbl = NULL;
CM3_CLUB_COMPS *cm3_club_comps_tbl = NULL;
CM3_CLUB_COMP_HISTORY *cm3_club_comp_history_tbl = NULL;
CM3_CLUB_COMPS *cm3_nation_club_comps_tbl = NULL;
CM3_CLUB_COMP_HISTORY *cm3_nation_club_comp_history_tbl = NULL;
CM3_STAFF_COMPS *cm3_staff_comps_tbl = NULL;
CM3_STAFF_COMP_HISTORY *cm3_staff_comp_history_tbl = NULL;
CM3_OFFICIALS *cm3_officials_tbl = NULL;
CM3_COLOURS *cm3_colours_tbl = NULL;
CM3_NAMES *cm3_first_names_list = NULL;
CM3_NAMES *cm3_second_names_list = NULL;
CM3_NAMES *cm3_common_names_list = NULL;
#else
// Table sizes //
extern long cm3_continents_tbl_sz;
extern long cm3_nations_tbl_sz;
extern long cm3_cities_tbl_sz;
extern long cm3_stadiums_tbl_sz;
extern long cm3_clubs_tbl_sz;
extern long cm3_nation_clubs_tbl_sz;
extern long cm3_staff_tbl_sz;
extern long cm3_non_players_tbl_sz;
extern long cm3_players_tbl_sz;
extern long cm3_staff_preferences_tbl_sz;
extern long cm3_staff_history_tbl_sz;
extern long cm3_club_comps_tbl_sz;
extern long cm3_club_comp_history_tbl_sz;
extern long cm3_nation_club_comps_tbl_sz;
extern long cm3_nation_club_comp_history_tbl_sz;
extern long cm3_staff_comps_tbl_sz;
extern long cm3_staff_comp_history_tbl_sz;
extern long cm3_officials_tbl_sz;
extern long cm3_colours_tbl_sz;
extern long cm3_first_names_list_sz;
extern long cm3_second_names_list_sz;
extern long cm3_common_names_list_sz;

// Table sizes //
extern CM3_CONTINENTS *cm3_continents_tbl;
extern CM3_NATIONS *cm3_nations_tbl;
extern CM3_CITIES *cm3_cities_tbl;
extern CM3_STADIUMS *cm3_stadiums_tbl;
extern CM3_CLUBS *cm3_clubs_tbl;
extern CM3_CLUBS *cm3_nation_clubs_tbl;
extern CM3_STAFF *cm3_staff_tbl;
extern CM3_NON_PLAYERS *cm3_non_players_tbl;
extern CM3_PLAYERS *cm3_players_tbl;
extern CM3_STAFF_PREFERENCES *cm3_staff_preferences_tbl;
extern CM3_STAFF_HISTORY *cm3_staff_history_tbl;
extern CM3_CLUB_COMPS *cm3_club_comps_tbl;
extern CM3_CLUB_COMP_HISTORY *cm3_club_comp_history_tbl;
extern CM3_CLUB_COMPS *cm3_nation_club_comps_tbl;
extern CM3_CLUB_COMP_HISTORY *cm3_nation_club_comp_history_tbl;
extern CM3_STAFF_COMPS *cm3_staff_comps_tbl;
extern CM3_STAFF_COMP_HISTORY *cm3_staff_comp_history_tbl;
extern CM3_OFFICIALS *cm3_officials_tbl;
extern CM3_COLOURS *cm3_colours_tbl;
extern CM3_NAMES *cm3_first_names_list;
extern CM3_NAMES *cm3_second_names_list;
extern CM3_NAMES *cm3_common_names_list;

extern char use_real_players;
#endif

// Language header structure ..
typedef struct
{
long club_tbl_sz;
long continent_tbl_sz;
long nation_comp_tbl_sz;
long nation_tbl_sz;
long cities_tbl_sz;
long club_comp_tbl_sz;
long stadiums_tbl_sz;
long staff_comp_tbl_sz;
} LANG_HEADER;

// Structure containing club language information
typedef struct
{
char ClubName[ STANDARD_TXT_LENGTH ];
char GenderClubName;
char ClubNameShort[ SHORT_TXT_LENGTH ];
char GenderClubNameShort;
} CLUB_LANG;

// Structure containing continent language information
typedef struct
{
char ContinentName[ SHORT_TXT_LENGTH ];
char GenderContinentName;
char ContinentNameThreeLetter[ 4 ];
char ContinentNameNationality[ SHORT_TXT_LENGTH ];
char ContinentFederationName[ LONG_TXT_LENGTH ];
char GenderContinentFederationName;
char ContinentFederationNameShort[ SHORT_TXT_LENGTH ];
char GenderContinentFederationNameShort;
} CONTINENT_LANG;

// Structure containing nation competition language information
typedef struct
{
char NationCompName[ STANDARD_TXT_LENGTH ];
char GenderNationCompName;
char NationCompNameShort[ SHORT_TXT_LENGTH ];
char GenderNationCompNameShort;
char NationCompNameThreeLetter[ 4 ];
} NATION_COMP_LANG;

// Structure containing nation language information
typedef struct
{
char NationName[ STANDARD_TXT_LENGTH ];
char GenderNationName;
char NationNameShort[ SHORT_TXT_LENGTH ];
char GenderNationNameShort;
char NationNameThreeLetter[ 4 ];
char NationNameNationality[ SHORT_TXT_LENGTH ];
} NATION_LANG;

// Structure containing city language information
typedef struct
{
char CityName[ STANDARD_TXT_LENGTH ];
char GenderCityName;
} CITY_LANG;

// Structure containing stadium language information
typedef struct
{
char StadiumName[ STANDARD_TXT_LENGTH ];
char GenderStadiumName;
} STADIUM_LANG;

// Structure containing club comp language information
typedef struct
{
char ClubCompName[ STANDARD_TXT_LENGTH ];
char GenderClubCompName;
char ClubCompNameShort[ SHORT_TXT_LENGTH ];
char GenderClubCompNameShort;
char ClubCompNameThreeLetter[ 4 ];
} CLUB_COMP_LANG;

// Structure containing staff language information
typedef struct
{
char StaffCompName[ STANDARD_TXT_LENGTH ];
char GenderStaffCompName;
char StaffCompNameShort[ SHORT_TXT_LENGTH ];
char GenderStaffCompNameShort;
} STAFF_COMP_LANG;

// Class containing English language text for database
class ENGLISH_LANG
{
public:

ENGLISH_LANG( void );
~ENGLISH_LANG( void );

// access functions
char *get_nation_name( CM3_NATIONS *p_nation );
char *get_nation_name_three_letter( CM3_NATIONS *p_nation );
char *get_club_comp_name( CM3_CLUB_COMPS *p_club_comp );
char *get_continent_name( CM3_CONTINENTS *p_continent );
char *get_staff_comp_name( CM3_STAFF_COMPS *p_staff_comp );
char *get_club_name( CM3_CLUBS *p_club );
char *get_club_name_short( CM3_CLUBS *p_club );
char *get_stadium_name( CM3_STADIUMS *p_stadium );

private:
BOOL read_english_database( void );

LANG_HEADER lang_header;
CLUB_LANG *club_lang_data;
CONTINENT_LANG *continent_lang_data;
NATION_COMP_LANG *nation_comp_lang_data;
NATION_LANG *nation_lang_data;
CITY_LANG *city_lang_data;
STADIUM_LANG *stadium_lang_data;
CLUB_COMP_LANG *club_comp_lang_data;
STAFF_COMP_LANG *staff_comp_lang_data;
};

#ifdef DATABASE_CPP
LANGUAGE current_database_language = NO_LANGUAGE_SET;
long *club_remapping_indices = NULL;
#else
extern LANGUAGE current_database_language;
extern long *club_remapping_indices;
#endif
Downloads CM0102 3.9.68 exe code as text and C header files
You do not have the required permissions to view the files attached to this post.
* [TUTORIAL] How to install and run the game CM0102?> viewtopic.php?f=85&t=3571
Please use search bar for solution before posting your issue
User avatar
Xeno
Patch Team
Posts: 2320
Joined: Wed Nov 25, 2020 5:01 am
Has thanked: 202 times
Been thanked: 795 times

[DOCUMENTATION] Offset Index : Decoding OllyDbg

Post by Xeno »

CPP headers in exe

Code: Select all

9870f8 E:\dev\CM3\cm3 00-01\cm3\code\comp\intercomp\african_nations.cpp
9873c0 E:\dev\CM3\cm3 00-01\si\code\Area.cpp
9873e8 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\arg_prm.cpp
9874ec E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\arg_second.cpp
987924 E:\dev\CM3\cm3 00-01\cm3\code\award\argentina_awards.cpp
987960 E:\dev\CM3\cm3 00-01\cm3\code\transfer\argentina_rules.cpp
987a40 E:\dev\CM3\cm3 00-01\cm3\code\comp\eurocomp\asia_club_champ.cpp
987b60 E:\dev\CM3\cm3 00-01\cm3\code\comp\eurocomp\asia_cup_winner.cpp
987ba0 E:\dev\CM3\cm3 00-01\cm3\code\comp\intercomp\asia_nations.cpp
987be0 E:\dev\CM3\cm3 00-01\cm3\code\comp\eurocomp\asia_super_cup.cpp
987c20 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\aus_nsl.cpp
987cc0 E:\dev\CM3\cm3 00-01\cm3\code\award\australia_awards.cpp
987cfc E:\dev\CM3\cm3 00-01\cm3\code\transfer\australia_rules.cpp
987e24 E:\dev\CM3\cm3 00-01\cm3\code\award\award_manager.cpp
987fa4 E:\dev\CM3\cm3 00-01\cm3\code\award_screens.cpp
9880b0 E:\dev\CM3\cm3 00-01\cm3\code\award\award_shortlist.cpp
9880f4 E:\dev\CM3\cm3 00-01\cm3\code\awol.cpp
989934 E:\dev\CM3\cm3 00-01\cm3\code\background.cpp
989ae0 E:\dev\CM3\cm3 00-01\cm3\code\comp\cups\bel_fa_cup.cpp
989b18 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\bel_first.cpp
989b54 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\bel_second.cpp
989ccc E:\dev\CM3\cm3 00-01\cm3\code\comp\cups\bel_super.cpp
989d04 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\bel_third.cpp
989dfc E:\dev\CM3\cm3 00-01\cm3\code\award\belgium_awards.cpp
989e34 E:\dev\CM3\cm3 00-01\cm3\code\transfer\belgium_rules.cpp
98a1e8 E:\dev\CM3\cm3 00-01\cm3\code\comp\cups\bra_champ_cup.cpp
98a3bc E:\dev\CM3\cm3 00-01\cm3\code\comp\cups\bra_cup.cpp
98aa30 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\bra_nat_first.cpp
98ab64 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\bra_nat_second.cpp
98aba4 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\bra_nat_third.cpp
98acac E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\bra_reg_bahia.cpp
98ae10 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\bra_reg_central.cpp
98ae50 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\bra_reg_gaucho.cpp
98ae90 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\bra_reg_goias.cpp
98aed0 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\bra_reg_minas_gerais.cpp
98af14 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\bra_reg_north.cpp
98af54 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\bra_reg_northeast.cpp
98af98 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\bra_reg_parana.cpp
98afd8 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\bra_reg_pern.cpp
98b014 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\bra_reg_rio.cpp
98b050 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\bra_reg_santa.cpp
98b090 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\bra_reg_sp.cpp
98b0cc E:\dev\CM3\cm3 00-01\cm3\code\award\brazil_awards.cpp
98b104 E:\dev\CM3\cm3 00-01\cm3\code\transfer\brazil_rules.cpp
98b1fc E:\dev\CM3\cm3 00-01\cm3\code\cash.cpp
98b644 E:\dev\CM3\cm3 00-01\cm3\code\club_history.cpp
98b6a0 E:\dev\CM3\cm3 00-01\cm3\code\club_records.cpp
98e598 E:\dev\CM3\cm3 00-01\cm3\code\club_screens.cpp
99b3e0 E:\dev\CM3\cm3 00-01\cm3\code\coach.cpp
99b80c E:\dev\CM3\cm3 00-01\cm3\code\comp\comp.cpp
99c15c E:\dev\CM3\cm3 00-01\cm3\code\comp_screens.cpp
99ca94 E:\dev\CM3\cm3 00-01\cm3\code\comp\comp_stats.CPP
99ebd8 E:\dev\CM3\cm3 00-01\si\code\comp_text.cpp
99ec20 E:\dev\CM3\cm3 00-01\cm3\code\comp\comp_util.cpp
9a7d30 E:\dev\CM3\cm3 00-01\cm3\code\comp\eurocomp\con_champ.cpp
9a7d6c E:\dev\CM3\cm3 00-01\cm3\code\comp\eurocomp\con_merc_cup.cpp
9a7de4 E:\dev\CM3\cm3 00-01\cm3\code\comp\eurocomp\conmebol_liber.cpp
9a7e5c E:\dev\CM3\cm3 00-01\cm3\code\comp\eurocomp\conmebol_merc.cpp
9a7ed8 E:\dev\CM3\cm3 00-01\cm3\code\comp\conmebol_seeding.cpp
9a8190 E:\dev\CM3\cm3 00-01\cm3\code\contract_manager.cpp
9afc8c E:\dev\CM3\cm3 00-01\cm3\code\contract_screens.cpp
9b53c0 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\cro_a1.cpp
9b53f8 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\cro_a2a.cpp
9b5430 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\cro_a2b.cpp
9b5468 E:\dev\CM3\cm3 00-01\cm3\code\comp\cups\cro_cup.cpp
9b5538 E:\dev\CM3\cm3 00-01\cm3\code\award\croatia_awards.cpp
9b5570 E:\dev\CM3\cm3 00-01\cm3\code\transfer\croatia_rules.cpp
9b55ac E:\dev\CM3\cm3 00-01\cm3\code\comp\Cup.cpp
9b5944 E:\dev\CM3\cm3 00-01\cm3\code\comp\cups\cup_stage.cpp
9b5ac8 E:\dev\CM3\cm3 00-01\cm3\code\Database.cpp
9b8478 E:\dev\CM3\cm3 00-01\si\code\Date.cpp
9b8dc0 E:\dev\CM3\cm3 00-01\cm3\code\Db_files.cpp
9b8dfc E:\dev\CM3\cm3 00-01\cm3\code\comp\cups\den_cup.cpp
9b8e30 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\den_first.cpp
9b8e6c E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\den_prm.cpp
9b8ea4 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\den_second.cpp
9b8ee0 E:\dev\CM3\cm3 00-01\cm3\code\award\denmark_awards.cpp
9b8f18 E:\dev\CM3\cm3 00-01\cm3\code\discipline.cpp
9c36ec E:\dev\CM3\cm3 00-01\si\code\display.cpp
9c3734 E:\dev\CM3\cm3 00-01\si\code\network.h
9c3858 E:\dev\CM3\cm3 00-01\cm3\code\dispute.cpp
9c4180 E:\dev\CM3\cm3 00-01\cm3\code\comp\cups\eng_auto_cup.cpp
9c4224 E:\dev\CM3\cm3 00-01\cm3\code\comp\cups\eng_cc_cup.cpp
9c425c E:\dev\CM3\cm3 00-01\cm3\code\comp\cups\eng_charity.cpp
9c4294 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\eng_conf.cpp
9c42cc E:\dev\CM3\cm3 00-01\cm3\code\comp\cups\eng_fa_cup.cpp
9c4338 E:\dev\CM3\cm3 00-01\cm3\code\comp\cups\eng_fa_trophy.cpp
9c4374 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\eng_first.cpp
9c43b0 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\eng_prm.cpp
9c43e8 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\eng_second.cpp
9c4424 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\eng_third.cpp
9c4460 E:\dev\CM3\cm3 00-01\cm3\code\award\england_awards.cpp
9c4498 E:\dev\CM3\cm3 00-01\cm3\code\transfer\england_rules.cpp
9c45f8 E:\dev\CM3\cm3 00-01\cm3\code\comp\eurocomp\eur_super_cup.cpp
9c4638 E:\dev\CM3\cm3 00-01\cm3\code\comp\intercomp\euro_champ.cpp
9c4674 E:\dev\CM3\cm3 00-01\cm3\code\comp\intercomp\euro_champ_qual.cpp
9c48c8 E:\dev\CM3\cm3 00-01\cm3\code\award\european_awards.cpp
9c4900 E:\dev\CM3\cm3 00-01\cm3\code\comp\eurocomp\european_cup.cpp
9c7474 E:\dev\CM3\cm3 00-01\cm3\code\comp\intercomp\fifa_confed.cpp
9c74f4 E:\dev\CM3\cm3 00-01\cm3\code\comp\fifa_rankings.cpp
9c7540 E:\dev\CM3\cm3 00-01\si\code\file_llist.CPP
9c7a48 E:\dev\CM3\cm3 00-01\cm3\code\file_screens.cpp
9c8158 E:\dev\CM3\cm3 00-01\cm3\code\comp\cups\fin_cup.cpp
9c818c E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\fin_first.cpp
9c8254 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\fin_prm.cpp
9c8784 E:\dev\CM3\cm3 00-01\cm3\code\finance.CPP
9c9eb4 E:\dev\CM3\cm3 00-01\cm3\code\find_screens.cpp
9ca1e0 E:\dev\CM3\cm3 00-01\cm3\code\Fine.cpp
9cc0fc E:\dev\CM3\cm3 00-01\cm3\code\award\finland_awards.cpp
9cc134 E:\dev\CM3\cm3 00-01\cm3\code\transfer\finland_rules.cpp
9cc208 E:\dev\CM3\cm3 00-01\cm3\code\comp\fix_man.cpp
9cc27c E:\dev\CM3\cm3 00-01\cm3\code\fog_of_war.cpp
9cc3dc E:\dev\CM3\cm3 00-01\cm3\code\formation.cpp
9ccaf0 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\fra_cfa.cpp
9ccb28 E:\dev\CM3\cm3 00-01\cm3\code\comp\cups\fra_cup.cpp
9ccb5c E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\fra_first.cpp
9ccb98 E:\dev\CM3\cm3 00-01\cm3\code\comp\cups\fra_lge_cup.cpp
9ccbd0 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\fra_lower.cpp
9ccc0c E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\fra_second.cpp
9ccc48 E:\dev\CM3\cm3 00-01\cm3\code\comp\cups\fra_super.cpp
9ccc80 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\fra_third.cpp
9cccbc E:\dev\CM3\cm3 00-01\cm3\code\award\france_awards.cpp
9cccf4 E:\dev\CM3\cm3 00-01\cm3\code\transfer\france_rules.cpp
9cd0a0 E:\dev\CM3\cm3 00-01\cm3\code\comp\friendly.cpp
9cd2a4 E:\dev\CM3\cm3 00-01\cm3\code\game.cpp
9cd3a0 E:\dev\CM3\cm3 00-01\cm3\code\game_config.cpp
9cd3e0 E:\dev\CM3\cm3 00-01\cm3\code\comp\cups\ger_cup.cpp
9cd414 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\ger_first.cpp
9cd450 E:\dev\CM3\cm3 00-01\cm3\code\comp\cups\ger_lge_cup.cpp
9cd488 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\ger_regional.cpp
9cd4c4 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\ger_second.cpp
9cd500 E:\dev\CM3\cm3 00-01\cm3\code\award\germany_awards.cpp
9cd538 E:\dev\CM3\cm3 00-01\cm3\code\transfer\germany_rules.cpp
9cd640 E:\dev\CM3\cm3 00-01\cm3\code\comp\intercomp\goldcup.cpp
9cdab0 E:\dev\CM3\cm3 00-01\cm3\code\comp\cups\gre_cup.cpp
9cdae4 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\gre_prm.cpp
9cdb1c E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\gre_second.cpp
9cdb58 E:\dev\CM3\cm3 00-01\cm3\code\comp\cups\gre_super.cpp
9cdb90 E:\dev\CM3\cm3 00-01\cm3\code\award\greece_awards.cpp
9cdbc8 E:\dev\CM3\cm3 00-01\cm3\code\transfer\greece_rules.cpp
9cdc00 E:\dev\CM3\cm3 00-01\si\code\gui_utils.cpp
9cdc60 E:\dev\CM3\cm3 00-01\si\code\Guio.cpp
9ce408 E:\dev\CM3\cm3 00-01\cm3\code\hall_of_fame.cpp
9cec24 E:\dev\CM3\cm3 00-01\cm3\code\History.cpp
9cedd4 E:\dev\CM3\cm3 00-01\cm3\code\comp\cups\hol_cup.cpp
9cee08 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\hol_first.cpp
9cefa4 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\hol_prm.cpp
9cefdc E:\dev\CM3\cm3 00-01\cm3\code\comp\cups\hol_super.cpp
9cf014 E:\dev\CM3\cm3 00-01\cm3\code\award\holland_awards.cpp
9cf04c E:\dev\CM3\cm3 00-01\cm3\code\transfer\holland_rules.cpp
9cf0d8 E:\dev\CM3\cm3 00-01\cm3\code\comp\host_country.cpp
9cf11c E:\dev\CM3\cm3 00-01\cm3\code\human_manager.cpp
9d93cc E:\dev\CM3\cm3 00-01\cm3\code\index.cpp
9e7f28 E:\dev\CM3\cm3 00-01\cm3\code\injury.cpp
9e9d94 E:\dev\CM3\cm3 00-01\cm3\code\comp\eurocomp\inter_amer_cup.cpp
9e9dd4 E:\dev\CM3\cm3 00-01\cm3\code\award\international_awards.cpp
9e9e14 E:\dev\CM3\cm3 00-01\cm3\code\comp\eurocomp\intertoto_cup.cpp
9e9e94 E:\dev\CM3\cm3 00-01\cm3\code\comp\cups\ire_chal_cup.cpp
9e9ed0 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\ire_first.cpp
9e9f0c E:\dev\CM3\cm3 00-01\cm3\code\comp\cups\ire_leinster_cup.cpp
9e9f4c E:\dev\CM3\cm3 00-01\cm3\code\comp\cups\ire_lge_cup.cpp
9e9f84 E:\dev\CM3\cm3 00-01\cm3\code\comp\cups\ire_munster_cup.cpp
9ea000 E:\dev\CM3\cm3 00-01\cm3\code\comp\cups\ire_pres_cup.cpp
9ea080 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\ire_prm.cpp
9ea0b8 E:\dev\CM3\cm3 00-01\cm3\code\comp\cups\ire_super_cup.cpp
9ea0f4 E:\dev\CM3\cm3 00-01\cm3\code\award\ireland_awards.cpp
9ea12c E:\dev\CM3\cm3 00-01\cm3\code\transfer\ireland_rules.cpp
9ea1c8 E:\dev\CM3\cm3 00-01\cm3\code\comp\cups\ita_c1_super.cpp
9ea204 E:\dev\CM3\cm3 00-01\cm3\code\comp\cups\ita_c_cup.cpp
9ea23c E:\dev\CM3\cm3 00-01\cm3\code\comp\cups\ita_cup.cpp
9ea2a8 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\ita_ser_a.cpp
9ea384 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\ita_ser_b.cpp
9ea474 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\ita_ser_c1a.cpp
9ea558 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\ita_ser_c1b.cpp
9ea654 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\ita_ser_c2a.cpp
9ea75c E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\ita_ser_c2b.cpp
9ea83c E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\ita_ser_c2c.cpp
9ea934 E:\dev\CM3\cm3 00-01\cm3\code\comp\cups\ita_super.cpp
9ea96c E:\dev\CM3\cm3 00-01\cm3\code\award\italy_awards.cpp
9ea9a4 E:\dev\CM3\cm3 00-01\cm3\code\transfer\italy_rules.cpp
9eab90 E:\dev\CM3\cm3 00-01\cm3\code\comp\cups\jap_emp_cup.cpp
9eabc8 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\jap_j1.cpp
9eaedc E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\jap_j2.cpp
9eaf14 E:\dev\CM3\cm3 00-01\cm3\code\comp\cups\jap_j_cup.cpp
9eaf4c E:\dev\CM3\cm3 00-01\cm3\code\comp\cups\jap_super.cpp
9eaf84 E:\dev\CM3\cm3 00-01\cm3\code\award\japan_awards.cpp
9eafbc E:\dev\CM3\cm3 00-01\cm3\code\transfer\japan_rules.cpp
9eaff4 E:\dev\CM3\cm3 00-01\cm3\code\key_nation.cpp
9eb0e8 E:\dev\CM3\cm3 00-01\cm3\code\comp\cups\kor_fa_cup.cpp
9eb120 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\kor_league.cpp
9eb15c E:\dev\CM3\cm3 00-01\cm3\code\comp\cups\kor_league_cup.cpp
9eb198 E:\dev\CM3\cm3 00-01\cm3\code\comp\cups\kor_super_cup.cpp
9eb1d4 E:\dev\CM3\cm3 00-01\cm3\code\award\korea_awards.cpp
9eb20c E:\dev\CM3\cm3 00-01\cm3\code\transfer\korea_rules.cpp
9ed840 E:\dev\CM3\cm3 00-01\si\code\Langlib.cpp
9f15f4 E:\dev\CM3\cm3 00-01\cm3\code\comp\league.cpp
9f1630 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\league_stage.cpp
9f1734 E:\dev\CM3\cm3 00-01\si\code\main.cpp
9f18a4 E:\dev\CM3\cm3 00-01\cm3\code\manager_manager.cpp
a15138 E:\dev\CM3\cm3 00-01\cm3\code\manager_screens.cpp
a15708 E:\dev\CM3\cm3 00-01\cm3\code\match_day.cpp
a15884 E:\dev\CM3\cm3 00-01\cm3\code\match_eng.cpp
a159b0 E:\dev\CM3\cm3 00-01\cm3\code\match_events.cpp
a15da4 E:\dev\CM3\cm3 00-01\cm3\code\match_man.cpp
a15e10 E:\dev\CM3\cm3 00-01\cm3\code\match_official.cpp
a16058 E:\dev\CM3\cm3 00-01\cm3\code\match_pl.cpp
a161d4 E:\dev\CM3\cm3 00-01\cm3\code\match_screens.cpp
a17ba0 E:\dev\CM3\cm3 00-01\cm3\code\match_stats.CPP
a17bec E:\dev\CM3\cm3 00-01\cm3\code\media.cpp
a5a51c E:\dev\CM3\cm3 00-01\cm3\code\Menubar.cpp
a5ab00 E:\dev\CM3\cm3 00-01\cm3\code\comp\friendly\mini_cup.cpp
a5ab3c E:\dev\CM3\cm3 00-01\cm3\code\comp\friendly\mini_league.cpp
a5abe4 E:\dev\CM3\cm3 00-01\cm3\code\award\month_award.cpp
a5b234 E:\dev\CM3\cm3 00-01\cm3\code\award\month_ratings.cpp
a5b26c E:\dev\CM3\cm3 00-01\cm3\code\award\nation_awards.cpp
a5b2a4 E:\dev\CM3\cm3 00-01\cm3\code\national_teams.cpp
a645e4 E:\dev\CM3\cm3 00-01\cm3\code\national_teams_screens.cpp
a649a8 E:\dev\CM3\cm3 00-01\si\code\network.CPP
a649e8 E:\dev\CM3\cm3 00-01\cm3\code\new_transfer_rule_screens.cpp
a693ec E:\dev\CM3\cm3 00-01\cm3\code\news.cpp
a694ac E:\dev\CM3\cm3 00-01\cm3\code\news_screens.cpp
a695f0 E:\dev\CM3\cm3 00-01\cm3\code\comp\cups\nir_charity.cpp
a69628 E:\dev\CM3\cm3 00-01\cm3\code\comp\cups\nir_cup.cpp
a6965c E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\nir_first.cpp
a69698 E:\dev\CM3\cm3 00-01\cm3\code\comp\cups\nir_lge_cup.cpp
a696d0 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\nir_prm.cpp
a69708 E:\dev\CM3\cm3 00-01\cm3\code\comp\cups\nor_cup.cpp
a69740 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\nor_first.cpp
a6977c E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\nor_prm.cpp
a697b4 E:\dev\CM3\cm3 00-01\cm3\code\award\northern_ireland_awards.cpp
a697f4 E:\dev\CM3\cm3 00-01\cm3\code\transfer\northern_ireland_rules.cpp
a69838 E:\dev\CM3\cm3 00-01\cm3\code\award\norway_awards.cpp
a69870 E:\dev\CM3\cm3 00-01\cm3\code\transfer\norway_rules.cpp
a69a18 E:\dev\CM3\cm3 00-01\cm3\code\notes.cpp
a6a068 E:\dev\CM3\cm3 00-01\cm3\code\comp\eurocomp\oceania_club_champ.cpp
a6a0ec E:\dev\CM3\cm3 00-01\cm3\code\comp\intercomp\oceania_nations.cpp
a6a22c E:\dev\CM3\cm3 00-01\cm3\code\officials_manager.cpp
a6a268 E:\dev\CM3\cm3 00-01\cm3\code\award\old_finland_awards.cpp
a6a2a4 E:\dev\CM3\cm3 00-01\cm3\code\award\old_france_awards.cpp
a6a2e0 E:\dev\CM3\cm3 00-01\cm3\code\award\old_international_awards.cpp
a6a324 E:\dev\CM3\cm3 00-01\cm3\code\award\old_ireland_awards.cpp
a6a360 E:\dev\CM3\cm3 00-01\cm3\code\comp\intercomp\olympics.cpp
a6a39c E:\dev\CM3\cm3 00-01\si\code\os.cpp
a6b1e0 E:\dev\CM3\cm3 00-01\cm3\code\physio.cpp
a6bf9c E:\dev\CM3\cm3 00-01\cm3\code\player_regen.cpp
a701b0 E:\dev\CM3\cm3 00-01\cm3\code\player_search.cpp
a78310 E:\dev\CM3\cm3 00-01\cm3\code\player_stats.cpp
a7853c E:\dev\CM3\cm3 00-01\si\code\plot.cpp
a78564 E:\dev\CM3\cm3 00-01\cm3\code\comp\cups\pol_cup.cpp
a78598 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\pol_first.cpp
a785d4 E:\dev\CM3\cm3 00-01\cm3\code\comp\cups\pol_lge_cup.cpp
a7860c E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\pol_second.cpp
a78648 E:\dev\CM3\cm3 00-01\cm3\code\comp\cups\pol_super.cpp
a78680 E:\dev\CM3\cm3 00-01\cm3\code\award\poland_awards.cpp
a786b8 E:\dev\CM3\cm3 00-01\cm3\code\transfer\poland_rules.cpp
a786f0 E:\dev\CM3\cm3 00-01\cm3\code\comp\cups\por_cup.cpp
a78724 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\por_prm.cpp
a7875c E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\por_second.cpp
a78798 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\por_second_b.cpp
a787d4 E:\dev\CM3\cm3 00-01\cm3\code\comp\cups\por_super.cpp
a7880c E:\dev\CM3\cm3 00-01\cm3\code\award\portugal_awards.cpp
a78844 E:\dev\CM3\cm3 00-01\cm3\code\transfer\portugal_rules.cpp
a78a50 E:\dev\CM3\cm3 00-01\cm3\code\printouts.cpp
a794dc E:\dev\CM3\cm3 00-01\cm3\code\ruling_body\rb_argentina.cpp
a79518 E:\dev\CM3\cm3 00-01\cm3\code\ruling_body\rb_asia.cpp
a79550 E:\dev\CM3\cm3 00-01\cm3\code\ruling_body\rb_australia.cpp
a79598 E:\dev\CM3\cm3 00-01\cm3\code\ruling_body\rb_belgium_cup.cpp
a795e8 E:\dev\CM3\cm3 00-01\cm3\code\ruling_body\rb_belgium_league.cpp
a7963c E:\dev\CM3\cm3 00-01\cm3\code\ruling_body\rb_brazil_national.cpp
a79694 E:\dev\CM3\cm3 00-01\cm3\code\ruling_body\rb_brazil_regional.cpp
a796d8 E:\dev\CM3\cm3 00-01\cm3\code\ruling_body\rb_croatia.cpp
a79714 E:\dev\CM3\cm3 00-01\cm3\code\ruling_body\rb_denmark.cpp
a79750 E:\dev\CM3\cm3 00-01\cm3\code\ruling_body\rb_england.cpp
a7978c E:\dev\CM3\cm3 00-01\cm3\code\ruling_body\rb_europe.cpp
a797d0 E:\dev\CM3\cm3 00-01\cm3\code\ruling_body\rb_finland_cup.cpp
a79820 E:\dev\CM3\cm3 00-01\cm3\code\ruling_body\rb_finland_league.cpp
a79860 E:\dev\CM3\cm3 00-01\cm3\code\ruling_body\rb_france.cpp
a798a4 E:\dev\CM3\cm3 00-01\cm3\code\ruling_body\rb_germany_cup.cpp
a798f4 E:\dev\CM3\cm3 00-01\cm3\code\ruling_body\rb_germany_league.cpp
a79934 E:\dev\CM3\cm3 00-01\cm3\code\ruling_body\rb_greece.cpp
a7996c E:\dev\CM3\cm3 00-01\cm3\code\ruling_body\rb_holland.cpp
a799b8 E:\dev\CM3\cm3 00-01\cm3\code\ruling_body\rb_international.cpp
a799f8 E:\dev\CM3\cm3 00-01\cm3\code\ruling_body\rb_ireland.cpp
a79a40 E:\dev\CM3\cm3 00-01\cm3\code\ruling_body\rb_italy_cup.cpp
a79a8c E:\dev\CM3\cm3 00-01\cm3\code\ruling_body\rb_italy_league.cpp
a79adc E:\dev\CM3\cm3 00-01\cm3\code\ruling_body\rb_japan_cup.cpp
a79b28 E:\dev\CM3\cm3 00-01\cm3\code\ruling_body\rb_japan_league.cpp
a79b68 E:\dev\CM3\cm3 00-01\cm3\code\ruling_body\rb_korea.cpp
a79ba0 E:\dev\CM3\cm3 00-01\cm3\code\ruling_body\rb_northern_ireland.cpp
a79bf4 E:\dev\CM3\cm3 00-01\cm3\code\ruling_body\rb_norway_cup.cpp
a79c44 E:\dev\CM3\cm3 00-01\cm3\code\ruling_body\rb_norway_league.cpp
a79c84 E:\dev\CM3\cm3 00-01\cm3\code\ruling_body\rb_oceania.cpp
a79cc0 E:\dev\CM3\cm3 00-01\cm3\code\ruling_body\rb_poland.cpp
a79cf8 E:\dev\CM3\cm3 00-01\cm3\code\ruling_body\rb_portugal.cpp
a79d34 E:\dev\CM3\cm3 00-01\cm3\code\ruling_body\rb_russia.cpp
a79d7c E:\dev\CM3\cm3 00-01\cm3\code\ruling_body\rb_scotland_cup.cpp
a79dcc E:\dev\CM3\cm3 00-01\cm3\code\ruling_body\rb_scotland_league.cpp
a79e10 E:\dev\CM3\cm3 00-01\cm3\code\ruling_body\rb_south_america.cpp
a79e5c E:\dev\CM3\cm3 00-01\cm3\code\ruling_body\rb_spain_cup.cpp
a79ea8 E:\dev\CM3\cm3 00-01\cm3\code\ruling_body\rb_spain_league.cpp
a79ef4 E:\dev\CM3\cm3 00-01\cm3\code\ruling_body\rb_sweden_cup.cpp
a79f40 E:\dev\CM3\cm3 00-01\cm3\code\ruling_body\rb_sweden_league.cpp
a79f8c E:\dev\CM3\cm3 00-01\cm3\code\ruling_body\rb_turkey_cup.cpp
a79fd8 E:\dev\CM3\cm3 00-01\cm3\code\ruling_body\rb_turkey_league.cpp
a7a018 E:\dev\CM3\cm3 00-01\cm3\code\ruling_body\rb_usa.cpp
a7a050 E:\dev\CM3\cm3 00-01\cm3\code\ruling_body\rb_wales.cpp
a7a088 E:\dev\CM3\cm3 00-01\cm3\code\record_utils.cpp
a7a858 E:\dev\CM3\cm3 00-01\cm3\code\ruling_body\ruling_body.cpp
a7ac58 E:\dev\CM3\cm3 00-01\cm3\code\comp\cups\rus_cup.cpp
a7ac8c E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\rus_first.cpp
a7acc8 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\rus_prm.cpp
a7ad00 E:\dev\CM3\cm3 00-01\cm3\code\award\russia_awards.cpp
a7ad38 E:\dev\CM3\cm3 00-01\cm3\code\transfer\russia_rules.cpp
a7ad70 E:\dev\CM3\cm3 00-01\cm3\code\comp\cups\sco_chal_cup.cpp
a7adac E:\dev\CM3\cm3 00-01\cm3\code\comp\cups\sco_fa_cup.cpp
a7ade4 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\sco_first.cpp
a7af38 E:\dev\CM3\cm3 00-01\cm3\code\comp\cups\sco_lge_cup.cpp
a7af70 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\sco_prm.cpp
a7afa8 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\sco_second.cpp
a7afe4 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\sco_third.cpp
a7b020 E:\dev\CM3\cm3 00-01\cm3\code\award\scotland_awards.cpp
a7b058 E:\dev\CM3\cm3 00-01\cm3\code\transfer\scotland_rules.cpp
a7b094 E:\dev\CM3\cm3 00-01\cm3\code\scout_manager.cpp
a7ddbc E:\dev\CM3\cm3 00-01\si\code\scrman.cpp
a7de5c E:\dev\CM3\cm3 00-01\cm3\code\search_edit_session.cpp
a7de94 E:\dev\CM3\cm3 00-01\cm3\code\search_eng.cpp
a7df38 E:\dev\CM3\cm3 00-01\cm3\code\search_filters.cpp
a7e840 E:\dev\CM3\cm3 00-01\cm3\code\search_screens.cpp
a801dc E:\dev\CM3\cm3 00-01\cm3\code\Setup.cpp
a825a4 E:\dev\CM3\cm3 00-01\cm3\code\shortlist_manager.cpp
a8278c E:\dev\CM3\cm3 00-01\cm3\code\simulated_stats.cpp
a82810 E:\dev\CM3\cm3 00-01\cm3\code\comp\cups\spa_cup.cpp
a82844 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\spa_first.cpp
a82880 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\spa_lower.cpp
a828bc E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\spa_second.cpp
a828f8 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\spa_second_b.cpp
a82a58 E:\dev\CM3\cm3 00-01\cm3\code\comp\cups\spa_super.cpp
a82a90 E:\dev\CM3\cm3 00-01\cm3\code\award\spain_awards.cpp
a82ac8 E:\dev\CM3\cm3 00-01\cm3\code\transfer\spain_rules.cpp
a82b88 E:\dev\CM3\cm3 00-01\cm3\code\comp\squad_manager.cpp
a835b0 E:\dev\CM3\cm3 00-01\cm3\code\comp\stadium.cpp
a8360c E:\dev\CM3\cm3 00-01\cm3\code\staff_contracts.cpp
a83b78 E:\dev\CM3\cm3 00-01\cm3\code\staff_records.cpp
a84aac E:\dev\CM3\cm3 00-01\cm3\code\staff_screens.cpp
a8b464 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\sub_league.cpp
a8b4a0 E:\dev\CM3\cm3 00-01\cm3\code\comp\cups\swe_cup.cpp
a8b53c E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\swe_first.cpp
a8b578 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\swe_prm.cpp
a8b5b0 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\swe_second.cpp
a8b5ec E:\dev\CM3\cm3 00-01\cm3\code\award\sweden_awards.cpp
a8b908 E:\dev\CM3\cm3 00-01\cm3\code\tactics.cpp
a8b94c E:\dev\CM3\cm3 00-01\cm3\code\tactics_screens.cpp
a8c6d4 E:\dev\CM3\cm3 00-01\si\code\tcpip.cpp
a8c87c E:\dev\CM3\cm3 00-01\cm3\code\award\team_award.cpp
a8cc88 E:\dev\CM3\cm3 00-01\cm3\code\training_edit_session.cpp
a8ccd0 E:\dev\CM3\cm3 00-01\cm3\code\training_manager.cpp
a8cfa0 E:\dev\CM3\cm3 00-01\cm3\code\training_schedule.cpp
a8d1d8 E:\dev\CM3\cm3 00-01\cm3\code\training_screens.cpp
a8d514 E:\dev\CM3\cm3 00-01\cm3\code\transfer_manager.cpp
a9e318 E:\dev\CM3\cm3 00-01\cm3\code\transfer_offer.cpp
a9e98c E:\dev\CM3\cm3 00-01\cm3\code\transfer_screens.cpp
aa180c E:\dev\CM3\cm3 00-01\cm3\code\comp\cups\tur_cup.cpp
aa1840 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\tur_first.cpp
aa187c E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\tur_second.cpp
aa18b8 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\tur_second_b.cpp
aa1970 E:\dev\CM3\cm3 00-01\cm3\code\award\turkey_awards.cpp
aa19a8 E:\dev\CM3\cm3 00-01\cm3\code\transfer\turkey_rules.cpp
aa19e0 E:\dev\CM3\cm3 00-01\cm3\code\comp\eurocomp\uefa_cup.cpp
aa1a1c E:\dev\CM3\cm3 00-01\cm3\code\comp\uefa_seeding.cpp
aa1b90 E:\dev\CM3\cm3 00-01\cm3\code\ultimatum.cpp
aa1f80 E:\dev\CM3\cm3 00-01\cm3\code\award\usa_awards.cpp
aa1fb4 E:\dev\CM3\cm3 00-01\cm3\code\comp\leagues\usa_mls.cpp
aa20a0 E:\dev\CM3\cm3 00-01\cm3\code\comp\cups\usa_mls_all_stars.cpp
aa20e0 E:\dev\CM3\cm3 00-01\cm3\code\comp\cups\usa_open_cup.cpp
aa211c E:\dev\CM3\cm3 00-01\cm3\code\transfer\usa_rules.cpp
ad4134 E:\dev\CM3\cm3 00-01\si\code\utils.cpp
ad439c E:\dev\CM3\cm3 00-01\cm3\code\virtual_staff.cpp
ad43cc E:\dev\CM3\cm3 00-01\cm3\code\award\wales_awards.cpp
ad4404 E:\dev\CM3\cm3 00-01\cm3\code\transfer\wales_rules.cpp
ad443c E:\dev\CM3\cm3 00-01\cm3\code\comp\worldcup\wc_african_cup.cpp
ad4680 E:\dev\CM3\cm3 00-01\cm3\code\comp\worldcup\wc_asia_league.cpp
ad4850 E:\dev\CM3\cm3 00-01\cm3\code\comp\worldcup\wc_concacaf_cup.cpp
ad4a6c E:\dev\CM3\cm3 00-01\cm3\code\comp\worldcup\wc_europe_league.cpp
ad4afc E:\dev\CM3\cm3 00-01\cm3\code\comp\worldcup\wc_oceania_league.cpp
ad4ce0 E:\dev\CM3\cm3 00-01\cm3\code\comp\worldcup\wc_south_american_league .cpp
ad4dec E:\dev\CM3\cm3 00-01\cm3\code\weather.cpp
ad5684 E:\dev\CM3\cm3 00-01\cm3\code\comp\cups\wel_cup.cpp
ad56f4 E:\dev\CM3\cm3 00-01\cm3\code\comp\cups\wel_lge_cup.cpp
ad572c E:\dev\CM3\cm3 00-01\cm3\code\comp\cups\wel_prm_cup.cpp
ad5764 E:\dev\CM3\cm3 00-01\cm3\code\comp\eurocomp\world_club_champ.cpp
ad5848 E:\dev\CM3\cm3 00-01\cm3\code\comp\eurocomp\world_club_cup.cpp
ad5888 E:\dev\CM3\cm3 00-01\cm3\code\comp\worldcup\world_cup.cpp
ad58c4 E:\dev\CM3\cm3 00-01\cm3\code\award\world_cup_awards.cpp
ad59b0 E:\dev\CM3\cm3 00-01\cm3\code\award\year_award.cpp
ad6a38 E:\dev\CM3\cm3 00-01\cm3\code\award\year_ratings.cpp
ad6ab0 E:\dev\CM3\cm3 00-01\si\code\zipdir.cpp
* [TUTORIAL] How to install and run the game CM0102?> viewtopic.php?f=85&t=3571
Please use search bar for solution before posting your issue
John Locke
Patch Team
Posts: 326
Joined: Wed Nov 25, 2020 12:26 am
Has thanked: 175 times
Been thanked: 167 times

Offset Index : Decoding OllyDbg

Post by John Locke »

AE235C - is actually total number of clubs (info on old forum is wrong), it will store the number of domestic teams + the number nations x 2.

Edit: for background, club.dat stores domestic clubs and international sides (international fixtures are between clubs with the same names as countries, rather than between countries directly). So the offset stores the total number of clubs, and at run time the game will need to calculate the number of domestic sides by subtracting (number of nations * 2) from the total clubs.
John Locke
Patch Team
Posts: 326
Joined: Wed Nov 25, 2020 12:26 am
Has thanked: 175 times
Been thanked: 167 times

Offset Index : Decoding OllyDbg

Post by John Locke »

Added: [AE2364] = Number of staff

I have edited the opening post.
John Locke
Patch Team
Posts: 326
Joined: Wed Nov 25, 2020 12:26 am
Has thanked: 175 times
Been thanked: 167 times

Offset Index : Decoding OllyDbg

Post by John Locke »

[AE236C] - number of players
[AE23C4] - I think this is used to access the player data in the game, it seems to store the memory address where the first player is stored.
John Locke
Patch Team
Posts: 326
Joined: Wed Nov 25, 2020 12:26 am
Has thanked: 175 times
Been thanked: 167 times

Offset Index : Decoding OllyDbg

Post by John Locke »

[AE2370] - number of staff preferences
[AE23C8] - I think this is used to access the staff preferences data in the game, it seems to store the memory address where the first staff preferences is stored.
John Locke
Patch Team
Posts: 326
Joined: Wed Nov 25, 2020 12:26 am
Has thanked: 175 times
Been thanked: 167 times

Offset Index : Decoding OllyDbg

Post by John Locke »

[AE23B0] - stores the memory address where the first stadium is stored.
[AE23B4] - stores the memory address where the first club is stored.
John Locke
Patch Team
Posts: 326
Joined: Wed Nov 25, 2020 12:26 am
Has thanked: 175 times
Been thanked: 167 times

Offset Index : Decoding OllyDbg

Post by John Locke »

[AE23C0] - stores the memory address where the first non player is stored.
John Locke
Patch Team
Posts: 326
Joined: Wed Nov 25, 2020 12:26 am
Has thanked: 175 times
Been thanked: 167 times

Offset Index : Decoding OllyDbg

Post by John Locke »

[AE23BC] - stores the memory address where the first person is stored.
John Locke
Patch Team
Posts: 326
Joined: Wed Nov 25, 2020 12:26 am
Has thanked: 175 times
Been thanked: 167 times

Offset Index : Decoding OllyDbg

Post by John Locke »

[AE2374] - number of staff histories
[AE23CC] - stores the memory address where the first staff history is stored.
John Locke
Patch Team
Posts: 326
Joined: Wed Nov 25, 2020 12:26 am
Has thanked: 175 times
Been thanked: 167 times

Offset Index : Decoding OllyDbg

Post by John Locke »

[AE2378] - Number of club competitions
[AE23D0] - stores the memory address where the first club competition is stored.
John Locke
Patch Team
Posts: 326
Joined: Wed Nov 25, 2020 12:26 am
Has thanked: 175 times
Been thanked: 167 times

Offset Index : Decoding OllyDbg

Post by John Locke »

[AE234C] - Number of continents
[AE23A4] - stores the memory address where the first continent is stored.
John Locke
Patch Team
Posts: 326
Joined: Wed Nov 25, 2020 12:26 am
Has thanked: 175 times
Been thanked: 167 times

Offset Index : Decoding OllyDbg

Post by John Locke »

[AE237C] - Number of club competition hostories
[AE23D4] - stores the memory address where the first club competition history is stored.
User avatar
Xeno
Patch Team
Posts: 2320
Joined: Wed Nov 25, 2020 5:01 am
Has thanked: 202 times
Been thanked: 795 times

Offset Index : Decoding OllyDbg

Post by Xeno »

Hi John Locke. Is there any limit (min and max) for data stored? Such as number of staff, number of staff history?
* [TUTORIAL] How to install and run the game CM0102?> viewtopic.php?f=85&t=3571
Please use search bar for solution before posting your issue
John Locke
Patch Team
Posts: 326
Joined: Wed Nov 25, 2020 12:26 am
Has thanked: 175 times
Been thanked: 167 times

Offset Index : Decoding OllyDbg

Post by John Locke »

Not really, anything above 2,147,483,647 might break the game (as it may be treated as a negative number).
John Locke
Patch Team
Posts: 326
Joined: Wed Nov 25, 2020 12:26 am
Has thanked: 175 times
Been thanked: 167 times

Offset Index : Decoding OllyDbg

Post by John Locke »

[AE23A0] - Number of ? names (first, second, or common - not sure which)
[AE23F8] - memory address of first ? name (first, second, or common - not sure which)
John Locke
Patch Team
Posts: 326
Joined: Wed Nov 25, 2020 12:26 am
Has thanked: 175 times
Been thanked: 167 times

Offset Index : Decoding OllyDbg

Post by John Locke »

[AE2390] - Number of officials
[AE23E8] - Memory address where the first official is stored
John Locke
Patch Team
Posts: 326
Joined: Wed Nov 25, 2020 12:26 am
Has thanked: 175 times
Been thanked: 167 times

Offset Index : Decoding OllyDbg

Post by John Locke »

[AE2394] - Number of colours
[AE23EC] - Stores the memory address where the first colour is stored
John Locke
Patch Team
Posts: 326
Joined: Wed Nov 25, 2020 12:26 am
Has thanked: 175 times
Been thanked: 167 times

Offset Index : Decoding OllyDbg

Post by John Locke »

[ADADFC]

Not certain, but I think this stores a memory address at which all the leagues are stored - seems to store an entry for every club competition in the game of either null (0) for non playable competitions or a pointer to the competition if it is playable.

Example:
007EB9BA . A1 FCADAD00 MOV EAX,DWORD PTR DS:[ADADFC]
007EB9BF . 8B0D 2CF99C00 MOV ECX,DWORD PTR DS:[9CF92C]; ECX = id number of Russian First Division
007EB9C5 . 8B0C88 MOV ECX,DWORD PTR DS:[EAX+ECX*4]; ECX = pointer to the playable league
007EB9C8 . 8B11 MOV EDX,DWORD PTR DS:[ECX]; EDX = an id number of the playable league?


Might it be possible to redirect the game to look at a different league to make league swaps easier?
User avatar
Xeno
Patch Team
Posts: 2320
Joined: Wed Nov 25, 2020 5:01 am
Has thanked: 202 times
Been thanked: 795 times

Offset Index : Decoding OllyDbg

Post by Xeno »

I added cm0102 exe code as text and C header files in the first post
* [TUTORIAL] How to install and run the game CM0102?> viewtopic.php?f=85&t=3571
Please use search bar for solution before posting your issue
eduforenko
Posts: 3
Joined: Wed Aug 17, 2022 9:31 pm

Re: [DOCUMENTATION] Offset Index : Decoding OllyDbg

Post by eduforenko »

its possible to copy saudi arabia resctrictions, to other countries?
Zhouenlai
Posts: 2
Joined: Thu May 30, 2024 5:46 am

Re: [DOCUMENTATION] Offset Index : Decoding OllyDbg

Post by Zhouenlai »

the cm0102_3.9.68_text.zip file shows corrupted
Post Reply