Type Cycle: Looking for hosting

Pikachuun

the entire waruda machine
Due to me doing other things I wasn't able to test it so here have some untested code

config/formats.js
Code:
	{
		name: "Type Cycle",
		section: "Other Metagames",
		
		mod: 'typecycle',
		ruleset: ['OU'],
		//Since this metagame uses custom types, let's make the types known to the players.
		onSwitchIn: function (pokemon) {
			var typeStr = pokemon.types[0];
			if (pokemon.types[1]) typeStr += '/' + pokemon.types[1]
			this.add('-start', pokemon, 'typechange', typeStr);
		}
	},
mods/typecycle/scripts.js
Code:
exports.BattleScripts = {
	init: function () {
		var typeCycle = {Normal: 'Dark', Dark: 'Grass', Grass: 'Rock', Rock: 'Flying', Flying: 'Ghost', Ghost: 'Fairy', Fairy: 'Bug', Bug: 'Steel', Steel: 'Ice', Ice: 'Poison', Poison: 'Fire', Fire: 'Psychic', Psychic: 'Ground', Ground: 'Fighting', Fighting: 'Water', Water: 'Electric', Electric: 'Dragon', Dragon: 'Normal'};
		
		//Batch Processing
		for (var i in this.data.Pokedex) {
			var types = this.data.Pokedex[i].types;
			var typec = [];
			for (var t = 0; t < types.length; t++) {
				typec[t] = (typeCycle[types[t]]) ? typeCycle[types[t]] : types[t];
			}
			this.modData('Pokedex', i).types = typec;
		}
		for (var i in this.data.Movedex) {
			var type = this.data.Movedex[i].type;
			this.modData('Movedex', i).type = (typeCycle[type]) ? typeCycle[type] : type;
		}
		for (var i in this.data.Items) {
			if (this.data.Items[i].onPlate) {
				var onPlate = this.data.Items[i].onPlate
				this.modData('Items', i).onPlate = (typeCycle[onPlate]) ? typeCycle[onPlate] : onPlate;
			}
		}
		
		//Cleanup [Moves]
		this.modData('Movedex', 'doomdesire').onTryHit = function (target, source) {
			source.side.addSideCondition('futuremove');
			if (source.side.sideConditions['futuremove'].positions[source.position]) {
				return false;
			}
			source.side.sideConditions['futuremove'].positions[source.position] = {
				duration: 3,
				move: 'doomdesire',
				targetPosition: target.position,
				source: source,
				moveData: {
					name: "Doom Desire",
					basePower: 140,
					category: "Special",
					flags: {},
					type: 'Ice'
				}
			};
			this.add('-start', source, 'Doom Desire');
			return null;
		};
		this.modData('Movedex', 'flyingpress').onEffectiveness = function (typeMod, type, move) {
			return typeMod + this.getEffectiveness('Ghost', type);
		};
		this.modData('Movedex', 'futuresight').onTryHit = function (target, source) {
			source.side.addSideCondition('futuremove');
			if (source.side.sideConditions['futuremove'].positions[source.position]) {
				return false;
			}
			source.side.sideConditions['futuremove'].positions[source.position] = {
				duration: 3,
				move: 'futuresight',
				targetPosition: target.position,
				source: source,
				moveData: {
					name: "Future Sight",
					basePower: 120,
					category: "Special",
					flags: {},
					ignoreImmunity: false,
					type: 'Ground'
				}
			};
			this.add('-start', source, 'move: Future Sight');
			return null;
		};
		this.modData('Movedex', 'judgment').onModifyMove = function (move, pokemon) {
			move.type = this.runEvent('Plate', pokemon, null, 'judgment', 'Dark');
		};
		this.modData('Movedex', 'stealthrock').effect.onSwitchIn = function (pokemon) {
			var typeMod = this.clampIntRange(pokemon.runEffectiveness('Flying'), -6, 6);
			this.damage(pokemon.maxhp * Math.pow(2, typeMod) / 8);
		};
		this.modData('Movedex', 'technoblast').onModifyMove = function (move, pokemon) {
			move.type = this.runEvent('Drive', pokemon, null, 'technoblast', 'Dark');
		};
		this.modData('Movedex', 'weatherball').onModifyMove = function (move) {
			switch (this.effectiveWeather()) {
			case 'sunnyday':
			case 'desolateland':
				move.type = 'Psychic';
				break;
			case 'raindance':
			case 'primordialsea':
				move.type = 'Electric';
				break;
			case 'sandstorm':
				move.type = 'Flying';
				break;
			case 'hail':
				move.type = 'Poison';
				break;
			}
		};
		
		//Cleanup [Abilities]
		this.modData('Abilities', 'aerilate').onModifyMove = function (move, pokemon) {
			if (move.type === 'Dark' && move.id !== 'naturalgift') {
				move.type = 'Ghost';
				if (move.category !== 'Status') pokemon.addVolatile('aerilate');
			}
		};
		this.modData('Abilities', 'blaze').onModifyAtk = function (atk, attacker, defender, move) {
			if (move.type === 'Psychic' && attacker.hp <= attacker.maxhp / 3) {
				this.debug('Blaze boost');
				return this.chainModify(1.5);
			}
		};
		this.modData('Abilities', 'blaze').onModifySpA = function (atk, attacker, defender, move) {
			if (move.type === 'Psychic' && attacker.hp <= attacker.maxhp / 3) {
				this.debug('Blaze boost');
				return this.chainModify(1.5);
			}
		};
		this.modData('Abilities', 'darkaura').onAnyTryPrimaryHit = function (target, source, move) {
			if (target === source || move.category === 'Status') return;
			if (move.type === 'Grass') {
				source.addVolatile('aura');
			}
		};
		this.modData('Abilities', 'fairyaura').onAnyTryPrimaryHit = function (target, source, move) {
			if (target === source || move.category === 'Status') return;
			if (move.type === 'Bug') {
				source.addVolatile('aura');
			}
		};
		this.modData('Abilities', 'normalize').onModifyMove = function (move) {
			if (move.id !== 'struggle') {
				move.type = 'Dark';
			}
		};
		this.modData('Abilities', 'overgrow').onModifyAtk = function (atk, attacker, defender, move) {
			if (move.type === 'Rock' && attacker.hp <= attacker.maxhp / 3) {
				this.debug('Overgrow boost');
				return this.chainModify(1.5);
			}
		};
		this.modData('Abilities', 'overgrow').onModifySpA = function (atk, attacker, defender, move) {
			if (move.type === 'Rock' && attacker.hp <= attacker.maxhp / 3) {
				this.debug('Overgrow boost');
				return this.chainModify(1.5);
			}
		};
		this.modData('Abilities', 'pixilate').onModifyMove = function (move, pokemon) {
			if (move.type === 'Dark' && move.id !== 'naturalgift') {
				move.type = 'Bug';
				if (move.category !== 'Status') pokemon.addVolatile('pixilate');
			}
		};
		this.modData('Abilities', 'refrigerate').onModifyMove = function (move, pokemon) {
			if (move.type === 'Dark' && move.id !== 'naturalgift') {
				move.type = 'Poison';
				if (move.category !== 'Status') pokemon.addVolatile('refrigerate');
			}
		};
		this.modData('Abilities', 'sandforce').onBasePower = function (basePower, attacker, defender, move) {
			if (this.isWeather('sandstorm')) {
				if (move.type === 'Ice' || move.type === 'Fighting' || move.type === 'Flying') {
					this.debug('Sand Force boost');
					return this.chainModify([0x14CD, 0x1000]);
				}
			}
		},
		this.modData('Abilities', 'swarm').onModifyAtk = function (atk, attacker, defender, move) {
			if (move.type === 'Steel' && attacker.hp <= attacker.maxhp / 3) {
				this.debug('Swarm boost');
				return this.chainModify(1.5);
			}
		};
		this.modData('Abilities', 'swarm').onModifySpA = function (atk, attacker, defender, move) {
			if (move.type === 'Steel' && attacker.hp <= attacker.maxhp / 3) {
				this.debug('Swarm boost');
				return this.chainModify(1.5);
			}
		};
		this.modData('Abilities', 'torrent').onModifyAtk = function (atk, attacker, defender, move) {
			if (move.type === 'Electric' && attacker.hp <= attacker.maxhp / 3) {
				this.debug('Torrent boost');
				return this.chainModify(1.5);
			}
		};
		this.modData('Abilities', 'torrent').onModifySpA = function (atk, attacker, defender, move) {
			if (move.type === 'Electric' && attacker.hp <= attacker.maxhp / 3) {
				this.debug('Torrent boost');
				return this.chainModify(1.5);
			}
		};
		
		//Cleanup [Arceus]
		this.modData('Statuses', 'arceus').onSwitchIn = function (pokemon) {
			var type = 'Dark';
			if (pokemon.ability === 'multitype') {
				type = pokemon.getItem().onPlate;
				if (!type || type === true) {
					type = 'Dark';
				}
			}
			pokemon.setType(type, true);
		};
	}
};
If it breaks let me know, it shouldn't break though.
 

