About this blog
The journal of nano size but tera quality. Sometimes.
Entries in this blog
been a while since I last posted on here.
Since I have, I decided to scrap Quake 3 BSPs in favour of my own map format.
I feel this was a good decision since I now have far more control on the way the map looks and works. It also means I can add and remove different things from the file.
Once I had the basic map format sorted out and a renderer written for it I decided to write an editor. Keep in mind the map format is VERY basic at the moment and only supports cubes but does support multi-texturing and stuff. However it does have the ability to expand to allowing just about everything. Also the editor is very simple as well- it kinda reminds me of the good old days of doom map editing. At the moment it works on one viewport by 3 views- top/front/side. You just scroll round them. You have full control over the cubes but at the moment they are controlled by the keyboard and as of yet has no ability to assign textures. You add primitives through console commands. Having said that, not bad for one days work [smile].
heres the editor in 'Edit' mode:
And heres a shot of the editor in 'World Preview' mode (With engines default texture):
Anyway, I am going to continue with this full on in my spare time. I am much happier now I have my own custom map format.
I've decided to leave my GUI Editor for a bit because I don't have the energy for doing heavy optimizations. So I have gone onto two other projects- Raytracing is just a side thing I want to mess around with and AngelPMX Compiler is the main project I'm working on that will compile my scripting languages source files into executable binary files for my engines runtime environment. I'm starting with a basic syntax since I have not actually written a compilable scripting language yet so I have got a kinda ASM syntax. Hopefully I will expand this as my knowledge increases.
Its quite interesting writing a compiler apart from the buzz of feeling uber-1337 with your codin' skillz [smile]. It gives you such an insight into what your actual compiler is doing. It gave me the same illumination as when I started mucking around with O/S development and I had to manually link everything with GCC and do a whole load of stuff that MSVC++ does automatically.
The thing is, I take compilers for granted and don't really dig far below the surface but when you start looking through the features of MSVC++ you really how freakin indepth it gets.
Anyway, after I have finished the compiler I'm gonna start on the runtime environment proper. I have the basic setup thats similar to all the other sys.Stak tools however I am going to add the virtual machine to it. VMs are something I'm really looking forward to reading into. Again, this will be a simple VM for my scripting language but hopefully it will expand.
As for raytracing- You know you have some hardcore calculations getting pushed through your CPU when it takes over 2 seconds to render a simple scene- 0.5FPS!! You know your scene rocks some[smile]. And i'm only doing, like, the first tutorial[smile].
Anyway, nothing else happening- work, games and photography.
Keep it real,
I have just finished doing a bit more to my GUI Editor. I have currently got it so the edit box widget will only display enough characters within the widget to fill the display area- a bit like windows edit boxes when you have a string longer than the edit box can display so it cuts off the end. Anyway, difficult to describe but very useful.
Once I finished that, i started on the tool bar for my GUI Editor- naturally I started editing it within the editor itself to make life easier.
The toolbar consisted of 7 labels and 7 edit boxes and the normal sys.Stak window style. However after about 3 minutes of using the editor with those widgets loaded it crashes and tells me i'm out of memory. I wanted to investigate further; I opened up Task Manager when it was running and was shocked by a peak memory usage of around about 350MB. Jesus Christ Almighty in a satin nighty!
Anyway, this has urged me to get down to some heavy optimizations!
nothing much else happening. Just a load of work and programming and I got some guy stalking me but thats about it.
That title got your attention [smile]
I'm feeling alot better since my last entry. The flu-esque virus I had has subsided somewhat. If i don't take any medicine I do feel like hammered shit though.
I've been doing a bit more to my GUI Editor. Just got a few more things sorted out in my head as far as the mechanics of the tool are concerned and also been thinking ahead a bit :0!
I have been thinking how my GUI will interface with my engine in the most efficient and easy way. What I have decided (i'm not sure if this is the norm for engines) to have events (bit like windows) and with those events, eg OnClick for buttons, I have a script file and function within a script file linked to that button. When the button is clicked, the GUI pushes the function onto the engines 'script stack' which means that events script will be processes first (kinda reverse to a message queue). How I figure it, GUI events take priority over other aspects of the engine. I'm sure this view will change the further I develop sys.Stak, but thats my view at the moment.
This way I can have the whole GUI events driver completely modular to the engine so I can edit it outside of the engine.
My overall aim, as you may have noticed, is to make my engine as modular as possible and have the main driving unit of the engine as bare-bones as is can be.
This way, I have far more control to develop outside of the engine.
As far as programming is concerned, i've started on my Edit Box widget. I have always dreaded this and, I now know, with reason. Label, window, icon and button widgets are so easy since they don't require their own input method or removal of text to only display a section within the widgets area. I know how I'm gonna do it, its just gonna be really laborious to implement. The GDNet lounge has not helped me the past few days since I find myself frequenting there when I have intentions to do more to my GUI Editor. Madness.
In other news, i now have a really nice new small T-Shirt from Cyberdog.
My camera has run out of batteries so heres a description:
As with everything from Cyberdog, it is a cool club scene t-shirt with circuit pattern all over it on black material.The circuit pattern is dull gray until you shine direct light on it, at which point it shines up. Its really nice!
I also have quite a decision infront of me-
spend some of this months wage on a Geforce 6600LE from XFX (~200) or a new camera (~280).
Cannot for the life of me make up my mind...!
over and out
So, its been a few hours since I last made a post in my journal but screw it; its a new day here in england and I still feel as shit as hell (interesting concept there).
On monday I picked up a really nice virus from my Deli-Krew-Mate Vicky- i think its a subset of flu because it has acheing limbs and temperatures. I keep sweating the damn temperatures down but then they come back. Oh well, means I got time to sit home reading up on random crap instead of going off to work.
After quite a bit of (legit for once) drugs I do feel better and can manage some coding [smile].
Anyway, I'm gonna stop complaining.
I was looking at a few other blogs and reading through their engine woes and stuff. It got me thinking how I was actually approaching such a complex project as a 3D engine. I wondering if anyone else followed this idea with their engine (if this is their first engine):
I don't look at the engine as a whole- ofcourse I have an idea of what I want out of it in the end and the features I need. However since this is my first engine I don't know how to do every feature. So instead of overloading my brain and thinking 'shit, how am I going to code all this' and panic and then lose interest I am taking each section as it comes. For instance, first I wanted to load up levels but what type of level? a 3D level. What type have alot of documentation and a loader/renderer already in place to base ones code on? BSP- its quite simple to load the initial level but collision detection can be a real pain in the arse. Luckily there is code in place and I can go back to collision detection and properly understand it when I need to.
This tool also taught me fonts and how to display different kinds of fonts on the screen and how to make a font code base.
So now I have my level and loader/renderer sorted out- thats now my 'world view' tool. A complete program in itself. What next? Well, I wanted to get the mesh code sorted out so I went to look through one of my Game Programmers books and found MD2 code for meshes- its good because theres documentation and I can update it to MD3. So I made a seperate tool called 'Model View' that loaded MD2 meshes (havn't upgraded it yet). This app also used the font code base from the 'World View' tool to display information.
So I had a mesh view tool, a world view tool, what next? I felt I needed more control over the engines environment (change system variables, load meshes and BSP levels etc.). What better way to control the engine from inside the engine than a developers console. So I made some graphics for it and decided what the initial commands would be for the console. I came up with an input method and a logic system for the console that allowed full control over the environment. So now I had a fully working, independent, class based code base for a console that I then incorporated into my other tools to display debug information, dump error messages and allow me to contol the world.
So now I wanted to make a fully working GUI to easily display information and edit information. Once I got a basic window system with a button widget and label widget to display and work as it was meant to in the 'World View' app (since thats the main basis for the rendering of levels) I wanted to make it more powerful. I wanted to be able to control windows in an external resource to import into the engine since engines are meant to be totally modular by their very nature. So I created a file type that had a template on loading in information for the window to display so the engine could just query the resource instead of having it hard coded. This had many benefits including not having to recompile the engine everytime I wanted to change a window and also allowed for the next stage.
Now I had made the initial primitive GUI system work on a modular resource engine I decided to make the creation of windows easier. So the next natural step would be to make a GUI editor which is where I'm at at the moment (see my pervious post). I can edit windows with my GUI editor and have my World View tool import them when needed.
I'm sorry it was a bit long winded; I got a little carried away. What I am thinking is, is my method the same as most of you out there on their first engine. I take each section of the engine, make it into a little program and in that way I am making it into a whole learning experience. Before I started, I had no idea how to display fonts, make GUI etc. but because I'm taking every aspect of the engine, no matter how small, as one little code base and one little application I am breaking it down and making it easier to learn and code. I am not looking beyond the current section of the engine since it is a project unto itself. However, once I finish a code base I incorporate it into all the other tools of my engine so I know they all work together without problems.
This way i'm not in a panic that I have so much to learn.
Just to lighten the heaviness of this entry...heres a manga hitlar (created by the Face Transformer and Rob Loach's hand picked image of Teh Hitlar Himself)
Just done a bit more to my GUI Editor for my engine.
Heres a screenie if you're interested. Ignore the broken graphics; I havn't got around to fixing that since I have been concentrating on the mechanics of the editor.
Currently you can:
-Load up previously created windows from SWD (Stak Window Descriptor) resource files for editing
-Save your current window to an SWD resource file
-drag labels around using the cursor by selecting their 'pin' (little green things)
-Drag buttons around by just dragging the button widget
-Move/Transform the window using the cursor
-Change all the captions using the console (havn't yet got a GUI for the GUI Editor per se, just the standard sys.Stak console)
-Use most of the other console commands that are used with the GUI
-Add new labels (through console)
-Add new buttons (through console)
-Remove labels (through console)
-Remove buttons (through console)
-I will add a GUI (other than the console) once I have a complete GUI system setup
-I will add the feature of linking script events to buttons clicks once I have a stable scripting language sorted out
-Make more widgets! (Edit boxes, memos, lists etc.)
Just incase you were wondering how the windows look without broken graphics (This is from in the engine not the editor):
Not quite as bad :)
Over and out, mofos
I've decided to actually keep a journal now.
Went clubbing yesterday till 7am this morning. It was Slimelight in london.
I decided not to get pilled up this time which was probably a mistake since I was knackered before hand (pro plus were doing nothing) and I fell asleep after about 4 hours with only a few dances under my belt.
Quite a few fit guys there. Not so many fit girls (not that I was looking...cos I have a gf).
Saw a strange woman who was dancing very very slowly to fucking fast up beat trance music. She seemed to be majorly spaced out on something.
I've got the next few weekends booked up which is good. I got a BBQ next weekend which I am going to buy a few shrooms for so we can all trip out with our burgers. Then saturday week we have the monthly brighton clubbing trip with my workmates- The Safeway/Morrisons Krew! I dunno whether I'm gonna get pilled up for that; the last trip was really amazing without any drugs (apart from joints).
I've made the decision to actually go extreme cybergoth very soon. I've been quite traditional for years now but I really want to go extreme. I got the perfect hair style in my mind and I'm gonna get a few more tattoos and piercings.
I've left my game engine for a few days now. I've gotten quite far with the GUI editor tool- so useful since I can just throw together windows for my engine. But I have run into some very illogical problems.
Also been reading up on CPU and hardware emulation. Very interesting stuff and something I want to read into more depth and do a bit of pratical programming with it.
Yesterday I decided to get some more rave pants from Cyberdog. I happily spend 60 quid on these. They are sweet as-
Over and out, mofos
Dunno how people but I forgot that GDN+ has a journal/blog feature (even though I have already added one entry).
Anyway, sys.Stak engine is coming along nicely- just started on the GUI after hacking around the problem with falling through or 'ghosting' through the floors of Q3BSP maps (I did it without a FPS limiter). So now I can concentrate on the interface which is what i'm doing now.
I have decided to take the bog standard approach to the interface with a main interface object and all widgets derive from this object. I have the CStakInterface as the base class for all derived objects, then I have CUIWindow, CUIButton etc.
So I have it all sorted programmatically but what happens when I come to properly implementing an interface with multiple drag/drop windows etc? Only time and hacking around will show results.
Yea, I enjoy hacking around my code. Its cos i'm lazy ;)
Have a good one,
Steam drive is making slow but steady progress. At the moment I am making a small multi-format model viewer as a tool for the main engine. This tool is allowing me to write all the basic engine routines like the console, model loading etc. in a small easy program. This will make it easier to write aspects of the engine without getting bogged down in the rest of the code.
Its just my way of learning...start small.
The model viewer is coming along well. I'm currently writing the logic for the console.