parent
5d99bdbcec
commit
d47522ed8a
|
@ -1,5 +1,6 @@
|
||||||
#include "sound_effects_cache.h"
|
#include "sound_effects_cache.h"
|
||||||
|
|
||||||
|
#include "cache.h"
|
||||||
#include "db.h"
|
#include "db.h"
|
||||||
#include "game_config.h"
|
#include "game_config.h"
|
||||||
#include "memory.h"
|
#include "memory.h"
|
||||||
|
@ -12,32 +13,59 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
#define SOUND_EFFECTS_CACHE_MIN_SIZE (0x40000)
|
||||||
|
|
||||||
|
typedef struct SoundEffect {
|
||||||
|
// NOTE: This field is only 1 byte, likely unsigned char. It always uses
|
||||||
|
// cmp for checking implying it's not bitwise flags. Therefore it's better
|
||||||
|
// to express it as boolean.
|
||||||
|
bool used;
|
||||||
|
CacheEntry* cacheHandle;
|
||||||
|
int tag;
|
||||||
|
int dataSize;
|
||||||
|
int fileSize;
|
||||||
|
// TODO: Make size_t.
|
||||||
|
int position;
|
||||||
|
int dataPosition;
|
||||||
|
unsigned char* data;
|
||||||
|
} SoundEffect;
|
||||||
|
|
||||||
|
static int soundEffectsCacheGetFileSizeImpl(int tag, int* sizePtr);
|
||||||
|
static int soundEffectsCacheReadDataImpl(int tag, int* sizePtr, unsigned char* data);
|
||||||
|
static void soundEffectsCacheFreeImpl(void* ptr);
|
||||||
|
static int soundEffectsCacheCreateHandles();
|
||||||
|
static void soundEffectsCacheFreeHandles();
|
||||||
|
static int soundEffectsCreate(int* handlePtr, int id, void* data, CacheEntry* cacheHandle);
|
||||||
|
static bool soundEffectsIsValidHandle(int a1);
|
||||||
|
static int soundEffectsCacheFileReadCompressed(int handle, void* buf, unsigned int size);
|
||||||
|
static int _sfxc_ad_reader(int handle, void* buf, unsigned int size);
|
||||||
|
|
||||||
// 0x50DE04
|
// 0x50DE04
|
||||||
const char* off_50DE04 = "";
|
static const char* off_50DE04 = "";
|
||||||
|
|
||||||
// sfxc_initialized
|
// sfxc_initialized
|
||||||
// 0x51C8F0
|
// 0x51C8F0
|
||||||
bool gSoundEffectsCacheInitialized = false;
|
static bool gSoundEffectsCacheInitialized = false;
|
||||||
|
|
||||||
// 0x51C8F4
|
// 0x51C8F4
|
||||||
int _sfxc_cmpr = 1;
|
static int _sfxc_cmpr = 1;
|
||||||
|
|
||||||
// sfxc_pcache
|
// sfxc_pcache
|
||||||
// 0x51C8EC
|
// 0x51C8EC
|
||||||
Cache* gSoundEffectsCache = NULL;
|
static Cache* gSoundEffectsCache = NULL;
|
||||||
|
|
||||||
// sfxc_dlevel
|
// sfxc_dlevel
|
||||||
// 0x51C8DC
|
// 0x51C8DC
|
||||||
int gSoundEffectsCacheDebugLevel = INT_MAX;
|
static int gSoundEffectsCacheDebugLevel = INT_MAX;
|
||||||
|
|
||||||
// 0x51C8E0
|
// 0x51C8E0
|
||||||
char* gSoundEffectsCacheEffectsPath = NULL;
|
static char* gSoundEffectsCacheEffectsPath = NULL;
|
||||||
|
|
||||||
// 0x51C8E4
|
// 0x51C8E4
|
||||||
SoundEffect* gSoundEffects = NULL;
|
static SoundEffect* gSoundEffects = NULL;
|
||||||
|
|
||||||
// 0x51C8E8
|
// 0x51C8E8
|
||||||
int _sfxc_files_open = 0;
|
static int _sfxc_files_open = 0;
|
||||||
|
|
||||||
// sfxc_init
|
// sfxc_init
|
||||||
// 0x4A8FC0
|
// 0x4A8FC0
|
||||||
|
@ -301,7 +329,7 @@ long soundEffectsCacheFileLength(int handle)
|
||||||
|
|
||||||
// sfxc_cached_file_size
|
// sfxc_cached_file_size
|
||||||
// 0x4A9434
|
// 0x4A9434
|
||||||
int soundEffectsCacheGetFileSizeImpl(int tag, int* sizePtr)
|
static int soundEffectsCacheGetFileSizeImpl(int tag, int* sizePtr)
|
||||||
{
|
{
|
||||||
int size;
|
int size;
|
||||||
if (soundEffectsListGetFileSize(tag, &size) == -1) {
|
if (soundEffectsListGetFileSize(tag, &size) == -1) {
|
||||||
|
@ -314,7 +342,7 @@ int soundEffectsCacheGetFileSizeImpl(int tag, int* sizePtr)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x4A945C
|
// 0x4A945C
|
||||||
int soundEffectsCacheReadDataImpl(int tag, int* sizePtr, unsigned char* data)
|
static int soundEffectsCacheReadDataImpl(int tag, int* sizePtr, unsigned char* data)
|
||||||
{
|
{
|
||||||
if (!soundEffectsListIsValidTag(tag)) {
|
if (!soundEffectsListIsValidTag(tag)) {
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -339,13 +367,13 @@ int soundEffectsCacheReadDataImpl(int tag, int* sizePtr, unsigned char* data)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x4A94CC
|
// 0x4A94CC
|
||||||
void soundEffectsCacheFreeImpl(void* ptr)
|
static void soundEffectsCacheFreeImpl(void* ptr)
|
||||||
{
|
{
|
||||||
internal_free(ptr);
|
internal_free(ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x4A94D4
|
// 0x4A94D4
|
||||||
int soundEffectsCacheCreateHandles()
|
static int soundEffectsCacheCreateHandles()
|
||||||
{
|
{
|
||||||
gSoundEffects = (SoundEffect*)internal_malloc(sizeof(*gSoundEffects) * SOUND_EFFECTS_MAX_COUNT);
|
gSoundEffects = (SoundEffect*)internal_malloc(sizeof(*gSoundEffects) * SOUND_EFFECTS_MAX_COUNT);
|
||||||
if (gSoundEffects == NULL) {
|
if (gSoundEffects == NULL) {
|
||||||
|
@ -363,7 +391,7 @@ int soundEffectsCacheCreateHandles()
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x4A9518
|
// 0x4A9518
|
||||||
void soundEffectsCacheFreeHandles()
|
static void soundEffectsCacheFreeHandles()
|
||||||
{
|
{
|
||||||
if (_sfxc_files_open) {
|
if (_sfxc_files_open) {
|
||||||
for (int index = 0; index < SOUND_EFFECTS_MAX_COUNT; index++) {
|
for (int index = 0; index < SOUND_EFFECTS_MAX_COUNT; index++) {
|
||||||
|
@ -378,7 +406,7 @@ void soundEffectsCacheFreeHandles()
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x4A9550
|
// 0x4A9550
|
||||||
int soundEffectsCreate(int* handlePtr, int tag, void* data, CacheEntry* cacheHandle)
|
static int soundEffectsCreate(int* handlePtr, int tag, void* data, CacheEntry* cacheHandle)
|
||||||
{
|
{
|
||||||
if (_sfxc_files_open >= SOUND_EFFECTS_MAX_COUNT) {
|
if (_sfxc_files_open >= SOUND_EFFECTS_MAX_COUNT) {
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -415,7 +443,7 @@ int soundEffectsCreate(int* handlePtr, int tag, void* data, CacheEntry* cacheHan
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x4A961C
|
// 0x4A961C
|
||||||
bool soundEffectsIsValidHandle(int handle)
|
static bool soundEffectsIsValidHandle(int handle)
|
||||||
{
|
{
|
||||||
if (handle >= SOUND_EFFECTS_MAX_COUNT) {
|
if (handle >= SOUND_EFFECTS_MAX_COUNT) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -435,7 +463,7 @@ bool soundEffectsIsValidHandle(int handle)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x4A967C
|
// 0x4A967C
|
||||||
int soundEffectsCacheFileReadCompressed(int handle, void* buf, unsigned int size)
|
static int soundEffectsCacheFileReadCompressed(int handle, void* buf, unsigned int size)
|
||||||
{
|
{
|
||||||
if (!soundEffectsIsValidHandle(handle)) {
|
if (!soundEffectsIsValidHandle(handle)) {
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -476,7 +504,7 @@ int soundEffectsCacheFileReadCompressed(int handle, void* buf, unsigned int size
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x4A9774
|
// 0x4A9774
|
||||||
int _sfxc_ad_reader(int handle, void* buf, unsigned int size)
|
static int _sfxc_ad_reader(int handle, void* buf, unsigned int size)
|
||||||
{
|
{
|
||||||
if (size == 0) {
|
if (size == 0) {
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -1,38 +1,10 @@
|
||||||
#ifndef SOUND_EFFECTS_CACHE_H
|
#ifndef SOUND_EFFECTS_CACHE_H
|
||||||
#define SOUND_EFFECTS_CACHE_H
|
#define SOUND_EFFECTS_CACHE_H
|
||||||
|
|
||||||
#include "cache.h"
|
|
||||||
|
|
||||||
// The maximum number of sound effects that can be loaded and played
|
// The maximum number of sound effects that can be loaded and played
|
||||||
// simultaneously.
|
// simultaneously.
|
||||||
#define SOUND_EFFECTS_MAX_COUNT (4)
|
#define SOUND_EFFECTS_MAX_COUNT (4)
|
||||||
|
|
||||||
#define SOUND_EFFECTS_CACHE_MIN_SIZE (0x40000)
|
|
||||||
|
|
||||||
typedef struct SoundEffect {
|
|
||||||
// NOTE: This field is only 1 byte, likely unsigned char. It always uses
|
|
||||||
// cmp for checking implying it's not bitwise flags. Therefore it's better
|
|
||||||
// to express it as boolean.
|
|
||||||
bool used;
|
|
||||||
CacheEntry* cacheHandle;
|
|
||||||
int tag;
|
|
||||||
int dataSize;
|
|
||||||
int fileSize;
|
|
||||||
// TODO: Make size_t.
|
|
||||||
int position;
|
|
||||||
int dataPosition;
|
|
||||||
unsigned char* data;
|
|
||||||
} SoundEffect;
|
|
||||||
|
|
||||||
extern const char* off_50DE04;
|
|
||||||
extern bool gSoundEffectsCacheInitialized;
|
|
||||||
extern int _sfxc_cmpr;
|
|
||||||
extern Cache* gSoundEffectsCache;
|
|
||||||
extern int gSoundEffectsCacheDebugLevel;
|
|
||||||
extern char* gSoundEffectsCacheEffectsPath;
|
|
||||||
extern SoundEffect* gSoundEffects;
|
|
||||||
extern int _sfxc_files_open;
|
|
||||||
|
|
||||||
int soundEffectsCacheInit(int cache_size, const char* effectsPath);
|
int soundEffectsCacheInit(int cache_size, const char* effectsPath);
|
||||||
void soundEffectsCacheExit();
|
void soundEffectsCacheExit();
|
||||||
int soundEffectsCacheInitialized();
|
int soundEffectsCacheInitialized();
|
||||||
|
@ -44,14 +16,5 @@ int soundEffectsCacheFileWrite(int handle, const void* buf, unsigned int size);
|
||||||
long soundEffectsCacheFileSeek(int handle, long offset, int origin);
|
long soundEffectsCacheFileSeek(int handle, long offset, int origin);
|
||||||
long soundEffectsCacheFileTell(int handle);
|
long soundEffectsCacheFileTell(int handle);
|
||||||
long soundEffectsCacheFileLength(int handle);
|
long soundEffectsCacheFileLength(int handle);
|
||||||
int soundEffectsCacheGetFileSizeImpl(int tag, int* sizePtr);
|
|
||||||
int soundEffectsCacheReadDataImpl(int tag, int* sizePtr, unsigned char* data);
|
|
||||||
void soundEffectsCacheFreeImpl(void* ptr);
|
|
||||||
int soundEffectsCacheCreateHandles();
|
|
||||||
void soundEffectsCacheFreeHandles();
|
|
||||||
int soundEffectsCreate(int* handlePtr, int id, void* data, CacheEntry* cacheHandle);
|
|
||||||
bool soundEffectsIsValidHandle(int a1);
|
|
||||||
int soundEffectsCacheFileReadCompressed(int handle, void* buf, unsigned int size);
|
|
||||||
int _sfxc_ad_reader(int handle, void* buf, unsigned int size);
|
|
||||||
|
|
||||||
#endif /* SOUND_EFFECTS_CACHE_H */
|
#endif /* SOUND_EFFECTS_CACHE_H */
|
||||||
|
|
Loading…
Reference in New Issue