epic tutorial bikeshedding
[naja.git] / naja / constants.py
1 import pygame.locals as pgl
2
3 from naja.attrdict import AttrDict
4
5
6 SCREEN = (800, 600)
7 FPS = 40
8 FONT = '8x13.pcf'
9 FONT_SIZE = 16
10 EIGHT_BIT_SCALE = 2
11
12 DEFAULTS = dict(
13     debug=False,
14     sound=True,
15     music=True,
16     # We calculate the default in options.py
17     save_location=None,
18     # Debug flags:
19     initial_bits=None,
20     cheat_enabled=False,
21     game_state=None,
22 )
23
24 # Sound constants
25 FREQ = 44100   # same as audio CD
26 BITSIZE = -16  # unsigned 16 bit
27 CHANNELS = 2   # 1 == mono, 2 == stereo
28 BUFFER = 1024  # audio buffer size in no. of samples
29 DEFAULT_SOUND_VOLUME = 1.0  # sound volume
30 DEFAULT_MUSIC_VOLUME = 0.3  # music volume
31
32 # Player bits
33 DIRECTION_BITS = AttrDict({
34     'NORTH': 0,
35     'SOUTH': 1,
36     'EAST': 2,
37     'WEST': 3,
38 })
39 CONDITION_BITS = AttrDict({
40     'BLUE': 4,
41     'GREEN': 5,
42     'RED': 6,
43     'MSB': 7,
44 })
45 BITS = AttrDict()
46 BITS.update(DIRECTION_BITS)
47 BITS.update(CONDITION_BITS)
48
49 # PLAYER MOVES
50 MOVES = AttrDict({
51     # Default move
52     'ADJACENT': 0,
53     # Chess moves
54     'KNIGHT': 1,
55     'BISHOP': 2,
56     'CASTLE': 3,
57 })
58 CHESS_PIECES = AttrDict((k, v) for k, v in MOVES.items() if v > 0)
59
60 ROTATION = AttrDict({
61     'CLOCKWISE': 0,
62     'ANTICLOCKWISE': 1,
63 })
64
65 # Player defaults
66 PLAYER_DEFAULTS = AttrDict({
67     'INITIAL_BITS': 0x0f,
68     'INITIAL_POS': (2, 2),
69     'MAX_HEALTH': 4,
70     'WINS_REQUIRED': 4,
71 })
72
73 # Game size constants
74 TILE_SIZE = (96, 96)
75 LOCK_HEIGHT = 32
76 SMALL_LOCK_HEIGHT = 24
77 BOARD_SIZE = (5 * TILE_SIZE[0], 5 * TILE_SIZE[1])
78 BIT_SIZE = (5 * TILE_SIZE[0], (SCREEN[1] - 5 * TILE_SIZE[1]) // 2)
79 INFO_SIZE = (SCREEN[0] - 5 * TILE_SIZE[0], SCREEN[1])
80 INFO_LEFT_PADDING = 18
81 INFO_RIGHT_PADDING = 18
82 PLAYER_SIZE = (64, 96)
83 ACTION_TEXT_OFFSET = 20
84
85 # Player States
86 ACT = 1
87 EXAMINE = 2
88
89 KEYS = AttrDict({
90     'UP': (pgl.K_UP, pgl.K_w, pgl.K_COMMA),
91     'DOWN': (pgl.K_DOWN, pgl.K_s, pgl.K_o),
92     'LEFT': (pgl.K_LEFT, pgl.K_a),
93     'RIGHT': (pgl.K_RIGHT, pgl.K_d, pgl.K_e),
94     'NOMOVE': (pgl.K_SPACE,),
95
96     'SELECT': (pgl.K_RETURN, pgl.K_KP_ENTER),
97     'QUIT': (pgl.K_ESCAPE, pgl.K_q),
98     'SWITCH': (pgl.K_TAB,),
99
100     'KONAMI': (
101         pgl.K_UP, pgl.K_DOWN, pgl.K_LEFT, pgl.K_RIGHT, pgl.K_a, pgl.K_b),
102 })
103
104 KONAMI_CODE = [
105     pgl.K_UP,
106     pgl.K_UP,
107     pgl.K_DOWN,
108     pgl.K_DOWN,
109     pgl.K_LEFT,
110     pgl.K_RIGHT,
111     pgl.K_LEFT,
112     pgl.K_RIGHT,
113     pgl.K_b,
114     pgl.K_a,
115 ]
116
117 PALETTE = AttrDict({
118     'BLACK': (0, 0, 0),
119     'DARK_RED': (108, 41, 64),
120     'DARK_VIOLET': (64, 53, 120),
121     'MAGENTA': (217, 60, 240),
122     'DARK_GREEN': (19, 87, 64),
123     'GREY': (128, 128, 128),
124     'BLUE': (38, 151, 240),
125     'LIGHT_VIOLET': (191, 180, 248),
126     'DARK_OLIVE': (64, 75, 7),
127     'ORANGE': (217, 104, 15),
128     'PINK': (236, 168, 191),
129     'GREEN': (38, 195, 15),
130     'LIGHT_OLIVE': (191, 202, 135),
131     'LIGHT_TURQUOISE': (147, 214, 191),
132     'WHITE': (255, 255, 255),
133 })
134
135
136 ACTION_GLYPHS = AttrDict({
137     'CLEAR_BITS': 'glyphs/bits_clear.png',
138     'TOGGLE_BITS': 'glyphs/bits_toggle.png',
139     'SET_BITS': 'glyphs/bits_set.png',
140     'CHANGE_BOARD': 'glyphs/board.png',
141     'DAMAGE': 'glyphs/damage.png',
142     'HEAL': 'glyphs/health.png',
143     'MOVEMENT': 'glyphs/move.png',
144     'WINTOKEN': 'glyphs/win.png',
145     'MSB': 'glyphs/msb.png',
146     'NOTHING': 'glyphs/do_nothing.png',
147     'SHIFT_LEFT': 'glyphs/shift_left.png',
148     'SHIFT_RIGHT': 'glyphs/shift_right.png',
149 })
150
151 TUNES = (
152     'ants.ogg',
153     'python.ogg',
154     'death_on_a_b.ogg',
155     'scape.ogg',
156     'another_beek.ogg',
157 )
158
159 # Puzzles, because resources can't give us file lists
160 PUZZLES = (
161     'chess',
162     'marathon',
163 )