mirror of
https://gitlab.com/ryandwyer/perfect-dark
synced 2026-07-27 22:59:11 -04:00
Discover MP features/unlockables structure and rename many symbols
This commit is contained in:
+81
-4
@@ -246,10 +246,6 @@
|
||||
#define CASING_RIFLE 2
|
||||
#define CASING_SHOTGUN 3
|
||||
|
||||
// Challenge numbers don't appear to be a 1:1 mapping :(
|
||||
#define CHALLENGE_7 30
|
||||
#define CHALLENGE_UNK64 64
|
||||
|
||||
#define CHANNEL_0 0
|
||||
#define CHANNEL_1 1
|
||||
#define CHANNEL_2 2
|
||||
@@ -1767,6 +1763,87 @@
|
||||
#define MPCONFIG_CHALLENGE29 0x2a
|
||||
#define MPCONFIG_CHALLENGE30 0x2b
|
||||
|
||||
// Features are things that can be unlocked
|
||||
#define MPFEATURE_WEAPON_FARSIGHT 0x01
|
||||
#define MPFEATURE_WEAPON_TRANQUILIZER 0x02
|
||||
#define MPFEATURE_WEAPON_SUPERDRAGON 0x03
|
||||
#define MPFEATURE_WEAPON_SLAYER 0x04
|
||||
#define MPFEATURE_WEAPON_FALCON2SILENCED 0x05
|
||||
#define MPFEATURE_WEAPON_FALCON2SCOPE 0x06
|
||||
#define MPFEATURE_WEAPON_MAULER 0x07
|
||||
#define MPFEATURE_WEAPON_PHOENIX 0x08
|
||||
#define MPFEATURE_WEAPON_DY357LX 0x09
|
||||
#define MPFEATURE_WEAPON_CALLISTO 0x0a
|
||||
#define MPFEATURE_WEAPON_LAPTOPGUN 0x0b
|
||||
#define MPFEATURE_WEAPON_K7AVENGER 0x0c
|
||||
#define MPFEATURE_WEAPON_RCP120 0x0d
|
||||
#define MPFEATURE_WEAPON_SHOTGUN 0x0e
|
||||
#define MPFEATURE_WEAPON_REAPER 0x0f
|
||||
#define MPFEATURE_WEAPON_DEVASTATOR 0x10
|
||||
#define MPFEATURE_WEAPON_CROSSBOW 0x11
|
||||
#define MPFEATURE_WEAPON_NBOMB 0x12
|
||||
#define MPFEATURE_WEAPON_PROXIMITYMINE 0x13
|
||||
#define MPFEATURE_WEAPON_REMOTEMINE 0x14
|
||||
#define MPFEATURE_WEAPON_XRAYSCANNER 0x15
|
||||
#define MPFEATURE_WEAPON_SHIELD 0x16
|
||||
#define MPFEATURE_WEAPON_CLOAKINGDEVICE 0x17
|
||||
#define MPFEATURE_WEAPON_COMBATBOOST 0x18
|
||||
#define MPFEATURE_SIMSKILL_HARD 0x19
|
||||
#define MPFEATURE_SIMSKILL_PERFECT 0x1a
|
||||
#define MPFEATURE_1B 0x1b
|
||||
#define MPFEATURE_SIMSKILL_DARK 0x1c
|
||||
#define MPFEATURE_SLOWMOTION 0x1d
|
||||
#define MPFEATURE_ONEHITKILLS 0x1e
|
||||
#define MPFEATURE_1F 0x1f
|
||||
#define MPFEATURE_20 0x20
|
||||
#define MPFEATURE_21 0x21
|
||||
#define MPFEATURE_22 0x22
|
||||
#define MPFEATURE_STAGE_CARPARK 0x23
|
||||
#define MPFEATURE_STAGE_COMPLEX 0x24
|
||||
#define MPFEATURE_STAGE_WAREHOUSE 0x25
|
||||
#define MPFEATURE_STAGE_RAVINE 0x26
|
||||
#define MPFEATURE_STAGE_TEMPLE 0x27
|
||||
#define MPFEATURE_STAGE_G5BUILDING 0x28
|
||||
#define MPFEATURE_STAGE_GRID 0x29
|
||||
#define MPFEATURE_STAGE_FELICITY 0x2a
|
||||
#define MPFEATURE_STAGE_VILLA 0x2b
|
||||
#define MPFEATURE_STAGE_SEWERS 0x2c
|
||||
#define MPFEATURE_STAGE_RUINS 0x2d
|
||||
#define MPFEATURE_STAGE_BASE 0x2e
|
||||
#define MPFEATURE_2F 0x2f
|
||||
#define MPFEATURE_STAGE_FORTRESS 0x30
|
||||
#define MPFEATURE_31 0x31
|
||||
#define MPFEATURE_32 0x32
|
||||
#define MPFEATURE_33 0x33
|
||||
#define MPFEATURE_34 0x34
|
||||
#define MPFEATURE_35 0x35
|
||||
#define MPFEATURE_36 0x36
|
||||
#define MPFEATURE_37 0x37
|
||||
#define MPFEATURE_38 0x38
|
||||
#define MPFEATURE_39 0x39
|
||||
#define MPFEATURE_3A 0x3a
|
||||
#define MPFEATURE_3B 0x3b
|
||||
#define MPFEATURE_3C 0x3c
|
||||
#define MPFEATURE_3D 0x3d
|
||||
#define MPFEATURE_3E 0x3e
|
||||
#define MPFEATURE_3F 0x3f
|
||||
#define MPFEATURE_8BOTS 0x40 // also unlocks the 4 Bonds
|
||||
#define MPFEATURE_41 0x41
|
||||
#define MPFEATURE_42 0x42
|
||||
#define MPFEATURE_43 0x43
|
||||
#define MPFEATURE_44 0x44
|
||||
#define MPFEATURE_45 0x45
|
||||
#define MPFEATURE_46 0x46
|
||||
#define MPFEATURE_47 0x47
|
||||
#define MPFEATURE_48 0x48
|
||||
#define MPFEATURE_49 0x49
|
||||
#define MPFEATURE_4A 0x4a
|
||||
#define MPFEATURE_4B 0x4b
|
||||
#define MPFEATURE_4C 0x4c
|
||||
#define MPFEATURE_4D 0x4d
|
||||
#define MPFEATURE_4E 0x4e
|
||||
#define MPFEATURE_WEAPON_LASER 0x4f
|
||||
|
||||
#define MPHEAD_DARK_COMBAT 0x00
|
||||
#define MPHEAD_DARK_FROCK 0x01
|
||||
#define MPHEAD_DARKAQUA 0x02
|
||||
|
||||
@@ -14,18 +14,18 @@ void mpPerformSanityChecks(void);
|
||||
char *mpGetChallengeNameBySlot(s32 slot);
|
||||
bool mpIsChallengeCompletedByAnyChrWithNumPlayersBySlot(s32 slot, s32 numplayers);
|
||||
struct mpconfigfull *mpLoadConfig(s32 confignum, u8 *buffer, s32 len);
|
||||
s32 func0f19bb50(s32 unlockvalue, u8 *array, s32 index, s32 len);
|
||||
s32 mpForceUnlockFeature(s32 featurenum, u8 *array, s32 tail, s32 len);
|
||||
s32 func0f19bb98(struct mpsetup *mpsetup, u8 *array, s32 len);
|
||||
u32 func0f19bd4c(void);
|
||||
void func0f19bfa0(void);
|
||||
void mpForceUnlockSimulantFeatures(void);
|
||||
void func0f19c1cc(void);
|
||||
char *mpGetCurrentChallengeDescription(void);
|
||||
char *mpconfigGetDescription(struct mpconfigfull *mpconfig);
|
||||
bool mpIsChallengeCompleteForEndscreen(void);
|
||||
bool aiMpInitSimulants(void);
|
||||
void func0f19ab40(void);
|
||||
bool func0f19af3c(s32 chrnum, s32 challengeindex);
|
||||
bool mpIsChallengeAvailable(s32 challengeindex);
|
||||
bool mpIsChallengeAvailableToPlayer(s32 chrnum, s32 challengeindex);
|
||||
bool mpIsChallengeAvailableToAnyPlayer(s32 challengeindex);
|
||||
s32 mpGetNumAvailableChallenges(void);
|
||||
char *mpChallengeGetName(s32 challengeindex);
|
||||
void mpSetCurrentChallenge(s32 slotnum);
|
||||
@@ -38,14 +38,14 @@ s32 mpRemoveLock(void);
|
||||
void mpLoadAndStoreCurrentChallenge(u8 *buffer, s32 len);
|
||||
void mpClearCurrentChallenge(void);
|
||||
bool mpIsChallengeLoaded(void);
|
||||
s32 mpGetNumChallengesAvailable(s32 mpchrnum);
|
||||
s32 mpGetAutoFocusedChallengeIndex(s32 mpchrnum);
|
||||
char *mpChallengeGetNameWithArg(s32 arg0, s32 challengeindex);
|
||||
bool func0f19c3bc(s32 mpchrnum, s32 index, s32 numplayers);
|
||||
bool mpIsChallengeCompletedByAnyChrWithNumPlayers(s32 index, s32 numplayers);
|
||||
void mpSetChallengeCompletedByAnyChrWithNumPlayers(s32 index, s32 numplayers, bool completed);
|
||||
bool mpIsChallengeCompletedByChrWithNumPlayers(s32 mpchrnum, s32 index, s32 numplayers);
|
||||
void mpSetChallengeCompletedByChrWithNumPlayers(u32 mpchrnum, s32 index, s32 numplayers, bool completed);
|
||||
bool mpIsChallengeCompletedByPlayerWithNumPlayers2(s32 mpchrnum, s32 index, s32 numplayers);
|
||||
bool mpIsChallengeCompletedByAnyPlayerWithNumPlayers(s32 index, s32 numplayers);
|
||||
void mpSetChallengeCompletedByAnyPlayerWithNumPlayers(s32 index, s32 numplayers, bool completed);
|
||||
bool mpIsChallengeCompletedByPlayerWithNumPlayers(s32 mpchrnum, s32 index, s32 numplayers);
|
||||
void mpSetChallengeCompletedByPlayerWithNumPlayers(u32 mpchrnum, s32 index, s32 numplayers, bool completed);
|
||||
void mpConsiderMarkingCurrentChallengeComplete(void);
|
||||
bool mpIsChallengeComplete(s32 challenge);
|
||||
bool mpIsFeatureUnlocked(s32 feature);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -48,13 +48,13 @@ void func0f18b9e4(void);
|
||||
u32 func0f18bb1c(void);
|
||||
s32 mpGetNumHeads(void);
|
||||
s32 mpGetHeadId(u8 headnum);
|
||||
s32 mpGetHeadUnlockValue(u8 headnum);
|
||||
s32 mpGetHeadRequiredFeature(u8 headnum);
|
||||
s32 mpGetBeauHeadId(u8 headnum);
|
||||
u32 mpGetNumBodies(void);
|
||||
s32 mpGetBodyId(u8 bodynum);
|
||||
s32 mpGetMpbodynumByBodynum(u16 bodynum);
|
||||
char *mpGetBodyName(u8 bodynum);
|
||||
u8 mpGetBodyUnk06(u8 bodynum);
|
||||
u8 mpGetBodyRequiredFeature(u8 bodynum);
|
||||
s32 mpGetMpheadnumByMpbodynum(s32 bodynum);
|
||||
u32 mpChooseRandomLockPlayer(void);
|
||||
bool mpSetLock(s32 locktype, s32 playernum);
|
||||
|
||||
@@ -833,8 +833,8 @@ extern u32 var800acc28[18];
|
||||
extern u32 var800acc70;
|
||||
extern u32 var800acc74;
|
||||
extern struct chrdata *g_MpSimulantChrs[MAX_SIMULANTS];
|
||||
extern u8 var800acca0[40];
|
||||
extern u8 g_MpChallengesCompleted[];
|
||||
extern u8 g_MpFeaturesForceUnlocked[40];
|
||||
extern u8 g_MpFeaturesUnlocked[80];
|
||||
extern struct frdata g_FrData;
|
||||
extern struct trainingdata g_DtData;
|
||||
extern struct trainingdata g_HoloTrainingData;
|
||||
|
||||
+20
-11
@@ -3070,7 +3070,7 @@ struct stagetableentry {
|
||||
struct mpweaponset {
|
||||
/*0x00*/ u16 name;
|
||||
/*0x02*/ u8 slots[6];
|
||||
/*0x08*/ u8 unlocks[4];
|
||||
/*0x08*/ u8 requirefeatures[4];
|
||||
/*0x0c*/ u8 unk0c;
|
||||
/*0x0d*/ u8 unk0d;
|
||||
/*0x0e*/ u8 unk0e;
|
||||
@@ -3081,7 +3081,7 @@ struct mpweaponset {
|
||||
|
||||
struct mphead {
|
||||
s16 headnum;
|
||||
u8 unlockvalue;
|
||||
u8 requirefeature;
|
||||
};
|
||||
|
||||
struct mpsimulanttype {
|
||||
@@ -3089,14 +3089,14 @@ struct mpsimulanttype {
|
||||
/*0x01*/ u8 skill;
|
||||
/*0x02*/ u16 name;
|
||||
/*0x04*/ u16 body;
|
||||
/*0x06*/ u8 unlockvalue;
|
||||
/*0x06*/ u8 requirefeature;
|
||||
};
|
||||
|
||||
struct mpbody {
|
||||
s16 bodynum;
|
||||
s16 name;
|
||||
s16 headnum;
|
||||
u8 unlockvalue;
|
||||
u8 requirefeature;
|
||||
};
|
||||
|
||||
struct mptrack {
|
||||
@@ -4484,7 +4484,7 @@ struct mpscenariooverview {
|
||||
|
||||
struct mparena {
|
||||
s16 stagenum;
|
||||
u8 unlock;
|
||||
u8 requirefeature;
|
||||
u16 name;
|
||||
};
|
||||
|
||||
@@ -4521,11 +4521,20 @@ struct challenge {
|
||||
/*0x00*/ u16 name;
|
||||
/*0x02*/ s16 confignum;
|
||||
|
||||
// One byte for each number of players,
|
||||
// and 4 bits in each to mark which players completed it
|
||||
/*0x04*/ u8 completions[5];
|
||||
// Bitfield xxx4 321a
|
||||
// The number denotes if that player has the challenge available,
|
||||
// and `a` denotes if any other has the challenge available.
|
||||
/*0x04*/ u8 availability;
|
||||
|
||||
/*0x09*/ u8 unk09[16];
|
||||
// Same structure as availability, however each byte determines how many
|
||||
// players it was completed with. So completions[0] is for completions with
|
||||
// a single player and completions[3] is for completions with 4 players.
|
||||
/*0x05*/ u8 completions[4];
|
||||
|
||||
// Array of features which will become unlocked once the challenge is
|
||||
// available. Seems to be unused though, as all arrays are empty.
|
||||
// Maybe it's populated at runtime?
|
||||
/*0x09*/ u8 unlockfeatures[16];
|
||||
};
|
||||
|
||||
struct scenariodata_cbt {
|
||||
@@ -4777,7 +4786,7 @@ struct criteria_holograph {
|
||||
struct mppreset {
|
||||
u16 name;
|
||||
u32 confignum;
|
||||
u8 challenges[16];
|
||||
u8 requirefeatures[16]; // Doesn't seem to be used? All values are zero
|
||||
};
|
||||
|
||||
struct explosiontype {
|
||||
@@ -5816,7 +5825,7 @@ struct mpweapon {
|
||||
/*0x03*/ s8 weapon2ammotypeminusone;
|
||||
/*0x04*/ u8 weapon2ammoqty;
|
||||
/*0x05*/ u8 giveweapon : 1;
|
||||
/*0x05*/ u8 unlock : 7;
|
||||
/*0x05*/ u8 unlockfeature : 7;
|
||||
/*0x06*/ s16 model;
|
||||
/*0x08*/ s16 extrascale;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user