- GoldTools
- Registered Member
-
Member for 12 years, 5 months, and 11 days
Last active Sun, Mar, 3 2013 11:20:01
- 0 Followers
- 1,919 Total Posts
- 90 Thanks
-
9
GJohns posted a message on Crash Through GlassI have a suggestion regarding glass. I think that it could be interesting to break glass if you are moving at a high enough speed(ex. sprinting, riding a mine-cart, falling). This could make player-made dungeons and parkour more interesting and hopefully more fun. Please feel free to criticize and add to this idea in any way you please.Posted in: Suggestions -
36
Mac posted a message on SECURE IT: New IT bill of for grabsWhy can't people just leave the internet the way it isPosted in: Politics, Philosophy, News and Science -
2
Homem_Pigman posted a message on Best ending on a game?Posted in: General GamingQuote from GarethPlays
I like minecraft and COD4 endings , i should add one to my game lol , just an end screen.
Minecraft doesn't have an ending. -
10
citricsquid posted a message on What are the MOD and ADMIN ranks :D?Posted in: Forum Discussion & InfoQuote from Bumber
DanielleStarr is now an "Administarr" instead of a "Posh Moderator". That's what's called a "promotion", not a "firing".
she was fired so hard she went up -
13
OzzyxThreat posted a message on Creative Flatlands... SUCK!!!!!Sleep in a bed?Posted in: Creative Mode -
876
TechGuy543 posted a message on TechGuy's Modding TutorialsPosted in: Mapping and Modding TutorialsMinecraft Forge TutorialsHere are some Minecraft Forge tutorials. I thought it would be better to keep them separate from the ModLoader ones. I'll start off with the basics of Forge like Blocks and such. Ghosrec35 will be doing the advanced/important tutorials.
Main Registry
Your Forge registry class has almost nothing in common with your mod_ class from ModLoader except that it registers everything.
Firstly, just start with the package declaration as usual. You can use your own package but I will just use the default Minecraft source package for this example.
package net.minecraft.src;
Next we need to import a few Forge classes.
import cpw.mods.fml.common.network.NetworkMod; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.Init; import cpw.mods.fml.common.Mod.PostInit; import cpw.mods.fml.common.Mod.PreInit; import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.event.FMLPostInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent;
All annotations are well explained in ghosrec35's Mod Annotation Interfaces tutorial(below)
The first annotation we will use is the @Mod annotation. We will use it to declare some information about our mod.
@Mod( modid = "ExampleMod", name="ExampleModsName", version="ExampleModVersion")
As an example, I use this in Undead+:@Mod( modid = "UndeadPlus", name="Undead+", version="[1.4.7] v1.0.0")
After you have the @Mod annotation we need to add the @NetworkMod annotation. We use this as well as the @Mod annotation because Forge mods are "universal"(one version for both Client and Server).
@NetworkMod ( clientSideRequired = true, serverSideRequired = true, channels = {"example_mod"}, packetHandler = ExampleModPacketHandler.class )
NetworkMod is explained in ghosrec35's tutorial below. You also need to create a PacketHandler, one is below:
package net.minecraft.src; import java.io.ByteArrayInputStream; import java.io.DataInputStream; import java.io.IOException; import net.minecraft.src.EntityClientPlayerMP; import net.minecraft.src.EntityPlayerMP; import net.minecraft.src.Packet250CustomPayload; import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.Side; import cpw.mods.fml.common.network.IPacketHandler; import cpw.mods.fml.common.network.Player; public class ExampleModPacketHandler implements IPacketHandler { @Override public void onPacketData(INetworkManager manager, Packet250CustomPayload packet, Player player) { if (packet.channel.equals("GenericRandom")) { handleRandom(packet); } } private void handleRandom(Packet250CustomPayload packet) { DataInputStream inputStream = new DataInputStream(new ByteArrayInputStream(packet.data)); int randomInt1; int randomInt2; try { randomInt1 = inputStream.readInt(); randomInt2 = inputStream.readInt(); } catch (IOException e) { e.printStackTrace(); return; } System.out.println(randomInt1 + " " + randomInt2); } }
After the @NetworkMod annotation you can declare the class. Note that with Forge, this class doesn't require a mod_ prefix or extend BaseMod.
public class ModUndeadMainRegistry {
We then need to add three methods. They are each called at specific times in the loading of the game. The methods can be called anything as long as they have the Forge annotation and parameter that is required. The first is preInit.
@PreInit public void preInit(FMLPreInitializationEvent event)
This method is called before the mods are loaded.
@Init public void init(FMLInitializationEvent event)
This method has the same function as the load() method is ModLoader. In here is where we will register all of our blocks, recipes, entities, etc.
@PostInit public void postInit(FMLPostInitializationEvent event)
This is the final method that is required in the Forge mod registry. Put stuff that you want to happen after the mods are loaded in here.
Final Code:
package net.minecraft.src; import cpw.mods.fml.common.network.NetworkMod; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.Init; import cpw.mods.fml.common.Mod.PostInit; import cpw.mods.fml.common.Mod.PreInit; import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.event.FMLPostInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; @Mod( modid = "ExampleMod", name="ExampleModsName", version="ExampleModVersion") @NetworkMod ( clientSideRequired = true, serverSideRequired = true, channels = {"example_mod"}, packetHandler = ExampleModPacketHandler.class ) public class ExampleMod { @PreInit public void preInit(FMLPreInitializationEvent event) { } @Init public void init(FMLInitializationEvent event) { } @PostInit public void postInit(FMLPostInitializationEvent event) { } }
Mod Annotation InterfacesBy ghosrec35
package ghosrec35.mods.example.common; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.IMCCallback; import cpw.mods.fml.common.Mod.Init; import cpw.mods.fml.common.Mod.Instance; import cpw.mods.fml.common.Mod.PostInit; import cpw.mods.fml.common.Mod.PreInit; import cpw.mods.fml.common.Mod.ServerStarted; import cpw.mods.fml.common.Mod.ServerStarting; import cpw.mods.fml.common.Mod.ServerStopping; import cpw.mods.fml.common.SidedProxy; import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.event.FMLInterModComms; import cpw.mods.fml.common.event.FMLPostInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.event.FMLServerStartedEvent; import cpw.mods.fml.common.event.FMLServerStartingEvent; import cpw.mods.fml.common.event.FMLServerStoppingEvent; import cpw.mods.fml.common.network.NetworkMod; import cpw.mods.fml.common.network.NetworkMod.SidedPacketHandler; @Tutorial("Annotation Interfaces within Forge") @Mod(modid = "Ghosrec35_ExampleMod", name = "ExampleMod", version = "1.0.0.0", dependencies = "after:UniversalElectricity") @NetworkMod(clientSideRequired = true, serverSideRequired = false) public class ExampleMod { @SidedProxy(clientSide = "ghosrec35.mods.examplemod.client.ClientProxy", serverSide = "ghosrec35.mods.examplemod.common.CommonProxy") public static CommonProxy proxy; @Instance("Ghosrec35_ExampleMod") public ExampleMod instance; @PreInit public void loadPre(FMLPreInitializationEvent event) { } @Init public void load(FMLInitializationEvent event) { } @PostInit public void loadPost(FMLPostInitializationEvent event) { } @ServerStarting public void serverStarting(FMLServerStartingEvent event) { } @ServerStarted public void serverStarted(FMLServerStartedEvent event) { } @ServerStopping public void serverStopping(FMLServerStoppingEvent event) { } @IMCCallback public void interModComms(FMLInterModComms event) { } }
Understanding the CodeForge ModLoader and the MinecraftForge API include many different Annotation Interfaces that allow us to create methods within our main mod file that are able to be invoked from outside files without editing base classes. This is achieved by first Annotating the said mod file with the @Mod and @NetworkMod Annotation Interfaces which originally registers these certain files with Forge ModLoader.- The @Mod annotation requires three parameters, modid which must be equivalent to a String, name which must be equivalent to a String, and version which must be equivalent to a String. Now this main mod file is able to contain other Annotation Interfaces located within the Mod.java located in the cpw.mods.fml.common package.
- The First of these methods introduced by the Mod.java is the @Instance annotation. This Annotation Interface Targets ElementTypes of the type Field, and so we annotate a public field of the type our mod file. This Annotation contains a value() of type String which is to be equivalent to your mod file's modid. This Annotation is then used to populate the field of which it annotates with the instance of your Mod File.
- The rest of the Annotations derived from the Mod.java do not require such a level of complexity.
- The first of these methods is the @PreInit Annotation which must Annotate a method with a parmeter of the type FMLPreInitializationEvent. This allows Forge ModLoader to perform two checks (The first being that this is the method designated for Pre-Initialization and the second being that the method again is designated for Pre-Initialization, but also that when invoked the method is able to retrieve information and perform tasks available from the instance of the PreInitEvent which is passed to the method upon its invocation.)
- The next Annotation is the @Init annotation which must Annotate a method with a parameter of the type FMLInitializationEvent. This Annotation works in the same way as @PreInit, except the method is invoked after the Pre Initialization methods of all mods are invoked. This allows for such things as configuration files to be created and for settings to be loaded and saved before other processes begin within the Mod. (Of course, any fields created and initialized will actually be run before the PreInit method as this occurs upon the loading of the Class itself.) The @Init method is run at the normal time of Block Registration, Recipe Registration, etc, to occur within Minecraft.
- The next Annotation is the @PostInit annotation interface, which must annotate a method with a parameter of FMLPostInitializationEvent. This method is invoked after both the @PreInit and @Init Annotated methods are invoked for each and every mod being loaded. These methods allow for easy manipulation of Minecraft and the many Blocks/Items/ and other things that have been introduced by your mod. This method is commonly called modsLoaded, as it occurs after all the mods have been loaded.
- The next Annotation is the @ServerStarting Annotation. This Annotation yet again annotates a method, but this Annotation must annotate a method with a parameter of the type FMLServerStartingEvent. This method allows for the Manipulation of the server while the server is in the process of initializing all its files.
- The next Annotation is the @ServerStarted Annotation, which annotates a method with a parameter of the type FMLServerStartedEvent. This method allows for easy manipulation of the Server after the server has been started, and is currently running.
- The next Annotation interface us the @ServerStopping annotation which annotates must annotate a method with a parameter of the type FMLServerStoppingEvent. This Annotation allows for the invocation of this method to allow for manipulation of the server while the server is stopping.
- The final Annotation I will be discussing is the @IMCCallback Annotation. This Annotation annotates a method with a parameter of the type FMLInterModComms. This allows your mod to send messages to other mods by the use of the Mods' modid and a key-value pairing. The next step is to move on to the NetworkMod annotation interface which continues on with much of the more complicated annotations.
NetworkMod and Associated Annotation InterfacesBy ghosrec35
The first thing to note is that there are only two attributes that are required with the @NetworkMod annotation.
@NetworkMod(clientSideRequired = true, serverSideRequired = false)
Both attributes must equal boolean values. These values determine whether a player is allowed to join a server or not. clientSideRequired should almost always be true, and serverSideRequired should almost always be false. clientSideRequired determines whether the client side of the mod must be installed for a player to join a server with the mod installed, while serverSideRequired determines whether the server side must be installed for the client to be able to join it.
We set clientSideRequired to true almost always because there are very few occassions in which nothing client side would be required for a mod.
We set serverSideRequired to false almost always because we will still want users to be able to join their favorite servers even if the server does not have the mod installed.
There are other attributes that are available for usage. These are channels, packetHandler, tinyPacketHandler, and connectionHandler. There are two more, but I will wait to discuss these until finished with the first three.
The channels attribute must be equivalent to an Array of Strings. This array will contain the Channels that will be automatically registered for your mod.
For Example:
@NetworkMod ( clientSideRequired = true, serverSideRequired = false, channels = {"Channel"} )
DON'T register channels so generic as the one used in this tutorial. Always try to use channel names that are unique and original.
The packetHandler attribute must be equivalent to a class that implement IPacketHandler.
For Example:
@NetworkMod ( clientSideRequired = true, serverSideRequired = false, channels = {"Channel"}, packetHandler = PacketHandler.class )
Any Packets that are sent using the channels you registered in the channels attribute will be sent to this PacketHandler.
The connectionHandler attribute must be equivalent to a class that implements IConnectionHandler.
For Example:
@NetworkMod ( clientSideRequired = true, serverSideRequired = false, channels = {"Channel"}, packetHandler = PacketHandler.class, connectionHandler = ConnectionHandler.class )
The IConnectionHandler interface forces the ConnectionHandler class to override a few different methods that allow you to handle certain events with a player when they're connecting. Some more information on this in a future tutorial.
The tinyPacketHandler attribute must be equivalent to a class that implements ITinyPacketHandler. This works just like a regular PacketHandler, but for smaller packet sizes.
Final NetworkMod annotation so far:
@NetworkMod ( clientSideRequired = true, serverSideRequired = false, channels = {"Channel"}, packetHandler = PacketHandler.class, connectionHandler = ConnectionHandler.class, tinyPacketHandler = TinyPacketHandler.class )
Before we get to the final two attributes, it's important to note again that you only NEED the clientSideRequired and serverSideRequired attributes to run your mod. The rest are only required for things like SMP or Connection Handling.
The final two attributes are a little trickier than the rest. They are clientPacketHandlerSpec and serverPacketHandlerSpec.
These attributes allow you to define separate packet handling classes and channels for both the Server and Client Side. You may use these rather than defining the channels and packetHandler attributes.
Each must be equivalent to an @SidedPacketHandler annotation. We are then able to use the attributes of the @SidedPacketHandler Annotation to further define each. The two attributes are channels, and packetHandler. These attributes function the same as they do above, but when used in an @SidedPacketHandler annotation only register the information with one side of Minecraft.
For Example:
@NetworkMod ( clientSideRequired = true, serverSideRequired = false, connectionHandler = ConnectionHandler.class, clientPacketHandlerSpec = @SidedPacketHandler ( channels = {"ClientChannel1", "ClientChannel2"}, packetHandler = ClientPacketHandler.class ), serverPacketHandlerSpec = @SidedPacketHandler ( channels = {"ServerChannel1", "ServerChannel2"}, packetHandler = ServerPacketHandler.class ) )
The next NetworkMod related annotation is the @SidedProxy annotation. @SidedProxy has a Target of the ElementType FIELD, meaning it must annotate a field. For our example, we are going to create a field of the type CommonProxy.
@SidedProxy(clientSide = "ghosrec35.mods.examplemod.client.ClientProxy", serverSide = "ghosrec35.mods.examplemod.common.CommonProxy") public static CommonProxy proxy;
The two attributes of the @SidedProxy annotation are clientSide and serverSide. These two values are equivalent to String values and will contain the file path (including your package path) to your two separate proxies. More on this later.
You must create a file that will be your CommonProxy (Conventionally, this is usually called CommonProxy), and then you must create another file that will extend CommonProxy which will be your ClientProxy (Conventionally, this is usually called ClientProxy).
The @SidedProxy annotation requires the path to your ClientProxy and CommonProxy, as it automatically populates the proxy field of type CommonProxy with whichever proxy is designated for whichever side. This means that when invoking any methods, you must ensure that both the Client and Common Proxy contain the methods so that no exceptions occur during runtime on either the Server or Client. Proxys are used for such things as preloading textures, as you are able to register rendering information on only the client side by including the render methods in only the client proxy. The ClientProxy must extend the CommonProxy so that you are able to populate the field of the type CommonProxy with your ClientProxy as well.
The final @NetworkMod associated Annotation is the @SideOnly Annotation.
The @SideOnly annotation requires a value of the type Side, which is an enumeration containing the values CLIENT, SERVER, and BUKKIT. Annotating a field with @SideOnly ensures that the method is only run on the designated side. For instance, the vanilla Minecraft code has been edited throughout with@SideOnly(Side.CLIENT)
over certain methods that are used for Client only details such as Rendering or Sound.
Thank-youThank you to the following people who have really assisted me well with helping people while I am absent. There are many others who have helped but these are the main ones who keep returning and giving great help to countless amounts of people.- ghosrec35 - ghosrec35 has written the Forge tutorials.
- -Reaper-
- KoadMaster
- PhantomJedi759
- ZeroLevels
- StangeOne101
- Zildjian97
- NukeAndBeans
- Dragonphly77
-
56
Homem_Pigman posted a message on Super flat, Mojang what happened?Seriousy? Ores? Trees? Superflat is made for testing in creative mode only.Posted in: 1.1 Update Discussion -
5
looloo1 posted a message on Count to 160 untill a moderatorWe feed on user tearsPosted in: Forum Games -
4
CobaltPulse posted a message on 93 New Things ModI am currently working on a mod that will implement 93 new things into the game! The mod doesn't have a name yet... So hopefully YOU can be the one to create the name... the person who pics the best name will get a reward, so far the only reward I can think of is a Character Skin with their face on it or something like that. Have fun picking a name!Posted in: Mods Discussion
Items
- Iron rod - same as a normal stick just used to make iron handeled tools
- Poison - added to arrows/swords to increase damage if eaten it takes away 5 hearts
- Poison Arrows - adds damage to the arrows
- Wooden Battle Axe - used like an axe, but on mobs, dealing more damage then the sword
- Diamond Battle Axe - used like an axe, but on mobs, dealing more damage then the sword
- Iron Battle Axe - used like an axe, but on mobs, dealing more damage then the sword
- Gold Battle Axe - used like an axe, but on mobs, dealing more damage then the sword
- Gypsum Battle Axe - used like an axe, but on mobs, dealing more damage then the sword
- Emerald Battle Axe - used like an axe, but on mobs, dealing more damage then the sword
- Sappire Battle Axe - used like an axe, but on mobs, dealing more damage then the sword
- Ruby Battle Axe - used like an axe, but on mobs, dealing more damage then the sword
- Corundum Battle Axe - used like an axe, but on mobs, dealing more damage then the sword
- Hyperdiamond Battle Axe - used like an axe, but on mobs, dealing more damage then the sword
- Fertilizer Bags - used the same as bonemeal
- Salad - food that recovers 4 hearts
- Cheese - food that recovers 2 hearts
- Cheese slices - food that recovers half a heart
- Cheese sandwich - food that recovers 2 hearts
- Cheese melt - food that recovers 4 hearts cheese sandwich put in the oven
- Butter - used to create foods
- Buttered bread - food that recovers 3 hearts
- Hamburger - food that recovers 4.5 hearts | creation
- Cheese Burger - food that recovers 5 hearts | creation
- Cup - holds different drinks
- Milk Bowl - Drink that recovers 2 hearts
- Dagger - does half the damage of a sword
- Crossbow - more damage delt to enemies shoots further
- Wooden Bolt - used in the crossbow
- Iron Bolt - used in the crossbow
- Saddles - used to ride animals
- Lanturns - turned on when placed & emits more light than a torch
- Glass O' Milk - drink that recovers 2 hearts
- Chocolate Milk - drink that recovers 3 hearts
- Chocolate bar - food that recovers 3.5 hearts
- t-Shirt - shirt that adds 2 armor
- Colored Shirt - [(corrosponding color) shirt] adds 3.5 armor
- Colored Pants - [(corrosponding color) pants] adds 3 armor
- Colored Socks - [(corrosponding color) socks] adds 1 armor
- Jeans - tougher pants adds 4 armor
- Raw Eggs - food that takes away half a heart
- Cooked Eggs - food that recovers 4 hearts created by adding Raw Eggs to the furnace
- Concrete - used for building purposes created when putting Cement in the the furnace
- Apple Juice - drink that recovers 3.5 hearts
- Egg on Toast - food that recovers 5.5 hearts
- Bacon - food that recovers 2.5 hearts
- Bandages - item that recovers 4 hearts
- Medaleon of Healing - item that heals you completely, but can not be made yet
Blocks
- Tables - Table to hold things like cake
- Glowing Slime Block - block of slime
- Cement - used for building purposes | creation
- Redstone Block - used for decor and it emits light
- Empty Brick Pot - can be placed, but ill-usable when placed
- Brick Soil Pot - decor item cacti, flowers & saplings can be placed on this
- Golden TNT - improved explosion
Mobs
- Headless Zombie - same thing as the zombie, but it does less damage
- Shark - water creature that attacks you
- Bag O' Bones - Skeleton without a bow
- Undead Forester - Zombie Gardener that sometimes drops rare plants & dyes
Ores
- Emerald - Green gemstone (Slightly softer than Sappire & Ruby)
- Sappire - Blue Gemstone (Same as Ruby)
- Ruby - Red gemstone (Slightly softer than Diamond)
- Limestone - Light green stone (Approxamately the same as Gold, but less rare)
- Cobalt - Bluish gemstone (Harder than Gold)
- Gypsum - Clear gemstone (very brittle)
- Corundum - Pinkish/purple gemstone (Harder than Ruby & Sappire)
- Hyperdiamond - (Aggregated Diamond) Clear multicolor gems (Rarer and Harder than Diamond)
New Ingots & Gems
- Coal Ingot - lasts 2 times longer than coal (Used for saving space) made with 2 coal
- Emerald
- Sappire
- Cobalt
- Gypsum
- Corundum
- Hyperdiamond
Comment a cool name and what your looking forward to seeing in this mod!
8/11/11 - Started on coding. All Ores and Emerald images finished.8/12/11 - Created Iron Rod icon. Implementing items into the game8/14/11 - Coding the Ores and making them randomly generate.
Forum Edits8/12/2011 1:19PM - Moved Blocks from items to Blocks -
73
Foogaler posted a message on TooManyItems, the inventory editor and more (1.8 Forge is here!)This looks amazing. I just downloaded it and put the two class file included into my minecraft.jar and loaded everything up fine, but when I opened my inventory there was no item menu like the one in the picture. Can someone please help?Posted in: Minecraft Mods
Are there any mods this that are incompatible with? I have alot installed, so maybe thats causeing a problem. - To post a comment, please login.
1
Its onlineIt is 12w17a..... Sorry.
1
Ok! Server was down, nobody was on. Please come on!
1
1
IGN:
What Will You Bring:
Age:
To request being unbanned, do this:
IGN:
What did you do:
Apology:
Once IP-Banned, always IP-Banned. *Being banned is extremely rare, you can only get ip-ban by abusing powers.
There are not many slots, so join now!
IP: 192.168.1.2:25565
RULE THE LANDS! RULE THE BILLARDS!
CREATIVE IS ONLY GIVEN TO STAFF.
1
2
1.What is your choice of Griefing?
A. TNT
B. 1 by 1
C. Just Annoying People
D. Kill Players
E. I Have Never Griefed.
2. What is your favorite color? (if not here, choose other favorite)
A. Green
B. Black or Purple
C. Brown or Red
D. White
E. Gray
3. Mining or crafting? Which do you like best?
A. Mining with TNT
B. Crafting, by taking blocks and putting them at the workbench.
C. Mining with friends
D. Crafting with friends
E. I play on creative more, instead.
4. Which is your favorite stage of Minecraft?
A. Survival Test
B. Beta
C. Alpha
D. Indev/Infdev
E. Classic
If you chose mostly A, you are a CREEPER.
If you chose mostly B, you are a ENDERMAN.
If you chose mostly C, you are a SPIDER.
If you chose mostly D, you are a SKELETON.
If you chose mostly E, you are a WOLF.
If you chose mostly C, and E, you are a SPIDER JOCKEY.
If you chose mostly A, and B, you are a CRENDERMAN
If you chose mostly E, and another, you are a CESSWOLF.
Tell what you got in the comments.
1
Banjo-Kazooie, Banjo-Tooie, Super Mario 64, Dr Mario 64, Superman 64, Ocarina Of Time, Majoras Mask, Mario Golf 64, Super Mario Bros., Mario Bros., Dr. Mario, Super Mario Kart, Mario Kart Wii, Mario Kart Double Dash, Mario Kart 64, Mario Party, Mario Party 2, Mario Party 3, mario Party 4, Mario Party 5, Mario party 6, Mario party 7, Donkey Kong, Donkey Kong 64, Tetris, Mario party 8, Mario Party 9, Minecraft: Pocket Edition, Mario vs. Donkey Kong, Mario Vs. Donkey Kong 2, Super Mario 64 Ds, Wind Waker, Warioware D.I.Y, Warioware Mega Microgames, Warioware Touched, Warioware Snapped, Donkey Kong JR., Earthworm Jim, Sonic The Hedgehog, Sonic The Hedgehog 2, Sonic The Hedgehog 3, Sonic and Knuckles, Sonic Heroes, Sonic Adventure, Sonic Adventure 2, Sonic Adventure DX, Sonic Generations, Sonic CD, Sonic R, Super Mario Galaxy, Super Mario Galaxy 2, Super Sonic R, Sonic Ri- I give up.
Challenge Lost.
1