Work in Progress Pokémon: Do Or Die

Dragonite

The cake is a lie, so give it to me
Member
Posts
191
#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

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
61
#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

The cake is a lie, so give it to me
Member
Posts
191
#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.

 
Top