Dev Kit Pokémon: Do Or Die

Dragonite

Have they found the One Piece yet
Member
Posts
228
#1
I've been doing this for a month and am still not 100% sure what I want to happen to it, but I figure anything is better than nothing.

What it is

To make a long story short, I cloned and played around with Pokémon Unity back in September. I don't like Unity, at all, but it got me thinking (again) about what nonstandard Pokémon fan games might look like.

Lots and lots of fantastic games have come out of Pokémon Essentials [citation needed], but developing in fourteen-year-old software has its issues and Ruby is kind of a terrible divisive language. With that in mind, I decided to do a sixth or seventh attempt at a turn-based battle system (Pokémon or otherwise), and to my great surprise it actually worked this time.

I've only been working on this for a month so it currently only works for the parameters provided, so almost any other monsters, moves, abilities and items will be ignored or outright break. There's a bunch more stuff I have planned, though, see below, and I intend it to be open source so you can add to it if there's something you want it to do while I'm busy doing something else, or more probably, playing Skyrim.

Plot

It's a tool.

Features

Implemented:

  • A Pokémon-ish turn-based battle system that's reasonably easy to extend
  • The ability to localize text strings for languages other than English
  • Nine-slice text boxes

Planned, probably in order of priority:

  • The ability to play the game at different resolutions (within reason)
  • Forward-compatibility with Game Maker Studio 2, since that's going to be the version that most people are likely to use in the future
  • 3D overworld navigation, as well as an external editor, because Game Maker Studio 1's map editor is terrible and nobody wants to hard-code map details
  • Event scripting (in Game Maker): writing world interactions inside the Game Maker IDE
  • Make sure multi (at least double) battles work, and possibly tag battles
  • Initiating battles from the overworld: wild random, wild stationary, trainer and otherwise, as well as cleaning up and returning to the overworld when the battle has concluded or been forfeited
  • Mid-battle flavor text, and the ability to interrupt the battle at a certain stage to progress or branch: you know how a lot of important Trainers in Pokémon will jump in to say something on certain events in battle, such as being down to their last Pokémon, or how other games might only require you to bring a boss down into the yellow without needing to defeat them in order to advance the story?
  • A Pause menu, and all of the things that you would expect to be able to do inside of it such as managing your team and applying Repels and admiring your Badge collection
  • Rebindable controls, for both keyboard/mouse and (common) gamepads
  • I still hate the idea of HM items but the world is clearly trending in that direction and they won't be difficult to make
  • A compiled game data format, because human-readable PBS files are slow for the computer to parse and obfuscated binary buffers are fast
  • Saving and loading, in a manner that can be extended without causing everything to fail catastrophically
  • Audio zones, as you'd find in a Bethesda game, so that you can bind an indefinite number of songs to different situations in an area (day, evening, night, plot) and have them play randomly
  • Event scripting (externally): I'm going to try to bind Lua, but if that ends up breaking the cross-platform constraint, over the summer I made a proto-language that I should be able to plug in
  • A quest/faction system, because I like that kind of thing even if most Pokémon games don't demand it
  • A dedicated title screen and a dedicated credits screen: a single image splash as Essentials does and/or something more interactive
  • Event scripting (visual): for those who would rather design than code and like the way you can click on an event type in RPG Maker, input the relevant properties and be done with it, or for those who would rather do both
  • 3D camera trickery, to whatever degree is necessary? Think about the events that transpire atop the Dragonspiral Tower or in the depths of the Whirl Islands
  • Side mechanics such as breeding and farming berries or berry-like entities
  • Some kind of move/effect animation editor, because keyframing stuff through code is the actual worst thing ever, which is why I did so little of it for the demo
  • 2D overworld navigation, as well as an external editor, because Game Maker Studio 1's map editor is terrible and nobody wants to hard-code map details
  • Some kind of Mystery Gift thing
  • Something vaguely resembling the Pokéwalker
Implementing missing battle effects (most function codes, abilities, items, animations) are going to probably be done at some point but I don't know when. Most of them won't be difficult but I'm more interested in most of the other things on the list than plugging in variables and effect text, but someone has to do it, and I don't want to make that much grunt work the job of someone who wants to use this to make a game.

Currently not interested, but can be persuaded:

  • Bug Catching Contest and Safari Zone(s)
  • I'll probably do at least one of the PokéNav/gear/tch/C-Gear eventually but I don't really care which, although the tch is the most modular and thus makes my nerd senses go off
  • Riding Pokémon would be cool but my animation skills are not nearly strong enough to do this convincingly
  • I think Contests are stupid but if enough people want them I'll work on them
  • Secret bases, Join Avenue, Battle Frontier, Ruins of Alph, Sinnoh Underground, other minor minigames
  • In-line colored (and otherwise formatted) text: I think this kind of thing is distracting to look at but a lot of people don't

Will not, and do not ask:

  • Distributable PBS files, and other TCPI assets beyond what I've already made available. The odds that Nintendo are going to take an interest in what I'm doing are low, and I intend to keep it that way.
  • Online connectivity. I've hopefully designed the player/AI pawns in a way that you don't have to rip everything apart if you want to do this yourself, but I have never used Game Maker's netcode and have no interest in starting.
  • A speed-up button. If your game requires a speed-up button, either you've screwed something up design-wise or humanity is beyond saving.
  • A less ugly UI. I'm a programmer, not a designer. I took a class on Interface Design and slept through it. If someone wants to do this for me that'd be fantastic, but for now I'm just giving you pieces and skeleton code that will probably help you make your own.

The last three lists are subject to change, depending on how development goes and how much free time I have. Obviously I'm going to keep working on this barring nuclear armageddon for as long as I can get away with it, and will hopefully remember to update this as time goes on. Check the github (below) for what is probably more up-to-date information.

Screenshots

I only have five and Deo prefers six, but I'll add more as I go. Images are gifs, if they don't play right-click and say "view image:"

Battle opening (the final version is slightly more snappy):
Sample status effect:
Turn switching
Sample abilities:

The AI fighting itself:

A basic overworld composed of the ground and planes sticking up out of the ground, as the DS games are

This is my favorite part, honestly.

Slapping down entities


Editor => Game


Credits

  • I stole re-interpreted a lot of AI code from Pokémon Essentials. (It's still pretty incomplete, though.) Whoever wrote that was a big help.
  • PBS files also came from Pokémon Essentials, because nobody in their right mind would reacquire all that data on their own.
  • Battler sprites, (most) other minor graphics and the small collection of sound effects came from, you guessed it, Pokémon Essentials. Where would I be without these guys. Making something else, probably.
  • The few graphics that are unaccounted for came from spriters-resource or are programmer art.
  • I'm pretty sure everything that doesn't fall into the first three categories was written by me, so all of the code except the ~1000 lines in the "standard ai" folder.
Download/Distributable

The Github can be found here. I was originally going to fork this off into something else when the demo is done, probably with a different name, but now I'm thinking it'll be easier to just leave it where it is.

If you're not familiar with Github, the current release can be found here (0.0.0.1).

Design constraints

I came up with these mostly on my own, so if any of them strike you as odd, that's probably why. There might have been other things I wanted to achieve at one point or another, but pretty much everything that I ended up with can be explained by these.

  • You should be able to make more than just Pokémon games with this
Pokémon is the most straightforward since that's what I had in mind when I wrote it, but for example, it should be quite easy to disassemble the action queue(s) and battle UI to create a Bravely Default fan game, and implementing an active battle timer akin to Chrono Trigger or Final Fantasy isn't impossible, if a little more work.
  • It should be reasonably easy for someone familiar with Pokémon Essentials to pick this up and learn how to use it, even if they've never used Game Maker before
PBS files relevant to the implemented systems should work without having to be modified. When I get to event scripting, whatever form that ultimately takes, it should support any and all of the event actions that you'd find in RPG Maker (except for maybe the things Essentials doesn't make use of such as "begin battle processing"). Internally things may work completely differently - move function codes don't exist as far as the game is concerned, but get translated into something else, and I'm certain the action queue doesn't work the way it does inside Essentials - but on the surface the user shouldn't be able to tell.
  • There should not be a hard limit on how many participants you can have in a battle
Opponents and partners haven't been hard-coded, and instead the battlefield is essentially represented by a cyclical list. I'm hoping to at the very least have double battles working. Making Pokémon Battle Royale would be a terrible idea but the reason you don't do that shouldn't be because my code doesn't allow it.
  • This should be cross-platform (by default; unless the author doesn't want it to be)
Straightforward. Game Maker allows you to export to a bunch of different platforms, although the licenses to do so are pretty expensive. I'm not going to prohibit anyone from linking a Windows DLL if they want to, but I'm hopefully going to design this so that you don't need to. Or at least have the required DLLs be available as shared objects or dylibs.
  • Hard-code as little as possible
One of the things that bothers me about the Essentials code is that a lot of things, including most items and abilities, seem to be hard-coded into the battle logic. This makes my inner software engineer grumpy, and more importantly makes things kind of annoying if you want to overhaul it. Here, items have attached code that runs on use and abilities have options such as how to respond to status effects (Synchronize and Magic Bounce) or contact moves (Static and Rough Skin). Some hard-coding is unavoidable, namely where the PBS files are parsed and effects are assigned, but I'm trying to avoid it.
  • Open-source is nice
Not everything has to be open-source, and if I ever get a job as a developer I probably don't want my stuff to be, but things like this would benefit from as many people working on it as possible. <3

Who should be interested

Use this if:

  • You like Game Maker/Game Maker Language
It's not the most elegant language, so maybe I should instead say "you're used to Game Maker/Game Maker Language and know how to make it do what you want it to, even when it doesn't want to."
  • You don't like RPG Maker/Ruby
Such as the part where the keyword for switch is case and the keyword for case is when, or the part where scripting events via code is excruciatingly painful.
  • You are interested in the nuts and bolts of how a game engine/turn-based battle system works
Action queues (singly linked lists) and priority queues (heaps, probably) galore. The lack of function delegates makes things interesting, though, but there are ways around that.
  • You grow weary of being confined to a 512x384 window in 2018
And/or the weirdness that happens when you try to scale it up.
  • You are intrigued by the concept of system/total overhauls that would be difficult in Essentials, such as complex questlines and factions
Creation Kit for Pokémon. When possible I'm going to imitate certain features of that engine, actually, but not all of them for obvious reasons. Pokémon Essentials is actually an amazing accomplishment when you consider how difficult it is to make RPG Maker function in a different way than it was intended to function, but the operative word is "difficult."
  • You want to be able to adapt this to be another type of turn-based battle system, other than Pokémon
This is actually one of the bigger design constraints. See design constraints.
  • You are excited by the prospect of 3D (or hybrid 3D), as in the DS generations
Unity is most peoples' knee-jerk reaction for anything "3D," but I'm making Sinnoh here, not Assassin's Creed. I'll probably make 2D an option at some point though, since people seem intimidated by 3D in Game Maker for some odd reason.
  • You have need for a fully-featured debugger
I'm personally not great at using it, although I sometimes do as a last resort, but Game Maker has one and a lot of Game Maker gurus swear by it.
  • You're tired of having to jump through hoops to make games work on Mac/Linux
It's been done, but in 2004 there was no such thing as a magic "port to Mac" button. Game Maker has one, sort of, as long as you don't link Windows binaries and you own a license for the correct export module(s).

In a nutshell, I'm (a) looking for an excuse to use Game Maker to make Pokémon again and (b) trying to make it easier to do things that would probably be a lot of work in Essentials.

Who shouldn't be interested

Don't use this if:

  • You don't like Game Maker/Game Maker Language
RPG Maker XP goes on sale on a regular basis despite its age, but Game Maker Studio is no longer available for purchase and for a hobbyist Game Maker Studio 2 is abhorrently expensive. On top of that, Yoyo Games has been known to make the occasional odd business decision which has led a number of people to dislike them, and the proprietary language that it uses has its shortfalls.
  • You like RPG Maker/Ruby/object oriented programming
I think they're both weird, but if you like RPG Maker's workflow, it's probably not a good idea to switch to something different unless there's a very good reason to, which this is not.
  • You want/need something that's fully-featured out of the box
Pokémon Essentials has a decade and uncountable thousands of lines of code behind it. I've been working on this for a month and my LOC count has barely scratched 10k, which means most moves, items, abilities and battle variables have not been implemented yet. Important systems such as saving/loading, event scripting, breeding, animations and anything regarding the overworld haven't even started work at this current moment, so you'll have to either wait a long time for me to add them or write them yourself.
  • You prefer the GB* aesthetic
I got into Pokémon during the DS era so that's what I think of when I think of "Pokémon," but you very well might not. (Whatever you do, please, PLEASE stop cross-breeding the FRLG and HGSS tilesets.)
  • You're more of a designer than an engineer
One of Pokémon Essentials' goals is to be as accessible as possible, allowing the author to design games without needing to muck about with the code that makes it work (mostly). I'm much more interested in seeing people ripping holes in my code and replacing it with stuff I wouldn't have even thought of, although one of the deep-future wish-list items is for people to not have to do that if they don't want to.
  • You don't have a need for the bells and whistles that have caught my attention
Not all games have to be elaborate; see game jams. I just like to do things that way because there's something wrong with me.
  • You prefer that your code is properly documented/commented
I'm working on it, okay?

Questions and stuff

I figure someone is going to ask most of these eventually.

  • Why?
Because I can.
  • What's with the name?
I've been trying to make a game since I was sixteen, and barring a few minor things that's never happened. I'm not a stupid teenager anymore and since I want to eventually make money being a game programmer, I need to hurry it up, fan game or otherwise.
  • Why Game Maker?
I don't like Unity, like, at all. Unreal Engine is way overkill for what I'm trying to do. I'm not a real computer scientist and I don't really know C++, and in any case writing your own OpenGL rendering engine is ass. I briefly thought about libgdx, but people don't seem to like Java and its future seems pretty bleak anyway.

All of that doesn't matter really though, because I'm by far most familiar with how Game Maker works (and how it doesn't, and how to get around the limitations) and can write code for it faster than pretty much anything else. (10k lines in 30 days, during which I also went to school and spent almost 60 hours playing Skyrim.)
  • You didn't include PBS files in the download!
I know. They're not hard to find. Get them yourself. Do not mess with my gitignore.
  • Can the AI battle itself?
Yes. In fact, that was the first thing I did when I finished: see the video under "screenshots." If you want to do it for yourself, download the code and change PlayerPawn in the DebugBattle thing to just Pawn.
  • You mentioned localization? How?
Essentials has an internal "extract text" option that appears to analyze its own code and identify all translatable strings. Game Maker can't do that, so I wrote a separate program to do it instead, which you can find elsewhere on my Github. It works for what I've written but is technically still WIP and will probably stay that way until the need arises, if it arises.
  • Can I make money from this?
If you do anything involving Pokémon with this, the answer is a resounding "no." (Look up the answer to that question regarding Pokémon Essentials itself; my answer is the same.)

If your game is 100% trademark free - monster names, monster sprites, UI sprites, audio, and preferably using different type, move, ability and item names, and some modification to the battle loop, although none of that is trademarked, and to be safe you probably want to remove all pieces of code that include the text poke even if it's not visible in the final product - I don't really have any ethical objections to anyone using this to make money. With that being said, I don't see this project being a state where that's a reasonable goal for a very long time.

Either way, credit me, or I'll be pretty pissed.

That's that. It's now 2 AM so I'm either going to go to sleep or get started on the ol' to-do list.
 
Last edited:

kmb

dabbling in game design
Member
Posts
60
#2
That sounds awesome! Game Maker Studio has always been user-friendly, although maybe requiring a little more coding knowledge to make a good game, and this looks like a great way to more easily make 3D games like the ones we got to experience in Sun and Moon and Let's Go.
 

Dragonite

Have they found the One Piece yet
Member
Posts
228
#3
Realistically it's not going to look like Sun or Moon or even X or Y, since that requires proper animation, which requires hacking around with shaders, which I don't plan on spending much time on. If someone else has that kind of skill set they can add it in though.

Right now I'm just using a perspective camera.

 

Dragonite

Have they found the One Piece yet
Member
Posts
228
#4
I haven't been making nearly as much progress on this lately as I would have liked but I guess I ought to check in once in a while to say I'm not dead and am still working on this, I just sorta accidentally took a month off to deal with other stuff and it turns out that code is use it or lose it. Anyway, I probably said something about making a game data editor at some point, and it's coming along, although it probably would be going faster and with fewer bugs if I would have just dug out that old win32-in-game-maker thing that was going around the Internet like a decade ago.

This is basically everything it does. Needs more tabs.

 

Dragonite

Have they found the One Piece yet
Member
Posts
228
#5
Did I ever mention that life is a pain in the neck? Because life is a pain in the neck. Anyway, the map (and data files) made in the editor can now be loaded into the game and they do what you expect them to.


Next is probably going to be throwing more and more properties into the things in the map and making them do stuff in the game, like "act solid" and whatever.
 

Dragonite

Have they found the One Piece yet
Member
Posts
228
#6
"When tasked with a problem, a novice programmer would most likely just hard-code the solution, a more experienced programmer would implement a more generally applicable solution, and a veteran programmer would just hard-code it."

There's probably a life lesson in that, but I'm not sure what it is, so let's not think about it right now. So, I probably won't have to define what an "item" or "monster" or "class" is again for the rest of my life.


In other news, the guys who put me up to this (read: "the guys who asked me if I wanted to make a game and I asked if they'd let me use that as an excuse to do this and they unwittingly said yes") have pretty much figured out what the actual game rules are and a good part of the setting, etc, and there's even an artist on board who's probably going to have something graphical for us soon™ so I might even be able to stop using game freak's art for things one of these days!
 

FloofyPanther

The sheriff around these parts
Member
Posts
39
#7
Quick question, where should I download GameMaker? GameMaker 1 isn't officially available and I don't know which site I should download it from (because you know, viruses)
Secondly, would you mind if I help out with the UI and stuff?
 
Last edited:

Dragonite

Have they found the One Piece yet
Member
Posts
228
#8
If you already own GMS1 you can log in to re-download the installer, but other than that the only one officially available now is GMS2 - although for reasons I'll be formally migrating to that in a matter of time anyway, which hopefully won't be too much of a hassle. There might be a legitimate third-party host that still has GMS1 up, but I've never been a fan of third-party hosts, so I wouldn't know.

UI? Probably, I'll have to get back to you on that in the morning though - if you're in relic discord it should be easy enough to send me a message there. Although this week is probably going to be the "do all of the homework that I've been putting off since february" week so I might end up dragging my feet on development until about May or so.
 

FloofyPanther

The sheriff around these parts
Member
Posts
39
#9
I've finally got GameMaker, ran DDD, and I got these errors:
############################################################################################
ERROR in
action number 2
of Create Event
for object World:

Trying to draw non-existing sprite.
at gml_Script_tileset_create_master (line 17) - draw_sprite(argument0.picture, 0, 0, 0);
############################################################################################
--------------------------------------------------------------------------------------------
stack frame is
gml_Script_tileset_create_master (line 17)
called from - gml_Script_tileset_create (line 34) - master=tileset_create_master(id);
called from - gml_Script_load_tilesets_meta (line 51) - var ts=tileset_create(ts_name, t_grid_passage, t_grid_priority, t_grid_flags, t_grid_tags,
called from - gml_Script_load_data (line 61) - load_tilesets_meta(buffer, version);
called from - gml_Object_World_CreateEvent_2 (line 253) - load_data();
called from - gml_Room_the_primary_room_that_the_game_operates_out_of_Create (line 1) - instance_create(0, 0, World);
############################################################################################
FATAL ERROR in
action number 2
of Create Event
for object World:

ds_grid_get argument 3 incorrect type (undefined) expecting a Number (YYGI32)
at gml_Script_load_data_parse_classes (line 16) - data.damage_type0=blob[# i, property_map[? "DamageType1"]];
############################################################################################
--------------------------------------------------------------------------------------------
stack frame is
gml_Script_load_data_parse_classes (line 16)
called from - gml_Script_load_data_instances (line 40) - load_data_parse_classes(all_blobs);
called from - gml_Script_load_data (line 73) - load_data_instances(buffer, version);
called from - gml_Object_World_CreateEvent_2 (line 253) - load_data();
called from - gml_Room_the_primary_room_that_the_game_operates_out_of_Create (line 1) - instance_create(0, 0, World);
Although I know this is supposed to be a more complex and code based project and that I should be able to do it myself, the fact that this pops up the first time I run your concerns me. However, there is a small chance it has something to do with the game maker file I downloaded.
 

Dragonite

Have they found the One Piece yet
Member
Posts
228
#10
Hmm, those are both looking for files that are hidden by the gitignore - the first one is a set of Pokémon tilesets that I don't really want to be spreading around, the second one is the game data that's specific to the project that I'm working on that I don't really intend other people to see. There are supposed to be dummy files for both that get used instead if the game can't find the intended ones but they're not being used correctly, so I'll have to change those and probably update the readme to explain how it works later. (The first one goes for both the game and the editor.)

There's also another potential source of breakage if you have the right files in place, I need to do some things today though so I probably won't be writing any code until probably late tonight.
 

Dragonite

Have they found the One Piece yet
Member
Posts
228
#11
Slight change of plans: have decided to migrate entirely to GMS2 instead of trying to maintain usability in both, due to:
  1. One or more functions that I need in GMS1 being broken or simply not existing
  2. GMS2 currently featuring some nice things like code folding and [array literals]
  3. GMS2 being leveled up to include some even nicer things in the not-so-near future
  4. I'm already safely on the all-time list for GMS1 playtime and since that's not being sold anymore I'm probably going to stay there for a while
  5. Oh yeah, GMS1 isn't being sold anymore so if I want most people to be able to use this I should be using 2 anyway
  6. No hacky workaround for Scribble needed
  7. They got rid of d3d
  8. Friggin' buffer_set_surface
@FloofyPanther school took more of my time than I wanted it to but I thought of a better way to make the files in the gitignore a non-issue, so assuming you've got access to GMS2 hopefully . . . soon?
 
Top