Incredible NOISE+WHITE programming environments !

Since we do not have native C compilers on the Oric, this forum will be mostly be used by people using CC65 or the OSDK. But any general C related post will be welcome !
User avatar
Euphoric
Game master
Posts: 99
Joined: Mon Jan 09, 2006 11:33 am
Location: France

Incredible NOISE+WHITE programming environments !

Post by Euphoric »

Chema (José María Enguita) is currently building two astonishing software engines that allow you to program interactive isometric games on the Oric !

First, there's the lower layer Isometric Engine: NOISE (for Novel Oric ISometric Engine). Through a C API, you get access to isometric rendering of huge 3D maps on the Oric, with multi-layered tiles, 3D-sprites, double-buffering, collision detection, and many other great features as you can read on http://isa.uniovi.es/~chema/white+noise/intro.htm.

And then, there's the even greater WHITE environment (World Handling and Interaction with The Environment), which provides high-level programming of the game interactions, again with a C interface, but with an object-oriented twist. Chema is still improving it, but he sent me an interaction test with 4 rooms, just to trace the interactions (I've put it on http://oric.free.fr/TAPES/isometric.tap, you use Z and X to turn clockwise and anti-clockwise and M to move a step
forward. I is used to interact with the environment. For example, you can interact with the "commposts" in two rooms, and with the moving characters (although you will only receive a "no response" answer in this test). You can also grab the block in the initial room and (D)rop it somewhere else)). Well, Chema doesn't call it a demo, and did not intend to show it before he fixes some small bugs and he is concerned about some speed optimizations, but I think it is already hugely impressive to have this type of high-level programming environment on the Oric, opening new possibilities to game developers of all kinds, so I hope he will not mind me for the unveiling of his development progress... :-)

Something that Chema has not programmed yet is a map editor... So, if you have always wished to program an isometric Oric game, you know what you have to do ! (of course a Windows or Java editor would be the best for this task).

Cheers,

Fabrice

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

Post by Symoon »

This looks wonderful ! :shock:
Congratulations to the author.
User avatar
Dbug
Site Admin
Posts: 4437
Joined: Fri Jan 06, 2006 10:00 pm
Location: Oslo, Norway
Contact:

Re: Incredible NOISE+WHITE programming environments !

Post by Dbug »

Euphoric wrote:Chema (José María Enguita) is currently building two astonishing software engines that allow you to program interactive isometric games on the Oric !
Definitively impressive :)
Euphoric wrote:Something that Chema has not programmed yet is a map editor... So, if you have always wished to program an isometric Oric game, you know what you have to do ! (of course a Windows or Java editor would be the best for this task).
I unfortunately do not have time for that, but if there is need for optimization in the core display engine, I'm ok to take a look :)
User avatar
Twilighte
Game master
Posts: 819
Joined: Sat Jan 07, 2006 12:07 am
Location: Luton, UK
Contact:

Post by Twilighte »

Woweee, this looks absolutely fabulous. So glad someone else has finally come forward with an isometric engine. i had started a similar engine on the Oric many years ago (For Wurlde) but gave up for other ideas.
Just so cool to see something working on the oric, and what seems like a very good speed.
i can't wait for the editor.
I wonder if it will be possible to have multi-level rooms like in Head over heels and Fairlight. That would be dead cool.
I have a fair number of graphics for isometric, and have also worked on the 3 pixel step instead of 2 (Angle of line) which seems to be less acute but more 3d on the oric.
User avatar
Chema
Game master
Posts: 3013
Joined: Tue Jan 17, 2006 10:55 am
Location: Gijón, SPAIN
Contact:

Post by Chema »

Greetings to all.

First of all, thanks for your comments. Now I *have* to finish this project... no excuses :)

I suppose this is a good opporunity to jump in and introduce myself...

I have been out of the Oric scene for several years after Fabrice and I released Pinforic due to personal reasons, but in the meantime I decided to do something I promised him then: learning assembly programming on the Oric. I started out with some little routines (and the help of one friend of mine, who is quite an expert in other systems).

I allways remember my feelings when I first saw Knight Lore on the Spectrum. I allways wondered how they did it, so it was a good opportunity to learn something, while checking if something similar could be done on the Oric, where very little games use masked sprites, and not to mention isometric perspective!.

NOISE, which is on beta version, is quite a general engine, where some of those routines I made years back are used. I made the C interface originally to be able to test it easier, but eventually thought it was a good idea to keep it. There are stil some things to be done here, like cleaning code and some bug catching, but most important of all is optimizing for speed. I have done my best, but with my lack of experience (most notably in older routines) I may have overseen something. However, the most CPU intensive code is the one that rotates graphics and masks and I don't know how that could be done faster (I ever considered having them pre-rotated in memory, but that would take *a lot* of bytes). Maybe there are other points that are "eating" my CPU cycles, but...

