Sorry your browser is not supported!

You are using an outdated browser that does not support modern web technologies, in order to use this site please update to a new browser.

Browsers supported include Chrome, FireFox, Safari, Opera, Internet Explorer 10+ or Microsoft Edge.

Work in Progress / NaGaCreMo WLGfx's entry...

Author
Message
WLGfx
11
Years of Service
User Offline
Joined: 1st Nov 2007
Location: NW United Kingdom
Posted: 10th Jan 2012 02:09 Edited at: 3rd Feb 2012 23:31
I started this project off originally in Pure GDK but as the beta was running out fast I switched over to Dark GDK so I could carry on.

Attached to this post is the source code to the project as it stands...

The source code is fully commented and this will compile with no extras at all in Visual C++ Express 2008 and hopefully you should get this:


With the release of PureGDK finally here (and I've no pennies to purchase something I've enjoyed for so long) and DarkGDK causing some pains I've moved over the learning openGL and transferring this project over. With the intention of one day very soon getting this level generator compiling on Linux and a Mac. I will still be using Dark GDK for other things as time goes by. I've a soft spot for this software.

As usual, I hope this helps someone out...

Below is where this project originally started:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Written with Pure GDK...

It's very unlikely going to get to the stage where I get a working demo by the end of the month but I will try.

The level editor is finished. Each level takes up just 128 bytes and is procedurally generated in under a second with all the floor, wall and ceiling decorations, defenses and enemy placements.




The level stucture:
But obviously the game structure and other classes will be larger.

I'm at the part where I've two things to do. 1) make some more prefabs and 2) start coding the game itself. I find modelling very boring.

My BLOG on this project.

I need more coffee!!!

