-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsetup_game.py
More file actions
121 lines (96 loc) · 3.44 KB
/
Copy pathsetup_game.py
File metadata and controls
121 lines (96 loc) · 3.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
from __future__ import annotations
import copy
from typing import Optional
import tcod
from tcod import libtcodpy
import lzma
import pickle
import traceback
import color
from engine import Engine
import entity_factories
import input_handlers
from game_map import GameWorld
# Load the background image and remove the alpha channel.
background_image = tcod.image.load("assets/bg.png")[:, :, :3]
def new_game() -> Engine:
map_width = 80
map_height = 43
room_max_size = 10
room_min_size = 6
max_rooms = 30
player = copy.deepcopy(entity_factories.player)
engine = Engine(player=player)
engine.game_world = GameWorld(
engine=engine,
max_rooms=max_rooms,
room_min_size=room_min_size,
room_max_size=room_max_size,
map_width=map_width,
map_height=map_height,
)
engine.game_world.generate_floor()
engine.update_fov()
engine.message_log.add_message(
"Autocontract Accepted: REACH THE TOP", color.welcome_text
)
#starting_weapon = copy.deepcopy(entity_factories.bitshiv)
#starting_armor = copy.deepcopy(entity_factories.datamail)
#starting_weapon.parent = player.inventory
#starting_armor.parent = player.inventory
#player.inventory.items.append(starting_weapon)
#player.equipment.toggle_equip(starting_weapon, add_message=False)
#player.inventory.items.append(starting_armor)
#player.equipment.toggle_equip(starting_armor, add_message=False)
return engine
def load_game(filename: str) -> Engine:
with open(filename, "rb") as f:
engine = pickle.loads(lzma.decompress(f.read()))
assert isinstance(engine, Engine)
return engine
class MainMenu(input_handlers.BaseEventHandler):
def on_render(self, console: tcod.Console) -> None:
console.draw_semigraphics(background_image, 0, 0)
console.print(
console.width // 2,
console.height // 2 - 4,
"NETRUNNER",
fg=color.menu_title,
alignment=libtcodpy.CENTER,
)
console.print(
console.width // 2,
console.height - 2,
"Wil Cram 2023",
fg=color.menu_title,
alignment=libtcodpy.CENTER,
)
menu_width = 24
for i, text in enumerate(
["[N] Play a new game", "[C] Continue last game", "[Q] Quit"]
):
console.print(
console.width // 2,
console.height // 2 - 2 + i,
text.ljust(menu_width),
fg=color.menu_text,
bg=color.black,
alignment=libtcodpy.CENTER,
bg_blend=libtcodpy.BKGND_ALPHA(64),
)
def ev_keydown(
self, event: tcod.event.KeyDown
) -> Optional[input_handlers.BaseEventHandler]:
if event.sym in (tcod.event.KeySym.q, tcod.event.KeySym.ESCAPE):
raise SystemExit()
elif event.sym == tcod.event.KeySym.c:
try:
return input_handlers.MainGameEventHandler(load_game("savegame.sav"))
except FileNotFoundError:
return input_handlers.PopupMessage(self, "No saved game to load.")
except Exception as exc:
traceback.print_exc()
return input_handlers.PopupMessage(self, f"Failed to load save:\n{exc}")
elif event.sym == tcod.event.KeySym.n:
return input_handlers.MainGameEventHandler(new_game())
return None