summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjohannes <johannes.herman@gmail.com>2024-02-10 19:43:58 +0100
committerjohannes <johannes.herman@gmail.com>2024-02-10 19:43:58 +0100
commit72d67bf117250fe5695d122597b3cd103a7aada6 (patch)
treed88da51eb9efcdbd868f06a0cdc3c28d62c1f184
parent6485e05c08167b2ce13b9a9ed3b236fed6070df8 (diff)
added free demo, new test data
-rw-r--r--data/fngsnow.mapbin0 -> 479043 bytes
-rw-r--r--data/test2.demobin0 -> 232636 bytes
-rw-r--r--inc/demo.h4
-rw-r--r--src/demo.c35
-rw-r--r--src/main.c31
5 files changed, 64 insertions, 6 deletions
diff --git a/data/fngsnow.map b/data/fngsnow.map
new file mode 100644
index 0000000..e4a2577
--- /dev/null
+++ b/data/fngsnow.map
Binary files differ
diff --git a/data/test2.demo b/data/test2.demo
new file mode 100644
index 0000000..b727e01
--- /dev/null
+++ b/data/test2.demo
Binary files 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 <stdio.h>
#include <stdlib.h>
@@ -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);