summaryrefslogtreecommitdiffstats
path: root/src/control/Gangs.h
blob: 96066a3e78ac1744383b8347f38ba526b6866c23 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#pragma once

#include "common.h"
#include "Weapon.h"
#include "ModelIndices.h"

struct CGangInfo
{
	int32 m_nVehicleMI;
	int8 m_nPedModelOverride;
	int8 field_5;
	int16 field_6;
	eWeaponType m_Weapon1;
	eWeaponType m_Weapon2;

	CGangInfo() :
		m_nVehicleMI(MI_BUS),
		m_nPedModelOverride(-1),
		m_Weapon1(WEAPONTYPE_UNARMED),
		m_Weapon2(WEAPONTYPE_UNARMED)
	{}
};

static_assert(sizeof(CGangInfo) == 0x10, "CGangInfo: error");

class CGangs
{
public:
	enum {
		GANG_MAFIA = 0,
		GANG_TRIAD,
		GANG_DIABLOS,
		GANG_YAKUZA,
		GANG_YARDIE,
		GANG_COLUMB,
		GANG_HOODS,
		GANG_7,
		GANG_8,
		TOTAL_GANGS
	};
	static void Initialize(void);
	static void SetGangVehicleModel(int16, int);
	static void SetGangWeapons(int16, eWeaponType, eWeaponType);
	static void SetGangPedModelOverride(int16, int8);
	static int8 GetGangPedModelOverride(int16);
	static void SaveAllGangData(uint8 *, uint32 *);
	static void LoadAllGangData(uint8 *, uint32);

private:
	static CGangInfo* GetGangInfo(int16 gang) { return &Gang[gang]; }

	static CGangInfo(&Gang)[TOTAL_GANGS];
};

struct tGangSaveData
{
	char tag[4];
	int32 size;
	CGangInfo gangs[CGangs::TOTAL_GANGS];
};

static_assert(sizeof(tGangSaveData) == 0x98, "tGangSaveData: error");