PHO - Pokémon Hackers Online
Go Back   PHO - Pokémon Hackers Online > Homebrew & Coding > Homebrew Projects

Homebrew Projects Working on a Homebrew project of some kind? Come and show it off!

Reply
 
Thread Tools Display Modes
Old 22nd October 2013, 09:14 PM   #11
Mateo
Johto Region Champion
AdministratorPHO VIP
 
Mateo's Avatar
 
Join Date: Jul 2013
Location: Johto
Age: 28
Posts: 813
Mateo Mateo Mateo Mateo Mateo
Default

I haven't really gotten started with GBA hacking yet, I hack Gen II. But isn't it annoying to add more Town Maps, and location names, or am I mistaken on that? Also adding in additional trainer classes and sprites that don't overwrite existing ones? Again, I could be wrong, but those were some things that came to my mind when looking at this. It sounds nice either way though and like something I will certainly use when I get around to learning Gen III hacking eventually.
__________________
mateo.





"I'm gonna, uh, demonstrate the hot moves..." - Flannery
Mateo is offline   Reply With Quote
Sponsored Links
Old 22nd October 2013, 09:15 PM   #12
Pia Carrot
Orange Developer
Administrator
 
Pia Carrot's Avatar
 
Join Date: Aug 2010
Location: Valencia Island
Age: 22
Posts: 848
Pia Carrot Pia Carrot Pia Carrot Pia Carrot
Default

Awesome thanks for answering. About the resolution. I realize the size is 320x240 from the hardware but if I wanted 160x144 with the rest being covered like so: http://www.pokemonhackersonline.com/...Cinematic-Mode

Except for battling, just wondering if it's possible. I'm really liking the sound of this and I'm thinking of even porting my RMXP projects to it when it's finished.
__________________

I'm a boob
Pia Carrot is offline   Reply With Quote
Old 22nd October 2013, 09:17 PM   #13
Jambo51
Glory To Arstotzka
Ex-Staff
 
Jambo51's Avatar
 
Join Date: May 2012
Location: Scotland
Posts: 92
Jambo51
Default

Quote:
Originally Posted by Pia Carrot View Post
Awesome thanks for answering. About the resolution. I realize the size is 320x240 from the hardware but if I wanted 160x144 with the rest being covered like so: http://www.pokemonhackersonline.com/...Cinematic-Mode

Except for battling, just wondering if it's possible. I'm really liking the sound of this and I'm thinking of even porting my RMXP projects to it when it's finished.
Yes, yes, this is certainly possible. Just have a black tile overlay the 3 lower layers, pretty easy in fact.

Don't get me wrong, it'd be hard to do with ASM, but as a nice mode to use, it could be done easily.
__________________
I have nothing interesting to add
Jambo51 is offline   Reply With Quote
Old 22nd October 2013, 09:27 PM   #14
Pia Carrot
Orange Developer
Administrator
 
Pia Carrot's Avatar
 
Join Date: Aug 2010
Location: Valencia Island
Age: 22
Posts: 848
Pia Carrot Pia Carrot Pia Carrot Pia Carrot
Default

Quote:
Originally Posted by Jambo51 View Post
Yes, yes, this is certainly possible. Just have a black tile overlay the 3 lower layers, pretty easy in fact.

Don't get me wrong, it'd be hard to do with ASM, but as a nice mode to use, it could be done easily.
Sounds like it would be a pain to do if I wanted the whole game like that @_@ It's not a necessity, but good to know. I assume camera positioning should be pretty simple as well.
__________________

I'm a boob
Pia Carrot is offline   Reply With Quote
Old 23rd October 2013, 09:21 PM   #15
Chaos Rush
Getting there...
 
Chaos Rush's Avatar
 
Join Date: Sep 2011
Posts: 22
Chaos Rush
Default

This sounds amazing! If this gets completed, it would be like having the closest thing to creating a Pokemon game rather than hacking an existing one, and not have to deal with the limitations of doing so. I can only imagine how much hard work you would have to put in to even start this, so I wish you the best of luck!
Chaos Rush is offline   Reply With Quote
Old 23rd October 2013, 09:37 PM   #16
Pia Carrot
Orange Developer
Administrator
 
Pia Carrot's Avatar
 
Join Date: Aug 2010
Location: Valencia Island
Age: 22
Posts: 848
Pia Carrot Pia Carrot Pia Carrot Pia Carrot
Default

Quote:
Originally Posted by Chaos Rush View Post
This sounds amazing! If this gets completed, it would be like having the closest thing to creating a Pokemon game rather than hacking an existing one, and not have to deal with the limitations of doing so. I can only imagine how much hard work you would have to put in to even start this, so I wish you the best of luck!
Personally interested in seeing how he handles the Pokémon Centers/Pokerus and fly data.

@Jambo51, any chance of a download soon so I can start making tools for it?
__________________

I'm a boob
Pia Carrot is offline   Reply With Quote
Old 23rd October 2013, 10:44 PM   #17
Jambo51
Glory To Arstotzka
Ex-Staff
 
Jambo51's Avatar
 
Join Date: May 2012
Location: Scotland
Posts: 92
Jambo51
Default

Quote:
Originally Posted by Pia Carrot View Post
Personally interested in seeing how he handles the Pokémon Centers/Pokerus and fly data.

@Jambo51, any chance of a download soon so I can start making tools for it?
I have a plan in mind for dealing with Pokécentres and flight data (as they're related via the teleport stuff, they're linked together).

As to Pokérus, I've not really thought about it yet, beyond setting aside memory locations in the Pokémon data for it.

Typedefs for the engine. I'll also post this in the first post.
Spoiler:
//
// customtypes.h:
//


#ifndef CUSTOMTYPES_H
#define CUSTOMTYPES_H

// --- primary typedefs ---
typedef enum { Time_Day, Time_Morning, Time_Afternoon, Time_Night } Times;

typedef enum { Flag_Null, Flag_RunningShoes, Flag_RunningShoesOn, Flag_UsingGBP } Flags;

typedef struct __attribute__((__packed__)) MovesetEntry {
u16 moveID;
u8 level;
} MovesetEntry;

typedef struct Block {
u32 bottom[2];
u32 top[2];
} Block;

typedef struct MapConnectionData {
u32 type;
s32 offset;
u8 mapBank;
u8 map;
u16 alignment;
} MapConnectionData;

typedef struct MapConnection {
u32 numberOfConnections;
MapConnectionData* mainData[];
} MapConnection;

typedef struct PrimaryTileset {
u32 information;
u16* tilesetData[0x5000];
u16* paletteData1[0x400];
Block* blockData[0x280];
u32* blockAnimations[0x280];
u32* blockInformation[0x280];
} PrimaryTileset;

typedef struct SecondaryTileset {
u32 information;
u16* tilesetData[0x3000];
u16* paletteData2[0x400];
Block* blockData[0x100];
u32* blockAnimations[0x100];
u32* blockInformation[0x100];
} SecondaryTileset;

typedef struct MapFooter {
u32 width;
u32 height;
u16* borderBlocks;
u16* mapDataLocation;
PrimaryTileset* primaryTileset;
SecondaryTileset* secondaryTileset;
u8 borderWidth;
u8 borderHeight;
u16 alignment;
} MapFooter;

typedef struct LevelScript
{
u8 type;
u8* scriptLocation; // unaligned, make sure to load using loop
} LevelScript;

typedef struct WildPokemonEntry
{
u16 species;
u8 minLevel;
u8 maxLevel;
} WildPokemonEntry;

typedef struct WildGrassPokemonData
{
u32 information;
WildPokemonEntry* wildData[12];
} WildGrassPokemonData;

typedef struct WildWaterPokemonData
{
u32 information;
WildPokemonEntry* wildData[10];
} WildWaterPokemonData;

typedef struct WildTreePokemonData
{
u32 information;
WildPokemonEntry* wildData[5];
} WildTreePokemonData;

typedef struct WildFishingRodPokemonData
{
u32 information;
WildPokemonEntry* wildData[12];
} WildFishingRodPokemonData;

typedef struct WildData
{
WildGrassPokemonData* grassData;
WildWaterPokemonData* waterData;
WildTreePokemonData* treeData;
WildTreePokemonData* rockSmashData;
WildFishingRodPokemonData* fishingRodData;
} WildData;

typedef struct MapHeader {
MapFooter* footerLocation;
u32* eventsLocation;
LevelScript* levelScriptsLocation;
MapConnection* connections;
u16 musicTrack;
u8 mapBank;
u8 map;
u8 mapNameID;
u8 caveStatus;
u8 weatherType;
u8 lightStatus;
u8 unknown;
u8 escapeRopeType;
u8 showName;
u8 battleType;
WildData* wildDataLocation;
} MapHeader;

