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 <assets.h>
|
||||||
|
#include <controller.h>
|
||||||
#include <game.h>
|
#include <game.h>
|
||||||
#include <SDL2/SDL.h>
|
#include <SDL2/SDL.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
@ -43,12 +44,15 @@ int runGame(VB *sim, GraphicsContext *gfx) {
|
||||||
uint32_t clocks;
|
uint32_t clocks;
|
||||||
SDL_Event event;
|
SDL_Event event;
|
||||||
GameState state;
|
GameState state;
|
||||||
|
ControllerState ctrl;
|
||||||
uint64_t ticks, prevTicks;
|
uint64_t ticks, prevTicks;
|
||||||
|
|
||||||
state.gfx = gfx;
|
state.gfx = gfx;
|
||||||
vbSetUserData(sim, &state);
|
vbSetUserData(sim, &state);
|
||||||
vbSetFrameCallback(sim, &onFrame);
|
vbSetFrameCallback(sim, &onFrame);
|
||||||
|
|
||||||
|
ctrlInit(&ctrl);
|
||||||
|
|
||||||
gfxUpdateLeftEye(gfx, LEFT_EYE_DEFAULT);
|
gfxUpdateLeftEye(gfx, LEFT_EYE_DEFAULT);
|
||||||
gfxUpdateRightEye(gfx, RIGHT_EYE_DEFAULT);
|
gfxUpdateRightEye(gfx, RIGHT_EYE_DEFAULT);
|
||||||
|
|
||||||
|
@ -57,12 +61,19 @@ int runGame(VB *sim, GraphicsContext *gfx) {
|
||||||
prevTicks = tickNs();
|
prevTicks = tickNs();
|
||||||
vbEmulate(sim, &clocks);
|
vbEmulate(sim, &clocks);
|
||||||
ticks = tickNs();
|
ticks = tickNs();
|
||||||
|
sleepNanos(((MAX_STEP_CLOCKS - clocks) * 50) - (ticks - prevTicks));
|
||||||
|
|
||||||
while (SDL_PollEvent(&event)) {
|
while (SDL_PollEvent(&event)) {
|
||||||
if (event.type == SDL_QUIT) {
|
if (event.type == SDL_QUIT) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
if (event.type == SDL_KEYDOWN) {
|
||||||
|
ctrlKeyDown(&ctrl, event.key.keysym.sym);
|
||||||
|
}
|
||||||
|
if (event.type == SDL_KEYUP) {
|
||||||
|
ctrlKeyUp(&ctrl, event.key.keysym.sym);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
sleepNanos(((MAX_STEP_CLOCKS - clocks) * 50) - (ticks - prevTicks));
|
vbSetKeys(sim, ctrlKeys(&ctrl));
|
||||||
prevTicks = ticks;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
2
makefile
2
makefile
|
@ -11,7 +11,7 @@ else
|
||||||
endif
|
endif
|
||||||
|
|
||||||
build:
|
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) \
|
$(SHROOMSFLAGS) $(SDL2FLAGS) \
|
||||||
-D POSIX_C_SOURCE=199309L \
|
-D POSIX_C_SOURCE=199309L \
|
||||||
-o shrooms-vb \
|
-o shrooms-vb \
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit 37b9a943384a230b93089b7617d1b3f5344480d7
|
Subproject commit 50903c7513b00cc62cb20a1578e7f6484914a9da
|
Loading…
Reference in New Issue