Logo

The DDR Research Master Thread - UPDATED 2023-04-15 - Minor Addition - SOME DDR GB1 Memory Addresses

Register Log In Back To Forums

Post #381 · Posted at 2023-05-16 01:22:06am 1 year ago

Offline Peter Lawrence
Peter Lawrence Avatar Member
95 Posts
United Kingdom
Reg. 2010-05-04

"Still breathing"
Quote: Arcorann
So, about DDR Extreme AC's timing windows...
What would the table look like at 50hz for PAL home versions of the game?

Post #382 · Posted at 2023-05-16 08:55:50am 1 year ago

Offline Arcorann
Arcorann Avatar Member
59 Posts
Not Set
Reg. 2015-01-29

Quote: travelsonic
Quote: Arcorann

If Sesse's analysis is correct, we should observe some jitter in judgement evaluations in game, since the windows are not an integer number of frames. By aligning 150 Hz ticks with 60 Hz frames, we are able to enumerate all the possibilities of frame alignment:

POardon me if this is a silly question, or if I am misunderstanding, but basically, its based off of ticks and refresh rate, rather than straight frames? (again, perhaps a suilly question, my brain isn't working right this morning haha)
Basically, yes. Quoting Sesse from the post I linked earlier:

Quote: Sesse
When the software wants to time a step, it asks the MAS3507D chip (the MP3 decoder on the digital I/O board) how many samples it has played, and divides that by 294. Since the MP3s are in 44100 Hz, this means that the timing window resolution is 1 / 150 sec = 6.667 ms. This is the same internal resolution as the DDR Extreme uses in its SSQ files. (Caveat: I don't know whether the step is sampled at the instant the user steps on the pad, or whether the timer is just sampled every video frame. I do suspect it's the latter, which suggests that there would be significant jitter in the timing, which again could be what people have interpreted as “the timing windows are in frames”.)

I can't test their last comment (i.e. when the step is sampled) at the moment due to the limitations of MAME (i.e. one input per frame); doing so would require a lot more debugging than I have time for. Maybe I should add a note to that effect into the previous post.

Quote: Peter Lawrence
Quote: Arcorann
So, about DDR Extreme AC's timing windows...
What would the table look like at 50hz for PAL home versions of the game?
Haven't looked at any home versions yet, but I believe their timing windows are different from arcade.

Post #383 · Posted at 2023-05-16 01:52:39pm 1 year ago

Offline MarsPhoenix
MarsPhoenix Avatar Member
649 Posts
Not Set
Reg. 2007-12-08

Nice job on the timing window stuff! Any idea how long a freeze arrow can be let go of before it drops? I've always wondered that one.

Post #384 · Posted at 2023-05-17 10:31:00am 1 year ago

Offline Arcorann
Arcorann Avatar Member
59 Posts
Not Set
Reg. 2015-01-29

Did a quick frame count on Extreme AC: the freeze drops if it's let go for 16 consecutive frames (or 267ms, rounded to nearest ms). Didn't go into more detail.

Post #385 · Posted at 2023-05-19 10:02:44pm 1 year ago

Offline PlasmaVenom
PlasmaVenom Avatar Member
35 Posts
Chile
Reg. 2008-04-21


Last updated: 2023-05-19 10:15pm
Quote: Arcorann
So, about DDR Extreme AC's timing windows. I was rereading Sesse's post from about 7 pages back and 3 years ago, and decided that we could put more work into checking this.

Started off by wanting to verify the numbers listed. Conveniently, this Aaron in Japan forum thread from 2004 has the same numbers, but Taren was unable to work out the correct interpretation.

I've located them now in GAME.DAT: offset 0x085DB8 for the early windows and 0x085DD4 for the late windows.

If Sesse's analysis is correct, we should observe some jitter in judgement evaluations in game, since the windows are not an integer number of frames. By aligning 150 Hz ticks with 60 Hz frames, we are able to enumerate all the possibilities of frame alignment:

https://cdn.discordapp.com/attachments/739814736421715988/1107117490229760101/image.png

These are theoretical but fairly easy to verify with MAME; I've only verified column 5 so far, but it shouldn't be hard to get the rest.

EDIT: Verified columns 2 and 5.

--------

Also, here are the correct conversions into milliseconds:

Marvelous: -16.667 ~ +16.667
Perfect: -30.000 ~ +30.000
Great: -90.000 ~ +76.667
Good: -130.000 ~ +116.667
Boo: -156.667 ~ +183.333

--------

Figured I might as well search for timing windows in other arcade mixes, starting with 5thMIX. In GAME.DAT offset 0x0660E0: FC FF FF FF F3 FF FF FF ED FF FF FF E9 FF FF FF (-4, -13, -19, -23); offest 0x0660F8: 04 00 00 00 0B 00 00 00 11 00 00 00 1B 00 00 00 (4, 11, 17, 27). These are the same as Extreme except without the Marvelous window.

Hi! I have some question about the timing study. I hope you can help me.

Effectively, I found the timing windows values in GAME.DAT file, but my first question is: What mean these values? For example, for marvelous judgement, what is the meaning of the values -2 and 2? I thought these values mean the number of frame that, in case of press the pad just at time, give marvelous judgement. However, I don't understand the "frame" or "tick" concepts, and I will be very appreciate if you can explain these things for undertanding this study better than before.

Another question is about your alignment table. How do you obtained this? How to interpreter this table values? For example, in my ignorance, if I follow the second column, I think if I press the pad early, then will be impossible that I get perfect judgement, because in negative cases (I assume negative values as early stepping) "perfect" judgement don't appears.

Sorry if this is very basic, but I want to learn for understanding this topic about timing values and how the game works in this sense.

Post #386 · Posted at 2023-05-21 12:57:38pm 1 year ago

Offline Arcorann
Arcorann Avatar Member
59 Posts
Not Set
Reg. 2015-01-29

There's been a lot of confusion in the past, so I'll write it up now in dot points. Most of this is based on Sesse's post.

* First off, the time of the input is measured in units of 1/150 sec. These are what I refer to as ticks.
* This follows from Sesse's description, in which the time is obtained by dividing the sample count (measured in 44100 Hz) by 294. As observed by Sesse, the same unit is used in the timing sections of the SSQ files which define stepcharts.
* Next, this time is compared with the time of the arrow, also measured in 1/150 sec ticks. Let the difference (time of step minus time of arrow) be d.
* The difference d is compared with the timing windows. These timing windows are checked inclusively; thus, if -2 <= d <= 2, then the step is Marvelous, if -5 <= d <= 5, the step is Perfect, and so on.
* If we consider the fact that times are rounded to the nearest tick, the Marvelous windows is really -2.5/150 sec to +2.5/150 sec, or -16.667 ms to +16.667 ms, and similarly for the other timing windows (as specified in my earlier post).
* However, since the game runs at 60 fps and 60 does not divide evenly into 150, there is variable alignment between ticks and frames. The common unit of 1/60 and 1/150 is 1/300, so given the first frame that falls within the Marvelous window, it can be aligned in one of five ways, spaced 1/300 sec apart. Here's part of a diagram that shows how this works out:

https://i.ibb.co/41zLjBS/image.png

The first row corresponds to the timing windows in ticks. Each "x" corresponds to when a frame's input is read, while each row corresponds to a possible alignment (offset by 1/300 sec each). Depending on the alignment we may get more or fewer x's falling within each window. I hope that makes sense.

Post #387 · Posted at 2023-05-26 04:40:48pm 1 year ago

Offline travelsonic
travelsonic Avatar Member
190 Posts
Not Set
Reg. 2006-10-18


Last updated: 2023-05-26 04:44pm
God, times like this where I wish comments could have ratings (even emoji-based ratings) like some forums (in general) have, as these posts, the work done, the information unearthed, the quality of the research and discussion has been outstanding/it'd be cool to have even a smaller way to signal that w/o making a dorky comment in the thread heh.

The more eyes the better when it comes to getting these games - C/S, AC, 1st gen, current gen, whatever, reverse engineered.

Just wish IRL hadn't/ been so hectic/remained so hectic, as I'd love to be there with y'all doing more than I have in recent months haha.

Maybe some day some of us should start the equivalent for DDR games to what the Sonic the Hedgehog community had with the SSRG in the late 1990s / early 2000s, dedicated spaces for research, reverse engineering, etc. (God, just mentioning the original SSRG makes me feel old Laughing Out Loud )

Post #388 · Posted at 2023-05-26 06:36:24pm 1 year ago

Offline n00b_saib0t
n00b_saib0t Avatar Member
2,327 Posts
United States
Reg. 2007-02-05

Nintendo Network ID: n00bsaib0tNintendo Switch Friend Code: SW-7875-2425-72033DS Friend Code: 4871-6557-4900
"F***ing exhausted."
Am I understanding this chart right, that depending on when the song starts depends on which row of “ticks” you get? So if a song starts on the first row of ticks you don’t have a late Perfect window at all? And the second row has no early Perfect window? Or is it per arrow during the song? Either way, the idea of not having one side of Perfect is brutal.
Quote: sharibetsu in The Unwritten Rules of ZIv thread
Any popular thread must have at least one debate between n00b_saib0t and someone else.

Post #389 · Posted at 2023-05-28 08:50:46am 1 year ago

Offline Arcorann
Arcorann Avatar Member
59 Posts
Not Set
Reg. 2015-01-29


Last updated: 2023-05-29 07:31am
Quote: travelsonic
God, times like this where I wish comments could have ratings (even emoji-based ratings) like some forums (in general) have, as these posts, the work done, the information unearthed, the quality of the research and discussion has been outstanding/it'd be cool to have even a smaller way to signal that w/o making a dorky comment in the thread heh.

The more eyes the better when it comes to getting these games - C/S, AC, 1st gen, current gen, whatever, reverse engineered.

Just wish IRL hadn't/ been so hectic/remained so hectic, as I'd love to be there with y'all doing more than I have in recent months haha.

Maybe some day some of us should start the equivalent for DDR games to what the Sonic the Hedgehog community had with the SSRG in the late 1990s / early 2000s, dedicated spaces for research, reverse engineering, etc. (God, just mentioning the original SSRG makes me feel old Laughing Out Loud )

Thanks. To be honest I think it's likely there are people doing DDR research work that we (the people in this thread) haven't had contact with -- for example, whoever made DDR Extreme Pro Clarity surely knows more about the timing code than I do (I haven't even tried to look at it), and the current version of Outfox (formerly Stepmania 5.3) has timing windows which were supposedly extracted directly from DDR A.

Incidentally, here are said timing windows (note the code block doesn't seem to be handling indentation properly). They're basically the same as 5th-Extreme but symmetric and in milliseconds rounded up. I don't know whether it's interpreted the same by the actual DDR game as in Stepmania though.

EDIT: Except for the Perfect window, which is somewhat wider (basically the two frame half-width all the theories had). Don't know why (maybe it was supposed to be like this all along but using 1/150 second ticks made it impossible to define properly? Hmmm)

TimingWindow[#TimingWindow+1] = function()
return {
Name = "DDR",
Timings = {
['TapNoteScore_W1']=0.0170, -- Marvelous
['TapNoteScore_W2']=0.0340, -- Perfect
['TapNoteScore_W3']=0.0840, -- Great
['TapNoteScore_W4']=0.1240, -- Good
['TapNoteScore_W5']=0.1600, -- Boo
['TapNoteScore_HitMine']=0.0900, -- Dunno this value, use Original.
['TapNoteScore_Attack']=0.1350, -- Dunno this value, use Original.
['TapNoteScore_Hold']=0.2500, -- Dunno this value, use Original.
['TapNoteScore_Roll']=0.5000, -- Dunno this value, use Original.
['TapNoteScore_Checkpoint']=0.1664, -- Dunno this value, use Original.
}
}
end


Quote: n00b_saib0t
Am I understanding this chart right, that depending on when the song starts depends on which row of “ticks” you get? So if a song starts on the first row of ticks you don’t have a late Perfect window at all? And the second row has no early Perfect window? Or is it per arrow during the song? Either way, the idea of not having one side of Perfect is brutal.

This is per arrow (and hence depends on the song BPM). To clarify a little, this occurs because each part of the window is less than a frame wide, so if you poll once a frame it's possible to miss the 0.8 frame window. (That's assuming the game does indeed poll once a frame, which I don't have information on for hardware, but is true in emulators.)

Post #390 · Posted at 2023-05-30 01:50:04pm 1 year ago

Offline travelsonic
travelsonic Avatar Member
190 Posts
Not Set
Reg. 2006-10-18

Quote: Arcorann

Thanks. To be honest I think it's likely there are people doing DDR research work that we (the people in this thread) haven't had contact with -- for example, whoever made DDR Extreme Pro Clarity surely knows more about the timing code than I do (I haven't even tried to look at it), and the current version of Outfox (formerly Stepmania 5.3) has timing windows which were supposedly extracted directly from DDR A.

Definitely getting the vibe that whatever exists, there certainly are groups that are more isolated, if not underground except for what the release publicly - which IMO is more the reason to push for some form of combination of resources (that and to prevent any knowledge from actually being lost).

Post #391 · Posted at 2023-05-30 08:04:21pm 1 year ago

Offline PlasmaVenom
PlasmaVenom Avatar Member
35 Posts
Chile
Reg. 2008-04-21

Quote: Arcorann
There's been a lot of confusion in the past, so I'll write it up now in dot points. Most of this is based on Sesse's post.

* First off, the time of the input is measured in units of 1/150 sec. These are what I refer to as ticks.
* This follows from Sesse's description, in which the time is obtained by dividing the sample count (measured in 44100 Hz) by 294. As observed by Sesse, the same unit is used in the timing sections of the SSQ files which define stepcharts.
* Next, this time is compared with the time of the arrow, also measured in 1/150 sec ticks. Let the difference (time of step minus time of arrow) be d.
* The difference d is compared with the timing windows. These timing windows are checked inclusively; thus, if -2 <= d <= 2, then the step is Marvelous, if -5 <= d <= 5, the step is Perfect, and so on.
* If we consider the fact that times are rounded to the nearest tick, the Marvelous windows is really -2.5/150 sec to +2.5/150 sec, or -16.667 ms to +16.667 ms, and similarly for the other timing windows (as specified in my earlier post).
* However, since the game runs at 60 fps and 60 does not divide evenly into 150, there is variable alignment between ticks and frames. The common unit of 1/60 and 1/150 is 1/300, so given the first frame that falls within the Marvelous window, it can be aligned in one of five ways, spaced 1/300 sec apart. Here's part of a diagram that shows how this works out:

https://i.ibb.co/41zLjBS/image.png

The first row corresponds to the timing windows in ticks. Each "x" corresponds to when a frame's input is read, while each row corresponds to a possible alignment (offset by 1/300 sec each). Depending on the alignment we may get more or fewer x's falling within each window. I hope that makes sense.

Thank you very much for your explanation! It's incredible to know all these details about the timing in EXTREME.

Do you think it would be possible to know, in a stepchart, which row of your table corresponds to each arrow? In that case, would it be necessary to calculate the time in seconds for each arrow or something like that? I ask you the last thing because I would like to implement something like this in Stepmania, for example, with some EXTREME song, expanding or reducing the timing windows depending on the moment of the song. Maybe with that I can get a little closer to the timing sensation of EXTREME at Stepmania.

Post #392 · Posted at 2023-05-31 09:15:29am 1 year ago

Offline Arcorann
Arcorann Avatar Member
59 Posts
Not Set
Reg. 2015-01-29


Last updated: 2023-05-31 09:24am
I think I've put far too much emphasis on how the frames line up with the timing windows (it really was just a note so that it was easier to check on MAME). The whole thing boils down to "poll at 60 Hz when timing windows aren't a multiple of 1/60 sec and jitter happens". Hell, we *already know* about this phenomenon (though it's usually in the context of using 125 Hz keyboards with StepMania).

Thus, if you'd like to replicate this just simulate polling at 60 Hz somehow.

But before that -- low hanging fruit. Have you tried just putting in the correct Extreme timing windows? Assuming you don't mind them being symmetric, you can put in 0.01666, 0.03000, 0.08333, 0.123333, 0.170000 as W1 to W5 respectively.

Post #393 · Posted at 2023-05-31 11:28:11am 1 year ago

Offline n00b_saib0t
n00b_saib0t Avatar Member
2,327 Posts
United States
Reg. 2007-02-05

Nintendo Network ID: n00bsaib0tNintendo Switch Friend Code: SW-7875-2425-72033DS Friend Code: 4871-6557-4900
"F***ing exhausted."
Wouldn’t it be 0.016 and 0.032 for Marvelous and Perfect? If perfect is one frame split in half on either side of marvelous then the number should double exactly.
Quote: sharibetsu in The Unwritten Rules of ZIv thread
Any popular thread must have at least one debate between n00b_saib0t and someone else.

Post #394 · Posted at 2023-06-01 12:27:56pm 1 year ago

Offline Arcorann
Arcorann Avatar Member
59 Posts
Not Set
Reg. 2015-01-29


Last updated: 2023-06-01 12:28pm
Quote: n00b_saib0t
Wouldn’t it be 0.016 and 0.032 for Marvelous and Perfect? If perfect is one frame split in half on either side of marvelous then the number should double exactly.
Ah, but it's not one frame, it's 2 ticks at 150 Hz (0.8 frames). Did you see the post by Sesse I linked a few times?

Post #395 · Posted at 2023-06-01 02:21:05pm 1 year ago

Offline n00b_saib0t
n00b_saib0t Avatar Member
2,327 Posts
United States
Reg. 2007-02-05

Nintendo Network ID: n00bsaib0tNintendo Switch Friend Code: SW-7875-2425-72033DS Friend Code: 4871-6557-4900
"F***ing exhausted."
Quote: Arcorann
Quote: n00b_saib0t
Wouldn’t it be 0.016 and 0.032 for Marvelous and Perfect? If perfect is one frame split in half on either side of marvelous then the number should double exactly.
Ah, but it's not one frame, it's 2 ticks at 150 Hz (0.8 frames). Did you see the post by Sesse I linked a few times?
Yeah I saw it, I just didn’t say anything at the time. Taren on Aaron In Japan used to mess with the timing windows back in the day, like Extreme JP PS2 with arcade timing and stuff like that, and he always said the timing windows were in frames. Everyone else on the internet says the timing windows are in frames and it’s still frame based today. I play StepMania on Judge 6 (30ms perfect) and it’s harder than actual DDR for sure, it reflects in my scores.
Quote: sharibetsu in The Unwritten Rules of ZIv thread
Any popular thread must have at least one debate between n00b_saib0t and someone else.

Post #396 · Posted at 2023-06-03 12:10:27pm 1 year ago

Offline Arcorann
Arcorann Avatar Member
59 Posts
Not Set
Reg. 2015-01-29

Which DDR are you thinking of? As I posted above, the Perfect window is wider in A compared to Extreme (34ms vs 30ms).

At any rate, the behaviour I've observed by using frame advance and savestates in MAME is perfectly consistent with what I derived from Sesse's post, you're welcome to try it yourself if you want (PCSX2 has frame advance as well).

Post #397 · Posted at 2023-06-17 07:28:49pm 12.1 months ago

Offline Peter Lawrence
Peter Lawrence Avatar Member
95 Posts
United Kingdom
Reg. 2010-05-04

"Still breathing"
Hey I'm bringing up what I believe of origin of DDRs 150hz tic rate. It is the sector read speed of the 2x CD-ROM drive found in the PlayStation and 573.

Post #398 · Posted at 2023-09-16 09:23:07pm 9.1 months ago

Offline Wan
Wan Avatar Member
412 Posts
Chile
Reg. 2008-01-13

"I want to change my username =("
Somewhat related....

Has someone thought in developing a standalone SSQ player (and, even better, editor)?
I converted a SM file to SSQ (using WindyFairy's ddrcharttools) and the resulting chart doesn't work in Extreme... even though it's supposed to be fine.
I need to test if the SSQ file is borked or if DDR Extreme has a hardcoded song length limit... because of course the song I converted is a long one (Let's Get Away Full Version).

Post #399 · Posted at 2023-12-14 06:12:16pm 6.1 months ago

Offline SpyHunter29
SpyHunter29 Avatar Member
338 Posts
United States
Reg. 2008-06-09

Does anyone know how DDR 1st, and by extension the other PS1-era DDR games, select which dance animations are performed by the characters? As you know, 1st Mix has icons on the bottom of the screen indicating what routine the character(s) is/are performing. There are only two of these I haven't seen myself, Funk and Wave. I think it has to do with what characters you select (of the whopping three pairs available) and how well you're doing at certain points in the song, but I haven't been able to lock it down so far.

I ask because I'm trying to dump textures from the PS1 games, which involves having them saved as they are loaded and shown on-screen.
98% of teenagers do or have tried caving into peer pressure. If you're one of the 2% who hasn't, DO NOT copy & paste this in your signature.
Register Log In Back To Forums

0 User(s) Viewing This Thread (Past 15 Minutes)

©2006-2024 Zenius -I- vanisher.com -5th style- IIPrivacy Policy
Web Server: 6% · Database: 4% · Server Time: 2024-06-16 07:57:20
This page took 0.022 seconds to execute.
Theme: starlight · Language: englishuk
Reset Theme & Language