Impossible Mission

Want to talks about games you like, would like to see developed on the Oric, it's here.
User avatar
Twilighte
Game master
Posts: 819
Joined: Sat Jan 07, 2006 12:07 am
Location: Luton, UK
Contact:

Post by Twilighte »

Symoon sent me some really groovy new puzzle pieces which i shall include in the game. Thankyou Symoon. However it will be some time before i get to implement them since i want to get Ethans movements right first.

Created another couple of pieces of furniture (Fridge and work sideboard)this morning and tested the most recent Ethan code which still has many bugs. However ripping out the left frames appears to have cleaned up the code alot.

User avatar
Chema
Game master
Posts: 2723
Joined: Tue Jan 17, 2006 10:55 am
Location: Gijón, SPAIN
Contact:

Post by Chema »

Twilighte wrote: However after reading an interview with the original IM author he mentioned he mirrored Ethan in realtime to save half the amount of bytes used by the left frames. This makes alot of sense since their is little happening in cpu terms that requires the plotting of Ethan to be very fast.
The complete size of all frames for running and jumping right is 1524 bytes. The additional code and tables for mirroring will take about 128 bytes, so thats a saving of a whopping 1400 odd bytes!
Yep that is quite a well known trick that many Speccy games (at least) use. In fact we used the same procedure in Space:1999... Remember that flats were mirrored in real time, as well as the hero's frames and other graphics. It can be done in real time with little cost. I used a table for mirroring graphic bytes, don't know how you did it.

I was not sure about what your problem with the half-heigth platform was (I suppose it was related with how you deal with collisions and your collision map), because what you could do is simply make Ethan stand as soon as it colides with something (not lethal) and check for collisions not only ahead the hero, but also below and above him when he jumps (depending on wheter he is moving up or down). I had to do something similar when John or Helena moved up or down (stairs or falling from a platform). Did the same for items, when they fall, for instance when you have two on a pile and you get the one below, or when you drop them over a chair or other object.

Stair were quite tricky because of that, in fact, as you can have other objects halfway up.

I had a full 3D representation of the room along with a routine to check for collisions with flats and other objects, all done in 3D, whenever something moved.

Anyway you have already solved it... great.

User avatar
Twilighte
Game master
Posts: 819
Joined: Sat Jan 07, 2006 12:07 am
Location: Luton, UK
Contact:

Post by Twilighte »

Chema wrote:I used a table for mirroring graphic bytes, don't know how you did it.
Yep, same thing. a 64 byte table.
Chema wrote:I was not sure about what your problem with the half-heigth platform was ..
This is room 3..

Image

And this is room 3's collision map (Sorry no exact values since rendered collision map to screen in rushed time)..

Image

As you can see there is no special definition in the half height platform. Also when i get Ethan to eventually jump onto the half height platform he may then jump again onto the next platform up :P

However he must also be given the opportunity to jump over it to get to the terminal on the right.

I could put a special code just above the half height platform but then i'd also need to put one either side on the next platform up. The idea being that when Ethan jumps he detects this special code and knows he should rise to it.

However i am still working on the idea that if he is in the process of jumping (after 8 of 11 frames only) and detects a floor beneath him he should rise above it otherwise continue to jump forward.

Incidentally, the collision map is 40x25. I had made it 39x25 since the leftmost byte is the attributes but its much easier to debug and place/detect objects on a map the same byte width as the play area.
Each cell in the collision map is split into two bit groups.
Bits 0 to 4(0-31) specify the background object, be it Platform, Wall, Chasm, Lift, Furniture, etc.
Bits 5 to 7(0-7) specify enemies such as Robots, Sparks and Orbs.
The format has been chosen so that when robots store their footprint to the collision map it won't erase the furniture that may be behind.
What it does mean is that any screen can contain up to 5 robots with sparks and 1 orb. This is quite sufficient for the rooms. Infact i have not seen more than 4 robots in a room so far.

User avatar
Twilighte
Game master
Posts: 819
Joined: Sat Jan 07, 2006 12:07 am
Location: Luton, UK
Contact:

Post by Twilighte »

Just had a brainwave of how to do the Jumping better.
It doesn't change things a great deal, just a few modifications here and there. Anyway (for the theory) here goes..

The way Ethan can jump can be described as horizontal movement and vertical movement.
To illustrate the horizontal i have slightly amended the screen posted a few messages back.

Image

Note: One slight mistake in this image is that the third frame(Not the standing frame) of the jump shows 3x3 collision area but notice i have actually repositioned it to be 3x2.

And the vertical movement is as follows..

Image

