From 2481898170887aa280d1e610cfc50a8e34c2b809 Mon Sep 17 00:00:00 2001 From: ta-mj Date: Wed, 7 Dec 2022 03:01:42 +0900 Subject: [PATCH] change for pull request --- pokete.py | 61 ++++++++++---------- pokete_classes/animations.py | 6 +- pokete_classes/effects.py | 48 +++++++++++----- pokete_classes/fightmap/__init__.py | 2 +- pokete_classes/landscape.py | 9 ++- pokete_classes/moves.py | 6 +- pokete_classes/npcs.py | 25 +++++++-- pokete_classes/poke.py | 30 +++++++--- pokete_classes/side_loops.py | 4 +- pokete_data/achievements.py | 4 ++ pokete_data/attacks.py | 73 +++++++++++++++++++++++- pokete_data/maps.py | 6 +- pokete_data/poketes.py | 87 ++++++++++++++++++++++++++--- 13 files changed, 287 insertions(+), 74 deletions(-) diff --git a/pokete.py b/pokete.py index e85c01c5..5fc3940b 100755 --- a/pokete.py +++ b/pokete.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 """This software is licensed under the GPL3 -You should have gotten an copy of the GPL3 license anlonside this software +You should have gotten a copy of the GPL3 license anlonside this software Feel free to contribute what ever you want to this game New Pokete contributions are especially welcome For this see the comments in the definations area @@ -38,9 +38,9 @@ from pokete_classes.mods import ModError, ModInfo, DummyMods from pokete_classes.pokete_care import PoketeCare, DummyFigure from pokete_classes import deck, detail, game, timer, ob_maps as obmp, \ - movemap as mvp, fightmap as fm + movemap as mvp, fightmap as fm # import pokete_classes.generic_map_handler as gmh -from pokete_classes.landscape import Meadow, Water, Sand, HighGrass, Poketeball +from pokete_classes.landscape import Meadow, Water, Sand, HighGrass, Poketeball, HIGHGRASS_WEIGHT from pokete_classes.doors import CenterDoor, Door, DoorToCenter, DoorToShop, ChanceDoor from pokete_classes.learnattack import LearnAttack from pokete_classes.roadmap import RoadMap @@ -102,7 +102,6 @@ def playmap_13_introductor(npc): ) npc.set_used() - @staticmethod def playmap_17_boy(npc): """Interaction with boy""" @@ -111,10 +110,10 @@ def playmap_17_boy(npc): "I've never seen one before!", "Here you go, have $200!"]) if ask_bool( - mvp.movemap, - "The young boy gifted you $200. Do you want to accept it?", - mvp.movemap - ): + mvp.movemap, + "The young boy gifted you $200. Do you want to accept it?", + mvp.movemap + ): figure.add_money(200) npc.set_used() else: @@ -242,7 +241,8 @@ def playmap_42_npc_21(npc): mvp.movemap, "Do you want to give your Mowcow to the cook?", mvp.movemap ): - figure.pokes[figure.pokes.index(poke)] = Poke("__fallback__", 0) + figure.pokes[figure.pokes.index( + poke)] = Poke("__fallback__", 0) npc.text(["Here you go, have $1000!"]) if ask_bool( mvp.movemap, @@ -327,7 +327,7 @@ def action(self, ob): class ShopInteract(se.Object): - """Triggers an conversation in the shop""" + """Triggers a conversation in the shop""" def action(self, ob): """Triggers an interaction in the shop @@ -485,7 +485,8 @@ def add_poke(self, poke: Poke, idx=None, caught_with=None): idx: Index of the Poke caught_with: Name of ball which was used""" poke.set_player(True) - poke.set_poke_stats(PokeStats(poke.name, datetime.now(), caught_with=caught_with)) + poke.set_poke_stats( + PokeStats(poke.name, datetime.now(), caught_with=caught_with)) self.caught_pokes.append(poke.identifier) if idx is None: id_list = [i.identifier for i in self.pokes] @@ -647,8 +648,7 @@ def __call__(self): ) if not ex_cond: break - if LearnAttack(poke, self.map, self)\ - (obj.attack_name): + if LearnAttack(poke, self.map, self)(obj.attack_name): items = self.rem_item(obj.name, items) if len(items) == 0: break @@ -977,12 +977,13 @@ def playmap_7(): # main functions ################ + def test(): """test/demo for BetterChooseBox, until BetterChooseBox is actively used this will remain""" with BetterChooseBox(3, [se.Text(i, state="float") for i in ["Hallo", - "Welt", "Wie", "Gehts", "Dir", "So", "Du"]], - "Test", _map=mvp.movemap) as a: + "Welt", "Wie", "Gehts", "Dir", "So", "Du"]], + "Test", _map=mvp.movemap) as a: while True: action = get_action() if action.triggers(*ACTION_DIRECTIONS): @@ -992,7 +993,7 @@ def test(): elif action.triggers(Action.ACCEPT): a.remove() a.set_items(3, [se.Text(i, state="float") for i in ["test", - "test", "123", "fuckthesystem"]]) + "test", "123", "fuckthesystem"]]) a.center_add(a.map) std_loop() a.map.show() @@ -1041,11 +1042,11 @@ def swap_poke(): break decode_data = json.loads(data.decode()) conn.sendall( - str.encode( - json.dumps( - {"mods": mods.mod_info, - "name": figure.name, - "poke": figure.pokes[index].dict()}))) + str.encode( + json.dumps( + {"mods": mods.mod_info, + "name": figure.name, + "poke": figure.pokes[index].dict()}))) else: host = "" while host == "": @@ -1064,10 +1065,10 @@ def swap_poke(): ask_ok(mvp.movemap, str(err), mvp.movemap) return sock.sendall( - str.encode( - json.dumps({"mods": mods.mod_info, - "name": figure.name, - "poke": figure.pokes[index].dict()}))) + str.encode( + json.dumps({"mods": mods.mod_info, + "name": figure.name, + "poke": figure.pokes[index].dict()}))) data = sock.recv(1024) decode_data = json.loads(data.decode()) logging.info("[Swap_poke] Recieved %s", decode_data) @@ -1120,15 +1121,19 @@ def _game(_map): } if _map.weather is not None: notifier.notify("Weather", "Info", _map.weather.info) + figure.fightWeight = HIGHGRASS_WEIGHT while True: # Directions are not being used yet action = get_action() if action.triggers(*ACTION_DIRECTIONS): + figure.npc = None figure.direction = '' figure.set( figure.x + action.get_x_strength(), figure.y + action.get_y_strength() ) + elif action.triggers(Action.ACCEPT) and figure.npc != None: + figure.npc.reaction() elif action.triggers(*inp_dict): for key, option in inp_dict.items(): if action.triggers(key): @@ -1177,6 +1182,7 @@ def intro(): "Welcome to Pokete!\nPlease choose your name!\n", "Name:", "", "Name", 17, mvp.movemap ) + figure.char = figure.name[0] mvp.movemap.name_label_rechar(figure.name) mvp.movemap.text(4, 3, ["Hello, my child.", "You're now ten years old.", @@ -1242,7 +1248,7 @@ def gen_obs(): single_door) for ball, single_ball in single_map["balls"].items(): if f'{ob_map}.{ball}' not in figure.used_npcs or not \ - settings("save_trainers").val: + settings("save_trainers").val: parse_obj(_map, ball, Poketeball(f"{ob_map}.{ball}"), single_ball) @@ -1500,7 +1506,6 @@ def map_additions(): if sys.platform == "win32": import msvcrt - def recogniser(): """Gets keyboard input from msvcrt, the Microsoft Visual C++ Runtime""" while True: @@ -1523,7 +1528,6 @@ def recogniser(): import termios import select - def recogniser(): """Use another (not on xserver relying) way to read keyboard input, to make this shit work in tty or via ssh, @@ -1551,7 +1555,6 @@ def recogniser(): if ord(char) == 3: reset_terminal() - print("\033[?1049h") # resizing screen diff --git a/pokete_classes/animations.py b/pokete_classes/animations.py index c2c23585..8f5b8f73 100644 --- a/pokete_classes/animations.py +++ b/pokete_classes/animations.py @@ -4,6 +4,7 @@ import scrap_engine as se import pokete_classes.game_map as gm from release import SPEED_OF_TIME +from pokete_classes.hotkeys import get_action, Action def transition(_map, poke): @@ -61,6 +62,9 @@ def fight_intro(height, width): if j != " ": j.rechar(" ") fancymap.show() + action = get_action() + if action.triggers(Action.ACCEPT): + break time.sleep(SPEED_OF_TIME * 0.005) for i in vec_list: i.remove() @@ -68,4 +72,4 @@ def fight_intro(height, width): if __name__ == "__main__": - print("\033[31;1mDo not execute this!\033[0m") + print("\033[31;1mDo not execute this!\033[0m") \ No newline at end of file diff --git a/pokete_classes/effects.py b/pokete_classes/effects.py index ae71ab2c..283936f1 100644 --- a/pokete_classes/effects.py +++ b/pokete_classes/effects.py @@ -97,6 +97,7 @@ def readd(self): def remove(self): """Removes itself from the current pokete with a certain chance""" + logging.info("[Effect] %f rem_chance", self.rem_chance) if random.randint(0, self.rem_chance) == 0: self.obj.ico.map.outp.outp(f'{self.obj.ext_name} isn\'t ') self.obj.ico.map.outp.append(se.Text(self.name, @@ -110,6 +111,8 @@ def remove(self): self.obj.name) self.obj = None time.sleep(SPEED_OF_TIME * 2) + else: + self.rem_chance //= 2 def cleanup(self, j=None): """Does a cleanup @@ -127,14 +130,17 @@ def cleanup(self, j=None): def effect(self): """The action that's executed every attack round""" - self.obj.ico.map.outp.outp(f'{self.obj.ext_name} is still ') - self.obj.ico.map.outp.append(se.Text(self.name, - esccode=self.str_esccode, - state="float"), - se.Text(" and can\'t attack!", - state="float")) - time.sleep(SPEED_OF_TIME * 0.5) - return 1 + if random.randint(0, 1) == 0: + self.obj.ico.map.outp.outp(f'{self.obj.ext_name} is still ') + self.obj.ico.map.outp.append(se.Text(self.name, + esccode=self.str_esccode, + state="float"), + se.Text(" and can\'t attack!", + state="float")) + time.sleep(SPEED_OF_TIME * 0.5) + return 1 + else: + return 0 @classmethod def ret_md(cls): @@ -153,7 +159,7 @@ class EffectParalyzation(Effect): color = Color.thicc + Color.yellow def __init__(self, obj=None): - super().__init__("paralyzed", 3, 2, "(Par)", self.color, + super().__init__("paralyzed", 6, 2, "(Par)", self.color, obj) @@ -163,8 +169,20 @@ class EffectSleep(Effect): This is reverted randomly." c_name = "sleep" color = Color.white + def __init__(self, obj=None): - super().__init__("sleeping", 4, 3, "(Sle)", self.color, obj) + super().__init__("sleeping", 8, 3, "(Sle)", self.color, obj) + + def effect(self): + """The action that's executed every attack round""" + self.obj.ico.map.outp.outp(f'{self.obj.ext_name} is still ') + self.obj.ico.map.outp.append(se.Text(self.name, + esccode=self.str_esccode, + state="float"), + se.Text(" and can\'t attack!", + state="float")) + time.sleep(SPEED_OF_TIME * 0.5) + return 1 class EffectBurning(Effect): @@ -175,7 +193,7 @@ class EffectBurning(Effect): color = Color.thicc + Color.red def __init__(self, obj=None): - super().__init__("burning", 3, 0, "(Bur)", self.color, obj, + super().__init__("burning", 6, 0, "(Bur)", self.color, obj, exclude=["fire", "water"]) self.hurt_text = "burned it self!" self.damage = 2 @@ -205,8 +223,8 @@ class EffectPoison(EffectBurning): color = Color.purple def __init__(self, obj=None): - super(EffectBurning, self).__init__("poisoned", 4, 2, "(Poi)", self.color - , obj) + super(EffectBurning, self).__init__( + "poisoned", 8, 2, "(Poi)", self.color, obj) self.hurt_text = "got damaged through poison!" self.damage = 1 @@ -218,7 +236,7 @@ class EffectConfusion(Effect): color = Color.lightblue def __init__(self, obj=None): - super().__init__("confused", 3, 2, "(Con)", self.color, obj, + super().__init__("confused", 6, 2, "(Con)", self.color, obj, exclude=["undead"]) def effect(self): @@ -239,7 +257,7 @@ class EffectFreezing(Effect): color = Color.cyan def __init__(self, obj=None): - super().__init__("frozen", 3, 3, "(Fro)", self.color, obj, + super().__init__("frozen", 6, 3, "(Fro)", self.color, obj, exclude=["ice", "fire"]) diff --git a/pokete_classes/fightmap/__init__.py b/pokete_classes/fightmap/__init__.py index 4e5a3f3a..aa2fa431 100644 --- a/pokete_classes/fightmap/__init__.py +++ b/pokete_classes/fightmap/__init__.py @@ -353,7 +353,7 @@ def fight(self, providers): audio.switch("xDeviruchi - Decisive Battle (End).mp3") time.sleep(SPEED_OF_TIME * 1) _xp = sum( - poke.lose_xp + max(0, poke.lvl() - winner.curr.lvl()) + (int)(2 * poke.lose_xp * poke.lvl() / winner.curr.lvl()) for poke in loser.pokes ) * loser.xp_multiplier self.outp.outp( diff --git a/pokete_classes/landscape.py b/pokete_classes/landscape.py index e4dc287b..098b3a3d 100644 --- a/pokete_classes/landscape.py +++ b/pokete_classes/landscape.py @@ -1,6 +1,7 @@ """Contains classes that can be placed on playmaps""" import random +import logging import scrap_engine as se import pokete_data as p_data from pokete_classes import timer, movemap as mvp, fightmap as fm @@ -10,6 +11,8 @@ from .poke import Poke from .input import ask_ok +HIGHGRASS_WEIGHT = 300 + class HighGrass(se.Object): """Object on the map, that triggers a fight""" @@ -26,7 +29,9 @@ def action(self, ob): if (n_a := p_data.pokes[i].get("night_active", None)) is None or (not n_a and not is_night) or (n_a and is_night)} - if random.randint(0, 8) == 0: + logging.info("[Walking] fight Weight %f", ob.fightWeight) + if random.randint(0, ob.fightWeight) == 0: + ob.fightWeight = HIGHGRASS_WEIGHT fm.fightmap.fight( [ self.figure, @@ -47,6 +52,8 @@ def action(self, ob): ] ) check_walk_back(self.figure) + else: + ob.fightWeight //= 2 class Meadow(se.Text): diff --git a/pokete_classes/moves.py b/pokete_classes/moves.py index d44cb19a..4cac3abe 100644 --- a/pokete_classes/moves.py +++ b/pokete_classes/moves.py @@ -5,6 +5,7 @@ import scrap_engine as se from release import SPEED_OF_TIME from .color import Color +from pokete_classes.hotkeys import get_action, Action class Moves: @@ -120,6 +121,9 @@ def throw(self, txt="#", factor=1., num=1): line.obs[i - j].rechar(txt) if len(line.obs) >= i - j > 0: line.obs[i - j - 1].rechar(line.char) + action = get_action() + if action.triggers(Action.ACCEPT): + break time.sleep(SPEED_OF_TIME * 0.05) self.poke.ico.map.show() line.remove() @@ -187,4 +191,4 @@ def rain(self): if __name__ == "__main__": - print("\033[31;1mDo not execute this!\033[0m") + print("\033[31;1mDo not execute this!\033[0m") \ No newline at end of file diff --git a/pokete_classes/npcs.py b/pokete_classes/npcs.py index 93c50d1a..0ad02a09 100644 --- a/pokete_classes/npcs.py +++ b/pokete_classes/npcs.py @@ -15,6 +15,7 @@ from .settings import settings from .ui_elements import ChooseBox from .general import check_walk_back +from .achievements import achievements class NPCTrigger(se.Object): @@ -86,6 +87,10 @@ def exclamate(self): mvp.movemap.show() time.sleep(SPEED_OF_TIME * 1) exclamation.remove() + if self.__class__ == Trainer or ask_bool(mvp.movemap, "Would you like to talk?", mvp.movemap): + return True + else: + return False def action(self): """Interaction with the NPC triggered by NPCTrigger.action""" @@ -93,10 +98,15 @@ def action(self): return logging.info("[NPC][%s] Interaction", self.name) mvp.movemap.full_show() - time.sleep(SPEED_OF_TIME * 0.7) - self.exclamate() - self.text(self.texts) - self.func() + self.fig.npc = self + + def reaction(self): + opinion = self.exclamate() + if opinion == True: + self.text(self.texts) + self.func() + else: + pass def func(self): """The function that's executed after the interaction""" @@ -264,7 +274,7 @@ def action(self): return self.pokes = [p for p in self.pokes if p.hp > 0] if self.pokes and (not self.used - or not settings("save_trainers").val) \ + or not settings("save_trainers").val) \ and self.check_walk(self.fig.x, self.fig.y): mvp.movemap.full_show() time.sleep(SPEED_OF_TIME * 0.7) @@ -284,10 +294,15 @@ def action(self): else: self.fig.add_money(20) self.set_used() + #add first gym win acheivement when you win Last Trainer in playmap_14 + if self.name == "Master of the Flowers": + achievements.achieve("first Gym Win") + logging.info("[NPC][%s] %s against player", self.name, 'Lost' if not is_winner else 'Won') self.walk_point(o_x, o_y + (1 if o_y > self.y else -1)) check_walk_back(self.fig) + def greet(self, fightmap): """Outputs a greeting text at the fights start: diff --git a/pokete_classes/poke.py b/pokete_classes/poke.py index b7a9bb56..8b7f0019 100644 --- a/pokete_classes/poke.py +++ b/pokete_classes/poke.py @@ -38,7 +38,7 @@ def __init__(self, poke, _xp, _hp="SKIP", _ap=None, _attacks=None, _effects=None, player=True, shiny=False, nature=None, stats=None): self.nature = PokeNature.random() if nature is None \ - else PokeNature.from_dict(nature) + else PokeNature.from_dict(nature) self.inf = p_data.pokes[poke] self.moves = Moves(self) # Attributes @@ -51,7 +51,8 @@ def __init__(self, poke, _xp, _hp="SKIP", _ap=None, _attacks=None, self.atc = 0 self.defense = 0 self.initiative = 0 - self.hp = self.inf["hp"] + #We set the hp to increase by 2 each time the level of Pokemon rises + self.hp = round((self.lvl() * 2 + self.inf["hp"])) self.name = self.inf["name"] self.miss_chance = self.inf["miss_chance"] self.lose_xp = self.inf["lose_xp"] @@ -135,6 +136,12 @@ def set_vars(self): for name in ["atc", "defense", "initiative"]: setattr(self, name, round((self.lvl() + self.inf[name] + (2 if self.shiny else 0)) * self.nature.get_value(name))) + #when my poke's level up + if(self.full_hp < round(self.inf["hp"] + self.lvl() * 2)): + self.hp += 2 + self.text_hp.rechar(f"HP:{self.hp}") + self.full_hp = round(self.inf["hp"] + self.lvl() * 2) + for atc in self.attack_obs: atc.set_ap(atc.max_ap) @@ -168,7 +175,9 @@ def add_xp(self, _xp): self.text_xp.rechar(f"XP:{self.xp - (self.lvl() ** 2 - 1)}/\ {((self.lvl() + 1) ** 2 - 1) - (self.lvl() ** 2 - 1)}") self.text_lvl.rechar(f"Lvl:{self.lvl()}") - logging.info("[Poke][%s] Gained %dxp (curr:%d)", self.name, _xp, self.xp) + self.text_hp.rechar(f"HP:{self.oldhp}") + logging.info("[Poke][%s] Gained %dxp (curr:%d)", + self.name, _xp, self.xp) if old_lvl < self.lvl(): logging.info("[Poke][%s] Reached lvl. %d", self.name, self.lvl()) return True @@ -192,12 +201,12 @@ def attack(self, attack, enem, fightmap, providers): for eff in self.effects: if eff.effect() == 1: return - if any(isinstance(i, effects.confusion) for i in self.effects): + if any(isinstance(i, effects.confusion) for i in self.effects) and random.randint(0, 1) == 0: self.enem = enem = self else: self.enem = enem w_eff = 1 - random_factor = random.choices([0, 0.75, 1, 1.26], + random_factor = random.choices([0, 0.8, 1, 1.2], weights=[attack.miss_chance + self.miss_chance, 1, 1, 1], k=1)[0] @@ -207,10 +216,11 @@ def attack(self, attack, enem, fightmap, providers): time.sleep(SPEED_OF_TIME * 1.5) enem.oldhp = enem.hp self.oldhp = self.hp - eff = (1.3 if enem.type.name in attack.type.effective else 0.5 + eff = (2 if enem.type.name in attack.type.effective else 0.5 if enem.type.name in attack.type.ineffective else 1) * w_eff - n_hp = round((self.atc - * attack.factor + #We set the damage to increase as the level difference between the two Pokémon increases. + n_hp = round(( self.atc + * (5 * attack.factor) / (enem.defense if enem.defense >= 1 else 1)) * random_factor * eff) eff_text = { @@ -218,7 +228,9 @@ def attack(self, attack, enem, fightmap, providers): eff > 1: "\nThat was very effective! ", eff == 1 or n_hp == 0: "", random_factor == 0: f"{self.name} missed!"}[True] - enem.hp -= max(n_hp, 0) + #Set the damage to be at least 1 if the attack is not missed + if(random_factor != 0): + enem.hp -= max(n_hp, 1) enem.hp = max(enem.hp, 0) time.sleep(SPEED_OF_TIME * 0.4) for i in attack.move: diff --git a/pokete_classes/side_loops.py b/pokete_classes/side_loops.py index e0e5ecc7..a3678b39 100644 --- a/pokete_classes/side_loops.py +++ b/pokete_classes/side_loops.py @@ -1,6 +1,8 @@ """Contains some small loops""" import os +import shutil + import scrap_engine as se import pokete_classes.game_map as gm from pokete_general_use_fns import liner @@ -84,7 +86,7 @@ class LoadingScreen(): codename: Codename""" def __init__(self, ver, codename): - width, height = os.get_terminal_size() + width, height = shutil.get_terminal_size() self.map = gm.GameMap(width=width, height=height - 1) se.Text(r""" _____ _ _ | __ \ | | | | diff --git a/pokete_data/achievements.py b/pokete_data/achievements.py index df0494ec..95348678 100644 --- a/pokete_data/achievements.py +++ b/pokete_data/achievements.py @@ -17,4 +17,8 @@ "title": "First evolution", "desc": "Evolve your first Pokete!" }, + "first Gym Win": { + "title": "First win at the Gym", + "desc" : "You win at the Gym First!!" + } } diff --git a/pokete_data/attacks.py b/pokete_data/attacks.py index 6dbdd317..8a1a12c7 100644 --- a/pokete_data/attacks.py +++ b/pokete_data/attacks.py @@ -1,4 +1,75 @@ attacks = { + # plused attack + "heartattack": { + "name": "Heartattack", + "factor": 3, + "action": None, + "world_action": "", + "move": ["downgrade"], + "miss_chance": 0, + "min_lvl": 0, + "desc": "A cute pokete breaks enemy heart.", + "types": ["normal"], + "effect": "confusion", + "is_generic": False, + "ap": 30, + }, + "cutearrow": { + "name": "Cutearrow", + "factor": 10, + "action": None, + "world_action": "", + "move": ["throw"], + "miss_chance": 0, + "min_lvl": 0, + "desc": "A cute pokete aiming with arrow to enemy heart.", + "types": ["normal"], + "effect": None, + "is_generic": False, + "ap": 10, + }, + "10billon_volt": { + "name": "10billon_Volt", + "factor": 5, + "action": None, + "world_action": "", + "move": ["arch"], + "miss_chance": 0, + "min_lvl": 0, + "desc": "attack with very strong thunder power", + "types": ["electro"], + "effect": "paralyzation", + "is_generic": False, + "ap": 15, + }, + "downpour": { + "name": "Downpour", + "factor": 10, + "action": "rain_dance", + "world_action": "", + "move": ["rain"], + "miss_chance": 0, + "min_lvl": 0, + "desc": "make heavy rain and attack enemy", + "types": ["water"], + "effect": None, + "is_generic": False, + "ap": 30, + }, + "water_blast": { + "name": "Water_blast", + "factor": 3, + "action": None, + "world_action": "", + "move": ["gun"], + "miss_chance": 0.1, + "min_lvl": 0, + "desc": "A shooting water blast to enemy.", + "types": ["water"], + "effect": None, + "is_generic": True, + "ap": 10, + }, # normal attacks "tackle": { "name": "Tackle", @@ -367,7 +438,7 @@ "is_generic": False, "ap": 15, }, - "webattack": { + "webattack": { "name": "Web attack", "factor": 1, "action": None, diff --git a/pokete_data/maps.py b/pokete_data/maps.py index 5b3aab18..a5db1d4c 100644 --- a/pokete_data/maps.py +++ b/pokete_data/maps.py @@ -54,7 +54,7 @@ "pretty_name": "Route 1", "extra_actions": None, "poke_args": { - "pokes": ["rato", "hornita", "steini", "voglo", "wolfior"], + "pokes": ["rabbitto", "hornita", "steini", "voglo", "wolfior"], "minlvl": 60, "maxlvl": 128 }, @@ -85,7 +85,7 @@ "maxlvl": 230 }, "w_poke_args": { - "pokes": ["karpi", "blub"], + "pokes": ["pangsuni", "blub"], "minlvl": 180, "maxlvl": 230 }, @@ -203,7 +203,7 @@ "song": "xDeviruchi - Title Theme .mp3", "extra_actions": None, "poke_args": { - "pokes": ["voglo", "vogli", "owol", "rato"], + "pokes": ["rabbitto","whitecotten","pangsuni"], "minlvl": 300, "maxlvl": 480 }, diff --git a/pokete_data/poketes.py b/pokete_data/poketes.py index 3f008785..8a67cd15 100644 --- a/pokete_data/poketes.py +++ b/pokete_data/poketes.py @@ -26,6 +26,79 @@ "txt": """ """, "esc": None}], }, + "rabbitto": { + "name": "rabbitto", + "hp": 30, + "atc": 3, + "defense": 2, + "attacks": ["tackle", "heartattack", "cutearrow"], + "pool": [], + "miss_chance": 0, + "desc": "A very cute rabbit pokemon.", + "lose_xp": 3, + "rarity": 1, + "types": ["normal"], + "evolve_poke": "", + "evolve_lvl": 30, + "initiative": 5, + "ico": [{ + "txt": r""" + (\ /) + (´•ᴥ•`) + ♥~૮()૮ )O + """, + "esc": None}], + + }, + "whitecotten": { + "name": "whitecotten", + "hp": 30, + "atc": 10, + "defense": 2, + "attacks": ["tackle", "10billon_volt", "downpour"], + "pool": [], + "miss_chance": 0, + "desc": "It is pokemon made of a lot of small clouds", + "lose_xp": 3, + "rarity": 1, + "types": ["flying", "electro"], + "evolve_poke": "", + "evolve_lvl": 30, + "initiative": 5, + "ico": [{ + "txt": r""" +╭ ⁀ ⁀ ╮ +(' ● ' ) +╰ ‿ ‿ ╯ + + """, + "esc": None}], + + }, + "pangsuni": { + "name": "pangsuni", + "hp": 30, + "atc": 10, + "defense": 2, + "attacks": ["tackle", "water_blast"], + "pool": [], + "miss_chance": 0, + "desc": "A Penguin pokes can be found in very cold place.", + "lose_xp": 3, + "rarity": 1, + "types": ["water", "normal"], + "evolve_poke": "", + "evolve_lvl": 30, + "initiative": 5, + "ico": [{ + "txt": r""" + -=(◕ ) + '.-.\ + /| |\ + _\_):_""", + "esc": None}], + + }, "steini": { "name": "Steini", "hp": 25, @@ -200,12 +273,12 @@ , .. . ...,..,.""", "esc": ["yellow"] - }, { + }, { "txt": r""" * *""", "esc": ["thicc", "red"] - }], + }], }, "gobost": { "name": "Gobost", @@ -855,7 +928,7 @@ \ /""", "esc": ["cyan"] - } + } ] }, "spikl": { @@ -887,7 +960,7 @@ \ /""", "esc": ["cyan"] - } + } ] }, "confuso": { @@ -1155,7 +1228,7 @@ . . . ' ' '""", - "esc": ["thicc", "blue"]} + "esc": ["thicc", "blue"]} ] }, "schmetterling": { @@ -1206,7 +1279,7 @@ ´ `""", - "esc": ["thicc", "blue"]} + "esc": ["thicc", "blue"]} ] }, "lil_nut": { @@ -1426,7 +1499,7 @@ // ''' \\ W W""", "esc": None}] - }, + } } if __name__ == "__main__":