Notes |
|
|
It seems that there are more weapons (e.g. medicgun, repairgun, utilitygun, etc.) that are affected by this bug.
AltFire:
TNT1 A 0 A_JumpIfInventory("IsInSpawnRoom",1,"Ready")
TNT1 A 0 A_JumpIfInventory("HasClass",1,1)
goto Ready
MISG AAAAAAAAAA 1 A_JumpIfTargetInLOS("AltFireGo")
goto Ready
They use A_JumpIfTargetInLOS (not sure about the utilitygun). |
|
|
(0003218)
|
TIHan
|
2012-04-12 02:21
(edited on: 2012-04-12 23:43) |
|
|
|
|
I noticed the same issues in Zombie Horde.
CLAW E 0 A_JumpIf(tid==601, 32) |
|
|
(0003222)
|
TIHan
|
2012-04-12 23:30
(edited on: 2012-04-12 23:34) |
|
> CLAW E 0 A_JumpIf(tid==601, 32)
This one may be more complicated than the previous.
A_JumpIfTargetInLOS can be handled on the client because we have unlagged, this will work properly.
A_JumpIf is a different story as it takes an expression. The evaluation of this expression on the client vs the server has the possibility of being different.
Example: The expression could be a "random(1, 10) == 3". Random numbers are never in sync with client and server, therefore we may get unexpected results.
Edit: We may have to dig in to figure out how DoJump works. I believe Torr has done some work in there; he may know more about what's going on.
|
|
|
|
This is a showstopper bug. |
|
|
|
I noticed the same thing in WhoDunIt. The chainsaw disappears when you select it.
ACTOR LChainsaw : Weapon
{
Obituary "%o was mowed over by %k's chainsaw."
Radius 20
Height 16
Inventory.pickupmessage "Found a Chainsaw."
Weapon.selectionorder 998
AttackSound "weapons/sawhit"
Weapon.preferredSkin "ChainsawSkin"
Weapon.AmmoType1 "Gasoline"
//Weapon.AmmoType2 "Gasoline"
//Weapon.AmmoGive1 1000
Weapon.AmmoUse1 1
//Weapon.AmmoUse2 1
+WEAPON.MELEEWEAPON
+INVENTORY.UNDROPPABLE
States
{
Spawn:
CSAW A 0
goto Death
WeaponDrop:
TNT1 A 0
TNT1 A 1 A_TakeInventory("IsDropping",1)
TNT1 A 0 A_TakeInventory("Slot1Filled",1)
TNT1 A 1 A_TakeInventory("SawOff",1)
TNT1 A 0 A_TakeInventory("SawOn",1)
TNT1 A 0 A_FireCustomMissile("DroppedChainsaw",0,0,0)
TNT1 A 1 A_TakeInventory("LChainsaw",1)
LOOP
NoAmmoReady:
TNT1 A 0 A_JumpIfInventory("IsDropping",1,"WeaponDrop")
SAWF A 0 A_StopSoundEx("SoundSlot6")
SAWF A 0 A_StopSoundEx("SoundSlot7")
SAWF A 1 A_WeaponReady
SAWF A 0 A_JumpIfInventory("Gasoline", 1, "Ready")
loop
OffReady:
TNT1 A 0 A_JumpIfInventory("IsDropping", 1,"WeaponDrop")
SAWF A 0 A_StopSoundEx("SoundSlot6")
SAWF A 0 A_StopSoundEx("SoundSlot7")
SAWF A 1 A_WeaponReady
SAWF A 0 A_JumpIfInventory("SawOn", 1, "Ready")
loop
Ready:
TNT1 A 0 A_JumpIfInventory("IsDropping", 1, "WeaponDrop")
TNT1 A 15 A_PlaySound("weapons/sawzip")
TNT1 A 15 A_PlayWeaponSound("weapons/sawpull")
TNT1 A 5 A_Jump(96, 6)
TNT1 A 15 A_PlaySound("weapons/sawzip")
TNT1 A 15 A_PlayWeaponSound("weapons/sawpull")
TNT1 A 5 A_Jump(96, 3)
TNT1 A 15 A_PlaySound("weapons/sawzip")
TNT1 A 15 A_PlayWeaponSound("weapons/sawpull")
TNT1 A 5
SAWD E 1
SAWD D 1
SAWD C 1
SAWD B 1
SAWD A 1 A_JumpIfNoAmmo ("NoAmmoReady")
TNT1 A 0 A_JumpIfInventory("IsDropping",1,"WeaponDrop")
TNT1 A 0 A_PlaySoundEx("weapons/sawidle","SoundSlot6",0)
SAWR ABCDEF 1 A_WeaponReady
TNT1 A 0 A_TakeInventory("Gasoline", 1)
TNT1 A 0 A_PlaySoundEx("weapons/sawidle","SoundSlot6",0)
SAWR ABCDEF 1 A_WeaponReady
TNT1 A 0 A_FireCustomMissile("LSawSmoke",250,0,20,-5,0)
TNT1 A 0 A_PlaySoundEx("weapons/sawidle","SoundSlot6",0)
SAWR ABCDEF 1 A_WeaponReady
TNT1 A 0 A_FireCustomMissile("LSawSmoke",250,0,20,-5,0)
TNT1 A 0 A_PlaySoundEx("weapons/sawidle","SoundSlot6",0)
SAWR ABCDEF 1 A_WeaponReady
TNT1 A 0 A_FireCustomMissile("LSawSmoke",250,0,20,-5,0)
Goto Ready + 15
Select:
TNT1 A 0 SetPlayerProperty(0,0,2)
TNT1 A 1 A_Raise
Loop
Deselect:
TNT1 A 0 A_StopSoundEx("SoundSlot6")
TNT1 A 0 A_StopSoundEx("SoundSlot7")
SAWR A 0 A_JumpIfInventory("SawOff", 1, 1)
SAWR A 1 A_PlaySoundEx("weapons/sawdown","weapon",0)
SAWR BC 3 A_TakeInventory("SawOff",1)
SAWR DE 4 A_TakeInventory("SawOn",1)
SAWR F 6
SAWD ABCDE 1
TNT1 A 20
TNT1 A 1 A_Lower
Wait
Fire:
TNT1 A 0 A_JumpIfNoAmmo ("NoAmmoReady")
TNT1 A 0 A_JumpIfInventory ("SawOff", 1, "AltFire")
SAWF ABCDEFG 1
TNT1 A 0 A_ReFire
SAWF GFEDCBA 1
Goto Ready + 15
Hold:
SAWF F 0 A_StopSoundEx("SoundSlot6")
SAWF F 0 A_JumpIfNoAmmo ("NoAmmoReady")
SAWF F 2 A_PlaySoundEx("weapons/sawfull","SoundSlot7",0)
SAWF G 2
TNT1 A 0 A_CustomPunch(0,0,0,"FMSawPuff", 52)
TNT1 AAA 0 A_CustomPunch(4,1,0,"FMSawPuff", 52)
SAWA D 0 A_TakeInventory("Gasoline", 3)
SAWF G 0 A_FireCustomMissile("LSawSmoke",250,0,20,-5,0)
SAWF F 2 A_Refire
SAWF EDCB 1
TNT1 A 0 A_FireCustomMissile("LSawSmoke",250,0,20,-5,0)
TNT1 A 0 A_StopSoundEx("SoundSlot7")
Goto Ready + 15
AltFire:
SAWF A 0 A_JumpIfInventory("SawOff", 1, "TurnOn")
SAWF F 0 A_StopSoundEx("SoundSlot6")
SAWF F 0 A_PlaySoundEx("weapons/sawdown","weapon",0)
SAWR ABC 1
SAWR DEF 2
SAWR ABC 3
SAWR DEF 4
SAWR A 1 A_TakeInventory("SawOn", 1)
SAWF A 1 A_GiveInventory("SawOff", 1)
goto OffReady
TurnOn:
SAWD A 1 A_GiveInventory("SawOn", 1)
SAWD A 1 A_TakeInventory("SawOff", 1)
SAWD ABCDE 1
goto Ready
Death:
DHSP A 0 A_SpawnItem("DroppedChainsaw",0,0,0,0)
TNT1 A 0 A_FadeOut(1.0)
goto death + 1
}
} |
|
|
(0003261)
|
TIHan
|
2012-04-14 23:50
|
|
|
|
|
> Does this happen in 98d?
No. |
|
|
(0003263)
|
TIHan
|
2012-04-15 00:16
|
|
Ok, then that means we need to identify which build it broke it in specifically. |
|
|
|
|
|
(0003265)
|
TIHan
|
2012-04-15 01:18
|
|
I'm going to make a guess and it had something to do with how states are handled. Torr re-did some of that work. We need his input on this. |
|
|
|
> 3299 : OK
> 3417 : Broken
Can you track this down further with the builds listed here? |
|
|
|
Quote from "Torr Samaho" Can you track this down further with the builds listed here?
3411 : Broken
3392 : OK |
|
|
(0003269)
|
Torr Samaho
|
2012-04-15 02:38
(edited on: 2012-04-15 02:43) |
|
This could be caused by the changes in revision 235c909a5f2f.
SERVERCOMMANDS_SetPlayerPSprite / SERVERCOMMANDS_SetThingFrame did nothing under certain conditions. Possibly the fact that these functions were broken concealed some other bug. Or the state setting simply doesn't work as intended. I will need to look into this in more detail.
EDIT: I'm pretty sure client_SetPlayerPSprite needs to be adapted and also know how. I'll do this tomorrow.
|
|
|
(0003271)
|
TIHan
|
2012-04-15 02:46
|
|
> This could be caused by the changes in revision 235c909a5f2f.
I can confirm that is the cause. Just tested it. |
|
|
(0003284)
|
Torr Samaho
|
2012-04-15 14:09
(edited on: 2012-04-15 15:08) |
|
I found out what's going on (even though client_SetPlayerPSprite is bugged, this way not causing this), but will test the fix a little more before committing.
EDIT: I committed the fix, still need to fix client_SetPlayerPSprite though (which was already bugged in 98d).
|
|
|
|
The new beta build I just uploaded contains all the fixes. Please test it very thoroughly. |
|
|
(0003313)
|
unknownna
|
2012-04-16 00:24
(edited on: 2012-04-16 00:59) |
|
The client is no longer blocked from selecting other weapons, but the sprite animation bugs up if there's some latency (most noticeable with a ping of 300-600). But this also happens in 98d.
And if you fire the "Zombie_" weapon before selecting another weapon while pressing +attack in a fast manner (600 ping), the next weapon's select state will be skipped. It's pretty nasty as you can see in the uploaded screenshot. The client starts to fire the SSG before it's raised on the server. You can reproduce this with the example WAD by giving yourself a SSG. This also happens in 98d.
Here's the custom "Zombie_" weapon:
actor Zombie_ : Pistol
{
Weapon.SlotNumber 2
states
{
Fire:
PISG A 1
PISG A 1 A_JumpIf (tid==0, 1)
PISG A 1
goto Ready
}
}
|
|
|
|
The remaining issues are caused by the way jumps are handled by the clients. Possibly this could be improved if we let the clients try to predict the jump outcome, but I'm not sure if this will cause more harm than good. |
|
|
(0006668)
|
Arco
|
2013-07-16 16:49
|
|
|