lifthrasiir / angolmois Goto Github PK
View Code? Open in Web Editor NEWAngolmois BMS player [mirror repository from hg.mearie.org and bitbucket.org/lifthrasiir/angolmois]
Home Page: http://mearie.org/projects/angolmois/
Angolmois BMS player [mirror repository from hg.mearie.org and bitbucket.org/lifthrasiir/angolmois]
Home Page: http://mearie.org/projects/angolmois/
Effects:
NOTE_type
will have the fifth type BOMB = 4
NOTE
and LN{START,DONE}
if BOMB
is present, INVNOTE
is still kept as it can be used as a custom bomb sound (somehow)pcur
adjustment, but may have to be independent due to lag resilienceupdate_grade
requires the third argument for the amount of gauge decreasetkeykinds
will have dummy sprites only used to render bombs (different color but same width)Actually not quite hard as it sounds (it is similar to INVNOTE
in terms of processing) but can be annoying to implement.
This isn't really an issue, but not being able to change keys easily is big let down for me. It'd be easier if this have something like a configuration file so that we can easily change the keys.
How do I use the environment variables to change the keys? Do I really have to edit every single BMS files that I want to play with my own keys? That sounds ridiculous to me.
This warning message appears when I compile.
I don't know what string arg does but the warning sign worries me.
not a blocker so far.
E.g. alternately pressing left shift and ctrl should key-up each other
Needs something like XV(struct rndst { int sw, rnd, els; }) rndbuf;
.
At least the minimal width of panels should be enforced.
Mostly trivial.
Inspired from Hitkey's diary entry:
- It is possible to reuse
#xxx[1-2][A-Z]
which is normally unused by BMS files as a spacer for layout.
- Separator between 1P and 2P, scratch on the right hand side, 10KEYS:
angolmois -w -K '11a 12b 13a 14b 15a 16s 1Zs' '21a 22b 23a 24b 25a 26s'
- Separator between 1P and 2P, 14KEYS:
angolmois -w -K '16s 11a 12b 13a 14b 15a 18b 19a 1Zs' '21a 22b 23a 24b 25a 28b 29a 26s'
- Simulated Couple Play rendering for Double Play charts using
#PLAYER 3
:
angolmois -w -B -K '11a 12b 13a 14b 15a 16s 1Aa 1Bs 1Cs 1Ds 1Es 1Fs 1Gs 1Hs 1Is 1Js 1Ks' '21a 22b 23a 24b 25a 26s'
- I also wish these options:
--no-combo
: No combo display--half
: Half-line display (* each lane overlaps with previous/next lanes by half the lane width)
It would be good to have an explicit "gap" specification in --key-spec
:
Example 1: angolmois -w -K '11a 12b 13a 14b 15a 16s' '(40) 21a 22b 23a 24b 25a 26s'
Example 2: angolmois -w -K '16s 11a 12b 13a 14b 15a 18b 19a' '(40) 21a 22b 23a 24b 25a 28b 29a 26s'
Example 3: angolmois -w -B -K '11a 12b 13a 14b 15a 16s' '(450) 21a 22b 23a 24b 25a 26s'
If we are careful enough, --half
can be simulated as follows:
--key-spec '11a (-12) 12b (-12) 13a (-12) 14b (-12) 15a 16s'
adjust_object_position
(converts virtual measure not affected by #xxx02
to actual measure) is stupid, we should precalculate or at least cache actual measures. The problem is that we can't really resolve them until parse_bms
ends.
Refer http://hitkey.nekokan.dyndns.info/diary1301.php#D130118. Under investigation.
It may be hard to simulate with the absolute accuracy, e.g. if same lane has lots of notes with overlapping grading areas, then the automatic player should press and unpress the key in much higher rates. If our goal is only to get reasonably plausible result then it can be much easier.
At least make them unable to crash the program.
#RANK 6
or higherThe current build system does not work in Windows (MinGW) at all. Also, there was a report of smpeg.h residing in the different directory from SDL (so sdl-config
won't work). Extending a plain Makefile may work or may not; other systems (CMake etc.) may be the better choice.
Consecutive LNs had been a source of problems:
#LNTYPE 2
parsing is much more complex due to consecutive LNs.AAAABBBB
parse like AAAAAAAA
.So let's get rid of consecutive LNs. That should make things much more clearer, and also saves a few lines (estimated). Checklists:
#LNTYPE 2
parsing; that should make #LNTYPE 2
parsing routine not to use prev
in the current sense (last observed non-zero key in channels 5x/6x), and possibly to unify iprev
, prev
and lprev
to have same meanings (the start of LN).Workflows:
nkeys = 9
); triggered by the file name extension or -P
option (maybe)ANGOLMOIS_PMS_KEYS
that is a reordered synonym to ANGOLMOIS_{1P,2P}_KEYS
get_bms_info
play_prepare
worksHow about 18-key PMS?
Yep, this is a bug since this should not happen if we didn't call SDL_DisplayFormat
(instead of SDL_DisplayFormatAlpha
or similar).
There are three primitive operations to the channel
array:
None require multiple arrays for each channel. Merging them may simplify things a lot. It is also future-proof as more than 18 keys are in use in some BMS-derived formats.
Related to LN rendering process.
While not quite useful (non-ASCII characters will be broken), #TEXT
is good for writing test cases.
Current grading rule: abs(time) < {0.6, 2.0, 3.5, 6.0} / (1.5 - #RANK * 0.25) * 0.024ms
(thus ±19.2ms for #RANK 3
and ±14.4ms for #RANK 2
)
This rule is too unusual to adapt #EXRANK
or related commands. Maybe we should rethink about it.
From Hitkey's diary entry:
- Measures #404-523 have a BPM of 900,000,000 (
#BPM2D 900000000
).- There are several portions that BMSE is unable to edit (e.g. a scaling factor of 32 in measures #584-587).
- Several BMS implementations are unable to play this chart:
- nazo, Angolmois: Skips the remaining portion of the chart.
- PMSee-V: Issues an error as it limits a BPM to 100,000.
- IIDXv: No objects displayed, no sound played.
- In addition to be unable to play it, BPM counter of nanasi and ruvit does not work correctly on this chart.
- Maybe uBMplay and BMX2WAV are the only implementations that can play it correctly?
I think it is a bug to skip the remaining portion of the chart (it is okay to behave wrongly in the problematic portions but that effect should not last forever). Not sure how to work around the problem without introducing an exact arithmetic though.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.