From 8b67572ad7e1508341345dc46a2597e9fa170cbb Mon Sep 17 00:00:00 2001 From: Rafael Marçalo Date: Thu, 5 Sep 2024 16:31:33 +0100 Subject: Removed invasive branding --- src/com/pkrandom/pokemon/Gen1Pokemon.java | 149 ++++++++++++++++++++++++++++++ 1 file changed, 149 insertions(+) create mode 100644 src/com/pkrandom/pokemon/Gen1Pokemon.java (limited to 'src/com/pkrandom/pokemon/Gen1Pokemon.java') diff --git a/src/com/pkrandom/pokemon/Gen1Pokemon.java b/src/com/pkrandom/pokemon/Gen1Pokemon.java new file mode 100644 index 0000000..af73feb --- /dev/null +++ b/src/com/pkrandom/pokemon/Gen1Pokemon.java @@ -0,0 +1,149 @@ +package com.pkrandom.pokemon; + +/*----------------------------------------------------------------------------*/ +/*-- Gen1Pokemon.java - represents an individual Gen 1 Pokemon. Used to --*/ +/*-- handle things related to stats because of the lack --*/ +/*-- of the Special split in Gen 1. --*/ +/*-- --*/ +/*-- Part of "Universal Pokemon Randomizer ZX" by the UPR-ZX team --*/ +/*-- Pokemon and any associated names and the like are --*/ +/*-- trademark and (C) Nintendo 1996-2020. --*/ +/*-- --*/ +/*-- The custom code written here is licensed under the terms of the GPL: --*/ +/*-- --*/ +/*-- This program is free software: you can redistribute it and/or modify --*/ +/*-- it under the terms of the GNU General Public License as published by --*/ +/*-- the Free Software Foundation, either version 3 of the License, or --*/ +/*-- (at your option) any later version. --*/ +/*-- --*/ +/*-- This program is distributed in the hope that it will be useful, --*/ +/*-- but WITHOUT ANY WARRANTY; without even the implied warranty of --*/ +/*-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --*/ +/*-- GNU General Public License for more details. --*/ +/*-- --*/ +/*-- You should have received a copy of the GNU General Public License --*/ +/*-- along with this program. If not, see . --*/ +/*----------------------------------------------------------------------------*/ + +import java.util.Arrays; +import java.util.List; +import java.util.Random; + +public class Gen1Pokemon extends Pokemon { + + public Gen1Pokemon() { + shuffledStatsOrder = Arrays.asList(0, 1, 2, 3, 4); + } + + @Override + public void copyShuffledStatsUpEvolution(Pokemon evolvesFrom) { + // If stats were already shuffled once, un-shuffle them + shuffledStatsOrder = Arrays.asList( + shuffledStatsOrder.indexOf(0), + shuffledStatsOrder.indexOf(1), + shuffledStatsOrder.indexOf(2), + shuffledStatsOrder.indexOf(3), + shuffledStatsOrder.indexOf(4)); + applyShuffledOrderToStats(); + shuffledStatsOrder = evolvesFrom.shuffledStatsOrder; + applyShuffledOrderToStats(); + } + + @Override + protected void applyShuffledOrderToStats() { + List stats = Arrays.asList(hp, attack, defense, special, speed); + + // Copy in new stats + hp = stats.get(shuffledStatsOrder.get(0)); + attack = stats.get(shuffledStatsOrder.get(1)); + defense = stats.get(shuffledStatsOrder.get(2)); + special = stats.get(shuffledStatsOrder.get(3)); + speed = stats.get(shuffledStatsOrder.get(4)); + } + + @Override + public void randomizeStatsWithinBST(Random random) { + // Minimum 20 HP, 10 everything else + int bst = bst() - 60; + + // Make weightings + double hpW = random.nextDouble(), atkW = random.nextDouble(), defW = random.nextDouble(); + double specW = random.nextDouble(), speW = random.nextDouble(); + + double totW = hpW + atkW + defW + specW + speW; + + hp = (int) Math.max(1, Math.round(hpW / totW * bst)) + 20; + attack = (int) Math.max(1, Math.round(atkW / totW * bst)) + 10; + defense = (int) Math.max(1, Math.round(defW / totW * bst)) + 10; + special = (int) Math.max(1, Math.round(specW / totW * bst)) + 10; + speed = (int) Math.max(1, Math.round(speW / totW * bst)) + 10; + + // Check for something we can't store + if (hp > 255 || attack > 255 || defense > 255 || special > 255 || speed > 255) { + // re roll + randomizeStatsWithinBST(random); + } + } + + @Override + public void copyRandomizedStatsUpEvolution(Pokemon evolvesFrom) { + double ourBST = bst(); + double theirBST = evolvesFrom.bst(); + + double bstRatio = ourBST / theirBST; + + hp = (int) Math.min(255, Math.max(1, Math.round(evolvesFrom.hp * bstRatio))); + attack = (int) Math.min(255, Math.max(1, Math.round(evolvesFrom.attack * bstRatio))); + defense = (int) Math.min(255, Math.max(1, Math.round(evolvesFrom.defense * bstRatio))); + speed = (int) Math.min(255, Math.max(1, Math.round(evolvesFrom.speed * bstRatio))); + special = (int) Math.min(255, Math.max(1, Math.round(evolvesFrom.special * bstRatio))); + } + + @Override + public void assignNewStatsForEvolution(Pokemon evolvesFrom, Random random) { + double ourBST = bst(); + double theirBST = evolvesFrom.bst(); + + double bstDiff = ourBST - theirBST; + + // Make weightings + double hpW = random.nextDouble(), atkW = random.nextDouble(), defW = random.nextDouble(); + double specW = random.nextDouble(), speW = random.nextDouble(); + + double totW = hpW + atkW + defW + specW + speW; + + double hpDiff = Math.round((hpW / totW) * bstDiff); + double atkDiff = Math.round((atkW / totW) * bstDiff); + double defDiff = Math.round((defW / totW) * bstDiff); + double specDiff = Math.round((specW / totW) * bstDiff); + double speDiff = Math.round((speW / totW) * bstDiff); + + hp = (int) Math.min(255, Math.max(1, evolvesFrom.hp + hpDiff)); + attack = (int) Math.min(255, Math.max(1, evolvesFrom.attack + atkDiff)); + defense = (int) Math.min(255, Math.max(1, evolvesFrom.defense + defDiff)); + speed = (int) Math.min(255, Math.max(1, evolvesFrom.speed + speDiff)); + special = (int) Math.min(255, Math.max(1, evolvesFrom.special + specDiff)); + } + + @Override + protected int bst() { + return hp + attack + defense + special + speed; + } + + @Override + public int bstForPowerLevels() { + return hp + attack + defense + special + speed; + } + + @Override + public double getAttackSpecialAttackRatio() { + return (double)attack / ((double)attack + (double)special); + } + + @Override + public String toString() { + return "Pokemon [name=" + name + ", number=" + number + ", primaryType=" + primaryType + ", secondaryType=" + + secondaryType + ", hp=" + hp + ", attack=" + attack + ", defense=" + defense + ", special=" + special + + ", speed=" + speed + "]"; + } +} -- cgit v1.2.3