The Indigo Meta

Approved by Ludicrousity

The Indigo Meta

Welcome to the Indigo Meta! this mod does something different than most pet mods; it goes back in time to a point where items and abilities didn't exist, where speed was your critical rate, where the huge power creep of later gens didn't exist yet. Yep, it's Gen 1, and a mod made to balance the whole thing filled with glitches and other crap out! Most changes will be done by me, but if one makes a cool enough change, it might get implemented! (though this will be done on a case by case process)

Ghost does special damage. Dragon does physical damage

Psychic is weak to, and is resisted by Bug and Ghost

Rock
and Ice resist Dragon

Fire
resists Ice

Poison
and Bug are neutral each other

Fighting is immune to Ghost

Mega Drain and Leech Life have their power increased to 70

Night Shade is now a 75 BP move with no additional effects

Sludge has its base power increased to 75

Razor Wind is a Flying-Type move with 100% accuracy and has no additional effects

Strength is a Fighting-Type move

Double-Edge has 120 BP like later gens.

Petal Dance acts like a Grass-Type Psychic, having 90 BP and the same chance to lower special by one stage

Dragon Rage is a 95 BP move with no additional effects

Fire Spin only burns the target and does no damage

Clamp and Wrap trap the opponent

Constrict harshly lowers Speed by 2 stages and deals no damage

Focus Energy is no longer bugged and multiplies the user's critical rate by 3

Roar applies the X Accuracy effect to the user (basically all moves used by the user always hit until it switches out)

Whirlwind removes the effects of Mist, Substitute, Light Screen, and Reflect from the opponent's side of the field and Trapping from the user's side.

Growth raises Attack and Special by 1 stage

Teleport switches the user out for a Pokemon of choice (ignoring trapping). Fails if the user is the only one left

Haze only resets stat changes

Mist prevents status conditions on the user's side for 5 turns (Basically Safeguard from later generations) and heals it's user of any status condition. It, Light Screen, and Reflect also last when the user switches out

Leech Seed drains and heals 1/8 HP instead of 1/16

Psywave lowers the opponents special by two stages and does no damage

Screech has 100% accuracy

Jump Kick has 75 BP. High Jump Kick has 105 BP

Fly has 100 BP. It and Dig no longer have that paralysis-related glitch

Fire Punch, Ice Punch, Thunder Punch, Crabhammer, and Waterfall all are considered physical instead of special

Solar Beam and Sky Attack have 200 BP (They still need to charge)

Dream Eater has 200 BP (It still requires the opponent to be sleeping)

Thunder and Blizzard have 75% accuracy

(stat format is HP/Attack/Defense/Speed/Special)
(unless specified, these moves apply to their pre-evolutions too.)