SpartanMalice

Y'all jokers must be crazy
Interestingly, spinblockers are practically non existent now in lieu of Rapid Spin's typing pretty much changing into their weakness. But depending on the team Defog may still be preferred.
 
Interestingly, spinblockers are practically non existent now in lieu of Rapid Spin's typing pretty much changing into their weakness. But depending on the team Defog may still be preferred.
Oh, Rapid Spin is (almost) completely unblockable now, not just easier. The only thing that stops it is, wait for it... Shedinja. So yeah, Rapid Spin is really good right now, though it still doesn't have the greatest distribution.
 
Dragonite seems interesting in this meta tbh leaving with only 1 weakness.




Dragonite @ Choice Band
Ability: Multiscale
EVs: 252 Atk / 8 SpD / 248 Spe
Adamant Nature
- Outrage
- Earthquake
- Fire Punch
- Extreme Speed

What makes it good is espeed STAB but sadly it loses dragon stab, but in the end its all worth it n_N
Keep in mind that move types are changed as well, so Outrage would be Normal-type, Earthquake Fighting-type, Fire Punch Psychic-type, and Extreme Speed Dark-type. So, I think Fire Punch should be replaced with Ice Punch (Poison-type) for coverage against Fairies. At least that's the immediate option that comes to mind. Perhaps Stone Edge (Flying) could work as an option against Gliscor...
 

