xtreme8000 / cavex Goto Github PK
View Code? Open in Web Editor NEWProject to recreate your favourite block game for the Wii (Beta 1.7.3)
License: GNU General Public License v3.0
Project to recreate your favourite block game for the Wii (Beta 1.7.3)
License: GNU General Public License v3.0
I can not compile the CODE, I tried many times to compile it but each time it never works can you distribute a link in the description of the project (CavEX) which sends us a google drive or a OneDrive which contains a pack that contains the executable file (DOL File) by the homebrew channel. But please give a file the dol file of the new version please π₯Ίπ₯Ί
Trees between loaded and unloaded chunks seem to start decaying when the logs are in the unloaded chunk, leaving the appearance of cut in half trees, and leaf break particles at the edge of view distance in the fog.
I try compiling from source and get this:
D:\CavEX>make
chunk.c
In file included from C:/devkitPro/devkitPPC/powerpc-eabi/include/sys/reent.h:15,
from C:/devkitPro/devkitPPC/powerpc-eabi/include/math.h:5,
from D:/CavEX/source/chunk.c:22:
C:/devkitPro/devkitPPC/powerpc-eabi/include/sys/_types.h:167:5: error: unknown type name 'wint_t'
167 | wint_t __wch;
| ^~~~~~
In file included from C:/devkitPro/devkitPPC/powerpc-eabi/include/m-lib/m-array.h:28,
from D:/CavEX/source/graphics/texture_atlas.h:25,
from D:/CavEX/source/block/blocks.h:26,
from D:/CavEX/source/chunk.c:26:
C:/devkitPro/devkitPPC/powerpc-eabi/include/m-lib/m-core.h:2579:31: error: unknown type name 'FILE'
2579 | m_core_fscan_bool (bool *ptr, FILE *f)
| ^~~~
C:/devkitPro/devkitPPC/powerpc-eabi/include/m-lib/m-core.h:53:1: note: 'FILE' is defined in header '<stdio.h>'; did you forget to '#include <stdio.h>'?
52 | # include <stdarg.h>
+++ |+#include <stdio.h>
53 | #endif
C:/devkitPro/devkitPPC/powerpc-eabi/include/m-lib/m-core.h:2587:31: error: unknown type name 'FILE'
2587 | m_core_fscan_char (char *ptr, FILE *f)
| ^~~~
C:/devkitPro/devkitPPC/powerpc-eabi/include/m-lib/m-core.h:2587:31: note: 'FILE' is defined in header '<stdio.h>'; did you forget to '#include <stdio.h>'?
C:/devkitPro/devkitPPC/powerpc-eabi/include/m-lib/m-core.h:2600:1: error: unknown type name 'FILE'
2600 | M_FSCAN_DEFAULT_TYPE_DEF(m_core_fscan_schar, signed char, "%hhd")
| ^~~~~~~~~~~~~~~~~~~~~~~~
C:/devkitPro/devkitPPC/powerpc-eabi/include/m-lib/m-core.h:2600:1: note: 'FILE' is defined in header '<stdio.h>'; did you forget to '#include <stdio.h>'?
C:/devkitPro/devkitPPC/powerpc-eabi/include/m-lib/m-core.h:2601:1: error: unknown type name 'FILE'
2601 | M_FSCAN_DEFAULT_TYPE_DEF(m_core_fscan_uchar, unsigned char, "%hhu")
| ^~~~~~~~~~~~~~~~~~~~~~~~
C:/devkitPro/devkitPPC/powerpc-eabi/include/m-lib/m-core.h:2601:1: note: 'FILE' is defined in header '<stdio.h>'; did you forget to '#include <stdio.h>'?
C:/devkitPro/devkitPPC/powerpc-eabi/include/m-lib/m-core.h:2602:1: error: unknown type name 'FILE'
2602 | M_FSCAN_DEFAULT_TYPE_DEF(m_core_fscan_sshort, signed short, "%hd")
| ^~~~~~~~~~~~~~~~~~~~~~~~
C:/devkitPro/devkitPPC/powerpc-eabi/include/m-lib/m-core.h:2602:1: note: 'FILE' is defined in header '<stdio.h>'; did you forget to '#include <stdio.h>'?
C:/devkitPro/devkitPPC/powerpc-eabi/include/m-lib/m-core.h:2603:1: error: unknown type name 'FILE'
2603 | M_FSCAN_DEFAULT_TYPE_DEF(m_core_fscan_ushort, unsigned short, "%hu")
| ^~~~~~~~~~~~~~~~~~~~~~~~
C:/devkitPro/devkitPPC/powerpc-eabi/include/m-lib/m-core.h:2603:1: note: 'FILE' is defined in header '<stdio.h>'; did you forget to '#include <stdio.h>'?
C:/devkitPro/devkitPPC/powerpc-eabi/include/m-lib/m-core.h:2604:1: error: unknown type name 'FILE'
2604 | M_FSCAN_DEFAULT_TYPE_DEF(m_core_fscan_sint, signed int, "%d")
| ^~~~~~~~~~~~~~~~~~~~~~~~
C:/devkitPro/devkitPPC/powerpc-eabi/include/m-lib/m-core.h:2604:1: note: 'FILE' is defined in header '<stdio.h>'; did you forget to '#include <stdio.h>'?
C:/devkitPro/devkitPPC/powerpc-eabi/include/m-lib/m-core.h:2605:1: error: unknown type name 'FILE'
2605 | M_FSCAN_DEFAULT_TYPE_DEF(m_core_fscan_uint, unsigned int, "%u")
| ^~~~~~~~~~~~~~~~~~~~~~~~
C:/devkitPro/devkitPPC/powerpc-eabi/include/m-lib/m-core.h:2605:1: note: 'FILE' is defined in header '<stdio.h>'; did you forget to '#include <stdio.h>'?
C:/devkitPro/devkitPPC/powerpc-eabi/include/m-lib/m-core.h:2606:1: error: unknown type name 'FILE'
2606 | M_FSCAN_DEFAULT_TYPE_DEF(m_core_fscan_slong, signed long, "%ld")
| ^~~~~~~~~~~~~~~~~~~~~~~~
C:/devkitPro/devkitPPC/powerpc-eabi/include/m-lib/m-core.h:2606:1: note: 'FILE' is defined in header '<stdio.h>'; did you forget to '#include <stdio.h>'?
C:/devkitPro/devkitPPC/powerpc-eabi/include/m-lib/m-core.h:2607:1: error: unknown type name 'FILE'
2607 | M_FSCAN_DEFAULT_TYPE_DEF(m_core_fscan_ulong, unsigned long, "%lu")
| ^~~~~~~~~~~~~~~~~~~~~~~~
C:/devkitPro/devkitPPC/powerpc-eabi/include/m-lib/m-core.h:2607:1: note: 'FILE' is defined in header '<stdio.h>'; did you forget to '#include <stdio.h>'?
C:/devkitPro/devkitPPC/powerpc-eabi/include/m-lib/m-core.h:2608:1: error: unknown type name 'FILE'
2608 | M_FSCAN_DEFAULT_TYPE_DEF(m_core_fscan_sllong, signed long long, "%lld")
| ^~~~~~~~~~~~~~~~~~~~~~~~
C:/devkitPro/devkitPPC/powerpc-eabi/include/m-lib/m-core.h:2608:1: note: 'FILE' is defined in header '<stdio.h>'; did you forget to '#include <stdio.h>'?
C:/devkitPro/devkitPPC/powerpc-eabi/include/m-lib/m-core.h:2609:1: error: unknown type name 'FILE'
2609 | M_FSCAN_DEFAULT_TYPE_DEF(m_core_fscan_ullong, unsigned long long, "%llu")
| ^~~~~~~~~~~~~~~~~~~~~~~~
C:/devkitPro/devkitPPC/powerpc-eabi/include/m-lib/m-core.h:2609:1: note: 'FILE' is defined in header '<stdio.h>'; did you forget to '#include <stdio.h>'?
C:/devkitPro/devkitPPC/powerpc-eabi/include/m-lib/m-core.h:2610:1: error: unknown type name 'FILE'
2610 | M_FSCAN_DEFAULT_TYPE_DEF(m_core_fscan_float, float, "%f")
| ^~~~~~~~~~~~~~~~~~~~~~~~
C:/devkitPro/devkitPPC/powerpc-eabi/include/m-lib/m-core.h:2610:1: note: 'FILE' is defined in header '<stdio.h>'; did you forget to '#include <stdio.h>'?
C:/devkitPro/devkitPPC/powerpc-eabi/include/m-lib/m-core.h:2611:1: error: unknown type name 'FILE'
2611 | M_FSCAN_DEFAULT_TYPE_DEF(m_core_fscan_double, double, "%lf")
| ^~~~~~~~~~~~~~~~~~~~~~~~
C:/devkitPro/devkitPPC/powerpc-eabi/include/m-lib/m-core.h:2611:1: note: 'FILE' is defined in header '<stdio.h>'; did you forget to '#include <stdio.h>'?
C:/devkitPro/devkitPPC/powerpc-eabi/include/m-lib/m-core.h:2612:1: error: unknown type name 'FILE'
2612 | M_FSCAN_DEFAULT_TYPE_DEF(m_core_fscan_ldouble, long double, "%Lf")
| ^~~~~~~~~~~~~~~~~~~~~~~~
C:/devkitPro/devkitPPC/powerpc-eabi/include/m-lib/m-core.h:2612:1: note: 'FILE' is defined in header '<stdio.h>'; did you forget to '#include <stdio.h>'?
C:/devkitPro/devkitPPC/powerpc-eabi/include/m-lib/m-core.h:3877:20: error: unknown type name 'FILE'
3877 | m_core_fscan_enum (FILE *f)
| ^~~~
C:/devkitPro/devkitPPC/powerpc-eabi/include/m-lib/m-core.h:3877:20: note: 'FILE' is defined in header '<stdio.h>'; did you forget to '#include <stdio.h>'?
D:/CavEX/source/graphics/texture_atlas.h: In function 'dict_atlas_src_set':
D:/CavEX/source/graphics/texture_atlas.h:189:1: error: 'stderr' undeclared (first use in this function)
189 | ARRAY_DEF(dict_atlas_src, struct texture_entry, M_POD_OPLIST)
| ^~~~~~~~~
D:/CavEX/source/graphics/texture_atlas.h:26:1: note: 'stderr' is defined in header '<stdio.h>'; did you forget to '#include <stdio.h>'?
25 | #include <m-lib/m-array.h>
+++ |+#include <stdio.h>
26 |
D:/CavEX/source/graphics/texture_atlas.h:189:1: note: each undeclared identifier is reported only once for each function it appears in
189 | ARRAY_DEF(dict_atlas_src, struct texture_entry, M_POD_OPLIST)
| ^~~~~~~~~
D:/CavEX/source/graphics/texture_atlas.h: In function 'dict_atlas_src_push_raw':
D:/CavEX/source/graphics/texture_atlas.h:189:1: error: 'stderr' undeclared (first use in this function)
189 | ARRAY_DEF(dict_atlas_src, struct texture_entry, M_POD_OPLIST)
| ^~~~~~~~~
D:/CavEX/source/graphics/texture_atlas.h:189:1: note: 'stderr' is defined in header '<stdio.h>'; did you forget to '#include <stdio.h>'?
D:/CavEX/source/graphics/texture_atlas.h: In function 'dict_atlas_src_push_at':
D:/CavEX/source/graphics/texture_atlas.h:189:1: error: 'stderr' undeclared (first use in this function)
189 | ARRAY_DEF(dict_atlas_src, struct texture_entry, M_POD_OPLIST)
| ^~~~~~~~~
D:/CavEX/source/graphics/texture_atlas.h:189:1: note: 'stderr' is defined in header '<stdio.h>'; did you forget to '#include <stdio.h>'?
D:/CavEX/source/graphics/texture_atlas.h:189:1: warning: passing argument 1 of 'memmove' from incompatible pointer type [-Wincompatible-pointer-types]
189 | ARRAY_DEF(dict_atlas_src, struct texture_entry, M_POD_OPLIST)
| ^~~~~~~~~
| |
| struct texture_entry *
In file included from C:\PSYQ\include/strings.h:23,
from C:\PSYQ\include/string.h:20,
from D:/CavEX/source/chunk.c:24:
C:\PSYQ\include/memory.h:26:22: note: expected 'unsigned char *' but argument is of type 'struct texture_entry *'
26 | extern void *memmove(unsigned char *, const unsigned char *, int);
| ^~~~~~~~~~~~~~~
D:/CavEX/source/graphics/texture_atlas.h:189:1: warning: passing argument 2 of 'memmove' from incompatible pointer type [-Wincompatible-pointer-types]
189 | ARRAY_DEF(dict_atlas_src, struct texture_entry, M_POD_OPLIST)
| ^~~~~~~~~
| |
| struct texture_entry *
C:\PSYQ\include/memory.h:26:39: note: expected 'const unsigned char *' but argument is of type 'struct texture_entry *'
26 | extern void *memmove(unsigned char *, const unsigned char *, int);
| ^~~~~~~~~~~~~~~~~~~~~
D:/CavEX/source/graphics/texture_atlas.h: In function 'dict_atlas_src_resize':
D:/CavEX/source/graphics/texture_atlas.h:189:1: error: 'stderr' undeclared (first use in this function)
189 | ARRAY_DEF(dict_atlas_src, struct texture_entry, M_POD_OPLIST)
| ^~~~~~~~~
D:/CavEX/source/graphics/texture_atlas.h:189:1: note: 'stderr' is defined in header '<stdio.h>'; did you forget to '#include <stdio.h>'?
D:/CavEX/source/graphics/texture_atlas.h: In function 'dict_atlas_src_reserve':
D:/CavEX/source/graphics/texture_atlas.h:189:1: error: 'stderr' undeclared (first use in this function)
189 | ARRAY_DEF(dict_atlas_src, struct texture_entry, M_POD_OPLIST)
| ^~~~~~~~~
D:/CavEX/source/graphics/texture_atlas.h:189:1: note: 'stderr' is defined in header '<stdio.h>'; did you forget to '#include <stdio.h>'?
D:/CavEX/source/graphics/texture_atlas.h: In function 'dict_atlas_src_safe_get':
D:/CavEX/source/graphics/texture_atlas.h:189:1: error: 'stderr' undeclared (first use in this function)
189 | ARRAY_DEF(dict_atlas_src, struct texture_entry, M_POD_OPLIST)
| ^~~~~~~~~
D:/CavEX/source/graphics/texture_atlas.h:189:1: note: 'stderr' is defined in header '<stdio.h>'; did you forget to '#include <stdio.h>'?
D:/CavEX/source/graphics/texture_atlas.h: In function 'dict_atlas_src_pop_at':
D:/CavEX/source/graphics/texture_atlas.h:189:1: warning: passing argument 1 of 'memmove' from incompatible pointer type [-Wincompatible-pointer-types]
189 | ARRAY_DEF(dict_atlas_src, struct texture_entry, M_POD_OPLIST)
| ^~~~~~~~~
| |
| struct texture_entry *
C:\PSYQ\include/memory.h:26:22: note: expected 'unsigned char *' but argument is of type 'struct texture_entry *'
26 | extern void *memmove(unsigned char *, const unsigned char *, int);
| ^~~~~~~~~~~~~~~
D:/CavEX/source/graphics/texture_atlas.h:189:1: warning: passing argument 2 of 'memmove' from incompatible pointer type [-Wincompatible-pointer-types]
189 | ARRAY_DEF(dict_atlas_src, struct texture_entry, M_POD_OPLIST)
| ^~~~~~~~~
| |
| struct texture_entry *
C:\PSYQ\include/memory.h:26:39: note: expected 'const unsigned char *' but argument is of type 'struct texture_entry *'
26 | extern void *memmove(unsigned char *, const unsigned char *, int);
| ^~~~~~~~~~~~~~~~~~~~~
D:/CavEX/source/graphics/texture_atlas.h: In function 'dict_atlas_src_insert_v':
D:/CavEX/source/graphics/texture_atlas.h:189:1: error: 'stderr' undeclared (first use in this function)
189 | ARRAY_DEF(dict_atlas_src, struct texture_entry, M_POD_OPLIST)
| ^~~~~~~~~
D:/CavEX/source/graphics/texture_atlas.h:189:1: note: 'stderr' is defined in header '<stdio.h>'; did you forget to '#include <stdio.h>'?
D:/CavEX/source/graphics/texture_atlas.h:189:1: warning: passing argument 1 of 'memmove' from incompatible pointer type [-Wincompatible-pointer-types]
189 | ARRAY_DEF(dict_atlas_src, struct texture_entry, M_POD_OPLIST)
| ^~~~~~~~~
| |
| struct texture_entry *
C:\PSYQ\include/memory.h:26:22: note: expected 'unsigned char *' but argument is of type 'struct texture_entry *'
26 | extern void *memmove(unsigned char *, const unsigned char *, int);
| ^~~~~~~~~~~~~~~
D:/CavEX/source/graphics/texture_atlas.h:189:1: warning: passing argument 2 of 'memmove' from incompatible pointer type [-Wincompatible-pointer-types]
189 | ARRAY_DEF(dict_atlas_src, struct texture_entry, M_POD_OPLIST)
| ^~~~~~~~~
| |
| struct texture_entry *
C:\PSYQ\include/memory.h:26:39: note: expected 'const unsigned char *' but argument is of type 'struct texture_entry *'
26 | extern void *memmove(unsigned char *, const unsigned char *, int);
| ^~~~~~~~~~~~~~~~~~~~~
D:/CavEX/source/graphics/texture_atlas.h: In function 'dict_atlas_src_remove_v':
D:/CavEX/source/graphics/texture_atlas.h:189:1: warning: passing argument 1 of 'memmove' from incompatible pointer type [-Wincompatible-pointer-types]
189 | ARRAY_DEF(dict_atlas_src, struct texture_entry, M_POD_OPLIST)
| ^~~~~~~~~
| |
| struct texture_entry *
C:\PSYQ\include/memory.h:26:22: note: expected 'unsigned char *' but argument is of type 'struct texture_entry *'
26 | extern void *memmove(unsigned char *, const unsigned char *, int);
| ^~~~~~~~~~~~~~~
D:/CavEX/source/graphics/texture_atlas.h:189:1: warning: passing argument 2 of 'memmove' from incompatible pointer type [-Wincompatible-pointer-types]
189 | ARRAY_DEF(dict_atlas_src, struct texture_entry, M_POD_OPLIST)
| ^~~~~~~~~
| |
| struct texture_entry *
C:\PSYQ\include/memory.h:26:39: note: expected 'const unsigned char *' but argument is of type 'struct texture_entry *'
26 | extern void *memmove(unsigned char *, const unsigned char *, int);
| ^~~~~~~~~~~~~~~~~~~~~
D:/CavEX/source/graphics/texture_atlas.h: In function 'dict_atlas_src_special_stable_sort':
D:/CavEX/source/graphics/texture_atlas.h:189:1: error: 'stderr' undeclared (first use in this function)
189 | ARRAY_DEF(dict_atlas_src, struct texture_entry, M_POD_OPLIST)
| ^~~~~~~~~
D:/CavEX/source/graphics/texture_atlas.h:189:1: note: 'stderr' is defined in header '<stdio.h>'; did you forget to '#include <stdio.h>'?
D:/CavEX/source/graphics/texture_atlas.h: In function 'dict_atlas_src_splice':
D:/CavEX/source/graphics/texture_atlas.h:189:1: error: 'stderr' undeclared (first use in this function)
189 | ARRAY_DEF(dict_atlas_src, struct texture_entry, M_POD_OPLIST)
| ^~~~~~~~~
D:/CavEX/source/graphics/texture_atlas.h:189:1: note: 'stderr' is defined in header '<stdio.h>'; did you forget to '#include <stdio.h>'?
D:/CavEX/source/chunk.h: In function 'ilist_chunks_reset':
D:/CavEX/source/chunk.h:68:25: error: expected expression before 'struct'
68 | ILIST_DEF(ilist_chunks, struct chunk, M_POD_OPLIST)
| ^~~~~~
D:/CavEX/source/chunk.h: In function 'ilist_chunks_back':
D:/CavEX/source/chunk.h:68:25: error: expected expression before 'struct'
68 | ILIST_DEF(ilist_chunks, struct chunk, M_POD_OPLIST)
| ^~~~~~
D:/CavEX/source/chunk.h: In function 'ilist_chunks_front':
D:/CavEX/source/chunk.h:68:25: error: expected expression before 'struct'
68 | ILIST_DEF(ilist_chunks, struct chunk, M_POD_OPLIST)
| ^~~~~~
D:/CavEX/source/chunk.h: In function 'ilist_chunks_next_obj':
D:/CavEX/source/chunk.h:68:25: error: expected expression before 'struct'
68 | ILIST_DEF(ilist_chunks, struct chunk, M_POD_OPLIST)
| ^~~~~~
D:/CavEX/source/chunk.h: In function 'ilist_chunks_previous_obj':
D:/CavEX/source/chunk.h:68:25: error: expected expression before 'struct'
68 | ILIST_DEF(ilist_chunks, struct chunk, M_POD_OPLIST)
| ^~~~~~
D:/CavEX/source/chunk.h: In function 'ilist_chunks_ref':
D:/CavEX/source/chunk.h:68:25: error: expected expression before 'struct'
68 | ILIST_DEF(ilist_chunks, struct chunk, M_POD_OPLIST)
| ^~~~~~
D:/CavEX/source/chunk.h: In function 'ilist_chunks_remove':
D:/CavEX/source/chunk.h:68:25: error: expected expression before 'struct'
68 | ILIST_DEF(ilist_chunks, struct chunk, M_POD_OPLIST)
| ^~~~~~
D:/CavEX/source/chunk.h: In function 'ilist_chunks2_reset':
D:/CavEX/source/chunk.h:69:26: error: expected expression before 'struct'
69 | ILIST_DEF(ilist_chunks2, struct chunk, M_POD_OPLIST)
| ^~~~~~
D:/CavEX/source/chunk.h: In function 'ilist_chunks2_back':
D:/CavEX/source/chunk.h:69:26: error: expected expression before 'struct'
69 | ILIST_DEF(ilist_chunks2, struct chunk, M_POD_OPLIST)
| ^~~~~~
D:/CavEX/source/chunk.h: In function 'ilist_chunks2_front':
D:/CavEX/source/chunk.h:69:26: error: expected expression before 'struct'
69 | ILIST_DEF(ilist_chunks2, struct chunk, M_POD_OPLIST)
| ^~~~~~
D:/CavEX/source/chunk.h: In function 'ilist_chunks2_next_obj':
D:/CavEX/source/chunk.h:69:26: error: expected expression before 'struct'
69 | ILIST_DEF(ilist_chunks2, struct chunk, M_POD_OPLIST)
| ^~~~~~
D:/CavEX/source/chunk.h: In function 'ilist_chunks2_previous_obj':
D:/CavEX/source/chunk.h:69:26: error: expected expression before 'struct'
69 | ILIST_DEF(ilist_chunks2, struct chunk, M_POD_OPLIST)
| ^~~~~~
D:/CavEX/source/chunk.h: In function 'ilist_chunks2_ref':
D:/CavEX/source/chunk.h:69:26: error: expected expression before 'struct'
69 | ILIST_DEF(ilist_chunks2, struct chunk, M_POD_OPLIST)
| ^~~~~~
D:/CavEX/source/chunk.h: In function 'ilist_chunks2_remove':
D:/CavEX/source/chunk.h:69:26: error: expected expression before 'struct'
69 | ILIST_DEF(ilist_chunks2, struct chunk, M_POD_OPLIST)
| ^~~~~~
D:/CavEX/source/world.h: In function 'dict_wsection_list_pair_push_raw':
D:/CavEX/source/world.h:53:1: error: 'stderr' undeclared (first use in this function)
53 | DICT_DEF2(dict_wsection, int64_t, M_BASIC_OPLIST, struct world_section,
| ^~~~~~~~~
In file included from D:/CavEX/source/block/blocks.h:29:
D:/CavEX/source/world.h:43:1: note: 'stderr' is defined in header '<stdio.h>'; did you forget to '#include <stdio.h>'?
42 | #include "util.h"
+++ |+#include <stdio.h>
43 |
D:/CavEX/source/world.h: In function 'dict_wsection_list_pair_insert':
D:/CavEX/source/world.h:53:1: error: 'stderr' undeclared (first use in this function)
53 | DICT_DEF2(dict_wsection, int64_t, M_BASIC_OPLIST, struct world_section,
| ^~~~~~~~~
D:/CavEX/source/world.h:53:1: note: 'stderr' is defined in header '<stdio.h>'; did you forget to '#include <stdio.h>'?
D:/CavEX/source/world.h: In function 'dict_wsection_list_pair_init_set':
D:/CavEX/source/world.h:53:1: error: 'stderr' undeclared (first use in this function)
53 | DICT_DEF2(dict_wsection, int64_t, M_BASIC_OPLIST, struct world_section,
| ^~~~~~~~~
D:/CavEX/source/world.h:53:1: note: 'stderr' is defined in header '<stdio.h>'; did you forget to '#include <stdio.h>'?
D:/CavEX/source/world.h: In function 'dict_wsection_array_list_pair_set':
D:/CavEX/source/world.h:53:1: error: 'stderr' undeclared (first use in this function)
53 | DICT_DEF2(dict_wsection, int64_t, M_BASIC_OPLIST, struct world_section,
| ^~~~~~~~~
D:/CavEX/source/world.h:53:1: note: 'stderr' is defined in header '<stdio.h>'; did you forget to '#include <stdio.h>'?
D:/CavEX/source/world.h: In function 'dict_wsection_array_list_pair_push_raw':
D:/CavEX/source/world.h:53:1: error: 'stderr' undeclared (first use in this function)
53 | DICT_DEF2(dict_wsection, int64_t, M_BASIC_OPLIST, struct world_section,
| ^~~~~~~~~
D:/CavEX/source/world.h:53:1: note: 'stderr' is defined in header '<stdio.h>'; did you forget to '#include <stdio.h>'?
D:/CavEX/source/world.h: In function 'dict_wsection_array_list_pair_push_at':
D:/CavEX/source/world.h:53:1: error: 'stderr' undeclared (first use in this function)
53 | DICT_DEF2(dict_wsection, int64_t, M_BASIC_OPLIST, struct world_section,
| ^~~~~~~~~
D:/CavEX/source/world.h:53:1: note: 'stderr' is defined in header '<stdio.h>'; did you forget to '#include <stdio.h>'?
D:/CavEX/source/world.h:53:1: warning: passing argument 1 of 'memmove' from incompatible pointer type [-Wincompatible-pointer-types]
53 | DICT_DEF2(dict_wsection, int64_t, M_BASIC_OPLIST, struct world_section,
| ^~~~~~~~~
| |
| struct dict_wsection_list_pair_s * (*)[1]
C:\PSYQ\include/memory.h:26:22: note: expected 'unsigned char *' but argument is of type 'struct dict_wsection_list_pair_s * (*)[1]'
26 | extern void *memmove(unsigned char *, const unsigned char *, int);
| ^~~~~~~~~~~~~~~
D:/CavEX/source/world.h:53:1: warning: passing argument 2 of 'memmove' from incompatible pointer type [-Wincompatible-pointer-types]
53 | DICT_DEF2(dict_wsection, int64_t, M_BASIC_OPLIST, struct world_section,
| ^~~~~~~~~
| |
| struct dict_wsection_list_pair_s * (*)[1]
C:\PSYQ\include/memory.h:26:39: note: expected 'const unsigned char *' but argument is of type 'struct dict_wsection_list_pair_s * (*)[1]'
26 | extern void *memmove(unsigned char *, const unsigned char *, int);
| ^~~~~~~~~~~~~~~~~~~~~
D:/CavEX/source/world.h: In function 'dict_wsection_array_list_pair_resize':
D:/CavEX/source/world.h:53:1: error: 'stderr' undeclared (first use in this function)
53 | DICT_DEF2(dict_wsection, int64_t, M_BASIC_OPLIST, struct world_section,
| ^~~~~~~~~
D:/CavEX/source/world.h:53:1: note: 'stderr' is defined in header '<stdio.h>'; did you forget to '#include <stdio.h>'?
D:/CavEX/source/world.h: In function 'dict_wsection_array_list_pair_reserve':
D:/CavEX/source/world.h:53:1: error: 'stderr' undeclared (first use in this function)
53 | DICT_DEF2(dict_wsection, int64_t, M_BASIC_OPLIST, struct world_section,
| ^~~~~~~~~
D:/CavEX/source/world.h:53:1: note: 'stderr' is defined in header '<stdio.h>'; did you forget to '#include <stdio.h>'?
D:/CavEX/source/world.h: In function 'dict_wsection_array_list_pair_safe_get':
D:/CavEX/source/world.h:53:1: error: 'stderr' undeclared (first use in this function)
53 | DICT_DEF2(dict_wsection, int64_t, M_BASIC_OPLIST, struct world_section,
| ^~~~~~~~~
D:/CavEX/source/world.h:53:1: note: 'stderr' is defined in header '<stdio.h>'; did you forget to '#include <stdio.h>'?
D:/CavEX/source/world.h: In function 'dict_wsection_array_list_pair_pop_at':
D:/CavEX/source/world.h:53:1: warning: passing argument 1 of 'memmove' from incompatible pointer type [-Wincompatible-pointer-types]
53 | DICT_DEF2(dict_wsection, int64_t, M_BASIC_OPLIST, struct world_section,
| ^~~~~~~~~
| |
| struct dict_wsection_list_pair_s * (*)[1]
C:\PSYQ\include/memory.h:26:22: note: expected 'unsigned char *' but argument is of type 'struct dict_wsection_list_pair_s * (*)[1]'
26 | extern void *memmove(unsigned char *, const unsigned char *, int);
| ^~~~~~~~~~~~~~~
D:/CavEX/source/world.h:53:1: warning: passing argument 2 of 'memmove' from incompatible pointer type [-Wincompatible-pointer-types]
53 | DICT_DEF2(dict_wsection, int64_t, M_BASIC_OPLIST, struct world_section,
| ^~~~~~~~~
| |
| struct dict_wsection_list_pair_s * (*)[1]
C:\PSYQ\include/memory.h:26:39: note: expected 'const unsigned char *' but argument is of type 'struct dict_wsection_list_pair_s * (*)[1]'
26 | extern void *memmove(unsigned char *, const unsigned char *, int);
| ^~~~~~~~~~~~~~~~~~~~~
D:/CavEX/source/world.h: In function 'dict_wsection_array_list_pair_insert_v':
D:/CavEX/source/world.h:53:1: error: 'stderr' undeclared (first use in this function)
53 | DICT_DEF2(dict_wsection, int64_t, M_BASIC_OPLIST, struct world_section,
| ^~~~~~~~~
D:/CavEX/source/world.h:53:1: note: 'stderr' is defined in header '<stdio.h>'; did you forget to '#include <stdio.h>'?
D:/CavEX/source/world.h:53:1: warning: passing argument 1 of 'memmove' from incompatible pointer type [-Wincompatible-pointer-types]
53 | DICT_DEF2(dict_wsection, int64_t, M_BASIC_OPLIST, struct world_section,
| ^~~~~~~~~
| |
| struct dict_wsection_list_pair_s * (*)[1]
C:\PSYQ\include/memory.h:26:22: note: expected 'unsigned char *' but argument is of type 'struct dict_wsection_list_pair_s * (*)[1]'
26 | extern void *memmove(unsigned char *, const unsigned char *, int);
| ^~~~~~~~~~~~~~~
D:/CavEX/source/world.h:53:1: warning: passing argument 2 of 'memmove' from incompatible pointer type [-Wincompatible-pointer-types]
53 | DICT_DEF2(dict_wsection, int64_t, M_BASIC_OPLIST, struct world_section,
| ^~~~~~~~~
| |
| struct dict_wsection_list_pair_s * (*)[1]
C:\PSYQ\include/memory.h:26:39: note: expected 'const unsigned char *' but argument is of type 'struct dict_wsection_list_pair_s * (*)[1]'
26 | extern void *memmove(unsigned char *, const unsigned char *, int);
| ^~~~~~~~~~~~~~~~~~~~~
D:/CavEX/source/world.h: In function 'dict_wsection_array_list_pair_remove_v':
D:/CavEX/source/world.h:53:1: warning: passing argument 1 of 'memmove' from incompatible pointer type [-Wincompatible-pointer-types]
53 | DICT_DEF2(dict_wsection, int64_t, M_BASIC_OPLIST, struct world_section,
| ^~~~~~~~~
| |
| struct dict_wsection_list_pair_s * (*)[1]
C:\PSYQ\include/memory.h:26:22: note: expected 'unsigned char *' but argument is of type 'struct dict_wsection_list_pair_s * (*)[1]'
26 | extern void *memmove(unsigned char *, const unsigned char *, int);
| ^~~~~~~~~~~~~~~
D:/CavEX/source/world.h:53:1: warning: passing argument 2 of 'memmove' from incompatible pointer type [-Wincompatible-pointer-types]
53 | DICT_DEF2(dict_wsection, int64_t, M_BASIC_OPLIST, struct world_section,
| ^~~~~~~~~
| |
| struct dict_wsection_list_pair_s * (*)[1]
C:\PSYQ\include/memory.h:26:39: note: expected 'const unsigned char *' but argument is of type 'struct dict_wsection_list_pair_s * (*)[1]'
26 | extern void *memmove(unsigned char *, const unsigned char *, int);
| ^~~~~~~~~~~~~~~~~~~~~
D:/CavEX/source/world.h: In function 'dict_wsection_array_list_pair_splice':
D:/CavEX/source/world.h:53:1: error: 'stderr' undeclared (first use in this function)
53 | DICT_DEF2(dict_wsection, int64_t, M_BASIC_OPLIST, struct world_section,
| ^~~~~~~~~
D:/CavEX/source/world.h:53:1: note: 'stderr' is defined in header '<stdio.h>'; did you forget to '#include <stdio.h>'?
D:/CavEX/source/world.h: In function 'm_d1ct_dict_wsection_resize_up':
D:/CavEX/source/world.h:53:1: error: 'stderr' undeclared (first use in this function)
53 | DICT_DEF2(dict_wsection, int64_t, M_BASIC_OPLIST, struct world_section,
| ^~~~~~~~~
D:/CavEX/source/world.h:53:1: note: 'stderr' is defined in header '<stdio.h>'; did you forget to '#include <stdio.h>'?
In file included from C:/devkitPro/devkitPPC/powerpc-eabi/include/sys/signal.h:14,
from C:/devkitPro/devkitPPC/powerpc-eabi/include/signal.h:6,
from D:/CavEX/source/game/game_state.h:23,
from D:/CavEX/source/chunk.c:28:
C:/devkitPro/devkitPPC/powerpc-eabi/include/sys/_timespec.h: At top level:
C:/devkitPro/devkitPPC/powerpc-eabi/include/sys/_timespec.h:42:25: error: conflicting types for 'time_t'; have '__int_least64_t' {aka 'long long int'}
42 | typedef _TIME_T_ time_t;
| ^~~~~~
In file included from C:/devkitPro/devkitPPC/powerpc-eabi/include/sys/signal.h:12:
C:\PSYQ\include/sys/types.h:72:17: note: previous declaration of 'time_t' with type 'time_t' {aka 'long int'}
72 | typedef long time_t;
| ^~~~~~
D:/CavEX/source/item/inventory.h: In function 'ilist_inventory_reset':
D:/CavEX/source/item/inventory.h:54:28: error: expected expression before 'struct'
54 | ILIST_DEF(ilist_inventory, struct inventory, M_POD_OPLIST)
| ^~~~~~
D:/CavEX/source/item/inventory.h: In function 'ilist_inventory_back':
D:/CavEX/source/item/inventory.h:54:28: error: expected expression before 'struct'
54 | ILIST_DEF(ilist_inventory, struct inventory, M_POD_OPLIST)
| ^~~~~~
D:/CavEX/source/item/inventory.h: In function 'ilist_inventory_front':
D:/CavEX/source/item/inventory.h:54:28: error: expected expression before 'struct'
54 | ILIST_DEF(ilist_inventory, struct inventory, M_POD_OPLIST)
| ^~~~~~
D:/CavEX/source/item/inventory.h: In function 'ilist_inventory_next_obj':
D:/CavEX/source/item/inventory.h:54:28: error: expected expression before 'struct'
54 | ILIST_DEF(ilist_inventory, struct inventory, M_POD_OPLIST)
| ^~~~~~
D:/CavEX/source/item/inventory.h: In function 'ilist_inventory_previous_obj':
D:/CavEX/source/item/inventory.h:54:28: error: expected expression before 'struct'
54 | ILIST_DEF(ilist_inventory, struct inventory, M_POD_OPLIST)
| ^~~~~~
D:/CavEX/source/item/inventory.h: In function 'ilist_inventory_ref':
D:/CavEX/source/item/inventory.h:54:28: error: expected expression before 'struct'
54 | ILIST_DEF(ilist_inventory, struct inventory, M_POD_OPLIST)
| ^~~~~~
D:/CavEX/source/item/inventory.h: In function 'ilist_inventory_remove':
D:/CavEX/source/item/inventory.h:54:28: error: expected expression before 'struct'
54 | ILIST_DEF(ilist_inventory, struct inventory, M_POD_OPLIST)
| ^~~~~~
In file included from C:/devkitPro/libogc/include/ogc/system.h:44,
from C:/devkitPro/libogc/include/gccore.h:62,
from D:/CavEX/source/platform/texture.h:28,
from D:/CavEX/source/platform/gfx.h:27,
from D:/CavEX/source/chunk.c:29:
C:/devkitPro/devkitPPC/powerpc-eabi/include/time.h: At top level:
C:/devkitPro/devkitPPC/powerpc-eabi/include/time.h:56:1: error: unknown type name 'clock_t'
56 | clock_t clock (void);
| ^~~~~~~
C:/devkitPro/devkitPPC/powerpc-eabi/include/time.h:30:1: note: 'clock_t' is defined in header '<time.h>'; did you forget to '#include <time.h>'?
29 | #include <sys/timespec.h>
+++ |+#include <time.h>
30 |
C:/devkitPro/devkitPPC/powerpc-eabi/include/time.h:166:20: error: unknown type name 'clockid_t'
166 | int clock_settime (clockid_t clock_id, const struct timespec *tp);
| ^~~~~~~~~
C:/devkitPro/devkitPPC/powerpc-eabi/include/time.h:167:20: error: unknown type name 'clockid_t'
167 | int clock_gettime (clockid_t clock_id, struct timespec *tp);
| ^~~~~~~~~
C:/devkitPro/devkitPPC/powerpc-eabi/include/time.h:168:19: error: unknown type name 'clockid_t'
168 | int clock_getres (clockid_t clock_id, struct timespec *res);
| ^~~~~~~~~
C:/devkitPro/devkitPPC/powerpc-eabi/include/time.h:172:19: error: unknown type name 'clockid_t'
172 | int timer_create (clockid_t clock_id,
| ^~~~~~~~~
C:/devkitPro/devkitPPC/powerpc-eabi/include/time.h:174:9: error: unknown type name 'timer_t'; did you mean 'time_t'?
174 | timer_t *__restrict timerid);
| ^~~~~~~
| time_t
C:/devkitPro/devkitPPC/powerpc-eabi/include/time.h:178:19: error: unknown type name 'timer_t'; did you mean 'time_t'?
178 | int timer_delete (timer_t timerid);
| ^~~~~~~
| time_t
C:/devkitPro/devkitPPC/powerpc-eabi/include/time.h:182:20: error: unknown type name 'timer_t'; did you mean 'time_t'?
182 | int timer_settime (timer_t timerid, int flags,
| ^~~~~~~
| time_t
C:/devkitPro/devkitPPC/powerpc-eabi/include/time.h:185:20: error: unknown type name 'timer_t'; did you mean 'time_t'?
185 | int timer_gettime (timer_t timerid, struct itimerspec *value);
| ^~~~~~~
| time_t
C:/devkitPro/devkitPPC/powerpc-eabi/include/time.h:186:23: error: unknown type name 'timer_t'; did you mean 'time_t'?
186 | int timer_getoverrun (timer_t timerid);
| ^~~~~~~
| time_t
In file included from D:/CavEX/source/world.h:40:
D:/CavEX/source/chunk.c: In function 'chunk_init':
D:/CavEX/source/chunk.h:36:20: warning: 'memset' argument 3 type is 'int' where 'unsigned int' is expected in a call to built-in function declared without prototype [-Wbuiltin-declaration-mismatch]
36 | #define CHUNK_SIZE 16
D:/CavEX/source/chunk.c:43:38: note: in expansion of macro 'CHUNK_SIZE'
43 | memset(c->blocks, BLOCK_AIR, CHUNK_SIZE * CHUNK_SIZE * CHUNK_SIZE * 5 / 2);
| ^~~~~~~~~~
C:\PSYQ\include/memory.h:30:14: note: built-in 'memset' declared here
30 | extern void *memset (/* unsigned char *, unsigned char, int */);
| ^~~~~~
make[1]: *** [/opt/devkitpro/devkitPPC/base_rules:21: chunk.o] Error 1
make: *** [Makefile:112: build] Error 2
D:\CavEX>
I verified i had everything installed, did I miss something?
Hi there Byte! I was wondering if in a future update if a chat system would be implemented? Me and my friends are on Beta 1.7.3 a lot and have a massive survival server that we all collaborate and play on, and having the chat system would be nice to be able to chat with each other across all systems. I understand that it would be somewhat slow to type on the Wii (Unless you're really good at it) but just having it I feel would just be nice to have anyways.
Hey, I recently came across your work and today I just tried it on my Wii! I never thought I would play this on the Wii! I did miss some music tho so I was thinking of making original music for the game... Do you think it's a good idea? I don't know how to code but I can come up with some music demos in about 3 days I think. No wait, I actually just did a quick demo.
https://drive.google.com/drive/folders/1CtgDzfM7Kx4rvoGusIV3Z0dGgbLlTrLl
This is my style, I just downloaded a random sf2 instrument package for LMMS so I could make this, so it's very raw
Self-explanatory.
Tested on PC build of CavEX, however this also applies to the Wii build as well.
Could not load extended OpenGL functions!
Vendor: AMD
Renderer: AMD Radeon Graphics (radeonsi, renoir, LLVM 17.0.6, DRM 3.57, 6.7.7-1-default)
Version: 4.6 (Compatibility Profile) Mesa 23.3.6
cavex: /home/uniq/Downloads/CavEX/source/platform/pc/gfx.c:140: gfx_setup: Assertion `vertex' failed.
zsh: IOT instruction (core dumped) ./cavex
Same thing happens if I force it to use my dGPU
Could not load extended OpenGL functions!
Vendor: NVIDIA Corporation
Renderer: NVIDIA GeForce GTX 1650/PCIe/SSE2
Version: 4.6.0 NVIDIA 550.54.14
cavex: /home/uniq/Downloads/CavEX/source/platform/pc/gfx.c:140: gfx_setup: Assertion `vertex' failed.
zsh: IOT instruction (core dumped) __NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia ./cavex
is it possible to add a survival version for this
kinda like the one on java or even a one with only buttons and words, I think a lot of people would love a way to change the controls!
the error code is: collect2.exe: error: ld returned 1 exit status
make[1]: *** [/opt/devkitpro/devkitPPC/wii_rules:31: /home/*****/Downloads/Homebrew_tutorial/Tutorial/Tutorial.elf] Error 1
make: *** [Makefile:112: build] Error 2
I would love if there was a way to use the Nunchuck to Move and the Wii Remote Dpad to Control the camera rather than what is the default right now, could that be added as a option?
maybe it would be a good idea to add preset config.json files that work with different controllers as well
I think it is a great controller and should have support.
I love cavex but why not adding mobs and implement beta 1.8 and add sounds for alpha 0.4 and add both creative and survival mode and a world generator for next upcoming version thx you
Leave any suggestions here π
As for today Feb 6 2024. Latest master branch plus recommended libraries.
build_pc % make
[ 0%] Building C object CMakeFiles/cavex.dir/source/block/aabb.c.o
[ 1%] Building C object CMakeFiles/cavex.dir/source/block/block_bed.c.o
In file included from ~/Documents/CODE/REPOS/CavEX/source/block/block_bed.c:20:
In file included from ~/Documents/CODE/REPOS/CavEX/source/block/../block/blocks.h:30:
~/Documents/CODE/REPOS/CavEX/source/block/../game/../world.h:62:10: error: field has incomplete type 'ptime_t' (aka 'struct timespec')
ptime_t anim_timer;
^
~/Documents/CODE/REPOS/CavEX/source/block/../platform/time.h:30:16: note: forward declaration of 'struct timespec'
typedef struct timespec ptime_t;
^
1 error generated.
make[2]: *** [CMakeFiles/cavex.dir/source/block/block_bed.c.o] Error 1
make[1]: *** [CMakeFiles/cavex.dir/all] Error 2
make: *** [all] Error 2
Should I try an older version of the repo? or there is something I'm doing wrong maybe a library I didn't correctly attached?... should I start hand correcting the source code?
Thanks in advance.
So maybe for your future update s and a survival game mode you can take some code from minetest it is an open source Minecraft influenced game in C this might lead to a drop in FPS but that's okay if you keep it at 30 FPS that is good enough to play
Hi!
Me and my friend are massive fans of your work, and Wii homebrew in general. I was wondering if I can publish a Resource Pack manager for your project. I have it all coded and everything, and it works by overriding your PNG files in the assets directory. Do I have permission to release this?
as title says . please help :D
Are there any plans to add classic controller support? they're perfect for playing minecraft with the only execptions being crouching and third person but they could be implemented in a different way or just not be implemented at all.
happened on dolphin and real console.
it would be stuck on the loading world screen.
the problem is that the inventory never wants to open I even looked in the game code, PS: I have no knowledge by the way, if we talk about the problem in the game code it says to press button 1 on the Wii remote to open the inventory, but when I press this button in the middle of a game the inventory does not open. But on the interface that goes up which button corresponds to which action it says to press the A button of the Wii Remote to open the inventory, but obviously it does not open, so can you add a functional inventory to which we can take / get items like in the creative mode of Minecraft Beta 1.8 / 1.8.1
please πππππβΊβΊβΊβΊβΊ.
Unlike the original Java versions. Leaves don't backface cull in CavEX. If you place a leaf surrounded by air then you'll see all sides through the block, rather than only the sides that face you. When placed against a block then they cull normally, with the exception of when placed next to spruce leaves, where depending on the facing direction it chooses whether to render the spruce leaves face, or the oak leaves face.
I'm not sure if this difference actually does have any bearing on performance, but just noting this for the fact that I could assume the extra leaf faces could be cut and help with the higher rendering time in forested areas exhibited ingame.
Fiddling around with the inventory is pretty fun at current, though I suggest a couple things for consistency and usability sake;
Hi! Sorry for the silly question, but I'm not able to run the game: I built both the Wii and the Linux version, and I get the following issues:
Linux version
The game starts, it recognized my two save folders, but does not react to input. Mouse and keyboard presses have no effect. The game does not seem to be using the CPU, but it cannot be closed by closing the window -- only by pressing Ctrl+C on the terminal.
Wii version
I created a directory containing the DOL file (renamed to boot.dol), plus the assets, the save files, and the config, icon and meta files from the source tree. Then I try to open the DOL file with dolphin, but it immediately asks me if I want to stop the current emulation.
Some CMakelists.txt files are not in the source folder like:
source/cNBT/buffer.c
source/cNBT/nbt_loading.c
source/cNBT/nbt_parsing.c
source/cNBT/nbt_treeops.c source/cNBT/nbt_util.c
source/lodepng/lodepng.c
source/parson/parson.c
Edit: I didn't read https://github.com/xtreme8000/CavEX#build-instructions
Sorry :(
I have compiled CavEX for Linux, I am on Arch Linux. I had to use a alternative to "glfw3", I installed glfw-X11 (I also used glfw-wayland).
I keep on getting this:
cavex: /mnt/441c3dff-f2cf-45ea-bfc6-063ea6aa249f/Doc/CavEX/source/platform/pc/gfx.c:196: gfx_setup: Assertion `vertex' failed.
Aborted (core dumped)
When I light the fire via the lighter on the obsidian block to open the Nether portal there is no fire that lights up and on no other block as well which makes it impossible to enter in the Nether because even if we managed to set fire to the Obsidian block to open the dinosaur portal we would still not be able to go into the Nether because there is no animation of the portal which starts to move in all the senses and a few seconds later the screen starts loading which says that he is entering the Nether could you add a functional and accessible Nether
pls and when the Nether will be accessible could you give a Dol file and also all the files to make CavEx work pls
A declarative, efficient, and flexible JavaScript library for building user interfaces.
π Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. πππ
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google β€οΈ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.