The theory is that the first two jumping frames have Ethan in the same X position as him standing. This means he doesn't collide with any platform for the first two frames of the jump and yet reaches the full height.
This has the advantage of reaching a good height before propelling himself over robots or platforms or lifts.

The next six frames are based on 3x2 search dimensions in the collision map. During this stage he may be somersaulting over robots, sparks, lifts or platforms, which is fine.

Note the air gap between half platforms is always 12 pixels.

In the frame after that it returns to 3x3 (and bigger beyond) searches at which point if a collision with a platform or lift is detected in the last search row of the scan then we must elevate Ethan by 6 pixels.
Also if we detect a platform or lift in position 2,0 or 2,1(0,0 or 0,1 for left jump) then we must ignore X because he is essentially settling on the platform.

And the reason for the bottom screenshot of C64 IM is to illustrate that the size of a single jump is around the same as that on the C64 version. This allows the existing room layouts for the C64 version to be used :P

Note that i base majority of game elements on the C64 version because it is imho the best version available.

User avatar
Chema
Game master
Posts: 2723
Joined: Tue Jan 17, 2006 10:55 am
Location: Gijón, SPAIN
Contact:

Post by Chema »

Twilighte wrote:Just had a brainwave of how to do the Jumping better.
It doesn't change things a great deal, just a few modifications here and there. Anyway (for the theory) here goes..
Don't think I got the explanation completely (too technical for me :) ), but wouldn't it be simpler if you just check the collision map *up* and *down* whenever the Y position of the hero changes?

I mean. In frame 3 (not counting the standing frame) the hero moves up, so you should check if there is something there to stop the jumping (if that ever happens, I don't know the game, but imagine a flying bullet over his head, for example or any additional background item). Then up to frame 8 no vertical movement is done, so nothing special (appart from checking collisions in the X direction should be done. But on frame 9 and 10 the hero goes down again (at least the collision area) so vertical down checks should be done. If you collide with something you can make the hero stand still. That would mean he could potentially jump over other objects, but clearly over platforms. Just need to be careful so Ethan stands correctly possitioned over the platform.

Don't know if this is the same you are talking about, or if that is not the point of your problems.

Did I already mention your work with the inverse bit are incredible? Just wonder how nice would it be to use a similar trick to attain more colors in Elite or isometric games.... :(

User avatar
Twilighte
Game master
Posts: 819
Joined: Sat Jan 07, 2006 12:07 am
Location: Luton, UK
Contact:

Post by Twilighte »

Hi Chema, well yes to some extent you are right regards movement of Ethan, and if my current method fails i may very well adopt yours.
The game has no guns or projectiles, only Ethan, Robots, a black orb and the Plasma bolt that the Robots project.
As in the original game, any jump is always completed, but obviously the movement may be limited if a collision is sensed.

As for this inverse lending itself to isometric, it would work much better with 3:1 ratio :twisted: than 2:1 . So perhaps time to develop the 3:1 engine at last? :wink:

Incidentally, its a shame even it were possible to place indivual raste row attributes down the left side of the screen, this technique still wouldn't work in TEXT mode because it requires individual raster row control of inverse state. :(

Log
Just redone the next batch of jump frames. I tidied some frames up, and alligned them all to the intended collision map footprint.
Just about to recapture. As for the game itself, i got Ethan running and successfully jumping right (but only on one level).

User avatar
ibisum
Wing Commander
Posts: 1355
Joined: Fri Apr 03, 2009 8:56 am
Location: Vienna, Austria
Contact:

Post by ibisum »

I remember an article way back when that discussed a way to get 'hundreds more colors' out of the Oric, and presented a dither method and color chart that really did seem to make the color clash seem like a useful thing, in the right combinations ..

Surprising now to think about it, all those years past, and realize it was all we had, literally, in front of us. In the new world of 3D super-acceleration, how precious those little bits were ..

User avatar
Twilighte
Game master
Posts: 819
Joined: Sat Jan 07, 2006 12:07 am
Location: Luton, UK
Contact:

Post by Twilighte »

Yep, i remember the same dithering method. Very simple to reproduce on the oric but vastly difficult to overlay anything coherant on top :(

Log..
Finally got Ethan to jump over a half height platform. Also can now make him jump onto the half height platform except he then rises to the full height above.
Other bugs are that once he has somersaulted over the half height platform he cannot progress passed furniture items. Seems collision detection goes a bit skew afterwards.
I am working on it..

I also worked out why the jump left was wrong. The original routine was mirroring the complete ethan sprite set (except Searching frames). However on further investigation it appears that i was only mirroring half or even a third of frames. In fact the complete frames amount to over 2500 bytes so i recoded the routine to mirror each individual frame when required to move left. This works much better and uses much less cpu.

User avatar
Twilighte
Game master
Posts: 819
Joined: Sat Jan 07, 2006 12:07 am
Location: Luton, UK
Contact:

Post by Twilighte »

No time last night to do anything to project, had a flat inspection today.
However i just thought (whilst listening to a weird version on Slay radio) at some stage i'll need a sample of someone saying Destroy him my robots.

I plan to crunch into either 2 or 4 bit format and replay at around 10Khz.
I would like to use all spoken messages..

"Another visitor, stay a while. Stay forever.."
"Destroy him my robots."
"Mission accomplished. Congratulations"
"Aaaaaaaaaaaaaaaah"

So if any of you fancy yourselves as the voiceover, then post links to your samples here.
It would also be cool to do French translations of these sentences too.
And if you like the idea of different sentences, then please let me know.

There is also the slight possibility that the sample can be played simultaneously with the game (like zipnzap) which would be very cool.

User avatar
kamelito
Flying Officer
Posts: 182
Joined: Sun Jan 08, 2006 6:34 pm
Location: Nantes, France

Voices

Post by kamelito »

Hi Twilighte,

Any reasons to do not use the original speech from the C64 version?

Kamel

Twilighte wrote:No time last night to do anything to project, had a flat inspection today.
However i just thought (whilst listening to a weird version on Slay radio) at some stage i'll need a sample of someone saying Destroy him my robots.

I plan to crunch into either 2 or 4 bit format and replay at around 10Khz.
I would like to use all spoken messages..

"Another visitor, stay a while. Stay forever.."
"Destroy him my robots."
"Mission accomplished. Congratulations"
"Aaaaaaaaaaaaaaaah"

So if any of you fancy yourselves as the voiceover, then post links to your samples here.
It would also be cool to do French translations of these sentences too.
And if you like the idea of different sentences, then please let me know.

There is also the slight possibility that the sample can be played simultaneously with the game (like zipnzap) which would be very cool.
/kml
skype pseudo : kamelitoloveless

User avatar
Symoon
Archivist
Posts: 1899
Joined: Sat Jan 14, 2006 12:44 am
Location: Paris, France
Contact:

Post by Symoon »

Yeah, and that would be cool to have an idea of how these sentences were said.
I found "another visitor" on Youtube:
http://www.youtube.com/watch?v=VoSNuafbiJw

If you go at 2mins in the video, you'll hear "destroy him my robots" and "aaaaaah" (although this one didn't really need to be explained ;))

User avatar
Twilighte
Game master
Posts: 819
Joined: Sat Jan 07, 2006 12:07 am
Location: Luton, UK
Contact:

Post by Twilighte »

kamelito wrote:Any reasons to do not use the original speech from the C64 version?
Good question. Well the problem here is that the original was partly synthesised which afaik is difficult to reproduce on the AY.
However if anyone knows of software driven voice synthesis on the AY (Spectrum, CPC) then let me know.
It is much easier to take a sample of someone saying it and compound it into a usable form. 8)

