「
I'm Jess
A Software Engineer & Linux Enthusiast
Check Out My Portfolio
」
An online multi-player Pokemon RPG with in-depth battling, trading, map exploration, real-time chatting, and more.
License: MIT License
「
I'm Jess
A Software Engineer & Linux Enthusiast
Check Out My Portfolio
」
Pokémon Abilities need to be implemented into the battle system to promote creativity and unique battle strategies.
Some abilities do the same thing as other abilities, allowing these abilities to execute the same logic.
Ability | Description | Reason |
---|---|---|
Ball Fetch | Retrieves a Poké Ball from a failed throw. | Absolute does not use Poké Balls in battle. |
Battle Bond | Transform into Ash-Greninja after causing opponent to faint. | Forme changes are optional, permanent evolutions outside of battle. |
Curious Medicine | Resets all stat changes upon entering battlefield. | Absolute uses a 1v1 battle format, rendering this Ability useless. |
Flower Veil | Prevents lowering of ally Grass-type Pokémon's stats. | Absolute uses a 1v1 battle format, rendering this Ability useless. |
Forecast | Castform transforms with the weather. | Forme changes are optional, permanent evolutions outside of battle. |
Friend Guard | Reduces damage done to allies. | Absolute uses a 1v1 battle format, rendering this Ability useless. |
Healer | May heal an ally's status conditions. | Absolute uses a 1v1 battle format, rendering this Ability useless. |
Honey Gather | The Pokémon may gather Honey from somewhere. | Canonically, this ability has no effect inside of battle. |
Hunger Switch | Changes forms each turn. | Forme changes are optional, permanent evolutions outside of battle. |
Illuminate | Raises the likelihood of meeting wild Pokémon. | Canonically, this ability has no effect inside of battle. |
Minus | Powers up allied Pokémon with the Plus or Minus Ability. | Absolute uses a 1v1 battle format, rendering this Ability useless. |
Pickup | Grants a chance to pick-up items outside of battle. | Canonically, this ability has no effect inside of battle. |
Plus | Powers up allied Pokémon with the Plus or Minus Ability. | Absolute uses a 1v1 battle format, rendering this Ability useless. |
Power Construct | Changes the Pokémon's forme under certain HP thresholds. | Forme changes are optional, permanent evolutions outside of battle. |
Power of Alchemy | Replaces this ability with the ability of an Ally when it faints in battle. | Absolute uses a 1v1 battle format, rendering this Ability useless. |
Power Spot | Just being next to the Pokémon powers up moves. | Increases the power of allied Pokémon. |
Pressure | The Pokémon raises the foe's PP usage. | The current battle system does not use PP. |
Receiver | Inherits an ally's ability when it faints. | Absolute uses a 1v1 battle format, rendering this Ability useless. |
Run Away | Enables a sure getaway from wild Pokémon. | Wild battles in Absolute will already guarantee a 100% flee success rate. |
Schooling | Changes Wishiwashi to School Form. | Forme changes are optional, permanent evolutions outside of battle. |
Shields Down | Various effects depending on the Pok*eacute;mon's active forme. | Forme changes are optional, permanent evolutions outside of battle. |
Soul-Heart | Raises Special Attack when an ally faints. | Absolute uses a 1v1 battle format, rendering this Ability useless. |
Stance Change | Changes form depending on moves used. | Forme changes are optional, permanent evolutions outside of battle. |
Steely Spirit | Powers up ally Pokémon's Steel-type moves. | Absolute uses a 1v1 battle format, rendering this Ability useless. |
Symbiosis | The Pokémon can pass an item to an ally. | Absolute uses a 1v1 battle format, rendering this Ability useless. |
Telepathy | Anticipates an ally's attack and dodges it. | Absolute uses a 1v1 battle format, rendering this Ability useless. |
Zen Mode | Changes form when HP drops below half. | Forme changes are optional, permanent evolutions outside of battle. |
All of the following moves are intended to be supported in the battle system.
With how large the codebase is, we may as well slowly work on implement testing.
I imagine this will be a relatively slow process, especially with how I'd prefer to resolve some of the currently open issues before working on this one.
Currently looking at Pest for PHP testing and Jest for TypeScript testing.
There are various weather effects that are possible in battle that alter the battle flow, and they need to be implemented.
Pokemon with the Overcoat (Ability) don't take damage from certain weather.
Weather effects need applied where applicable.
n
turns; decrement the turn count until weather falls offThe directory is pretty unorganized, where much of what lies within could serve as their own directory in the root file structure.
I propose a new, better file structure, which should be done after the completion of Issue #14, which would clear up the ./core/ajax
directory and render it unnecessary.
This update would require updating hyperlinks and PHP file requires across the entire code-base.
| absol
| battles
| clan
| core
|---- ajax
|---- classes
|---- functions
|---- required
| images
| js
| logs
| maps
| pages
| staff
| themes
The proposed update would move the ./clan
, ./maps
, and ./staff
directories into the ./pages
directory.
| absol -- ! moved to its own repository
| classes
| functions
| images
| js
| logs
| pages
|---- battles
|---- clan
|---- maps
|---- pokemon_center
|---- staff
|---- ...
| required -- ! ideally this would be renamed or something
| themes
Implement a "flag" system for moves, allowing for generalized logic to apply to moves given the flags that the move has.
Hand-rolling our own battle system - while being interesting and mostly fun - is tedious and prone to bugs due to missing unforeseen edge cases that aren't meant to happen.
We could instead roll a TS server using the @pkmn/sim
- and other @pkmn/*
packages as necessary - with custom server logic if needed. This will handle all battle logic for us and will be way quicker over websockets than the current battle system.
If we opt to go this route, the previous issues regarding the battle system (#6, #7, #8, #9, #10, #11, #12) can be closed.
Ideally we'll implement a map system similar to the map engine that the Gen 3 Pokémon games (Emerald, Ruby, and Sapphire).
A README will need created as a guide on how to create maps, and will cover layer naming, object layer naming, supported objects, and tilesets.
When a battle is created, cache unique data of the foe. Upon the battle being restarted, do a quick comparison of the battle creation cache to the unique data of the foe, and if the data is the same, use the cached data instead of performing additional (and unnecessary) database queries of the foe.
Currently, a simple check of the foe's roster hash should suffice.
if ( $_SESSION['Absolute']['Battle']['Foe']['Roster_Hash'] === $Foe['Roster_Hash'] )
{
// Use the existing session data to restart the battle.
}
else
{
// Use the data stored in $Foe to restart the battle.
}
To further organize the code-base, code regarding specific pages should be moved into the ./pages
directory, similar to how all of the code regarding the Pokemon Center lies in the ./pages/pokemon_center
directory.
Doing this would also benefit from some refactoring of the code for each page that would be moved to the ./pages
directory, where the new code would be organized as such:
./pages
|---- pokemon_center ## Feature Name
|---- ajax ## AJAX content, sent as JSON
|---- inventory.php
|---- moves.php
|---- nickname.php
|---- release.php
|---- roster.php
|---- functions ## PHP functions
|---- inventory.php
|---- moves.php
|---- nickname.php
|---- release.php
|---- roster.php
|---- js ## JS for handling client input
|---- ajax_functions.js
|---- inventory.js
|---- moves.js
|---- nickname.js
|---- release.js
|---- roster.js
|---- pages ## Base page templating
|---- inventory.php
|---- moves.php
|---- nickname.php
|---- release.php
|---- roster.php
In order to avoid setting all move properties on construct each time a distinct move class is instantiated (new $Move_Class())
, have all distinct move classes extend Move
instead of extend Battle
.
Currently, distinct move classes extend Battle
due to some distinct moves using Battle specific properties/methods (whoops), but should be refactored in a way to not need to be extended off of the main Battle class itself.
Current Structure
class MOVE_CLASS_NAME extends Battle
{
// properties, all set to null
public function __construct(Move $Move_Data)
{
// setting properties based on $Move_Data values
}
// move specific methods
}
Proposed Structure
class MOVE_CLASS_NAME extends Move
{
public function __construct(int $Move_ID, int $Slot)
{
parent::__construct();
}
// move specific methods
}
Create an installation script to handle setting up and configuring the server.
/src
/config
/
(.md, .sh, etc)Have the script do the following tasks:
It is assumed that you have cloned this repository before running the script.
./src
folder to the specified DIRECTORY./src
to NAMEabsolute
with username and password from prior prompts../DIRECTORY
./INIT_DATABASE
./INIT_DATABASE
*.sql
files in the directory and execute them through MySQL CLIusers
table for conveniencePotentially have the installation script clone and install both the in-game chat system and the discord bot?
Complete rewrite of the current README.md to provide information on how to set-up a local and dedicated/remote server, as well as information on how to CONTRIBUTE.md and LICENSE information.
An issue to conglomerate all necessary things that need to be completed for an operable (and mostly complete) battle system.
A list of all abilities that need programmed can be found in issue #23.
There is no active issue depicting all moves that need programmed.
An issue for this (similar to issue #23 where there is a list of Pokémon abilities) may still be created.
Currently, moves are being programmed by referencing the absolute
.moves
database table.
A list of all held items that need programmed can be found in issue #28.
These are items that have both an active and passive effect on the holder or the enemy (typically upon making contact w/ the holder), and some of these items are consumed upon use.
There is no active issue depicting all items that may be used during battle.
An issue for this (similar to issue #23 where there is a list of Pokémon abilities) may still be created.
There is no active issue depicting all items that may be used during battle.
An issue for this (similar to issue #23 where there is a list of Pokémon abilities) may still be created.
Should contain necessary settings for the user.
These are held-items, and their respective effects, that need to be programmed.
A lot of the items that need their logic implemented can re-use the same logic of other items.
Absolute Chat has a pretty messy code-base and could use a refactor while also being updated into TypeScript.
Organize the server-side code (located in ./Absol) into modules (./Absol/modules/*.tsx).
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.