mirror of
https://github.com/eried/portapack-mayhem.git
synced 2025-11-14 17:40:40 -05:00
Pacman update (#2837)
This commit is contained in:
parent
7041d507ca
commit
60a5222058
4 changed files with 169 additions and 55 deletions
|
|
@ -23,11 +23,24 @@
|
|||
#include "pacman.hpp"
|
||||
#include <memory>
|
||||
|
||||
void notouch(int, int, uint32_t) {
|
||||
// do nothing
|
||||
}
|
||||
void nothing() {
|
||||
// do nothing
|
||||
}
|
||||
bool noencoder(int32_t) {
|
||||
return false;
|
||||
}
|
||||
bool nokeyboard(uint8_t) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const standalone_application_api_t* _api;
|
||||
|
||||
extern "C" {
|
||||
__attribute__((section(".standalone_application_information"), used)) standalone_application_information_t _standalone_application_information = {
|
||||
/*.header_version = */ 1,
|
||||
/*.header_version = */ 2,
|
||||
|
||||
/*.app_name = */ "Pac-Man",
|
||||
/*.bitmap_data = */ {
|
||||
|
|
@ -70,18 +83,17 @@ __attribute__((section(".standalone_application_information"), used)) standalone
|
|||
/*.initialize_app = */ initialize,
|
||||
/*.on_event = */ on_event,
|
||||
/*.shutdown = */ shutdown,
|
||||
/*PaintViewMirror */ NULL,
|
||||
/*OnTouchEvent */ NULL,
|
||||
/*OnFocus */ NULL,
|
||||
/*OnKeyEvent */ NULL,
|
||||
/*OnEncoder */ NULL,
|
||||
/*OnKeyboard */ NULL};
|
||||
/*PaintViewMirror */ nothing,
|
||||
/*OnTouchEvent */ notouch,
|
||||
/*OnFocus */ nothing,
|
||||
/*OnKeyEvent */ on_key_event,
|
||||
/*OnEncoder */ noencoder,
|
||||
/*OnKeyboard */ nokeyboard};
|
||||
}
|
||||
|
||||
/* Implementing abort() eliminates requirement for _getpid(), _kill(), _exit(). */
|
||||
extern "C" void abort() {
|
||||
while (true)
|
||||
;
|
||||
while (true);
|
||||
}
|
||||
|
||||
// replace memory allocations to use heap from chibios
|
||||
|
|
|
|||
|
|
@ -39,8 +39,36 @@ void initialize(const standalone_application_api_t& api) {
|
|||
_api = &api;
|
||||
}
|
||||
|
||||
bool on_key_event(uint8_t key_val) {
|
||||
ui::KeyEvent key = (ui::KeyEvent)key_val;
|
||||
if (key == ui::KeyEvent::Right) {
|
||||
but_RIGHT = true;
|
||||
but_LEFT = false;
|
||||
but_DOWN = false;
|
||||
but_UP = false;
|
||||
} else if (key == ui::KeyEvent::Left) {
|
||||
but_LEFT = true;
|
||||
but_RIGHT = false;
|
||||
but_DOWN = false;
|
||||
but_UP = false;
|
||||
} else if (key == ui::KeyEvent::Down) {
|
||||
but_DOWN = true;
|
||||
but_RIGHT = false;
|
||||
but_LEFT = false;
|
||||
but_UP = false;
|
||||
} else if (key == ui::KeyEvent::Up) {
|
||||
but_UP = true;
|
||||
but_RIGHT = false;
|
||||
but_LEFT = false;
|
||||
but_DOWN = false;
|
||||
} else if (key == ui::KeyEvent::Select) {
|
||||
but_A = true;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void on_event(const uint32_t& events) {
|
||||
static bool wait_for_button_release{false};
|
||||
// static bool wait_for_button_release{false};
|
||||
|
||||
if (!_playfield) {
|
||||
_playfield = std::make_unique<Playfield>();
|
||||
|
|
@ -48,29 +76,30 @@ void on_event(const uint32_t& events) {
|
|||
}
|
||||
|
||||
if (events & 1) {
|
||||
auto switches_raw = _api->swizzled_switches() & ((1 << (int)Switch::Right) | (1 << (int)Switch::Left) | (1 << (int)Switch::Down) | (1 << (int)Switch::Up) | (1 << (int)Switch::Sel) | (1 << (int)Switch::Dfu));
|
||||
auto switches_debounced = _api->get_switches_state();
|
||||
/*
|
||||
auto switches_raw = _api->swizzled_switches() & ((1 << (int)Switch::Right) | (1 << (int)Switch::Left) | (1 << (int)Switch::Down) | (1 << (int)Switch::Up) | (1 << (int)Switch::Sel) | (1 << (int)Switch::Dfu));
|
||||
auto switches_debounced = _api->get_switches_state();
|
||||
|
||||
// For the Select (Start/Pause) button, wait for release to avoid repeat
|
||||
uint8_t buttons_to_wait_for = (1 << (int)Switch::Sel);
|
||||
if (wait_for_button_release) {
|
||||
if ((switches_debounced & buttons_to_wait_for) == 0)
|
||||
wait_for_button_release = false;
|
||||
switches_debounced &= ~buttons_to_wait_for;
|
||||
} else {
|
||||
if (switches_debounced & buttons_to_wait_for)
|
||||
wait_for_button_release = true;
|
||||
}
|
||||
// For the Select (Start/Pause) button, wait for release to avoid repeat
|
||||
uint8_t buttons_to_wait_for = (1 << (int)Switch::Sel);
|
||||
if (wait_for_button_release) {
|
||||
if ((switches_debounced & buttons_to_wait_for) == 0)
|
||||
wait_for_button_release = false;
|
||||
switches_debounced &= ~buttons_to_wait_for;
|
||||
} else {
|
||||
if (switches_debounced & buttons_to_wait_for)
|
||||
wait_for_button_release = true;
|
||||
}
|
||||
|
||||
// For the directional buttons, use the raw inputs for fastest response time
|
||||
but_RIGHT = (switches_raw & (1 << (int)Switch::Right)) != 0;
|
||||
but_LEFT = (switches_raw & (1 << (int)Switch::Left)) != 0;
|
||||
but_DOWN = (switches_raw & (1 << (int)Switch::Down)) != 0;
|
||||
but_UP = (switches_raw & (1 << (int)Switch::Up)) != 0;
|
||||
|
||||
// For the pause button, use the debounced input to avoid glitches, and OR in the value to make sure that we don't clear it before it's seen
|
||||
but_A |= (switches_debounced & (1 << (int)Switch::Sel)) != 0;
|
||||
// For the directional buttons, use the raw inputs for fastest response time
|
||||
but_RIGHT = (switches_raw & (1 << (int)Switch::Right)) != 0;
|
||||
but_LEFT = (switches_raw & (1 << (int)Switch::Left)) != 0;
|
||||
but_DOWN = (switches_raw & (1 << (int)Switch::Down)) != 0;
|
||||
but_UP = (switches_raw & (1 << (int)Switch::Up)) != 0;
|
||||
|
||||
// For the pause button, use the debounced input to avoid glitches, and OR in the value to make sure that we don't clear it before it's seen
|
||||
but_A |= (switches_debounced & (1 << (int)Switch::Sel)) != 0;
|
||||
*/
|
||||
_playfield->Step();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@
|
|||
|
||||
void initialize(const standalone_application_api_t& api);
|
||||
void on_event(const uint32_t& events);
|
||||
bool on_key_event(uint8_t key_val);
|
||||
void shutdown();
|
||||
|
||||
extern const standalone_application_api_t* _api;
|
||||
|
|
|
|||
|
|
@ -133,39 +133,111 @@ const byte _initSprites[] =
|
|||
// Ghost colors
|
||||
const byte _palette2[] =
|
||||
{
|
||||
0, 11, 1, 15, // BINKY red
|
||||
0, 11, 3, 15, // PINKY pink
|
||||
0, 11, 5, 15, // INKY cyan
|
||||
0, 11, 7, 15, // CLYDE brown
|
||||
0, 11, 9, 9, // PACMAN yellow
|
||||
0, 11, 15, 15, // FRIGHTENED
|
||||
0, 11, 0, 15, // DEADEYES
|
||||
0,
|
||||
11,
|
||||
1,
|
||||
15, // BINKY red
|
||||
0,
|
||||
11,
|
||||
3,
|
||||
15, // PINKY pink
|
||||
0,
|
||||
11,
|
||||
5,
|
||||
15, // INKY cyan
|
||||
0,
|
||||
11,
|
||||
7,
|
||||
15, // CLYDE brown
|
||||
0,
|
||||
11,
|
||||
9,
|
||||
9, // PACMAN yellow
|
||||
0,
|
||||
11,
|
||||
15,
|
||||
15, // FRIGHTENED
|
||||
0,
|
||||
11,
|
||||
0,
|
||||
15, // DEADEYES
|
||||
|
||||
0, 1, 15, 2, // cherry
|
||||
0, 1, 15, 12, // strawberry
|
||||
0, 7, 2, 12, // peach
|
||||
0, 9, 15, 0, // bell
|
||||
0,
|
||||
1,
|
||||
15,
|
||||
2, // cherry
|
||||
0,
|
||||
1,
|
||||
15,
|
||||
12, // strawberry
|
||||
0,
|
||||
7,
|
||||
2,
|
||||
12, // peach
|
||||
0,
|
||||
9,
|
||||
15,
|
||||
0, // bell
|
||||
|
||||
0, 15, 1, 2, // apple
|
||||
0, 12, 15, 5, // grape
|
||||
0, 11, 9, 1, // galaxian
|
||||
0, 5, 15, 15, // key
|
||||
0,
|
||||
15,
|
||||
1,
|
||||
2, // apple
|
||||
0,
|
||||
12,
|
||||
15,
|
||||
5, // grape
|
||||
0,
|
||||
11,
|
||||
9,
|
||||
1, // galaxian
|
||||
0,
|
||||
5,
|
||||
15,
|
||||
15, // key
|
||||
|
||||
};
|
||||
|
||||
const byte _paletteIcon2[] =
|
||||
{
|
||||
0, 9, 9, 9, // PACMAN
|
||||
0,
|
||||
9,
|
||||
9,
|
||||
9, // PACMAN
|
||||
|
||||
0, 2, 15, 1, // cherry
|
||||
0, 12, 15, 1, // strawberry
|
||||
0, 12, 2, 7, // peach
|
||||
0, 0, 15, 9, // bell
|
||||
0,
|
||||
2,
|
||||
15,
|
||||
1, // cherry
|
||||
0,
|
||||
12,
|
||||
15,
|
||||
1, // strawberry
|
||||
0,
|
||||
12,
|
||||
2,
|
||||
7, // peach
|
||||
0,
|
||||
0,
|
||||
15,
|
||||
9, // bell
|
||||
|
||||
0, 2, 15, 1, // apple
|
||||
0, 12, 15, 5, // grape
|
||||
0, 1, 9, 11, // galaxian
|
||||
0, 5, 15, 15, // key
|
||||
0,
|
||||
2,
|
||||
15,
|
||||
1, // apple
|
||||
0,
|
||||
12,
|
||||
15,
|
||||
5, // grape
|
||||
0,
|
||||
1,
|
||||
9,
|
||||
11, // galaxian
|
||||
0,
|
||||
5,
|
||||
15,
|
||||
15, // key
|
||||
};
|
||||
|
||||
#define PACMANICON 1
|
||||
|
|
@ -571,7 +643,7 @@ class Playfield {
|
|||
}
|
||||
#endif
|
||||
|
||||
x += (240 - 224) / 2;
|
||||
x += (*(_api->screen_width) - 224) / 2;
|
||||
y += (320 - 288) / 2 + 8;
|
||||
|
||||
// Should be a direct Graphics call
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue