diff --git a/.gitignore b/.gitignore
index e5b6b77..689ae6d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,728 +1,46 @@
-/Debug/SDL.obj
-/Debug/SHA1.obj
-/Debug/SendBuffer.obj
-/Debug/UniMod.Build.CppClean.log
-/Debug/UniMod.exp
-/Debug/UniMod.lib
-/Debug/UniMod.obj
-/Debug/UniMod.pch
-/Debug/UniMod.pdb
-/Debug/UniMod.tlog/CL.read.1.tlog
-/Debug/UniMod.tlog/CL.write.1.tlog
-/Debug/UniMod.tlog/UniMod.lastbuildstate
-/Debug/UniMod.tlog/UniMod.write.1u.tlog
-/Debug/UniMod.tlog/cl.command.1.tlog
-/Debug/UniMod.tlog/link.command.1.tlog
-/Debug/UniMod.tlog/link.read.1.tlog
-/Debug/UniMod.tlog/link.write.1.tlog
-/Debug/UniMod2.log
-/Debug/Waypoints.obj
-/Debug/admin.obj
-/Debug/audServer.obj
-/Debug/authManager.obj
-/Debug/autoServer.obj
-/Debug/blocksort.obj
-/Debug/bugsAndChips.obj
-/Debug/bzlib.obj
-/Debug/cliUtil.obj
-/Debug/clientView.obj
-/Debug/compress.obj
-/Debug/console.obj
-/Debug/crctable.obj
-/Debug/decompress.obj
-/Debug/defs.obj
-/Debug/filesystem.obj
-/Debug/fxBuff.obj
-/Debug/gui.obj
-/Debug/huffman.obj
-/Debug/imageUtil.obj
-/Debug/json.obj
-/Debug/keys.obj
-/Debug/libVer.obj
-/Debug/lpeg.obj
-/Debug/lua_addons.obj
-/Debug/map.obj
-/Debug/mapUtil.obj
-/Debug/net.obj
-/Debug/player.obj
-/Debug/playerExternFunction.obj
-/Debug/polygon.obj
-/Debug/randtable.obj
-/Debug/react.obj
-/Debug/replays.obj
-/Debug/score.obj
-/Debug/spelList.obj
-/Debug/spellGet.obj
-/Debug/spells.obj
-/Debug/sprite.obj
-/Debug/stdafx.obj
-/Debug/tiles.obj
-/Debug/unit.obj
-/Debug/unit2.obj
-/Debug/unitExternFunction.obj
-/Debug/util.obj
-/Debug/vc120.idb
-/Debug/vc120.pdb
-/Debug/webserver.obj
-/Debug/windowMsg.obj
-/Debug/windows.obj
-/Debug/windowsUniModFunction.obj
+/Debug/
+/Release/
+/Libs/SDL/freetype-2.5.5/objs/
/Libs/LuaJIT-2.0.3/luajit.vcxproj.user
/Libs/LuaJIT-2.0.3/src/host/buildvm_arch.h
+/Libs/LuaJIT-2.0.3/src/*.obj
+/Libs/LuaJIT-2.0.3/src/*.lib
+/Libs/LuaJIT-2.0.3/src/luajit.exe
+/Libs/LuaJIT-2.0.3/src/luajit.log
/Libs/LuaJIT-2.0.3/src/jit/vmdef.lua
/Libs/LuaJIT-2.0.3/src/lj_bcdef.h
/Libs/LuaJIT-2.0.3/src/lj_ffdef.h
/Libs/LuaJIT-2.0.3/src/lj_folddef.h
/Libs/LuaJIT-2.0.3/src/lj_libdef.h
/Libs/LuaJIT-2.0.3/src/lj_recdef.h
-/Libs/LuaJIT-2.0.3/src/lua51.lib
-/Libs/LuaJIT-2.0.3/src/luajit.exe
-/Libs/LuaJIT-2.0.3/src/luajit.log
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL2.Build.CppClean.log
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL2.tlog/CL.read.1.tlog
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL2.tlog/CL.write.1.tlog
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL2.tlog/Lib-link-cvtres.read.1.tlog
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL2.tlog/Lib-link-cvtres.write.1.tlog
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL2.tlog/SDL2.lastbuildstate
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL2.tlog/cl.command.1.tlog
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL2.tlog/lib.command.1.tlog
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL2.tlog/rc.command.1.tlog
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL2.tlog/rc.read.1.tlog
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL2.tlog/rc.write.1.tlog
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_RLEaccel.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_VS2013.log
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_assert.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_atomic.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_audio.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_audiocvt.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_audiodev.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_audiotypecvt.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_blendfillrect.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_blendline.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_blendpoint.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_blit.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_blit_0.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_blit_1.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_blit_A.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_blit_N.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_blit_auto.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_blit_copy.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_blit_slow.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_bmp.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_clipboard.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_clipboardevents.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_cpuinfo.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_d3dmath.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_directsound.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_diskaudio.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_drawline.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_drawpoint.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_dropevents.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_dummyaudio.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_dxjoystick.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_dynapi.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_egl.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_error.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_events.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_fillrect.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_gamecontroller.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_gesture.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_getenv.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_haptic.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_hints.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_iconv.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_joystick.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_keyboard.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_log.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_malloc.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_mixer.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_mmjoystick.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_mouse.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_nullevents.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_nullframebuffer.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_nullvideo.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_pixels.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_power.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_qsort.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_quit.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_rect.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_render.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_render_d3d.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_render_d3d11.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_render_gl.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_render_gles2.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_render_sw.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_rotate.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_rwops.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_shaders_gl.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_shaders_gles2.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_shape.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_spinlock.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_stdlib.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_stretch.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_string.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_surface.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_syscond.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_sysfilesystem.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_syshaptic.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_sysloadso.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_sysmutex.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_syspower.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_syssem.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_systhread.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_systimer.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_systls.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_thread.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_timer.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_touch.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_video.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_wave.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_windowevents.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_windows.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_windowsclipboard.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_windowsevents.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_windowsframebuffer.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_windowskeyboard.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_windowsmessagebox.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_windowsmodes.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_windowsmouse.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_windowsopengl.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_windowsopengles.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_windowsshape.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_windowsvideo.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_windowswindow.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_winmm.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_xaudio2.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_yuv_mmx.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/SDL_yuv_sw.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/e_atan2.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/e_log.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/e_pow.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/e_rem_pio2.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/e_sqrt.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/k_cos.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/k_rem_pio2.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/k_sin.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/s_atan.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/s_copysign.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/s_cos.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/s_fabs.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/s_floor.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/s_scalbn.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/s_sin.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/vc120.idb
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/vc120.pdb
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/version.res
-/Libs/SDL/SDL2_ttf-2.0.12/VisualC/Win32/Debug/SDL2_ttf.Build.CppClean.log
-/Libs/SDL/SDL2_ttf-2.0.12/VisualC/Win32/Debug/SDL2_ttf.tlog/CL.read.1.tlog
-/Libs/SDL/SDL2_ttf-2.0.12/VisualC/Win32/Debug/SDL2_ttf.tlog/CL.write.1.tlog
-/Libs/SDL/SDL2_ttf-2.0.12/VisualC/Win32/Debug/SDL2_ttf.tlog/Lib-link-cvtres.read.1.tlog
-/Libs/SDL/SDL2_ttf-2.0.12/VisualC/Win32/Debug/SDL2_ttf.tlog/Lib-link-cvtres.write.1.tlog
-/Libs/SDL/SDL2_ttf-2.0.12/VisualC/Win32/Debug/SDL2_ttf.tlog/SDL2_ttf.lastbuildstate
-/Libs/SDL/SDL2_ttf-2.0.12/VisualC/Win32/Debug/SDL2_ttf.tlog/cl.command.1.tlog
-/Libs/SDL/SDL2_ttf-2.0.12/VisualC/Win32/Debug/SDL2_ttf.tlog/lib.command.1.tlog
-/Libs/SDL/SDL2_ttf-2.0.12/VisualC/Win32/Debug/SDL2_ttf.tlog/rc.command.1.tlog
-/Libs/SDL/SDL2_ttf-2.0.12/VisualC/Win32/Debug/SDL2_ttf.tlog/rc.read.1.tlog
-/Libs/SDL/SDL2_ttf-2.0.12/VisualC/Win32/Debug/SDL2_ttf.tlog/rc.write.1.tlog
-/Libs/SDL/SDL2_ttf-2.0.12/VisualC/Win32/Debug/SDL_ttf.obj
-/Libs/SDL/SDL2_ttf-2.0.12/VisualC/Win32/Debug/SDL_ttf_VS2012.log
-/Libs/SDL/SDL2_ttf-2.0.12/VisualC/Win32/Debug/Version.res
-/Libs/SDL/SDL2_ttf-2.0.12/VisualC/Win32/Debug/vc120.idb
-/Libs/SDL/SDL2_ttf-2.0.12/VisualC/Win32/Debug/vc120.pdb
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Debug/autofit.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Debug/bdf.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Debug/cff.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Debug/freetype.log
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Debug/freetype.tlog/CL.read.1.tlog
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Debug/freetype.tlog/Lib-link.read.1.tlog
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Debug/freetype.tlog/Lib-link.write.1.tlog
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Debug/freetype.tlog/cl.command.1.tlog
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Debug/freetype.tlog/cl.write.1.tlog
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Debug/freetype.tlog/freetype.lastbuildstate
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Debug/freetype.tlog/lib.command.1.tlog
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Debug/freetype255d.Build.CppClean.log
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Debug/ftbase.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Debug/ftbbox.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Debug/ftbitmap.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Debug/ftcache.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Debug/ftdebug.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Debug/ftfstype.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Debug/ftgasp.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Debug/ftglyph.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Debug/ftgxval.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Debug/ftgzip.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Debug/ftinit.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Debug/ftlcdfil.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Debug/ftlzw.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Debug/ftmm.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Debug/ftotval.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Debug/ftpatent.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Debug/ftpfr.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Debug/ftstroke.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Debug/ftsynth.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Debug/ftsystem.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Debug/fttype1.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Debug/ftwinfnt.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Debug/ftxf86.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Debug/pcf.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Debug/pfr.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Debug/psaux.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Debug/pshinter.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Debug/psmodule.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Debug/raster.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Debug/sfnt.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Debug/smooth.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Debug/truetype.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Debug/type1.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Debug/type1cid.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Debug/type42.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Debug/winfnt.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/freetype255d.pdb
+/Libs/LuaJIT-2.0.3/src/jit/vmdef.lua
+/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Debug/
+/Libs/SDL/SDL2_ttf-2.0.12/VisualC/Win32/Debug/
+/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/
+/Libs/SDL/SDL2_ttf-2.0.12/VisualC/Win32/Release/
/Libs/SDL2.lib
/Libs/SDL2_ttf.lib
/Libs/freetype.lib
/Libs/libpng.lib
-/Libs/lpng151/projects/visualc71/Win32_LIB_Debug/ZLib/adler32.obj
-/Libs/lpng151/projects/visualc71/Win32_LIB_Debug/ZLib/compress.obj
-/Libs/lpng151/projects/visualc71/Win32_LIB_Debug/ZLib/crc32.obj
-/Libs/lpng151/projects/visualc71/Win32_LIB_Debug/ZLib/deflate.obj
-/Libs/lpng151/projects/visualc71/Win32_LIB_Debug/ZLib/gzclose.obj
-/Libs/lpng151/projects/visualc71/Win32_LIB_Debug/ZLib/gzlib.obj
-/Libs/lpng151/projects/visualc71/Win32_LIB_Debug/ZLib/gzread.obj
-/Libs/lpng151/projects/visualc71/Win32_LIB_Debug/ZLib/gzwrite.obj
-/Libs/lpng151/projects/visualc71/Win32_LIB_Debug/ZLib/infback.obj
-/Libs/lpng151/projects/visualc71/Win32_LIB_Debug/ZLib/inffast.obj
-/Libs/lpng151/projects/visualc71/Win32_LIB_Debug/ZLib/inflate.obj
-/Libs/lpng151/projects/visualc71/Win32_LIB_Debug/ZLib/inftrees.obj
-/Libs/lpng151/projects/visualc71/Win32_LIB_Debug/ZLib/trees.obj
-/Libs/lpng151/projects/visualc71/Win32_LIB_Debug/ZLib/uncompr.obj
-/Libs/lpng151/projects/visualc71/Win32_LIB_Debug/ZLib/vc120.idb
-/Libs/lpng151/projects/visualc71/Win32_LIB_Debug/ZLib/vc120.pdb
-/Libs/lpng151/projects/visualc71/Win32_LIB_Debug/ZLib/zlib.Build.CppClean.log
-/Libs/lpng151/projects/visualc71/Win32_LIB_Debug/ZLib/zlib.log
-/Libs/lpng151/projects/visualc71/Win32_LIB_Debug/ZLib/zlib.tlog/CL.read.1.tlog
-/Libs/lpng151/projects/visualc71/Win32_LIB_Debug/ZLib/zlib.tlog/CL.write.1.tlog
-/Libs/lpng151/projects/visualc71/Win32_LIB_Debug/ZLib/zlib.tlog/Lib-link.read.1.tlog
-/Libs/lpng151/projects/visualc71/Win32_LIB_Debug/ZLib/zlib.tlog/Lib-link.write.1.tlog
-/Libs/lpng151/projects/visualc71/Win32_LIB_Debug/ZLib/zlib.tlog/cl.command.1.tlog
-/Libs/lpng151/projects/visualc71/Win32_LIB_Debug/ZLib/zlib.tlog/lib.command.1.tlog
-/Libs/lpng151/projects/visualc71/Win32_LIB_Debug/ZLib/zlib.tlog/zlib.lastbuildstate
-/Libs/lpng151/projects/visualc71/Win32_LIB_Debug/ZLib/zutil.obj
-/Libs/lpng151/projects/visualc71/Win32_LIB_Debug/libpng.Build.CppClean.log
-/Libs/lpng151/projects/visualc71/Win32_LIB_Debug/libpng.log
-/Libs/lpng151/projects/visualc71/Win32_LIB_Debug/libpng.pch
-/Libs/lpng151/projects/visualc71/Win32_LIB_Debug/libpng.tlog/CL.read.1.tlog
-/Libs/lpng151/projects/visualc71/Win32_LIB_Debug/libpng.tlog/CL.write.1.tlog
-/Libs/lpng151/projects/visualc71/Win32_LIB_Debug/libpng.tlog/Lib-link.read.1.tlog
-/Libs/lpng151/projects/visualc71/Win32_LIB_Debug/libpng.tlog/Lib-link.write.1.tlog
-/Libs/lpng151/projects/visualc71/Win32_LIB_Debug/libpng.tlog/cl.command.1.tlog
-/Libs/lpng151/projects/visualc71/Win32_LIB_Debug/libpng.tlog/lib.command.1.tlog
-/Libs/lpng151/projects/visualc71/Win32_LIB_Debug/libpng.tlog/libpng.lastbuildstate
-/Libs/lpng151/projects/visualc71/Win32_LIB_Debug/png.obj
-/Libs/lpng151/projects/visualc71/Win32_LIB_Debug/pngerror.obj
-/Libs/lpng151/projects/visualc71/Win32_LIB_Debug/pngget.obj
-/Libs/lpng151/projects/visualc71/Win32_LIB_Debug/pngmem.obj
-/Libs/lpng151/projects/visualc71/Win32_LIB_Debug/pngpread.obj
-/Libs/lpng151/projects/visualc71/Win32_LIB_Debug/pngread.obj
-/Libs/lpng151/projects/visualc71/Win32_LIB_Debug/pngrio.obj
-/Libs/lpng151/projects/visualc71/Win32_LIB_Debug/pngrtran.obj
-/Libs/lpng151/projects/visualc71/Win32_LIB_Debug/pngrutil.obj
-/Libs/lpng151/projects/visualc71/Win32_LIB_Debug/pngset.obj
-/Libs/lpng151/projects/visualc71/Win32_LIB_Debug/pngtrans.obj
-/Libs/lpng151/projects/visualc71/Win32_LIB_Debug/pngwio.obj
-/Libs/lpng151/projects/visualc71/Win32_LIB_Debug/pngwrite.obj
-/Libs/lpng151/projects/visualc71/Win32_LIB_Debug/pngwtran.obj
-/Libs/lpng151/projects/visualc71/Win32_LIB_Debug/pngwutil.obj
-/Libs/lpng151/projects/visualc71/Win32_LIB_Debug/vc120.idb
-/Libs/lpng151/projects/visualc71/Win32_LIB_Debug/vc120.pdb
-/Libs/lpng151/projects/visualc71/Win32_LIB_Release/ZLib/zlib.Build.CppClean.log
-/Libs/lpng151/projects/visualc71/Win32_LIB_Release/ZLib/zlib.log
-/Libs/lpng151/projects/visualc71/Win32_LIB_Release/libpng.Build.CppClean.log
-/Libs/lpng151/projects/visualc71/Win32_LIB_Release/libpng.log
+/Libs/lpng151/projects/visualc71/Win32_LIB_Debug/
+/Libs/lpng151/projects/visualc71/Win32_LIB_Release/
/Libs/luajit.lib
-/Libs/luasocket/src/auxiliar.obj
-/Libs/luasocket/src/buffer.obj
-/Libs/luasocket/src/except.obj
-/Libs/luasocket/src/inet.obj
-/Libs/luasocket/src/io.obj
-/Libs/luasocket/src/luasocket.obj
-/Libs/luasocket/src/options.obj
-/Libs/luasocket/src/select.obj
-/Libs/luasocket/src/socket.Build.CppClean.log
-/Libs/luasocket/src/socket.log
-/Libs/luasocket/src/socket.tlog/CL.read.1.tlog
-/Libs/luasocket/src/socket.tlog/CL.write.1.tlog
-/Libs/luasocket/src/socket.tlog/Lib-link.read.1.tlog
-/Libs/luasocket/src/socket.tlog/Lib-link.write.1.tlog
-/Libs/luasocket/src/socket.tlog/cl.command.1.tlog
-/Libs/luasocket/src/socket.tlog/lib.command.1.tlog
-/Libs/luasocket/src/socket.tlog/socket.lastbuildstate
-/Libs/luasocket/src/tcp.obj
-/Libs/luasocket/src/timeout.obj
-/Libs/luasocket/src/udp.obj
-/Libs/luasocket/src/vc120.idb
-/Libs/luasocket/src/vc120.pdb
-/Libs/luasocket/src/wsocket.obj
-/Libs/socket.lib
-/Libs/zlib.lib
-/Release/UniMod.Build.CppClean.log
-/Release/UniMod.tlog/unsuccessfulbuild
-/Release/UniMod2.log
+/Libs/luasocket/src/*.log
+/Libs/luasocket/src/*.tlog
+/Libs/luasocket/src/*.obj
+/Libs/luasocket/src/*.lib
+/Libs/*.lib
/UniMod2.vcxproj.user
/UniModNew.opensdf
/UniModNew.sdf
-/UniModNew.v12.suo
-/ipch/unimod2-11107902/unimod-62249a38.ipch
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL2.Build.CppClean.log
-/Libs/SDL/SDL2_ttf-2.0.12/VisualC/Win32/Release/SDL2_ttf.Build.CppClean.log
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Release/freetype255.Build.CppClean.log
-/Debug/UniMod.dll.intermediate.manifest
-/Debug/UniMod.dll.manifest
-/Debug/UniMod.tlog/mt.command.1.tlog
-/Debug/UniMod.tlog/mt.read.1.tlog
-/Debug/UniMod.tlog/mt.write.1.tlog
-/Libs/lpng151/projects/visualc71/Win32_LIB_Release/ZLib/adler32.obj
-/Libs/lpng151/projects/visualc71/Win32_LIB_Release/ZLib/compress.obj
-/Libs/lpng151/projects/visualc71/Win32_LIB_Release/ZLib/crc32.obj
-/Libs/lpng151/projects/visualc71/Win32_LIB_Release/ZLib/deflate.obj
-/Libs/lpng151/projects/visualc71/Win32_LIB_Release/ZLib/gzclose.obj
-/Libs/lpng151/projects/visualc71/Win32_LIB_Release/ZLib/gzlib.obj
-/Libs/lpng151/projects/visualc71/Win32_LIB_Release/ZLib/gzread.obj
-/Libs/lpng151/projects/visualc71/Win32_LIB_Release/ZLib/gzwrite.obj
-/Libs/lpng151/projects/visualc71/Win32_LIB_Release/ZLib/infback.obj
-/Libs/lpng151/projects/visualc71/Win32_LIB_Release/ZLib/inffast.obj
-/Libs/lpng151/projects/visualc71/Win32_LIB_Release/ZLib/inflate.obj
-/Libs/lpng151/projects/visualc71/Win32_LIB_Release/ZLib/inftrees.obj
-/Libs/lpng151/projects/visualc71/Win32_LIB_Release/ZLib/trees.obj
-/Libs/lpng151/projects/visualc71/Win32_LIB_Release/ZLib/uncompr.obj
-/Libs/lpng151/projects/visualc71/Win32_LIB_Release/ZLib/vc120.pdb
-/Libs/lpng151/projects/visualc71/Win32_LIB_Release/ZLib/zlib.tlog/CL.read.1.tlog
-/Libs/lpng151/projects/visualc71/Win32_LIB_Release/ZLib/zlib.tlog/CL.write.1.tlog
-/Libs/lpng151/projects/visualc71/Win32_LIB_Release/ZLib/zlib.tlog/Lib-link.read.1.tlog
-/Libs/lpng151/projects/visualc71/Win32_LIB_Release/ZLib/zlib.tlog/Lib-link.write.1.tlog
-/Libs/lpng151/projects/visualc71/Win32_LIB_Release/ZLib/zlib.tlog/cl.command.1.tlog
-/Libs/lpng151/projects/visualc71/Win32_LIB_Release/ZLib/zlib.tlog/lib.command.1.tlog
-/Libs/lpng151/projects/visualc71/Win32_LIB_Release/ZLib/zlib.tlog/zlib.lastbuildstate
-/Libs/lpng151/projects/visualc71/Win32_LIB_Release/ZLib/zutil.obj
-/Libs/lpng151/projects/visualc71/Win32_LIB_Release/libpng.pch
-/Libs/lpng151/projects/visualc71/Win32_LIB_Release/libpng.tlog/CL.read.1.tlog
-/Libs/lpng151/projects/visualc71/Win32_LIB_Release/libpng.tlog/CL.write.1.tlog
-/Libs/lpng151/projects/visualc71/Win32_LIB_Release/libpng.tlog/Lib-link.read.1.tlog
-/Libs/lpng151/projects/visualc71/Win32_LIB_Release/libpng.tlog/Lib-link.write.1.tlog
-/Libs/lpng151/projects/visualc71/Win32_LIB_Release/libpng.tlog/cl.command.1.tlog
-/Libs/lpng151/projects/visualc71/Win32_LIB_Release/libpng.tlog/lib.command.1.tlog
-/Libs/lpng151/projects/visualc71/Win32_LIB_Release/libpng.tlog/libpng.lastbuildstate
-/Libs/lpng151/projects/visualc71/Win32_LIB_Release/png.obj
-/Libs/lpng151/projects/visualc71/Win32_LIB_Release/pngerror.obj
-/Libs/lpng151/projects/visualc71/Win32_LIB_Release/pngget.obj
-/Libs/lpng151/projects/visualc71/Win32_LIB_Release/pngmem.obj
-/Libs/lpng151/projects/visualc71/Win32_LIB_Release/pngpread.obj
-/Libs/lpng151/projects/visualc71/Win32_LIB_Release/pngread.obj
-/Libs/lpng151/projects/visualc71/Win32_LIB_Release/pngrio.obj
-/Libs/lpng151/projects/visualc71/Win32_LIB_Release/pngrtran.obj
-/Libs/lpng151/projects/visualc71/Win32_LIB_Release/pngrutil.obj
-/Libs/lpng151/projects/visualc71/Win32_LIB_Release/pngset.obj
-/Libs/lpng151/projects/visualc71/Win32_LIB_Release/pngtrans.obj
-/Libs/lpng151/projects/visualc71/Win32_LIB_Release/pngwio.obj
-/Libs/lpng151/projects/visualc71/Win32_LIB_Release/pngwrite.obj
-/Libs/lpng151/projects/visualc71/Win32_LIB_Release/pngwtran.obj
-/Libs/lpng151/projects/visualc71/Win32_LIB_Release/pngwutil.obj
-/Libs/lpng151/projects/visualc71/Win32_LIB_Release/vc120.pdb
-/Release/SDL.obj
-/Release/SHA1.obj
-/Release/SendBuffer.obj
-/Release/UniMod.dll.intermediate.manifest
-/Release/UniMod.dll.manifest
-/Release/UniMod.exp
-/Release/UniMod.lib
-/Release/UniMod.obj
-/Release/UniMod.pch
-/Release/UniMod.pdb
-/Release/UniMod.tlog/CL.read.1.tlog
-/Release/UniMod.tlog/CL.write.1.tlog
-/Release/UniMod.tlog/UniMod.lastbuildstate
-/Release/UniMod.tlog/UniMod.write.1u.tlog
-/Release/UniMod.tlog/cl.command.1.tlog
-/Release/UniMod.tlog/link.command.1.tlog
-/Release/UniMod.tlog/link.read.1.tlog
-/Release/UniMod.tlog/link.write.1.tlog
-/Release/UniMod.tlog/mt.command.1.tlog
-/Release/UniMod.tlog/mt.read.1.tlog
-/Release/UniMod.tlog/mt.write.1.tlog
-/Release/Waypoints.obj
-/Release/admin.obj
-/Release/audServer.obj
-/Release/authManager.obj
-/Release/autoServer.obj
-/Release/blocksort.obj
-/Release/bugsAndChips.obj
-/Release/bzlib.obj
-/Release/cliUtil.obj
-/Release/clientView.obj
-/Release/compress.obj
-/Release/console.obj
-/Release/crctable.obj
-/Release/decompress.obj
-/Release/defs.obj
-/Release/filesystem.obj
-/Release/fxBuff.obj
-/Release/gui.obj
-/Release/huffman.obj
-/Release/imageUtil.obj
-/Release/json.obj
-/Release/keys.obj
-/Release/libVer.obj
-/Release/lpeg.obj
-/Release/lua_addons.obj
-/Release/map.obj
-/Release/mapUtil.obj
-/Release/net.obj
-/Release/player.obj
-/Release/playerExternFunction.obj
-/Release/polygon.obj
-/Release/randtable.obj
-/Release/react.obj
-/Release/replays.obj
-/Release/score.obj
-/Release/spelList.obj
-/Release/spellGet.obj
-/Release/spells.obj
-/Release/sprite.obj
-/Release/stdafx.obj
-/Release/tiles.obj
-/Release/unit.obj
-/Release/unit2.obj
-/Release/unitExternFunction.obj
-/Release/util.obj
-/Release/vc120.pdb
-/Release/webserver.obj
-/Release/windowMsg.obj
-/Release/windows.obj
-/Release/windowsUniModFunction.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL2.tlog/CL.read.1.tlog
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL2.tlog/CL.write.1.tlog
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL2.tlog/Lib-link-cvtres.read.1.tlog
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL2.tlog/Lib-link-cvtres.write.1.tlog
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL2.tlog/SDL2.lastbuildstate
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL2.tlog/cl.command.1.tlog
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL2.tlog/lib.command.1.tlog
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL2.tlog/rc.command.1.tlog
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL2.tlog/rc.read.1.tlog
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL2.tlog/rc.write.1.tlog
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_RLEaccel.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_VS2013.log
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_assert.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_atomic.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_audio.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_audiocvt.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_audiodev.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_audiotypecvt.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_blendfillrect.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_blendline.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_blendpoint.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_blit.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_blit_0.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_blit_1.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_blit_A.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_blit_N.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_blit_auto.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_blit_copy.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_blit_slow.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_bmp.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_clipboard.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_clipboardevents.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_cpuinfo.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_d3dmath.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_directsound.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_diskaudio.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_drawline.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_drawpoint.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_dropevents.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_dummyaudio.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_dxjoystick.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_dynapi.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_egl.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_error.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_events.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_fillrect.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_gamecontroller.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_gesture.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_getenv.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_haptic.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_hints.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_iconv.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_joystick.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_keyboard.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_log.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_malloc.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_mixer.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_mmjoystick.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_mouse.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_nullevents.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_nullframebuffer.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_nullvideo.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_pixels.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_power.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_qsort.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_quit.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_rect.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_render.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_render_d3d.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_render_d3d11.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_render_gl.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_render_gles2.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_render_sw.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_rotate.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_rwops.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_shaders_gl.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_shaders_gles2.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_shape.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_spinlock.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_stdlib.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_stretch.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_string.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_surface.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_syscond.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_sysfilesystem.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_syshaptic.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_sysloadso.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_sysmutex.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_syspower.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_syssem.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_systhread.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_systimer.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_systls.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_thread.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_timer.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_touch.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_video.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_wave.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_windowevents.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_windows.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_windowsclipboard.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_windowsevents.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_windowsframebuffer.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_windowskeyboard.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_windowsmessagebox.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_windowsmodes.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_windowsmouse.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_windowsopengl.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_windowsopengles.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_windowsshape.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_windowsvideo.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_windowswindow.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_winmm.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_xaudio2.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_yuv_mmx.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/SDL_yuv_sw.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/e_atan2.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/e_log.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/e_pow.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/e_rem_pio2.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/e_sqrt.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/k_cos.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/k_rem_pio2.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/k_sin.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/s_atan.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/s_copysign.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/s_cos.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/s_fabs.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/s_floor.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/s_scalbn.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/s_sin.obj
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/vc120.pdb
-/Libs/SDL/SDL2-2.0.3/VisualC/SDL/Win32/Release/version.res
-/Libs/SDL/SDL2_ttf-2.0.12/VisualC/Win32/Release/SDL2_ttf.tlog/CL.read.1.tlog
-/Libs/SDL/SDL2_ttf-2.0.12/VisualC/Win32/Release/SDL2_ttf.tlog/CL.write.1.tlog
-/Libs/SDL/SDL2_ttf-2.0.12/VisualC/Win32/Release/SDL2_ttf.tlog/Lib-link-cvtres.read.1.tlog
-/Libs/SDL/SDL2_ttf-2.0.12/VisualC/Win32/Release/SDL2_ttf.tlog/Lib-link-cvtres.write.1.tlog
-/Libs/SDL/SDL2_ttf-2.0.12/VisualC/Win32/Release/SDL2_ttf.tlog/SDL2_ttf.lastbuildstate
-/Libs/SDL/SDL2_ttf-2.0.12/VisualC/Win32/Release/SDL2_ttf.tlog/cl.command.1.tlog
-/Libs/SDL/SDL2_ttf-2.0.12/VisualC/Win32/Release/SDL2_ttf.tlog/lib.command.1.tlog
-/Libs/SDL/SDL2_ttf-2.0.12/VisualC/Win32/Release/SDL2_ttf.tlog/rc.command.1.tlog
-/Libs/SDL/SDL2_ttf-2.0.12/VisualC/Win32/Release/SDL2_ttf.tlog/rc.read.1.tlog
-/Libs/SDL/SDL2_ttf-2.0.12/VisualC/Win32/Release/SDL2_ttf.tlog/rc.write.1.tlog
-/Libs/SDL/SDL2_ttf-2.0.12/VisualC/Win32/Release/SDL_ttf.obj
-/Libs/SDL/SDL2_ttf-2.0.12/VisualC/Win32/Release/SDL_ttf_VS2012.log
-/Libs/SDL/SDL2_ttf-2.0.12/VisualC/Win32/Release/Version.res
-/Libs/SDL/SDL2_ttf-2.0.12/VisualC/Win32/Release/vc120.pdb
-/Libs/SDL/VQA/Debug/VQA_XCC.log
-/Libs/SDL/VQA/Debug/VQA_XCC.tlog/CL.read.1.tlog
-/Libs/SDL/VQA/Debug/VQA_XCC.tlog/CL.write.1.tlog
-/Libs/SDL/VQA/Debug/VQA_XCC.tlog/Lib-link.read.1.tlog
-/Libs/SDL/VQA/Debug/VQA_XCC.tlog/Lib-link.write.1.tlog
-/Libs/SDL/VQA/Debug/VQA_XCC.tlog/VQA_XCC.lastbuildstate
-/Libs/SDL/VQA/Debug/VQA_XCC.tlog/cl.command.1.tlog
-/Libs/SDL/VQA/Debug/VQA_XCC.tlog/lib.command.1.tlog
-/Libs/SDL/VQA/Debug/aud_decode.obj
-/Libs/SDL/VQA/Debug/ddpf_conversion.obj
-/Libs/SDL/VQA/Debug/vc120.idb
-/Libs/SDL/VQA/Debug/vc120.pdb
-/Libs/SDL/VQA/Debug/vqa_decode.obj
-/Libs/SDL/VQA/Debug/vqa_file.obj
-/Libs/SDL/VQA/Release/VQA_XCC.log
-/Libs/SDL/VQA/Release/VQA_XCC.tlog/CL.read.1.tlog
-/Libs/SDL/VQA/Release/VQA_XCC.tlog/CL.write.1.tlog
-/Libs/SDL/VQA/Release/VQA_XCC.tlog/Lib-link.read.1.tlog
-/Libs/SDL/VQA/Release/VQA_XCC.tlog/Lib-link.write.1.tlog
-/Libs/SDL/VQA/Release/VQA_XCC.tlog/VQA_XCC.lastbuildstate
-/Libs/SDL/VQA/Release/VQA_XCC.tlog/cl.command.1.tlog
-/Libs/SDL/VQA/Release/VQA_XCC.tlog/lib.command.1.tlog
-/Libs/SDL/VQA/Release/aud_decode.obj
-/Libs/SDL/VQA/Release/ddpf_conversion.obj
-/Libs/SDL/VQA/Release/vc120.pdb
-/Libs/SDL/VQA/Release/vqa_decode.obj
-/Libs/SDL/VQA/Release/vqa_file.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Release/autofit.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Release/bdf.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Release/cff.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Release/freetype.log
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Release/freetype.tlog/CL.read.1.tlog
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Release/freetype.tlog/Lib-link.read.1.tlog
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Release/freetype.tlog/Lib-link.write.1.tlog
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Release/freetype.tlog/cl.command.1.tlog
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Release/freetype.tlog/cl.write.1.tlog
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Release/freetype.tlog/freetype.lastbuildstate
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Release/freetype.tlog/lib.command.1.tlog
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Release/ftbase.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Release/ftbbox.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Release/ftbitmap.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Release/ftcache.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Release/ftdebug.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Release/ftfstype.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Release/ftgasp.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Release/ftglyph.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Release/ftgxval.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Release/ftgzip.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Release/ftinit.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Release/ftlcdfil.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Release/ftlzw.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Release/ftmm.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Release/ftotval.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Release/ftpatent.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Release/ftpfr.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Release/ftstroke.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Release/ftsynth.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Release/ftsystem.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Release/fttype1.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Release/ftwinfnt.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Release/ftxf86.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Release/pcf.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Release/pfr.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Release/psaux.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Release/pshinter.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Release/psmodule.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Release/raster.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Release/sfnt.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Release/smooth.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Release/truetype.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Release/type1.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Release/type1cid.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Release/type42.obj
-/Libs/SDL/freetype-2.5.5/objs/vc2010/Win32/Release/winfnt.obj
-/Libs/VQA.lib
-/Libs/SDL/VQA/Release/VQA_XCC.Build.CppClean.log
-/Libs/SDL/VQA/Debug/VQA_XCC.Build.CppClean.log
-/ipch/unimod2-11107902/*.ipch
+/*.suo
+/ipch
+/Libs/SDL/SDL2-2.0.8/VisualC/SDL/Win32/Release/
+/Libs/SDL/SDL2-2.0.8/VisualC/SDL/Win32/Debug/
+/Libs/SDL/SDL2_ttf-2.0.12/VisualC/Win32/Release/
+/Libs/SDL/SDL2_ttf-2.0.12/VisualC/Win32/Debug/
+/Libs/SDL/VQA/Debug/
+/Libs/SDL/VQA/Release/
+/Libs/*.lib
+/Libs/SDL/VQA/Release/
+/Libs/SDL/VQA/Debug/
diff --git a/Libs/SDL/SDL2-2.0.8/VisualC/SDL/SDL.vcxproj b/Libs/SDL/SDL2-2.0.8/VisualC/SDL/SDL.vcxproj
index a649364..4d7445f 100644
--- a/Libs/SDL/SDL2-2.0.8/VisualC/SDL/SDL.vcxproj
+++ b/Libs/SDL/SDL2-2.0.8/VisualC/SDL/SDL.vcxproj
@@ -27,11 +27,11 @@
StaticLibrary
- v141_xp
+ v110_xp
StaticLibrary
- v141_xp
+ v110_xp
DynamicLibrary
diff --git a/Libs/SDL/SDL2_ttf-2.0.12/VisualC/SDL_ttf_VS2012.vcxproj b/Libs/SDL/SDL2_ttf-2.0.12/VisualC/SDL_ttf_VS2012.vcxproj
index be7795c..191e6e9 100644
--- a/Libs/SDL/SDL2_ttf-2.0.12/VisualC/SDL_ttf_VS2012.vcxproj
+++ b/Libs/SDL/SDL2_ttf-2.0.12/VisualC/SDL_ttf_VS2012.vcxproj
@@ -27,12 +27,12 @@
StaticLibrary
false
- v141_xp
+ v110_xp
StaticLibrary
false
- v141_xp
+ v110_xp
DynamicLibrary
diff --git a/Libs/SDL/VQA/VQA_XCC.vcxproj b/Libs/SDL/VQA/VQA_XCC.vcxproj
index e4ac2d0..131f712 100644
--- a/Libs/SDL/VQA/VQA_XCC.vcxproj
+++ b/Libs/SDL/VQA/VQA_XCC.vcxproj
@@ -19,12 +19,12 @@
StaticLibrary
true
- v141_xp
+ v110_xp
StaticLibrary
false
- v141_xp
+ v110_xp
diff --git a/Libs/SDL/freetype-2.5.5/builds/windows/vc2010/freetype.vcxproj b/Libs/SDL/freetype-2.5.5/builds/windows/vc2010/freetype.vcxproj
index 0f191fa..c7becc9 100644
--- a/Libs/SDL/freetype-2.5.5/builds/windows/vc2010/freetype.vcxproj
+++ b/Libs/SDL/freetype-2.5.5/builds/windows/vc2010/freetype.vcxproj
@@ -59,7 +59,7 @@
StaticLibrary
false
MultiByte
- v141_xp
+ v110_xp
StaticLibrary
@@ -95,7 +95,7 @@
StaticLibrary
false
MultiByte
- v141_xp
+ v110_xp
StaticLibrary
diff --git a/Libs/SDL/freetype-2.5.5/objs/README b/Libs/SDL/freetype-2.5.5/objs/README
deleted file mode 100644
index befb63e..0000000
--- a/Libs/SDL/freetype-2.5.5/objs/README
+++ /dev/null
@@ -1,2 +0,0 @@
-This directory contains all the object files created when building the
-library.
diff --git a/Libs/lpng151/projects/visualc71/libpng.vcxproj b/Libs/lpng151/projects/visualc71/libpng.vcxproj
index 8898a18..3dcb835 100644
--- a/Libs/lpng151/projects/visualc71/libpng.vcxproj
+++ b/Libs/lpng151/projects/visualc71/libpng.vcxproj
@@ -30,11 +30,11 @@
StaticLibrary
- v141_xp
+ v110_xp
StaticLibrary
- v141_xp
+ v110_xp
DynamicLibrary
diff --git a/Libs/lpng151/projects/visualc71/zlib.vcxproj b/Libs/lpng151/projects/visualc71/zlib.vcxproj
index 1b2af03..adc470f 100644
--- a/Libs/lpng151/projects/visualc71/zlib.vcxproj
+++ b/Libs/lpng151/projects/visualc71/zlib.vcxproj
@@ -26,11 +26,11 @@
StaticLibrary
- v141_xp
+ v110_xp
StaticLibrary
- v141_xp
+ v110_xp
DynamicLibrary
diff --git a/Libs/luasocket/socket.vcxproj b/Libs/luasocket/socket.vcxproj
index e1c448f..db53247 100644
--- a/Libs/luasocket/socket.vcxproj
+++ b/Libs/luasocket/socket.vcxproj
@@ -18,12 +18,12 @@
StaticLibrary
- v141_xp
+ v110_xp
MultiByte
StaticLibrary
- v141_xp
+ v110_xp
MultiByte
diff --git a/SDL.cpp b/SDL.cpp
index 8049d38..bc1ce6b 100644
--- a/SDL.cpp
+++ b/SDL.cpp
@@ -11,6 +11,7 @@
LPDIRECTSOUND* noxDsound = (LPDIRECTSOUND*)0x83A1AC;
+// Do not load SDL because this may cause conflict between new SDL patch and ours
bool SDL_enabled = false;
extern std::string getGameDirectory();
@@ -767,11 +768,11 @@ extern void InjectOffs(DWORD Addr, void *Fn);
extern void InjectData(DWORD offset, byte* buff, size_t size);
void initSDL()
{
- // Get the players settings
- ReadConfigFile();
-
if (SDL_enabled)
{
+ // Get the players settings
+ ReadConfigFile();
+
InjectJumpTo((DWORD)pTrueMessageLoop, &MessageLoop);
InjectJumpTo((DWORD)pTrueMouseInit, &MouseInit);
InjectJumpTo((DWORD)pTrueGetMouseData, &GetMouseData);
diff --git a/UniMod2.vcxproj b/UniMod2.vcxproj
index 7e40c62..5e19ba2 100644
--- a/UniMod2.vcxproj
+++ b/UniMod2.vcxproj
@@ -22,12 +22,12 @@
DynamicLibrary
MultiByte
true
- v141_xp
+ v110_xp
DynamicLibrary
MultiByte
- v141_xp
+ v110_xp
@@ -101,7 +101,6 @@
Shlwapi.lib;User32.lib;Psapi.lib;libcmt.lib;%(AdditionalDependencies)
- ..\$(ProjectName).dll
true
Windows
true
diff --git a/admin.cpp b/admin.cpp
index 91663df..ce02ed0 100644
--- a/admin.cpp
+++ b/admin.cpp
@@ -1127,7 +1127,6 @@ namespace
}
return result;
}
-
}
extern "C" void adminInit(lua_State *L);
extern void authInit(lua_State *L);
diff --git a/authManager.cpp b/authManager.cpp
index 8492f14..2233393 100644
--- a/authManager.cpp
+++ b/authManager.cpp
@@ -240,6 +240,7 @@ namespace
unsigned char lhash[20];
sha.GetHash(lhash);
sha.Reset();
+
if(authData.find(sha1hash(lhash))!=authData.end() && strncmp(authData[sha1hash(lhash)].login, login, 50)==0 && authData[sha1hash(lhash)].isActive==true)
{
sha.Update((const unsigned char*)pass, strlen(pass));
@@ -247,6 +248,7 @@ namespace
unsigned char phash[20];
sha.GetHash(phash);
sha.Reset();
+
if(strncmp((char*)authData[sha1hash(lhash)].phash, (char*)phash, 20)==0)
return true;
}
@@ -788,4 +790,62 @@ void authCheckDelayed(byte playerIdx, char* pass)
notLoggedIn.insert(pair(playerIdx, pass));
if(specialAuthRemote)
notLoggedInRemote.push(playerIdx);
+}
+
+// Process //auth tokens both from chat and console.
+// If true is returned from this function, the message is filtered out completely.
+bool processSpecialAuth(byte playerIdx, char* message)
+{
+ char authCmd[] = "//auth ";
+ char msgUsefulData[255];
+ memset(msgUsefulData, 0, 1);
+ // Trim //auth part
+ int mlen = strlen(message);
+ int alen = strlen(authCmd);
+ int start = 0;
+ if (strncmp(message, authCmd, alen) == 0)
+ {
+ start += alen;
+ mlen -= start;
+ }
+ if (mlen < 0)
+ mlen = 0;
+ strncpy(msgUsefulData, &message[start], mlen);
+
+ if (playerIdx!=0x1F && authorisedState[playerIdx]>=0 && authorisedState[playerIdx]<4)
+ {
+ switch(authorisedState[playerIdx])
+ {
+ case 0:
+ case 3:
+ return true;
+ break;
+ case 1:
+ // Тут только логин сейвим
+ {
+ char* tmp = new char[255];
+ strcpy_s(tmp, 255, msgUsefulData);
+ // Copy string to heap allocated ptr; it will be freed later in updateAuthDBProcess() -> authentificate()
+
+ authorisedLogins[playerIdx] = tmp;
+ authorisedState[playerIdx]++;
+ authSendWelcomeMsg[playerIdx] = -1;
+
+ return true;
+ }
+ break;
+ case 2:
+ {
+ // Сюда добавить логику запуска аутентификации по http
+
+ authorisedState[playerIdx]++;
+ authSendWelcomeMsg[playerIdx] = -1;
+ authCheckDelayed(playerIdx, msgUsefulData);
+
+ return true;
+ }
+ break;
+ }
+ }
+ return false;
}
\ No newline at end of file
diff --git a/bugsAndChips.cpp b/bugsAndChips.cpp
index 28ec205..9d75a10 100644
--- a/bugsAndChips.cpp
+++ b/bugsAndChips.cpp
@@ -355,9 +355,52 @@ void topicOverrideInit()
//InjectData(0x0040C29B, nop, 2);
}
-void bugsInit()
+int (__cdecl *netOnPacketRecvServ)(int playerId, char *packet, int length);
+// Validates incoming player data in order to prevent rogue players crashing the server
+// (this packet always comes singular, in contrast to regular MSG_* packets)
+int __cdecl netOnPacketRecvServ_Hook(int playerId, char *packet, int length)
{
+ if (*packet == 0x20 )
+ {
+ if (length < 0x9A)
+ {
+ char test[60];
+ sprintf(test,"[UniMod] Wrong player data len detected: 0x%X", length);
+ conPrintI(test);
+ // Go away, little bugger
+ return 0;
+ }
+
+ packet++;
+ // Check if nickname starts with invalid character
+ if (packet[0] <= 0x1F)
+ {
+ wcscpy((wchar_t*)packet, L"Jack\0");
+ conPrintI("[UniMod] Bugged player name was detected!");
+ }
+
+ // Check if player class is invalid
+ if (packet[0x42] >= 3)
+ {
+ packet[0x42] = 0;
+ conPrintI("[UniMod] Bugged player class was detected!");
+ }
+
+ // Check if player object requested by client is invalid
+ if (packet[0x43] > 0)
+ {
+ packet[0x43] = 0;
+ conPrintI("[UniMod] Bugged player object was detected!");
+ }
+ packet--;
+ }
+
+ // Carry on
+ return netOnPacketRecvServ(playerId, packet, length);
+}
+void bugsInit()
+{
ASSIGN(wndSummonUsed,0x00716E88);
ASSIGN(creatureSummonCommandAll,0x005B4080);
@@ -369,18 +412,26 @@ void bugsInit()
ASSIGN(wndSummonCreateList,0x004C2560);
ASSIGN(cliSummondWndLoad,0x004C2E50);
-
InjectJumpTo(0x004E1C8A,&asmDeathBallBugGs);
InjectJumpTo(0x004E1BD6,&asmDeathBallBugSh);
- InjectJumpTo(0x004C2BC7,&asmConjSummonEnotherCmp); // делаем возможность ПКМ
- InjectJumpTo(0x004C2BB6,&asmConjSummonDo); // ставим вместо списка наши 2 прикольные штуки
- InjectJumpTo(0x0049179A,&asmConjSummonCreate);
- InjectJumpTo(0x004C2ACC,&asmConjSummonDoAll);
- InjectJumpTo(0x004C3147,&asmConjSummonDieOrBanish);
- InjectJumpTo(0x004C1FA1,&asmConjSummonLoadWnd);
+ bool conjurerSummonCmdImprovements=false;
+ if (conjurerSummonCmdImprovements)
+ {
+ InjectJumpTo(0x004C2BC7,&asmConjSummonEnotherCmp); // делаем возможность ПКМ
+ InjectJumpTo(0x004C2BB6,&asmConjSummonDo); // ставим вместо списка наши 2 прикольные штуки
+ InjectJumpTo(0x0049179A,&asmConjSummonCreate);
+ InjectJumpTo(0x004C2ACC,&asmConjSummonDoAll);
+ InjectJumpTo(0x004C3147,&asmConjSummonDieOrBanish);
+ InjectJumpTo(0x004C1FA1,&asmConjSummonLoadWnd);
+ }
-// InjectJumpTo(0x0052C7CD,&asmFixCastFireball);
+ //InjectJumpTo(0x0052C7CD,&asmFixCastFireball);
- topicOverrideInit();
+ bool filterPlayerJoinData=true; // TODO: convert all similar hardcoded-switches into #defines in a separate file
+ if (filterPlayerJoinData)
+ {
+ InjectOffs(0x4DEC40 + 1, &netOnPacketRecvServ_Hook);
+ }
+ ASSIGN(netOnPacketRecvServ, 0x51BAD0);
}
\ No newline at end of file
diff --git a/console.cpp b/console.cpp
index 8fd6480..afe3335 100644
--- a/console.cpp
+++ b/console.cpp
@@ -44,8 +44,6 @@ namespace
lua_settop(L,Top);
}
-
-
int __declspec(naked) onPrintConsoleTrap()
{
__asm
diff --git a/libVer.cpp b/libVer.cpp
index 019690c..bb7d4b8 100644
--- a/libVer.cpp
+++ b/libVer.cpp
@@ -7,9 +7,9 @@
#include
#include
-extern void injectCon();
-extern "C" void __cdecl onNetPacket(BYTE *&BufStart,BYTE *E);
-extern "C" void __cdecl onNetPacket2(BYTE *&BufStart,BYTE *E, BYTE *MyPlayer, BYTE *MyUc);
+extern void initStepTwo();
+extern "C" void __cdecl onNetPacketClient(BYTE *&BufStart,BYTE *E);
+extern "C" void __cdecl onNetPacketServer(BYTE *&BufStart,BYTE *E, BYTE *MyPlayer, BYTE *MyUc);
extern "C" int __cdecl playerOnTrySpell(bigUnitStruct *Unit,byte *Uc,spellPacket *Pckt);
extern "C" void conSendToServer(const char *Cmd);
@@ -38,7 +38,7 @@ namespace
push ebx
lea eax, [esp+8-4]
push eax
- call onNetPacket
+ call onNetPacketClient
add esp, 8
pop ebp
cmp ebp, ebx
@@ -64,7 +64,7 @@ namespace
lea eax, [esp+0Ch-4]
push ecx
push eax
- call onNetPacket2
+ call onNetPacketServer
add esp, 10h
pop esi
cmp esi, [esp+2Ch]
@@ -147,7 +147,7 @@ namespace
lua_pushcclosure(L, delayedConL, 0);
lua_setfield(L, LUA_REGISTRYINDEX, "delayedCon");
- injectCon();
+ initStepTwo();
__asm
{
diff --git a/net.cpp b/net.cpp
index 9bc3382..72ff46f 100644
--- a/net.cpp
+++ b/net.cpp
@@ -4,7 +4,7 @@
#include
#include
-int UnimodVersion=010601;/// 00.06.01
+int UnimodVersion=010602;/// 00.06.02
void (__cdecl *netClientSend) (int PlrN,int Dir,//1 - клиенту
void *Buf,int BufSize);
@@ -314,24 +314,6 @@ namespace {
netSendAll(&RP,sizeof(RP));
return 0;
}
- int netFake(lua_State *L)
- /// высылает сообщение о смерти, но от этого помирает нокс
- {
- if (lua_type(L,1)!=LUA_TLIGHTUSERDATA)
- {
- lua_pushstring(L,"wrong args!");
- lua_error_(L);
- }
-
- struct {
- BYTE Pckt;
- USHORT Code;
- } B={0xE8,netGetUnitCodeServ(lua_touserdata(L,-1))};
-
- netSendAll(&B,sizeof(B));
-
- return 0;
- }
// Отправляет всем клиентам сообщение о смерти игрока.
// Аргументы: игрок, атакующий, ассист
@@ -770,8 +752,6 @@ namespace {
netSendServ(Buf,Pt-Buf);
}
-
-
int netVersionRq(lua_State*L)
{
lua_settop(L,1);
@@ -858,7 +838,7 @@ void netRegServPacket(uniPacket_e Event,netServFn_s Fn)
{
ServerRegMap.insert(std::make_pair(Event,Fn));
}
-extern "C" void __cdecl onNetPacket(BYTE *&BufStart,BYTE *E);
+extern "C" void __cdecl onNetPacketClient(BYTE *&BufStart,BYTE *E);
@@ -871,7 +851,7 @@ extern "C" void __cdecl onNetPacket(BYTE *&BufStart,BYTE *E);
extern void netOnWallChanged(wallRec *newData);
extern void netOnSendArchive(int Size,char *Name,char *NameE);
extern void netOnAbortDownload();
-void __cdecl onNetPacket(BYTE *&BufStart,BYTE *E)/// Полученые клиентом
+void __cdecl onNetPacketClient(BYTE *&BufStart,BYTE *E)/// Полученые клиентом
{
bool found=true;
// ВНИМАНИЕ! Для всех ВЫФИЛЬТРОВЫВАЕМЫХ пакетов - обязательно ставьте found=true! Иначе не будет производиться обработка других пакетов в ЭТОМ же фрейме!
@@ -963,20 +943,89 @@ extern char *(__cdecl *mapGetName)();
}
}
}
+extern int (__cdecl *playerKickByIdx)(int playerIdx, int unknownArg);
extern void spellServDoCustom(int SpellArr[5],bool OnSelf,BYTE *MyPlayer,BYTE *MyUc);
-
extern void netOnClientTryUse(BYTE *Start,BYTE *End,BYTE *MyUc,void *Player);
-extern "C" void __cdecl onNetPacket2(BYTE *&BufStart,BYTE *E,
+extern bool processChatMessage(int playerId, char *string, bool teamMsg);
+extern bool processSpecialAuth(byte playerIdx, char* message);
+
+extern "C" void __cdecl onNetPacketServer(BYTE *&BufStart,BYTE *E,
BYTE *MyPlayer, /// bigUnitStruct
BYTE *MyUc)/// Полученые сервером
{
bool found=true;
// ВНИМАНИЕ! Для всех ВЫФИЛЬТРОВЫВАЕМЫХ пакетов - обязательно ставьте found=true! Иначе не будет производиться обработка других пакетов в ЭТОМ же фрейме!
- while(found)
+ while (found)
{
found=false;
BYTE *P=BufStart;
- if (*P==0x3F && specialAuthorisation==true)
+
+ if (*P == 0xA8) // MSG_TEXT_MESSAGE
+ {
+ void **PP=(void **)(((char*)MyPlayer)+0x2EC);
+ if (*PP == NULL) continue; // idk
+ PP=(void**)(((char*)*PP)+0x114);
+ byte *Pl=(byte*)(*PP);
+ byte playerIdx = *((byte*)(Pl+0x810));
+
+ bool longStr = P[3] & 2 == 0;
+ bool teamMsg = P[3] & 1;
+ byte length = P[8];
+ byte reallen;
+ char msg[255];
+
+ // Detect and fix buffer overflows, also convert wide strings to short
+ if (longStr)
+ {
+ reallen = wcsnlen_s((wchar_t*)(P+0xB), 254);
+ wcstombs(msg, (wchar_t*)(P+0xB), reallen + 1);
+ msg[254] = 0;
+ }
+ else
+ {
+ reallen = strnlen_s((char*)P+0xB, 254);
+ msg[254] = 0;
+ strcpy_s(msg, reallen + 1, (char*)P+0xB);
+ }
+ reallen++; // null-term
+
+ if (length != reallen)
+ {
+ // Oops, something went wrong
+ BufStart = E;
+ playerKickByIdx(playerIdx, 2);
+ return;
+ }
+
+ if (specialAuthorisation) // Authorization packets
+ {
+ if (processSpecialAuth(playerIdx, msg))
+ {
+ if (longStr)
+ BufStart += length * 2 + 0xB;
+ else
+ BufStart += length + 0xB;
+
+ found = true;
+ continue;
+ }
+ }
+
+ // Not an auth packet; pass on to Unimod
+ if (!processChatMessage(playerIdx, msg, teamMsg))
+ {
+ if (longStr)
+ BufStart += length * 2 + 0xB;
+ else
+ BufStart += length + 0xB;
+
+ found = true;
+ continue;
+ }
+ // Pass on to default handler
+ }
+
+ if (*P == 0x3F && specialAuthorisation == true) // MSG_PLAYER_INPUT
{
void **PP=(void **)(((char*)MyPlayer)+0x2EC);
PP=(void**)(((char*)*PP)+0x114);
@@ -997,161 +1046,21 @@ extern "C" void __cdecl onNetPacket2(BYTE *&BufStart,BYTE *E,
break;
}
}
- else if(*P==0xA8 && specialAuthorisation==true)
+ else if(*P==0xBB && specialAuthorisation==true && ((char)P[0x4])>0) // MSG_SERVER_CMD
{
-
void **PP=(void **)(((char*)MyPlayer)+0x2EC);
PP=(void**)(((char*)*PP)+0x114);
byte *Pl=(byte*)(*PP);
byte playerIdx = *((byte*)(Pl+0x810));
- char *authCmd="//auth ";
- int cmdTokenL=0;
- if(strncmp((char*)&P[0xB], authCmd, ((BufStart[0x8]>strlen(authCmd))?(strlen(authCmd)):(BufStart[0x8])))==0)
- cmdTokenL=strlen(authCmd);
- if(playerIdx!=0x1F && authorisedState[playerIdx]>=0 && authorisedState[playerIdx]<4)
- {
- switch(authorisedState[playerIdx])
- {
- case 0:
- case 3:
- BufStart+=BufStart[0x8]+0xB;
- found=true;
- break;
- case 1:
- // Тут только логин сейвим
- {
- char *login=NULL;
- login = new char[P[0x8]-cmdTokenL];
- strncpy(login, (char*)&P[0xB+cmdTokenL], P[0x8]-cmdTokenL);
- authorisedLogins[playerIdx]=login;
- authorisedState[playerIdx]++;
- authSendWelcomeMsg[playerIdx]=-1;
- BufStart+=BufStart[0x8]+0xB;
- found=true;
- login = NULL;
- }
- break;
- case 2:
- {
- //char *data=NULL;
- //data = new char[P[0x8]+1];
- char* pass = new char[P[0x8]-cmdTokenL];
- //memcpy(data, &playerIdx, 1);
- //strncpy(&data[1], (char*)&P[0xB], P[0x8]);
- strncpy(pass, (char*)&P[0xB+cmdTokenL], P[0x8]-cmdTokenL);
-
- // Сюда добавить логику запуска аутентификации по http
-
- // TEMPORARY!
- //temp=data;
- // TEMPORARY! END
- authorisedState[playerIdx]++;
- authSendWelcomeMsg[playerIdx]=-1;
- authCheckDelayed(playerIdx, pass);
- BufStart+=BufStart[0x8]+0xB;
- found=true;
- //data = NULL;
- pass=NULL;
- }
- break;
- /*case 3:
- {
- BufStart+=BufStart[0x8]+0xB;
-
- // TEMPORARY!
- if(strcmp(&temp[1], "password")==0)
- authorisedState[playerIdx]++;
- else
- authorisedState[playerIdx]-=2;
- // TEMPORARY! END
- }
- break;*/
- }
- }
- if(cmdTokenL>0 && found==false)
- {
- BufStart+=BufStart[0x8]+0xB;
- found=true;
- }
- }
- else if(*P==0xBB && specialAuthorisation==true && ((char)P[0x4])>0)
- {
-
- void **PP=(void **)(((char*)MyPlayer)+0x2EC);
- PP=(void**)(((char*)*PP)+0x114);
- byte *Pl=(byte*)(*PP);
- byte playerIdx = *((byte*)(Pl+0x810));
- char *authCmd=" //auth ";
- int cmdTokenL=0;
- char *command = new char[BufStart[0x4]];
- wcstombs(command,((wchar_t*)&BufStart[0x5]),BufStart[0x4]);
- if(strncmp((char*)command, authCmd, ((BufStart[0x4]>strlen(authCmd))?(strlen(authCmd)):(BufStart[0x4])))==0)
- cmdTokenL=strlen(authCmd);
- if(playerIdx!=0x1F && authorisedState[playerIdx]>=0 && authorisedState[playerIdx]<4 && cmdTokenL==strlen(authCmd))
- {
- switch(authorisedState[playerIdx])
- {
- case 0:
- case 3:
- BufStart+=BufStart[0x4]*2+0x7;
- found=true;
- break;
- case 1:
- // Тут только логин сейвим
- {
- char *login=NULL;
- login = new char[P[0x4]-cmdTokenL];
- strncpy(login, (char*)&command[cmdTokenL], P[0x4]-cmdTokenL);
- authorisedLogins[playerIdx]=login;
- authorisedState[playerIdx]++;
- authSendWelcomeMsg[playerIdx]=-1;
- BufStart+=BufStart[0x4]*2+0x7;
- found=true;
- login = NULL;
- }
- break;
- case 2:
- {
- //char *data=NULL;
- //data = new char[P[0x8]+1];
- //char* pass = new char[P[0x8]-cmdTokenL];
- //memcpy(data, &playerIdx, 1);
- //strncpy(&data[1], (char*)&P[0xB], P[0x8]);
- //strncpy(pass, (char*)&P[0xB+cmdTokenL], P[0x8]-cmdTokenL);
- char* pass = new char[P[0x4]-cmdTokenL];
- strncpy(pass, (char*)&command[cmdTokenL], P[0x4]-cmdTokenL);
- // Сюда добавить логику запуска аутентификации по http
-
- // TEMPORARY!
- //temp=data;
- // TEMPORARY! END
- authorisedState[playerIdx]++;
- authSendWelcomeMsg[playerIdx]=-1;
- authCheckDelayed(playerIdx, pass);
- BufStart+=BufStart[0x4]*2+0x7;
- found=true;
- //data = NULL;
- pass=NULL;
- }
- break;
- /*case 3:
- {
- BufStart+=BufStart[0x8]+0xB;
-
- // TEMPORARY!
- if(strcmp(&temp[1], "password")==0)
- authorisedState[playerIdx]++;
- else
- authorisedState[playerIdx]-=2;
- // TEMPORARY! END
- }
- break;*/
- }
- }
- if(cmdTokenL>0 && found==false)
+
+ char command[255]; // no heap alloc :|
+ wcstombs(command, ((wchar_t*)&BufStart[0x5]), BufStart[0x4]);
+
+ if (processSpecialAuth(playerIdx, command + 1))
{
- BufStart+=BufStart[0x4]*2+0x7;
- found=true;
+ BufStart += BufStart[0x4]*2+0x7;
+ found = true;
+ continue;
}
}
else if (*P==0xF8)/// это будет первый юнимод-пакет {F8,<длина>, данные}
@@ -1283,22 +1192,23 @@ void netInit()
registerserver("netReportCharges",&netReportChargesL);
registerserver("netClientPrint",&netDoPrintConsoleL);
- registerserver("netFake",&netFake);
+ //registerserver("netFake",&netFake); // crashes client
registerserver("netMsgPlrDied",&playerDeathL);
registerserver("netMsgBox", &netSendMessageBoxL);
registerserver("netParticleFx", &netTestParticleL);
- registerserver("netSpriteIntensity", &netTestIntensityL);
- registerserver("netSpriteColor", &netTestColorL);
+ // research is not complete yet; messes up client
+ //registerserver("netSpriteIntensity", &netTestIntensityL);
+ //registerserver("netSpriteColor", &netTestColorL);
registerserver("sendChat",&sendChat);
registerclient("netGetVersion",netGetVersion);
registerclient("netVersionRq",&netVersionRq); /// функция проверки клиентом версии сервера
registerclient("netSendFx",&netSendFx);
- char Buf[40]="";
- sprintf(Buf,"net%s%s%d","To",Block2,2);/// чтобы не выдавать важную команду всяким ларбосам
+ //char Buf[40]="";
+ //sprintf(Buf,"net%s%s%d","To",Block2,2);/// чтобы не выдавать важную команду всяким ларбосам
+ //registerclient(Buf,&sendToServer);
registerclient("netRename",&netRename);
- registerclient(Buf,&sendToServer);
-}
+}
diff --git a/player.cpp b/player.cpp
index 2067e58..a8640c2 100644
--- a/player.cpp
+++ b/player.cpp
@@ -392,6 +392,33 @@ extern "C" int __cdecl playerOnTrySpell(bigUnitStruct *Unit,byte *Uc,spellPacke
return 0;
}
+// Calls Lua handler when any player says something in chat.
+// The message can be filtered and will be not visible to anyone else on the server.
+bool processChatMessage(int playerId, char *string, bool teamMsg)
+{
+ bool result = true;
+ getServerVar("playerOnChat");
+ if (lua_isfunction(L, -1))
+ {
+ lua_pushinteger(L, playerId);
+ lua_pushstring(L, string);
+ lua_pushinteger(L, teamMsg);
+
+ if (0!=lua_pcall(L, 3, 1, 0))
+ {
+ // I think there needs to be some formatting done in error messages, but I'm too lazy to rewrite just everything
+ conPrintI(lua_tostring(L,-1));
+ }
+
+ if (lua_isboolean(L, -1))
+ result = !lua_toboolean(L, -1);
+
+ lua_pop(L, 1);
+ }
+
+ return result;
+}
+
extern void InjectOffs(DWORD Addr,void *Fn);
extern void InjectJumpTo(DWORD Addr,void *Fn);
diff --git a/react.cpp b/react.cpp
index 06a7d69..5454a18 100644
--- a/react.cpp
+++ b/react.cpp
@@ -533,6 +533,7 @@ namespace
*/
return;
}
+
int unitSetUpdateL(lua_State*L)
{
return unitSetAnyFnL(L,0x2E8,&updateFn);
diff --git a/unit.cpp b/unit.cpp
index 09cb5e6..4de7119 100644
--- a/unit.cpp
+++ b/unit.cpp
@@ -20,6 +20,9 @@ void (__cdecl *inventoryPut)(bigUnitStruct *Who,bigUnitStruct *What,int A);
/// список созданных в текущем кадре на сервере
bigUnitStruct **unitCreatedList;
+bigUnitStruct **srvObjGeneralList;
+bigUnitStruct **srvObjMissileList;
+
extern const char *(__cdecl *noxThingNameByType)(int Type);
extern int (__cdecl *noxGetUnitsInRect)(FloatRect *Rect, void (__cdecl *SomeFn)(void *Unit, void *Arg), void *Arg);
@@ -289,6 +292,59 @@ namespace
dropAllItems((bigUnitStruct*)lua_touserdata(L,1));
return 1;
}
+ bool checkExistsImpl(bigUnitStruct* unit)
+ {
+ if (unit == NULL)
+ {
+ return false;
+ }
+
+ if (unit->flags & 0x20) // DESTROYED
+ {
+ return false;
+ }
+
+ if (unit->inventoryOwner != NULL)
+ {
+ if (unit->inventoryOwner == unit) // Recursion, something is wrong
+ {
+ return false;
+ }
+ return checkExistsImpl(unit->inventoryOwner);
+ }
+
+ bool result = false;
+ bigUnitStruct* first = *srvObjGeneralList;
+
+ if (unit->Class & 1) // MISSILE
+ {
+ first = *srvObjMissileList;
+ }
+
+ while (first != NULL)
+ {
+ if (first == unit)
+ {
+ result = true;
+ break;
+ }
+ first = (bigUnitStruct*)first->nextUnit;
+ }
+ return result;
+ }
+ int unitCheckExists(lua_State*L)
+ {
+ if (lua_type(L,1)!=LUA_TLIGHTUSERDATA)
+ {
+ lua_pushstring(L,"wrong args!");
+ lua_error_(L);
+ }
+ bigUnitStruct* unit = (bigUnitStruct*)lua_touserdata(L, 1);
+ bool result = checkExistsImpl(unit);
+
+ lua_pushboolean(L, result);
+ return 1;
+ }
int unitInventoryPut(lua_State*L)
{
if (
@@ -373,6 +429,8 @@ void unitInit()
ASSIGN(noxAgressionLevel,0x00515980);
ASSIGN(noxMirrorShot,0x004E0A70);
ASSIGN(noxUnitTestBuff,0x004FF350);
+ ASSIGN(srvObjGeneralList, 0x750700);
+ ASSIGN(srvObjMissileList, 0x750704);
registerserver("unitSetFollow",&unitSetFollowL);
registerserver("unitBecomePet",&unitBecomePetL);
@@ -387,6 +445,7 @@ void unitInit()
registerserver("unitHunt",&unitHuntL);
registerserver("unitSetAgression",&unitAgressionLevel);
registerserver("unitTestBuff",&unitTestBuff);
+ registerserver("unitCheckExists",&unitCheckExists);
registerserver("unitMove",&unitMoveL);
registerserver("unitSpeed",&unitSpeedL);
diff --git a/unit.h b/unit.h
index 94e44e1..eb42b8e 100644
--- a/unit.h
+++ b/unit.h
@@ -194,10 +194,9 @@ struct bigUnitStruct
int nextUpdatableUnit;
int prevUpdatableUnit;
int isInUpdatableList;
- char unitWeight;
- char gap_1e9[1];
+ __int16 unitWeight;
__int16 unitCapacity;
- void *prevInventoryObj;
+ bigUnitStruct *inventoryOwner;
void *nextInventoryObj;
void *prevSome;
void *firstInventoryObj;
diff --git a/unit2.cpp b/unit2.cpp
index 31af535..18ffb54 100644
--- a/unit2.cpp
+++ b/unit2.cpp
@@ -203,7 +203,7 @@ namespace
break;
lua_pushvalue(L, -2);
lua_pushlightuserdata(L, Armor);
- lua_pushlightuserdata(L, Armor->prevInventoryObj);
+ lua_pushlightuserdata(L, Armor->inventoryOwner);
if (lua_pcall(L, 3, 0, 0) != 0)
{
break;
diff --git a/util.cpp b/util.cpp
index 3b3f3d1..f241dbd 100644
--- a/util.cpp
+++ b/util.cpp
@@ -277,7 +277,7 @@ int setGameFlagsL(lua_State *L)
}
int bitOrL(lua_State *L)
{
- int R;
+ unsigned int R;
if(lua_type(L,1)!=LUA_TNUMBER)
return 0;
if(lua_type(L,2)!=LUA_TNUMBER)
@@ -288,7 +288,7 @@ int bitOrL(lua_State *L)
}
int bitAndL(lua_State *L)
{
- int R;
+ unsigned int R;
if(lua_type(L,1)!=LUA_TNUMBER)
return 0;
if(lua_type(L,2)!=LUA_TNUMBER)
@@ -300,7 +300,7 @@ int bitAndL(lua_State *L)
int bitXorL(lua_State *L)
{
- int R;
+ unsigned int R;
if(lua_type(L,1)!=LUA_TNUMBER)
return 0;
if(lua_type(L,2)!=LUA_TNUMBER)
@@ -531,6 +531,20 @@ namespace
lua_pushinteger(L, *((BYTE*)P));
return 1;
}
+ int getPtrUIntL(lua_State *L)
+ {
+ if ( (lua_type(L,1)!=LUA_TLIGHTUSERDATA)||(lua_type(L,2)!=LUA_TNUMBER) )
+ {
+ lua_pushstring(L,"wrong args!");
+ lua_error_(L);
+ }
+ BYTE* P=(BYTE*) lua_touserdata(L,1);
+ if(P==NULL)
+ return 0;
+ P+=lua_tointeger(L,2);
+ lua_pushnumber(L, *((_Uint32t*)P));
+ return 1;
+ }
int getPtrIntL(lua_State *L)
{
if ( (lua_type(L,1)!=LUA_TLIGHTUSERDATA)||(lua_type(L,2)!=LUA_TNUMBER) )
@@ -646,6 +660,31 @@ namespace
VirtualProtect(P,4,OldProtect,&OldProtect);
return 0;
}
+ int setPtrUIntL(lua_State *L)
+ {
+ if ( ((lua_type(L,1)!=LUA_TLIGHTUSERDATA)&& (lua_type(L,1)!=LUA_TNIL))
+ ||(lua_type(L,2)!=LUA_TNUMBER)
+ ||(lua_type(L,3)!=LUA_TNUMBER))
+ {
+ lua_pushstring(L,"wrong args!");
+ lua_error_(L);
+ }
+ BYTE* P=(BYTE*) lua_touserdata(L,1);
+ if (P==NULL)
+ return 0;
+ P+=lua_tointeger(L,2);
+ DWORD Pt=(DWORD)P;
+ DWORD OldProtect;
+ if( ((lua_type(L,1)==LUA_TNIL)) &&( (Pt<0x400000) || (Pt>0x600000) ) )
+ {
+ lua_pushstring(L,"wrong offset!");
+ lua_error_(L);
+ }
+ VirtualProtect(P,4,PAGE_EXECUTE_READWRITE,&OldProtect);
+ *((_Uint32t*)P) = lua_tointeger(L, 3);
+ VirtualProtect(P,4,OldProtect,&OldProtect);
+ return 0;
+ }
int setPtrShortL(lua_State *L)
{
if ( ((lua_type(L,1)!=LUA_TLIGHTUSERDATA)&& (lua_type(L,1)!=LUA_TNIL))
@@ -971,7 +1010,7 @@ namespace
void (__cdecl *sub51ADF0)();/// событие проверки скриптов карты по таймауту
int getFrameCounterL(lua_State *L)
{
- lua_pushinteger(L,(int)*frameCounter);
+ lua_pushinteger(L,(unsigned int)*frameCounter);
return 1;
}
void __cdecl onEachFrame()
@@ -1181,10 +1220,10 @@ int initWindowedMode(int param1, int param2, int param3)
return initWindowedModeNox(param1, param2, param3);
}
-void injectCon()
+void initStepTwo()
{
initSDL();
- //MessageBox(0,"!",0,0);
+ //MessageBox(0,"!1",0,0);
exInit();
initModLib2();
luaopen_lpeg (L);
@@ -1278,6 +1317,8 @@ void injectCon()
lua_setglobal(L,"getPtrPtr");
lua_pushcfunction(L,&getPtrIntL);
lua_setglobal(L,"getPtrInt");
+ lua_pushcfunction(L,&getPtrUIntL);
+ lua_setglobal(L,"getPtrUInt");
lua_pushcfunction(L,&getPtrFloatL);
lua_setglobal(L,"getPtrFloat");
lua_pushcfunction(L,&getPtrShortL);
@@ -1286,6 +1327,8 @@ void injectCon()
lua_setglobal(L,"setPtrFloat");
lua_pushcfunction(L,&setPtrIntL);
lua_setglobal(L,"setPtrInt");
+ lua_pushcfunction(L,&setPtrUIntL);
+ lua_setglobal(L,"setPtrUInt");
lua_pushcfunction(L,&setPtrPtrL);
lua_setglobal(L,"setPtrPtr");
lua_pushcfunction(L,&setPtrShortL);
@@ -1345,7 +1388,8 @@ void injectCon()
ASSIGN(j_time,0x00416BF0);
ASSIGN(consoleTokenCipher, 0x00443BF0);
-#include "lua/binClient/clientOnJoin.lua.inc"
+// Removed by angrykirc b/c not needed now
+//#include "lua/binClient/clientOnJoin.lua.inc"
lua_getfield(L,LUA_REGISTRYINDEX,"client");
lua_setfenv(L,-2);
@@ -1363,7 +1407,6 @@ void injectCon()
//lua_pushnil(L);
//lua_setglobal(L,"os");/// выкинуть вон небезопасную таблицу
-
int topLoad = lua_gettop(L);
lua_getfield(L, LUA_REGISTRYINDEX, "require.lua");
@@ -1392,9 +1435,6 @@ void injectCon()
lua_pcall(L, 0, 0, 0);
}
-
- //MessageBox(0,"!",0,0);
-
byte OperatorJmps=0xEB;
byte OperatorMovEax1[]={0xB8,0x01,0,0,0};
byte OperatorNop[]={0x90,0x90};