summaryrefslogtreecommitdiff
path: root/tools/ska2anm/ska2anm.cpp
diff options
context:
space:
mode:
authorclaude-bot <[email protected]>2026-07-13 12:40:03 +0000
committerclaude-bot <[email protected]>2026-07-13 12:40:03 +0000
commit847962910f0bff071f3bf07c9abb87764fb6cac3 (patch)
treeddcd429e134c7fd5f72ddc97ced175de8d66fcd0 /tools/ska2anm/ska2anm.cpp
downloadlibrw-master.tar.gz
librw-master.zip
Import aap/librw @ masterHEADmaster
Snapshot for re3/reVC vendoring, per @lzcnt. Source: https://github.com/aap/librw (master).
Diffstat (limited to 'tools/ska2anm/ska2anm.cpp')
-rw-r--r--tools/ska2anm/ska2anm.cpp83
1 files changed, 83 insertions, 0 deletions
diff --git a/tools/ska2anm/ska2anm.cpp b/tools/ska2anm/ska2anm.cpp
new file mode 100644
index 0000000..900ba82
--- /dev/null
+++ b/tools/ska2anm/ska2anm.cpp
@@ -0,0 +1,83 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+#include <rw.h>
+#include <args.h>
+
+using namespace rw;
+
+char *argv0;
+
+void
+usage(void)
+{
+ fprintf(stderr, "usage: %s in.ska [out.anm]\n", argv0);
+ fprintf(stderr, " or: %s in.anm [out.ska]\n", argv0);
+ exit(1);
+}
+
+int
+main(int argc, char *argv[])
+{
+ rw::Engine::init();
+ rw::registerHAnimPlugin();
+ rw::Engine::open(nil);
+ rw::Engine::start();
+
+ ARGBEGIN{
+ case 'v':
+ sscanf(EARGF(usage()), "%x", &rw::version);
+ break;
+ default:
+ usage();
+ }ARGEND;
+
+ if(argc < 1)
+ usage();
+
+ StreamFile stream;
+ if(!stream.open(argv[0], "rb")){
+ fprintf(stderr, "Error: couldn't open %s\n", argv[0]);
+ return 1;
+ }
+
+ int32 firstword = stream.readU32();
+ stream.seek(0, 0);
+ Animation *anim = nil;
+ if(firstword == ID_ANIMANIMATION){
+ // it's an anm file
+ if(findChunk(&stream, ID_ANIMANIMATION, nil, nil))
+ anim = Animation::streamRead(&stream);
+ }else{
+ // it's a ska file
+ anim = Animation::streamReadLegacy(&stream);
+ }
+ stream.close();
+
+ if(anim == nil){
+ fprintf(stderr, "Error: couldn't read anim file\n");
+ return 1;
+ }
+
+ const char *file;
+ if(argc > 1)
+ file = argv[1];
+ else if(firstword == ID_ANIMANIMATION)
+ file = "out.ska";
+ else
+ file = "out.anm";
+ if(!stream.open(file, "wb")){
+ fprintf(stderr, "Error: couldn't open %s\n", file);
+ return 1;
+ }
+ if(firstword == ID_ANIMANIMATION)
+ anim->streamWriteLegacy(&stream);
+ else
+ anim->streamWrite(&stream);
+
+ anim->destroy();
+
+ return 0;
+}