Other modifications for the next version could include a new format for the room map in memory (so adding new levels is not so memory expensive) or new strategies for rendering (current ones are not the best for speed, but I did not find another way to do it).

WHITE, on the other hand, is restrictive. It does not use many of the features of NOISE like the ablity of moving and detecting collisions up and down, at least yet, in favour of a higher level of abstraction for the programmer. It handles, for example, the frame animation, but restricts it to 4-frame as well as the size of sprites and an improving collision detection, easier to handle throug callbacks and hiding other details from NOISE collision detection. It is still on a very alpha version and I wrote it with the idea of serving my purposes for a small demo of the engine, so it will probably be modified to suit the programmer's requirements, like adding gravity and/or the ability to jump.

At this moment it manages a map structure which I think could serve most purposes. Those four rooms in the test program take up 80 bytes.

I would like to finish WHITE and the small demo before anything else because it is a good strategy to catch bugs and noticing what should be done and what can wait for a new version ;) Then I will surely come to you with help on many issues, like optimization or design matters.

Finnaly I declare my total inability for drawing decent graphics and I am even worst with sound, so don't expect anything better than this in these fields (terrible graphics and no sound).
Twilighte wrote: I wonder if it will be possible to have multi-level rooms like in Head over heels and Fairlight. That would be dead cool.
Indeed NOISE supports so (you can move vertically and collision detection is performed also), but it is still not implemented in WHITE. There are many minor things that should be dealt with... Definitely it is something interesting to include, anyway, like gravity.
Twilighte wrote: I have a fair number of graphics for isometric, and have also worked on the 3 pixel step instead of 2 (Angle of line) which seems to be less acute but more 3d on the oric.
3 pixel? That sounds interesting. So a character moving will do so one pixel down and three pixels across? Does it mean the graphics aspect ratio is not 1:2 but 1:3?
User avatar
Twilighte
Game master
Posts: 819
Joined: Sat Jan 07, 2006 12:07 am
Location: Luton, UK
Contact:

Post by Twilighte »

Hi Chema,
I too loved knightlore, but was Head over heals (pun intended) about Fairlight. All on Spectrum which seemed to be a little faster than C64 but loved Nosferatu on the C64 and knightlore on the BBC!.
I would love to see the asm (Assembly code) for the optimised rotation and shifting routines, i have done much work in this area in the past and would love to have a go at further optimisations.

You may already know my work from ZipnZap to Pulsoids.
ZipNZap was another game that relied heavily on realtime shifting (Smooth scrolling of masked sprites overlaying background).

My current format for mapping of Isometric games is to use an object list, where each entry is 4 bytes long and defines its world X, Y, V, Type and Graphic Pointer.
X and Y range 0-255.
V ranges 0-15 (Height)
Type contains two variants, the type of surface (Floor or Wall side) and a flag to optimise memory (Described below).

The graphic pointer is also 0-255.

The graphic part had two options (As selected from mask flag above).
The first option involved a rather slower method than the one you appear to have used. Because i was dealing with 3 pixel steps (Yes, 1:3 aspect), i used the upper 2 bits of each byte to hold the mask definition (Each bit represented 3 pixel mask).
Whilst a little slower (Code actually ran pretty fast) it reduced the overall memory usage for graphics considerably.

The second option was to use a mask graphic immediately following the bitmap graphic pointed to by the graphic pointer.

I will shortly upload some 3 and 2 pixel isometric screens that i did a while back to compare the aspects and then link u to them.
User avatar
Chema
Game master
Posts: 3013
Joined: Tue Jan 17, 2006 10:55 am
Location: Gijón, SPAIN
Contact:

Post by Chema »

Twilighte wrote:Hi Chema,
I too loved knightlore, but was Head over heals (pun intended) about Fairlight. All on Spectrum which seemed to be a little faster than C64 but loved Nosferatu on the C64 and knightlore on the BBC!.
I would love to see the asm (Assembly code) for the optimised rotation and shifting routines, i have done much work in this area in the past and would love to have a go at further optimisations.
:) I posted part of it on another thread in these forums, but it is not really highly optimized. Those functions were written a lot of time ago...
Twilighte wrote: You may already know my work from ZipnZap to Pulsoids.
ZipNZap was another game that relied heavily on realtime shifting (Smooth scrolling of masked sprites overlaying background).
I know about them and am quite aware about your work, but to be honest, I have been so out of the scene lately that I have not played them. I will have a look, though
Twilighte wrote: My current format for mapping of Isometric games is to use an object list, where each entry is 4 bytes long and defines its world X, Y, V, Type and Graphic Pointer.
X and Y range 0-255.
V ranges 0-15 (Height)
Type contains two variants, the type of surface (Floor or Wall side) and a flag to optimise memory (Described below).

The graphic pointer is also 0-255.

The graphic part had two options (As selected from mask flag above).
The first option involved a rather slower method than the one you appear to have used. Because i was dealing with 3 pixel steps (Yes, 1:3 aspect), i used the upper 2 bits of each byte to hold the mask definition (Each bit represented 3 pixel mask).
Whilst a little slower (Code actually ran pretty fast) it reduced the overall memory usage for graphics considerably.

