A random sentence for a random mind.

Xidia and 7 Bullets coop bugs

For gameplay advice and broader discussion of single-player Unreal including custom maps, mods and mutations that alter the game.

Moderators: ividyon, Semfry, zYnthetic

User avatar zYnthetic
Trustee Member Trustee Member
Posts: 507
Joined: 12 Nov 2007, 00:10

Subject: Xidia and 7 Bullets coop bugs

Post Posted: 21 Sep 2016, 22:40

I'm looking to compile a list of coop bugs in Xidia and 7Bullets so they can later be looked into. While I have spent a good amount of time with them, I couldn't have gotten them all. Here's what I've found so far. If anyone knows of any other issues let me know.

Both
Clients can crash if they're killed while firing the CarRifle.

Xidia
Map 3 "Outpost Pheonix"
Pre-enabled two-way teleporter to/from Red Nemesis arena. Not really a bug but it shouldn't be there.

Map 7 "Dark Lord"
Dual Warlord arena doors close and never reopen. Impossible for players behind to progress.
Dual Warlords cannot trigger the skylight mover. Impossible for them to start the battle.

Map 12 "Return to Outpost Pheonix"
Door to generator room closes to trap players for a pupae ambush preventing players outside from entering. If players inside die, the map becomes impossible to complete.

Map 16 "Beacon"
Exit teleporter sends players to the first map of The Escape, rather than the first (playable) map of The Incident.

Seven Bullets
All Maps
Maps that fadeout and play dialog create a game-breaking bug as players can move off the teleporter before it's enabled and cannot see to "try again", making progress impossible.
ScriptedHumans are super buggy. They will crash clients AND servers because they hate everything and everyone.

Map 2 "Infiltration of the Kran"
Server room can't be entered once the laser doors are active, which are also solid so this leaves no way to kill enemies inside the room if players with them have died.

Map 3 "The Rogue"
Scarred One battle skipped. Weird ghost door.

Map 5 "Slight Complication"
ScriptedHumans from sp cutscene still exist and fill up log with warnings. A bug in terms of performance issue.

Map 6 "The Guardian of Vandora's Pass"
If a player is on the wrong side when the bridge collapses the only way to cross is to die.
Titan supershock battle skipped.
Spooky ghost door.

Map 9 "Tension at Vandora's Temple"
The first code (of 3) does not spawn/trigger, making it impossible to progress.

Map 12 "The Dead Scorpions"
Another ghost door.
The second code (of 2) does not spawn/trigger, making it impossible to progress.

Map 13 "Unfinished Business"
Scripting to activate existing coop teleporter is broken so players must wait for the duration of the singleplayer cutscene before the singleplayer teleporter is triggered.

Map 14 "The Ghost of Oraghar"
Map not intended for coop, as such:
Scarred One is never triggered out of his hiding spot.
Exit teleporter sends players to credits map.
Image

User avatar zYnthetic
Trustee Member Trustee Member
Posts: 507
Joined: 12 Nov 2007, 00:10

Subject: Re: Xidia and 7 Bullets coop bugs

Post Posted: 26 Sep 2016, 05:53

Just found out 7Bullets' ScriptedUnrealHumans are specifically the (most likely) culprit. They would be fine but for some reason the PostBeginPlay makes a call to Male/FemaleBot, a very obviously depreciated OldSkool class (that is for some reason still part of the codebase) with invalid references.

Also found another ghost door in Xidia's Dead Mines. Really guys, don't do this.
Image

diamond
Skaarj Berserker Skaarj Berserker
Posts: 366
Joined: 13 Nov 2007, 10:51
Location: ROFLand
Contact:

Subject: Re: Xidia and 7 Bullets coop bugs

Post Posted: 26 Sep 2016, 11:57

What is the problem of ghost doors, specifically? What is configured incorrectly with them?
Image
UBerserker wrote:Architecture doesn't need to detailed, it just needs to be right.

User avatar UBerserker
Nali Priest Nali Priest
Posts: 7566
Joined: 11 Nov 2007, 21:00
Contact:

Subject: Re: Xidia and 7 Bullets coop bugs

Post Posted: 26 Sep 2016, 12:17

bNet false I think.
Basically you can pass through them but they do not open. Sometimes this is highly confusing because a certain door just doesn't open and you just go around aimlessly until you figure out you can pass through that door.
Image

