You saw this coming!
This repository is based on AddmusicK version 1.0.5. (The new 1.1.0 beta will not be considered at this moment, but some of the changes planned / implemented here might be ported over there.) Changes to existing code are marked with // // //
.
AMKd
: The top-level namespace for all new classes. "AMKd" is not the name of this fork; there is no name yet.MML
: Classes related to parsing text files.Lexer
: Classes that extract tokens.
Music
: Classes that deal with compile-time music data representation.Binary
: Classes related to outputting music data, and things exclusive to SMW.ChunkNSPC
: Binary command representations from the original N-SPC sound engine.ChunkAMK
: Binary command representations added in Addmusic.
Utility
: Other things.
- Replace
boost::filesystem
withstd::experimental::filesystem
- Remove VS-exclusive bloat
- Decompose pretty much everything in
Music.cpp
-
AMKd::Music::Action
andAMKd::Binary::Command
classes - Bring in the
Chunk
classes I wrote a while ago (originally for 0CC-FT) (maybe) - Makefiles
- Better makefiles (maybe)
- Run AMK from anywhere as long as it is available in
$PATH
- Conditional compilation for both sound driver and music data
- Makefile / Ruby script for inserting music into SMW
- Make AddmusicK's core compiler cross-platform
- Single separate program to remove any old music data
- Merge duplicate label loops and remote code definitions
- Separate
o
/l
/h
/q
states for each track - Key signature and full accidental support
- Legible names for all commands
- Track multiplexing (e.g.
#0123
) - N-SPC block support
- Globally defined patterns
-
#include
directive, this allows for example core instruments to be defined solely using MML - Using label loops and remote code before they are defined
- Hex validation, there is no reason to once all commands have names
- Whitespace requirements, missing post-conditions, case-insensitivity etc.
- Drop support for everything below
#amk 2
- There can be spaces between
#
and the preprocessor directive identifier - full nesting of
#ifdef
and friends for both music and sound effects #if
produces false instead of failing if the preprocessor constant is not defined#else
,#elseif
#error
(mentioned in the doc but never really worked)#dumper
field
|
command used for bypassing hex validation, it is now a no-op (since there is no guarantee bytes already placed with$
will be inserted verbatim)#define
and friends no longer accept arguments on a different line- Replacement macros are still allowed but each result must form complete tokens (tokens cannot cross macro boundaries)
- Hex commands will become exactly identical to plain-text equivalents
$DD
no longer accepts a note as its last parameter, it never worked properly and I have never seen anyone using it