mirror of
https://github.com/WerWolv/ImHex-Patterns.git
synced 2026-03-27 23:37:04 -05:00
patterns: Improvements to NES & IPS, add SNES, NSF, NSFe (#455)
* 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>
This commit is contained in:
48
patterns/nsfe.hexpat
Normal file
48
patterns/nsfe.hexpat
Normal file
@@ -0,0 +1,48 @@
|
||||
#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;
|
||||
Reference in New Issue
Block a user