summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjohannes <johannes.herman@gmail.com>2024-02-10 19:42:26 +0100
committerjohannes <johannes.herman@gmail.com>2024-02-10 19:42:26 +0100
commit6485e05c08167b2ce13b9a9ed3b236fed6070df8 (patch)
treeb0338461695548b45374c459c0a235d66770f4fa /src
parent0b0f167978e96a0e1c12cdbfad8ff3eb85b56575 (diff)
added change map function
Diffstat (limited to 'src')
-rw-r--r--src/commands.c40
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;
+}