Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - PNill

Pages: 1 [2] 3 4 5
11
It's alive! Awesome that you're making some progress on this! I'll have to check things out again soon.
Holy crap you're alive, you disappeared on Skype lol, as I'm sure you've seen I've made humongous amounts of progress lol.

12
Turok Evolution Modding / Re: PC Version Multiplayer - Online Modification
« on: September 30, 2017, 05:44:32 AM »
 :you're kidding, right:

Progress is starting to slow down but still making my way through it.

I've managed to fix crashes related to damaging the other player or the other player dying/the other player damaging me.

https://gyazo.com/5f49f51effe24e340895de706c4ec659
https://gyazo.com/ca7195ef6809065998b222acabc617c8

I'm able to make the other player fire/shoot as seen above via code with any weapon this was what a majority of the work today went into as well as finding a way to make the player uncrouch after crouching, and I can successfully make the player respawn.

So we're getting close to having everything we need to start synchronizing the data over the network and doing some testing with people online playing vs just controlling the player via local code.

There are still minor issues I want to fix before getting to that point such as:

  • I've noticed slowdown when switching to the rocket launcher while the second player was holding it, like actual frame lag/game freeze for a half a second or so... need to determine if this is related to the second player in any way... it's possible there's some game lag in relation to secondary rendering occurring.
  • Player death messages and other hud elements such as health and ammo for the other player still appear on the first screen, I have an idea of where to look to resolve this but have not done it yet.
  • Player hud elements such as health, and pickups are still appearing currently but will be fixed.
  • Powerups (Damage increase, power boots, speed increase, health regen, etc) is still not something I've been able to synchronize or determine how they work, there will be de-sync issues with this.
  • When the 1st player dies they control every player in the game. I have an idea on why this is happening and just haven't really decided on how to go about fixing it yet.
    Example: https://gyazo.com/839ad45aa3a64bd9a922144bcc233f72

    If I can think of anything else I need to add to this list before I think this is ready for any kind of testing I'll be sure to do so, these things are not major issues so hopefully I'm able to fix them within a few hours tomorrow and start working on networking side of things.

    EDIT:
    Discovered a new bug...
  • When there's more than 2 additional players spawned into the game when a player is re-spawned their 'first person' weapon spawns/is visible for some reason.


Now working towards integrating networking and coming back to the rest of the bugs over time.

13
Turok Evolution Modding / Re: PC Version Multiplayer - Online Modification
« on: September 28, 2017, 05:54:42 AM »
More progress...
I've reverse engineered a majority of the player classes/structures in order to find ways to use the animations, force the player to fire, move (actually walk not slide like seen in previous videos).

And I'm happy to say it's all working out quite nicely...

Enemy I first gave a flame thrower, then forced their weapon switch entire from code.


I've also actually generated headers for the C side of things so I can no control players in a pretty simple manner,

Here's an example of giving the enemy a flame thrower and making him walk forward/then stopping him.

Code: [Select]

if (count == 3)
{
DMPlayer* pPlayer2 = TurokEngine->pT4Game->pEngineObjects->pCameraArray[1]->pActor->pDMPlayer;
pPlayer2->pWeaponWheel->FlameThrowerAmmo = 500;
pPlayer2->pWeaponWheel->bFlameThrower1 = 1;
pPlayer2->pWeaponWheel->bFlameThrower2 = 1;
pPlayer2->pWeaponWheel->bFlameThrow3 = 1;

//pPlayer1->pos.y = 30;

pPlayer2->WeaponSwitch = -1;
pPlayer2->TimeTillSwitch = 0.1f;
}

if (count == 4)
{
DMPlayer* pPlayer2 = TurokEngine->pT4Game->pEngineObjects->pCameraArray[1]->pActor->pDMPlayer;
pPlayer2->WalkForward = 1.0f;
}

if (count == 5)
{
DMPlayer* pPlayer2 = TurokEngine->pT4Game->pEngineObjects->pCameraArray[1]->pActor->pDMPlayer;
pPlayer2->WalkForward = 0.0f;
}

I should start syncing things over network in no time.

Things left to do outside of just syncing to the network/over the network.

  • There's still ammo and health huds being rendered by the enemy players on the screen, this should be resolved. - Weapon pickup notifications or such are also displayed it seems.
  • I have no way to detect, sync, or control crouching or jumping (yet).
  • There are various crashes in relation to damaging the enemy, opening the pause menu while in-game, and picking up power-ups these all need to be resolved before this is remotely playable.
