I've been making games with TGF for a long time, but I always used standard movement, no really advanced solutions and stuff like that.
I recently became interested in making stuff again, and dived back in, this time with MMF 2. The first project is a simple platformer based loosely on Addams Family for the SNES, and elements from, yes, Gradius. I made my own engine using and adjusting a platform engine tutorial, and got the basic physics down nicely, but here come the problems.
The first: a global engine How far completed do i really need to have my engine before I start making the levels? The thing is, I want to use multiple characters with different abilities (different jump heights and speeds are not that much of a problem) which I honestly not yet have concretely decided upon for every character.
Is there a way to make the engine more global, or do I really need to adjust every level over and over? (is this done with that nifty Behaviours thing I saw?)
The second problem: collectibles remain picked up The game itself has a very open structure, you can move from screen to screen freely (it's a little bit of a free roaming platform game). But when I move away from a frame where I picked up some stuff, on return, they logically reload which is really exploitable.
How can I make a collectible (or doing it framewise) remember that it is picked up while I move away from the frame?
The last problem: A more general problem on bouncing balls In a side view that is, of course. I have some enemies that need to bounce around, and some of their projectiles.
How can a ball alike object distinguish between colliding with the floor and colliding with the wall?
And that's it basically. There are probably some noobish things in there, so go easy on me. And to show that it is not all for nothing, I have some screens of the game so far (in all it's 1 and a half level gloryness)
The first man to compare the cheeks of a young woman to a rose was obviously a poet; the first to repeat it was possibly an idiot.
Originally Posted by cec¿l ini's are your friend. that is all.
I was considering using ini's for the collectibles, but I was hoping there was a way that did not involve storing every single object in the game in a text file...
Well, that is, I am guessing you are talking about storing collectibles in an ini
The first man to compare the cheeks of a young woman to a rose was obviously a poet; the first to repeat it was possibly an idiot.
you could save them in an array. anyway you slice it. external storage is probably the way to go. unless you use globals which couls be troublesome. or instead of haveing every area of a level on a different frame. just have them all in one and just scroll the screen
Dustin Gunn Gnarly Tubular Way Cool Awesome Groovy Mondo
Registered 15/12/2004
Points 2659
20th February, 2008 at 17:20:27 -
My advice:
For the engine, unless you love copying and pasting, I'd recommend you get your engine as close to finished as possible before duplicating frames. This is probably the biggest problem with clickteam products, and basically sapped 2-3 years of worktime on my game because I wanted to make absolutely sure everything was final.
The alternative, if you don't use qualifiers at all, is to transfer all your code to global events. Qualifiers are damn useful of course, but it's an option. To access the global events editor click on the game icon and in the properties window under events there's an "events" button.
For bouncing balls, you could make an engine that moves its X and Y movements seperately, for all 4 directions, and check for collisions after every direction like:
*Is Xspeed < 1
-Move left
*Is over obstacle?
-Move right one, now you know it's collided with the right wall
*Is Yspeed > 1
-Move down
*Is over obstacle?
-Move up one, now you know it's collided with the floor
For the bouncing ball/background collisions movement, I have an example that works in the way that Dustin described. It's far from perfect (it doesn't deal well with "above" collisions) but you might find it useful.
http://lowflyingcow.googlepages.com/backdropCollisions.mfa
As for the collectible items, you're going to have to store some values in some kind of way. If you want to use inis, know that they're just text files and can be accessed by anyone. If you use an array, you'll probably have to think about the structure of it and keep a note of what each value stands for.
ini are your friend...if you want to save something. However, the best way to store collectables is to keep the count in the characters alterable values, then carry those values over frames with the Shared Data Object. That little object saved my game many times. You can find it in clickteams download center for extensions for mmf.
All platforming problems can be mostly solved here:
he means specific items that have been picked up. so they dont appear again. if you just store how many youve picked up it wont remember WHICH ones were picked up.
I am definately going global events, I am working with everything in qualifiers now anyway (and the different ehr, properties of units are stored in their own alterable values which I call upon when talking about a certain qualifier)
I spend most of the night making a weird song about elephants, girls eating lots of bread putting their feces with care in other peoples mouth, losing cows because someone sees everything black and white, and if that is not awesome enough, all these replies suddenly
I'll keep everyone updated. On the game that is, not on the crapping women.
The first man to compare the cheeks of a young woman to a rose was obviously a poet; the first to repeat it was possibly an idiot.
Dustin Gunn Gnarly Tubular Way Cool Awesome Groovy Mondo
Registered 15/12/2004
Points 2659
20th February, 2008 at 22:38:38 -
I mean qualifiers can't be used in global events, not the other way around.
Originally Posted by Nim F... (it doesn't deal well with "above" collisions) ...
When I do engines this was the above collisions always work O_o.
Anyway the easiest way I can think of is to use an ini file (or associative array, because it's awesome for what I'm about to say) and when you hit a projectile create a value in the ini/assarray named OBJECTX.OBJECTY (implying the objects x and y co-ords) and set it to 1.
Then say:
Start of frame -
Spread value 0 in Alterable value A of collectable
and in a seperate start of frame:
Start of frame -
Start fastloop "collectables"
On loop "collectables" and Alterable value A("collectable") = loopindex("collectables") and ini/assarray entry str$(X("collectable"))+","+Str$(Y("collectable"))) = 1 -
Destroy "collectable"
EDIT: Ok just disregard what I said . Here's the example:
Making the entire engine first before all the levels, with qualifiers so it's handled easier later. Any adjustments I need to adjust in every single frame over again.
Using global events, but having to copy the entire engine for every player object (since it has like 5 characters that are playable).
Just... swell
And do behaviours work like global events?
The first man to compare the cheeks of a young woman to a rose was obviously a poet; the first to repeat it was possibly an idiot.
Dustin Gunn Gnarly Tubular Way Cool Awesome Groovy Mondo
Registered 15/12/2004
Points 2659
21st February, 2008 at 06:36:46 -
if you make the object global they should, but I've never used them
I've been trying to get Clickteam to make a solution to not having global qualifiers for years but I guess they don't think it's a big enough problem to focus on (Even though it's their biggest problem)