From 6485e05c08167b2ce13b9a9ed3b236fed6070df8 Mon Sep 17 00:00:00 2001 From: johannes Date: Sat, 10 Feb 2024 19:42:26 +0100 Subject: added change map function --- inc/commands.h | 3 ++- src/commands.c | 40 +++++++++++++++++++++++++++++++++++----- 2 files changed, 37 insertions(+), 6 deletions(-) diff --git a/inc/commands.h b/inc/commands.h index 20f35e1..a08fabd 100644 --- a/inc/commands.h +++ b/inc/commands.h @@ -8,5 +8,6 @@ int setnamebyname(char *oldname, char *newname, demo *demo); int setskinbyname(char *name, char *skin, demo *demo); -#endif // COMMANDS_H +int changemap(FILE *map, char *mapname, demo *demo); +#endif // COMMANDS_H diff --git a/src/commands.c b/src/commands.c index f83909e..f919a0d 100644 --- a/src/commands.c +++ b/src/commands.c @@ -1,6 +1,8 @@ #include "../inc/demo.h" #include "../inc/pack.h" +#include +#include #include // TODO set by id and name has much repeating, fix that @@ -9,7 +11,7 @@ int setnamebyid(int id, char *new, demo *demo) int newlen = strlen(new); if (newlen >= 15) return -1; - + int intname[4] = {0x80808080, 0x80808080, 0x80808080, 0x80808000}; strtoint(new, newlen + 1, intname); int found = 0; @@ -38,7 +40,7 @@ int setnamebyname(char *old, char *new, demo *demo) int newlen = strlen(new); if (newlen >= 15) return -1; - + int intname[4] = {0x80808080, 0x80808080, 0x80808080, 0x80808000}; strtoint(new, newlen + 1, intname); char found = 0; @@ -54,7 +56,7 @@ int setnamebyname(char *old, char *new, demo *demo) demosnapitem *item = &snap->items[y]; if (item->type != 11) continue; - + char name[16]; intstostr(item->data, 4, name); if (strcmp(old, name) == 0) @@ -72,7 +74,7 @@ int setskinbyname(char *name, char *skin, demo *demo) int skinlen = strlen(skin); if (skinlen >= 23) return -1; - + int intskin[5] = {0x80808080, 0x80808080, 0x80808080, 0x80808080, 0x80808000}; strtoint(skin, skinlen + 1, intskin); char found = 0; @@ -88,9 +90,10 @@ int setskinbyname(char *name, char *skin, demo *demo) demosnapitem *item = &snap->items[y]; if (item->type != 11) continue; - + char iname[16]; intstostr(item->data, 4, iname); + printf("comparing: %s : %s\n", name, iname); if (strcmp(name, iname) == 0) { memcpy(&item->data[8], intskin, 5 * sizeof(int)); @@ -100,3 +103,30 @@ int setskinbyname(char *name, char *skin, demo *demo) } return found; } + +int changemap(FILE *map, char *mapname, demo *demo) +{ + int namelen = strlen(mapname); + if (namelen >= 31) + return -1; + + fseek(map, 0, SEEK_END); + long mapsize = ftell(map); + fseek(map, 0, SEEK_SET); + + char *mapbuff = (char *)malloc(mapsize); + if (mapbuff == NULL) + return -1; + + fread(mapbuff, 1, mapsize, map); + + free(demo->map.data); + demo->map.data = mapbuff; + + demo->header.version = 5; + demo->header.mapsize = mapsize; + demo->header.mapcrc = mapsize; + memcpy(demo->header.mapname, mapname, namelen + 1); + + return 1; +} -- cgit v1.2.3