├── .eslintrc.yml
├── .github
├── dependabot.yml
├── html5validator.yml
└── workflows
│ └── check.yml
├── .gitignore
├── LICENSE
├── README.md
├── _404.html
├── _redirects
├── beatstream1.html
├── beatstream2.html
├── bishibashi.html
├── bombergirl.html
├── chuni.html
├── chuniair.html
├── chuniairplus.html
├── chuniamazon.html
├── chuniamazonplus.html
├── chunicrystal.html
├── chunicrystalplus.html
├── chuniparadise.html
├── chuniplus.html
├── chunistar.html
├── chunistarplus.html
├── chusan.html
├── chusannewplus.html
├── chusansun.html
├── chusansunplus.html
├── css
├── file.eot
├── file.svg
├── file.ttf
├── file.woff
└── style.css
├── ddr2013.html
├── ddr2014.html
├── ddra.html
├── ddra20+.html
├── ddra20.html
├── ddra3.html
├── ddrx.html
├── ddrx2.html
├── ddrx3.html
├── docs
├── README.md
├── chuni_offset_finding.md
└── why_no_n_minus_zero.md
├── drs.html
├── futuretone.html
├── gc4ex.html
├── gfdmv4.html
├── gfdmv5.html
├── gfdmv6.html
├── gfdmv7.html
├── gfdmv8.html
├── gfdmxg2.html
├── gfdmxg3.html
├── gitadoraexchain.html
├── gitadorafuzzup.html
├── gitadorahighvoltage.html
├── gitadoramatixx.html
├── gitadoranextage.html
├── gitadoraod.html
├── gitadoratb.html
├── gitadoratbre.html
├── hellopopn.html
├── iidx15djtroopers.html
├── iidx18resortanthem.html
├── iidx19lincle.html
├── iidx20tricoro.html
├── iidx21spada.html
├── iidx22pendual.html
├── iidx23copula.html
├── iidx24sinobuz.html
├── iidx25ballerz.html
├── iidx26rootage.html
├── iidx27heroicverse.html
├── iidx28bistrover.html
├── iidx29casthour.html
├── iidx30resident.html
├── iidx31epolis.html
├── img
├── aaa_beatstream.png
├── aaa_chuni.png
├── aaa_ddr.png
├── aaa_gitadora.png
├── aaa_iidx.png
├── aaa_jubeat.png
├── aaa_museca.png
├── aaa_nostalgia.png
├── aaa_popn.png
├── aaa_reflec.png
├── aaa_sdvx.png
├── beatstream
│ ├── 01.png
│ └── 02.png
├── bishibashi.png
├── bombergirl.png
├── chu
│ ├── ni01.png
│ ├── ni02plus.png
│ ├── ni03air.png
│ ├── ni04airplus.png
│ ├── ni05star.png
│ ├── ni06starplus.png
│ ├── ni07amazon.png
│ ├── ni08amazonplus.png
│ ├── ni09crystal.png
│ ├── ni10crystalplus.png
│ ├── ni11paradise.png
│ ├── ni11paradiselost.png
│ ├── san12.png
│ ├── san13newplus.png
│ ├── san14sun.png
│ └── san15sunplus.png
├── ddr
│ ├── ddr01x.png
│ ├── ddr02x2.png
│ ├── ddr03x3.png
│ ├── ddr04_2013.png
│ ├── ddr05_2014.png
│ ├── ddr06a.png
│ ├── ddr07a20.png
│ ├── ddr08a20+.png
│ └── ddr09a3.png
├── drs.png
├── futuretone.png
├── gc4ex.png
├── gdfm
│ ├── gfdmv4.png
│ ├── gfdmv5.png
│ ├── gfdmv6.png
│ ├── gfdmv7.png
│ ├── gfdmv8.png
│ ├── gfdmxg2.png
│ ├── gfdmxg3.png
│ ├── gitadora2od.png
│ ├── gitadora3tb.png
│ ├── gitadora4tbre.png
│ ├── gitadora5matixx.png
│ ├── gitadora6exchain.png
│ ├── gitadora7nextage.png
│ ├── gitadora8highvoltage.png
│ └── gitadora9fuzzup.png
├── idz.png
├── iidx
│ ├── 15djtroopers.png
│ ├── 18resortanthem.png
│ ├── 19lincle.png
│ ├── 20tricoro.png
│ ├── 21spada.png
│ ├── 22pendual.png
│ ├── 23copula.png
│ ├── 24sinobuz.png
│ ├── 25ballerz.png
│ ├── 26rootage.png
│ ├── 27heroicverse.png
│ ├── 28bistrover.png
│ ├── 29casthour.png
│ ├── 30resident.png
│ └── 31epolis.png
├── jubeat
│ ├── 02ripples.png
│ ├── 04knit.png
│ ├── 05copious.png
│ ├── 06saucer.png
│ ├── 07saucerfulfill.png
│ ├── 08prop.png
│ ├── 09qubell.png
│ ├── 10clan.png
│ ├── 11festo.png
│ └── 12ave.png
├── kancolle.png
├── lpac.png
├── museca
│ ├── 01.png
│ └── 02.png
├── nostalgia
│ ├── op2.png
│ └── op3.png
├── popn
│ ├── 19tunestreet.png
│ ├── 20fantasia.png
│ ├── 21sunny.png
│ ├── 22lapis.png
│ ├── 23eclale.png
│ ├── 24usaneko.png
│ ├── 25peace.png
│ ├── 26riddles.png
│ ├── 27unilab.png
│ └── hellopopn.png
├── reflecbeat
│ ├── 01.png
│ ├── 02limelight.png
│ ├── 03colette.png
│ ├── 05groovinupper.png
│ ├── 07volzza2.png
│ └── 08reflesia.png
├── sdvx
│ ├── 02.png
│ ├── 03.png
│ ├── 04.png
│ ├── 05.png
│ └── 06.png
├── taikonotatsujin.png
└── wacca4reverse.png
├── index.html
├── initialdzero.html
├── js
└── dllpatcher.js
├── jubeatave.html
├── jubeatclan.html
├── jubeatcopious.html
├── jubeatfesto.html
├── jubeatknit.html
├── jubeatprop.html
├── jubeatqubell.html
├── jubeatripples.html
├── jubeatsaucer.html
├── jubeatsaucerfulfill.html
├── kancolle.html
├── lovepluscolorfulclip.html
├── museca1.html
├── museca2.html
├── nostalgiaop2.html
├── nostalgiaop3.html
├── package.json
├── popn19tunestreet.html
├── popn20fantasia.html
├── popn21sunnypark.html
├── popn22lapistoria.html
├── popn23eclale.html
├── popn24usaneko.html
├── popn25peace.html
├── popn26riddles.html
├── popn27unilab.html
├── reflecbeat-colette.html
├── reflecbeat-groovin-upper.html
├── reflecbeat-limelight.html
├── reflecbeat-reflesia.html
├── reflecbeat-volzza2.html
├── reflecbeat.html
├── sdvx2.html
├── sdvx3.html
├── sdvx4.html
├── sdvx5.html
├── sdvx6.html
├── taikonotatsujin.html
└── waccareverse.html
/.eslintrc.yml:
--------------------------------------------------------------------------------
1 | plugins:
2 | - html
3 | env:
4 | browser: true
5 | es2021: true
6 | overrides: []
7 | parserOptions:
8 | ecmaVersion: latest
9 | rules: {}
10 |
--------------------------------------------------------------------------------
/.github/dependabot.yml:
--------------------------------------------------------------------------------
1 | # Set update schedule for GitHub Actions
2 |
3 | version: 2
4 | updates:
5 |
6 | - package-ecosystem: "github-actions"
7 | directory: "/"
8 | schedule:
9 | # Check for updates to GitHub Actions every week
10 | interval: "weekly"
11 |
--------------------------------------------------------------------------------
/.github/html5validator.yml:
--------------------------------------------------------------------------------
1 | root: ./
2 | ignore_re:
3 | - 'An "img" element must have an "alt" attribute, except under certain conditions'
4 | - 'Element "div" not allowed as child of element "label" in this context'
5 | - 'The "center" element is obsolete. Use CSS instead' # initialdzero
6 |
--------------------------------------------------------------------------------
/.github/workflows/check.yml:
--------------------------------------------------------------------------------
1 | name: Check HTML/JS is valid
2 |
3 | on:
4 | pull_request:
5 | push:
6 |
7 | jobs:
8 | build:
9 | runs-on: ubuntu-latest
10 | steps:
11 | - uses: actions/checkout@v4
12 | - name: Run HTML5 Validator
13 | uses: Cyb3r-Jak3/html5validator-action@v7.2.0
14 | with:
15 | config: ./.github/html5validator.yml
16 | css: true
17 | - name: Install modules for eslint
18 | run: npm i
19 | - name: Run ESLint
20 | run: npx eslint . --ext .js,.html
21 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 | package-lock.json
3 | /.vs
4 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2017
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # BemaniPatcher
2 | A tool to easily apply known hex edits to any binary, with examples for Bemani games.
3 |
4 | Should work on most modern browsers.
5 |
6 | Live version hosted [on my website](https://mon.im/bemanipatcher/).
7 |
8 | ## Asking about new patches
9 | These days, I do not create the patches. Everything is community submitted.
10 | If you would like new hex edits, make them yourself and make a pull request!
11 |
12 | ## Patch rules
13 | - No n-0 newer than 1 year ago. [Why?](docs/why_no_n_minus_zero.md)
14 | - *New for 2023* PC based arcade games only. The main focus is rhythm games though!
15 | - No autoplay patches
16 | - It is far too easy to accidentally get people banned from their networks
17 | - It's mainly used to upload autoplays to YouTube, which is not something I want to be involved with
18 |
19 | ## Submitting a new game
20 | Here is your checklist:
21 | - Add the new game html, it is easiest to copy an existing game and modify it.
22 | The html should be named `[game][release].html` except IIDX because they just
23 | happen to be `[release].html` only...
24 | - Modify the `
` tag and the `
` tag to the name of the new game.
25 | - Modify the patcher for the new DLL names/patches.
26 | - Keep consistent indentation for the new patches. I will have to fix your PR if
27 | it contains poor formatting, which will delay the merging process.
28 | - Modify `index.html` to add the new game. Sorting: alphabetical by game series,
29 | then in release order per game.
30 | - Add a game image. 128x128px PNG files, please. Any blank space should be
31 | either white or transparent.
32 |
33 | If your pull request is a single commit, I will rebase and merge. If it is
34 | multiple commits, I will squash and merge.
35 |
36 | Please do not worry about submitting "bad" PRs. If there is something wrong, I
37 | will tell you how to fix it or I will fix it myself before merging.
38 |
--------------------------------------------------------------------------------
/_404.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | 404
7 |
25 |
26 |
27 |
28 |
Not found...
29 |
30 | I recently moved to a new web host.
31 | If you think something should be at this address,
32 | please get in touch.
33 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/_redirects:
--------------------------------------------------------------------------------
1 | # Over time, some patchers have changed path due to reorganisation and cleanup.
2 | # This avoids link rot on mon's server by redirecting the old paths to the new ones
3 |
4 | /chuninewplus.html /chusannewplus.html 301
5 |
6 | /resort_anthem.html /iidx18resortanthem.html 301
7 | /resortanthem.html /iidx18resortanthem.html 301
8 | /lincle.html /iidx19lincle.html 301
9 | /tricoro.html /iidx20tricoro.html 301
10 | /spada.html /iidx21spada.html 301
11 | /pendual.html /iidx22pendual.html 301
12 | /copula.html /iidx23copula.html 301
13 | /sinobuz.html /iidx24sinobuz.html 301
14 | /ballerz.html /iidx25ballerz.html 301
15 | /rootage.html /iidx26rootage.html 301
16 | /heroicverse.html /iidx27heroicverse.html 301
17 | /bistrover.html /iidx28bistrover.html 301
18 | /casthour.html /iidx29casthour.html 301
19 | /resident.html /iidx30resident.html 301
20 |
--------------------------------------------------------------------------------
/beatstream1.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | BeatStream DLL Modder
6 |
7 |
8 |
29 |
30 |
31 |
68 |
69 |
70 |
--------------------------------------------------------------------------------
/docs/README.md:
--------------------------------------------------------------------------------
1 | # What is this folder?
2 |
3 | Did you spend ages getting a hex edit working? Do you want to document your
4 | process somewhere so you don't forget?
5 |
6 | Perhaps you found a really cool way to find new timer-freeze patches for all
7 | games, or some audio trick that helps identify stuff. Make a .md file for your
8 | game or technique and put it here so the knowledge is not lost.
9 |
--------------------------------------------------------------------------------
/docs/chuni_offset_finding.md:
--------------------------------------------------------------------------------
1 | # Notes on updating offsets for Crystal Plus
2 |
3 | Windows 7 patch is missing.
4 |
5 | Steps to determine these values:
6 |
7 | 1. Take old values from crystal
8 | 1. Use IDA's "Jump" -> "Jump to file offset..." feature to convert the file addresses to virtual memory addresses
9 | 1. Take chunithm crystal plus executable
10 | 1. Use virtual memory addresses from crystal, same spot is likely close to old one
11 | 1. Use some more instructions/bytes around the offsets from crystal to find same patterns on crystal plus
12 | 1. Check if disassembly area is identical regarding the change
13 | 1. At the bottom left of the disassembly text view, you see something like this: `00905500 | 00D06100: sub_D06100 (Synchronized with Hex View-1)`. The first address is the raw file address, the second one is the virtual address when loaded into memory
14 | 1. Take the first address once you found the exact same spot in chunithm crystal
15 |
16 | Format below for addresses: crystal file address -> crystal virtual address -> crystal plus virtual address -> crystal plus file address
17 |
18 | ```
19 | Allow 127.0.0.1/localhost as the network server",
20 | 0x905500 -> 00D06100 -> 00D97F80 -> 00997380
21 | 0x16CE988 -> 01AD0388 -> 01B17E80 -> 01717080
22 |
23 | "Disable shop close lockout",
24 | 0x92D153 -> 00D2DD53 -> 00DBF6D3 -> 009BEAD3
25 |
26 | "Force shared audio mode, system audio samplerate must be 48000",
27 | 0xCD470A -> 010D530A -> 010F26BA -> 00CF1ABA
28 |
29 | "Force 2 channel audio output",
30 | 0xCD47E1 -> 010D53E1 -> 010F2791 -> 00CF1B91
31 |
32 | "Patch for Windows 7",
33 | 0x1A404E8 -> jump failed
34 | 0x1A404F1 -> jump failed
35 |
36 | "Disable Song Select Timer",
37 | 0x748FE2 -> 00B49BE2 -> 00B669C2 -> 00765DC2
38 |
39 | "Set All Timers to 999",
40 | 0x5FC300 -> 009FCF00 -> 00A14870 -> 00613C70
41 |
42 | "Better patch for head-to-head play",
43 | 0x464DB3 -> 008659B3 -> 00879A03 -> 00478E03
44 |
45 | Increase max credits to 254",
46 | 0xC204B7 -> 010210B7 -> 01094767 -> 00C93B67
47 |
48 | "Free Play",
49 | 0xC208D5 -> 010214D5 -> 01094B85 -> 00C93F85
50 |
51 | "Dummy LED",
52 | 0x2499D7 -> 0064A5D7 -> 0064A5D7 -> 002499D7
53 | ```
54 |
--------------------------------------------------------------------------------
/docs/why_no_n_minus_zero.md:
--------------------------------------------------------------------------------
1 | # What does n-0 mean?
2 | "n-0" is part of a common nomenclature in the arcade scene referring to
3 | freshness of data. "n-0" (n minus zero) is the current game release, like a
4 | mathematical equation. "n-1" is the previous game release. Rarely you will see
5 | "n+1" where the next, unreleased version of a game is leaked early.
6 |
7 | A time can also be added to specify lengths instead of versions. For example,
8 | "n-6 months" or "n-1 year".
9 |
10 | # Why no n-0 in Bemanipatcher?
11 |
12 | The original policy of this repo was to accept any patch set that looked sane
13 | and had consistent style, to be a "global" repository for all games that had
14 | been released. Sometimes some private release would have hex edits appear as a
15 | PR, so I accepted them because I didn't want to get into the drama of "why does
16 | he have data but I don't".
17 |
18 | In mid 2021, some groups decided they'd start leaking the latest updates for
19 | pretty much every game under the sun. In addition to being a hugely
20 | irresponsible idea (Sega is especially litigious), this produced a lot of noise
21 | in PRs from people hastily trying to port edits.
22 |
23 | I have had several terrible PRs submitted that I have had to revert. These
24 | include:
25 | - Broken patches
26 | - Misattributed sources
27 | - Totally-fine patch sets where I immediately received a Discord DM saying "I
28 | didn't want that to be public, delete it please"
29 | - PRs opened and closed almost immediately by someone reconsidering
30 | - PRs opened, merged and then reverted by the original uploader
31 |
32 | As such, this repo now has a new rule: No n-0, unless it is more than a year
33 | old.
34 |
35 | # When is n-0 OK? Why is day-old n-1 OK?
36 | In addition to the obvious frustration I have with all these junk PRs, read on
37 | for some moral soapboxing as to why you should reconsider public n-0.
38 |
39 | **Remember: this is my own opinion.** I like to think it's a fairly common one. You are welcome to disagree with me, but it won't change the policy.
40 |
41 | Why the year rule? When a new game comes out, why is the n-1 from yesterday
42 | suddenly OK? There are two important aspects to my reasoning: Acting in good
43 | faith, and preservation.
44 |
45 | You have to remember that rhythm games are an extremely niche market when
46 | compared to all other game formats. Arcade rhythm games are even more niche, and
47 | critically, comprise a different payment model (credits vs gacha/one-time-buy).
48 |
49 | Compared to huge MOBAs and FPS games where the majority just pays and plays the
50 | game, the at-home-arcade community *is* big enough to cause financial problems
51 | if they all stay at home, which is why we've seen COVID hit Sega hard enough to
52 | start closing flagship arcades in Akihabara.
53 |
54 | I have heard firsthand from arcade operators that as soon as home-data is
55 | released that matches or exceeds the version in their arcade, attendance drops
56 | sharply. After all, with no commute and no credits, playing at home on your ASC
57 | is usually good enough.
58 |
59 | So the first point, acting in good faith. By releasing old data, you minimise
60 | depriving arcade operators of their income. Whether it's in Japan and the coins
61 | go straight to Konami, or you're in Europe and they fund your local arcade's
62 | next cab purchase, it's critical to actually financially support the games in
63 | this niche.
64 |
65 | Adding the 1 year specifier is for games like Jubeat and Reflecbeat - games that
66 | have not seen a new release in years. I believe it's acting in good faith to
67 | release year old data. If there's been literally no updates in a year... That's
68 | on Konami for abandoning a property.
69 |
70 | The second aspect is preservation. Except for buying an offline cab and hoping
71 | it has the right version (good luck), there is simply no way to legitimately
72 | play old releases of these games. This is why n-1 suddenly becomes "good" once
73 | the next version of the game is released. So much digital history has been lost
74 | due to bitrot and always-online games becoming unplayable. I like the idea of
75 | being able to play every game in a series ever released.
76 |
77 | # Why did you write all this?
78 | A lot of people who share my opinion like to loudly flame newcomers thirsty for
79 | the latest data, chastising them for not innately knowing the correct etiquette.
80 | This is my attempt to explain where my opinions come from. If it's useful to
81 | even 1 person, it's done its job.
82 |
--------------------------------------------------------------------------------
/gc4ex.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Groove Coaster 4EX Modder
6 |
7 |
8 |
99 |
100 |
101 |