From 19e97565f2dfe378e015ea5886929fb333b28f42 Mon Sep 17 00:00:00 2001 From: octospacc Date: Sat, 15 Feb 2025 15:52:22 +0100 Subject: [PATCH] Update to latest LibMultiSpacc, support Web build, update Makefile, add 2 blocks --- .gitignore | 4 + .gitlab-ci.yml | 22 ++++ Assets/Blocks.png | Bin 8734 -> 1708 bytes Makefile | 26 +++-- Source/Blocks.h | 31 ++--- Source/Keys.h | 42 +++---- Source/Main.c | 244 +++++++++++++++++++--------------------- Source/TargetsConfigs.h | 8 +- Source/Util.c | 14 +-- 9 files changed, 205 insertions(+), 186 deletions(-) create mode 100644 .gitlab-ci.yml diff --git a/.gitignore b/.gitignore index 3ee1a83..8800298 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,8 @@ *.exe +*.js +*.wasm +*.data +*.run *.o Source/LibMultiSpacc Source/LibMultiSpacc/* diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..6fe66b7 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,22 @@ +image: debian:latest + +before_script: | + apt update + apt install -y git + git clone --depth 1 https://gitlab.com/octospacc/MultiSpaccSDK + bash ./MultiSpaccSDK/Tools/InstallBuildEnvironment.sh + mv ./MultiSpaccSDK/LibMultiSpacc/LibMultiSpacc ./Source/LibMultiSpacc + +pages: + stage: deploy + script: | + make -j$(nproc --all) Target=Web + mkdir -p ./public + mv ./Emscripten.* ./public/ + mv ./MultiSpaccSDK/LibMultiSpacc/Examples/Emscripten.html ./public/index.html + artifacts: + paths: + - public + publish: public + rules: + - if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH diff --git a/Assets/Blocks.png b/Assets/Blocks.png index 56d5428ef32af70617decee0a6a0b8e9134a1cff..d8f9ba9f6e58265d8683b399274d6224bc7ed1ac 100644 GIT binary patch literal 1708 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 diff --git a/Makefile b/Makefile index 69ce229..e64bef6 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ AppName = BloccSpacc -ExeSuffix = .exe +ExeSuffix = .run -Sources = $(wildcard Source/*.c) +Sources = $(wildcard Source/*.c Source/LibMultiSpacc/*.c) CFlags = -O2 CC = gcc $(Defines) @@ -13,6 +13,12 @@ ifdef Target ifeq ($(Target), PC) Defines = -DTarget_PC MultiSpacc_Target = SDL20 + else ifeq ($(Target), Web) + Defines = -DTarget_PC -DTarget_Web + MultiSpacc_Target = Web + AppName = Emscripten + ExeSuffix = .js + CC = emcc $(Defines) else ifeq ($(Target), PocketGo) ExeSuffix = .PocketGo.exe PathPrefix = /opt/miyoo/bin/arm-miyoo-linux-uclibcgnueabi @@ -25,20 +31,26 @@ endif ifeq ($(MultiSpacc_Target), SDL12) Defines += -DMultiSpacc_Target_SDL12 LdFlags += -lSDL -lSDL_image -lSDL_mixer -lSDL_ttf - Sources += $(wildcard Source/LibMultiSpacc/*.c Source/LibMultiSpacc/SDL12/*.c) + Sources += $(wildcard Source/LibMultiSpacc/SDLCom/*.c Source/LibMultiSpacc/SDL12/*.c) else ifeq ($(MultiSpacc_Target), SDL20) Defines += -DMultiSpacc_Target_SDL20 LdFlags += -lSDL2 -lSDL2_image -lSDL2_mixer -lSDL2_ttf - Sources += $(wildcard Source/LibMultiSpacc/*.c Source/LibMultiSpacc/SDL20/*.c) + Sources += $(wildcard Source/LibMultiSpacc/SDLCom/*.c Source/LibMultiSpacc/SDL20/*.c) +else ifeq ($(MultiSpacc_Target), Web) + Defines += -DMultiSpacc_Target_Web -DMultiSpacc_Target_SDL20 -DMultiSpacc_Target_SDLWeb + LdFlags += -sWASM=1 -sUSE_SDL=2 -sUSE_SDL_IMAGE=2 -sSDL2_IMAGE_FORMATS='["png"]' -sUSE_SDL_TTF=2 -sUSE_SDL_MIXER=2 --preload-file Assets/Blocks.png --preload-file Assets/Cursorset.png --preload-file Assets/Icon.png --preload-file Assets/LiberationMono-Regular.ttf endif Objects = $(Sources:.c=.o) -all: $(AppName) +all All: $(AppName) $(AppName): $(Objects) $(CC) $^ $(CFlags) $(LdFlags) -o $(AppName)$(ExeSuffix) -clean: +run Run: All + ./$(AppName)$(ExeSuffix) + +clean Clean clear Clear: find -L . -name "*.o" -type f -delete - rm -f $(AppName)$(ExeSuffix) $(AppName).*$(ExeSuffix) + rm -f $(AppName)$(ExeSuffix) $(AppName).*$(ExeSuffix) *.js *.wasm *.data diff --git a/Source/Blocks.h b/Source/Blocks.h index 92c69d7..bcaf645 100644 --- a/Source/Blocks.h +++ b/Source/Blocks.h @@ -1,25 +1,26 @@ #pragma once #include "LibMultiSpacc/MultiSpacc.h" -//#include "SDL/SDL.h" -#define BlocksetNum 6 -#define BlockSize 32 -#define ChunkSize 16 +#define BlocksetNum 8 +#define BlockSize 32 +#define ChunkSize 16 struct Block { - int Id; - char Name[63]; + int Id; + char Name[63]; SDL_Rect Img; - int Light; - bool Falling; - bool Fluid; + int Light; + bool Falling; + bool Fluid; }; struct Block Blocks[BlocksetNum] = { - { 0, "Air", {}, 0, false, false }, - { 1, "White", {}, 0, false, false }, - { 2, "Black", {}, 0, false, false }, - { 3, "Gray", {}, 0, false, false }, - { 4, "Green", {}, 0, false, false }, - { 5, "Blue", {}, 0, false, false }, + { 0, "Air", {}, 0, false, false }, + { 1, "White", {}, 0, false, false }, + { 2, "Black", {}, 0, false, false }, + { 3, "Gray", {}, 0, false, false }, + { 4, "Green", {}, 0, false, false }, + { 5, "Blue", {}, 0, false, false }, + { 6, "Purple", {}, 0, false, false }, + { 7, "Red", {}, 0, false, false }, }; diff --git a/Source/Keys.h b/Source/Keys.h index ed16ee0..aa80f3d 100644 --- a/Source/Keys.h +++ b/Source/Keys.h @@ -1,31 +1,31 @@ #pragma once -#define KeyUp SDLK_UP -#define KeyDown SDLK_DOWN -#define KeyLeft SDLK_LEFT -#define KeyRight SDLK_RIGHT -#define KeyDebug SDLK_F3 +#define KeyUp SDLK_UP +#define KeyDown SDLK_DOWN +#define KeyLeft SDLK_LEFT +#define KeyRight SDLK_RIGHT +#define KeyDebug SDLK_F3 #ifdef Target_PocketGo -#define KeyEsc SDLK_RCTRL // Reset -#define KeyInventory SDLK_ESCAPE // Select -#define KeyGenFlatMap SDLK_LSHIFT // X -#define KeyGenNoiseMap SDLK_SPACE // Y -#define KeyAbove SDLK_LALT // A -#define KeyBelow SDLK_LCTRL // B -#define KeyPlace SDLK_TAB // L -#define KeyBreak SDLK_BACKSPACE // R +#define KeyEsc SDLK_RCTRL // Reset +#define KeyInventory SDLK_ESCAPE // Select +#define KeyGenFlatMap SDLK_LSHIFT // X +#define KeyGenNoiseMap SDLK_SPACE // Y +#define KeyAbove SDLK_LALT // A +#define KeyBelow SDLK_LCTRL // B +#define KeyPlace SDLK_TAB // L +#define KeyBreak SDLK_BACKSPACE // R #else -#define KeyEsc SDLK_ESCAPE -#define KeyInventory SDLK_i -#define KeyGenFlatMap SDLK_F6 -#define KeyGenNoiseMap SDLK_F7 -#define KeyAbove SDLK_LSHIFT -#define KeyBelow SDLK_LCTRL -#define KeyPlace SDLK_z -#define KeyBreak SDLK_x +#define KeyEsc SDLK_ESCAPE +#define KeyInventory SDLK_i +#define KeyGenFlatMap SDLK_F6 +#define KeyGenNoiseMap SDLK_F7 +#define KeyAbove SDLK_LSHIFT +#define KeyBelow SDLK_LCTRL +#define KeyPlace SDLK_z +#define KeyBreak SDLK_x #endif diff --git a/Source/Main.c b/Source/Main.c index 384f258..6310f48 100644 --- a/Source/Main.c +++ b/Source/Main.c @@ -2,29 +2,28 @@ #include #include #include "LibMultiSpacc/MultiSpacc.h" -//#include "SDL/SDL.h" -//#include "SDL/SDL_image.h" -//#include "SDL/SDL_ttf.h" #include "TargetsConfigs.h" #include "Blocks.h" #include "Keys.h" #include "Util.h" +#define swcase break; case + #define AppName "BloccSpacc" MultiSpacc_Window *Window = NULL; MultiSpacc_Surface *Screen = NULL; -SDL_Event Event; +MultiSpacc_Event Event; #define GameTick 30 -SDL_Surface * Cursorset = NULL; +MultiSpacc_Surface *Cursorset = NULL; #define CursorsNum 2 SDL_Rect Cursors[CursorsNum]; -SDL_Surface * BlocksImg = NULL; +MultiSpacc_Surface *BlocksImg = NULL; -SDL_Surface * DebugMsg = NULL; -TTF_Font * DebugFont = NULL; +MultiSpacc_Surface *DebugMsg = NULL; +TTF_Font *DebugFont = NULL; SDL_Color DebugTextColor = { 80, 80, 80 }; int SelectedBlock; @@ -32,16 +31,16 @@ bool InGame, InTitleMenu, InInventory; bool Quit, Recalc, DebugMode; // -static Uint32 NextTickTime; +Uint32 NextTickTime; Uint32 CalcTimeLeft() { Uint32 Now; - Now = SDL_GetTicks(); + Now = MultiSpacc_GetTicks(); if ( NextTickTime <= Now ) { return 0; } else { return NextTickTime - Now; - } -} + }; +}; struct UsedKeys { bool Up, Down, Left, Right, Above, Below; @@ -63,20 +62,21 @@ struct xyz GetBlocksOnScreenNum() { } bool SysInit() { - if ( SDL_Init ( SDL_INIT_EVERYTHING ) != 0 ) { - printf("[E] Error initializing SDL.\n"); - return false; - } - Window = MultiSpacc_SetWindow( ScreenWidth, ScreenHeight, ScreenBits, 0 ); + //if ( MultiSpacc_Init( SDL_INIT_EVERYTHING ) != 0 ) { + // printf("[E] Error initializing Core.\n"); + // return false; + //}; + MultiSpacc_SurfaceConfig windowConfig = {0}; + Window = MultiSpacc_SetWindow( &windowConfig ); Screen = MultiSpacc_GetWindowSurface( Window ); if ( Screen == NULL ) { - printf("[E] Error initializing screen.\n"); + printf("[E] Error initializing Video System.\n"); return false; - } + }; if( TTF_Init() != 0 ) { - printf("[E] Error initializing SDL_TTF.\n"); + printf("[E] Error initializing Font System.\n"); return false; - } + }; MultiSpacc_SetAppTitle( Window, AppName ); MultiSpacc_SetAppIcon( Window, LoadImage( "Assets/Icon.png", Screen ) ); return true; @@ -87,19 +87,19 @@ bool LoadAssets() { Cursorset = LoadImage( "Assets/Cursorset.png", Screen ); if ( Cursorset == NULL ) { Error = true; - } + }; BlocksImg = LoadImage( "Assets/Blocks.png", Screen ); if ( BlocksImg == NULL ) { Error = true; - } + }; DebugFont = TTF_OpenFont( "Assets/LiberationMono-Regular.ttf", 12 ); if ( DebugFont == NULL ) { Error = true; - } + }; if ( Error ) { printf("[E] Error loading assets.\n"); return false; - } + }; return true; } @@ -247,50 +247,54 @@ void DrawCursor() { } } -void DrawDebug() { // There's a memory leak somewhere here - char Str[127]; - - snprintf( Str, sizeof(Str), "CursorPos: x:%d y:%d z:%d", CursorPos.x, CursorPos.y, CursorPos.z ); - DebugMsg = TTF_RenderText_Blended( DebugFont, Str, DebugTextColor ); - DrawSurf( 8, 8, DebugMsg, NULL, Screen ); - - snprintf( Str, sizeof(Str), "Camera: x:%d y:%d z:%d", Camera.x, Camera.y, Camera.z ); - DebugMsg = TTF_RenderText_Blended( DebugFont, Str, DebugTextColor ); - DrawSurf( 8, 20, DebugMsg, NULL, Screen ); - - struct xyz CursorCoords = OrthoToIso ( CursorPos.x, CursorPos.y, CursorPos.z, 1 ); - snprintf( Str, sizeof(Str), "CursorCoords: x:%d y:%d z:%d", CursorCoords.x, CursorCoords.y, CursorCoords.z ); - DebugMsg = TTF_RenderText_Blended( DebugFont, Str, DebugTextColor ); - DrawSurf( 8, 32, DebugMsg, NULL, Screen ); +void DrawString( char Str[], int x, int y, TTF_Font* Font, SDL_Color Color ) { + MultiSpacc_Surface *MsgSurf = TTF_RenderText_Blended( Font, Str, Color ); + DrawSurf( x, y, MsgSurf, NULL, Screen ); + SDL_FreeSurface( MsgSurf ); } -void SetSuperflatMap() { +void DrawDebug() { + char Str[128]; + + snprintf( Str, sizeof(Str), "CursorPos: x:%d y:%d z:%d", CursorPos.x, CursorPos.y, CursorPos.z ); + DrawString( Str, 8, 8, DebugFont, DebugTextColor ); + + snprintf( Str, sizeof(Str), "Camera: x:%d y:%d z:%d", Camera.x, Camera.y, Camera.z ); + DrawString( Str, 8, 20, DebugFont, DebugTextColor ); + + struct xyz CursorCoords = OrthoToIso( CursorPos.x, CursorPos.y, CursorPos.z, 1 ); + snprintf( Str, sizeof(Str), "CursorCoords: x:%d y:%d z:%d", CursorCoords.x, CursorCoords.y, CursorCoords.z ); + DrawString( Str, 8, 32, DebugFont, DebugTextColor ); +} + +void SetSuperflatMap(){ for ( int z = 0; z < ChunksNum.z; z++ ) { for ( int x = 0; x < ChunksNum.x; x++ ) { Map[0][z][x] = 4; - } - } + }; + }; for ( int y = 1; y < ChunksNum.y; y++ ) { for ( int z = 0; z < ChunksNum.z; z++ ) { for ( int x = 0; x < ChunksNum.x; x++ ) { Map[y][z][x] = 0; - } - } - } -} -void SetRandomNoiseMap() { + }; + }; + }; +}; + +void SetRandomNoiseMap(){ for ( int y = 0; y < ChunksNum.y; y++ ) { for ( int z = 0; z < ChunksNum.z; z++ ) { for ( int x = 0; x < ChunksNum.x; x++ ) { int r = rand() % BlocksetNum; if ( r == 1 ) { // Avoid block 1 (all white, hard to see) for testing r = 2; - } + }; Map[y][z][x] = r; - } - } - } -} + }; + }; + }; +}; void GameInit() { for ( int i = 0; i < CursorsNum; i++ ) { @@ -318,95 +322,73 @@ void GameInit() { SelectedBlock = 2; Recalc = true; InGame = true; +}; + +bool GameLoop ( void *args ) { + NextTickTime = MultiSpacc_GetTicks() + GameTick; + while ( MultiSpacc_PollEvent( &Event ) ) { + if ( Event.Type == SDL_QUIT ) { + Quit = true; + } else + if ( Event.Type == SDL_KEYUP ) { + Recalc = true; + switch( Event.Key ){ + swcase KeyUp : UsedKeys.Up = true; + swcase KeyRight : UsedKeys.Right = true; + swcase KeyDown : UsedKeys.Down = true; + swcase KeyLeft : UsedKeys.Left = true; + swcase KeyAbove : UsedKeys.Above = true; + swcase KeyBelow : UsedKeys.Below = true; + swcase KeyPlace : UsedKeys.Place = true; + swcase KeyBreak : UsedKeys.Break = true; + swcase KeyEsc : UsedKeys.Esc = true; + swcase KeyInventory : UsedKeys.Inventory = true; + swcase KeyDebug : DebugMode = !DebugMode; + swcase KeyGenFlatMap : SetSuperflatMap(); + swcase KeyGenNoiseMap : SetRandomNoiseMap(); + }; + }; + }; + EventHandle(); + if ( Recalc ) { + FillSurfRGB ( 0xFF, 0xFF, 0xFF, Screen ); + if ( InGame && !InInventory ) { + SetCamera(); + DrawMap(); + DrawCursor(); + if ( DebugMode ) { + DrawDebug(); + }; + }; + if ( InInventory ) { + DrawInventory(); + }; + if ( !FlipScreen( Window ) ) { + return 1; + }; + Recalc = false; + }; + //MultiSpacc_Sleep( CalcTimeLeft() ); + NextTickTime += GameTick; + return !Quit; } -int main( int argc, char* args[] ) { +int main( int argc, char *args[] ) { printf("[I] Starting!\n"); srand( time( NULL ) ); if ( !SysInit() ) { - printf("[E] Error initializing SDL.\n"); + printf("[E] Error initializing System.\n"); return 1; - } + }; if ( !LoadAssets() ) { printf("[E] Error loading assets.\n"); return 1; - } + }; GameInit(); - - while ( !Quit ) { - NextTickTime = SDL_GetTicks() + GameTick; - while ( SDL_PollEvent( & Event ) ) { - if ( Event.type == SDL_QUIT ) { - Quit = true; - } - else if ( Event.type == SDL_KEYUP ) { - Recalc = true; - if ( Event.key.keysym.sym == KeyEsc ) { - UsedKeys.Esc = true; - } - else if ( Event.key.keysym.sym == KeyDebug ) { - DebugMode = !DebugMode; - } - else if ( Event.key.keysym.sym == KeyInventory ) { - UsedKeys.Inventory = true; - } - else if ( Event.key.keysym.sym == KeyGenFlatMap ) { - SetSuperflatMap(); - } - else if ( Event.key.keysym.sym == KeyGenNoiseMap ) { - SetRandomNoiseMap(); - } - else if ( Event.key.keysym.sym == KeyUp ) { - UsedKeys.Up = true; - } - else if ( Event.key.keysym.sym == KeyRight ) { - UsedKeys.Right = true; - } - else if ( Event.key.keysym.sym == KeyDown ) { - UsedKeys.Down = true; - } - else if ( Event.key.keysym.sym == KeyLeft ) { - UsedKeys.Left = true; - } - else if ( Event.key.keysym.sym == KeyAbove ) { - UsedKeys.Above = true; - } - else if ( Event.key.keysym.sym == KeyBelow ) { - UsedKeys.Below = true; - } - else if ( Event.key.keysym.sym == KeyPlace ) { - UsedKeys.Place = true; - } - else if ( Event.key.keysym.sym == KeyBreak ) { - UsedKeys.Break = true; - } - } - } - EventHandle(); - if ( Recalc ) { - FillSurfRGB ( 0xFF, 0xFF, 0xFF, Screen ); - if ( InGame && !InInventory ) { - SetCamera(); - DrawMap(); - DrawCursor(); - if ( DebugMode ) { - DrawDebug(); - } - } - if ( InInventory ) { - DrawInventory(); - } - if ( !FlipScreen( Window ) ) { - return 1; - } - Recalc = false; - } - SDL_Delay( CalcTimeLeft() ); - NextTickTime += GameTick; - } + MultiSpacc_SetMainLoop( GameLoop, NULL, NULL ); printf("[I] Exiting!\n"); - SDL_Quit(); + //SDL_Quit(); return 0; -} +}; diff --git a/Source/TargetsConfigs.h b/Source/TargetsConfigs.h index 35040c4..8c25c34 100644 --- a/Source/TargetsConfigs.h +++ b/Source/TargetsConfigs.h @@ -1,13 +1,13 @@ #ifdef Target_PocketGo -#define ScreenBits 16 -int ScreenWidth = 320; +#define ScreenBits 16 +int ScreenWidth = 320; int ScreenHeight = 240; #else -#define ScreenBits 32 -int ScreenWidth = 512; +#define ScreenBits 32 +int ScreenWidth = 512; int ScreenHeight = 512; #endif diff --git a/Source/Util.c b/Source/Util.c index e70da23..ab4c726 100644 --- a/Source/Util.c +++ b/Source/Util.c @@ -1,11 +1,9 @@ #include #include "LibMultiSpacc/MultiSpacc.h" -//#include "SDL/SDL.h" -//#include "SDL/SDL_image.h" -SDL_Surface * LoadImage ( char *FilePath, MultiSpacc_Surface *Screen ) { - SDL_Surface *a = NULL; - SDL_Surface *b = NULL; +MultiSpacc_Surface * LoadImage ( char *FilePath, MultiSpacc_Surface *Screen ) { + MultiSpacc_Surface *a = NULL; + MultiSpacc_Surface *b = NULL; a = IMG_Load ( FilePath );///* if ( a == NULL ) { printf("[E] Error reading image %s.\n", FilePath); @@ -22,18 +20,18 @@ SDL_Surface * LoadImage ( char *FilePath, MultiSpacc_Surface *Screen ) { return b;//*/return a; } -void DrawSurf ( int x, int y, SDL_Surface * Src, SDL_Rect * Clip, SDL_Surface * Dst ) { +void DrawSurf ( int x, int y, MultiSpacc_Surface * Src, SDL_Rect * Clip, MultiSpacc_Surface * Dst ) { SDL_Rect Offset; Offset.x = x; Offset.y = y; SDL_BlitSurface( Src, Clip, Dst, &Offset ); } -void FillSurfRGB ( int R, int G, int B, SDL_Surface * Dst ) { +void FillSurfRGB ( int R, int G, int B, MultiSpacc_Surface * Dst ) { SDL_FillRect( Dst, &Dst->clip_rect, SDL_MapRGB( Dst->format, R, G, B ) ); } -void DrawOutlineRect ( int x, int y, int w, int h, int Size, int R, int G, int B, SDL_Surface * Dst ) { +void DrawOutlineRect ( int x, int y, int w, int h, int Size, int R, int G, int B, MultiSpacc_Surface * Dst ) { SDL_Rect Rect; Rect.x = x; Rect.y = y;