mirror of
https://github.com/rr-/pq-cli.git
synced 2026-09-29 06:44:00 -06:00
mechanic: port leveling up
This commit is contained in:
+58
-4
@@ -12,6 +12,10 @@ def level_up_time(level: int) -> int:
|
|||||||
return 20 * level * 60
|
return 20 * level * 60
|
||||||
|
|
||||||
|
|
||||||
|
def random_low(below):
|
||||||
|
return min(random.randint(0, below), random.randint(0, below))
|
||||||
|
|
||||||
|
|
||||||
def generate_name() -> str:
|
def generate_name() -> str:
|
||||||
parts = [
|
parts = [
|
||||||
"br|cr|dr|fr|gr|j|kr|l|m|n|pr||||r|sh|tr|v|wh|x|y|z".split("|"),
|
"br|cr|dr|fr|gr|j|kr|l|m|n|pr||||r|sh|tr|v|wh|x|y|z".split("|"),
|
||||||
@@ -82,6 +86,10 @@ class Bar:
|
|||||||
self.position = position
|
self.position = position
|
||||||
self.max_ = max_
|
self.max_ = max_
|
||||||
|
|
||||||
|
def reset(self, new_max: int, position: int = 0) -> None:
|
||||||
|
self.max_ = new_max
|
||||||
|
self.position = position
|
||||||
|
|
||||||
|
|
||||||
class TaskType(enum.Enum):
|
class TaskType(enum.Enum):
|
||||||
task = "task"
|
task = "task"
|
||||||
@@ -149,6 +157,56 @@ class Player:
|
|||||||
Equipment.hauberk: "-3 Burlap",
|
Equipment.hauberk: "-3 Burlap",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def level_up(self) -> None:
|
||||||
|
self.level += 1
|
||||||
|
self.stats[Stat.hp_max] += (
|
||||||
|
self.stats[Stat.condition] // 3 + 1 + random.randint(0, 3)
|
||||||
|
)
|
||||||
|
self.stats[Stat.mp_max] += (
|
||||||
|
self.stats[Stat.intelligence] // 3 + 1 + random.randint(0, 3)
|
||||||
|
)
|
||||||
|
self.win_stat()
|
||||||
|
self.win_stat()
|
||||||
|
self.win_spell()
|
||||||
|
self.exp_bar.reset(level_up_time(self.level))
|
||||||
|
|
||||||
|
def win_stat(self) -> bool:
|
||||||
|
if random.choice([False, True]):
|
||||||
|
chosen_stat = random.choice(list(Stat))
|
||||||
|
else:
|
||||||
|
# favor the beststat so it will tend to clump
|
||||||
|
t = sum(value ** 2 for _stat, value in self.stats)
|
||||||
|
t = random.randint(0, t - 1)
|
||||||
|
chosen_stat: Stat = None
|
||||||
|
for stat, value in self.stats:
|
||||||
|
chosen_stat = stat
|
||||||
|
t -= value ** 2
|
||||||
|
if t < 0:
|
||||||
|
return False
|
||||||
|
|
||||||
|
self.stats[chosen_stat] += 1
|
||||||
|
if chosen_stat == Stat.strength:
|
||||||
|
self.encum_bar.reset(
|
||||||
|
10 + self.stats[Stat.strength], self.encum_bar.position
|
||||||
|
)
|
||||||
|
return True
|
||||||
|
|
||||||
|
def win_spell(self) -> None:
|
||||||
|
self.spell_book.add(
|
||||||
|
SPELLS[
|
||||||
|
random_low(
|
||||||
|
min(
|
||||||
|
self.stats[Stat.wisdom] + self.level - 1,
|
||||||
|
len(SPELLS) - 1,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
],
|
||||||
|
1,
|
||||||
|
)
|
||||||
|
|
||||||
|
def win_item(self) -> None:
|
||||||
|
self.inventory.add(special_item(), 1)
|
||||||
|
|
||||||
|
|
||||||
def special_item() -> str:
|
def special_item() -> str:
|
||||||
return interesting_item() + " of " + random.choice(ITEM_OFS)
|
return interesting_item() + " of " + random.choice(ITEM_OFS)
|
||||||
@@ -162,10 +220,6 @@ def boring_item() -> str:
|
|||||||
return random.choice(BORING_ITEMS)
|
return random.choice(BORING_ITEMS)
|
||||||
|
|
||||||
|
|
||||||
def win_item(player: Player) -> None:
|
|
||||||
player.inventory.add(special_item(), 1)
|
|
||||||
|
|
||||||
|
|
||||||
class Roster:
|
class Roster:
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
self.players: T.List[Player] = []
|
self.players: T.List[Player] = []
|
||||||
|
|||||||
Reference in New Issue
Block a user