mirror of
https://gitlab.com/octospacc/MultiSpaccSDK
synced 2025-04-19 21:27:21 +02:00
Add NES sprite flags, handle SDL non-held inputs
This commit is contained in:
parent
3ba1e58b75
commit
399e7426b5
@ -6,6 +6,7 @@ before_script: |
|
|||||||
Tests:
|
Tests:
|
||||||
stage: build
|
stage: build
|
||||||
script: |
|
script: |
|
||||||
make -j($nproc --all)
|
. .env
|
||||||
|
make -j$(nproc --all)
|
||||||
rules:
|
rules:
|
||||||
- if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH
|
- if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH
|
||||||
|
Binary file not shown.
@ -13,23 +13,21 @@ typedef struct MainArgs {
|
|||||||
MultiSpacc_Surface *background;
|
MultiSpacc_Surface *background;
|
||||||
//MultiSpacc_Surface *Foreground;
|
//MultiSpacc_Surface *Foreground;
|
||||||
MultiSpacc_Surface *tilesImg;
|
MultiSpacc_Surface *tilesImg;
|
||||||
|
MultiSpacc_KeysStates *buttonsStates;
|
||||||
} MainArgs;
|
} MainArgs;
|
||||||
|
|
||||||
/*{pal:"nes",layout:"nes"}*/
|
|
||||||
const char palette[32] = {
|
const char palette[32] = {
|
||||||
0x0F, // screen
|
0x0F, // screen
|
||||||
0x11,0x02,0x02,0x00, // background 0
|
0x11,0x02,0x02,0x00, // background 0
|
||||||
0x00,0x00,0x00,0x00, // background 1
|
0x00,0x00,0x00,0x00, // background 1
|
||||||
0x00,0x00,0x00,0x00, // background 2
|
0x00,0x00,0x00,0x00, // background 2
|
||||||
0x00,0x00,0x00,0x00, // background 3
|
0x00,0x00,0x00,0x00, // background 3
|
||||||
0x16,0x00,0x00,0x00, // sprite 0
|
0x28,0x00,0x00,0x00, // sprite 0
|
||||||
0x00,0x00,0x00,0x00, // sprite 1
|
0x00,0x00,0x00,0x00, // sprite 1
|
||||||
0x00,0x00,0x00,0x00, // sprite 2
|
0x00,0x00,0x00,0x00, // sprite 2
|
||||||
0x00,0x00,0x00, // sprite 3
|
0x00,0x00,0x00, // sprite 3
|
||||||
};
|
};
|
||||||
|
|
||||||
Uint32 nextTick;
|
|
||||||
|
|
||||||
bool MainLoop( void *args )
|
bool MainLoop( void *args )
|
||||||
{
|
{
|
||||||
MainArgs *margs = (MainArgs*)args;
|
MainArgs *margs = (MainArgs*)args;
|
||||||
@ -37,7 +35,7 @@ bool MainLoop( void *args )
|
|||||||
//SDL_FillRect(margs->background, NULL, 0x00F);
|
//SDL_FillRect(margs->background, NULL, 0x00F);
|
||||||
MultiSpacc_BlitLayer( margs->background, margs->screen );
|
MultiSpacc_BlitLayer( margs->background, margs->screen );
|
||||||
//SDL_BlitSurface( margs->Foreground, &rect, margs->Screen, &rect );
|
//SDL_BlitSurface( margs->Foreground, &rect, margs->Screen, &rect );
|
||||||
MultiSpacc_SetSprite( 0, margs->spriteX, margs->spriteY, 1, margs->tilesImg, margs->screen );
|
MultiSpacc_SetSprite( 0, margs->spriteX, margs->spriteY, 1, NULL, margs->tilesImg, margs->screen );
|
||||||
//scroll(spriteX,0);
|
//scroll(spriteX,0);
|
||||||
|
|
||||||
margs->spriteX += margs->accelX;
|
margs->spriteX += margs->accelX;
|
||||||
@ -52,8 +50,10 @@ bool MainLoop( void *args )
|
|||||||
margs->accelY *= -1;
|
margs->accelY *= -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MultiSpacc_PollButtons( 0, margs->buttonsStates );
|
||||||
|
|
||||||
/* TODO: listen for OS terminate signal */
|
/* TODO: listen for OS terminate signal */
|
||||||
if( MultiSpacc_CheckKey( MultiSpacc_Key_Pause, 0 ) )
|
if( MultiSpacc_CheckKeyPress( MultiSpacc_Key_Pause, margs->buttonsStates ) )
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -77,14 +77,15 @@ int main( int argc, char *argv[] )
|
|||||||
{
|
{
|
||||||
MainArgs margs = {0};
|
MainArgs margs = {0};
|
||||||
MultiSpacc_SurfaceConfig windowConfig = {0};
|
MultiSpacc_SurfaceConfig windowConfig = {0};
|
||||||
|
MultiSpacc_KeysStates buttonsStates = {0};
|
||||||
|
|
||||||
margs.windowConfig = &windowConfig;
|
margs.windowConfig = &windowConfig;
|
||||||
|
margs.buttonsStates = &buttonsStates;
|
||||||
margs.accelX = +2;
|
margs.accelX = +2;
|
||||||
margs.accelY = +2;
|
margs.accelY = +2;
|
||||||
|
|
||||||
windowConfig.width = 320;
|
windowConfig.width = 320;
|
||||||
windowConfig.height = 240;
|
windowConfig.height = 240;
|
||||||
//windowConfig.bits = 16;
|
|
||||||
memcpy( windowConfig.palette, palette, 32 );
|
memcpy( windowConfig.palette, palette, 32 );
|
||||||
|
|
||||||
//romfsInit();
|
//romfsInit();
|
||||||
|
@ -9,6 +9,7 @@ All all:
|
|||||||
"Target=WindowsPC MultiSpacc_Target=SDL20" \
|
"Target=WindowsPC MultiSpacc_Target=SDL20" \
|
||||||
"Target=Windows9x" \
|
"Target=Windows9x" \
|
||||||
"Target=Web" \
|
"Target=Web" \
|
||||||
|
"Target=Switch" \
|
||||||
"Target=NDS" \
|
"Target=NDS" \
|
||||||
"Target=NES" \
|
"Target=NES" \
|
||||||
; do \
|
; do \
|
||||||
|
@ -20,13 +20,14 @@ signed char paddleDxMove = 0;
|
|||||||
|
|
||||||
//char scoreChar[6];
|
//char scoreChar[6];
|
||||||
|
|
||||||
|
MultiSpacc_KeysStates buttonsStates;
|
||||||
MultiSpacc_SurfaceConfig windowConfig = {0};
|
MultiSpacc_SurfaceConfig windowConfig = {0};
|
||||||
MultiSpacc_Window *window;
|
MultiSpacc_Window *window;
|
||||||
MultiSpacc_Surface *screen;
|
MultiSpacc_Surface *screen;
|
||||||
MultiSpacc_Surface *background;
|
MultiSpacc_Surface *background;
|
||||||
MultiSpacc_Surface *tilesImg;
|
MultiSpacc_Surface *tilesImg;
|
||||||
|
|
||||||
MultiSpacc_SpritesMap paddleSpriteMap;
|
MultiSpacc_SpritesMap paddleSxSpriteMap, paddleDxSpriteMap;
|
||||||
MultiSpacc_TilesMap divisorTileMap, borderTileMap;
|
MultiSpacc_TilesMap divisorTileMap, borderTileMap;
|
||||||
|
|
||||||
#define BallSize 8
|
#define BallSize 8
|
||||||
@ -36,8 +37,9 @@ MultiSpacc_TilesMap divisorTileMap, borderTileMap;
|
|||||||
|
|
||||||
#define BallTile 128
|
#define BallTile 128
|
||||||
#define PaddleTile 129
|
#define PaddleTile 129
|
||||||
#define DivisorTile 130
|
#define BorderTile 130
|
||||||
#define BorderTile 131
|
#define DivisorTileSx 131
|
||||||
|
#define DivisorTileDx 132
|
||||||
|
|
||||||
#define BallSprite 0
|
#define BallSprite 0
|
||||||
#define PaddleSxSprite 1
|
#define PaddleSxSprite 1
|
||||||
@ -54,15 +56,15 @@ MultiSpacc_TilesMap divisorTileMap, borderTileMap;
|
|||||||
// TODO: more defines for frequently-used expressions
|
// TODO: more defines for frequently-used expressions
|
||||||
|
|
||||||
const char palette[32] = {
|
const char palette[32] = {
|
||||||
0x0F, // screen
|
0x1B, // screen
|
||||||
0x11,0x30,0x27,0x00, // background 0
|
0x30,0x20,0x20,0x20, // background 0
|
||||||
0x1c,0x20,0x2c,0x00, // background 1
|
0x00,0x00,0x00,0x00, // background 1
|
||||||
0x00,0x10,0x20,0x00, // background 2
|
0x00,0x00,0x00,0x00, // background 2
|
||||||
0x06,0x16,0x26,0x00, // background 3
|
0x00,0x00,0x00,0x00, // background 3
|
||||||
0x16,0x35,0x24,0x00, // sprite 0
|
0x30,0x20,0x20,0x20, // sprite 0
|
||||||
0x00,0x37,0x25,0x00, // sprite 1
|
0x00,0x00,0x00,0x00, // sprite 1
|
||||||
0x0d,0x2d,0x3a,0x00, // sprite 2
|
0x00,0x00,0x00,0x00, // sprite 2
|
||||||
0x0d,0x27,0x2a, // sprite 3
|
0x00,0x00,0x00, // sprite 3
|
||||||
};
|
};
|
||||||
|
|
||||||
void ResetBall(void)
|
void ResetBall(void)
|
||||||
@ -163,11 +165,11 @@ void UpdateCpuPlayer(void)
|
|||||||
|
|
||||||
bool PollPlayerPaddle(void)
|
bool PollPlayerPaddle(void)
|
||||||
{
|
{
|
||||||
if( paddleSxY > 0+ScreenMarginYPx+PaddleMarginYPx+BallSize && MultiSpacc_CheckKey( MultiSpacc_Key_Up, 0 ) )
|
if( paddleSxY > 0+ScreenMarginYPx+PaddleMarginYPx+BallSize && MultiSpacc_CheckKeyHold( MultiSpacc_Key_Up, &buttonsStates ) )
|
||||||
{
|
{
|
||||||
paddleSxMove = -1;
|
paddleSxMove = -1;
|
||||||
}
|
}
|
||||||
else if( paddleSxY < windowConfig.height-ScreenMarginYPx-PaddleMarginYPx-PaddleHeightPx-BallSize && MultiSpacc_CheckKey( MultiSpacc_Key_Down, 0 ) )
|
else if( paddleSxY < windowConfig.height-ScreenMarginYPx-PaddleMarginYPx-PaddleHeightPx-BallSize && MultiSpacc_CheckKeyHold( MultiSpacc_Key_Down, &buttonsStates ) )
|
||||||
{
|
{
|
||||||
paddleSxMove = +1;
|
paddleSxMove = +1;
|
||||||
}
|
}
|
||||||
@ -193,8 +195,8 @@ bool DisplayBorders(void)
|
|||||||
|
|
||||||
for( i=1; i<(windowConfig.height/8 - 1); i++ )
|
for( i=1; i<(windowConfig.height/8 - 1); i++ )
|
||||||
{
|
{
|
||||||
MultiSpacc_SetTile( windowConfig.width/8/2 , i, DivisorTile, tilesImg, background );
|
MultiSpacc_SetTile( windowConfig.width/8/2 , i, DivisorTileDx, tilesImg, background );
|
||||||
MultiSpacc_SetTile( windowConfig.width/8/2 - 1, i, DivisorTile, tilesImg, background );
|
MultiSpacc_SetTile( windowConfig.width/8/2 - 1, i, DivisorTileSx, tilesImg, background );
|
||||||
}
|
}
|
||||||
|
|
||||||
for( i=0; i<windowConfig.width/8; i++ )
|
for( i=0; i<windowConfig.width/8; i++ )
|
||||||
@ -206,18 +208,20 @@ bool DisplayBorders(void)
|
|||||||
|
|
||||||
bool RealUpdate( void *args, double deltaTime )
|
bool RealUpdate( void *args, double deltaTime )
|
||||||
{
|
{
|
||||||
|
MultiSpacc_PollButtons( 0, &buttonsStates );
|
||||||
|
|
||||||
if(!paused)
|
if(!paused)
|
||||||
{
|
{
|
||||||
//SDL_FillRect( background, &background->clip_rect, SDL_MapRGB( background->format, 0, 0, 0 ) );
|
//SDL_FillRect( background, &background->clip_rect, SDL_MapRGB( background->format, 0, 0, 0 ) );
|
||||||
MultiSpacc_BlitLayer( background, screen );
|
MultiSpacc_BlitLayer( background, screen );
|
||||||
|
|
||||||
MultiSpacc_SetSprite( BallSprite, ballX+accelX*deltaTime, ballY+accelY*deltaTime, BallTile, tilesImg, screen );
|
MultiSpacc_SetSprite( BallSprite, ballX+accelX*deltaTime, ballY+accelY*deltaTime, BallTile, NULL, tilesImg, screen );
|
||||||
|
|
||||||
#define PaddleAccelDelta PaddleAccel*deltaTime
|
#define PaddleAccelDelta PaddleAccel*deltaTime
|
||||||
#define PaddleSxYDisplay (paddleSxY + paddleSxMove*PaddleAccelDelta)
|
#define PaddleSxYDisplay (paddleSxY + paddleSxMove*PaddleAccelDelta)
|
||||||
#define PaddleDxYDisplay (paddleDxY + paddleDxMove*PaddleAccelDelta)
|
#define PaddleDxYDisplay (paddleDxY + paddleDxMove*PaddleAccelDelta)
|
||||||
MultiSpacc_SetMetaSprite( PaddleSxSprite, PaddleSxX, PaddleSxYDisplay, &paddleSpriteMap, PaddleHeightTl, tilesImg, screen );
|
MultiSpacc_SetMetaSprite( PaddleSxSprite, PaddleSxX, PaddleSxYDisplay, &paddleSxSpriteMap, PaddleHeightTl, tilesImg, screen );
|
||||||
MultiSpacc_SetMetaSprite( PaddleDxSprite, PaddleDxX, PaddleDxYDisplay, &paddleSpriteMap, PaddleHeightTl, tilesImg, screen );
|
MultiSpacc_SetMetaSprite( PaddleDxSprite, PaddleDxX, PaddleDxYDisplay, &paddleDxSpriteMap, PaddleHeightTl, tilesImg, screen );
|
||||||
|
|
||||||
//RefreshScore():
|
//RefreshScore():
|
||||||
//itoa(scoreSx, scoreChar, 10);
|
//itoa(scoreSx, scoreChar, 10);
|
||||||
@ -231,7 +235,7 @@ bool RealUpdate( void *args, double deltaTime )
|
|||||||
// TODO: listen for OS terminate signal
|
// TODO: listen for OS terminate signal
|
||||||
// TODO: fix SDL not waiting for key release with inputs checked this way
|
// TODO: fix SDL not waiting for key release with inputs checked this way
|
||||||
// TODO: proper pause menu?
|
// TODO: proper pause menu?
|
||||||
if( MultiSpacc_CheckKey( MultiSpacc_Key_Pause, 0 ) )
|
if( MultiSpacc_CheckKeyPress( MultiSpacc_Key_Pause, &buttonsStates ) )
|
||||||
{
|
{
|
||||||
if(!paused)
|
if(!paused)
|
||||||
{
|
{
|
||||||
@ -257,17 +261,25 @@ bool RealUpdate( void *args, double deltaTime )
|
|||||||
int main( int argc, char *argv[] )
|
int main( int argc, char *argv[] )
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
int chr[] = { PaddleTile, PaddleTile, PaddleTile, PaddleTile };
|
|
||||||
int x[] = { 0, 0, 0, 0 };
|
|
||||||
int y[] = { 0, 8, 16, 24 };
|
|
||||||
|
|
||||||
paddleSpriteMap.chr = chr;
|
int x[PaddleHeightTl] = { 0, 0, 0, 0 };
|
||||||
paddleSpriteMap.x = x;
|
int y[PaddleHeightTl] = { 0, 8, 16, 24 };
|
||||||
paddleSpriteMap.y = y;
|
int chr[PaddleHeightTl] = { PaddleTile, PaddleTile, PaddleTile, PaddleTile };
|
||||||
|
MultiSpacc_SpriteFlags flagsSx[PaddleHeightTl];
|
||||||
|
MultiSpacc_SpriteFlags flagsDx[PaddleHeightTl];
|
||||||
|
|
||||||
|
for( i=0; i<PaddleHeightTl; ++i ){
|
||||||
|
flagsDx[i].flipHorizontal = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
paddleSxSpriteMap.x = paddleDxSpriteMap.x = x;
|
||||||
|
paddleSxSpriteMap.y = paddleDxSpriteMap.y = y;
|
||||||
|
paddleSxSpriteMap.chr = paddleDxSpriteMap.chr = chr;
|
||||||
|
paddleSxSpriteMap.flags = (MultiSpacc_SpriteFlags*)&flagsSx;
|
||||||
|
paddleDxSpriteMap.flags = (MultiSpacc_SpriteFlags*)&flagsDx;
|
||||||
|
|
||||||
windowConfig.width = 320;
|
windowConfig.width = 320;
|
||||||
windowConfig.height = 240;
|
windowConfig.height = 240;
|
||||||
windowConfig.bits = 16;
|
|
||||||
memcpy( windowConfig.palette, palette, 32 );
|
memcpy( windowConfig.palette, palette, 32 );
|
||||||
|
|
||||||
window = MultiSpacc_SetWindow( &windowConfig );
|
window = MultiSpacc_SetWindow( &windowConfig );
|
||||||
|
@ -1,33 +1,92 @@
|
|||||||
#include "./MultiSpacc.h"
|
#include "./MultiSpacc.h"
|
||||||
|
|
||||||
bool MultiSpacc_CheckKey( int key, char pad )
|
// TODO: Handle actual presses in SDL
|
||||||
|
// void MultiSpacc_PollButtons( char pad, MultiSpacc_KeysStates *buttonsPressed, MultiSpacc_KeysStates *buttonsHeld )
|
||||||
|
// {
|
||||||
|
// #if defined(MultiSpacc_Target_SDLCommon)
|
||||||
|
// SDL_PumpEvents();
|
||||||
|
// #if defined(MultiSpacc_Target_SDL12)
|
||||||
|
// buttonsPressed->keysStates = SDL_GetKeyState(NULL);
|
||||||
|
// #elif defined(MultiSpacc_Target_SDL20)
|
||||||
|
// buttonsPressed->keysStates = SDL_GetKeyboardState(NULL);
|
||||||
|
// #endif
|
||||||
|
// buttonsHeld->keysStates = buttonsPressed->keysStates;
|
||||||
|
|
||||||
|
// #elif defined(MultiSpacc_Target_NDS)
|
||||||
|
// scanKeys();
|
||||||
|
// buttonsPressed->keysStates = keysDown();
|
||||||
|
// buttonsHeld->keysStates = buttonsPressed->keysStates;
|
||||||
|
|
||||||
|
// #elif defined(MultiSpacc_Target_NES)
|
||||||
|
// buttonsPressed->keysStates = pad_trigger(pad);
|
||||||
|
// buttonsHeld->keysStates = pad_state(pad);
|
||||||
|
|
||||||
|
// #endif
|
||||||
|
// }
|
||||||
|
|
||||||
|
// bool MultiSpacc_CheckButtonState( int button, MultiSpacc_KeysStates *buttonsStates )
|
||||||
|
// {
|
||||||
|
// #if defined(MultiSpacc_Target_SDLCommon)
|
||||||
|
// return buttonsStates->keysStates[button];
|
||||||
|
// #elif defined(MultiSpacc_Target_NDS) || defined(MultiSpacc_Target_NES)
|
||||||
|
// return ( buttonsStates->keysStates & button );
|
||||||
|
// #endif
|
||||||
|
// }
|
||||||
|
|
||||||
|
void MultiSpacc_PollButtons( char pad, MultiSpacc_KeysStates *keysStates )
|
||||||
{
|
{
|
||||||
#if defined(MultiSpacc_Target_SDLCommon)
|
#if defined(MultiSpacc_Target_SDLCommon)
|
||||||
|
int numkeys;
|
||||||
|
|
||||||
|
SDL_PumpEvents();
|
||||||
|
|
||||||
#if defined(MultiSpacc_Target_SDL12)
|
#if defined(MultiSpacc_Target_SDL12)
|
||||||
Uint8 *keys;
|
keysStates->keysHeld = SDL_GetKeyState(&numkeys);
|
||||||
SDL_PumpEvents();
|
|
||||||
keys = SDL_GetKeyState(NULL);
|
|
||||||
#elif defined(MultiSpacc_Target_SDL20)
|
#elif defined(MultiSpacc_Target_SDL20)
|
||||||
const Uint8 *keys;
|
keysStates->keysHeld = SDL_GetKeyboardState(&numkeys);
|
||||||
SDL_PumpEvents();
|
|
||||||
keys = SDL_GetKeyboardState(NULL);
|
|
||||||
#endif
|
#endif
|
||||||
return keys[key];
|
|
||||||
// SDL_Event event;
|
if( keysStates->keysPressed == NULL )
|
||||||
// while( SDL_PollEvent(&event) ) // TODO: fix this, it eliminates all events beside the first
|
{
|
||||||
// {
|
keysStates->keysPressed = malloc( numkeys*sizeof(int) );
|
||||||
// if ( event.type == SDL_KEYDOWN && event.key.keysym.sym == key )
|
memset( (void*)keysStates->keysPressed, false, numkeys*sizeof(int) );
|
||||||
// {
|
}
|
||||||
// return true;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// return false;
|
|
||||||
#elif defined(MultiSpacc_Target_NDS)
|
#elif defined(MultiSpacc_Target_NDS)
|
||||||
int keys;
|
|
||||||
scanKeys();
|
scanKeys();
|
||||||
keys = keysDown();
|
keysStates->keysPressed = keysDown();
|
||||||
return ( keys & key );
|
keysStates->keysHeld = keysStates->keysPressed;
|
||||||
|
|
||||||
#elif defined(MultiSpacc_Target_NES)
|
#elif defined(MultiSpacc_Target_NES)
|
||||||
return ( pad_poll(pad) & key );
|
keysStates->keysPressed = pad_trigger(pad);
|
||||||
|
keysStates->keysHeld = pad_state(pad);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
bool MultiSpacc_CheckKeyPress( int key, MultiSpacc_KeysStates *keysStates )
|
||||||
|
{
|
||||||
|
#if defined(MultiSpacc_Target_SDLCommon)
|
||||||
|
if ( keysStates->keysHeld[key] && !keysStates->keysPressed[key] )
|
||||||
|
{
|
||||||
|
keysStates->keysPressed[key] = true;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if ( !keysStates->keysHeld[key] && keysStates->keysPressed[key] )
|
||||||
|
{
|
||||||
|
keysStates->keysPressed[key] = false;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
#elif defined(MultiSpacc_Target_NDS) || defined(MultiSpacc_Target_NES)
|
||||||
|
return ( keysStates->keysPressed & key );
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
bool MultiSpacc_CheckKeyHold( int key, MultiSpacc_KeysStates *keysStates )
|
||||||
|
{
|
||||||
|
#if defined(MultiSpacc_Target_SDLCommon)
|
||||||
|
return keysStates->keysHeld[key];
|
||||||
|
#elif defined(MultiSpacc_Target_NDS) || defined(MultiSpacc_Target_NES)
|
||||||
|
return ( keysStates->keysHeld & key );
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,22 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(MultiSpacc_Target_SDL12)
|
||||||
|
#define MultiSpacc_SDLK_ESCAPE SDLK_ESCAPE
|
||||||
|
#define MultiSpacc_SDLK_TAB SDLK_TAB
|
||||||
|
#define MultiSpacc_SDLK_UP SDLK_UP
|
||||||
|
#define MultiSpacc_SDLK_DOWN SDLK_DOWN
|
||||||
|
#define MultiSpacc_SDLK_LEFT SDLK_LEFT
|
||||||
|
#define MultiSpacc_SDLK_RIGHT SDLK_RIGHT
|
||||||
|
#elif defined(MultiSpacc_Target_SDL20)
|
||||||
|
#define MultiSpacc_SDLK_ESCAPE SDL_SCANCODE_ESCAPE
|
||||||
|
#define MultiSpacc_SDLK_TAB SDL_SCANCODE_TAB
|
||||||
|
#define MultiSpacc_SDLK_UP SDL_SCANCODE_UP
|
||||||
|
#define MultiSpacc_SDLK_DOWN SDL_SCANCODE_DOWN
|
||||||
|
#define MultiSpacc_SDLK_LEFT SDL_SCANCODE_LEFT
|
||||||
|
#define MultiSpacc_SDLK_RIGHT SDL_SCANCODE_RIGHT
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(MultiSpacc_Target_Switch) && defined(MultiSpacc_Target_SDLCommon)
|
#if defined(MultiSpacc_Target_Switch) && defined(MultiSpacc_Target_SDLCommon)
|
||||||
#define JOY_A 0
|
#define JOY_A 0
|
||||||
#define JOY_B 1
|
#define JOY_B 1
|
||||||
@ -45,8 +61,7 @@ extern "C" {
|
|||||||
|
|
||||||
// Pause
|
// Pause
|
||||||
#if defined(MultiSpacc_Target_SDLCommon) && (defined(MultiSpacc_Target_PC) || defined(MultiSpacc_Target_Web))
|
#if defined(MultiSpacc_Target_SDLCommon) && (defined(MultiSpacc_Target_PC) || defined(MultiSpacc_Target_Web))
|
||||||
//#define MultiSpacc_Key_Pause SDLK_ESCAPE
|
#define MultiSpacc_Key_Pause MultiSpacc_SDLK_ESCAPE
|
||||||
#define MultiSpacc_Key_Pause SDL_SCANCODE_ESCAPE
|
|
||||||
#elif defined(MultiSpacc_Target_SDLCommon) && defined(MultiSpacc_Target_Switch)
|
#elif defined(MultiSpacc_Target_SDLCommon) && defined(MultiSpacc_Target_Switch)
|
||||||
#define MultiSpacc_Key_Pause JOY_PLUS
|
#define MultiSpacc_Key_Pause JOY_PLUS
|
||||||
#elif defined(MultiSpacc_Target_NDS)
|
#elif defined(MultiSpacc_Target_NDS)
|
||||||
@ -57,8 +72,7 @@ extern "C" {
|
|||||||
|
|
||||||
// Select
|
// Select
|
||||||
#if defined(MultiSpacc_Target_SDLCommon) && (defined(MultiSpacc_Target_PC) || defined(MultiSpacc_Target_Web))
|
#if defined(MultiSpacc_Target_SDLCommon) && (defined(MultiSpacc_Target_PC) || defined(MultiSpacc_Target_Web))
|
||||||
// #define MultiSpacc_Key_Select SDLK_TAB
|
#define MultiSpacc_Key_Select MultiSpacc_SDLK_TAB
|
||||||
#define MultiSpacc_Key_Select SDL_SCANCODE_TAB
|
|
||||||
#elif defined(MultiSpacc_Target_NDS)
|
#elif defined(MultiSpacc_Target_NDS)
|
||||||
#define MultiSpacc_Key_Select KEY_SELECT
|
#define MultiSpacc_Key_Select KEY_SELECT
|
||||||
#elif defined(MultiSpacc_Target_NES)
|
#elif defined(MultiSpacc_Target_NES)
|
||||||
@ -67,14 +81,10 @@ extern "C" {
|
|||||||
|
|
||||||
// Directions
|
// Directions
|
||||||
#if defined(MultiSpacc_Target_SDLCommon) && (defined(MultiSpacc_Target_PC) || defined(MultiSpacc_Target_Web))
|
#if defined(MultiSpacc_Target_SDLCommon) && (defined(MultiSpacc_Target_PC) || defined(MultiSpacc_Target_Web))
|
||||||
// #define MultiSpacc_Key_Up SDLK_UP
|
#define MultiSpacc_Key_Up MultiSpacc_SDLK_UP
|
||||||
// #define MultiSpacc_Key_Down SDLK_DOWN
|
#define MultiSpacc_Key_Down MultiSpacc_SDLK_DOWN
|
||||||
// #define MultiSpacc_Key_Left SDLK_LEFT
|
#define MultiSpacc_Key_Left MultiSpacc_SDLK_LEFT
|
||||||
// #define MultiSpacc_Key_Right SDLK_RIGHT
|
#define MultiSpacc_Key_Right MultiSpacc_SDLK_RIGHT
|
||||||
#define MultiSpacc_Key_Up SDL_SCANCODE_UP
|
|
||||||
#define MultiSpacc_Key_Down SDL_SCANCODE_DOWN
|
|
||||||
#define MultiSpacc_Key_Left SDL_SCANCODE_LEFT
|
|
||||||
#define MultiSpacc_Key_Right SDL_SCANCODE_RIGHT
|
|
||||||
#elif defined(MultiSpacc_Target_NDS)
|
#elif defined(MultiSpacc_Target_NDS)
|
||||||
// ...
|
// ...
|
||||||
#elif defined(MultiSpacc_Target_NES)
|
#elif defined(MultiSpacc_Target_NES)
|
||||||
@ -91,7 +101,32 @@ extern "C" {
|
|||||||
// #define MultiSpacc_Key_Cancel ESC
|
// #define MultiSpacc_Key_Cancel ESC
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bool MultiSpacc_CheckKey( int key, char pad );
|
// typedef struct MultiSpacc_KeysStates {
|
||||||
|
// #if defined(MultiSpacc_Target_SDLCommon)
|
||||||
|
// const Uint8 *keysStates;
|
||||||
|
// #elif defined(MultiSpacc_Target_NDS)
|
||||||
|
// int keysStates;
|
||||||
|
// #elif defined(MultiSpacc_Target_NES)
|
||||||
|
// char keysStates;
|
||||||
|
// #endif
|
||||||
|
// } MultiSpacc_KeysStates;
|
||||||
|
|
||||||
|
typedef struct MultiSpacc_KeysStates {
|
||||||
|
#if defined(MultiSpacc_Target_SDLCommon)
|
||||||
|
Uint8 *keysPressed;
|
||||||
|
const Uint8 *keysHeld;
|
||||||
|
#elif defined(MultiSpacc_Target_NDS)
|
||||||
|
#elif defined(MultiSpacc_Target_NES)
|
||||||
|
char keysPressed;
|
||||||
|
char keysHeld;
|
||||||
|
#endif
|
||||||
|
} MultiSpacc_KeysStates;
|
||||||
|
|
||||||
|
//void MultiSpacc_PollButtons( char pad, MultiSpacc_KeysStates *buttonsPressed, MultiSpacc_KeysStates *buttonsHeld );
|
||||||
|
//bool MultiSpacc_CheckButtonState( int button, MultiSpacc_KeysStates *buttonsStates );
|
||||||
|
void MultiSpacc_PollButtons( char pad, MultiSpacc_KeysStates *keysStates );
|
||||||
|
bool MultiSpacc_CheckKeyPress( int key, MultiSpacc_KeysStates *keysStates );
|
||||||
|
bool MultiSpacc_CheckKeyHold( int key, MultiSpacc_KeysStates *keysStates );
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
@ -97,7 +97,7 @@ int MultiSpacc_SetColorKey( MultiSpacc_Surface *Surface, bool Flag, Uint32 Key )
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void MultiSpacc_SetSprite( int id, int x, int y, int sprite, MultiSpacc_Surface *tiles, MultiSpacc_Surface *screen )
|
void MultiSpacc_SetSprite( int id, int x, int y, int sprite, MultiSpacc_SpriteFlags *flags, MultiSpacc_Surface *tiles, MultiSpacc_Surface *screen )
|
||||||
{
|
{
|
||||||
#if defined(MultiSpacc_Target_SDLCommon)
|
#if defined(MultiSpacc_Target_SDLCommon)
|
||||||
MultiSpacc_Rect offset = { .x = x, .y = y, };
|
MultiSpacc_Rect offset = { .x = x, .y = y, };
|
||||||
@ -110,7 +110,7 @@ void MultiSpacc_SetSprite( int id, int x, int y, int sprite, MultiSpacc_Surface
|
|||||||
SDL_BlitSurface( tiles, &clip, screen, &offset );
|
SDL_BlitSurface( tiles, &clip, screen, &offset );
|
||||||
|
|
||||||
#elif defined(MultiSpacc_Target_NES)
|
#elif defined(MultiSpacc_Target_NES)
|
||||||
oam_spr( x, y, sprite, 0, id*4 );
|
oam_spr( x, y, sprite, (flags == NULL ? 0 : 0|(flags->flipHorizontal ? OAM_FLIP_H : 0)|(flags->flipVertical ? OAM_FLIP_V : 0)), id*4 );
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@ -120,7 +120,7 @@ void MultiSpacc_SetMetaSprite( int id, int x, int y, MultiSpacc_SpritesMap *map,
|
|||||||
int i;
|
int i;
|
||||||
for(i=0; i<mapSize; i++)
|
for(i=0; i<mapSize; i++)
|
||||||
{
|
{
|
||||||
MultiSpacc_SetSprite( (id + i), (x + map->x[i]), (y + map->y[i]), map->chr[i], tiles, screen );
|
MultiSpacc_SetSprite( (id + i), (x + map->x[i]), (y + map->y[i]), map->chr[i], &map->flags[i], tiles, screen );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -140,7 +140,6 @@ void MultiSpacc_SetTile( int x, int y, int tile, MultiSpacc_Surface *tiles, Mult
|
|||||||
SDL_BlitSurface( tiles, &clip, screen, &offset );
|
SDL_BlitSurface( tiles, &clip, screen, &offset );
|
||||||
|
|
||||||
#elif defined(MultiSpacc_Target_NES)
|
#elif defined(MultiSpacc_Target_NES)
|
||||||
// NOTE: is there no alternative to ppu off and on there? it makes the screen flicker and so makes programming more difficult
|
|
||||||
ppu_off();
|
ppu_off();
|
||||||
vram_adr(NTADR_A( x, y ));
|
vram_adr(NTADR_A( x, y ));
|
||||||
vram_put(tile);
|
vram_put(tile);
|
||||||
@ -149,6 +148,29 @@ void MultiSpacc_SetTile( int x, int y, int tile, MultiSpacc_Surface *tiles, Mult
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MultiSpacc_SetMetaTile( int x, int y, MultiSpacc_TilesMap *map, int mapSize, MultiSpacc_Surface *tiles, MultiSpacc_Surface *screen )
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
#if defined(MultiSpacc_Target_NES)
|
||||||
|
ppu_off();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
for(i=0; i<mapSize; i++)
|
||||||
|
{
|
||||||
|
#if defined(MultiSpacc_Target_NES)
|
||||||
|
vram_adr(NTADR_A( (x + map->x[i]), (y + map->y[i]) ));
|
||||||
|
vram_put( map->chr[i] );
|
||||||
|
#else
|
||||||
|
MultiSpacc_SetTile( (x + map->x[i]), (y + map->y[i]), map->chr[i], tiles, screen );
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(MultiSpacc_Target_NES)
|
||||||
|
ppu_on_all();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
void MultiSpacc_BlitLayer( MultiSpacc_Surface *source, MultiSpacc_Surface *destination )
|
void MultiSpacc_BlitLayer( MultiSpacc_Surface *source, MultiSpacc_Surface *destination )
|
||||||
{
|
{
|
||||||
#if defined(MultiSpacc_Target_SDLCommon)
|
#if defined(MultiSpacc_Target_SDLCommon)
|
||||||
|
@ -107,11 +107,16 @@ typedef struct MultiSpacc_SurfaceConfig {
|
|||||||
Uint32 flags;
|
Uint32 flags;
|
||||||
} MultiSpacc_SurfaceConfig;
|
} MultiSpacc_SurfaceConfig;
|
||||||
|
|
||||||
|
typedef struct MultiSpacc_SpriteFlags {
|
||||||
|
bool flipHorizontal;
|
||||||
|
bool flipVertical;
|
||||||
|
} MultiSpacc_SpriteFlags;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int *chr;
|
int *chr;
|
||||||
int *x;
|
int *x;
|
||||||
int *y;
|
int *y;
|
||||||
int *flags;
|
MultiSpacc_SpriteFlags *flags;
|
||||||
} MultiSpacc_SpritesMap, MultiSpacc_TilesMap;
|
} MultiSpacc_SpritesMap, MultiSpacc_TilesMap;
|
||||||
|
|
||||||
typedef struct MultiSpacc_MainLoopHandlerArgs {
|
typedef struct MultiSpacc_MainLoopHandlerArgs {
|
||||||
@ -140,11 +145,11 @@ int MultiSpacc_PollEvent( MultiSpacc_Event *Event );
|
|||||||
void MultiSpacc_PrintText( char text[], MultiSpacc_Surface *Surface, MultiSpacc_SurfaceConfig *surfaceConfig, int x, int y, MultiSpacc_Surface *Tiles /*, int FontSize, int Color */ ); // WIP
|
void MultiSpacc_PrintText( char text[], MultiSpacc_Surface *Surface, MultiSpacc_SurfaceConfig *surfaceConfig, int x, int y, MultiSpacc_Surface *Tiles /*, int FontSize, int Color */ ); // WIP
|
||||||
void MultiSpacc_PrintDebug( const char *format, ... );
|
void MultiSpacc_PrintDebug( const char *format, ... );
|
||||||
|
|
||||||
void MultiSpacc_SetSprite( int id, int x, int y, int sprite, MultiSpacc_Surface *tiles, MultiSpacc_Surface *screen );
|
void MultiSpacc_SetSprite( int id, int x, int y, int sprite, MultiSpacc_SpriteFlags *flags, MultiSpacc_Surface *tiles, MultiSpacc_Surface *screen );
|
||||||
void MultiSpacc_SetMetaSprite( int id, int x, int y, MultiSpacc_SpritesMap *map, int mapSize, MultiSpacc_Surface *tiles, MultiSpacc_Surface *screen );
|
void MultiSpacc_SetMetaSprite( int id, int x, int y, MultiSpacc_SpritesMap *map, int mapSize, MultiSpacc_Surface *tiles, MultiSpacc_Surface *screen );
|
||||||
|
|
||||||
void MultiSpacc_SetTile( int x, int y, int tile, MultiSpacc_Surface *tiles, MultiSpacc_Surface *screen );
|
void MultiSpacc_SetTile( int x, int y, int tile, MultiSpacc_Surface *tiles, MultiSpacc_Surface *screen );
|
||||||
// void MultiSpacc_SetMetaTile( );
|
void MultiSpacc_SetMetaTile( int x, int y, MultiSpacc_TilesMap *map, int mapSize, MultiSpacc_Surface *tiles, MultiSpacc_Surface *screen );
|
||||||
|
|
||||||
MultiSpacc_Surface *MultiSpacc_CreateSurface( MultiSpacc_SurfaceConfig *surfaceConfig );
|
MultiSpacc_Surface *MultiSpacc_CreateSurface( MultiSpacc_SurfaceConfig *surfaceConfig );
|
||||||
void MultiSpacc_BlitLayer( MultiSpacc_Surface *source, MultiSpacc_Surface *destination );
|
void MultiSpacc_BlitLayer( MultiSpacc_Surface *source, MultiSpacc_Surface *destination );
|
||||||
|
@ -26,9 +26,15 @@ MultiSpacc_Window *MultiSpacc_SetWindow( MultiSpacc_SurfaceConfig *windowConfig
|
|||||||
{
|
{
|
||||||
#if defined(MultiSpacc_Target_SDLCommon)
|
#if defined(MultiSpacc_Target_SDLCommon)
|
||||||
if( windowConfig->width <= 0 || windowConfig->height <= 0 ){
|
if( windowConfig->width <= 0 || windowConfig->height <= 0 ){
|
||||||
|
#if defined(MultiSpacc_Target_Switch)
|
||||||
|
windowConfig->width = 1280;
|
||||||
|
windowConfig->height = 720;
|
||||||
|
#else
|
||||||
windowConfig->width = 512;
|
windowConfig->width = 512;
|
||||||
windowConfig->height = 480;
|
windowConfig->height = 480;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if( windowConfig->bits <= 0 ){
|
if( windowConfig->bits <= 0 ){
|
||||||
windowConfig->bits = 32;
|
windowConfig->bits = 32;
|
||||||
}
|
}
|
||||||
|
@ -9,7 +9,7 @@ mkdir -p /tmp /opt/Sdk
|
|||||||
|
|
||||||
apt update
|
apt update
|
||||||
apt install -y \
|
apt install -y \
|
||||||
make wine curl wget p7zip-full python3 python3-pil \
|
make wine curl p7zip-full tar xz-utils python3 python3-pil \
|
||||||
gcc mingw-w64 cc65 emscripten \
|
gcc mingw-w64 cc65 emscripten \
|
||||||
libsdl1.2-dev libsdl-image1.2-dev libsdl-ttf2.0-dev libsdl-mixer1.2-dev \
|
libsdl1.2-dev libsdl-image1.2-dev libsdl-ttf2.0-dev libsdl-mixer1.2-dev \
|
||||||
libsdl2-dev libsdl2-image-dev libsdl2-ttf-dev libsdl2-mixer-dev \
|
libsdl2-dev libsdl2-image-dev libsdl2-ttf-dev libsdl2-mixer-dev \
|
||||||
@ -20,6 +20,19 @@ curl -o /tmp/mingw32.7z https://hlb0.octt.eu.org/Drive/Misc/mingw32-9.2.0.7z.sfx
|
|||||||
cp ./mingw32/bin/*.dll ./mingw32/libexec/gcc/mingw32/9.2.0/
|
cp ./mingw32/bin/*.dll ./mingw32/libexec/gcc/mingw32/9.2.0/
|
||||||
mv ./mingw32 /opt/Sdk/mingw32
|
mv ./mingw32 /opt/Sdk/mingw32
|
||||||
|
|
||||||
curl -o /tmp/dkp.sh https://apt.devkitpro.org/install-devkitpro-pacman
|
curl -o /tmp/devkitpro.tar.xz https://hlb0.octt.eu.org/Drive/Misc/devkitpro-SDK-Linux-glibc-amd64.tar.xz
|
||||||
yes | bash /tmp/dkp.sh
|
tar xf /tmp/devkitpro.tar.xz
|
||||||
dkp-pacman -Sy nds-dev
|
mv ./opt/devkitpro /opt/devkitpro
|
||||||
|
|
||||||
|
#curl -o /tmp/dkp.sh https://apt.devkitpro.org/install-devkitpro-pacman
|
||||||
|
#yes | bash /tmp/dkp.sh
|
||||||
|
#dkp-pacman -Sy nds-dev
|
||||||
|
|
||||||
|
cat > .env << [EOF]
|
||||||
|
export DEVKITPRO=/opt/devkitpro
|
||||||
|
export DEVKITA64=/opt/devkitpro/devkitA64
|
||||||
|
export DEVKITARM=/opt/devkitpro/devkitARM
|
||||||
|
export DEVKITPPC=/opt/devkitpro/devkitPPC
|
||||||
|
[EOF]
|
||||||
|
|
||||||
|
. .env
|
||||||
|
Loading…
x
Reference in New Issue
Block a user