[pypy-svn] r62583 - pypy/trunk/pypy/lang/gameboy
cami at codespeak.net
cami at codespeak.net
Thu Mar 5 15:31:24 CET 2009
Author: cami
Date: Thu Mar 5 15:31:23 2009
New Revision: 62583
Modified:
pypy/trunk/pypy/lang/gameboy/sound.py
pypy/trunk/pypy/lang/gameboy/video_sprite.py
Log:
compacting draw_pixels_line and conquerred the array bounds ;)
Modified: pypy/trunk/pypy/lang/gameboy/sound.py
==============================================================================
--- pypy/trunk/pypy/lang/gameboy/sound.py (original)
+++ pypy/trunk/pypy/lang/gameboy/sound.py Thu Mar 5 15:31:23 2009
@@ -41,13 +41,13 @@
self.update_envelope_and_volume()
self.update_frequency_and_playback()
- def update_enabled():
+ def update_enabled(self):
pass
- def update_envelope_and_volume():
+ def update_envelope_and_volume(self):
pass
- def update_frequency_and_playback():
+ def update_frequency_and_playback(self):
pass
def get_length(self):
@@ -167,11 +167,11 @@
return
sweep_steps = (self.sample_sweep & 0x07)
if sweep_steps != 0:
- self.update_frequency()
+ self.update_frequency(sweep_steps)
self.sample_sweep_length += (SOUND_CLOCK / 128) * \
((self.sample_sweep >> 4) & 0x07)
- def update_frequency(self):
+ def update_frequency(self, sweep_steps):
frequency = ((self.playback & 0x07) << 8) + self.frequency
if (self.sample_sweep & 0x08) != 0:
frequency -= frequency >> sweep_steps
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 Thu Mar 5 15:31:23 2009
@@ -4,7 +4,20 @@
# -----------------------------------------------------------------------------
class Sprite(object):
+ """
+ 8px
+ +--------+
+ | | Normal Sprite size: 8 x 8px
+ | upper | 8px
+ | |
+ (x,y)------+
+ | | Big Sprite size: 8 x 16px
+ | lower | 8px
+ | |
+ +--------+
+ 8x
+ """
def __init__(self, video):
self.video = video
self.big_size = False
@@ -116,18 +129,6 @@
value += int(self.palette_number) << 4
value += self.rest_attributes_and_flags
return value
-
- def hide_check(self):
- if self.y <= 0 or self.y >= GAMEBOY_SCREEN_WIDTH:
- self.hidden = True
- elif self.x <= 0 or self.x >= GAMEBOY_SCREEN_WIDTH+SPRITE_SIZE:
- self.hidden = True
- else:
- self.hidden = False
- return self.hidden
-
- def get_tile_number(self):
- return self.tile_number
def get_width(self):
return SPRITE_SIZE
@@ -137,41 +138,55 @@
return 2*SPRITE_SIZE
else:
return SPRITE_SIZE
-
- def intersects_current_line(self):
- y = self.current_line_y()
- return y >= 0 and y < self.get_height()
-
- def is_shown_on_current_line(self):
- return not self.hidden and self.intersects_current_line()
-
- def current_line_y(self):
- return (self.video.line_y - self.y) + 2 * SPRITE_SIZE
+
+ def get_tile_number(self):
+ return self.tile_number
def get_tile_address(self):
address = self.get_tile_number()
if self.big_size:
address &= 0xFE
return address
-
+
+ def get_tile_for_current_line(self):
+ lower = self.current_line_y() < SPRITE_SIZE
+ if lower ^ (self.big_size and self.y_flipped):
+ return self.get_tile()
+ else:
+ return self.get_lower_tile()
+
def get_tile(self):
return self.video.get_tile_at(self.get_tile_address())
def get_lower_tile(self):
return self.video.get_tile_at(self.get_tile_address() + 1)
+
+ def hide_check(self):
+ """returns and caches the general visibility of a Sprite.
+ Updates the hidden property. See also intersects_current_line."""
+ if self.y <= 0 or self.y >= GAMEBOY_SCREEN_WIDTH:
+ self.hidden = True
+ elif self.x <= 0 or self.x >= GAMEBOY_SCREEN_WIDTH+SPRITE_SIZE:
+ self.hidden = True
+ else:
+ self.hidden = False
+ return self.hidden
+
+ def intersects_current_line(self):
+ y = self.current_line_y()
+ return y >= 0 and y < self.get_height()
+
+ def is_shown_on_current_line(self):
+ return not self.hidden and self.intersects_current_line()
+
+ def current_line_y(self):
+ return (self.video.line_y - self.y) + 2 * SPRITE_SIZE
def get_draw_y(self):
y = self.current_line_y()
if self.y_flipped:
y = self.get_height() - 1 - y
- return y
-
- def get_tile_for_current_line(self):
- lower = self.current_line_y() < SPRITE_SIZE
- if lower ^ (self.big_size and self.y_flipped):
- return self.get_tile()
- else:
- return self.get_lower_tile()
+ return y
def draw(self, lastx):
self.get_tile_for_current_line().draw_for_sprite(self, self.video.line, lastx)
More information about the Pypy-commit
mailing list