User avatar zYnthetic
Trustee Member Trustee Member
Posts: 507
Joined: 12 Nov 2007, 00:10

Subject: Re: Xidia and 7 Bullets coop bugs

Post Posted: 27 Sep 2016, 05:26

Replication. Server side properties of map actors can be changed (collision) but not client-side (display). Movers, lights, basically anything that has a visual influence on the map can't be changed for clients.
Image

Masterkent
Skaarj Scout Skaarj Scout
Posts: 14
Joined: 08 Oct 2016, 19:26

Subject: Re: Xidia and 7 Bullets coop bugs

Post Posted: 10 Oct 2016, 13:22

About one year ago I was working on a modification of 7 Bullets for coop game on Unreal 227i+ servers, and elimination of various issues was part of my work. Here I can describe those issues in detail, including technical background behind some of them, and methods I used to resolve them. Let's start with the issues already mentioned here.

zYnthetic wrote:Maps that fadeout and play dialog create a game-breaking bug as players can move off the teleporter before it's enabled and cannot see to "try again", making progress impossible.

I think, the best resolution here is to eliminate the fadeout effect in coop game completely.

ScriptedHumans are super buggy. They will crash clients AND servers because they hate everything and everyone.

I can't recall issues like that with Unreal 227. Maybe it's more robust to some coding errors than UT. Anyway, I doubt that crashes (especially client-side) can be somehow related to AI attitude.

Map 2 "Infiltration of the Kran"
Server room can't be entered once the laser doors are active, which are also solid so this leaves no way to kill enemies inside the room if players with them have died.

I didn't consider that an issue, since not killing those mobs does not prevent further progress.

Map 6 "The Guardian of Vandora's Pass"
If a player is on the wrong side when the bridge collapses the only way to cross is to die.

Or reconnect. The best solution I could imagine is placing a teleporter after destruction of the bridge. I'd also point out that physics of the falling bridge is very far from looking realistic. The speed of fragments immediately changes from zero to a huge value (I didn't fix this).

Titan supershock battle skipped.

I presume, it was intentionally skipped due to difficulties with implementing coop-friendly rules for the part with Titans. The logic used in SP mode is not suitable for multiplayer game and many things need to be changed there. An example of possible implementation for Unreal 227 can be found in SevenBCoopMutator (function SBMapFixServer.Server_FixCurrentMap_Jones_05_TemplePart3).

Map 9 "Tension at Vandora's Temple"
The first code (of 3) does not spawn/trigger, making it impossible to progress.

The problem with missing translator messages arises from big length of such messages. Size of a replicated string must not exceed some limits; otherwise, client won't receive the string from the server. If you want to transfer some long message from a server to a client, you have to split the message into small pieces, perform piecewise replication, and then put pieces together. Alternatively, a mapper might store messages in non-destructible actors (with bStatic or bNoDelete equal to True), so that network client would be able to obtain values directly from the map. Note that on the given map TvTranslatorEvents are destructible actors, and a network client has to obtain properties of such actors through replication from the server. My implementation uses series of replicated function calls for transferring potentially long strings.

Map 13 "Unfinished Business"
Scripting to activate existing coop teleporter is broken so players must wait for the duration of the singleplayer cutscene before the singleplayer teleporter is triggered.

In the worst case, Mr Drago can be pushed outside by an explosion - good luck with finding and killing him in the outside bottom part of the level then.

Map 14 "The Ghost of Oraghar"
Map not intended for coop, as such:

But making it coop-friendly is easy (a ready-to-use fix for 227 is implemented).

UBerserker wrote:bNet false I think.
Basically you can pass through them but they do not open. Sometimes this is highly confusing because a certain door just doesn't open and you just go around aimlessly until you figure out you can pass through that door.

Technically, it's an old bug in Unreal/UT implementation of movers. Game-irrelevant movers ARE supposed to be hidden, but the given implementation from Engine.u

Code: Select all