[**] With this one I don't know if the frag count will actually update after my fixes so I may have to write something custom to handle the frag counts.

  • I have currently not found any information related to power-ups such as (speed increase, jump boots, or etc) meaning these do not properly sync over multiplayer (mostly just visual stuff would be missing as the players would still be able to perform the actions.)
  • I currently have no idea how the joining of games will work and have no way to automatically force the game into a world/level in order to 'start' the game without going through the menus, that being said I know it should be entirely possible to do with some tweaking.
  • Currently when I spawn players I do not use the traditional spawn points, I plan to look into this though.
  • Fly modes absolutely will not work...
  • No co-op (yet).
  • AI does not sync on the tree house map.
  • There may be issues with those turret guns on the d-day style map, as well as the nukes that get fired due to the fact I'm not currently planning on syncing their projectiles.


All of the above being said I'm hoping to take care of a small portion of this by this weekend, and I will be going with Google Protobuf in order to serialize data for sending, and I'll probably write a hook inside one of the main game loops in order to handle the network traffic.


Edit:

Some short gifs demonstrating spawning, weapon switching and player walking...
https://gyazo.com/28b68ff2e24228d4cb322f053d1da0d5
https://gyazo.com/a0d188e044c72031d9ee2f9a0158c42d
https://gyazo.com/00035ba9fc739111a62b563a5e3599fb

14
Turok Evolution Modding / Re: PC Version Multiplayer - Online Modification
« on: September 27, 2017, 02:53:46 AM »
Progress for tonight:

I was able to confirm I'm able to spawn more than 3 players ( meaning we can play more than 4 man games ).
I was able to disable control to other players and only control my player specifically, meaning we're right on track.


15
Turok Evolution Modding / Re: PC Version Multiplayer - Online Modification
« on: September 26, 2017, 02:40:46 AM »
Some additional progress to report, I've managed to get the 1st player to hold the camera and was successful and disabling some HUD elements for the second player.

The method I had thought would work to disable all HUD elements seems to not have worked. Sadly.

I'll have to find another way to overcome this obstacle.
In the mean time here's a gif in action
https://gyazo.com/e4005ec75bfd52b6c82c2ea1e9990601

To be clear the only hud element really left is the 100 health, and the text that shows up when pickups are done I'll probably leave it this way for now and come back to it and start dealing with the controls.

Things like going in the water or taking damage will have no effect on player 1's screen.

Example:
https://gyazo.com/f5c7efb9aec68a1e580a99cc70228745

Example 2:
Player 1 in the water
https://gyazo.com/a0d8d504c8bf686122da94bd95697125

16
Turok Evolution Modding / Re: PC Version Multiplayer - Online Modification
« on: September 25, 2017, 03:41:36 AM »
Figure I should probably update this thread since it's been some time since I've made any progress here.


So the last I was working on this I hit a wall attempting to spawn additional players, I managed to solve that and ran into an issue where when spawning the additional player there was hud elements and camera mash between the two players.



If you notice there's two of the little walk-way as well as other things...

I also ended up having some fun with talset throwing a tantrum...
https://gyazo.com/cb2e68619eeab773f8f90b1c8d525a8f


Here's another example of the camera issues:


And I'm happy to say I've managed to find a way to solve this, while it's not solved yet.... I am able to make only the spawned player's camera appear.



Within the same sub routine I've also been able to identify effects (Water overlay, pickups, damage - red screen when taking damage) and how to disable them for specific players meaning I've actually fully accomplished this feat and can now start to synchronize the data between dynamically spawned players.

After a long break I've made some serious progress and I'm pretty happy with myself as of right now.

The next steps I'm going to have to take...

* I need to disable the input from player 1 going into player 2, I haven't determined what's causing that yet but I should be able to figure it out.
* Sounds still play for the spawned player picking things up but this is probably a wont-fix at this time.
* There is no sync or multiplayer functionality currently.
* I cannot force the game into a level yet on startup which I'd like to do so that we can have an external lobby system similar to znandroum or zdaemon.
* I have no way to *destroy* players upon a person leaving currently, we could simply kill them and never re-spawn them but this presents other problems which hopefully I'll be able to overcome.

In the mean time things are progressing quite nicely with this roadblock finally out of the way.

17
Can't speak for everyone but I certainly don't mind the tech talk. Maybe I will learn something :p So action games normally send data packets differently then other games? Interesting... man I am a noob at this I thought it was pretty much all the same thing.

Pretty much every game handles networking differently depending on the genre and needs of the game, I'd go into more detail but it would end up being an entire book.

The basics is that action games are typically reaction based, if you and your enemy are shooting each other the server needs to send proper reactions fast enough for players not to notice any latency (which there is a bunch, no matter what). The server must send data much more often in order to give an FPS shooter game enjoyable game play.

Keeping in mind some MMOs also offer PvP play which latency will heavily impact as well and the fact that the mobs are generally server sided in the typical implementation.

18
Thanks for the input,
I probably don't have much more experience then you do with multiplayer networking and I feel as if protobuf would just make things easier in terms of transferring data I use it in another of my projects and from what I've read on gamedev.net it's actually kind of preferred as its fast and you can store data how ever you'd like.

The other project I'm working on (halo2) does use bitpacking and it's own custom read/write serialization, I've just never gotten too deeply into processing data like that in C/C++.