SpartanMalice

Y'all jokers must be crazy
Honestly, Dragonite's access to Hurricane still makes it good. That's a 110 BP ghost stab right there. Earthquake turning into a fighting type really helps it out. Not being weak to SR anymore makes a Roost set more viable than in standard as well.

Here's how I see physical and special Dragonite sets:


Dragonite @ Life Orb / Leftovers
Ability: Multiscale
EVs: 252 Atk / 4 SpD / 252 Spe
Adamant Nature
- Dragon Dance
- Extreme Speed (Dark)
- Outrage (Normal)
- Earthquake (Fighting) / Ice Punch (Fire) / Roost


Dragonite @ Choice Specs
Ability: Multiscale
EVs: 252 SpA / 4 SpD / 252 Spe
Modest/Timid Nature
- Draco Meteor (Normal - basically Boomburst but slightly weaker with drawbacks)
- Hurricane (Ghost)
- Ice Beam (Poison)
- Surf (Electric)
 
Tagging Snaquaza that there's now (Probably) functioning code that looks awesome.

also wow Aqua is a wall of metas right now, I didn't even know there were that many OMs

Dragonite @ Choice Specs
Ability: Multiscale
EVs: 252 SpA / 4 SpD / 252 Spe
Modest/Timid Nature
- Draco Meteor (Normal - basically Boomburst but slightly weaker with drawbacks)
- Hurricane (Ghost)
- Ice Beam (Poison)
- Surf (Electric)
I'd seriously consider running it as a Rain choice, and swap in Focus Blast (
) and Thunder. But yeah, even outside of Rain Hurricane could be really scary, at least as long as you clear out Chansey first -or run Dragonite as a mixed set. (Earthquake is super effective against Chansey)

