Moving the Mountain.
[naja.git] / naja / constants.py
index 8506db011dfba64eb11d70fd62b06e01cb8e3469..7dbd9696d67fce27a0ed1d15756e4f2ff6e72dad 100644 (file)
@@ -1,16 +1,24 @@
+import pygame.locals as pgl
+
 from naja.attrdict import AttrDict
 
 
 SCREEN = (800, 600)
 FPS = 40
-FONT = '4x6.pcf'
+FONT = '8x13.pcf'
 FONT_SIZE = 16
-EIGHT_BIT_SCALE = 4
+EIGHT_BIT_SCALE = 2
 
 DEFAULTS = dict(
     debug=False,
     sound=True,
     music=True,
+    # We calculate the default in options.py
+    save_location=None,
+    # Debug flags:
+    initial_bits=None,
+    cheat_enabled=False,
+    game_state=None,
 )
 
 # Sound constants
@@ -22,24 +30,41 @@ DEFAULT_SOUND_VOLUME = 1.0  # sound volume
 DEFAULT_MUSIC_VOLUME = 0.3  # music volume
 
 # Player bits
-BITS = AttrDict({
-    # Direction bits
-    'NORTH': 1,
-    'SOUTH': 2,
-    'EAST': 4,
-    'WEST': 8,
-    # Condition bits
-    'CYAN': 16,
-    'MAGENTA': 32,
-    'YELLOW': 64,
-    'MSB': 128,
-})
-DIRECTION_BITS = AttrDict((k, v) for k, v in BITS.items() if v < 4)
-CONDITION_BITS = AttrDict((k, v) for k, v in BITS.items() if v >= 4)
+DIRECTION_BITS = AttrDict({
+    'NORTH': 0,
+    'SOUTH': 1,
+    'EAST': 2,
+    'WEST': 3,
+})
+CONDITION_BITS = AttrDict({
+    'BLUE': 4,
+    'GREEN': 5,
+    'RED': 6,
+    'MSB': 7,
+})
+BITS = AttrDict()
+BITS.update(DIRECTION_BITS)
+BITS.update(CONDITION_BITS)
+
+# PLAYER MOVES
+MOVES = AttrDict({
+    # Default move
+    'ADJACENT': 0,
+    # Chess moves
+    'KNIGHT': 1,
+    'BISHOP': 2,
+    'CASTLE': 3,
+})
+CHESS_PIECES = AttrDict((k, v) for k, v in MOVES.items() if v > 0)
+
+ROTATION = AttrDict({
+    'CLOCKWISE': 0,
+    'ANTICLOCKWISE': 1,
+})
 
 # Player defaults
 PLAYER_DEFAULTS = AttrDict({
-    'INITIAL_BITS': BITS.NORTH | BITS.SOUTH | BITS.EAST | BITS.WEST,
+    'INITIAL_BITS': 0x0f,
     'INITIAL_POS': (2, 2),
     'MAX_HEALTH': 4,
     'WINS_REQUIRED': 4,
@@ -47,8 +72,93 @@ PLAYER_DEFAULTS = AttrDict({
 
 # Game size constants
 TILE_SIZE = (96, 96)
-LOCK_HEIGHT = 48
+LOCK_HEIGHT = 32
+SMALL_LOCK_HEIGHT = 24
 BOARD_SIZE = (5 * TILE_SIZE[0], 5 * TILE_SIZE[1])
 BIT_SIZE = (5 * TILE_SIZE[0], (SCREEN[1] - 5 * TILE_SIZE[1]) // 2)
 INFO_SIZE = (SCREEN[0] - 5 * TILE_SIZE[0], SCREEN[1])
+INFO_LEFT_PADDING = 18
+INFO_RIGHT_PADDING = 18
 PLAYER_SIZE = (64, 96)
+ACTION_TEXT_OFFSET = 20
+
+# Player States
+ACT = 1
+EXAMINE = 2
+
+KEYS = AttrDict({
+    'UP': (pgl.K_UP, pgl.K_w, pgl.K_COMMA),
+    'DOWN': (pgl.K_DOWN, pgl.K_s, pgl.K_o),
+    'LEFT': (pgl.K_LEFT, pgl.K_a),
+    'RIGHT': (pgl.K_RIGHT, pgl.K_d, pgl.K_e),
+    'NOMOVE': (pgl.K_SPACE,),
+
+    'SELECT': (pgl.K_RETURN, pgl.K_KP_ENTER),
+    'QUIT': (pgl.K_ESCAPE, pgl.K_q),
+    'SWITCH': (pgl.K_TAB,),
+
+    'KONAMI': (
+        pgl.K_UP, pgl.K_DOWN, pgl.K_LEFT, pgl.K_RIGHT, pgl.K_a, pgl.K_b),
+})
+
+KONAMI_CODE = [
+    pgl.K_UP,
+    pgl.K_UP,
+    pgl.K_DOWN,
+    pgl.K_DOWN,
+    pgl.K_LEFT,
+    pgl.K_RIGHT,
+    pgl.K_LEFT,
+    pgl.K_RIGHT,
+    pgl.K_b,
+    pgl.K_a,
+]
+
+PALETTE = AttrDict({
+    'BLACK': (0, 0, 0),
+    'DARK_RED': (108, 41, 64),
+    'DARK_VIOLET': (64, 53, 120),
+    'MAGENTA': (217, 60, 240),
+    'DARK_GREEN': (19, 87, 64),
+    'GREY': (128, 128, 128),
+    'BLUE': (38, 151, 240),
+    'LIGHT_VIOLET': (191, 180, 248),
+    'DARK_OLIVE': (64, 75, 7),
+    'ORANGE': (217, 104, 15),
+    'PINK': (236, 168, 191),
+    'GREEN': (38, 195, 15),
+    'LIGHT_OLIVE': (191, 202, 135),
+    'LIGHT_TURQUOISE': (147, 214, 191),
+    'WHITE': (255, 255, 255),
+})
+
+
+ACTION_GLYPHS = AttrDict({
+    'CLEAR_BITS': 'glyphs/bits_clear.png',
+    'TOGGLE_BITS': 'glyphs/bits_toggle.png',
+    'SET_BITS': 'glyphs/bits_set.png',
+    'CHANGE_BOARD': 'glyphs/board.png',
+    'DAMAGE': 'glyphs/damage.png',
+    'HEAL': 'glyphs/health.png',
+    'MOVEMENT': 'glyphs/move.png',
+    'WINTOKEN': 'glyphs/win.png',
+    'MSB': 'glyphs/msb.png',
+    'NOTHING': 'glyphs/do_nothing.png',
+    'SHIFT_LEFT': 'glyphs/shift_left.png',
+    'SHIFT_RIGHT': 'glyphs/shift_right.png',
+})
+
+TUNES = (
+    'ants.ogg',
+    'python.ogg',
+    'death_on_a_b.ogg',
+    'scape.ogg',
+    'another_beek.ogg',
+)
+
+# Puzzles, because resources can't give us file lists
+PUZZLES = (
+    'chess',
+    'marathon',
+    'belts',
+)