def play_level(view, game, level=None, mapentry=None): game.new_level(level, mapentry) p = game.player done = False clk = G.time.Clock() addlkeys = [(G.K_ESCAPE, 0, VK_SELECT | VK_START)] while not done: event_vkeys, other_events = translate_events(addlkeys) (vkeys, new_vkeys) = read_pads(view) new_vkeys |= event_vkeys vkeys |= event_vkeys game.move(vkeys, new_vkeys) view.draw(game) if p.health < 1: done = 'die' if (vkeys & VK_LEFT) and game.open_l and p.pos[0] <= 8: done = 'side' if (vkeys & VK_RIGHT) and game.open_r and p.pos[0] >= 248: done = 'side' if p.state == p.ST_ENTERING_DOOR and p.walking_frame > 20: done = 'door' if (vkeys & (VK_SELECT | VK_START) == (VK_SELECT | VK_START)): done = 'esc' chipsfx.fxq_play(view.sfx, view.display.num_frames) clk.tick(60) view.display.flip() return done
def level_select(view, game, selected=0): textout = view.font.textout enl = view.display screen = enl.get_surface() screen.fill((102, 102, 102)) level_dirty = True slm = SmallLevelMap(view, 64, 80) done = False clk = G.time.Clock() addlkeys = [ (G.K_RETURN, 0, VK_START), (G.K_ESCAPE, 0, VK_B), (G.K_TAB, 0, VK_SELECT), (G.K_LEFT, 0, VK_LEFT), (G.K_RIGHT, 0, VK_RIGHT) ] while not done: key_vkeys = 0 event_vkeys, other_events = translate_events(addlkeys) (vkeys, new_vkeys) = read_pads(view) new_vkeys |= event_vkeys if new_vkeys & VK_LEFT: selected -= 1 if selected < 0: selected = len(game.levels) - 1 level_dirty = True if new_vkeys & VK_RIGHT: selected += 1 if selected >= len(game.levels): selected = 0 level_dirty = True if new_vkeys & (VK_A | VK_START): done = VK_A if new_vkeys & VK_B: selected = -1 done = VK_B if level_dirty and 0 <= selected < len(game.levels): screen.fill((102, 102, 102), (0, 8, 256, 8)) textout(screen, "Level %d" % (selected + 1), 16, 8) screen.fill((102, 102, 102), (0, 24, 256, 24)) level = game.levels[selected] textout(screen, level[0], 16, 24) enemyseq = level[3] for i, enemy in enumerate(enemyseq): x, y = enemies_gfxcoords[enemy] dstpos = (16 + 8 * i, 40) srcarea = (120 - x, y, 8, 8) screen.blit(view.spritegfx[1], dstpos, srcarea) levelmap = game.levelmaps[level[1]][2] slm.load_map(levelmap) slm.slm_redrawdirty() level_dirty = False clk.tick(60) enl.flip() return done, selected
def press_a_key(view, vkeyfilter=VK_A|VK_START, addlkeys=[], waiting_time=30): """Wait for the player to press one of the keys in keys_set or the A button. Return the vkey that caused closing. """ done = False clk = G.time.Clock() while not done: event_vkeys, other_events = translate_events(addlkeys) (vkeys, new_vkeys) = read_pads(view) if waiting_time > 0: waiting_time -= 1 new_vkeys = 0 done = (new_vkeys | event_vkeys) & vkeyfilter clk.tick(60) view.display.flip() return done
def editor(view, game, play_level): es = EditorSession(view, game) done = False clk = G.time.Clock() VK_BACK = 0x2000 addlkeys = [ (G.K_RETURN, 0, VK_START), (G.K_ESCAPE, 0, VK_BACK), (G.K_TAB, 0, VK_SELECT), (G.K_LEFT, 0, VK_LEFT), (G.K_RIGHT, 0, VK_RIGHT), (G.K_UP, 0, VK_UP), (G.K_RIGHT, 0, VK_DOWN) ] while not done: key_vkeys = 0 event_vkeys, other_events = translate_events(addlkeys) (vkeys, new_vkeys) = read_pads(view) new_vkeys |= event_vkeys if es.moved_since_b and es.mode == es.MODE_PLACE_BLOCKS: new_vkeys |= vkeys & (VK_A | VK_B) es.handle_vkeys(new_vkeys) if new_vkeys & VK_BACK: done = True if new_vkeys & VK_START: if vkeys & VK_SELECT: done = True else: es.level[3][:] = [e for e in es.level[3] if e] connect_level(es.mapdata) randomize_level_bg(es.mapdata) game.new_game() game.pf.sheet = view.metatile_sheet ## with es: play_level(view, game, es.level, es.map) es.dirty = es.DIRTY_ALL es.redrawdirty() clk.tick(60) view.display.flip() save_levels(user_levels_filename, [es.map], [es.level])
def titlescreen(view): textout = view.font.textout enl = view.display title = G.image.load('tilesets/title.png').convert_alpha() options = ['play', 'controls', 'practice', 'edit', 'help', 'quit'] screen = enl.get_surface() screen.blit(title, (0, 0)) done = False clk = G.time.Clock() textout(screen, "forehead block guy", 24, 80, (102, 102, 102)) for i, txt in enumerate(options): y = 120 + 8 * (i % 4) x = 72 + 80 * (i // 4) textout(screen, txt, x + 8, y, (0, 0, 0)) selected = 0 last_selected = -1 last_col_top = (-(-len(options) // 4) - 1) * 4 addlkeys = [ (G.K_RETURN, 0, VK_START), (G.K_ESCAPE, 0, VK_B|VK_START), (G.K_TAB, 0, VK_SELECT), (G.K_LEFT, 0, VK_LEFT), (G.K_RIGHT, 0, VK_RIGHT), (G.K_DOWN, 0, VK_DOWN), (G.K_UP, 0, VK_UP), ] while not done: event_vkeys, other_events = translate_events(addlkeys) (vkeys, new_vkeys) = read_pads(view) new_vkeys |= event_vkeys if new_vkeys & VK_UP: selected -= 1 if selected < 0: selected = len(options) - 1 if new_vkeys & (VK_DOWN|VK_SELECT): selected += 1 if selected >= len(options): selected = 0 if new_vkeys & VK_LEFT: if selected < 4: selected = min(selected + last_col_top, len(options) - 1) else: selected -= 4 if new_vkeys & VK_RIGHT: if selected >= last_col_top: selected = selected % 4 else: selected = min(selected + 4, len(options) - 1) if new_vkeys & VK_B: selected = len(options) - 1 if new_vkeys & (VK_A|VK_START): done = True if selected != last_selected: if last_selected >= 0: y = 120 + 8 * (last_selected % 4) x = 72 + 80 * (last_selected // 4) screen.blit(title, (x, y), (x, y, 8, 8)) if selected >= 0: y = 120 + 8 * (selected % 4) x = 72 + 80 * (selected // 4) screen.blit(view.spritegfx[0], (x, y), (0, 24, 8, 8)) last_selected = selected clk.tick(60) enl.flip() if selected == len(options) - 1: selected = -1 return selected