all repos — mgba @ cd3b9cdc6b85948e299756b683f5c08fd7e098f1

mGBA Game Boy Advance Emulator

GBA Video: Fix sprites in modes 3 - 5 when character mapping is disabled
Jeffrey Pfau jeffrey@endrift.com
Tue, 28 Jul 2015 10:03:11 -0700
commit

cd3b9cdc6b85948e299756b683f5c08fd7e098f1

parent

fa7660020f276de6dac05db2d4d3078b741faf93

3 files changed, 4 insertions(+), 2 deletions(-)

jump to
M CHANGESCHANGES

@@ -64,6 +64,7 @@ - Qt: Fix window being too tall after exiting fullscreen

- Qt: Fix a missing va_end call in the log handler lambda within the GameController constructor - GBA Cheats: Fix Pro Action Replay and GameShark issues when used together - Qt: Fix analog buttons not getting unmapped + - GBA Video: Fix sprites in modes 3 - 5 when character mapping is disabled Misc: - Qt: Handle saving input settings better - Debugger: Free watchpoints in addition to breakpoints
M src/gba/renderers/software-obj.csrc/gba/renderers/software-obj.c

@@ -114,7 +114,7 @@ flags |= FLAG_TARGET_1 * ((GBAWindowControlIsBlendEnable(renderer->currentWindow.packed) && renderer->target1Obj && renderer->blendEffect == BLEND_ALPHA) || GBAObjAttributesAGetMode(sprite->a) == OBJ_MODE_SEMITRANSPARENT);

flags |= FLAG_OBJWIN * (GBAObjAttributesAGetMode(sprite->a) == OBJ_MODE_OBJWIN); int32_t x = GBAObjAttributesBGetX(sprite->b) << 23; x >>= 23; - uint16_t* vramBase = &renderer->d.vram[BASE_TILE >> 1]; + uint16_t* vramBase = &renderer->d.vram[(GBARegisterDISPCNTGetMode(renderer->dispcnt) < 3 || GBARegisterDISPCNTIsObjCharacterMapping(renderer->dispcnt) ? BASE_TILE : BASE_TILE_BITMAP) >> 1]; unsigned charBase = GBAObjAttributesCGetTile(sprite->c) * 0x20; int variant = renderer->target1Obj && GBAWindowControlIsBlendEnable(renderer->currentWindow.packed) && (renderer->blendEffect == BLEND_BRIGHTEN || renderer->blendEffect == BLEND_DARKEN); if (GBAObjAttributesAGetMode(sprite->a) == OBJ_MODE_SEMITRANSPARENT) {
M src/gba/video.hsrc/gba/video.h

@@ -40,7 +40,8 @@ VIDEO_TOTAL_LENGTH = VIDEO_HORIZONTAL_LENGTH * VIDEO_VERTICAL_TOTAL_PIXELS,

REG_DISPSTAT_MASK = 0xFF38, - BASE_TILE = 0x00010000 + BASE_TILE = 0x00010000, + BASE_TILE_BITMAP = 0x00014000 }; enum ObjMode {