Jump to content
rllmuk
Sign in to follow this  
matt0

Forum Works In Progress

Recommended Posts

I figured the start of the new year is a good a time to post this as any.

What's everybody working on at the moment and how're things going?

...

Here's a couple of screen grabs from my current project, a remake of the old Amiga game Tanks N' Stuff done in Blitz Basic.

jrfyhi.gif

jrg115.gif

First shot is an in-game shot of a (very) early version. Everything sort-of works (I did manage to "break" the computer AI a few weeks back but I'm going to start that again from scratch) but the game isn't playable yet.

Second shot is of the level editor I've cobbled together over the past week, which shows off the crappy, barely legible font I came up with. The code for the menu and icons were salvaged from a bullet pattern editor for a 2D shooter I was working on last year but abandoned.

Progress is... very, very slow... considering I started at the beginning of November, but the whole project is looking finishable. The working editor alone is a minor victory for me ;) .

Share this post


Link to post
Share on other sites

i'm doing a little space invaders clone in opengl. going pretty well, it seems to be all working bar a few little bugs. so i need to fix them, make the aliens look a little more alien like, make the intro screen look a bit more interesting (currently just says 'press insert to play'), get it saving high scores (have to fix the bug which resets your score when you finish a level first, though :P).

then i might look at adding little explosion animations when things get shot, maybe some textures and stuff. obviously it'll look more like space invaders without the textures, but never mind that ;)

current pic: http://www14.brinkster.com/kevtest/game.jpg

Share this post


Link to post
Share on other sites
I never played the original,  how does the gameplay work?

It was a shareware game. The demo came on a mag (Amiga Format or Amiga Power, or maybe both?). I registered the full thing back in the day, as it was ace!

It's a four-player (two on the keys, two on joysticks) tank battle - the new Combat mode in Advance Wars DS plays a bit like it (the scenery is destroyable; you have a number of lives IIRC). I'm pretty sure you could either destroy or capture your opponent's bases too for a quick win. I'll dig it out and play it again tonight to see how it's aged...

EDIT: Nope, that wasn't it at all - you had to capture flags and drop them off at your base. You could carry a couple (3?) at a time and had to fill all the space on your base.

You could even wait til your mate had picked up a few, and steal them from his base too! Though his base has wee anti-tank turrets that auto-track and shoot, you could blow those up...

Wonderful stuff.

Share this post


Link to post
Share on other sites

Finishing off the Naked War website, in time for our planned launch in a month or so, getting all the player stats / charts pages working.

All the fun stuff is done now, so its a case of doing all the dull but essential jobs I've been putting off for ages (hence an increased post count lately...)

website_work.jpg

Share this post


Link to post
Share on other sites
It was a shareware game. The demo came on a mag (Amiga Format or Amiga Power, or maybe both?). I registered the full thing back in the day, as it was ace!

It's a four-player (two on the keys, two on joysticks) tank battle - the new Combat mode in Advance Wars DS plays a bit like it (the scenery is destroyable; you have a number of lives IIRC). I'm pretty sure you could either destroy or capture your opponent's bases too for a quick win. I'll dig it out and play it again tonight to see how it's aged...

I thought the original author never finished/released the full version.

Share this post


Link to post
Share on other sites

Currently still in doubt whether to finish my Blitz3D game ... or wait for BlitzMax's 3D module, and maybe buy BlitzMax in the meantime and do a nice little 2D game in it to get to grips with it.

The shitty thing about being at a pivotal point in development is that if I decide to continue in Blitz3D, ever creating a sequel or port for MacOS/Linux will be hell.

  • Downvote 1

Share this post


Link to post
Share on other sites

A 2D space shooter. It's entirely in my head, so I don't suppose it counts as WIP really, but sometimes it keeps me awake in bed while I think about it. I'm worried that as I think of more things to put in, I forget some of the old things.

Share this post


Link to post
Share on other sites

I started work on my 'Bar and Ball' game about a year and a half ago in blitzbasic, was doing well until the demo ran out, so I bought the full version, and the project ground to a halt.

I have an old .exe of it somewhere, basically, its a 2D game, you had a bar across the bottom of the sceen and you can push either end up and down on a rail and a ball sits on that bar and rolls up and down according to the bars angle, there are holes in the backboard that the ball falls through and so you just have to guide the ball around the holes to the top.

