mirror of
https://github.com/WerWolv/ImHex-Patterns.git
synced 2026-03-27 23:37:04 -05:00
* Add credit to ne.hexpat * Add many changes to nes.hexpat * Fixing dependance on variables declared in if statement * Added mappers and inline to NES 2.0 header, removed needless parenthesises * Add files via upload * Add files via upload * Create nsf.hexpat * Used full name of the SNES on description * Add SNES, NSF & NSFe, new description for NES * Removing erroneous condition in ips.hexpat's truncatedSize * Removing unnecessary std.string import in ips.hexpat * Added both locations for sections in PE, clearer variable names, reorganized DOS stub * Delete patterns/nsfe.hexpat * Delete patterns/nsfmetadata.hexpat * Added chunks from NSFe to NSF * Added NSFe * Fix size of truncatedSize in ips.hexpat --------- Co-authored-by: Nik <werwolv98@gmail.com>
48 lines
1.3 KiB
Rust
48 lines
1.3 KiB
Rust
#pragma author gmestanley
|
|
#pragma description NSFe file format
|
|
|
|
import std.string;
|
|
|
|
struct ChunkMetadata {
|
|
u32 length;
|
|
char ID[4];
|
|
} [[inline]];
|
|
|
|
struct TimeChunkData {
|
|
u32 trackLengths[while($<addressof(parent.metadata)+6+parent.metadata.length)];
|
|
} [[inline]];
|
|
|
|
fn formatMetadataName(str string) {
|
|
return "\"" + std::string::substr(string, 0, sizeof(string)-1) + "\"";
|
|
};
|
|
|
|
struct Name {
|
|
char trackName[] [[format("formatMetadataName")]];
|
|
};
|
|
|
|
struct TlblChunkData {
|
|
Name trackNames[while($<addressof(parent.metadata)+6+parent.metadata.length)];
|
|
} [[inline]];
|
|
|
|
struct AuthChunkData {
|
|
char gameTitle[] [[format("formatMetadataName")]];
|
|
char songwriting[] [[format("formatMetadataName")]];
|
|
char copyright[] [[format("formatMetadataName")]];
|
|
char ripper[] [[format("formatMetadataName")]];
|
|
} [[inline]];
|
|
|
|
struct TextChunkData {
|
|
char text[parent.metadata.length];
|
|
} [[inline]];
|
|
|
|
struct Chunk {
|
|
ChunkMetadata metadata;
|
|
if (metadata.ID == "time") TimeChunkData timeChunkData;
|
|
else if (metadata.ID == "text") TextChunkData textChunkData;
|
|
else if (metadata.ID == "tlbl") TlblChunkData tlblChunkData;
|
|
else if (metadata.ID == "auth") AuthChunkData authChunkData;
|
|
else u8 data[metadata.length];
|
|
};
|
|
|
|
char signature[4] @ 0x00;
|
|
Chunk chunks[while($<std::mem::size())] @ 0x04; |