[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