Mental arithmetic? Me? (That's for computers) I can't subtract a fart from a plate of beans!
Warning! May contain Nuts!

Attachments

Login to view attachments
MrValentine
AGK Backer
8
Years of Service
User Offline
Joined: 5th Dec 2010
Playing: FFVII
Posted: 10th Jan 2012 04:28


NICE WORK WLGFX!!!

Hope to see some video footage...

In case the question comes up... camstudio...

WLGfx
11
Years of Service
User Offline
Joined: 1st Nov 2007
Location: NW United Kingdom
Posted: 10th Jan 2012 04:57
Cheers

I'll get back to work on it once my little hospital trip is over. I'm hoping a google search will bring up some low poly pre-fabs I can use instead of spending boring hours doing those myself. When it's finished and it's not going to be a boss game as I'm still experimenting with a lot of things, I'll release the code for it. And hopefully put more comments in it this time.

Mental arithmetic? Me? (That's for computers) I can't subtract a fart from a plate of beans!
Warning! May contain Nuts!
MrValentine
AGK Backer
8
Years of Service
User Offline
Joined: 5th Dec 2010
Playing: FFVII
Posted: 10th Jan 2012 05:11
If you need particular prefabs just ask... although I am still lacking in textures I can make you some basic texture objects in 3DWS to practice my exporting skills and lighting too...

WLGfx
11
Years of Service
User Offline
Joined: 1st Nov 2007
Location: NW United Kingdom
Posted: 10th Jan 2012 05:32
At the moment I'm not using any lighting for this small project.

What I need is a selection of floor, wall and roof decorations as well as turrets, ie gun placements, etc that attach to the map. I can resize and orientate them myself. I can program for hours on end but drawing and modelling, doctors have more patience than me.

Mental arithmetic? Me? (That's for computers) I can't subtract a fart from a plate of beans!
Warning! May contain Nuts!
MrValentine
AGK Backer
8
Years of Service
User Offline
Joined: 5th Dec 2010
Playing: FFVII
Posted: 10th Jan 2012 06:48
Ok will see what I can cook up

any particular roof shapes? typical british council house roofs? LOL

triangular ones.

will make some floor tiles... want them flat or umm variants? also cuba shaped or slim?... terrain?

Walls.. any windows? square panels... or rectangular?

Hmm turrets... will see what I can cook up but wont be animated...

Seppuku Arts
Moderator
14
Years of Service
User Offline
Joined: 18th Aug 2004
Location: Cambridgeshire, England
Posted: 10th Jan 2012 11:33 Edited at: 10th Jan 2012 11:34
Looking good amigo! (So's your project ) I'll be interested to see what you end up doing with those procedurally generated levels.

Quote: "I need more coffee!!!"


You're in England, drink some bloody tea!

TheComet
11
Years of Service
User Offline
Joined: 18th Oct 2007
Location: I`m under ur bridge eating ur goatz.
Posted: 10th Jan 2012 12:27
Looks very interesting! Good job, and good luck!

TheComet

Blobby 101
12
Years of Service
User Offline
Joined: 17th Jun 2006
Location: England, UK
Posted: 10th Jan 2012 18:31
Looking nice there! I'll add a link to this thread in the first post

WLGfx
11
Years of Service
User Offline
Joined: 1st Nov 2007
Location: NW United Kingdom
Posted: 10th Jan 2012 22:50 Edited at: 10th Jan 2012 22:51
I'm hoping it'll be interesting when I've finally got something up and running.

The other problem I'm facing is concentration so I've been using yEd to help me design flow charts for my program flow and designing. It has been very useful to me and I'd recommend it to anyone who also has concentration problems. And I'm now using it to structure my next part of the game, startup, entity handlers, etc.



All the code for this project will also be released to the community so all the procedural stuff within it I will try to comment on as best as I can. As for procedural stuff, I've just come across some fantastic documents and source for such stuff as using the GPU to generate on the fly textures, cpu and gpu paralization on lod control, etc, etc. Definitely gems.

And for the first time in a few months, I'm not on tea or coffee, something to put 'more' hairs on my chest...

Mental arithmetic? Me? (That's for computers) I can't subtract a fart from a plate of beans!
Warning! May contain Nuts!

Attachments

Login to view attachments
WLGfx
11
Years of Service
User Offline
Joined: 1st Nov 2007
Location: NW United Kingdom
Posted: 13th Jan 2012 17:26 Edited at: 13th Jan 2012 17:26
Update: I've decided to restart my procedural level generation code, so it's highly unlikely this will see a working demo before the end of the month.

The new algorithm will generate corridors much better and be able to add rooms of various sizes. The old algorithm just used triangles but now I'm adding rectangles weaving and rooms. The image should hopefully explain it better.

Once this is done the game will be on it's way finally to completion...



Mental arithmetic? Me? (That's for computers) I can't subtract a fart from a plate of beans!
Warning! May contain Nuts!

Attachments

Login to view attachments
MrValentine
AGK Backer
8
Years of Service
User Offline
Joined: 5th Dec 2010
Playing: FFVII
Posted: 13th Jan 2012 17:49
Me too I had to take a break this week and then as I am now going back to it I am having to start from scratch. somewhat as I lost my track

WLGfx
11
Years of Service
User Offline
Joined: 1st Nov 2007
Location: NW United Kingdom
Posted: 14th Jan 2012 03:25 Edited at: 14th Jan 2012 03:27
Most of the code will be almost the same as the version 3 of my procedural level generation code with a few more extensions and checks for intersections and thats basically it. This time though I'll be adding the height calcs straight into the algorithm instead of creating a 2D map first. Also looking into adding different shaped rooms, I've a start with it though.

I don't like taking a break as I lose track myself, this time it's because I'm constantly back and forth the hospitals for all kinds of wierd and wonderful tests so as well as that, it causes stress. :-(

EDIT: Still I'm planning on having a complete level of any size from small to massive defined in less than 128 bytes.

Mental arithmetic? Me? (That's for computers) I can't subtract a fart from a plate of beans!
Warning! May contain Nuts!
MrValentine
AGK Backer
8
Years of Service
User Offline
Joined: 5th Dec 2010
Playing: FFVII
Posted: 14th Jan 2012 03:45
I found my current project... gotta love open file history list hahahaha...

I started using voice recording umm you know a personal umm dictator┬┐ it helps keep on track...

WLGfx
11
Years of Service
User Offline
Joined: 1st Nov 2007
Location: NW United Kingdom
Posted: 17th Jan 2012 22:11 Edited at: 17th Jan 2012 22:17
Got the floor map generation code almost completed. Yay! Using the method I mentioned above I can now generate random maps with just a few numbers. Make my corridors more curvy, slopey.

All I need to do now is to add the room creation algorithm.

This screenshot shows the current corridor generation:


Although I am having a problem with this function if in the meantime anyone can help out???



Mental arithmetic? Me? (That's for computers) I can't subtract a fart from a plate of beans!
Warning! May contain Nuts!

Attachments

Login to view attachments
WLGfx
11
Years of Service
User Offline
Joined: 1st Nov 2007
Location: NW United Kingdom
Posted: 21st Jan 2012 01:41 Edited at: 21st Jan 2012 03:32
Rooms now added to the level generation algorithm. It was actually easier than I thought to get this part finished.

FIXED: Just a face was missing, so I'm just ironing out that bug now...



Here's the lovely snippet of messy code that does it:
(needs lots of optimizing but it's mega fast at the mo)


Mental arithmetic? Me? (That's for computers) I can't subtract a fart from a plate of beans!
Warning! May contain Nuts!

Attachments

Login to view attachments
Brendy boy
13
Years of Service
User Offline
Joined: 17th Jul 2005
Location: Croatia
Posted: 21st Jan 2012 15:46
Quel
10
Years of Service
User Offline
Joined: 13th Mar 2009
Location:
Posted: 21st Jan 2012 16:08
I would love to see the rooms less circular here and there, and with some noise.

But other than that, yep, just wow!

-Mental Hybrid: A unique heavy story based shoot'em ~40% (primary project)
-CoreFleet: An underground commander unit based RTS (canned) ~15%
WLGfx
11
Years of Service
User Offline
Joined: 1st Nov 2007
Location: NW United Kingdom
Posted: 21st Jan 2012 17:01 Edited at: 21st Jan 2012 17:27
Oh cool... I've been really slow at doing any coding recently but I got it done.

@Quel - I'm going to alter the rooms slightly as I started writing just using the settings for the corridors. The edge sizes are set to a range which I'm going to use a seperate range set for the rooms edges. This will cut down the amount of verts used in a level too.

DONE Quel ->


The class so far for the generation code: When the level editor is setup I'll be changing the sizes of the data so that bytes will be used instead of integers.



Just in case anyone is interested, here's the function for getting the centre of a circle by providing 3 coordinates:


It will also give you the radius. Google has been extremely useful for this.

Now it's time to do the two things need before I can get the game completed.

1) Set a seperate range amount for the rooms.
2) Set up the level editor dialog.

I'll also provide a screen shot soon of the 3d model produced, which will look better than the one in the first post.

Mental arithmetic? Me? (That's for computers) I can't subtract a fart from a plate of beans!
Warning! May contain Nuts!

Attachments

Login to view attachments
Seppuku Arts
Moderator
14
Years of Service
User Offline
Joined: 18th Aug 2004
Location: Cambridgeshire, England
Posted: 22nd Jan 2012 15:55
It's looking to be pretty damn awesome there mate. Can't wait to see how the final 3D model looks. But it looks like it could be a great tool for generating dungeons.

Chris Tate
DBPro Master
10
Years of Service
User Offline
Joined: 29th Aug 2008
Location: London, England
Posted: 22nd Jan 2012 18:25
Looking good.

WLGfx
11
Years of Service
User Offline
Joined: 1st Nov 2007
Location: NW United Kingdom
Posted: 22nd Jan 2012 20:06
Cheers!

There's a few more features I've decided to build into this generator now so if anything I might have a demo of the level editor ready for the end of the month. And maybe after that I may turn this into a dungeon engine for DBP and GDK for anyone to use and abuse.

1. Adding a built in occlusion culling feature.

This will setup the final 3D object for the dungeon in one object with many limbs for each corridor and room. The programmer can then just pass the current position and the dungeon engine will hide any limbs that are out of a set range.

2. Floor, wall and ceiling texture setup.

This will allow the user to manually setup lists of texture files that will be used in the final 3D object. Each seperate room and corridor will have the ability to have different textures. Obviously too many textures are likely to make some dungeons look odd. Also going to make sure that duplicate textures are not loaded in more than once.

3. File saving options.

Some people might want to save the generated dungeon as a 3D model. At the moment I only know how to save a DBO with textures and an X file without. Something to look into in the future "maybe". The generation time for a 100 segment dungeon will only take approx 1 second to generate a dungeon completely textured anyway so I "don't" see this as a priority. Apart from that, a data file with the dungeon parameters can be saved. This is likely to end up being approximately 128 bytes only maximum once the final generator is completed.

4. Decorations.

Collidable and non-collidable objects can be added to the algorithm. These can be placed in various places taken directly from the map data, either in the middle of a room, the middle of a rooms triangle face, along a rooms inner edge, along a walls edge at any height, walls face, corridors various face and edge positions and also the same for the ceiling. The editor will have a dialog setup to add the details for these items with just a few parameters for each, such as a random seed, count of the item, where it's being placed, transformation details (rotation and scaling). This will increase the saved file size by a few extra bytes but it's a lot smaller than a DBO. I'll add various class functions to access these items.

5. Entities editor.

The final piece of the dungeon editor will be to add gaming entities to the level. Depending on how the progress goes on this level generator, this final piece will be much the same as the 'decorations' editor but with a few extra parameters.

At the moment I'm going to play around with the texture lists first before I add the occlusion culling feature. And all along I will be coming up with some more ideas to add to this.

Also open to ideas...

Mental arithmetic? Me? (That's for computers) I can't subtract a fart from a plate of beans!
Warning! May contain Nuts!
Brendy boy
13
Years of Service
User Offline
Joined: 17th Jul 2005
Location: Croatia
Posted: 22nd Jan 2012 21:08
Quote: "3. File saving options.

Some people might want to save the generated dungeon as a 3D model. At the moment I only know how to save a DBO with textures and an X file without. Something to look into in the future "maybe". The generation time for a 100 segment dungeon will only take approx 1 second to generate a dungeon completely textured anyway so I "don't" see this as a priority. Apart from that, a data file with the dungeon parameters can be saved. This is likely to end up being approximately 128 bytes only maximum once the final generator is completed."

there's an x exporter snippet in code snippet subforum

zapakitul
12
Years of Service
User Offline
Joined: 1st Mar 2007
Location: In my world
Posted: 23rd Jan 2012 02:22
@WLGfx, I just noticed you can get a hell lot more of a performance by just making a mesh out of your final object (with all those nasty limbs), deleting the object, and making a new object from that mesh!

Though this is a problem when it comes to texturing the mesh, sadly T_T.
WLGfx
11
Years of Service
User Offline
Joined: 1st Nov 2007
Location: NW United Kingdom
Posted: 23rd Jan 2012 03:06
I'll get round to looking into the x exporter when the time comes. I forgot about that. Cheers...

I'm wondering what the performance difference is between a single object with many limbs and many objects. Unfortunately for this dungeon creator each wall, floor and ceiling in each of the rooms and corridors will be seperately textured so I can't have a single mesh.

Mental arithmetic? Me? (That's for computers) I can't subtract a fart from a plate of beans!
Warning! May contain Nuts!
zapakitul
12
Years of Service
User Offline
Joined: 1st Mar 2007
Location: In my world
Posted: 23rd Jan 2012 03:23
WLGFX, I get around 70 FPS(with my culling system with an object featuring 2000 limbs (entire level view)! Now, the same object, converted to mesh and then made a new object, 800+ FPS (entire level view)! The difference is gigantic! Also, collision detection (Sparky, Nvidia PhysX) works better with that one mesh. (PhysX doesn't even set's the object properly).

I'm looking for a way to texture individual faces of a Mesh! No luck so far, but I'm doing my best!
WLGfx
11
Years of Service
User Offline
Joined: 1st Nov 2007
Location: NW United Kingdom
Posted: 23rd Jan 2012 03:44 Edited at: 28th Jan 2012 19:30
I don't think you can unless you go about the UV unwrapping in a modelling program, otherwise you're stuck with multiple limbs. I will test out the FPS difference though between multiple limbs and multiple objects though.

It's good to know that I can hide seperate limbs though.

Mental arithmetic? Me? (That's for computers) I can't subtract a fart from a plate of beans!
Warning! May contain Nuts!

Attachments

Login to view attachments
zapakitul
12
Years of Service
User Offline
Joined: 1st Mar 2007
Location: In my world
Posted: 23rd Jan 2012 04:09
Hm, what if you generate 3 separate meshes (one for the floor, one for the walls, one for the roof (if you use one)? Then they can all have 3 separate textures. I will also do a check (later on, after I come back from work), to see if I have any notable speed increase by using multiple objects, instead of a object with multiple limbs.

Good luck WLGFx, do post your results.
MrValentine
AGK Backer
8
Years of Service
User Offline
Joined: 5th Dec 2010
Playing: FFVII
Posted: 23rd Jan 2012 05:14
interesting... thus far... I am keen to understand limbs and meshes more at the moment... especially manipulation of them...

WLGfx
11
Years of Service
User Offline
Joined: 1st Nov 2007
Location: NW United Kingdom
Posted: 26th Jan 2012 02:56 Edited at: 26th Jan 2012 02:58
I've not yet had time to test the limbs vs objects yet because I've wanted to plough into getting as much of the 3D model code working.



Attached is the current exe which will display the progress of a 50 segment dungeon being created then allow you free flight around it.

The walls do have UV artifact stretching but I've figured that's because I didn't account for the missing vertices that are not required for setting up the wall object. I will fix that in the morning.

Planned progress to get "Procedural Level Generator V4.0" completed:

1. Fix UV stretching on the wall mesh.
2. Add a dialog to show and edit the maps setting.

Planned progress to get "Procedural Level Generator V4.1" completed

1. Seperate each room and corridor into their own objects.
2. Add external texture references.
3. Allow save file.

Planned progress to get "Procedural Level Generator V4.2" completed

1. Add pre-fab decorations to the level setup data.
These will also be included in the occlusion culling code.
2. Add an entities editor.
3. Add collision data for both level, pre-fabs and entities.

At the moment, I'm not sure about the entities editor so that will come last on the list.

EDIT: The attached exe, forgot to add, hold left mouse and use cursors for free flight.

Mental arithmetic? Me? (That's for computers) I can't subtract a fart from a plate of beans!
Warning! May contain Nuts!

Attachments

Login to view attachments
Seppuku Arts
Moderator
14
Years of Service
User Offline
Joined: 18th Aug 2004
Location: Cambridgeshire, England
Posted: 26th Jan 2012 12:07
Just tested it, it works pretty well, generates the level speedily enough and looks pretty cool. I can already get the feel of a dungeon, add some textures and entities to the scene and I'm sure it'll be a kickass effect.

Ashingda 27
11
Years of Service
User Offline
Joined: 15th Feb 2008
Location:
Posted: 26th Jan 2012 16:35
Quite impressive, if someone was to just run around in it they wouldn't think it was just generated. I found the flight control to be rather difficult to navigate with. Will the rooms or paths have different heights as well?

MrValentine
AGK Backer
8
Years of Service
User Offline
Joined: 5th Dec 2010
Playing: FFVII
Posted: 26th Jan 2012 16:42
I just had an idea about this... forgive me if you already thought of it or mentioned it...

But elevation

like RED FACTION caves... as well as others... what about elevated heights? Would add more immersion I think

WLGfx
11
Years of Service
User Offline
Joined: 1st Nov 2007
Location: NW United Kingdom
Posted: 26th Jan 2012 19:15 Edited at: 27th Jan 2012 01:48
I've managed to fix the UV problems. Couldn't believe I wasn't reading x and z, I had coded x and y. Doh... Without the drawing each update the levels are generated in a split second, including texturing. It will take a little more time once the decorations are added to it. But still a 50 segment level will be done in under a second.

I'm considering adding some more verts to the rooms so that the floor and ceilings are different heights. One of the functions already gives me the centre coords and the radius of the room so I can use these to add the extra verts. The corridors will probably stay the same until a later version. I'm also thinking of adding shapes to the algorithm so when it comes to adding a room it will just resize a room shape and then attach it to the map, if it fits. That way, the rooms won't all be circular.

For this version I won't be adding elevated heights but they can be simulated within the game by throwing in ladders or stairs or even a hole in the ground. All the information in the database that the generator creates can be used very easily to place things.

Sowwy bout the free flight controls. I've only thrown that in so the level can be viewed. Not bothered much at this time with testing the level apart from making sure all the sorting of the edges are correct for UV mapping.

At this stage, the UV mapping is working so I'll be putting together the dialog editor using winapi so that you play around with the map settings. Hopefully should have that all running either later or tomorrow.

Mental arithmetic? Me? (That's for computers) I can't subtract a fart from a plate of beans!
Warning! May contain Nuts!

Attachments

Login to view attachments
WLGfx
11
Years of Service
User Offline
Joined: 1st Nov 2007
Location: NW United Kingdom
Posted: 27th Jan 2012 01:55
New preview .exe attached to this post with 99.9% fixed UV's on the wall segment. This also shows the very basics of easy item placement on the map.

I'll be working on the dialog now to edit the map params next so that you can change the map. Too tired at the moment.

Thank you so much for the encouraging comments so far. The "doesn't look like it's been generated" has got me chuffed to bits...



Mental arithmetic? Me? (That's for computers) I can't subtract a fart from a plate of beans!
Warning! May contain Nuts!

Attachments

Login to view attachments
McLaine
13
Years of Service
User Offline
Joined: 20th Feb 2006
Location:
Posted: 27th Jan 2012 10:12
Good stuff mate!

I love procedural generation, ever since the days of Rogue!

I would suggest adding a bit of thickness to the walls rather than just using plains.

It's not my fault!
Chris Tate
DBPro Master
10
Years of Service
User Offline
Joined: 29th Aug 2008
Location: London, England
Posted: 27th Jan 2012 13:14
Great work WLGfx. A bit of bump mapped texturing and some roughened sub terrain walls and floors and you have a cave that looks modelled.

WLGfx
11
Years of Service
User Offline
Joined: 1st Nov 2007
Location: NW United Kingdom
Posted: 28th Jan 2012 19:34 Edited at: 28th Jan 2012 21:13
You can finally now play around with the map setup data. And I've fixed the free flight controls.

The new .exe file is attached to this post with the editor dialog working. (Only 712kb)

If anyone would like the source for this project file then drop me a line. The source code zips up into just 22Kb...



Mental arithmetic? Me? (That's for computers) I can't subtract a fart from a plate of beans!
Warning! May contain Nuts!

Attachments

Login to view attachments
WLGfx
11
Years of Service
User Offline
Joined: 1st Nov 2007
Location: NW United Kingdom
Posted: 30th Jan 2012 15:16
I've started a very easy to follow "Procedural Level Generation" tutorial for Dark Basic Pro and GDK C/C++.

Procedural Level Generation Tutorial

So far only got the 2 sections added and google stats is showing visitors already. I'll be moving onto various algorithms next such as creating a random 2D array map content.

Mental arithmetic? Me? (That's for computers) I can't subtract a fart from a plate of beans!
Warning! May contain Nuts!
WLGfx
11
Years of Service
User Offline
Joined: 1st Nov 2007
Location: NW United Kingdom
Posted: 3rd Feb 2012 23:32
Visual C++ 2008 Express - Source code is now attached to the first post...

Mental arithmetic? Me? (That's for computers) I can't subtract a fart from a plate of beans!
Warning! May contain Nuts!
WLGfx
11
Years of Service
User Offline
Joined: 1st Nov 2007
Location: NW United Kingdom
Posted: 15th Feb 2012 06:07 Edited at: 15th Feb 2012 06:08
Although I've moved over to raw openGL I've not stopped working on this project.

TESSELLATION is the latest thing I've added to the level generation. This is so that the floor of the dungeon will appear so much smoother when this finally gets used in a game I want to eventually work on. Distance culling will also be added as each segment can be checked with distance from the camera and only the closer segments will get there openGL display list called.

Next step is to view the 3D model and make sure the calculations for the vertex normals work okay...

This screen shot shows 2 levels of tessellation of a 50 segment dungeon which takes up only 321kb to upload to the GPU as a vertex buffer object:



The source code for the tessellation function:


Mental arithmetic? Me? (That's for computers) I can't subtract a fart from a plate of beans!
Warning! May contain Nuts!

Attachments

Login to view attachments
WLGfx
11
Years of Service
User Offline
Joined: 1st Nov 2007
Location: NW United Kingdom
Posted: 27th Feb 2012 02:32
After a complete re-write of the mesh code I'm almost at the point where I can work on the GLSL shaders for bump mapping the textures.

I'm having tessellation problems, the code works with one level of tessellation so far but things look really pretty if I change the levels of tessellation to two.

More details at my blog page - http://csnorwood.site40.net/2012/02/tessellation-problems/

One level of tessellation:


Two levels of tessellation:


Mental arithmetic? Me? (That's for computers) I can't subtract a fart from a plate of beans!
Warning! May contain Nuts!

Login to post a reply

Server time is: 2019-04-26 04:01:47
Your offset time is: 2019-04-26 04:01:47