I did actually get the bar and ball working with proper ball physics and got 1 working hole that reset the game if the ball went in it, but when I tried to setup an array for loads of holes it ground blitz to a halt (well about 3fps) and I never worked out how to get around it ;) also I didn't have a bloody clue how to get the whole thing scrolling upwards.

Luckily though I used to work in the games industry(as an artist) and have a couple of programmer friends who are interested(armed with their inhouse coding tools and libraries :lol: ) so I'm gonna make a pitch for them and hopefully get something up and running in full 3D in the next year or so.

Share this post


Link to post
Share on other sites
Hey that's looking smart, I used to love that game - first game I ever completed.

Did you draw the sprites yourself?

Nah, although I *can* sprite fairly well, I prefer programming and so a chap called Trevor Storey is doing the graphic work as it was him who wanted me to remake Wizball in the first place (I loved the game on the Spectrum although having now played the C64 version it blows the Spectrum one out of the water six ways from Sunday).

Share this post


Link to post
Share on other sites

I've started a blog to record my development. I figure that the more people know about what I have got done so far, the more incentive there is to keep working at it - just so that I don't get seen as lazy.

Programming by guilt. Gotta love it.

Share this post


Link to post
Share on other sites
Nah, although I *can* sprite fairly well, I prefer programming and so a chap called Trevor Storey is doing the graphic work as it was him who wanted me to remake Wizball in the first place (I loved the game on the Spectrum although having now played the C64 version it blows the Spectrum one out of the water six ways from Sunday).

Was it you that did the graphics for the Head Over Heels Remake or am I getting mixed up? They were great.

The Wizball remake looks pretty cool. Still haven't got round to checking out your Exolon remake but it's on my list of things of things to do...

but when I tried to setup an array for loads of holes it ground blitz to a halt (well about 3fps) and I never worked out how to get around it sad.gif

(not very) Funny story this: When I first started messing around with Blitz Basic I couldn't figure out how to use triganometry to calculate X and Y vectors between points. I tried a whole bunch of increasingly stupid ideas till at one point I actully tried to define an array that was 640x480x640x480x2 so I could precalculate and store vectors from any pixel on the screen to any other... :)

Share this post


Link to post
Share on other sites
I used to love that game on the Amiga, looks like you're going a great job!

Thanks! I'm aiming to actually finish a game this time. This one is literally stitched together from bits of code from abandoned projects...

Share this post


Link to post
Share on other sites

I'm doing some general coding at the moment.

Just "finished" , creating a NTree class that contains a tree where each node has unlimited amount of children. I aslo have iterators made for this class, so you can traverse it like you traverse stl-containers. Here is the NTree


#ifndef H_xxNTREExx_H
#define H_xxNTREExx_H
#include <list>
#include <stack>

/*
NTree is a templetized general tree container for trees where the node
has n number of children. it uses a iterator to traverse the tree and the
iterator supports preorder traversal, inorder traversal, postorder traversal and
level order traversal.
*/

namespace spc
{


template<class A>
class NTree
{
public:
 template<class TraversePolicy>
 class Iterator;

 template<class TraversePolicy>
 class ConstIterator;
 
 friend class Iterator;
 friend class ConstIterator;
 class PreorderTraversal;
 friend class PreorderTraversal;
 class ReversePreorderTraversal;
 friend class ReversePreorderTraversal;

 

  typedef Iterator<PreorderTraversal> PreorderIterator;
  typedef Iterator<ReversePreorderTraversal> ReversePreorderIterator;
 
  typedef ConstIterator<PreorderTraversal> ConstPreorderIterator;
  typedef ConstIterator<ReversePreorderTraversal> ConstReversePreorderIterator;
 

 
 
 
 template<class TraversePolicy>
 class ConstIterator
 {
 
 public:
  friend  TraversePolicy;
  friend NTree;
  friend class ReversePreorderTraversal;
  friend class Iterator;
  ConstIterator()
  {
   m_treePointer=0;
  }

  ConstIterator( NTree<A> *  const pointer)
  {
   m_treePointer = pointer;
  }

  const ConstIterator& operator=(const ConstIterator& it)
  {
   m_treePointer = it.m_treePointer;
   m_traversePolicy = it.m_traversePolicy;
   return *this;
  }

  const A* operator->()
  {
   return &(m_treePointer->m_data);
  }

  const A& operator*()
  {
   
   return m_treePointer->m_data;
  }

  ConstIterator& operator++()
  {
   return m_traversePolicy.traverse(*this);
  }

