gb_cartridge_custom_event.h 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. #pragma once
  2. typedef enum {
  3. GBCartridgeCustomEventStartscreenUp,
  4. GBCartridgeCustomEventStartscreenDown,
  5. GBCartridgeCustomEventStartscreenLeft,
  6. GBCartridgeCustomEventStartscreenRight,
  7. GBCartridgeCustomEventStartscreenOk,
  8. GBCartridgeCustomEventStartscreenBack,
  9. GBCartridgeCustomEventScene1Up,
  10. GBCartridgeCustomEventScene1Down,
  11. GBCartridgeCustomEventScene1Left,
  12. GBCartridgeCustomEventScene1Right,
  13. GBCartridgeCustomEventScene1Ok,
  14. GBCartridgeCustomEventScene1Back,
  15. GBCartridgeCustomEventScene2Up,
  16. GBCartridgeCustomEventScene2Down,
  17. GBCartridgeCustomEventScene2Left,
  18. GBCartridgeCustomEventScene2Right,
  19. GBCartridgeCustomEventScene2Ok,
  20. GBCartridgeCustomEventScene2Back,
  21. GBCartridgeCustomEventScene3Up,
  22. GBCartridgeCustomEventScene3Down,
  23. GBCartridgeCustomEventScene3Left,
  24. GBCartridgeCustomEventScene3Right,
  25. GBCartridgeCustomEventScene3Ok,
  26. GBCartridgeCustomEventScene3Back,
  27. GBCartridgeCustomEventScene4Up,
  28. GBCartridgeCustomEventScene4Down,
  29. GBCartridgeCustomEventScene4Left,
  30. GBCartridgeCustomEventScene4Right,
  31. GBCartridgeCustomEventScene4Ok,
  32. GBCartridgeCustomEventScene4Back,
  33. GBCartridgeCustomEventScene5Up,
  34. GBCartridgeCustomEventScene5Down,
  35. GBCartridgeCustomEventScene5Left,
  36. GBCartridgeCustomEventScene5Right,
  37. GBCartridgeCustomEventScene5Ok,
  38. GBCartridgeCustomEventScene5Back,
  39. } GBCartridgeCustomEvent;
  40. enum GBCartridgeCustomEventType {
  41. // Reserve first 100 events for button types and indexes, starting from 0
  42. GBCartridgeCustomEventMenuVoid,
  43. GBCartridgeCustomEventMenuSelected,
  44. };
  45. #pragma pack(push, 1)
  46. typedef union {
  47. uint32_t packed_value;
  48. struct {
  49. uint16_t type;
  50. int16_t value;
  51. } content;
  52. } GBCartridgeCustomEventMenu;
  53. #pragma pack(pop)
  54. static inline uint32_t gb_cartridge_custom_menu_event_pack(uint16_t type, int16_t value) {
  55. GBCartridgeCustomEventMenu event = {.content = {.type = type, .value = value}};
  56. return event.packed_value;
  57. }
  58. static inline void
  59. gb_cartridge_custom_menu_event_unpack(uint32_t packed_value, uint16_t* type, int16_t* value) {
  60. GBCartridgeCustomEventMenu event = {.packed_value = packed_value};
  61. if(type) *type = event.content.type;
  62. if(value) *value = event.content.value;
  63. }
  64. static inline uint16_t gb_cartridge_custom_menu_event_get_type(uint32_t packed_value) {
  65. uint16_t type;
  66. gb_cartridge_custom_menu_event_unpack(packed_value, &type, NULL);
  67. return type;
  68. }
  69. static inline int16_t gb_cartridge_custom_menu_event_get_value(uint32_t packed_value) {
  70. int16_t value;
  71. gb_cartridge_custom_menu_event_unpack(packed_value, NULL, &value);
  72. return value;
  73. }