From 72d67bf117250fe5695d122597b3cd103a7aada6 Mon Sep 17 00:00:00 2001 From: johannes Date: Sat, 10 Feb 2024 19:43:58 +0100 Subject: added free demo, new test data --- data/fngsnow.map | Bin 0 -> 479043 bytes data/test2.demo | Bin 0 -> 232636 bytes inc/demo.h | 4 ++++ src/demo.c | 35 +++++++++++++++++++++++++++++++++++ src/main.c | 31 +++++++++++++++++++++++++------ 5 files changed, 64 insertions(+), 6 deletions(-) create mode 100644 data/fngsnow.map create mode 100644 data/test2.demo diff --git a/data/fngsnow.map b/data/fngsnow.map new file mode 100644 index 0000000..e4a2577 Binary files /dev/null and b/data/fngsnow.map differ diff --git a/data/test2.demo b/data/test2.demo new file mode 100644 index 0000000..b727e01 Binary files /dev/null and b/data/test2.demo differ diff --git a/inc/demo.h b/inc/demo.h index c7cc32e..573e779 100644 --- a/inc/demo.h +++ b/inc/demo.h @@ -140,4 +140,8 @@ int writedemo(FILE *outfile, demo *demo); /* if printchunks then print all chunks */ void printdemo(demo *demo, char printchunks); +/* Frees everything for demo */ +/* Sets demo to NULL */ +void freedemo(demo *demo); + #endif // DEMO_H diff --git a/src/demo.c b/src/demo.c index 7c8bdbf..57ce8d1 100644 --- a/src/demo.c +++ b/src/demo.c @@ -18,6 +18,41 @@ const char headermagic[7] = "TWDEMO\0"; const unsigned char mapmagic[] = {0x6b, 0xe6, 0xda, 0x4a, 0xce, 0xbd, 0x38, 0x0c, 0x9b, 0x5b, 0x12, 0x89, 0xc8, 0x42, 0xd7, 0x80}; +void freedemo(demo *demo) +{ + free(demo->map.data); + + for(int i = 0; i < demo->data.numchunks; i++) + { + demochunk *chunk = &demo->data.chunks[i]; + switch (chunk->type) + { + case DEMOTICK: + free(chunk->data.tick); + break; + case DEMOSNAP: + for (int y = 0; y < chunk->data.snap->numitems; y++) + free(chunk->data.snap->items[y].data); + free(chunk->data.snap->offsets); + free(chunk->data.snap->items); + free(chunk->data.snap); + break; + case DEMOMESSAGE: + free(chunk->data.message->data); + free(chunk->data.message); + break; + case DEMODELTA: + free(chunk->data.delta->data); + free(chunk->data.delta); + break; + default: + break; + } + } + free(demo->data.chunks); + +} + /* readers */ int readdemoheader(FILE *fp, demoheader *dh) diff --git a/src/main.c b/src/main.c index 9c31a57..4619495 100644 --- a/src/main.c +++ b/src/main.c @@ -1,6 +1,6 @@ +#include "../inc/commands.h" #include "../inc/demo.h" #include "../inc/huffman.h" -#include "../inc/commands.h" #include #include @@ -114,28 +114,47 @@ int main() { inithuff(NULL); + // FILE *fp = fopen("/home/johannes/.local/share/ddnet/demos/auto/pepeg_2024-02-09_20-35-38.demo", "r"); FILE *fp = fopen("data/test.demo", "r"); FILE *op = fopen("data/out.demo", "w"); + FILE *mp = fopen("data/fngsnow.map", "r"); demo d; readdemo(fp, &d); - + // printdemo(&d, 1); int retid = setnamebyid(1, "NamedByID", &d); - int retname = setnamebyname("New Hero", "NamedByName", &d); - //TODO quirk, when doing further edits keep previous ones in mind - int retskin = setskinbyname("NamedByName", "bomb", &d); + setnamebyid(8, "Elf Two", &d); + setnamebyid(3, "Elf One", &d); + + setnamebyid(7, "Santas Cat", &d); + + setskinbyname("Elf One", "santa_default", &d); + setskinbyname("Elf Two", "santa_default", &d); + + int retname = setnamebyname("New Hero", "New Santa", &d); + + // TODO quirk, when doing further edits keep previous ones in mind + int retskin = setskinbyname("New Santa", "santa_coala", &d); + + int retmap = changemap(mp, "pepeg", &d); + printf("id: %d name: %d\n", retid, retname); - printf("skin: %d\n", retskin); + printf("skin: %d, map: %d\n", retskin, retmap); writedemo(op, &d); + printdemo(&d, 0); + + freedemo(&d); + fclose(fp); fclose(op); + fclose(mp); exit(EXIT_SUCCESS); -- cgit v1.2.3