MantisBT - Zandronum
View Issue Details
0000744Zandronum[All Projects] Bugpublic2012-03-29 11:092018-09-30 22:47
unknownna 
Torr Samaho 
lowtrivialalways
closedfixed 
98d 
 
0000744: View bobs after unmorphing online
Same as 0000309: View bobs after teleporting online (movebob) and 0000484: View bobs after being affected by Thing_Stop online.
1. Start a server with the example WAD loaded.
2. Connect a client to the server.
3. Join the game.
4. Walk over the gray line.
5. After unmorphing, hold +forward just for a little while before releasing it.
No tags attached.
related to 0000309closed Torr Samaho View bobs after teleporting online (movebob) 
related to 0000484closed Dusk View bobs after being affected by Thing_Stop online 
related to 0000764feedback TIHan View bobs after being affected by A_Stop + PROP_FROZEN 
? morph_bug_test_06.wad (2,357) 2012-03-29 11:09
/tracker/file_download.php?file_id=491&type=bug
jpg assertion.jpg (301,741) 2012-04-03 02:34
/tracker/file_download.php?file_id=514&type=bug
Issue History
2012-03-29 11:09unknownnaNew Issue
2012-03-29 11:09unknownnaFile Added: morph_bug_test_06.wad
2012-03-29 11:09unknownnaStatusnew => confirmed
2012-03-29 14:19TIHanAssigned To => TIHan
2012-03-29 14:19TIHanStatusconfirmed => assigned
2012-04-03 02:28TIHanNote Added: 0003119
2012-04-03 02:28TIHanStatusassigned => feedback
2012-04-03 02:29TIHanNote Edited: 0003119bug_revision_view_page.php?bugnote_id=3119#r1623
2012-04-03 02:31TIHanRelationship addedrelated to 0000309
2012-04-03 02:32TIHanRelationship addedrelated to 0000484
2012-04-03 02:32TIHanFile Added: assertion.png
2012-04-03 02:33TIHanFile Deleted: assertion.png
2012-04-03 02:34TIHanFile Added: assertion.jpg
2012-04-03 02:55TIHanNote Edited: 0003119bug_revision_view_page.php?bugnote_id=3119#r1624
2012-04-03 06:21TIHanNote Edited: 0003119bug_revision_view_page.php?bugnote_id=3119#r1625
2012-04-03 06:38TIHanNote Edited: 0003119bug_revision_view_page.php?bugnote_id=3119#r1626
2012-04-03 06:50TIHanNote Edited: 0003119bug_revision_view_page.php?bugnote_id=3119#r1627
2012-04-04 23:49TIHanNote Added: 0003134
2012-04-04 23:49TIHanNote Edited: 0003134bug_revision_view_page.php?bugnote_id=3134#r1638
2012-04-05 00:38Edward-sanNote Added: 0003135
2012-04-05 02:49TIHanNote Added: 0003136
2012-04-05 04:48TIHanNote Edited: 0003136bug_revision_view_page.php?bugnote_id=3136#r1640
2012-04-05 04:59TIHanNote Edited: 0003136bug_revision_view_page.php?bugnote_id=3136#r1641
2012-04-05 05:03TIHanNote Edited: 0003136bug_revision_view_page.php?bugnote_id=3136#r1642
2012-04-06 10:26Edward-sanNote Added: 0003156
2012-04-07 00:29Torr SamahoNote Added: 0003160
2012-04-07 00:31Torr SamahoNote Edited: 0003160bug_revision_view_page.php?bugnote_id=3160#r1649
2012-04-07 00:32Torr SamahoNote Edited: 0003160bug_revision_view_page.php?bugnote_id=3160#r1650
2012-04-07 00:32Torr SamahoNote Edited: 0003160bug_revision_view_page.php?bugnote_id=3160#r1651
2012-04-12 03:09unknownnaRelationship addedrelated to 0000764
2012-04-14 17:35TIHanStatusfeedback => resolved
2012-04-14 17:35TIHanResolutionopen => fixed
2012-04-14 17:35TIHanAssigned ToTIHan => Torr Samaho
2012-06-09 13:22Torr SamahoCategoryGeneral => Bug
2018-09-30 22:47Blzut3Statusresolved => closed