Dragonite @ Life Orb / Leftovers
Ability: Multiscale
EVs: 252 Atk / 4 SpD / 252 Spe
Adamant Nature
- Dragon Dance
- Extreme Speed (Dark)
- Outrage (Normal)
- Earthquake (Fighting) / Ice Punch (Fire) / Roost
Earthquake is probably the overall best coverage choice, unless you're afraid of Shedinja in specific.
/
/
coverage is perfect coverage, barring Wonder Guard. And yeah, Roosting Dragonite is a lot more viable, having no double weakness and in fact only one weakness period and no Stealth Rock weakness and three immunities to boot. Just Outrage+Extreme Speed is really good coverage, only actually walled by Shedinja (Wonder Guard) and Sawsbuck. (
/
) No, seriously, that's it, and Sawsbuck has to fear the possibility of you springing Earthquake on it for an automatic OHKO. Extreme Speed+Earthquake is also really good coverage, though it's walled by random
s... whom almost universally have Will O Wisp, by the way.

Oh, Rapid Spin is (almost) completely unblockable now, not just easier. The only thing that stops it is, wait for it... Shedinja. So yeah, Rapid Spin is really good right now, though it still doesn't have the greatest distribution.
Rapid Spin's biggest problem (As far as I can tell, anyway) has always been how few things get it at the same time as getting recovery. It's literally just Avalugg, Cryogonal, Spinda, and Starmie. Cryogonal and Spinda both have awful statlines, Starmie has pathetic bulk, while Avalugg is held back, in Standard, by its awful defensive typing that is actively weak to Stealth Rock.

Of course, in Type Cycle it's now
type, which is actually a very good defensive typing, including immunity to Toxic, and neutrality to Stealth Rock, so Rapid Spin Avalugg may well be a staple on teams. There's also a number of Rapid Spinners that may well prove viable as spinners, like Hitmontop, Blastoise, Armaldo (
/
!), etc, even though they can't have access to recovery themselves. Certainly, the fact that you can't spinblock anymore (Aside from Shedinja) makes Rapid Spin a lot more appealing.

Technically, you can Spin punish, but it's not very practical: Rattled is mostly on NFEs and the exceptions are either bad or probably have better things to do with their time, while Justified is eh for a laundry list of reasons -Terrakion might make for a good spin punisher, though there's the complication that the premier Rapid Spinner laughs at it. (+1 252 Atk Life Orb Terrakion Close Combat vs. 248 HP / 252+ Def Avalugg: 175-208 (44.5 - 52.9%) -- guaranteed 3HKO after Leftovers recovery is as good as it gets, and Avalugg can just Roar you out)
 
Last edited:
I hate to triple post, but tagging.

Also, replays.

http://replay.pokemonshowdown.com/aqua-typecycle-3513

Inaugural match. Gale Wings isn't functioning... I looked at the code, it's not in the code. Whoops. Can you implement Gale Wings, Pikachuun?

http://replay.pokemonshowdown.com/aqua-typecycle-3516

Second match proper. We've also tested some things, and aside from Gale Wings everything seems to be functioning. Though Megas don't display as having the types they do, in fact, have, but that's just a display issue. We've personally confirmed that Pixilate is behaving correctly, as well as that moves are changed appropriately. Hidden Power is not changed, though. I'm fine with updating the OP rather than pushing for the code to be changed, honestly, but I have no idea if Pikachuun expected Hidden Power to be unaffected or not.
 
Last edited:
In a good way or a bad way?

http://replay.pokemonshowdown.com/aqua-typecycle-3567

Another match against an OU team. I actually win this time! And start getting an idea of flaws with the team. I work on those afterward.

http://replay.pokemonshowdown.com/aqua-typecycle-3622

In which Mega Alakazam sweeps because my only priority is Aqua Jet. Oops. Also I let it trace Sheer Force. Oops. (Also, it gets a crucial critical hit)

http://replay.pokemonshowdown.com/aqua-typecycle-3638

In which hax kills my Chansey, and then more hax kills my opponent's Chansey. OK.