  ConstIterator& operator++(int a)
  {
   return m_traversePolicy.traverse(*this);
  }

  ConstIterator& operator--()
  {
   return m_traversePolicy.rev_traverse(*this);
  }

  ConstIterator& operator--(int a)
  {
   return m_traversePolicy.rev_traverse(*this);
  }

  bool operator==(const ConstIterator& it)
  {
   if (m_treePointer==it.m_treePointer)
    return true;
   return false;
  }

  bool operator!=(const ConstIterator& it)
  {
   if (m_treePointer==it.m_treePointer)
    return false;
   return true;
  }


 protected:
  TraversePolicy m_traversePolicy;
  NTree<A> *m_treePointer;
 
 };


 template<class TraversePolicy>
 class Iterator : public ConstIterator<TraversePolicy>
 {
 
 public:
  friend  TraversePolicy;
  friend NTree;
  friend class ReversePreorderTraversal;
  Iterator()
  {
   m_treePointer=0;
  }

  Iterator( NTree<A> *pointer)
  {
   m_treePointer = pointer;
  }

  Iterator(const Iterator<TraversePolicy>& it)
  {
   m_treePointer = it.m_treePointer;
   m_traversePolicy = it.m_traversePolicy;
  }

  const Iterator& operator=(const Iterator<TraversePolicy>& it)
  {
   m_treePointer = it.m_treePointer;
   m_traversePolicy = it.m_traversePolicy;
   return *this;
  }

  const Iterator& operator=(const ConstIterator<TraversePolicy>& it)
  {
   m_treePointer = it.m_treePointer;
   m_traversePolicy = it.m_traversePolicy;
   return *this;
  }//*/

  //Cast-to-double operator
  /*operator Iterator<TraversePolicy>&()
  {
   return *this;
  }*/

 

   A* operator->()
  {
   return &(m_treePointer->m_data);
  }

  A& operator*()
  {
   
   return m_treePointer->m_data;
  }

  ConstIterator<TraversePolicy>& operator++()
  {
   return m_traversePolicy.traverse(*this);
  }

  ConstIterator<TraversePolicy>& operator++(int a)
  {
   return   (m_traversePolicy.traverse(*this));
  }

  ConstIterator<TraversePolicy>& operator--()
  {
   return m_traversePolicy.rev_traverse(*this);
  }

  ConstIterator<TraversePolicy>& operator--(int a)
  {
   return m_traversePolicy.rev_traverse(*this);
  }

  bool operator==(const Iterator& it)
  {
   if (m_treePointer==it.m_treePointer)
    return true;
   return false;
  }

  bool operator!=(const Iterator& it)
  {
   if (m_treePointer==it.m_treePointer)
    return false;
   return true;
  }


 
 
 
 };

 

 class PreorderTraversal
 {
 public:
 
  ConstIterator<PreorderTraversal>& traverse(ConstIterator<PreorderTraversal> &it)
  {
   
   NTree<A> *curr = it.m_treePointer;
   NTree<A> *next = 0;
   //we now want to advance the current position (it.m_treePointer)
   //to the next element, considering Preorder-algorithims for visiting each node.
   
   std::list< NTree<A>*>::iterator it2 = curr->m_childNodes.begin();
   if(curr->m_childNodes.size()==0)
   {
    //you have hit a leaf node. deal accordingly
    //any children of parent, not visited?
    //if Yes, visit that child.
    //if No, go parent.
    //if current pointer used for search of next, becomes parent without any childs
    //left to visit, you have reached the end.
    NTree<A> *temp = curr;
    while(true)
    {
     std::list< NTree<A>*>::iterator it3= temp->m_parent->m_childNodes.begin();
     while(it3!=temp->m_parent->m_childNodes.end())
     {
      if(*it3==temp)
      {
       it3++;
       break;
      }
      it3++;
     }
     if(it3==temp->m_parent->m_childNodes.end())
     {
      temp = temp->m_parent;
      if(!temp->m_parent)
      {
       next=0;
       break;
      }
       
     }
     else
     {
      next = *it3;
      break;
     }
    }
   }
   else
   {
    //go into his first child.
    next=*it2;
   }
   it.m_treePointer=next;
   visited.push(next);
   return it;

  }

  ConstIterator<PreorderTraversal>& rev_traverse(ConstIterator<PreorderTraversal> &it)
  {
   //remove the last visited.
   visited.pop();
   if(!visited.empty())
    it.m_treePointer = visited.top();
   else
    it.m_treePointer = 0;
   return it;
   
   
  }
   std::stack<NTree<A> *> visited;
 };

 

