Outlaws Multiplayer Remake

Community Forums/Showcase/Outlaws Multiplayer Remake

Hezkore(Posted 2013) [#1]
As an experiment, I've been working for about a week or so on a simple remake of the old game "Outlaws" by LucasArts.

It's only the Multiplayer part I've been working on, so no singleplayer or historical missions, which the original game had.

The graphics and sounds are from the original game, the rest is written/done by me.

These videos look pretty bad in anything less than 1080 for some reason, so I strongly recommend 1080p when viewing these if you don't want to just see blur.
Here's a video of a quick Deathmatch session:


And here I am moving some stuff around randomly in the level:


I'll probably throw this out into to the public real soon.


Foppy(Posted 2013) [#2]
That looks good, I liked the original game, shooting windows, bottles etc. like in a western movie.


Mikka(Posted 2013) [#3]
NICE work! :D


Anatoly(Posted 2013) [#4]
This is awesome!


Imperium(Posted 2013) [#5]
All this in a week? Nice.

May I ask what userlibs you are using if any? Did you build the maps from primitives in Blitz3d or are you using Blitzmax? Your project mirrors my own efforts in re-making and an oldschool FPS.

I sent you an email. :)


Kryzon(Posted 2013) [#6]
Looks pretty smooth, great work.


Grisu(Posted 2013) [#7]
Well done!


Hezkore(Posted 2013) [#8]
Thanks everyone!

The game/experiment is written in BlitzMax, using MiniB3D and 3D World Studio for the levels.
I can do simple adjustments to the level from inside the game if needed, basically move stuff around, resize and change textures.
The level is also downloaded from the server when you connect.

I've also used my own zKore Engine/Framework which handles things like window resize, FBOs, fixed rate logic and everything network related.
zKore also let's me do so that the 3D part of the game is running at 640x480 60fps while the interface is running at 800x600 30fps and both adjust width depending on your aspect ratio.
I'm of course using gl_nearest and also 4x anisotropic filtering to make it look more old-school.


The idea right now is to take what I've learnt here and make some sort of engine for these types of games.
It'll have its own editor for levels, sprites and also "fake" voxels based on the voxel file format by Ken Silverman (used in Shadow Warrior and Blood)
So we'll see how that turns out hehe...

Anyways, thanks once again everyone!


RemiD(Posted 2013) [#9]
This looks good. Well done !

I am curious, how have you created the different images for the different poses of the characters when they are animating ?
Is it drawn by hand ?


Hezkore(Posted 2013) [#10]
This looks good. Well done !

I am curious, how have you created the different images for the different poses of the characters when they are animating ?
Is it drawn by hand ?


Thank you!
All art and sound are from the original game "Outlaws", but I'm fairly sure they're hand drawn. :)


Steve Elliott(Posted 2013) [#11]
Like the look of this - old school, doom-like. :)


Ravl(Posted 2013) [#12]
Awesome work!

You should post some tutorials on how to achieve this :D


RemiD(Posted 2013) [#13]
Hezkore>>Can you please give more details about how your program manages the multiplayer ?
Does it uses several client programs and 1 server program ?
Is there a dedicated pc connected to the internet with the server program always running or do you create a server on a pc which also will run a client program ?
Do you update the logic and the collisions on the client program or on the server program ?

I am curious.

Thanks,


Hezkore(Posted 2013) [#14]
@Ravl
Thanks a lot!
I'm not sure what you want me to explain in a tutorial though, it's just MiniB3D and some network code. :)
Plus, I'm really really bad at explaining things... which will be proven right now!

@RemiD
The game acts as the client of course, when you start the game you instantly land at the server browser which downloads a list of all the joinable servers.

The game also comes with a separate application which acts as the server, so each person can start their own server with their own game rules and maps and that will appear in the server list.
The map is automatically downloaded to the client from the server if the client map doesn't match the server's map. (checked via MD5)

The movements are mostly client side, but the server keeps track of all the players too, so if someone would start to teleport around (hacking), the server would know so and instantly kick the player.
But collisions are all done by the clients, basically the client just says which buttons are pressed and sends that out to the server which relays it back to everyone else, and every second or so the positions are calculated for the players (difference since last calculation) and sent out, to keep everything in sync.

Player angle is also sent from the client basically the same way as positions... every now and then the angle is sent, but not the absolute angle, only how much you have turned since the last packet.

Shooting works by the client sending "I AM SHOOTING WITH WEAPON NR#!" which the server relays to everyone and then the client shoots locally, the server then processes that shot and sees if someone was hit, lowers the hit players health and then sends out his health to everyone, if the health is 0, the player is of course dead heh...
Players with health <=0 are drawn as dead players. :P


It's pretty simple and straight forward...
I've tried to really keep the packet sizes to a minimum though, like sending value changes instead of absolute values, that means I'm mostly sending really small bytes, when for example Angle is actually a Float locally.
Same with positions, only send how much the player has traveled since the last packet.
Oh and all the data is sent as ONE bank, not as individual small byte packets for each thing I send out.


I'm not sure what else you might want to know heh...
Sorry if I missed the point completely, heh.


RemiD(Posted 2013) [#15]
Interesting. Thanks for the explanations.

I wonder why you don't send the input from the client programs to the server program, and then update the logic and the collisions on the server program, and then send the results (yaw, position, state, lifepointscount, bulletscount) to the client programs.
But if it works as it is without errors, that's ok i guess.

Do you use TCP or UDP to transmit the datas ?

Thanks,


Hezkore(Posted 2013) [#16]
@RemiD
It's so the server doesn't have to actually load the map at all, it starts fast and can handle many... MANY... players at the same time.
Also, it's so that you can play with 200 ping and still have a fun time without too much teleporting and jerkiness. (remember ping is just delay)

I've used TCP for this, it's all handled by my zKore Engine.


TaskMaster(Posted 2013) [#17]
You can't have the client waiting for the server to respond before moving the player in their client. That would induce so much it lag it would be ridiculous and unplayable. You move the player, tell the server and if the server decides the move was illegal, then you move the player back. Of course, the client can handle the stuff like not walking through walls and whatnot. The server is just confirming that the client isn't cheating.


Hezkore(Posted 2013) [#18]
Thank you TaskMaster for explaining better than me, heh.


RemiD(Posted 2013) [#19]

You move the player, tell the server and if the server decides the move was illegal, then you move the player back. Of course, the client can handle the stuff like not walking through walls and whatnot


Ok but how do you know if the move was illegal ? Do you check the collisions a second time on the server program ? or is it only a check of the movement allowed (length of the vector) ?


TaskMaster(Posted 2013) [#20]
You can do asmuch as you feel you need, basic speed, flying, collisions, etc. Depends on how far you want to take it. If you are worried about players cheating and hacking the client to walk through walls, then you have to check for collisions with walls. Personally I would check for that. You can load the map, but not actually display graphics, and that would not be too intensive on the server app. You could also do a scaled down server version, that only contained enough map data to check for collisions.


RemiD(Posted 2013) [#21]
Ok


Imperium(Posted 2013) [#22]
Interesting that he used TCP instead of UDP. Any updates on this? :)
It be a real shame to tease us with such a neat project and not follow though, Outlaws was a very underrated game for its time. I remember having it on a demo cd and was blown away.

Pretty much in those days my gaming consisted of Doom, Dark Forces, and Outlaws. The layouts of most of the maps are burned into my retinas from playing them so much.


Who was John Galt?(Posted 2013) [#23]
This looks great- nothing like going mano-a-mano for a spot of of Queensbury rules.

Please make sure you do a Mac version, else I will cry.


EQX(Posted 2013) [#24]
Looks great !!
Congratulations


Hezkore(Posted 2013) [#25]
Sorry for missing all the responses I got, I haven't had Internet for a while.

The game was just an experiment, sadly I haven't done anything special to it.
But thank you all for the kind replies!


Hezkore(Posted 2013) [#26]
If anyone does 3D models, I'd be interested in making a proper 3D game.
Perhaps a Online shooter?
Or some sort of survival game?


Imperium(Posted 2014) [#27]
I make 3d models almost every day. What did you have in mind? I'll message you on skype. :D


Rick Nasher(Posted 2014) [#28]
Looks pretty exiting(even with the retro gfx).