diff options
| author | johannes <johannes.herman@gmail.com> | 2024-02-10 19:42:26 +0100 |
|---|---|---|
| committer | johannes <johannes.herman@gmail.com> | 2024-02-10 19:42:26 +0100 |
| commit | 6485e05c08167b2ce13b9a9ed3b236fed6070df8 (patch) | |
| tree | b0338461695548b45374c459c0a235d66770f4fa /src/commands.c | |
| parent | 0b0f167978e96a0e1c12cdbfad8ff3eb85b56575 (diff) | |
added change map function
Diffstat (limited to 'src/commands.c')
| -rw-r--r-- | src/commands.c | 40 |
1 files changed, 35 insertions, 5 deletions
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 <stdio.h> +#include <stdlib.h> #include <string.h> // 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; +} |
