Rising/falling curtain mechanics for Ace-Hell in Heboris UE?

Thread in 'Research & Development' started by Zowayix, 10 Apr 2012.

  1. (The thread title used to be "Heboris UE timings for "Old Style" Sega?". That question was resolved and I didn't feel like making another thread for a related question.)

    Looking through Heboris UE's "speed.def" file, I can find speed timings for virtually every mode except a few.

    Can someone tell me the speed timings (ARE, DAS delay, gravity tables, line clear delay, lock delay) for Heboris UE's "Old Style" Sega mode? I can find the timings for Game Boy mode but they're obviously not the same.
    (IIRC the speed should suddenly return to level 1 speeds at level 12, before increasing rapidly and then maxing out at level 15, similar to what TGM does at level 200.)

    And this isn't in the thread title, but can someone also tell me the timings for Ace-Hell, including the mechanics involving the rising curtain between levels 50-149? They don't seem to be in the file either, even though Shirase mode's rising garbage is.
     
    Last edited: 14 Apr 2012
  2. Re: Heboris UE timings for "Old Style" Sega?

    You should be able to turn on "Show Waits" in the menu, which will display the ARE, lock, clear, and line clear delays at the bottom of the play field.
     
  3. Re: Heboris UE timings for "Old Style" Sega?

    Thanks, that covers those four delays, but it doesn't include gravity. Is there any way to see that?

    And what about modes like Ace-Hell where I can't actually play well enough to see the last level and its timings? Heboris UE doesn't support TAS capabilities like Nullpomino does.

    I'd also like to know the soft drop speed for "Game Boy" style. It's obviously below 1G, but is it 1/2G or 1/3G? If I had Nullpomino's frame advance feature, I could manually count this, but I don't.
     
  4. Re: Heboris UE timings for "Old Style" Sega?

    Gravity should be included in the Show Waits. 20G is 1200, or 20 rows/frame * 60 frames/s = 1200 rows/s. That's ACE-HELL, which maintains the same speed throughout the game (it gets no faster or slower, but the timer gradually decreases).
     
  5. Re: Heboris UE timings for "Old Style" Sega?

    GB Tetris is 1/3G, and -- eye-balling it -- Heboris GB Old Style looks to be the same.

    Here a chunk of logic relating to ACE/Old Style speed curves:
    My understanding thus far is that ACE-Hell corresponds to anothermode[player] == 2. I don't have time to unravel everything right now, but I can see that some of the hidden row logic (which, in ACE-Hell, can be either hidden[player] == 4 or hidden[player] == 5) is dealt with in script/view.c's hiddenProc() method.
     
  6. Zaphod77

    Zaphod77 Resident Misinformer

    Re: Heboris UE timings for "Old Style" Sega?

    The speed for old school should drop at level 10, and should hit 1g at level 15, as I recall. It's a clone of original Sega Tetris, and attempts to behave the same way it does, except for allowing CW rotation.
     
  7. Re: Heboris UE timings for "Old Style" Sega?

    Yes, lvTabletomoyohebo[] in speed.def accounts for this.

     
  8. Re: Heboris UE timings for "Old Style" Sega?

    Thanks everyone. =)

    I'm surprised that they would put Sega speed timings in a different file than the other modes, and especially surprised that the gravity table uses what looks like it should be the Sakura mode table.
     
  9. Re: Heboris UE timings for "Old Style" Sega?

    One of the Sakura modes was based on the original 1989 Sega FlashPoint, I think. They probably just used that as their generic Sega table.

    As for the timings in the code, well... hard-coding magic numbers and spaghetti code ftw! :sowsuser:
     
  10. Re: Heboris UE timings for "Old Style" Sega?

    Thanks for all the info everyone!

    I've been trying to figure out how the "curtain" in Ace-Hell from levels 50 to 149 works. I downloaded the only video I could find of someone clearing it and I'm analyzing it frame by frame to see what happens. I haven't really gotten much yet though.

    So far, I've noticed that the curtain can rise while a piece is still active, so it is not the same as Shirase's garbage (which can only rise during ARE). I'm still trying to figure out when and how the game determines that the curtain will rise. Clearing a line(s) looks like it lowers the curtain by the number of lines cleared, but not always (?). I have no idea if anything unusual happens if the curtain gets to the very top of the screen, since the player never lets it go above 3 rows.

    I've attempted to look through the code, but with very little success.

    Can anyone provide more information?
     
    Last edited: 22 Oct 2015
  11. Re: Heboris UE timings for "Old Style" Sega?

    Here's the data I've gathered so far (levels 6-10, or lines 50-100) from the youtube video.
    Timers for the curtain rising indicate how long has passed since the curtain last rose.

    Enter level 6 (50 lines)
    Timer resets to 25.00
    Clear single (51)
    Clear double (53)
    Clear double (55)
    Curtain rises at 23.08 (1.92 sec)
    Clear tetris (59)
    Curtain rises at 21.85 (1.23 sec)
    Clear double (61)

    Enter level 7
    Timer resets from 21.40 to 25.00
    Clear single (62)
    Clear single (63)
    Curtain rises at 23.46 (1.99 sec)
    Clear single (64)
    Clear double (66)
    Clear double (6B)
    Curtain rises at 21.58 (1.88 sec)
    Clear single (69)
    Clear single (70)

    Enter level 8
    Timer resets from 21.06 to 25.00
    Curtain rises at 24.46 (1.06 sec)
    Clear single (71), curtain does not fall
    Clear single (72)
    Curtain rises at 23.45 (1.01 sec)
    Clear single (73)
    Curtain rises at 23.01 (0.44 sec)
    Clear double (75)
    Curtain rises at 22.06 (0.95 sec)
    Curtain rises at 21.43 (0.63 sec)
    Clear double (77)
    Curtain rises at 20.96 (0.47 sec)
    Clear single (7B)
    Curtain rises at 20.50 (0.46 sec)
    Curtain rises at 19.90 (0.60 sec)
    Clear single (79)
    Curtain rises at 19.30 (0.60 sec)
    Clear single (80), curtain does not fall

    Enter level 9
    Timer resets from 18.68 to 25.00
    Clear single (81)
    Curtain rises at 24.35 (1.27 sec)
    Clear tetris (85)
    Clear double (87)
    Clear single (8B)
    Clear single (89)
    Curtain rises at 22.65 (1.70 sec)
    Clear single (90), curtain does not fall

    Enter level 10
    Timer resets from 22.20 to 25.00
    Clear double (92)
    Clear single (93)
    Clear single (94)
    Curtain rises at 23.51 (1.94 sec)
    Clear single (95)
    Curtain rises at 23.03 (0.48 sec)
    Curtain rises at 22.46 (0.57 sec)
    Clear tetris (99)
    Curtain rises at 21.63 (0.83 sec)
    Clear single (100)

    Enter level 11
    Timer resets from 21.36 to 20.00

    The mechanic is obviously not "raise the curtain if a certain amount of time has passed since the last line clear", since there are instances where the curtain rises less than 0.1 second (4-6 frames at 60 fps) after a line clear.

    It vaguely seems like the curtain is programmed to rise every certain number of frames, where this frame counter moves backward if lines are cleared. Given that all the instances of a line clear not lowering the curtain being singles, it may be because a line clear lowered the curtain by 1 at the same time the frame counter made the curtain rise, thus looking like no net change.

    Even that doesn't quite seem right though, since there are instances where there was a longer delay when no lines were cleared between intervals of the curtain rising than when a number of lines were cleared. This might be related to ARE or line clear delay not advancing the counter or something like that, but given that these delays are so short in Ace-Hell, it would be very difficult to determine precisely.
     
  12. Here are the relevant code segments:
    hiddenProc() is called in a few other functions in gamestart.c -- namely statBlock(), statErase(), and statEraseBlock(). There is a bit of code tangle to unravel to get the full story, but it seems that statBlock() is the frame on which a new piece is spawned (after which you end up in statMove() to control the new piece, unless there is an item effect to handle first) and statErase()/statEraseBlock() are related to line clear. So, unless we come across hiddenProc() calls elsewhere or another place where the timer hiddentm[player] is modified expect that it should increase by one for each piece placed, and potentially by more than one when lines are cleared. Strange.

    Anyway, we can at least see the formula for how many calls to hiddenProc() it takes to raise the curtain another row. When the hidden level is 4, the number of invocations of hiddenProc() it takes to raise the curtain row is 45 plus an additional 30 for each row already covered. For hidden level 5, it takes 30 plus an additional 10 for each row already covered.

    With the calcScore() block, you can see that the number of lines cleared draw the curtain back, and the timer is reset if lines are cleared when the field is completely revealed.
     
  13. I can provide a replay for an ACE-HELL clear, if you want.
    There are, shall we say, surprises past a certain point of the game.
     
  14. If it's not Big mode, please go ahead, that would be very useful. Thanks!

    What surprises are you talking about beyond the curtain at lines 50-149 and the [] monochromatic blocks at lines 150+?

    In a way, this mode is similar to Shirase with its two gimmicks and the fact that it goes beyond the standard ending (past 150 lines in ACE and past 999 levels in TGM).
     

Share This Page