http://replay.pokemonshowdown.com/aqua-typecycle-3641

In which it becomes obvious my Mega Beedrill team is still not adequately prepared for Mega Alakazam.

http://replay.pokemonshowdown.com/aqua-typecycle-3643

In which Eviolite Scyther is quite good. And Mega Alakazam is still a problem for me.

http://replay.pokemonshowdown.com/aqua-typecycle-3644

In which Serperior completely reverses things.

http://replay.pokemonshowdown.com/aqua-typecycle-3646

In which I try my hand at a Sun team, and Crobat is disappointing.

http://replay.pokemonshowdown.com/aqua-typecycle-3674

Sun team still loses, but does better.

http://replay.pokemonshowdown.com/aqua-typecycle-3675

Sun team still loses. Needs a Special wall or something.

http://replay.pokemonshowdown.com/aqua-typecycle-3676

In which my first Type Cycle stall team actually succeeds.

http://replay.pokemonshowdown.com/aqua-typecycle-3677

Sun team still can't take it. Also, holy shit Mega Metagross. Afterward, The Reptile and I talked a fair bit and did calcs and stuff: There's almost nothing that can reliably avoid being 2HKOed by Mega Metagross in the entire meta.

http://replay.pokemonshowdown.com/aqua-typecycle-436

Stab at stall on my end. Needs work.

http://replay.pokemonshowdown.com/aqua-typecycle-2626

Revised stall, works better, still loses.

http://replay.pokemonshowdown.com/aqua-typecycle-2628

A more offensive team against the same player as before. Goes better.


A bunch of replays I've been meaning to dump in the thread for a while, but, you know, quadruple-posting. Not that the meta's gotten a lot of attention, but Metagrossite is quickbanned. Mega Metagross is just an unreasonable threat all around.
 
In a good way or a bad way?

http://replay.pokemonshowdown.com/aqua-typecycle-3567

Another match against an OU team. I actually win this time! And start getting an idea of flaws with the team. I work on those afterward.

http://replay.pokemonshowdown.com/aqua-typecycle-3622

In which Mega Alakazam sweeps because my only priority is Aqua Jet. Oops. Also I let it trace Sheer Force. Oops. (Also, it gets a crucial critical hit)

http://replay.pokemonshowdown.com/aqua-typecycle-3638

In which hax kills my Chansey, and then more hax kills my opponent's Chansey. OK.

http://replay.pokemonshowdown.com/aqua-typecycle-3641

In which it becomes obvious my Mega Beedrill team is still not adequately prepared for Mega Alakazam.

http://replay.pokemonshowdown.com/aqua-typecycle-3643

In which Eviolite Scyther is quite good. And Mega Alakazam is still a problem for me.

http://replay.pokemonshowdown.com/aqua-typecycle-3644

In which Serperior completely reverses things.

http://replay.pokemonshowdown.com/aqua-typecycle-3646

In which I try my hand at a Sun team, and Crobat is disappointing.

http://replay.pokemonshowdown.com/aqua-typecycle-3674

Sun team still loses, but does better.

http://replay.pokemonshowdown.com/aqua-typecycle-3675

Sun team still loses. Needs a Special wall or something.

http://replay.pokemonshowdown.com/aqua-typecycle-3676

In which my first Type Cycle stall team actually succeeds.

http://replay.pokemonshowdown.com/aqua-typecycle-3677

Sun team still can't take it. Also, holy shit Mega Metagross. Afterward, The Reptile and I talked a fair bit and did calcs and stuff: There's almost nothing that can reliably avoid being 2HKOed by Mega Metagross in the entire meta.

http://replay.pokemonshowdown.com/aqua-typecycle-436

Stab at stall on my end. Needs work.

http://replay.pokemonshowdown.com/aqua-typecycle-2626

Revised stall, works better, still loses.

http://replay.pokemonshowdown.com/aqua-typecycle-2628

A more offensive team against the same player as before. Goes better.


