Skip to content

Commit

Permalink
Merge branch 'fix-hero-clipping'
Browse files Browse the repository at this point in the history
  • Loading branch information
dan-rodrigues committed Oct 31, 2020
2 parents 1286a30 + ca235b8 commit 9707833
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 6 deletions.
10 changes: 8 additions & 2 deletions hero/hero_drawing.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
#include "vram_layout.h"
#include "palette_buffer.h"
#include "hero_frames.h"
#include "sprite_drawing.h"

void hero_draw(Hero *hero, int16_t sprite_tile, const Camera *camera) {
bool should_update_palette = (
Expand Down Expand Up @@ -72,11 +73,16 @@ void hero_draw(Hero *hero, int16_t sprite_tile, const Camera *camera) {

// Sprite metadata

uint32_t x_block = tile_x;
int32_t x_block = tile_x;
int32_t y_block = tile_y + layout.offset.y;

if (!sa_draw_needed(tile_x, tile_y, 32)) {
continue;
}

x_block &= 0x3ff;
x_block |= (x_flip ? SPRITE_X_FLIP : 0);

uint32_t y_block = tile_y + layout.offset.y;
y_block &= 0x1ff;
y_block |= SPRITE_16_TALL | SPRITE_16_WIDE;

Expand Down
6 changes: 2 additions & 4 deletions sprites/sprite_drawing.c
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,6 @@
#include "vdp.h"
#include "sprite_buffer.h"

static bool onscreen(int32_t screen_x, int32_t screen_y, int32_t padding);

static void sa_draw_standard_8x8_impl(const SpritePosition *position,
SpriteDirection direction,
const SpriteEnvironment *env,
Expand Down Expand Up @@ -153,7 +151,7 @@ static void sa_draw_standard_impl(const SpritePosition *position,
uint32_t y = position->y - env->camera->scroll.y + params->offset_y;

int32_t screen_padding = 32;
if (!onscreen(x, y, screen_padding)) {
if (!sa_draw_needed(x, y, screen_padding)) {
return;
}

Expand All @@ -178,7 +176,7 @@ static void sa_draw_standard_impl(const SpritePosition *position,
}
}

static bool onscreen(int32_t screen_x, int32_t screen_y, int32_t padding) {
bool sa_draw_needed(int32_t screen_x, int32_t screen_y, int32_t padding) {
return
(screen_x + padding >= 0) &&
(screen_x - padding < SCREEN_ACTIVE_WIDTH) &&
Expand Down
2 changes: 2 additions & 0 deletions sprites/sprite_drawing.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,4 +34,6 @@ void sa_draw_standard_light(const SpriteActorLight *self, const SpriteEnvironmen
void sa_draw_standard_multiple(const SpriteActor *self, const SpriteEnvironment *env, const SpriteDrawParams *params, size_t count);
void sa_draw_standard_light_multiple(const SpriteActorLight *self, const SpriteEnvironment *env, const SpriteDrawParams *params, size_t count);

bool sa_draw_needed(int32_t screen_x, int32_t screen_y, int32_t padding);

#endif /* sprite_drawing_h */

0 comments on commit 9707833

Please sign in to comment.