function PostBeginPlay()
{
   local mover M;

   //brushes can't be deleted, so if not relevant, make it invisible and non-colliding
   if ( !Level.Game.IsRelevant(self) )
   {
      SetCollision(false, false, false);
      SetLocation(Location + vect(0,0,20000)); // temp since still in bsp
      bHidden = true;
   }

does not produce the desirable effect in network game. Movers cannot be simply destroyed because of bNoDelete == true, hence elimination of game-irrelevant movers is done by hiding, not by destruction. bHidden == true doesn't make the mover invisible, it only prevents further visible changes of mover's location. So, the actual hiding is done by moving the mover into location (x=0,y=0,z=20000) where it's likely to be non-observable. There are two reasons why this code doesn't work well in network game: new location is not replicated to client because of RemoteRole == ROLE_SimulatedProxy (it should be set to ROLE_DumbProxy to make changes of location visible to clients), and even if it would be replicated, the condition bHidden == true prevents client from updating visible mover's location which was changed after mover's initialization phase.

In Unreal 227j, the implementation of Engine.Mover.PostBeginPlay has been revised as follows:

Code: Select all

   //brushes can't be deleted, so if not relevant, make it invisible and non-colliding
   if ( !Level.Game.IsRelevant(self) )
   {
      If( Brush==None )
         bHidden = true;
      else
      {
         SetLocation(Location + vect(0,0,20000)); // temp since still in bsp
         RemoteRole = Role_DumbProxy; //Allow clients to see the location update.      
      }
      SetCollision(false, false, false);
      Tag = '';
   }

and on 227j servers such ghost movers don't appear anymore. For UT and older versions of Unreal 1 it's possible to write a mutator that would fix this issue. I don't know if UT community created any mods that serve as bug-fixes for UT, but in case of Unreal v224 - v227i typical problems with movers are covered, e.g., by UGoldFix v7.

So, setting mover's bNet to false can reasonably be used as long as correct elimination of game-irrelevant movers is maintained - it's feasible.

zYnthetic wrote:Server side properties of map actors can be changed (collision) but not client-side (display).

Properties of client-side actors can be dynamically changed in several ways.

Movers, lights, basically anything that has a visual influence on the map can't be changed for clients.

That's not correct. You cannot dynamically change BSP or light maps, but many properties of movers and static lights can be modified.

User avatar UBerserker
Nali Priest Nali Priest
Posts: 7566
Joined: 11 Nov 2007, 21:00
Contact:

Subject: Re: Xidia and 7 Bullets coop bugs

Post Posted: 10 Oct 2016, 14:50

Masterkent wrote:
ScriptedHumans are super buggy. They will crash clients AND servers because they hate everything and everyone.

I can't recall issues like that with Unreal 227. Maybe it's more robust to some coding errors than UT. Anyway, I doubt that crashes (especially client-side) can be somehow related to AI attitude.


From what I remember this happened solely with the bots in the Vandora redux.
Image

Masterkent
Skaarj Scout Skaarj Scout
Posts: 14
Joined: 08 Oct 2016, 19:26

Subject: Re: Xidia and 7 Bullets coop bugs

Post Posted: 10 Oct 2016, 19:47

UBerserker wrote:From what I remember this happened solely with the bots in the Vandora redux.

I couldn't reproduce that issue using UT so far.

Masterkent wrote:Alternatively, a mapper might store messages in non-destructible actors (with bStatic or bNoDelete equal to True), so that network client would be able to obtain values directly from the map.

It's also possible to use hack with loading particular actor client-side. When a TranslatorEvent-like actor of a custom TranslatorEvent-like type is touched by a player, it may set the actor name to some property (e.g. TranslatorEventActorName) of player's Translator-like inventory:

Code: Select all

TranslatorInventory.TranslatorEventActorName = name;

Then the Translator-like inventory may replicate the value of TranslatorEventActorName to client, its client-side counterpart may load TranslatorEvent-like actor with the given name directly from the map and retrieve its properties:

Code: Select all

TranslatorMessage = CustomTranslatorEventType(DynamicLoadObject(Level.outer.name $ "." $ TranslatorEventActorName, class'CustomTranslatorEventType')).Message;

Note that translator messages can be localized client-side in the given case. When playing on the same server, people from different countries may see different messages depending on what localization files they have. This differs from the situation when you replicate the same message to all clients and draw it.

User avatar zYnthetic
Trustee Member Trustee Member
Posts: 507
Joined: 12 Nov 2007, 00:10

Subject: Re: Xidia and 7 Bullets coop bugs

Post Posted: 11 Oct 2016, 06:04

ScrptedHumans for the most part are fine. Iirc it's the ScriptedUnrealHumans that are suspect. I imagine they would be fine if not for referencing an obviously depreciated class in PostBeginPlay. It might have nothing to do with the specific bug but it's a bad sign. I believe in our last playthrough, Vandora was crashing all clients and server pretty reliably at the same location until a killall ScrptedHumans was issued

Rewriting ScriptesHumans isn't a task I'm interested in since that would require a lot more testing than I'm willing to dedicate. I do have fixes for everything else but thanks for the input.
Image

User avatar UBerserker
Nali Priest Nali Priest
Posts: 7566
Joined: 11 Nov 2007, 21:00
Contact:

Subject: Re: Xidia and 7 Bullets coop bugs

Post Posted: 11 Oct 2016, 10:11

zYnthetic wrote: I believe in our last playthrough, Vandora was crashing all clients and server pretty reliably at the same location until a killall ScrptedHumans was issued.


Yeah, happened always when you're crossing the room with that little wooden bridge on the second floor (when you're heading to the dock area).
Image