Notes
(0003119)
TIHan   
2012-04-03 02:28   
(edited on: 2012-04-03 06:50)
There is something weird going on with the example wad here. In debug mode, I get an assertion on AActor::ObtainInventory which means Inventory was NOT NULL and somehow we called ObtainInventory. This doesn't crash in release mode, but there is something funky here.

As for the viewbobs, I think I'm more concerned about this assertion.

The assertion occurs in singleplayer and on the server.

Edit3:
I thought about this a little backwards here. For clarification... if the expression inside assert is true, program continues on happy go lucky. If the expression turns false, it will display a message almost like an error.
Currently, I'm not sure if this is a ZDoom error. I need to compile a debug binary of one.

(0003134)
TIHan   
2012-04-04 23:49   
It seems the assertion's expression returning false also happens in ZDoom 1551 and the ZDoom 2.5.0 r2508; so that's their problem. It doesn't crash anything, it's just telling the programmers that something is wrong. I'll go ahead and fix the bug here.

(0003135)
Edward-san   
2012-04-05 00:38   
I was able to reproduce the assertion failure in latest svn, hence I reported it to zdoom devs.
(0003136)
TIHan   
2012-04-05 02:49   
(edited on: 2012-04-05 05:03)
Fixed.
'https://bitbucket.org/TIHan/tst/changeset/9ed77293c3a7 [^]'

Edit: If there needs to be a discussion on reaction time, I have found at least one other use case for it.

(0003156)
Edward-san   
2012-04-06 10:26   
'http://zdoom.org/Changelog/3519/files [^]'
Fixed: It was possible to give inventory items to the base actors of something morphed. This would cause an assertion failure when unmorphing.
(0003160)
Torr Samaho   
2012-04-07 00:29   
(edited on: 2012-04-07 00:32)
> If there needs to be a discussion on reaction time, I have found at least one other use case for it.

Please tell me about the other occurrence. I think the unmorphing problem alone can be fixed very simply and without additional net traffic as follows:


diff -r 4aeebb963aca src/cl_main.cpp
--- a/src/cl_main.cpp Wed Apr 04 22:28:40 2012 -0400
+++ b/src/cl_main.cpp Fri Apr 06 20:28:19 2012 -0400
@@ -3879,9 +3879,15 @@
         // morph time since the server handles the timing of the unmorphing.
         pPlayer->morphTics = -1;
     }
- else
+ else
+ {
         pPlayer->morphTics = 0;
 
+ if ( bPlayerWasMorphed )
+ pPlayer->mo->reactiontime = 18;
+ }
+
+
     // If this is the consoleplayer, set the realorigin and ServerXYZMom.
     if ( ulPlayer == static_cast<ULONG>(consoleplayer) )
     {


EDIT: Possibly one needs


diff -r 4aeebb963aca src/g_shared/a_morph.cpp
--- a/src/g_shared/a_morph.cpp Wed Apr 04 22:28:40 2012 -0400
+++ b/src/g_shared/a_morph.cpp Fri Apr 06 20:31:07 2012 -0400
@@ -386,6 +386,8 @@
     // [BB] Tell the clients to unmorph the player, also give back the original inventory to the player.
     if ( NETWORK_GetState( ) == NETSTATE_SERVER )
     {
+ SERVER_AdjustPlayersReactiontime ( static_cast<ULONG> ( player - players ) );
+
         SERVERCOMMANDS_SpawnPlayer( ULONG( player-players ), PST_LIVE );
         SERVER_ResetInventory( ULONG( player-players ));
         SERVERCOMMANDS_SetThingFlags( player->mo, FLAGSET_FLAGS );


in addition.