I have still to work on the network again, but I've now introduced a couple of new things:
- SVN is rearranged. Now boasts a "data" part, to make it easier for developers to get the sources and the data (separately).
- SVN also now features a "Binaries" folder, in which you'll find only the .exes and the (what I call) .linux executables.
- Zooming can now be done (as is standard with most 3d applications, and even some 2d applications like excel) via Ctrl-MouseWheelUp and Down.
- A new eventide patch is added (one that is a little less buggy).
- The application will now create 2 text files. One is for debug information (debug.txt) and the other one is for playing output and logging. (Output.txt)
If someone can figure out a better way of displaying card's names, I'll be SO glad to hear. I don't want to have the cadencer running the whole time, as well as the fact that it doesn't work on linux at all (and not on Windows at the moment).
I've thought about adding a sprite above the card (ala Quake3 when you pummel someone) but I fear that it will get smaller the further away you move the card, as well as get some anti-aliasing done onto it, so it won't be so legible.
Labels: GLScene, Programming
Network play to me is really hard to program. I'll explain my design for now, and if anyone would like to comment, please do. I need help on this... even if just the implementation.
If I ever want to make money out of this... I'll need to have a really spiffy server going, and basically create a "single user" server (run one game on it) and a multi user server, that can organise a whole tournament, with timeouts, player assignments, breaks, reports on the "meta game" etc. I can envision truly huge amounts of work and beautiful things there... And then sell this... dunno if I'll sell the application itself... that just sucks, but maybe ask a fee per player per tournament... something like $0.01 per player per tournament, payable everytime it gets to $100.
A nyway... Back to the network program... Server driven it will have to be... You'll not be able to do anything (including moving a card) before "asking" the server first.
So you click to draw a card... the client (DA) "asks" the server can you draw a card. The server will then answer "Yes: Card ='Wrath of God'" or "No" or "No more cards, you lose". (Though the server won't do anything once you've lost... for a tournament both players will need to "sign" the result slip.)
The same for moving the card... and here's why... what if your opponent moved the card too? The server will then decide (first come first serve) to move the card. Admittedly though you'll only be able to move the card while you're the owner, but still, you'll be asking first, and then receiving the movement back, and only then will your card move.
For this to work, you'll need a "local" card which is basically a new card created as you start to move your current card, and then as you lift your mouse, it requests the server to move the card... if the opponent hasn't moved it, the card then jumps (on both players' screens) to the new place. Hopefully connection speed won't be an issue.
So what's next... well, I guess to create a test application of where you move click and move and object, (locally) which will then ask permission to move another object. 3 Objects total... (actually 5) 1+1 local, 1 server, 1+1 opponent. So 1 is a representation of the server position, and the other one is your "request" object. Maybe I can create a small two player game doing this excersize.
Labels: Networking
Basically the only change is that I implemented Attaching. And it works (the first card selected is the "base" card) - Please test multiple attachments (ie. 1 Creature with Jitte and Moldervine cloak), as well as nested attachments (1 Creature with Jitte, with Faith's fetters on Jitte) for me, as I am not much of a tester.
The story of how I figured it out is interesting:
I figured out how to do it while I was - as it often happens - trying to explain to someone else what I want to do, and trying to understand why it didn't work.
Initially when I implemented attaching... The card would lie very nicely next to his mate... but then, when I tap it, the attached card would also tap... Which is how many players play... but it is wrong. So what I had was "inherited everything" what I wanted was "Inherited position", but not roll, or pitch etc.
Or the way I explained it... I want to have two mouse wheels, able to turn independantly, connected with a pipe... not a mouse wheel, with one long spoke with another mousewheel attached to it.
So all I did effectively... was to create an imaginary box above the "main" card, and then when you move the main card, you instead move the box above it, and both the children cards (the main card, and the attachee) are then also move. You can at the moment move the child card independantly - which is the way I wanted it initially.