I've got stinkee on Skype feel free to add me, tddeadlydata
...

Yes, protocol buffers are fast, but I don't feel like they're quite fast enough for an action based game like a FPS. I'm not sure if the networking protocol is already defined for Turok or if you're just rolling your own in the mod, but if you're rolling your own you probably want to send player inputs at no less than 40 times a second to the server and state updates at least 30 times a second. Protocol buffers work pretty well toward serialization of data for use in things such as a small scale rpg MMO where state updates are less frequent but latency doesn't matter so much. Even at 30 state updates a second you're probably going to ultimately have at least 100ms latency for a client to see other player actions just from state interpolation(extrapolation is different but also not a good idea for an fps game) buffering before you even add in player ping.

I know of some great articles for network data serialization, you don't even have to create separate read/write serialization functions just a single "Serialize" function that reads or writes data from/to a bitpacker depending on an IsReading flag, that eliminates hard to track unaligned serialization function bugs, and it doesn't take much time to get running. I can provide you some easy to use classes to use if you like, that way you don't have to spend time setting up protocol buffers or learning a new library.

With this method your data layouts and definition would be represented via a regular ol' struct in your code, no crazy file generation or huge library to deal with.

Google protobuf isn't very hard to implement but I do understand what you're saying,
From the research I've done there's two goals whether it be FPS or MMO.

1) Deliver the data as fast as possible.
2) Deliver as small of chunks of data as possible.

That being said the idea is to calculate only the values which may have changed since the last send before sending the next packet in order to make sure the size of the packet is as small as possible which is why I agree with you on the bit packing, I'm not sure how efficient protobuf is in terms of 'compression' of the data, I just figured it'd be a decent choice considering I'm already familiar with it.

And I'd have to argue that even MMOs tend to send a shit ton of data, sometimes even more then action fps games do.


Also,
Turok itself does not have any networking capabilities this is being done completely from scratch based on data gathered about the players the obvious solution would be finding places in code where events are triggered (animation update, movement update, view angle changes) then build an event handler around those storing the data and sending it periodically based on available data if it's different from the last send.

19
Turok Evolution Modding / Re: Turok ATR viewer/exporter
« on: May 07, 2016, 06:33:31 PM »
If anyone IS interested in contributing, I've started a repository for a QT based editor using the T4Loader library here: https://github.com/djdduty/T4Editor I've just started it and haven't had much time to work on it, but hopefully it blossoms into something great!
Since getting a hold of my old friend he had also reminded me that he had created a Map editor using blender scripts if you're familiar with python you can find em here,
http://www.mediafire.com/download/u3he8m6vh97ci0t/BlenderTurok.rar

Not sure if they'll offer anything you two don't already know but I know he was able to load MTF properly and such.

20
...
One of my next moves will be integrating Google Protocol buffers in order to handle the data exchanges...
With that I should be able to create deltas of the information per player and handle everything in much smaller packets reducing latency overall and increasing the ability to play even if it's in a 'ghetto' state of syncing at the moment

...

Hey, sorry to just pop in unannounced! I have been amassing a lot of curiosity and knowledge toward multiplayer game networking, even going so far as to reverse engineering some client/server games to create my own servers for education. Unfortunately I DON'T have a lot of knowledge reverse-engineering binary files or generally trying to figure out what the game is doing. However, if I could get in contact with you to explain things to me about how the dll works and modifies the game's behavior, I could probably help / contribute to this project in some way, if you're open to that.

Personally I don't see how protocol buffers would give you much benefit, especially not for a first person action game like turok. Protocol buffers might be a little too much luggage for something like this, I feel like a well built udp protocol with standardized read/write serialization through bitpacking seems like it would serve you better, but I don't have much experience with protobuf and you're probably more experienced than I am in this area.

Thanks for the input,
I probably don't have much more experience then you do with multiplayer networking and I feel as if protobuf would just make things easier in terms of transferring data I use it in another of my projects and from what I've read on gamedev.net it's actually kind of preferred as its fast and you can store data how ever you'd like.

The other project I'm working on (halo2) does use bitpacking and it's own custom read/write serialization, I've just never gotten too deeply into processing data like that in C/C++.

I've got stinkee on Skype feel free to add me, tddeadlydata

-----------------

In other news regarding this project specifically I've got some good news about the player spawning I managed to get ahold of my old friend who was working on this project with me and while he was missing the source to the side of the project which would've handled most of the hooks and stuff since he had wrote it in MASM back then.... (I have the C side but it's not really relevant with that version as it just calls the MASM dll).

He still had the DLL is what I'm getting at so, this is awesome because I can reverse engineer this and figure out how the players were spawned in our previous attempt and add it into my new project so I'll actually start making major progress on this again I feel.

Pages: 1 [2] 3 4 5
SimplePortal 2.3.6 © 2008-2014, SimplePortal