Skip to content
Snippets Groups Projects
Commit b15bbd50 authored by Lactozilla's avatar Lactozilla :speech_balloon:
Browse files

Merge branch 'next' into patch-stuff-again-2

parents dcaad758 15008f31
Branches
Tags
1 merge request!1257New sprite features
Showing with 667 additions and 373 deletions
No preview for this file type
File added
# DON'T REMOVE
# This keeps the folder from disappearing
# DON'T REMOVE
# This keeps the folder from disappearing
...@@ -36,6 +36,7 @@ set(SRB2_CORE_SOURCES ...@@ -36,6 +36,7 @@ set(SRB2_CORE_SOURCES
m_random.c m_random.c
md5.c md5.c
mserv.c mserv.c
http-mserv.c
s_sound.c s_sound.c
screen.c screen.c
sounds.c sounds.c
...@@ -230,6 +231,8 @@ set(SRB2_CONFIG_HAVE_GME ON CACHE BOOL ...@@ -230,6 +231,8 @@ set(SRB2_CONFIG_HAVE_GME ON CACHE BOOL
"Enable GME support.") "Enable GME support.")
set(SRB2_CONFIG_HAVE_OPENMPT ON CACHE BOOL set(SRB2_CONFIG_HAVE_OPENMPT ON CACHE BOOL
"Enable OpenMPT support.") "Enable OpenMPT support.")
set(SRB2_CONFIG_HAVE_CURL ON CACHE BOOL
"Enable curl support, used for downloading files via HTTP.")
if(${CMAKE_SYSTEM} MATCHES Windows) if(${CMAKE_SYSTEM} MATCHES Windows)
set(SRB2_CONFIG_HAVE_MIXERX ON CACHE BOOL set(SRB2_CONFIG_HAVE_MIXERX ON CACHE BOOL
"Enable SDL Mixer X support.") "Enable SDL Mixer X support.")
...@@ -449,6 +452,26 @@ if(${SRB2_CONFIG_HAVE_PNG} AND ${SRB2_CONFIG_HAVE_ZLIB}) ...@@ -449,6 +452,26 @@ if(${SRB2_CONFIG_HAVE_PNG} AND ${SRB2_CONFIG_HAVE_ZLIB})
endif() endif()
endif() endif()
if(${SRB2_CONFIG_HAVE_CURL})
if(${SRB2_CONFIG_USE_INTERNAL_LIBRARIES})
set(CURL_FOUND ON)
set(CURL_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/libs/curl)
if(${SRB2_SYSTEM_BITS} EQUAL 64)
set(CURL_LIBRARIES "-L${CMAKE_SOURCE_DIR}/libs/curl/lib64 -lcurl")
else() # 32-bit
set(CURL_LIBRARIES "-L${CMAKE_SOURCE_DIR}/libs/curl/lib32 -lcurl")
endif()
else()
find_package(CURL)
endif()
if(${CURL_FOUND})
set(SRB2_HAVE_CURL ON)
add_definitions(-DHAVE_CURL)
else()
message(WARNING "You have specified that CURL is available but it was not found. SRB2 may not compile correctly.")
endif()
endif()
if(${SRB2_CONFIG_HWRENDER}) if(${SRB2_CONFIG_HWRENDER})
add_definitions(-DHWRENDER) add_definitions(-DHWRENDER)
set(SRB2_HWRENDER_SOURCES set(SRB2_HWRENDER_SOURCES
......
...@@ -8,13 +8,11 @@ ...@@ -8,13 +8,11 @@
# terms of the GNU General Public License, version 2. # terms of the GNU General Public License, version 2.
# See the 'LICENSE' file for more details. # See the 'LICENSE' file for more details.
# #
# -DPC_DOS -> use DOS specific code (eg:textmode stuff)...
# -DLINUX -> use for the GNU/Linux specific # -DLINUX -> use for the GNU/Linux specific
# -D_WINDOWS -> use for the Win32/DirectX specific # -D_WINDOWS -> use for the Win32/DirectX specific
# -DHAVE_SDL -> use for the SDL interface # -DHAVE_SDL -> use for the SDL interface
# #
# Sets: # Sets:
# Compile the DGJPP/DOS version with 'make WATTCP=1'
# Compile the DirectX/Mingw version with 'make MINGW=1' # Compile the DirectX/Mingw version with 'make MINGW=1'
# Compile the SDL/Mingw version with 'make MINGW=1 SDL=1' # Compile the SDL/Mingw version with 'make MINGW=1 SDL=1'
# Compile the SDL/Linux version with 'make LINUX=1' # Compile the SDL/Linux version with 'make LINUX=1'
...@@ -58,10 +56,10 @@ ...@@ -58,10 +56,10 @@
# Compile with GCC 4.6x version, add 'GCC46=1' # Compile with GCC 4.6x version, add 'GCC46=1'
# Compile a profile version, add 'PROFILEMODE=1' # Compile a profile version, add 'PROFILEMODE=1'
# Compile a debug version, add 'DEBUGMODE=1' # Compile a debug version, add 'DEBUGMODE=1'
# Compile with extra warnings, add 'WARNINGMODE=1' # Compile with less warnings, add 'RELAXWARNINGS=1'
# Generate compiler errors for most compiler warnings, add 'ERRORMODE=1'
# Compile without NASM's tmap.nas, add 'NOASM=1' # Compile without NASM's tmap.nas, add 'NOASM=1'
# Compile without 3D hardware support, add 'NOHW=1' # Compile without 3D hardware support, add 'NOHW=1'
# Compile without 3D sound support, add 'NOHS=1'
# Compile with GDBstubs, add 'RDB=1' # Compile with GDBstubs, add 'RDB=1'
# Compile without PNG, add 'NOPNG=1' # Compile without PNG, add 'NOPNG=1'
# Compile without zlib, add 'NOZLIB=1' # Compile without zlib, add 'NOZLIB=1'
...@@ -82,6 +80,58 @@ ...@@ -82,6 +80,58 @@
# #
############################################################################# #############################################################################
ALL_SYSTEMS=\
PANDORA\
LINUX64\
MINGW64\
HAIKU\
DUMMY\
DJGPPDOS\
MINGW\
UNIX\
LINUX\
SOLARIS\
FREEBSD\
MACOSX\
SDL\
# check for user specified system
ifeq (,$(filter $(ALL_SYSTEMS),$(.VARIABLES)))
ifeq ($(OS),Windows_NT) # all windows are Windows_NT...
$(info Detected a Windows system, compiling for 32-bit MinGW SDL2...)
# go for a 32-bit sdl mingw exe by default
MINGW=1
SDL=1
WINDOWSHELL=1
else # if you on the *nix
system:=$(shell uname -s)
ifeq ($(system),Linux)
new_system=LINUX
else
$(error \
Could not automatically detect your system,\
try specifying a system manually)
endif
ifeq ($(shell getconf LONG_BIT),64)
system+=64-bit
new_system:=$(new_system)64
endif
$(info Detected $(system) ($(new_system))...)
$(new_system)=1
endif
endif
# SRB2 data files # SRB2 data files
D_DIR?=../bin/Resources D_DIR?=../bin/Resources
D_FILES=$(D_DIR)/srb2.pk3 \ D_FILES=$(D_DIR)/srb2.pk3 \
...@@ -121,7 +171,6 @@ NOPNG=1 ...@@ -121,7 +171,6 @@ NOPNG=1
NOZLIB=1 NOZLIB=1
NONET=1 NONET=1
NOHW=1 NOHW=1
NOHS=1
NOASM=1 NOASM=1
NOIPX=1 NOIPX=1
EXENAME?=srb2dummy EXENAME?=srb2dummy
...@@ -143,11 +192,6 @@ endif ...@@ -143,11 +192,6 @@ endif
ifdef PANDORA ifdef PANDORA
NONX86=1 NONX86=1
NOHW=1 NOHW=1
NOHS=1
endif
ifdef DJGPPDOS
include djgppdos/Makefile.cfg
endif endif
ifndef NOOPENMPT ifndef NOOPENMPT
...@@ -213,6 +257,7 @@ endif ...@@ -213,6 +257,7 @@ endif
ifdef NONET ifdef NONET
OPTS+=-DNONET OPTS+=-DNONET
NOCURL=1
else else
ifdef NO_IPV6 ifdef NO_IPV6
OPTS+=-DNO_IPV6 OPTS+=-DNO_IPV6
...@@ -228,13 +273,6 @@ else ...@@ -228,13 +273,6 @@ else
$(OBJDIR)/hw_md2load.o $(OBJDIR)/hw_md3load.o $(OBJDIR)/hw_model.o $(OBJDIR)/u_list.o $(OBJDIR)/hw_batching.o $(OBJDIR)/hw_md2load.o $(OBJDIR)/hw_md3load.o $(OBJDIR)/hw_model.o $(OBJDIR)/u_list.o $(OBJDIR)/hw_batching.o
endif endif
ifdef NOHS
OPTS+=-DNOHS
else
OPTS+=-DHW3SOUND
OBJS+=$(OBJDIR)/hw3sound.o
endif
OPTS += -DCOMPVERSION OPTS += -DCOMPVERSION
ifndef NONX86 ifndef NONX86
...@@ -322,6 +360,16 @@ else ...@@ -322,6 +360,16 @@ else
NOPNG=1 NOPNG=1
endif endif
ifndef NOCURL
OPTS+=-DHAVE_CURL
CURLCONFIG?=curl-config
CURL_CFLAGS?=$(shell $(CURLCONFIG) --cflags)
CURL_LDFLAGS?=$(shell $(CURLCONFIG) --libs)
LIBS+=$(CURL_LDFLAGS)
CFLAGS+=$(CURL_CFLAGS)
endif
ifdef STATIC ifdef STATIC
LIBS:=-static $(LIBS) LIBS:=-static $(LIBS)
endif endif
...@@ -480,11 +528,11 @@ OBJS:=$(i_main_o) \ ...@@ -480,11 +528,11 @@ OBJS:=$(i_main_o) \
$(OBJDIR)/w_wad.o \ $(OBJDIR)/w_wad.o \
$(OBJDIR)/filesrch.o \ $(OBJDIR)/filesrch.o \
$(OBJDIR)/mserv.o \ $(OBJDIR)/mserv.o \
$(OBJDIR)/http-mserv.o\
$(OBJDIR)/i_tcp.o \ $(OBJDIR)/i_tcp.o \
$(OBJDIR)/lzf.o \ $(OBJDIR)/lzf.o \
$(OBJDIR)/vid_copy.o \ $(OBJDIR)/vid_copy.o \
$(OBJDIR)/b_bot.o \ $(OBJDIR)/b_bot.o \
$(i_cdmus_o) \
$(i_net_o) \ $(i_net_o) \
$(i_system_o) \ $(i_system_o) \
$(i_sound_o) \ $(i_sound_o) \
...@@ -500,10 +548,6 @@ POS:=$(BIN)/en.mo ...@@ -500,10 +548,6 @@ POS:=$(BIN)/en.mo
OPTS+=-DGETTEXT OPTS+=-DGETTEXT
endif endif
ifdef DJGPPDOS
all: pre-build $(BIN)/$(EXENAME)
endif
ifdef PANDORA ifdef PANDORA
all: pre-build $(BIN)/$(PNDNAME) all: pre-build $(BIN)/$(PNDNAME)
endif endif
...@@ -751,19 +795,6 @@ $(OBJDIR)/ogl_win.o: hardware/r_opengl/ogl_win.c hardware/r_opengl/r_opengl.h \ ...@@ -751,19 +795,6 @@ $(OBJDIR)/ogl_win.o: hardware/r_opengl/ogl_win.c hardware/r_opengl/r_opengl.h \
$(CC) $(CFLAGS) $(WFLAGS) -D_WINDOWS -mwindows -c $< -o $@ $(CC) $(CFLAGS) $(WFLAGS) -D_WINDOWS -mwindows -c $< -o $@
endif endif
ifndef NOHS
$(OBJDIR)/s_ds3d.o: hardware/s_ds3d/s_ds3d.c hardware/hw3dsdrv.h \
hardware/hw_dll.h
$(CC) $(ARCHOPTS) -Os -o $(OBJDIR)/s_ds3d.o $(WFLAGS) -D_WINDOWS -mwindows -c hardware/s_ds3d/s_ds3d.c
$(OBJDIR)/s_fmod.o: hardware/s_openal/s_openal.c hardware/hw3dsdrv.h \
hardware/hw_dll.h
$(CC) $(ARCHOPTS) -Os -o $(OBJDIR)/s_fmod.o $(WFLAGS) -D_WINDOWS -mwindows -c hardware/s_fmod/s_fmod.c
$(OBJDIR)/s_openal.o: hardware/s_openal/s_openal.c hardware/hw3dsdrv.h \
hardware/hw_dll.h
$(CC) $(ARCHOPTS) -Os -o $(OBJDIR)/s_openal.o $(WFLAGS) -D_WINDOWS -mwindows -c hardware/s_openal/s_openal.c
endif
endif endif
endif endif
......
...@@ -48,7 +48,9 @@ endif ...@@ -48,7 +48,9 @@ endif
# Automatically set version flag, but not if one was manually set # Automatically set version flag, but not if one was manually set
ifeq (,$(filter GCC%,$(.VARIABLES))) ifeq (,$(filter GCC%,$(.VARIABLES)))
ifneq (,$(findstring gcc,$(shell $(CC) --version))) # if it's GCC version:=$(shell $(CC) --version)
# check if this is in fact GCC
ifneq (,$(or $(findstring gcc,$(version)),$(findstring GCC,$(version))))
version:=$(shell $(CC) -dumpversion) version:=$(shell $(CC) -dumpversion)
# Turn version into words of major, minor # Turn version into words of major, minor
...@@ -208,10 +210,7 @@ WFLAGS=-Wall ...@@ -208,10 +210,7 @@ WFLAGS=-Wall
ifndef GCC295 ifndef GCC295
#WFLAGS+=-Wno-packed #WFLAGS+=-Wno-packed
endif endif
ifdef ERRORMODE ifndef RELAXWARNINGS
WARNINGMODE=1
endif
ifdef WARNINGMODE
WFLAGS+=-W WFLAGS+=-W
#WFLAGS+=-Wno-sign-compare #WFLAGS+=-Wno-sign-compare
ifndef GCC295 ifndef GCC295
...@@ -345,7 +344,7 @@ ifndef MINGW ...@@ -345,7 +344,7 @@ ifndef MINGW
ifndef MINGW64 ifndef MINGW64
ifndef SDL ifndef SDL
ifndef DUMMY ifndef DUMMY
DJGPPDOS=1 $(error No interface or platform flag defined)
endif endif
endif endif
endif endif
...@@ -355,7 +354,6 @@ endif ...@@ -355,7 +354,6 @@ endif
endif endif
#determine the interface directory (where you put all i_*.c) #determine the interface directory (where you put all i_*.c)
i_cdmus_o=$(OBJDIR)/i_cdmus.o
i_net_o=$(OBJDIR)/i_net.o i_net_o=$(OBJDIR)/i_net.o
i_system_o=$(OBJDIR)/i_system.o i_system_o=$(OBJDIR)/i_system.o
i_sound_o=$(OBJDIR)/i_sound.o i_sound_o=$(OBJDIR)/i_sound.o
...@@ -381,16 +379,6 @@ UPX_OPTS+=-q ...@@ -381,16 +379,6 @@ UPX_OPTS+=-q
endif endif
#Interface Setup #Interface Setup
ifdef DJGPPDOS
INTERFACE=djgppdos
NASMFORMAT=coff
OBJDIR:=$(OBJDIR)/djgppdos
ifdef WATTCP
OBJDIR:=$(OBJDIR)/wattcp
endif
WFLAGS+=-Wno-format
BIN:=$(BIN)/Dos
else
ifdef DUMMY ifdef DUMMY
INTERFACE=dummy INTERFACE=dummy
OBJDIR:=$(OBJDIR)/dummy OBJDIR:=$(OBJDIR)/dummy
...@@ -449,7 +437,6 @@ endif ...@@ -449,7 +437,6 @@ endif
endif endif
endif endif
endif endif
endif
ifdef ARCHNAME ifdef ARCHNAME
OBJDIR:=$(OBJDIR)/$(ARCHNAME) OBJDIR:=$(OBJDIR)/$(ARCHNAME)
......
...@@ -8,8 +8,8 @@ ...@@ -8,8 +8,8 @@
UINT8 cdaudio_started = 0; UINT8 cdaudio_started = 0;
consvar_t cd_volume = {"cd_volume","18",CV_SAVE,soundvolume_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cd_volume = CVAR_INIT ("cd_volume","18",CV_SAVE,soundvolume_cons_t, NULL);
consvar_t cdUpdate = {"cd_update","1",CV_SAVE, NULL, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cdUpdate = CVAR_INIT ("cd_update","1",CV_SAVE, NULL, NULL);
void I_InitCD(void){} void I_InitCD(void){}
......
...@@ -17,7 +17,7 @@ boolean allow_fullscreen = false; ...@@ -17,7 +17,7 @@ boolean allow_fullscreen = false;
consvar_t cv_vidwait = {"vid_wait", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_vidwait = CVAR_INIT ("vid_wait", "On", CV_SAVE, CV_OnOff, NULL);
void I_StartupGraphics(void){} void I_StartupGraphics(void){}
void I_ShutdownGraphics(void){} void I_ShutdownGraphics(void){}
......
...@@ -193,7 +193,7 @@ static void B_BuildTailsTiccmd(mobj_t *sonic, mobj_t *tails, ticcmd_t *cmd) ...@@ -193,7 +193,7 @@ static void B_BuildTailsTiccmd(mobj_t *sonic, mobj_t *tails, ticcmd_t *cmd)
{ {
cmd->forwardmove = pcmd->forwardmove; cmd->forwardmove = pcmd->forwardmove;
cmd->sidemove = pcmd->sidemove; cmd->sidemove = pcmd->sidemove;
if (pcmd->buttons & BT_USE) if (pcmd->buttons & BT_SPIN)
{ {
spin = true; spin = true;
jump = false; jump = false;
...@@ -441,7 +441,7 @@ void B_KeysToTiccmd(mobj_t *mo, ticcmd_t *cmd, boolean forward, boolean backward ...@@ -441,7 +441,7 @@ void B_KeysToTiccmd(mobj_t *mo, ticcmd_t *cmd, boolean forward, boolean backward
if (jump) if (jump)
cmd->buttons |= BT_JUMP; cmd->buttons |= BT_JUMP;
if (spin) if (spin)
cmd->buttons |= BT_USE; cmd->buttons |= BT_SPIN;
} }
void B_MoveBlocked(player_t *player) void B_MoveBlocked(player_t *player)
......
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
#include "lauxlib.h" #include "lauxlib.h"
#include "lualib.h" #include "lualib.h"
#include "../m_fixed.h"
/* macro to `unsign' a character */ /* macro to `unsign' a character */
#define uchar(c) ((unsigned char)(c)) #define uchar(c) ((unsigned char)(c))
...@@ -790,7 +791,7 @@ static int str_format (lua_State *L) { ...@@ -790,7 +791,7 @@ static int str_format (lua_State *L) {
case 'e': case 'E': case 'f': case 'e': case 'E': case 'f':
case 'g': case 'G': { case 'g': case 'G': {
lua_Number n = luaL_checknumber(L, arg); lua_Number n = luaL_checknumber(L, arg);
sprintf(buff, form, (double)n); sprintf(buff, form, (double)n / FRACUNIT);
break; break;
} }
case 'q': { case 'q': {
......
...@@ -322,8 +322,8 @@ static void Arith (lua_State *L, StkId ra, TValue *rb, ...@@ -322,8 +322,8 @@ static void Arith (lua_State *L, StkId ra, TValue *rb,
case TM_ADD: setnvalue(ra, luai_numadd(nb, nc)); break; case TM_ADD: setnvalue(ra, luai_numadd(nb, nc)); break;
case TM_SUB: setnvalue(ra, luai_numsub(nb, nc)); break; case TM_SUB: setnvalue(ra, luai_numsub(nb, nc)); break;
case TM_MUL: setnvalue(ra, luai_nummul(nb, nc)); break; case TM_MUL: setnvalue(ra, luai_nummul(nb, nc)); break;
case TM_DIV: if (nc == 0) { lua_pushliteral(L, "divide by zero error"); lua_error(L); } else setnvalue(ra, luai_numdiv(nb, nc)); break; case TM_DIV: if (nc == 0) { luaG_runerror(L, "divide by zero error"); } else setnvalue(ra, luai_numdiv(nb, nc)); break;
case TM_MOD: if (nc == 0) { lua_pushliteral(L, "modulo by zero error"); lua_error(L); } else setnvalue(ra, luai_nummod(nb, nc)); break; case TM_MOD: if (nc == 0) { luaG_runerror(L, "modulo by zero error"); } else setnvalue(ra, luai_nummod(nb, nc)); break;
case TM_POW: setnvalue(ra, luai_numpow(nb, nc)); break; case TM_POW: setnvalue(ra, luai_numpow(nb, nc)); break;
case TM_UNM: setnvalue(ra, luai_numunm(nb)); break; case TM_UNM: setnvalue(ra, luai_numunm(nb)); break;
case TM_AND: setnvalue(ra, luai_numand(nb, nc)); break; case TM_AND: setnvalue(ra, luai_numand(nb, nc)); break;
...@@ -492,8 +492,7 @@ void luaV_execute (lua_State *L, int nexeccalls) { ...@@ -492,8 +492,7 @@ void luaV_execute (lua_State *L, int nexeccalls) {
if (ttisnumber(rb) && ttisnumber(rc)) { if (ttisnumber(rb) && ttisnumber(rc)) {
lua_Number nb = nvalue(rb), nc = nvalue(rc); lua_Number nb = nvalue(rb), nc = nvalue(rc);
if (nc == 0) { if (nc == 0) {
lua_pushliteral(L, "divide by zero error"); luaG_runerror(L, "divide by zero error");
lua_error(L);
} }
else else
setnvalue(ra, luai_numdiv(nb, nc)); setnvalue(ra, luai_numdiv(nb, nc));
...@@ -508,8 +507,7 @@ void luaV_execute (lua_State *L, int nexeccalls) { ...@@ -508,8 +507,7 @@ void luaV_execute (lua_State *L, int nexeccalls) {
if (ttisnumber(rb) && ttisnumber(rc)) { if (ttisnumber(rb) && ttisnumber(rc)) {
lua_Number nb = nvalue(rb), nc = nvalue(rc); lua_Number nb = nvalue(rb), nc = nvalue(rc);
if (nc == 0) { if (nc == 0) {
lua_pushliteral(L, "modulo by zero error"); luaG_runerror(L, "modulo by zero error");
lua_error(L);
} }
else else
setnvalue(ra, luai_nummod(nb, nc)); setnvalue(ra, luai_nummod(nb, nc));
......
This diff is collapsed.
...@@ -49,6 +49,8 @@ size_t COM_FirstOption(void); ...@@ -49,6 +49,8 @@ size_t COM_FirstOption(void);
// match existing command or NULL // match existing command or NULL
const char *COM_CompleteCommand(const char *partial, INT32 skips); const char *COM_CompleteCommand(const char *partial, INT32 skips);
const char *COM_CompleteAlias(const char *partial, INT32 skips);
// insert at queu (at end of other command) // insert at queu (at end of other command)
#define COM_BufAddText(s) COM_BufAddTextEx(s, 0) #define COM_BufAddText(s) COM_BufAddTextEx(s, 0)
void COM_BufAddTextEx(const char *btext, int flags); void COM_BufAddTextEx(const char *btext, int flags);
...@@ -144,6 +146,10 @@ typedef struct consvar_s //NULL, NULL, 0, NULL, NULL |, 0, NULL, NULL, 0, 0, NUL ...@@ -144,6 +146,10 @@ typedef struct consvar_s //NULL, NULL, 0, NULL, NULL |, 0, NULL, NULL, 0, 0, NUL
struct consvar_s *next; struct consvar_s *next;
} consvar_t; } consvar_t;
/* name, defaultvalue, flags, PossibleValue, func */
#define CVAR_INIT( ... ) \
{ __VA_ARGS__, 0, NULL, NULL, 0U, (char)0, NULL }
#ifdef OLD22DEMOCOMPAT #ifdef OLD22DEMOCOMPAT
typedef struct old_demo_var old_demo_var_t; typedef struct old_demo_var old_demo_var_t;
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment