Platform Masters - Will you be the world's next platform master?
Last updated: May 3, 2009 (first version)
Level 7 update on Oct 15, 2010 (several new questions added (mostly in sections 1 and 2), others updated to match current progress, and others simply expanded on, especially 1.5)
Level 5 update on Feb 3, 2011 (progress status updated, along with other changed needed with the design change)
Level 4 update on Jan 17, 2012 (proofreading, updated the content to better match the current design, and deleted question 3.7 (3.8 is now 3.7))
Level 5 update on May 8, 2013 (added question 3.8, a new question - later being heavily expanded on)
Here are some frequently asked questions (FAQ). This list will be expanded on and updated as development continues.
1.1 What happened to "The Supernatural Olympics"?
Q. What happened to "The Supernatural Olympics", your other game?
A. "The Supernatural Olympics" has been abandoned in favor of Platform Masters since, to some extent, they have quite a few similarities though Platform Masters has far more to it.
1.2 Why create this game?
Q. Why did you bother to create this game?
A. There are several reasons. The first is that I wanted a game that was focused much more toward game play than graphics (though, as of about August of 2010, this has changed some so that graphics are more focused on than before, but game play still dominates). The second is that I wanted a game that used common elements from video games - worlds, lives, levels, enemies, bosses, and the related. Third, limits like 99 lives or 9,999,999 points are annoying and deteriorate a game's replay value. After all, who can live 500 years to max out the score?
1.3 Why not DirectX or SDL?
Q. Why are you still using AlphaBlend, instead of DirectX or SDL?
A. Three things mainly. First, it's what I'm used to. Second, it's the difficulty of 2D support in the case of DirectX (I need DX7 libraries for dedicated 2D functions). The third case is motive and getting myself to make the change. In the past, I didn't know where the DirectX SDK was and the licensing of commercial use of SDL (since I didn't want to include all the source code and I had no idea on how how to link dynamically). Changing over shouldn't be too difficult though - what do you suppose the "replace" function and the "replace all" button in text editors is for? The hardest part is getting myself to do it, considering I'm eager to play Platform Masters in fullscreen mode myself.
1.4 3D flat plane clouds and ground decals
Q. How did you get the 3D effects for the clouds and ground decals, and why are they a flat plane?
A. There is a video on YouTube spanning nearly 2 hours that details the entire routine. See the development history section for the video. In brief, the formula "Pixels*Scaling = CU" is at their heart, as explained in the parallax scrolling section. The flat plane is a limitation I have. Otherwise, the draw count gets way too high causing the frame rate to get so low as to render PM unplayable.
1.5 Using malloc
Q. What is malloc? Why is it important? What's the problem you're having with it?
A. In C programming, there is a function called "malloc" that is used to allocate memory dynamically. This is used for dynamically changing the amount of memory used by particular objects, such as background scenery, foreground objects, and other such essentials, even the display area. Without using malloc, I have to use fixed sizes of memory, which, for multiple worlds, results in wasting memory, taking away some benefits from reducing graphics settings. For example, the largest of objects use an image size of 2048x448 at 32-bit color (the closest mountains in worlds 10 and 13). For a world like Keveran Forest where there are numerous layers of scenery and no big ones, this results in a fair amount of waste since only a tiny fraction of the 3.5 MB is used and more arrays are needed for each layer of objects. World 11 is the most extreme of these and is where most of the memory usage comes from.
Since it takes 5+ hours of endlessly using copy paste (the fastest method I can think of) to convert a lot of text to the format that malloc needs, a boring and tedious process, and another 5+ hours to revert back, you can see why I've given up on using malloc for memory allocation (3 hours initially). Fortunately, I've come up with an alternative memory management system. It makes the programming a bit more complicated, but it's the best I can think of. It still results in wasted memory, but it shouldn't be much more than 8 MB of which is a very small on today's systems.
While I mostly understand how to use malloc (supposedly), the problem is that nothing is being drawn (I just get an all-black screen). The basic setup I had involves several aspects. The loading of image data is present in my "LoadImageFile" function, which has numerous parameters to begin with, though only one of them is relevant: a pointer to the image data. I couldn't get malloc to work for a direct global pointer, but I did get it to work if the pointer was in a struct. Since several objects are very similar (like the springs being the same in every regard except game play function (a difference only in the speed) and color (there's 5 varieties)), I have an array of structs. The problem comes with getting the data to be displayed. I've tried all sorts of combinations of the use of the * and the & to denote pointers and addresses. Some reported errors, others reported warnings, while very few didn't report anything. This is the basic idea, in brief (if you don't understand this, skip to the second-to-the-last paragraph of this question as this is where the advanced technical content ends):
... // headers and linking (math.h, malloc.h, stdio.h, etc.)
... // various other unrelated variables and pointers commonly used
BITMAPINFOHEADER Info; // image width, height, size, bit depth, etc.
unsigned char *Data; // the pointer to contain the image data (pixel colors)
struct ImageBasics SpringBasics; // the 5 color variants of the springs
The critically important LoadImageFile function.
This function fills in the structs required for drawing, allocates memory,
and provides fixed function effects, especially fog.
void LoadImageFile(..., struct ImageBasics *BMPInfo, ...)
... // local variables
// stage 1: Obtain the full path to the file being loaded
// stage 2: Fill in the ImageBasics structure
fread(&BMPInfo->Info.biWidth, 4, 1, FileHandle); // the image width
fread(&BMPInfo->Info.biHeight, 4, 1, FileHandle); // the image height
fread(&BMPInfo->Info.biSizeImage, 4, 1, FileHandle); // the image data size
BMPInfo->Data = malloc(BMPInfo->Info.biSizeImage); // allocate memory
// stage 3: Process the image data to allow for fog or other fixed effects
// stage 4: Premultiply the color values for use with AlphaBlend
// somewhere within a function
LoadImageFile(..., SpringBasics, ...); // load the blue spring's data
LoadImageFile(..., SpringBasics, ...); // load the green spring's data
LoadImageFile(..., SpringBasics, ...); // load the yellow spring's data
LoadImageFile(..., SpringBasics, ...); // load the red spring's data
LoadImageFile(..., SpringBasics, ...); // load the white spring's data
// after the function after quitting is executed
for (LoopCount = 0; LoopCount < 5; LoopCount++) // a common loop setup I use
free (SpringBasics[LoopCount].Data); // free the memory
This is my basic method for programming. While there may be some errors and/or warnings, ignoring stuff left out (the triplet of dots), this is the general setup I had at the time (and still otherwise use though the data part is a separate array, apart from the struct). You might be noticing the use of "stage 1" and the such - this is a simple, one-line description as to what the following part of the code is supposed to do. Sometimes, this gets split into substages, like "stage 3-1: Obtain the draw-to Y position" or even something like "stage 4a: Even values require a different routine than odd values", but this is fairly rare. I've checked the biSizeImage value and it's exactly what I'm expecting to see - 4096. The image itself is 32x32 and uses 32-bit color (since transparency is needed). Data, unlike strings, don't require a zero terminator so 4096 should work fine in this case. There's no need for the multiplication of a "sizeof(unsigned char)" type thing - multiplying by 1 has no effect on the value. I actually never use "sizeof" because I don't have a use or need for it... yet.
As to what the problem is, I don't know. I'm not going to spend now likely 5 hours to revert back to the malloc system and essentially put PM out of commission, likely delaying its release another year due to the huge drop in motive this has). It actually took that long for me to even bother with further programming once I gave up on malloc. It was only once I had to make repeated adjustments to my "WAV file sample rate generator" program that eventually caused me to regain my motive, but it really took a long time to get started. Despite this, I made a lot of progress on the scenery front so the time wasn't completely wasted or lost.
How do I know it's not working? I checked the image data for the sky. The sky is bright and blue and never uses a color value less than 64, but seeing nothing but 0's for every part of the image (and other images as well) makes no sense. Without the debug panel being available, I have to use the rarely-used level 2 debugging method: MessageBox. At least MessageBox worked, since it doesn't require the loading of images or anything, just simple strings which didn't use malloc. Level 1 (the least in-depth) debugging is the debug panel, and level 3 (the most in-depth) is the step-by-step method where the code executes one line at a time upon a keypress (F10 in MSVS). For image data loaded from a BMP image, you'd expect 9 consecutive values to have change or at least some pattern (especially for the sky since it uses smooth gradients). Consecutive? Something like "DebugTest = Sky.Data; DebugTest = Sky.Data; DebugTest = Sky.Data; ..." is consecutive. Image data is read in the BGR format rather than the more familiar RGB. It's also read from the bottom to the top rather than top to bottom. It works perfectly fine with fixed array sizes, but it's all 0's once malloc is mixed in.
I have 3 hypotheses as to why malloc isn't working (ordered from least certain to most certain). The first is that malloc allocating memory with a pointer in an array of structs cannot be done. The second is the incorrect use of the & and the * symbols. The "&" is meant to indicate an address. The "*" is meant to indicate a pointer or dereference one (the dereference case is lesser known to me). The third case is array overflow - a read in the current image is extending into the previous. For case 1, it seems rather odd that this would be the case and thus quite unlikely (about 2% chance I'd say), though it's not ruled out due to the lack of testing on this front. As far as I'm aware, the actual allocated memory is stored outside the array of structs - the value of the pointer changes though, to reference the memory address of the first byte of the allocated memory. The second case is the most likely (about a 30% chance I'd say) although I've tried pretty much every combination of the use of the & and * as I could think of and nothing worked (including the use of ** and even *** instead of just * (for a pointer to a pointer)). Some setups produced errors and the code wouldn't compile. Others produced warnings but the program ran... showing nothing but an all-black display. For case 3, this is something I regularly experience even with fixed-size arrays and is thus the most likely case (about a 50% chance I'd say). Typos, incorrect formulas, even forgetting to update content after a copy paste operation (the latter is the most common case considering I have 3 different LoopCount variables - LoopCount for outermost loops (a common case I have), LoopCountInner for loops within LoopCount (also common), and the very rare LoopCountCore for loops within a LoopCountInner). You can see the pattern here - it goes progressively inward, to the core at the innermost. I see no need for an even deeper nested loop beyond the core. Array overflow makes even the level 3 debugging method very difficult to resolve the issue. What about the other 18%? It's room for error for other possibilities I either don't recall or I may be unaware of.
Despite the issue with malloc, I did come up with a solution to maximize the use of memory, minimizing waste (it won't cause leaks, but it will cause waste). How my memory management system works isn't complicated to understand though. Let's say, in one world, I have 3 images, the closest layer is at 256 KB, the next closest is 16 KB, and the furthest at 32 KB. I'd assign the 256 KB value to layer 1, 32 KB to layer 2, and 16 KB to layer 3. Now, let's say I add in another world, of which uses 4 layers. I have the closest layer at 64 KB, the second-closest at 4 KB, the third furthest at 8 KB, and the fourth furthest at 512 KB. For layer 1, I see that my new 512 KB is bigger than the previous 256 KB so I increase its array size to 512 KB. For layer 2, I check the size of the new addition's second-biggest size (64 KB) against what I currently have (32 KB). If it's bigger, I increase the array size accordingly. The same applies for the third, but, the new set's third biggest (8 KB) is smaller than what I currently have (16 KB), so I leave it alone. Since nothing was present for the fourth, I create a new array of that size, 4 KB, and resize it as needed. Although the overworld is a gigantic 2048x1024 (with thoughts of 4096x2048) at 24-bit color, you'd think I'd need 6 MB (or 24 MB). By "recycling" existing arrays and using multiple draws, I can avoid this route. For things that never change, such as jewels, platforms, springs, on-screen information icons, fonts, etc., these stay the same, never changing. You can see how this helps keep the memory waste to a minimum. However, it complicates things due to the way the assigning of data for AlphaBlend's stuff works. I can't just use a simple count for the order of layers, I have to use the order of their distance (since they need to be drawn back to front). In this example, I'm going from 1-3-2 to 2-4-3-1, a completely different order. If I referenced things in memory order, which would be easier, objects that are supposed to be drawn in front of everything end up in the back and things look weird, very weird (a class 3 bug).
Another alternative I've come up with for this is to allocate a single large array, like 30 MB or whatever, and use it to contain the data for all the images. This cuts the waste to a bare minimum, even zero, but it has a very bad negative side effect - add in another layer of scenery or use a different size and I've got a lot of work resizing the array and readjusting the positions. Besides, I don't know if it's possible to have image data read into the array starting at 4096 (like the springs case) instead of 0. With Carnivalesta having 40 images (!) and world 11 having something from 85 to 100 (not yet known), making a change to something early in the array will require a lot of work recalculating positions and is just not worth all that effort to begin with. Some things never change, like the springs, platforms, enemies, jewels, extra lives, hearts, or onscreen info stuff. Others, however, especially background scenery and the clouds, change when the world changes. For now, until I come up with another solution to dynamic memory allocation, the memory management system I've come up with is the only solution I have right now.
1.6 Small character
Q. Why is the character you play so small in size? He's hard to see!
A. Everything in Platform Masters is realistically to scale from the foreground to the background. This is one thing that sets Platform Masters apart from other 2D platformers (that I've seen and played). At 192 mph, you're moving 60 blocks every second (nearly 2 full screen widths and 2 1/2 full screen heights) at the location and distance the character is at. 192 mph is fairly easy to reach, especially with the bounce ability. With the top speed easily able to get to 72 mph (freeway speeds), there's no other alternative than to make the character small so that objects don't go by in a blur giving you no time to react to things like spikes, enemies, or even a cliff that leads to a bottomless pit if you fail to stop in time). This size, 41 pixels when standing (the character is 40 CU tall, 70.4 inches (5 feet, 10.4 inches; 178.8 cm)) accurately mimics a typical adult). Being at a scaling of 1 (for about 100 1/8 feet of distance from the camera when the field of view is about 106.26°), it's much easier to program everything (multiplying and dividing by 1 doesn't change the value so accounting for the scaling can easily be left out). By being this far out, it's also easier to see where more of the platforms are, to find your way to the all-important goal platform. As a tip, if you're going by the screenshots and YouTube videos, watch the YouTube videos in fullscreen mode. This will give you a more accurate representation as to what the character's size will be in fullscreen on your monitor.
1.7 Measurement units
Q. Are metric units possible? Also, what's a "CU" or a block?
A. Definitely. I don't have 40+ configuration settings for nothing. See the overworld section for details.
1.8 Programming help
Q. Seeing that you're having problems with malloc, do you need any help with the programming?
A. I already know how to program everything Platform Masters needs. It's just a matter of time, motive, and effort. I can figure out how to do almost anything in 2D game programming, given enough time. 3D game programming, however, is a different subject, but even then, my tricks with 2D game programming work with 3D game programming as well. Collision detection with 3D game programming is really the only unknown - I don't have a clue as to how to do it with more than just flat walls and edges (no slopes, no curves, just a solid grid-like arrangement). Of course, I have almost no experience with 3D game programming. The primary unknown with programming is hardware-related stuff. I wouldn't have a clue as to how to make even the simplest of all robots where, by pressing the F key, a light turns on. I know how to do the keyboard input (via GetASyncKeyState, or the Windows function name close to that) to set a variable (how else am I getting the character to move in Platform Masters in my YouTube videos?), but I wouldn't have any idea how to get that light to even turn on, assuming all the wiring is correct in the first place.
1.9 Design document
Q. What is a design document, and why is yours 180+ pages?
A. A design document is like a blue print for the design of building for future construction only for a software program instead, including video games. Blue prints for buildings list measurements, mark where doors will be, and various other things. Design documents detail how a program should be laid out. In the case of Platform Masters, a video game, the design document covers how movement should work (including formulas), how progressing through levels works, how levels should be designed, what enemies there are and how they're defeated, how scoring works, the layout of the scenery in the worlds, and even the entire story. Every aspect of Platform Masters is explained to a fine degree of detail. The list of configuration settings, scenery descriptions, and story alone use up over 100 pages.
While I don't have any idea how the pros have them (I've never seen a completed design document like the pros would use), so I can't compare the level of detail that I get into. Take the jewels, for example. I've got about a half of a page detailing them. The details include things like what they look like, a description of their core function, the scoring, how collision detection is to work, how they fit in with the object identification system, how they must be placed in levels, and other such things. That's just the 5 jewels, let alone the springs, extra lives, platforms (and their 11 types), spikes, water, and other game objects. I don't know if this is normal, but it sure is a lot of detail for just one element in the game. This is partly why my design document is well over 100 pages. I use half inch margins for the standard 8.5x11 paper size and the font Tahoma. It wouldn't be too unusual for the design document to get as long as 200 pages by the time I'm done with it.
1.10 Classified contents
Q. What do you mean by "classified" and why are some things considered this?
A. When I mention that something is considered as "classified", such as what the blue and magenta flags are for on the overworld or how the stats (max HP, jumping, top speed, etc.) are raised, it means that the details about it, other than what I've already specified or that you can see, are hidden from the public. Only I know about them - not even my family knows about them. Why do I do that? I'm just mimicking what other game companies do - I just do it in a different way. The idea comes from military stuff (UFO-related stuff is riddled with this kind of stuff) - no one except the military (to some extent) knows about it. Instead of being for a country's defensive or security reasons, in my case, it's a sort of an anti-theft system (I'm not exactly sure on this either or why game design companies do it in the first place). Regardless, over time, these elements will eventually get declassified - that is, become known to the public. For a while, Carnivalesta was classified outside the fact it took place at night (the only world that used the night sky) and was world 9 (8 in the previous system), but it's now been declassified for a long time and has changed considerably since then. Other worlds, what the blue and magenta flags are for, or how stats are raised will eventually get declassified over time. It was fairly recently that the very existence of worlds 19 and 20 were declassified, but what they are still remains classified. Over time, you'll eventually see them.
1.11 Numerous worlds
Q. Most games I see usually have no more than 8 themed worlds. Why does Platform Masters have so many?
A. This is for a few reasons. The first and primary is that I wanted as much variety as I could, while also sticking to a storyline. The second, a close second, is to increase the total play time. The third is that I wanted to go to an extreme. As I was planning the overworld layout and the basics of the story, I needed to take into account the variety of environments one might go through, from the tropics to the arctic, the forest to the desert, and a lake of water to a lake of lava (from a volcano). Common themes I see in video games involve forests, swimming levels, lava-based levels, deserts, slippery ice in arctic worlds, and grasslands, among a few lesser common others. Platform Masters contains pretty much everything I can think of and recall from other games I've played like theme parks, cities, and mountains (if this is a hint as to what other worlds might be).
1.12 Development computer specifications
Q. What kind of computer are you developing Platform Masters on?
A. It's sort of midrange, at least for early 2011's systems with 2 GB of GDDR5 VRAM, 16 GB memory, and so forth. By mid-2012, the most likely time Platform Masters will be released (there is no set release date), computers will probably have 4 GB VRAM, GDDR7, 32 GB memory, and so on. My system is fairly weak compared to this. Only the memory and resolution are the strong points, resolution especially. This may seem like I'm at a disadvantage, there's a hidden bonus: it's easier to ensure that Platform Masters will run on older computers. As of January 17, 2012, these are my computer specs to the best of my knowledge.
Origin: Custom built with all parts from Newegg. I get everything computer-related from Newegg, a great place for getting computer hardware. I've used them for years and I don't foresee changing.
Type = desktop; // I've really only worked with desktop computers with very little experience with laptops/notebooks. I rarely travel so I really have no need for a laptop. Besides, custom-building one is one thing I don't know how to do and I generally dislike all the preincluded "trashware" that comes with a new computer.
Computer case: Cooler Master. I don't know the exact model but it's from 2008.
Power supply: NZXT 750-watt Hale 90. 62 amps on a single +12V rail is very nice. It's also gold-certified so it's extremely efficient, about 90% efficient.
Motherboard: Gigabyte GA-Z68P-DS3. This is a socket 1155 motherboard with a Z68 north bridge. Aside from the mounting screws shorting it out when the bottom of the screw head makes contact with the motherboard and only 1 PS/2 port instead of 2, this is quite a decent motherboard.
Processor: Intel i7-2600K. It has 6 MB of L3 cache and is a quad core with a 3.4 GHz clock. Being a "K" processor, overclocking is easily possible and I have this thing at 4 GHz and it runs very well. Most of the time, I'm idling (like now since typing is so undemanding)
CPU fan: Cooler Master Hyper 212 Plus. With the stock fan being inefficient (getting to nearly 70C on the temps under load at the stock 3.4 GHz clock, very high and barely in the safety zone), I got this fan to combat the high temps and it really works. Even under load at 4 GHz, I can't seem to get my CPU above 55C. The only downside is it's sheer size and the installation.
RAM: 4 GB of DDR3 G. Skill Ripjaws. Although my motherboard supports up to 32 GB, I rarely ever need more than 2 GB and with a 32-bit OS, much above 3 GB is otherwise wasted.
Video card: Nvidia GeForce GTX 460. My previous 7600 GT didn't have CUDA for video editing and that was the only reason I upgraded. Platform Masters runs nearly maxed at 60 fps on a 7600 GT and I was otherwise quite happy with it. The HDMI input caused a lot of confusion on audio drivers with a video card since from all my experiences, video cards have never dealt with audio - the sound card did that. I only have a single TV that uses HDMI anyway and its far lower in resolution than my monitor so I have no point in using it.
Sound card: Creative SoundBlaster X-Fi Platium. This is one of the few pieces of hardware I have that's behind. It uses a standard PCI slot rather than PCI-express.
Primary hard drive: Seagate Barracuda with a 250,048,479,232-byte capacity, 16 MB cache, and 7200 RPM. This hard drive has Windows and all my programs stored on it, as well most documents.
Secondary hard drive: Samsung with a 1,000,202,240,000-byte capacity, 16 MB cache, and 7200 RPM. This hard drive is dedicated for video and music processing, as well as photos from my digital camera. Videos were the primary reason I got this big drive since videos are demanding. I also wanted a fast drive as, at the time, I couldn't record at 1024x768 at 30 fps without the hard drive being unable to keep up. I was limited to uncompressed video at the time until I got the H.264 codec.
Optical drive: ASUS CD/DVD burner combo with 24x DVD write speed. I only use this to install software that comes on CDs (usually drivers, occasionally programs), and especially for running backups.
Monitor: Philips 109B65/27, a 19-inch CRT with 1920x1440 resolution. LCD monitors are not an option as you pay twice as much for even less resolution than this. 1920x1200 is lower resolution. The only thing higher is 2048x1536 (on a CRT) and 2560x1600 (on an LCD). The 2560x1600 is what I'd love to get, but it costs 7 times the amount my CRT costs (6 times as much if shipping is included).
Display resolution: 1920x1440. Despite having this monitor for 3 years, this is still generally higher than most have (apparently 1920x1200 at the higher end with rare cases of anything higher). Thus, this is one of my computer's strongest points. Yes, it means that I have 144 pixels every inch making the pixels very tiny. I have very fine vision so I can easily see the dot of the i in the Courier New font at size 10.
Keyboard: Lite-on standard 102-key corded keyboard. Nothing special here other than it being the only PS/2 hardware I have. I hate wireless so I wouldn't bother with it.
Mouse: Microsoft corded optical. Nothing special here.
Speakers: Bose Companion II. I almost exclusively listen to stuff in mono so I otherwise have no need for a 5.1 setup. I got these in early September of 2011 at the end of a vacation.
Operating System: Windows XP Pro SP3. I have no intentions on upgrading as a fair amount of the software I have may not even work in Windows 7, causing big problems. Besides, since I rarely need more than 2 GB of RAM (about 2.5 GB is the most I've needed), the benefits of a 64-bit OS don't apply.
From what you can see here, the resolution and CPU are really the only strong points of my system. Platform Masters does not need anywhere near as strong of a system to play. See the system requirements for what kind of computer you do need.
1.13 Determining contrast
Q. What is meant by a contrast of 100? How is it determined?
A. Contrast, in my case, is a measure of the difference in the apparent brightness of 2 colors, especially when adjacent to each other. It is based on the shade of gray that appears to be just as bright as the color in question. Take green. Most color to grayscale converters I've seen report 153 as the value. This is far from correct. You can see for yourself by putting the color (153,153,153) next to (0, 255, 0). The shade of gray is much darker. However, gray shade 212 (use (212, 212, 212) for that) is much, much closer. With gray shade 212, you practically can't tell the difference between the two in regards to how bright they appear. Thus, the contrast between the typical converted gray shade and the actual color is 212-153 or 59. That's quite significant.
I have a contrast calculator on my main site at the bottom of section 4.4.1 here. You'll need to take the difference between the apparent brightness of the 2 colors.
1.14 1024x768 only resolution
Q. Why is Platform Masters hard fixed on running at a 1024x768 resolution?
A. There are 2 reasons. The first is the malloc issue. If I provided support for a 2560x1600 resolution, the highest available today, I'd need to allocate 32,768,000 bytes of video memory in just buffers alone. Someone using a 640x480 will still end up using 32,768,000 bytes of video memory as the fixed array size will be that size. If I went with the 8,388,608 that 1024x768 uses and used 2560x1600, I'd have array overflow and this will cause the program to crash, almost guaranteed. The memory usage seems high, but remember that there are two buffers used, one for drawing into, the other for displaying.
The second reason, and the primary one, is the design and a 2D limitation. Someone running the game at 2560x1600 will have an unfair advantage over someone running at just 640x480 because, at that resolution, one can almost see the entire level and immediately know where the goal platform is. Since typical levels might be around 3072x1024 early on and maybe 8192x2560 pixels later on, you can see where this is going. In the middle of an early level, you can see pretty much everything in the level and immediately know where to go. Pause the game, trace the route you want, and there you have it. At 1024x768, only a fairly small portion is visible becoming even tinier at 640x480. Why not just increase the resolution of the textures? This is a limitation of 2D. With even one element being upscaled or downscaled, the frame rate drops from a nice 200ish fps on my system to an almost unplayable 7 fps.
1024x768 is, thus, the best balance between resolution, memory usage, amount of detail seen, and total compatibility with computers. Nearly any computer supports 1024x768, even most netbooks. Only mobile devices, such as smartphones, cannot (from what I've heard). A lower resolution also requires less work on my end reducing amount of work needed.
2 Game play
Q. How difficult will this game be?
A. That's actually your choice. Want to take it lame and real easy just so you can see and follow the story? Choose difficulty 0 (effortless). Want a serious challenge that only true masters at this genre can handle? Choose difficulty 8 (extreme). Difficulty affects both the time limit and the amount of HP loss enemies and hazards cause. The speed of platforms is not affected though as this will cause jumps to change due to the game's physics. For further details, see the levels section.
2.2 Double jump
Q. Modern platformers often include a double jump. What about your game?
A. This is undecided, but it has been added to my design document. There's springs, moving platforms, elevator platforms, and other such helper objects to allow for greater height and distance coverage than normal jumps offer.
2.3 Player-created levels
Q. Will I be able to make my own levels?
A. It's doubtful as setting up for this requires a lot of special checks and stuff, complex positioning, among numerous others. This is still an open possibility though so don't count it out just yet.
2.4 Jumping higher and special abilities
Q. I've heard in your YouTube videos that jumping height, top speed, acceleration, and HP can be raised, apparently without limits. How is that going to be done?
A. This claim is right, but unfortunately, as of January 17, 2012, how this is done remains classified.
2.5 Themed platforms
Q. All of your platforms always have a randomly colored checkerboard pattern. Why don't the platforms stick to the theme of the setting?
A. Complexity, the great workload required, download size, low motive, and my core concept designs (in order of strongest to weakest influence for the major reasons). While it can certainly be done, there are a lot of problems to resolve before this can even be attempted. Collision detection is not one of them, it's mainly sizing (all platforms must be a multiple of 32 CU on all axes, even the sloped ones). While I can come up with a theme for most of the worlds, coming up with 20 themes for the game's 20 worlds is a real challenge. With numerous extra images, the download size will increase by several megabytes and I don't want the download size to get out of hand (who wants to download a 400 MB file anyway (it won't be that much of a size increase) - that's nearly 2 hours on a somewhat fast 3 Mbps speed, let alone days or weeks for dial-up users). Besides, my core design, set in January of 2009 when I first made plans for the game, called for platforms with a checkerboard pattern using multiple colors. This design was to let the player know with haste and accuracy whether or not a jump is possible. It's why practically everything in PM is based on the block - a 32-CU span (32 pixels).
2.6 The "floaty" movement
Q. The movement, as I've seen in your YouTube videos, seems kind of "floaty". Why?
A. I see a lot of this on the video comments. Try setting up a rig where you can watch a rock or dummy fall from 100 feet away and see just how slow it appears to move. The real world uses 21.9 mph/s for gravitation acceleration whereas Platform Masters uses 20 mph/s (for mathematical simplicity with movement), 91 1/3% as fast but still very close - an object 109.64 feet away will mimic this offset instead of 100 1/8.
2.7 Cheat codes
Q. Will there be any cheat codes available?
A. Doubtful. With difficulty 0 there's really no challenge to the game as it is to begin with. With 20 HP to start and spikes doing 5 damage at difficulty 0 (enemies hover around 2's), you can take a lot of hits with game-starting HP. Plus, lives are pretty easy to obtain in the first place so you almost won't have to worry about getting a game over. Still, difficulty, whether 0 or 8, has no effect on how the platforms move and behave, but the special abilities, if used wisely, can almost work around that. Short of an "unlock all abilities" type thing, there's really no need for cheat codes.
Q. Today's games often have minigames present. Will Platform Masters have any?
A. So far, I have 4 ideas. All but one of which are classified as to what they are. The one that isn't involves targeting, but beyond that, the details for that one too are classified. As to whether or not Platform Masters will have any minigames, that's classified.
3 Release and sale
3.1 Date of release
Q. When will the game be released?
A. There is no set release date and it won't be known until the game nears completion (like 98% done). I still expect another 1 to 2 years before Platform Masters is finished and I'm 55% done. Progress continues constantly. Although I do have cases where I make no progress for a few weeks in a row, I also have cases where I log 80 hours a week for a few weeks in a row. On average, this is about 35 to 45 hours a week working on Platform Masters. Just keep an eye on the screenshot archive and my YouTube channel for the progress of Platform Masters.
3.2 Public beta
Q. Will there be a public beta?
A. Yes. At first, it will only be for the demo version. Once the game is released for sale, public betas will be available for all editions, when updates are being made, if any.
3.3 Porting the game to other systems
Q. Will this game be ported to Xbox 360, Wii, or the PS3?
A. Doubtful. First, I don't have these systems (they're too expensive with too few games of interest to justify their cost) and I'm unlikely to get them until about a year into the eighth generation (such as a year after the PS4's release), so I can't test for them. I also don't have the SDK or licensing stuff to develop for them.
3.4 Buying the game
Q. When you finally release Platform Masters, how will I buy it?
A. Regnow is otherwise guaranteed. Steam and Desura are considered as alternatives. One of my greatest dreams would be seeing a boxed version on store shelves, but short of paying something like $500 for a publisher, this isn't much of an option. If you can find a publisher with a print-on-demand-type service, much like Lulu is for books, where I can design my own covers, disk labels, instruction manuals and whatever else I may need. I've even got a whole 3 or so pages in my design document explaining how the box is to be designed, if I could do this. Although unknown, 75 MB is a bit big for a download - it puts a lot of bandwidth strain on a server. It's much too big to put on my site's server - I'll quickly and easily max out the bandwidth limit, given the high amount of attention toward it. I have a feeling that within the first 2 days alone, I'll be maxing out my main site's bandwidth which may bring the site down.
3.5 Strategy guides
Q. Will there be a strategy guide available?
A. I've had strong thoughts of making one, though it'll have to be made available through Lulu, unless Brady Games or something decides to publish it. I may not have the best strategies for everything as there's a good chance that there's something better for a particular situation than I can think of. How much will it cost? I wouldn't have a clue at this point, but Lulu is hinting that it will cost $40 in color (yes, its a bit ridiculous), or about $15 if grayscale (aka black and white). I don't trust the security with digital files much so an Ebook is kind of out of the question.
3.6 Platform Masters development history book
Q. What is this about a book on Platform Masters development?
A. Since late September of 2010, I've had thoughts of writing a book detailing the entire history of how Platform Masters came to be, from start to finish. From before the initial concept was started, and the writing of the design document, to the troubles with programming and eventually getting it released, maybe even beyond this. Due to the extreme cost of color printing (color printing costs more than 7 times that of grayscale per page to print), the book will almost certainly be grayscale.
I can already envision parts of it. It'll be either 16 or 32 chapters (that's my target, the latter especially). The early chapters will cover my history with gaming, briefly, followed by my childhood dream of making my own video games. The birth of the concept of Platform Masters then the actual game's concepts follow. The use of parallax scrolling, the terminology, and various other things, including secrets you may never know about without it (more than just knowing what the blue and magenta flags are for on the overworld or even how to access the two hidden worlds - 19 and 20). The entire history of the development will follow until the last chapter or two, of which will likely revolve around the future of both Platform Masters and other projects. This what I have for the layout at this moment and it's bound to change by the time I finish Platform Masters in its entirety. Being 45% complete (as of Oct 14, 2010), today's events cover the area around chapters 14 to 18.
3.7 64-bit OS support
Q. Will Platform Masters work on a 64-bit operating system?
A. I have no idea. I don't have access to any 64-bit systems so I can't tell. I only have 32-bit systems. It should work though. This is one of the reasons for having a public beta - to answer these kinds of questions.
Q. Do you have a Kickstarter for donating to Platform Masters' development?
A. As I've stated countless times before, Platform Masters does not need money for its development, just time, and a lot of time. Plus, Kickstarter seems to force a release date. Platform Masters has never had one and I never intend to have a set release date. I'm focused on quality for Platform Masters, not rushing anything. Set a 2-year release date and you might as well not even have a playable game the way I had it planned and advertised for years. I have no idea how much time as my estimates (calculated) have always been off. I have everything I need to work on Platform Masters. To fully explain everything, here's an in-depth list of the needs Platform Masters has:
- Graphics editing. Cost: $0. All of the graphics are made with 2 sources. The first and primary is GIMP 2.2.17 (with GTK 2.6.18). Yes, it may be outdated, but everything since version 2.4 in GIMP works against me, slowing things down drastically. The rare oddball is the use of my own programming to automate some things like the generation of the rain, snow, and ground. Both cases cost nothing.
- Music creation. Cost: $0. Because I lack expertise on this front, I turned to contributors (thanks for your efforts). The only tasks I have on my end is suggesting adjustments and doing the final processing. Aside from songs that I'm waiting for contributors to finish or those that are disqualified, I'm not looking for new contributions. At the moment, I have no set due date for music submissions for those that are still waiting. See the audio section for in-depth details.
- Sound effect creation. Cost: $0. Because I lack expertise on this front as well, even less skilled than music creation, I turned to contributors (thanks for your efforts). Although sound effect contributions are needed, this can wait until I get game play aspects working.
- Audio editing. Cost: $0. On my end, I have FL Studio (already paid for with free updates) and Audacity to finalize any audio contributions, especially music (see my videos for how I do this). This is only area in audio I have expertise with.
- Compiler and software development. Cost: $0. For all of Platform Masters' programming, I use Visual C++ 2008 Express. Since it's free and you can sell programs created with it, nothing is needed here. I have considered the Standard edition before, but I'm now rejecting it since I don't need it outside, perhaps, some extra debugging tools that are available.
- Development computer. Cost: $0. Most would think that the development of a video game requires a very high end computer. Platform Masters' system requirements are so low that a midrange computer from 2002 (yes, over a decade ago) can run PM at 60 fps without problems. Thus, even if you have a Geforce 7600 GT, a Pentium 4 processor, and Windows 98 system, you can still run PM very well and that's very old computer technology. Aside from testing to see if Platform Masters can run on a 64-bit operating system or Windows 8 or whatever, I don't have a need to upgrade any of my computer hardware for the development of Platform Masters. Any hardware upgrades will be for other uses (video editing mainly).
- Office-related stuff. Cost: $0. Word processing and spreadsheets are covered with Word 2002 and Excel 2002. Although these may be highly out of date (more than a decade old), they are good enough for my needs. Word processing is needed for the design document and the writing of the game's manual. Spreadsheets are mainly for planning and an extention on my design document. If all else, there's Open Office and that's free.
- Video recording and editing. Cost: $0. When I reach certain milestones, I record a video showing things as needed using Virtual Dub. Virtual Dub is a free program that's very useful and fast for screen capture (if you use the right codecs and configure them properly - Lagarith works wonders if you have a fast hard drive with a lot of space with X264 using the "ultra fast" preset being an alternative). Videos get edited as needed after being recorded, finalized, then posted on YouTube.
- Web hosting. Cost: about $9 per month. This is really the absolute only expense I have. My income of $50 a month (from book sales) easily covers that. Just one sale alone is enough to cover about 3 weeks of my Web hosting.
- Second computer for testing. Cost: $0 (kind of). Getting a second computer for testing installation is the earliest known major expense needed. Still, there are ways around the need for funding on this as well. First, there's the planned public beta. If installation or something is not working with that, I'll know something is wrong. While I can't fully test installation on my main computer, I can run through a fair amount of it at least. Second, if my sister upgrades her computer to a new one, I could use the current one as a test bed. If my sister doesn't upgrade her computer in the 3 or whatever years, then I'll just utilize the public beta more than usual. You might not be able to install the program and if I can't figure out what's going on, it'll just take a lot of back and forth cycles to try again repeatedly. Basically, there's absolutely no funding needed here.
- Boxed distribution. Cost: $2000+. This is one area where funding can come in, but it's only for getting boxed versions. Going the boxed route will only happen if PM gets a huge popularity. The money from any sales I get until then will be used toward that so again, there's no need for Kickstarter.
Up to case 8, not a single cent is needed and those first 8 cases are what I need for my development (the 8th isn't required, but it helps with advertising and keeping the public up to date on the latest progress). The other 3 are different though. Aside from the Web hosting that my $50 a month can cover, the other stuff only begins to take effect when Platform Masters is right next to completion. In short, I have everything I need for development. All Platform Masters really needs is just time and a lot of time. Thus, if you see any Kickstarter things for Platform Masters, it's a fake or fraud, guaranteed. If you see such a thing, let me know so I can take it down.