From 1668a1ba2b84f6ca94cd0e35b95258b19e635a3b Mon Sep 17 00:00:00 2001 From: headshot2017 <> Date: Tue, 26 Mar 2024 13:54:16 -0400 Subject: [PATCH 01/41] Wii: some more fixes to audio backend/music --- src/AudioBackend.c | 87 +++++++++++++++++++++++++++++++++++++--------- 1 file changed, 71 insertions(+), 16 deletions(-) diff --git a/src/AudioBackend.c b/src/AudioBackend.c index 113554f2e..29c6ccd62 100644 --- a/src/AudioBackend.c +++ b/src/AudioBackend.c @@ -1134,8 +1134,15 @@ void Audio_FreeChunks(void** chunks, int numChunks) { #include #include +struct AudioBuffer { + int available; + int size; + void* samples; +}; + struct AudioContext { - int chanID, count; + int chanID, count, bufHead; + struct AudioBuffer bufs[AUDIO_MAX_BUFFERS]; int channels, sampleRate, volume; }; @@ -1152,10 +1159,29 @@ void AudioBackend_Free(void) { ASND_End(); } +void MusicCallback(s32 voice) { + struct AudioContext* ctx = &music_ctx; + struct AudioBuffer* buf = &ctx->bufs[ctx->bufHead]; + struct AudioBuffer* nextBuf = &ctx->bufs[(ctx->bufHead + 1) % ctx->count]; + + if (ASND_AddVoice(voice, buf->samples, buf->size) == SND_OK) { + ctx->bufHead = (ctx->bufHead + 1) % ctx->count; + buf->samples = NULL; + buf->available = true; + } +} + cc_result Audio_Init(struct AudioContext* ctx, int buffers) { - ctx->chanID = -1; - ctx->count = buffers; - ctx->volume = 255; + ctx->chanID = ASND_GetFirstUnusedVoice();; + ctx->count = buffers; + ctx->volume = 255; + ctx->bufHead = 0; + + Mem_Set(ctx->bufs, 0, sizeof(ctx->bufs)); + for (int i = 0; i < buffers; i++) { + ctx->bufs[i].available = true; + } + return 0; } @@ -1169,7 +1195,7 @@ cc_result Audio_SetFormat(struct AudioContext* ctx, int channels, int sampleRate sampleRate = Audio_AdjustSampleRate(sampleRate, playbackRate); ctx->channels = channels; ctx->sampleRate = sampleRate; - ctx->chanID = ASND_GetFirstUnusedVoice(); + return 0; } @@ -1182,41 +1208,70 @@ cc_result Audio_QueueChunk(struct AudioContext* ctx, void* chunk, cc_uint32 data if (((uintptr_t)chunk & 0x20) != 0) { Platform_Log1("Audio_QueueData: tried to queue buffer with non-aligned audio buffer 0x%x\n", &chunk); } - if ((dataSize & 0x20) != 0) { - Platform_Log1("Audio_QueueData: unaligned audio data size 0x%x\n", &dataSize); - } - int format = (ctx->channels == 2) ? VOICE_STEREO_16BIT : VOICE_MONO_16BIT; - ASND_SetVoice(ctx->chanID, format, ctx->sampleRate, 0, chunk, dataSize, ctx->volume, ctx->volume, NULL); + struct AudioBuffer* buf; - return 0; + for (int i = 0; i < ctx->count; i++) + { + buf = &ctx->bufs[i]; + if (!buf->available) continue; + + buf->samples = chunk; + buf->size = dataSize; + buf->available = false; + + return 0; + } // tried to queue data without polling for free buffers first return ERR_INVALID_ARGUMENT; } cc_result Audio_Play(struct AudioContext* ctx) { + int format = (ctx->channels == 2) ? VOICE_STEREO_16BIT : VOICE_MONO_16BIT; + ASND_SetVoice(ctx->chanID, format, ctx->sampleRate, 0, ctx->bufs[0].samples, ctx->bufs[0].size, ctx->volume, ctx->volume, (ctx->count > 1) ? MusicCallback : NULL); + return 0; } cc_result Audio_Poll(struct AudioContext* ctx, int* inUse) { - int status = ASND_StatusVoice(ctx->chanID); - *inUse = (status <= 0) ? 0 : ctx->count; + struct AudioBuffer* buf; + int count = 0; + + for (int i = 0; i < ctx->count; i++) { + buf = &ctx->bufs[i]; + if (!buf->available) count++; + } + *inUse = count; return 0; } -static cc_bool Audio_FastPlay(struct AudioContext* ctx, struct AudioData* data) { + +cc_bool Audio_FastPlay(struct AudioContext* ctx, struct AudioData* data) { return true; } +cc_result Audio_PlayData(struct AudioContext* ctx, struct AudioData* data) { + cc_result res; + + ctx->volume = data->volume/100.f*255; + + if ((res = Audio_SetFormat(ctx, data->channels, data->sampleRate, data->rate))) return res; + if ((res = Audio_QueueChunk(ctx, data->data, data->size))) return res; + if ((res = Audio_Play(ctx))) return res; + + return 0; +} + cc_bool Audio_DescribeError(cc_result res, cc_string* dst) { return false; } cc_result Audio_AllocChunks(cc_uint32 size, void** chunks, int numChunks) { - size = (size + 0x1F) & ~0x1F; // round up to nearest multiple of 0x20 - void* dst = aligned_alloc(0x20, size * numChunks); + size = (size + 0x1F) & ~0x1F; // round up to nearest multiple of 0x20 + cc_uint32 alignedSize = ((size*numChunks) + 0x1F) & ~0x1F; // round up to nearest multiple of 0x20 + void* dst = aligned_alloc(0x20, alignedSize); if (!dst) return ERR_OUT_OF_MEMORY; for (int i = 0; i < numChunks; i++) { From 38736b2a2516053f998192db61b4ddae8453c38f Mon Sep 17 00:00:00 2001 From: headshot2017 <> Date: Tue, 26 Mar 2024 14:00:24 -0400 Subject: [PATCH 02/41] Wii: remove Audio_PlayData, make buf[0] available immediately if playing a wav file --- src/AudioBackend.c | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/src/AudioBackend.c b/src/AudioBackend.c index 29c6ccd62..9c3a3af40 100644 --- a/src/AudioBackend.c +++ b/src/AudioBackend.c @@ -1230,6 +1230,7 @@ cc_result Audio_QueueChunk(struct AudioContext* ctx, void* chunk, cc_uint32 data cc_result Audio_Play(struct AudioContext* ctx) { int format = (ctx->channels == 2) ? VOICE_STEREO_16BIT : VOICE_MONO_16BIT; ASND_SetVoice(ctx->chanID, format, ctx->sampleRate, 0, ctx->bufs[0].samples, ctx->bufs[0].size, ctx->volume, ctx->volume, (ctx->count > 1) ? MusicCallback : NULL); + if (ctx->count == 1) ctx->bufs[0].available = true; return 0; } @@ -1252,18 +1253,6 @@ cc_bool Audio_FastPlay(struct AudioContext* ctx, struct AudioData* data) { return true; } -cc_result Audio_PlayData(struct AudioContext* ctx, struct AudioData* data) { - cc_result res; - - ctx->volume = data->volume/100.f*255; - - if ((res = Audio_SetFormat(ctx, data->channels, data->sampleRate, data->rate))) return res; - if ((res = Audio_QueueChunk(ctx, data->data, data->size))) return res; - if ((res = Audio_Play(ctx))) return res; - - return 0; -} - cc_bool Audio_DescribeError(cc_result res, cc_string* dst) { return false; } From 0676d409a4459c9f39d94ea0ce15321cd42537bf Mon Sep 17 00:00:00 2001 From: headshot2017 <> Date: Tue, 26 Mar 2024 14:03:50 -0400 Subject: [PATCH 03/41] Wii: set unused voice channel in Audio_SetFormat if it's set in Audio_Init, all sounds will be on the same channel, causing cut-offs --- src/AudioBackend.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/AudioBackend.c b/src/AudioBackend.c index 9c3a3af40..6d36aeb37 100644 --- a/src/AudioBackend.c +++ b/src/AudioBackend.c @@ -1172,7 +1172,7 @@ void MusicCallback(s32 voice) { } cc_result Audio_Init(struct AudioContext* ctx, int buffers) { - ctx->chanID = ASND_GetFirstUnusedVoice();; + ctx->chanID = -1; ctx->count = buffers; ctx->volume = 255; ctx->bufHead = 0; @@ -1195,6 +1195,7 @@ cc_result Audio_SetFormat(struct AudioContext* ctx, int channels, int sampleRate sampleRate = Audio_AdjustSampleRate(sampleRate, playbackRate); ctx->channels = channels; ctx->sampleRate = sampleRate; + ctx->chanID = ASND_GetFirstUnusedVoice(); return 0; } From 5fb48871913d54f0b8a1917bfcbea50f728980eb Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Thu, 28 Mar 2024 17:39:10 +1100 Subject: [PATCH 04/41] PS1: Use a little bit less memory --- src/Animations.c | 25 ++-- src/EnvRenderer.c | 10 +- src/ExtMath.c | 2 +- src/Game.h | 2 +- src/Graphics_Dreamcast.c | 2 +- src/Particle.c | 274 ++++++++++++++++++++------------------- src/TexturePack.h | 4 +- 7 files changed, 166 insertions(+), 153 deletions(-) diff --git a/src/Animations.c b/src/Animations.c index 9c469dd64..29196f6ff 100644 --- a/src/Animations.c +++ b/src/Animations.c @@ -12,7 +12,12 @@ #include "Options.h" #include "Logger.h" -#define LIQUID_ANIM_MAX 64 +#ifdef CC_BUILD_LOWMEM + #define LIQUID_ANIM_MAX 16 +#else + #define LIQUID_ANIM_MAX 64 +#endif + #define WATER_TEX_LOC 14 #define LAVA_TEX_LOC 30 static void Animations_Update(int loc, struct Bitmap* bmp, int stride); @@ -292,20 +297,20 @@ static void Animations_Clear(void) { } static void Animations_Validate(void) { - struct AnimationData data; + struct AnimationData* data; int maxX, maxY, tileX, tileY; int i, j; anims_validated = true; for (i = 0; i < anims_count; i++) { - data = anims_list[i]; + data = &anims_list[i]; - maxX = data.frameX + data.frameSize * data.statesCount; - maxY = data.frameY + data.frameSize; - tileX = Atlas2D_TileX(data.texLoc); - tileY = Atlas2D_TileY(data.texLoc); + maxX = data->frameX + data->frameSize * data->statesCount; + maxY = data->frameY + data->frameSize; + tileX = Atlas2D_TileX(data->texLoc); + tileY = Atlas2D_TileY(data->texLoc); - if (data.frameSize > Atlas2D.TileSize || tileY >= Atlas2D.RowsCount) { + if (data->frameSize > Atlas2D.TileSize || tileY >= Atlas2D.RowsCount) { Chat_Add2("&cAnimation frames for tile (%i, %i) are bigger than the size of a tile in terrain.png", &tileX, &tileY); } else if (maxX > anims_bmp.width || maxY > anims_bmp.height) { Chat_Add2("&cSome of the animation frames for tile (%i, %i) are at coordinates outside animations.png", &tileX, &tileY); @@ -313,8 +318,8 @@ static void Animations_Validate(void) { /* if user has water/lava animations in their default.zip, disable built-in */ /* However, 'usewateranim' and 'uselavaanim' files should always disable use */ /* of custom water/lava animations, even when they exist in animations.png */ - if (data.texLoc == LAVA_TEX_LOC && !alwaysLavaAnim) useLavaAnim = false; - if (data.texLoc == WATER_TEX_LOC && !alwaysWaterAnim) useWaterAnim = false; + if (data->texLoc == LAVA_TEX_LOC && !alwaysLavaAnim) useLavaAnim = false; + if (data->texLoc == WATER_TEX_LOC && !alwaysWaterAnim) useWaterAnim = false; continue; } diff --git a/src/EnvRenderer.c b/src/EnvRenderer.c index 453d504e9..5e5cafbff 100644 --- a/src/EnvRenderer.c +++ b/src/EnvRenderer.c @@ -73,7 +73,7 @@ static void UpdateFogMinimal(float fogDensity) { /* Exp fog mode: f = e^(-density*coord) */ /* Solve coord for f = 0.05 (good approx for fog end) */ /* i.e. log(0.05) = -density * coord */ - #define LOG_005 -2.99573227355399 + #define LOG_005 -2.99573227355399f dist = (int)(LOG_005 / -fogDensity); Game_SetViewDistance(min(dist, Game_UserViewDistance)); @@ -83,7 +83,7 @@ static void UpdateFogMinimal(float fogDensity) { } static void UpdateFogNormal(float fogDensity, PackedCol fogColor) { - double density; + float density; if (fogDensity != 0.0f) { Gfx_SetFogMode(FOG_EXP); @@ -96,10 +96,10 @@ static void UpdateFogNormal(float fogDensity, PackedCol fogColor) { 0.99=z/end --> z=end*0.99 therefore d = -ln(0.01)/(end*0.99) */ - #define LOG_001 -4.60517018598809 + #define LOG_001 -4.60517018598809f - density = -(LOG_001) / (Game_ViewDistance * 0.99); - Gfx_SetFogDensity((float)density); + density = -LOG_001 / (Game_ViewDistance * 0.99f); + Gfx_SetFogDensity(density); } else { Gfx_SetFogMode(FOG_LINEAR); Gfx_SetFogEnd((float)Game_ViewDistance); diff --git a/src/ExtMath.c b/src/ExtMath.c index 6196c6785..28f8a1a81 100644 --- a/src/ExtMath.c +++ b/src/ExtMath.c @@ -94,7 +94,7 @@ cc_bool Math_IsPowOf2(int value) { #define RND_MASK ((1ULL << 48) - 1) void Random_SeedFromCurrentTime(RNGState* rnd) { - TimeMS now = DateTime_CurrentUTC_MS(); + cc_uint64 now = Stopwatch_Measure(); Random_Seed(rnd, (int)now); } diff --git a/src/Game.h b/src/Game.h index 6001cac5b..a3f2c7bd6 100644 --- a/src/Game.h +++ b/src/Game.h @@ -26,7 +26,7 @@ extern cc_string Game_Mppass; #if defined CC_BUILD_N64 #define DEFAULT_VIEWDIST 20 -#elif defined CC_BUILD_NDS +#elif defined CC_BUILD_NDS || defined CC_BUILD_PS1 #define DEFAULT_VIEWDIST 192 #else #define DEFAULT_VIEWDIST 512 diff --git a/src/Graphics_Dreamcast.c b/src/Graphics_Dreamcast.c index af8e53a7a..1dceb9dd1 100644 --- a/src/Graphics_Dreamcast.c +++ b/src/Graphics_Dreamcast.c @@ -543,4 +543,4 @@ void Gfx_EndFrame(void) { void Gfx_OnWindowResize(void) { glViewport(0, 0, Game.Width, Game.Height); } -#endif \ No newline at end of file +#endif diff --git a/src/Particle.c b/src/Particle.c index 4c3e3b81c..3228758d3 100644 --- a/src/Particle.c +++ b/src/Particle.c @@ -187,6 +187,30 @@ static void Rain_Tick(double delta) { } } +void Particles_RainSnowEffect(float x, float y, float z) { + struct Particle* p; + int i, type; + + for (i = 0; i < 2; i++) { + if (rain_count == PARTICLES_MAX) Rain_RemoveAt(0); + p = &rain_Particles[rain_count++]; + + p->velocity.x = Random_Float(&rnd) * 0.8f - 0.4f; /* [-0.4, 0.4] */ + p->velocity.z = Random_Float(&rnd) * 0.8f - 0.4f; + p->velocity.y = Random_Float(&rnd) + 0.4f; + + p->lastPos.x = x + Random_Float(&rnd); /* [0.0, 1.0] */ + p->lastPos.y = y + Random_Float(&rnd) * 0.1f + 0.01f; + p->lastPos.z = z + Random_Float(&rnd); + + p->nextPos = p->lastPos; + p->lifetime = 40.0f; + + type = Random_Next(&rnd, 30); + p->size = type >= 28 ? 2 : (type >= 25 ? 4 : 3); + } +} + /*########################################################################################################################* *------------------------------------------------------Terrain particle---------------------------------------------------* @@ -291,9 +315,92 @@ static void Terrain_Tick(double delta) { } } +void Particles_BreakBlockEffect(IVec3 coords, BlockID old, BlockID now) { + struct TerrainParticle* p; + TextureLoc loc; + int texIndex; + TextureRec baseRec, rec; + Vec3 origin, minBB, maxBB; + + /* texture UV variables */ + float uScale, vScale, maxU2, maxV2; + int minX, minZ, maxX, maxZ; + int minU, minV, maxU, maxV; + int maxUsedU, maxUsedV; + + /* per-particle variables */ + float cellX, cellY, cellZ; + Vec3 cell; + int x, y, z, type; + + if (now != BLOCK_AIR || Blocks.Draw[old] == DRAW_GAS) return; + IVec3_ToVec3(&origin, &coords); + loc = Block_Tex(old, FACE_XMIN); + + baseRec = Atlas1D_TexRec(loc, 1, &texIndex); + uScale = (1.0f/16.0f); vScale = (1.0f/16.0f) * Atlas1D.InvTileSize; + + minBB = Blocks.MinBB[old]; maxBB = Blocks.MaxBB[old]; + minX = (int)(minBB.x * 16); maxX = (int)(maxBB.x * 16); + minZ = (int)(minBB.z * 16); maxZ = (int)(maxBB.z * 16); + + minU = min(minX, minZ); minV = (int)(16 - maxBB.y * 16); + maxU = min(maxX, maxZ); maxV = (int)(16 - minBB.y * 16); + /* This way we can avoid creating particles which outside the bounds and need to be clamped */ + maxUsedU = maxU; maxUsedV = maxV; + if (minU < 12 && maxU > 12) maxUsedU = 12; + if (minV < 12 && maxV > 12) maxUsedV = 12; + + #define GRID_SIZE 4 + /* gridOffset gives the centre of the cell on a grid */ + #define CELL_CENTRE ((1.0f / GRID_SIZE) * 0.5f) + + maxU2 = baseRec.U1 + maxU * uScale; + maxV2 = baseRec.V1 + maxV * vScale; + for (x = 0; x < GRID_SIZE; x++) { + for (y = 0; y < GRID_SIZE; y++) { + for (z = 0; z < GRID_SIZE; z++) { + + cellX = (float)x / GRID_SIZE; cellY = (float)y / GRID_SIZE; cellZ = (float)z / GRID_SIZE; + cell = Vec3_Create3(CELL_CENTRE + cellX, CELL_CENTRE / 2 + cellY, CELL_CENTRE + cellZ); + if (cell.x < minBB.x || cell.x > maxBB.x || cell.y < minBB.y + || cell.y > maxBB.y || cell.z < minBB.z || cell.z > maxBB.z) continue; + + if (terrain_count == PARTICLES_MAX) Terrain_RemoveAt(0); + p = &terrain_particles[terrain_count++]; + + /* centre random offset around [-0.2, 0.2] */ + p->base.velocity.x = CELL_CENTRE + (cellX - 0.5f) + (Random_Float(&rnd) * 0.4f - 0.2f); + p->base.velocity.y = CELL_CENTRE + (cellY - 0.0f) + (Random_Float(&rnd) * 0.4f - 0.2f); + p->base.velocity.z = CELL_CENTRE + (cellZ - 0.5f) + (Random_Float(&rnd) * 0.4f - 0.2f); + + rec = baseRec; + rec.U1 = baseRec.U1 + Random_Range(&rnd, minU, maxUsedU) * uScale; + rec.V1 = baseRec.V1 + Random_Range(&rnd, minV, maxUsedV) * vScale; + rec.U2 = rec.U1 + 4 * uScale; + rec.V2 = rec.V1 + 4 * vScale; + rec.U2 = min(rec.U2, maxU2) - 0.01f * uScale; + rec.V2 = min(rec.V2, maxV2) - 0.01f * vScale; + + Vec3_Add(&p->base.lastPos, &origin, &cell); + p->base.nextPos = p->base.lastPos; + p->base.lifetime = 0.3f + Random_Float(&rnd) * 1.2f; + + p->rec = rec; + p->texLoc = loc; + p->block = old; + type = Random_Next(&rnd, 30); + p->base.size = type >= 28 ? 12 : (type >= 25 ? 10 : 8); + } + } + } +} + + /*########################################################################################################################* *-------------------------------------------------------Custom particle---------------------------------------------------* *#########################################################################################################################*/ +#ifdef CC_BUILD_NETWORKING struct CustomParticle { struct Particle base; int effectId; @@ -388,139 +495,6 @@ static void Custom_Tick(double delta) { } } - -/*########################################################################################################################* -*--------------------------------------------------------Particles--------------------------------------------------------* -*#########################################################################################################################*/ -void Particles_Render(float t) { - if (!terrain_count && !rain_count && !custom_count) return; - - if (Gfx.LostContext) return; - if (!particles_VB) - particles_VB = Gfx_CreateDynamicVb(VERTEX_FORMAT_TEXTURED, PARTICLES_MAX * 4); - - Gfx_SetAlphaTest(true); - - Gfx_SetVertexFormat(VERTEX_FORMAT_TEXTURED); - Terrain_Render(t); - Rain_Render(t); - Custom_Render(t); - - Gfx_SetAlphaTest(false); -} - -static void Particles_Tick(struct ScheduledTask* task) { - double delta = task->interval; - Terrain_Tick(delta); - Rain_Tick(delta); - Custom_Tick(delta); -} - -void Particles_BreakBlockEffect(IVec3 coords, BlockID old, BlockID now) { - struct TerrainParticle* p; - TextureLoc loc; - int texIndex; - TextureRec baseRec, rec; - Vec3 origin, minBB, maxBB; - - /* texture UV variables */ - float uScale, vScale, maxU2, maxV2; - int minX, minZ, maxX, maxZ; - int minU, minV, maxU, maxV; - int maxUsedU, maxUsedV; - - /* per-particle variables */ - float cellX, cellY, cellZ; - Vec3 cell; - int x, y, z, type; - - if (now != BLOCK_AIR || Blocks.Draw[old] == DRAW_GAS) return; - IVec3_ToVec3(&origin, &coords); - loc = Block_Tex(old, FACE_XMIN); - - baseRec = Atlas1D_TexRec(loc, 1, &texIndex); - uScale = (1.0f/16.0f); vScale = (1.0f/16.0f) * Atlas1D.InvTileSize; - - minBB = Blocks.MinBB[old]; maxBB = Blocks.MaxBB[old]; - minX = (int)(minBB.x * 16); maxX = (int)(maxBB.x * 16); - minZ = (int)(minBB.z * 16); maxZ = (int)(maxBB.z * 16); - - minU = min(minX, minZ); minV = (int)(16 - maxBB.y * 16); - maxU = min(maxX, maxZ); maxV = (int)(16 - minBB.y * 16); - /* This way we can avoid creating particles which outside the bounds and need to be clamped */ - maxUsedU = maxU; maxUsedV = maxV; - if (minU < 12 && maxU > 12) maxUsedU = 12; - if (minV < 12 && maxV > 12) maxUsedV = 12; - - #define GRID_SIZE 4 - /* gridOffset gives the centre of the cell on a grid */ - #define CELL_CENTRE ((1.0f / GRID_SIZE) * 0.5f) - - maxU2 = baseRec.U1 + maxU * uScale; - maxV2 = baseRec.V1 + maxV * vScale; - for (x = 0; x < GRID_SIZE; x++) { - for (y = 0; y < GRID_SIZE; y++) { - for (z = 0; z < GRID_SIZE; z++) { - - cellX = (float)x / GRID_SIZE; cellY = (float)y / GRID_SIZE; cellZ = (float)z / GRID_SIZE; - cell = Vec3_Create3(CELL_CENTRE + cellX, CELL_CENTRE / 2 + cellY, CELL_CENTRE + cellZ); - if (cell.x < minBB.x || cell.x > maxBB.x || cell.y < minBB.y - || cell.y > maxBB.y || cell.z < minBB.z || cell.z > maxBB.z) continue; - - if (terrain_count == PARTICLES_MAX) Terrain_RemoveAt(0); - p = &terrain_particles[terrain_count++]; - - /* centre random offset around [-0.2, 0.2] */ - p->base.velocity.x = CELL_CENTRE + (cellX - 0.5f) + (Random_Float(&rnd) * 0.4f - 0.2f); - p->base.velocity.y = CELL_CENTRE + (cellY - 0.0f) + (Random_Float(&rnd) * 0.4f - 0.2f); - p->base.velocity.z = CELL_CENTRE + (cellZ - 0.5f) + (Random_Float(&rnd) * 0.4f - 0.2f); - - rec = baseRec; - rec.U1 = baseRec.U1 + Random_Range(&rnd, minU, maxUsedU) * uScale; - rec.V1 = baseRec.V1 + Random_Range(&rnd, minV, maxUsedV) * vScale; - rec.U2 = rec.U1 + 4 * uScale; - rec.V2 = rec.V1 + 4 * vScale; - rec.U2 = min(rec.U2, maxU2) - 0.01f * uScale; - rec.V2 = min(rec.V2, maxV2) - 0.01f * vScale; - - Vec3_Add(&p->base.lastPos, &origin, &cell); - p->base.nextPos = p->base.lastPos; - p->base.lifetime = 0.3f + Random_Float(&rnd) * 1.2f; - - p->rec = rec; - p->texLoc = loc; - p->block = old; - type = Random_Next(&rnd, 30); - p->base.size = type >= 28 ? 12 : (type >= 25 ? 10 : 8); - } - } - } -} - -void Particles_RainSnowEffect(float x, float y, float z) { - struct Particle* p; - int i, type; - - for (i = 0; i < 2; i++) { - if (rain_count == PARTICLES_MAX) Rain_RemoveAt(0); - p = &rain_Particles[rain_count++]; - - p->velocity.x = Random_Float(&rnd) * 0.8f - 0.4f; /* [-0.4, 0.4] */ - p->velocity.z = Random_Float(&rnd) * 0.8f - 0.4f; - p->velocity.y = Random_Float(&rnd) + 0.4f; - - p->lastPos.x = x + Random_Float(&rnd); /* [0.0, 1.0] */ - p->lastPos.y = y + Random_Float(&rnd) * 0.1f + 0.01f; - p->lastPos.z = z + Random_Float(&rnd); - - p->nextPos = p->lastPos; - p->lifetime = 40.0f; - - type = Random_Next(&rnd, 30); - p->size = type >= 28 ? 2 : (type >= 25 ? 4 : 3); - } -} - void Particles_CustomEffect(int effectID, float x, float y, float z, float originX, float originY, float originZ) { struct CustomParticle* p; struct CustomParticleEffect* e = &Particles_CustomEffects[effectID]; @@ -568,6 +542,40 @@ void Particles_CustomEffect(int effectID, float x, float y, float z, float origi if (IntersectsBlock(&p->base, CustomParticle_CanPass)) custom_count--; } } +#else +static int custom_count; + +static void Custom_Render(float t) { } +static void Custom_Tick(double delta) { } +#endif + + +/*########################################################################################################################* +*--------------------------------------------------------Particles--------------------------------------------------------* +*#########################################################################################################################*/ +void Particles_Render(float t) { + if (!terrain_count && !rain_count && !custom_count) return; + + if (Gfx.LostContext) return; + if (!particles_VB) + particles_VB = Gfx_CreateDynamicVb(VERTEX_FORMAT_TEXTURED, PARTICLES_MAX * 4); + + Gfx_SetAlphaTest(true); + + Gfx_SetVertexFormat(VERTEX_FORMAT_TEXTURED); + Terrain_Render(t); + Rain_Render(t); + Custom_Render(t); + + Gfx_SetAlphaTest(false); +} + +static void Particles_Tick(struct ScheduledTask* task) { + double delta = task->interval; + Terrain_Tick(delta); + Rain_Tick(delta); + Custom_Tick(delta); +} /*########################################################################################################################* diff --git a/src/TexturePack.h b/src/TexturePack.h index e4858b128..781e38043 100644 --- a/src/TexturePack.h +++ b/src/TexturePack.h @@ -20,9 +20,9 @@ extern struct IGameComponent Textures_Component; #define ATLAS2D_SHIFT 4 /* Maximum supported number of rows in the atlas. */ #ifdef EXTENDED_TEXTURES -#define ATLAS2D_MAX_ROWS_COUNT 32 + #define ATLAS2D_MAX_ROWS_COUNT 32 #else -#define ATLAS2D_MAX_ROWS_COUNT 16 + #define ATLAS2D_MAX_ROWS_COUNT 16 #endif /* Maximum possible number of 1D terrain atlases. (worst case, each 1D atlas only has 1 tile) */ #define ATLAS1D_MAX_ATLASES (ATLAS2D_TILES_PER_ROW * ATLAS2D_MAX_ROWS_COUNT) From ff42b7d35282309c03297e7b37ae8e964fba31f8 Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Thu, 28 Mar 2024 19:03:30 +1100 Subject: [PATCH 05/41] Use stopwatch time for measuring ping and launcher caret, change UTC time measurement to seconds instead of milliseconds --- src/EntityRenderers.c | 6 +++--- src/Http_Web.c | 2 +- src/LBackend.c | 6 +++--- src/LScreens.c | 4 ++-- src/Platform.h | 8 ++++---- src/Platform_3DS.c | 5 ++--- src/Platform_Dreamcast.c | 4 ++-- src/Platform_GCWii.c | 7 +++---- src/Platform_N64.c | 5 ++--- src/Platform_NDS.c | 5 ++--- src/Platform_PS1.c | 3 +-- src/Platform_PS2.c | 5 ++--- src/Platform_PS3.c | 7 +++---- src/Platform_PSP.c | 5 ++--- src/Platform_PSVita.c | 5 ++--- src/Platform_Posix.c | 5 ++--- src/Platform_Switch.c | 5 ++--- src/Platform_Web.c | 5 ++--- src/Platform_WiiU.c | 13 +++++-------- src/Platform_Windows.c | 12 ++++++------ src/Platform_Xbox.c | 12 ++++++------ src/Platform_Xbox360.c | 5 ++--- src/SSL.c | 2 +- src/Server.c | 16 +++++++++------- src/Utils.h | 2 +- src/_HttpBase.h | 6 +++--- 26 files changed, 73 insertions(+), 87 deletions(-) diff --git a/src/EntityRenderers.c b/src/EntityRenderers.c index 4a35f8eb2..863ca2c46 100644 --- a/src/EntityRenderers.c +++ b/src/EntityRenderers.c @@ -232,9 +232,9 @@ static void EntityShadows_MakeTexture(void) { BitmapCol* row = Bitmap_GetRow(&bmp, y); for (x = 0; x < sh_size; x++) { - double dist = - (sh_half - (x + 0.5)) * (sh_half - (x + 0.5)) + - (sh_half - (y + 0.5)) * (sh_half - (y + 0.5)); + float dist = + (sh_half - (x + 0.5f)) * (sh_half - (x + 0.5f)) + + (sh_half - (y + 0.5f)) * (sh_half - (y + 0.5f)); row[x] = dist < sh_half * sh_half ? color : 0; } } diff --git a/src/Http_Web.c b/src/Http_Web.c index dad8300fb..7dbc35e9e 100644 --- a/src/Http_Web.c +++ b/src/Http_Web.c @@ -139,7 +139,7 @@ static void Http_Init(void) { Http_InitCommon(); /* If this webpage is https://, browsers deny any http:// downloading */ httpsOnly = interop_IsHttpsOnly(); - startTime = DateTime_CurrentUTC_MS(); + startTime = DateTime_CurrentUTC(); RequestList_Init(&queuedReqs); RequestList_Init(&workingReqs); diff --git a/src/LBackend.c b/src/LBackend.c index 28f7610b2..dc55743e5 100644 --- a/src/LBackend.c +++ b/src/LBackend.c @@ -534,7 +534,7 @@ void LBackend_CheckboxDraw(struct LCheckbox* w) { /*########################################################################################################################* *------------------------------------------------------InputWidget--------------------------------------------------------* *#########################################################################################################################*/ -static TimeMS caretStart; +static cc_uint64 caretStart; static Rect2D caretRect, lastCaretRect; #define Rect2D_Equals(a, b) a.x == b.x && a.y == b.y && a.Width == b.Width && a.Height == b.Height @@ -620,7 +620,7 @@ void LBackend_InputTick(struct LInput* w) { Rect2D r; if (!caretStart) return; - elapsed = (int)(DateTime_CurrentUTC_MS() - caretStart); + elapsed = Stopwatch_ElapsedMS(caretStart, Stopwatch_Measure()); caretShow = (elapsed % 1000) < 500; if (caretShow == w->caretShow) return; @@ -641,7 +641,7 @@ void LBackend_InputTick(struct LInput* w) { void LBackend_InputSelect(struct LInput* w, int idx, cc_bool wasSelected) { struct OpenKeyboardArgs args; - caretStart = DateTime_CurrentUTC_MS(); + caretStart = Stopwatch_Measure(); w->caretShow = true; LInput_MoveCaretToCursor(w, idx); LBackend_MarkDirty(w); diff --git a/src/LScreens.c b/src/LScreens.c index ea611bf06..539df3b5f 100644 --- a/src/LScreens.c +++ b/src/LScreens.c @@ -1600,9 +1600,9 @@ static void UpdatesScreen_Format(struct LLabel* lbl, const char* prefix, cc_uint if (!timestamp) { String_AppendConst(&str, "&cCheck failed"); } else { - now = DateTime_CurrentUTC_MS() - UNIX_EPOCH; + now = DateTime_CurrentUTC() - UNIX_EPOCH_SECONDS; /* must divide as cc_uint64, int delta overflows after 26 days */ - delta = (int)((now / 1000) - timestamp); + delta = (int)(now - timestamp); UpdatesScreen_FormatTime(&str, delta); } LLabel_SetText(lbl, &str); diff --git a/src/Platform.h b/src/Platform.h index 3b1635847..f5415ec14 100644 --- a/src/Platform.h +++ b/src/Platform.h @@ -24,8 +24,8 @@ typedef int cc_file; /* Origin points for when seeking in a file. */ /* NOTE: These have same values as SEEK_SET/SEEK_CUR/SEEK_END, do not change them */ enum File_SeekFrom { FILE_SEEKFROM_BEGIN, FILE_SEEKFROM_CURRENT, FILE_SEEKFROM_END }; -/* Number of milliseconds since 01/01/0001 to start of unix time. */ -#define UNIX_EPOCH 62135596800000ULL +/* Number of seconds since 01/01/0001 to start of unix time. */ +#define UNIX_EPOCH_SECONDS 62135596800ULL extern const cc_result ReturnCode_FileShareViolation; extern const cc_result ReturnCode_FileNotFound; @@ -163,8 +163,8 @@ void Platform_Log2(const char* format, const void* a1, const void* a2); void Platform_Log3(const char* format, const void* a1, const void* a2, const void* a3); void Platform_Log4(const char* format, const void* a1, const void* a2, const void* a3, const void* a4); -/* Returns the current UTC time, as number of milliseconds since 1/1/0001 */ -CC_API TimeMS DateTime_CurrentUTC_MS(void); +/* Returns the current UTC time, as number of seconds since 1/1/0001 */ +CC_API TimeMS DateTime_CurrentUTC(void); /* Returns the current local Time. */ CC_API void DateTime_CurrentLocal(struct DateTime* t); /* Takes a platform-specific stopwatch measurement. */ diff --git a/src/Platform_3DS.c b/src/Platform_3DS.c index 89fd1291d..0c40cd584 100644 --- a/src/Platform_3DS.c +++ b/src/Platform_3DS.c @@ -62,11 +62,10 @@ void Platform_Log(const char* msg, int len) { svcOutputDebugString("\n", 1); } -#define UnixTime_TotalMS(time) ((cc_uint64)time.tv_sec * 1000 + UNIX_EPOCH + (time.tv_usec / 1000)) -TimeMS DateTime_CurrentUTC_MS(void) { +TimeMS DateTime_CurrentUTC(void) { struct timeval cur; gettimeofday(&cur, NULL); - return UnixTime_TotalMS(cur); + return (cc_uint64)cur.tv_sec + UNIX_EPOCH_SECONDS; } void DateTime_CurrentLocal(struct DateTime* t) { diff --git a/src/Platform_Dreamcast.c b/src/Platform_Dreamcast.c index f2ecccad7..095d06bdd 100644 --- a/src/Platform_Dreamcast.c +++ b/src/Platform_Dreamcast.c @@ -75,7 +75,7 @@ void Platform_Log(const char* msg, int len) { LogOnscreen(msg, len); } -TimeMS DateTime_CurrentUTC_MS(void) { +TimeMS DateTime_CurrentUTC(void) { uint32 secs, ms; timer_ms_gettime(&secs, &ms); @@ -86,7 +86,7 @@ TimeMS DateTime_CurrentUTC_MS(void) { if (boot_time < boot_time_2000) boot_time = boot_time_2024; cc_uint64 curSecs = boot_time + secs; - return (curSecs * 1000 + ms) + UNIX_EPOCH; + return curSecs + UNIX_EPOCH_SECONDS; } void DateTime_CurrentLocal(struct DateTime* t) { diff --git a/src/Platform_GCWii.c b/src/Platform_GCWii.c index 97acf81df..15023fe82 100644 --- a/src/Platform_GCWii.c +++ b/src/Platform_GCWii.c @@ -61,11 +61,10 @@ void Platform_Log(const char* msg, int len) { // TODO: Just use printf("%s", somehow ??? } -#define UnixTime_TotalMS(time) ((cc_uint64)time.tv_sec * 1000 + UNIX_EPOCH + (time.tv_usec / 1000)) -TimeMS DateTime_CurrentUTC_MS(void) { +TimeMS DateTime_CurrentUTC(void) { struct timeval cur; gettimeofday(&cur, NULL); - return UnixTime_TotalMS(cur); + return (cc_uint64)cur.tv_sec + UNIX_EPOCH_SECONDS; } void DateTime_CurrentLocal(struct DateTime* t) { @@ -594,4 +593,4 @@ static cc_result GetMachineID(cc_uint32* key) { } #endif -#endif \ No newline at end of file +#endif diff --git a/src/Platform_N64.c b/src/Platform_N64.c index 7b7428caa..1b2aeeee1 100644 --- a/src/Platform_N64.c +++ b/src/Platform_N64.c @@ -48,11 +48,10 @@ void Platform_Log(const char* msg, int len) { write(STDERR_FILENO, "\n", 1); } -#define UnixTime_TotalMS(time) ((cc_uint64)time.tv_sec * 1000 + UNIX_EPOCH + (time.tv_usec / 1000)) -TimeMS DateTime_CurrentUTC_MS(void) { +TimeMS DateTime_CurrentUTC(void) { struct timeval cur; gettimeofday(&cur, NULL); - return UnixTime_TotalMS(cur); + return (cc_uint64)cur.tv_sec + UNIX_EPOCH_SECONDS; } void DateTime_CurrentLocal(struct DateTime* t) { diff --git a/src/Platform_NDS.c b/src/Platform_NDS.c index 14f0d2b90..e1dc5e382 100644 --- a/src/Platform_NDS.c +++ b/src/Platform_NDS.c @@ -84,11 +84,10 @@ void Platform_Log(const char* msg, int len) { LogNocash(msg, len); } -#define UnixTime_TotalMS(time) ((cc_uint64)time.tv_sec * 1000 + UNIX_EPOCH) -TimeMS DateTime_CurrentUTC_MS(void) { +TimeMS DateTime_CurrentUTC(void) { struct timeval cur; gettimeofday(&cur, NULL); - return UnixTime_TotalMS(cur); // no usec on the DS + return (cc_uint64)cur.tv_sec + UNIX_EPOCH_SECONDS; } void DateTime_CurrentLocal(struct DateTime* t) { diff --git a/src/Platform_PS1.c b/src/Platform_PS1.c index e654127c9..0df90e033 100644 --- a/src/Platform_PS1.c +++ b/src/Platform_PS1.c @@ -39,8 +39,7 @@ void Platform_Log(const char* msg, int len) { printf("%s\n", tmp); } -#define UnixTime_TotalMS(time) ((cc_uint64)time.tv_sec * 1000 + UNIX_EPOCH + (time.tv_usec / 1000)) -TimeMS DateTime_CurrentUTC_MS(void) { +TimeMS DateTime_CurrentUTC(void) { return 0; } diff --git a/src/Platform_PS2.c b/src/Platform_PS2.c index ada09b7c4..5be4c5480 100644 --- a/src/Platform_PS2.c +++ b/src/Platform_PS2.c @@ -56,11 +56,10 @@ void Platform_Log(const char* msg, int len) { _print("%s", tmp); } -#define UnixTime_TotalMS(time) ((cc_uint64)time.tv_sec * 1000 + UNIX_EPOCH + (time.tv_usec / 1000)) -TimeMS DateTime_CurrentUTC_MS(void) { +TimeMS DateTime_CurrentUTC(void) { struct timeval cur; gettimeofday(&cur, NULL); - return UnixTime_TotalMS(cur); + return (cc_uint64)cur.tv_sec + UNIX_EPOCH_SECONDS; } void DateTime_CurrentLocal(struct DateTime* t) { diff --git a/src/Platform_PS3.c b/src/Platform_PS3.c index a70279d0c..b24744bd0 100644 --- a/src/Platform_PS3.c +++ b/src/Platform_PS3.c @@ -52,11 +52,10 @@ void Platform_Log(const char* msg, int len) { sysTtyWrite(STDOUT_FILENO, "\n", 1, &done); } -#define UnixTime_TotalMS(time) ((cc_uint64)time.tv_sec * 1000 + UNIX_EPOCH + (time.tv_usec / 1000)) -TimeMS DateTime_CurrentUTC_MS(void) { +TimeMS DateTime_CurrentUTC(void) { struct timeval cur; gettimeofday(&cur, NULL); - return UnixTime_TotalMS(cur); + return (cc_uint64)cur.tv_sec + UNIX_EPOCH_SECONDS; } void DateTime_CurrentLocal(struct DateTime* t) { @@ -483,4 +482,4 @@ cc_bool Platform_DescribeError(cc_result res, cc_string* dst) { static cc_result GetMachineID(cc_uint32* key) { return ERR_NOT_SUPPORTED; } -#endif \ No newline at end of file +#endif diff --git a/src/Platform_PSP.c b/src/Platform_PSP.c index 3667b5dee..014edd575 100644 --- a/src/Platform_PSP.c +++ b/src/Platform_PSP.c @@ -54,11 +54,10 @@ void Platform_Log(const char* msg, int len) { //File_Close(file); } -#define UnixTime_TotalMS(time) ((cc_uint64)time.tv_sec * 1000 + UNIX_EPOCH + (time.tv_usec / 1000)) -TimeMS DateTime_CurrentUTC_MS(void) { +TimeMS DateTime_CurrentUTC(void) { struct SceKernelTimeval cur; sceKernelLibcGettimeofday(&cur, NULL); - return UnixTime_TotalMS(cur); + return (cc_uint64)cur.tv_sec + UNIX_EPOCH_SECONDS; } void DateTime_CurrentLocal(struct DateTime* t) { diff --git a/src/Platform_PSVita.c b/src/Platform_PSVita.c index e5e47c232..e002e5945 100644 --- a/src/Platform_PSVita.c +++ b/src/Platform_PSVita.c @@ -37,11 +37,10 @@ void Platform_Log(const char* msg, int len) { sceIoWrite(stdout_fd, msg, len); } -#define UnixTime_TotalMS(time) ((cc_uint64)time.sec * 1000 + UNIX_EPOCH + (time.usec / 1000)) -TimeMS DateTime_CurrentUTC_MS(void) { +TimeMS DateTime_CurrentUTC(void) { struct SceKernelTimeval cur; sceKernelLibcGettimeofday(&cur, NULL); - return UnixTime_TotalMS(cur); + return (cc_uint64)cur.sec + UNIX_EPOCH_SECONDS; } void DateTime_CurrentLocal(struct DateTime* t) { diff --git a/src/Platform_Posix.c b/src/Platform_Posix.c index 1bb56e988..04d2f26c0 100644 --- a/src/Platform_Posix.c +++ b/src/Platform_Posix.c @@ -103,11 +103,10 @@ void Platform_Log(const char* msg, int len) { } #endif -#define UnixTime_TotalMS(time) ((cc_uint64)time.tv_sec * 1000 + UNIX_EPOCH + (time.tv_usec / 1000)) -TimeMS DateTime_CurrentUTC_MS(void) { +TimeMS DateTime_CurrentUTC(void) { struct timeval cur; gettimeofday(&cur, NULL); - return UnixTime_TotalMS(cur); + return (cc_uint64)cur.tv_sec + UNIX_EPOCH_SECONDS; } void DateTime_CurrentLocal(struct DateTime* t) { diff --git a/src/Platform_Switch.c b/src/Platform_Switch.c index 846b61b27..a5111a720 100644 --- a/src/Platform_Switch.c +++ b/src/Platform_Switch.c @@ -87,11 +87,10 @@ void Platform_Log(const char* msg, int len) { svcOutputDebugString(msg, len); } -#define UnixTime_TotalMS(time) ((cc_uint64)time.tv_sec * 1000 + UNIX_EPOCH + (time.tv_usec / 1000)) -TimeMS DateTime_CurrentUTC_MS(void) { +TimeMS DateTime_CurrentUTC(void) { struct timeval cur; gettimeofday(&cur, NULL); - return UnixTime_TotalMS(cur); + return (cc_uint64)cur.tv_sec + UNIX_EPOCH_SECONDS; } void DateTime_CurrentLocal(struct DateTime* t) { diff --git a/src/Platform_Web.c b/src/Platform_Web.c index f1b43bec2..2fd862701 100644 --- a/src/Platform_Web.c +++ b/src/Platform_Web.c @@ -84,11 +84,10 @@ void Platform_Log(const char* msg, int len) { interop_Log(msg, len); } -#define UnixTime_TotalMS(time) ((cc_uint64)time.tv_sec * 1000 + UNIX_EPOCH + (time.tv_usec / 1000)) -TimeMS DateTime_CurrentUTC_MS(void) { +TimeMS DateTime_CurrentUTC(void) { struct timeval cur; gettimeofday(&cur, NULL); - return UnixTime_TotalMS(cur); + return (cc_uint64)cur.tv_sec + UNIX_EPOCH_SECONDS; } extern void interop_GetLocalTime(struct DateTime* t); diff --git a/src/Platform_WiiU.c b/src/Platform_WiiU.c index ba3069e48..384956904 100644 --- a/src/Platform_WiiU.c +++ b/src/Platform_WiiU.c @@ -58,15 +58,12 @@ void Platform_Log(const char* msg, int len) { OSReport("%s\n", tmp); } -#define WIIU_EPOCH_ADJUST 946684800000ULL // Wii U time epoch is year 2000, not 1970 +#define WIIU_EPOCH_ADJUST 946684800ULL // Wii U time epoch is year 2000, not 1970 -TimeMS DateTime_CurrentUTC_MS(void) { - OSTime time = OSGetTime(); - // avoid overflow in time calculation +TimeMS DateTime_CurrentUTC(void) { + OSTime time = OSGetTime(); cc_int64 secs = (time_t)OSTicksToSeconds(time); - time -= OSSecondsToTicks(secs); - cc_uint64 msecs = OSTicksToMilliseconds(time); - return (secs * 1000 + msecs) + UNIX_EPOCH + WIIU_EPOCH_ADJUST; + return secs + UNIX_EPOCH_SECONDS + WIIU_EPOCH_ADJUST; } void DateTime_CurrentLocal(struct DateTime* t) { @@ -455,4 +452,4 @@ void Platform_Init(void) { *-------------------------------------------------------Encryption--------------------------------------------------------* *#########################################################################################################################*/ static cc_result GetMachineID(cc_uint32* key) { return ERR_NOT_SUPPORTED; } -#endif \ No newline at end of file +#endif diff --git a/src/Platform_Windows.c b/src/Platform_Windows.c index 52d128dab..00aa6e3b6 100644 --- a/src/Platform_Windows.c +++ b/src/Platform_Windows.c @@ -96,18 +96,18 @@ void Platform_Log(const char* msg, int len) { OutputDebugStringA("\n"); } -#define FILETIME_EPOCH 50491123200000ULL -#define FILETIME_UNIX_EPOCH 11644473600LL -#define FileTime_TotalMS(time) ((time / 10000) + FILETIME_EPOCH) -#define FileTime_UnixTime(time) ((time / 10000000) - FILETIME_UNIX_EPOCH) -TimeMS DateTime_CurrentUTC_MS(void) { +#define FILETIME_EPOCH 50491123200ULL +#define FILETIME_UNIX_EPOCH 11644473600ULL +#define FileTime_TotalSecs(time) ((time / 10000000) + FILETIME_EPOCH) +#define FileTime_UnixTime(time) ((time / 10000000) - FILETIME_UNIX_EPOCH) +TimeMS DateTime_CurrentUTC(void) { FILETIME ft; cc_uint64 raw; GetSystemTimeAsFileTime(&ft); /* in 100 nanosecond units, since Jan 1 1601 */ raw = ft.dwLowDateTime | ((cc_uint64)ft.dwHighDateTime << 32); - return FileTime_TotalMS(raw); + return FileTime_TotalSecs(raw); } void DateTime_CurrentLocal(struct DateTime* t) { diff --git a/src/Platform_Xbox.c b/src/Platform_Xbox.c index f53fe1dd0..80f3f1422 100644 --- a/src/Platform_Xbox.c +++ b/src/Platform_Xbox.c @@ -39,16 +39,16 @@ void Platform_Log(const char* msg, int len) { OutputDebugStringA(tmp); } -#define FILETIME_EPOCH 50491123200000ULL -#define FILETIME_UNIX_EPOCH 11644473600LL -#define FileTime_TotalMS(time) ((time / 10000) + FILETIME_EPOCH) -#define FileTime_UnixTime(time) ((time / 10000000) - FILETIME_UNIX_EPOCH) -TimeMS DateTime_CurrentUTC_MS(void) { +#define FILETIME_EPOCH 50491123200ULL +#define FILETIME_UNIX_EPOCH 11644473600ULL +#define FileTime_TotalSecs(time) ((time / 10000000) + FILETIME_EPOCH) +#define FileTime_UnixTime(time) ((time / 10000000) - FILETIME_UNIX_EPOCH) +TimeMS DateTime_CurrentUTC(void) { LARGE_INTEGER ft; KeQuerySystemTime(&ft); /* in 100 nanosecond units, since Jan 1 1601 */ - return FileTime_TotalMS(ft.QuadPart); + return FileTime_TotalSecs(ft.QuadPart); } void DateTime_CurrentLocal(struct DateTime* t) { diff --git a/src/Platform_Xbox360.c b/src/Platform_Xbox360.c index c230bc370..d18920e81 100644 --- a/src/Platform_Xbox360.c +++ b/src/Platform_Xbox360.c @@ -41,11 +41,10 @@ void Platform_Log(const char* msg, int len) { puts(tmp); } -#define UnixTime_TotalMS(time) ((cc_uint64)time.tv_sec * 1000 + UNIX_EPOCH + (time.tv_usec / 1000)) -TimeMS DateTime_CurrentUTC_MS(void) { +TimeMS DateTime_CurrentUTC(void) { struct timeval cur; gettimeofday(&cur, NULL); - return UnixTime_TotalMS(cur); + return (cc_uint64)cur.tv_sec + UNIX_EPOCH_SECONDS; } void DateTime_CurrentLocal(struct DateTime* t) { diff --git a/src/SSL.c b/src/SSL.c index 1bf323e69..389117e96 100644 --- a/src/SSL.c +++ b/src/SSL.c @@ -476,7 +476,7 @@ static void InjectEntropy(SSLContext* ctx) { #endif static void SetCurrentTime(SSLContext* ctx) { - cc_uint64 cur = DateTime_CurrentUTC_MS() / 1000; + cc_uint64 cur = DateTime_CurrentUTC(); uint32_t days = (uint32_t)(cur / 86400) + 366; uint32_t secs = (uint32_t)(cur % 86400); diff --git a/src/Server.c b/src/Server.c index 3d1b8dad3..3a60f5b52 100644 --- a/src/Server.c +++ b/src/Server.c @@ -67,7 +67,7 @@ int Ping_NextPingId(void) { head = (head + 1) % Array_Elems(ping_entries); ping_entries[head].id = next; - ping_entries[head].sent = DateTime_CurrentUTC_MS(); + ping_entries[head].sent = Stopwatch_Measure(); ping_entries[head].recv = 0; ping_head = head; @@ -79,25 +79,27 @@ void Ping_Update(int id) { for (i = 0; i < Array_Elems(ping_entries); i++) { if (ping_entries[i].id != id) continue; - ping_entries[i].recv = DateTime_CurrentUTC_MS(); + ping_entries[i].recv = Stopwatch_Measure(); return; } } int Ping_AveragePingMS(void) { - int i, measures = 0, totalMs = 0; + int i, measures = 0, totalMs; + cc_int64 total = 0; for (i = 0; i < Array_Elems(ping_entries); i++) { struct PingEntry entry = ping_entries[i]; if (!entry.sent || !entry.recv) continue; - totalMs += (int)(entry.recv - entry.sent); + total += entry.recv - entry.sent; measures++; } - if (!measures) return 0; - /* (recv - send) is time for packet to be sent to server and then sent back. */ - /* However for ping, only want time to send data to server, so half the total. */ + + totalMs = Stopwatch_ElapsedMS(0, total); + /* (recv - send) is average time for packet to be sent to server and then sent back. */ + /* However for ping, only want average time to send data to server, so half the total. */ totalMs /= 2; return totalMs / measures; } diff --git a/src/Utils.h b/src/Utils.h index 8cfa7f090..7d8f245ad 100644 --- a/src/Utils.h +++ b/src/Utils.h @@ -9,7 +9,7 @@ Copyright 2014-2023 ClassiCube | Licensed under BSD-3 struct Bitmap; struct StringsBuffer; /* Represents a particular instance in time in some timezone. Not necessarily UTC time. */ -/* NOTE: TimeMS and DateTime_CurrentUTC_MS() should almost always be used instead. */ +/* NOTE: TimeMS and DateTime_CurrentUTC() should almost always be used instead. */ /* This struct should only be used when actually needed. (e.g. log message time) */ struct DateTime { int year; /* Year, ranges from 0 to 65535 */ diff --git a/src/_HttpBase.h b/src/_HttpBase.h index 55a11a15e..d0b0c4bc5 100644 --- a/src/_HttpBase.h +++ b/src/_HttpBase.h @@ -192,7 +192,7 @@ static void Http_FinishRequest(struct HttpRequest* req) { Mutex_Lock(processedMutex); { - req->timeDownloaded = DateTime_CurrentUTC_MS(); + req->timeDownloaded = DateTime_CurrentUTC(); RequestList_Append(&processedReqs, req, false); } Mutex_Unlock(processedMutex); @@ -205,10 +205,10 @@ static void Http_CleanCacheTask(struct ScheduledTask* task) { Mutex_Lock(processedMutex); { - TimeMS now = DateTime_CurrentUTC_MS(); + TimeMS now = DateTime_CurrentUTC(); for (i = processedReqs.count - 1; i >= 0; i--) { item = &processedReqs.entries[i]; - if (item->timeDownloaded + (10 * 1000) >= now) continue; + if (now > item->timeDownloaded + 10) continue; HttpRequest_Free(item); RequestList_RemoveAt(&processedReqs, i); From c8acd0ad33505b9ceb9cef9270358539d06e632d Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Fri, 29 Mar 2024 10:45:24 +1100 Subject: [PATCH 06/41] iOS: Add support for older UIAlertView for displaying message boxes --- src/interop_ios.m | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/src/interop_ios.m b/src/interop_ios.m index c94410cb9..54faee342 100644 --- a/src/interop_ios.m +++ b/src/interop_ios.m @@ -34,7 +34,7 @@ @interface CCWindow : UIWindow @end -@interface CCViewController : UIViewController +@interface CCViewController : UIViewController @end @interface CCAppDelegate : UIResponder @@ -217,6 +217,12 @@ - (UIRectEdge)preferredScreenEdgesDeferringSystemGestures { // significantly the chance of accidentally triggering this gesture return UIRectEdgeBottom; } + +// == UIAlertViewDelegate == +static int alert_completed; +- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex { + alert_completed = true; +} @end @implementation CCAppDelegate @@ -430,20 +436,27 @@ void Window_ProcessEvents(double delta) { void ShowDialogCore(const char* title, const char* msg) { // UIAlertController - iOS 8.0 // UIAlertAction - iOS 8.0 + // UIAlertView - iOS 2.0 Platform_LogConst(title); Platform_LogConst(msg); NSString* _title = [NSString stringWithCString:title encoding:NSASCIIStringEncoding]; NSString* _msg = [NSString stringWithCString:msg encoding:NSASCIIStringEncoding]; - __block int completed = false; + alert_completed = false; +#ifdef TARGET_OS_TV UIAlertController* alert = [UIAlertController alertControllerWithTitle:_title message:_msg preferredStyle:UIAlertControllerStyleAlert]; - UIAlertAction* okBtn = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction* act) { completed = true; }]; + UIAlertAction* okBtn = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction* act) { alert_completed = true; }]; [alert addAction:okBtn]; [cc_controller presentViewController:alert animated:YES completion: Nil]; +#else + UIAlertView* alert = [UIAlertView alloc]; + alert = [alert initWithTitle:_title message:_msg delegate:cc_controller cancelButtonTitle:@"OK" otherButtonTitles:nil]; + [alert show]; +#endif // TODO clicking outside message box crashes launcher // loop until alert is closed TODO avoid sleeping - while (!completed) { + while (!alert_completed) { Window_ProcessEvents(0.0); Thread_Sleep(16); } From 5f95ce2fea2e623d58d610ae0027f4e699e78898 Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Fri, 29 Mar 2024 17:50:02 +1100 Subject: [PATCH 07/41] GC/Wii: Use better method of logging for Dolphin --- src/Platform_GCWii.c | 40 +++++++++++++++++++++++++++++----------- src/Platform_PS1.c | 2 +- 2 files changed, 30 insertions(+), 12 deletions(-) diff --git a/src/Platform_GCWii.c b/src/Platform_GCWii.c index 15023fe82..d3224198e 100644 --- a/src/Platform_GCWii.c +++ b/src/Platform_GCWii.c @@ -22,6 +22,7 @@ #include #include #include +#include #ifdef HW_RVL #include #endif @@ -42,23 +43,40 @@ const char* Platform_AppNameSuffix = " GameCube"; /*########################################################################################################################* *------------------------------------------------------Logging/Time-------------------------------------------------------* *#########################################################################################################################*/ +// To see these log messages: +// 1) In the UI, make sure 'Show log configuration' checkbox is checked in View menu +// 2) Make sure "OSReport EXI (OSREPORT)" log type is enabled +// 3) In the UI, make sure 'Show log' checkbox is checked in View menu +static void LogOverEXI(char* msg, int len) { + u32 cmd = 0x80000000 | (0x800400 << 6); // write flag, UART base address + + // https://hitmen.c02.at/files/yagcd/yagcd/chap10.html + // Try to acquire "MASK ROM"/"IPL" link + // Writing to the IPL is used for debug message logging + if (EXI_Lock(EXI_CHANNEL_0, EXI_DEVICE_1, NULL) == 0) return; + if (EXI_Select(EXI_CHANNEL_0, EXI_DEVICE_1, EXI_SPEED8MHZ) == 0) { + EXI_Unlock(EXI_CHANNEL_0); return; + } + + EXI_Imm( EXI_CHANNEL_0, &cmd, 4, EXI_WRITE, NULL); + EXI_Sync( EXI_CHANNEL_0); + EXI_ImmEx( EXI_CHANNEL_0, msg, len, EXI_WRITE); + EXI_Deselect(EXI_CHANNEL_0); + EXI_Unlock( EXI_CHANNEL_0); +} + // dolphin recognises this function name (if loaded as .elf), and will patch it // to also log the message to dolphin's console at OSREPORT-HLE log level void CC_NOINLINE __write_console(int fd, const char* msg, const u32* size) { write(STDOUT_FILENO, msg, *size); // this can be intercepted by libogc debug console } void Platform_Log(const char* msg, int len) { - char buffer[256]; - cc_string str = String_Init(buffer, 0, 254); // 2 characters (\n and \0) - u32 size; - - String_AppendAll(&str, msg, len); - buffer[str.length + 0] = '\n'; - buffer[str.length + 1] = '\0'; // needed to make Dolphin logger happy - - size = str.length + 1; // +1 for '\n' - __write_console(0, buffer, &size); - // TODO: Just use printf("%s", somehow ??? + char tmp[256 + 1]; + len = min(len, 256); + // See EXI_DeviceIPL.cpp, \r is what triggers message to be logged + Mem_Copy(tmp, msg, len); tmp[len] = '\r'; + + LogOverEXI(buffer, size); } TimeMS DateTime_CurrentUTC(void) { diff --git a/src/Platform_PS1.c b/src/Platform_PS1.c index 0df90e033..38c5465a6 100644 --- a/src/Platform_PS1.c +++ b/src/Platform_PS1.c @@ -16,7 +16,7 @@ #include #include #include -void exit(int code) { } // TODO how to fix +void exit(int code) { _boot(); } #include "_PlatformConsole.h" const cc_result ReturnCode_FileShareViolation = 1000000000; // not used From 1bc589b8e56f896c10feb695159cc17fdfa3b9e4 Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Fri, 29 Mar 2024 19:12:42 +1100 Subject: [PATCH 08/41] 3DS: Fix never freeing textures, oops Also redesign PNG encoding API to support a context parameter --- src/Bitmap.c | 6 +++--- src/Bitmap.h | 4 ++-- src/Graphics_3DS.c | 4 ++-- src/Graphics_D3D11.c | 13 ++++--------- src/Graphics_D3D9.c | 4 ++-- src/Platform_GCWii.c | 17 +++++++---------- src/Resources.c | 4 ++-- src/Window_GCWii.c | 10 +++++----- src/_GLShared.h | 4 ++-- 9 files changed, 29 insertions(+), 37 deletions(-) diff --git a/src/Bitmap.c b/src/Bitmap.c index 043423fae..6f319a426 100644 --- a/src/Bitmap.c +++ b/src/Bitmap.c @@ -645,9 +645,9 @@ static void Png_EncodeRow(const cc_uint8* cur, const cc_uint8* prior, cc_uint8* best[0] = bestFilter; } -static BitmapCol* DefaultGetRow(struct Bitmap* bmp, int y) { return Bitmap_GetRow(bmp, y); } +static BitmapCol* DefaultGetRow(struct Bitmap* bmp, int y, void* ctx) { return Bitmap_GetRow(bmp, y); } cc_result Png_Encode(struct Bitmap* bmp, struct Stream* stream, - Png_RowGetter getRow, cc_bool alpha) { + Png_RowGetter getRow, cc_bool alpha, void* ctx) { cc_uint8 tmp[32]; /* TODO: This should be * 4 for alpha (should switch to mem_alloc though) */ cc_uint8 prevLine[PNG_MAX_DIMS * 3], curLine[PNG_MAX_DIMS * 3]; @@ -691,7 +691,7 @@ cc_result Png_Encode(struct Bitmap* bmp, struct Stream* stream, Mem_Set(prevLine, 0, lineSize); for (y = 0; y < bmp->height; y++) { - BitmapCol* src = getRow(bmp, y); + BitmapCol* src = getRow(bmp, y, ctx); cc_uint8* prev = (y & 1) == 0 ? prevLine : curLine; cc_uint8* cur = (y & 1) == 0 ? curLine : prevLine; diff --git a/src/Bitmap.h b/src/Bitmap.h index ca7cc6d81..c8688cc09 100644 --- a/src/Bitmap.h +++ b/src/Bitmap.h @@ -89,7 +89,7 @@ CC_API void Bitmap_Scale(struct Bitmap* dst, struct Bitmap* src, /* Whether data starts with PNG format signature/identifier. */ cc_bool Png_Detect(const cc_uint8* data, cc_uint32 len); -typedef BitmapCol* (*Png_RowGetter)(struct Bitmap* bmp, int row); +typedef BitmapCol* (*Png_RowGetter)(struct Bitmap* bmp, int row, void* ctx); /* Decodes a bitmap in PNG format. Partially based off information from https://handmade.network/forums/wip/t/2363-implementing_a_basic_png_reader_the_handmade_way @@ -100,5 +100,5 @@ CC_API cc_result Png_Decode(struct Bitmap* bmp, struct Stream* stream); /* getRow is optional. Can be used to modify how rows are encoded. (e.g. flip image) */ /* if alpha is non-zero, RGBA channels are saved, otherwise only RGB channels are. */ cc_result Png_Encode(struct Bitmap* bmp, struct Stream* stream, - Png_RowGetter getRow, cc_bool alpha); + Png_RowGetter getRow, cc_bool alpha, void* ctx); #endif diff --git a/src/Graphics_3DS.c b/src/Graphics_3DS.c index eff743854..cba33088b 100644 --- a/src/Graphics_3DS.c +++ b/src/Graphics_3DS.c @@ -445,7 +445,7 @@ void Gfx_EndFrame(void) { if (gfx_minFrameMs) LimitFPS(); GPUBuffers_DeleteUnreferenced(); - //GPUTextures_DeleteUnreferenced(); + GPUTextures_DeleteUnreferenced(); frameCounter++; } @@ -853,4 +853,4 @@ void Gfx_Draw2DTexture(const struct Texture* tex, PackedCol color) { C3D_ImmSendAttrib(v[0].U, v[0].V, 0.0f, 0.0f); C3D_ImmDrawEnd(); } -#endif \ No newline at end of file +#endif diff --git a/src/Graphics_D3D11.c b/src/Graphics_D3D11.c index bcb596f09..4954db3a6 100644 --- a/src/Graphics_D3D11.c +++ b/src/Graphics_D3D11.c @@ -1055,13 +1055,8 @@ void Gfx_DepthOnlyRendering(cc_bool depthOnly) { /*########################################################################################################################* *-----------------------------------------------------------Misc----------------------------------------------------------* *#########################################################################################################################*/ -static BitmapCol* D3D11_GetRow(struct Bitmap* bmp, int y) { - // You were expecting a BitmapCol*, but it was me, D3D11_MAPPED_SUBRESOURCE*! - // This is necessary because the stride of the mapped backbuffer often doesn't equal width of the bitmap - // e.g. with backbuffer width of 854, stride is 3456 bytes instead of expected 3416 (854*4) - // Therefore have to calculate row address manually instead of using Bitmap_GetRow - D3D11_MAPPED_SUBRESOURCE* buffer = (D3D11_MAPPED_SUBRESOURCE*)bmp->scan0; - +static BitmapCol* D3D11_GetRow(struct Bitmap* bmp, int y, void* ctx) { + D3D11_MAPPED_SUBRESOURCE* buffer = (D3D11_MAPPED_SUBRESOURCE*)ctx; char* row = (char*)buffer->pData + y * buffer->RowPitch; return (BitmapCol*)row; } @@ -1094,8 +1089,8 @@ cc_result Gfx_TakeScreenshot(struct Stream* output) { hr = ID3D11DeviceContext_Map(context, tmp, 0, D3D11_MAP_READ, 0, &buffer); if (hr) goto finished; { - Bitmap_Init(bmp, desc.Width, desc.Height, (BitmapCol*)&buffer); - hr = Png_Encode(&bmp, output, D3D11_GetRow, false); + Bitmap_Init(bmp, desc.Width, desc.Height, NULL); + hr = Png_Encode(&bmp, output, D3D11_GetRow, false, &buffer); } ID3D11DeviceContext_Unmap(context, tmp, 0); diff --git a/src/Graphics_D3D9.c b/src/Graphics_D3D9.c index cd980b9ae..8ec050be2 100644 --- a/src/Graphics_D3D9.c +++ b/src/Graphics_D3D9.c @@ -335,7 +335,7 @@ static GfxResourceID Gfx_AllocTexture(struct Bitmap* bmp, cc_uint8 flags, cc_boo int mipmapsLevels = CalcMipmapsLevels(bmp->width, bmp->height); int levels = 1 + (mipmaps ? mipmapsLevels : 0); - + if (flags & TEXTURE_FLAG_MANAGED) { while ((res = IDirect3DDevice9_CreateTexture(device, bmp->width, bmp->height, levels, 0, D3DFMT_A8R8G8B8, D3DPOOL_MANAGED, &tex, NULL))) @@ -812,7 +812,7 @@ cc_result Gfx_TakeScreenshot(struct Stream* output) { if (res) goto finished; { Bitmap_Init(bmp, desc.Width, desc.Height, (BitmapCol*)rect.pBits); - res = Png_Encode(&bmp, output, NULL, false); + res = Png_Encode(&bmp, output, NULL, false, NULL); if (res) { IDirect3DSurface9_UnlockRect(temp); goto finished; } } res = IDirect3DSurface9_UnlockRect(temp); diff --git a/src/Platform_GCWii.c b/src/Platform_GCWii.c index d3224198e..33519a7e8 100644 --- a/src/Platform_GCWii.c +++ b/src/Platform_GCWii.c @@ -65,24 +65,21 @@ static void LogOverEXI(char* msg, int len) { EXI_Unlock( EXI_CHANNEL_0); } -// dolphin recognises this function name (if loaded as .elf), and will patch it -// to also log the message to dolphin's console at OSREPORT-HLE log level -void CC_NOINLINE __write_console(int fd, const char* msg, const u32* size) { - write(STDOUT_FILENO, msg, *size); // this can be intercepted by libogc debug console -} void Platform_Log(const char* msg, int len) { char tmp[256 + 1]; len = min(len, 256); - // See EXI_DeviceIPL.cpp, \r is what triggers message to be logged + // See EXI_DeviceIPL.cpp in Dolphin, \r is what triggers buffered message to be logged Mem_Copy(tmp, msg, len); tmp[len] = '\r'; - LogOverEXI(buffer, size); + LogOverEXI(tmp, len + 1); } +#define GCWII_EPOCH_ADJUST 946684800ULL // GameCube/Wii time epoch is year 2000, not 1970 + TimeMS DateTime_CurrentUTC(void) { - struct timeval cur; - gettimeofday(&cur, NULL); - return (cc_uint64)cur.tv_sec + UNIX_EPOCH_SECONDS; + u64 raw = gettime(); + u64 secs = ticks_to_secs(raw); + return secs + UNIX_EPOCH_SECONDS + GCWII_EPOCH_ADJUST; } void DateTime_CurrentLocal(struct DateTime* t) { diff --git a/src/Resources.c b/src/Resources.c index 8420cfb30..a81710053 100644 --- a/src/Resources.c +++ b/src/Resources.c @@ -592,8 +592,8 @@ static cc_result ZipWriter_WritePng(struct Stream* dst, struct ResourceZipEntry* struct Bitmap* src = &e->value.bmp; cc_result res; - if ((res = ZipWriter_LocalFile(dst, e))) return res; - if ((res = Png_Encode(src, dst, NULL, true))) return res; + if ((res = ZipWriter_LocalFile(dst, e))) return res; + if ((res = Png_Encode(src, dst, NULL, true, NULL))) return res; return ZipWriter_FixupLocalFile(dst, e); } diff --git a/src/Window_GCWii.c b/src/Window_GCWii.c index e05826e2c..1692ac4bd 100644 --- a/src/Window_GCWii.c +++ b/src/Window_GCWii.c @@ -459,13 +459,13 @@ static u32 CvtRGB (u8 r1, u8 g1, u8 b1, u8 r2, u8 g2, u8 b2) { int y1, cb1, cr1, y2, cb2, cr2, cb, cr; - y1 = (299 * r1 + 587 * g1 + 114 * b1) / 1000; + y1 = (299 * r1 + 587 * g1 + 114 * b1) / 1000; cb1 = (-16874 * r1 - 33126 * g1 + 50000 * b1 + 12800000) / 100000; - cr1 = (50000 * r1 - 41869 * g1 - 8131 * b1 + 12800000) / 100000; + cr1 = (50000 * r1 - 41869 * g1 - 8131 * b1 + 12800000) / 100000; - y2 = (299 * r2 + 587 * g2 + 114 * b2) / 1000; + y2 = (299 * r2 + 587 * g2 + 114 * b2) / 1000; cb2 = (-16874 * r2 - 33126 * g2 + 50000 * b2 + 12800000) / 100000; - cr2 = (50000 * r2 - 41869 * g2 - 8131 * b2 + 12800000) / 100000; + cr2 = (50000 * r2 - 41869 * g2 - 8131 * b2 + 12800000) / 100000; cb = (cb1 + cb2) >> 1; cr = (cr1 + cr2) >> 1; @@ -538,4 +538,4 @@ cc_result Window_OpenFileDialog(const struct OpenFileDialogArgs* args) { cc_result Window_SaveFileDialog(const struct SaveFileDialogArgs* args) { return ERR_NOT_SUPPORTED; } -#endif \ No newline at end of file +#endif diff --git a/src/_GLShared.h b/src/_GLShared.h index c6d7fa10d..ca82a6ace 100644 --- a/src/_GLShared.h +++ b/src/_GLShared.h @@ -232,7 +232,7 @@ void Gfx_CalcPerspectiveMatrix(struct Matrix* matrix, float fov, float aspect, f /*########################################################################################################################* *-----------------------------------------------------------Misc----------------------------------------------------------* *#########################################################################################################################*/ -static BitmapCol* GL_GetRow(struct Bitmap* bmp, int y) { +static BitmapCol* GL_GetRow(struct Bitmap* bmp, int y, void* ctx) { /* OpenGL stores bitmap in bottom-up order, so flip order when saving */ return Bitmap_GetRow(bmp, (bmp->height - 1) - y); } @@ -249,7 +249,7 @@ cc_result Gfx_TakeScreenshot(struct Stream* output) { if (!bmp.scan0) return ERR_OUT_OF_MEMORY; glReadPixels(0, 0, bmp.width, bmp.height, PIXEL_FORMAT, TRANSFER_FORMAT, bmp.scan0); - res = Png_Encode(&bmp, output, GL_GetRow, false); + res = Png_Encode(&bmp, output, GL_GetRow, false, NULL); Mem_Free(bmp.scan0); return res; } From b443562b7f156be2e6920fb3e83b0d97df5f23cb Mon Sep 17 00:00:00 2001 From: headshot2017 <> Date: Fri, 29 Mar 2024 04:19:45 -0400 Subject: [PATCH 09/41] GC/Wii: fix music --- src/AudioBackend.c | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/src/AudioBackend.c b/src/AudioBackend.c index 6d36aeb37..c0e61d7a6 100644 --- a/src/AudioBackend.c +++ b/src/AudioBackend.c @@ -1144,6 +1144,7 @@ struct AudioContext { int chanID, count, bufHead; struct AudioBuffer bufs[AUDIO_MAX_BUFFERS]; int channels, sampleRate, volume; + cc_bool makeAvailable; }; cc_bool AudioBackend_Init(void) { @@ -1161,21 +1162,34 @@ void AudioBackend_Free(void) { void MusicCallback(s32 voice) { struct AudioContext* ctx = &music_ctx; - struct AudioBuffer* buf = &ctx->bufs[ctx->bufHead]; struct AudioBuffer* nextBuf = &ctx->bufs[(ctx->bufHead + 1) % ctx->count]; - if (ASND_AddVoice(voice, buf->samples, buf->size) == SND_OK) { + if (ASND_StatusVoice(voice) != SND_WORKING) return; + + if (ASND_AddVoice(voice, nextBuf->samples, nextBuf->size) == SND_OK) { ctx->bufHead = (ctx->bufHead + 1) % ctx->count; - buf->samples = NULL; - buf->available = true; + if (ctx->bufHead == 2) ctx->makeAvailable = true; + if (ctx->makeAvailable) { + int prev = ctx->bufHead - 2; + if (prev < 0) prev += 4; + ctx->bufs[prev].available = true; + } + } + + int inUse; + Audio_Poll(ctx, &inUse); + if (!inUse) { + // music has finished, stop the voice so this function isn't called anymore + ASND_StopVoice(ctx->chanID); } } cc_result Audio_Init(struct AudioContext* ctx, int buffers) { - ctx->chanID = -1; - ctx->count = buffers; - ctx->volume = 255; - ctx->bufHead = 0; + ctx->chanID = -1; + ctx->count = buffers; + ctx->volume = 255; + ctx->bufHead = 0; + ctx->makeAvailable = false; Mem_Set(ctx->bufs, 0, sizeof(ctx->bufs)); for (int i = 0; i < buffers; i++) { From 9e3f9f9e4add064e6c3025b04cd06aa940301d44 Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Fri, 29 Mar 2024 19:45:00 +1100 Subject: [PATCH 10/41] 3DS: Test screenshot code --- src/Graphics_3DS.c | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/src/Graphics_3DS.c b/src/Graphics_3DS.c index cba33088b..ce78696ea 100644 --- a/src/Graphics_3DS.c +++ b/src/Graphics_3DS.c @@ -406,8 +406,34 @@ static void SetColorWrite(cc_bool r, cc_bool g, cc_bool b, cc_bool a) { /*########################################################################################################################* *-----------------------------------------------------------Misc----------------------------------------------------------* *#########################################################################################################################*/ +static BitmapCol* _3DS_GetRow(struct Bitmap* bmp, int y, void* ctx) { + u8* fb = (u8*)ctx; + // Framebuffer is rotated 90 degrees + int width = bmp->width, height = bmp->height; + + for (int x = 0; x < width; x++) + { + int addr = (height - 1 - y + x * height) * 3; // TODO -1 or not + int b = fb[addr + 0]; + int g = fb[addr + 1]; + int r = fb[addr + 2]; + bmp->scan0[x] = BitmapColor_RGB(r, g, b); + } + return bmp->scan0; +} + cc_result Gfx_TakeScreenshot(struct Stream* output) { - return ERR_NOT_SUPPORTED; + BitmapCol tmp[512]; + u16 width, height; + u8* fb = gfxGetFramebuffer(GFX_TOP, GFX_LEFT, &width, &height); + + // Framebuffer is rotated 90 degrees + struct Bitmap bmp; + bmp.scan0 = tmp; + bmp.width = height; + bmp.height = width; + + return Png_Encode(&bmp, output, _3DS_GetRow, false, fb); } void Gfx_GetApiInfo(cc_string* info) { From 06b8497e9f3e99a389266d5512565afa4c8a3d17 Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Fri, 29 Mar 2024 22:50:57 +1100 Subject: [PATCH 11/41] Fix held block being rendered slightly too far downwards in classic mode --- src/Entity.c | 1 + src/Entity.h | 3 +++ src/Model.c | 3 ++- 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/Entity.c b/src/Entity.c index ff8f1bdb8..c73062606 100644 --- a/src/Entity.c +++ b/src/Entity.c @@ -1025,6 +1025,7 @@ static const struct EntityVTABLE netPlayer_VTABLE = { void NetPlayer_Init(struct NetPlayer* p) { Mem_Set(p, 0, sizeof(struct NetPlayer)); Entity_Init(&p->Base); + p->Base.Flags |= ENTITY_FLAG_CLASSIC_ADJUST; p->Base.VTABLE = &netPlayer_VTABLE; } diff --git a/src/Entity.h b/src/Entity.h index 4c6ea5d2e..9f751c218 100644 --- a/src/Entity.h +++ b/src/Entity.h @@ -87,6 +87,9 @@ struct EntityVTABLE { /* And therefore trying to access the ModelVB Field in entity struct instances created by the CEF plugin */ /* results in attempting to read or write data from potentially invalid memory */ #define ENTITY_FLAG_HAS_MODELVB 0x02 +/* Whether in classic mode, to slightly adjust this entity downwards when rendering it * +/* to replicate the behaviour of the original vanilla classic client */ +#define ENTITY_FLAG_CLASSIC_ADJUST 0x04 /* Contains a model, along with position, velocity, and rotation. May also contain other fields and properties. */ struct Entity { diff --git a/src/Model.c b/src/Model.c index 1d0dd2678..aa24c21ba 100644 --- a/src/Model.c +++ b/src/Model.c @@ -98,7 +98,8 @@ void Model_Render(struct Model* model, struct Entity* e) { Vec3 pos = e->Position; if (model->bobbing) pos.y += e->Anim.BobbingModel; /* Original classic offsets models slightly into ground */ - if (Game_ClassicMode) pos.y -= 1.5f / 16.0f; + if (Game_ClassicMode && (e->Flags & ENTITY_FLAG_CLASSIC_ADJUST)) + pos.y -= 1.5f / 16.0f; Model_SetupState(model, e); Gfx_SetVertexFormat(VERTEX_FORMAT_TEXTURED); From 174005d6bfb931a5a6700874b1d57fda46391058 Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Fri, 29 Mar 2024 23:35:34 +1100 Subject: [PATCH 12/41] PS1: 3D 'technically' works now --- src/Graphics_PS1.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/Graphics_PS1.c b/src/Graphics_PS1.c index 8b427d81f..dbd92d3e4 100644 --- a/src/Graphics_PS1.c +++ b/src/Graphics_PS1.c @@ -22,7 +22,7 @@ // Size of the buffer GPU commands and primitives are written to. If the program // crashes due to too many primitives being drawn, increase this value. -#define BUFFER_LENGTH 8192 +#define BUFFER_LENGTH 32768 typedef struct { DISPENV disp_env; @@ -387,10 +387,11 @@ static void Transform(Vec3* result, struct VertexTextured* a, const struct Matri float x = a->x * mat->row1.x + a->y * mat->row2.x + a->z * mat->row3.x + mat->row4.x; float y = a->x * mat->row1.y + a->y * mat->row2.y + a->z * mat->row3.y + mat->row4.y; float z = a->x * mat->row1.z + a->y * mat->row2.z + a->z * mat->row3.z + mat->row4.z; + float w = a->x * mat->row1.w + a->y * mat->row2.w + a->z * mat->row3.w + mat->row4.w; - result->x = x * (320/2) + (320/2); - result->y = y * -(240/2) + (240/2); - result->z = z * OT_LENGTH; + result->x = (x/w) * (320/2) + (320/2); + result->y = (y/w) * -(240/2) + (240/2); + result->z = (z/w) * OT_LENGTH; } cc_bool VERTEX_LOGGING; @@ -413,18 +414,18 @@ static void DrawQuads(int verticesCount, int startVertex) { poly->x2 = coords[2].x; poly->y2 = coords[2].y; poly->x3 = coords[3].x; poly->y3 = coords[3].y; + int p = (coords[0].z + coords[1].z + coords[2].z + coords[3].z) / 4; + if (p < 0 || p >= OT_LENGTH) continue; + int X = v[0].x, Y = v[0].y, Z = v[0].z; - if (VERTEX_LOGGING) Platform_Log3("IN: %i, %i, %i", &X, &Y, &Z); + //if (VERTEX_LOGGING) Platform_Log3("IN: %i, %i, %i", &X, &Y, &Z); X = poly->x1; Y = poly->y1, Z = coords[0].z; poly->r0 = PackedCol_R(v->Col); poly->g0 = PackedCol_G(v->Col); poly->b0 = PackedCol_B(v->Col); + //if (VERTEX_LOGGING) Platform_Log4("OUT: %i, %i, %i (%i)", &X, &Y, &Z, &p); - int p = (coords[0].z + coords[1].z + coords[2].z + coords[3].z) / 4; - if (VERTEX_LOGGING) Platform_Log4("OUT: %i, %i, %i (%i)", &X, &Y, &Z, &p); - - if (p < 0 || p >= OT_LENGTH) continue; addPrim(&buffer->ot[p >> 2], poly); } } From 8c62223f908e67a20918adc0381c2f186d15f47f Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Sat, 30 Mar 2024 09:51:57 +1100 Subject: [PATCH 13/41] 3DS/GameCube/Wii: Increase max texture width/height for little bit faster world rendering --- .github/workflows/build_ds.yml | 6 ++++-- .github/workflows/build_n64.yml | 7 ++++++- src/Entity.h | 2 +- src/Graphics_3DS.c | 5 +++-- src/Graphics_GCWii.c | 9 +++++---- src/_GraphicsBase.h | 4 ++-- 6 files changed, 21 insertions(+), 12 deletions(-) diff --git a/.github/workflows/build_ds.yml b/.github/workflows/build_ds.yml index 24a4e1920..b082d98ab 100644 --- a/.github/workflows/build_ds.yml +++ b/.github/workflows/build_ds.yml @@ -20,6 +20,7 @@ jobs: export BLOCKSDSEXT=/opt/blocksds/external make ds + # otherwise notify_failure doesn't work - name: Install curl when necessary if: ${{ always() && steps.compile.outcome == 'failure' }} @@ -30,9 +31,10 @@ jobs: with: NOTIFY_MESSAGE: 'Failed to compile DS build' WEBHOOK_URL: '${{ secrets.WEBHOOK_URL }}' - + + - uses: ./.github/actions/upload_build if: ${{ always() && steps.compile.outcome == 'success' }} with: SOURCE_FILE: 'classicube.nds' - DEST_NAME: 'classicube.nds' \ No newline at end of file + DEST_NAME: 'classicube.nds' diff --git a/.github/workflows/build_n64.yml b/.github/workflows/build_n64.yml index e9d08f591..3646c4611 100644 --- a/.github/workflows/build_n64.yml +++ b/.github/workflows/build_n64.yml @@ -26,6 +26,11 @@ jobs: make n64 + # otherwise notify_failure doesn't work + - name: Install curl when necessary + if: ${{ always() && steps.compile.outcome == 'failure' }} + run: apt install curl + - uses: ./.github/actions/notify_failure if: ${{ always() && steps.compile.outcome == 'failure' }} with: @@ -37,4 +42,4 @@ jobs: if: ${{ always() && steps.compile.outcome == 'success' }} with: SOURCE_FILE: 'ClassiCube-n64.z64' - DEST_NAME: 'ClassiCube-n64.z64' \ No newline at end of file + DEST_NAME: 'ClassiCube-n64.z64' diff --git a/src/Entity.h b/src/Entity.h index 9f751c218..18fcbd220 100644 --- a/src/Entity.h +++ b/src/Entity.h @@ -87,7 +87,7 @@ struct EntityVTABLE { /* And therefore trying to access the ModelVB Field in entity struct instances created by the CEF plugin */ /* results in attempting to read or write data from potentially invalid memory */ #define ENTITY_FLAG_HAS_MODELVB 0x02 -/* Whether in classic mode, to slightly adjust this entity downwards when rendering it * +/* Whether in classic mode, to slightly adjust this entity downwards when rendering it */ /* to replicate the behaviour of the original vanilla classic client */ #define ENTITY_FLAG_CLASSIC_ADJUST 0x04 diff --git a/src/Graphics_3DS.c b/src/Graphics_3DS.c index ce78696ea..08164e8d9 100644 --- a/src/Graphics_3DS.c +++ b/src/Graphics_3DS.c @@ -148,8 +148,9 @@ static GfxResourceID white_square; void Gfx_Create(void) { if (!Gfx.Created) InitCitro3D(); - Gfx.MaxTexWidth = 512; - Gfx.MaxTexHeight = 512; + Gfx.MaxTexWidth = 1024; + Gfx.MaxTexHeight = 1024; + Gfx.MaxTexSize = 512 * 512; Gfx.Created = true; gfx_vsync = true; diff --git a/src/Graphics_GCWii.c b/src/Graphics_GCWii.c index d5eb44973..8032e4f6d 100644 --- a/src/Graphics_GCWii.c +++ b/src/Graphics_GCWii.c @@ -50,8 +50,9 @@ static void InitGX(void) { void Gfx_Create(void) { if (!Gfx.Created) InitGX(); - Gfx.MaxTexWidth = 512; - Gfx.MaxTexHeight = 512; + Gfx.MaxTexWidth = 1024; + Gfx.MaxTexHeight = 1024; + Gfx.MaxTexSize = 512 * 512; Gfx.Created = true; gfx_vsync = true; @@ -282,7 +283,7 @@ cc_bool Gfx_WarnIfNecessary(void) { return false; } GfxResourceID Gfx_CreateIb2(int count, Gfx_FillIBFunc fillFunc, void* obj) { //fillFunc(gfx_indices, count, obj); // not used since render using GX_QUADS anyways - return 1; + return (void*)1; } void Gfx_BindIb(GfxResourceID ib) { } @@ -552,4 +553,4 @@ void Gfx_DrawVb_IndexedTris(int verticesCount) { void Gfx_DrawIndexedTris_T2fC4b(int verticesCount, int startVertex) { Draw_TexturedTriangles(verticesCount, startVertex); } -#endif \ No newline at end of file +#endif diff --git a/src/_GraphicsBase.h b/src/_GraphicsBase.h index 8fd3e41ae..3efd775b6 100644 --- a/src/_GraphicsBase.h +++ b/src/_GraphicsBase.h @@ -136,7 +136,7 @@ void Gfx_RecreateContext(void) { } cc_bool reducedPerformance; -static void TickReducedPerformance(void) { +static CC_INLINE void TickReducedPerformance(void) { Thread_Sleep(100); /* 10 FPS */ if (reducedPerformance) return; @@ -144,7 +144,7 @@ static void TickReducedPerformance(void) { Chat_AddOf(&Gfx_LowPerfMessage, MSG_TYPE_EXTRASTATUS_2); } -static void EndReducedPerformance(void) { +static CC_INLINE void EndReducedPerformance(void) { if (!reducedPerformance) return; reducedPerformance = false; Chat_AddOf(&String_Empty, MSG_TYPE_EXTRASTATUS_2); From cf50e71d128454f2efae184801f6ac81e1764f9c Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Sat, 30 Mar 2024 10:37:01 +1100 Subject: [PATCH 14/41] GameCube/Wii: Support taking screenshots --- src/Graphics_GCWii.c | 47 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/src/Graphics_GCWii.c b/src/Graphics_GCWii.c index 8032e4f6d..498af41e9 100644 --- a/src/Graphics_GCWii.c +++ b/src/Graphics_GCWii.c @@ -237,8 +237,53 @@ void Gfx_SetDepthTest(cc_bool enabled) { /*########################################################################################################################* *-----------------------------------------------------------Misc----------------------------------------------------------* *#########################################################################################################################*/ +static BitmapCol* GCWii_GetRow(struct Bitmap* bmp, int y, void* ctx) { + u8* buffer = (u8*)ctx; + u8 a, r, g, b; + int blockYStride = 4 * (bmp->width * 4); // tile row stride = 4 * row stride + int blockXStride = (4 * 4) * 4; // 16 pixels per tile + + // Do the inverse of converting from 4x4 tiled to linear + for (u32 x = 0; x < bmp->width; x++){ + int tileY = y >> 2, tileX = x >> 2; + int locY = y & 0x3, locX = x & 0x3; + int idx = (tileY * blockYStride) + (tileX * blockXStride) + ((locY << 2) + locX) * 2; + + // All 16 pixels are stored with AR first, then GB + //a = buffer[idx ]; + r = buffer[idx + 1]; + g = buffer[idx + 32]; + b = buffer[idx + 33]; + + bmp->scan0[x] = BitmapColor_RGB(r, g, b); + } + return bmp->scan0; +} + cc_result Gfx_TakeScreenshot(struct Stream* output) { - return ERR_NOT_SUPPORTED; + BitmapCol tmp[1024]; + GXRModeObj* vmode = VIDEO_GetPreferredMode(NULL); + int width = vmode->fbWidth; + int height = vmode->efbHeight; + + u8* buffer = memalign(32, width * height * 4); + if (!buffer) return ERR_OUT_OF_MEMORY; + + GX_SetTexCopySrc(0, 0, width, height); + GX_SetTexCopyDst(width, height, GX_TF_RGBA8, GX_FALSE); + GX_CopyTex(buffer, GX_FALSE); + GX_PixModeSync(); + GX_Flush(); + DCFlushRange(buffer, width * height * 4); + + struct Bitmap bmp; + bmp.scan0 = tmp; + bmp.width = width; + bmp.height = height; + + cc_result res = Png_Encode(&bmp, output, GCWii_GetRow, false, buffer); + free(buffer); + return res; } void Gfx_GetApiInfo(cc_string* info) { From 4f504f8a2e70b72f6a7a3f52b9ccdaf5d22f1fe6 Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Sat, 30 Mar 2024 11:52:25 +1100 Subject: [PATCH 15/41] PSP: Add screenshot support --- src/AudioBackend.c | 8 ++++---- src/Graphics_PSP.c | 19 ++++++++++++++++++- src/Graphics_PSVita.c | 18 ++++-------------- 3 files changed, 26 insertions(+), 19 deletions(-) diff --git a/src/AudioBackend.c b/src/AudioBackend.c index c0e61d7a6..016e388ab 100644 --- a/src/AudioBackend.c +++ b/src/AudioBackend.c @@ -1133,6 +1133,7 @@ void Audio_FreeChunks(void** chunks, int numChunks) { #include #include #include +#include struct AudioBuffer { int available; @@ -1220,7 +1221,7 @@ void Audio_SetVolume(struct AudioContext* ctx, int volume) { cc_result Audio_QueueChunk(struct AudioContext* ctx, void* chunk, cc_uint32 dataSize) { // Audio buffers must be aligned and padded to a multiple of 32 bytes - if (((uintptr_t)chunk & 0x20) != 0) { + if (((uintptr_t)chunk & 0x1F) != 0) { Platform_Log1("Audio_QueueData: tried to queue buffer with non-aligned audio buffer 0x%x\n", &chunk); } @@ -1273,9 +1274,8 @@ cc_bool Audio_DescribeError(cc_result res, cc_string* dst) { } cc_result Audio_AllocChunks(cc_uint32 size, void** chunks, int numChunks) { - size = (size + 0x1F) & ~0x1F; // round up to nearest multiple of 0x20 - cc_uint32 alignedSize = ((size*numChunks) + 0x1F) & ~0x1F; // round up to nearest multiple of 0x20 - void* dst = aligned_alloc(0x20, alignedSize); + size = (size + 0x1F) & ~0x1F; // round up to nearest multiple of 0x20 + void* dst = memalign(0x20, size); if (!dst) return ERR_OUT_OF_MEMORY; for (int i = 0; i < numChunks; i++) { diff --git a/src/Graphics_PSP.c b/src/Graphics_PSP.c index 308c0884b..324e6cb34 100644 --- a/src/Graphics_PSP.c +++ b/src/Graphics_PSP.c @@ -233,8 +233,25 @@ void Gfx_CalcPerspectiveMatrix(struct Matrix* matrix, float fov, float aspect, f /*########################################################################################################################* *-----------------------------------------------------------Misc----------------------------------------------------------* *#########################################################################################################################*/ +static BitmapCol* PSP_GetRow(struct Bitmap* bmp, int y, void* ctx) { + cc_uint8* fb = (cc_uint8*)ctx; + return (BitmapCol*)(fb + y * BUFFER_WIDTH * 4); +} + cc_result Gfx_TakeScreenshot(struct Stream* output) { - return ERR_NOT_SUPPORTED; + int fbWidth, fbFormat; + void* fb; + + int res = sceDisplayGetFrameBuf(&fb, &fbWidth, &fbFormat, PSP_DISPLAY_SETBUF_NEXTFRAME); + if (res < 0) return res; + if (!fb) return ERR_NOT_SUPPORTED; + + struct Bitmap bmp; + bmp.scan0 = NULL; + bmp.width = SCREEN_WIDTH; + bmp.height = SCREEN_HEIGHT; + + return Png_Encode(&bmp, output, PSP_GetRow, false, fb); } void Gfx_GetApiInfo(cc_string* info) { diff --git a/src/Graphics_PSVita.c b/src/Graphics_PSVita.c index 2ef543520..fbfc41d9d 100644 --- a/src/Graphics_PSVita.c +++ b/src/Graphics_PSVita.c @@ -563,8 +563,9 @@ void Gfx_Create(void) { if (!Gfx.Created) InitGPU(); in_scene = false; - Gfx.MaxTexWidth = 512; - Gfx.MaxTexHeight = 512; + Gfx.MaxTexWidth = 1024; + Gfx.MaxTexHeight = 1024; + Gfx.MaxTexSize = 512 * 512; Gfx.Created = true; gfx_vsync = true; @@ -624,15 +625,11 @@ static void GPUTexture_Unref(GfxResourceID* resource) { struct GPUTexture* tex = (struct GPUTexture*)(*resource); if (!tex) return; *resource = NULL; - - cc_uintptr addr = tex; - Platform_Log1("TEX UNREF %h", &addr); + LinkedList_Append(tex, del_textures_head, del_textures_tail); } static void GPUTexture_Free(struct GPUTexture* tex) { - cc_uintptr addr = tex; - Platform_Log1("TEX DELETE %h", &addr); FreeGPUMemory(tex->uid); Mem_Free(tex); } @@ -838,9 +835,6 @@ struct GPUBuffer* GPUBuffer_Alloc(int size) { buffer->data = AllocGPUMemory(size, SCE_KERNEL_MEMBLOCK_TYPE_USER_RW_UNCACHE, SCE_GXM_MEMORY_ATTRIB_READ, &buffer->uid); - - cc_uintptr addr = buffer->data; - Platform_Log2("VB ALLOC %h = %i bytes", &addr, &size); return buffer; } @@ -851,14 +845,10 @@ static void GPUBuffer_Unref(GfxResourceID* resource) { if (!buf) return; *resource = NULL; - cc_uintptr addr = buf; - Platform_Log1("VB UNREF %h", &addr); LinkedList_Append(buf, del_buffers_head, del_buffers_tail); } static void GPUBuffer_Free(struct GPUBuffer* buf) { - cc_uintptr addr = buf; - Platform_Log1("VB DELETE %h", &addr); FreeGPUMemory(buf->uid); Mem_Free(buf); } From 978aeaf92542ed0d906731c3fec8563d9bd5797e Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Sat, 30 Mar 2024 12:12:38 +1100 Subject: [PATCH 16/41] Vita: Support touchscreen input in-game --- src/Core.h | 1 + src/Window_PSVita.c | 30 ++++++++++++++++++------------ 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/src/Core.h b/src/Core.h index 2ac752cac..5ad2115a8 100644 --- a/src/Core.h +++ b/src/Core.h @@ -302,6 +302,7 @@ typedef cc_uint8 cc_bool; #define CC_BUILD_BEARSSL #define CC_BUILD_LOWMEM #define CC_BUILD_CONSOLE + #define CC_BUILD_TOUCH #undef CC_BUILD_FREETYPE #elif defined _arch_dreamcast #define CC_BUILD_DREAMCAST diff --git a/src/Window_PSVita.c b/src/Window_PSVita.c index 2f0638921..bef1094ed 100644 --- a/src/Window_PSVita.c +++ b/src/Window_PSVita.c @@ -42,7 +42,9 @@ void Window_Init(void) { Window_Main.Focused = true; Window_Main.Exists = true; + Input_SetTouchMode(true); Input.Sources = INPUT_SOURCE_GAMEPAD; + sceCtrlSetSamplingMode(SCE_CTRL_MODE_ANALOG); sceTouchSetSamplingState(SCE_TOUCH_PORT_FRONT, SCE_TOUCH_SAMPLING_STATE_START); sceTouchSetSamplingState(SCE_TOUCH_PORT_BACK, SCE_TOUCH_SAMPLING_STATE_START); @@ -125,19 +127,16 @@ static void ProcessRCircleInput(SceCtrlData* pad, double delta) { Event_RaiseRawMove(&ControllerEvents.RawMoved, dx * scale, dy * scale); } -static void ProcessTouchPress(int x, int y) { - if (!frontPanel.maxDispX || !frontPanel.maxDispY) { - // TODO: Shouldn't ever happen? need to check - Pointer_SetPosition(0, x, y); - return; - } +static void AdjustTouchPress(int* x, int* y) { + if (!frontPanel.maxDispX || !frontPanel.maxDispY) return; + // TODO: Shouldn't ever happen? need to check // rescale from touch range to screen range - x = (x - frontPanel.minDispX) * DISPLAY_WIDTH / frontPanel.maxDispX; - y = (y - frontPanel.minDispY) * DISPLAY_HEIGHT / frontPanel.maxDispY; - Pointer_SetPosition(0, x, y); + *x = (*x - frontPanel.minDispX) * DISPLAY_WIDTH / frontPanel.maxDispX; + *y = (*y - frontPanel.minDispY) * DISPLAY_HEIGHT / frontPanel.maxDispY; } +static cc_bool touch_pressed; static void ProcessTouchInput(void) { SceTouchData touch; @@ -146,12 +145,19 @@ static void ProcessTouchInput(void) { if (res == 0) return; // no data available yet if (res < 0) return; // error occurred - if (touch.reportNum > 0) { + cc_bool isPressed = touch.reportNum > 0; + if (isPressed) { int x = touch.report[0].x; int y = touch.report[0].y; - ProcessTouchPress(x, y); + AdjustTouchPress(&x, &y); + + Input_AddTouch(0, x, y); + touch_pressed = true; + } else if (touch_pressed) { + // touch.report[0].xy will be 0 when touch.reportNum is 0 + Input_RemoveTouch(0, Pointers[0].x, Pointers[0].y); + touch_pressed = false; } - Input_SetNonRepeatable(CCMOUSE_L, touch.reportNum > 0); } static void ProcessPadInput(double delta) { From a7488f2a0b5542a09a05891863a6901ddb015837 Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Sat, 30 Mar 2024 21:43:28 +1100 Subject: [PATCH 17/41] PS1: WIP on texture support PSP: Fix faces not being culled --- misc/ps1/classicube.zip | Bin 0 -> 20218 bytes misc/ps1/iso.xml | 3 + misc/ps3/Makefile | 4 +- src/Graphics_PS1.c | 131 +++++++++++++++++++++++++++++++++++++++- src/Graphics_PS3.c | 2 +- src/Graphics_PSP.c | 4 +- src/Platform_PS1.c | 21 +++++-- src/Window_PS3.c | 2 +- 8 files changed, 154 insertions(+), 13 deletions(-) create mode 100644 misc/ps1/classicube.zip diff --git a/misc/ps1/classicube.zip b/misc/ps1/classicube.zip new file mode 100644 index 0000000000000000000000000000000000000000..bfc0896479d4380ba8fae305968a2703fe38c5b7 GIT binary patch literal 20218 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 literal 0 HcmV?d00001 diff --git a/misc/ps1/iso.xml b/misc/ps1/iso.xml index 96ea23a8c..220f72635 100644 --- a/misc/ps1/iso.xml +++ b/misc/ps1/iso.xml @@ -69,6 +69,9 @@ --> + + + diff --git a/misc/ps3/Makefile b/misc/ps3/Makefile index b37d83967..e28411b5a 100644 --- a/misc/ps3/Makefile +++ b/misc/ps3/Makefile @@ -35,7 +35,7 @@ ICON0 := ../misc/ps3/ICON0.png CFLAGS = -O2 -DPLAT_PS3 -Wall -mcpu=cell -fno-math-errno $(MACHDEP) $(INCLUDE) CXXFLAGS = $(CFLAGS) -LDFLAGS = $(MACHDEP) -Wl,-Map,$(notdir $@).map +LDFLAGS = $(MACHDEP) -Wl,-Map,$(notdir $@).map -fno-use-linker-plugin #--------------------------------------------------------------------------------- # any extra libraries we wish to link with the project @@ -141,4 +141,4 @@ $(OUTPUT).elf: $(OFILES) #--------------------------------------------------------------------------------- endif -#--------------------------------------------------------------------------------- \ No newline at end of file +#--------------------------------------------------------------------------------- diff --git a/src/Graphics_PS1.c b/src/Graphics_PS1.c index dbd92d3e4..8579dc584 100644 --- a/src/Graphics_PS1.c +++ b/src/Graphics_PS1.c @@ -115,16 +115,141 @@ void Gfx_Free(void) { /*########################################################################################################################* *---------------------------------------------------------Textures--------------------------------------------------------* *#########################################################################################################################*/ +// VRAM can be divided into texture pages +// 32 texture pages total - each page is 64 x 256 +// 10 texture pages are occupied by the doublebuffered display +// 22 texture packs are usable, and are then divided into +// - 4 pages for 256 wide textures, 8 for 128 wide, 10 for 64 +#define TPAGE_START_HOR 5 +#define TPAGES_PER_HALF 16 + +#define TPAGE_WIDTH 64 +#define TPAGE_HEIGHT 256 +#define MAX_TEX_PAGES 22 +static cc_uint8 vram_used[(MAX_TEX_PAGES * TPAGE_HEIGHT) / 8]; + +#define VRAM_SetUsed(line) (vram_used[(line) / 8] |= (1 << ((line) % 8))) +#define VRAM_UnUsed(line) (vram_used[(line) / 8] &= ~(1 << ((line) % 8))) +#define VRAM_IsUsed(line) (vram_used[(line) / 8] & (1 << ((line) % 8))) + +static void VRAM_GetBlockRange(int width, int* beg, int* end) { + if (width >= 256) { + *beg = 0; + *end = 4 * TPAGE_HEIGHT; + } else if (width >= 128) { + *beg = 4 * TPAGE_HEIGHT; + *end = 12 * TPAGE_HEIGHT; + } else { + *beg = 12 * TPAGE_HEIGHT; + *end = 22 * TPAGE_HEIGHT; + } +} + +static cc_bool VRAM_IsRangeFree(int beg, int end) { + for (int i = beg; i < end; i++) + { + if (VRAM_IsUsed(i)) return false; + } + return true; +} + +static int VRAM_FindFreeBlock(int width, int height) { + int beg, end; + VRAM_GetBlockRange(width, &beg, &end); + + // TODO kinda inefficient + for (int i = beg; i < end - height; i++) + { + if (VRAM_IsUsed(i)) continue; + + if (VRAM_IsRangeFree(i, i + height)) return i; + } + return -1; +} + +#define TEXTURES_MAX_COUNT 64 +typedef struct GPUTexture { + cc_uint16 width, height; + cc_uint16 line, tpage; +} GPUTexture; +static GPUTexture textures[TEXTURES_MAX_COUNT]; + +#define BGRA8_to_PS1(src) \ + ((src[2] & 0xF8) >> 3) | ((src[1] & 0xF8) << 2) | ((src[0] & 0xF8) << 7) | 0x8000 + +static void* AllocTextureAt(int i, struct Bitmap* bmp) { + cc_uint16* tmp = Mem_TryAlloc(2, bmp->width * bmp->height); + if (!tmp) return NULL; + + for (int y = 0; y < bmp->height; y++) + { + cc_uint32* src = bmp->scan0 + y * bmp->width; + cc_uint16* dst = tmp + y * bmp->width; + + for (int x = 0; x < bmp->width; x++) { + cc_uint8* color = (cc_uint8*)&src[x]; + dst[x] = BGRA8_to_PS1(color); + } + } + + GPUTexture* tex = &textures[i]; + int line = VRAM_FindFreeBlock(bmp->width, bmp->height); + if (line == -1) { Mem_Free(tmp); return NULL; } + + tex->width = bmp->width; + tex->height = bmp->height; + tex->line = line; + + int page = TPAGE_START_HOR + (line / TPAGE_HEIGHT); + // In bottom half of VRAM? Need to offset horizontally again + if (page >= TPAGES_PER_HALF) page += TPAGE_START_HOR; + + for (int i = tex->line; i < tex->line + tex->height; i++) + { + VRAM_SetUsed(i); + } + tex->tpage = page; + Platform_Log4("%i x %i = %i,%i", &bmp->width, &bmp->height, &line, &page); + + RECT rect; + rect.x = ((page % TPAGES_PER_HALF)) * TPAGE_WIDTH; + rect.y = ((page / TPAGES_PER_HALF)) * TPAGE_HEIGHT + (line % TPAGE_HEIGHT); + rect.w = bmp->width; + rect.h = bmp->height; + + int RX = rect.x, RY = rect.y; + Platform_Log2("LOAD AT: %i, %i", &RX, &RY); + LoadImage2(&rect, tmp); + + Mem_Free(tmp); + return tex; +} + static GfxResourceID Gfx_AllocTexture(struct Bitmap* bmp, cc_uint8 flags, cc_bool mipmaps) { + for (int i = 0; i < TEXTURES_MAX_COUNT; i++) + { + if (textures[i].width) continue; + return AllocTextureAt(i, bmp); + } + + Platform_LogConst("No room for more textures"); return NULL; } void Gfx_BindTexture(GfxResourceID texId) { + // TODO } void Gfx_DeleteTexture(GfxResourceID* texId) { GfxResourceID data = *texId; - if (data) Mem_Free(data); + if (!data) return; + GPUTexture* tex = (GPUTexture*)data; + + for (int i = tex->line; i < tex->line + tex->height; i++) + { + VRAM_UnUsed(i); + } + tex->width = 0; tex->height = 0; *texId = NULL; } @@ -133,7 +258,7 @@ void Gfx_UpdateTexture(GfxResourceID texId, int x, int y, struct Bitmap* part, i } void Gfx_UpdateTexturePart(GfxResourceID texId, int x, int y, struct Bitmap* part, cc_bool mipmaps) { - // TODO + Gfx_UpdateTexture(texId, x, y, part, part->width, mipmaps); } void Gfx_EnableMipmaps(void) { } @@ -521,7 +646,7 @@ cc_result Gfx_TakeScreenshot(struct Stream* output) { } cc_bool Gfx_WarnIfNecessary(void) { - return false; + return true; } void Gfx_BeginFrame(void) { diff --git a/src/Graphics_PS3.c b/src/Graphics_PS3.c index 63c9d4e9d..8bcd00447 100644 --- a/src/Graphics_PS3.c +++ b/src/Graphics_PS3.c @@ -711,4 +711,4 @@ void Gfx_DrawVb_IndexedTris(int verticesCount) {/* TODO */ void Gfx_DrawIndexedTris_T2fC4b(int verticesCount, int startVertex) {/* TODO */ rsxDrawVertexArray(context, GCM_TYPE_QUADS, startVertex, verticesCount); } -#endif \ No newline at end of file +#endif diff --git a/src/Graphics_PSP.c b/src/Graphics_PSP.c index 324e6cb34..b382f4f3b 100644 --- a/src/Graphics_PSP.c +++ b/src/Graphics_PSP.c @@ -44,7 +44,7 @@ static void guInit(void) { sceGuOffset(2048 - (SCREEN_WIDTH / 2), 2048 - (SCREEN_HEIGHT / 2)); sceGuViewport(2048, 2048, SCREEN_WIDTH, SCREEN_HEIGHT); sceGuDepthRange(65535,0); - sceGuFrontFace(GU_CW); + sceGuFrontFace(GU_CCW); sceGuShadeModel(GU_SMOOTH); sceGuDisable(GU_TEXTURE_2D); @@ -166,7 +166,7 @@ void Gfx_BindTexture(GfxResourceID texId) { *-----------------------------------------------------State management----------------------------------------------------* *#########################################################################################################################*/ static PackedCol gfx_clearColor; -void Gfx_SetFaceCulling(cc_bool enabled) { /*GU_Toggle(GU_CULL_FACE); */ } // TODO: Fix? GU_CCW instead?? +void Gfx_SetFaceCulling(cc_bool enabled) { GU_Toggle(GU_CULL_FACE); } void Gfx_SetAlphaBlending(cc_bool enabled) { GU_Toggle(GU_BLEND); } void Gfx_SetAlphaArgBlend(cc_bool enabled) { } diff --git a/src/Platform_PS1.c b/src/Platform_PS1.c index 38c5465a6..4708a1534 100644 --- a/src/Platform_PS1.c +++ b/src/Platform_PS1.c @@ -8,6 +8,7 @@ #include "Window.h" #include "Utils.h" #include "Errors.h" +#include "Options.h" #include "PackedCol.h" #include #include @@ -77,12 +78,20 @@ static void Stopwatch_Init(void) { /*########################################################################################################################* *-----------------------------------------------------Directory/File------------------------------------------------------* *#########################################################################################################################*/ +static const cc_string root_path = String_FromConst("cdrom:/"); + +static void GetNativePath(char* str, const cc_string* path) { + Mem_Copy(str, root_path.buffer, root_path.length); + str += root_path.length; + String_EncodeUtf8(str, path); +} + cc_result Directory_Create(const cc_string* path) { return ERR_NOT_SUPPORTED; } int File_Exists(const cc_string* path) { - return 0; + return ERR_NOT_SUPPORTED; } cc_result Directory_Enum(const cc_string* dirPath, void* obj, Directory_EnumCallback callback) { @@ -92,9 +101,11 @@ cc_result Directory_Enum(const cc_string* dirPath, void* obj, Directory_EnumCall cc_result File_Open(cc_file* file, const cc_string* path) { return ERR_NOT_SUPPORTED; } + cc_result File_Create(cc_file* file, const cc_string* path) { return ERR_NOT_SUPPORTED; } + cc_result File_OpenOrCreate(cc_file* file, const cc_string* path) { return ERR_NOT_SUPPORTED; } @@ -108,10 +119,10 @@ cc_result File_Write(cc_file file, const void* data, cc_uint32 count, cc_uint32* } cc_result File_Close(cc_file file) { - return 0; + return ERR_NOT_SUPPORTED; } -cc_result File_Seek(cc_file file, int offset, int seekType) { +cc_result File_Seek(cc_file file, int offset, int seekType) { return ERR_NOT_SUPPORTED; } @@ -207,8 +218,10 @@ cc_result Socket_CheckWritable(cc_socket s, cc_bool* writable) { *--------------------------------------------------------Platform---------------------------------------------------------* *#########################################################################################################################*/ void Platform_Init(void) { - ResetGraph( 0 ); + ResetGraph(0); Stopwatch_Init(); + + Options_SetBool(OPT_USE_CHAT_FONT, true); } void Platform_Free(void) { } diff --git a/src/Window_PS3.c b/src/Window_PS3.c index d9e200f22..8caf2adb0 100644 --- a/src/Window_PS3.c +++ b/src/Window_PS3.c @@ -369,4 +369,4 @@ cc_result Window_OpenFileDialog(const struct OpenFileDialogArgs* args) { cc_result Window_SaveFileDialog(const struct SaveFileDialogArgs* args) { return ERR_NOT_SUPPORTED; } -#endif \ No newline at end of file +#endif From 521cc79dd0cd7286fa40f596d55c0b9074b748d5 Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Sat, 30 Mar 2024 22:55:28 +1100 Subject: [PATCH 18/41] PS3: Add working github actions workflow --- .github/workflows/build_ds.yml | 4 ++-- .github/workflows/build_n64.yml | 2 +- .github/workflows/build_ps3.yml | 25 +++++++++++++++---------- src/Platform_N64.c | 12 +----------- 4 files changed, 19 insertions(+), 24 deletions(-) diff --git a/.github/workflows/build_ds.yml b/.github/workflows/build_ds.yml index b082d98ab..a4ac4e0a4 100644 --- a/.github/workflows/build_ds.yml +++ b/.github/workflows/build_ds.yml @@ -12,7 +12,7 @@ jobs: container: image: skylyrac/blocksds:dev-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Compile DS build id: compile run: | @@ -24,7 +24,7 @@ jobs: # otherwise notify_failure doesn't work - name: Install curl when necessary if: ${{ always() && steps.compile.outcome == 'failure' }} - run: apt install curl + run: apt-get -y install curl - uses: ./.github/actions/notify_failure if: ${{ always() && steps.compile.outcome == 'failure' }} diff --git a/.github/workflows/build_n64.yml b/.github/workflows/build_n64.yml index 3646c4611..ca81cb6be 100644 --- a/.github/workflows/build_n64.yml +++ b/.github/workflows/build_n64.yml @@ -29,7 +29,7 @@ jobs: # otherwise notify_failure doesn't work - name: Install curl when necessary if: ${{ always() && steps.compile.outcome == 'failure' }} - run: apt install curl + run: apt-get -y install curl - uses: ./.github/actions/notify_failure if: ${{ always() && steps.compile.outcome == 'failure' }} diff --git a/.github/workflows/build_ps3.yml b/.github/workflows/build_ps3.yml index 1e1e22772..673380c37 100644 --- a/.github/workflows/build_ps3.yml +++ b/.github/workflows/build_ps3.yml @@ -10,33 +10,38 @@ jobs: if: github.ref_name == github.event.repository.default_branch runs-on: ubuntu-latest container: - image: akusiroyo/ps3sdk:latest + image: ghcr.io/classicube/minimal-psl1ght:latest steps: - uses: actions/checkout@v4 - name: Compile PS3 build id: compile run: | - pacman -S make --noconfirm - export PSL1GHT=/usr/local/ps3dev export PS3DEV=/usr/local/ps3dev + export PSL1GHT=/usr/local/ps3dev + export PATH=$PATH:$PS3DEV/bin + export PATH=$PATH:$PS3DEV/ppu/bin make ps3 - + + # otherwise notify_failure doesn't work + - name: Install curl when necessary + if: ${{ always() && steps.compile.outcome == 'failure' }} + run: apt-get install -y curl - uses: ./.github/actions/notify_failure if: ${{ always() && steps.compile.outcome == 'failure' }} with: NOTIFY_MESSAGE: 'Failed to compile PS3 build' WEBHOOK_URL: '${{ secrets.WEBHOOK_URL }}' - - + + - uses: ./.github/actions/upload_build if: ${{ always() && steps.compile.outcome == 'success' }} with: - SOURCE_FILE: 'ClassiCube-ps3.pkg' - DEST_NAME: 'ClassiCube-ps3.pkg' + SOURCE_FILE: 'ClassiCube-PS3.self' + DEST_NAME: 'ClassiCube-PS3.self' - uses: ./.github/actions/upload_build if: ${{ always() && steps.compile.outcome == 'success' }} with: - SOURCE_FILE: 'ClassiCube-ps3.elf' - DEST_NAME: 'ClassiCube-ps3.elf' \ No newline at end of file + SOURCE_FILE: 'ClassiCube-PS3.pkg' + DEST_NAME: 'ClassiCube-PS3.pkg' \ No newline at end of file diff --git a/src/Platform_N64.c b/src/Platform_N64.c index 1b2aeeee1..1419f94c1 100644 --- a/src/Platform_N64.c +++ b/src/Platform_N64.c @@ -49,9 +49,7 @@ void Platform_Log(const char* msg, int len) { } TimeMS DateTime_CurrentUTC(void) { - struct timeval cur; - gettimeofday(&cur, NULL); - return (cc_uint64)cur.tv_sec + UNIX_EPOCH_SECONDS; + return 0; } void DateTime_CurrentLocal(struct DateTime* t) { @@ -176,10 +174,6 @@ void Thread_Run(void** handle, Thread_StartFunc func, int stackSize, const char* *handle = NULL; } -void Thread_Start2(void* handle, Thread_StartFunc func) { - // TODO: actual multithreading ??? -} - void Thread_Detach(void* handle) { } @@ -269,10 +263,6 @@ void Platform_Init(void) { // TODO: Redesign Drawer2D to better handle this Options_SetBool(OPT_USE_CHAT_FONT, true); - //console_init(); - //console_set_render_mode(RENDER_AUTOMATIC); - //console_set_debug(true); - dfs_init(DFS_DEFAULT_LOCATION); timer_init(); rtc_init(); From 121665d98c195b2a6cf6b59277d04618f79d71d8 Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Sun, 31 Mar 2024 17:14:59 +1100 Subject: [PATCH 19/41] PS1: Controller movement support --- readme.md | 16 ++++++++++------ src/Window_PS1.c | 25 +++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/readme.md b/readme.md index efc2bcb45..bb2b5b54c 100644 --- a/readme.md +++ b/readme.md @@ -117,13 +117,17 @@ I am assuming you used the installer from https://osdn.net/projects/mingw/ 4. Enter `gcc -fno-math-errno *.c -o ClassiCube.exe -mwindows -lwinmm -limagehlp` ##### Using TCC (Tiny C Compiler) -I am assuming you used `tcc-0.9.27-win64-bin.zip` from https://bellard.org/tcc/ -1. Extract the .zip file +Setting up TCC: +1. Download and extract `tcc-0.9.27-win64-bin.zip` from https://bellard.org/tcc/ 2. In TCC's `lib/kernel32.def`, add missing `RtlCaptureContext` at line 554 (In between `RtlAddFunctionTable` and `RtlDeleteFunctionTable`) -3. Copy `winapi` folder and `_mingw_dxhelper.h` from `winapi-full-for-0.9.27.zip` into TCC's `include` folder -4. Navigate to the directory with ClassiCube's source code -5. In `ExtMath.c`, change `fabsf` to `fabs` and `sqrtf` to `sqrtf` -6. Enter `tcc.exe -o ClassiCube.exe *.c -lwinmm -limagehlp -lgdi32 -luser32 -lcomdlg32 -lshell32` +3. Download `winapi-full-for-0.9.27.zip` from https://bellard.org/tcc/ +4. Copy `winapi` folder and `_mingw_dxhelper.h` from `winapi-full-for-0.9.27.zip` into TCC's `include` folder + +Compiling with TCC: +1. Navigate to the directory with ClassiCube's source code +2. In `ExtMath.c`, change `fabsf` to `fabs` and `sqrtf` to `sqrt` +3. Enter `tcc.exe -o ClassiCube.exe *.c -lwinmm -limagehlp -lgdi32 -luser32 -lcomdlg32 -lshell32`
+(Note: You may need to specify the full path to `tcc.exe` instead of just `tcc.exe`) ## Compiling - Linux diff --git a/src/Window_PS1.c b/src/Window_PS1.c index df1fa58d1..f02d01376 100644 --- a/src/Window_PS1.c +++ b/src/Window_PS1.c @@ -103,8 +103,33 @@ static void HandleButtons(int buttons) { Input_SetNonRepeatable(CCPAD_ZR, buttons & PAD_R2); } +static void HandleJoystick_Left(int x, int y) { + //Platform_Log2("LEFT: %i, %i", &x, &y); + if (Math_AbsI(x) <= 8) x = 0; + if (Math_AbsI(y) <= 8) y = 0; + + if (x == 0 && y == 0) return; + Input.JoystickMovement = true; + Input.JoystickAngle = Math_Atan2(x, -y); +} + +static void HandleJoystick_Right(int x, int y, double delta) { + //Platform_Log2("Right: %i, %i", &x, &y); + float scale = (delta * 60.0) / 16.0f; + + if (Math_AbsI(x) <= 8) x = 0; + if (Math_AbsI(y) <= 8) y = 0; + + Event_RaiseRawMove(&ControllerEvents.RawMoved, x * scale, y * scale); +} + static void ProcessPadInput(PADTYPE* pad, double delta) { HandleButtons(pad->btn); + + if (pad->type == PAD_ID_ANALOG_STICK || pad->type == PAD_ID_ANALOG) { + HandleJoystick_Left( pad->ls_x - 0x80, pad->ls_y - 0x80); + HandleJoystick_Right(pad->rs_x - 0x80, pad->rs_y - 0x80, delta); + } } void Window_ProcessEvents(double delta) { From 86961f50a36e1620ba4d02400cecb9138a3941e9 Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Sun, 31 Mar 2024 22:20:01 +1100 Subject: [PATCH 20/41] Add unfinished SDL3 window backend --- src/Window_SDL.c | 2 +- src/Window_SDL3.c | 457 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 458 insertions(+), 1 deletion(-) create mode 100644 src/Window_SDL3.c diff --git a/src/Window_SDL.c b/src/Window_SDL.c index 2e1778b1d..1d492d849 100644 --- a/src/Window_SDL.c +++ b/src/Window_SDL.c @@ -9,7 +9,7 @@ #include static SDL_Window* win_handle; -#error "Some features are missing from the SDL backend. If possible, it is recommended that you use a native windowing backend instead" +#warning "Some features are missing from the SDL backend. If possible, it is recommended that you use a native windowing backend instead" static void RefreshWindowBounds(void) { SDL_GetWindowSize(win_handle, &Window_Main.Width, &Window_Main.Height); diff --git a/src/Window_SDL3.c b/src/Window_SDL3.c new file mode 100644 index 000000000..95da63aa8 --- /dev/null +++ b/src/Window_SDL3.c @@ -0,0 +1,457 @@ +#include "Core.h" +#if defined CC_BUILD_SDL3 +#include "_WindowBase.h" +#include "Graphics.h" +#include "String.h" +#include "Funcs.h" +#include "Bitmap.h" +#include "Errors.h" +#include +static SDL_Window* win_handle; + +#warning "Some features are missing from the SDL3 backend. If possible, it is recommended that you use a native windowing backend instead" + +static void RefreshWindowBounds(void) { + SDL_GetWindowSize(win_handle, &Window_Main.Width, &Window_Main.Height); +} + +static void Window_SDLFail(const char* place) { + char strBuffer[256]; + cc_string str; + String_InitArray_NT(str, strBuffer); + + String_Format2(&str, "Error when %c: %c", place, SDL_GetError()); + str.buffer[str.length] = '\0'; + Logger_Abort(str.buffer); +} + +void Window_Init(void) { + SDL_Init(SDL_INIT_VIDEO); + int displayID = SDL_GetPrimaryDisplay(); + const SDL_DisplayMode* mode = SDL_GetDesktopDisplayMode(displayID); + Input.Sources = INPUT_SOURCE_NORMAL; + + DisplayInfo.Width = mode->w; + DisplayInfo.Height = mode->h; + DisplayInfo.Depth = SDL_BITSPERPIXEL(mode->format); + DisplayInfo.ScaleX = 1; + DisplayInfo.ScaleY = 1; +} + +void Window_Free(void) { } + +static void DoCreateWindow(int width, int height, int flags) { + win_handle = SDL_CreateWindow(NULL, width, height, + flags | SDL_WINDOW_RESIZABLE); + if (!win_handle) Window_SDLFail("creating window"); + + RefreshWindowBounds(); + Window_Main.Exists = true; + Window_Main.Handle = win_handle; + /* TODO grab using SDL_SetWindowGrab? seems to be unnecessary on Linux at least */ +} +void Window_Create2D(int width, int height) { DoCreateWindow(width, height, 0); } +void Window_Create3D(int width, int height) { DoCreateWindow(width, height, SDL_WINDOW_OPENGL); } + +void Window_SetTitle(const cc_string* title) { + char str[NATIVE_STR_LEN]; + String_EncodeUtf8(str, title); + SDL_SetWindowTitle(win_handle, str); +} + +void Clipboard_GetText(cc_string* value) { + char* ptr = SDL_GetClipboardText(); + if (!ptr) return; + + int len = String_Length(ptr); + String_AppendUtf8(value, ptr, len); + SDL_free(ptr); +} + +void Clipboard_SetText(const cc_string* value) { + char str[NATIVE_STR_LEN]; + String_EncodeUtf8(str, value); + SDL_SetClipboardText(str); +} + +int Window_GetWindowState(void) { + Uint32 flags = SDL_GetWindowFlags(win_handle); + + if (flags & SDL_WINDOW_MINIMIZED) return WINDOW_STATE_MINIMISED; + if (flags & SDL_WINDOW_FULLSCREEN) return WINDOW_STATE_FULLSCREEN; + return WINDOW_STATE_NORMAL; +} + +cc_result Window_EnterFullscreen(void) { + return SDL_SetWindowFullscreen(win_handle, true); +} +cc_result Window_ExitFullscreen(void) { + return SDL_SetWindowFullscreen(win_handle, false); +} + +int Window_IsObscured(void) { + Uint32 flags = SDL_GetWindowFlags(win_handle); + return flags & SDL_WINDOW_OCCLUDED; +} + +void Window_Show(void) { SDL_ShowWindow(win_handle); } + +void Window_SetSize(int width, int height) { + SDL_SetWindowSize(win_handle, width, height); +} + +void Window_RequestClose(void) { + SDL_Event e; + e.type = SDL_EVENT_QUIT; + SDL_PushEvent(&e); +} + +static int MapNativeKey(SDL_Keycode k) { + if (k >= SDLK_0 && k <= SDLK_9) { return '0' + (k - SDLK_0); } + if (k >= SDLK_a && k <= SDLK_z) { return 'A' + (k - SDLK_a); } + if (k >= SDLK_F1 && k <= SDLK_F12) { return CCKEY_F1 + (k - SDLK_F1); } + if (k >= SDLK_F13 && k <= SDLK_F24) { return CCKEY_F13 + (k - SDLK_F13); } + /* SDLK_KP_0 isn't before SDLK_KP_1 */ + if (k >= SDLK_KP_1 && k <= SDLK_KP_9) { return CCKEY_KP1 + (k - SDLK_KP_1); } + + switch (k) { + case SDLK_RETURN: return CCKEY_ENTER; + case SDLK_ESCAPE: return CCKEY_ESCAPE; + case SDLK_BACKSPACE: return CCKEY_BACKSPACE; + case SDLK_TAB: return CCKEY_TAB; + case SDLK_SPACE: return CCKEY_SPACE; + case SDLK_QUOTE: return CCKEY_QUOTE; + case SDLK_EQUALS: return CCKEY_EQUALS; + case SDLK_COMMA: return CCKEY_COMMA; + case SDLK_MINUS: return CCKEY_MINUS; + case SDLK_PERIOD: return CCKEY_PERIOD; + case SDLK_SLASH: return CCKEY_SLASH; + case SDLK_SEMICOLON: return CCKEY_SEMICOLON; + case SDLK_LEFTBRACKET: return CCKEY_LBRACKET; + case SDLK_BACKSLASH: return CCKEY_BACKSLASH; + case SDLK_RIGHTBRACKET: return CCKEY_RBRACKET; + case SDLK_BACKQUOTE: return CCKEY_TILDE; + case SDLK_CAPSLOCK: return CCKEY_CAPSLOCK; + case SDLK_PRINTSCREEN: return CCKEY_PRINTSCREEN; + case SDLK_SCROLLLOCK: return CCKEY_SCROLLLOCK; + case SDLK_PAUSE: return CCKEY_PAUSE; + case SDLK_INSERT: return CCKEY_INSERT; + case SDLK_HOME: return CCKEY_HOME; + case SDLK_PAGEUP: return CCKEY_PAGEUP; + case SDLK_DELETE: return CCKEY_DELETE; + case SDLK_END: return CCKEY_END; + case SDLK_PAGEDOWN: return CCKEY_PAGEDOWN; + case SDLK_RIGHT: return CCKEY_RIGHT; + case SDLK_LEFT: return CCKEY_LEFT; + case SDLK_DOWN: return CCKEY_DOWN; + case SDLK_UP: return CCKEY_UP; + + case SDLK_NUMLOCKCLEAR: return CCKEY_NUMLOCK; + case SDLK_KP_DIVIDE: return CCKEY_KP_DIVIDE; + case SDLK_KP_MULTIPLY: return CCKEY_KP_MULTIPLY; + case SDLK_KP_MINUS: return CCKEY_KP_MINUS; + case SDLK_KP_PLUS: return CCKEY_KP_PLUS; + case SDLK_KP_ENTER: return CCKEY_KP_ENTER; + case SDLK_KP_0: return CCKEY_KP0; + case SDLK_KP_PERIOD: return CCKEY_KP_DECIMAL; + + case SDLK_LCTRL: return CCKEY_LCTRL; + case SDLK_LSHIFT: return CCKEY_LSHIFT; + case SDLK_LALT: return CCKEY_LALT; + case SDLK_LGUI: return CCKEY_LWIN; + case SDLK_RCTRL: return CCKEY_RCTRL; + case SDLK_RSHIFT: return CCKEY_RSHIFT; + case SDLK_RALT: return CCKEY_RALT; + case SDLK_RGUI: return CCKEY_RWIN; + } + return INPUT_NONE; +} + +static void OnKeyEvent(const SDL_Event* e) { + cc_bool pressed = e->key.state == SDL_PRESSED; + int key = MapNativeKey(e->key.keysym.sym); + if (key) Input_Set(key, pressed); +} + +static void OnMouseEvent(const SDL_Event* e) { + cc_bool pressed = e->button.state == SDL_PRESSED; + int btn; + switch (e->button.button) { + case SDL_BUTTON_LEFT: btn = CCMOUSE_L; break; + case SDL_BUTTON_MIDDLE: btn = CCMOUSE_M; break; + case SDL_BUTTON_RIGHT: btn = CCMOUSE_R; break; + case SDL_BUTTON_X1: btn = CCMOUSE_X1; break; + case SDL_BUTTON_X2: btn = CCMOUSE_X2; break; + default: return; + } + Input_Set(btn, pressed); +} + +static void OnTextEvent(const SDL_Event* e) { + cc_codepoint cp; + const char* src; + int i, len; + + src = e->text.text; + len = String_CalcLen(src, SDL_TEXTINPUTEVENT_TEXT_SIZE); + + while (len > 0) { + i = Convert_Utf8ToCodepoint(&cp, src, len); + if (!i) break; + + Event_RaiseInt(&InputEvents.Press, cp); + src += i; len -= i; + } +} + +void Window_ProcessEvents(double delta) { + SDL_Event e; + while (SDL_PollEvent(&e)) { + switch (e.type) { + + case SDL_EVENT_KEY_DOWN: + case SDL_EVENT_KEY_UP: + OnKeyEvent(&e); break; + case SDL_EVENT_MOUSE_BUTTON_DOWN: + case SDL_EVENT_MOUSE_BUTTON_UP: + OnMouseEvent(&e); break; + case SDL_EVENT_MOUSE_WHEEL: + Mouse_ScrollWheel(e.wheel.y); + break; + case SDL_EVENT_MOUSE_MOTION: + Pointer_SetPosition(0, e.motion.x, e.motion.y); + if (Input.RawMode) Event_RaiseRawMove(&PointerEvents.RawMoved, e.motion.xrel, e.motion.yrel); + break; + case SDL_EVENT_TEXT_INPUT: + OnTextEvent(&e); break; + + case SDL_EVENT_QUIT: + Window_Main.Exists = false; + Event_RaiseVoid(&WindowEvents.Closing); + SDL_DestroyWindow(win_handle); + break; + + case SDL_EVENT_RENDER_DEVICE_RESET: + Gfx_LoseContext("SDL device reset event"); + Gfx_RecreateContext(); + break; + + + case SDL_EVENT_WINDOW_EXPOSED: + Event_RaiseVoid(&WindowEvents.RedrawNeeded); + break; + case SDL_EVENT_WINDOW_RESIZED: // TODO SDL_EVENT_WINDOW_PIXEL_SIZE_CHANGED + RefreshWindowBounds(); + Event_RaiseVoid(&WindowEvents.Resized); + break; + case SDL_EVENT_WINDOW_MINIMIZED: + case SDL_EVENT_WINDOW_MAXIMIZED: + case SDL_EVENT_WINDOW_RESTORED: + Event_RaiseVoid(&WindowEvents.StateChanged); + break; + case SDL_EVENT_WINDOW_FOCUS_GAINED: + Window_Main.Focused = true; + Event_RaiseVoid(&WindowEvents.FocusChanged); + break; + case SDL_EVENT_WINDOW_FOCUS_LOST: + Window_Main.Focused = false; + Event_RaiseVoid(&WindowEvents.FocusChanged); + break; + case SDL_EVENT_WINDOW_CLOSE_REQUESTED: + Window_RequestClose(); + break; + } + } +} + +static void Cursor_GetRawPos(int* x, int* y) { + float xPos, yPos; + SDL_GetMouseState(&xPos, &yPos); + *x = xPos; *y = yPos; +} +void Cursor_SetPosition(int x, int y) { + SDL_WarpMouseInWindow(win_handle, x, y); +} + +static void Cursor_DoSetVisible(cc_bool visible) { + if (visible) { + SDL_ShowCursor(); + } else { + SDL_HideCursor(); + } +} + +static void ShowDialogCore(const char* title, const char* msg) { + SDL_ShowSimpleMessageBox(0, title, msg, win_handle); +} + +static FileDialogCallback dlgCallback; +static void DialogCallback(void *userdata, const char* const* filelist, int filter) { + if (!filelist) return; /* Error occurred */ + const char* result = filelist[0]; + if (!result) return; /* No file provided */ + + cc_string path; char pathBuffer[1024]; + String_InitArray(path, pathBuffer); + String_AppendUtf8(&path, result, String_Length(result)); + + // TODO: Because this isn't run from the main thread, it stuffs things up + //dlgCallback(&path); + dlgCallback = NULL; +} + +cc_result Window_OpenFileDialog(const struct OpenFileDialogArgs* args) { + // TODO free memory + char* pattern = Mem_Alloc(301, 1, "OpenDialog pattern"); + SDL_DialogFileFilter* filters = Mem_Alloc(2, sizeof(SDL_DialogFileFilter), "OpenDialog filters"); + int i; + + cc_string str = String_Init(pattern, 0, 300); + for (i = 0; ; i++) + { + if (!args->filters[i]) break; + if (i) String_Append(&str, ';'); + String_AppendConst(&str, args->filters[i] + 1); + } + + pattern[str.length] = '\0'; + filters[0].name = args->description; + filters[0].pattern = pattern; + filters[1].name = NULL; + filters[1].pattern = NULL; + Platform_Log1("PATTERN: %c", pattern); + dlgCallback = args->Callback; + SDL_ShowOpenFileDialog(DialogCallback, NULL, win_handle, filters, NULL, false); + return 0; +} + +#define SDL_MAX_DIALOG_FILTERS 10 +cc_result Window_SaveFileDialog(const struct SaveFileDialogArgs* args) { + // TODO free memory + char* defName = Mem_Alloc(NATIVE_STR_LEN, 1, "SaveDialog default"); + SDL_DialogFileFilter* filters = Mem_Alloc(SDL_MAX_DIALOG_FILTERS + 1, sizeof(SDL_DialogFileFilter), "SaveDialog filters"); + int i; + String_EncodeUtf8(defName, &args->defaultName); + + for (i = 0; i < SDL_MAX_DIALOG_FILTERS; i++) + { + if (!args->filters[i]) break; + filters[i].name = args->titles[i]; + filters[i].pattern = args->filters[i] + 1; // skip . + } + + filters[i].name = NULL; + filters[i].pattern = NULL; + + dlgCallback = args->Callback; + SDL_ShowSaveFileDialog(DialogCallback, NULL, win_handle, filters, defName); + return 0; +} + +static SDL_Surface* win_surface; +static SDL_Surface* blit_surface; + +void Window_AllocFramebuffer(struct Bitmap* bmp) { + SDL_PixelFormat* fmt; + win_surface = SDL_GetWindowSurface(win_handle); + if (!win_surface) Window_SDLFail("getting window surface"); + + fmt = win_surface->format; + if (fmt->bits_per_pixel != 32) { + /* Slow path: e.g. 15 or 16 bit pixels */ + Platform_Log1("Slow color depth: %b bpp", &fmt->bits_per_pixel); + blit_surface = SDL_CreateSurface(win_surface->w, win_surface->h, SDL_PIXELFORMAT_RGBA32); + if (!blit_surface) Window_SDLFail("creating blit surface"); + + SDL_SetSurfaceBlendMode(blit_surface, SDL_BLENDMODE_NONE); + bmp->scan0 = blit_surface->pixels; + } else { + /* Fast path: 32 bit pixels */ + if (SDL_MUSTLOCK(win_surface)) { + int ret = SDL_LockSurface(win_surface); + if (ret < 0) Window_SDLFail("locking window surface"); + } + bmp->scan0 = win_surface->pixels; + } +} + +void Window_DrawFramebuffer(Rect2D r, struct Bitmap* bmp) { + SDL_Rect rect; + rect.x = r.x; rect.w = r.Width; + rect.y = r.y; rect.h = r.Height; + + if (blit_surface) SDL_BlitSurface(blit_surface, &rect, win_surface, &rect); + SDL_UpdateWindowSurfaceRects(win_handle, &rect, 1); +} + +void Window_FreeFramebuffer(struct Bitmap* bmp) { + if (blit_surface) SDL_DestroySurface(blit_surface); + blit_surface = NULL; + + /* SDL docs explicitly say to NOT free window surface */ + /* https://wiki.libsdl.org/SDL_GetWindowSurface */ + /* TODO: Do we still need to unlock it though? */ +} + +void Window_OpenKeyboard(struct OpenKeyboardArgs* args) { SDL_StartTextInput(); } +void Window_SetKeyboardText(const cc_string* text) { } +void Window_CloseKeyboard(void) { SDL_StopTextInput(); } + +void Window_EnableRawMouse(void) { + RegrabMouse(); + SDL_SetRelativeMouseMode(true); + Input.RawMode = true; +} +void Window_UpdateRawMouse(void) { CentreMousePosition(); } + +void Window_DisableRawMouse(void) { + RegrabMouse(); + SDL_SetRelativeMouseMode(false); + Input.RawMode = false; +} + + +/*########################################################################################################################* +*-----------------------------------------------------OpenGL context------------------------------------------------------* +*#########################################################################################################################*/ +#if defined CC_BUILD_GL && !defined CC_BUILD_EGL +static SDL_GLContext win_ctx; + +void GLContext_Create(void) { + struct GraphicsMode mode; + InitGraphicsMode(&mode); + SDL_GL_SetAttribute(SDL_GL_RED_SIZE, mode.R); + SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, mode.G); + SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, mode.B); + SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, mode.A); + + SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, GLCONTEXT_DEFAULT_DEPTH); + SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 0); + SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, true); + + win_ctx = SDL_GL_CreateContext(win_handle); + if (!win_ctx) Window_SDLFail("creating OpenGL context"); +} + +void GLContext_Update(void) { } +cc_bool GLContext_TryRestore(void) { return true; } +void GLContext_Free(void) { + SDL_GL_DeleteContext(win_ctx); + win_ctx = NULL; +} + +void* GLContext_GetAddress(const char* function) { + return SDL_GL_GetProcAddress(function); +} + +cc_bool GLContext_SwapBuffers(void) { + SDL_GL_SwapWindow(win_handle); + return true; +} + +void GLContext_SetFpsLimit(cc_bool vsync, float minFrameMs) { + SDL_GL_SetSwapInterval(vsync); +} +void GLContext_GetApiInfo(cc_string* info) { } +#endif +#endif From 6369631ebe8857519ec1ea92ab75c26fc6bc9e5c Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Sun, 31 Mar 2024 23:06:43 +1100 Subject: [PATCH 21/41] SDL3: Open/Save dialogs work now, although leak a little bit of memory when displayed each time --- src/Window_SDL3.c | 62 +++++++++++++++++++++++++++++++++++------------ 1 file changed, 47 insertions(+), 15 deletions(-) diff --git a/src/Window_SDL3.c b/src/Window_SDL3.c index 95da63aa8..85a1cd7c0 100644 --- a/src/Window_SDL3.c +++ b/src/Window_SDL3.c @@ -8,6 +8,7 @@ #include "Errors.h" #include static SDL_Window* win_handle; +static Uint32 dlg_event; #warning "Some features are missing from the SDL3 backend. If possible, it is recommended that you use a native windowing backend instead" @@ -28,8 +29,10 @@ static void Window_SDLFail(const char* place) { void Window_Init(void) { SDL_Init(SDL_INIT_VIDEO); int displayID = SDL_GetPrimaryDisplay(); - const SDL_DisplayMode* mode = SDL_GetDesktopDisplayMode(displayID); Input.Sources = INPUT_SOURCE_NORMAL; + + const SDL_DisplayMode* mode = SDL_GetDesktopDisplayMode(displayID); + dlg_event = SDL_RegisterEvents(1); DisplayInfo.Width = mode->w; DisplayInfo.Height = mode->h; @@ -107,8 +110,8 @@ void Window_RequestClose(void) { } static int MapNativeKey(SDL_Keycode k) { - if (k >= SDLK_0 && k <= SDLK_9) { return '0' + (k - SDLK_0); } - if (k >= SDLK_a && k <= SDLK_z) { return 'A' + (k - SDLK_a); } + if (k >= SDLK_0 && k <= SDLK_9) { return '0' + (k - SDLK_0); } + if (k >= SDLK_a && k <= SDLK_z) { return 'A' + (k - SDLK_a); } if (k >= SDLK_F1 && k <= SDLK_F12) { return CCKEY_F1 + (k - SDLK_F1); } if (k >= SDLK_F13 && k <= SDLK_F24) { return CCKEY_F13 + (k - SDLK_F13); } /* SDLK_KP_0 isn't before SDLK_KP_1 */ @@ -203,6 +206,7 @@ static void OnTextEvent(const SDL_Event* e) { src += i; len -= i; } } +static void ProcessDialogEvent(SDL_Event* e); void Window_ProcessEvents(double delta) { SDL_Event e; @@ -260,6 +264,9 @@ void Window_ProcessEvents(double delta) { case SDL_EVENT_WINDOW_CLOSE_REQUESTED: Window_RequestClose(); break; + default: + if (e.type == dlg_event) ProcessDialogEvent(&e); + break; } } } @@ -286,18 +293,41 @@ static void ShowDialogCore(const char* title, const char* msg) { } static FileDialogCallback dlgCallback; +static SDL_DialogFileFilter* save_filters; + +static void ProcessDialogEvent(SDL_Event* e) { + char* result = e->user.data1; + int length = e->user.code; + + cc_string path; char pathBuffer[1024]; + String_InitArray(path, pathBuffer); + String_AppendUtf8(&path, result, length); + + dlgCallback(&path); + dlgCallback = NULL; + Mem_Free(result); +} + static void DialogCallback(void *userdata, const char* const* filelist, int filter) { if (!filelist) return; /* Error occurred */ const char* result = filelist[0]; if (!result) return; /* No file provided */ - cc_string path; char pathBuffer[1024]; - String_InitArray(path, pathBuffer); - String_AppendUtf8(&path, result, String_Length(result)); + char* path = Mem_Alloc(NATIVE_STR_LEN, 1, "Dialog path"); + cc_string str = String_Init(path, 0, NATIVE_STR_LEN); + String_AppendUtf8(&str, result, String_Length(result)); - // TODO: Because this isn't run from the main thread, it stuffs things up - //dlgCallback(&path); - dlgCallback = NULL; + // May need to add file extension when saving, e.g. on Windows + if (save_filters && filter >= 0 && save_filters[filter].pattern) + String_Format1(&str, ".%c", save_filters[filter].pattern); + + // Dialog callback may not be called from the main thread + // (E.g. on windows it is called from a background thread) + SDL_Event e = { 0 }; + e.type = SDL_EVENT_USER; + e.user.code = str.length; + e.user.data1 = path; + SDL_PushEvent(&e); } cc_result Window_OpenFileDialog(const struct OpenFileDialogArgs* args) { @@ -319,21 +349,22 @@ cc_result Window_OpenFileDialog(const struct OpenFileDialogArgs* args) { filters[0].pattern = pattern; filters[1].name = NULL; filters[1].pattern = NULL; - Platform_Log1("PATTERN: %c", pattern); - dlgCallback = args->Callback; + + dlgCallback = args->Callback; + save_filters = NULL; SDL_ShowOpenFileDialog(DialogCallback, NULL, win_handle, filters, NULL, false); return 0; } -#define SDL_MAX_DIALOG_FILTERS 10 +#define MAX_SAVE_DIALOG_FILTERS 10 cc_result Window_SaveFileDialog(const struct SaveFileDialogArgs* args) { // TODO free memory char* defName = Mem_Alloc(NATIVE_STR_LEN, 1, "SaveDialog default"); - SDL_DialogFileFilter* filters = Mem_Alloc(SDL_MAX_DIALOG_FILTERS + 1, sizeof(SDL_DialogFileFilter), "SaveDialog filters"); + SDL_DialogFileFilter* filters = Mem_Alloc(MAX_SAVE_DIALOG_FILTERS + 1, sizeof(SDL_DialogFileFilter), "SaveDialog filters"); int i; String_EncodeUtf8(defName, &args->defaultName); - for (i = 0; i < SDL_MAX_DIALOG_FILTERS; i++) + for (i = 0; i < MAX_SAVE_DIALOG_FILTERS; i++) { if (!args->filters[i]) break; filters[i].name = args->titles[i]; @@ -343,7 +374,8 @@ cc_result Window_SaveFileDialog(const struct SaveFileDialogArgs* args) { filters[i].name = NULL; filters[i].pattern = NULL; - dlgCallback = args->Callback; + dlgCallback = args->Callback; + save_filters = filters; SDL_ShowSaveFileDialog(DialogCallback, NULL, win_handle, filters, defName); return 0; } From 4671a99f684aba5f7928c82863212035d829f21c Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Mon, 1 Apr 2024 08:42:36 +1100 Subject: [PATCH 22/41] PS1: More broken texture support --- src/Graphics_PS1.c | 76 +++++++++++++++++++++++++++++++++++++++------- src/SelectionBox.c | 6 ++++ src/Window_PS2.c | 1 + 3 files changed, 72 insertions(+), 11 deletions(-) diff --git a/src/Graphics_PS1.c b/src/Graphics_PS1.c index 8579dc584..286949f9c 100644 --- a/src/Graphics_PS1.c +++ b/src/Graphics_PS1.c @@ -82,12 +82,20 @@ static void* new_primitive(int size) { return (void*)prim; } +static GfxResourceID white_square; void Gfx_RestoreState(void) { InitDefaultResources(); + + // 2x2 dummy white texture + struct Bitmap bmp; + BitmapCol pixels[4] = { BITMAPCOLOR_WHITE, BITMAPCOLOR_WHITE, BITMAPCOLOR_WHITE, BITMAPCOLOR_WHITE }; + Bitmap_Init(bmp, 2, 2, pixels); + white_square = Gfx_CreateTexture(&bmp, 0, false); } void Gfx_FreeState(void) { - FreeDefaultResources(); + FreeDefaultResources(); + Gfx_DeleteTexture(&white_square); } void Gfx_Create(void) { @@ -173,12 +181,13 @@ typedef struct GPUTexture { cc_uint16 line, tpage; } GPUTexture; static GPUTexture textures[TEXTURES_MAX_COUNT]; +static GPUTexture* active_tex; #define BGRA8_to_PS1(src) \ ((src[2] & 0xF8) >> 3) | ((src[1] & 0xF8) << 2) | ((src[0] & 0xF8) << 7) | 0x8000 static void* AllocTextureAt(int i, struct Bitmap* bmp) { - cc_uint16* tmp = Mem_TryAlloc(2, bmp->width * bmp->height); + cc_uint16* tmp = Mem_TryAlloc(bmp->width * bmp->height, 2); if (!tmp) return NULL; for (int y = 0; y < bmp->height; y++) @@ -237,7 +246,8 @@ static GfxResourceID Gfx_AllocTexture(struct Bitmap* bmp, cc_uint8 flags, cc_boo } void Gfx_BindTexture(GfxResourceID texId) { - // TODO + if (!texId) texId = white_square; + active_tex = (GPUTexture*)texId; } void Gfx_DeleteTexture(GfxResourceID* texId) { @@ -520,10 +530,11 @@ static void Transform(Vec3* result, struct VertexTextured* a, const struct Matri } cc_bool VERTEX_LOGGING; -static void DrawQuads(int verticesCount, int startVertex) { +static void DrawColouredQuads(int verticesCount, int startVertex) { + return; for (int i = 0; i < verticesCount; i += 4) { - struct VertexTextured* v = (struct VertexTextured*)gfx_vertices + startVertex + i; + struct VertexColoured* v = (struct VertexColoured*)gfx_vertices + startVertex + i; POLY_F4* poly = new_primitive(sizeof(POLY_F4)); setPolyF4(poly); @@ -555,6 +566,43 @@ static void DrawQuads(int verticesCount, int startVertex) { } } +static void DrawTexturedQuads(int verticesCount, int startVertex) { + for (int i = 0; i < verticesCount; i += 4) + { + struct VertexTextured* v = (struct VertexTextured*)gfx_vertices + startVertex + i; + + POLY_FT4* poly = new_primitive(sizeof(POLY_FT4)); + setPolyFT4(poly); + poly->tpage = active_tex->tpage; + poly->clut = 0; + + Vec3 coords[4]; + Transform(&coords[0], &v[0], &mvp); + Transform(&coords[1], &v[1], &mvp); + Transform(&coords[2], &v[2], &mvp); + Transform(&coords[3], &v[3], &mvp); + + poly->x0 = coords[1].x; poly->y0 = coords[1].y; poly->u0 = (int)(v[1].U * active_tex->width) % active_tex->width; poly->v0 = (int)(v[1].V * active_tex->height) % active_tex->height + active_tex->line; + poly->x1 = coords[0].x; poly->y1 = coords[0].y; poly->u1 = (int)(v[0].U * active_tex->width) % active_tex->width; poly->v1 = (int)(v[0].V * active_tex->height) % active_tex->height + active_tex->line; + poly->x2 = coords[2].x; poly->y2 = coords[2].y; poly->u2 = (int)(v[2].U * active_tex->width) % active_tex->width; poly->v2 = (int)(v[2].V * active_tex->height) % active_tex->height + active_tex->line; + poly->x3 = coords[3].x; poly->y3 = coords[3].y; poly->u3 = (int)(v[3].U * active_tex->width) % active_tex->width; poly->v3 = (int)(v[3].V * active_tex->height) % active_tex->height + active_tex->line; + + int p = (coords[0].z + coords[1].z + coords[2].z + coords[3].z) / 4; + if (p < 0 || p >= OT_LENGTH) continue; + + int X = v[0].x, Y = v[0].y, Z = v[0].z; + //if (VERTEX_LOGGING) Platform_Log3("IN: %i, %i, %i", &X, &Y, &Z); + X = poly->x1; Y = poly->y1, Z = coords[0].z; + + poly->r0 = PackedCol_R(v->Col); + poly->g0 = PackedCol_G(v->Col); + poly->b0 = PackedCol_B(v->Col); + //if (VERTEX_LOGGING) Platform_Log4("OUT: %i, %i, %i (%i)", &X, &Y, &Z, &p); + + addPrim(&buffer->ot[p >> 2], poly); + } +} + /*static void DrawQuads(int verticesCount, int startVertex) { for (int i = 0; i < verticesCount; i += 4) { @@ -624,17 +672,23 @@ static void DrawQuads(int verticesCount, int startVertex) { }*/ void Gfx_DrawVb_IndexedTris_Range(int verticesCount, int startVertex) { - if (gfx_format == VERTEX_FORMAT_COLOURED) return; - DrawQuads(verticesCount, startVertex); + if (gfx_format == VERTEX_FORMAT_TEXTURED) { + DrawTexturedQuads(verticesCount, startVertex); + } else { + DrawColouredQuads(verticesCount, startVertex); + } } void Gfx_DrawVb_IndexedTris(int verticesCount) { - if (gfx_format == VERTEX_FORMAT_COLOURED) return; - DrawQuads(verticesCount, 0); + if (gfx_format == VERTEX_FORMAT_TEXTURED) { + DrawTexturedQuads(verticesCount, 0); + } else { + DrawColouredQuads(verticesCount, 0); + } } void Gfx_DrawIndexedTris_T2fC4b(int verticesCount, int startVertex) { - DrawQuads(verticesCount, startVertex); + DrawTexturedQuads(verticesCount, startVertex); } @@ -646,7 +700,7 @@ cc_result Gfx_TakeScreenshot(struct Stream* output) { } cc_bool Gfx_WarnIfNecessary(void) { - return true; + return false; } void Gfx_BeginFrame(void) { diff --git a/src/SelectionBox.c b/src/SelectionBox.c index 4f06cc3de..9ee62dd16 100644 --- a/src/SelectionBox.c +++ b/src/SelectionBox.c @@ -6,6 +6,7 @@ #include "Game.h" #include "Camera.h" +#ifdef CC_BUILD_NETWORKING /* Data for a selection box. */ struct SelectionBox { Vec3 p0, p1; @@ -206,6 +207,11 @@ void Selections_Render(void) { Gfx_SetDepthWrite(true); Gfx_SetAlphaBlending(false); } +#else +static int selections_count; +void Selections_Render(void) { } +static void Selections_ContextLost(void* obj) { } +#endif /*########################################################################################################################* diff --git a/src/Window_PS2.c b/src/Window_PS2.c index d15d93d8d..c8bbb574e 100644 --- a/src/Window_PS2.c +++ b/src/Window_PS2.c @@ -118,6 +118,7 @@ static void HandleJoystick_Left(int x, int y) { Input.JoystickMovement = true; Input.JoystickAngle = Math_Atan2(x, -y); } + static void HandleJoystick_Right(int x, int y, double delta) { //Platform_Log2("Right: %i, %i", &x, &y); float scale = (delta * 60.0) / 16.0f; From 7a7dcec05f915ac163b73965f92ad09e91c3bc60 Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Mon, 1 Apr 2024 09:58:27 +1100 Subject: [PATCH 23/41] First phase of refactoring gamepad input --- src/Input.c | 30 ++++++++ src/Input.h | 23 ++++-- src/Window_3DS.c | 42 +++++----- src/Window_Dreamcast.c | 46 +++++------ src/Window_GCWii.c | 170 +++++++++++++++++------------------------ src/Window_N64.c | 47 ++++++------ src/Window_NDS.c | 24 +++--- src/Window_PS1.c | 50 +++++------- src/Window_PS2.c | 50 +++++------- src/Window_PS3.c | 49 +++++------- src/Window_PSP.c | 39 +++++----- src/Window_PSVita.c | 56 +++++--------- src/Window_Switch.c | 43 +++++------ src/Window_Web.c | 60 ++++++--------- src/Window_WiiU.c | 30 ++++---- src/Window_Xbox.c | 52 +++++-------- src/Window_Xbox360.c | 24 +++--- 17 files changed, 379 insertions(+), 456 deletions(-) diff --git a/src/Input.c b/src/Input.c index a648ef063..122b0abd5 100644 --- a/src/Input.c +++ b/src/Input.c @@ -414,6 +414,36 @@ static void KeyBind_Init(void) { } +/*########################################################################################################################* +*---------------------------------------------------------Gamepad---------------------------------------------------------* +*#########################################################################################################################*/ +void Gamepad_SetButton(int btn, int pressed) { + Input_SetNonRepeatable(btn, pressed); +} + +static void Gamepad_SetLAxis(float x, float y, double delta) { + if (x == 0 && y == 0) return; + + Input.JoystickMovement = true; + Input.JoystickAngle = Math_Atan2(x, -y); +} + +static void Gamepad_SetRAxis(float x, float y, double delta) { + float scale = delta * 60.0; + Event_RaiseRawMove(&ControllerEvents.RawMoved, x * scale, y * scale); +} + +void Gamepad_SetAxis(int axis, float x, float y, double delta) { + if (!Input.RawMode) return; + + if (axis == PAD_AXIS_LEFT) { + Gamepad_SetLAxis(x, y, delta); + } else { + Gamepad_SetRAxis(x, y, delta); + } +} + + /*########################################################################################################################* *---------------------------------------------------------Hotkeys---------------------------------------------------------* *#########################################################################################################################*/ diff --git a/src/Input.h b/src/Input.h index bd2c9715d..320b149a8 100644 --- a/src/Input.h +++ b/src/Input.h @@ -102,15 +102,16 @@ void Input_Clear(void); #define Input_IsEscapeButton(btn) ((btn) == CCKEY_ESCAPE || (btn) == CCPAD_SELECT) #if defined CC_BUILD_HAIKU -/* Haiku uses ALT instead of CTRL for clipboard and stuff */ -#define Input_IsActionPressed() Input_IsAltPressed() + /* Haiku uses ALT instead of CTRL for clipboard and stuff */ + #define Input_IsActionPressed() Input_IsAltPressed() #elif defined CC_BUILD_DARWIN -/* macOS uses CMD instead of CTRL for clipboard and stuff */ -#define Input_IsActionPressed() Input_IsWinPressed() + /* macOS uses CMD instead of CTRL for clipboard and stuff */ + #define Input_IsActionPressed() Input_IsWinPressed() #else -#define Input_IsActionPressed() Input_IsCtrlPressed() + #define Input_IsActionPressed() Input_IsCtrlPressed() #endif + #ifdef CC_BUILD_TOUCH #define INPUT_MAX_POINTERS 32 enum INPUT_MODE { INPUT_MODE_PLACE, INPUT_MODE_DELETE, INPUT_MODE_NONE, INPUT_MODE_COUNT }; @@ -184,6 +185,17 @@ CC_API cc_bool KeyBind_IsPressed(KeyBind binding); /* Set the key that the given key binding is bound to. (also updates options list) */ void KeyBind_Set(KeyBind binding, int key, cc_uint8* binds); + +/* Gamepad axes. Default behaviour is: */ +/* - left axis: player movement */ +/* - right axis: camera movement */ +enum PAD_AXIS { PAD_AXIS_LEFT, PAD_AXIS_RIGHT }; +/* Sets value of the given gamepad button */ +void Gamepad_SetButton(int btn, int pressed); +/* Sets value of the given axis */ +void Gamepad_SetAxis(int axis, float x, float y, double delta); + + /* whether to leave text input open for user to enter further input */ #define HOTKEY_FLAG_STAYS_OPEN 0x01 /* Whether the hotkey was auto defined (e.g. by server) */ @@ -219,6 +231,7 @@ void StoredHotkeys_Remove(int trigger, cc_uint8 modifiers); /* Adds the given hotkey from options. */ void StoredHotkeys_Add(int trigger, cc_uint8 modifiers, cc_bool moreInput, const cc_string* text); + cc_bool InputHandler_SetFOV(int fov); cc_bool Input_HandleMouseWheel(float delta); void InputHandler_Tick(void); diff --git a/src/Window_3DS.c b/src/Window_3DS.c index 81931ea0b..1003e237d 100644 --- a/src/Window_3DS.c +++ b/src/Window_3DS.c @@ -90,51 +90,49 @@ void Window_RequestClose(void) { *----------------------------------------------------Input processing-----------------------------------------------------* *#########################################################################################################################*/ static void HandleButtons(u32 mods) { - Input_SetNonRepeatable(CCPAD_L, mods & KEY_L); - Input_SetNonRepeatable(CCPAD_R, mods & KEY_R); + Gamepad_SetButton(CCPAD_L, mods & KEY_L); + Gamepad_SetButton(CCPAD_R, mods & KEY_R); - Input_SetNonRepeatable(CCPAD_A, mods & KEY_A); - Input_SetNonRepeatable(CCPAD_B, mods & KEY_B); - Input_SetNonRepeatable(CCPAD_X, mods & KEY_X); - Input_SetNonRepeatable(CCPAD_Y, mods & KEY_Y); + Gamepad_SetButton(CCPAD_A, mods & KEY_A); + Gamepad_SetButton(CCPAD_B, mods & KEY_B); + Gamepad_SetButton(CCPAD_X, mods & KEY_X); + Gamepad_SetButton(CCPAD_Y, mods & KEY_Y); - Input_SetNonRepeatable(CCPAD_START, mods & KEY_START); - Input_SetNonRepeatable(CCPAD_SELECT, mods & KEY_SELECT); + Gamepad_SetButton(CCPAD_START, mods & KEY_START); + Gamepad_SetButton(CCPAD_SELECT, mods & KEY_SELECT); - Input_SetNonRepeatable(CCPAD_LEFT, mods & KEY_DLEFT); - Input_SetNonRepeatable(CCPAD_RIGHT, mods & KEY_DRIGHT); - Input_SetNonRepeatable(CCPAD_UP, mods & KEY_DUP); - Input_SetNonRepeatable(CCPAD_DOWN, mods & KEY_DDOWN); + Gamepad_SetButton(CCPAD_LEFT, mods & KEY_DLEFT); + Gamepad_SetButton(CCPAD_RIGHT, mods & KEY_DRIGHT); + Gamepad_SetButton(CCPAD_UP, mods & KEY_DUP); + Gamepad_SetButton(CCPAD_DOWN, mods & KEY_DDOWN); - Input_SetNonRepeatable(CCPAD_ZL, mods & KEY_ZL); - Input_SetNonRepeatable(CCPAD_ZR, mods & KEY_ZR); + Gamepad_SetButton(CCPAD_ZL, mods & KEY_ZL); + Gamepad_SetButton(CCPAD_ZR, mods & KEY_ZR); } +#define AXIS_SCALE 8.0f static void ProcessJoystickInput(circlePosition* pos, double delta) { - float scale = (delta * 60.0) / 8.0f; - // May not be exactly 0 on actual hardware if (Math_AbsI(pos->dx) <= 16) pos->dx = 0; if (Math_AbsI(pos->dy) <= 16) pos->dy = 0; - Event_RaiseRawMove(&ControllerEvents.RawMoved, pos->dx * scale, -pos->dy * scale); + Gamepad_SetAxis(PAD_AXIS_RIGHT, pos->dx / AXIS_SCALE, -pos->dy / AXIS_SCALE, delta); } static void ProcessTouchInput(int mods) { static int currX, currY; // current touch position touchPosition touch; hidTouchRead(&touch); + if (hidKeysDown() & KEY_TOUCH) { // stylus went down currX = touch.px; currY = touch.py; Input_AddTouch(0, currX, currY); - } - else if (mods & KEY_TOUCH) { // stylus is down + } else if (mods & KEY_TOUCH) { // stylus is down currX = touch.px; currY = touch.py; Input_UpdateTouch(0, currX, currY); - } - else if (hidKeysUp() & KEY_TOUCH) { // stylus was lifted + } else if (hidKeysUp() & KEY_TOUCH) { // stylus was lifted Input_RemoveTouch(0, currX, currY); } } @@ -275,4 +273,4 @@ cc_result Window_OpenFileDialog(const struct OpenFileDialogArgs* args) { cc_result Window_SaveFileDialog(const struct SaveFileDialogArgs* args) { return ERR_NOT_SUPPORTED; } -#endif \ No newline at end of file +#endif diff --git a/src/Window_Dreamcast.c b/src/Window_Dreamcast.c index 0a8670031..69bca1923 100644 --- a/src/Window_Dreamcast.c +++ b/src/Window_Dreamcast.c @@ -175,34 +175,34 @@ static void ProcessKeyboardInput(void) { static void HandleButtons(int mods) { // TODO CONT_Z - Input_SetNonRepeatable(CCPAD_A, mods & CONT_A); - Input_SetNonRepeatable(CCPAD_B, mods & CONT_B); - Input_SetNonRepeatable(CCPAD_X, mods & CONT_X); - Input_SetNonRepeatable(CCPAD_Y, mods & CONT_Y); + Gamepad_SetButton(CCPAD_A, mods & CONT_A); + Gamepad_SetButton(CCPAD_B, mods & CONT_B); + Gamepad_SetButton(CCPAD_X, mods & CONT_X); + Gamepad_SetButton(CCPAD_Y, mods & CONT_Y); - Input_SetNonRepeatable(CCPAD_START, mods & CONT_START); - Input_SetNonRepeatable(CCPAD_SELECT, mods & CONT_D); + Gamepad_SetButton(CCPAD_START, mods & CONT_START); + Gamepad_SetButton(CCPAD_SELECT, mods & CONT_D); - Input_SetNonRepeatable(CCPAD_LEFT, mods & CONT_DPAD_LEFT); - Input_SetNonRepeatable(CCPAD_RIGHT, mods & CONT_DPAD_RIGHT); - Input_SetNonRepeatable(CCPAD_UP, mods & CONT_DPAD_UP); - Input_SetNonRepeatable(CCPAD_DOWN, mods & CONT_DPAD_DOWN); + Gamepad_SetButton(CCPAD_LEFT, mods & CONT_DPAD_LEFT); + Gamepad_SetButton(CCPAD_RIGHT, mods & CONT_DPAD_RIGHT); + Gamepad_SetButton(CCPAD_UP, mods & CONT_DPAD_UP); + Gamepad_SetButton(CCPAD_DOWN, mods & CONT_DPAD_DOWN); +} + +#define AXIS_SCALE 8.0f +static void HandleJoystick(int axis, int x, int y, double delta) { + if (Math_AbsI(x) <= 8) x = 0; + if (Math_AbsI(y) <= 8) y = 0; + + Gamepad_SetAxis(axis, x / AXIS_SCALE, y / AXIS_SCALE, delta); } static void HandleController(cont_state_t* state, double delta) { - Input_SetNonRepeatable(CCPAD_L, state->ltrig > 10); - Input_SetNonRepeatable(CCPAD_R, state->rtrig > 10); + Gamepad_SetButton(CCPAD_L, state->ltrig > 10); + Gamepad_SetButton(CCPAD_R, state->rtrig > 10); // TODO CONT_Z, joysticks - // TODO: verify values are right - - if (Input.RawMode) { - float scale = (delta * 60.0) / 8.0f; - int dx = state->joyx, dy = state->joyy; - if (Math_AbsI(dx) <= 8) dx = 0; - if (Math_AbsI(dy) <= 8) dy = 0; - - Event_RaiseRawMove(&ControllerEvents.RawMoved, dx * scale, dy * scale); - } + // TODO: verify values are right + HandleJoystick(GAMEPAD_AXIS_RIGHT, state->joyx, state->joyy, delta); } static void ProcessControllerInput(double delta) { @@ -307,4 +307,4 @@ cc_result Window_OpenFileDialog(const struct OpenFileDialogArgs* args) { cc_result Window_SaveFileDialog(const struct SaveFileDialogArgs* args) { return ERR_NOT_SUPPORTED; } -#endif \ No newline at end of file +#endif diff --git a/src/Window_GCWii.c b/src/Window_GCWii.c index 1692ac4bd..7433d0896 100644 --- a/src/Window_GCWii.c +++ b/src/Window_GCWii.c @@ -105,48 +105,32 @@ void Window_RequestClose(void) { *#########################################################################################################################*/ static PADStatus gc_pad; -static void ProcessPAD_LeftJoystick(void) { - int dx = gc_pad.stickX; - int dy = gc_pad.stickY; - +#define PAD_AXIS_SCALE 8.0f +static void ProcessPAD_Joystick(int axis, int x, int y, double delta) { // May not be exactly 0 on actual hardware - if (Math_AbsI(dx) <= 8) dx = 0; - if (Math_AbsI(dy) <= 8) dy = 0; + if (Math_AbsI(x) <= 8) x = 0; + if (Math_AbsI(y) <= 8) y = 0; - if (dx == 0 && dy == 0) return; - Input.JoystickMovement = true; - Input.JoystickAngle = Math_Atan2(dx, -dy); -} - -static void ProcessPAD_RightJoystick(double delta) { - float scale = (delta * 60.0) / 8.0f; - int dx = gc_pad.substickX; - int dy = gc_pad.substickY; - - // May not be exactly 0 on actual hardware - if (Math_AbsI(dx) <= 8) dx = 0; - if (Math_AbsI(dy) <= 8) dy = 0; - - Event_RaiseRawMove(&ControllerEvents.RawMoved, dx * scale, -dy * scale); + Gamepad_SetAxis(axis, x / PAD_AXIS_SCALE, -y / PAD_AXIS_SCALE, delta); } static void ProcessPAD_Buttons(void) { int mods = gc_pad.button; - Input_SetNonRepeatable(CCPAD_L, mods & PAD_TRIGGER_L); - Input_SetNonRepeatable(CCPAD_R, mods & PAD_TRIGGER_R); + Gamepad_SetButton(CCPAD_L, mods & PAD_TRIGGER_L); + Gamepad_SetButton(CCPAD_R, mods & PAD_TRIGGER_R); - Input_SetNonRepeatable(CCPAD_A, mods & PAD_BUTTON_A); - Input_SetNonRepeatable(CCPAD_B, mods & PAD_BUTTON_B); - Input_SetNonRepeatable(CCPAD_X, mods & PAD_BUTTON_X); - Input_SetNonRepeatable(CCPAD_Y, mods & PAD_BUTTON_Y); + Gamepad_SetButton(CCPAD_A, mods & PAD_BUTTON_A); + Gamepad_SetButton(CCPAD_B, mods & PAD_BUTTON_B); + Gamepad_SetButton(CCPAD_X, mods & PAD_BUTTON_X); + Gamepad_SetButton(CCPAD_Y, mods & PAD_BUTTON_Y); - Input_SetNonRepeatable(CCPAD_START, mods & PAD_BUTTON_START); - Input_SetNonRepeatable(CCPAD_SELECT, mods & PAD_TRIGGER_Z); + Gamepad_SetButton(CCPAD_START, mods & PAD_BUTTON_START); + Gamepad_SetButton(CCPAD_SELECT, mods & PAD_TRIGGER_Z); - Input_SetNonRepeatable(CCPAD_LEFT, mods & PAD_BUTTON_LEFT); - Input_SetNonRepeatable(CCPAD_RIGHT, mods & PAD_BUTTON_RIGHT); - Input_SetNonRepeatable(CCPAD_UP, mods & PAD_BUTTON_UP); - Input_SetNonRepeatable(CCPAD_DOWN, mods & PAD_BUTTON_DOWN); + Gamepad_SetButton(CCPAD_LEFT, mods & PAD_BUTTON_LEFT); + Gamepad_SetButton(CCPAD_RIGHT, mods & PAD_BUTTON_RIGHT); + Gamepad_SetButton(CCPAD_UP, mods & PAD_BUTTON_UP); + Gamepad_SetButton(CCPAD_DOWN, mods & PAD_BUTTON_DOWN); } static void ProcessPADInput(double delta) { @@ -163,10 +147,8 @@ static void ProcessPADInput(double delta) { } ProcessPAD_Buttons(); - if (Input.RawMode) { - ProcessPAD_LeftJoystick(); - ProcessPAD_RightJoystick(delta); - } + ProcessPAD_Joystick(PAD_AXIS_LEFT, gc_pad.stickX, gc_pad.stickY, delta); + ProcessPAD_Joystick(PAD_AXIS_RIGHT, gc_pad.substickX, gc_pad.substickY, delta); } @@ -243,44 +225,44 @@ static int dragStartX, dragStartY; static cc_bool dragActive; static void ProcessWPAD_Buttons(int mods) { - Input_SetNonRepeatable(CCPAD_L, mods & WPAD_BUTTON_1); - Input_SetNonRepeatable(CCPAD_R, mods & WPAD_BUTTON_2); + Gamepad_SetButton(CCPAD_L, mods & WPAD_BUTTON_1); + Gamepad_SetButton(CCPAD_R, mods & WPAD_BUTTON_2); - Input_SetNonRepeatable(CCPAD_A, mods & WPAD_BUTTON_A); - Input_SetNonRepeatable(CCPAD_B, mods & WPAD_BUTTON_B); - Input_SetNonRepeatable(CCPAD_X, mods & WPAD_BUTTON_PLUS); + Gamepad_SetButton(CCPAD_A, mods & WPAD_BUTTON_A); + Gamepad_SetButton(CCPAD_B, mods & WPAD_BUTTON_B); + Gamepad_SetButton(CCPAD_X, mods & WPAD_BUTTON_PLUS); - Input_SetNonRepeatable(CCPAD_START, mods & WPAD_BUTTON_HOME); - Input_SetNonRepeatable(CCPAD_SELECT, mods & WPAD_BUTTON_MINUS); + Gamepad_SetButton(CCPAD_START, mods & WPAD_BUTTON_HOME); + Gamepad_SetButton(CCPAD_SELECT, mods & WPAD_BUTTON_MINUS); - Input_SetNonRepeatable(CCPAD_LEFT, mods & WPAD_BUTTON_LEFT); - Input_SetNonRepeatable(CCPAD_RIGHT, mods & WPAD_BUTTON_RIGHT); - Input_SetNonRepeatable(CCPAD_UP, mods & WPAD_BUTTON_UP); - Input_SetNonRepeatable(CCPAD_DOWN, mods & WPAD_BUTTON_DOWN); + Gamepad_SetButton(CCPAD_LEFT, mods & WPAD_BUTTON_LEFT); + Gamepad_SetButton(CCPAD_RIGHT, mods & WPAD_BUTTON_RIGHT); + Gamepad_SetButton(CCPAD_UP, mods & WPAD_BUTTON_UP); + Gamepad_SetButton(CCPAD_DOWN, mods & WPAD_BUTTON_DOWN); } static void ProcessNunchuck_Game(int mods, double delta) { WPADData* wd = WPAD_Data(0); joystick_t analog = wd->exp.nunchuk.js; - Input_SetNonRepeatable(CCPAD_L, mods & WPAD_NUNCHUK_BUTTON_C); - Input_SetNonRepeatable(CCPAD_R, mods & WPAD_NUNCHUK_BUTTON_Z); + Gamepad_SetButton(CCPAD_L, mods & WPAD_NUNCHUK_BUTTON_C); + Gamepad_SetButton(CCPAD_R, mods & WPAD_NUNCHUK_BUTTON_Z); - Input_SetNonRepeatable(CCPAD_A, mods & WPAD_BUTTON_A); - Input_SetNonRepeatable(CCPAD_Y, mods & WPAD_BUTTON_1); - Input_SetNonRepeatable(CCPAD_X, mods & WPAD_BUTTON_2); + Gamepad_SetButton(CCPAD_A, mods & WPAD_BUTTON_A); + Gamepad_SetButton(CCPAD_Y, mods & WPAD_BUTTON_1); + Gamepad_SetButton(CCPAD_X, mods & WPAD_BUTTON_2); - Input_SetNonRepeatable(CCPAD_START, mods & WPAD_BUTTON_HOME); - Input_SetNonRepeatable(CCPAD_SELECT, mods & WPAD_BUTTON_MINUS); + Gamepad_SetButton(CCPAD_START, mods & WPAD_BUTTON_HOME); + Gamepad_SetButton(CCPAD_SELECT, mods & WPAD_BUTTON_MINUS); - Input_SetNonRepeatable(KeyBinds_Normal[KEYBIND_FLY], mods & WPAD_BUTTON_LEFT); + Gamepad_SetButton(KeyBinds_Normal[KEYBIND_FLY], mods & WPAD_BUTTON_LEFT); if (mods & WPAD_BUTTON_RIGHT) { Mouse_ScrollWheel(1.0*delta); } - Input_SetNonRepeatable(KeyBinds_Normal[KEYBIND_THIRD_PERSON], mods & WPAD_BUTTON_UP); - Input_SetNonRepeatable(KeyBinds_Normal[KEYBIND_FLY_DOWN], mods & WPAD_BUTTON_DOWN); + Gamepad_SetButton(KeyBinds_Normal[KEYBIND_THIRD_PERSON], mods & WPAD_BUTTON_UP); + Gamepad_SetButton(KeyBinds_Normal[KEYBIND_FLY_DOWN], mods & WPAD_BUTTON_DOWN); const float ANGLE_DELTA = 50; bool nunchuckUp = (analog.ang > -ANGLE_DELTA) && (analog.ang < ANGLE_DELTA) && (analog.mag > 0.5); @@ -288,57 +270,43 @@ static void ProcessNunchuck_Game(int mods, double delta) { bool nunchuckLeft = (analog.ang > -90-ANGLE_DELTA) && (analog.ang < -90+ANGLE_DELTA) && (analog.mag > 0.5); bool nunchuckRight = (analog.ang > 90-ANGLE_DELTA) && (analog.ang < 90+ANGLE_DELTA) && (analog.mag > 0.5); - Input_SetNonRepeatable(CCPAD_LEFT, nunchuckLeft); - Input_SetNonRepeatable(CCPAD_RIGHT, nunchuckRight); - Input_SetNonRepeatable(CCPAD_UP, nunchuckUp); - Input_SetNonRepeatable(CCPAD_DOWN, nunchuckDown); + Gamepad_SetButton(CCPAD_LEFT, nunchuckLeft); + Gamepad_SetButton(CCPAD_RIGHT, nunchuckRight); + Gamepad_SetButton(CCPAD_UP, nunchuckUp); + Gamepad_SetButton(CCPAD_DOWN, nunchuckDown); } - -static void ProcessClassic_LeftJoystick(struct joystick_t* js) { - // TODO: need to account for min/max?? - int dx = js->pos.x - js->center.x; - int dy = js->pos.y - js->center.y; - - if (Math_AbsI(dx) <= 8) dx = 0; - if (Math_AbsI(dy) <= 8) dy = 0; - - if (dx == 0 && dy == 0) return; - Input.JoystickMovement = true; - Input.JoystickAngle = (js->ang - 90) * MATH_DEG2RAD; -} - -static void ProcessClassic_RightJoystick(struct joystick_t* js, double delta) { - float scale = (delta * 60.0) / 2.0f; - // TODO: need to account for min/max?? - int dx = js->pos.x - js->center.x; - int dy = js->pos.y - js->center.y; +#define CLASSIC_AXIS_SCALE 2.0f +static void ProcessClassic_Joystick(int axis, struct joystick_t* js, double delta) { + // TODO: need to account for min/max?? see libogc + int x = js->pos.x - js->center.x; + int y = js->pos.y - js->center.y; - if (Math_AbsI(dx) <= 8) dx = 0; - if (Math_AbsI(dy) <= 8) dy = 0; + if (Math_AbsI(x) <= 8) x = 0; + if (Math_AbsI(y) <= 8) y = 0; - Event_RaiseRawMove(&ControllerEvents.RawMoved, dx * scale, -dy * scale); + Gamepad_SetAxis(axis, x / CLASSIC_AXIS_SCALE, -y / CLASSIC_AXIS_SCALE, delta); } static void ProcessClassicButtons(int mods) { - Input_SetNonRepeatable(CCPAD_L, mods & CLASSIC_CTRL_BUTTON_FULL_L); - Input_SetNonRepeatable(CCPAD_R, mods & CLASSIC_CTRL_BUTTON_FULL_R); + Gamepad_SetButton(CCPAD_L, mods & CLASSIC_CTRL_BUTTON_FULL_L); + Gamepad_SetButton(CCPAD_R, mods & CLASSIC_CTRL_BUTTON_FULL_R); - Input_SetNonRepeatable(CCPAD_A, mods & CLASSIC_CTRL_BUTTON_A); - Input_SetNonRepeatable(CCPAD_B, mods & CLASSIC_CTRL_BUTTON_B); - Input_SetNonRepeatable(CCPAD_X, mods & CLASSIC_CTRL_BUTTON_X); - Input_SetNonRepeatable(CCPAD_Y, mods & CLASSIC_CTRL_BUTTON_Y); + Gamepad_SetButton(CCPAD_A, mods & CLASSIC_CTRL_BUTTON_A); + Gamepad_SetButton(CCPAD_B, mods & CLASSIC_CTRL_BUTTON_B); + Gamepad_SetButton(CCPAD_X, mods & CLASSIC_CTRL_BUTTON_X); + Gamepad_SetButton(CCPAD_Y, mods & CLASSIC_CTRL_BUTTON_Y); - Input_SetNonRepeatable(CCPAD_START, mods & CLASSIC_CTRL_BUTTON_PLUS); - Input_SetNonRepeatable(CCPAD_SELECT, mods & CLASSIC_CTRL_BUTTON_MINUS); + Gamepad_SetButton(CCPAD_START, mods & CLASSIC_CTRL_BUTTON_PLUS); + Gamepad_SetButton(CCPAD_SELECT, mods & CLASSIC_CTRL_BUTTON_MINUS); - Input_SetNonRepeatable(CCPAD_LEFT, mods & CLASSIC_CTRL_BUTTON_LEFT); - Input_SetNonRepeatable(CCPAD_RIGHT, mods & CLASSIC_CTRL_BUTTON_RIGHT); - Input_SetNonRepeatable(CCPAD_UP, mods & CLASSIC_CTRL_BUTTON_UP); - Input_SetNonRepeatable(CCPAD_DOWN, mods & CLASSIC_CTRL_BUTTON_DOWN); + Gamepad_SetButton(CCPAD_LEFT, mods & CLASSIC_CTRL_BUTTON_LEFT); + Gamepad_SetButton(CCPAD_RIGHT, mods & CLASSIC_CTRL_BUTTON_RIGHT); + Gamepad_SetButton(CCPAD_UP, mods & CLASSIC_CTRL_BUTTON_UP); + Gamepad_SetButton(CCPAD_DOWN, mods & CLASSIC_CTRL_BUTTON_DOWN); - Input_SetNonRepeatable(CCPAD_ZL, mods & CLASSIC_CTRL_BUTTON_ZL); - Input_SetNonRepeatable(CCPAD_ZR, mods & CLASSIC_CTRL_BUTTON_ZR); + Gamepad_SetButton(CCPAD_ZL, mods & CLASSIC_CTRL_BUTTON_ZL); + Gamepad_SetButton(CCPAD_ZR, mods & CLASSIC_CTRL_BUTTON_ZR); } static void ProcessClassicInput(double delta) { @@ -347,10 +315,8 @@ static void ProcessClassicInput(double delta) { int mods = ctrls.btns | ctrls.btns_held; ProcessClassicButtons(mods); - if (Input.RawMode) { - ProcessClassic_LeftJoystick(&ctrls.ljs); - ProcessClassic_RightJoystick(&ctrls.rjs, delta); - } + ProcessClassic_Joystick(PAD_AXIS_LEFT, &ctrls.ljs, delta); + ProcessClassic_Joystick(PAD_AXIS_RIGHT, &ctrls.rjs, delta); } diff --git a/src/Window_N64.c b/src/Window_N64.c index 95633005d..93d9fc20f 100644 --- a/src/Window_N64.c +++ b/src/Window_N64.c @@ -76,35 +76,35 @@ void Window_RequestClose(void) { *----------------------------------------------------Input processing-----------------------------------------------------* *#########################################################################################################################*/ static void HandleButtons(joypad_buttons_t btns) { - Input_SetNonRepeatable(CCPAD_L, btns.l); - Input_SetNonRepeatable(CCPAD_R, btns.r); + Gamepad_SetButton(CCPAD_L, btns.l); + Gamepad_SetButton(CCPAD_R, btns.r); - Input_SetNonRepeatable(CCPAD_A, btns.a); - Input_SetNonRepeatable(CCPAD_B, btns.b); - Input_SetNonRepeatable(CCPAD_Z, btns.z); + Gamepad_SetButton(CCPAD_A, btns.a); + Gamepad_SetButton(CCPAD_B, btns.b); + Gamepad_SetButton(CCPAD_Z, btns.z); - Input_SetNonRepeatable(CCPAD_START, btns.start); + Gamepad_SetButton(CCPAD_START, btns.start); - Input_SetNonRepeatable(CCPAD_LEFT, btns.d_left); - Input_SetNonRepeatable(CCPAD_RIGHT, btns.d_right); - Input_SetNonRepeatable(CCPAD_UP, btns.d_up); - Input_SetNonRepeatable(CCPAD_DOWN, btns.d_down); - - Input_SetNonRepeatable(CCPAD_CLEFT, btns.c_left); - Input_SetNonRepeatable(CCPAD_CRIGHT, btns.c_right); - Input_SetNonRepeatable(CCPAD_CUP, btns.c_up); - Input_SetNonRepeatable(CCPAD_CDOWN, btns.c_down); + Gamepad_SetButton(CCPAD_LEFT, btns.d_left); + Gamepad_SetButton(CCPAD_RIGHT, btns.d_right); + Gamepad_SetButton(CCPAD_UP, btns.d_up); + Gamepad_SetButton(CCPAD_DOWN, btns.d_down); + + Gamepad_SetButton(CCPAD_CLEFT, btns.c_left); + Gamepad_SetButton(CCPAD_CRIGHT, btns.c_right); + Gamepad_SetButton(CCPAD_CUP, btns.c_up); + Gamepad_SetButton(CCPAD_CDOWN, btns.c_down); } +#define AXIS_SCALE 8.0f static void ProcessAnalogInput(joypad_inputs_t* inputs, double delta) { - float scale = (delta * 60.0) / 8.0f; - int dx = inputs->stick_x; - int dy = inputs->stick_y; + int x = inputs->stick_x; + int y = inputs->stick_y; - if (Math_AbsI(dx) <= 8) dx = 0; - if (Math_AbsI(dy) <= 8) dy = 0; - - Event_RaiseRawMove(&ControllerEvents.RawMoved, dx * scale, -dy * scale); + if (Math_AbsI(x) <= 8) x = 0; + if (Math_AbsI(y) <= 8) y = 0; + + Gamepad_SetAxis(PAD_AXIS_RIGHT, x / AXIS_SCALE, -y / AXIS_SCALE, delta); } void Window_ProcessEvents(double delta) { @@ -112,8 +112,7 @@ void Window_ProcessEvents(double delta) { joypad_inputs_t inputs = joypad_get_inputs(JOYPAD_PORT_1); HandleButtons(inputs.btn); - - if (Input.RawMode) ProcessAnalogInput(&inputs, delta); + ProcessAnalogInput(&inputs, delta); } void Cursor_SetPosition(int x, int y) { } // Makes no sense for PSP diff --git a/src/Window_NDS.c b/src/Window_NDS.c index b36ee923b..d18a6bc85 100644 --- a/src/Window_NDS.c +++ b/src/Window_NDS.c @@ -98,21 +98,21 @@ void Window_RequestClose(void) { *----------------------------------------------------Input processing-----------------------------------------------------* *#########################################################################################################################*/ static void HandleButtons(int mods) { - Input_SetNonRepeatable(CCPAD_L, mods & KEY_L); - Input_SetNonRepeatable(CCPAD_R, mods & KEY_R); + Gamepad_SetButton(CCPAD_L, mods & KEY_L); + Gamepad_SetButton(CCPAD_R, mods & KEY_R); - Input_SetNonRepeatable(CCPAD_A, mods & KEY_A); - Input_SetNonRepeatable(CCPAD_B, mods & KEY_B); - Input_SetNonRepeatable(CCPAD_X, mods & KEY_X); - Input_SetNonRepeatable(CCPAD_Y, mods & KEY_Y); + Gamepad_SetButton(CCPAD_A, mods & KEY_A); + Gamepad_SetButton(CCPAD_B, mods & KEY_B); + Gamepad_SetButton(CCPAD_X, mods & KEY_X); + Gamepad_SetButton(CCPAD_Y, mods & KEY_Y); - Input_SetNonRepeatable(CCPAD_START, mods & KEY_START); - Input_SetNonRepeatable(CCPAD_SELECT, mods & KEY_SELECT); + Gamepad_SetButton(CCPAD_START, mods & KEY_START); + Gamepad_SetButton(CCPAD_SELECT, mods & KEY_SELECT); - Input_SetNonRepeatable(CCPAD_LEFT, mods & KEY_LEFT); - Input_SetNonRepeatable(CCPAD_RIGHT, mods & KEY_RIGHT); - Input_SetNonRepeatable(CCPAD_UP, mods & KEY_UP); - Input_SetNonRepeatable(CCPAD_DOWN, mods & KEY_DOWN); + Gamepad_SetButton(CCPAD_LEFT, mods & KEY_LEFT); + Gamepad_SetButton(CCPAD_RIGHT, mods & KEY_RIGHT); + Gamepad_SetButton(CCPAD_UP, mods & KEY_UP); + Gamepad_SetButton(CCPAD_DOWN, mods & KEY_DOWN); } // Copied from Window_3DS.c diff --git a/src/Window_PS1.c b/src/Window_PS1.c index f02d01376..1f5171e40 100644 --- a/src/Window_PS1.c +++ b/src/Window_PS1.c @@ -84,51 +84,39 @@ static void HandleButtons(int buttons) { // So just flip the bits to make more sense buttons = ~buttons; - Input_SetNonRepeatable(CCPAD_A, buttons & PAD_TRIANGLE); - Input_SetNonRepeatable(CCPAD_B, buttons & PAD_SQUARE); - Input_SetNonRepeatable(CCPAD_X, buttons & PAD_CROSS); - Input_SetNonRepeatable(CCPAD_Y, buttons & PAD_CIRCLE); + Gamepad_SetButton(CCPAD_A, buttons & PAD_TRIANGLE); + Gamepad_SetButton(CCPAD_B, buttons & PAD_SQUARE); + Gamepad_SetButton(CCPAD_X, buttons & PAD_CROSS); + Gamepad_SetButton(CCPAD_Y, buttons & PAD_CIRCLE); - Input_SetNonRepeatable(CCPAD_START, buttons & PAD_START); - Input_SetNonRepeatable(CCPAD_SELECT, buttons & PAD_SELECT); + Gamepad_SetButton(CCPAD_START, buttons & PAD_START); + Gamepad_SetButton(CCPAD_SELECT, buttons & PAD_SELECT); - Input_SetNonRepeatable(CCPAD_LEFT, buttons & PAD_LEFT); - Input_SetNonRepeatable(CCPAD_RIGHT, buttons & PAD_RIGHT); - Input_SetNonRepeatable(CCPAD_UP, buttons & PAD_UP); - Input_SetNonRepeatable(CCPAD_DOWN, buttons & PAD_DOWN); + Gamepad_SetButton(CCPAD_LEFT, buttons & PAD_LEFT); + Gamepad_SetButton(CCPAD_RIGHT, buttons & PAD_RIGHT); + Gamepad_SetButton(CCPAD_UP, buttons & PAD_UP); + Gamepad_SetButton(CCPAD_DOWN, buttons & PAD_DOWN); - Input_SetNonRepeatable(CCPAD_L, buttons & PAD_L1); - Input_SetNonRepeatable(CCPAD_R, buttons & PAD_R1); - Input_SetNonRepeatable(CCPAD_ZL, buttons & PAD_L2); - Input_SetNonRepeatable(CCPAD_ZR, buttons & PAD_R2); + Gamepad_SetButton(CCPAD_L, buttons & PAD_L1); + Gamepad_SetButton(CCPAD_R, buttons & PAD_R1); + Gamepad_SetButton(CCPAD_ZL, buttons & PAD_L2); + Gamepad_SetButton(CCPAD_ZR, buttons & PAD_R2); } -static void HandleJoystick_Left(int x, int y) { - //Platform_Log2("LEFT: %i, %i", &x, &y); +#define AXIS_SCALE 16.0f +static void HandleJoystick(int axis, int x, int y, double delta) { if (Math_AbsI(x) <= 8) x = 0; if (Math_AbsI(y) <= 8) y = 0; - if (x == 0 && y == 0) return; - Input.JoystickMovement = true; - Input.JoystickAngle = Math_Atan2(x, -y); -} - -static void HandleJoystick_Right(int x, int y, double delta) { - //Platform_Log2("Right: %i, %i", &x, &y); - float scale = (delta * 60.0) / 16.0f; - - if (Math_AbsI(x) <= 8) x = 0; - if (Math_AbsI(y) <= 8) y = 0; - - Event_RaiseRawMove(&ControllerEvents.RawMoved, x * scale, y * scale); + Gamepad_SetAxis(axis, x / AXIS_SCALE, y / AXIS_SCALE, delta); } static void ProcessPadInput(PADTYPE* pad, double delta) { HandleButtons(pad->btn); if (pad->type == PAD_ID_ANALOG_STICK || pad->type == PAD_ID_ANALOG) { - HandleJoystick_Left( pad->ls_x - 0x80, pad->ls_y - 0x80); - HandleJoystick_Right(pad->rs_x - 0x80, pad->rs_y - 0x80, delta); + HandleJoystick(PAD_AXIS_LEFT, pad->ls_x - 0x80, pad->ls_y - 0x80, delta); + HandleJoystick(PAD_AXIS_RIGHT, pad->rs_x - 0x80, pad->rs_y - 0x80, delta); } } diff --git a/src/Window_PS2.c b/src/Window_PS2.c index c8bbb574e..6746d86c5 100644 --- a/src/Window_PS2.c +++ b/src/Window_PS2.c @@ -90,49 +90,37 @@ static void HandleButtons(int buttons) { buttons = buttons ^ 0xFFFF; //Platform_Log1("BUTTONS: %h", &buttons); - Input_SetNonRepeatable(CCPAD_A, buttons & PAD_TRIANGLE); - Input_SetNonRepeatable(CCPAD_B, buttons & PAD_SQUARE); - Input_SetNonRepeatable(CCPAD_X, buttons & PAD_CROSS); - Input_SetNonRepeatable(CCPAD_Y, buttons & PAD_CIRCLE); + Gamepad_SetButton(CCPAD_A, buttons & PAD_TRIANGLE); + Gamepad_SetButton(CCPAD_B, buttons & PAD_SQUARE); + Gamepad_SetButton(CCPAD_X, buttons & PAD_CROSS); + Gamepad_SetButton(CCPAD_Y, buttons & PAD_CIRCLE); - Input_SetNonRepeatable(CCPAD_START, buttons & PAD_START); - Input_SetNonRepeatable(CCPAD_SELECT, buttons & PAD_SELECT); + Gamepad_SetButton(CCPAD_START, buttons & PAD_START); + Gamepad_SetButton(CCPAD_SELECT, buttons & PAD_SELECT); - Input_SetNonRepeatable(CCPAD_LEFT, buttons & PAD_LEFT); - Input_SetNonRepeatable(CCPAD_RIGHT, buttons & PAD_RIGHT); - Input_SetNonRepeatable(CCPAD_UP, buttons & PAD_UP); - Input_SetNonRepeatable(CCPAD_DOWN, buttons & PAD_DOWN); + Gamepad_SetButton(CCPAD_LEFT, buttons & PAD_LEFT); + Gamepad_SetButton(CCPAD_RIGHT, buttons & PAD_RIGHT); + Gamepad_SetButton(CCPAD_UP, buttons & PAD_UP); + Gamepad_SetButton(CCPAD_DOWN, buttons & PAD_DOWN); - Input_SetNonRepeatable(CCPAD_L, buttons & PAD_L1); - Input_SetNonRepeatable(CCPAD_R, buttons & PAD_R1); - Input_SetNonRepeatable(CCPAD_ZL, buttons & PAD_L2); - Input_SetNonRepeatable(CCPAD_ZR, buttons & PAD_R2); + Gamepad_SetButton(CCPAD_L, buttons & PAD_L1); + Gamepad_SetButton(CCPAD_R, buttons & PAD_R1); + Gamepad_SetButton(CCPAD_ZL, buttons & PAD_L2); + Gamepad_SetButton(CCPAD_ZR, buttons & PAD_R2); } -static void HandleJoystick_Left(int x, int y) { - //Platform_Log2("LEFT: %i, %i", &x, &y); +#define AXIS_SCALE 16.0f +static void HandleJoystick(int axis, int x, int y, double delta) { if (Math_AbsI(x) <= 8) x = 0; if (Math_AbsI(y) <= 8) y = 0; - if (x == 0 && y == 0) return; - Input.JoystickMovement = true; - Input.JoystickAngle = Math_Atan2(x, -y); -} - -static void HandleJoystick_Right(int x, int y, double delta) { - //Platform_Log2("Right: %i, %i", &x, &y); - float scale = (delta * 60.0) / 16.0f; - - if (Math_AbsI(x) <= 8) x = 0; - if (Math_AbsI(y) <= 8) y = 0; - - Event_RaiseRawMove(&ControllerEvents.RawMoved, x * scale, y * scale); + Gamepad_SetAxis(axis, x / AXIS_SCALE, y / AXIS_SCALE, delta); } static void ProcessPadInput(double delta, struct padButtonStatus* pad) { HandleButtons(pad->btns); - HandleJoystick_Left( pad->ljoy_h - 0x80, pad->ljoy_v - 0x80); - HandleJoystick_Right(pad->rjoy_h - 0x80, pad->rjoy_v - 0x80, delta); + HandleJoystick(PAD_AXIS_LEFT, pad->ljoy_h - 0x80, pad->ljoy_v - 0x80, delta); + HandleJoystick(PAD_AXIS_RIGHT, pad->rjoy_h - 0x80, pad->rjoy_v - 0x80, delta); } static cc_bool setMode; diff --git a/src/Window_PS3.c b/src/Window_PS3.c index 8caf2adb0..e500350dc 100644 --- a/src/Window_PS3.c +++ b/src/Window_PS3.c @@ -243,50 +243,39 @@ static void ProcessKBTextInput(void) { *#########################################################################################################################*/ static void HandleButtons(padData* data) { //Platform_Log2("BUTTONS: %h (%h)", &data->button[2], &data->button[0]); - Input_SetNonRepeatable(CCPAD_A, data->BTN_TRIANGLE); - Input_SetNonRepeatable(CCPAD_B, data->BTN_SQUARE); - Input_SetNonRepeatable(CCPAD_X, data->BTN_CROSS); - Input_SetNonRepeatable(CCPAD_Y, data->BTN_CIRCLE); + Gamepad_SetButton(CCPAD_A, data->BTN_TRIANGLE); + Gamepad_SetButton(CCPAD_B, data->BTN_SQUARE); + Gamepad_SetButton(CCPAD_X, data->BTN_CROSS); + Gamepad_SetButton(CCPAD_Y, data->BTN_CIRCLE); - Input_SetNonRepeatable(CCPAD_START, data->BTN_START); - Input_SetNonRepeatable(CCPAD_SELECT, data->BTN_SELECT); + Gamepad_SetButton(CCPAD_START, data->BTN_START); + Gamepad_SetButton(CCPAD_SELECT, data->BTN_SELECT); - Input_SetNonRepeatable(CCPAD_LEFT, data->BTN_LEFT); - Input_SetNonRepeatable(CCPAD_RIGHT, data->BTN_RIGHT); - Input_SetNonRepeatable(CCPAD_UP, data->BTN_UP); - Input_SetNonRepeatable(CCPAD_DOWN, data->BTN_DOWN); + Gamepad_SetButton(CCPAD_LEFT, data->BTN_LEFT); + Gamepad_SetButton(CCPAD_RIGHT, data->BTN_RIGHT); + Gamepad_SetButton(CCPAD_UP, data->BTN_UP); + Gamepad_SetButton(CCPAD_DOWN, data->BTN_DOWN); - Input_SetNonRepeatable(CCPAD_L, data->BTN_L1); - Input_SetNonRepeatable(CCPAD_R, data->BTN_R1); - Input_SetNonRepeatable(CCPAD_ZL, data->BTN_L2); - Input_SetNonRepeatable(CCPAD_ZR, data->BTN_R2); + Gamepad_SetButton(CCPAD_L, data->BTN_L1); + Gamepad_SetButton(CCPAD_R, data->BTN_R1); + Gamepad_SetButton(CCPAD_ZL, data->BTN_L2); + Gamepad_SetButton(CCPAD_ZR, data->BTN_R2); } -static void HandleJoystick_Left(int x, int y) { +#define AXIS_SCALE 32.0f +static void HandleJoystick(int axis, int x, int y, double delta) { if (Math_AbsI(x) <= 32) x = 0; if (Math_AbsI(y) <= 32) y = 0; - if (x == 0 && y == 0) return; - Input.JoystickMovement = true; - Input.JoystickAngle = Math_Atan2(x, -y); -} - -static void HandleJoystick_Right(int x, int y, double delta) { - float scale = (delta * 60.0) / 32.0f; - - if (Math_AbsI(x) <= 32) x = 0; - if (Math_AbsI(y) <= 32) y = 0; - - Event_RaiseRawMove(&ControllerEvents.RawMoved, x * scale, y * scale); + Gamepad_SetAxis(axis, x / AXIS_SCALE, y / AXIS_SCALE, delta); } static void ProcessPadInput(double delta, padData* pad) { HandleButtons(pad); - HandleJoystick_Left( pad->ANA_L_H - 0x80, pad->ANA_L_V - 0x80); - HandleJoystick_Right(pad->ANA_R_H - 0x80, pad->ANA_R_V - 0x80, delta); + HandleJoystick(AXIS_PAD_LEFT, pad->ANA_L_H - 0x80, pad->ANA_L_V - 0x80, delta); + HandleJoystick(AXIS_PAD_RIGHT, pad->ANA_R_H - 0x80, pad->ANA_R_V - 0x80, delta); } - void Window_ProcessEvents(double delta) { Input.JoystickMovement = false; diff --git a/src/Window_PSP.c b/src/Window_PSP.c index 0710b1293..7171c16b1 100644 --- a/src/Window_PSP.c +++ b/src/Window_PSP.c @@ -68,32 +68,32 @@ void Window_RequestClose(void) { *----------------------------------------------------Input processing-----------------------------------------------------* *#########################################################################################################################*/ static void HandleButtons(int mods) { - Input_SetNonRepeatable(CCPAD_L, mods & PSP_CTRL_LTRIGGER); - Input_SetNonRepeatable(CCPAD_R, mods & PSP_CTRL_RTRIGGER); + Gamepad_SetButton(CCPAD_L, mods & PSP_CTRL_LTRIGGER); + Gamepad_SetButton(CCPAD_R, mods & PSP_CTRL_RTRIGGER); - Input_SetNonRepeatable(CCPAD_A, mods & PSP_CTRL_TRIANGLE); - Input_SetNonRepeatable(CCPAD_B, mods & PSP_CTRL_SQUARE); - Input_SetNonRepeatable(CCPAD_X, mods & PSP_CTRL_CROSS); - Input_SetNonRepeatable(CCPAD_Y, mods & PSP_CTRL_CIRCLE); + Gamepad_SetButton(CCPAD_A, mods & PSP_CTRL_TRIANGLE); + Gamepad_SetButton(CCPAD_B, mods & PSP_CTRL_SQUARE); + Gamepad_SetButton(CCPAD_X, mods & PSP_CTRL_CROSS); + Gamepad_SetButton(CCPAD_Y, mods & PSP_CTRL_CIRCLE); - Input_SetNonRepeatable(CCPAD_START, mods & PSP_CTRL_START); - Input_SetNonRepeatable(CCPAD_SELECT, mods & PSP_CTRL_SELECT); + Gamepad_SetButton(CCPAD_START, mods & PSP_CTRL_START); + Gamepad_SetButton(CCPAD_SELECT, mods & PSP_CTRL_SELECT); - Input_SetNonRepeatable(CCPAD_LEFT, mods & PSP_CTRL_LEFT); - Input_SetNonRepeatable(CCPAD_RIGHT, mods & PSP_CTRL_RIGHT); - Input_SetNonRepeatable(CCPAD_UP, mods & PSP_CTRL_UP); - Input_SetNonRepeatable(CCPAD_DOWN, mods & PSP_CTRL_DOWN); + Gamepad_SetButton(CCPAD_LEFT, mods & PSP_CTRL_LEFT); + Gamepad_SetButton(CCPAD_RIGHT, mods & PSP_CTRL_RIGHT); + Gamepad_SetButton(CCPAD_UP, mods & PSP_CTRL_UP); + Gamepad_SetButton(CCPAD_DOWN, mods & PSP_CTRL_DOWN); } +#define AXIS_SCALE 16.0f static void ProcessCircleInput(SceCtrlData* pad, double delta) { - float scale = (delta * 60.0) / 16.0f; - int dx = pad->Lx - 127; - int dy = pad->Ly - 127; + int x = pad->Lx - 127; + int y = pad->Ly - 127; - if (Math_AbsI(dx) <= 8) dx = 0; - if (Math_AbsI(dy) <= 8) dy = 0; + if (Math_AbsI(x) <= 8) x = 0; + if (Math_AbsI(y) <= 8) y = 0; - Event_RaiseRawMove(&ControllerEvents.RawMoved, dx * scale, dy * scale); + Gamepad_SetAxis(PAD_AXIS_RIGHT, x / AXIS_SCALE, y / AXIS_SCALE, delta); } void Window_ProcessEvents(double delta) { @@ -104,8 +104,7 @@ void Window_ProcessEvents(double delta) { // TODO: need to use cached version still? like GameCube/Wii HandleButtons(pad.Buttons); - if (Input.RawMode) - ProcessCircleInput(&pad, delta); + ProcessCircleInput(&pad, delta); } void Cursor_SetPosition(int x, int y) { } // Makes no sense for PSP diff --git a/src/Window_PSVita.c b/src/Window_PSVita.c index bef1094ed..e7540d7d8 100644 --- a/src/Window_PSVita.c +++ b/src/Window_PSVita.c @@ -87,44 +87,30 @@ void Window_RequestClose(void) { *----------------------------------------------------Input processing-----------------------------------------------------* *#########################################################################################################################*/ static void HandleButtons(int mods) { - Input_SetNonRepeatable(CCPAD_A, mods & SCE_CTRL_TRIANGLE); - Input_SetNonRepeatable(CCPAD_B, mods & SCE_CTRL_SQUARE); - Input_SetNonRepeatable(CCPAD_X, mods & SCE_CTRL_CROSS); - Input_SetNonRepeatable(CCPAD_Y, mods & SCE_CTRL_CIRCLE); + Gamepad_SetButton(CCPAD_A, mods & SCE_CTRL_TRIANGLE); + Gamepad_SetButton(CCPAD_B, mods & SCE_CTRL_SQUARE); + Gamepad_SetButton(CCPAD_X, mods & SCE_CTRL_CROSS); + Gamepad_SetButton(CCPAD_Y, mods & SCE_CTRL_CIRCLE); - Input_SetNonRepeatable(CCPAD_START, mods & SCE_CTRL_START); - Input_SetNonRepeatable(CCPAD_SELECT, mods & SCE_CTRL_SELECT); + Gamepad_SetButton(CCPAD_START, mods & SCE_CTRL_START); + Gamepad_SetButton(CCPAD_SELECT, mods & SCE_CTRL_SELECT); - Input_SetNonRepeatable(CCPAD_LEFT, mods & SCE_CTRL_LEFT); - Input_SetNonRepeatable(CCPAD_RIGHT, mods & SCE_CTRL_RIGHT); - Input_SetNonRepeatable(CCPAD_UP, mods & SCE_CTRL_UP); - Input_SetNonRepeatable(CCPAD_DOWN, mods & SCE_CTRL_DOWN); + Gamepad_SetButton(CCPAD_LEFT, mods & SCE_CTRL_LEFT); + Gamepad_SetButton(CCPAD_RIGHT, mods & SCE_CTRL_RIGHT); + Gamepad_SetButton(CCPAD_UP, mods & SCE_CTRL_UP); + Gamepad_SetButton(CCPAD_DOWN, mods & SCE_CTRL_DOWN); - Input_SetNonRepeatable(CCPAD_L, mods & SCE_CTRL_LTRIGGER); - Input_SetNonRepeatable(CCPAD_R, mods & SCE_CTRL_RTRIGGER); + Gamepad_SetButton(CCPAD_L, mods & SCE_CTRL_LTRIGGER); + Gamepad_SetButton(CCPAD_R, mods & SCE_CTRL_RTRIGGER); } -static void ProcessLCircleInput(SceCtrlData* pad) { - int dx = pad->lx - 127; - int dy = pad->ly - 127; +#define AXIS_SCALE 16.0f +static void ProcessCircleInput(int axis, int x, int y, double delta) { + // May not be exactly 0 on actual hardware + if (Math_AbsI(x) <= 8) x = 0; + if (Math_AbsI(y) <= 8) y = 0; - if (Math_AbsI(dx) <= 8) dx = 0; - if (Math_AbsI(dy) <= 8) dy = 0; - - if (dx == 0 && dy == 0) return; - Input.JoystickMovement = true; - Input.JoystickAngle = Math_Atan2(dx, dy); -} - -static void ProcessRCircleInput(SceCtrlData* pad, double delta) { - float scale = (delta * 60.0) / 16.0f; - int dx = pad->rx - 127; - int dy = pad->ry - 127; - - if (Math_AbsI(dx) <= 8) dx = 0; - if (Math_AbsI(dy) <= 8) dy = 0; - - Event_RaiseRawMove(&ControllerEvents.RawMoved, dx * scale, dy * scale); + Gamepad_SetAxis(axis, x / AXIS_SCALE, y / AXIS_SCALE, delta); } static void AdjustTouchPress(int* x, int* y) { @@ -170,10 +156,8 @@ static void ProcessPadInput(double delta) { // TODO: need to use cached version still? like GameCube/Wii HandleButtons(pad.buttons); - if (Input.RawMode) { - ProcessLCircleInput(&pad); - ProcessRCircleInput(&pad, delta); - } + ProcessCircleInput(PAD_AXIS_LEFT, pad.lx - 127, pad.ly - 127, delta); + ProcessCircleInput(PAD_AXIS_RIGHT, pad.rx - 127, pad.ry - 127, delta); } void Window_ProcessEvents(double delta) { diff --git a/src/Window_Switch.c b/src/Window_Switch.c index d45708346..23195ff2b 100644 --- a/src/Window_Switch.c +++ b/src/Window_Switch.c @@ -108,39 +108,30 @@ void Window_RequestClose(void) { *----------------------------------------------------Input processing-----------------------------------------------------* *#########################################################################################################################*/ static void HandleButtons(u64 mods) { - Input_SetNonRepeatable(CCPAD_L, mods & HidNpadButton_L); - Input_SetNonRepeatable(CCPAD_R, mods & HidNpadButton_R); + Gamepad_SetButton(CCPAD_L, mods & HidNpadButton_L); + Gamepad_SetButton(CCPAD_R, mods & HidNpadButton_R); - Input_SetNonRepeatable(CCPAD_A, mods & HidNpadButton_A); - Input_SetNonRepeatable(CCPAD_B, mods & HidNpadButton_B); - Input_SetNonRepeatable(CCPAD_X, mods & HidNpadButton_X); - Input_SetNonRepeatable(CCPAD_Y, mods & HidNpadButton_Y); + Gamepad_SetButton(CCPAD_A, mods & HidNpadButton_A); + Gamepad_SetButton(CCPAD_B, mods & HidNpadButton_B); + Gamepad_SetButton(CCPAD_X, mods & HidNpadButton_X); + Gamepad_SetButton(CCPAD_Y, mods & HidNpadButton_Y); - Input_SetNonRepeatable(CCPAD_START, mods & HidNpadButton_Plus); - Input_SetNonRepeatable(CCPAD_SELECT, mods & HidNpadButton_Minus); + Gamepad_SetButton(CCPAD_START, mods & HidNpadButton_Plus); + Gamepad_SetButton(CCPAD_SELECT, mods & HidNpadButton_Minus); - Input_SetNonRepeatable(CCPAD_LEFT, mods & HidNpadButton_Left); - Input_SetNonRepeatable(CCPAD_RIGHT, mods & HidNpadButton_Right); - Input_SetNonRepeatable(CCPAD_UP, mods & HidNpadButton_Up); - Input_SetNonRepeatable(CCPAD_DOWN, mods & HidNpadButton_Down); + Gamepad_SetButton(CCPAD_LEFT, mods & HidNpadButton_Left); + Gamepad_SetButton(CCPAD_RIGHT, mods & HidNpadButton_Right); + Gamepad_SetButton(CCPAD_UP, mods & HidNpadButton_Up); + Gamepad_SetButton(CCPAD_DOWN, mods & HidNpadButton_Down); } -static void ProcessJoystickInput_L(HidAnalogStickState* pos) { +#define AXIS_SCALE 512.0f +static void ProcessJoystickInput(int axis, HidAnalogStickState* pos, double delta) { // May not be exactly 0 on actual hardware if (Math_AbsI(pos->x) <= 16) pos->x = 0; if (Math_AbsI(pos->y) <= 16) pos->y = 0; - Input.JoystickMovement = (pos->x != 0 || pos->y != 0); - if (!Input.JoystickMovement) return; - Input.JoystickAngle = Math_Atan2(pos->x, -pos->y); -} - -static void ProcessJoystickInput_R(HidAnalogStickState* pos) { - // May not be exactly 0 on actual hardware - if (Math_AbsI(pos->x) <= 16) pos->x = 0; - if (Math_AbsI(pos->y) <= 16) pos->y = 0; - - Event_RaiseRawMove(&ControllerEvents.RawMoved, pos->x / 512.f, -pos->y / 512.f); + Gamepad_SetAxis(axis, x / AXIS_SCALE, -y / AXIS_SCALE, delta); } static void ProcessTouchInput(void) { @@ -179,8 +170,8 @@ void Window_ProcessEvents(double delta) { // Read the sticks' position HidAnalogStickState analog_stick_l = padGetStickPos(&pad, 0); HidAnalogStickState analog_stick_r = padGetStickPos(&pad, 1); - ProcessJoystickInput_L(&analog_stick_l); - ProcessJoystickInput_R(&analog_stick_r); + ProcessJoystickInput(PAD_AXIS_LEFT, &analog_stick_l, delta); + ProcessJoystickInput(PAD_AXIS_RIGHT, &analog_stick_r, delta); ProcessTouchInput(); } diff --git a/src/Window_Web.c b/src/Window_Web.c index f51bbedae..054589b60 100644 --- a/src/Window_Web.c +++ b/src/Window_Web.c @@ -534,46 +534,34 @@ static void ProcessPendingResize(void) { static void ProcessGamepadButtons(EmscriptenGamepadEvent* ev) { int numButtons = ev->numButtons; - Input_SetNonRepeatable(CCPAD_A, GetGamepadButton(0)); - Input_SetNonRepeatable(CCPAD_B, GetGamepadButton(1)); - Input_SetNonRepeatable(CCPAD_X, GetGamepadButton(2)); - Input_SetNonRepeatable(CCPAD_Y, GetGamepadButton(3)); - - Input_SetNonRepeatable(CCPAD_ZL, GetGamepadButton(4)); - Input_SetNonRepeatable(CCPAD_ZR, GetGamepadButton(5)); - Input_SetNonRepeatable(CCPAD_L, GetGamepadButton(6)); - Input_SetNonRepeatable(CCPAD_R, GetGamepadButton(7)); - - Input_SetNonRepeatable(CCPAD_SELECT, GetGamepadButton( 8)); - Input_SetNonRepeatable(CCPAD_START, GetGamepadButton( 9)); - Input_SetNonRepeatable(CCPAD_LSTICK, GetGamepadButton(10)); - Input_SetNonRepeatable(CCPAD_RSTICK, GetGamepadButton(11)); + Gamepad_SetButton(CCPAD_A, GetGamepadButton(0)); + Gamepad_SetButton(CCPAD_B, GetGamepadButton(1)); + Gamepad_SetButton(CCPAD_X, GetGamepadButton(2)); + Gamepad_SetButton(CCPAD_Y, GetGamepadButton(3)); + + Gamepad_SetButton(CCPAD_ZL, GetGamepadButton(4)); + Gamepad_SetButton(CCPAD_ZR, GetGamepadButton(5)); + Gamepad_SetButton(CCPAD_L, GetGamepadButton(6)); + Gamepad_SetButton(CCPAD_R, GetGamepadButton(7)); + + Gamepad_SetButton(CCPAD_SELECT, GetGamepadButton( 8)); + Gamepad_SetButton(CCPAD_START, GetGamepadButton( 9)); + Gamepad_SetButton(CCPAD_LSTICK, GetGamepadButton(10)); + Gamepad_SetButton(CCPAD_RSTICK, GetGamepadButton(11)); - Input_SetNonRepeatable(CCPAD_UP, GetGamepadButton(12)); - Input_SetNonRepeatable(CCPAD_DOWN, GetGamepadButton(13)); - Input_SetNonRepeatable(CCPAD_LEFT, GetGamepadButton(14)); - Input_SetNonRepeatable(CCPAD_RIGHT, GetGamepadButton(15)); + Gamepad_SetButton(CCPAD_UP, GetGamepadButton(12)); + Gamepad_SetButton(CCPAD_DOWN, GetGamepadButton(13)); + Gamepad_SetButton(CCPAD_LEFT, GetGamepadButton(14)); + Gamepad_SetButton(CCPAD_RIGHT, GetGamepadButton(15)); } -static void ProcessGamepadCamera(float x, float y, double delta) { - float scale = (delta * 60.0) * 8.0f; - - /* Deadzone adjustment */ - if (x >= -0.1 && x <= 0.1) x = 0; - if (y >= -0.1 && y <= 0.1) y = 0; - if (x == 0 && y == 0) return; - - Event_RaiseRawMove(&ControllerEvents.RawMoved, x * scale, y * scale); -} - -static void ProcessGamepadMovement(float x, float y) { +#define AXIS_SCALE 8.0f +static void ProcessGamepadAxis(int axis, float x, float y, double delta) { /* Deadzone adjustment */ if (x >= -0.1 && x <= 0.1) x = 0; if (y >= -0.1 && y <= 0.1) y = 0; - if (x == 0 && y == 0) return; - Input.JoystickMovement = true; - Input.JoystickAngle = Math_Atan2(x, y); + Gamepad_SetAxis(axis, x * AXIS_SCALE, y * AXIS_SCALE, delta); } static void ProcessGamepadInput(EmscriptenGamepadEvent* ev, double delta) { @@ -582,10 +570,10 @@ static void ProcessGamepadInput(EmscriptenGamepadEvent* ev, double delta) { ProcessGamepadButtons(ev); if (ev->numAxes >= 4) { - ProcessGamepadMovement(ev->axis[0], ev->axis[1]); - ProcessGamepadCamera( ev->axis[2], ev->axis[3], delta); + ProcessGamepadAxis(PAD_AXIS_LEFT, ev->axis[0], ev->axis[1], delta); + ProcessGamepadAxis(PAD_AXIS_RIGHT, ev->axis[2], ev->axis[3], delta); } else if (ev->numAxes >= 2) { - ProcessGamepadCamera(ev->axis[0], ev->axis[1], delta); + ProcessGamepadAxis(PAD_AXIS_RIGHT, ev->axis[0], ev->axis[1], delta); } } diff --git a/src/Window_WiiU.c b/src/Window_WiiU.c index f910abdc6..f3a09fbb2 100644 --- a/src/Window_WiiU.c +++ b/src/Window_WiiU.c @@ -78,23 +78,23 @@ void Window_RequestClose(void) { } static void ProcessVpadButtons(int mods) { - Input_SetNonRepeatable(CCPAD_L, mods & VPAD_BUTTON_L); - Input_SetNonRepeatable(CCPAD_R, mods & VPAD_BUTTON_R); - Input_SetNonRepeatable(CCPAD_ZL, mods & VPAD_BUTTON_ZL); - Input_SetNonRepeatable(CCPAD_ZR, mods & VPAD_BUTTON_ZR); + Gamepad_SetButton(CCPAD_L, mods & VPAD_BUTTON_L); + Gamepad_SetButton(CCPAD_R, mods & VPAD_BUTTON_R); + Gamepad_SetButton(CCPAD_ZL, mods & VPAD_BUTTON_ZL); + Gamepad_SetButton(CCPAD_ZR, mods & VPAD_BUTTON_ZR); - Input_SetNonRepeatable(CCPAD_A, mods & VPAD_BUTTON_A); - Input_SetNonRepeatable(CCPAD_B, mods & VPAD_BUTTON_B); - Input_SetNonRepeatable(CCPAD_X, mods & VPAD_BUTTON_X); - Input_SetNonRepeatable(CCPAD_Y, mods & VPAD_BUTTON_Y); + Gamepad_SetButton(CCPAD_A, mods & VPAD_BUTTON_A); + Gamepad_SetButton(CCPAD_B, mods & VPAD_BUTTON_B); + Gamepad_SetButton(CCPAD_X, mods & VPAD_BUTTON_X); + Gamepad_SetButton(CCPAD_Y, mods & VPAD_BUTTON_Y); - Input_SetNonRepeatable(CCPAD_START, mods & VPAD_BUTTON_PLUS); - Input_SetNonRepeatable(CCPAD_SELECT, mods & VPAD_BUTTON_MINUS); + Gamepad_SetButton(CCPAD_START, mods & VPAD_BUTTON_PLUS); + Gamepad_SetButton(CCPAD_SELECT, mods & VPAD_BUTTON_MINUS); - Input_SetNonRepeatable(CCPAD_LEFT, mods & VPAD_BUTTON_LEFT); - Input_SetNonRepeatable(CCPAD_RIGHT, mods & VPAD_BUTTON_RIGHT); - Input_SetNonRepeatable(CCPAD_UP, mods & VPAD_BUTTON_UP); - Input_SetNonRepeatable(CCPAD_DOWN, mods & VPAD_BUTTON_DOWN); + Gamepad_SetButton(CCPAD_LEFT, mods & VPAD_BUTTON_LEFT); + Gamepad_SetButton(CCPAD_RIGHT, mods & VPAD_BUTTON_RIGHT); + Gamepad_SetButton(CCPAD_UP, mods & VPAD_BUTTON_UP); + Gamepad_SetButton(CCPAD_DOWN, mods & VPAD_BUTTON_DOWN); } @@ -186,4 +186,4 @@ cc_result Window_OpenFileDialog(const struct OpenFileDialogArgs* args) { cc_result Window_SaveFileDialog(const struct SaveFileDialogArgs* args) { return ERR_NOT_SUPPORTED; } -#endif \ No newline at end of file +#endif diff --git a/src/Window_Xbox.c b/src/Window_Xbox.c index af156d201..7dec35273 100644 --- a/src/Window_Xbox.c +++ b/src/Window_Xbox.c @@ -120,43 +120,33 @@ void Window_RequestClose(void) { static void HandleButtons(xid_gamepad_in* gp) { int mods = gp->dButtons; - Input_SetNonRepeatable(CCPAD_L, gp->l > 0x7F); - Input_SetNonRepeatable(CCPAD_R, gp->r > 0x7F); - Input_SetNonRepeatable(CCPAD_ZL, gp->white > 0x7F); - Input_SetNonRepeatable(CCPAD_ZR, gp->black > 0x7F); + Gamepad_SetButton(CCPAD_L, gp->l > 0x7F); + Gamepad_SetButton(CCPAD_R, gp->r > 0x7F); + Gamepad_SetButton(CCPAD_ZL, gp->white > 0x7F); + Gamepad_SetButton(CCPAD_ZR, gp->black > 0x7F); - Input_SetNonRepeatable(CCPAD_A, gp->a > 0x7F); - Input_SetNonRepeatable(CCPAD_B, gp->b > 0x7F); - Input_SetNonRepeatable(CCPAD_X, gp->x > 0x7F); - Input_SetNonRepeatable(CCPAD_Y, gp->y > 0x7F); + Gamepad_SetButton(CCPAD_A, gp->a > 0x7F); + Gamepad_SetButton(CCPAD_B, gp->b > 0x7F); + Gamepad_SetButton(CCPAD_X, gp->x > 0x7F); + Gamepad_SetButton(CCPAD_Y, gp->y > 0x7F); - Input_SetNonRepeatable(CCPAD_START, mods & XINPUT_GAMEPAD_START); - Input_SetNonRepeatable(CCPAD_SELECT, mods & XINPUT_GAMEPAD_BACK); - Input_SetNonRepeatable(CCPAD_LSTICK, mods & XINPUT_GAMEPAD_LEFT_THUMB); - Input_SetNonRepeatable(CCPAD_RSTICK, mods & XINPUT_GAMEPAD_RIGHT_THUMB); + Gamepad_SetButton(CCPAD_START, mods & XINPUT_GAMEPAD_START); + Gamepad_SetButton(CCPAD_SELECT, mods & XINPUT_GAMEPAD_BACK); + Gamepad_SetButton(CCPAD_LSTICK, mods & XINPUT_GAMEPAD_LEFT_THUMB); + Gamepad_SetButton(CCPAD_RSTICK, mods & XINPUT_GAMEPAD_RIGHT_THUMB); - Input_SetNonRepeatable(CCPAD_LEFT, mods & XINPUT_GAMEPAD_DPAD_LEFT); - Input_SetNonRepeatable(CCPAD_RIGHT, mods & XINPUT_GAMEPAD_DPAD_RIGHT); - Input_SetNonRepeatable(CCPAD_UP, mods & XINPUT_GAMEPAD_DPAD_UP); - Input_SetNonRepeatable(CCPAD_DOWN, mods & XINPUT_GAMEPAD_DPAD_DOWN); + Gamepad_SetButton(CCPAD_LEFT, mods & XINPUT_GAMEPAD_DPAD_LEFT); + Gamepad_SetButton(CCPAD_RIGHT, mods & XINPUT_GAMEPAD_DPAD_RIGHT); + Gamepad_SetButton(CCPAD_UP, mods & XINPUT_GAMEPAD_DPAD_UP); + Gamepad_SetButton(CCPAD_DOWN, mods & XINPUT_GAMEPAD_DPAD_DOWN); } -static void HandleJoystick_Left(int x, int y) { +#define AXIS_SCALE 8192.0f +static void HandleJoystick(int axis, int x, int y, double delta) { if (Math_AbsI(x) <= 512) x = 0; if (Math_AbsI(y) <= 512) y = 0; - if (x == 0 && y == 0) return; - Input.JoystickMovement = true; - Input.JoystickAngle = Math_Atan2(x, -y); -} - -static void HandleJoystick_Right(int x, int y, double delta) { - float scale = (delta * 60.0) / 8192.0f; - - if (Math_AbsI(x) <= 512) x = 0; - if (Math_AbsI(y) <= 512) y = 0; - - Event_RaiseRawMove(&ControllerEvents.RawMoved, x * scale, -y * scale); + Gamepad_SetAxis(axis, x / AXIS_SCALE, -y / AXIS_SCALE, delta); } void Window_ProcessEvents(double delta) { @@ -165,8 +155,8 @@ void Window_ProcessEvents(double delta) { if (!xid_ctrl) return; HandleButtons(&gp_state); - HandleJoystick_Left( gp_state.leftStickX, gp_state.leftStickY ); - HandleJoystick_Right(gp_state.rightStickX, gp_state.rightStickY, delta); + HandleJoystick(PAD_AXIS_LEFT, gp_state.leftStickX, gp_state.leftStickY, delta); + HandleJoystick(PAD_AXIS_RIGHT, gp_state.rightStickX, gp_state.rightStickY, delta); } void Cursor_SetPosition(int x, int y) { } // Makes no sense for Xbox diff --git a/src/Window_Xbox360.c b/src/Window_Xbox360.c index 64cbf8fbb..5f438baa3 100644 --- a/src/Window_Xbox360.c +++ b/src/Window_Xbox360.c @@ -87,21 +87,21 @@ struct controller_data_s */ static void HandleButtons(struct controller_data_s* pad) { - Input_SetNonRepeatable(CCPAD_L, pad->lb); - Input_SetNonRepeatable(CCPAD_R, pad->rb); + Gamepad_SetButton(CCPAD_L, pad->lb); + Gamepad_SetButton(CCPAD_R, pad->rb); - Input_SetNonRepeatable(CCPAD_A, pad->a); - Input_SetNonRepeatable(CCPAD_B, pad->b); - Input_SetNonRepeatable(CCPAD_X, pad->x); - Input_SetNonRepeatable(CCPAD_Y, pad->y); + Gamepad_SetButton(CCPAD_A, pad->a); + Gamepad_SetButton(CCPAD_B, pad->b); + Gamepad_SetButton(CCPAD_X, pad->x); + Gamepad_SetButton(CCPAD_Y, pad->y); - Input_SetNonRepeatable(CCPAD_START, pad->start); - Input_SetNonRepeatable(CCPAD_SELECT, pad->back); + Gamepad_SetButton(CCPAD_START, pad->start); + Gamepad_SetButton(CCPAD_SELECT, pad->back); - Input_SetNonRepeatable(CCPAD_LEFT, pad->left); - Input_SetNonRepeatable(CCPAD_RIGHT, pad->right); - Input_SetNonRepeatable(CCPAD_UP, pad->up); - Input_SetNonRepeatable(CCPAD_DOWN, pad->down); + Gamepad_SetButton(CCPAD_LEFT, pad->left); + Gamepad_SetButton(CCPAD_RIGHT, pad->right); + Gamepad_SetButton(CCPAD_UP, pad->up); + Gamepad_SetButton(CCPAD_DOWN, pad->down); } void Window_ProcessEvents(double delta) { From e5ef11d6bb05fb72f3b13de8504427a65e3c596e Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Mon, 1 Apr 2024 10:29:36 +1100 Subject: [PATCH 24/41] Gamepad: Buttons can now be held down to periodically trigger them every second --- src/Audio.c | 1 - src/Game.c | 2 ++ src/Input.c | 22 ++++++++++++++++++++++ src/Input.h | 1 + src/Window_3DS.c | 15 ++++----------- src/Window_Dreamcast.c | 2 +- src/Window_NDS.c | 16 ++++------------ src/Window_PS3.c | 4 ++-- src/Window_Switch.c | 21 +++++++-------------- src/_WindowBase.h | 6 +++--- 10 files changed, 46 insertions(+), 44 deletions(-) diff --git a/src/Audio.c b/src/Audio.c index 407492f46..3c3a042d8 100644 --- a/src/Audio.c +++ b/src/Audio.c @@ -269,7 +269,6 @@ static void InitWebSounds(void) { static cc_bool sounds_loaded; static void Sounds_Start(void) { - int i; if (!AudioBackend_Init()) { AudioBackend_Free(); Audio_SoundsVolume = 0; diff --git a/src/Game.c b/src/Game.c index e813b4b6e..9e271cbdb 100644 --- a/src/Game.c +++ b/src/Game.c @@ -637,7 +637,9 @@ static void Game_RenderFrame(double delta) { Game.Time += delta; Game_Vertices = 0; + if (Input.Sources & INPUT_SOURCE_GAMEPAD) Gamepad_Tick(delta); Camera.Active->UpdateMouse(delta); + if (!Window_Main.Focused && !Gui.InputGrab) Gui_ShowPauseMenu(); if (KeyBind_IsPressed(KEYBIND_ZOOM_SCROLL) && !Gui.InputGrab) { diff --git a/src/Input.c b/src/Input.c index 122b0abd5..fd4589c0d 100644 --- a/src/Input.c +++ b/src/Input.c @@ -417,7 +417,13 @@ static void KeyBind_Init(void) { /*########################################################################################################################* *---------------------------------------------------------Gamepad---------------------------------------------------------* *#########################################################################################################################*/ +#define GAMEPAD_BEG_BTN CCPAD_A +static float pad_holdtime[INPUT_COUNT - GAMEPAD_BEG_BTN]; + void Gamepad_SetButton(int btn, int pressed) { + /* Reset hold tracking time */ + if (pressed && !Input.Pressed[btn]) pad_holdtime[btn - GAMEPAD_BEG_BTN] = 0; + Input_SetNonRepeatable(btn, pressed); } @@ -443,6 +449,22 @@ void Gamepad_SetAxis(int axis, float x, float y, double delta) { } } +void Gamepad_Tick(double delta) { + int btn; + Platform_LogConst("GAMEPAD TICK"); + + for (btn = GAMEPAD_BEG_BTN; btn < INPUT_COUNT; btn++) + { + if (!Input.Pressed[btn]) continue; + pad_holdtime[btn - GAMEPAD_BEG_BTN] += delta; + if (pad_holdtime[btn - GAMEPAD_BEG_BTN] < 1.0) continue; + + /* Held for a second, trigger a fake press */ + pad_holdtime[btn - GAMEPAD_BEG_BTN] = 0; + Input_SetPressed(btn); + } +} + /*########################################################################################################################* *---------------------------------------------------------Hotkeys---------------------------------------------------------* diff --git a/src/Input.h b/src/Input.h index 320b149a8..40294afb3 100644 --- a/src/Input.h +++ b/src/Input.h @@ -194,6 +194,7 @@ enum PAD_AXIS { PAD_AXIS_LEFT, PAD_AXIS_RIGHT }; void Gamepad_SetButton(int btn, int pressed); /* Sets value of the given axis */ void Gamepad_SetAxis(int axis, float x, float y, double delta); +void Gamepad_Tick(double delta); /* whether to leave text input open for user to enter further input */ diff --git a/src/Window_3DS.c b/src/Window_3DS.c index 1003e237d..9377730e6 100644 --- a/src/Window_3DS.c +++ b/src/Window_3DS.c @@ -120,20 +120,13 @@ static void ProcessJoystickInput(circlePosition* pos, double delta) { } static void ProcessTouchInput(int mods) { - static int currX, currY; // current touch position touchPosition touch; hidTouchRead(&touch); - if (hidKeysDown() & KEY_TOUCH) { // stylus went down - currX = touch.px; - currY = touch.py; - Input_AddTouch(0, currX, currY); - } else if (mods & KEY_TOUCH) { // stylus is down - currX = touch.px; - currY = touch.py; - Input_UpdateTouch(0, currX, currY); - } else if (hidKeysUp() & KEY_TOUCH) { // stylus was lifted - Input_RemoveTouch(0, currX, currY); + if (mods & KEY_TOUCH) { + Input_AddTouch(0, touch.px, touch.py); + } else if (hidKeysUp() & KEY_TOUCH) { + Input_RemoveTouch(0, Pointers[0].x, Pointers[0].y); } } diff --git a/src/Window_Dreamcast.c b/src/Window_Dreamcast.c index 69bca1923..1bbd514e0 100644 --- a/src/Window_Dreamcast.c +++ b/src/Window_Dreamcast.c @@ -202,7 +202,7 @@ static void HandleController(cont_state_t* state, double delta) { Gamepad_SetButton(CCPAD_R, state->rtrig > 10); // TODO CONT_Z, joysticks // TODO: verify values are right - HandleJoystick(GAMEPAD_AXIS_RIGHT, state->joyx, state->joyy, delta); + HandleJoystick(PAD_AXIS_RIGHT, state->joyx, state->joyy, delta); } static void ProcessControllerInput(double delta) { diff --git a/src/Window_NDS.c b/src/Window_NDS.c index d18a6bc85..5e86ab064 100644 --- a/src/Window_NDS.c +++ b/src/Window_NDS.c @@ -115,23 +115,15 @@ static void HandleButtons(int mods) { Gamepad_SetButton(CCPAD_DOWN, mods & KEY_DOWN); } -// Copied from Window_3DS.c static void ProcessTouchInput(int mods) { - static int curX, curY; // current touch position touchPosition touch; touchRead(&touch); Camera.Sensitivity = 100; // TODO not hardcode this - if (keysDown() & KEY_TOUCH) { // stylus went down - curX = touch.px; - curY = touch.py; - Input_AddTouch(0, curX, curY); - } else if (mods & KEY_TOUCH) { // stylus is down - curX = touch.px; - curY = touch.py; - Input_UpdateTouch(0, curX, curY); - } else if (keysUp() & KEY_TOUCH) { // stylus was lifted - Input_RemoveTouch(0, curX, curY); + if (mods & KEY_TOUCH) { + Input_AddTouch(0, touch.px, touch.py); + } else if (keysUp() & KEY_TOUCH) { + Input_RemoveTouch(0, Pointers[0].x, Pointers[0].y); } } diff --git a/src/Window_PS3.c b/src/Window_PS3.c index e500350dc..bc352e5cf 100644 --- a/src/Window_PS3.c +++ b/src/Window_PS3.c @@ -272,8 +272,8 @@ static void HandleJoystick(int axis, int x, int y, double delta) { static void ProcessPadInput(double delta, padData* pad) { HandleButtons(pad); - HandleJoystick(AXIS_PAD_LEFT, pad->ANA_L_H - 0x80, pad->ANA_L_V - 0x80, delta); - HandleJoystick(AXIS_PAD_RIGHT, pad->ANA_R_H - 0x80, pad->ANA_R_V - 0x80, delta); + HandleJoystick(PAD_AXIS_LEFT, pad->ANA_L_H - 0x80, pad->ANA_L_V - 0x80, delta); + HandleJoystick(PAD_AXIS_RIGHT, pad->ANA_R_H - 0x80, pad->ANA_R_V - 0x80, delta); } void Window_ProcessEvents(double delta) { diff --git a/src/Window_Switch.c b/src/Window_Switch.c index 23195ff2b..265bc9793 100644 --- a/src/Window_Switch.c +++ b/src/Window_Switch.c @@ -131,26 +131,19 @@ static void ProcessJoystickInput(int axis, HidAnalogStickState* pos, double delt if (Math_AbsI(pos->x) <= 16) pos->x = 0; if (Math_AbsI(pos->y) <= 16) pos->y = 0; - Gamepad_SetAxis(axis, x / AXIS_SCALE, -y / AXIS_SCALE, delta); + Gamepad_SetAxis(axis, pos->x / AXIS_SCALE, -pos->y / AXIS_SCALE, delta); } static void ProcessTouchInput(void) { - static int currX, currY, prev_touchcount=0; - HidTouchScreenState state={0}; + static int prev_touchcount = 0; + HidTouchScreenState state = {0}; hidGetTouchScreenStates(&state, 1); - if (state.count && !prev_touchcount) { // stylus went down - currX = state.touches[0].x; - currY = state.touches[0].y; - Input_AddTouch(0, currX, currY); - } else if (state.count) { // stylus is down - currX = state.touches[0].x; - currY = state.touches[0].y; - Input_UpdateTouch(0, currX, currY); - } else if (!state.count && prev_touchcount) { // stylus was lifted - Input_RemoveTouch(0, currX, currY); + if (state.count) { + Input_AddTouch(0, state.touches[0].x, state.touches[0].y); + } else if (prev_touchcount) { + Input_RemoveTouch(0, Pointers[0].x, Pointers[0].y); } - prev_touchcount = state.count; } diff --git a/src/_WindowBase.h b/src/_WindowBase.h index 81011c01f..02fcec3ed 100644 --- a/src/_WindowBase.h +++ b/src/_WindowBase.h @@ -43,18 +43,18 @@ static void RegrabMouse(void) { CentreMousePosition(); } -static void DefaultEnableRawMouse(void) { +static CC_INLINE void DefaultEnableRawMouse(void) { Input.RawMode = true; RegrabMouse(); Cursor_SetVisible(false); } -static void DefaultUpdateRawMouse(void) { +static CC_INLINE void DefaultUpdateRawMouse(void) { MoveRawUsingCursorDelta(); CentreMousePosition(); } -static void DefaultDisableRawMouse(void) { +static CC_INLINE void DefaultDisableRawMouse(void) { Input.RawMode = false; RegrabMouse(); Cursor_SetVisible(true); From a75515c1913d5e436643bb7d861e418b3918f145 Mon Sep 17 00:00:00 2001 From: Dexter Reed Date: Sun, 24 Mar 2024 14:05:34 +0000 Subject: [PATCH 25/41] X11: Use different class when built as Flatpak --- src/Window_X11.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/Window_X11.c b/src/Window_X11.c index d820ac7dc..1e3933bc3 100644 --- a/src/Window_X11.c +++ b/src/Window_X11.c @@ -338,8 +338,13 @@ static void DoCreateWindow(int width, int height) { /* So right name appears in e.g. Ubuntu Unity launchbar */ XClassHint hint = { 0 }; - hint.res_name = GAME_APP_TITLE; - hint.res_class = GAME_APP_TITLE; + #ifdef CC_BUILD_FLATPAK + hint.res_name = "net.classicube.flatpak.client"; + hint.res_class = "net.classicube.flatpak.client"; + #else + hint.res_name = GAME_APP_TITLE; + hint.res_class = GAME_APP_TITLE; + #endif XSetClassHint(win_display, win_handle, &hint); ApplyIcon(); From 2bea8728da69362730754a278d3f36d8bc9af2d5 Mon Sep 17 00:00:00 2001 From: Dexter Reed Date: Sun, 24 Mar 2024 20:03:30 +0000 Subject: [PATCH 26/41] Core: Enable resource downloading for Flatpak builds --- src/Core.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/Core.h b/src/Core.h index 5ad2115a8..20bb0d740 100644 --- a/src/Core.h +++ b/src/Core.h @@ -120,9 +120,7 @@ typedef cc_uint8 cc_bool; #define CC_BUILD_NETWORKING #define CC_BUILD_FREETYPE -#ifndef CC_BUILD_FLATPAK #define CC_BUILD_RESOURCES -#endif /*#define CC_BUILD_GL11*/ #ifndef CC_BUILD_MANUAL From 5d88fa5ddf266e1932cefe3e2dc908048027da34 Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Mon, 1 Apr 2024 10:41:26 +1100 Subject: [PATCH 27/41] SDL: Support OpenGL ES specific contexts --- src/Input.c | 3 +-- src/Window_3DS.c | 1 - src/Window_Dreamcast.c | 1 - src/Window_N64.c | 1 - src/Window_NDS.c | 1 - src/Window_PS1.c | 1 - src/Window_PS2.c | 1 - src/Window_PS3.c | 1 - src/Window_PSP.c | 1 - src/Window_PSVita.c | 1 - src/Window_SDL.c | 3 +++ src/Window_SDL3.c | 3 +++ src/Window_Switch.c | 2 +- src/Window_Xbox.c | 1 - src/Window_Xbox360.c | 1 - 15 files changed, 8 insertions(+), 14 deletions(-) diff --git a/src/Input.c b/src/Input.c index fd4589c0d..b7730b2af 100644 --- a/src/Input.c +++ b/src/Input.c @@ -451,7 +451,6 @@ void Gamepad_SetAxis(int axis, float x, float y, double delta) { void Gamepad_Tick(double delta) { int btn; - Platform_LogConst("GAMEPAD TICK"); for (btn = GAMEPAD_BEG_BTN; btn < INPUT_COUNT; btn++) { @@ -459,7 +458,7 @@ void Gamepad_Tick(double delta) { pad_holdtime[btn - GAMEPAD_BEG_BTN] += delta; if (pad_holdtime[btn - GAMEPAD_BEG_BTN] < 1.0) continue; - /* Held for a second, trigger a fake press */ + /* Held for over a second, trigger a fake press */ pad_holdtime[btn - GAMEPAD_BEG_BTN] = 0; Input_SetPressed(btn); } diff --git a/src/Window_3DS.c b/src/Window_3DS.c index 9377730e6..cb99c7de0 100644 --- a/src/Window_3DS.c +++ b/src/Window_3DS.c @@ -36,7 +36,6 @@ void Window_Init(void) { DisplayInfo.Width = top_width; DisplayInfo.Height = top_height; - DisplayInfo.Depth = 4; // 32 bit DisplayInfo.ScaleX = 0.5f; DisplayInfo.ScaleY = 0.5f; diff --git a/src/Window_Dreamcast.c b/src/Window_Dreamcast.c index 1bbd514e0..a793afe82 100644 --- a/src/Window_Dreamcast.c +++ b/src/Window_Dreamcast.c @@ -20,7 +20,6 @@ struct _WindowData WindowInfo; void Window_Init(void) { DisplayInfo.Width = vid_mode->width; DisplayInfo.Height = vid_mode->height; - DisplayInfo.Depth = 4; // 32 bit DisplayInfo.ScaleX = 1; DisplayInfo.ScaleY = 1; diff --git a/src/Window_N64.c b/src/Window_N64.c index 93d9fc20f..ff7aa100c 100644 --- a/src/Window_N64.c +++ b/src/Window_N64.c @@ -23,7 +23,6 @@ void Window_Init(void) { DisplayInfo.Width = display_get_width(); DisplayInfo.Height = display_get_height(); - DisplayInfo.Depth = 4; // 32 bit DisplayInfo.ScaleX = 0.5f; DisplayInfo.ScaleY = 0.5f; diff --git a/src/Window_NDS.c b/src/Window_NDS.c index 5e86ab064..b6e1caba7 100644 --- a/src/Window_NDS.c +++ b/src/Window_NDS.c @@ -43,7 +43,6 @@ static void InitConsoleWindow(void) { void Window_Init(void) { DisplayInfo.Width = SCREEN_WIDTH; DisplayInfo.Height = SCREEN_HEIGHT; - DisplayInfo.Depth = 4; // 32 bit DisplayInfo.ScaleX = 0.5f; DisplayInfo.ScaleY = 0.5f; diff --git a/src/Window_PS1.c b/src/Window_PS1.c index 1f5171e40..2aaccd497 100644 --- a/src/Window_PS1.c +++ b/src/Window_PS1.c @@ -32,7 +32,6 @@ struct _WindowData WindowInfo; void Window_Init(void) { DisplayInfo.Width = SCREEN_XRES; DisplayInfo.Height = SCREEN_YRES; - DisplayInfo.Depth = 4; // 32 bit DisplayInfo.ScaleX = 0.5f; DisplayInfo.ScaleY = 0.5f; diff --git a/src/Window_PS2.c b/src/Window_PS2.c index 6746d86c5..6a387882e 100644 --- a/src/Window_PS2.c +++ b/src/Window_PS2.c @@ -30,7 +30,6 @@ struct _WindowData WindowInfo; void Window_Init(void) { DisplayInfo.Width = 640; DisplayInfo.Height = graph_get_region() == GRAPH_MODE_PAL ? 512 : 448; - DisplayInfo.Depth = 4; // 32 bit DisplayInfo.ScaleX = 1; DisplayInfo.ScaleY = 1; diff --git a/src/Window_PS3.c b/src/Window_PS3.c index bc352e5cf..1b63a27de 100644 --- a/src/Window_PS3.c +++ b/src/Window_PS3.c @@ -46,7 +46,6 @@ void Window_Init(void) { DisplayInfo.Width = resolution.width; DisplayInfo.Height = resolution.height; - DisplayInfo.Depth = 4; // 32 bit DisplayInfo.ScaleX = 1; DisplayInfo.ScaleY = 1; diff --git a/src/Window_PSP.c b/src/Window_PSP.c index 7171c16b1..352b4bc1d 100644 --- a/src/Window_PSP.c +++ b/src/Window_PSP.c @@ -26,7 +26,6 @@ struct _WindowData WindowInfo; void Window_Init(void) { DisplayInfo.Width = SCREEN_WIDTH; DisplayInfo.Height = SCREEN_HEIGHT; - DisplayInfo.Depth = 4; // 32 bit DisplayInfo.ScaleX = 1; DisplayInfo.ScaleY = 1; diff --git a/src/Window_PSVita.c b/src/Window_PSVita.c index e7540d7d8..db53ec586 100644 --- a/src/Window_PSVita.c +++ b/src/Window_PSVita.c @@ -33,7 +33,6 @@ static void DQ_OnNextFrame2D(void* fb); void Window_Init(void) { DisplayInfo.Width = DISPLAY_WIDTH; DisplayInfo.Height = DISPLAY_HEIGHT; - DisplayInfo.Depth = 4; // 32 bit DisplayInfo.ScaleX = 1; DisplayInfo.ScaleY = 1; diff --git a/src/Window_SDL.c b/src/Window_SDL.c index 1d492d849..3136528de 100644 --- a/src/Window_SDL.c +++ b/src/Window_SDL.c @@ -370,6 +370,9 @@ void GLContext_Create(void) { SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, GLCONTEXT_DEFAULT_DEPTH); SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 0); SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, true); +#ifdef CC_BUILD_GLES + SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES); +#endif win_ctx = SDL_GL_CreateContext(win_handle); if (!win_ctx) Window_SDLFail("creating OpenGL context"); diff --git a/src/Window_SDL3.c b/src/Window_SDL3.c index 85a1cd7c0..34df0b967 100644 --- a/src/Window_SDL3.c +++ b/src/Window_SDL3.c @@ -460,6 +460,9 @@ void GLContext_Create(void) { SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, GLCONTEXT_DEFAULT_DEPTH); SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 0); SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, true); +#ifdef CC_BUILD_GLES + SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES); +#endif win_ctx = SDL_GL_CreateContext(win_handle); if (!win_ctx) Window_SDLFail("creating OpenGL context"); diff --git a/src/Window_Switch.c b/src/Window_Switch.c index 265bc9793..8108b5348 100644 --- a/src/Window_Switch.c +++ b/src/Window_Switch.c @@ -58,7 +58,7 @@ void Window_Init(void) { // Initialize the default gamepad (which reads handheld mode inputs as well as the first connected controller) padInitializeDefault(&pad); - DisplayInfo.Depth = 4; // 32 bit + DisplayInfo.Depth = 4; // 32 bit TODO wrong, this is actually 4 bit DisplayInfo.ScaleX = 1; DisplayInfo.ScaleY = 1; diff --git a/src/Window_Xbox.c b/src/Window_Xbox.c index 7dec35273..f4bfee284 100644 --- a/src/Window_Xbox.c +++ b/src/Window_Xbox.c @@ -62,7 +62,6 @@ void Window_Init(void) { DisplayInfo.Width = mode.width; DisplayInfo.Height = mode.height; - DisplayInfo.Depth = 4; // 32 bit DisplayInfo.ScaleX = 1; DisplayInfo.ScaleY = 1; diff --git a/src/Window_Xbox360.c b/src/Window_Xbox360.c index 5f438baa3..9d9ab8592 100644 --- a/src/Window_Xbox360.c +++ b/src/Window_Xbox360.c @@ -33,7 +33,6 @@ void Window_Init(void) { DisplayInfo.Width = ai->width; DisplayInfo.Height = ai->height; - DisplayInfo.Depth = 4; // 32 bit DisplayInfo.ScaleX = 1; DisplayInfo.ScaleY = 1; From 426737aaa1db12f47e37d2fac023db914e66f38a Mon Sep 17 00:00:00 2001 From: Dexter Reed Date: Mon, 1 Apr 2024 00:42:43 +0100 Subject: [PATCH 28/41] SDL3: Use different class when built as Flatpak --- src/Window_SDL3.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/Window_SDL3.c b/src/Window_SDL3.c index 85a1cd7c0..925bb9fc3 100644 --- a/src/Window_SDL3.c +++ b/src/Window_SDL3.c @@ -28,6 +28,9 @@ static void Window_SDLFail(const char* place) { void Window_Init(void) { SDL_Init(SDL_INIT_VIDEO); + #ifdef CC_BUILD_FLATPAK + SDL_SetHint(SDL_HINT_APP_ID, "net.classicube.flatpak.client"); + #endif int displayID = SDL_GetPrimaryDisplay(); Input.Sources = INPUT_SOURCE_NORMAL; From 0ff916fbfc82ea32bc817cef43809536bd039096 Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Mon, 1 Apr 2024 14:38:39 +1100 Subject: [PATCH 29/41] SDL3: Try to centre window and fix compiling error --- misc/ClassicalSharp/ClassicalSharp.zip | Bin 846898 -> 0 bytes misc/ClassicalSharp/known_bugs.txt | 21 --------------------- misc/ClassicalSharp/readme.txt | 5 ----- src/Window_SDL.c | 9 +++------ src/Window_SDL3.c | 21 ++++++++++++++------- 5 files changed, 17 insertions(+), 39 deletions(-) delete mode 100644 misc/ClassicalSharp/ClassicalSharp.zip delete mode 100644 misc/ClassicalSharp/known_bugs.txt delete mode 100644 misc/ClassicalSharp/readme.txt diff --git a/misc/ClassicalSharp/ClassicalSharp.zip b/misc/ClassicalSharp/ClassicalSharp.zip deleted file mode 100644 index 8353d19cfeccc5af450da281b3f7c871402d781a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 846898 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%0Dwjo~>#znQRxwHLTocETKC-*op|32?yJ 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%0D)rp_<`I@tlW%67dL)HMT;QXh~jp>ac`|6=pIa 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


9*$^Mc^S`noJgH5I1yC)QaTIgJ+cWad^7HiXD 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 z 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 z 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 {oJtM&gJ~D?Aml*Bag~< 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 Rm44AV#IoB*+th7?nbmkPiXE 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 diff --git a/misc/ClassicalSharp/known_bugs.txt b/misc/ClassicalSharp/known_bugs.txt deleted file mode 100644 index a7990fc01..000000000 --- a/misc/ClassicalSharp/known_bugs.txt +++ /dev/null @@ -1,21 +0,0 @@ -* Blocks over 256 are not saved or loaded at all. -* Custom block information for blocks over 256 is not saved or loaded at all. -* /hold 0 prevents you deleting blocks until you change to another. -* Sometimes when holding air and your own model is a block model, you crash. -* Labels and buttons overlap in launcher with some fonts. (e.g. Lucida Console) -* terrain.png with width under 16 insta-crash the game -* catbox.moe texture packs/terrain.png links insta-crash the game -* Sometimes you randomly crash reading leveldatachunk packet on OSX -* Models with size of over 2 are not supported at all -* Direct3D9 backend uses an ill-formed vertex format that works by accident -* Alt text doesn't update its Y position if you click on chat -* Menu inputs (save, edit hotkey, water level, etc) are reset on window resize -* Chat input caret is reset on window resize -* Position in chat (if you scrolled up into history) is reset on window resize -* Two blank lines get shown in chat when you type /client cuboid -* Alt text is closed on window resize -* Changing server texture packs sometimes still retains textures from previous one -* Crashes at startup when another process has exclusively acquired Direct3D9 device -* Can't bind controls to mouse buttons -* Does not work at all on 64 bit macOS -* Making a gas block undeletable doesn't prevent placing blocks over it \ No newline at end of file diff --git a/misc/ClassicalSharp/readme.txt b/misc/ClassicalSharp/readme.txt deleted file mode 100644 index 507d0d061..000000000 --- a/misc/ClassicalSharp/readme.txt +++ /dev/null @@ -1,5 +0,0 @@ -Here lies ClassicalSharp, the original C# client. (works with Mono and .NET framework 2.0) -It has unfixed bugs and missing features. There's no reason to use it anymore. - -For licensing, please see license.txt inside ClassicalSharp.zip. -Absolutely no support or assistance will be provided for ClassicalSharp. \ No newline at end of file diff --git a/src/Window_SDL.c b/src/Window_SDL.c index 3136528de..e026e32d7 100644 --- a/src/Window_SDL.c +++ b/src/Window_SDL.c @@ -1,5 +1,5 @@ #include "Core.h" -#if defined CC_BUILD_SDL +#if defined CC_BUILD_SDL2 #include "_WindowBase.h" #include "Graphics.h" #include "String.h" @@ -9,7 +9,7 @@ #include static SDL_Window* win_handle; -#warning "Some features are missing from the SDL backend. If possible, it is recommended that you use a native windowing backend instead" +#warning "Some features are missing from the SDL2 backend. If possible, it is recommended that you use a native windowing backend instead" static void RefreshWindowBounds(void) { SDL_GetWindowSize(win_handle, &Window_Main.Width, &Window_Main.Height); @@ -41,10 +41,7 @@ void Window_Init(void) { void Window_Free(void) { } static void DoCreateWindow(int width, int height, int flags) { - int x = Display_CentreX(width); - int y = Display_CentreY(height); - - win_handle = SDL_CreateWindow(NULL, x, y, width, height, + win_handle = SDL_CreateWindow(NULL, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, width, height, flags | SDL_WINDOW_RESIZABLE); if (!win_handle) Window_SDLFail("creating window"); diff --git a/src/Window_SDL3.c b/src/Window_SDL3.c index ec2d2dbc9..d4731b1fe 100644 --- a/src/Window_SDL3.c +++ b/src/Window_SDL3.c @@ -10,8 +10,6 @@ static SDL_Window* win_handle; static Uint32 dlg_event; -#warning "Some features are missing from the SDL3 backend. If possible, it is recommended that you use a native windowing backend instead" - static void RefreshWindowBounds(void) { SDL_GetWindowSize(win_handle, &Window_Main.Width, &Window_Main.Height); } @@ -29,7 +27,7 @@ static void Window_SDLFail(const char* place) { void Window_Init(void) { SDL_Init(SDL_INIT_VIDEO); #ifdef CC_BUILD_FLATPAK - SDL_SetHint(SDL_HINT_APP_ID, "net.classicube.flatpak.client"); + SDL_SetHint(SDL_HINT_APP_ID, "net.classicube.flatpak.client"); #endif int displayID = SDL_GetPrimaryDisplay(); Input.Sources = INPUT_SOURCE_NORMAL; @@ -47,9 +45,16 @@ void Window_Init(void) { void Window_Free(void) { } static void DoCreateWindow(int width, int height, int flags) { - win_handle = SDL_CreateWindow(NULL, width, height, - flags | SDL_WINDOW_RESIZABLE); + SDL_PropertiesID props = SDL_CreateProperties(); + SDL_SetNumberProperty(props, SDL_PROP_WINDOW_CREATE_X_NUMBER, SDL_WINDOWPOS_CENTERED); + SDL_SetNumberProperty(props, SDL_PROP_WINDOW_CREATE_Y_NUMBER, SDL_WINDOWPOS_CENTERED); + SDL_SetNumberProperty(props, SDL_PROP_WINDOW_CREATE_WIDTH_NUMBER, width); + SDL_SetNumberProperty(props, SDL_PROP_WINDOW_CREATE_HEIGHT_NUMBER, height); + SDL_SetNumberProperty(props, "flags", flags | SDL_WINDOW_RESIZABLE); + + win_handle = SDL_CreateWindowWithProperties(props); if (!win_handle) Window_SDLFail("creating window"); + SDL_DestroyProperties(props); RefreshWindowBounds(); Window_Main.Exists = true; @@ -100,7 +105,9 @@ int Window_IsObscured(void) { return flags & SDL_WINDOW_OCCLUDED; } -void Window_Show(void) { SDL_ShowWindow(win_handle); } +void Window_Show(void) { + SDL_ShowWindow(win_handle); +} void Window_SetSize(int width, int height) { SDL_SetWindowSize(win_handle, width, height); @@ -199,7 +206,7 @@ static void OnTextEvent(const SDL_Event* e) { int i, len; src = e->text.text; - len = String_CalcLen(src, SDL_TEXTINPUTEVENT_TEXT_SIZE); + len = String_Length(src); while (len > 0) { i = Convert_Utf8ToCodepoint(&cp, src, len); From 5b7800fe2bc5dc152bdf6f1264d685e1b20c9189 Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Mon, 1 Apr 2024 22:13:32 +1100 Subject: [PATCH 30/41] Switch: Use a few more native APIs --- readme.md | 4 ++-- src/Platform_Switch.c | 54 +++++++++++++++++++------------------------ 2 files changed, 26 insertions(+), 32 deletions(-) diff --git a/readme.md b/readme.md index bb2b5b54c..2e873b0d2 100644 --- a/readme.md +++ b/readme.md @@ -21,9 +21,9 @@ ClassiCube is not trying to replicate modern Minecraft versions. It will never s You can **download ClassiCube** [from here](https://www.classicube.net/download/) and the very latest builds [from here](https://www.classicube.net/nightlies/). -![classic](https://github.com/ClassiCube/actions-testing-cc/assets/7892772/a233cb4c-296a-4d08-87fc-49874c230d4f) +![classic](https://github.com/ClassiCube/ClassiCube/assets/6509348/eedee53f-f53e-456f-b51c-92c62079eee0) -![enhanced](https://github.com/ClassiCube/actions-testing-cc/assets/7892772/61a064bd-cfaa-4a91-bedf-a16c3dd7e8a2) +![enhanced](https://github.com/ClassiCube/ClassiCube/assets/6509348/b2fe0e2b-5d76-41ab-909f-048d0ad15f37) # We need your help diff --git a/src/Platform_Switch.c b/src/Platform_Switch.c index a5111a720..381831a86 100644 --- a/src/Platform_Switch.c +++ b/src/Platform_Switch.c @@ -23,13 +23,10 @@ #include #include #include -#include #include #include #include "_PlatformConsole.h" - - const cc_result ReturnCode_FileShareViolation = 1000000000; // not used const cc_result ReturnCode_FileNotFound = ENOENT; const cc_result ReturnCode_SocketInProgess = EINPROGRESS; @@ -37,7 +34,6 @@ const cc_result ReturnCode_SocketWouldBlock = EWOULDBLOCK; const cc_result ReturnCode_DirectoryExists = EEXIST; const char* Platform_AppNameSuffix = " Switch"; - alignas(16) u8 __nx_exception_stack[0x1000]; u64 __nx_exception_stack_size = sizeof(__nx_exception_stack); @@ -74,13 +70,13 @@ void __libnx_exception_handler(ThreadExceptionDump *ctx) cc_uint64 Stopwatch_ElapsedMicroseconds(cc_uint64 beg, cc_uint64 end) { if (end < beg) return 0; - return (end - beg) / 1000; + // See include/switch/arm/counter.h + // static inline u64 armTicksToNs(u64 tick) { return (tick * 625) / 12; } + return ((end - beg) * 625) / 12000; } cc_uint64 Stopwatch_Measure(void) { - struct timespec t; - clock_gettime(CLOCK_MONOTONIC, &t); - return (cc_uint64)t.tv_sec * 1e9 + t.tv_nsec; + return armGetSystemTick(); } void Platform_Log(const char* msg, int len) { @@ -88,23 +84,23 @@ void Platform_Log(const char* msg, int len) { } TimeMS DateTime_CurrentUTC(void) { - struct timeval cur; - gettimeofday(&cur, NULL); - return (cc_uint64)cur.tv_sec + UNIX_EPOCH_SECONDS; + u64 timestamp = 0; + timeGetCurrentTime(TimeType_Default, ×tamp); + return timestamp + UNIX_EPOCH_SECONDS; } void DateTime_CurrentLocal(struct DateTime* t) { - struct timeval cur; - struct tm loc_time; - gettimeofday(&cur, NULL); - localtime_r(&cur.tv_sec, &loc_time); + u64 timestamp = 0; + TimeCalendarTime calTime = { 0 }; + timeGetCurrentTime(TimeType_Default, ×tamp); + timeToCalendarTimeWithMyRule(timestamp, &calTime, NULL); - t->year = loc_time.tm_year + 1900; - t->month = loc_time.tm_mon + 1; - t->day = loc_time.tm_mday; - t->hour = loc_time.tm_hour; - t->minute = loc_time.tm_min; - t->second = loc_time.tm_sec; + t->year = calTime.year; + t->month = calTime.month; + t->day = calTime.day; + t->hour = calTime.hour; + t->minute = calTime.minute; + t->second = calTime.second; } @@ -227,7 +223,7 @@ cc_result File_Length(cc_file file, cc_uint32* len) { *--------------------------------------------------------Threading--------------------------------------------------------* *#########################################################################################################################*/ void Thread_Sleep(cc_uint32 milliseconds) { - cc_uint64 timeout_ns = milliseconds * (1000 * 1000); // to nanoseconds + cc_uint64 timeout_ns = (cc_uint64)milliseconds * (1000 * 1000); // to nanoseconds svcSleepThread(timeout_ns); } @@ -243,7 +239,11 @@ void Thread_Run(void** handle, Thread_StartFunc func, int stackSize, const char* threadStart(thread); } -void Thread_Detach(void* handle) { } +void Thread_Detach(void* handle) { + // threadClose frees up resources, **including the stack of the thread** + // Which obviously completely breaks the thread - so instead just accept + // that there will be a small memory leak when non-joined threads exit +} void Thread_Join(void* handle) { Thread* thread = (Thread*)handle; @@ -315,7 +315,6 @@ void Waitable_Wait(void* handle) { void Waitable_WaitFor(void* handle, cc_uint32 milliseconds) { struct WaitData* ptr = (struct WaitData*)handle; - cc_uint64 timeout_ns = (cc_uint64)milliseconds * (1000 * 1000); // to nanoseconds Mutex_Lock(&ptr->mutex); @@ -359,10 +358,8 @@ void Waitable_WaitFor(void* handle, cc_uint32 milliseconds) { union SocketAddress { struct sockaddr raw; struct sockaddr_in v4; - #ifdef AF_INET6 struct sockaddr_in6 v6; struct sockaddr_storage total; - #endif }; static cc_result ParseHost(const char* host, int port, cc_sockaddr* addrs, int* numValidAddrs) { @@ -419,7 +416,6 @@ cc_result Socket_ParseAddress(const cc_string* address, int port, cc_sockaddr* a return 0; } - #ifdef AF_INET6 if (inet_pton(AF_INET6, str, &addr->v6.sin6_addr) > 0) { addr->v6.sin6_family = AF_INET6; addr->v6.sin6_port = htons(port); @@ -428,7 +424,6 @@ cc_result Socket_ParseAddress(const cc_string* address, int port, cc_sockaddr* a *numValidAddrs = 1; return 0; } - #endif return ParseHost(str, port, addrs, numValidAddrs); } @@ -441,8 +436,7 @@ cc_result Socket_Connect(cc_socket* s, cc_sockaddr* addr, cc_bool nonblocking) { if (*s == -1) return errno; if (nonblocking) { - int blocking_raw = -1; /* non-blocking mode */ - ioctl(*s, FIONBIO, &blocking_raw); + fcntl(*s, F_SETFL, O_NONBLOCK); } res = connect(*s, raw, addr->size); From 13c8e223b1403b2e38164cef24ecddfeca50b171 Mon Sep 17 00:00:00 2001 From: Dexter Reed Date: Mon, 1 Apr 2024 11:15:12 +0100 Subject: [PATCH 31/41] misc/linux: Upstream Flatpak files from https://github.com/sungsphinx/ClassiCubeFlatpak --- .../net.classicube.flatpak.client.desktop | 10 ++ ...net.classicube.flatpak.client.metainfo.xml | 145 ++++++++++++++++++ .../flatpak/net.classicube.flatpak.client.svg | 44 ++++++ .../flatpak/net.classicube.flatpak.client.yml | 29 ++++ 4 files changed, 228 insertions(+) create mode 100644 misc/linux/flatpak/net.classicube.flatpak.client.desktop create mode 100644 misc/linux/flatpak/net.classicube.flatpak.client.metainfo.xml create mode 100644 misc/linux/flatpak/net.classicube.flatpak.client.svg create mode 100644 misc/linux/flatpak/net.classicube.flatpak.client.yml diff --git a/misc/linux/flatpak/net.classicube.flatpak.client.desktop b/misc/linux/flatpak/net.classicube.flatpak.client.desktop new file mode 100644 index 000000000..11f416da3 --- /dev/null +++ b/misc/linux/flatpak/net.classicube.flatpak.client.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Name=ClassiCube +Exec=ClassiCubeLauncher +Comment=Sandbox building-block game +Type=Application +Icon=net.classicube.flatpak.client +Categories=Game;ActionGame; +Terminal=false +MimeType=x-scheme-handler/mc; +StartupWMClass=net.classicube.flatpak.client \ No newline at end of file diff --git a/misc/linux/flatpak/net.classicube.flatpak.client.metainfo.xml b/misc/linux/flatpak/net.classicube.flatpak.client.metainfo.xml new file mode 100644 index 000000000..bcdbe339e --- /dev/null +++ b/misc/linux/flatpak/net.classicube.flatpak.client.metainfo.xml @@ -0,0 +1,145 @@ + + + net.classicube.flatpak.client + ClassiCube + Sandbox building-block game + + The ClassiCube Project + + CC0-1.0 + BSD-3-Clause + +

ClassiCube brings you back to the days of 2009 where one block game ruled them all, it includes such features as:

+
    +
  • Loads of blocks and items to choose from
  • +
  • Chatting with other players
  • +
  • An extremely simple network protocol to tinker with
  • +
  • Hundreds of creative and inventive worlds to explore online
  • +
  • A growing community
  • +
  • Hundreds of hours of entertainment
  • +
+
+ + + Classic mode features faithful classic gameplay + https://github.com/ClassiCube/ClassiCube/assets/6509348/eedee53f-f53e-456f-b51c-92c62079eee0 + + + Enhanced mode allows hacks like flying and noclipping, it also allows servers to provide many custom features + https://github.com/ClassiCube/ClassiCube/assets/6509348/b2fe0e2b-5d76-41ab-909f-048d0ad15f37 + + + + + https://github.com/ClassiCube/ClassiCube/releases/tag/1.3.6 + + + https://github.com/ClassiCube/ClassiCube/releases/tag/1.3.5 + + + https://github.com/ClassiCube/ClassiCube/releases/tag/1.3.4 + + + https://github.com/ClassiCube/ClassiCube/releases/tag/1.3.3 + + + https://github.com/ClassiCube/ClassiCube/releases/tag/1.3.2 + + + https://github.com/ClassiCube/ClassiCube/releases/tag/1.3.1 + + + https://github.com/ClassiCube/ClassiCube/releases/tag/1.3.0 + + + https://github.com/ClassiCube/ClassiCube/releases/tag/1.2.9 + + + https://github.com/ClassiCube/ClassiCube/releases/tag/1.2.8 + + + https://github.com/ClassiCube/ClassiCube/releases/tag/1.2.7 + + + https://github.com/ClassiCube/ClassiCube/releases/tag/1.2.6 + + + https://github.com/ClassiCube/ClassiCube/releases/tag/1.2.5 + + + https://github.com/ClassiCube/ClassiCube/releases/tag/1.2.4 + + + https://github.com/ClassiCube/ClassiCube/releases/tag/1.2.3 + + + https://github.com/ClassiCube/ClassiCube/releases/tag/1.2.2 + + + https://github.com/ClassiCube/ClassiCube/releases/tag/1.2.1 + + + https://github.com/ClassiCube/ClassiCube/releases/tag/1.2.0 + + + https://github.com/ClassiCube/ClassiCube/releases/tag/1.1.9 + + + https://github.com/ClassiCube/ClassiCube/releases/tag/1.1.8 + + + https://github.com/ClassiCube/ClassiCube/releases/tag/1.1.7 + + + https://github.com/ClassiCube/ClassiCube/releases/tag/1.1.6 + + + https://github.com/ClassiCube/ClassiCube/releases/tag/1.1.5 + + + https://github.com/ClassiCube/ClassiCube/releases/tag/1.1.4 + + + https://github.com/ClassiCube/ClassiCube/releases/tag/1.1.3 + + + https://github.com/ClassiCube/ClassiCube/releases/tag/1.1.2 + + + https://github.com/ClassiCube/ClassiCube/releases/tag/1.1.1 + + + https://github.com/ClassiCube/ClassiCube/releases/tag/1.10 + + + https://github.com/ClassiCube/ClassiCube/releases/tag/1.0.9 + + + https://github.com/ClassiCube/ClassiCube/releases/tag/1.0.8 + + + https://github.com/ClassiCube/ClassiCube/releases/tag/1.0.7 + + + https://www.classicube.net/ + https://github.com/ClassiCube/ClassiCube/issues + https://www.patreon.com/ClassiCube + https://github.com/ClassiCube/ClassiCube + + Game + AdventureGame + ActionGame + + + pointing + keyboard + + + moderate + intense + + net.classicube.flatpak.client.desktop + + ClassiCube + +
diff --git a/misc/linux/flatpak/net.classicube.flatpak.client.svg b/misc/linux/flatpak/net.classicube.flatpak.client.svg new file mode 100644 index 000000000..44324156b --- /dev/null +++ b/misc/linux/flatpak/net.classicube.flatpak.client.svg @@ -0,0 +1,44 @@ + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/misc/linux/flatpak/net.classicube.flatpak.client.yml b/misc/linux/flatpak/net.classicube.flatpak.client.yml new file mode 100644 index 000000000..760e8b9d2 --- /dev/null +++ b/misc/linux/flatpak/net.classicube.flatpak.client.yml @@ -0,0 +1,29 @@ +id: net.classicube.flatpak.client +runtime: org.freedesktop.Platform +runtime-version: '23.08' +sdk: org.freedesktop.Sdk +command: ClassiCubeLauncher +finish-args: + - --socket=x11 + - --device=dri + - --share=network + - --share=ipc + - --socket=pulseaudio +modules: + - name: ClassiCube + buildsystem: simple + build-commands: + - gcc -fno-math-errno src/*.c -o src/ClassiCube -O1 -DCC_BUILD_FLATPAK -DCC_BUILD_GLMODERN -rdynamic -lm -lpthread -lX11 -lXi -lGL -ldl + - install -Dm755 src/ClassiCube -t ${FLATPAK_DEST}/bin + - install -Dm755 ClassiCubeLauncher -t ${FLATPAK_DEST}/bin + - install -Dm644 misc/linux/flatpak/net.classicube.flatpak.client.svg ${FLATPAK_DEST}/share/icons/hicolor/scalable/apps/net.classicube.flatpak.client.svg + - install -Dm644 misc/linux/flatpak/net.classicube.flatpak.client.desktop ${FLATPAK_DEST}/share/applications/net.classicube.flatpak.client.desktop + - install -Dm644 misc/linux/flatpak/net.classicube.flatpak.client.metainfo.xml ${FLATPAK_DEST}/share/metainfo/net.classicube.flatpak.client.metainfo.xml + sources: + - type: dir + path: ../../../ + - type: script + dest-filename: ClassiCubeLauncher + commands: + - mkdir -p ${XDG_DATA_HOME}/ClassiCube + - cd ${XDG_DATA_HOME}/ClassiCube && exec /app/bin/ClassiCube "$@" From c7e2d5b03eb6b51a1ddb22f12d9fd0df1e305c25 Mon Sep 17 00:00:00 2001 From: Dexter Reed Date: Mon, 1 Apr 2024 12:43:19 +0100 Subject: [PATCH 32/41] X11: Don't compile/use when CC_BUILD_SDL3 is defined --- src/Window_X11.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Window_X11.c b/src/Window_X11.c index 1e3933bc3..6bb0c01a1 100644 --- a/src/Window_X11.c +++ b/src/Window_X11.c @@ -1,5 +1,5 @@ #include "Core.h" -#if defined CC_BUILD_X11 && !defined CC_BUILD_SDL +#if defined CC_BUILD_X11 && !defined CC_BUILD_SDL2 && !defined CC_BUILD_SDL3 #include "_WindowBase.h" #include "String.h" #include "Funcs.h" From 290252767fc8f011086db350312e357155554227 Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Tue, 2 Apr 2024 18:37:49 +1100 Subject: [PATCH 33/41] Classic options should show anaglyph 3D option --- src/Game.c | 6 +++--- src/Game.h | 1 + src/Menus.c | 10 +++++----- src/Options.h | 1 + 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/Game.c b/src/Game.c index 9e271cbdb..14cf3343a 100644 --- a/src/Game.c +++ b/src/Game.c @@ -53,11 +53,11 @@ int Game_MaxViewDistance = DEFAULT_MAX_VIEWDIST; int Game_FpsLimit, Game_Vertices; cc_bool Game_SimpleArmsAnim; static cc_bool gameRunning; -static cc_bool anaglyph3D; cc_bool Game_ClassicMode, Game_ClassicHacks; cc_bool Game_AllowCustomBlocks; cc_bool Game_AllowServerTextures; +cc_bool Game_Anaglyph3D; cc_bool Game_ViewBobbing, Game_HideGui; cc_bool Game_BreakableLiquids, Game_ScreenshotRequested; @@ -344,7 +344,7 @@ static void LoadOptions(void) { ServicePointManager.ServerCertificateValidationCallback = delegate { return true; }; Options.Set("skip-ssl-check", false); }*/ - anaglyph3D = Options_GetBool("anaglyph3D", false); + Game_Anaglyph3D = Options_GetBool(OPT_ANAGLYPH3D, false); } #ifdef CC_BUILD_MINFILES @@ -666,7 +666,7 @@ static void Game_RenderFrame(double delta) { Camera_KeyLookUpdate(delta); InputHandler_Tick(); - if (anaglyph3D) { + if (Game_Anaglyph3D) { Render3D_Anaglyph(delta, t); } else { Render3DFrame(delta, t); diff --git a/src/Game.h b/src/Game.h index a3f2c7bd6..e796dae06 100644 --- a/src/Game.h +++ b/src/Game.h @@ -48,6 +48,7 @@ extern cc_bool Game_ClassicHacks; extern cc_bool Game_AllowCustomBlocks; extern cc_bool Game_AllowServerTextures; +extern cc_bool Game_Anaglyph3D; extern cc_bool Game_ViewBobbing; extern cc_bool Game_BreakableLiquids; /* Whether a screenshot should be taken at the end of this frame */ diff --git a/src/Menus.c b/src/Menus.c index 4ace2f29f..d6a247be5 100644 --- a/src/Menus.c +++ b/src/Menus.c @@ -2728,9 +2728,9 @@ static void ClassicOptionsScreen_SetViewDist(const cc_string* v) { Game_UserSetViewDistance(dist); } -static void ClassicOptionsScreen_GetPhysics(cc_string* v) { Menu_GetBool(v, Physics.Enabled); } -static void ClassicOptionsScreen_SetPhysics(const cc_string* v) { - Physics_SetEnabled(Menu_SetBool(v, OPT_BLOCK_PHYSICS)); +static void ClassicOptionsScreen_GetAnaglyph(cc_string* v) { Menu_GetBool(v, Game_Anaglyph3D); } +static void ClassicOptionsScreen_SetAnaglyph(const cc_string* v) { + Game_Anaglyph3D = Menu_SetBool(v, OPT_ANAGLYPH3D); } static void ClassicOptionsScreen_GetSounds(cc_string* v) { Menu_GetBool(v, Audio_SoundsVolume > 0); } @@ -2763,8 +2763,8 @@ static void ClassicOptionsScreen_InitWidgets(struct MenuOptionsScreen* s) { ClassicOptionsScreen_GetInvert, ClassicOptionsScreen_SetInvert }, { -1, -50, "Render distance", MenuOptionsScreen_Enum, ClassicOptionsScreen_GetViewDist, ClassicOptionsScreen_SetViewDist }, - { -1, 0, "Block physics", MenuOptionsScreen_Bool, - ClassicOptionsScreen_GetPhysics, ClassicOptionsScreen_SetPhysics }, + { -1, 0, "3D anaglyph", MenuOptionsScreen_Bool, + ClassicOptionsScreen_GetAnaglyph, ClassicOptionsScreen_SetAnaglyph }, { 1, -150, "Sound", MenuOptionsScreen_Bool, ClassicOptionsScreen_GetSounds, ClassicOptionsScreen_SetSounds }, diff --git a/src/Options.h b/src/Options.h index b4d1716c2..62672a86f 100644 --- a/src/Options.h +++ b/src/Options.h @@ -79,6 +79,7 @@ Copyright 2014-2023 ClassiCube | Licensed under BSD-3 #define OPT_DPI_SCALING "win-dpi-scaling" #define OPT_GAME_VERSION "game-version" #define OPT_INV_SCROLLBAR_SCALE "inv-scrollbar-scale" +#define OPT_ANAGLYPH3D "anaglyph-3d" #define OPT_SELECTED_BLOCK_OUTLINE_COLOR "selected-block-outline-color" #define OPT_SELECTED_BLOCK_OUTLINE_OPACITY "selected-block-outline-opacity" From d056f8c2ff1da6284460de99c94b488c1d1a064b Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Tue, 2 Apr 2024 21:55:57 +1100 Subject: [PATCH 34/41] Slightly reduce memory on PS1/N64 consoles, avoid creating plugins folder on any console Also slightly tidy up some defines --- src/Core.h | 89 +++++++++++++++++++++-------------------------- src/Game.c | 6 ++-- src/Http_Worker.c | 18 ++++++++++ src/Logger.c | 40 ++++++++++----------- 4 files changed, 80 insertions(+), 73 deletions(-) diff --git a/src/Core.h b/src/Core.h index 20bb0d740..d66ca7c16 100644 --- a/src/Core.h +++ b/src/Core.h @@ -121,33 +121,31 @@ typedef cc_uint8 cc_bool; #define CC_BUILD_NETWORKING #define CC_BUILD_FREETYPE #define CC_BUILD_RESOURCES +#define CC_BUILD_PLUGINS /*#define CC_BUILD_GL11*/ #ifndef CC_BUILD_MANUAL #if defined NXDK /* XBox also defines _WIN32 */ #define CC_BUILD_XBOX + #define CC_BUILD_CONSOLE + #define CC_BUILD_LOWMEM #define CC_BUILD_NOMUSIC #define CC_BUILD_NOSOUNDS #define CC_BUILD_HTTPCLIENT #define CC_BUILD_BEARSSL - #define CC_BUILD_LOWMEM - #define CC_BUILD_CONSOLE - #undef CC_BUILD_FREETYPE #elif defined XENON /* libxenon also defines __linux__ (yes, really) */ #define CC_BUILD_XBOX360 + #define CC_BUILD_CONSOLE + #define CC_BUILD_LOWMEM #define CC_BUILD_NOMUSIC #define CC_BUILD_NOSOUNDS #define CC_BUILD_HTTPCLIENT - #define CC_BUILD_LOWMEM - #define CC_BUILD_CONSOLE - #undef CC_BUILD_FREETYPE #elif defined _WIN32 #define CC_BUILD_WIN #define CC_BUILD_D3D9 #define CC_BUILD_WINGUI - #define CC_BUILD_HTTPCLIENT #define CC_BUILD_SCHANNEL #define CC_BUILD_WINMM #elif defined __ANDROID__ @@ -267,122 +265,113 @@ typedef cc_uint8 cc_bool; #define CC_BUILD_COOPTHREADED #undef CC_BUILD_FREETYPE #undef CC_BUILD_RESOURCES + #undef CC_BUILD_PLUGINS #elif defined __psp__ #define CC_BUILD_PSP + #define CC_BUILD_CONSOLE + #define CC_BUILD_LOWMEM + #define CC_BUILD_COOPTHREADED #define CC_BUILD_OPENAL #define CC_BUILD_HTTPCLIENT - #define CC_BUILD_COOPTHREADED #define CC_BUILD_BEARSSL - #define CC_BUILD_LOWMEM - #define CC_BUILD_CONSOLE - #undef CC_BUILD_FREETYPE #elif defined __3DS__ #define CC_BUILD_3DS + #define CC_BUILD_CONSOLE + #define CC_BUILD_LOWMEM #define CC_BUILD_HTTPCLIENT #define CC_BUILD_BEARSSL - #define CC_BUILD_LOWMEM - #define CC_BUILD_CONSOLE #define CC_BUILD_TOUCH #define CC_BUILD_DUALSCREEN - #undef CC_BUILD_FREETYPE #elif defined GEKKO #define CC_BUILD_GCWII + #define CC_BUILD_CONSOLE + #define CC_BUILD_LOWMEM + #define CC_BUILD_COOPTHREADED #define CC_BUILD_HTTPCLIENT #define CC_BUILD_BEARSSL - #define CC_BUILD_COOPTHREADED - #define CC_BUILD_LOWMEM - #define CC_BUILD_CONSOLE - #undef CC_BUILD_FREETYPE #elif defined __vita__ #define CC_BUILD_PSVITA + #define CC_BUILD_CONSOLE + #define CC_BUILD_LOWMEM #define CC_BUILD_OPENAL #define CC_BUILD_HTTPCLIENT #define CC_BUILD_BEARSSL - #define CC_BUILD_LOWMEM - #define CC_BUILD_CONSOLE #define CC_BUILD_TOUCH - #undef CC_BUILD_FREETYPE #elif defined _arch_dreamcast #define CC_BUILD_DREAMCAST + #define CC_BUILD_CONSOLE + #define CC_BUILD_LOWMEM #define CC_BUILD_OPENAL #define CC_BUILD_HTTPCLIENT #define CC_BUILD_BEARSSL - #define CC_BUILD_LOWMEM - #define CC_BUILD_CONSOLE - #undef CC_BUILD_FREETYPE #undef CC_BUILD_RESOURCES #elif defined PLAT_PS3 #define CC_BUILD_PS3 + #define CC_BUILD_CONSOLE + #define CC_BUILD_LOWMEM #define CC_BUILD_OPENAL #define CC_BUILD_HTTPCLIENT - #define CC_BUILD_LOWMEM - #define CC_BUILD_CONSOLE #define CC_BUILD_BEARSSL - #undef CC_BUILD_FREETYPE #elif defined N64 #define CC_BIG_ENDIAN #define CC_BUILD_N64 - #define CC_BUILD_OPENAL - #define CC_BUILD_HTTPCLIENT - #define CC_BUILD_COOPTHREADED - #define CC_BUILD_LOWMEM #define CC_BUILD_CONSOLE - #undef CC_BUILD_FREETYPE + #define CC_BUILD_LOWMEM + #define CC_BUILD_COOPTHREADED + #define CC_BUILD_OPENAL #undef CC_BUILD_RESOURCES #undef CC_BUILD_NETWORKING #elif defined PLAT_PS2 #define CC_BUILD_PS2 + #define CC_BUILD_CONSOLE + #define CC_BUILD_LOWMEM + #define CC_BUILD_COOPTHREADED #define CC_BUILD_OPENAL #define CC_BUILD_HTTPCLIENT - #define CC_BUILD_COOPTHREADED - #define CC_BUILD_LOWMEM - #define CC_BUILD_CONSOLE - #undef CC_BUILD_FREETYPE #elif defined PLAT_NDS #define CC_BUILD_NDS + #define CC_BUILD_CONSOLE + #define CC_BUILD_LOWMEM + #define CC_BUILD_COOPTHREADED #define CC_BUILD_NOMUSIC #define CC_BUILD_NOSOUNDS #define CC_BUILD_HTTPCLIENT - #define CC_BUILD_COOPTHREADED - #define CC_BUILD_LOWMEM - #define CC_BUILD_CONSOLE #define CC_BUILD_TOUCH - #undef CC_BUILD_FREETYPE #undef CC_BUILD_RESOURCES #elif defined __WIIU__ #define CC_BUILD_WIIU + #define CC_BUILD_CONSOLE + #define CC_BUILD_LOWMEM + #define CC_BUILD_COOPTHREADED #define CC_BUILD_OPENAL #define CC_BUILD_HTTPCLIENT - #define CC_BUILD_COOPTHREADED - #define CC_BUILD_LOWMEM - #define CC_BUILD_CONSOLE #define CC_BUILD_BEARSSL - #undef CC_BUILD_FREETYPE #elif defined __SWITCH__ #define CC_BUILD_SWITCH + #define CC_BUILD_CONSOLE #define CC_BUILD_HTTPCLIENT #define CC_BUILD_BEARSSL - #define CC_BUILD_CONSOLE #define CC_BUILD_TOUCH #define CC_BUILD_GL #define CC_BUILD_GLMODERN #define CC_BUILD_GLES #define CC_BUILD_EGL - #undef CC_BUILD_FREETYPE #elif defined PLAT_PS1 #define CC_BUILD_PS1 - #define CC_BUILD_HTTPCLIENT - #define CC_BUILD_COOPTHREADED - #define CC_BUILD_LOWMEM #define CC_BUILD_CONSOLE + #define CC_BUILD_LOWMEM + #define CC_BUILD_COOPTHREADED #define CC_BUILD_NOMUSIC #define CC_BUILD_NOSOUNDS - #undef CC_BUILD_FREETYPE #undef CC_BUILD_RESOURCES #undef CC_BUILD_NETWORKING #endif #endif +#ifdef CC_BUILD_CONSOLE +#undef CC_BUILD_FREETYPE +#undef CC_BUILD_PLUGINS +#endif #ifndef CC_BUILD_LOWMEM #define EXTENDED_BLOCKS diff --git a/src/Game.c b/src/Game.c index 14cf3343a..0624b12f9 100644 --- a/src/Game.c +++ b/src/Game.c @@ -347,9 +347,7 @@ static void LoadOptions(void) { Game_Anaglyph3D = Options_GetBool(OPT_ANAGLYPH3D, false); } -#ifdef CC_BUILD_MINFILES -static void LoadPlugins(void) { } -#else +#ifdef CC_BUILD_PLUGINS static void LoadPlugin(const cc_string* path, void* obj) { void* lib; void* verSym; /* EXPORT int Plugin_ApiVersion = GAME_API_VER; */ @@ -390,6 +388,8 @@ static void LoadPlugins(void) { res = Directory_Enum(&dir, NULL, LoadPlugin); if (res) Logger_SysWarn(res, "enumerating plugins directory"); } +#else +static void LoadPlugins(void) { } #endif static void Game_Free(void* obj); diff --git a/src/Http_Worker.c b/src/Http_Worker.c index a249bf1ba..5d825513c 100644 --- a/src/Http_Worker.c +++ b/src/Http_Worker.c @@ -1155,6 +1155,24 @@ static cc_result HttpBackend_Do(struct HttpRequest* req, cc_string* url) { CFRelease(request); return result; } +#elif !defined CC_BUILD_NETWORKING +/*########################################################################################################################* +*------------------------------------------------------Null backend-------------------------------------------------------* +*#########################################################################################################################*/ +#include "Errors.h" + +static cc_bool HttpBackend_DescribeError(cc_result res, cc_string* dst) { + return false; +} + +static void HttpBackend_Init(void) { } + +static void Http_AddHeader(struct HttpRequest* req, const char* key, const cc_string* value) { } + +static cc_result HttpBackend_Do(struct HttpRequest* req, cc_string* url) { + req->progress = 100; + return ERR_NOT_SUPPORTED; +} #endif diff --git a/src/Logger.c b/src/Logger.c index 7bb32070d..5ae5868e2 100644 --- a/src/Logger.c +++ b/src/Logger.c @@ -8,35 +8,35 @@ #include "Utils.h" #if defined CC_BUILD_WEB -/* Can't see native CPU state with javascript */ + /* Can't see native CPU state with javascript */ #elif defined CC_BUILD_WIN -#define WIN32_LEAN_AND_MEAN -#define NOSERVICE -#define NOMCX -#define NOIME -#define CUR_PROCESS_HANDLE ((HANDLE)-1) /* GetCurrentProcess() always returns -1 */ - -#include -#include -static HANDLE curProcess = CUR_PROCESS_HANDLE; + #define WIN32_LEAN_AND_MEAN + #define NOSERVICE + #define NOMCX + #define NOIME + #define CUR_PROCESS_HANDLE ((HANDLE)-1) /* GetCurrentProcess() always returns -1 */ + + #include + #include + static HANDLE curProcess = CUR_PROCESS_HANDLE; #elif defined CC_BUILD_OPENBSD || defined CC_BUILD_HAIKU || defined CC_BUILD_SERENITY -#include -/* These operating systems don't provide sys/ucontext.h */ -/* But register constants be found from includes in */ + #include + /* These operating systems don't provide sys/ucontext.h */ + /* But register constants be found from includes in */ #elif defined CC_BUILD_LINUX || defined CC_BUILD_ANDROID -/* Need to define this to get REG_ constants */ -#define _GNU_SOURCE -#include -#include + /* Need to define this to get REG_ constants */ + #define _GNU_SOURCE + #include + #include #elif defined CC_BUILD_POSIX -#include -#include + #include + #include #endif + #ifdef CC_BUILD_DARWIN /* Need this to detect macOS < 10.4, and switch to NS* api instead if so */ #include #endif - /* Only show up to 50 frames in backtrace */ #define MAX_BACKTRACE_FRAMES 50 From cfa3676e44f2385a73c6fdf1b95d71264aa4a6fc Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Tue, 2 Apr 2024 22:18:13 +1100 Subject: [PATCH 35/41] Gamepad: WIP towards customising axis behaviour and sensitivity --- src/Core.h | 133 ++++++++++++++++++++++++++-------------------------- src/Input.c | 27 +++++------ src/Input.h | 9 +++- 3 files changed, 86 insertions(+), 83 deletions(-) diff --git a/src/Core.h b/src/Core.h index d66ca7c16..8b691795a 100644 --- a/src/Core.h +++ b/src/Core.h @@ -6,74 +6,74 @@ Copyright 2014-2023 ClassiCube | Licensed under BSD-3 */ #if _MSC_VER -typedef signed __int8 cc_int8; -typedef signed __int16 cc_int16; -typedef signed __int32 cc_int32; -typedef signed __int64 cc_int64; - -typedef unsigned __int8 cc_uint8; -typedef unsigned __int16 cc_uint16; -typedef unsigned __int32 cc_uint32; -typedef unsigned __int64 cc_uint64; -#ifdef _WIN64 -typedef unsigned __int64 cc_uintptr; -#else -typedef unsigned __int32 cc_uintptr; -#endif - -#define CC_INLINE inline -#define CC_NOINLINE __declspec(noinline) -#ifndef CC_API -#define CC_API __declspec(dllexport, noinline) -#define CC_VAR __declspec(dllexport) -#endif - -#define CC_HAS_TYPES -#define CC_HAS_MISC + typedef signed __int8 cc_int8; + typedef signed __int16 cc_int16; + typedef signed __int32 cc_int32; + typedef signed __int64 cc_int64; + + typedef unsigned __int8 cc_uint8; + typedef unsigned __int16 cc_uint16; + typedef unsigned __int32 cc_uint32; + typedef unsigned __int64 cc_uint64; + #ifdef _WIN64 + typedef unsigned __int64 cc_uintptr; + #else + typedef unsigned __int32 cc_uintptr; + #endif + + #define CC_INLINE inline + #define CC_NOINLINE __declspec(noinline) + #ifndef CC_API + #define CC_API __declspec(dllexport, noinline) + #define CC_VAR __declspec(dllexport) + #endif + + #define CC_HAS_TYPES + #define CC_HAS_MISC #elif __GNUC__ -/* really old GCC/clang might not have these defined */ -#ifdef __INT8_TYPE__ -/* avoid including because it breaks defining UNICODE in Platform.c with MinGW */ -typedef __INT8_TYPE__ cc_int8; -typedef __INT16_TYPE__ cc_int16; -typedef __INT32_TYPE__ cc_int32; -typedef __INT64_TYPE__ cc_int64; - -#ifdef __UINT8_TYPE__ -typedef __UINT8_TYPE__ cc_uint8; -typedef __UINT16_TYPE__ cc_uint16; -typedef __UINT32_TYPE__ cc_uint32; -typedef __UINT64_TYPE__ cc_uint64; -typedef __UINTPTR_TYPE__ cc_uintptr; -#else -/* clang doesn't define the __UINT8_TYPE__ */ -typedef unsigned __INT8_TYPE__ cc_uint8; -typedef unsigned __INT16_TYPE__ cc_uint16; -typedef unsigned __INT32_TYPE__ cc_uint32; -typedef unsigned __INT64_TYPE__ cc_uint64; -typedef unsigned __INTPTR_TYPE__ cc_uintptr; -#endif -#define CC_HAS_TYPES -#endif - -#define CC_INLINE inline -#define CC_NOINLINE __attribute__((noinline)) -#ifndef CC_API -#ifdef _WIN32 -#define CC_API __attribute__((dllexport, noinline)) -#define CC_VAR __attribute__((dllexport)) -#else -#define CC_API __attribute__((visibility("default"), noinline)) -#define CC_VAR __attribute__((visibility("default"))) -#endif -#endif -#define CC_HAS_MISC -#ifdef __BIG_ENDIAN__ -#define CC_BIG_ENDIAN -#endif + /* really old GCC/clang might not have these defined */ + #ifdef __INT8_TYPE__ + /* avoid including because it breaks defining UNICODE in Platform.c with MinGW */ + typedef __INT8_TYPE__ cc_int8; + typedef __INT16_TYPE__ cc_int16; + typedef __INT32_TYPE__ cc_int32; + typedef __INT64_TYPE__ cc_int64; + + #ifdef __UINT8_TYPE__ + typedef __UINT8_TYPE__ cc_uint8; + typedef __UINT16_TYPE__ cc_uint16; + typedef __UINT32_TYPE__ cc_uint32; + typedef __UINT64_TYPE__ cc_uint64; + typedef __UINTPTR_TYPE__ cc_uintptr; + #else + /* clang doesn't define the __UINT8_TYPE__ */ + typedef unsigned __INT8_TYPE__ cc_uint8; + typedef unsigned __INT16_TYPE__ cc_uint16; + typedef unsigned __INT32_TYPE__ cc_uint32; + typedef unsigned __INT64_TYPE__ cc_uint64; + typedef unsigned __INTPTR_TYPE__ cc_uintptr; + #endif + #define CC_HAS_TYPES + #endif + + #define CC_INLINE inline + #define CC_NOINLINE __attribute__((noinline)) + #ifndef CC_API + #ifdef _WIN32 + #define CC_API __attribute__((dllexport, noinline)) + #define CC_VAR __attribute__((dllexport)) + #else + #define CC_API __attribute__((visibility("default"), noinline)) + #define CC_VAR __attribute__((visibility("default"))) + #endif + #endif + #define CC_HAS_MISC + #ifdef __BIG_ENDIAN__ + #define CC_BIG_ENDIAN + #endif #elif __MWERKS__ -/* TODO: Is there actual attribute support for CC_API etc somewhere? */ -#define CC_BIG_ENDIAN + /* TODO: Is there actual attribute support for CC_API etc somewhere? */ + #define CC_BIG_ENDIAN #endif /* Unrecognised compiler, so just go with some sensible default typdefs */ @@ -146,6 +146,7 @@ typedef cc_uint8 cc_bool; #define CC_BUILD_WIN #define CC_BUILD_D3D9 #define CC_BUILD_WINGUI + #define CC_BUILD_HTTPCLIENT #define CC_BUILD_SCHANNEL #define CC_BUILD_WINMM #elif defined __ANDROID__ diff --git a/src/Input.c b/src/Input.c index b7730b2af..6edcfb66a 100644 --- a/src/Input.c +++ b/src/Input.c @@ -420,6 +420,10 @@ static void KeyBind_Init(void) { #define GAMEPAD_BEG_BTN CCPAD_A static float pad_holdtime[INPUT_COUNT - GAMEPAD_BEG_BTN]; +int Gamepad_AxisBehaviour[2] = { AXIS_BEHAVIOUR_MOVEMENT, AXIS_BEHAVIOUR_CAMERA }; +int Gamepad_AxisSensitivity[2] = { AXIS_SENSI_NORMAL, AXIS_SENSI_NORMAL }; +static const float axis_sensiFactor[] = { 0.25f, 0.5f, 1.0f, 2.0f, 4.0f }; + void Gamepad_SetButton(int btn, int pressed) { /* Reset hold tracking time */ if (pressed && !Input.Pressed[btn]) pad_holdtime[btn - GAMEPAD_BEG_BTN] = 0; @@ -427,25 +431,18 @@ void Gamepad_SetButton(int btn, int pressed) { Input_SetNonRepeatable(btn, pressed); } -static void Gamepad_SetLAxis(float x, float y, double delta) { - if (x == 0 && y == 0) return; - - Input.JoystickMovement = true; - Input.JoystickAngle = Math_Atan2(x, -y); -} - -static void Gamepad_SetRAxis(float x, float y, double delta) { - float scale = delta * 60.0; - Event_RaiseRawMove(&ControllerEvents.RawMoved, x * scale, y * scale); -} - void Gamepad_SetAxis(int axis, float x, float y, double delta) { if (!Input.RawMode) return; - if (axis == PAD_AXIS_LEFT) { - Gamepad_SetLAxis(x, y, delta); + if (Gamepad_AxisBehaviour[axis] == AXIS_BEHAVIOUR_MOVEMENT) { + if (x == 0 && y == 0) return; + + Input.JoystickMovement = true; + Input.JoystickAngle = Math_Atan2(x, -y); } else { - Gamepad_SetRAxis(x, y, delta); + int sensi = Gamepad_AxisSensitivity[axis]; + float scale = delta * 60.0 * axis_sensiFactor[sensi]; + Event_RaiseRawMove(&ControllerEvents.RawMoved, x * scale, y * scale); } } diff --git a/src/Input.h b/src/Input.h index 40294afb3..38d5ad316 100644 --- a/src/Input.h +++ b/src/Input.h @@ -187,9 +187,14 @@ void KeyBind_Set(KeyBind binding, int key, cc_uint8* binds); /* Gamepad axes. Default behaviour is: */ -/* - left axis: player movement */ +/* - left axis: player movement */ /* - right axis: camera movement */ -enum PAD_AXIS { PAD_AXIS_LEFT, PAD_AXIS_RIGHT }; +enum PAD_AXIS { PAD_AXIS_LEFT, PAD_AXIS_RIGHT }; +enum AXIS_SENSITIVITY { AXIS_SENSI_LOWER, AXIS_SENSI_LOW, AXIS_SENSI_NORMAL, AXIS_SENSI_HIGH, AXIS_SENSI_HIGHER }; +enum AXIS_BEHAVIOUR { AXIS_BEHAVIOUR_MOVEMENT, AXIS_BEHAVIOUR_CAMERA }; +extern int Gamepad_AxisBehaviour[2]; +extern int Gamepad_AxisSensitivity[2]; + /* Sets value of the given gamepad button */ void Gamepad_SetButton(int btn, int pressed); /* Sets value of the given axis */ From 4b9ab4de5f5c916ab3321a0ec7ff3dea060e78fd Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Tue, 2 Apr 2024 23:28:27 +1100 Subject: [PATCH 36/41] Start refactoring resource creation --- src/Audio.c | 3 +- src/Resources.c | 131 ++++++++++++++++++++++++++---------------------- src/Vorbis.c | 4 ++ src/Vorbis.h | 4 +- 4 files changed, 80 insertions(+), 62 deletions(-) diff --git a/src/Audio.c b/src/Audio.c index 3c3a042d8..6cc450b13 100644 --- a/src/Audio.c +++ b/src/Audio.c @@ -335,7 +335,7 @@ static cc_result Music_Buffer(cc_int16* data, int maxSamples, struct VorbisState static cc_result Music_PlayOgg(struct Stream* source) { struct OggState ogg; - struct VorbisState vorbis = { 0 }; + struct VorbisState vorbis; int channels, sampleRate, volume; int chunkSize, samplesPerSecond; @@ -344,6 +344,7 @@ static cc_result Music_PlayOgg(struct Stream* source) { cc_result res; Ogg_Init(&ogg, source); + Vorbis_Init(&vorbis); vorbis.source = &ogg; if ((res = Vorbis_DecodeHeaders(&vorbis))) goto cleanup; diff --git a/src/Resources.c b/src/Resources.c index a81710053..137794819 100644 --- a/src/Resources.c +++ b/src/Resources.c @@ -44,6 +44,9 @@ struct ResourceZipEntry { union ResourceValue value; cc_uint32 offset, crc32; }; +#define RESOURCE_TYPE_DATA 1 +#define RESOURCE_TYPE_PNG 2 +#define RESOURCE_TYPE_CONST 3 static CC_NOINLINE cc_bool Fetcher_Get(int reqID, struct HttpRequest* item); CC_NOINLINE static struct ResourceZipEntry* ZipEntries_Find(const cc_string* name); @@ -325,30 +328,36 @@ static void SoundPatcher_WriteWav(struct Stream* s, struct VorbisState* ctx) { /* Converts an OGG sound to a WAV sound for faster decoding later */ static void SoundPatcher_Save(const char* name, struct HttpRequest* req) { cc_string path; char pathBuffer[STRING_SIZE]; - struct OggState ogg; + struct OggState* ogg = NULL; + struct VorbisState* ctx = NULL; struct Stream src, dst; - struct VorbisState* ctx; cc_result res; - ctx = (struct VorbisState*)Mem_TryAllocCleared(1, sizeof(struct VorbisState)); - if (!ctx) { Logger_SysWarn(ERR_OUT_OF_MEMORY, "allocating memory"); return; } + ogg = (struct OggState*)Mem_TryAlloc(1, sizeof(struct OggState)); + if (!ogg) { Logger_SysWarn(ERR_OUT_OF_MEMORY, "allocating memory"); goto cleanup; } + + ctx = (struct VorbisState*)Mem_TryAlloc(1, sizeof(struct VorbisState)); + if (!ctx) { Logger_SysWarn(ERR_OUT_OF_MEMORY, "allocating memory"); goto cleanup; } Stream_ReadonlyMemory(&src, req->data, req->size); String_InitArray(path, pathBuffer); String_Format1(&path, "audio/%c.wav", name); res = Stream_CreateFile(&dst, &path); - if (res) { Logger_SysWarn(res, "creating .wav file"); return; } + if (res) { Logger_SysWarn(res, "creating .wav file"); goto cleanup; } - Ogg_Init(&ogg, &src); - ctx->source = &ogg; + Ogg_Init(ogg, &src); + Vorbis_Init(ctx); + ctx->source = ogg; SoundPatcher_WriteWav(&dst, ctx); res = dst.Close(&dst); if (res) Logger_SysWarn(res, "closing .wav file"); - Vorbis_Free(ctx); +cleanup: + if (ctx) Vorbis_Free(ctx); Mem_Free(ctx); + Mem_Free(ogg); } @@ -463,7 +472,7 @@ static const struct AssetSet ccTexsAssetSet = { /*########################################################################################################################* -*---------------------------------------------------------Zip writer------------------------------------------------------* +*------------------------------------------------------Zip entry writer---------------------------------------------------* *#########################################################################################################################*/ static void GetCurrentZipDate(int* modTime, int* modDate) { struct DateTime now; @@ -599,12 +608,55 @@ static cc_result ZipWriter_WritePng(struct Stream* dst, struct ResourceZipEntry* /*########################################################################################################################* -*----------------------------------------------------default.zip resources------------------------------------------------* +*------------------------------------------------------Zip file writer----------------------------------------------------* *#########################################################################################################################*/ -#define RESOURCE_TYPE_DATA 1 -#define RESOURCE_TYPE_PNG 2 -#define RESOURCE_TYPE_CONST 3 +static cc_result ZipFile_WriteEntries(struct Stream* s, struct ResourceZipEntry* entries, int numEntries) { + struct ResourceZipEntry* e; + cc_uint32 beg, end; + int i; + cc_result res; + + for (i = 0; i < numEntries; i++) + { + e = &entries[i]; + if (e->type == RESOURCE_TYPE_PNG) { + if ((res = ZipWriter_WritePng(s, e))) return res; + } else { + if ((res = ZipWriter_WriteData(s, e))) return res; + } + } + + if ((res = s->Position(s, &beg))) return res; + for (i = 0; i < numEntries; i++) + { + if ((res = ZipWriter_CentralDir(s, &entries[i]))) return res; + } + + if ((res = s->Position(s, &end))) return res; + return ZipWriter_EndOfCentralDir(s, numEntries, beg, end); +} + +static void ZipFile_Create(cc_string* path, struct ResourceZipEntry* entries, int numEntries) { + struct Stream s; + cc_result res; + + res = Stream_CreateFile(&s, path); + if (res) { + Logger_SysWarn2(res, "creating", path); return; + } + + res = ZipFile_WriteEntries(&s, entries, numEntries); + if (res) Logger_SysWarn2(res, "making", path); + + res = s.Close(&s); + if (res) Logger_SysWarn2(res, "closing", path); +} + + +/*########################################################################################################################* +*----------------------------------------------------default.zip resources------------------------------------------------* +*#########################################################################################################################*/ #define ANIMS_TXT \ "# This file defines the animations used in a texture pack for ClassiCube.\r\n" \ "# Each line is in the format : \r\n" \ @@ -883,52 +935,6 @@ static cc_result Classic0023Patcher_OldGold(struct HttpRequest* req) { } -/*########################################################################################################################* -*------------------------------------------------------default.zip writer-------------------------------------------------* -*#########################################################################################################################*/ -static cc_result DefaultZip_WriteEntries(struct Stream* s) { - struct ResourceZipEntry* e; - cc_uint32 beg, end; - int i; - cc_result res; - - for (i = 0; i < Array_Elems(defaultZipEntries); i++) { - e = &defaultZipEntries[i]; - - if (e->type == RESOURCE_TYPE_PNG) { - if ((res = ZipWriter_WritePng(s, e))) return res; - } else { - if ((res = ZipWriter_WriteData(s, e))) return res; - } - } - - if ((res = s->Position(s, &beg))) return res; - for (i = 0; i < Array_Elems(defaultZipEntries); i++) { - if ((res = ZipWriter_CentralDir(s, &defaultZipEntries[i]))) return res; - } - - if ((res = s->Position(s, &end))) return res; - return ZipWriter_EndOfCentralDir(s, Array_Elems(defaultZipEntries), beg, end); -} - -static void DefaultZip_Create(void) { - cc_string path = String_FromReadonly(Game_Version.DefaultTexpack); - struct Stream s; - cc_result res; - - res = Stream_CreateFile(&s, &path); - if (res) { - Logger_SysWarn2(res, "creating", &path); return; - } - - res = DefaultZip_WriteEntries(&s); - if (res) Logger_SysWarn2(res, "making", &path); - - res = s.Close(&s); - if (res) Logger_SysWarn2(res, "closing", &path); -} - - /*########################################################################################################################* *-----------------------------------------------Minecraft Classic texture assets------------------------------------------* *#########################################################################################################################*/ @@ -1008,6 +1014,11 @@ static const char* MCCTextures_GetRequestName(int reqID) { /*########################################################################################################################* *------------------------------------------Minecraft Classic texture assets processing -----------------------------------* *#########################################################################################################################*/ +static void MCCTextures_CreateDefaultZip(void) { + cc_string path = String_FromReadonly(Game_Version.DefaultTexpack); + ZipFile_Create(&path, defaultZipEntries, Array_Elems(defaultZipEntries)); +} + static void MCCTextures_CheckSource(struct ZipfileSource* source) { struct HttpRequest item; cc_result res; @@ -1023,7 +1034,7 @@ static void MCCTextures_CheckSource(struct ZipfileSource* source) { HttpRequest_Free(&item); if (++numDefaultZipProcessed < numDefaultZipSources) return; - DefaultZip_Create(); + MCCTextures_CreateDefaultZip(); } static void MCCTextures_CheckStatus(void) { diff --git a/src/Vorbis.c b/src/Vorbis.c index 2c75d7f72..b0a2e74d5 100644 --- a/src/Vorbis.c +++ b/src/Vorbis.c @@ -1229,6 +1229,10 @@ static void Vorbis_CalcWindow(struct VorbisWindow* window, int blockSize) { } } +void Vorbis_Init(struct VorbisState* ctx) { + Mem_Set(ctx, 0, sizeof(*ctx) - sizeof(ctx->imdct)); +} + void Vorbis_Free(struct VorbisState* ctx) { int i; for (i = 0; i < ctx->numCodebooks; i++) diff --git a/src/Vorbis.h b/src/Vorbis.h index 56353aa90..b37437ad7 100644 --- a/src/Vorbis.h +++ b/src/Vorbis.h @@ -56,7 +56,9 @@ struct VorbisState { struct imdct_state imdct[2]; }; -/* Frees all dynamic memory allocated to decode the given vorbis audio. */ +/* Initialises the given context to defaults */ +void Vorbis_Init(struct VorbisState* ctx); +/* Frees all memory dynamically allocated by the given context */ void Vorbis_Free(struct VorbisState* ctx); /* Reads and decodes the initial vorbis headers and setup data. */ cc_result Vorbis_DecodeHeaders(struct VorbisState* ctx); From f600f84cbf4b84cac75611c526ebde67fb389b3e Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Wed, 3 Apr 2024 07:45:04 +1100 Subject: [PATCH 37/41] More WIP towards sound zip creation --- src/Resources.c | 449 +++++++++++++++++++++++++++--------------------- 1 file changed, 249 insertions(+), 200 deletions(-) diff --git a/src/Resources.c b/src/Resources.c index 137794819..52b0be256 100644 --- a/src/Resources.c +++ b/src/Resources.c @@ -28,6 +28,8 @@ struct AssetSet { const char* (*GetRequestName)(int reqID); /* Checks if any assets have been downloaded, and processes them if so */ void (*CheckStatus)(void); + /* Resets state and frees and allocated memory */ + void (*ResetState)(void); }; int Resources_Count, Resources_Size; @@ -47,12 +49,196 @@ struct ResourceZipEntry { #define RESOURCE_TYPE_DATA 1 #define RESOURCE_TYPE_PNG 2 #define RESOURCE_TYPE_CONST 3 +#define RESOURCE_TYPE_SOUND 4 static CC_NOINLINE cc_bool Fetcher_Get(int reqID, struct HttpRequest* item); CC_NOINLINE static struct ResourceZipEntry* ZipEntries_Find(const cc_string* name); static cc_result ZipEntry_ExtractData(struct ResourceZipEntry* e, struct Stream* data, struct ZipEntry* source); +/*########################################################################################################################* +*------------------------------------------------------Zip entry writer---------------------------------------------------* +*#########################################################################################################################*/ +static void GetCurrentZipDate(int* modTime, int* modDate) { + struct DateTime now; + DateTime_CurrentLocal(&now); + + *modTime = (now.second / 2) | (now.minute << 5) | (now.hour << 11); + *modDate = (now.day) | (now.month << 5) | ((now.year - 1980) << 9); +} + +static cc_result ZipWriter_LocalFile(struct Stream* s, struct ResourceZipEntry* e) { + int filenameLen = String_Length(e->filename); + cc_uint8 header[30 + STRING_SIZE]; + cc_result res; + int modTime, modDate; + + GetCurrentZipDate(&modTime, &modDate); + if ((res = s->Position(s, &e->offset))) return res; + + Stream_SetU32_LE(header + 0, 0x04034b50); /* signature */ + Stream_SetU16_LE(header + 4, 20); /* version needed */ + Stream_SetU16_LE(header + 6, 0); /* bitflags */ + Stream_SetU16_LE(header + 8, 0); /* compression method */ + Stream_SetU16_LE(header + 10, modTime); /* last modified */ + Stream_SetU16_LE(header + 12, modDate); /* last modified */ + + Stream_SetU32_LE(header + 14, e->crc32); /* CRC32 */ + Stream_SetU32_LE(header + 18, e->size); /* Compressed size */ + Stream_SetU32_LE(header + 22, e->size); /* Uncompressed size */ + + Stream_SetU16_LE(header + 26, filenameLen); /* name length */ + Stream_SetU16_LE(header + 28, 0); /* extra field length */ + + Mem_Copy(header + 30, e->filename, filenameLen); + return Stream_Write(s, header, 30 + filenameLen); +} + +static cc_result ZipWriter_CentralDir(struct Stream* s, struct ResourceZipEntry* e) { + int filenameLen = String_Length(e->filename); + cc_uint8 header[46 + STRING_SIZE]; + int modTime, modDate; + GetCurrentZipDate(&modTime, &modDate); + + Stream_SetU32_LE(header + 0, 0x02014b50); /* signature */ + Stream_SetU16_LE(header + 4, 20); /* version */ + Stream_SetU16_LE(header + 6, 20); /* version needed */ + Stream_SetU16_LE(header + 8, 0); /* bitflags */ + Stream_SetU16_LE(header + 10, 0); /* compression method */ + Stream_SetU16_LE(header + 12, modTime); /* last modified */ + Stream_SetU16_LE(header + 14, modDate); /* last modified */ + + Stream_SetU32_LE(header + 16, e->crc32); /* CRC32 */ + Stream_SetU32_LE(header + 20, e->size); /* compressed size */ + Stream_SetU32_LE(header + 24, e->size); /* uncompressed size */ + + Stream_SetU16_LE(header + 28, filenameLen); /* name length */ + Stream_SetU16_LE(header + 30, 0); /* extra field length */ + Stream_SetU16_LE(header + 32, 0); /* file comment length */ + Stream_SetU16_LE(header + 34, 0); /* disk number */ + Stream_SetU16_LE(header + 36, 0); /* internal attributes */ + Stream_SetU32_LE(header + 38, 0); /* external attributes */ + Stream_SetU32_LE(header + 42, e->offset); /* local header offset */ + + Mem_Copy(header + 46, e->filename, filenameLen); + return Stream_Write(s, header, 46 + filenameLen); +} + +static cc_result ZipWriter_EndOfCentralDir(struct Stream* s, int numEntries, + cc_uint32 centralDirBeg, cc_uint32 centralDirEnd) { + cc_uint8 header[22]; + + Stream_SetU32_LE(header + 0, 0x06054b50); /* signature */ + Stream_SetU16_LE(header + 4, 0); /* disk number */ + Stream_SetU16_LE(header + 6, 0); /* disk number of start */ + Stream_SetU16_LE(header + 8, numEntries); /* disk entries */ + Stream_SetU16_LE(header + 10, numEntries); /* total entries */ + Stream_SetU32_LE(header + 12, centralDirEnd - centralDirBeg); /* central dir size */ + Stream_SetU32_LE(header + 16, centralDirBeg); /* central dir start */ + Stream_SetU16_LE(header + 20, 0); /* comment length */ + return Stream_Write(s, header, 22); +} + +static cc_result ZipWriter_FixupLocalFile(struct Stream* s, struct ResourceZipEntry* e) { + int filenameLen = String_Length(e->filename); + cc_uint8 tmp[2048]; + cc_uint32 dataBeg, dataEnd; + cc_uint32 i, crc, toRead, read; + cc_result res; + + dataBeg = e->offset + 30 + filenameLen; + if ((res = s->Position(s, &dataEnd))) return res; + e->size = dataEnd - dataBeg; + + /* work out the CRC 32 */ + crc = 0xffffffffUL; + if ((res = s->Seek(s, dataBeg))) return res; + + for (; dataBeg < dataEnd; dataBeg += read) { + toRead = dataEnd - dataBeg; + toRead = min(toRead, sizeof(tmp)); + + if ((res = s->Read(s, tmp, toRead, &read))) return res; + if (!read) return ERR_END_OF_STREAM; + + for (i = 0; i < read; i++) { + crc = Utils_Crc32Table[(crc ^ tmp[i]) & 0xFF] ^ (crc >> 8); + } + } + e->crc32 = crc ^ 0xffffffffUL; + + /* then fixup the header */ + if ((res = s->Seek(s, e->offset))) return res; + if ((res = ZipWriter_LocalFile(s, e))) return res; + return s->Seek(s, dataEnd); +} + +static cc_result ZipWriter_WriteData(struct Stream* dst, struct ResourceZipEntry* e) { + cc_uint8* data = e->value.data; + cc_result res; + e->crc32 = Utils_CRC32(data, e->size); + + if ((res = ZipWriter_LocalFile(dst, e))) return res; + return Stream_Write(dst, data, e->size); +} + +static cc_result ZipWriter_WritePng(struct Stream* dst, struct ResourceZipEntry* e) { + struct Bitmap* src = &e->value.bmp; + cc_result res; + + if ((res = ZipWriter_LocalFile(dst, e))) return res; + if ((res = Png_Encode(src, dst, NULL, true, NULL))) return res; + return ZipWriter_FixupLocalFile(dst, e); +} + + +/*########################################################################################################################* +*------------------------------------------------------Zip file writer----------------------------------------------------* +*#########################################################################################################################*/ +static cc_result ZipFile_WriteEntries(struct Stream* s, struct ResourceZipEntry* entries, int numEntries) { + struct ResourceZipEntry* e; + cc_uint32 beg, end; + int i; + cc_result res; + + for (i = 0; i < numEntries; i++) + { + e = &entries[i]; + + if (e->type == RESOURCE_TYPE_PNG) { + if ((res = ZipWriter_WritePng(s, e))) return res; + } else { + if ((res = ZipWriter_WriteData(s, e))) return res; + } + } + + if ((res = s->Position(s, &beg))) return res; + for (i = 0; i < numEntries; i++) + { + if ((res = ZipWriter_CentralDir(s, &entries[i]))) return res; + } + + if ((res = s->Position(s, &end))) return res; + return ZipWriter_EndOfCentralDir(s, numEntries, beg, end); +} + +static void ZipFile_Create(cc_string* path, struct ResourceZipEntry* entries, int numEntries) { + struct Stream s; + cc_result res; + + res = Stream_CreateFile(&s, path); + if (res) { + Logger_SysWarn2(res, "creating", path); return; + } + + res = ZipFile_WriteEntries(&s, entries, numEntries); + if (res) Logger_SysWarn2(res, "making", path); + + res = s.Close(&s); + if (res) Logger_SysWarn2(res, "closing", path); +} + + /*########################################################################################################################* *---------------------------------------------------------Music assets----------------------------------------------------* *#########################################################################################################################*/ @@ -161,12 +347,16 @@ static void MusicAssets_CheckStatus(void) { } } +static void MusicAssets_ResetState(void) { +} + static const struct AssetSet mccMusicAssetSet = { MusicAssets_CheckExistence, MusicAssets_CountMissing, MusicAssets_DownloadAssets, MusicAssets_GetRequestName, - MusicAssets_CheckStatus + MusicAssets_CheckStatus, + MusicAssets_ResetState }; @@ -176,7 +366,8 @@ static const struct AssetSet mccMusicAssetSet = { static struct SoundAsset { const char* name; const char* hash; - int reqID; + int reqID, size; + void* data; } soundAssets[] = { { "dig_cloth1", "5fd568d724ba7d53911b6cccf5636f859d2662e8" }, { "dig_cloth2", "56c1d0ac0de2265018b2c41cb571cc6631101484" }, { "dig_cloth3", "9c63f2a3681832dc32d206f6830360bfe94b5bfc" }, { "dig_cloth4", "55da1856e77cfd31a7e8c3d358e1f856c5583198" }, @@ -361,11 +552,15 @@ static void SoundPatcher_Save(const char* name, struct HttpRequest* req) { } -static void SoundAsset_Check(const struct SoundAsset* sound) { +static void SoundAsset_Check(struct SoundAsset* sound) { struct HttpRequest item; if (!Fetcher_Get(sound->reqID, &item)) return; SoundPatcher_Save(sound->name, &item); + + sound->data = item.data; + sound->size = item.size; + item.data = NULL; HttpRequest_Free(&item); } @@ -377,12 +572,24 @@ static void SoundAssets_CheckStatus(void) { } } +static void SoundAssets_ResetState(void) { + int i; + allSoundsExist = false; + + for (i = 0; i < Array_Elems(soundAssets); i++) + { + Mem_Free(soundAssets[i].data); + soundAssets[i].data = NULL; + } +} + static const struct AssetSet mccSoundAssetSet = { SoundAssets_CheckExistence, SoundAssets_CountMissing, SoundAssets_DownloadAssets, SoundAssets_GetRequestName, - SoundAssets_CheckStatus + SoundAssets_CheckStatus, + SoundAssets_ResetState }; @@ -462,198 +669,21 @@ static void CCTextures_CheckStatus(void) { HttpRequest_Free(&item); } +static void CCTextures_ResetState(void) { + ccTexturesExist = false; + ccTexturesDownloaded = false; +} + static const struct AssetSet ccTexsAssetSet = { CCTextures_CheckExistence, CCTextures_CountMissing, CCTextures_DownloadAssets, CCTextures_GetRequestName, - CCTextures_CheckStatus + CCTextures_CheckStatus, + CCTextures_ResetState }; -/*########################################################################################################################* -*------------------------------------------------------Zip entry writer---------------------------------------------------* -*#########################################################################################################################*/ -static void GetCurrentZipDate(int* modTime, int* modDate) { - struct DateTime now; - DateTime_CurrentLocal(&now); - - *modTime = (now.second / 2) | (now.minute << 5) | (now.hour << 11); - *modDate = (now.day) | (now.month << 5) | ((now.year - 1980) << 9); -} - -static cc_result ZipWriter_LocalFile(struct Stream* s, struct ResourceZipEntry* e) { - int filenameLen = String_Length(e->filename); - cc_uint8 header[30 + STRING_SIZE]; - cc_result res; - int modTime, modDate; - - GetCurrentZipDate(&modTime, &modDate); - if ((res = s->Position(s, &e->offset))) return res; - - Stream_SetU32_LE(header + 0, 0x04034b50); /* signature */ - Stream_SetU16_LE(header + 4, 20); /* version needed */ - Stream_SetU16_LE(header + 6, 0); /* bitflags */ - Stream_SetU16_LE(header + 8, 0); /* compression method */ - Stream_SetU16_LE(header + 10, modTime); /* last modified */ - Stream_SetU16_LE(header + 12, modDate); /* last modified */ - - Stream_SetU32_LE(header + 14, e->crc32); /* CRC32 */ - Stream_SetU32_LE(header + 18, e->size); /* Compressed size */ - Stream_SetU32_LE(header + 22, e->size); /* Uncompressed size */ - - Stream_SetU16_LE(header + 26, filenameLen); /* name length */ - Stream_SetU16_LE(header + 28, 0); /* extra field length */ - - Mem_Copy(header + 30, e->filename, filenameLen); - return Stream_Write(s, header, 30 + filenameLen); -} - -static cc_result ZipWriter_CentralDir(struct Stream* s, struct ResourceZipEntry* e) { - int filenameLen = String_Length(e->filename); - cc_uint8 header[46 + STRING_SIZE]; - int modTime, modDate; - GetCurrentZipDate(&modTime, &modDate); - - Stream_SetU32_LE(header + 0, 0x02014b50); /* signature */ - Stream_SetU16_LE(header + 4, 20); /* version */ - Stream_SetU16_LE(header + 6, 20); /* version needed */ - Stream_SetU16_LE(header + 8, 0); /* bitflags */ - Stream_SetU16_LE(header + 10, 0); /* compression method */ - Stream_SetU16_LE(header + 12, modTime); /* last modified */ - Stream_SetU16_LE(header + 14, modDate); /* last modified */ - - Stream_SetU32_LE(header + 16, e->crc32); /* CRC32 */ - Stream_SetU32_LE(header + 20, e->size); /* compressed size */ - Stream_SetU32_LE(header + 24, e->size); /* uncompressed size */ - - Stream_SetU16_LE(header + 28, filenameLen); /* name length */ - Stream_SetU16_LE(header + 30, 0); /* extra field length */ - Stream_SetU16_LE(header + 32, 0); /* file comment length */ - Stream_SetU16_LE(header + 34, 0); /* disk number */ - Stream_SetU16_LE(header + 36, 0); /* internal attributes */ - Stream_SetU32_LE(header + 38, 0); /* external attributes */ - Stream_SetU32_LE(header + 42, e->offset); /* local header offset */ - - Mem_Copy(header + 46, e->filename, filenameLen); - return Stream_Write(s, header, 46 + filenameLen); -} - -static cc_result ZipWriter_EndOfCentralDir(struct Stream* s, int numEntries, - cc_uint32 centralDirBeg, cc_uint32 centralDirEnd) { - cc_uint8 header[22]; - - Stream_SetU32_LE(header + 0, 0x06054b50); /* signature */ - Stream_SetU16_LE(header + 4, 0); /* disk number */ - Stream_SetU16_LE(header + 6, 0); /* disk number of start */ - Stream_SetU16_LE(header + 8, numEntries); /* disk entries */ - Stream_SetU16_LE(header + 10, numEntries); /* total entries */ - Stream_SetU32_LE(header + 12, centralDirEnd - centralDirBeg); /* central dir size */ - Stream_SetU32_LE(header + 16, centralDirBeg); /* central dir start */ - Stream_SetU16_LE(header + 20, 0); /* comment length */ - return Stream_Write(s, header, 22); -} - -static cc_result ZipWriter_FixupLocalFile(struct Stream* s, struct ResourceZipEntry* e) { - int filenameLen = String_Length(e->filename); - cc_uint8 tmp[2048]; - cc_uint32 dataBeg, dataEnd; - cc_uint32 i, crc, toRead, read; - cc_result res; - - dataBeg = e->offset + 30 + filenameLen; - if ((res = s->Position(s, &dataEnd))) return res; - e->size = dataEnd - dataBeg; - - /* work out the CRC 32 */ - crc = 0xffffffffUL; - if ((res = s->Seek(s, dataBeg))) return res; - - for (; dataBeg < dataEnd; dataBeg += read) { - toRead = dataEnd - dataBeg; - toRead = min(toRead, sizeof(tmp)); - - if ((res = s->Read(s, tmp, toRead, &read))) return res; - if (!read) return ERR_END_OF_STREAM; - - for (i = 0; i < read; i++) { - crc = Utils_Crc32Table[(crc ^ tmp[i]) & 0xFF] ^ (crc >> 8); - } - } - e->crc32 = crc ^ 0xffffffffUL; - - /* then fixup the header */ - if ((res = s->Seek(s, e->offset))) return res; - if ((res = ZipWriter_LocalFile(s, e))) return res; - return s->Seek(s, dataEnd); -} - -static cc_result ZipWriter_WriteData(struct Stream* dst, struct ResourceZipEntry* e) { - cc_uint8* data = e->value.data; - cc_result res; - e->crc32 = Utils_CRC32(data, e->size); - - if ((res = ZipWriter_LocalFile(dst, e))) return res; - return Stream_Write(dst, data, e->size); -} - -static cc_result ZipWriter_WritePng(struct Stream* dst, struct ResourceZipEntry* e) { - struct Bitmap* src = &e->value.bmp; - cc_result res; - - if ((res = ZipWriter_LocalFile(dst, e))) return res; - if ((res = Png_Encode(src, dst, NULL, true, NULL))) return res; - return ZipWriter_FixupLocalFile(dst, e); -} - - -/*########################################################################################################################* -*------------------------------------------------------Zip file writer----------------------------------------------------* -*#########################################################################################################################*/ -static cc_result ZipFile_WriteEntries(struct Stream* s, struct ResourceZipEntry* entries, int numEntries) { - struct ResourceZipEntry* e; - cc_uint32 beg, end; - int i; - cc_result res; - - for (i = 0; i < numEntries; i++) - { - e = &entries[i]; - - if (e->type == RESOURCE_TYPE_PNG) { - if ((res = ZipWriter_WritePng(s, e))) return res; - } else { - if ((res = ZipWriter_WriteData(s, e))) return res; - } - } - - if ((res = s->Position(s, &beg))) return res; - for (i = 0; i < numEntries; i++) - { - if ((res = ZipWriter_CentralDir(s, &entries[i]))) return res; - } - - if ((res = s->Position(s, &end))) return res; - return ZipWriter_EndOfCentralDir(s, numEntries, beg, end); -} - -static void ZipFile_Create(cc_string* path, struct ResourceZipEntry* entries, int numEntries) { - struct Stream s; - cc_result res; - - res = Stream_CreateFile(&s, path); - if (res) { - Logger_SysWarn2(res, "creating", path); return; - } - - res = ZipFile_WriteEntries(&s, entries, numEntries); - if (res) Logger_SysWarn2(res, "making", path); - - res = s.Close(&s); - if (res) Logger_SysWarn2(res, "closing", path); -} - - /*########################################################################################################################* *----------------------------------------------------default.zip resources------------------------------------------------* *#########################################################################################################################*/ @@ -998,6 +1028,7 @@ static void MCCTextures_DownloadAssets(void) { { url = String_FromReadonly(defaultZipSources[i].url); defaultZipSources[i].reqID = Http_AsyncGetData(&url, 0); + defaultZipSources[i].downloaded = false; } } @@ -1046,12 +1077,29 @@ static void MCCTextures_CheckStatus(void) { } } +static void MCCTextures_ResetState(void) { + int i; + allZipEntriesExist = false; + zipEntriesFound = 0; + + for (i = 0; i < Array_Elems(defaultZipEntries); i++) + { + if (defaultZipEntries[i].type == RESOURCE_TYPE_CONST) continue; + + /* can reuse value.data for value.bmp case too */ + Mem_Free(defaultZipEntries[i].value.data); + defaultZipEntries[i].value.data = NULL; + defaultZipEntries[i].size = 0; + } +} + static const struct AssetSet mccTexsAssetSet = { MCCTextures_CheckExistence, MCCTextures_CountMissing, MCCTextures_DownloadAssets, MCCTextures_GetRequestName, - MCCTextures_CheckStatus + MCCTextures_CheckStatus, + MCCTextures_ResetState }; @@ -1069,11 +1117,21 @@ static const struct AssetSet* const asset_sets[] = { &mccSoundAssetSet }; -void Resources_CheckExistence(void) { +static void ResetState() { int i; Resources_Count = 0; Resources_Size = 0; + for (i = 0; i < Array_Elems(asset_sets); i++) + { + asset_sets[i]->ResetState(); + } +} + +void Resources_CheckExistence(void) { + int i; + ResetState(); + for (i = 0; i < Array_Elems(asset_sets); i++) { asset_sets[i]->CheckExistence(); @@ -1111,18 +1169,9 @@ void Fetcher_Run(void) { } static void Fetcher_Finish(void) { - int i; Fetcher_Completed = true; Fetcher_Working = false; - - for (i = 0; i < Array_Elems(defaultZipEntries); i++) { - if (defaultZipEntries[i].type == RESOURCE_TYPE_CONST) continue; - - /* can reuse value.data for value.bmp case too */ - Mem_Free(defaultZipEntries[i].value.data); - defaultZipEntries[i].value.data = NULL; - defaultZipEntries[i].size = 0; - } + ResetState(); } static void Fetcher_Fail(struct HttpRequest* item) { From 4ecffcedb01640e87a6dc05e4c6d2738136c2107 Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Wed, 3 Apr 2024 18:37:52 +1100 Subject: [PATCH 38/41] More work on audio zip generation --- src/Audio.c | 1 + src/Audio.h | 1 + src/ClassiCube.vcxproj.filters | 6 +- src/Resources.c | 452 ++++++++++++++++++--------------- 4 files changed, 258 insertions(+), 202 deletions(-) diff --git a/src/Audio.c b/src/Audio.c index 6cc450b13..f8ece07b8 100644 --- a/src/Audio.c +++ b/src/Audio.c @@ -17,6 +17,7 @@ #include "Window.h" #endif int Audio_SoundsVolume, Audio_MusicVolume; +const cc_string Sounds_DefaultZipPath = String_FromConst("audio/default.zip"); static const cc_string audio_dir = String_FromConst("audio"); struct Sound { diff --git a/src/Audio.h b/src/Audio.h index 416a42b36..c8dd34cf4 100644 --- a/src/Audio.h +++ b/src/Audio.h @@ -34,6 +34,7 @@ extern int Audio_SoundsVolume; /* Volume music is played at, from 0-100. */ /* NOTE: Use Audio_SetMusic, don't change this directly. */ extern int Audio_MusicVolume; +extern const cc_string Sounds_DefaultZipPath; void Audio_SetMusic(int volume); void Audio_SetSounds(int volume); diff --git a/src/ClassiCube.vcxproj.filters b/src/ClassiCube.vcxproj.filters index 86b40ac23..aef0be6f9 100644 --- a/src/ClassiCube.vcxproj.filters +++ b/src/ClassiCube.vcxproj.filters @@ -620,9 +620,6 @@ Source Files\Platform - - Source Files\Window - Source Files\Window @@ -713,6 +710,9 @@ Source Files\Graphics + + Source Files\Audio + diff --git a/src/Resources.c b/src/Resources.c index 52b0be256..a868c2ada 100644 --- a/src/Resources.c +++ b/src/Resources.c @@ -14,6 +14,7 @@ #include "LWeb.h" #include "Http.h" #include "Game.h" +#include "Audio.h" /* Represents a set of assets/resources */ /* E.g. music set, sounds set, textures set */ @@ -56,6 +57,130 @@ CC_NOINLINE static struct ResourceZipEntry* ZipEntries_Find(const cc_string* nam static cc_result ZipEntry_ExtractData(struct ResourceZipEntry* e, struct Stream* data, struct ZipEntry* source); +/*########################################################################################################################* +*------------------------------------------------=-----Utility functions ------------------------=------------------------* +*#########################################################################################################################*/ +static void ZipFile_InspectEntries(const cc_string* path, Zip_SelectEntry selector) { + struct Stream stream; + cc_result res; + + res = Stream_OpenFile(&stream, path); + if (res == ReturnCode_FileNotFound) return; + if (res) { Logger_SysWarn2(res, "opening", path); return; } + + res = Zip_Extract(&stream, selector, NULL); + if (res) Logger_SysWarn2(res, "inspecting", path); + + /* No point logging error for closing readonly file */ + (void)stream.Close(&stream); +} + +static cc_result ZipEntry_ExtractData(struct ResourceZipEntry* e, struct Stream* data, struct ZipEntry* source) { + cc_uint32 size = source->UncompressedSize; + e->value.data = Mem_TryAlloc(size, 1); + e->size = size; + + if (!e->value.data) return ERR_OUT_OF_MEMORY; + return Stream_Read(data, e->value.data, size); +} + + +/*########################################################################################################################* +*-----------------------------------------------------Sound asset writing ------------------------------------------------* +*#########################################################################################################################*/ +#define WAV_FourCC(a, b, c, d) (((cc_uint32)a << 24) | ((cc_uint32)b << 16) | ((cc_uint32)c << 8) | (cc_uint32)d) +#define WAV_HDR_SIZE 44 + +/* Fixes up the .WAV header after having written all samples */ +static cc_result SoundPatcher_FixupHeader(struct Stream* s, struct VorbisState* ctx, cc_uint32 offset, cc_uint32 len) { + cc_uint8 header[WAV_HDR_SIZE]; + cc_result res = s->Seek(s, offset); + if (res) return res; + + Stream_SetU32_BE(header + 0, WAV_FourCC('R','I','F','F')); + Stream_SetU32_LE(header + 4, len - 8); + Stream_SetU32_BE(header + 8, WAV_FourCC('W','A','V','E')); + Stream_SetU32_BE(header + 12, WAV_FourCC('f','m','t',' ')); + Stream_SetU32_LE(header + 16, 16); /* fmt chunk size */ + Stream_SetU16_LE(header + 20, 1); /* PCM audio format */ + Stream_SetU16_LE(header + 22, ctx->channels); + Stream_SetU32_LE(header + 24, ctx->sampleRate); + + Stream_SetU32_LE(header + 28, ctx->sampleRate * ctx->channels * 2); /* byte rate */ + Stream_SetU16_LE(header + 32, ctx->channels * 2); /* block align */ + Stream_SetU16_LE(header + 34, 16); /* bits per sample */ + Stream_SetU32_BE(header + 36, WAV_FourCC('d','a','t','a')); + Stream_SetU32_LE(header + 40, len - WAV_HDR_SIZE); + + return Stream_Write(s, header, WAV_HDR_SIZE); +} + +/* Decodes all samples, then produces a .WAV file from them */ +static cc_result SoundPatcher_WriteWav(struct Stream* s, struct VorbisState* ctx) { + cc_int16* samples; + cc_uint32 begOffset; + cc_uint32 len = WAV_HDR_SIZE; + cc_result res; + int count; + + if ((res = s->Position(s, &begOffset))) return res; + + /* reuse context here for a temp garbage header */ + if ((res = Stream_Write(s, (const cc_uint8*)ctx, WAV_HDR_SIZE))) return res; + if ((res = Vorbis_DecodeHeaders(ctx))) return res; + + samples = (cc_int16*)Mem_TryAlloc(ctx->blockSizes[1] * ctx->channels, 2); + if (!samples) return ERR_OUT_OF_MEMORY; + + for (;;) { + res = Vorbis_DecodeFrame(ctx); + if (res == ERR_END_OF_STREAM) { + /* reached end of samples, so done */ + res = SoundPatcher_FixupHeader(s, ctx, begOffset, len); + break; + } + if (res) break; + + count = Vorbis_OutputFrame(ctx, samples); + len += count * 2; + /* TODO: Do we need to account for big endian */ + res = Stream_Write(s, samples, count * 2); + if (res) break; + } + + Mem_Free(samples); + if (!res) res = s->Seek(s, begOffset + len); + return res; +} + +/* Converts an OGG sound to a WAV sound for faster decoding later */ +static cc_result SoundPatcher_Save(struct Stream* s, struct ResourceZipEntry* e) { + struct OggState* ogg = NULL; + struct VorbisState* ctx = NULL; + struct Stream src; + cc_result res; + + ogg = (struct OggState*)Mem_TryAlloc(1, sizeof(struct OggState)); + if (!ogg) { res = ERR_OUT_OF_MEMORY; goto cleanup; } + + ctx = (struct VorbisState*)Mem_TryAlloc(1, sizeof(struct VorbisState)); + if (!ctx) { res = ERR_OUT_OF_MEMORY; goto cleanup; } + + Stream_ReadonlyMemory(&src, e->value.data, e->size); + + Ogg_Init(ogg, &src); + Vorbis_Init(ctx); + ctx->source = ogg; + res = SoundPatcher_WriteWav(s, ctx); + +cleanup: + if (ctx) Vorbis_Free(ctx); + Mem_Free(ctx); + Mem_Free(ogg); + return res; +} + + /*########################################################################################################################* *------------------------------------------------------Zip entry writer---------------------------------------------------* *#########################################################################################################################*/ @@ -191,6 +316,14 @@ static cc_result ZipWriter_WritePng(struct Stream* dst, struct ResourceZipEntry* return ZipWriter_FixupLocalFile(dst, e); } +static cc_result ZipWriter_WriteWav(struct Stream* dst, struct ResourceZipEntry* e) { + cc_result res; + + if ((res = ZipWriter_LocalFile(dst, e))) return res; + if ((res = SoundPatcher_Save(dst, e))) return res; + return ZipWriter_FixupLocalFile(dst, e); +} + /*########################################################################################################################* *------------------------------------------------------Zip file writer----------------------------------------------------* @@ -207,9 +340,11 @@ static cc_result ZipFile_WriteEntries(struct Stream* s, struct ResourceZipEntry* if (e->type == RESOURCE_TYPE_PNG) { if ((res = ZipWriter_WritePng(s, e))) return res; + } else if (e->type == RESOURCE_TYPE_SOUND) { + if ((res = ZipWriter_WriteWav(s, e))) return res; } else { if ((res = ZipWriter_WriteData(s, e))) return res; - } + } } if ((res = s->Position(s, &beg))) return res; @@ -222,7 +357,7 @@ static cc_result ZipFile_WriteEntries(struct Stream* s, struct ResourceZipEntry* return ZipWriter_EndOfCentralDir(s, numEntries, beg, end); } -static void ZipFile_Create(cc_string* path, struct ResourceZipEntry* entries, int numEntries) { +static void ZipFile_Create(const cc_string* path, struct ResourceZipEntry* entries, int numEntries) { struct Stream s; cc_result res; @@ -364,222 +499,161 @@ static const struct AssetSet mccMusicAssetSet = { *---------------------------------------------------------Sound assets----------------------------------------------------* *#########################################################################################################################*/ static struct SoundAsset { - const char* name; + const char* filename; const char* hash; int reqID, size; void* data; } soundAssets[] = { - { "dig_cloth1", "5fd568d724ba7d53911b6cccf5636f859d2662e8" }, { "dig_cloth2", "56c1d0ac0de2265018b2c41cb571cc6631101484" }, - { "dig_cloth3", "9c63f2a3681832dc32d206f6830360bfe94b5bfc" }, { "dig_cloth4", "55da1856e77cfd31a7e8c3d358e1f856c5583198" }, - { "dig_grass1", "41cbf5dd08e951ad65883854e74d2e034929f572" }, { "dig_grass2", "86cb1bb0c45625b18e00a64098cd425a38f6d3f2" }, - { "dig_grass3", "f7d7e5c7089c9b45fa5d1b31542eb455fad995db" }, { "dig_grass4", "c7b1005d4926f6a2e2387a41ab1fb48a72f18e98" }, - { "dig_gravel1", "e8b89f316f3e9989a87f6e6ff12db9abe0f8b09f" }, { "dig_gravel2", "c3b3797d04cb9640e1d3a72d5e96edb410388fa3" }, - { "dig_gravel3", "48f7e1bb098abd36b9760cca27b9d4391a23de26" }, { "dig_gravel4", "7bf3553a4fe41a0078f4988a13d6e1ed8663ef4c" }, - { "dig_sand1", "9e59c3650c6c3fc0a475f1b753b2fcfef430bf81" }, { "dig_sand2", "0fa4234797f336ada4e3735e013e44d1099afe57" }, - { "dig_sand3", "c75589cc0087069f387de127dd1499580498738e" }, { "dig_sand4", "37afa06f97d58767a1cd1382386db878be1532dd" }, - { "dig_snow1", "e9bab7d3d15541f0aaa93fad31ad37fd07e03a6c" }, { "dig_snow2", "5887d10234c4f244ec5468080412f3e6ef9522f3" }, - { "dig_snow3", "a4bc069321a96236fde04a3820664cc23b2ea619" }, { "dig_snow4", "e26fa3036cdab4c2264ceb19e1cd197a2a510227" }, - { "dig_stone1", "4e094ed8dfa98656d8fec52a7d20c5ee6098b6ad" }, { "dig_stone2", "9c92f697142ae320584bf64c0d54381d59703528" }, - { "dig_stone3", "8f23c02475d388b23e5faa680eafe6b991d7a9d4" }, { "dig_stone4", "363545a76277e5e47538b2dd3a0d6aa4f7a87d34" }, - { "dig_wood1", "9bc2a84d0aa98113fc52609976fae8fc88ea6333" }, { "dig_wood2", "98102533e6085617a2962157b4f3658f59aea018" }, - { "dig_wood3", "45b2aef7b5049e81b39b58f8d631563fadcc778b" }, { "dig_wood4", "dc66978374a46ab2b87db6472804185824868095" }, - { "dig_glass1", "7274a2231ed4544a37e599b7b014e589e5377094" }, { "dig_glass2", "87c47bda3645c68f18a49e83cbf06e5302d087ff" }, - { "dig_glass3", "ad7d770b7fff3b64121f75bd60cecfc4866d1cd6" }, - - { "step_cloth1", "5fd568d724ba7d53911b6cccf5636f859d2662e8" }, { "step_cloth2", "56c1d0ac0de2265018b2c41cb571cc6631101484" }, - { "step_cloth3", "9c63f2a3681832dc32d206f6830360bfe94b5bfc" }, { "step_cloth4", "55da1856e77cfd31a7e8c3d358e1f856c5583198" }, - { "step_grass1", "41cbf5dd08e951ad65883854e74d2e034929f572" }, { "step_grass2", "86cb1bb0c45625b18e00a64098cd425a38f6d3f2" }, - { "step_grass3", "f7d7e5c7089c9b45fa5d1b31542eb455fad995db" }, { "step_grass4", "c7b1005d4926f6a2e2387a41ab1fb48a72f18e98" }, - { "step_gravel1", "e8b89f316f3e9989a87f6e6ff12db9abe0f8b09f" }, { "step_gravel2", "c3b3797d04cb9640e1d3a72d5e96edb410388fa3" }, - { "step_gravel3", "48f7e1bb098abd36b9760cca27b9d4391a23de26" }, { "step_gravel4", "7bf3553a4fe41a0078f4988a13d6e1ed8663ef4c" }, - { "step_sand1", "9e59c3650c6c3fc0a475f1b753b2fcfef430bf81" }, { "step_sand2", "0fa4234797f336ada4e3735e013e44d1099afe57" }, - { "step_sand3", "c75589cc0087069f387de127dd1499580498738e" }, { "step_sand4", "37afa06f97d58767a1cd1382386db878be1532dd" }, - { "step_snow1", "e9bab7d3d15541f0aaa93fad31ad37fd07e03a6c" }, { "step_snow2", "5887d10234c4f244ec5468080412f3e6ef9522f3" }, - { "step_snow3", "a4bc069321a96236fde04a3820664cc23b2ea619" }, { "step_snow4", "e26fa3036cdab4c2264ceb19e1cd197a2a510227" }, - { "step_stone1", "4e094ed8dfa98656d8fec52a7d20c5ee6098b6ad" }, { "step_stone2", "9c92f697142ae320584bf64c0d54381d59703528" }, - { "step_stone3", "8f23c02475d388b23e5faa680eafe6b991d7a9d4" }, { "step_stone4", "363545a76277e5e47538b2dd3a0d6aa4f7a87d34" }, - { "step_wood1", "9bc2a84d0aa98113fc52609976fae8fc88ea6333" }, { "step_wood2", "98102533e6085617a2962157b4f3658f59aea018" }, - { "step_wood3", "45b2aef7b5049e81b39b58f8d631563fadcc778b" }, { "step_wood4", "dc66978374a46ab2b87db6472804185824868095" } + { "dig_cloth1.wav", "5fd568d724ba7d53911b6cccf5636f859d2662e8" }, { "dig_cloth2.wav", "56c1d0ac0de2265018b2c41cb571cc6631101484" }, + { "dig_cloth3.wav", "9c63f2a3681832dc32d206f6830360bfe94b5bfc" }, { "dig_cloth4.wav", "55da1856e77cfd31a7e8c3d358e1f856c5583198" }, + { "dig_grass1.wav", "41cbf5dd08e951ad65883854e74d2e034929f572" }, { "dig_grass2.wav", "86cb1bb0c45625b18e00a64098cd425a38f6d3f2" }, + { "dig_grass3.wav", "f7d7e5c7089c9b45fa5d1b31542eb455fad995db" }, { "dig_grass4.wav", "c7b1005d4926f6a2e2387a41ab1fb48a72f18e98" }, + { "dig_gravel1.wav", "e8b89f316f3e9989a87f6e6ff12db9abe0f8b09f" }, { "dig_gravel2.wav", "c3b3797d04cb9640e1d3a72d5e96edb410388fa3" }, + { "dig_gravel3.wav", "48f7e1bb098abd36b9760cca27b9d4391a23de26" }, { "dig_gravel4.wav", "7bf3553a4fe41a0078f4988a13d6e1ed8663ef4c" }, + { "dig_sand1.wav", "9e59c3650c6c3fc0a475f1b753b2fcfef430bf81" }, { "dig_sand2.wav", "0fa4234797f336ada4e3735e013e44d1099afe57" }, + { "dig_sand3.wav", "c75589cc0087069f387de127dd1499580498738e" }, { "dig_sand4.wav", "37afa06f97d58767a1cd1382386db878be1532dd" }, + { "dig_snow1.wav", "e9bab7d3d15541f0aaa93fad31ad37fd07e03a6c" }, { "dig_snow2.wav", "5887d10234c4f244ec5468080412f3e6ef9522f3" }, + { "dig_snow3.wav", "a4bc069321a96236fde04a3820664cc23b2ea619" }, { "dig_snow4.wav", "e26fa3036cdab4c2264ceb19e1cd197a2a510227" }, + { "dig_stone1.wav", "4e094ed8dfa98656d8fec52a7d20c5ee6098b6ad" }, { "dig_stone2.wav", "9c92f697142ae320584bf64c0d54381d59703528" }, + { "dig_stone3.wav", "8f23c02475d388b23e5faa680eafe6b991d7a9d4" }, { "dig_stone4.wav", "363545a76277e5e47538b2dd3a0d6aa4f7a87d34" }, + { "dig_wood1.wav", "9bc2a84d0aa98113fc52609976fae8fc88ea6333" }, { "dig_wood2.wav", "98102533e6085617a2962157b4f3658f59aea018" }, + { "dig_wood3.wav", "45b2aef7b5049e81b39b58f8d631563fadcc778b" }, { "dig_wood4.wav", "dc66978374a46ab2b87db6472804185824868095" }, + { "dig_glass1.wav", "7274a2231ed4544a37e599b7b014e589e5377094" }, { "dig_glass2.wav", "87c47bda3645c68f18a49e83cbf06e5302d087ff" }, + { "dig_glass3.wav", "ad7d770b7fff3b64121f75bd60cecfc4866d1cd6" }, + + { "step_cloth1.wav", "5fd568d724ba7d53911b6cccf5636f859d2662e8" }, { "step_cloth2.wav", "56c1d0ac0de2265018b2c41cb571cc6631101484" }, + { "step_cloth3.wav", "9c63f2a3681832dc32d206f6830360bfe94b5bfc" }, { "step_cloth4.wav", "55da1856e77cfd31a7e8c3d358e1f856c5583198" }, + { "step_grass1.wav", "41cbf5dd08e951ad65883854e74d2e034929f572" }, { "step_grass2.wav", "86cb1bb0c45625b18e00a64098cd425a38f6d3f2" }, + { "step_grass3.wav", "f7d7e5c7089c9b45fa5d1b31542eb455fad995db" }, { "step_grass4.wav", "c7b1005d4926f6a2e2387a41ab1fb48a72f18e98" }, + { "step_gravel1.wav", "e8b89f316f3e9989a87f6e6ff12db9abe0f8b09f" }, { "step_gravel2.wav", "c3b3797d04cb9640e1d3a72d5e96edb410388fa3" }, + { "step_gravel3.wav", "48f7e1bb098abd36b9760cca27b9d4391a23de26" }, { "step_gravel4.wav", "7bf3553a4fe41a0078f4988a13d6e1ed8663ef4c" }, + { "step_sand1.wav", "9e59c3650c6c3fc0a475f1b753b2fcfef430bf81" }, { "step_sand2.wav", "0fa4234797f336ada4e3735e013e44d1099afe57" }, + { "step_sand3.wav", "c75589cc0087069f387de127dd1499580498738e" }, { "step_sand4.wav", "37afa06f97d58767a1cd1382386db878be1532dd" }, + { "step_snow1.wav", "e9bab7d3d15541f0aaa93fad31ad37fd07e03a6c" }, { "step_snow2.wav", "5887d10234c4f244ec5468080412f3e6ef9522f3" }, + { "step_snow3.wav", "a4bc069321a96236fde04a3820664cc23b2ea619" }, { "step_snow4.wav", "e26fa3036cdab4c2264ceb19e1cd197a2a510227" }, + { "step_stone1.wav", "4e094ed8dfa98656d8fec52a7d20c5ee6098b6ad" }, { "step_stone2.wav", "9c92f697142ae320584bf64c0d54381d59703528" }, + { "step_stone3.wav", "8f23c02475d388b23e5faa680eafe6b991d7a9d4" }, { "step_stone4.wav", "363545a76277e5e47538b2dd3a0d6aa4f7a87d34" }, + { "step_wood1.wav", "9bc2a84d0aa98113fc52609976fae8fc88ea6333" }, { "step_wood2.wav", "98102533e6085617a2962157b4f3658f59aea018" }, + { "step_wood3.wav", "45b2aef7b5049e81b39b58f8d631563fadcc778b" }, { "step_wood4.wav", "dc66978374a46ab2b87db6472804185824868095" } }; static cc_bool allSoundsExist; -static void SoundAssets_CheckExistence(void) { - cc_string path; char pathBuffer[FILENAME_SIZE]; +static void SoundAssets_ResetState(void) { int i; - String_InitArray(path, pathBuffer); + allSoundsExist = false; - for (i = 0; i < Array_Elems(soundAssets); i++) + for (i = 0; i < Array_Elems(soundAssets); i++) { - path.length = 0; - String_Format1(&path, "audio/%c.wav", soundAssets[i].name); - - if (File_Exists(&path)) continue; - allSoundsExist = false; - return; + Mem_Free(soundAssets[i].data); + soundAssets[i].data = NULL; + soundAssets[i].size = 0; } - allSoundsExist = true; } -static void SoundAssets_CountMissing(void) { - if (allSoundsExist) return; - - Resources_Count += Array_Elems(soundAssets); - Resources_Size += 417; -} /*########################################################################################################################* -*-----------------------------------------------------Sound asset fetching -----------------------------------------------* +*-----------------------------------------------------Sound asset checking -----------------------------------------------* *#########################################################################################################################*/ -#define SoundAsset_Download(hash) MusicAsset_Download(hash) +static int soundEntriesFound; -static void SoundAssets_DownloadAssets(void) { +static struct SoundAsset* SoundAssest_Find(const cc_string* name) { + struct SoundAsset* a; int i; - for (i = 0; i < Array_Elems(soundAssets); i++) - { - if (allSoundsExist) continue; - soundAssets[i].reqID = SoundAsset_Download(soundAssets[i].hash); - } -} -static const char* SoundAssets_GetRequestName(int reqID) { - int i; for (i = 0; i < Array_Elems(soundAssets); i++) { - if (reqID == soundAssets[i].reqID) return soundAssets[i].name; + a = &soundAssets[i]; + if (String_CaselessEqualsConst(name, a->filename)) return a; } return NULL; } +static cc_bool SoundAssets_CheckEntry(const cc_string* path) { + cc_string name = *path; + Utils_UNSAFE_GetFilename(&name); -/*########################################################################################################################* -*----------------------------------------------------Sound asset processing ----------------------------------------------* -*#########################################################################################################################*/ -#define WAV_FourCC(a, b, c, d) (((cc_uint32)a << 24) | ((cc_uint32)b << 16) | ((cc_uint32)c << 8) | (cc_uint32)d) -#define WAV_HDR_SIZE 44 - -/* Fixes up the .WAV header after having written all samples */ -static void SoundPatcher_FixupHeader(struct Stream* s, struct VorbisState* ctx, cc_uint32 len) { - cc_uint8 header[WAV_HDR_SIZE]; - cc_result res = s->Seek(s, 0); - if (res) { Logger_SysWarn(res, "seeking to .wav start"); return; } - - Stream_SetU32_BE(header + 0, WAV_FourCC('R','I','F','F')); - Stream_SetU32_LE(header + 4, len - 8); - Stream_SetU32_BE(header + 8, WAV_FourCC('W','A','V','E')); - Stream_SetU32_BE(header + 12, WAV_FourCC('f','m','t',' ')); - Stream_SetU32_LE(header + 16, 16); /* fmt chunk size */ - Stream_SetU16_LE(header + 20, 1); /* PCM audio format */ - Stream_SetU16_LE(header + 22, ctx->channels); - Stream_SetU32_LE(header + 24, ctx->sampleRate); - - Stream_SetU32_LE(header + 28, ctx->sampleRate * ctx->channels * 2); /* byte rate */ - Stream_SetU16_LE(header + 32, ctx->channels * 2); /* block align */ - Stream_SetU16_LE(header + 34, 16); /* bits per sample */ - Stream_SetU32_BE(header + 36, WAV_FourCC('d','a','t','a')); - Stream_SetU32_LE(header + 40, len - WAV_HDR_SIZE); - - res = Stream_Write(s, header, WAV_HDR_SIZE); - if (res) Logger_SysWarn(res, "fixing .wav header"); + if (SoundAssest_Find(&name)) soundEntriesFound++; + return false; } -/* Decodes all samples, then produces a .WAV file from them */ -static void SoundPatcher_WriteWav(struct Stream* s, struct VorbisState* ctx) { - cc_int16* samples; - cc_uint32 len = WAV_HDR_SIZE; - cc_result res; - int count; - - /* ctx is all 0, so reuse here for empty header */ - res = Stream_Write(s, (const cc_uint8*)ctx, WAV_HDR_SIZE); - if (res) { Logger_SysWarn(res, "writing .wav header"); return; } - - res = Vorbis_DecodeHeaders(ctx); - if (res) { Logger_SysWarn(res, "decoding .ogg header"); return; } +static void SoundAssets_CheckExistence(void) { + soundEntriesFound = 0; + ZipFile_InspectEntries(&Sounds_DefaultZipPath, SoundAssets_CheckEntry); - samples = (cc_int16*)Mem_TryAlloc(ctx->blockSizes[1] * ctx->channels, 2); - if (!samples) { Logger_SysWarn(ERR_OUT_OF_MEMORY, "allocating .ogg samples"); return; } + /* >= in case somehow have say "gui.png", "GUI.png" */ + allSoundsExist = soundEntriesFound >= Array_Elems(soundAssets); +} - for (;;) { - res = Vorbis_DecodeFrame(ctx); - if (res == ERR_END_OF_STREAM) { - /* reached end of samples, so done */ - SoundPatcher_FixupHeader(s, ctx, len); break; - } - if (res) { Logger_SysWarn(res, "decoding .ogg"); break; } +static void SoundAssets_CountMissing(void) { + if (allSoundsExist) return; - count = Vorbis_OutputFrame(ctx, samples); - len += count * 2; - /* TODO: Do we need to account for big endian */ - res = Stream_Write(s, samples, count * 2); - if (res) { Logger_SysWarn(res, "writing samples"); break; } - } - Mem_Free(samples); + Resources_Count += Array_Elems(soundAssets); + Resources_Size += 417; } -/* Converts an OGG sound to a WAV sound for faster decoding later */ -static void SoundPatcher_Save(const char* name, struct HttpRequest* req) { - cc_string path; char pathBuffer[STRING_SIZE]; - struct OggState* ogg = NULL; - struct VorbisState* ctx = NULL; - struct Stream src, dst; - cc_result res; - ogg = (struct OggState*)Mem_TryAlloc(1, sizeof(struct OggState)); - if (!ogg) { Logger_SysWarn(ERR_OUT_OF_MEMORY, "allocating memory"); goto cleanup; } +/*########################################################################################################################* +*----------------------------------------------------Sound asset generation ----------------------------------------------* +*#########################################################################################################################*/ +static void SoundAsset_CreateZip(void) { + struct ResourceZipEntry entries[Array_Elems(soundAssets)]; + int i; - ctx = (struct VorbisState*)Mem_TryAlloc(1, sizeof(struct VorbisState)); - if (!ctx) { Logger_SysWarn(ERR_OUT_OF_MEMORY, "allocating memory"); goto cleanup; } + for (i = 0; i < Array_Elems(soundAssets); i++) + { + entries[i].filename = soundAssets[i].filename; + entries[i].type = RESOURCE_TYPE_SOUND; - Stream_ReadonlyMemory(&src, req->data, req->size); - String_InitArray(path, pathBuffer); - String_Format1(&path, "audio/%c.wav", name); + entries[i].value.data = soundAssets[i].data; + entries[i].size = soundAssets[i].size; + } - res = Stream_CreateFile(&dst, &path); - if (res) { Logger_SysWarn(res, "creating .wav file"); goto cleanup; } + ZipFile_Create(&Sounds_DefaultZipPath, entries, Array_Elems(soundAssets)); + SoundAssets_ResetState(); +} - Ogg_Init(ogg, &src); - Vorbis_Init(ctx); - ctx->source = ogg; - SoundPatcher_WriteWav(&dst, ctx); - res = dst.Close(&dst); - if (res) Logger_SysWarn(res, "closing .wav file"); +/*########################################################################################################################* +*-----------------------------------------------------Sound asset fetching -----------------------------------------------* +*#########################################################################################################################*/ +#define SoundAsset_Download(hash) MusicAsset_Download(hash) -cleanup: - if (ctx) Vorbis_Free(ctx); - Mem_Free(ctx); - Mem_Free(ogg); +static void SoundAssets_DownloadAssets(void) { + int i; + for (i = 0; i < Array_Elems(soundAssets); i++) + { + if (allSoundsExist) continue; + soundAssets[i].reqID = SoundAsset_Download(soundAssets[i].hash); + } } +static const char* SoundAssets_GetRequestName(int reqID) { + int i; + for (i = 0; i < Array_Elems(soundAssets); i++) + { + if (reqID == soundAssets[i].reqID) return soundAssets[i].filename; + } + return NULL; +} -static void SoundAsset_Check(struct SoundAsset* sound) { +static void SoundAsset_Check(struct SoundAsset* sound, int i) { struct HttpRequest item; if (!Fetcher_Get(sound->reqID, &item)) return; - SoundPatcher_Save(sound->name, &item); - sound->data = item.data; sound->size = item.size; item.data = NULL; HttpRequest_Free(&item); -} -static void SoundAssets_CheckStatus(void) { - int i; - for (i = 0; i < Array_Elems(soundAssets); i++) - { - SoundAsset_Check(&soundAssets[i]); - } + if (i == Array_Elems(soundAssets) - 1) + SoundAsset_CreateZip(); } -static void SoundAssets_ResetState(void) { +static void SoundAssets_CheckStatus(void) { int i; - allSoundsExist = false; - for (i = 0; i < Array_Elems(soundAssets); i++) { - Mem_Free(soundAssets[i].data); - soundAssets[i].data = NULL; + SoundAsset_Check(&soundAssets[i], i); } } @@ -738,15 +812,6 @@ CC_NOINLINE static struct ResourceZipEntry* ZipEntries_Find(const cc_string* nam return NULL; } -static cc_result ZipEntry_ExtractData(struct ResourceZipEntry* e, struct Stream* data, struct ZipEntry* source) { - cc_uint32 size = source->UncompressedSize; - e->value.data = Mem_TryAlloc(size, 1); - e->size = size; - - if (!e->value.data) return ERR_OUT_OF_MEMORY; - return Stream_Read(data, e->value.data, size); -} - static cc_result ClassicPatcher_ExtractFiles(struct HttpRequest* req); static cc_result ModernPatcher_ExtractFiles(struct HttpRequest* req); @@ -771,6 +836,19 @@ static struct ZipfileSource { }; static int numDefaultZipSources, numDefaultZipProcessed; +static void MCCTextures_ResetState(void) { + int i; + for (i = 0; i < Array_Elems(defaultZipEntries); i++) + { + if (defaultZipEntries[i].type == RESOURCE_TYPE_CONST) continue; + + /* can reuse value.data for value.bmp case too */ + Mem_Free(defaultZipEntries[i].value.data); + defaultZipEntries[i].value.data = NULL; + defaultZipEntries[i].size = 0; + } +} + /*########################################################################################################################* *------------------------------------------------default.zip entry generators---------------------------------------------* @@ -980,19 +1058,10 @@ static cc_bool DefaultZip_SelectEntry(const cc_string* path) { } static void MCCTextures_CheckExistence(void) { - cc_string path = String_FromReadonly(Game_Version.DefaultTexpack); - struct Stream stream; - cc_result res; - - res = Stream_OpenFile(&stream, &path); - if (res == ReturnCode_FileNotFound) return; - if (res) { Logger_SysWarn2(res, "opening", &path); return; } + cc_string path = String_FromReadonly(Game_Version.DefaultTexpack); + zipEntriesFound = 0; - res = Zip_Extract(&stream, DefaultZip_SelectEntry, NULL); - if (res) Logger_SysWarn2(res, "inspecting", &path); - - /* No point logging error for closing readonly file */ - (void)stream.Close(&stream); + ZipFile_InspectEntries(&path, DefaultZip_SelectEntry); /* >= in case somehow have say "gui.png", "GUI.png" */ allZipEntriesExist = zipEntriesFound >= Array_Elems(defaultZipEntries); @@ -1048,6 +1117,7 @@ static const char* MCCTextures_GetRequestName(int reqID) { static void MCCTextures_CreateDefaultZip(void) { cc_string path = String_FromReadonly(Game_Version.DefaultTexpack); ZipFile_Create(&path, defaultZipEntries, Array_Elems(defaultZipEntries)); + MCCTextures_ResetState(); } static void MCCTextures_CheckSource(struct ZipfileSource* source) { @@ -1077,22 +1147,6 @@ static void MCCTextures_CheckStatus(void) { } } -static void MCCTextures_ResetState(void) { - int i; - allZipEntriesExist = false; - zipEntriesFound = 0; - - for (i = 0; i < Array_Elems(defaultZipEntries); i++) - { - if (defaultZipEntries[i].type == RESOURCE_TYPE_CONST) continue; - - /* can reuse value.data for value.bmp case too */ - Mem_Free(defaultZipEntries[i].value.data); - defaultZipEntries[i].value.data = NULL; - defaultZipEntries[i].size = 0; - } -} - static const struct AssetSet mccTexsAssetSet = { MCCTextures_CheckExistence, MCCTextures_CountMissing, From 9c0bdb68e7310c927db1c9df4e332280f654ed67 Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Wed, 3 Apr 2024 19:00:00 +1100 Subject: [PATCH 39/41] Load sounds from zip instead --- src/Audio.c | 49 +++++++++++++++++++++++++++---------------------- src/Resources.c | 16 +++++++--------- 2 files changed, 34 insertions(+), 31 deletions(-) diff --git a/src/Audio.c b/src/Audio.c index f8ece07b8..063a8437d 100644 --- a/src/Audio.c +++ b/src/Audio.c @@ -12,6 +12,7 @@ #include "Stream.h" #include "Utils.h" #include "Options.h" +#include "Deflate.h" #ifdef CC_BUILD_ANDROID /* TODO: Refactor maybe to not rely on checking WinInfo.Handle != NULL */ #include "Window.h" @@ -100,30 +101,18 @@ static cc_result Sound_ReadWaveData(struct Stream* stream, struct Sound* snd) { } } -static cc_result Sound_ReadWave(const cc_string* path, struct Sound* snd) { - struct Stream stream; - cc_result res; - - res = Stream_OpenFile(&stream, path); - if (res) return res; - res = Sound_ReadWaveData(&stream, snd); - - /* No point logging error for closing readonly file */ - (void)stream.Close(&stream); - return res; -} - -static struct SoundGroup* Soundboard_Find(struct Soundboard* board, const cc_string* name) { +static struct SoundGroup* Soundboard_FindGroup(struct Soundboard* board, const cc_string* name) { struct SoundGroup* groups = board->groups; int i; - for (i = 0; i < SOUND_COUNT; i++) { + for (i = 0; i < SOUND_COUNT; i++) + { if (String_CaselessEqualsConst(name, Sound_Names[i])) return &groups[i]; } return NULL; } -static void Soundboard_Load(struct Soundboard* board, const cc_string* boardName, const cc_string* file) { +static void Soundboard_Load(struct Soundboard* board, const cc_string* boardName, const cc_string* file, struct Stream* stream) { struct SoundGroup* group; struct Sound* snd; cc_string name = *file; @@ -140,7 +129,7 @@ static void Soundboard_Load(struct Soundboard* board, const cc_string* boardName name = String_UNSAFE_SubstringAt(&name, boardName->length); name = String_UNSAFE_Substring(&name, 0, name.length - 1); - group = Soundboard_Find(board, &name); + group = Soundboard_FindGroup(board, &name); if (!group) { Chat_Add1("&cUnknown sound group '%s'", &name); return; } @@ -149,7 +138,7 @@ static void Soundboard_Load(struct Soundboard* board, const cc_string* boardName } snd = &group->sounds[group->count]; - res = Sound_ReadWave(file, snd); + res = Sound_ReadWaveData(stream, snd); if (res) { Logger_SysWarn2(res, "decoding", file); @@ -220,12 +209,28 @@ static void Audio_PlayBlockSound(void* obj, IVec3 coords, BlockID old, BlockID n } } -static void Sounds_LoadFile(const cc_string* path, void* obj) { +static cc_bool SelectZipEntry(const cc_string* path) { return true; } +static cc_result ProcessZipEntry(const cc_string* path, struct Stream* stream, struct ZipEntry* source) { static const cc_string dig = String_FromConst("dig_"); static const cc_string step = String_FromConst("step_"); - Soundboard_Load(&digBoard, &dig, path); - Soundboard_Load(&stepBoard, &step, path); + Soundboard_Load(&digBoard, &dig, path, stream); + Soundboard_Load(&stepBoard, &step, path, stream); + return 0; +} + +static void Sounds_ExtractZip(const cc_string* path) { + struct Stream stream; + cc_result res; + + res = Stream_OpenFile(&stream, path); + if (res) { Logger_SysWarn2(res, "opening", path); return res; } + + res = Zip_Extract(&stream, SelectZipEntry, ProcessZipEntry); + if (res) { Logger_SysWarn2(res, "extracting", path); return res; } + + /* No point logging error for closing readonly file */ + (void)stream.Close(&stream); } /* TODO this is a pretty terrible solution */ @@ -281,7 +286,7 @@ static void Sounds_Start(void) { #ifdef CC_BUILD_WEBAUDIO InitWebSounds(); #else - Directory_Enum(&audio_dir, NULL, Sounds_LoadFile); + Sounds_ExtractZip(&Sounds_DefaultZipPath); #endif } diff --git a/src/Resources.c b/src/Resources.c index a868c2ada..23388a153 100644 --- a/src/Resources.c +++ b/src/Resources.c @@ -704,30 +704,28 @@ static const char* CCTextures_GetRequestName(int reqID) { /*########################################################################################################################* *-------------------------------------------------CC texture assets processing -------------------------------------------* *#########################################################################################################################*/ -#ifdef CC_BUILD_MOBILE /* Android needs the touch.png */ /* TODO: Unify both android and desktop platforms to both just extract from default.zip */ static cc_bool CCTextures_SelectEntry(const cc_string* path) { return String_CaselessEqualsConst(path, "touch.png"); } + static cc_result CCTextures_ProcessEntry(const cc_string* path, struct Stream* data, struct ZipEntry* source) { struct ResourceZipEntry* e = ZipEntries_Find(path); + if (!e) return 0; /* TODO exteact on PC too */ + return ZipEntry_ExtractData(e, data, source); } static cc_result CCTextures_ExtractZip(struct HttpRequest* req) { struct Stream src; - Stream_WriteAllTo(&ccTexPack, req->data, req->size); - Stream_ReadonlyMemory(&src, req->data, req->size); + cc_result res; + + Stream_ReadonlyMemory(&src, req->data, req->size); + if ((res = Zip_Extract(&src, CCTextures_SelectEntry, CCTextures_ProcessEntry))) return res; - return Zip_Extract(&src, - CCTextures_SelectEntry, CCTextures_ProcessEntry); -} -#else -static cc_result CCTextures_ExtractZip(struct HttpRequest* req) { return Stream_WriteAllTo(&ccTexPack, req->data, req->size); } -#endif static void CCTextures_CheckStatus(void) { struct HttpRequest item; From b98cb2fc74091689164e4fa0b0b344f12d5e5ba5 Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Wed, 3 Apr 2024 19:22:31 +1100 Subject: [PATCH 40/41] Change messaging for required vs optional resources, support loading classicube.zip as fallback for sounds --- src/Audio.c | 16 +++++++++++----- src/Audio.h | 3 ++- src/LScreens.c | 8 +++++--- src/Launcher.c | 2 +- src/Resources.c | 32 +++++++++++++++++--------------- src/Resources.h | 6 ++++-- 6 files changed, 40 insertions(+), 27 deletions(-) diff --git a/src/Audio.c b/src/Audio.c index 063a8437d..3c0245613 100644 --- a/src/Audio.c +++ b/src/Audio.c @@ -17,8 +17,10 @@ /* TODO: Refactor maybe to not rely on checking WinInfo.Handle != NULL */ #include "Window.h" #endif + int Audio_SoundsVolume, Audio_MusicVolume; -const cc_string Sounds_DefaultZipPath = String_FromConst("audio/default.zip"); +const cc_string Sounds_ZipPathMC = String_FromConst("audio/default.zip"); +const cc_string Sounds_ZipPathCC = String_FromConst("audio/classicube.zip"); static const cc_string audio_dir = String_FromConst("audio"); struct Sound { @@ -219,18 +221,19 @@ static cc_result ProcessZipEntry(const cc_string* path, struct Stream* stream, s return 0; } -static void Sounds_ExtractZip(const cc_string* path) { +static cc_result Sounds_ExtractZip(const cc_string* path) { struct Stream stream; cc_result res; res = Stream_OpenFile(&stream, path); - if (res) { Logger_SysWarn2(res, "opening", path); return res; } + if (res) { Logger_SysWarn2(res, "opening", path); return res; } res = Zip_Extract(&stream, SelectZipEntry, ProcessZipEntry); - if (res) { Logger_SysWarn2(res, "extracting", path); return res; } + if (res) Logger_SysWarn2(res, "extracting", path); /* No point logging error for closing readonly file */ (void)stream.Close(&stream); + return res; } /* TODO this is a pretty terrible solution */ @@ -275,6 +278,7 @@ static void InitWebSounds(void) { static cc_bool sounds_loaded; static void Sounds_Start(void) { + cc_result res; if (!AudioBackend_Init()) { AudioBackend_Free(); Audio_SoundsVolume = 0; @@ -286,7 +290,9 @@ static void Sounds_Start(void) { #ifdef CC_BUILD_WEBAUDIO InitWebSounds(); #else - Sounds_ExtractZip(&Sounds_DefaultZipPath); + res = Sounds_ExtractZip(&Sounds_ZipPathMC); + if (res == ReturnCode_FileNotFound) + Sounds_ExtractZip(&Sounds_ZipPathCC); #endif } diff --git a/src/Audio.h b/src/Audio.h index c8dd34cf4..e054d1c2d 100644 --- a/src/Audio.h +++ b/src/Audio.h @@ -34,7 +34,8 @@ extern int Audio_SoundsVolume; /* Volume music is played at, from 0-100. */ /* NOTE: Use Audio_SetMusic, don't change this directly. */ extern int Audio_MusicVolume; -extern const cc_string Sounds_DefaultZipPath; +extern const cc_string Sounds_ZipPathMC; +extern const cc_string Sounds_ZipPathCC; void Audio_SetMusic(int volume); void Audio_SetSounds(int volume); diff --git a/src/LScreens.c b/src/LScreens.c index 539df3b5f..a4a5e25b5 100644 --- a/src/LScreens.c +++ b/src/LScreens.c @@ -1012,9 +1012,11 @@ static void CheckResourcesScreen_Next(void* w) { } static void CheckResourcesScreen_AddWidgets(struct CheckResourcesScreen* s) { + const char* line1_msg = Resources_MissingRequired ? "Some required resources weren't found" + : "Some optional resources weren't found"; s->lblStatus.small = true; - LLabel_Add(s, &s->lblLine1, "Some required resources weren't found", cres_lblLine1); + LLabel_Add(s, &s->lblLine1, line1_msg, cres_lblLine1); LLabel_Add(s, &s->lblLine2, "Okay to download?", cres_lblLine2); LLabel_Add(s, &s->lblStatus, "", cres_lblStatus); @@ -1030,7 +1032,7 @@ static void CheckResourcesScreen_Activated(struct LScreen* s_) { float size; CheckResourcesScreen_AddWidgets(s); - size = Resources_Size / 1024.0f; + size = Resources_MissingSize / 1024.0f; String_InitArray(str, buffer); String_Format1(&str, "&eDownload size: %f2 megabytes", &size); LLabel_SetText(&s->lblStatus, &str); @@ -1121,7 +1123,7 @@ static void FetchResourcesScreen_UpdateStatus(struct FetchResourcesScreen* s, in String_InitArray(str, strBuffer); count = Fetcher_Downloaded + 1; - String_Format3(&str, "&eFetching %c.. (%i/%i)", name, &count, &Resources_Count); + String_Format3(&str, "&eFetching %c.. (%i/%i)", name, &count, &Resources_MissingCount); if (String_Equals(&str, &s->lblStatus.text)) return; LLabel_SetText(&s->lblStatus, &str); diff --git a/src/Launcher.c b/src/Launcher.c index 8293dc74e..79d80cf83 100644 --- a/src/Launcher.c +++ b/src/Launcher.c @@ -260,7 +260,7 @@ void Launcher_Run(void) { #ifdef CC_BUILD_RESOURCES Resources_CheckExistence(); - if (Resources_Count) { + if (Resources_MissingCount) { CheckResourcesScreen_SetActive(); } else { MainScreen_SetActive(); diff --git a/src/Resources.c b/src/Resources.c index 23388a153..fba5474ca 100644 --- a/src/Resources.c +++ b/src/Resources.c @@ -33,7 +33,8 @@ struct AssetSet { void (*ResetState)(void); }; -int Resources_Count, Resources_Size; +int Resources_MissingCount, Resources_MissingSize; +cc_bool Resources_MissingRequired; union ResourceValue { cc_uint8* data; @@ -58,7 +59,7 @@ static cc_result ZipEntry_ExtractData(struct ResourceZipEntry* e, struct Stream* /*########################################################################################################################* -*------------------------------------------------=-----Utility functions ------------------------=------------------------* +*------------------------------------------------------Utility functions -------------------------------------------------* *#########################################################################################################################*/ static void ZipFile_InspectEntries(const cc_string* path, Zip_SelectEntry selector) { struct Stream stream; @@ -413,8 +414,8 @@ static void MusicAssets_CountMissing(void) { { if (musicAssets[i].downloaded) continue; - Resources_Size += musicAssets[i].size; - Resources_Count++; + Resources_MissingSize += musicAssets[i].size; + Resources_MissingCount++; } } @@ -578,7 +579,7 @@ static cc_bool SoundAssets_CheckEntry(const cc_string* path) { static void SoundAssets_CheckExistence(void) { soundEntriesFound = 0; - ZipFile_InspectEntries(&Sounds_DefaultZipPath, SoundAssets_CheckEntry); + ZipFile_InspectEntries(&Sounds_ZipPathMC, SoundAssets_CheckEntry); /* >= in case somehow have say "gui.png", "GUI.png" */ allSoundsExist = soundEntriesFound >= Array_Elems(soundAssets); @@ -587,8 +588,8 @@ static void SoundAssets_CheckExistence(void) { static void SoundAssets_CountMissing(void) { if (allSoundsExist) return; - Resources_Count += Array_Elems(soundAssets); - Resources_Size += 417; + Resources_MissingCount += Array_Elems(soundAssets); + Resources_MissingSize += 417; } @@ -608,7 +609,7 @@ static void SoundAsset_CreateZip(void) { entries[i].size = soundAssets[i].size; } - ZipFile_Create(&Sounds_DefaultZipPath, entries, Array_Elems(soundAssets)); + ZipFile_Create(&Sounds_ZipPathMC, entries, Array_Elems(soundAssets)); SoundAssets_ResetState(); } @@ -681,8 +682,9 @@ static void CCTextures_CheckExistence(void) { static void CCTextures_CountMissing(void) { if (ccTexturesExist) return; - Resources_Count++; - Resources_Size += 83; + Resources_MissingCount++; + Resources_MissingSize += 83; + Resources_MissingRequired = true; } @@ -1076,8 +1078,8 @@ static void MCCTextures_CountMissing(void) { if (Game_Version.Version > VERSION_0023) numDefaultZipSources--; for (i = 0; i < numDefaultZipSources; i++) { - Resources_Count++; - Resources_Size += defaultZipSources[i].size; + Resources_MissingCount++; + Resources_MissingSize += defaultZipSources[i].size; } } @@ -1171,8 +1173,8 @@ static const struct AssetSet* const asset_sets[] = { static void ResetState() { int i; - Resources_Count = 0; - Resources_Size = 0; + Resources_MissingCount = 0; + Resources_MissingSize = 0; for (i = 0; i < Array_Elems(asset_sets); i++) { @@ -1258,7 +1260,7 @@ void Fetcher_Update(void) { asset_sets[i]->CheckStatus(); } - if (Fetcher_Downloaded != Resources_Count) return; + if (Fetcher_Downloaded != Resources_MissingCount) return; Fetcher_Finish(); } #endif diff --git a/src/Resources.h b/src/Resources.h index 427da4221..4e629e55d 100644 --- a/src/Resources.h +++ b/src/Resources.h @@ -8,9 +8,11 @@ struct HttpRequest; typedef void (*FetcherErrorCallback)(struct HttpRequest* req); /* Number of resources that need to be downloaded */ -extern int Resources_Count; +extern int Resources_MissingCount; /* Total size of resources that need to be downloaded */ -extern int Resources_Size; +extern int Resources_MissingSize; +/* Whether required resources need to be downloaded */ +extern cc_bool Resources_MissingRequired; /* Checks existence of all assets */ void Resources_CheckExistence(void); From d31122eb0d9be5526e7dcf7370cee836a28bbe68 Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Wed, 3 Apr 2024 19:52:39 +1100 Subject: [PATCH 41/41] Swap .wav audio endian so that it is read/written as little endian on big endian machines --- src/Audio.c | 7 ++++++- src/Resources.c | 7 +++++-- src/Utils.c | 13 +++++++++++++ src/Utils.h | 1 + 4 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/Audio.c b/src/Audio.c index 3c0245613..435f37579 100644 --- a/src/Audio.c +++ b/src/Audio.c @@ -95,7 +95,12 @@ static cc_result Sound_ReadWaveData(struct Stream* stream, struct Sound* snd) { if ((res = Audio_AllocChunks(size, &snd->data, 1))) return res; snd->size = size; - return Stream_Read(stream, (cc_uint8*)snd->data, size); + res = Stream_Read(stream, (cc_uint8*)snd->data, size); + + #ifdef CC_BUILD_BIGENDIAN + Utils_SwapEndian16((cc_int16*)snd->data, size / 2); + #endif + return res; } /* Skip over unhandled data */ diff --git a/src/Resources.c b/src/Resources.c index fba5474ca..167fc7aba 100644 --- a/src/Resources.c +++ b/src/Resources.c @@ -144,8 +144,11 @@ static cc_result SoundPatcher_WriteWav(struct Stream* s, struct VorbisState* ctx count = Vorbis_OutputFrame(ctx, samples); len += count * 2; - /* TODO: Do we need to account for big endian */ - res = Stream_Write(s, samples, count * 2); + +#ifdef CC_BUILD_BIGENDIAN + Utils_SwapEndian16(samples, count); +#endif + res = Stream_Write(s, (cc_uint8*)samples, count * 2); if (res) break; } diff --git a/src/Utils.c b/src/Utils.c index 9de401d21..6ec7a57b7 100644 --- a/src/Utils.c +++ b/src/Utils.c @@ -138,6 +138,19 @@ void Utils_Resize(void** buffer, int* capacity, cc_uint32 elemSize, int defCapac } } +void Utils_SwapEndian16(cc_int16* values, int numValues) { + cc_uint8* data = (cc_uint8*)values; + int i; + + for (i = 0; i < numValues * 2; i += 2) + { + cc_uint8 tmp = data[i + 0]; + data[i + 0] = data[i + 1]; + data[i + 1] = tmp; + } +} + + static const char base64_table[64] = { 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P', 'Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f', diff --git a/src/Utils.h b/src/Utils.h index 7d8f245ad..78995c0ef 100644 --- a/src/Utils.h +++ b/src/Utils.h @@ -45,6 +45,7 @@ cc_uint32 Utils_CRC32(const cc_uint8* data, cc_uint32 length); /* NOTE: This cannot be just indexed by byte value - see Utils_CRC32 implementation. */ extern const cc_uint32 Utils_Crc32Table[256]; CC_NOINLINE void Utils_Resize(void** buffer, int* capacity, cc_uint32 elemSize, int defCapacity, int expandElems); +void Utils_SwapEndian16(cc_int16* values, int numValues); /* Converts blocks of 3 bytes into 4 ASCII characters. (pads if needed) */ /* Returns the number of ASCII characters written. */