diff options
| author | johannes <johannes.herman@gmail.com> | 2024-02-09 12:24:44 +0100 |
|---|---|---|
| committer | johannes <johannes.herman@gmail.com> | 2024-02-09 12:24:44 +0100 |
| commit | 95ab92f65e0435f71478c09d5756f96c7a4b9c09 (patch) | |
| tree | dcf596823d72e3b33ca5bd375676290570f0a94a /src | |
| parent | 999db06982c80bec25da63e95c47d5543c741c51 (diff) | |
correct read / write of demo file
Diffstat (limited to 'src')
| -rw-r--r-- | src/demo.c | 42 | ||||
| -rw-r--r-- | src/main.c | 20 |
2 files changed, 52 insertions, 10 deletions
@@ -54,14 +54,6 @@ int readdemoheader(FILE *fp, demoheader *dh) if (fread(dh->timestamp, 1, 20, fp) != 20) return -9; - printf("version: %hhu\n", dh->version); - printf("net_version: %s\n", dh->netversion); - printf("mapname: %s\n", dh->mapname); - printf("mapsize: %d\n", dh->mapsize); - printf("mapcrc: %d\n", dh->mapcrc); - printf("type: %s\n", dh->type); - printf("length: %d\n", dh->length); - printf("timestamp: %s\n", dh->timestamp); return 1; } @@ -449,10 +441,42 @@ int writedemosnap(FILE *fp, demosnap *snap, unsigned char ver) int size = cp - decompressed; int datasize = compresshuff(decompressed, size, compressed, 64 * 1024); - datasize = ((datasize + 3) / 4) * 4; + // datasize = ((datasize + 3) / 4) * 4; writedemochunkheader(fp, DEMOSNAP, datasize); fwrite(compressed, 1, datasize, fp); return 1; } + +int writedemomessage(FILE *fp, demomessage *message, unsigned char ver) +{ + writedemochunkheader(fp, DEMOMESSAGE, message->datasize); + fwrite(message->data, 1, message->datasize, fp); + + return 1; +} + +int writedemodelta(FILE *fp, demodelta *delta, unsigned char ver) +{ + writedemochunkheader(fp, DEMODELTA, delta->datasize); + fwrite(delta->data, 1, delta->datasize, fp); + + return 1; +} + +void printdemoheader(demoheader *header) +{ + if (header->version == 6) + printf("version: v6ddnet\n"); + else + printf("version: v%d\n", header->version); + + printf("netversion: %s\n", header->netversion); + printf("mapname: %s\n", header->mapname); + printf("mapsize: %d\n", header->mapsize); + printf("mapcrc: %d\n", header->mapcrc); + printf("type: %s\n", header->type); + printf("length: %d\n", header->length); + printf("timestamp: %s\n", header->timestamp); +} @@ -140,8 +140,26 @@ int main() } else if (dd.chunks[i].type == DEMOSNAP) { + demosnap *snap = dd.chunks[i].data.snap; + for (int y = 0; y < snap->numitems; y++) + { + demosnapitem *item = &snap->items[y]; + if (item->type == 11 && item->id == 9) + { + char newname[16] = ">>Hextcjd!\0"; + + strtoint(newname, 16, item->data); + } + } writedemosnap(op, dd.chunks[i].data.snap, dh.version); - exit(0); + } + else if (dd.chunks[i].type == DEMOMESSAGE) + { + writedemomessage(op, dd.chunks[i].data.message, dh.version); + } + else if (dd.chunks[i].type == DEMODELTA) + { + writedemodelta(op, dd.chunks[i].data.delta, dh.version); } } |