A bunch of replays I've been meaning to dump in the thread for a while, but, you know, quadruple-posting. Not that the meta's gotten a lot of attention, but Metagrossite is quickbanned. Mega Metagross is just an unreasonable threat all around.
Just wondering, is this metagame still playable anywhere? I've been wanting to test it out for awhile now but it doesn't appear to be on Aqua anymore?
 
If it's not on Aqua, then to my awareness it's not hosted anywhere, unfortunately, though it's possible a server hosted it without mentioning it to me.

Welp, looks like I need to update the thread title and OP.
 
Since OMOTM is almost here and I want to bring this back, I have rewritten the OP to a more readable state, admittedly with a lot of stolen work from yours. Hope you don't mind Ghoul King


upload_2016-4-27_19-25-22.png


Type cycle is an OM unlike almost all others- instead of changing abilities, moves, or game mechanics, it changes something different- typing. The above image illustrates the rotation of the cycle of types of Moves and Pokemon in Type Cycle:

Of course, you might be thinking, What does it mean? That image is somewhat confusing- what is it talking about? The answer is simple- the type changes, that's all. It doesn't modify the types in any way, it only changes who has what type. As you can see, Arceus' type has just changed from Dark to Grass.
upload_2016-4-27_19-16-7.png




Now at this point, might be wondering about damage outputs without STAB to back it up. Will this metagame only favor those pokemon with deep movepools? Well, worry not- because your moves change type as well. Fire Blast, which formerly hit steel types and was some of the best coverage with flying out there, now hits Fighting and Poison types- the former Ice and Ground types

A few Abilities work a bit differently from what you're used to, as well. Specifically:

Normalize converts all moves to the
type.

Pixilate converts
moves to the
type. (eg Hyper Voice)

Aerilate converts
to the
type. (eg Return)

Refrigerate converts
moves to the
type. (eg Explosion)

Blaze bolsters
type moves when low on health. (eg Fire Blast)

Torrent bolsters
types moves when low on health. (eg Waterfall)

Overgrow bolsters
type moves when low on health. (eg Giga Drain)

Swarm bolsters
type moves when low on health. (eg Megahorn)

Gale Wings adds +1 to
type moves. (eg Brave Bird)

Dark Aura bolsters the damage of all
type moves. (eg Knock Off)

Fairy Aura bolsters the damage of all
type moves. (eg Moon Blast)

Sand Force boosts
,
, and
moves during a Sandstorm. (eg Iron Head, Earthquake, and Stone Edge, respectively)

This is to ensure the Abilities behave "as intended", especially as most of these Abilities would be useless or nearly useless for the Pokemon that get them if they kept their original behavior. Scrappy is excluded because no type is immune to Dark or Water anyway. Note that, for instance, Kangaskhan can still benefit from Scrappy via Earthquake, which is now Fighting-typed, so Scrappy is not left entirely in the lurch.

All other Abilities behave as in Standard.

Of course, move typing has changed, so Levitate protects from Psyshock rather than Earthquake, because Psyshock is now
while Earthquake is
type. One way of thinking of it is that Abilities with type-specific offensive modifications are adapted while defensive modifications are not. The effects of items are completely unchanged, as are most other effects that interact with typing, such as Gravity still disabling immunity to
, though don't expect them to do their thing to the same moves or Pokemon.

The one other special-casing is Stealth Rock: not only is the move itself
typed, but the rocks it sets derive their effectiveness from the
type, rather than the
type.

Other than these points, everything's behavior logically follows from the cycle being imposed on Pokemon and Moves: Arceus's default typing is
, while granting it the Splash Plate will convert it to the
type -but the plate itself still boosts
type moves, because items are excluded from this effect. Venusaur gets 50% more Special Defense when in a Sandstorm and is immune besides, while Golem is sad-faced and hurt by the sand. Moves that benefit from weather, unrelated to their type, still benefit -
Hurricane is still rain-loving- while type-based benefits and penalties apply to the newly re-typed moves, such as Close Combat failing in Desolate Land while Sludge Wave gets a 50% boost to its damage.

Hidden Power, however, remains unchanged

Ruleset
OU-based

Additional Bans: Metagrossite.

Unbans: Not yet.
 
Last edited:

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

Top