typedef struct AbridgedPokemon {
u32 personalityID;
u32 originalTrainerID;
char nickname[10];
u8 formeValue:7;
u8 forceShiny:1;
u8 ability;
char originalTrainerName[7];
u8 mark:4;
u8 pokeBall:4;
u16 checksum;
u8 gender;
u8 nature;
u16 species;
u16 heldItem;
u32 experience;
u8 ppBonuses;
u8 friendship;
u8 type1;
u8 type2;
u16 move1;
u16 move2;
u16 move3;
u16 move4;
u8 move1PP;
u8 move2PP;
u8 move3PP;
u8 move4PP;
u8 hpEV;
u8 attackEV;
u8 defenceEV;
u8 speedEV;
u8 specialAttackEV;
u8 specialDefenceEV;
u8 coolness;
u8 beauty;
u8 cuteness;
u8 smartness;
u8 toughness;
u8 feel;
u8 pokerusStatus;
u8 metLocation;
u8 catchLevel;
u8 originsInfo;
u32 hpIV:5;
u32 attackIV:5;
u32 defenceIV:5;
u32 speedIV:5;
u32 specialAttackIV:5;
u32 specialDefenceIV:5;
u32 isEgg:1;
u32 isObedient:1;
u32 ribbons;
} AbridgedPokemon;

typedef struct Pokemon {
AbridgedPokemon mainData;
u32 statusAilment;
u8 level;
u8 pokerusRemaining;
u16 currentHP;
u16 maximumHP;
u16 attack;
u16 defence;
u16 speed;
u16 specialAttack;
u16 specialDefence;
} Pokemon;

typedef struct BagItem {
u16 quantity;
u16 itemID;
} BagItem;

typedef struct Player {
u32 trainerID;
char name[8];
u8 gender;
u8 alignment1;
u16 hoursPlayed;
u8 minutesPlayed;
u8 secondsPlayed;
u8 framesPlayed;
u8 alignment2;
u16 options;
} Player;

typedef struct Buffer {
char text[20];
} Buffer;

typedef struct DexEntry {
u16 seenCaughtValue;
u16 speciesValue;
char* textPointer;
} DexEntry;

typedef struct BaseData {
u8 baseHP;
u8 baseAttack;
u8 baseDefence;
u8 baseSpeed;
u8 baseSpecialAttack;
u8 baseSpecialDefence;
u8 type1;
u8 type2;
u8 catchRate;
u8 genderSplitByte;
u16 EVYield;
u16 item1;
u16 item2;
u16 baseExpYield;
u8 hatchSteps;
u8 baseFriendship;
u8 levelUpType;
u8 eggGroup1;
u8 eggGroup2;
u8 ability1;
u8 ability2;
u8 hiddenAbility;
u8 safariZoneFleeRate;
u8 colour;
} BaseData;

typedef struct RealTimeClock {
u16 year;
u8 month;
u8 day;
u8 dayOfWeek;
u8 hour;
u8 minute;
u8 second;
u8 timeOfDay;
} RealTimeClock;

typedef enum Types {
TYPE_NORMAL,
TYPE_FIGHTING,
TYPE_FLYING,
TYPE_POISON,
TYPE_GROUND,
TYPE_ROCK,
TYPE_BUG,
TYPE_GHOST,
TYPE_STEEL,
TYPE_FIRE,
TYPE_WATER,
TYPE_GRASS,
TYPE_ELECTRIC,
TYPE_PSYCHIC,
TYPE_ICE,
TYPE_DRAGON,
TYPE_DARK,
TYPE_FAIRY,
TYPE_NONE
} Types;

typedef struct Bag {
u32 bagInformation;
BagItem bagItemsData[40];
BagItem keyItemsData[30];
BagItem ballItemsData[20];
BagItem TMData[103];
BagItem berryItemsData[30];
} Bag;

typedef struct PokemonStorageBoxes {
u32 currentBoxID;
AbridgedPokemon boxData[25][30];
} PokemonStorageBoxes;

typedef struct NoiseRegister {
u32 soundLength:6;
u32 unused1:2;
u32 volumeEnvelopeSpeed:3;
u32 volumeEnvelopeDirection:1;
u32 initialVolume:4;
u32 unused2:16;
u32 dividingRatioOfFrequencies:3;
u32 counterStepWidth:1; // 0 = 15 bits, 1 = 7 bits
u32 shiftClockFrequency:4;
u32 unused3:6;
u32 lengthUseFlag:1;
u32 initialise:1;
u32 unused4:16;
} NoiseRegister;

typedef struct WavePattern {
u32 part1;
u32 part2;
u32 part3;
u32 part4;
} WavePattern;