 class ReversePreorderTraversal
 {
 public:
  ConstReversePreorderIterator& traverse(ConstReversePreorderIterator &it)
  {
   it.m_traversePolicy.iter--;
   it.m_treePointer=it.m_traversePolicy.iter.m_treePointer;
   return it;
  }

  ConstReversePreorderIterator& rev_traverse(ConstReversePreorderIterator &it)
  {
   it.m_travsePolicy.iter++;
   it.m_treePointer=it.m_traversePolicy.iter.m_treePointer;
   return it;
  }
  ConstPreorderIterator iter;
 };




 
 ConstPreorderIterator preorderBegin()const
 {
  ConstPreorderIterator it(const_cast<NTree<A> *> (this));
  it.m_traversePolicy.visited.push(const_cast<NTree<A> *> (this));
  return it;
 }

 ConstPreorderIterator preorderLast()const
 {
  //here you'll be sure to build up the list.
  ConstPreorderIterator it=preorderBegin();
  while(it!=preorderEnd())
   it++;
  it--;
  return it;
 }
 

 ConstPreorderIterator preorderEnd()const
 {
  ConstPreorderIterator it(0);
  return it;
 }

 PreorderIterator preorderBegin()
 {
  PreorderIterator it(this);
  it.m_traversePolicy.visited.push(this);
  return it;
 }

 PreorderIterator preorderLast()
 {
  //here you'll be sure to build up the list.
  PreorderIterator it=preorderBegin();
  while(it!=preorderEnd())
   it++;
  it--;
  return it;
 }
 

 PreorderIterator preorderEnd()
 {
  PreorderIterator it(0);
  return it;
 }

 ConstReversePreorderIterator revPreorderBegin()const
 {
  ConstReversePreorderIterator it;
  it.m_traversePolicy.iter=preorderLast();
  it.m_treePointer=it.m_traversePolicy.iter.m_treePointer;
  return it;
 }

 ConstReversePreorderIterator revPreorderLast()const
 {
  ConstReversePreorderIterator it;
  it.m_traversePolicy.iter=preorderLast();
  it.m_treePointer=it.m_traversePolicy.iter.m_treePointer;
  while(it!=revPreorderEnd())
   it++;
  it--;
  return it;
 }

 ConstReversePreorderIterator revPreorderEnd()const
 {
  ConstReversePreorderIterator it(0);
  return it;
 }

 ReversePreorderIterator revPreorderBegin()
 {
  ReversePreorderIterator it;
  it.m_traversePolicy.iter=preorderLast();
  it.m_treePointer=it.m_traversePolicy.iter.m_treePointer;
  return it;
 }

 ReversePreorderIterator revPreorderLast()
 {
  ReversePreorderIterator it;
  it.m_traversePolicy.iter=preorderLast();
  it.m_treePointer=it.m_traversePolicy.iter.m_treePointer;
  while(it!=revPreorderEnd())
   it++;
  it--;
  return it;
 }

 ReversePreorderIterator revPreorderEnd()
 {
  ReversePreorderIterator it(0);
  return it;
 }


 NTree()
 {
  m_parent=0;
 }

 NTree(const A &obj) : m_data(obj)
 {
  m_parent=0;
 }

 void testInsert(const A &obj)
 {
  NTree<A> * newNode = new NTree<A>;
  newNode->m_data=obj;
  newNode->m_parent = this;
  m_childNodes.push_back(newNode);
 }

 template<class TPol>
 void insert(const A &obj,Iterator<TPol> &it)
 {
  NTree<A> * newNode = new NTree<A>;
  newNode->m_data=obj;
  newNode->m_parent = it.m_treePointer;
  it.m_treePointer->m_childNodes.push_back(newNode);
 }

protected:
private:
 std::list< NTree<A>*> m_childNodes;
 A m_data;
 NTree<A>* m_parent;
};


}


#endif

and here it is in use


void foo()
{
//yo init
//testThisLol();

spc::NTree<char> lol('p');
initTree(lol);

spc::NTree<char>::ReversePreorderIterator it2=lol.revPreorderBegin();
while(it2!=lol.revPreorderEnd())
{
 std::cout<<*it2;
 it2++;
}std::cout<<std::endl;
}

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. Use of this website is subject to our Privacy Policy, Terms of Use, and Guidelines.