Another reason is i like to be original and if possible would like to vary the sentence a bit. :idea:
For example when Ethan falls into a chasm in a room instead of saying "Aaaaaaargh" he might alternatively say "Oh Bugger!".

I am not trying to make the game as accurate as possible to the original. Otherwise i would be spending ages converting the existing code for the game from the C64 source available.

User avatar
kamelito
Flying Officer
Posts: 182
Joined: Sun Jan 08, 2006 6:34 pm
Location: Nantes, France

ESS box

Post by kamelito »

/kml
skype pseudo : kamelitoloveless

User avatar
Twilighte
Game master
Posts: 819
Joined: Sat Jan 07, 2006 12:07 am
Location: Luton, UK
Contact:

Post by Twilighte »

Thanks for the link kamelito but you cannot relate C64 Speech synthesis to Oric unless it used short samples rather than a phonem set utilising the far superior sound hardware of the SID chip.
But phonem samples (or synthesised allophones) are very difficult and tedious to implement.
I will use Samples because they are vastly easier to play.

User avatar
Twilighte
Game master
Posts: 819
Joined: Sat Jan 07, 2006 12:07 am
Location: Luton, UK
Contact:

Post by Twilighte »

Log
Now got Ethan to jump onto half platforms and also jump over them. I have also got him to step across lift gaps. This is as original gameplay 8)
However a few annoying bugs like he occasionally falls through the floor or when jumping on the top level crashes the game if he reaches the sides :evil:
Also done some more rooms. Now up to 17 of 32 Rooms :P

Post Reply