[pypy-svn] r62272 - pypy/trunk/pypy/lang/gameboy
tverwaes at codespeak.net
tverwaes at codespeak.net
Sat Feb 28 18:17:02 CET 2009
Author: tverwaes
Date: Sat Feb 28 18:17:00 2009
New Revision: 62272
Modified:
pypy/trunk/pypy/lang/gameboy/constants.py
pypy/trunk/pypy/lang/gameboy/video.py
pypy/trunk/pypy/lang/gameboy/video_sprite.py
Log:
refactorings. fully moving towards sprites and readability
Modified: pypy/trunk/pypy/lang/gameboy/constants.py
==============================================================================
--- pypy/trunk/pypy/lang/gameboy/constants.py (original)
+++ pypy/trunk/pypy/lang/gameboy/constants.py Sat Feb 28 18:17:00 2009
@@ -10,7 +10,8 @@
GAMEBOY_SCREEN_WIDTH = 160
GAMEBOY_SCREEN_HEIGHT = 144
-SPRITE_SIZE = 8
+SPRITE_SIZE = 8
+SPRITE_BYTES = 4
#___________________________________________________________________________
# CATRIGE TYPES
Modified: pypy/trunk/pypy/lang/gameboy/video.py
==============================================================================
--- pypy/trunk/pypy/lang/gameboy/video.py (original)
+++ pypy/trunk/pypy/lang/gameboy/video.py Sat Feb 28 18:17:00 2009
@@ -569,30 +569,29 @@
def scan_sprites(self):
count = 0
# search active objects
- for offset in range(0, 4*40, 4):
- y = self.get_oam(constants.OAM_ADDR + offset + 0)
- x = self.get_oam(constants.OAM_ADDR + offset + 1)
+ for offset in range(0, SPRITE_BYTES * 40, SPRITE_BYTES):
+ sprite = self.get_sprite(OAM_ADDR + offset)
+ x = sprite.x
+ y = sprite.y
if y <= 0 \
or y >= (SPRITE_SIZE + GAMEBOY_SCREEN_HEIGHT + SPRITE_SIZE) \
or x <= 0 \
or x >= GAMEBOY_SCREEN_WIDTH + SPRITE_SIZE:
continue
- tile = self.get_oam(constants.OAM_ADDR + offset + 2)
- flags = self.get_oam(constants.OAM_ADDR + offset + 3)
- y = self.line_y - y + 2 * SPRITE_SIZE
+ tile = sprite.tile_number
+ y = self.line_y - y + 2 * SPRITE_SIZE
if self.control.big_sprite_size_selected:
# 8x16 tile size
- if y < 0 or y > 15: continue
- # Y flip
- if (flags & 0x40) != 0:
- y = 15 - y
+ tile_size = 15
tile &= 0xFE
else:
# 8x8 tile size
- if y < 0 or y > 7: continue
- # Y flip
- if (flags & 0x40) != 0:
- y = 7 - y
+ tile_size = 7
+ if y < 0 or y > tile_size: continue
+ # Y flip
+ if sprite.y_flipped:
+ y = tile_size - y
+ # TODO: build an object abstraction?
self.objects[count] = (x << 24) + (count << 20) + (flags << 12) + \
(tile << 4) + (y << 1)
count += 1
Modified: pypy/trunk/pypy/lang/gameboy/video_sprite.py
==============================================================================
--- pypy/trunk/pypy/lang/gameboy/video_sprite.py (original)
+++ pypy/trunk/pypy/lang/gameboy/video_sprite.py Sat Feb 28 18:17:00 2009
@@ -29,7 +29,7 @@
def get_data(self):
return [self.y, self.x, self.tile_number, self.get_attributes_and_flags()]
-
+
def set_data(self, byte0=-1, byte1=-1, byte2=-1, byte3=-1):
"""
extracts the sprite data from an oam entry
More information about the Pypy-commit
mailing list