Masterkent
Skaarj Scout Skaarj Scout
Posts: 14
Joined: 08 Oct 2016, 19:26

Subject: Re: Xidia and 7 Bullets coop bugs

Post Posted: 11 Oct 2016, 17:15

It seems, UT doesn't allow to use the trick with client-side DynamicLoadObject shown above (in case of U227 I got it to work).

zYnthetic wrote:I believe in our last playthrough, Vandora was crashing all clients and server pretty reliably at the same location

I finished that level several times - no crashes here (UT 436 server + UT 436 client). Maybe we have different versions of some packages.

Filename: SevenB.u
Size: 8 323 248 bytes
MD5: 6513FE41757C3A8BB243A4E8F5223CE6
SHA-256: 90017EEECA95D7BD64C91F8F91FA57AA4A075DCE6EEB33644C162A71226A3A8C

until a killall ScrptedHumans was issued

Those pawns use custom weapons, and some of such weapons spawn custom projectiles. Weapons and projectiles should also be considered as potential troublemakers.

I noticed one weird thing with SBRazor2Alt projectiles - they don't move when their instigator is a scripted pawn. When I looked in the code, I found this:

Code: Select all

auto state Flying
{
  simulated function Tick(float DeltaTime)
  {
    local int DeltaYaw, DeltaPitch;
    local int YawDiff, PitchDiff;

    if ( Level.NetMode == NM_Client )
      Velocity = GuidedVelocity;
    else
    {
      if ( (instigator.Health <= 0) || !instigator.IsA('playerpawn') )
      {
        Disable('Tick');
        return;
      }

Brilliant idea - if the instigator is not a PlayerPawn, then just do nothing with maintaining a proper value of Velocity. Maybe there are similar flaws in other places, and some of them could cause those crashes.

User avatar Mister_Prophet
Red Nemesis Leader Red Nemesis Leader
Posts: 2875
Joined: 11 Nov 2007, 23:30
Location: Long Island, New York

Subject: Re: Xidia and 7 Bullets coop bugs

Post Posted: 12 Oct 2016, 17:51

Pretty sure the random crashing bug with the CAR Rifle alt (and any other gun bugs) are limited to bad projectiles and not the Terran Pirates. I remember when we were testing the Deathmatch mutator that came with 7B and the script bug with the CAR would happen regardless if players or Bots shot the alt projectile.

It's been a long time. I've forgotten a lot of this stuff. Totally onboard with a fixed 7B COOP, was always poorly implemented and added on impulse with very little or no testing.

Some stuff I've read here that I do remember.

1. The skipping of the Battle of the Titans (Enchanced Shockrifle fight) in that one level was intentional. We had too many problems with that in COOP because of teleporters and because it was such a long sequence of text dump.

2. The Vandora Redux level had so many problems during development that I think when we finally got a version that ran for all of us we stopped touching it and shipped it as is. I have no idea what kind of demons are lurking in that one, all I know is that we all got it to start and end with no problems.

3. 7B's custom files were scripted by UsAaR33 and his methods of doing things is well documented by Unreal community History. I know a lot of scripters and coders are often at odds with how he did things, but at the time he was the only person we had around who could do this stuff. We spent a great deal of time working around known bugs and doing our best to squash issues while we still had him around.

There are also secondary packages running alongside 7B ones that were made by other people, specifically the grass generator made by UArchitect. In my experience, UA's stuff was much more stable but there could be some conflicts with UsAaR33's code in certain levels. Specifically, the Vandora level.

Anyway, if you want to ask me something I'll do my best and try to remember.
Image

Masterkent
Skaarj Scout Skaarj Scout
Posts: 14
Joined: 08 Oct 2016, 19:26

Subject: Re: Xidia and 7 Bullets coop bugs

Post Posted: 12 Oct 2016, 22:44

Mister_Prophet wrote:1. The skipping of the Battle of the Titans (Enchanced Shockrifle fight) in that one level was intentional. We had too many problems with that in COOP because of teleporters and because it was such a long sequence of text dump.

I guess, supporting coop just wasn't seriously considered, so devs chose the most simple solution instead of working on coop-friendly rules for that part and building a corresponding alternative system of actors for supporting such rules. I can imagine difficulties with implementing complex map logics for mappers who don't know UScript well, because standard triggers, counters, and dispatchers don't really constitute a decent basis for defining non-trivial conditions when certain actors should do something specific. For a decent UScript coder there should be no difficulties with implementing any logic he likes. It's not even necessary to edit the map in order to alter the behavior of actors. A third-party mutator can dynamically change properties of existing actors, remove existing destructible actors, or spawn additional actors. This allows to write external map-fixes for many maps that were not designed for coop game.

This is an example of coop gameplay on the given map with an external fix: https://www.youtube.com/watch?v=knJND5b-qLU

There are also secondary packages running alongside 7B ones that were made by other people, specifically the grass generator made by UArchitect.

The quality of the grass generator is far from fine when it comes to multiplayer game. It spawns a lot of plants server-side, and the server tries to replicate all of them to client. I clearly remember that this totally messed up replication between 227 servers and clients in some places. Since grass has no any impact on the game mechanics and plays a purely decorative role, it should be spawned client-side only. I didn't edit implementation of the generator itself and added the following hack for it in my mutator instead:

Code: Select all

function AdjustPlantSpawners()
{
   local Actor A;

   foreach AllActors(class'Actor', A)
      if (A.IsA('UAplantspawner'))
         A.SetPropertyText("spreadintensity", "0");
}

If you're going to fix class UAPlantGen.UAplantspawner, you should do the following things with its PostBeginPlay:

1) insert

Code: Select all

if (Level.NetMode == NM_DedicatedServer)
   return;

before the for loop at the beginning of the function body.

2) if you want to support listen servers, insert

Code: Select all

if (UA != none)
   UA.RemoteRole = ROLE_None;

after spawning actors of type stored in variable grassactor.

Anyway, if you want to ask me something I'll do my best and try to remember.

The most interesting question for me now is how SevenB.u was created - by compiling sources using UCC or by means of UnrealEd. If there were sources, can you offer them?

User avatar zYnthetic
Trustee Member Trustee Member
Posts: 507
Joined: 12 Nov 2007, 00:10

Subject: Re: Xidia and 7 Bullets coop bugs

Post Posted: 13 Oct 2016, 04:29

Masterkent wrote:This is an example of coop gameplay on the given map with an external fix: https://www.youtube.com/watch?v=knJND5b-qLU


Not bad. It's pretty similar to what I'm doing for the original UT version via CoopSuite (mutator).
https://www.youtube.com/watch?v=3fpBsd4iPEo
I haven't gotten to the CarRifle and ScriptedUnrealPawns yet but everything else in the first post has been fixed. This thread is basically an effort to avoid public revisions as much as possible by fishing for any bugs I haven't caught yet.
Image

User avatar Mister_Prophet
Red Nemesis Leader Red Nemesis Leader
Posts: 2875
Joined: 11 Nov 2007, 23:30
Location: Long Island, New York

Subject: Re: Xidia and 7 Bullets coop bugs

Post Posted: 13 Oct 2016, 04:49

Masterkent wrote:The most interesting question for me now is how SevenB.u was created - by compiling sources using UCC or by means of UnrealEd. If there were sources, can you offer them?


I definitely do not have any of that. I only have the release packages everyone else does. Only one who would would be Aaron, and like I said he has kinda left the Unreal scene.
Image

Next

Who is online

Users browsing this forum: No registered users and 1 guest