First off, incredible graphics, especially for DBPro. Awesome gibs and cool sound effects gives it an atmosphere you don't always find in games in these forums, and makes it really fun. Just a few critcisms:
1. Make it so you can control the player with WASD. One of my pet peeves with any shooter game is having to have my hands right next to each other because you can't use WASD. But thats not hard at all to add, so whatever.
2. What's with the level editor at the beginning? Have a menu where you can select whether you want to play a level or edit one.
3. People get stuck in the floor, especially when they lose limbs. Speaking of which, how can you live without a head?
4. Make it so their is a spawn recovery time, or whatever you want to call it. And if there is one, make it longer, because I died 5 times after spawning next to someone with an rpg and getting killed instantly.
5. More about losing limbs. Its kind of a cool feature, but makes it so hard to move around you might as well be dead, you know.
6. Make the maps bigger, it would be so win.
7. Networking isn't all that hard, just use multisync. You could probably use the TCP version because the game probably won't need a whole lot of networking power. Use net host(playernumberhere) to start the server and connect("IPAddressmindthequotationmarks") to join it. To put variables into a packet (the messages that go over the network) just do this
net put byte 123
net put string 123
net put memblock 123
If you are a client, you can only send messages to the server. Clients call net send to send the packet to the server. Servers can call net send playernumber to send data to a specific client if they want. Just a mini example, lets say you wanted to chat in game.
Server:
$string
$string2
typing=0
down=0
global $InpStr
result=net host(1)
if result=0 then exit
do
result=net player joined()
if result>0
net put byte result
net send result
exit
endif
loop
do
while net get message()=1
$string=net get string()
print $string
endwhile
if enterkey()=1 and typing=0 and down=0
typing=1
down=1
endif
if enterkey()=0 and down=1
down=0
if typing=1 and down=0
$string2=MPInput(10,20,"Your message: ")
if enterkey()=1
net put string $string2
net send result
typing=0
down=1
endif
endif
loop
function MPInput(x,y,statements$)
char$ = entry$()
select asc(char$)
case 8 : `Backspace
InpStr$ = left$(InpStr$, len(InpStr$) - 1)
endcase
case 14 : `Carriage return
`In this case, we do nothing. It's just to prevent that a carriage return
`is added to InpStr$
endcase
case default
InpStr$ = InpStr$ + char$
endcase
endselect
clear entry buffer
text x,y,statements$+InpStr$
endfunction InpStr$
Client:
$string
$string2
typing=0
down=0
global $InpStr
$ip="Whatever the server's IP address is, it is the the IPv4 address if you type ipconfig/all in the command prompt of the server"
result=net connect($ip)
if result=0 then exit
do
if net get message()=1
playernumber=net get byte()
endif
loop
do
while net get message()=1
$string=net get string()
print $string
endwhile
if enterkey()=1 and typing=0 and down=0
typing=1
down=1
endif
if enterkey()=0 and down=1
down=0
if typing=1 and down=0
$string2=MPInput(10,20,"Your message: ")
if enterkey()=1
net put string $string2
net send
typing=0
down=1
endif
endif
loop
function MPInput(x,y,statements$)
char$ = entry$()
select asc(char$)
case 8 : `Backspace
InpStr$ = left$(InpStr$, len(InpStr$) - 1)
endcase
case 14 : `Carriage return
`In this case, we do nothing. It's just to prevent that a carriage return
`is added to InpStr$
endcase
case default
InpStr$ = InpStr$ + char$
endcase
endselect
clear entry buffer
text x,y,statements$+InpStr$
endfunction InpStr$
I'm not sure if that will actually compile, but it might. I haven't used multisync or DBPro for months, so I sort of forget it. This should at least provide some pseudocode for you. Just some notes about that code.
You should always tell the player that joins which player ID they are. The first one to join is one, and the second is two, and so on. I forget why now, but trust me, tell the clients which player ID they are.
When you send a message, you have to receive it in the same manner. For example, if you send 2 strings, and then a byte, you have to receive two strings and a byte to get it to work correctly, like this.
//Server
net put string "Lolz"
net put string "Lolzorz"
net put byte 12
net send client
//Client
while net get message()=1
$string1=net get string()
$string2=net get string()
yourbyte=net get byte()
endwhile
The obvious limitation of this is that if you have to know whats in the message before you really read it. Having one big packet that has every variable thats going to be passed around in it is a bad idea. Instead, have specialized packets like sendshoot(), or senddeath() with corresponding ID's which you can define as constants at the beginning of the program to make it more user friendly. Like so:
//Constants
#constant StringMessageID=1
#constant ByteMessageID=2
//Server
//Sending a string
net put byte StringMessageID
net put string $string
net send client
//Sending a byte
net put byte ByteMessageID
net put byte 123
net send client
//Client
//Getting a string
while net get message()=1
ID=net get byte()
if ID=1
$string=net get string()
if ID=2
yourbyte=net get byte()
endwhile
Of course, your messages don't have to be that simple, but you get the idea.
MPInput is a function I made/copied that is a lot like the standard DBPro input function except it doesn't stall the game when called. You put the x and y coordinates you want the text to show up at and any text you want to show up before what your typing, like "This is what your typing: " You make a string equal the result of the function to get just what your typing for stuff. You wouldn't want the message you send to people in chat always start with "This is what your typing: "
The whole business about the down, and typing variables is just me being lazy. It basically makes sure holding enter doesn't make you enter your message before you start typing. You can do it however you want.
Multisync comes with tutorials, so check it out.
8. You don't spawn with a weapon, which sucks. Even if you just get a pistol, its something.
I didn't play stick suicide, though, so maybe I just don't know what I'm talking about. If some of my criticisms aren't true and I just don't get something, then my bad. Good game, sorry about the long post XD
gpDirect3DDevice->DoSomethingAwesome(FPS_GAME)