typedef struct ToneData {
u8* nextInstruction;
u8* returnLocation;
u8 frameDelay;
s8 pitchBend;
s8 keyShift;
u8 currentOctave;
u16 pitch;
u8 currentVoice;
u8 fadeSpeed;
u16 modulation;
u8 channelVolume;
u8 fadeDirection;
u8 velocity;
u8 loopCounter;
s8 pan;
u8 noteLength;
u16 tone;
u16 unused;
} ToneData;

typedef struct WaveData {
u8* nextInstruction;
u8* returnLocation;
u8 frameDelay;
u8 loopCounter;
s8 keyShift;
u8 currentOctave;
u16 pitch;
u8 velocity;
u8 currentVoice;
u16 modulation;
u8 pan;
u8 noteLength;
} WaveData;

typedef struct NoiseData {
u8* nextInstruction;
u8* returnLocation;
} NoiseData;

typedef struct GBPMusicStruct {
u16 tempo;
u16 tone1Included:1;
u16 tone2Included:1;
u16 waveIncluded:1;
u16 noiseIncluded:1;
u16 unused:12;
ToneData tone1;
ToneData tone2;
WaveData wave;
NoiseData noise;
} GBPMusicStruct;

typedef struct GBPTrack {
u32 trackType:2;
u32 secondaryTracks:1;
u32 unused:29;
u8* songData;
} GBPTrack;

typedef struct GBPTrackHeader {
u32 tone1Included:1;
u32 tone2Included:1;
u32 waveIncluded:1;
u32 noiseIncluded:1;
u32 numberOfTracks:3;
u32 unused:25;
GBPTrack theTracks[];
} GBPTrackHeader;

/*Normal
Fighting
Flying
Poison
Ground
Rock
Bug
Ghost
Steel
Fire
Water
Grass
Electric
Psychic
Ice
Dragon
Dark
Fairy
???*/

#define TILESET_TILESET_DATA_OFFSET 4
#define TILESET_PALETTE_DATA_OFFSET 8
#define TILESET_BLOCKS_DATA_OFFSET 12

#define EWRAM_LOCATION __attribute__((section (".sbss")))

#endif // TOOLBOX_H
__________________
I have nothing interesting to add
Jambo51 is offline   Reply With Quote
Likes Full Metal ★, Pia Carrot liked this post
Old 24th October 2013, 12:52 AM   #18
Full Metal ★
Unstable?
Ex-StaffPHO VIP
 
Full Metal ★'s Avatar
 
Join Date: Oct 2012
Posts: 326
Full Metal ★ Full Metal ★
Default

Quote:
typedef struct __attribute__((__packed__))
WAS THAT REALLY NECESSARY.
__________________

★ full metal.

#busy
Full Metal ★ is offline   Reply With Quote
Old 24th October 2013, 07:19 PM   #19
Jambo51
Glory To Arstotzka
Ex-Staff
 
Jambo51's Avatar
 
Join Date: May 2012
Location: Scotland
Posts: 92
Jambo51
Default

Quote:
Originally Posted by Full Metal ★ View Post
WAS THAT REALLY NECESSARY.
Yes.
__________________
I have nothing interesting to add
Jambo51 is offline   Reply With Quote
Old 24th October 2013, 08:29 PM   #20
Chaos Rush
Getting there...
 
Chaos Rush's Avatar
 
Join Date: Sep 2011
Posts: 22
Chaos Rush
Default

Just so you know, in case you decide to add Gen 6 Pokemon, some names go past the 10-character limit, such as Fletchinder.

Though personally I wouldn't bother with including Gen 6 Pokemon... I might make sprites for them, but only after the rest of the Gens are complete in my sprite project.
Chaos Rush is offline   Reply With Quote
Reply

Tags
engine, homebrew, jambo51, pokemon

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT. The time now is 06:56 PM.

Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2017, vBulletin Solutions, Inc. User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2017 DragonByte Technologies Ltd.
Feedback Buttons provided by Advanced Post Thanks / Like (Lite) - vBulletin Mods & Addons Copyright © 2017 DragonByte Technologies Ltd.
Pokémon characters and images belong to Pokémon USA, Inc. and Nintendo.
Pokémon Hackers Online (PHO) is in no way affiliated with or endorsed by Nintendo LLC, Creatures, GAMEFREAK inc,
The Pokémon Company, Pokémon USA, Inc., The Pokémon Company International, or Wizards of the Coast.
All forum/site content (unless noted otherwise) and site designs are © 2006-2013 Pokémon Hackers Online (PHO).
Green Charizard Christos TreeckoLv100

"Black 2" by ARTPOP. Kyurem artwork by XOUS.

no new posts