VB Wario Land runs!
This commit is contained in:
parent
9f955be5dc
commit
7ace73c587
|
@ -0,0 +1,65 @@
|
|||
#include <controller.h>
|
||||
|
||||
#define VB_PWR 0x0001
|
||||
#define VB_SGN 0x0002
|
||||
#define VB_A 0x0004
|
||||
#define VB_B 0x0008
|
||||
#define VB_RT 0x0010
|
||||
#define VB_LT 0x0020
|
||||
#define VB_RU 0x0040
|
||||
#define VB_RR 0x0080
|
||||
#define VB_LR 0x0100
|
||||
#define VB_LL 0x0200
|
||||
#define VB_LD 0x0400
|
||||
#define VB_LU 0x0800
|
||||
#define VB_STA 0x1000
|
||||
#define VB_SEL 0x2000
|
||||
#define VB_RL 0x4000
|
||||
#define VB_RD 0x8000
|
||||
|
||||
static uint16_t symToMask(SDL_KeyCode sym) {
|
||||
switch (sym) {
|
||||
default: return 0;
|
||||
case SDLK_a:
|
||||
return VB_SEL;
|
||||
case SDLK_s:
|
||||
return VB_STA;
|
||||
case SDLK_d:
|
||||
return VB_B;
|
||||
case SDLK_f:
|
||||
return VB_A;
|
||||
case SDLK_e:
|
||||
return VB_LT;
|
||||
case SDLK_r:
|
||||
return VB_RT;
|
||||
case SDLK_i:
|
||||
return VB_RU;
|
||||
case SDLK_j:
|
||||
return VB_RL;
|
||||
case SDLK_k:
|
||||
return VB_RD;
|
||||
case SDLK_l:
|
||||
return VB_RR;
|
||||
case SDLK_UP:
|
||||
return VB_LU;
|
||||
case SDLK_LEFT:
|
||||
return VB_LL;
|
||||
case SDLK_DOWN:
|
||||
return VB_LD;
|
||||
case SDLK_RIGHT:
|
||||
return VB_LR;
|
||||
}
|
||||
}
|
||||
|
||||
void ctrlInit(ControllerState *ctrl) {
|
||||
ctrl->keys = VB_SGN;
|
||||
}
|
||||
void ctrlKeyDown(ControllerState *ctrl, SDL_Keycode sym) {
|
||||
ctrl->keys |= symToMask(sym);
|
||||
}
|
||||
void ctrlKeyUp(ControllerState *ctrl, SDL_Keycode sym) {
|
||||
ctrl->keys &= ~symToMask(sym);
|
||||
}
|
||||
uint16_t ctrlKeys(ControllerState *ctrl) {
|
||||
return ctrl->keys;
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
#ifndef SHROOMS_VB_NATIVE_CONTROLLER_
|
||||
#define SHROOMS_VB_NATIVE_CONTROLLER_
|
||||
|
||||
#include <SDL2/SDL.h>
|
||||
#include <stdint.h>
|
||||
|
||||
typedef struct {
|
||||
uint16_t keys;
|
||||
} ControllerState;
|
||||
|
||||
void ctrlInit(ControllerState *ctrl);
|
||||
void ctrlKeyDown(ControllerState *ctrl, SDL_Keycode sym);
|
||||
void ctrlKeyUp(ControllerState *ctrl, SDL_Keycode sym);
|
||||
uint16_t ctrlKeys(ControllerState *ctrl);
|
||||
|
||||
#endif
|
15
game.c
15
game.c
|
@ -1,4 +1,5 @@
|
|||
#include <assets.h>
|
||||
#include <controller.h>
|
||||
#include <game.h>
|
||||
#include <SDL2/SDL.h>
|
||||
#include <stdbool.h>
|
||||
|
@ -43,12 +44,15 @@ int runGame(VB *sim, GraphicsContext *gfx) {
|
|||
uint32_t clocks;
|
||||
SDL_Event event;
|
||||
GameState state;
|
||||
ControllerState ctrl;
|
||||
uint64_t ticks, prevTicks;
|
||||
|
||||
state.gfx = gfx;
|
||||
vbSetUserData(sim, &state);
|
||||
vbSetFrameCallback(sim, &onFrame);
|
||||
|
||||
ctrlInit(&ctrl);
|
||||
|
||||
gfxUpdateLeftEye(gfx, LEFT_EYE_DEFAULT);
|
||||
gfxUpdateRightEye(gfx, RIGHT_EYE_DEFAULT);
|
||||
|
||||
|
@ -57,12 +61,19 @@ int runGame(VB *sim, GraphicsContext *gfx) {
|
|||
prevTicks = tickNs();
|
||||
vbEmulate(sim, &clocks);
|
||||
ticks = tickNs();
|
||||
sleepNanos(((MAX_STEP_CLOCKS - clocks) * 50) - (ticks - prevTicks));
|
||||
|
||||
while (SDL_PollEvent(&event)) {
|
||||
if (event.type == SDL_QUIT) {
|
||||
return 0;
|
||||
}
|
||||
if (event.type == SDL_KEYDOWN) {
|
||||
ctrlKeyDown(&ctrl, event.key.keysym.sym);
|
||||
}
|
||||
sleepNanos(((MAX_STEP_CLOCKS - clocks) * 50) - (ticks - prevTicks));
|
||||
prevTicks = ticks;
|
||||
if (event.type == SDL_KEYUP) {
|
||||
ctrlKeyUp(&ctrl, event.key.keysym.sym);
|
||||
}
|
||||
}
|
||||
vbSetKeys(sim, ctrlKeys(&ctrl));
|
||||
}
|
||||
}
|
||||
|
|
2
makefile
2
makefile
|
@ -11,7 +11,7 @@ else
|
|||
endif
|
||||
|
||||
build:
|
||||
@$(CC) cli.c game.c graphics.c main.c assets/assets.s -I . \
|
||||
@$(CC) cli.c controller.c game.c graphics.c main.c assets/assets.s -I . \
|
||||
$(SHROOMSFLAGS) $(SDL2FLAGS) \
|
||||
-D POSIX_C_SOURCE=199309L \
|
||||
-o shrooms-vb \
|
||||
|
|
|
@ -1 +1 @@
|
|||
Subproject commit 37b9a943384a230b93089b7617d1b3f5344480d7
|
||||
Subproject commit 50903c7513b00cc62cb20a1578e7f6484914a9da
|
Loading…
Reference in New Issue