|
@@ -45,7 +45,7 @@ void spr_init_pal(void) NONBANKED {
|
45
|
45
|
SWITCH_ROM(metasprites[i].bank);
|
46
|
46
|
}
|
47
|
47
|
|
48
|
|
- if ((metasprites[i].pa != NULL) && (!(metasprites[i].pa_i & 0xF0))) {
|
|
48
|
+ if ((metasprites[i].pa != NULL) && ((metasprites[i].pa_i & PALETTE_ALL_FLAGS) == PALETTE_PRELOAD)) {
|
49
|
49
|
set_sprite_palette(metasprites[i].pa_i, metasprites[i].pa_n, metasprites[i].pa);
|
50
|
50
|
}
|
51
|
51
|
}
|
|
@@ -60,21 +60,29 @@ void spr_draw(enum SPRITES sprite, enum SPRITE_FLIP flip,
|
60
|
60
|
frame = 0;
|
61
|
61
|
}
|
62
|
62
|
|
63
|
|
- if (metasprites[sprite].pa_i & PALETTE_DYNAMIC_LOAD) {
|
|
63
|
+ uint8_t pa_off = 0;
|
|
64
|
+
|
|
65
|
+ if ((metasprites[sprite].pa_i & PALETTE_ALL_FLAGS) == PALETTE_DYNAMIC_LOAD) {
|
64
|
66
|
uint8_t pa_i = frame;
|
65
|
67
|
if (pa_i >= metasprites[sprite].pa_n) {
|
66
|
68
|
pa_i = 0;
|
67
|
69
|
}
|
68
|
70
|
|
69
|
|
- // used for explosion. just overwrite our fist four palettes. we dont need them at the end of the game.
|
70
|
|
- set_sprite_palette((metasprites[sprite].pa_i & PALETTE_NO_FLAGS) + pa_i, 1, metasprites[sprite].pa + (pa_i * 1));
|
|
71
|
+ set_sprite_palette((metasprites[sprite].pa_i & PALETTE_NO_FLAGS) + pa_i, 1, metasprites[sprite].pa + (pa_i * 4));
|
|
72
|
+ } else if ((metasprites[sprite].pa_i & PALETTE_ALL_FLAGS) == PALETTE_DYNAMIC_LOAD_IP) {
|
|
73
|
+ pa_off = frame;
|
|
74
|
+ if (pa_off >= metasprites[sprite].pa_n) {
|
|
75
|
+ pa_off = 0;
|
|
76
|
+ }
|
|
77
|
+
|
|
78
|
+ set_sprite_palette((metasprites[sprite].pa_i & PALETTE_NO_FLAGS), 1, metasprites[sprite].pa + (pa_off * 4));
|
71
|
79
|
}
|
72
|
80
|
|
73
|
81
|
switch (flip) {
|
74
|
82
|
case FLIP_Y:
|
75
|
83
|
*hiwater += move_metasprite_flipy(
|
76
|
84
|
metasprites[sprite].ms[frame], metasprites[sprite].off,
|
77
|
|
- metasprites[sprite].pa_i & PALETTE_NO_FLAGS, *hiwater,
|
|
85
|
+ (metasprites[sprite].pa_i - pa_off) & PALETTE_NO_FLAGS, *hiwater,
|
78
|
86
|
DEVICE_SPRITE_PX_OFFSET_X + (DEVICE_SCREEN_PX_WIDTH / 2) + x_off,
|
79
|
87
|
DEVICE_SPRITE_PX_OFFSET_Y + (DEVICE_SCREEN_PX_HEIGHT / 2) + y_off);
|
80
|
88
|
break;
|
|
@@ -82,7 +90,7 @@ void spr_draw(enum SPRITES sprite, enum SPRITE_FLIP flip,
|
82
|
90
|
case FLIP_XY:
|
83
|
91
|
*hiwater += move_metasprite_flipxy(
|
84
|
92
|
metasprites[sprite].ms[frame], metasprites[sprite].off,
|
85
|
|
- metasprites[sprite].pa_i & PALETTE_NO_FLAGS, *hiwater,
|
|
93
|
+ (metasprites[sprite].pa_i - pa_off) & PALETTE_NO_FLAGS, *hiwater,
|
86
|
94
|
DEVICE_SPRITE_PX_OFFSET_X + (DEVICE_SCREEN_PX_WIDTH / 2) + x_off,
|
87
|
95
|
DEVICE_SPRITE_PX_OFFSET_Y + (DEVICE_SCREEN_PX_HEIGHT / 2) + y_off);
|
88
|
96
|
break;
|
|
@@ -90,7 +98,7 @@ void spr_draw(enum SPRITES sprite, enum SPRITE_FLIP flip,
|
90
|
98
|
case FLIP_X:
|
91
|
99
|
*hiwater += move_metasprite_flipx(
|
92
|
100
|
metasprites[sprite].ms[frame], metasprites[sprite].off,
|
93
|
|
- metasprites[sprite].pa_i & PALETTE_NO_FLAGS, *hiwater,
|
|
101
|
+ (metasprites[sprite].pa_i - pa_off) & PALETTE_NO_FLAGS, *hiwater,
|
94
|
102
|
DEVICE_SPRITE_PX_OFFSET_X + (DEVICE_SCREEN_PX_WIDTH / 2) + x_off,
|
95
|
103
|
DEVICE_SPRITE_PX_OFFSET_Y + (DEVICE_SCREEN_PX_HEIGHT / 2) + y_off);
|
96
|
104
|
break;
|
|
@@ -99,7 +107,7 @@ void spr_draw(enum SPRITES sprite, enum SPRITE_FLIP flip,
|
99
|
107
|
default:
|
100
|
108
|
*hiwater += move_metasprite_ex(
|
101
|
109
|
metasprites[sprite].ms[frame], metasprites[sprite].off,
|
102
|
|
- metasprites[sprite].pa_i & PALETTE_NO_FLAGS, *hiwater,
|
|
110
|
+ (metasprites[sprite].pa_i - pa_off) & PALETTE_NO_FLAGS, *hiwater,
|
103
|
111
|
DEVICE_SPRITE_PX_OFFSET_X + (DEVICE_SCREEN_PX_WIDTH / 2) + x_off,
|
104
|
112
|
DEVICE_SPRITE_PX_OFFSET_Y + (DEVICE_SCREEN_PX_HEIGHT / 2) + y_off);
|
105
|
113
|
break;
|