100 / 80 / 70 / 70 / 110
+ Petal Dance, + Sludge, + Earthquake (prior evos don't get Earthquake)


70 / 80 / 70 / 110 / 100
+ Rock Slide, + Razor Wind, + Roar, + Whirlwind, + Fire Punch (prior evos don't get Razor Wind or Whirlwind)


70 / 80 / 110 / 70 / 100
+ Haze, + Mist, + Clamp, + Rock Slide


+ 10 Attack, + 10 Special
+ Leech Life, + Night Shade, + Growth (prior evos don't get any of these)


+10 Attack, + 10 Speed
+ Leech Life, + Sludge (prior evos don't get any of these)


+10 Speed
+ Jump Kick (prior evos don't get this)


+ Screech


+ Focus Energy


+ 10 Attack, + 15 Special
+ Sludge, + Leech Life, + Night Shade, + Haze, + Constrict, + Bind, + Super Fang (prior evos don't get Night Shade)


+10 Speed
+ Thunder Punch, + Jump Kick, + Screech (prior evos don't get Jump Kick or Screech)


+ Defense Curl, + Leech Life (prior evos don't get Leech Life)


+ 10 Attack, + 10 Special
+ Sludge


+10 Special
+ Soft-Boiled, + Night Shade


+10 Speed
+ Psychic, + Night Shade, + Psywave, + Solar Beam


+ 30 Special
+ Amnesia


+ Sludge, + Super Fang


+10 Special
+ Sludge, + Growth, + Leech Seed


+ Poison Powder, + Leech Seed


70 / 90 / 60 / 90 / 75
+ Sludge, + Night Shade, + Agility (prior evos don't get Night Shade or Agility)


+ 20 Attack
+ Screech


+ 10 Special
+ Hypnosis


+ 10 Special
+ Psychic, + Night Shade, + Psywave, + Mist


Nothing at the moment.


+ 10 Special
+ Fire Spin, + Earthquake, + Strength (prior evos don't get Earthquake or Strength)


+10 Attack, + 10 Special


+ Night Shade


+ 10 Special


+ Sludge, + Leech Life, + Constrict (prior evos don't get Leech Life)


+ Sludge, + Night Shade, + Haze


Nothing at the moment.


+ 10 Special
+ Earthquake, + Jump Kick (prior evos don't get Earthquake)


+ Clamp


+ Psychic


+30 Attack


+10 Speed
+ Jump Kick


Nothing at the moment.

+ 10 Special
+ Rock Slide, + Night Shade, + Recover


Nothing at the moment.


+ Sludge


+ 50 Attack
+ Constrict, + Wrap, + Sharpen, + Glare


+ Amnesia


+ Rock Slide, + Strength


+ Night Shade


Nothing at the moment.


+ 50 Attack
+ Rock Slide


+ 20 Speed, + 10 Special
+ Rock Slide


+ 20 Special, + 10 Defense


+10 Special
+ Constrict, + Bind


+ Poison Gas


+ Roar


Nothing at the moment.


+ Leech Seed, + Constrict, + Wrap, + Amnesia


+ 30 Special
+ Focus Energy


+ Focus Energy


+ Swords Dance, + Quick Attack


Nothing at the moment.


Nothing at the moment.


+ 5 Speed
+ Leech Life, + Razor Wind


+ Night Shade


+ 10 Special
+ Ice Punch, + Fire Punch, + Meditate


+10 Special
+ Solar Beam, + Thunder Punch, + Screech


+ Leech Life, + Earthquake, + Rock Slide
No longer learns Bind


Nothing at the moment.


+ Razor Wind (If it ends up being broken, I can simply remove it)


Nothing at the moment.


+ 20 HP, + 50 Speed


+ Soft-Boiled, + Night Shade (prior evos don't get Soft-Boiled)


+ Night Shade


+ Strength, + Earthquake, + Swords Dance, + Night Shade (prior evos don't get any of these)


+ 10 Special


+ Earthquake, + Rock Slide, + Clamp


+ Rock Slide, + Leech Life


+ Rock Slide, + Roar


Nothing at the moment.


+ 5 Attack
+ Surf


Nothing at the moment.


+ Focus Energy, + Solar Beam


+ Rock Slide, + Earthquake, + Roar (prior evos don't get any of these)


Nothing at the moment. (Still banned)


Nothing at the moment. (also banned)


55 / 108 / 107 / 45 / 136
Ghost / Ice (The only type change in the entire meta)
01-Night Shade
01-Disable
01-Haze
01-Light Screen
TM02-Razor Wind
TM06-Toxic
TM11-Bubble Beam
TM12-Water Gun
TM13-Ice Beam
TM14-Blizzard
TM15-Hyper Beam
TM20-Rage
TM22-Solar Beam
TM24-Thunderbolt
TM25-Thunder
TM29-Psychic
TM30-Teleport
TM31-Mimic
TM32-Double Team (Still illegal)
TM33-Reflect
TM34-Bide
TM39-Swift
TM43-Sky Attack
TM44-Rest
TM45-Thunder Wave
TM46-Psywave
TM49-Tri Attack
TM50-Substitute
HM05-Flash

Poison does 1/8 HP instead of 1/16 (Burn still does 1/16)

Toxic Poisoning does not revert to regular Poison upon switching out

Moves with 100% accuracy do not have a 1/256 chance of missing

HP recovery works at all values

Sleep lasts for only 3 turns max

Pokemon have a 1/8 chance of being thawed each turn it is frozen

Team Preview will be present
 
Last edited:
since Poison is still Physical, I'm not sure if lowering Venusaur's attack is a great idea.

Since the only Ghost-type is also Poison-type, I would suggest making Bug resist Psychic as well, if you want Psychic to be resisted by things that aren't themselves Psychic.
 
why not remove the physical/special categorizations altogether
Normal-Type Pokemon are mostly physically oriented. The only relevant Normal-Type not physically oriented is Chansey, which if you've seen an analysis, is doing just fine with Thunderbolt/Ice Beam.

Every Fighting-Type is physically oriented. I wouldn't make a special Fighting-Type move just for coverage on some Pokemon.

The only specially oriented Flying-Types are the legendary birds, which have reasonable attack stats to use Flying-Type move on (and Zapdos commonly runs Drill Peck in real RBY OU). The rest are either physically oriented, or are horrible.

Specially-oriented Poison-Types exist, but either have their own ways of using Poison-Type moves (Venusaur, Vileplume, and Tentacruel have access to Swords Dance, even if it would be rare, and Victreebel has a good enough attack stat to use it off of), or in the case of Gengar, wouldn't want the STAB even if they got it. Venemoth's stats were edited so that's a non-issue.

Every Ground-Type is physically oriented. I wouldn't make a special Ground-Type move just for coverage on some Pokemon.

Omastar is the only Rock-Type not physically-oriented. I wouldn't make an exception for one Pokemon.

Most Bug-Types are physically oriented. The only one in this meta that isn't is Butterfree which despite the minor buffs I gave it, it would never be able to compete with Scyther.

There's only one Ghost-Type and it's specially oriented. Similar case with the Dragon-Type

The physically oriented Fire-Types that exist either have a usable special to use Fire-Type moves off of, or suck. Though I might make an exception for Fire Punch to work off the user's attack stat for the sake of buffing Hitmonchan.

There's only two Water-Types that want physical STAB and don't already have a usable special to use them; Kingler and Seaking. They both get a signature move so I could also make that exception for Crabhammer and Waterfall to work off the user's attack stat.

Most Grass-Types have enough special to use Grass-Type moves off of. The only one that doesn't is Parasect (but even that could be considered a stretch (95 vs 80). Not that it matters since I don't expect any usage of Parasect any time soon.)

Every Electric-Type has enough special to use Electric-Type moves off of. Though I might make an exception for Thunder Punch to work off the user's attack stat for the sake of buffing Hitmonchan.

Every Psychic-Type is specially-oriented. Ill leave it at that

Every Ice-Type has enough special to use Ice-Type moves off of. Though I might make an exception for Ice Punch to work off the user's attack stat for the sake of buffing Hitmonchan.
 
Since the only Ghost-type is also Poison-type, I would suggest making Bug resist Psychic as well, if you want Psychic to be resisted by things that aren't themselves Psychic.
That'll be on the list of changes for an update (I'll wait for more suggestions before I implement)

this is why I needed people to find loopholes.
 
Big update (It's been a while):
since Poison is still Physical, I'm not sure if lowering Venusaur's attack is a great idea
Updated to 70 Def and 80 Atk (The lowered defense should* be fine. If there's any calculations that 100/70 over 100/80 would affect, bring them up)

With that out of the way:
Bug resists Psychic so that something non-psychic resists it

That's the only type change

I have no idea what I was thinking when I made Clamp. It now traps the opponent (as in they just can't switch). Wrap also does this, and Constrict now harshly lowers speed by 2 stages.

Roar applies the X Accuracy effect to the user (basically all moves used by the user always hit until it switches out

Whirlwind removes the effects of Mist, Substitute, Light Screen, and Reflect from the opponent's side of the field

Growth raises Attack and Special by 1 stage

Teleport switches the user out for a mon of choice (ignoring trapping). Fails if the user is the only one left

Haze only resets stat changes

Mist prevents status conditions on the user's side for 5 turns (Basically Safeguard from later generations). It, Light Screen, and Reflect also last when the user switches out.

Leech Seed drains and heals 1/8 HP instead of 1/16

Psywave lowers the opponents special by two stages.

Screech has 100% accuracy

Jump Kick has 75 BP. High Jump Kick has 100 BP

Fly has 100 BP. It and Dig no longer have that game-breaking glitch.

Fire Punch, Ice Punch, Thunder Punch, Crabhammer, and Waterfall all are considered physical instead of special

(stat format is HP/Atk/Def/Spd/Spc)
All Pokemon still have their natural movepool unless stated otherwise.

100 / 80 / 70 / 70 / 110


+ Fire Punch, + Roar, + Whirlwind


+ Mist, + Clamp


+ Jump Kick


+ Screech


+ Focus Energy


+ Haze, + Constrict, + Bind (Keep in mind it still has the unable to move effect. It'll help a mon who has horrible stats otherwise)


+ Thunder Punch, + Jump Kick, + Screech


+ Leech Life


+ Psywave


+ Super Fang


+ Leech Seed


+ Leech Seed, + Poison Powder


+20 Attack
+ Screech


+ Mist, + Amnesia


+ Constrict


+ Haze


- Strength, + Jump Kick


+ Clamp


+ Psychic


+ Wrap, + Constrict


+ Rock Slide, + Strength


+ Night Shade


+ Bind, + Constrict


+ Roar


+ Leech Seed, + Constrict, + Wrap


+ Night Shade


+ Clamp

Poison does 1/8 HP instead of 1/16 (Burn still does 1/16)

These new changes will (eventually) get into the OP. Other than that, have fun therymoning new sets!
BTW, has anyone noticed the reference I made with what Pokemon sprites are present in the op's banner-like thing?
 
I love the changes here so far! Having a hard time thinking of anything else to suggest, so Im gonna post some sets instead.

Parasect
- Growth
- Spore
- Leech Life / Hyper Beam
- Mega Drain
OR
Venusaur
-Growth
-Sleep Powder
-Mega Drain
-Sludge / Earthquake / Hyper Beam

Since most things with High defense are weak to Grass, Growth cleaners can blow away slower or weakened teams with relative ease once there is no flying types on the opposing team.

Jolteon
- Focus Energy
- Pin Missile
- Double Kick
- Thunderbolt

Focus Energy gives Jolteon ~ 76% chance to crit on its attacks. Pin Missile gets you past the Grass types that resist your STAB, and Double Kick can crush the Rock/Grounds that are immune to Tbolt.

The biggest question I have is when can I play this?
 
This thread is relatively inactive, and I like the idea behind this pet mod, so I'm curious enough to ask a few questions.

1) Blizzard in Gen 1 is a 110 BP, 90% accuracy move in Gen 1. Are you going to revert it to its 70% accuracy like in the later games? If not, do you wish to improve the accuracy of Thunder, which if I remember correctly, is an Electric-type Blizzard but with 70% accuracy instead? (This one I'm not too sure if it's correct, so forgive me if so)

2) Psywave's effect of dropping Special by two stages seem incredibly painful to deal with for any opponent. Does the effect just have a small chance of occurring, or is it intentionally 100% chance. If it is the former, what is the percentage of this occurring?

Edit: 3) Do you intend to give all Fire-type pokemon who only got access to Solar Beam in later gens to receive them here too? I'm asking this as I noticed both Ninetails and Moltres has access to this move, while Charizard, Arcanine and Rapidash did not, even though I remember them all having access to this move by Gen 4.

Edit: 4) Am I correct to assume Bug still hits Poison super effectively in this meta, just like back in Gen 1, or is that not included here? This is as if I recall correctly, Bug type moves hit Grass/Poison types 4x super effectively, allowing Jolteon to get pass Venusaur and the likes back in the pass due to his access to Pin Missile. (I could be wrong here, which in that case please alert me)

I'm new to Pet Mods in general, so apologies if you're annoyed at my sudden questions. I'm just curious.
 
Last edited:

Yung Dramps

awesome gaming
Let's get a few more changes in and actually get this thing playable. Only then will it have my permission to die.

The current change list looks alright, but I still feel there are a few loose ends to tie up.
172207

+40 HP and Speed
OR
+60 HP
Reason: It's Ditto, and we can't give it Impostor since abilities don't exist, so why not beef up its Speed and/or HP stats so it can actually make use of its gimmick?

172208

+Razor Wind, Fly
Reason: mmmmm YUMMY FLYING STAB

172209

+80 Attack, Sharpen
Reason: Fuck it. It's a colossal rock snake, it SHOULD hit like a train. It still has ass Special and middling Speed, so I doubt it'll be broken in any capacity.

172210

+5 special (on top of current buff), +20 Defense, +20 Attack, +Amnesia
Reason: An Amnesia BlizzBolt user with better Special than Snorlax and Recover? I'd buy that for a dollar.

172213

+Fire Punch, Thunder Punch, Ice Punch
Reason: It gets these moves in later gens and could use a boost to its physical movepool now that it can't rely on Wrap cheese anymore.

172214

+55 Attack, Fire Punch, Thunder Punch, Ice Punch, Rock Slide
Reason: A proper Psychic type mixed attacker? That'll definitely set it aside from Alakazam. Chansey boutta catch these hands!

As for moves, give Double-Edge 120 BP. That's about it, really.
 
Last edited:
This thread is relatively inactive, and I like the idea behind this pet mod, so I'm curious enough to ask a few questions.

1) Blizzard in Gen 1 is a 110 BP, 90% accuracy move in Gen 1. Are you going to revert it to its 70% accuracy like in the later games? If not, do you wish to improve the accuracy of Thunder, which if I remember correctly, is an Electric-type Blizzard but with 70% accuracy instead? (This one I'm not too sure if it's correct, so forgive me if so)
I actually meant to lower it's accuracy. I was thinking either 75% or 80% should be okish.
2) Psywave's effect of dropping Special by two stages seem incredibly painful to deal with for any opponent. Does the effect just have a small chance of occurring, or is it intentionally 100% chance. If it is the former, what is the percentage of this occurring?
I built it as a status move lowering special by two stages (thought that would be better than raising special because switching could revert it. It can be nerfed to only one if necesary.)
Edit: 3) Do you intend to give all Fire-type pokemon who only got access to Solar Beam in later gens to receive them here too? I'm asking this as I noticed both Ninetails and Moltres has access to this move, while Charizard, Arcanine and Rapidash did not, even though I remember them all having access to this move by Gen 4.
The fact that a few of them lacked Solar Beam was intentional. Though thanks for reminding me that I wanted to give Magmar the move.
Edit: 4) Am I correct to assume Bug still hits Poison super effectively in this meta, just like back in Gen 1, or is that not included here? This is as if I recall correctly, Bug type moves hit Grass/Poison types 4x super effectively, allowing Jolteon to get pass Venusaur and the likes back in the pass due to his access to Pin Missile. (I could be wrong here, which in that case please alert me)

I'm new to Pet Mods in general, so apologies if you're annoyed at my sudden questions. I'm just curious.
This one I changed so that they were only neutral against each other. Bug still hits Grass/Poison Super-Effectively, but only as a regular weakness.
Let's get a few more changes in and actually get this thing playable. Only then will it have my permission to die.

The current change list looks alright, but I still feel there are a few loose ends to tie up.
View attachment 172207
+40 HP and Speed
OR
+60 HP
Reason: It's Ditto, and we can't give it Impostor since abilities don't exist, so why not beef up its Speed and/or HP stats so it can actually make use of its gimmick?
Good catch there. I almost forgot about this one. how does 98 Speed (+50) sound?
View attachment 172208
+Razor Wind, Fly
Reason: mmmmm YUMMY FLYING STAB
Reason I didn't do this is that Scyther already learns Razor Wind, so I didn't specify that (unlike Charizard who actually doesn't learn Razor Wind)
View attachment 172209
+80 Attack, Sharpen
Reason: Fuck it. It's a colossal rock snake, it SHOULD hit like a train. It still has ass Special and middling Speed, so I doubt it'll be broken in any capacity.
Sharpen would be a good addition, but probably with less attack. (around 100 probably instead of the suggested 125) Possible Glare inclusion to the movepool to make up for it?
View attachment 172210
+5 special (on top of current buff), +20 Defense, +20 Attack, +Amnesia
Reason: An Amnesia BlizzBolt user with better Special than Snorlax and Recover? I'd buy that for a dollar.
If I went and did this to a Normal, I would probably pick Clefable or Wigglytuff for this role. (most likely the later. Recovery inclusion could break it for Clef and Pory) Though I might be willing to make Conversion into another move (possibly similar to Conversion 2, but for the STAB combo only instead of the recent move) to make up for other shortcomings.
View attachment 172213
+Fire Punch, Thunder Punch, Ice Punch
Reason: It gets these moves in later gens and could use a boost to its physical movepool now that it can't rely on Wrap cheese anymore.
Possibly, but Dragon Rage is now an actual dragon attack that is physical and is only resisted by Rock (it has Earthquake, or at least I planned to give it the move) and Ice. (and planned to give it Rock Slide as well) Plus 100 Special is ok when it's in a meta where 100 is "above-average" and in one where EVs and Natures are absent. Ill consider it
View attachment 172214
+55 Attack, Fire Punch, Thunder Punch, Ice Punch, Rock Slide
Reason: A proper Psychic type mixed attacker? That'll definitely set it aside from Alakazam. Chansey boutta catch these hands!
An idea to consider. Not sure on it yet, but definitely not declining it. (There wouldn't be Rock Slide, but the elemental punches would be)
As for moves, give Double-Edge 120 BP. That's about it, really.
Also a good catch. Thanks for that.
 

Yung Dramps

awesome gaming
Reason I didn't do this is that Scyther already learns Razor Wind, so I didn't specify that (unlike Charizard who actually doesn't learn Razor Wind)
Screenshot 2019-04-24 at 9.13.08 PM.png

Nope, it actually doesn't. If it does, it's not available on Showdown. I can see why you would make that mistake though. It's a weird omission for sure...

Sharpen would be a good addition, but probably with less attack. (around 100 probably instead of the suggested 125) Possible Glare inclusion to the movepool to make up for it?
Glare sounds dank, I'll take that over being slightly less strong. I think this would actually make it the only Rock or Ground type that can paralyze things! That's a cool niche for sure.
 
View attachment 172254
Nope, it actually doesn't. If it does, it's not available on Showdown. I can see why you would make that mistake though. It's a weird omission for sure...
*A whistling sound plays as this user silently add the move into the movepool*
Glare sounds dank, I'll take that over being slightly less strong. I think this would actually make it the only Rock or Ground type that can paralyze things! That's a cool niche for sure.
Ok then + 50 Attack and Glare addition it is.
 
Yay, this thread is alive again! A few questions just out of curiosity.

1) What is your buffing (or nerfing if you want to) philosophy when it comes to this metagame? Or more exactly, what kind of metagame do you want to build? Do you prefer a metagame where every mons has about the same viability, or have a metagame where there is a dozen or less top dogs and the rest of the metagame built around them?

2) Some Pokemon just look like they can shine if only some other Pokemon didn't do them better. A few examples of my head are Parasect with that horrifying typing (A Psychic resist can't save that), Magmar, which will realistically never see light over Ninetails or Moltres, and Dragonite, which while looks good on paper, fights brutal competition with Charizard which can boost, Aerodactyl, which has a fast enough speed to make Alakazam look slow, and Gyarados, with can also run mixed sets. do you have an idea on how to distinguish them?

3) Correct me if I'm wrong, but some combos seem insane, such as Roar (which gives perfect accuracy until you switch here) and Horn Drill, on something like Rhydon, it could be threatening if it manages to paralyse everyone on the opposing team, just as a note.

Love the idea of this metagame, I'd love for this metagame to see more activity.
 
Sorry for the kinda late response, but...
Yay, this thread is alive again! A few questions just out of curiosity.

1) What is your buffing (or nerfing if you want to) philosophy when it comes to this metagame? Or more exactly, what kind of metagame do you want to build? Do you prefer a metagame where every mons has about the same viability, or have a metagame where there is a dozen or less top dogs and the rest of the metagame built around them?
I want to lean away from top dogs since Gen 1 base already has them, while at the same time, I fully acknowedge that not all of the mons will have the same viability. Some will definitely be worse than others (hi Butterfree. You're probably doomed) so I imagine a possible UU version could be made if enough support is given.
2) Some Pokemon just look like they can shine if only some other Pokemon didn't do them better. A few examples of my head are Parasect with that horrifying typing (A Psychic resist can't save that),
I definitely agree that a Psychic resist doesn't save a crappy typing. I'm not even sure a 10+ to HP and Special will save that either. (or Leech Seed or Spore or Growth) Ill add the buff anyway to help it a bit
Magmar, which will realistically never see light over Ninetails or Moltres,
I really can't think of a way to make Magmar interesting other than Thunder Punch inclusion to give it a unique coverage move along with Rock Slide for more coverage and Focus Energy for something helpfull. Even with an attack buff to 105, it still probably wouldn't do much.
and Dragonite, which while looks good on paper, fights brutal competition with Charizard which can boost, Aerodactyl, which has a fast enough speed to make Alakazam look slow, and Gyarados, with can also run mixed sets. do you have an idea on how to distinguish them?
Dragonite has Agility speaking of boosting I could buff Dragon Rage to 95 BP from 80 BP so that it works more as a "spammable STAB move with few resistances" kind of move, and remove the Dragon Resistance Ice has. Aerodactyl probably needs a nerf in it's current state anyway (probably a removal of Earthquake)

But I do see where you some from. I do have worries that other not mentioned like Vaporeon (could be given Recover to help), Electabuzz, (giving it the other Punches gives it Ice/Electric coverage, unique for it's typing) and Kangaskhan. (I wonder if I could change the stats so that it acts as a mix of Tauros and Snorlax. Possible +30 Special could help?)
3) Correct me if I'm wrong, but some combos seem insane, such as Roar (which gives perfect accuracy until you switch here) and Horn Drill, on something like Rhydon, it could be threatening if it manages to paralyse everyone on the opposing team, just as a note.

Love the idea of this metagame, I'd love for this metagame to see more activity.
OKHO Clause will remain, so that's fine.
 
someone p l e a s e help code this plsplsplsplspls
Late, but I started attempts:
Code:
/*types*/
'use strict';

/**@type {{[k: string]: ModdedTypeData | null}} */
let BattleTypeChart = {
    "Bug": {
        damageTaken: {
            "Bug": 0,
            "Dragon": 0,
            "Electric": 0,
            "Fighting": 2,
            "Fire": 1,
            "Flying": 1,
            "Ghost": 0,
            "Grass": 2,
            "Ground": 2,
            "Ice": 0,
            "Normal": 0,
            "Poison": 0,
            "Psychic": 2,
            "Rock": 1,
            "Water": 0,
        },
    },
    "Fighting": {
        damageTaken: {
            "Bug": 2,
            "Dragon": 0,
            "Electric": 0,
            "Fighting": 0,
            "Fire": 0,
            "Flying": 1,
            "Ghost": 3,
            "Grass": 0,
            "Ground": 0,
            "Ice": 0,
            "Normal": 0,
            "Poison": 0,
            "Psychic": 1,
            "Rock": 2,
            "Water": 0,
        },
    },
    "Ghost": {
        damageTaken: {
            "Bug": 2,
            "Dragon": 0,
            "Electric": 0,
            "Fighting": 3,
            "Fire": 0,
            "Flying": 0,
            "Ghost": 1,
            "Grass": 0,
            "Ground": 0,
            "Ice": 0,
            "Normal": 3,
            "Poison": 2,
            "Psychic": 2,
            "Rock": 0,
            "Water": 0,
        },
    },
    "Ice": {
        damageTaken: {
            "Bug": 0,
            "Dragon": 1,
            "Electric": 0,
            "Fairy": 0,
            "Fighting": 1,
            "Fire": 1,
            "Flying": 0,
            "Ghost": 0,
            "Grass": 0,
            "Ground": 0,
            "Ice": 2,
            "Normal": 0,
            "Poison": 0,
            "Psychic": 0,
            "Rock": 1,
            "Water": 0,
        },
    },
    "Poison": {
        damageTaken: {
            psn: 3,
            tox: 3,
            "Bug": 1,
            "Dragon": 0,
            "Electric": 0,
            "Fighting": 2,
            "Fire": 0,
            "Flying": 0,
            "Ghost": 0,
            "Grass": 2,
            "Ground": 1,
            "Ice": 0,
            "Normal": 0,
            "Poison": 2,
            "Psychic": 1,
            "Rock": 0,
            "Water": 0,
        },
    },
    "Rock": {
        damageTaken: {
            "Bug": 0,
            "Dragon": 2,
            "Electric": 0,
            "Fighting": 1,
            "Fire": 2,
            "Flying": 2,
            "Ghost": 0,
            "Grass": 1,
            "Ground": 1,
            "Ice": 0,
            "Normal": 2,
            "Poison": 2,
            "Psychic": 0,
            "Rock": 0,
            "Water": 1,
        },
    },
    "Dark": null,
    "Steel": null,
};

exports.BattleTypeChart = BattleTypeChart;
Code:
/*Moves*/
'use strict';

/**@type {{[k: string]: ModdedMoveData}} */
let BattleMovedex = {
    absorb: {
        inherit: true,
        desc: "The user recovers 1/2 the HP lost by the target, rounded down. If this move breaks the target's substitute, the user does not recover any HP.",
        basepower: 30,
    },
    acid: {
        inherit: true,
        desc: "Has a 33% chance to lower the target's Defense by 1 stage.",
        shortDesc: "33% chance to lower the target's Defense by 1.",
        basepower: 50,
        secondary: {
            chance: 33,
            boosts: {
                def: -1,
            },
        },
        target: "normal",
    },
    amnesia: {
        inherit: true,
        desc: "Raises the user's Special by 2 stages.",
        shortDesc: "Raises the user's Special by 2.",
        boosts: {
            spd: 2,
            spa: 2,
        },
    },
    aurorabeam: {
        inherit: true,
        desc: "Has a 33% chance to lower the target's Attack by 1 stage.",
        shortDesc: "33% chance to lower the target's Attack by 1.",
        secondary: {
            chance: 33,
            boosts: {
                atk: -1,
            },
        },
    },
    barrage: {
        inherit: true,
        desc: "Hits two to five times. Has a 3/8 chance to hit two or three times, and a 1/8 chance to hit four or five times. Damage is calculated once for the first hit and used for every hit. If one of the hits breaks the target's substitute, the move ends.",
    },
    bide: {
        inherit: true,
        desc: "The user spends two or three turns locked into this move and then, on the second or third turn after using this move, the user attacks the opponent, inflicting double the damage in HP it lost during those turns. This move ignores type immunity and cannot be avoided even if the target is using Dig or Fly. The user can choose to switch out during the effect. If the user switches out or is prevented from moving during this move's use, the effect ends. During the effect, if the opposing Pokemon switches out or uses Confuse Ray, Conversion, Focus Energy, Glare, Haze, Leech Seed, Light Screen, Mimic, Mist, Poison Gas, Poison Powder, Recover, Reflect, Rest, Soft-Boiled, Splash, Stun Spore, Substitute, Supersonic, Teleport, Thunder Wave, Toxic, or Transform, the previous damage dealt to the user will be added to the total.",
        priority: 0,
        accuracy: true,
        ignoreEvasion: true,
        effect: {
            duration: 2,
            durationCallback(target, source, effect) {
                return this.random(3, 4);
            },
            onStart(pokemon) {
                this.effectData.totalDamage = 0;
                this.effectData.lastDamage = 0;
                this.add('-start', pokemon, 'Bide');
            },
            onHit(target, source, move) {
                if (source && source !== target && move.category !== 'Physical' && move.category !== 'Special') {
                    let damage = this.effectData.totalDamage;
                    this.effectData.totalDamage += damage;
                    this.effectData.lastDamage = damage;
                    this.effectData.sourcePosition = source.position;
                    this.effectData.sourceSide = source.side;
                }
            },
            onDamage(damage, target, source, move) {
                if (!source || source.side === target.side) return;
                if (!move || move.effectType !== 'Move') return;
                if (!damage && this.effectData.lastDamage > 0) {
                    damage = this.effectData.totalDamage;
                }
                this.effectData.totalDamage += damage;
                this.effectData.lastDamage = damage;
                this.effectData.sourcePosition = source.position;
                this.effectData.sourceSide = source.side;
            },
            onAfterSetStatus(status, pokemon) {
                // Sleep, freeze, and partial trap will just pause duration.
                if (pokemon.volatiles['flinch']) {
                    this.effectData.duration++;
                } else if (pokemon.volatiles['partiallytrapped']) {
                    this.effectData.duration++;
                } else {
                    switch (status.id) {
                    case 'slp':
                    case 'frz':
                        this.effectData.duration++;
                        break;
                    }
                }
            },
            onBeforeMove(pokemon, target, move) {
                if (this.effectData.duration === 1) {
                    if (!this.effectData.totalDamage) {
                        this.add('-fail', pokemon);
                        return false;
                    }
                    this.add('-end', pokemon, 'Bide');
                    let target = this.effectData.sourceSide.active[this.effectData.sourcePosition];
                    this.moveHit(target, pokemon, move, /** @type {ActiveMove} */ ({damage: this.effectData.totalDamage * 2}));
                    return false;
                }
                this.add('-activate', pokemon, 'Bide');
                return false;
            },
            onDisableMove(pokemon) {
                if (!pokemon.hasMove('bide')) {
                    return;
                }
                for (const moveSlot of pokemon.moveSlots) {
                    if (moveSlot.id !== 'bide') {
                        pokemon.disableMove(moveSlot.id);
                    }
                }
            },
        },
        type: "???", // Will look as Normal but it's STAB-less
    },
    bind: {
        inherit: true,
        desc: "The user spends two to five turns using this move. Has a 3/8 chance to last two or three turns, and a 1/8 chance to last four or five turns. The damage calculated for the first turn is used for every other turn. The user cannot select a move and the target cannot execute a move during the effect, but both may switch out. If the user switches out, the target remains unable to execute a move during that turn. If the target switches out, the user uses this move again automatically, and if it had 0 PP at the time, it becomes 63. If the user or the target switch out, or the user is prevented from moving, the effect ends. This move can prevent the target from moving even if it has type immunity, but will not deal damage.",
        shortDesc: "Prevents the target from moving for 2-5 turns.",
        ignoreImmunity: true,
        volatileStatus: 'partiallytrapped',
        self: {
            volatileStatus: 'partialtrappinglock',
        },
        // FIXME: onBeforeMove(pokemon, target) {target.removeVolatile('mustrecharge')}
        onHit(target, source) {
            /**
             * The duration of the partially trapped must be always renewed to 2
             * so target doesn't move on trapper switch out as happens in gen 1.
             * However, this won't happen if there's no switch and the trapper is
             * about to end its partial trapping.
             **/
            if (target.volatiles['partiallytrapped']) {
                if (source.volatiles['partialtrappinglock'] && source.volatiles['partialtrappinglock'].duration > 1) {
                    target.volatiles['partiallytrapped'].duration = 2;
                }
            }
        },
    },
    bite: {
        inherit: true,
        desc: "Has a 10% chance to flinch the target.",
        shortDesc: "10% chance to flinch the target.",
        secondary: {
            chance: 10,
            volatileStatus: 'flinch',
        },
        type: "Normal",
    },
    blizzard: {
        inherit: true,
        accuracy: 75,
        target: "normal",
    },
    bonemerang: {
        inherit: true,
        desc: "Hits twice. If the first hit breaks the target's substitute, the move ends.",
    },
    bubble: {
        inherit: true,
        desc: "Has a 33% chance to lower the target's Speed by 1 stage.",
        shortDesc: "33% chance to lower the target's Speed by 1.",
        basePower: 30,
        secondary: {
            chance: 33,
            boosts: {
                spe: -1,
            },
        },
        target: "normal",
    },
    bubblebeam: {
        inherit: true,
        desc: "Has a 33% chance to lower the target's Speed by 1 stage.",
        shortDesc: "33% chance to lower the target's Speed by 1.",
        secondary: {
            chance: 33,
            boosts: {
                spe: -1,
            },
        },
    },
    clamp: {
        inherit: true,
        desc: "Prevents the target from switching out.",
        accuracy: 100,
        pp: 10,
        onHit(target, source, move) {
            return target.addVolatile('trapped', source, move, 'trapper');
        },
        secondary: null,
        target: "normal",
    },
    cometpunch: {
        inherit: true,
        desc: "Hits two to five times. Has a 3/8 chance to hit two or three times, and a 1/8 chance to hit four or five times. Damage is calculated once for the first hit and used for every hit. If one of the hits breaks the target's substitute, the move ends.",
    },
    constrict: {
        inherit: true,
        accuracy: 100,
        basePower: 0,
        category: "Status",
        desc: "Lowers the target's Speed by 2 stage.",
        shortDesc: "Lowers the target's Speed by 2.",
        boosts: {
            spe: -2,
        },
    },
    conversion: {
        inherit: true,
        desc: "The user's type changes to match a type that resists or is immune to the type of the last move used by the target, but not either of its current types. The determined type of the move is used rather than the original type. Fails if the target has not made a move, if the user cannot change its type, or if this move would only be able to select one of the user's current types.",
        shortDesc: "Changes user's type to resist target's last move.",
        volatileStatus: 'conversion',
        accuracy: true,
        target: "normal",
        onHit(target, source) {
            if (!target.lastMove) {
                return false;
            }
            let possibleTypes = [];
            let attackType = target.lastMove.type;
            for (let type in this.data.TypeChart) {
                if (source.hasType(type)) continue;
                let typeCheck = this.data.TypeChart[type].damageTaken[attackType];
                if (typeCheck === 2 || typeCheck === 3) {
                    possibleTypes.push(type);
                }
            }
            if (!possibleTypes.length) {
                return false;
            }
            let randomType = this.sample(possibleTypes);

            if (!source.setType(randomType)) return false;
            this.add('-start', source, 'typechange', randomType);
        },
    },
    counter: {
        inherit: true,
        desc: "Deals damage to the opposing Pokemon equal to twice the damage dealt by the last move used in the battle. This move ignores type immunity. Fails if the user moves first, or if the opposing side's last move was Counter, had 0 power, or was not Normal or Fighting type. Fails if the last move used by either side did 0 damage and was not Confuse Ray, Conversion, Focus Energy, Glare, Haze, Leech Seed, Light Screen, Mimic, Mist, Poison Gas, Poison Powder, Recover, Reflect, Rest, Soft-Boiled, Splash, Stun Spore, Substitute, Supersonic, Teleport, Thunder Wave, Toxic, or Transform.",
        ignoreImmunity: true,
        willCrit: false,
        damageCallback(pokemon, target) {
            // Counter mechanics on gen 1 might be hard to understand.
            // It will fail if the last move selected by the opponent has base power 0 or is not Normal or Fighting Type.
            // If both are true, counter will deal twice the last damage dealt in battle, no matter what was the move.
            // That means that, if opponent switches, counter will use last counter damage * 2.
            let lastUsedMove = target.side.lastMove && this.getMove(target.side.lastMove.id);
            if (lastUsedMove && lastUsedMove.basePower > 0 && ['Normal', 'Fighting'].includes(lastUsedMove.type) && this.lastDamage > 0 && !this.willMove(target)) {
                return 2 * this.lastDamage;
            }
            this.add('-fail', pokemon);
            return false;
        },
    },
    crabhammer: {
        inherit: true,
        critRatio: 2,
    },
    defensecurl: {
        inherit: true,
        desc: "Raises the user's Defense by 1 stage.",
    },
    dig: {
        inherit: true,
        desc: "This attack charges on the first turn and executes on the second. On the first turn, the user avoids all attacks other than Bide, Swift, and Transform.",
        basePower: 100,
    },
    dizzypunch: {
        inherit: true,
        desc: "No additional effect.",
        shortDesc: "No additional effect.",
        secondary: null,
    },
    doubleedge: {
        inherit: true,
        desc: "If the target lost HP, the user takes recoil damage equal to 1/4 the HP lost by the target, rounded down, but not less than 1 HP. If this move breaks the target's substitute, the user does not take any recoil damage.",
        basePower: 120,
    },
    doublekick: {
        inherit: true,
        desc: "Hits twice. Damage is calculated once for the first hit and used for both hits. If the first hit breaks the target's substitute, the move ends.",
    },
    doubleslap: {
        inherit: true,
        desc: "Hits two to five times. Has a 3/8 chance to hit two or three times, and a 1/8 chance to hit four or five times. Damage is calculated once for the first hit and used for every hit. If one of the hits breaks the target's substitute, the move ends.",
    },
    dragonrage: {
        inherit: true,
        accuracy: 100,
        category: "Physical",
        damage: null,
        basePower: 95,
    },
    dreameater: {
        inherit: true,
        desc: "The target is unaffected by this move unless it is asleep. The user recovers 1/2 the HP lost by the target, rounded down, but not less than 1 HP. If this move breaks the target's substitute, the user does not recover any HP.",
    },
    earthquake: {
        inherit: true,
        desc: "No additional effect.",
        shortDesc: "No additional effect.",
    },
    fireblast: {
        inherit: true,
        accuracy: 80,
        desc: "Has a 30% chance to burn the target.",
        shortDesc: "30% chance to burn the target.",
        flags: {defrost: 1},
        secondary: {
            chance: 30,
            status: 'brn',
        },
    },
    firepunch: {
        inherit: true,
        flags: {defrost: 1},
    }
    firespin: {
        inherit: true,
        desc: "Burns the target.",
        shortDesc: "Burns the target.",
        accuracy: 100,
        basePower: 0,
        category: "Status",
        status: 'brn',
        secondary: null,
    },
    fissure: {
        inherit: true,
        desc: "Deals 65535 damage to the target. Fails if the target's Speed is greater than the user's.",
        shortDesc: "Deals 65535 damage. Fails if target is faster.",
    },
    flamethrower: {
        inherit: true
        flags: {defrost: 1},
    }
    furyattack: {
        inherit: true,
        desc: "Hits two to five times. Has a 3/8 chance to hit two or three times, and a 1/8 chance to hit four or five times. Damage is calculated once for the first hit and used for every hit. If one of the hits breaks the target's substitute, the move ends.",
    },
    furyswipes: {
        inherit: true,
        desc: "Hits two to five times. Has a 3/8 chance to hit two or three times, and a 1/8 chance to hit four or five times. Damage is calculated once for the first hit and used for every hit. If one of the hits breaks the target's substitute, the move ends.",
    },
    growth: {
        inherit: true,
        desc: "Raises the user's Attack and Special by 1 stage.",
        shortDesc: "Raises the user's Attack and Special by 1.",
        boosts: {
            atk: 1,
            spa: 1,
            spd: 1,
        },
    },
    guillotine: {
        inherit: true,
        desc: "Deals 65535 damage to the target. Fails if the target's Speed is greater than the user's.",
        shortDesc: "Deals 65535 damage. Fails if target is faster.",
    },
    highjumpkick: {
        inherit: true,
        basepower: 100,
    },
    horndrill: {
        inherit: true,
        desc: "Deals 65535 damage to the target. Fails if the target's Speed is greater than the user's.",
        shortDesc: "Deals 65535 damage. Fails if target is faster.",
    },
    hyperbeam: {
        inherit: true,
        desc: "If this move is successful, the user must recharge on the following turn and cannot select a move, unless the target or its substitute was knocked out by this move.",
        shortDesc: "Can't move next turn if target or sub is not KOed.",
    },
    jumpkick: {
        inherit: true,
        basepower: 75,
    },
    karatechop: {
        inherit: true,
        critRatio: 2,
    },
    leechlife: {
        inherit: true,
        basepower: 70,
    },
    leechseed: {
        inherit: true,
        desc: "At the end of each of the target's turns, The Pokemon at the user's position steals 1/16 of the target's maximum HP, rounded down and multiplied by the target's current Toxic counter if it has one, even if the target currently has less than that amount of HP remaining. If the target switches out or any Pokemon uses Haze, this effect ends. Grass-type Pokemon are immune to this move.",
        onHit() {},
        effect: {
            onStart(target) {
                this.add('-start', target, 'move: Leech Seed');
            },
            onAfterMoveSelfPriority: 1,
            onAfterMoveSelf(pokemon) {
                let leecher = pokemon.side.foe.active[pokemon.volatiles['leechseed'].sourcePosition];
                if (!leecher || leecher.fainted || leecher.hp <= 0) {
                    this.debug('Nothing to leech into');
                    return;
                }
                // We check if leeched Pokémon has Toxic to increase leeched damage.
                let toxicCounter = 1;
                let residualdmg = pokemon.volatiles['residualdmg'];
                if (residualdmg) {
                    residualdmg.counter++;
                    toxicCounter = residualdmg.counter;
                }
                let toLeech = this.clampIntRange(Math.floor(pokemon.maxhp / 16), 1) * toxicCounter;
                let damage = this.damage(toLeech, pokemon, leecher);
                if (residualdmg) this.hint("In Gen 1, Leech Seed's damage is affected by Toxic's counter.", true);
                if (!damage || toLeech > damage) {
                    this.hint("In Gen 1, Leech Seed recovery is not limited by the remaining HP of the seeded Pokemon.", true);
                }
                this.heal(toLeech, leecher, pokemon);
            },
        },
    },
    megadrain: {
        inherit: true,
        basepower: 70,
    },
    metronome: {
        inherit: true,
        desc: "A random move is selected for use, other than Metronome or Struggle.",
        noMetronome: ['metronome', 'struggle'],
        secondary: null,
        target: "self",
        type: "Normal",
    },
    mimic: {
        inherit: true,
        desc: "While the user remains active, this move is replaced by a random move known by the target, even if the user already knows that move. The copied move keeps the remaining PP for this move, regardless of the copied move's maximum PP. Whenever one PP is used for a copied move, one PP is used for this move.",
        shortDesc: "Random move known by the target replaces this.",
        onHit(target, source) {
            let moveslot = source.moves.indexOf('mimic');
            if (moveslot < 0) return false;
            let moves = target.moves;
            let moveid = this.sample(moves);
            if (!moveid) return false;
            let move = this.getMove(moveid);
            source.moveSlots[moveslot] = {
                move: move.name,
                id: move.id,
                pp: source.moveSlots[moveslot].pp,
                maxpp: move.pp * 8 / 5,
                target: move.target,
                disabled: false,
                used: false,
                virtual: true,
            };
            this.add('-start', source, 'Mimic', move.name);
        },
    },
    minimize: {
        inherit: true,
        desc: "Raises the user's evasiveness by 1 stage.",
    },
    mirrormove: {
        inherit: true,
        desc: "The user uses the last move used by the target. Fails if the target has not made a move, or if the last move used was Mirror Move.",
        onHit(pokemon) {
            let foe = pokemon.side.foe.active[0];
            if (!foe || !foe.lastMove || foe.lastMove.id === 'mirrormove') {
                return false;
            }
            this.useMove(foe.lastMove.id, pokemon);
        },
    },
    mist: {
        inherit: true,
        desc: "For 5 turns, the user and its party members cannot have major status conditions or confusion inflicted on them by other Pokemon. It is removed from the user's side if the user or an ally is successfully hit by Defog. Fails if the effect is already active on the user's side.",
        shortDesc: "For 5 turns, protects user's party from status.",
        sideCondition: 'safeguard',
    },
    nightshade: {
        inherit: true,
        desc: "No additional effect.",
        shortDesc: "No additional effect.",
        basePower: 75,
    },
    petaldance: {
        inherit: true,
        desc: "Has a 33% chance to lower the target's Special by 1 stage.",
        shortDesc: "33% chance to lower the target's Special by 1.",
        basepower: 90,
        secondary: {
            chance: 33,
            boosts: {
                spd: -1,
                spa: -1,
            },
        },
    },
    poisonsting: {
        inherit: true,
        desc: "Has a 20% chance to poison the target.",
        shortDesc: "20% chance to poison the target.",
        secondary: {
            chance: 20,
            status: 'psn',
        },
    },
    psychic: {
        inherit: true,
        desc: "Has a 33% chance to lower the target's Special by 1 stage.",
        shortDesc: "33% chance to lower the target's Special by 1.",
        secondary: {
            chance: 33,
            boosts: {
                spd: -1,
                spa: -1,
            },
        },
    },
    psywave: {
        inherit: true,
        basePower: 1,
    },
    rage: {
        inherit: true,
        desc: "Once this move is successfully used, the user automatically uses this move every turn and can no longer switch out. During the effect, the user's Attack is raised by 1 stage every time it is hit by the opposing Pokemon, and this move's accuracy is overwritten every turn with the current calculated accuracy including stat stage changes, but not to less than 1/256 or more than 255/256.",
        shortDesc: "Lasts forever. Raises user's Attack by 1 when hit.",
        self: {
            volatileStatus: 'rage',
        },
        effect: {
            // Rage lock
            duration: 255,
            onStart(target, source, effect) {
                this.effectData.move = 'rage';
            },
            onLockMove: 'rage',
            onTryHit(target, source, move) {
                if (target.boosts.atk < 6 && move.id === 'disable') {
                    this.boost({atk: 1});
                }
            },
            onHit(target, source, move) {
                if (target.boosts.atk < 6 && move.category !== 'Status') {
                    this.boost({atk: 1});
                }
            },
        },
    },
    razorleaf: {
        inherit: true,
        critRatio: 2,
        target: "normal",
    },
    razorwind: {
        inherit: true,
        desc: "No additional effect.",
        shortDesc: "No additional effect.",
        type: "Flying",
        target: "normal",
        secondary: null,
        onTryMove(attacker, defender, move) {
            this.attrLastMove('[still]');
            this.addMove('-anim', attacker, move.name, defender);
            return;
        },
    },
    roar: {
        inherit: true,
        desc: "The target cannot avoid the user's moves.",
        shortDesc: "User's next move will not miss the target.",
        forceSwitch: false,
        priority: 0,
        boosts: {
            accuracy: 6,
        },
        onHit(target) {
            this.hint("+6 Accuracy is uses as a substitute for the X-Accuracy effect.");
            }
        },
    },
    rockslide: {
        inherit: true,
        desc: "No additional effect.",
        shortDesc: "No additional effect.",
        target: "normal",
    },
    seismictoss: {
        inherit: true,
        desc: "Deals damage to the target equal to the user's level. This move ignores type immunity.",
        shortDesc: "Damage = user's level. Can hit Ghost types.",
        ignoreImmunity: true,
        basePower: 1,
    },
    selfdestruct: {
        inherit: true,
        desc: "The user faints after using this move, unless the target's substitute was broken by the damage. The target's Defense is halved during damage calculation.",
        basePower: 130,
        target: "normal",
    },
    skullbash: {
        inherit: true,
        desc: "This attack charges on the first turn and executes on the second.",
        shortDesc: "Charges turn 1. Hits turn 2.",
        onTryMove(attacker, defender, move) {
            if (attacker.removeVolatile(move.id)) {
                return;
            }
            this.add('-prepare', attacker, move.name, defender);
            if (!this.runEvent('ChargeMove', attacker, defender, move)) {
                return;
            }
            attacker.addVolatile('twoturnmove', defender);
            return null;
        },
    },
    skyattack: {
        inherit: true,
        desc: "This attack charges on the first turn and executes on the second.",
        shortDesc: "Charges turn 1. Hits turn 2.",
        basepower: 200,
    },
    slash: {
        inherit: true,
        critRatio: 2,
    },
    sludge: {
        inherit: true,
        desc: "Has a 40% chance to poison the target.",
        shortDesc: "40% chance to poison the target.",
    },
    solarbeam: {
        inherit: true,
        desc: "This attack charges on the first turn and executes on the second.",
        shortDesc: "Charges turn 1. Hits turn 2.",
        basepower: 200,
    },
    sonicboom: {
        inherit: true,
        desc: "Deals 20 HP of damage to the target. This move ignores type immunity.",
    },
    spikecannon: {
        inherit: true,
        desc: "Hits two to five times. Has a 3/8 chance to hit two or three times, and a 1/8 chance to hit four or five times. Damage is calculated once for the first hit and used for every hit. If one of the hits breaks the target's substitute, the move ends.",
    },
    stomp: {
        inherit: true,
        desc: "Has a 30% chance to flinch the target.",
    },
    struggle: {
        inherit: true,
        desc: "Deals Normal-type damage. If this move was successful, the user takes damage equal to 1/2 the HP lost by the target, rounded down, but not less than 1 HP. This move is automatically used if none of the user's known moves can be selected.",
        shortDesc: "User loses 1/2 the HP lost by the target.",
        recoil: [1, 2],
        onModifyMove() {},
    },
    submission: {
        inherit: true,
        desc: "If the target lost HP, the user takes recoil damage equal to 1/4 the HP lost by the target, rounded down, but not less than 1 HP. If this move breaks the target's substitute, the user does not take any recoil damage.",
    },
    substitute: {
        num: 164,
        accuracy: true,
        basePower: 0,
        category: "Status",
        desc: "The user takes 1/4 of its maximum HP, rounded down, and puts it into a substitute to take its place in battle. The substitute has 1 HP plus the HP used to create it, and is removed once enough damage is inflicted on it or 255 damage is inflicted at once, or if the user switches out or faints. Until the substitute is broken, it receives damage from all attacks made by the opposing Pokemon and shields the user from status effects and stat stage changes caused by the opponent, unless the effect is Disable, Leech Seed, sleep, primary paralysis, or secondary confusion and the user's substitute did not break. The user still takes normal damage from status effects while behind its substitute, unless the effect is confusion damage, which is applied to the opposing Pokemon's substitute instead. If the substitute breaks during a multi-hit attack, the attack ends. Fails if the user does not have enough HP remaining to create a substitute, or if it already has a substitute. The user will create a substitute and then faint if its current HP is exactly 1/4 of its maximum HP.",
        shortDesc: "User takes 1/4 its max HP to put in a Substitute.",
        id: "substitute",
        isViable: true,
        name: "Substitute",
        pp: 10,
        priority: 0,
        volatileStatus: 'substitute',
        onTryHit(target) {
            if (target.volatiles['substitute']) {
                this.add('-fail', target, 'move: Substitute');
                return null;
            }
            // We only prevent when hp is less than one quarter.
            // If you use substitute at exactly one quarter, you faint.
            if (target.hp === target.maxhp / 4) target.faint();
            if (target.hp < target.maxhp / 4) {
                this.add('-fail', target, 'move: Substitute', '[weak]');
                return null;
            }
        },
        onHit(target) {
            // If max HP is 3 or less substitute makes no damage
            if (target.maxhp > 3) {
                this.directDamage(target.maxhp / 4, target, target);
            }
        },
        effect: {
            onStart(target) {
                this.add('-start', target, 'Substitute');
                this.effectData.hp = Math.floor(target.maxhp / 4) + 1;
                delete target.volatiles['partiallytrapped'];
            },
            onTryHitPriority: -1,
            onTryHit(target, source, move) {
                if (move.category === 'Status') {
                    // In gen 1 it only blocks:
                    // poison, confusion, secondary effect confusion, stat reducing moves and Leech Seed.
                    let SubBlocked = ['lockon', 'meanlook', 'mindreader', 'nightmare'];
                    if (move.status === 'psn' || move.status === 'tox' || (move.boosts && target !== source) || move.volatileStatus === 'confusion' || SubBlocked.includes(move.id)) {
                        return false;
                    }
                    return;
                }
                if (move.volatileStatus && target === source) return;
                // NOTE: In future generations the damage is capped to the remaining HP of the
                // Substitute, here we deliberately use the uncapped damage when tracking lastDamage etc.
                let uncappedDamage = this.getDamage(source, target, move);
                if (!uncappedDamage) return null;
                uncappedDamage = this.runEvent('SubDamage', target, source, move, uncappedDamage);
                if (!uncappedDamage) return uncappedDamage;
                source.lastDamage = uncappedDamage;
                target.volatiles['substitute'].hp -= uncappedDamage > target.volatiles['substitute'].hp ?
                    /** @type {number} */(target.volatiles['substitute'].hp) : uncappedDamage;
                if (target.volatiles['substitute'].hp <= 0) {
                    target.removeVolatile('substitute');
                    target.subFainted = true;
                } else {
                    this.add('-activate', target, 'Substitute', '[damage]');
                }
                // Drain/recoil does not happen if the substitute breaks
                if (target.volatiles['substitute']) {
                    if (move.recoil) {
                        this.damage(Math.round(uncappedDamage * move.recoil[0] / move.recoil[1]), source, target, 'recoil');
                    }
                    if (move.drain) {
                        this.heal(Math.ceil(uncappedDamage * move.drain[0] / move.drain[1]), source, target, 'drain');
                    }
                }
                this.runEvent('AfterSubDamage', target, source, move, uncappedDamage);
                // Add here counter damage
                let lastAttackedBy = target.getLastAttackedBy();
                if (!lastAttackedBy) {
                    target.attackedBy.push({source: source, move: move.id, damage: uncappedDamage, thisTurn: true});
                } else {
                    lastAttackedBy.move = move.id;
                    lastAttackedBy.damage = uncappedDamage;
                }
                return 0;
            },
            onEnd(target) {
                this.add('-end', target, 'Substitute');
            },
        },
        secondary: null,
        target: "self",
        type: "Normal",
    },
    superfang: {
        inherit: true,
        desc: "Deals damage to the target equal to half of its current HP, rounded down, but not less than 1 HP. This move ignores type immunity.",
        shortDesc: "Damage = 1/2 target's current HP. Hits Ghosts.",
        ignoreImmunity: true,
        basePower: 1,
    },
    swift: {
        inherit: true,
        desc: "This move does not check accuracy and hits even if the target is using Dig or Fly.",
        shortDesc: "Never misses, even against Dig and Fly.",
    },
    takedown: {
        inherit: true,
        desc: "If the target lost HP, the user takes recoil damage equal to 1/4 the HP lost by the target, rounded down, but not less than 1 HP. If this move breaks the target's substitute, the user does not take any recoil damage.",
    },
    thrash: {
        inherit: true,
        desc: "Whether or not this move is successful, the user spends three or four turns locked into this move and becomes confused immediately after its move on the last turn of the effect, even if it is already confused. If the user is prevented from moving, the effect ends without causing confusion. During the effect, this move's accuracy is overwritten every turn with the current calculated accuracy including stat stage changes, but not to less than 1/256 or more than 255/256.",
        shortDesc: "Lasts 3-4 turns. Confuses the user afterwards.",
    },
    thunder: {
        inherit: true,
        desc: "Has a 10% chance to paralyze the target.",
        shortDesc: "10% chance to paralyze the target.",
        accuracy: 75,
        secondary: {
            chance: 10,
            status: 'par',
        },
    },
    thunderwave: {
        inherit: true,
        accuracy: 100,
        onTryHit(target) {
            if (target.hasType('Ground')) {
                this.add('-immune', target);
                return null;
            }
        },
    },
    transform: {
        inherit: true,
        desc: "The user transforms into the target. The target's current stats, stat stages, types, moves, DVs, species, and sprite are copied. The user's level and HP remain the same and each copied move receives only 5 PP. This move can hit a target using Dig or Fly.",
    },
    triattack: {
        inherit: true,
        desc: "No additional effect.",
        shortDesc: "No additional effect.",
        onHit() {},
        secondary: null,
    },
    twineedle: {
        inherit: true,
        desc: "Hits twice, with the second hit having a 20% chance to poison the target. If the first hit breaks the target's substitute, the move ends.",
    },
    whirlwind: {
        inherit: true,
        accuracy: 100,
        desc: "If this move is successful, the effects of Reflect, Light Screen, and Mist end for the target's side.",
        shortDesc: "Clears user and target side's hazards.",
        isViable: false,
        forceSwitch: false,
        onHit(target, source, move) {
            let success = false;
            if (!target.volatiles['substitute'] || move.infiltrates) success = !!this.boost({evasion: -1});
            let removeTarget = ['reflect', 'lightscreen', 'safeguard', 'meanlook'];
            for (const targetCondition of removeTarget) {
                if (target.side.removeSideCondition(targetCondition)) {
                    if (!removeAll.includes(targetCondition)) continue;
                    this.add('-sideend', target.side, this.getEffect(targetCondition).name, '[from] move: Defog', '[of] ' + source);
                    success = true;
                }
            }
            return success;
        },
        priority: 0,
    },
    wrap: {
        inherit: true,
        desc: "Prevents the target from switching out.",
        accuracy: 100,
        pp: 10,
        onHit(target, source, move) {
            return target.addVolatile('trapped', source, move, 'trapper');
        },
        secondary: null,
        target: "normal",
    },
};

exports.BattleMovedex = BattleMovedex;
Probably not the greatest, but still.

Also, I have managed to forget to show one interesting idea:


55 / 107 / 108 / 45 / 136
One of these typings will be decided upon:
Ghost / Flying (I feel safer doing this typing)
Ghost / Water
Ghost / Electric
Ghost / Psychic
Ghost / Ice
(this one feels the coolest to me)

And proposed mvepool:
01-NightShade
01-Disable
01-Haze
01-LightScreen
TM02-RazorWind
TM06-Toxic
TM11-BubbleBeam
TM12-WaterGun
TM13-IceBeam
TM14-Blizzard
TM15-HyperBeam
TM20-Rage
TM22-SolarBeam
TM24-Thunderbolt
TM25-Thunder
TM29-Psychic
TM30-Teleport
TM31-Mimic
TM32-DoubleTeam (Still illegal)
TM33-Reflect
TM34-Bide
TM39-Swift
TM43-SkyAttack
TM44-Rest
TM45-ThunderWave
TM46-Psywave
TM49-TriAttack
TM50-Substitute
HM05-Flash

I was also considering nerfing Blizzard to 75% accuracy, and buffing Thunder to the same. Would this be ok as well?
 

G-Luke

Sugar, Spice and One For All
is a Community Contributoris a CAP Contributoris a Forum Moderator Alumnus
Missingno looks cool. Another Ghost type would be welcome

Though why add it as a Ghost type with such a low special?
 
Missingno looks cool. Another Ghost type would be welcome

Though why add it as a Ghost type with such a low special?
Stat order is HP / Attack / Defense / Speed / Special.

I wondered about the type because I worried Ghost Ice seemed powerfull yet really cool sounding given the lack of Ice types. I thought Ghost Flying could be more balanced which is why I thought of it. I gave options to see what people would prefer though.
 
Sorry for the death of this thread everyone. We got a new gen 1 mod in town now, and thanks to the inactivity, this mod doesn't need an existence anymore.

Can someone lock this please?


EDIT: NVM
 
Last edited:

G-Luke

Sugar, Spice and One For All
is a Community Contributoris a CAP Contributoris a Forum Moderator Alumnus
Sorry for the death of this thread everyone. We got a new gen 1 mod in town now, and thanks to the inactivity, this mod doesn't need an existence anymore.

Can someone lock this please?
I dont think it should be locked. They can both exist side by side, seeing that they are both pretty different at this point. In fact, maybe you should make contact with the owner or Brodaha to ask with help for coding your own.
 
imo indigo is diff. enough from rose/iris to merit continued existence
I dont think it should be locked. They can both exist side by side, seeing that they are both pretty different at this point. In fact, maybe you should make contact with the owner or Brodaha to ask with help for coding your own.
Both of these are true. Didn't think if how different this ended up being.

It'll stay.
 

Users Who Are Viewing This Thread (Users: 1, Guests: 0)

Top