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:
|
||||
stage: build
|
||||
script: |
|
||||
make -j($nproc --all)
|
||||
. .env
|
||||
make -j$(nproc --all)
|
||||
rules:
|
||||
- if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH
|
||||
|
Binary file not shown.
@ -13,23 +13,21 @@ typedef struct MainArgs {
|
||||
MultiSpacc_Surface *background;
|
||||
//MultiSpacc_Surface *Foreground;
|
||||
MultiSpacc_Surface *tilesImg;
|
||||
MultiSpacc_KeysStates *buttonsStates;
|
||||
} MainArgs;
|
||||
|
||||
/*{pal:"nes",layout:"nes"}*/
|
||||
const char palette[32] = {
|
||||
0x0F, // screen
|
||||
0x11,0x02,0x02,0x00, // background 0
|
||||
0x00,0x00,0x00,0x00, // background 1
|
||||
0x00,0x00,0x00,0x00, // background 2
|
||||
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 2
|
||||
0x00,0x00,0x00, // sprite 3
|
||||
};
|
||||
|
||||
Uint32 nextTick;
|
||||
|
||||
bool MainLoop( void *args )
|
||||
{
|
||||
MainArgs *margs = (MainArgs*)args;
|
||||
@ -37,7 +35,7 @@ bool MainLoop( void *args )
|
||||
//SDL_FillRect(margs->background, NULL, 0x00F);
|
||||
MultiSpacc_BlitLayer( margs->background, margs->screen );
|
||||
//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);
|
||||
|
||||
margs->spriteX += margs->accelX;
|
||||
@ -52,8 +50,10 @@ bool MainLoop( void *args )
|
||||
margs->accelY *= -1;
|
||||
}
|
||||
|
||||
MultiSpacc_PollButtons( 0, margs->buttonsStates );
|
||||
|
||||
/* TODO: listen for OS terminate signal */
|
||||
if( MultiSpacc_CheckKey( MultiSpacc_Key_Pause, 0 ) )
|
||||
if( MultiSpacc_CheckKeyPress( MultiSpacc_Key_Pause, margs->buttonsStates ) )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
@ -77,14 +77,15 @@ int main( int argc, char *argv[] )
|
||||
{
|
||||
MainArgs margs = {0};
|
||||
MultiSpacc_SurfaceConfig windowConfig = {0};
|
||||
MultiSpacc_KeysStates buttonsStates = {0};
|
||||
|
||||
margs.windowConfig = &windowConfig;
|
||||
margs.buttonsStates = &buttonsStates;
|
||||
margs.accelX = +2;
|
||||
margs.accelY = +2;
|
||||
|
||||
windowConfig.width = 320;
|
||||
windowConfig.height = 240;
|
||||
//windowConfig.bits = 16;
|
||||
memcpy( windowConfig.palette, palette, 32 );
|
||||
|
||||
//romfsInit();
|
||||
|
@ -9,6 +9,7 @@ All all:
|
||||
"Target=WindowsPC MultiSpacc_Target=SDL20" \
|
||||
"Target=Windows9x" \
|
||||
"Target=Web" \
|
||||
"Target=Switch" \
|
||||
"Target=NDS" \
|
||||
"Target=NES" \
|
||||
; do \
|
||||
|
@ -20,13 +20,14 @@ signed char paddleDxMove = 0;
|
||||
|
||||
//char scoreChar[6];
|
||||
|
||||
MultiSpacc_KeysStates buttonsStates;
|
||||
MultiSpacc_SurfaceConfig windowConfig = {0};
|
||||
MultiSpacc_Window *window;
|
||||
MultiSpacc_Surface *screen;
|
||||
MultiSpacc_Surface *background;
|
||||
MultiSpacc_Surface *tilesImg;
|
||||
|
||||
MultiSpacc_SpritesMap paddleSpriteMap;
|
||||
MultiSpacc_SpritesMap paddleSxSpriteMap, paddleDxSpriteMap;
|
||||
MultiSpacc_TilesMap divisorTileMap, borderTileMap;
|
||||
|
||||
#define BallSize 8
|
||||
@ -36,8 +37,9 @@ MultiSpacc_TilesMap divisorTileMap, borderTileMap;
|
||||
|
||||
#define BallTile 128
|
||||
#define PaddleTile 129
|
||||
#define DivisorTile 130
|
||||
#define BorderTile 131
|
||||
#define BorderTile 130
|
||||
#define DivisorTileSx 131
|
||||
#define DivisorTileDx 132
|
||||
|
||||
#define BallSprite 0
|
||||
#define PaddleSxSprite 1
|
||||
@ -54,15 +56,15 @@ MultiSpacc_TilesMap divisorTileMap, borderTileMap;
|
||||
// TODO: more defines for frequently-used expressions
|
||||
|
||||
const char palette[32] = {
|
||||
0x0F, // screen
|
||||
0x11,0x30,0x27,0x00, // background 0
|
||||
0x1c,0x20,0x2c,0x00, // background 1
|
||||
0x00,0x10,0x20,0x00, // background 2
|
||||
0x06,0x16,0x26,0x00, // background 3
|
||||
0x16,0x35,0x24,0x00, // sprite 0
|
||||
0x00,0x37,0x25,0x00, // sprite 1
|
||||
0x0d,0x2d,0x3a,0x00, // sprite 2
|
||||
0x0d,0x27,0x2a, // sprite 3
|
||||
0x1B, // screen
|
||||
0x30,0x20,0x20,0x20, // background 0
|
||||
0x00,0x00,0x00,0x00, // background 1
|
||||
0x00,0x00,0x00,0x00, // background 2
|
||||
0x00,0x00,0x00,0x00, // background 3
|
||||
0x30,0x20,0x20,0x20, // sprite 0
|
||||
0x00,0x00,0x00,0x00, // sprite 1
|
||||
0x00,0x00,0x00,0x00, // sprite 2
|
||||
0x00,0x00,0x00, // sprite 3
|
||||
};
|
||||
|
||||
void ResetBall(void)
|
||||
@ -163,11 +165,11 @@ void UpdateCpuPlayer(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;
|
||||
}
|
||||
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;
|
||||
}
|
||||
@ -193,8 +195,8 @@ bool DisplayBorders(void)
|
||||
|
||||
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 - 1, i, DivisorTile, tilesImg, background );
|
||||
MultiSpacc_SetTile( windowConfig.width/8/2 , i, DivisorTileDx, tilesImg, background );
|
||||
MultiSpacc_SetTile( windowConfig.width/8/2 - 1, i, DivisorTileSx, tilesImg, background );
|
||||
}
|
||||
|
||||
for( i=0; i<windowConfig.width/8; i++ )
|
||||
@ -206,18 +208,20 @@ bool DisplayBorders(void)
|
||||
|
||||
bool RealUpdate( void *args, double deltaTime )
|
||||
{
|
||||
MultiSpacc_PollButtons( 0, &buttonsStates );
|
||||
|
||||
if(!paused)
|
||||
{
|
||||
//SDL_FillRect( background, &background->clip_rect, SDL_MapRGB( background->format, 0, 0, 0 ) );
|
||||
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 PaddleSxYDisplay (paddleSxY + paddleSxMove*PaddleAccelDelta)
|
||||
#define PaddleDxYDisplay (paddleDxY + paddleDxMove*PaddleAccelDelta)
|
||||
MultiSpacc_SetMetaSprite( PaddleSxSprite, PaddleSxX, PaddleSxYDisplay, &paddleSpriteMap, PaddleHeightTl, tilesImg, screen );
|
||||
MultiSpacc_SetMetaSprite( PaddleDxSprite, PaddleDxX, PaddleDxYDisplay, &paddleSpriteMap, PaddleHeightTl, tilesImg, screen );
|
||||
MultiSpacc_SetMetaSprite( PaddleSxSprite, PaddleSxX, PaddleSxYDisplay, &paddleSxSpriteMap, PaddleHeightTl, tilesImg, screen );
|
||||
MultiSpacc_SetMetaSprite( PaddleDxSprite, PaddleDxX, PaddleDxYDisplay, &paddleDxSpriteMap, PaddleHeightTl, tilesImg, screen );
|
||||
|
||||
//RefreshScore():
|
||||
//itoa(scoreSx, scoreChar, 10);
|
||||
@ -231,7 +235,7 @@ bool RealUpdate( void *args, double deltaTime )
|
||||
// TODO: listen for OS terminate signal
|
||||
// TODO: fix SDL not waiting for key release with inputs checked this way
|
||||
// TODO: proper pause menu?
|
||||
if( MultiSpacc_CheckKey( MultiSpacc_Key_Pause, 0 ) )
|
||||
if( MultiSpacc_CheckKeyPress( MultiSpacc_Key_Pause, &buttonsStates ) )
|
||||
{
|
||||
if(!paused)
|
||||
{
|
||||
@ -257,17 +261,25 @@ bool RealUpdate( void *args, double deltaTime )
|
||||
int main( int argc, char *argv[] )
|
||||
{
|
||||
int i;
|
||||
int chr[] = { PaddleTile, PaddleTile, PaddleTile, PaddleTile };
|
||||
int x[] = { 0, 0, 0, 0 };
|
||||
int y[] = { 0, 8, 16, 24 };
|
||||
|
||||
paddleSpriteMap.chr = chr;
|
||||
paddleSpriteMap.x = x;
|
||||
paddleSpriteMap.y = y;
|
||||
int x[PaddleHeightTl] = { 0, 0, 0, 0 };
|
||||
int y[PaddleHeightTl] = { 0, 8, 16, 24 };
|
||||
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.height = 240;
|
||||
windowConfig.bits = 16;
|
||||
memcpy( windowConfig.palette, palette, 32 );
|
||||
|
||||
window = MultiSpacc_SetWindow( &windowConfig );
|
||||
|
@ -1,33 +1,92 @@
|
||||
#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)
|
||||
int numkeys;
|
||||
|
||||
SDL_PumpEvents();
|
||||
|
||||
#if defined(MultiSpacc_Target_SDL12)
|
||||
Uint8 *keys;
|
||||
SDL_PumpEvents();
|
||||
keys = SDL_GetKeyState(NULL);
|
||||
keysStates->keysHeld = SDL_GetKeyState(&numkeys);
|
||||
#elif defined(MultiSpacc_Target_SDL20)
|
||||
const Uint8 *keys;
|
||||
SDL_PumpEvents();
|
||||
keys = SDL_GetKeyboardState(NULL);
|
||||
keysStates->keysHeld = SDL_GetKeyboardState(&numkeys);
|
||||
#endif
|
||||
return keys[key];
|
||||
// SDL_Event event;
|
||||
// while( SDL_PollEvent(&event) ) // TODO: fix this, it eliminates all events beside the first
|
||||
// {
|
||||
// if ( event.type == SDL_KEYDOWN && event.key.keysym.sym == key )
|
||||
// {
|
||||
// return true;
|
||||
// }
|
||||
// }
|
||||
// return false;
|
||||
|
||||
if( keysStates->keysPressed == NULL )
|
||||
{
|
||||
keysStates->keysPressed = malloc( numkeys*sizeof(int) );
|
||||
memset( (void*)keysStates->keysPressed, false, numkeys*sizeof(int) );
|
||||
}
|
||||
|
||||
#elif defined(MultiSpacc_Target_NDS)
|
||||
int keys;
|
||||
scanKeys();
|
||||
keys = keysDown();
|
||||
return ( keys & key );
|
||||
keysStates->keysPressed = keysDown();
|
||||
keysStates->keysHeld = keysStates->keysPressed;
|
||||
|
||||
#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
|
||||
}
|
||||
|
@ -5,6 +5,22 @@
|
||||
extern "C" {
|
||||
#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)
|
||||
#define JOY_A 0
|
||||
#define JOY_B 1
|
||||
@ -45,8 +61,7 @@ extern "C" {
|
||||
|
||||
// Pause
|
||||
#if defined(MultiSpacc_Target_SDLCommon) && (defined(MultiSpacc_Target_PC) || defined(MultiSpacc_Target_Web))
|
||||
//#define MultiSpacc_Key_Pause SDLK_ESCAPE
|
||||
#define MultiSpacc_Key_Pause SDL_SCANCODE_ESCAPE
|
||||
#define MultiSpacc_Key_Pause MultiSpacc_SDLK_ESCAPE
|
||||
#elif defined(MultiSpacc_Target_SDLCommon) && defined(MultiSpacc_Target_Switch)
|
||||
#define MultiSpacc_Key_Pause JOY_PLUS
|
||||
#elif defined(MultiSpacc_Target_NDS)
|
||||
@ -57,8 +72,7 @@ extern "C" {
|
||||
|
||||
// Select
|
||||
#if defined(MultiSpacc_Target_SDLCommon) && (defined(MultiSpacc_Target_PC) || defined(MultiSpacc_Target_Web))
|
||||
// #define MultiSpacc_Key_Select SDLK_TAB
|
||||
#define MultiSpacc_Key_Select SDL_SCANCODE_TAB
|
||||
#define MultiSpacc_Key_Select MultiSpacc_SDLK_TAB
|
||||
#elif defined(MultiSpacc_Target_NDS)
|
||||
#define MultiSpacc_Key_Select KEY_SELECT
|
||||
#elif defined(MultiSpacc_Target_NES)
|
||||
@ -67,14 +81,10 @@ extern "C" {
|
||||
|
||||
// Directions
|
||||
#if defined(MultiSpacc_Target_SDLCommon) && (defined(MultiSpacc_Target_PC) || defined(MultiSpacc_Target_Web))
|
||||
// #define MultiSpacc_Key_Up SDLK_UP
|
||||
// #define MultiSpacc_Key_Down SDLK_DOWN
|
||||
// #define MultiSpacc_Key_Left SDLK_LEFT
|
||||
// #define MultiSpacc_Key_Right 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
|
||||
#define MultiSpacc_Key_Up MultiSpacc_SDLK_UP
|
||||
#define MultiSpacc_Key_Down MultiSpacc_SDLK_DOWN
|
||||
#define MultiSpacc_Key_Left MultiSpacc_SDLK_LEFT
|
||||
#define MultiSpacc_Key_Right MultiSpacc_SDLK_RIGHT
|
||||
#elif defined(MultiSpacc_Target_NDS)
|
||||
// ...
|
||||
#elif defined(MultiSpacc_Target_NES)
|
||||
@ -91,7 +101,32 @@ extern "C" {
|
||||
// #define MultiSpacc_Key_Cancel ESC
|
||||
#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
|
||||
}
|
||||
|
@ -97,7 +97,7 @@ int MultiSpacc_SetColorKey( MultiSpacc_Surface *Surface, bool Flag, Uint32 Key )
|
||||
}
|
||||
#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)
|
||||
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 );
|
||||
|
||||
#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
|
||||
}
|
||||
@ -120,7 +120,7 @@ void MultiSpacc_SetMetaSprite( int id, int x, int y, MultiSpacc_SpritesMap *map,
|
||||
int 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 );
|
||||
|
||||
#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();
|
||||
vram_adr(NTADR_A( x, y ));
|
||||
vram_put(tile);
|
||||
@ -149,6 +148,29 @@ void MultiSpacc_SetTile( int x, int y, int tile, MultiSpacc_Surface *tiles, Mult
|
||||
#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 )
|
||||
{
|
||||
#if defined(MultiSpacc_Target_SDLCommon)
|
||||
|
@ -107,11 +107,16 @@ typedef struct MultiSpacc_SurfaceConfig {
|
||||
Uint32 flags;
|
||||
} MultiSpacc_SurfaceConfig;
|
||||
|
||||
typedef struct MultiSpacc_SpriteFlags {
|
||||
bool flipHorizontal;
|
||||
bool flipVertical;
|
||||
} MultiSpacc_SpriteFlags;
|
||||
|
||||
typedef struct {
|
||||
int *chr;
|
||||
int *x;
|
||||
int *y;
|
||||
int *flags;
|
||||
MultiSpacc_SpriteFlags *flags;
|
||||
} MultiSpacc_SpritesMap, MultiSpacc_TilesMap;
|
||||
|
||||
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_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_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 );
|
||||
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( windowConfig->width <= 0 || windowConfig->height <= 0 ){
|
||||
#if defined(MultiSpacc_Target_Switch)
|
||||
windowConfig->width = 1280;
|
||||
windowConfig->height = 720;
|
||||
#else
|
||||
windowConfig->width = 512;
|
||||
windowConfig->height = 480;
|
||||
#endif
|
||||
}
|
||||
|
||||
if( windowConfig->bits <= 0 ){
|
||||
windowConfig->bits = 32;
|
||||
}
|
||||
|
@ -9,7 +9,7 @@ mkdir -p /tmp /opt/Sdk
|
||||
|
||||
apt update
|
||||
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 \
|
||||
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 \
|
||||
@ -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/
|
||||
mv ./mingw32 /opt/Sdk/mingw32
|
||||
|
||||
curl -o /tmp/dkp.sh https://apt.devkitpro.org/install-devkitpro-pacman
|
||||
yes | bash /tmp/dkp.sh
|
||||
dkp-pacman -Sy nds-dev
|
||||
curl -o /tmp/devkitpro.tar.xz https://hlb0.octt.eu.org/Drive/Misc/devkitpro-SDK-Linux-glibc-amd64.tar.xz
|
||||
tar xf /tmp/devkitpro.tar.xz
|
||||
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