Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

How to get tri-bomb to work reliably? #98

Open
SimpleTease opened this issue Dec 14, 2020 · 20 comments
Open

How to get tri-bomb to work reliably? #98

SimpleTease opened this issue Dec 14, 2020 · 20 comments

Comments

@SimpleTease
Copy link
Contributor

I have an extremely hard time getting tri-bomb powerup to work. How fast should one tap the bomb button to drop all of them? I only got it working once and thinking my technique is wrong.

@frranck
Copy link
Collaborator

frranck commented Dec 15, 2020

You need to double tap quickly.
Btw are you interested in back porting the asm changes to the original assembly code? I would need to push some missing files, but first you would need to compile https://github.com/frranck/asm2c. stupidly I coded it in swift, but It's running fine on an ubuntu linux...

@SimpleTease
Copy link
Contributor Author

You need to double tap quickly.

If I turn on autofire, it works easily. With it off, my timing is always wrong. Guess I need more practice.

Btw are you interested in back porting the asm changes to the original assembly code? I would need to push some missing files, but first you would need to compile https://github.com/frranck/asm2c. stupidly I coded it in swift, but It's running fine on an ubuntu linux...

I tried compiling but couldn't get it working yet. I would've started by adding the unaligned casts and work forward on mismatches.

@frranck
Copy link
Collaborator

frranck commented Dec 16, 2020

OK I never tried with the autofire. We may have an issue there.
I will push more tooling for the conversion soon: Fell free to create an issue in asm2c if you need help with the compilation.

@frranck frranck reopened this Dec 16, 2020
@SimpleTease
Copy link
Contributor Author

Are you using gamepad or keyboard for tri-bomb?

@frranck
Copy link
Collaborator

frranck commented Dec 19, 2020

pad lately, but I always play the SDL2 version, that don't use auto-fire

@frranck
Copy link
Collaborator

frranck commented Dec 19, 2020

I guess we should check how it's implemented in assembly.

@SimpleTease
Copy link
Contributor Author

Strangely I'm having no problems anymore with tri-bombs. Seems easy to pull off now. I think it was some Retroarch problem as some recent updates has cured my frustration.

@frranck
Copy link
Collaborator

frranck commented Dec 23, 2020

Will try but the autofire seems to be broken in SDL2...

@frranck
Copy link
Collaborator

frranck commented Dec 23, 2020

actually autofire is always on in SDL2 even if you use -n: when you have multiple bombs but keep the B button on, it will keep dropping bomb when moving to a different cell without releasing and repressing B.

@frranck
Copy link
Collaborator

frranck commented Dec 23, 2020

I can't test the libretro now; so I made a SDL2 only change to fix the autofire; but it is breaking the tribomb...
https://github.com/Javanaise/mrboom-libretro/blob/master/common.cpp#L1278

@frranck
Copy link
Collaborator

frranck commented Dec 23, 2020

I don't think having an optional auto fire option can work with netplay, if two players have a different setting it will break the determinism.

@SimpleTease
Copy link
Contributor Author

I did some research on netplay. The server controls the important values:

  • Team mode
  • Monsters
  • Level select
  • Autofire

If a client sets a value, it gets overwritten by server. Tried many times to break the system but always rejected.

Options like these appear to be per player.

  • Aspect ratio
  • Music volume
  • Sound volume

@SimpleTease
Copy link
Contributor Author

I did tests before libretro autofire option was forced always.

@frranck
Copy link
Collaborator

frranck commented Dec 23, 2020

@frranck
Copy link
Collaborator

frranck commented Dec 23, 2020

Could you please check that before 277e7db in the libretro version:

  • autofire off would work like this:
    when you have multiple bombs but keep the B button on, it will keep dropping bomb when moving to a different cell without releasing and repressing B.
  • tribomb was possible with autofire off

@SimpleTease
Copy link
Contributor Author

Did you read https://docs.libretro.com/development/retroarch/netplay/ ?

I did read. Autofire is baked into the savestate. When a desync happens, server re-transmits back to clients and thus indirectly re-applys the 4 game settings mentioned above. Because the game settings are stored in there.

I have to use low network latency settings and other switches because my jitter is terrible and otherwise unplayable. 5-10 seconds can go by before I hit a state reset. But I did notice that (Server) had monsters off, (Client) had monsters on. It took several seconds before Client got rewind state and monsters went from on -> off.

Same with autofire. Server (on), Client (off). I could not run around freely dropping bombs until the state reset. Then the tribomb worked.

Sometimes it gets so bad that I die, hit the victory screen, start new stage. To find out we're still playing the previous stage. Then I die for real! 😆

Even if Client changes settings in-game, Server will send that rewind handshake and wipe out any cheats Client was using.


I found that autofire was baked into savestates, which was messing with my test results. So I went clean.

autofire off would work like this:
when you have multiple bombs but keep the B button on, it will keep dropping bomb when moving to a different cell without releasing and repressing B.

autofire off = drop bomb, walk around still holding button. Only 1 bomb dropped.
autofire on = drop bomb, walk around still holding button. Drops bomb at each cell visited.

tribomb was possible with autofire off

autofire off = could not get tribomb to work. Smashing the bomb button did not work.
autofire on = I drop a bomb, release, wait maybe 1-2 frames, then press.

@frranck
Copy link
Collaborator

frranck commented Dec 24, 2020

The save state should be saving all variables from the mem struct from the "master" variable to the "replayer_saver" one according to https://github.com/Javanaise/mrboom-libretro/blob/master/common.hpp#L42
So even if autofire is not included; but it could create different states for the same input when computers have a different configuration; so that will generate some resynch.

I guess there's gonna be resynchs with the level selection too. Shall we remove this?

There was quite a debate with the autofire option :)
If we want to reimplement it; that's gonna be quite tricky; it should be done totally inside the assembly code; forced to false for retrolib except during the demos...
This is happening around there:
https://github.com/Javanaise/mrboom-libretro/blob/master/tools/asm/src/mrboom.asm#L6676

@SimpleTease
Copy link
Contributor Author

I guess there's gonna be resynchs with the level selection too. Shall we remove this?

To be completely netplay safe, I agree.

There was quite a debate with the autofire option :)
If we want to reimplement it; that's gonna be quite tricky; it should be done totally inside the assembly code; forced to false for retrolib except during the demos...

For the back burner I guess.

@frranck
Copy link
Collaborator

frranck commented Dec 25, 2020

I guess there's gonna be resynchs with the level selection too. Shall we remove this?

To be completely netplay safe, I agree.

No monsters and the team mode selection are problematic too. I asked @twinaphex on Discord if there was an option to get core settings shared.

@frranck
Copy link
Collaborator

frranck commented Dec 25, 2020

@jdgleaver Could we get your input on that? We would need certain core options to be selected by the server.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants