Rely on Virtual Filesystem now

Author Mitja Felicijan <mitja.felicijan@gmail.com> 2026-04-28 09:49:01 +0200
Committer Mitja Felicijan <mitja.felicijan@gmail.com> 2026-04-28 09:49:01 +0200
Commit c4ae077ca41306b47e7737555fbcaa4decfe407c (patch)
-rw-r--r-- .gitignore 2
-rw-r--r-- Makefile 9
-rw-r--r-- libraries/vfs.h 4
-rw-r--r-- map.c 4
4 files changed, 15 insertions, 4 deletions
diff --git a/.gitignore b/.gitignore
1
bin/
1
bin/
2
autosave/
2
autosave/
  
3
  
  
4
*.pak
diff --git a/Makefile b/Makefile
...
15
LDFLAGS      := ./vendor/$(RAYLIB_VER)/lib/libraylib.a -lm
15
LDFLAGS      := ./vendor/$(RAYLIB_VER)/lib/libraylib.a -lm
16
GAME         := bin/stalag
16
GAME         := bin/stalag
17
HEXDUMP      := bin/hexdump
17
HEXDUMP      := bin/hexdump
  
18
PACKER       := bin/packer
18
SOURCES      := main.c map.c game.c
19
SOURCES      := main.c map.c game.c
19
  
20
  
20
ifeq ($(SYSTEM), linux_amd64)
21
ifeq ($(SYSTEM), linux_amd64)
...
25
	LDFLAGS += -framework CoreVideo -framework IOKit -framework Cocoa -framework GLUT -framework OpenGL
26
	LDFLAGS += -framework CoreVideo -framework IOKit -framework Cocoa -framework GLUT -framework OpenGL
26
endif
27
endif
27
  
28
  
28
all: info mkdirs $(HEXDUMP) $(GAME)
29
all: info mkdirs $(HEXDUMP) $(PACKER) $(GAME)
29
  
30
  
30
.PHONY: info mkdirs clean
31
.PHONY: info mkdirs clean
31
  
32
  
...
41
  
42
  
42
$(HEXDUMP): tools/hexdump.c
43
$(HEXDUMP): tools/hexdump.c
43
	$(CC) -std=c99 -o $(HEXDUMP) tools/hexdump.c
44
	$(CC) -std=c99 -o $(HEXDUMP) tools/hexdump.c
  
45
  
  
46
$(PACKER): tools/packer.c
  
47
	$(CC) -std=c99 -o $(PACKER) tools/packer.c
  
48
  
  
49
data: $(PACKER)
  
50
	$(PACKER) -p data.pak textures maps
44
  
51
  
45
mkdirs:
52
mkdirs:
46
	mkdir -p bin
53
	mkdir -p bin
...
diff --git a/libraries/vfs.h b/libraries/vfs.h
...
183
	VfsFile* f = vfs_open(path);
183
	VfsFile* f = vfs_open(path);
184
	if (!f) return NULL;
184
	if (!f) return NULL;
185
  
185
  
186
	void* data = malloc((size_t)f->size);
186
	void* data = malloc((size_t)f->size + 1);
187
	if (!data) {
187
	if (!data) {
188
		vfs_fclose(f);
188
		vfs_fclose(f);
189
		return NULL;
189
		return NULL;
...
194
		vfs_fclose(f);
194
		vfs_fclose(f);
195
		return NULL;
195
		return NULL;
196
	}
196
	}
  
197
  
  
198
	((char*)data)[f->size] = '\0';
197
  
199
  
198
	if (out_size) *out_size = (size_t)f->size;
200
	if (out_size) *out_size = (size_t)f->size;
199
	vfs_fclose(f);
201
	vfs_fclose(f);
...
diff --git a/map.c b/map.c
...
73
  
73
  
74
Map ParseMap(const char *filename) {
74
Map ParseMap(const char *filename) {
75
    size_t size;
75
    size_t size;
76
    char *data = read_entire_file(filename, &size);
76
    char *data = (char *)vfs_read(filename, &size);
77
    Map map = { 0 };
77
    Map map = { 0 };
78
    if (!data) return map;
78
    if (!data) return map;
79
  
79
  
...
146
  
146
  
147
    map.entities = entities.data;
147
    map.entities = entities.data;
148
    map.entity_count = (int)entities.length;
148
    map.entity_count = (int)entities.length;
149
    free(data);
149
    vfs_free(data);
150
    return map;
150
    return map;
151
}
151
}
152
  
152
  
...