#pragma once

enum 
{
	SCRSOUND_TEST_1,
	_SCRSOUND_UNK_1,
	_SCRSOUND_UNK_2,
	_SCRSOUND_UNK_3,
	_SCRSOUND_CLUB_1_S,
	_SCRSOUND_CLUB_1_L,
	_SCRSOUND_CLUB_2_S,
	_SCRSOUND_CLUB_2_L,
	_SCRSOUND_CLUB_3_S,
	_SCRSOUND_CLUB_3_L,
	_SCRSOUND_CLUB_4_S,
	_SCRSOUND_CLUB_4_L,
	_SCRSOUND_CLUB_5_S,
	_SCRSOUND_CLUB_5_L,
	_SCRSOUND_CLUB_6_S,
	_SCRSOUND_CLUB_6_L,
	_SCRSOUND_CLUB_7_S,
	_SCRSOUND_CLUB_7_L,
	_SCRSOUND_CLUB_8_S,
	_SCRSOUND_CLUB_8_L,
	_SCRSOUND_CLUB_9_S,
	_SCRSOUND_CLUB_9_L,
	_SCRSOUND_CLUB_10_S,
	_SCRSOUND_CLUB_10_L,
	_SCRSOUND_CLUB_11_S,
	_SCRSOUND_CLUB_11_L,
	_SCRSOUND_CLUB_12_S,
	_SCRSOUND_CLUB_12_L,
	_SCRSOUND_CLUB_RAGGA_S,
	_SCRSOUND_CLUB_RAGGA_L,
	SCRSOUND_STRIP_CLUB_LOOP_1_S,
	_SCRSOUND_STRIP_CLUB_LOOP_1_L,
	SCRSOUND_STRIP_CLUB_LOOP_2_S,
	_SCRSOUND_STRIP_CLUB_LOOP_2_L,
	_SCRSOUND_SFX_WORKSHOP_1,
	_SCRSOUND_SFX_WORKSHOP_2,
	_SCRSOUND_SAWMILL_LOOP_S,
	SCRSOUND_SAWMILL_LOOP_L,
	_SCRSOUND_DOG_FOOD_FACTORY_S,
	_SCRSOUND_DOG_FOOD_FACTORY_L,
	_SCRSOUND_LAUNDERETTE_1,
	_SCRSOUND_LAUNDERETTE_2,
	_SCRSOUND_RESTAURANT_CHINATOWN_S,
	_SCRSOUND_RESTAURANT_CHINATOWN_L,
	_SCRSOUND_RESTAURANT_ITALY_S,
	_SCRSOUND_RESTAURANT_ITALY_L,
	_SCRSOUND_RESTAURANT_GENERIC_1_S,
	_SCRSOUND_RESTAURANT_GENERIC_1_L,
	_SCRSOUND_RESTAURANT_GENERIC_2_S,
	_SCRSOUND_RESTAURANT_GENERIC_2_L,
	_SCRSOUND_AIRPORT_ANNOUNCEMENT_S,
	_SCRSOUND_AIRPORT_ANNOUNCEMENT_L,
	_SCRSOUND_SHOP_LOOP_1,
	_SCRSOUND_SHOP_LOOP_2,
	_SCRSOUND_CINEMA_S,
	_SCRSOUND_CINEMA_L,
	_SCRSOUND_DOCKS_FOGHORN_S,
	_SCRSOUND_DOCKS_FOGHORN_L,
	_SCRSOUND_HOME_S,
	_SCRSOUND_HOME_L,
	_SCRSOUND_PIANO_BAR,
	_SCRSOUND_CLUB,
	SCRSOUND_PORN_CINEMA_1_S,
	_SCRSOUND_PORN_CINEMA_1_L,
	SCRSOUND_PORN_CINEMA_2_S,
	_SCRSOUND_PORN_CINEMA_2_L,
	SCRSOUND_PORN_CINEMA_3_S,
	_SCRSOUND_PORN_CINEMA_3_L,
	_SCRSOUND_BANK_ALARM_LOOP_S,
	SCRSOUND_BANK_ALARM_LOOP_L,
	_SCRSOUND_POLICE_BALL_LOOP_S,
	SCRSOUND_POLICE_BALL_LOOP_L,
	_SCRSOUND_RAVE_LOOP_INDUSTRIAL_S,
	SCRSOUND_RAVE_LOOP_INDUSTRIAL_L,
	_SCRSOUND_UNK_74,
	_SCRSOUND_UNK_75,
	_SCRSOUND_POLICE_CELL_BEATING_LOOP_S,
	SCRSOUND_POLICE_CELL_BEATING_LOOP_L,
	SCRSOUND_INJURED_PED_MALE_OUCH_S,
	SCRSOUND_INJURED_PED_MALE_OUCH_L,
	SCRSOUND_INJURED_PED_FEMALE_OUCH_S,
	SCRSOUND_INJURED_PED_FEMALE_OUCH_L,
	SCRSOUND_EVIDENCE_PICKUP,
	SCRSOUND_UNLOAD_GOLD,
	_SCRSOUND_RAVE_INDUSTRIAL_S,
	_SCRSOUND_RAVE_INDUSTRIAL_L,
	_SCRSOUND_RAVE_COMMERCIAL_S,
	_SCRSOUND_RAVE_COMMERCIAL_L,
	_SCRSOUND_RAVE_SUBURBAN_S,
	_SCRSOUND_RAVE_SUBURBAN_L,
	_SCRSOUND_GROAN_S,
	_SCRSOUND_GROAN_L,
	SCRSOUND_GATE_START_CLUNK,
	SCRSOUND_GATE_STOP_CLUNK,
	SCRSOUND_PART_MISSION_COMPLETE,
	SCRSOUND_CHUNKY_RUN_SHOUT,
	SCRSOUND_SECURITY_GUARD_RUN_AWAY_SHOUT,
	SCRSOUND_RACE_START_1,
	SCRSOUND_RACE_START_2,
	SCRSOUND_RACE_START_3,
	SCRSOUND_RACE_START_GO,
	SCRSOUND_SWAT_PED_SHOUT,
	SCRSOUND_PRETEND_FIRE_LOOP,
	SCRSOUND_AMMUNATION_CHAT_1,
	SCRSOUND_AMMUNATION_CHAT_2,
	SCRSOUND_AMMUNATION_CHAT_3,
	_SCRSOUND_BULLET_WALL_1,
	_SCRSOUND_BULLET_WALL_2,
	_SCRSOUND_BULLET_WALL_3,
	_SCRSOUND_UNK_109,
	_SCRSOUND_GLASSFX2_1,
	_SCRSOUND_GLASSFX2_2,
	_SCRSOUND_PHONE_RING,
	_SCRSOUND_UNK_113,
	_SCRSOUND_GLASS_SMASH_1,
	_SCRSOUND_GLASS_SMASH_2,
	_SCRSOUND_GLASS_CRACK,
	_SCRSOUND_GLASS_SHARD,
	_SCRSOUND_WOODEN_BOX_SMASH,
	_SCRSOUND_CARDBOARD_BOX_SMASH,
	_SCRSOUND_COL_CAR,
	_SCRSOUND_TYRE_BUMP,
	_SCRSOUND_BULLET_SHELL_HIT_GROUND_1,
	_SCRSOUND_BULLET_SHELL_HIT_GROUND_2,
	TOTAL_SCRSOUNDS,
	SCRSOUND_INVALID
};

class cAudioScriptObject
{
public:
	int16 AudioId;
	CVector Posn;
	int32 AudioEntity;

	void Reset(); /// ok

	static void* operator new(size_t);
	static void* operator new(size_t, int);
	static void operator delete(void*, size_t);
	static void operator delete(void*, int);

	static void LoadAllAudioScriptObjects(uint8 *buf, uint32 size);
	static void SaveAllAudioScriptObjects(uint8 *buf, uint32 *size);
};

static_assert(sizeof(cAudioScriptObject) == 20, "cAudioScriptObject: error");

extern void PlayOneShotScriptObject(uint8 id, CVector const &pos);