illwieckz wrote:Today the best way to make a game on Dæmon is to make a fork of Unvanquished game (better not fork the engine) to make a mod, basically, cloning this repository: https://github.com/Unvanquished/Unvanquished
Then you can experiment doing changes, even host your mod and get listed in Unvanquished server browser at first for easy testing with Unvanquished played.
I thought about doing it that way for the early days of testing. But, I don't think it would work for the type of game that I want to create.
Unvanquished is very generous to the players in treating teams very loosely. What I mean by that is if you get bored or frustrated with one team; there is a built in menu system in at least a couple locations that allow you to back out and switch teams. In my game I want all of that completely deleted. Can I make a mod delete or block this functionality? Or is that something that has to be done through editing the game engine itself?
I'll explain what I mean and why it would totally destroy what I'm going for here. I want the engine to function in such a way for my game as to marry the player to their teams throughout the entire match and totally block (as much as technologically possible) bad actors from ruining the game design / game balance / fun.
The very nature of the core Zombie component is that it basically hijacks that entire team concept and guides the player the entire match. It has to for the game play idea to function correctly.
So, when a Zombie kills a Human the game is to simulate the idea of an Infectious Zombie Outbreak in that the Human player that died now becomes a Zombie for the rest of the match. It's the core idea that I loved about zps that I want to re-implement here. It achieved this on a technical level by shifting a Human player from the Human Team to the Zombie Team upon the death of the Human Player. This grows the Zombie Hoard. It is required for how the game balance works. It's a game of shifting game balance. It starts out in favor of the Humans. The one or two Zombies working very hard to try to kill even one Human. It is a real struggle. As more Humans are forced to the Zombie side, the game eventually reaches an equilibrium. This equilibrium is eventually shattered as even more Humans are turned to the Zombie side and the game ends up at the end in the favor of the Zombies. At this point the Humans either need to finish their object to win, or make a heroic last stand in the face of impending defeat as one or two Humans are left against like twenty or so Zombies all hunting them down.
The problem is, as is often the case with online games, bad actors being unsportsmanlike. In a large room, you almost always have that one bad apple who throws a hissy fit because they don't want to play on the Zombie Team upon death as a Human. Yet, the entire game balance depends on this. If the Zombie Team can't collect more players by actually turning Humans; the game balance never makes the shift to the Zombie side and the Zombie players are screwed. It's unfair to them.
The bad actor is likely to try anything the game allows to circumvent this. Obviously, I can't stop the person throwing the hissy fit from just shutting the game off and disconnecting. But, aside from that, I want to try to properly lock them in the Zombie Team as much as possible.
In Unvanquished they can just hit the ESC Key, select join Human, and poof; they're back on the Human Team. This option works both ways as they also select join Alien. This is also unfair as if the Human Players just join Zombie Team right at the start of the game it would create too many Zombie Players and destroy the game balance of the early game for the Human Team.
Those two menu options would need to go. There is nothing wrong with them in Unvanquished. But, they would destroy my game.
Same thing is true for respawning. Once you're on the Zombie Team, you're supposed to be stuck on a Zombie respawn loop. Die as a Zombie, respawn as a Zombie. You never play Human again for the rest of the match. Everything resets at the start of each match.
Well, again, here is another problem. Unvanquished has a pop up menu for respawning (the same one that players see when they join a game and start a game) that allows them full access to join whatever team they want; including backing out of the team they're on and switching teams upon every respawn. Again, this is fine for Unvanquished; but would completely destroy my game. That functionality in the menu would need to be completely deleted for my game. Again, I don't know if this can be done in a mod without changing the game engine itself.
Honestly, if it needs to be changed in the game engine, I will probably just try to find the functionality in the ESC Menu Code and the in respawn menu and just plain delete those entries out entirely.
Are there also console commands that can switch teams? If so, they would also need to either be locked by the mod or deleted out of the engine for my game.
And, here is another point. Joining an in progress game in Unvanquished allows players to select their team with the same menu that appears for first joins and for respawning. This is also something I would have to destroy for my game.
Bad actors will try anything to circumvent the rules. I have no idea how to implement anything like IP Tracking to force a player who leaves the game as Zombie to be forced back onto the Zombie Team if they rejoin the game. Plus, anything like that can easily be circumvented with a proxy sever / VPN; anything that can change the IP Address of the Player.
Because of this, players who don't want to play on the Zombie Team can just exit the server, rejoin the server, and pick Human Team. Again, this is bad and destroys the entire point and game balance.
So, the only effective way that I know of for how to block this exiting of the server and rejoining the server to get the team you want is to block or delete this menu. Also, to really secure it the best way on top of blocking or deleting that menu, is to force all joins to a match in progress to be forced into spectator mode. They will have to wait until the next match to actually be able to play. It's just the simplest way to fix this problem.
If I just build the mod (assuming a mod can't do any of this; again I could be wrong) even the mod testing will be very poor because it will depend entirely on the good will of the players to not be bad actors. But, this type of game can't depend on that for public faced testing. (That would only work for testing with friends and family. People I can tell not to rejoin or switch teams because they will respect that it breaks the game concept and game balance.) Public facing testing would be a poo show because no one is going to respect that this is how the game is supposed to be played and will just swap teams on the fly.
More than anything, this mod / game play design is largely about controlling the flow of teams and game play modes. It has very little (basically nothing) to do with in-game, game-play changes itself. The only thing it really changes on the in-game game play side is creating a Zombie Unit that Zombie Team will play as. Then deleting everything Alien related (structures and units) and replacing them with that one Zombie Unit. The Human Team remains completely untouched. (At least in early testing. Ideally, I would like to re-skin the Human Team to look Horror themed instead of Sci-Fi themed. Just as I'd like to re-skin some maps [mostly the sky boxes into being city scapes instead of stars to make them look like horror instead of Sci-Fi])
So, the flow of the game play would look something like this in an early test build.
Step 1: Sever Starts and waits for minimum amount of players to join. (Would need to pick a small number like 5 because the game is new. Ideally a larger number if the game became popular. Like 20 or 30 or something How many players can the Daemon Engine handle? The more the better for this type of game; assuming lag doesn't get out of control. The more Humans eventually means a larger Zombie Hoard by the end of the match. Also, stop one is where I would eventually like to create lobby options for letting players try to enter a Team Preference. This is explained more in Step 2's details. However, at first it would be easier to code waiting for minimum players and then just randomly assigning everyone teams. Ideally, even if there are enough players or more then enough players to start a match; the sever would wait like a minute to let people enter their Team Preferences before assigned players in the more dynamic way that Step 2's details would allow.)
Step 2: When minimum amount of players have joined, randomly assign one player to Zombie Team and everyone else to Human Team. (Again, ideally if the game becomes more popular and gets larger server populations I could change this to a shifting value. So, like, 1 Zombie for 5 players; 2 Zombies for 10 players, etc. Also, the random assigning is something that will need to be there at the start because it would be more simple to code, I think. What I would like, long term, is to allow people a chance to try to pick their team; then randomly select to fill out the rest. That's what zps does. So, like, you can say that you'd like to play Zombie or Human. Then the game will fill those slots if it can. Then, if not enough slots of filled, the game would randomly assign the rest. So, lets say it's a big group of players and we need 3 Zombies. Then let's say 2 people volunteer to play Zombie right away. Those two players would get Zombie. Yet, the game will still need 1 more Zombie. The game would then check the pool of people who did not pick a Team Preference and randomly pick one of them to play as the third Zombie. If everyone else chose to play Human and there is no people who didn't pick a preference, the game would then need to look at the pool of people who chance that they wanted to play as Human and randomly force one of them to play as Zombie to fill out the 3 Zombie quota. Same idea applies in the reverse if there are too many people wanting to play as Zombie. If the game only needs 3 Zombies, and 5 people want to play as Zombies; the game will randomly choose 3 Zombies from the 5 people wanting to play as Zombie and boot the rest, in this case the other 2 players wanting to play as Zombies, over to playing as Humans. This is again why I can't have people changing teams as they want once the match starts. The game balance needs to be maintained for the game concept to play out correctly and players need to live with what the game assigned them to for the rest of the match, even if it's not what they wanted. It sounds harsh, but that's how balance is achieved for this style of game. If everyone just got to play Zombie or Human at the numbers they wanted to, it would throw everything off and the game concept and balance would just collapse. Players need to know this and respect it as part of the concept this game is going for.)
Step 3: Once all players on the server are assigned their teams, start the match. At the same time when the match is started, lock the server into forcing all new joins into spectator mode only for the duration of the match. (This prevents leaves and rejoin to try to change teams. The new joins can watch the match and will be allowed to play when the server restarts this entire process for the next match. That is when they will be assigned a team; in step 2 of starting the next match.)
Step 4: Whenever a Human Team player dies, migrate that player to the Zombie Team.
Step 5: Match continues on until end of match event is triggered.
For Time Mode, the two end of match events are time running out or Human Team being populated by 0 Players.
[If Time Counter Value = 0, then display message to everyone that 'Human Team Wins' and restart the server actions back to Step 1.]
[If Human Team Population = 0, then display message to everyone that 'Zombie Team Wins' and restart the server actions back to Step 1.]
For Communal Zombie Lives Mode, the two end of match events are Zombie Team's Communal Zombie Lives running out or Human Team being populated by 0 Players.
[If Communal Zombie Lives Value = 0, then display message to everyone that 'Human Team Wins' and restart the server actions back to Step 1.]
[If Human Team Population = 0, then display message to everyone that 'Zombie Team Wins' and restart the server actions back to Step 1.]
For Script Mode, the two end of match events are script being activated or Human Team being populated by 0 Players.
[If Human Team triggers script, then display message to everyone that 'Human Team Wins' and restart the server actions back to Step 1.]
[If Human Team Population = 0, then display message to everyone that 'Zombie Team Wins' and restart the server actions back to Step 1.]
I don't know if Script Mode is possible now that you say there really isn't a scripting language. So, maybe that mode will just have to be scrapped entirely.
Step 6: When end of match event is triggered, display the winning team to all players for a short amount of time (long enough for them to read it) and then restart the process back to Step 1.
This is the 6 Step Server Loop that the game will function on. As you can see, basically the entire mod is about establishing and enforcing this 6 Step Server Loop to create the Zombie Infection style of Game Play for this game.
The only other thing about the Mod is to wipe out the Alien Team and instead replace them with the one type of Playable Zombie Unit for the Zombie Team. (I don't know if this is handled better by going into each map and individually deleting the spawns for Alien Structures and creating invisible, not solid, industructable Zombie Unit Spawn Points. That seems the easiest thing to do. So, the only two in-game 'things' that I would need to create are the Zombie Unit [It will move like a Human but has an 'arm swipe melee scratch attack' like some Aliens. I will likely look at the basic human and mod the model to look Zombie-Like and then study how the melee attack and hit box works for the Aliens that have them and re-implement that for the human model shape for my Zombie's attack.] and then an invisible, not solid, indestructible Zombie Spawn Point that I can then place several around the map.
This is why I don't think that (or don't know if) this can really be achieved (or even tested properly) with just a mod and not editing some parts of the engine itself. Because almost the entire mod is really about establishing and enforcing the 6 Step Server Loop and then plugging up 'holes' in the game engine's functionality and menu system that would allow bad actor players to disrupt the flow of the 6 Step Sever Loop by changing teams whenever they want.
It's really a mod about creating a very specific type of Team Death Match multiplayer that has a shifting game play balance where all the players are locking into specific teams and when the Human Team players die they are forced to shift to and stay locked into the Zombie Team. This creates the Zombie Infection shifting balance mechanic that makes this a Zombie Infection Game. If that shifting game balance is muddled by team switches then the entire point is lost and the game just devolves into regular Team Death Match but one team is running around as a melee Zombie. It looses its core appeal and becomes kind of boring.
The entire fun of the game from the Human Team side is to see how good you are at FPS games to see how long you can last against the Zombie Hoard. Long enough to run the timer down or kill a set amount of Zombies? If you're not that good, you try to survive as long and you can and your 'punishment' is to become a Zombie when you loose.
The entire fun of the game from the Zombie Team side is to grow your numbers in your Zombie Hoard by killing and turning Human Team players to your Zombie Team and then eventually overwhelming the Human Team by hunting them down and killing them all before the time runs out or they kill a set amount of Zombies.
It actually plays really well in zps. It's fun to have a dynamically shifting balance to Team Death Match. It creates this Zombie Survival scenario, a form of Survival Horror.
I think I can actually improve on some areas of zps here in my game by cutting some of the fat of zps. Zps plays too slow. I don't want this to be a 'twitch shooter,' so it should player slower than Unvanquished does. But, zps takes slowness to a whole new level; in a bad way. Because in zps they implement two things from the source engine that ruin the game play flow. I don't think the Daemon Engine has these two things, but if it does I don't want to implement them. This will make my game play much faster paced than zps and I think that will create a balanced and more fun game.
Here are the two things zps does wrong that I want to improve on here in my game.
1: Zps implements the source engine's physics engine with indestructible, player movable, furniture items. This seems more in line with a Zombie Movie. So, I get what they are going for. But, in actual practice, it's a horrible nightmare. Players will shove a couch down a stair case and lodge it into place. Or, they will shove a table into a tunnel and lodge it into place. This creates a barricade. Which, again, in Zombie Survival seems like a realistic idea. The problem is that it completely destroys game play flow. The barricades are way too difficult for Zombies to get around / over / under while Humans stand back and casually shoot the Zombies easily. It takes no great FPS skill to lodge a couch into a stair case or a table into a tunnel. This makes the game play slow and boring for the Zombies who can never get through the barricade jungle gym fast enough to actually hit the Humans. This also makes the game play slow and boring for the Humans who get free Zombie kills with no effort. Making it so that furniture objects can't be pushed around by players solves this problem.
2: Zps allows for destructible objects to be placed by map makers and Human players. Again, I see where this seems more in line with a Zombie Movie. I get what they are going for. But, the problem is that these wood planks that the Human players or map makers can put up (as well as closable and lockable destructible doors) take way too long to break. I've seen locked metal doors and boarded up windows take (what feels like) several minutes to bust through. (I literally do think it takes several minutes. I guess I never counted it specifically.) This slows the game play down to almost a halt. It takes no great FPS skill to lock doors, stand on a roof, and shoot at Zombies that can’t get up to you from above. It’s boring for the Zombies who can’t reach the Humans. It’s boring for the Humans who are just getting free kills. Not allowing for these breakable barricades to be made by map makers or players in the first place solves this problem.
The very nature of fixing these two problem (by simply not re-implementing these features) will make my game play very differently, and in my view much better, than zps. Any bottleneck to the game play that stifles interaction between Zombies and Humans like these types of barricades stifle interaction only serves to drag matches out forever unnecessarily in unskilled, uncreative ways that just make the matches boring for everyone. I seek to find a find line between a twitch shooter on one extreme and the molasses pace of zps on the other extreme.
I want a game that has a ‘medium’ pace where matches for a medium population of players usually last 10-20 minutes. Zps matches could go on for a half hour to an hour with no real progress being made by the Zombies. That’s not an FPS game. That’s a shooting gallery.
Human Defenses should revolve around static objects, corridors and corners, elevators, and torrents. Humans should never feel safe. The game should never feel like a shooting gallery.
Zombies walking and crouch walking should be silent to allow them to sneak up on Humans. Zombies should only make sound while running.
I would actually like also like to eventually modify torrents to make them less effective. I could see torrents mowing down Zombies way too easily if they were well placed and numerous.
So, one idea I have is that Zombies can simply crouch walk past them. This would effectively make torrents only useful in active combat situations; as opposed to being a set it and forget it permanent Zombie blockade.
If that doesn’t work for balance, maybe do other adjustments. Like Torrents are so weak that they take like one or two claw swipes to be destroys. So, if a Zombie manages to get up to them they’ve basically already destroyed them. That, or make the bullets from the torrents do almost no damage.
The torrents should give support to Humans holding a position; they shouldn’t just mow down Zombies easily in seconds.
Back to my original point, almost the entire game concept is about creating and enforcing the 6 Step Sever Loop. I don’t know if a mod alone can really modify the game and menus to this degree to change the game play this specifically as well as to plug up all the ‘holes’ that the current game would allow people to violate the 6 Step Server Loop by changing teams at will.
As far as contributing back to Daemon and Unvanquished, I am not sure what changes that I would make that would be able to be contributed back. All I’d really be doing is adding in a Zombie Unit, swapping assets from a Sci-Fi Theme to a Horror Theme, and then deleting functional content from the engine to create and enforce the 6 Step Server Loop. There’s really nothing of note here that would be useful to Daemon and Unvanquished. If you all wanted to copy anything I do back, feel free; as I want my game to be Free as in Freedom as well. I just don’t see how gutting the Daemon Engine of the functionality to switch teams is really going to help the Unvanquished game; or any other game project based on the Daemon Engine that isn’t trying to do something like I’m wanting to do.
I have no problem giving credit to Daemon Engine and Unvanquished. That's not an issue.
I guess the next question to ask is what files would I need to look at or mod to try to create and enforce the 6 Step Server Loop? That’s where the bulk of code would need to be changed.