summaryrefslogtreecommitdiff
path: root/src/factories
diff options
context:
space:
mode:
authorinspectredc <inspectredc@gmail.com>2026-01-26 15:33:05 +0000
committerinspectredc <inspectredc@gmail.com>2026-01-26 15:33:05 +0000
commit432d85ccb2a9269cd84efef565bee82d184fe91d (patch)
treeb0ff3fca660c875a0a50819a82262f68830b6e42 /src/factories
parent804d46a2df8d54885ce339f868cde6bdce0fff0a (diff)
Fix envelope extraction
Diffstat (limited to 'src/factories')
-rw-r--r--src/factories/fzerox/SequenceFactory.cpp15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/factories/fzerox/SequenceFactory.cpp b/src/factories/fzerox/SequenceFactory.cpp
index bacdfe0..8b80d8a 100644
--- a/src/factories/fzerox/SequenceFactory.cpp
+++ b/src/factories/fzerox/SequenceFactory.cpp
@@ -1310,6 +1310,7 @@ std::optional<std::shared_ptr<IParsedData>> FZX::SequenceFactory::parse(std::vec
bool largeNotes = false;
bool scanPastJump = false;
bool forceLargeNotes = false;
+ bool envelopeMarkedEnd = false;
int32_t channel = -1;
int32_t layer = -1;
std::deque<SeqLabelInfo> posStack;
@@ -1328,6 +1329,10 @@ std::optional<std::shared_ptr<IParsedData>> FZX::SequenceFactory::parse(std::vec
forceLargeNotes = GetSafeNode<bool>(node, "force_large_notes");
}
+ if (node["envelope_end_markers"]) {
+ envelopeMarkedEnd = GetSafeNode<bool>(node, "envelope_end_markers");
+ }
+
while (count < size || !posStack.empty()) {
SeqCommand command;
bool nextLabel = false;
@@ -1997,8 +2002,14 @@ std::optional<std::shared_ptr<IParsedData>> FZX::SequenceFactory::parse(std::vec
command.args.emplace_back(arg);
existingPositions.insert(addr);
addr += 2 * sizeof(int16_t);
- if (arg == 0) {
- break;
+ if (envelopeMarkedEnd) {
+ if (delay == 0xFFFF) {
+ break;
+ }
+ } else {
+ if (arg == 0) {
+ break;
+ }
}
}
command.size = addr - envAddr;