The second option was to use a mask graphic immediately following the bitmap graphic pointed to by the graphic pointer.
I have been thinking about the internal room format for quite a long time. Currently I am using the easiest way: an array of tiles, which is also pretty fast for collision detection routines, but I am considering changing this in a near future for something similar at what you are stating here.

My idea was something like having a 10x10 array of lists of stacked objects. Each list element would be a tile code and a 1-byte pointer (an index) to the entry in the next height. If the "pointer" is zero then there are no more tiles to stack. I will change to something like this in the future, once the rest is done. I can ask you for help and ideas when time comes... your experience is a great value!

World format (how to store all the rooms in a game) is another thing. I try to make it independent of WHITE and came up with something inspired on filmation data format.

I would love to comment this and other aspects of the engines, You guys are an incredible source of inspiration!
Twilighte wrote: I will shortly upload some 3 and 2 pixel isometric screens that i did a while back to compare the aspects and then link u to them.
I find this 1:3 aspect ratio idea very interesting... I can't wait to see those screenshots. Unfortunately NOISE relies heavily on tiles of 12x24 in size, so I think it would be difficult to adapt... but who knows.

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

Post by Twilighte »

You can now view the example 2:1 aspect here...

Image

And the 3:1 here...

Image

Most people i have spoken to prefer the 3:1 aspect.
User avatar
Chema
Game master
Posts: 3013
Joined: Tue Jan 17, 2006 10:55 am
Location: Gijón, SPAIN
Contact:

Post by Chema »

Those screenshots are impressive!

In fact I think I also like the 3:1 aspect more. Well, after WHITE+NOISE is finished (to the extent they could be), I might have a look and see if changing tile aspect is not as difficult as I suspect.

And I am already making some tests to include stairs in the demo so some kind of "multi-level" coud be achieved.

In fact I am making them by using current WHITE+NOISE api (with no changes), so at the same time I test their versatility :) but I surely will add up/down movement functions.

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

Post by Twilighte »

With 1:3 aspect and multi-level, it could be taken to this extent...

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

Post by Chema »

Now that IS impressive, man. I am regretting not having used this aspect ratio...

Maybe in NOISE 2.0? :)

Do you have a working engine for rendering or are they just pictures?

Just as a side note I made a couple of functions to move the character up and down and to test the tiles he is on top of. Also made some initial tests with the current API and it seems it will be quite easy to program things as stairs and levels and gravity, but I think I will leave that to the programmer and not inside WHITE... at least for now.

Also added a couple of variables to stop checking for collisions and a "phantom mode" in which the character can walk through objects. Both combined serve a good number of purposes that could be interesting.

There are some troubles, though, mainly with current number and layout of layers and also with graphics, my personal nightmare.

I take this opportunity to thank Dbug for updating pictconv for me. Thanks!

Will keep you updated with the progress, even if it is on a monthly or fifteen-day basis.

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

Post by Twilighte »

just pictures atm :(
However, i think i have a rendering engine somewhere, since i did alot of work in this area about a year ago.
I also did some 2:1 aspect images like this...

Image

And this one to show level possibility...

Image

Damn you got me back on doing graphics/code for isometric engine.
If only i could get my original source to work...
User avatar
Chema
Game master
Posts: 3013
Joined: Tue Jan 17, 2006 10:55 am
Location: Gijón, SPAIN
Contact:

Post by Chema »

Greetings..

Just wanted to point out that, if you are interested in this topic, you can follow the development of WHITE+NOISE on the Games forum, topic about Space 1999, where we discuss not only about that game itself, but also about details of the engine.

http://www.defence-force.org/phpBB2/viewtopic.php?t=135

I just noticed I posted I will keep people informed but forget to tell that the discussion has been moved there.

Of course, feel free to comment.

Regards,
Alcoholics Anonymous
Private
Posts: 1
Joined: Tue May 01, 2007 9:01 am
Contact:

Post by Alcoholics Anonymous »

Chema, this looks like a great engine. I would be interested in porting this to the z80 once it's perfected to your satisfaction (and porting the Space 1999 game along with it :-) ).

My first target would be the ZX Spectrum but other popular 8-bits would follow (CPC, MSX1). The benefit to the Oric scene would be that authors of games in other active scenes would use the engine to write games, which could be ported to the Oric since the same API (and a C compiler) would be used to write them.

All with your permission, of course. Please drop me a line if you are interested in this when the engine is completed!
User avatar
Pengwin
Pilot Officer
Posts: 69
Joined: Sun Jan 07, 2007 11:03 pm
Location: Scotland
Contact:

Post by Pengwin »

I feel I am really late into this thread, but I have just run the demo from the first post and I am totally blown away. Well done to Chema for this. It's developments like this that truly help keep the Oric community going.
Post Reply