[File] [PATCH] games: Add Panda3D game engine formats

Derzsi Daniel daniel at tohka.us
Fri May 23 04:27:33 UTC 2025


This patch adds support for two binary Panda3D game engine formats. One of them is the BAM format, which is used to represent 3D models inside the Panda3D game engine. The other is the MF format, which is a game archive that can hold game assets similar to a ZIP file.

Both formats are documented on the internet. Test files for Panda3D multifiles can be found at https://github.com/toonjoey/toontown-project-bikehorn, while test files for Panda3D BAM files can be found at https://github.com/Toontown-Open-Source-Initiative/Toontown-School-House/tree/master/resources/phase_3.5/models/gui.
---
 magic/Magdir/games | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/magic/Magdir/games b/magic/Magdir/games
index e07ad60f..f3cb457d 100644
--- a/magic/Magdir/games
+++ b/magic/Magdir/games
@@ -669,3 +669,36 @@
 0	string	RGSSAD\0
 >7	byte	x	RPG Maker RGSSAD asset archive. version %u
 !:ext rgssad/rgss2a/rgss3a
+
+# Panda3D BAM model format
+# From: Derzsi Daniel <daniel at tohka.us>
+# URL:  https://gist.github.com/rdb/13cb936f41e0339a9a9cf9651ea2b09f
+0	string	pbj\0\n\r	Panda3D BAM file
+>10	ubyte	x	version %u
+>12	ubyte	x	\b.%u
+# Version >= 5.0 has little-endian and big-endian formats
+>10	ubyte	>4
+>>14	ubyte	0	\b, big-endian vertex data
+>>14	ubyte	1	\b, little-endian vertex data
+>10	ubyte	<5	\b, little-endian vertex data
+# Version >= 6.27 has single-precision and double-precision floats
+>10	ubyte	>5
+>>12	ubyte	>26
+>>>15	ubyte	0	\b, single-precision floats
+>>>15	ubyte	1	\b, double-precision floats
+>>12	ubyte	<27	\b, single-precision floats
+>10	ubyte	<6	\b, single-precision floats
+
+# Panda3D Multifile archive format
+# From: Derzsi Daniel <daniel at tohka.us>
+# URL:  https://tohka.us/p/exploring-encrypted-multifiles-a-technical-overview
+0	string	pmf\0\n\r	Panda3D Multifile archive
+>6	uleshort	x	version %u
+>8	uleshort	x	\b.%u
+# Version >= 1.1 has creation date information, missing if set to zero
+>6	uleshort	>0
+>>8	uleshort	>0
+>>>14	uledate	=0	\b, unknown creation date
+>>>14	uledate	!0	\b, created: %s
+>>8	uleshort	<1	\b, unknown creation date
+>6	uleshort	<1	\b, unknown creation date
-- 
2.49.0



More information about the File mailing list