- initial commit of Genesis3D 1.6
authorAkiko <akiko@linux-addicted.net>
Sun, 7 Jun 2015 12:37:23 +0000 (14:37 +0200)
committerAkiko <akiko@linux-addicted.net>
Sun, 7 Jun 2015 12:37:23 +0000 (14:37 +0200)
717 files changed:
ActView/ActView.dsp [new file with mode: 0644]
ActView/ActView.dsw [new file with mode: 0644]
ActView/ActView.mak [new file with mode: 0644]
ActView/Doc/ACTVIEW.HLP [new file with mode: 0644]
ActView/Doc/ActView.CNT [new file with mode: 0644]
ActView/Doc/ActView.doc [new file with mode: 0644]
ActView/Doc/ActView.err [new file with mode: 0644]
ActView/Doc/ActView.hpj [new file with mode: 0644]
ActView/Doc/ActView.rbh [new file with mode: 0644]
ActView/Doc/ActView.rta [new file with mode: 0644]
ActView/Doc/ActView.rtf [new file with mode: 0644]
ActView/Doc/ActView.rtk [new file with mode: 0644]
ActView/Doc/ActView.rts [new file with mode: 0644]
ActView/Doc/ffend.bmp [new file with mode: 0644]
ActView/Doc/ffframe.bmp [new file with mode: 0644]
ActView/Doc/frame.bmp [new file with mode: 0644]
ActView/Doc/move.bmp [new file with mode: 0644]
ActView/Doc/pan.bmp [new file with mode: 0644]
ActView/Doc/pause.bmp [new file with mode: 0644]
ActView/Doc/play.bmp [new file with mode: 0644]
ActView/Doc/rotate.bmp [new file with mode: 0644]
ActView/Doc/rrframe.bmp [new file with mode: 0644]
ActView/Doc/rrstart.bmp [new file with mode: 0644]
ActView/Doc/stop.bmp [new file with mode: 0644]
ActView/Doc/zoom.bmp [new file with mode: 0644]
ActView/Main/ActView.aps [new file with mode: 0644]
ActView/Main/ActView.rc [new file with mode: 0644]
ActView/Main/Blender.h [new file with mode: 0644]
ActView/Main/actview.c [new file with mode: 0644]
ActView/Main/actview.clw [new file with mode: 0644]
ActView/Main/blender.c [new file with mode: 0644]
ActView/Main/resource.h [new file with mode: 0644]
ActView/Util/About.c [new file with mode: 0644]
ActView/Util/FilePath.c [new file with mode: 0644]
ActView/Util/FilePath.h [new file with mode: 0644]
ActView/Util/InstCheck.c [new file with mode: 0644]
ActView/Util/InstCheck.h [new file with mode: 0644]
ActView/Util/WinUtil.c [new file with mode: 0644]
ActView/Util/WinUtil.h [new file with mode: 0644]
ActView/Util/about.h [new file with mode: 0644]
ActView/Util/drvlist.c [new file with mode: 0644]
ActView/Util/drvlist.h [new file with mode: 0644]
ActView/Util/rcstring.c [new file with mode: 0644]
ActView/Util/rcstring.h [new file with mode: 0644]
ActView/Util/units.h [new file with mode: 0644]
ActView/res/actview.bmp [new file with mode: 0644]
ActView/res/actview.ico [new file with mode: 0644]
ActView/res/blend.ico [new file with mode: 0644]
ActView/res/ffend.ico [new file with mode: 0644]
ActView/res/ffframe.ico [new file with mode: 0644]
ActView/res/irotate.ico [new file with mode: 0644]
ActView/res/mainicon.ico [new file with mode: 0644]
ActView/res/pan.cur [new file with mode: 0644]
ActView/res/pan.ico [new file with mode: 0644]
ActView/res/pause.ico [new file with mode: 0644]
ActView/res/play.ico [new file with mode: 0644]
ActView/res/rotate.cur [new file with mode: 0644]
ActView/res/rotate.ico [new file with mode: 0644]
ActView/res/rrframe.ico [new file with mode: 0644]
ActView/res/rrstart.ico [new file with mode: 0644]
ActView/res/stop.ico [new file with mode: 0644]
ActView/res/zoom.cur [new file with mode: 0644]
ActView/res/zoom.ico [new file with mode: 0644]
Exporters/3dseres.h [new file with mode: 0644]
Exporters/3dsimp.h [new file with mode: 0644]
Exporters/3dsires.h [new file with mode: 0644]
Exporters/3dsmtl.cpp [new file with mode: 0644]
Exporters/Cfile.h [new file with mode: 0644]
Exporters/Kfio.h [new file with mode: 0644]
Exporters/Mtldef.h [new file with mode: 0644]
Exporters/Ofile.h [new file with mode: 0644]
Exporters/Savemli.cpp [new file with mode: 0644]
Exporters/gexp.cpp [new file with mode: 0644]
Exporters/gexp.def [new file with mode: 0644]
Exporters/gexp.dsp [new file with mode: 0644]
Exporters/gexp.h [new file with mode: 0644]
Exporters/gexp.mak [new file with mode: 0644]
Exporters/gexp.rc [new file with mode: 0644]
Exporters/max2sdk/readme.txt [new file with mode: 0644]
Exporters/max3sdk/readme.txt [new file with mode: 0644]
Exporters/mssccprj.scc [new file with mode: 0644]
G3D/Actor/QKFrame.c [new file with mode: 0644]
G3D/Actor/QKFrame.h [new file with mode: 0644]
G3D/Actor/XFArray.c [new file with mode: 0644]
G3D/Actor/actor.c [new file with mode: 0644]
G3D/Actor/actor.h [new file with mode: 0644]
G3D/Actor/body._h [new file with mode: 0644]
G3D/Actor/body.c [new file with mode: 0644]
G3D/Actor/body.h [new file with mode: 0644]
G3D/Actor/bodyinst.c [new file with mode: 0644]
G3D/Actor/bodyinst.h [new file with mode: 0644]
G3D/Actor/motion.c [new file with mode: 0644]
G3D/Actor/motion.h [new file with mode: 0644]
G3D/Actor/path.c [new file with mode: 0644]
G3D/Actor/path.h [new file with mode: 0644]
G3D/Actor/pose.c [new file with mode: 0644]
G3D/Actor/pose.h [new file with mode: 0644]
G3D/Actor/puppet.c [new file with mode: 0644]
G3D/Actor/puppet.h [new file with mode: 0644]
G3D/Actor/strblock.c [new file with mode: 0644]
G3D/Actor/strblock.h [new file with mode: 0644]
G3D/Actor/tkarray.c [new file with mode: 0644]
G3D/Actor/tkarray.h [new file with mode: 0644]
G3D/Actor/tkevents.c [new file with mode: 0644]
G3D/Actor/tkevents.h [new file with mode: 0644]
G3D/Actor/vkframe.c [new file with mode: 0644]
G3D/Actor/vkframe.h [new file with mode: 0644]
G3D/Actor/xfarray.h [new file with mode: 0644]
G3D/Afxres.h [new file with mode: 0644]
G3D/Basetype.h [new file with mode: 0644]
G3D/Bitmap/Compression/palcreate.c [new file with mode: 0644]
G3D/Bitmap/Compression/palcreate.h [new file with mode: 0644]
G3D/Bitmap/Compression/palettize.c [new file with mode: 0644]
G3D/Bitmap/Compression/palettize.h [new file with mode: 0644]
G3D/Bitmap/Compression/paloptimize.c [new file with mode: 0644]
G3D/Bitmap/Compression/paloptimize.h [new file with mode: 0644]
G3D/Bitmap/Compression/utility.h [new file with mode: 0644]
G3D/Bitmap/Compression/yuv.c [new file with mode: 0644]
G3D/Bitmap/Compression/yuv.h [new file with mode: 0644]
G3D/Bitmap/bitmap.__h [new file with mode: 0644]
G3D/Bitmap/bitmap._h [new file with mode: 0644]
G3D/Bitmap/bitmap.c [new file with mode: 0644]
G3D/Bitmap/bitmap.h [new file with mode: 0644]
G3D/Bitmap/bitmap_blitdata.c [new file with mode: 0644]
G3D/Bitmap/bitmap_blitdata.h [new file with mode: 0644]
G3D/Bitmap/bitmap_gamma.c [new file with mode: 0644]
G3D/Bitmap/bitmap_gamma.h [new file with mode: 0644]
G3D/Bitmap/pixelformat.c [new file with mode: 0644]
G3D/Bitmap/pixelformat.h [new file with mode: 0644]
G3D/CSNetMgr.c [new file with mode: 0644]
G3D/CSNetMgr.h [new file with mode: 0644]
G3D/Camera.c [new file with mode: 0644]
G3D/Camera.h [new file with mode: 0644]
G3D/Engine/BitmapList.c [new file with mode: 0644]
G3D/Engine/BitmapList.h [new file with mode: 0644]
G3D/Engine/Drivers/Bmp.c [new file with mode: 0644]
G3D/Engine/Drivers/D3D7xDrv/D3DDrv.mak [new file with mode: 0644]
G3D/Engine/Drivers/D3D7xDrv/D3DDrv.ncb [new file with mode: 0644]
G3D/Engine/Drivers/D3D7xDrv/D3DDrv.opt [new file with mode: 0644]
G3D/Engine/Drivers/D3D7xDrv/D3DDrv7x.dsp [new file with mode: 0644]
G3D/Engine/Drivers/D3D7xDrv/D3DDrv7x.dsw [new file with mode: 0644]
G3D/Engine/Drivers/D3D7xDrv/D3DDrv7x.ncb [new file with mode: 0644]
G3D/Engine/Drivers/D3D7xDrv/D3DDrv7x.opt [new file with mode: 0644]
G3D/Engine/Drivers/D3D7xDrv/D3DDrv7x.plg [new file with mode: 0644]
G3D/Engine/Drivers/D3D7xDrv/D3D_ERR.CPP [new file with mode: 0644]
G3D/Engine/Drivers/D3D7xDrv/D3D_ERR.H [new file with mode: 0644]
G3D/Engine/Drivers/D3D7xDrv/D3d_fx.cpp [new file with mode: 0644]
G3D/Engine/Drivers/D3D7xDrv/D3d_fx.h [new file with mode: 0644]
G3D/Engine/Drivers/D3D7xDrv/D3d_main.cpp [new file with mode: 0644]
G3D/Engine/Drivers/D3D7xDrv/D3d_main.h [new file with mode: 0644]
G3D/Engine/Drivers/D3D7xDrv/D3dcache.cpp [new file with mode: 0644]
G3D/Engine/Drivers/D3D7xDrv/D3dcache.h [new file with mode: 0644]
G3D/Engine/Drivers/D3D7xDrv/D3ddrv7x.cpp [new file with mode: 0644]
G3D/Engine/Drivers/D3D7xDrv/D3ddrv7x.h [new file with mode: 0644]
G3D/Engine/Drivers/D3D7xDrv/DDMemMgr.c [new file with mode: 0644]
G3D/Engine/Drivers/D3D7xDrv/DDMemMgr.h [new file with mode: 0644]
G3D/Engine/Drivers/D3D7xDrv/GSPAN.H [new file with mode: 0644]
G3D/Engine/Drivers/D3D7xDrv/Gspan.cpp [new file with mode: 0644]
G3D/Engine/Drivers/D3D7xDrv/Pcache.cpp [new file with mode: 0644]
G3D/Engine/Drivers/D3D7xDrv/Pcache.h [new file with mode: 0644]
G3D/Engine/Drivers/D3D7xDrv/RENDER.H [new file with mode: 0644]
G3D/Engine/Drivers/D3D7xDrv/Render.cpp [new file with mode: 0644]
G3D/Engine/Drivers/D3D7xDrv/SCENE.H [new file with mode: 0644]
G3D/Engine/Drivers/D3D7xDrv/Scene.cpp [new file with mode: 0644]
G3D/Engine/Drivers/D3D7xDrv/THandle.cpp [new file with mode: 0644]
G3D/Engine/Drivers/D3D7xDrv/THandle.h [new file with mode: 0644]
G3D/Engine/Drivers/D3D7xDrv/TPage.h [new file with mode: 0644]
G3D/Engine/Drivers/D3D7xDrv/mssccprj.scc [new file with mode: 0644]
G3D/Engine/Drivers/D3D7xDrv/tpage.cpp [new file with mode: 0644]
G3D/Engine/Drivers/D3D8Drv/D3DDRV.H [new file with mode: 0644]
G3D/Engine/Drivers/D3D8Drv/D3DDriver.dsp [new file with mode: 0644]
G3D/Engine/Drivers/D3D8Drv/D3DDriver.dsw [new file with mode: 0644]
G3D/Engine/Drivers/D3D8Drv/D3DDriver.ncb [new file with mode: 0644]
G3D/Engine/Drivers/D3D8Drv/D3DDriver.opt [new file with mode: 0644]
G3D/Engine/Drivers/D3D8Drv/D3DDriver.plg [new file with mode: 0644]
G3D/Engine/Drivers/D3D8Drv/D3D_ERR.CPP [new file with mode: 0644]
G3D/Engine/Drivers/D3D8Drv/D3D_ERR.H [new file with mode: 0644]
G3D/Engine/Drivers/D3D8Drv/D3D_FX.H [new file with mode: 0644]
G3D/Engine/Drivers/D3D8Drv/D3d_fx.cpp [new file with mode: 0644]
G3D/Engine/Drivers/D3D8Drv/D3d_main.cpp [new file with mode: 0644]
G3D/Engine/Drivers/D3D8Drv/D3d_main.h [new file with mode: 0644]
G3D/Engine/Drivers/D3D8Drv/D3dcache.cpp [new file with mode: 0644]
G3D/Engine/Drivers/D3D8Drv/D3dcache.h [new file with mode: 0644]
G3D/Engine/Drivers/D3D8Drv/D3ddrv.cpp [new file with mode: 0644]
G3D/Engine/Drivers/D3D8Drv/DDMemMgr.cpp [new file with mode: 0644]
G3D/Engine/Drivers/D3D8Drv/DDMemMgr.h [new file with mode: 0644]
G3D/Engine/Drivers/D3D8Drv/GSPAN.CPP [new file with mode: 0644]
G3D/Engine/Drivers/D3D8Drv/GSPAN.H [new file with mode: 0644]
G3D/Engine/Drivers/D3D8Drv/Pcache.cpp [new file with mode: 0644]
G3D/Engine/Drivers/D3D8Drv/Pcache.h [new file with mode: 0644]
G3D/Engine/Drivers/D3D8Drv/RENDER.H [new file with mode: 0644]
G3D/Engine/Drivers/D3D8Drv/Render.cpp [new file with mode: 0644]
G3D/Engine/Drivers/D3D8Drv/SCENE.H [new file with mode: 0644]
G3D/Engine/Drivers/D3D8Drv/Scene.cpp [new file with mode: 0644]
G3D/Engine/Drivers/D3D8Drv/THandle.cpp [new file with mode: 0644]
G3D/Engine/Drivers/D3D8Drv/THandle.h [new file with mode: 0644]
G3D/Engine/Drivers/D3D8Drv/TPage.h [new file with mode: 0644]
G3D/Engine/Drivers/D3D8Drv/tpage.cpp [new file with mode: 0644]
G3D/Engine/Drivers/D3DDrv/D3DDRV.H [new file with mode: 0644]
G3D/Engine/Drivers/D3DDrv/D3DDrv.dsp [new file with mode: 0644]
G3D/Engine/Drivers/D3DDrv/D3DDrv.dsw [new file with mode: 0644]
G3D/Engine/Drivers/D3DDrv/D3DDrv.mak [new file with mode: 0644]
G3D/Engine/Drivers/D3DDrv/D3DDrv.ncb [new file with mode: 0644]
G3D/Engine/Drivers/D3DDrv/D3DDrv.opt [new file with mode: 0644]
G3D/Engine/Drivers/D3DDrv/D3DDrv.plg [new file with mode: 0644]
G3D/Engine/Drivers/D3DDrv/D3D_ERR.CPP [new file with mode: 0644]
G3D/Engine/Drivers/D3DDrv/D3D_ERR.H [new file with mode: 0644]
G3D/Engine/Drivers/D3DDrv/D3d_fx.cpp [new file with mode: 0644]
G3D/Engine/Drivers/D3DDrv/D3d_fx.h [new file with mode: 0644]
G3D/Engine/Drivers/D3DDrv/D3d_main.cpp [new file with mode: 0644]
G3D/Engine/Drivers/D3DDrv/D3d_main.h [new file with mode: 0644]
G3D/Engine/Drivers/D3DDrv/D3dcache.cpp [new file with mode: 0644]
G3D/Engine/Drivers/D3DDrv/D3dcache.h [new file with mode: 0644]
G3D/Engine/Drivers/D3DDrv/D3ddrv.cpp [new file with mode: 0644]
G3D/Engine/Drivers/D3DDrv/DDMemMgr.c [new file with mode: 0644]
G3D/Engine/Drivers/D3DDrv/DDMemMgr.h [new file with mode: 0644]
G3D/Engine/Drivers/D3DDrv/GSPAN.CPP [new file with mode: 0644]
G3D/Engine/Drivers/D3DDrv/GSPAN.H [new file with mode: 0644]
G3D/Engine/Drivers/D3DDrv/Pcache.cpp [new file with mode: 0644]
G3D/Engine/Drivers/D3DDrv/Pcache.h [new file with mode: 0644]
G3D/Engine/Drivers/D3DDrv/README.NOW [new file with mode: 0644]
G3D/Engine/Drivers/D3DDrv/RENDER.H [new file with mode: 0644]
G3D/Engine/Drivers/D3DDrv/Render.cpp [new file with mode: 0644]
G3D/Engine/Drivers/D3DDrv/SCENE.H [new file with mode: 0644]
G3D/Engine/Drivers/D3DDrv/Scene.cpp [new file with mode: 0644]
G3D/Engine/Drivers/D3DDrv/THandle.cpp [new file with mode: 0644]
G3D/Engine/Drivers/D3DDrv/THandle.h [new file with mode: 0644]
G3D/Engine/Drivers/D3DDrv/TPage.h [new file with mode: 0644]
G3D/Engine/Drivers/D3DDrv/mssccprj.scc [new file with mode: 0644]
G3D/Engine/Drivers/D3DDrv/tpage.cpp [new file with mode: 0644]
G3D/Engine/Drivers/Dcommon.h [new file with mode: 0644]
G3D/Engine/Drivers/GlideDrv/GCache.c [new file with mode: 0644]
G3D/Engine/Drivers/GlideDrv/GCache.h [new file with mode: 0644]
G3D/Engine/Drivers/GlideDrv/GLIDEDRV.H [new file with mode: 0644]
G3D/Engine/Drivers/GlideDrv/GMain.c [new file with mode: 0644]
G3D/Engine/Drivers/GlideDrv/GMain.h [new file with mode: 0644]
G3D/Engine/Drivers/GlideDrv/GMemMgr.c [new file with mode: 0644]
G3D/Engine/Drivers/GlideDrv/GMemMgr.h [new file with mode: 0644]
G3D/Engine/Drivers/GlideDrv/GSpan.cpp [new file with mode: 0644]
G3D/Engine/Drivers/GlideDrv/GSpan.h [new file with mode: 0644]
G3D/Engine/Drivers/GlideDrv/GTHandle.h [new file with mode: 0644]
G3D/Engine/Drivers/GlideDrv/GThandle.c [new file with mode: 0644]
G3D/Engine/Drivers/GlideDrv/GlideDrv.c [new file with mode: 0644]
G3D/Engine/Drivers/GlideDrv/GlideDrv.dsp [new file with mode: 0644]
G3D/Engine/Drivers/GlideDrv/GlideDrv.dsw [new file with mode: 0644]
G3D/Engine/Drivers/GlideDrv/GlideDrv.mak [new file with mode: 0644]
G3D/Engine/Drivers/GlideDrv/GlideDrv.ncb [new file with mode: 0644]
G3D/Engine/Drivers/GlideDrv/GlideDrv.opt [new file with mode: 0644]
G3D/Engine/Drivers/GlideDrv/Render.c [new file with mode: 0644]
G3D/Engine/Drivers/GlideDrv/Render.h [new file with mode: 0644]
G3D/Engine/Drivers/GlideDrv/mssccprj.scc [new file with mode: 0644]
G3D/Engine/Drivers/OpenGl/OGLDrv.c [new file with mode: 0644]
G3D/Engine/Drivers/OpenGl/OGLDrv.h [new file with mode: 0644]
G3D/Engine/Drivers/OpenGl/OglDrv.dsp [new file with mode: 0644]
G3D/Engine/Drivers/OpenGl/OglDrv.dsw [new file with mode: 0644]
G3D/Engine/Drivers/OpenGl/OglMisc.c [new file with mode: 0644]
G3D/Engine/Drivers/OpenGl/OglMisc.h [new file with mode: 0644]
G3D/Engine/Drivers/OpenGl/Render.c [new file with mode: 0644]
G3D/Engine/Drivers/OpenGl/Render.h [new file with mode: 0644]
G3D/Engine/Drivers/OpenGl/THandle.c [new file with mode: 0644]
G3D/Engine/Drivers/OpenGl/THandle.h [new file with mode: 0644]
G3D/Engine/Drivers/OpenGl/Win32.c [new file with mode: 0644]
G3D/Engine/Drivers/OpenGl/Win32.h [new file with mode: 0644]
G3D/Engine/Drivers/OpenGl/glext.h [new file with mode: 0644]
G3D/Engine/Drivers/SoftDrv/3dnowspan.h [new file with mode: 0644]
G3D/Engine/Drivers/SoftDrv/REGISTER.H [new file with mode: 0644]
G3D/Engine/Drivers/SoftDrv/RENDER.H [new file with mode: 0644]
G3D/Engine/Drivers/SoftDrv/SAL.H [new file with mode: 0644]
G3D/Engine/Drivers/SoftDrv/SCENE.H [new file with mode: 0644]
G3D/Engine/Drivers/SoftDrv/SOFTDRV.H [new file with mode: 0644]
G3D/Engine/Drivers/SoftDrv/SPAN.H [new file with mode: 0644]
G3D/Engine/Drivers/SoftDrv/SYSTEM.H [new file with mode: 0644]
G3D/Engine/Drivers/SoftDrv/SoftDrv.dsp [new file with mode: 0644]
G3D/Engine/Drivers/SoftDrv/SoftDrv.mak [new file with mode: 0644]
G3D/Engine/Drivers/SoftDrv/W32SAL.CPP [new file with mode: 0644]
G3D/Engine/Drivers/SoftDrv/amdspan.asm [new file with mode: 0644]
G3D/Engine/Drivers/SoftDrv/dmodes.c [new file with mode: 0644]
G3D/Engine/Drivers/SoftDrv/dmodes.h [new file with mode: 0644]
G3D/Engine/Drivers/SoftDrv/drawspan.c [new file with mode: 0644]
G3D/Engine/Drivers/SoftDrv/drawspan.h [new file with mode: 0644]
G3D/Engine/Drivers/SoftDrv/mssccprj.scc [new file with mode: 0644]
G3D/Engine/Drivers/SoftDrv/register.c [new file with mode: 0644]
G3D/Engine/Drivers/SoftDrv/render.c [new file with mode: 0644]
G3D/Engine/Drivers/SoftDrv/scene.c [new file with mode: 0644]
G3D/Engine/Drivers/SoftDrv/softdrv.c [new file with mode: 0644]
G3D/Engine/Drivers/SoftDrv/span.c [new file with mode: 0644]
G3D/Engine/Drivers/SoftDrv/system.c [new file with mode: 0644]
G3D/Engine/Drivers/SoftDrv/x86span555.c [new file with mode: 0644]
G3D/Engine/Drivers/SoftDrv/x86span555.h [new file with mode: 0644]
G3D/Engine/Drivers/SoftDrv/x86span565.c [new file with mode: 0644]
G3D/Engine/Drivers/SoftDrv/x86span565.h [new file with mode: 0644]
G3D/Engine/Drivers/SoftDrv2/CPUInfo.c [new file with mode: 0644]
G3D/Engine/Drivers/SoftDrv2/CPUInfo.h [new file with mode: 0644]
G3D/Engine/Drivers/SoftDrv2/DDRAWDisplay.c [new file with mode: 0644]
G3D/Engine/Drivers/SoftDrv2/DDRAWDisplay.h [new file with mode: 0644]
G3D/Engine/Drivers/SoftDrv2/DIBDisplay.c [new file with mode: 0644]
G3D/Engine/Drivers/SoftDrv2/DIBDisplay.h [new file with mode: 0644]
G3D/Engine/Drivers/SoftDrv2/DisplayModeInfo.c [new file with mode: 0644]
G3D/Engine/Drivers/SoftDrv2/DisplayModeInfo.h [new file with mode: 0644]
G3D/Engine/Drivers/SoftDrv2/DrawDecal.c [new file with mode: 0644]
G3D/Engine/Drivers/SoftDrv2/DrawDecal.h [new file with mode: 0644]
G3D/Engine/Drivers/SoftDrv2/SWTHandle.c [new file with mode: 0644]
G3D/Engine/Drivers/SoftDrv2/SWTHandle.h [new file with mode: 0644]
G3D/Engine/Drivers/SoftDrv2/SoftDrv2.dsp [new file with mode: 0644]
G3D/Engine/Drivers/SoftDrv2/SoftDrv2.mak [new file with mode: 0644]
G3D/Engine/Drivers/SoftDrv2/Softdrv.h [new file with mode: 0644]
G3D/Engine/Drivers/SoftDrv2/Span.h [new file with mode: 0644]
G3D/Engine/Drivers/SoftDrv2/SpanBuffer.c [new file with mode: 0644]
G3D/Engine/Drivers/SoftDrv2/SpanBuffer.h [new file with mode: 0644]
G3D/Engine/Drivers/SoftDrv2/SpanEdges_Factory.h [new file with mode: 0644]
G3D/Engine/Drivers/SoftDrv2/Span_AffineLoop.h [new file with mode: 0644]
G3D/Engine/Drivers/SoftDrv2/Span_Factory.h [new file with mode: 0644]
G3D/Engine/Drivers/SoftDrv2/TRaster.c [new file with mode: 0644]
G3D/Engine/Drivers/SoftDrv2/Triangle.c [new file with mode: 0644]
G3D/Engine/Drivers/SoftDrv2/display.c [new file with mode: 0644]
G3D/Engine/Drivers/SoftDrv2/display.h [new file with mode: 0644]
G3D/Engine/Drivers/SoftDrv2/mssccprj.scc [new file with mode: 0644]
G3D/Engine/Drivers/SoftDrv2/rop.h [new file with mode: 0644]
G3D/Engine/Drivers/SoftDrv2/softdrv.c [new file with mode: 0644]
G3D/Engine/Drivers/SoftDrv2/span.c [new file with mode: 0644]
G3D/Engine/Drivers/SoftDrv2/traster.h [new file with mode: 0644]
G3D/Engine/Drivers/SoftDrv2/triangle.h [new file with mode: 0644]
G3D/Engine/Drivers/WireFrame/D3DDrv.dsp [new file with mode: 0644]
G3D/Engine/Drivers/WireFrame/D3DDrv.dsw [new file with mode: 0644]
G3D/Engine/Drivers/WireFrame/D3DDrv.mak [new file with mode: 0644]
G3D/Engine/Drivers/WireFrame/D3DDrv.ncb [new file with mode: 0644]
G3D/Engine/Drivers/WireFrame/D3DDrv.opt [new file with mode: 0644]
G3D/Engine/Drivers/WireFrame/D3DDrv.plg [new file with mode: 0644]
G3D/Engine/Drivers/WireFrame/D3d_err.cpp [new file with mode: 0644]
G3D/Engine/Drivers/WireFrame/D3d_err.h [new file with mode: 0644]
G3D/Engine/Drivers/WireFrame/D3d_fx.cpp [new file with mode: 0644]
G3D/Engine/Drivers/WireFrame/D3d_fx.h [new file with mode: 0644]
G3D/Engine/Drivers/WireFrame/D3d_main.cpp [new file with mode: 0644]
G3D/Engine/Drivers/WireFrame/D3d_main.h [new file with mode: 0644]
G3D/Engine/Drivers/WireFrame/D3dcache.cpp [new file with mode: 0644]
G3D/Engine/Drivers/WireFrame/D3dcache.h [new file with mode: 0644]
G3D/Engine/Drivers/WireFrame/D3ddrv.cpp [new file with mode: 0644]
G3D/Engine/Drivers/WireFrame/D3ddrv.h [new file with mode: 0644]
G3D/Engine/Drivers/WireFrame/DDMemMgr.c [new file with mode: 0644]
G3D/Engine/Drivers/WireFrame/DDMemMgr.h [new file with mode: 0644]
G3D/Engine/Drivers/WireFrame/Gspan.cpp [new file with mode: 0644]
G3D/Engine/Drivers/WireFrame/Gspan.h [new file with mode: 0644]
G3D/Engine/Drivers/WireFrame/Pcache.cpp [new file with mode: 0644]
G3D/Engine/Drivers/WireFrame/Pcache.h [new file with mode: 0644]
G3D/Engine/Drivers/WireFrame/Readme.now [new file with mode: 0644]
G3D/Engine/Drivers/WireFrame/Render.cpp [new file with mode: 0644]
G3D/Engine/Drivers/WireFrame/Render.h [new file with mode: 0644]
G3D/Engine/Drivers/WireFrame/Scene.cpp [new file with mode: 0644]
G3D/Engine/Drivers/WireFrame/Scene.h [new file with mode: 0644]
G3D/Engine/Drivers/WireFrame/THandle.cpp [new file with mode: 0644]
G3D/Engine/Drivers/WireFrame/THandle.h [new file with mode: 0644]
G3D/Engine/Drivers/WireFrame/TPage.h [new file with mode: 0644]
G3D/Engine/Drivers/WireFrame/mssccprj.scc [new file with mode: 0644]
G3D/Engine/Drivers/WireFrame/tpage.cpp [new file with mode: 0644]
G3D/Engine/Logo/A_CORONA.c [new file with mode: 0644]
G3D/Engine/Logo/A_STREAK.c [new file with mode: 0644]
G3D/Engine/Logo/CORONA.c [new file with mode: 0644]
G3D/Engine/Logo/LogoActor.c [new file with mode: 0644]
G3D/Engine/Logo/WebUrl.c [new file with mode: 0644]
G3D/Engine/Logo/electric.c [new file with mode: 0644]
G3D/Engine/Logo/electric.h [new file with mode: 0644]
G3D/Engine/Logo/logo.c [new file with mode: 0644]
G3D/Engine/Logo/poweredby.c [new file with mode: 0644]
G3D/Engine/Logo/streak.c [new file with mode: 0644]
G3D/Engine/Sound.c [new file with mode: 0644]
G3D/Engine/System.c [new file with mode: 0644]
G3D/Engine/System.h [new file with mode: 0644]
G3D/Engine/engine.c [new file with mode: 0644]
G3D/Engine/engine.h [new file with mode: 0644]
G3D/Engine/fontbmp.c [new file with mode: 0644]
G3D/Engine/genesis3d.c [new file with mode: 0644]
G3D/Entities/ENTITIES.H [new file with mode: 0644]
G3D/Entities/Entities.c [new file with mode: 0644]
G3D/Font/font.H [new file with mode: 0644]
G3D/Font/font.c [new file with mode: 0644]
G3D/Font/wgClip.H [new file with mode: 0644]
G3D/Font/wgClip.c [new file with mode: 0644]
G3D/Ge.c [new file with mode: 0644]
G3D/Genesis.aps [new file with mode: 0644]
G3D/Genesis.dsp [new file with mode: 0644]
G3D/Genesis.dsw [new file with mode: 0644]
G3D/Genesis.h [new file with mode: 0644]
G3D/Genesis.mak [new file with mode: 0644]
G3D/GenesisDLL.dsp [new file with mode: 0644]
G3D/GenesisDLL.dsw [new file with mode: 0644]
G3D/GenesisDLL.mak [new file with mode: 0644]
G3D/Math/Box.c [new file with mode: 0644]
G3D/Math/Box.h [new file with mode: 0644]
G3D/Math/ExtBox.c [new file with mode: 0644]
G3D/Math/ExtBox.h [new file with mode: 0644]
G3D/Math/VEC3D.C [new file with mode: 0644]
G3D/Math/VEC3D.H [new file with mode: 0644]
G3D/Math/Xform3d.c [new file with mode: 0644]
G3D/Math/Xform3d.h [new file with mode: 0644]
G3D/Math/crc32.c [new file with mode: 0644]
G3D/Math/crc32.h [new file with mode: 0644]
G3D/Math/quatern.c [new file with mode: 0644]
G3D/Math/quatern.h [new file with mode: 0644]
G3D/Netplay.c [new file with mode: 0644]
G3D/Netplay.h [new file with mode: 0644]
G3D/Physics/PhysicsJoint.c [new file with mode: 0644]
G3D/Physics/PhysicsJoint.h [new file with mode: 0644]
G3D/Physics/PhysicsObject.c [new file with mode: 0644]
G3D/Physics/PhysicsObject.h [new file with mode: 0644]
G3D/Physics/PhysicsSystem.c [new file with mode: 0644]
G3D/Physics/PhysicsSystem.h [new file with mode: 0644]
G3D/Physics/matrix33.c [new file with mode: 0644]
G3D/Physics/matrix33.h [new file with mode: 0644]
G3D/Ptrtypes.h [new file with mode: 0644]
G3D/RCa24739 [new file with mode: 0644]
G3D/RCb24739 [new file with mode: 0644]
G3D/RCc24739 [new file with mode: 0644]
G3D/RCd24739 [new file with mode: 0644]
G3D/Sound.c [new file with mode: 0644]
G3D/Sound.h [new file with mode: 0644]
G3D/Sound3d.c [new file with mode: 0644]
G3D/Sound3d.h [new file with mode: 0644]
G3D/Support/ERRORLOG.C [new file with mode: 0644]
G3D/Support/Errorlog.h [new file with mode: 0644]
G3D/Support/RAM.H [new file with mode: 0644]
G3D/Support/Ram.c [new file with mode: 0644]
G3D/Support/geAssert.c [new file with mode: 0644]
G3D/Support/geAssert.h [new file with mode: 0644]
G3D/Support/log.c [new file with mode: 0644]
G3D/Support/log.h [new file with mode: 0644]
G3D/Support/mempool.c [new file with mode: 0644]
G3D/Support/mempool.h [new file with mode: 0644]
G3D/Support/ramdll.c [new file with mode: 0644]
G3D/Tclip.c [new file with mode: 0644]
G3D/VFile/FSMEMORY.C [new file with mode: 0644]
G3D/VFile/FSMEMORY.H [new file with mode: 0644]
G3D/VFile/dirtree-common.c [new file with mode: 0644]
G3D/VFile/dirtree-common.h [new file with mode: 0644]
G3D/VFile/dirtree.c [new file with mode: 0644]
G3D/VFile/dirtree.h [new file with mode: 0644]
G3D/VFile/fsdos.c [new file with mode: 0644]
G3D/VFile/fsdos.h [new file with mode: 0644]
G3D/VFile/fsvfs.c [new file with mode: 0644]
G3D/VFile/fsvfs.h [new file with mode: 0644]
G3D/VFile/vfile._h [new file with mode: 0644]
G3D/VFile/vfile.c [new file with mode: 0644]
G3D/VFile/vfile.h [new file with mode: 0644]
G3D/VFile/vfile_structs.h [new file with mode: 0644]
G3D/Winres.h [new file with mode: 0644]
G3D/Winresrc.h [new file with mode: 0644]
G3D/World/FRUSTUM.H [new file with mode: 0644]
G3D/World/Fog.c [new file with mode: 0644]
G3D/World/Fog.h [new file with mode: 0644]
G3D/World/Frustum.c [new file with mode: 0644]
G3D/World/Gbspfile.c [new file with mode: 0644]
G3D/World/Gbspfile.h [new file with mode: 0644]
G3D/World/Light.c [new file with mode: 0644]
G3D/World/Light.h [new file with mode: 0644]
G3D/World/PLANE.H [new file with mode: 0644]
G3D/World/Plane.c [new file with mode: 0644]
G3D/World/SURFACE.H [new file with mode: 0644]
G3D/World/Surface.c [new file with mode: 0644]
G3D/World/TRACE.H [new file with mode: 0644]
G3D/World/Trace.c [new file with mode: 0644]
G3D/World/USER.H [new file with mode: 0644]
G3D/World/User.c [new file with mode: 0644]
G3D/World/VIS.H [new file with mode: 0644]
G3D/World/Vis.c [new file with mode: 0644]
G3D/World/WBitmap.c [new file with mode: 0644]
G3D/World/WBitmap.h [new file with mode: 0644]
G3D/World/World.c [new file with mode: 0644]
G3D/World/World.h [new file with mode: 0644]
G3D/drawbbox.c [new file with mode: 0644]
G3D/genesis.rc [new file with mode: 0644]
G3D/getypes.h [new file with mode: 0644]
G3D/list.c [new file with mode: 0644]
G3D/list.h [new file with mode: 0644]
G3D/mssccprj.scc [new file with mode: 0644]
G3D/resource.h [new file with mode: 0644]
G3D/sprite.c [new file with mode: 0644]
G3D/sprite.h [new file with mode: 0644]
G3D/tclip.h [new file with mode: 0644]
G3D/timer.c [new file with mode: 0644]
G3D/timer.h [new file with mode: 0644]
G3D/tsc.c [new file with mode: 0644]
G3D/tsc.h [new file with mode: 0644]
GBSPLib/BRUSH2.H [new file with mode: 0644]
GBSPLib/BSP.CPP [new file with mode: 0644]
GBSPLib/Brush2.cpp [new file with mode: 0644]
GBSPLib/Bsp.h [new file with mode: 0644]
GBSPLib/Bsp2.cpp [new file with mode: 0644]
GBSPLib/Fill.Cpp [new file with mode: 0644]
GBSPLib/Fill.h [new file with mode: 0644]
GBSPLib/GBSPFILE.CPP [new file with mode: 0644]
GBSPLib/GBSPLib.dsp [new file with mode: 0644]
GBSPLib/GBSPLib.dsw [new file with mode: 0644]
GBSPLib/GBSPLib.mak [new file with mode: 0644]
GBSPLib/GBSPPREP.CPP [new file with mode: 0644]
GBSPLib/GBSPPREP.H [new file with mode: 0644]
GBSPLib/Gbspfile.h [new file with mode: 0644]
GBSPLib/Gbsplib.cpp [new file with mode: 0644]
GBSPLib/Gbsplib.h [new file with mode: 0644]
GBSPLib/Leaf.cpp [new file with mode: 0644]
GBSPLib/Leaf.h [new file with mode: 0644]
GBSPLib/Light.cpp [new file with mode: 0644]
GBSPLib/Light.h [new file with mode: 0644]
GBSPLib/MATHLIB.CPP [new file with mode: 0644]
GBSPLib/MATHLIB.H [new file with mode: 0644]
GBSPLib/Map.cpp [new file with mode: 0644]
GBSPLib/Map.h [new file with mode: 0644]
GBSPLib/POLY.CPP [new file with mode: 0644]
GBSPLib/POLY.H [new file with mode: 0644]
GBSPLib/PORTALS.CPP [new file with mode: 0644]
GBSPLib/PORTALS.H [new file with mode: 0644]
GBSPLib/PortFile.cpp [new file with mode: 0644]
GBSPLib/RAD.CPP [new file with mode: 0644]
GBSPLib/TEXTURE.CPP [new file with mode: 0644]
GBSPLib/TEXTURE.H [new file with mode: 0644]
GBSPLib/TJunct.cpp [new file with mode: 0644]
GBSPLib/Utils.cpp [new file with mode: 0644]
GBSPLib/Utils.h [new file with mode: 0644]
GBSPLib/VIS.CPP [new file with mode: 0644]
GBSPLib/VISFLOOD.CPP [new file with mode: 0644]
GBSPLib/Vis.h [new file with mode: 0644]
GBSPLib/build.bat [new file with mode: 0644]
GBSPLib/mssccprj.scc [new file with mode: 0644]
crafty102/Crafty.exe [new file with mode: 0755]
crafty102/DevIL.dll [new file with mode: 0755]
crafty102/Fonts/CourierNew.csf [new file with mode: 0755]
crafty102/Fonts/CourierNew.tga [new file with mode: 0755]
crafty102/Fonts/FontSchema.csf [new file with mode: 0755]
crafty102/HLLib.dll [new file with mode: 0755]
crafty102/ILU.dll [new file with mode: 0755]
crafty102/Readme.txt [new file with mode: 0755]
crafty102/SketchUpReader.dll [new file with mode: 0755]
crafty102/Specifications/GameInfo.csf [new file with mode: 0755]
crafty102/Specifications/GameInfoCustom.csf [new file with mode: 0755]
crafty102/Specifications/GameInfoSchema.csf [new file with mode: 0755]
crafty102/VTFLib.dll [new file with mode: 0755]
crafty102/gdal12.dll [new file with mode: 0755]
crafty102/xerces-c_2_6.dll [new file with mode: 0755]
include/Basetype.h [new file with mode: 0644]
include/Errorlog.h [new file with mode: 0644]
include/ExtBox.h [new file with mode: 0644]
include/Genesis.h [new file with mode: 0644]
include/PhysicsJoint.h [new file with mode: 0644]
include/PhysicsObject.h [new file with mode: 0644]
include/PhysicsSystem.h [new file with mode: 0644]
include/RAM.H [new file with mode: 0644]
include/VEC3D.H [new file with mode: 0644]
include/Xform3d.h [new file with mode: 0644]
include/actor.h [new file with mode: 0644]
include/bitmap.h [new file with mode: 0644]
include/body.h [new file with mode: 0644]
include/font.H [new file with mode: 0644]
include/getypes.h [new file with mode: 0644]
include/matrix33.h [new file with mode: 0644]
include/motion.h [new file with mode: 0644]
include/path.h [new file with mode: 0644]
include/pixelformat.h [new file with mode: 0644]
include/quatern.h [new file with mode: 0644]
include/sprite.h [new file with mode: 0644]
include/vfile.h [new file with mode: 0644]
mkactor/AStudio.dsp [new file with mode: 0644]
mkactor/AStudio.dsw [new file with mode: 0644]
mkactor/AStudio/AOptions.c [new file with mode: 0644]
mkactor/AStudio/AOptions.h [new file with mode: 0644]
mkactor/AStudio/AProject.c [new file with mode: 0644]
mkactor/AStudio/AProject.h [new file with mode: 0644]
mkactor/AStudio/AStudio.cpp [new file with mode: 0644]
mkactor/AStudio/AStudio.h [new file with mode: 0644]
mkactor/AStudio/AStudio.rc [new file with mode: 0644]
mkactor/AStudio/BodyDlg.cpp [new file with mode: 0644]
mkactor/AStudio/BodyDlg.h [new file with mode: 0644]
mkactor/AStudio/HLP/ASTUDIO.HLP [new file with mode: 0644]
mkactor/AStudio/HLP/AStudio.LOG [new file with mode: 0644]
mkactor/AStudio/HLP/AStudio.cnt [new file with mode: 0644]
mkactor/AStudio/HLP/AStudio.hm [new file with mode: 0644]
mkactor/AStudio/HLP/AStudio.hpj [new file with mode: 0644]
mkactor/AStudio/HLP/AStudio.ph [new file with mode: 0644]
mkactor/AStudio/HLP/AfxDlg.rtf [new file with mode: 0644]
mkactor/AStudio/LogoPage.cpp [new file with mode: 0644]
mkactor/AStudio/LogoPage.h [new file with mode: 0644]
mkactor/AStudio/MakeHelp.bat [new file with mode: 0644]
mkactor/AStudio/MakeHelp.cpp [new file with mode: 0644]
mkactor/AStudio/MakeHelp.h [new file with mode: 0644]
mkactor/AStudio/MaterialsDlg.cpp [new file with mode: 0644]
mkactor/AStudio/MaterialsDlg.h [new file with mode: 0644]
mkactor/AStudio/MotionsDlg.cpp [new file with mode: 0644]
mkactor/AStudio/MotionsDlg.h [new file with mode: 0644]
mkactor/AStudio/MyFileDlg.cpp [new file with mode: 0644]
mkactor/AStudio/MyFileDlg.h [new file with mode: 0644]
mkactor/AStudio/NewPrjDlg.cpp [new file with mode: 0644]
mkactor/AStudio/NewPrjDlg.h [new file with mode: 0644]
mkactor/AStudio/PathsDlg.cpp [new file with mode: 0644]
mkactor/AStudio/PathsDlg.h [new file with mode: 0644]
mkactor/AStudio/PropPage.cpp [new file with mode: 0644]
mkactor/AStudio/PropPage.h [new file with mode: 0644]
mkactor/AStudio/PropSheet.cpp [new file with mode: 0644]
mkactor/AStudio/PropSheet.h [new file with mode: 0644]
mkactor/AStudio/RCa91691 [new file with mode: 0644]
mkactor/AStudio/RES/ACTVIEW.BMP [new file with mode: 0644]
mkactor/AStudio/RES/AStudio.ico [new file with mode: 0644]
mkactor/AStudio/RES/AStudio.rc2 [new file with mode: 0644]
mkactor/AStudio/SettingsDlg.cpp [new file with mode: 0644]
mkactor/AStudio/SettingsDlg.h [new file with mode: 0644]
mkactor/AStudio/StdAfx.cpp [new file with mode: 0644]
mkactor/AStudio/StdAfx.h [new file with mode: 0644]
mkactor/AStudio/TargetDlg.cpp [new file with mode: 0644]
mkactor/AStudio/TargetDlg.h [new file with mode: 0644]
mkactor/AStudio/TextInputDlg.cpp [new file with mode: 0644]
mkactor/AStudio/TextInputDlg.h [new file with mode: 0644]
mkactor/AStudio/Util/ARRAY.H [new file with mode: 0644]
mkactor/AStudio/Util/Array.c [new file with mode: 0644]
mkactor/AStudio/Util/FilePath.c [new file with mode: 0644]
mkactor/AStudio/Util/FilePath.h [new file with mode: 0644]
mkactor/AStudio/Util/RCSTRING.C [new file with mode: 0644]
mkactor/AStudio/Util/RCSTRING.H [new file with mode: 0644]
mkactor/AStudio/Util/UTIL.C [new file with mode: 0644]
mkactor/AStudio/Util/UTIL.H [new file with mode: 0644]
mkactor/AStudio/make.c [new file with mode: 0644]
mkactor/AStudio/make.h [new file with mode: 0644]
mkactor/AStudio/mxscript.c [new file with mode: 0644]
mkactor/AStudio/mxscript.h [new file with mode: 0644]
mkactor/AStudio/resource.h [new file with mode: 0644]
mkactor/ActBuild.dsp [new file with mode: 0644]
mkactor/ActBuild.dsw [new file with mode: 0644]
mkactor/ActBuild/ActBuild.c [new file with mode: 0644]
mkactor/ActBuild/ActBuild.h [new file with mode: 0644]
mkactor/common/TDBody.c [new file with mode: 0644]
mkactor/common/TDBody.h [new file with mode: 0644]
mkactor/common/maxmath.c [new file with mode: 0644]
mkactor/common/maxmath.h [new file with mode: 0644]
mkactor/common/mkutil.c [new file with mode: 0644]
mkactor/common/mkutil.h [new file with mode: 0644]
mkactor/fmtactor/fmtactor.c [new file with mode: 0644]
mkactor/fmtactor/fmtactor.h [new file with mode: 0644]
mkactor/mkactor/mkactor.c [new file with mode: 0644]
mkactor/mkactor/mkactor.h [new file with mode: 0644]
mkactor/mkbody/mkbody.cpp [new file with mode: 0644]
mkactor/mkbody/mkbody.h [new file with mode: 0644]
mkactor/mkbody/vph.c [new file with mode: 0644]
mkactor/mkbody/vph.h [new file with mode: 0644]
mkactor/mkmotion/mkmotion.c [new file with mode: 0644]
mkactor/mkmotion/mkmotion.h [new file with mode: 0644]
mkactor/mop/Log.c [new file with mode: 0644]
mkactor/mop/Log.h [new file with mode: 0644]
mkactor/mop/mopshell.c [new file with mode: 0644]
mkactor/mop/mopshell.h [new file with mode: 0644]
mkactor/mop/pop.c [new file with mode: 0644]
mkactor/mop/pop.h [new file with mode: 0644]
rfPack/BUILD.BAT [new file with mode: 0644]
rfPack/PULL.BAT [new file with mode: 0644]
rfPack/RES/MAINICON.ICO [new file with mode: 0644]
rfPack/RES/rfpack.ico [new file with mode: 0644]
rfPack/Source/TPack.aps [new file with mode: 0644]
rfPack/Source/TPack.c [new file with mode: 0644]
rfPack/Source/TPack.rc [new file with mode: 0644]
rfPack/Source/resource.h [new file with mode: 0644]
rfPack/rfPack.dsp [new file with mode: 0644]
rfPack/rfPack.dsw [new file with mode: 0644]
rfvfs/Delete.cpp [new file with mode: 0644]
rfvfs/Delete.h [new file with mode: 0644]
rfvfs/EllepticalButton.cpp [new file with mode: 0644]
rfvfs/EllepticalButton.h [new file with mode: 0644]
rfvfs/EncryptKey.cpp [new file with mode: 0644]
rfvfs/EncryptKey.h [new file with mode: 0644]
rfvfs/FileTreeCtrl.cpp [new file with mode: 0644]
rfvfs/FileTreeCtrl.h [new file with mode: 0644]
rfvfs/MFileDlg.cpp [new file with mode: 0644]
rfvfs/MFileDlg.h [new file with mode: 0644]
rfvfs/MakeDir.cpp [new file with mode: 0644]
rfvfs/MakeDir.h [new file with mode: 0644]
rfvfs/ReadMe.txt [new file with mode: 0644]
rfvfs/Rename.cpp [new file with mode: 0644]
rfvfs/Rename.h [new file with mode: 0644]
rfvfs/SortedArray.h [new file with mode: 0644]
rfvfs/StdAfx.cpp [new file with mode: 0644]
rfvfs/StdAfx.h [new file with mode: 0644]
rfvfs/res/icon1.ico [new file with mode: 0644]
rfvfs/res/rfvfs.ico [new file with mode: 0644]
rfvfs/res/rfvfs.rc2 [new file with mode: 0644]
rfvfs/res/tfdropcopy.cur [new file with mode: 0644]
rfvfs/res/tfnodropcopy.cur [new file with mode: 0644]
rfvfs/res/tfnodropmove.cur [new file with mode: 0644]
rfvfs/resource.h [new file with mode: 0644]
rfvfs/rfvfs.aps [new file with mode: 0644]
rfvfs/rfvfs.clw [new file with mode: 0644]
rfvfs/rfvfs.cpp [new file with mode: 0644]
rfvfs/rfvfs.dsp [new file with mode: 0644]
rfvfs/rfvfs.dsw [new file with mode: 0644]
rfvfs/rfvfs.h [new file with mode: 0644]
rfvfs/rfvfs.rc [new file with mode: 0644]
rfvfs/rfvfsDlg.cpp [new file with mode: 0644]
rfvfs/rfvfsDlg.h [new file with mode: 0644]
ttf2pcx/ColorButton.cpp [new file with mode: 0644]
ttf2pcx/ColorButton.h [new file with mode: 0644]
ttf2pcx/ColourPopup.cpp [new file with mode: 0644]
ttf2pcx/ColourPopup.h [new file with mode: 0644]
ttf2pcx/character.cpp [new file with mode: 0644]
ttf2pcx/character.h [new file with mode: 0644]
ttf2pcx/previewbutton.cpp [new file with mode: 0644]
ttf2pcx/previewbutton.h [new file with mode: 0644]
ttf2pcx/readme.txt [new file with mode: 0644]
ttf2pcx/res/ttf2font.ico [new file with mode: 0644]
ttf2pcx/res/ttf2pcx.ico [new file with mode: 0644]
ttf2pcx/res/ttf2pcx.rc2 [new file with mode: 0644]
ttf2pcx/resource.h [new file with mode: 0644]
ttf2pcx/stdafx.cpp [new file with mode: 0644]
ttf2pcx/stdafx.h [new file with mode: 0644]
ttf2pcx/ttf2pcx.aps [new file with mode: 0644]
ttf2pcx/ttf2pcx.clw [new file with mode: 0644]
ttf2pcx/ttf2pcx.cpp [new file with mode: 0644]
ttf2pcx/ttf2pcx.dsp [new file with mode: 0644]
ttf2pcx/ttf2pcx.dsw [new file with mode: 0644]
ttf2pcx/ttf2pcx.h [new file with mode: 0644]
ttf2pcx/ttf2pcx.ncb [new file with mode: 0644]
ttf2pcx/ttf2pcx.opt [new file with mode: 0644]
ttf2pcx/ttf2pcx.plg [new file with mode: 0644]
ttf2pcx/ttf2pcx.rc [new file with mode: 0644]
ttf2pcx/ttf2pcxdlg.cpp [new file with mode: 0644]
ttf2pcx/ttf2pcxdlg.h [new file with mode: 0644]

diff --git a/ActView/ActView.dsp b/ActView/ActView.dsp
new file mode 100644 (file)
index 0000000..68866c4
--- /dev/null
@@ -0,0 +1,250 @@
+# Microsoft Developer Studio Project File - Name="ActView" - Package Owner=<4>\r
+# Microsoft Developer Studio Generated Build File, Format Version 6.00\r
+# ** DO NOT EDIT **\r
+\r
+# TARGTYPE "Win32 (x86) Application" 0x0101\r
+\r
+CFG=ActView - Win32 Debug\r
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,\r
+!MESSAGE use the Export Makefile command and run\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "ActView.mak".\r
+!MESSAGE \r
+!MESSAGE You can specify a configuration when running NMAKE\r
+!MESSAGE by defining the macro CFG on the command line. For example:\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "ActView.mak" CFG="ActView - Win32 Debug"\r
+!MESSAGE \r
+!MESSAGE Possible choices for configuration are:\r
+!MESSAGE \r
+!MESSAGE "ActView - Win32 Release" (based on "Win32 (x86) Application")\r
+!MESSAGE "ActView - Win32 Debug" (based on "Win32 (x86) Application")\r
+!MESSAGE \r
+\r
+# Begin Project\r
+# PROP AllowPerConfigDependencies 0\r
+# PROP Scc_ProjName ""$/Genesis10/Tools/Actview", ASFBAAAA"\r
+# PROP Scc_LocalPath "."\r
+CPP=cl.exe\r
+MTL=midl.exe\r
+RSC=rc.exe\r
+\r
+!IF  "$(CFG)" == "ActView - Win32 Release"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 0\r
+# PROP BASE Output_Dir "Release"\r
+# PROP BASE Intermediate_Dir "Release"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 0\r
+# PROP Output_Dir "Release"\r
+# PROP Intermediate_Dir "Release"\r
+# PROP Ignore_Export_Lib 0\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c\r
+# ADD CPP /nologo /G5 /MT /W4 /GX /O2 /Ob2 /I ".\Util" /I ".\Main" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "WIN32_LEAN_AND_MEAN" /FD /c\r
+# SUBTRACT CPP /X /Fr /YX\r
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32\r
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32\r
+# ADD BASE RSC /l 0x409 /d "NDEBUG"\r
+# ADD RSC /l 0x409 /d "NDEBUG"\r
+# SUBTRACT RSC /x\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386\r
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib comctl32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib winmm.lib vfw32.lib dxguid.lib genesis.lib /nologo /subsystem:windows /machine:I386\r
+# SUBTRACT LINK32 /nodefaultlib\r
+\r
+!ELSEIF  "$(CFG)" == "ActView - Win32 Debug"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "Debug"\r
+# PROP BASE Intermediate_Dir "Debug"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "Debug"\r
+# PROP Intermediate_Dir "Debug"\r
+# PROP Ignore_Export_Lib 0\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c\r
+# ADD CPP /nologo /G5 /MTd /W4 /Gm /GX /ZI /Od /I ".\Util" /I ".\Main" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "WIN32_LEAN_AND_MEAN" /FD /c\r
+# SUBTRACT CPP /X /Fr /YX\r
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32\r
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32\r
+# ADD BASE RSC /l 0x409 /d "_DEBUG"\r
+# ADD RSC /l 0x409 /d "_DEBUG"\r
+# SUBTRACT RSC /x\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept\r
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib comctl32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib winmm.lib vfw32.lib dxguid.lib genesisd.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept\r
+# SUBTRACT LINK32 /nodefaultlib\r
+\r
+!ENDIF \r
+\r
+# Begin Target\r
+\r
+# Name "ActView - Win32 Release"\r
+# Name "ActView - Win32 Debug"\r
+# Begin Group "Util"\r
+\r
+# PROP Default_Filter ""\r
+# Begin Source File\r
+\r
+SOURCE=.\Util\About.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\Util\about.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\Util\drvlist.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\Util\drvlist.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\Util\FilePath.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\Util\FilePath.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\Util\InstCheck.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\Util\InstCheck.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\Util\rcstring.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\Util\rcstring.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\Util\units.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\Util\WinUtil.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\Util\WinUtil.h\r
+# End Source File\r
+# End Group\r
+# Begin Group "Resources"\r
+\r
+# PROP Default_Filter ".bmp;.cur;.ico"\r
+# Begin Source File\r
+\r
+SOURCE=.\res\actview.bmp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\res\actview.ico\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\res\blend.ico\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\res\ffend.ico\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\res\ffframe.ico\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\res\mainicon.ico\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\res\pan.cur\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\res\pan.ico\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\res\pause.ico\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\res\play.ico\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\res\rotate.cur\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\res\rotate.ico\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\res\rrframe.ico\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\res\rrstart.ico\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\res\stop.ico\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\res\zoom.cur\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\res\zoom.ico\r
+# End Source File\r
+# End Group\r
+# Begin Source File\r
+\r
+SOURCE=.\Main\actview.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\ActView.mak\r
+# PROP Exclude_From_Build 1\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\Main\actview.rc\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\Main\Blender.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\Main\Blender.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\Main\resource.h\r
+# End Source File\r
+# End Target\r
+# End Project\r
diff --git a/ActView/ActView.dsw b/ActView/ActView.dsw
new file mode 100644 (file)
index 0000000..de5f91e
--- /dev/null
@@ -0,0 +1,29 @@
+Microsoft Developer Studio Workspace File, Format Version 6.00\r
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!\r
+\r
+###############################################################################\r
+\r
+Project: "ActView"=.\ActView.dsp - Package Owner=<4>\r
+\r
+Package=<5>\r
+{{{\r
+}}}\r
+\r
+Package=<4>\r
+{{{\r
+}}}\r
+\r
+###############################################################################\r
+\r
+Global:\r
+\r
+Package=<5>\r
+{{{\r
+}}}\r
+\r
+Package=<3>\r
+{{{\r
+}}}\r
+\r
+###############################################################################\r
+\r
diff --git a/ActView/ActView.mak b/ActView/ActView.mak
new file mode 100644 (file)
index 0000000..892bf8b
--- /dev/null
@@ -0,0 +1,250 @@
+# Microsoft Developer Studio Generated NMAKE File, Based on ActView.dsp\r
+!IF "$(CFG)" == ""\r
+CFG=ActView - Win32 Debug\r
+!MESSAGE No configuration specified. Defaulting to ActView - Win32 Debug.\r
+!ENDIF \r
+\r
+!IF "$(CFG)" != "ActView - Win32 Release" && "$(CFG)" != "ActView - Win32 Debug"\r
+!MESSAGE Invalid configuration "$(CFG)" specified.\r
+!MESSAGE You can specify a configuration when running NMAKE\r
+!MESSAGE by defining the macro CFG on the command line. For example:\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "ActView.mak" CFG="ActView - Win32 Debug"\r
+!MESSAGE \r
+!MESSAGE Possible choices for configuration are:\r
+!MESSAGE \r
+!MESSAGE "ActView - Win32 Release" (based on "Win32 (x86) Application")\r
+!MESSAGE "ActView - Win32 Debug" (based on "Win32 (x86) Application")\r
+!MESSAGE \r
+!ERROR An invalid configuration is specified.\r
+!ENDIF \r
+\r
+!IF "$(OS)" == "Windows_NT"\r
+NULL=\r
+!ELSE \r
+NULL=nul\r
+!ENDIF \r
+\r
+CPP=cl.exe\r
+MTL=midl.exe\r
+RSC=rc.exe\r
+\r
+!IF  "$(CFG)" == "ActView - Win32 Release"\r
+\r
+OUTDIR=.\Release\r
+INTDIR=.\Release\r
+# Begin Custom Macros\r
+OutDir=.\Release\r
+# End Custom Macros\r
+\r
+ALL : "$(OUTDIR)\ActView.exe"\r
+\r
+\r
+CLEAN :\r
+       -@erase "$(INTDIR)\About.obj"\r
+       -@erase "$(INTDIR)\actview.obj"\r
+       -@erase "$(INTDIR)\actview.res"\r
+       -@erase "$(INTDIR)\Blender.obj"\r
+       -@erase "$(INTDIR)\drvlist.obj"\r
+       -@erase "$(INTDIR)\FilePath.obj"\r
+       -@erase "$(INTDIR)\InstCheck.obj"\r
+       -@erase "$(INTDIR)\rcstring.obj"\r
+       -@erase "$(INTDIR)\vc60.idb"\r
+       -@erase "$(INTDIR)\WinUtil.obj"\r
+       -@erase "$(OUTDIR)\ActView.exe"\r
+\r
+"$(OUTDIR)" :\r
+    if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"\r
+\r
+CPP_PROJ=/nologo /G5 /MT /W4 /GX /O2 /X /I ".\Util" /I ".\Main" /I ".\GenesisSDK\Include" /I "..\..\msdev60\include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "WIN32_LEAN_AND_MEAN" /Fp"$(INTDIR)\ActView.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c \r
+MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 \r
+RSC_PROJ=/l 0x409 /x /fo"$(INTDIR)\actview.res" /i "..\..\msdev60\include" /d "NDEBUG" \r
+BSC32=bscmake.exe\r
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\ActView.bsc" \r
+BSC32_SBRS= \\r
+       \r
+LINK32=link.exe\r
+LINK32_FLAGS=genesis.lib libcmt.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib shell32.lib oldnames.lib winmm.lib comctl32.lib ole32.lib uuid.lib urlmon.lib /nologo /subsystem:windows /incremental:no /pdb:"$(OUTDIR)\ActView.pdb" /machine:I386 /nodefaultlib /out:"$(OUTDIR)\ActView.exe" /libpath:".\GenesisSDK\lib" /libpath:"..\..\msdev60\lib" \r
+LINK32_OBJS= \\r
+       "$(INTDIR)\About.obj" \\r
+       "$(INTDIR)\drvlist.obj" \\r
+       "$(INTDIR)\FilePath.obj" \\r
+       "$(INTDIR)\InstCheck.obj" \\r
+       "$(INTDIR)\rcstring.obj" \\r
+       "$(INTDIR)\WinUtil.obj" \\r
+       "$(INTDIR)\actview.obj" \\r
+       "$(INTDIR)\Blender.obj" \\r
+       "$(INTDIR)\actview.res"\r
+\r
+"$(OUTDIR)\ActView.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)\r
+    $(LINK32) @<<\r
+  $(LINK32_FLAGS) $(LINK32_OBJS)\r
+<<\r
+\r
+!ELSEIF  "$(CFG)" == "ActView - Win32 Debug"\r
+\r
+OUTDIR=.\Debug\r
+INTDIR=.\Debug\r
+# Begin Custom Macros\r
+OutDir=.\Debug\r
+# End Custom Macros\r
+\r
+ALL : "$(OUTDIR)\ActView.exe"\r
+\r
+\r
+CLEAN :\r
+       -@erase "$(INTDIR)\About.obj"\r
+       -@erase "$(INTDIR)\actview.obj"\r
+       -@erase "$(INTDIR)\actview.res"\r
+       -@erase "$(INTDIR)\Blender.obj"\r
+       -@erase "$(INTDIR)\drvlist.obj"\r
+       -@erase "$(INTDIR)\FilePath.obj"\r
+       -@erase "$(INTDIR)\InstCheck.obj"\r
+       -@erase "$(INTDIR)\rcstring.obj"\r
+       -@erase "$(INTDIR)\vc60.idb"\r
+       -@erase "$(INTDIR)\vc60.pdb"\r
+       -@erase "$(INTDIR)\WinUtil.obj"\r
+       -@erase "$(OUTDIR)\ActView.exe"\r
+       -@erase "$(OUTDIR)\ActView.ilk"\r
+       -@erase "$(OUTDIR)\ActView.pdb"\r
+\r
+"$(OUTDIR)" :\r
+    if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"\r
+\r
+CPP_PROJ=/nologo /G5 /MTd /W4 /Gm /GX /ZI /Od /X /I ".\Util" /I ".\Main" /I ".\GenesisSDK\Include" /I "..\..\msdev60\include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "WIN32_LEAN_AND_MEAN" /Fp"$(INTDIR)\ActView.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c \r
+MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 \r
+RSC_PROJ=/l 0x409 /x /fo"$(INTDIR)\actview.res" /i "..\..\msdev60\include" /d "_DEBUG" \r
+BSC32=bscmake.exe\r
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\ActView.bsc" \r
+BSC32_SBRS= \\r
+       \r
+LINK32=link.exe\r
+LINK32_FLAGS=genesisd.lib libcmtd.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib shell32.lib oldnames.lib winmm.lib comctl32.lib ole32.lib uuid.lib urlmon.lib /nologo /subsystem:windows /incremental:yes /pdb:"$(OUTDIR)\ActView.pdb" /debug /machine:I386 /nodefaultlib /out:"$(OUTDIR)\ActView.exe" /pdbtype:sept /libpath:".\GenesisSDK\lib" /libpath:"..\..\msdev60\lib" \r
+LINK32_OBJS= \\r
+       "$(INTDIR)\About.obj" \\r
+       "$(INTDIR)\drvlist.obj" \\r
+       "$(INTDIR)\FilePath.obj" \\r
+       "$(INTDIR)\InstCheck.obj" \\r
+       "$(INTDIR)\rcstring.obj" \\r
+       "$(INTDIR)\WinUtil.obj" \\r
+       "$(INTDIR)\actview.obj" \\r
+       "$(INTDIR)\Blender.obj" \\r
+       "$(INTDIR)\actview.res"\r
+\r
+"$(OUTDIR)\ActView.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)\r
+    $(LINK32) @<<\r
+  $(LINK32_FLAGS) $(LINK32_OBJS)\r
+<<\r
+\r
+!ENDIF \r
+\r
+.c{$(INTDIR)}.obj::\r
+   $(CPP) @<<\r
+   $(CPP_PROJ) $< \r
+<<\r
+\r
+.cpp{$(INTDIR)}.obj::\r
+   $(CPP) @<<\r
+   $(CPP_PROJ) $< \r
+<<\r
+\r
+.cxx{$(INTDIR)}.obj::\r
+   $(CPP) @<<\r
+   $(CPP_PROJ) $< \r
+<<\r
+\r
+.c{$(INTDIR)}.sbr::\r
+   $(CPP) @<<\r
+   $(CPP_PROJ) $< \r
+<<\r
+\r
+.cpp{$(INTDIR)}.sbr::\r
+   $(CPP) @<<\r
+   $(CPP_PROJ) $< \r
+<<\r
+\r
+.cxx{$(INTDIR)}.sbr::\r
+   $(CPP) @<<\r
+   $(CPP_PROJ) $< \r
+<<\r
+\r
+\r
+!IF "$(NO_EXTERNAL_DEPS)" != "1"\r
+!IF EXISTS("ActView.dep")\r
+!INCLUDE "ActView.dep"\r
+!ELSE \r
+!MESSAGE Warning: cannot find "ActView.dep"\r
+!ENDIF \r
+!ENDIF \r
+\r
+\r
+!IF "$(CFG)" == "ActView - Win32 Release" || "$(CFG)" == "ActView - Win32 Debug"\r
+SOURCE=.\Util\About.c\r
+\r
+"$(INTDIR)\About.obj" : $(SOURCE) "$(INTDIR)"\r
+       $(CPP) $(CPP_PROJ) $(SOURCE)\r
+\r
+\r
+SOURCE=.\Util\drvlist.c\r
+\r
+"$(INTDIR)\drvlist.obj" : $(SOURCE) "$(INTDIR)"\r
+       $(CPP) $(CPP_PROJ) $(SOURCE)\r
+\r
+\r
+SOURCE=.\Util\FilePath.c\r
+\r
+"$(INTDIR)\FilePath.obj" : $(SOURCE) "$(INTDIR)"\r
+       $(CPP) $(CPP_PROJ) $(SOURCE)\r
+\r
+\r
+SOURCE=.\Util\InstCheck.c\r
+\r
+"$(INTDIR)\InstCheck.obj" : $(SOURCE) "$(INTDIR)"\r
+       $(CPP) $(CPP_PROJ) $(SOURCE)\r
+\r
+\r
+SOURCE=.\Util\rcstring.c\r
+\r
+"$(INTDIR)\rcstring.obj" : $(SOURCE) "$(INTDIR)"\r
+       $(CPP) $(CPP_PROJ) $(SOURCE)\r
+\r
+\r
+SOURCE=.\Util\WinUtil.c\r
+\r
+"$(INTDIR)\WinUtil.obj" : $(SOURCE) "$(INTDIR)"\r
+       $(CPP) $(CPP_PROJ) $(SOURCE)\r
+\r
+\r
+SOURCE=.\Main\actview.c\r
+\r
+"$(INTDIR)\actview.obj" : $(SOURCE) "$(INTDIR)"\r
+       $(CPP) $(CPP_PROJ) $(SOURCE)\r
+\r
+\r
+SOURCE=.\Main\actview.rc\r
+\r
+!IF  "$(CFG)" == "ActView - Win32 Release"\r
+\r
+\r
+"$(INTDIR)\actview.res" : $(SOURCE) "$(INTDIR)"\r
+       $(RSC) /l 0x409 /x /fo"$(INTDIR)\actview.res" /i "..\..\msdev60\include" /i "Main" /d "NDEBUG" $(SOURCE)\r
+\r
+\r
+!ELSEIF  "$(CFG)" == "ActView - Win32 Debug"\r
+\r
+\r
+"$(INTDIR)\actview.res" : $(SOURCE) "$(INTDIR)"\r
+       $(RSC) /l 0x409 /x /fo"$(INTDIR)\actview.res" /i "..\..\msdev60\include" /i "Main" /d "_DEBUG" $(SOURCE)\r
+\r
+\r
+!ENDIF \r
+\r
+SOURCE=.\Main\Blender.c\r
+\r
+"$(INTDIR)\Blender.obj" : $(SOURCE) "$(INTDIR)"\r
+       $(CPP) $(CPP_PROJ) $(SOURCE)\r
+\r
+\r
+\r
+!ENDIF \r
+\r
diff --git a/ActView/Doc/ACTVIEW.HLP b/ActView/Doc/ACTVIEW.HLP
new file mode 100644 (file)
index 0000000..8d46c63
Binary files /dev/null and b/ActView/Doc/ACTVIEW.HLP differ
diff --git a/ActView/Doc/ActView.CNT b/ActView/Doc/ActView.CNT
new file mode 100644 (file)
index 0000000..6892e0e
--- /dev/null
@@ -0,0 +1,15 @@
+:Base ActView.HLP\r
+1 ActView\r
+2 Introduction=Introduction\r
+2 Loading an Actor=Loading_an_Actor\r
+2 Setting the Actor's Front Position=Setting_the_Actor_s_Front_Position\r
+2 Selecting a Motion=Selecting_a_Motion\r
+2 Controlling Playback=Controlling_Playback\r
+2 Adjusting Playback Speed=Adjusting_Playback_Speed\r
+2 Adjusting Frame Step Time=Adjusting_Frame_Step_Time\r
+2 Moving the Actor=Moving_the_Actor\r
+2 Adjusting Actor Size=Adjusting_Actor_Size\r
+2 Displaying Frame Rate=Displaying_Frame_Rate\r
+2 Shortcut Keys=Shortcut_Keys\r
+2 Setting Texture Maps Location=Setting_Texture_Maps_Location\r
+2 Creating a Custom Actor Viewer Level=Creating_a_Custom_Actor_Viewer_Level\r
diff --git a/ActView/Doc/ActView.doc b/ActView/Doc/ActView.doc
new file mode 100644 (file)
index 0000000..46f06f3
Binary files /dev/null and b/ActView/Doc/ActView.doc differ
diff --git a/ActView/Doc/ActView.err b/ActView/Doc/ActView.err
new file mode 100644 (file)
index 0000000..92e2edc
--- /dev/null
@@ -0,0 +1,17 @@
+Microsoft (R) Help Compiler\r
+HCRTF 4.02.0034\r
+Copyright (c) Microsoft Corp 1990 - 1995. All rights reserved.\r
+actview.hpj\r
+    HC1012: Note: topic #12 of c:\project\actview\doc\ActView.rtf : \r
+       Table cell borders are not supported.\r
+13     Topics\r
+1      Jump\r
+13     Keywords\r
+7      Bitmaps\r
+\r
+\r
+Created c:\project\actview\doc\actview.hlp, 16,040 bytes\r
+Bitmaps: 1,588 bytes\r
+Hall+Zeck compression decreased help file by 4,371 bytes.\r
+Compile time: 0 minutes, 0 seconds\r
+1 note, 0 warnings\r
diff --git a/ActView/Doc/ActView.hpj b/ActView/Doc/ActView.hpj
new file mode 100644 (file)
index 0000000..b3b926d
--- /dev/null
@@ -0,0 +1,97 @@
+;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\r
+; Help Project File for ActView \r
+;\r
+;  This file is maintained by RoboHELP.  Do not modify this file directly.\r
+;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\r
+\r
+\r
+[OPTIONS]\r
+;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\r
+; The Options section contains the following information:\r
+;\r
+; The optional BMROOT=entry sets the directories in which the Help Compiler\r
+; will look for graphics.\r
+;\r
+; The CONTENTS=tells WinHelp which topic contains the contents.\r
+;\r
+; The TITLE=is displayed in the Title Bar of WINHELP.EXE\r
+;\r
+; The BUILD=setting allows you to create different Help systems from\r
+; the same source file.\r
+;\r
+; The COMPRESS=option tells the Help Compiler how much to compress\r
+; the Help file.\r
+;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\r
+;BMROOT=C:\Project\ActView\Doc\r
+TITLE=Genesis3D Actor Viewer\r
+BUILD=WINDOWS\r
+NOTES=1\r
+\r
+\r
+COMPRESS=12\r
+OLDKEYPHRASE=NO\r
+REPORT=YES\r
+OPTCDROM=0\r
+DBCS=0\r
+CONTENTS=Introduction\r
+COPYRIGHT=Copyright © 1999, WildTangent Inc.\r
+ERRORLOG=C:\project\actview\doc\ActView.err\r
+[BUILDTAGS]\r
+;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\r
+; The Build Tags section specifies to the Help Compiler the names\r
+; of all the valid build tags used in this Help project.\r
+;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\r
+WINDOWS\r
+\r
+\r
+[WINDOWS]\r
+;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\r
+; The Windows section contains all of the information about the windows\r
+; in a Help project.\r
+;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\r
+;Gloss="Glossary",(100,100,350,350),0,(255,255,255),(255,255,255)\r
+\r
+\r
+(w95sec)=,,20740,(r14745599),(r14745599),f2\r
+main="",(255,0,511,511),29188,(128,255,255),(255,255,128),f0\r
+[CONFIG]\r
+;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\r
+; The Config section defines macros which will run at startup.\r
+;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\r
+\r
+\r
+\r
+\r
+[FILES]\r
+;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\r
+; The Files section specifies the RTF files for a project.\r
+;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\r
+\r
+\r
+ActView.rtf\r
+[ALIAS]\r
+;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\r
+; The Alias section sets up aliases for Topic IDs in your Help system.\r
+;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\r
+\r
+\r
+[MAP]\r
+;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\r
+; The Map section specifies the project HH files.\r
+;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\r
+\r
+\r
+[BITMAPS]\r
+;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\r
+; The Bitmaps section specifies the referenced bitmaps used in\r
+; your help system.\r
+;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\r
+\r
+\r
+[BAGGAGE]\r
+;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\r
+; The Baggage section specifies any additional files.\r
+;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\r
+\r
+\r
+[Config-(w95sec)]\r
diff --git a/ActView/Doc/ActView.rbh b/ActView/Doc/ActView.rbh
new file mode 100644 (file)
index 0000000..d71582a
--- /dev/null
@@ -0,0 +1,33 @@
+[Project]\r
+Help Compiler=HCW.EXE\r
+Remove Unused=0\r
+Version=512\r
+ConvertedFromV1=0\r
+HasGlossary=0\r
+Automatic Map Files=0\r
+NextFile=2\r
+WH2RH=0\r
+Extra Language=0\r
+\r
+[Document Files]\r
+ActView.doc=1\r
+\r
+[File Properties]\r
+HasProperties=1\r
+BrowseType=0\r
+AutoMapFile=0\r
+StartingWith=0\r
+IncrementBy=20\r
+NextTopicNumber=0\r
+StartingNumber=1\r
+BrowseString=ActView:0\r
+DefaultBuildTag=\r
+\r
+[VERSION]\r
+RHFile=4.1\r
+\r
+[.rbh]\r
+CopyTo=0\r
+PreBatch=\r
+PostBatch=\r
+AutoFixRTF=0\r
diff --git a/ActView/Doc/ActView.rta b/ActView/Doc/ActView.rta
new file mode 100644 (file)
index 0000000..32a857f
Binary files /dev/null and b/ActView/Doc/ActView.rta differ
diff --git a/ActView/Doc/ActView.rtf b/ActView/Doc/ActView.rtf
new file mode 100644 (file)
index 0000000..44cd3a0
--- /dev/null
@@ -0,0 +1,68 @@
+{\rtf1\ansi\ansicpg1252\uc1 \deff0\deflang1033\deflangfe1033{\fonttbl{\f0\froman\fcharset0\fprq2 Times New Roman;}{\f1\fswiss\fcharset0\fprq2 Arial;}{\f2\fmodern\fcharset0\fprq1 Courier New;}{\f3\froman\fcharset2\fprq2 Symbol;}{\f14\fnil\fcharset2\fprq2 Wingdings;}{\f15\fswiss\fcharset0\fprq2 Tahoma;}{\f140\fswiss\fcharset238\fprq2 Tahoma CE;}{\f141\fswiss\fcharset204\fprq2 Tahoma Cyr;}{\f143\fswiss\fcharset161\fprq2 Tahoma Greek;}{\f144\fswiss\fcharset162\fprq2 Tahoma Tur;}{\f145\fswiss\fcharset186\fprq2 Tahoma Baltic;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{\li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\cgrid \snext0 Normal;}{\s1\li115\ri130\sb80\sa120\nowidctlpar\widctlpar\adjustright \b\f1\fs32\kerning28\cgrid \sbasedon0 \snext0 heading 1;}{\s2\li360\ri360\sb120\sa48\nowidctlpar\widctlpar\adjustright \b\f1\cgrid \sbasedon0 \snext0 heading 2;}{\s3\li115\ri130\sb240\sa60\keepn\nowidctlpar\widctlpar\adjustright \b\f1\cgrid \sbasedon0 \snext0 heading 3;}{\s4\li360\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\cgrid \sbasedon0 \snext0 heading 4;}{\s5\li115\ri130\sb240\sa60\nowidctlpar\widctlpar\adjustright \f1\fs22\cgrid \sbasedon0 \snext0 heading 5;}{\s6\li115\ri130\sb240\sa60\nowidctlpar\widctlpar\adjustright \i\f1\fs22\cgrid \sbasedon0 \snext0 heading 6;}{\s7\li115\ri130\sb240\sa60\nowidctlpar\widctlpar\adjustright \f1\fs16\cgrid \sbasedon0 \snext0 heading 7;}{\s8\li115\ri130\sb240\sa60\nowidctlpar\widctlpar\adjustright \i\f1\fs16\cgrid \sbasedon0 \snext0 heading 8;}{\s9\li115\ri130\sb240\sa60\nowidctlpar\widctlpar\adjustright \i\f1\fs18\cgrid \sbasedon0 \snext0 heading 9;}{\*\cs10 \additive Default Paragraph Font;}{\s15\li720\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\cgrid \sbasedon0 \snext15 Normal Indent;}{\s16\li115\ri130\sb80\sa120\nowidctlpar\widctlpar\adjustright \b\f1\fs32\kerning28\cgrid \sbasedon1 \snext0 Tip/Note Heading;}{\s17\li302\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\cgrid \sbasedon0 \snext17 Tip/Note Text;}{\s18\fi-187\li302\ri130\sa48\nowidctlpar\widctlpar\tx302{\*\pn \pnlvlbody\ilvl0\ls12\pnrnot0\pndec }\ls12\adjustright \f1\cgrid \sbasedon17 \snext18 Tip/Note Text Bulleted;}{\s19\fi-187\li302\ri130\sa48\nowidctlpar\widctlpar\tx302{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \f1\cgrid \sbasedon0 \snext19 Topic Text Bulleted;}{\s20\li302\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\cgrid \sbasedon0 \snext20 Topic Text Indent;}{\s21\fi-187\li302\ri130\sa48\nowidctlpar\widctlpar\tx302{\*\pn \pnlvlbody\ilvl0\ls10\pnrnot0\pndec }\ls10\adjustright \f1\cgrid \sbasedon0 \snext21 Topic Text Numbered;}{\s22\li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\fs20\cgrid \sbasedon0 \snext22 footnote text;}{\*\cs23 \additive \super \sbasedon10 footnote reference;}{\s24\li115\ri130\sa120\nowidctlpar\widctlpar\adjustright \f1\cgrid \sbasedon0 \snext24 Body Text;}{\s25\li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \cbpat9 \f15\cgrid \sbasedon0 \snext25 Document Map;}}{\*\listtable{\list\listtemplateid-1\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat0\levelspace0\levelindent0{\leveltext\'01*;}{\levelnumbers;}}{\listname ;}\listid-2}{\list\listtemplateid-1172924662\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'00;}{\levelnumbers\'01;}\b0\i0\f1\fs16\fbias0 \s21\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid133064239}{\list\listtemplateid773758716\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent187{\leveltext\'01\'00;}{\levelnumbers\'01;}\b0\i0\f2\fs16\fbias0 \fi-187\li302 }{\listname ;}\listid594173417}{\list\listtemplateid773758716\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent187{\leveltext\'01\'00;}{\levelnumbers\'01;}\b0\i0\f2\fs16\fbias0 \fi-187\li302 }{\listname ;}\listid625281553}{\list\listtemplateid773758716\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent187{\leveltext\'01\'00;}{\levelnumbers\'01;}\b0\i0\f2\fs16\fbias0 \fi-187\li302 }{\listname ;}\listid1008486551}{\list\listtemplateid773758716\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent187{\leveltext\'01\'00;}{\levelnumbers\'01;}\b0\i0\f2\fs16\fbias0 \fi-187\li302 }{\listname ;}\listid1011687179}{\list\listtemplateid773758716\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent187{\leveltext\'01\'00;}{\levelnumbers\'01;}\b0\i0\f2\fs16\fbias0 \fi-187\li302 }{\listname ;}\listid1279068346}{\list\listtemplateid773758716\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent187{\leveltext\'01\'00;}{\levelnumbers\'01;}\b0\i0\f2\fs16\fbias0 \fi-187\li302 }{\listname ;}\listid1401824188}{\list\listtemplateid-2130923212\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f14\fbias0 \s19\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1458330772}{\list\listtemplateid773758716\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent187{\leveltext\'01\'00;}{\levelnumbers\'01;}\b0\i0\f2\fs16\fbias0 \fi-187\li302 }{\listname ;}\listid1636791344}{\list\listtemplateid773758716\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent187{\leveltext\'01\'00;}{\levelnumbers\'01;}\b0\i0\f2\fs16\fbias0 \fi-187\li302 }{\listname ;}\listid1772432900}{\list\listtemplateid1882989404\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f14\fbias0 \s18\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid2074572765}}{\*\listoverridetable{\listoverride\listid1458330772\listoverridecount0\ls1}{\listoverride\listid1772432900\listoverridecount0\ls2}{\listoverride\listid1279068346\listoverridecount0\ls3}{\listoverride\listid625281553\listoverridecount0\ls4}{\listoverride\listid1008486551\listoverridecount0\ls5}{\listoverride\listid1401824188\listoverridecount0\ls6}{\listoverride\listid1011687179\listoverridecount0\ls7}{\listoverride\listid1636791344\listoverridecount0\ls8}{\listoverride\listid594173417\listoverridecount0\ls9}{\listoverride\listid133064239\listoverridecount0\ls10}{\listoverride\listid-2\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent187{\leveltext\'01\u-3986 ?;}{\levelnumbers;}\f3\fs10\fbias0 \fi-187\li302 }}\ls11}{\listoverride\listid2074572765\listoverridecount0\ls12}}{\info{\title # $ K + Introduction}{\author Jim Mischel}{\operator Jim Mischel}{\creatim\yr1998\mo9\dy16\hr10\min40}{\revtim\yr1998\mo9\dy16\hr10\min40}{\version2}{\edmins0}{\nofpages13}{\nofwords1091}{\nofchars6223}{\*\company Blue Sky Software}{\nofcharsws7642}{\vern71}}\widowctrl\ftnbj\aenddoc\formshade\viewkind4\viewscale100\pgbrdrhead\pgbrdrfoot \fet0{\*\template C:\\Program Files\\Microsoft Office\\Templates\\RoboHELP.dot}\sectd \linex0\endnhere\sectdefaultcl {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain \s1\li115\ri130\sb80\sa120\keepn\nowidctlpar\widctlpar\outlinelevel0\adjustright \b\f1\fs32\kerning28\cgrid {\cs23\super #{\footnote \pard\plain \s22\li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\fs20\cgrid {\cs23\super #}{ Introduction}}}{ }{\cs23\super ${\footnote \pard\plain \s22\li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\fs20\cgrid {\cs23\super $}{ Introduction}}}{ }{\cs23\super K{\footnote \pard\plain \s22\li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\fs20\cgrid {\cs23\super K}{ Introduction}}}{ }{\cs23\super +{\footnote \pard\plain \s22\li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\fs20\cgrid {\cs23\super +}{ ACTVIEW:0}}}{ Introduction\r
+\par }\pard\plain \s24\li115\ri130\sa120\nowidctlpar\widctlpar\adjustright \f1\cgrid {The Genesis3D Actor Viewer allows you to load Genesis3D Actor (.act) files and preview the actor's animations as they will appear when played in the Genesis3D engine.  Actor Viewer includes the full range of playback controls including Play, Pause, frame-by-frame, and variable speed playback, and also allows you to view the actor from any angle.\r
+\par \r
+\par }\pard\plain \s1\li115\ri130\sb80\sa120\keepn\nowidctlpar\widctlpar\outlinelevel0\adjustright \b\f1\fs32\kerning28\cgrid {\page }{\cs23\super #{\footnote \pard\plain \s22\li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\fs20\cgrid {\cs23\super #}{ Loading_an_Actor}}}{ }{\cs23\super ${\footnote \pard\plain \s22\li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\fs20\cgrid {\cs23\super $}{ Loading an Actor}}}{ }{\cs23\super K{\footnote \pard\plain \s22\li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\fs20\cgrid {\cs23\super K}{ Loading an Actor}}}{ }{\cs23\super +{\footnote \pard\plain \s22\li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\fs20\cgrid {\cs23\super +}{ ACTVIEW:0}}}{ Loading an Actor\r
+\par }\pard\plain \s24\li115\ri130\sa120\nowidctlpar\widctlpar\adjustright \f1\cgrid {To load an actor for viewing, select File|Open (or press Ctrl+O), and select the desired actor file (.act extension) from the file open dialog box.  Actor Viewer remembers the last directory from which you loaded an actor, so the next time you select File|Open, you will already be in your Actors directory.\r
+\par The last directory setting is stored in the program's initialization file so that the program remembers it between sessions.\r
+\par Actor Viewer will also accept a dropped file.  If you drag a file from Windows Explorer and drop it onto the Actor Viewer window, Actor Viewer will attempt to load that file.  If you drop multiple files, Actor Viewer will open only one of the files.\r
+\par In order to successfully load an actor, Actor Viewer needs not only the .act file, but also the actor's texture maps, whose location is specified in the .act file.  If the program reports that it's unable to load an actor file, the probable cause is that it was unable to find the actor's texture maps.  See }{\uldb\cf11 Setting Texture Maps Location}{\v Setting_Texture_Maps_Location}{ for more information.\r
+{\v0\par\v}}\pard\plain \s1\li115\ri130\sb80\sa120\keepn\nowidctlpar\widctlpar\outlinelevel0\adjustright \b\f1\fs32\kerning28\cgrid {\page }{\cs23\super #{\footnote \pard\plain \s22\li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\fs20\cgrid {\cs23\super #}{ Setting_the_Actor_s_Front_Position}}}{ }{\cs23\super ${\footnote \pard\plain \s22\li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\fs20\cgrid {\cs23\super $}{ Setting the Actor's Front Position}}}{ }{\cs23\super K{\footnote \pard\plain \s22\li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\fs20\cgrid {\cs23\super K}{ Setting the Actor's Front Position}}}{ }{\cs23\super +{\footnote \pard\plain \s22\li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\fs20\cgrid {\cs23\super +}{ ACTVIEW:0}}}{ Setting the Actor's Front Position\r
+\par }\pard\plain \s24\li115\ri130\sa120\nowidctlpar\widctlpar\adjustright \f1\cgrid {When it loads an actor, Actor Viewer displays the actor's default pose in what it thinks is the actor's front position.  Because there's no standard of "which way is up" among model builders, it's quite likely that Actor Viewer will actually be displaying a top, bottom, back, or side view instead of the actual front view.\r
+\par If your actor is displayed incorrectly, select the pose button that displays the actual front view, and then select Options|Save as Front.  This will set the current pose as the actor's front position, and all of the preset pose buttons will display the proper poses.\r
+\par The Options|Save as Front command saves the current orientation in the program's initialization file so that all actors' orientations are adjusted when they're loaded.\r
+\par \r
+\par }\pard\plain \s1\li115\ri130\sb80\sa120\keepn\nowidctlpar\widctlpar\outlinelevel0\adjustright \b\f1\fs32\kerning28\cgrid {\page }{\cs23\super #{\footnote \pard\plain \s22\li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\fs20\cgrid {\cs23\super #}{ Selecting_a_Motion}}}{ }{\cs23\super ${\footnote \pard\plain \s22\li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\fs20\cgrid {\cs23\super $}{ Selecting a Motion}}}{ }{\cs23\super K{\footnote \pard\plain \s22\li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\fs20\cgrid {\cs23\super K}{ Selecting a Motion}}}{ }{\cs23\super +{\footnote \pard\plain \s22\li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\fs20\cgrid {\cs23\super +}{ ACTVIEW:0}}}{ Selecting a Motion\r
+\par }\pard\plain \s24\li115\ri130\sa120\nowidctlpar\widctlpar\adjustright \f1\cgrid {When you load an actor, Actor Viewer displays the actor in its default pose}{{\field{\*\fldinst SYMBOL 45 \\f "Symbol" \\s 12}{\fldrslt\f3\fs24\'2d}}}{normally a Da Vinci pose}{{\field{\*\fldinst SYMBOL 45 \\f "Symbol" \\s 12}{\fldrslt\f3\fs24\'2d}}}{that was assigned the actor by its creator.\r
+\par To view an motion, click on the Motion drop-down combo box and select the named motion that you want to view.  If the actor has an motion that was not named, it will be listed as "(Unnamed 1)", where '1' will be replaced by the motion's index.\r
+\par When you select an motion, the actor's pose will change to the starting pose for that motion.  You're now ready to play the motion.\r
+\par }\pard\plain \li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\cgrid {\r
+\par }\pard\plain \s1\li115\ri130\sb80\sa120\keepn\nowidctlpar\widctlpar\outlinelevel0\adjustright \b\f1\fs32\kerning28\cgrid {\page }{\cs23\super #{\footnote \pard\plain \s22\li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\fs20\cgrid {\cs23\super #}{ Controlling_Playback}}}{ }{\cs23\super ${\footnote \pard\plain \s22\li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\fs20\cgrid {\cs23\super $}{ Controlling Playback}}}{ }{\cs23\super K{\footnote \pard\plain \s22\li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\fs20\cgrid {\cs23\super K}{ Controlling Playback}}}{ }{\cs23\super +{\footnote \pard\plain \s22\li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\fs20\cgrid {\cs23\super +}{ ACTVIEW:0}}}{ Controlling Playback\r
+\par }\pard\plain \s24\li115\ri130\sa120\nowidctlpar\widctlpar\adjustright \f1\cgrid {Motion playback is controlled by the VCR-style controls located at the bottom right portion of the window.\r
+\par {{{{{\pard\plain \li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\cgrid {\object\objemb\objw345\objh345{\*\objclass PBrush}{\*\objdata 01050000020000000700000050427275736800000000000000000000010000424df60000000000000076000000280000001000000010000000010004000000000080000000c40e0000ce0e0000000000000000000000000000000080000080000000808000800000008000800080800000c0c0c000808080000000ff0000ff000000ffff00ff000000ff00ff00ffff0000ffffff0077777777777777777777777777777777777777777777777777777777777777777777007777777777777700007777777777770000007777777777000000007777777700000000007777770000000077777777000000777777777700007777777777770077777777777777777777777777777777777777777777777777777777770000000000000000000001050000050000000d0000004d45544146494c455049435400610200009ffdffff380100000800610261020000010009000003980000000000820000000000050000000b0200000000050000000c021000100082000000430f2000cc00000010001000000000001000100000000000280000001000000010000000010004000000000080000000430a0000430a0000100000001000000000000000000080000080000000808000800000008000800080800000c0c0c000808080000000ff0000ff000000ffff00ff000000ff00ff00ffff0000ffffff007777777777777777777777777777777777777777777777777777777777777777777700777777777777770000777777777777000000777777777700000000777777770000000000777777000000007777777700000077777777770000777777777777007777777777777777777777777777777777777777777777777777777777030000000000}{\result {{\nonshppict{\pict\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0\picw609\pich609\picwgoal345\pichgoal345\wmetafile8\bliptag-761270059\blipupi66 010009000003a400000000008200000000000400000003010800050000000b0200000000050000000c0210001000040000000701040082000000430f2000cc00000010001000000000001000100000000000280000001000000010000000010004000000000080000000430a0000430a000010000000100000000000000080000000ff00000000008000800080000000ff00ff00ff0000800000808000000080800080808000c0c0c00000ff0000ffff000000ffff00ffffff00bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb00bbbbbbbbbbbbbb0000bbbbbbbbbbbb000000bbbbbbbbbb00000000bbbbbbbb0000000000bbbbbb00000000bbbbbbbb000000bbbbbbbbbb0000bbbbbbbbbbbb00bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb0400000007010100030000000000}}}}}}{\r
+\par }}\dpx0\dpy0\dpxsize345\dpysize345\dpfillfgcr255\dpfillfgcg255\dpfillfgcb255\dpfillbgcr255\dpfillbgcg255\dpfillbgcb255\dpfillpat0\dplinehollow}}}To play a selected motion, just click on the Play button (or press P).  The motion will play one time from start to finish.\r
+\par If you want the motion to repeat, click on the Loop check box and press Play.  The motion will play from start to finish, and then repeat indefinately.\r
+\par {{{{{\pard\plain \li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\cgrid {\object\objemb\objw345\objh345{\*\objclass PBrush}{\*\objdata 01050000020000000700000050427275736800000000000000000000010000424df60000000000000076000000280000001000000010000000010004000000000080000000c40e0000ce0e0000000000000000000000000000000080000080000000808000800000008000800080800000c0c0c000808080000000ff0000ff000000ffff00ff000000ff00ff00ffff0000ffffff0077777777777777777777777777777777777777777777777777777777777777777777000000007777777700000000777777770000000077777777000000007777777700000000777777770000000077777777000000007777777700000000777777777777777777777777777777777777777777777777777777777777777777770000000000000000000001050000050000000d0000004d45544146494c455049435400610200009ffdffff380100000800610261020000010009000003980000000000820000000000050000000b0200000000050000000c021000100082000000430f2000cc00000010001000000000001000100000000000280000001000000010000000010004000000000080000000430a0000430a0000100000001000000000000000000080000080000000808000800000008000800080800000c0c0c000808080000000ff0000ff000000ffff00ff000000ff00ff00ffff0000ffffff007777777777777777777777777777777777777777777777777777777777777777777700000000777777770000000077777777000000007777777700000000777777770000000077777777000000007777777700000000777777770000000077777777777777777777777777777777777777777777777777777777777777777777030000000000}{\result {{\nonshppict{\pict\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0\picw609\pich609\picwgoal345\pichgoal345\wmetafile8\bliptag1642999884\blipupi66 010009000003a400000000008200000000000400000003010800050000000b0200000000050000000c0210001000040000000701040082000000430f2000cc00000010001000000000001000100000000000280000001000000010000000010004000000000080000000430a0000430a000010000000100000000000000080000000ff00000000008000800080000000ff00ff00ff0000800000808000000080800080808000c0c0c00000ff0000ffff000000ffff00ffffff00bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb00000000bbbbbbbb00000000bbbbbbbb00000000bbbbbbbb00000000bbbbbbbb00000000bbbbbbbb00000000bbbbbbbb00000000bbbbbbbb00000000bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb0400000007010100030000000000}}}}}}{\r
+\par }}\dpx0\dpy0\dpxsize345\dpysize345\dpfillfgcr255\dpfillfgcg255\dpfillfgcb255\dpfillbgcr255\dpfillbgcg255\dpfillbgcb255\dpfillpat0\dplinehollow}}}You can stop playback by pressing the Stop button (or S).\r
+\par {{{{{\pard\plain \li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\cgrid {\object\objemb\objw345\objh345{\*\objclass PBrush}{\*\objdata 01050000020000000700000050427275736800000000000000000000010000424df60000000000000076000000280000001000000010000000010004000000000080000000c40e0000ce0e0000000000000000000000000000000080000080000000808000800000008000800080800000c0c0c000808080000000ff0000ff000000ffff00ff000000ff00ff00ffff0000ffffff0077777777777777777777777777777777777777777777777777770007700077777777000770007777777700077000777777770007700077777777000770007777777700077000777777770007700077777777000770007777777700077000777777777777777777777777777777777777777777777777777777777777777777770000000000000000000001050000050000000d0000004d45544146494c455049435400610200009ffdffff380100000800610261020000010009000003980000000000820000000000050000000b0200000000050000000c021000100082000000430f2000cc00000010001000000000001000100000000000280000001000000010000000010004000000000080000000430a0000430a0000100000001000000000000000000080000080000000808000800000008000800080800000c0c0c000808080000000ff0000ff000000ffff00ff000000ff00ff00ffff0000ffffff007777777777777777777777777777777777777777777777777777000770007777777700077000777777770007700077777777000770007777777700077000777777770007700077777777000770007777777700077000777777770007700077777777777777777777777777777777777777777777777777777777777777777777030000000000}{\result {{\nonshppict{\pict\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0\picw609\pich609\picwgoal345\pichgoal345\wmetafile8\bliptag-1061346182\blipupi66 010009000003a400000000008200000000000400000003010800050000000b0200000000050000000c0210001000040000000701040082000000430f2000cc00000010001000000000001000100000000000280000001000000010000000010004000000000080000000430a0000430a000010000000100000000000000080000000ff00000000008000800080000000ff00ff00ff0000800000808000000080800080808000c0c0c00000ff0000ffff000000ffff00ffffff00bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb000bb000bbbbbbbb000bb000bbbbbbbb000bb000bbbbbbbb000bb000bbbbbbbb000bb000bbbbbbbb000bb000bbbbbbbb000bb000bbbbbbbb000bb000bbbbbbbb000bb000bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb0400000007010100030000000000}}}}}}{\r
+\par }}\dpx0\dpy0\dpxsize345\dpysize345\dpfillfgcr255\dpfillfgcg255\dpfillfgcb255\dpfillbgcr255\dpfillbgcg255\dpfillbgcb255\dpfillpat0\dplinehollow}}}To pause playback, press Pause (or U).\r
+\par {{{{{\pard\plain \li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\cgrid {\object\objemb\objw345\objh345{\*\objclass PBrush}{\*\objdata 01050000020000000700000050427275736800000000000000000000010000424df60000000000000076000000280000001000000010000000010004000000000080000000c40e0000ce0e0000000000000000000000000000000080000080000000808000800000008000800080800000c0c0c000808080000000ff0000ff000000ffff00ff000000ff00ff00ffff0000ffffff0077777777777777777777777777777777777777777777777777007777777777777700777707777077770077700777007777007700077000777700700007000077770000000000007777007000070000777700770007700077770077700777007777007777077770777700777777777777777777777777777777777777777777770000000000000000000001050000050000000d0000004d45544146494c455049435400610200009ffdffff380100000800610261020000010009000003980000000000820000000000050000000b0200000000050000000c021000100082000000430f2000cc00000010001000000000001000100000000000280000001000000010000000010004000000000080000000430a0000430a0000100000001000000000000000000080000080000000808000800000008000800080800000c0c0c000808080000000ff0000ff000000ffff00ff000000ff00ff00ffff0000ffffff007777777777777777777777777777777777777777777777777700777777777777770077770777707777007770077700777700770007700077770070000700007777000000000000777700700007000077770077000770007777007770077700777700777707777077770077777777777777777777777777777777777777777777030000000000}{\result {{\nonshppict{\pict\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0\picw609\pich609\picwgoal345\pichgoal345\wmetafile8\bliptag-668724678\blipupi66 010009000003a400000000008200000000000400000003010800050000000b0200000000050000000c0210001000040000000701040082000000430f2000cc00000010001000000000001000100000000000280000001000000010000000010004000000000080000000430a0000430a000010000000100000000000000080000000ff00000000008000800080000000ff00ff00ff0000800000808000000080800080808000c0c0c00000ff0000ffff000000ffff00ffffff00bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb00bbbbbbbbbbbbbb00bbbb0bbbb0bbbb00bbb00bbb00bbbb00bb000bb000bbbb00b0000b0000bbbb000000000000bbbb00b0000b0000bbbb00bb000bb000bbbb00bbb00bbb00bbbb00bbbb0bbbb0bbbb00bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb0400000007010100030000000000}}}}}}{\r
+\par }}\dpx0\dpy0\dpxsize345\dpysize345\dpfillfgcr255\dpfillfgcg255\dpfillfgcb255\dpfillbgcr255\dpfillbgcg255\dpfillbgcb255\dpfillpat0\dplinehollow}}}To restart the animation at the beginning, press the Rewind button (or 0).\r
+\par {{{{{\pard\plain \li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\cgrid {\object\objemb\objw345\objh345{\*\objclass PBrush}{\*\objdata 01050000020000000700000050427275736800000000000000000000010000424df60000000000000076000000280000001000000010000000010004000000000080000000c40e0000ce0e0000000000000000000000000000000080000080000000808000800000008000800080800000c0c0c000808080000000ff0000ff000000ffff00ff000000ff00ff00ffff0000ffffff0077777777777777777777777777777777777777777777777777777777777700777707777077770077770077700777007777000770007700777700007000070077770000000000007777000070000700777700077000770077770077700777007777077770777700777777777777770077777777777777777777777777777777770000000000000000000001050000050000000d0000004d45544146494c455049435400610200009ffdffff380100000800610261020000010009000003980000000000820000000000050000000b0200000000050000000c021000100082000000430f2000cc00000010001000000000001000100000000000280000001000000010000000010004000000000080000000430a0000430a0000100000001000000000000000000080000080000000808000800000008000800080800000c0c0c000808080000000ff0000ff000000ffff00ff000000ff00ff00ffff0000ffffff007777777777777777777777777777777777777777777777777777777777770077770777707777007777007770077700777700077000770077770000700007007777000000000000777700007000070077770007700077007777007770077700777707777077770077777777777777007777777777777777777777777777777777030000000000}{\result {{\nonshppict{\pict\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0\picw609\pich609\picwgoal345\pichgoal345\wmetafile8\bliptag1401294898\blipupi66 010009000003a400000000008200000000000400000003010800050000000b0200000000050000000c0210001000040000000701040082000000430f2000cc00000010001000000000001000100000000000280000001000000010000000010004000000000080000000430a0000430a000010000000100000000000000080000000ff00000000008000800080000000ff00ff00ff0000800000808000000080800080808000c0c0c00000ff0000ffff000000ffff00ffffff00bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb00bbbb0bbbb0bbbb00bbbb00bbb00bbb00bbbb000bb000bb00bbbb0000b0000b00bbbb000000000000bbbb0000b0000b00bbbb000bb000bb00bbbb00bbb00bbb00bbbb0bbbb0bbbb00bbbbbbbbbbbbbb00bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb0400000007010100030000000000}}}}}}{\r
+\par }}\dpx0\dpy0\dpxsize345\dpysize345\dpfillfgcr255\dpfillfgcg255\dpfillfgcb255\dpfillbgcr255\dpfillbgcg255\dpfillbgcb255\dpfillpat0\dplinehollow}}}To go to the end of the animation, press the Fast Forward button (or 9).\r
+\par {{{{{\pard\plain \li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\cgrid {\object\objemb\objw615\objh345{\*\objclass PBrush}{\*\objdata 010500000200000007000000504272757368000000000000000000c0010000424db60100000000000076000000280000002200000010000000010004000000000040010000c40e0000ce0e0000000000000000000000000000000080000080000000808000800000008000800080800000c0c0c000808080000000ff0000ff000000ffff00ff000000ff00ff00ffff0000ffffff0077777777777777770077777777777777770000007777777777777777007777777777777777000000777777777777777700777777777777777700000077777777777777770077777777777777770000007777777077770777007770777707777777000000777777007770077700777007770077777700000077777000770007770077700077000777770000007777000070000777007770000700007777000000777000000000077700777000000000077700000077770000700007770077700007000077770000007777700077000777007770007700077777000000777777007770077700777007770077777700000077777770777707770077707777077777770000007777777777777777007777777777777777000000777777777777777700777777777777777700000077777777777777770077777777777777770000000000000000000000000001050000050000000d0000004d45544146494c4550494354003d0400009ffdfffff801000008003d0461020000010009000003f80000000000e20000000000050000000b0200000000050000000c0210002200e2000000430f2000cc000000100022000000000010002200000000002800000022000000100000000100040000000000400100003e0c0000430a0000100000001000000000000000000080000080000000808000800000008000800080800000c0c0c000808080000000ff0000ff000000ffff00ff000000ff00ff00ffff0000ffffff007777777777777777007777777777777777ffffff7777777777777777007777777777777777ffffff7777777777777777007777777777777777ffffff7777777777777777007777777777777777ffffff7777777077770777007770777707777777ffffff7777770077700777007770077700777777ffffff7777700077000777007770007700077777ffffff7777000070000777007770000700007777ffffff7770000000000777007770000000000777ffffff7777000070000777007770000700007777ffffff7777700077000777007770007700077777ffffff7777770077700777007770077700777777ffffff7777777077770777007770777707777777ffffff7777777777777777007777777777777777ffffff7777777777777777007777777777777777ffffff7777777777777777007777777777777777ffffff030000000000}{\result {{\nonshppict{\pict\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0\picw1085\pich609\picwgoal615\pichgoal345\wmetafile8\bliptag944064765\blipupi74 010009000003040100000000e200000000000400000003010800050000000b0200000000050000000c02100022000400000007010400e2000000430f2000cc000000100022000000000010002200000000002800000022000000100000000100040000000000400100003e0c0000430a000010000000100000000000000080000000ff00000000008000800080000000ff00ff00ff0000800000808000000080800080808000c0c0c00000ff0000ffff000000ffff00ffffff00bbbbbbbbbbbbbbbb00bbbbbbbbbbbbbbbb1c8600bbbbbbbbbbbbbbbb00bbbbbbbbbbbbbbbb000000bbbbbbbbbbbbbbbb00bbbbbbbbbbbbbbbb000000bbbbbbbbbbbbbbbb00bbbbbbbbbbbbbbbb000000bbbbbbb0bbbb0bbb00bbb0bbbb0bbbbbbb000000bbbbbb00bbb00bbb00bbb00bbb00bbbbbb000000bbbbb000bb000bbb00bbb000bb000bbbbb203810bbbb0000b0000bbb00bbb0000b0000bbbbffffffbbb0000000000bbb00bbb0000000000bbbffffffbbbb0000b0000bbb00bbb0000b0000bbbbffffffbbbbb000bb000bbb00bbb000bb000bbbbbffffffbbbbbb00bbb00bbb00bbb00bbb00bbbbbbffffffbbbbbbb0bbbb0bbb00bbb0bbbb0bbbbbbbffffffbbbbbbbbbbbbbbbb00bbbbbbbbbbbbbbbbffffffbbbbbbbbbbbbbbbb00bbbbbbbbbbbbbbbbffffffbbbbbbbbbbbbbbbb00bbbbbbbbbbbbbbbbffffff0400000007010100030000000000}}}}}}{\r
+\par }}\dpx0\dpy0\dpxsize615\dpysize345\dpfillfgcr255\dpfillfgcg255\dpfillfgcb255\dpfillbgcr255\dpfillbgcg255\dpfillbgcb255\dpfillpat0\dplinehollow}}}To move frame-by-frame in the animation, use the Forward Frame (>) and Back Frame (<) buttons. \r
+\par \r
+\par }\pard\plain \s1\li115\ri130\sb80\sa120\keepn\nowidctlpar\widctlpar\outlinelevel0\adjustright \b\f1\fs32\kerning28\cgrid {\page }{\cs23\super #{\footnote \pard\plain \s22\li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\fs20\cgrid {\cs23\super #}{ Adjusting_Playback_Speed}}}{ }{\cs23\super ${\footnote \pard\plain \s22\li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\fs20\cgrid {\cs23\super $}{ Adjusting Playback Speed}}}{ }{\cs23\super K{\footnote \pard\plain \s22\li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\fs20\cgrid {\cs23\super K}{ Adjusting Playback Speed}}}{ }{\cs23\super +{\footnote \pard\plain \s22\li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\fs20\cgrid {\cs23\super +}{ ACTVIEW:0}}}{ Adjusting Playback Speed\r
+\par }\pard\plain \s24\li115\ri130\sa120\nowidctlpar\widctlpar\adjustright \f1\cgrid {You can adjust the speed at which the motion is played by changing the Speed value.  This value is expressed as a percentage of the motion's normal speed, with the value 100 representing normal speed (i.e. 100 percent).  Valid values here are from 1 to 10,000 (100 times normal speed).\r
+\par \r
+\par }\pard\plain \s1\li115\ri130\sb80\sa120\keepn\nowidctlpar\widctlpar\outlinelevel0\adjustright \b\f1\fs32\kerning28\cgrid {\page }{\cs23\super #{\footnote \pard\plain \s22\li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\fs20\cgrid {\cs23\super #}{ Adjusting_Frame_Step_Time}}}{ }{\cs23\super ${\footnote \pard\plain \s22\li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\fs20\cgrid {\cs23\super $}{ Adjusting Frame Step Time}}}{ }{\cs23\super K{\footnote \pard\plain \s22\li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\fs20\cgrid {\cs23\super K}{ Adjusting Frame Step Time}}}{ }{\cs23\super +{\footnote \pard\plain \s22\li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\fs20\cgrid {\cs23\super +}{ ACTVIEW:0}}}{ Adjusting Frame Step Time\r
+\par }\pard\plain \s24\li115\ri130\sa120\nowidctlpar\widctlpar\adjustright \f1\cgrid {The frame step time used when displaying a motion frame-by-frame is controlled by changing the value in the Frame Time edit box.  This value is expressed in 100ths of a second.  The default value of 5 will step the animation by 5/100 second every time the Forward Frame or Back Frame button is pressed.\r
+\par The minimum frame step value is 1/100 second.  The maximum is 1 second (100).\r
+\par }\pard\plain \li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\cgrid {\r
+\par }\pard\plain \s1\li115\ri130\sb80\sa120\keepn\nowidctlpar\widctlpar\outlinelevel0\adjustright \b\f1\fs32\kerning28\cgrid {\page }{\cs23\super #{\footnote \pard\plain \s22\li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\fs20\cgrid {\cs23\super #}{ Moving_the_Actor}}}{ }{\cs23\super ${\footnote \pard\plain \s22\li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\fs20\cgrid {\cs23\super $}{ Moving the Actor}}}{ }{\cs23\super K{\footnote \pard\plain \s22\li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\fs20\cgrid {\cs23\super K}{ Moving the Actor}}}{ }{\cs23\super +{\footnote \pard\plain \s22\li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\fs20\cgrid {\cs23\super +}{ ACTVIEW:0}}}{ Moving the Actor\r
+\par }\pard\plain \s24\li115\ri130\sa120\nowidctlpar\widctlpar\adjustright \f1\cgrid {{{{{{\pard\plain \li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\cgrid {\object\objemb\objw885\objh345{\*\objclass PBrush}{\*\objdata 01050000020000000700000050427275736800000000000000000040020000424d3602000000000000760000002800000034000000100000000100040000000000c0010000c40e0000ce0e0000000000000000000000000000000080000080000000808000800000008000800080800000c0c0c000808080000000ff0000ff000000ffff00ff000000ff00ff00ffff0000ffffff0077777700000077770077777777777777770077777777777777770000777770ffffff0777007000777777777777007777777777777077000077770fffffff07770070477777777777770077777777777704c700007770fffffffff077007074770000777777007777777777704c870000770ffffffffff07700777740777708777700777777777704c8770000770fffffffffff070077770477777077770077777777704c8777000070ffffffffffff0700777077477777070700777700004860777700000fff0fffffffff0700777077744444440000778077780807777700000ff00ffffffffff00077707774777707070077477666707777770000700fff0fffff0ff000777077747777077700747777766807777700007770ff0ff0ff0ff000777707747770777700747777776707777700007770ff0f00ff00f000777780747708777700747677777707777700007700f00ff0ff07070077777704007777770074766777770777770000770ff00ff0ff077700777777747777777700774766677077777700007770070ff00077770077777700077777770077847777487777770000777777700777777700777777707777777700777744447777777700000000000000000000000001050000050000000d0000004d45544146494c455049435400190600009ffdffff780200000800190661020000010009000003380100000000220100000000050000000b0200000000050000000c021000340022010000430f2000cc000000100034000000000010003400000000002800000034000000100000000100040000000000c0010000030d0000430a0000100000001000000000000000000080000080000000808000800000008000800080800000c0c0c000808080000000ff0000ff000000ffff00ff000000ff00ff00ffff0000ffffff007777770000007777007777777777777777007777777777777777ffff777770ffffff0777007000777777777777007777777777777077ffff77770fffffff07770070477777777777770077777777777704c7ffff7770fffffffff077007074770000777777007777777777704c87ffff770ffffffffff07700777740777708777700777777777704c877ffff770fffffffffff070077770477777077770077777777704c8777ffff70ffffffffffff07007770774777770707007777000048607777ffff0fff0fffffffff07007770777444444400007780777808077777ffff0ff00ffffffffff0007770777477770707007747766670777777ffff700fff0fffff0ff0007770777477770777007477777668077777ffff7770ff0ff0ff0ff0007777077477707777007477777767077777ffff7770ff0f00ff00f0007777807477087777007476777777077777ffff7700f00ff0ff0707007777770400777777007476677777077777ffff770ff00ff0ff0777007777777477777777007747666770777777ffff7770070ff0007777007777770007777777007784777748777777ffff7777777007777777007777777077777777007777444477777777ffff030000000000}{\result {{\nonshppict{\pict\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0\picw1561\pich609\picwgoal885\pichgoal345\wmetafile8\bliptag2105607992\blipupi79 0100090000034401000000002201000000000400000003010800050000000b0200000000050000000c0210003400040000000701040022010000430f2000cc000000100034000000000010003400000000002800000034000000100000000100040000000000c0010000030d0000430a000010000000100000000000000080000000ff00000000008000800080000000ff00ff00ff0000800000808000000080800080808000c0c0c00000ff0000ffff000000ffff00ffffff00bbbbbb000000bbbb00bbbbbbbbbbbbbbbb00bbbbbbbbbbbbbbbb0000bbbbb0ffffff0bbb00b000bbbbbbbbbbbb00bbbbbbbbbbbbb0bb0000bbbb0fffffff0bbb00b01bbbbbbbbbbbbb00bbbbbbbbbbbb012b0000bbb0fffffffff0bb00b0b1bb0000bbbbbb00bbbbbbbbbbb012ab0000bb0ffffffffff0bb00bbbb10bbbb0abbbb00bbbbbbbbbb012abb3810bb0fffffffffff0b00bbbb01bbbbb0bbbb00bbbbbbbbb012abbbffffb0ffffffffffff0b00bbb0bb1bbbbb0b0b00bbbb00001a80bbbbffff0fff0fffffffff0b00bbb0bbb11111110000bba0bbba0a0bbbbbffff0ff00ffffffffff000bbb0bbb1bbbb0b0b00bb1bb888b0bbbbbbffffb00fff0fffff0ff000bbb0bbb1bbbb0bbb00b1bbbbb88a0bbbbbffffbbb0ff0ff0ff0ff000bbbb0bb1bbb0bbbb00b1bbbbbb8b0bbbbbffffbbb0ff0f00ff00f000bbbba0b1bb0abbbb00b1b8bbbbbb0bbbbbffffbb00f00ff0ff0b0b00bbbbbb0100bbbbbb00b1b88bbbbb0bbbbbffffbb0ff00ff0ff0bbb00bbbbbbb1bbbbbbbb00bb1b888bb0bbbbbbffffbbb00b0ff000bbbb00bbbbbb000bbbbbbb00bba1bbbb1abbbbbbffffbbbbbbb00bbbbbbb00bbbbbbb0bbbbbbbb00bbbb1111bbbbbbbbffff0400000007010100030000000000}}}}}}{\r
+\par }}\dpx0\dpy0\dpxsize885\dpysize345\dpfillfgcr255\dpfillfgcg255\dpfillfgcb255\dpfillbgcr255\dpfillbgcg255\dpfillbgcb255\dpfillpat0\dplinehollow}}}You can move the actor around in the world (Pan) and change its orientation (Rotate).  You can also move the camera to get closer to or further from the actor (Zoom).\r
+\par There are also six built-in orientation buttons that will display the actor's Front, Back, Left, Right, Top, and Bottom views, and a Center button that will snap the actor back to the origin (which is very useful if you Pan the actor out of view).\r
+\par \r
+\par }\pard\plain \s1\li115\ri130\sb80\sa120\keepn\nowidctlpar\widctlpar\outlinelevel0\adjustright \b\f1\fs32\kerning28\cgrid {\page }{\cs23\super #{\footnote \pard\plain \s22\li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\fs20\cgrid {\cs23\super #}{ Adjusting_Actor_Size}}}{ }{\cs23\super ${\footnote \pard\plain \s22\li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\fs20\cgrid {\cs23\super $}{ Adjusting Actor Size}}}{ }{\cs23\super K{\footnote \pard\plain \s22\li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\fs20\cgrid {\cs23\super K}{ Adjusting Actor Size}}}{ }{\cs23\super +{\footnote \pard\plain \s22\li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\fs20\cgrid {\cs23\super +}{ ACTVIEW:0}}}{ Adjusting Actor Size\r
+\par }\pard\plain \s24\li115\ri130\sa120\nowidctlpar\widctlpar\adjustright \f1\cgrid {You can control the size at which an actor is displayed by changing the Size value.  The displayed value is expressed as a percentage of the actor's normal size.  The valid values for this field are from 1 to 10,000 percent (100 times normal size).\r
+\par }\pard\plain \li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\cgrid {\r
+\par }\pard\plain \s1\li115\ri130\sb80\sa120\keepn\nowidctlpar\widctlpar\outlinelevel0\adjustright \b\f1\fs32\kerning28\cgrid {\page }{\cs23\super #{\footnote \pard\plain \s22\li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\fs20\cgrid {\cs23\super #}{ Displaying_Frame_Rate}}}{ }{\cs23\super ${\footnote \pard\plain \s22\li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\fs20\cgrid {\cs23\super $}{ Displaying Frame Rate}}}{ }{\cs23\super K{\footnote \pard\plain \s22\li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\fs20\cgrid {\cs23\super K}{ Displaying Frame Rate}}}{ }{\cs23\super +{\footnote \pard\plain \s22\li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\fs20\cgrid {\cs23\super +}{ ACTVIEW:0}}}{ Displaying Frame Rate\r
+\par }\pard\plain \s24\li115\ri130\sa120\nowidctlpar\widctlpar\adjustright \f1\cgrid {In many cases, it's useful to see how many animation frames are being played by the engine every second.  If you wish to view this information, select Options|Show Frame Rate.  The frame rate is displayed in the upper left corner of the screen along with some other information about the number of polygons displayed, etc.\r
+\par You can toggle the frame rate display on and off quickly by pressing the E key.\r
+\par \r
+\par }\pard\plain \s1\li115\ri130\sb80\sa120\keepn\nowidctlpar\widctlpar\outlinelevel0\adjustright \b\f1\fs32\kerning28\cgrid {\page }{\cs23\super #{\footnote \pard\plain \s22\li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\fs20\cgrid {\cs23\super #}{ Setting_Texture_Maps_Location}}}{ }{\cs23\super ${\footnote \pard\plain \s22\li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\fs20\cgrid {\cs23\super $}{ Setting Texture Maps Location}}}{ }{\cs23\super K{\footnote \pard\plain \s22\li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\fs20\cgrid {\cs23\super K}{ Setting Texture Maps Location}}}{ }{\cs23\super +{\footnote \pard\plain \s22\li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\fs20\cgrid {\cs23\super +}{ ACTVIEW:0}}}{ Setting Texture Maps Location\r
+\par }\pard\plain \s24\li115\ri130\sa120\nowidctlpar\widctlpar\adjustright \f1\cgrid {To load an actor, the program requires not only the actor definition in the .act file, but also the actor's texture maps, which are stored in a directory that's specified in the actor file.  Normally, this directory is a Maps subdirectory of the current working directory, but the actor creation tools allow it to be set to any arbitrary directory.\r
+\par In an attempt to accommodate most setups, Actor Viewer will try to load an actor using three different "current directory" settings.  The settings used, in order, are:\r
+\par \tab The value set by Options|Set Working Directory \line \tab The program's Current Working Directory\line \tab The directory that contains the actor being loaded\r
+\par If Actor Viewer can't load the actor after trying all three "current directory" settings, it will report an error.\r
+\par }\pard\plain \s1\li115\ri130\sb80\sa120\keepn\nowidctlpar\widctlpar\outlinelevel0\adjustright \b\f1\fs32\kerning28\cgrid {\page }{\cs23\super #{\footnote \pard\plain \s22\li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\fs20\cgrid {\cs23\super #}{ Shortcut_Keys}}}{ }{\cs23\super ${\footnote \pard\plain \s22\li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\fs20\cgrid {\cs23\super $}{ Shortcut Keys}}}{ }{\cs23\super K{\footnote \pard\plain \s22\li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\fs20\cgrid {\cs23\super K}{ Shortcut Keys}}}{ }{\cs23\super +{\footnote \pard\plain \s22\li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\fs20\cgrid {\cs23\super +}{ ACTVIEW:0}}}{ Shortcut Keys\r
+\par }\pard\plain \li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\cgrid {Almost all of Actor Viewer's commands can be accessed by pressing hot keys.  The commands and their associated hot keys are:\r
+\par }\trowd \trgaph108\trleft-108\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10 \clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \cltxlrtb \cellx4320\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \cltxlrtb \cellx8748\pard \ri130\sa48\nowidctlpar\widctlpar\intbl\adjustright {\b Command\cell Hot Key\cell }\pard \nowidctlpar\widctlpar\intbl\adjustright {\row }\trowd \trgaph108\trleft-108\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10 \clvertalt\cltxlrtb \cellx4320\clvertalt\cltxlrtb \cellx8748\pard \ri130\sa48\nowidctlpar\widctlpar\intbl\adjustright {Help\cell F1\cell }\pard \nowidctlpar\widctlpar\intbl\adjustright {\row }\pard \ri130\sa48\nowidctlpar\widctlpar\intbl\adjustright {Open file\cell Ctrl+O\cell }\pard \nowidctlpar\widctlpar\intbl\adjustright {\row }\pard \ri130\sa48\nowidctlpar\widctlpar\intbl\adjustright {Toggle frame rate display\cell E\cell }\pard \nowidctlpar\widctlpar\intbl\adjustright {\row }\pard \ri130\sa48\nowidctlpar\widctlpar\intbl\adjustright {Pan (move) actor\cell A\cell }\pard \nowidctlpar\widctlpar\intbl\adjustright {\row }\pard \ri130\sa48\nowidctlpar\widctlpar\intbl\adjustright {Rotate actor\cell R\cell }\pard \nowidctlpar\widctlpar\intbl\adjustright {\row }\pard \ri130\sa48\nowidctlpar\widctlpar\intbl\adjustright {Zoom camera\cell Z\cell }\pard \nowidctlpar\widctlpar\intbl\adjustright {\row }\pard \ri130\sa48\nowidctlpar\widctlpar\intbl\adjustright {Play motion\cell P\cell }\pard \nowidctlpar\widctlpar\intbl\adjustright {\row }\pard \ri130\sa48\nowidctlpar\widctlpar\intbl\adjustright {Pause motion\cell U\cell }\pard \nowidctlpar\widctlpar\intbl\adjustright {\row }\pard \ri130\sa48\nowidctlpar\widctlpar\intbl\adjustright {Stop motion\cell S\cell }\pard \nowidctlpar\widctlpar\intbl\adjustright {\row }\pard \ri130\sa48\nowidctlpar\widctlpar\intbl\adjustright {Rewind motion\cell 0\cell }\pard \nowidctlpar\widctlpar\intbl\adjustright {\row }\pard \ri130\sa48\nowidctlpar\widctlpar\intbl\adjustright {Fast forward motion\cell 9\cell }\pard \nowidctlpar\widctlpar\intbl\adjustright {\row }\pard \ri130\sa48\nowidctlpar\widctlpar\intbl\adjustright {Back frame\cell <\cell }\pard \nowidctlpar\widctlpar\intbl\adjustright {\row }\pard \ri130\sa48\nowidctlpar\widctlpar\intbl\adjustright {Forward frame\cell >\cell }\pard \nowidctlpar\widctlpar\intbl\adjustright {\row }\pard \ri130\sa48\nowidctlpar\widctlpar\intbl\adjustright {Front view\cell N\cell }\pard \nowidctlpar\widctlpar\intbl\adjustright {\row }\pard \ri130\sa48\nowidctlpar\widctlpar\intbl\adjustright {Back view\cell B\cell }\pard \nowidctlpar\widctlpar\intbl\adjustright {\row }\pard \ri130\sa48\nowidctlpar\widctlpar\intbl\adjustright {Left side view\cell L\cell }\pard \nowidctlpar\widctlpar\intbl\adjustright {\row }\pard \ri130\sa48\nowidctlpar\widctlpar\intbl\adjustright {Right side view\cell I\cell }\pard \nowidctlpar\widctlpar\intbl\adjustright {\row }\pard \ri130\sa48\nowidctlpar\widctlpar\intbl\adjustright {Top view\cell T\cell }\pard \nowidctlpar\widctlpar\intbl\adjustright {\row }\pard \ri130\sa48\nowidctlpar\widctlpar\intbl\adjustright {Bottom view\cell M\cell }\pard \nowidctlpar\widctlpar\intbl\adjustright {\row }\trowd \trgaph108\trleft-108\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10 \clvertalt\cltxlrtb \cellx4320\clvertalt\cltxlrtb \cellx8748\pard \ri130\sa48\nowidctlpar\widctlpar\intbl\adjustright {Center actor\cell C\cell }\pard \nowidctlpar\widctlpar\intbl\adjustright {\row }\pard \li115\ri130\sa48\nowidctlpar\widctlpar\adjustright {\r
+\par }\pard\plain \s1\li115\ri130\sb80\sa120\nowidctlpar\widctlpar\outlinelevel0\adjustright \b\f1\fs32\kerning28\cgrid {\page }{\cs23\super #{\footnote \pard\plain \s22\li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\fs20\cgrid {\cs23\super #}{ Creating_a_Custom_Actor_Viewer_Level}}}{ }{\cs23\super ${\footnote \pard\plain \s22\li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\fs20\cgrid {\cs23\super $}{ Creating a Custom Actor Viewer Level}}}{ }{\cs23\super K{\footnote \pard\plain \s22\li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\fs20\cgrid {\cs23\super K}{ Creating a Custom Actor Viewer Level}}}{ }{\cs23\super +{\footnote \pard\plain \s22\li115\ri130\sa48\nowidctlpar\widctlpar\adjustright \f1\fs20\cgrid {\cs23\super +}{ ACTVIEW:0}}}{ Creating a Custom Actor Viewer Level\r
+\par }\pard\plain \s24\li115\ri130\sa120\nowidctlpar\widctlpar\adjustright \f1\cgrid {If you want to customize the level in which Actor Viewer displays the actors, you can modify the supplied ActView.3dt file using the Genesis World Editor, compile the new level, and copy the resulting ActView.bsp and ActView.mot files to Actor Viewer's program directory.  If you then restart Actor Viewer, actors will be displayed in the new level.\r
+\par You can display actors in any level, providing you name the level ActView.bsp and copy it to the program directory.\r
+\par Note that actors are always displayed at the world origin (position 0,0,0 as displayed in the World Editor).  To maintain an acceptable frame rate, you should make your custom Actor Viewer level as simple as possible}{{\field{\*\fldinst SYMBOL 45 \\f "Symbol" \\s 12}{\fldrslt\f3\fs24\'2d}}}{preferably a hollow box or cylinder.\r
+\par \r
+\par \r
+\par }}
\ No newline at end of file
diff --git a/ActView/Doc/ActView.rtk b/ActView/Doc/ActView.rtk
new file mode 100644 (file)
index 0000000..887ea08
Binary files /dev/null and b/ActView/Doc/ActView.rtk differ
diff --git a/ActView/Doc/ActView.rts b/ActView/Doc/ActView.rts
new file mode 100644 (file)
index 0000000..4e7023e
Binary files /dev/null and b/ActView/Doc/ActView.rts differ
diff --git a/ActView/Doc/ffend.bmp b/ActView/Doc/ffend.bmp
new file mode 100644 (file)
index 0000000..8501339
Binary files /dev/null and b/ActView/Doc/ffend.bmp differ
diff --git a/ActView/Doc/ffframe.bmp b/ActView/Doc/ffframe.bmp
new file mode 100644 (file)
index 0000000..f06a4d8
Binary files /dev/null and b/ActView/Doc/ffframe.bmp differ
diff --git a/ActView/Doc/frame.bmp b/ActView/Doc/frame.bmp
new file mode 100644 (file)
index 0000000..ac07df1
Binary files /dev/null and b/ActView/Doc/frame.bmp differ
diff --git a/ActView/Doc/move.bmp b/ActView/Doc/move.bmp
new file mode 100644 (file)
index 0000000..fd4cd38
Binary files /dev/null and b/ActView/Doc/move.bmp differ
diff --git a/ActView/Doc/pan.bmp b/ActView/Doc/pan.bmp
new file mode 100644 (file)
index 0000000..8da4c9c
Binary files /dev/null and b/ActView/Doc/pan.bmp differ
diff --git a/ActView/Doc/pause.bmp b/ActView/Doc/pause.bmp
new file mode 100644 (file)
index 0000000..dec2f0f
Binary files /dev/null and b/ActView/Doc/pause.bmp differ
diff --git a/ActView/Doc/play.bmp b/ActView/Doc/play.bmp
new file mode 100644 (file)
index 0000000..66885f3
Binary files /dev/null and b/ActView/Doc/play.bmp differ
diff --git a/ActView/Doc/rotate.bmp b/ActView/Doc/rotate.bmp
new file mode 100644 (file)
index 0000000..b3474c8
Binary files /dev/null and b/ActView/Doc/rotate.bmp differ
diff --git a/ActView/Doc/rrframe.bmp b/ActView/Doc/rrframe.bmp
new file mode 100644 (file)
index 0000000..02c0a26
Binary files /dev/null and b/ActView/Doc/rrframe.bmp differ
diff --git a/ActView/Doc/rrstart.bmp b/ActView/Doc/rrstart.bmp
new file mode 100644 (file)
index 0000000..64455ca
Binary files /dev/null and b/ActView/Doc/rrstart.bmp differ
diff --git a/ActView/Doc/stop.bmp b/ActView/Doc/stop.bmp
new file mode 100644 (file)
index 0000000..25bb7a0
Binary files /dev/null and b/ActView/Doc/stop.bmp differ
diff --git a/ActView/Doc/zoom.bmp b/ActView/Doc/zoom.bmp
new file mode 100644 (file)
index 0000000..78190aa
Binary files /dev/null and b/ActView/Doc/zoom.bmp differ
diff --git a/ActView/Main/ActView.aps b/ActView/Main/ActView.aps
new file mode 100644 (file)
index 0000000..27d0ec9
Binary files /dev/null and b/ActView/Main/ActView.aps differ
diff --git a/ActView/Main/ActView.rc b/ActView/Main/ActView.rc
new file mode 100644 (file)
index 0000000..69a679c
--- /dev/null
@@ -0,0 +1,372 @@
+//Microsoft Developer Studio generated resource script.\r
+//\r
+#include "resource.h"\r
+\r
+#define APSTUDIO_READONLY_SYMBOLS\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Generated from the TEXTINCLUDE 2 resource.\r
+//\r
+#include "windows.h"\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+#undef APSTUDIO_READONLY_SYMBOLS\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+// English (U.S.) resources\r
+\r
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\r
+#ifdef _WIN32\r
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US\r
+#pragma code_page(1252)\r
+#endif //_WIN32\r
+\r
+#ifdef APSTUDIO_INVOKED\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// TEXTINCLUDE\r
+//\r
+\r
+1 TEXTINCLUDE DISCARDABLE \r
+BEGIN\r
+    "resource.h\0"\r
+END\r
+\r
+2 TEXTINCLUDE DISCARDABLE \r
+BEGIN\r
+    "#include ""windows.h""\r\n"\r
+    "\0"\r
+END\r
+\r
+3 TEXTINCLUDE DISCARDABLE \r
+BEGIN\r
+    "\r\n"\r
+    "\0"\r
+END\r
+\r
+#endif    // APSTUDIO_INVOKED\r
+\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Icon\r
+//\r
+\r
+// Icon with lowest ID value placed first to ensure application icon\r
+// remains consistent on all systems.\r
+IDI_MAINICON            ICON    DISCARDABLE     "..\\res\\actview.ico"\r
+IDI_PLAY                ICON    DISCARDABLE     "..\\res\\play.ico"\r
+IDI_RRSTART             ICON    DISCARDABLE     "..\\res\\rrstart.ico"\r
+IDI_RRFRAME             ICON    DISCARDABLE     "..\\res\\rrframe.ico"\r
+IDI_STOP                ICON    DISCARDABLE     "..\\res\\stop.ico"\r
+IDI_FFFRAME             ICON    DISCARDABLE     "..\\res\\ffframe.ico"\r
+IDI_FFEND               ICON    DISCARDABLE     "..\\res\\ffend.ico"\r
+IDI_PAUSE               ICON    DISCARDABLE     "..\\res\\pause.ico"\r
+IDI_ZOOM                ICON    DISCARDABLE     "..\\res\\zoom.ico"\r
+IDI_PAN                 ICON    DISCARDABLE     "..\\res\\pan.ico"\r
+IDI_ROTATE              ICON    DISCARDABLE     "..\\res\\rotate.ico"\r
+IDI_BLEND               ICON    DISCARDABLE     "..\\res\\blend.ico"\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Bitmap\r
+//\r
+\r
+IDB_ACTVIEW             BITMAP  DISCARDABLE     "..\\res\\actview.bmp"\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Menu\r
+//\r
+\r
+IDR_MENU1 MENU DISCARDABLE \r
+BEGIN\r
+    POPUP "&File"\r
+    BEGIN\r
+        MENUITEM "&Open\tCtrl+O",               ID_FILE_OPEN\r
+        MENUITEM "E&xit",                       ID_FILE_EXIT\r
+    END\r
+    POPUP "&Options"\r
+    BEGIN\r
+        MENUITEM "&Save as front",              ID_OPTIONS_FRONT\r
+        MENUITEM "Show &Frame Rate\tE",         ID_OPTIONS_FRAMERATE\r
+    END\r
+    POPUP "&Help"\r
+    BEGIN\r
+        MENUITEM "&Contents\tF1",               ID_HELP_CONTENTS\r
+        MENUITEM SEPARATOR\r
+        MENUITEM "&About",                      ID_HELP_ABOUT\r
+    END\r
+END\r
+\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Dialog\r
+//\r
+\r
+IDD_ACTOR DIALOGEX 0, 0, 328, 138\r
+STYLE WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "Genesis3D Actor Viewer"\r
+MENU IDR_MENU1\r
+FONT 8, "MS Sans Serif", 0, 0, 0x1\r
+BEGIN\r
+    LTEXT           "Initializing Genesis3D Engine...",IDC_RENDERWIN,5,4,114,\r
+                    14\r
+    LTEXT           "0.0",IDC_STATICSTART,13,25,73,8\r
+    CTEXT           "Static",IDC_STATICCURRENTTIME,142,25,42,8,SS_SUNKEN\r
+    LTEXT           "0.0",IDC_STATICEND,266,25,45,8,0,WS_EX_RIGHT\r
+    CONTROL         "Slider1",IDC_SLIDERTIME,"msctls_trackbar32",TBS_TOP | \r
+                    WS_TABSTOP,5,35,316,19\r
+    PUSHBUTTON      "P&an",IDC_PAN,5,64,20,20,BS_ICON | WS_GROUP\r
+    PUSHBUTTON      "&Rotate",IDC_ROTATE,26,64,20,20,BS_ICON\r
+    PUSHBUTTON      "&Zoom",IDC_ZOOM,47,64,20,20,BS_ICON\r
+    LTEXT           "Motion",IDC_STATICMOTION,73,60,22,8\r
+    COMBOBOX        IDC_MOTIONCOMBO,73,70,74,80,CBS_DROPDOWNLIST | CBS_SORT | \r
+                    WS_VSCROLL | WS_TABSTOP\r
+    CONTROL         "Loop",IDC_LOOPED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,\r
+                    152,73,30,10\r
+    LTEXT           "Scale:",IDC_STATICSCALE,186,60,21,8\r
+    EDITTEXT        IDC_EDITSCALE,186,70,40,14,ES_AUTOHSCROLL | ES_NUMBER\r
+    CONTROL         "Spin1",IDC_SPINSCALE,"msctls_updown32",UDS_SETBUDDYINT | \r
+                    UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | \r
+                    UDS_NOTHOUSANDS,220,70,11,14\r
+    LTEXT           "Speed:",IDC_STATICSPEED,231,60,24,8\r
+    EDITTEXT        IDC_EDITSPEED,231,70,40,14,ES_NUMBER\r
+    CONTROL         "Spin2",IDC_SPINSPEED,"msctls_updown32",UDS_SETBUDDYINT | \r
+                    UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | \r
+                    UDS_NOTHOUSANDS,264,70,11,14\r
+    LTEXT           "Frame step:",IDC_STATICFRAME,276,60,38,8\r
+    EDITTEXT        IDC_EDITFRAMETIME,276,70,40,14,ES_NUMBER\r
+    CONTROL         "Spin2",IDC_SPINFRAMETIME,"msctls_updown32",\r
+                    UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | \r
+                    UDS_ARROWKEYS | UDS_NOTHOUSANDS,310,70,11,14\r
+    PUSHBUTTON      "Fro&nt",IDC_FRONT,5,90,30,13,WS_GROUP\r
+    PUSHBUTTON      "&Back",IDC_BACK,37,90,30,13\r
+    PUSHBUTTON      "&Left",IDC_LEFT,5,104,30,13\r
+    PUSHBUTTON      "R&ight",IDC_RIGHT,37,104,30,13\r
+    PUSHBUTTON      "&Top",IDC_TOP,5,118,30,13\r
+    PUSHBUTTON      "Botto&m",IDC_BOTTOM,37,118,30,13\r
+    PUSHBUTTON      "&Center",IDC_CENTER,69,90,30,13\r
+    PUSHBUTTON      "&Play",IDI_PLAY,238,90,41,20,BS_ICON | WS_GROUP\r
+    PUSHBUTTON      "Pa&use",IDI_PAUSE,280,90,20,20,BS_ICON\r
+    PUSHBUTTON      "&Stop",IDI_STOP,301,90,20,20,BS_ICON\r
+    PUSHBUTTON      "RRStart&0",IDI_RRSTART,238,111,20,20,BS_ICON\r
+    PUSHBUTTON      "RRFrame&<",IDI_RRFRAME,259,111,20,20,BS_ICON\r
+    PUSHBUTTON      "FFFrame&>",IDI_FFFRAME,280,111,20,20,BS_ICON\r
+    PUSHBUTTON      "FFEnd&9",IDI_FFEND,301,111,20,20,BS_ICON\r
+    PUSHBUTTON      "Blen&d",IDC_BLEND,138,105,50,20,BS_ICON\r
+END\r
+\r
+IDD_DRIVERDIALOG DIALOG DISCARDABLE  0, 0, 253, 130\r
+STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "Genesis3D Actor Viewer"\r
+FONT 8, "MS Sans Serif"\r
+BEGIN\r
+    LISTBOX         IDC_DRIVERLIST,11,25,231,67,LBS_NOINTEGRALHEIGHT | \r
+                    WS_VSCROLL | WS_HSCROLL | WS_TABSTOP\r
+    LTEXT           "Select a video mode",IDC_STATIC,13,11,164,12\r
+    DEFPUSHBUTTON   "OK",IDOK,50,103,50,14\r
+    PUSHBUTTON      "Cancel",IDCANCEL,146,103,50,14\r
+END\r
+\r
+IDD_ABOUT DIALOG DISCARDABLE  0, 0, 145, 119\r
+STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | WS_POPUP | WS_CAPTION | \r
+    WS_SYSMENU\r
+CAPTION "About Actor Viewer"\r
+FONT 8, "MS Sans Serif"\r
+BEGIN\r
+    DEFPUSHBUTTON   "OK",IDOK,47,98,50,14\r
+    LTEXT           "Genesis3D Actor Viewer Version 2.0",IDC_STATIC,15,76,\r
+                    115,8\r
+    LTEXT           "Copyright © 1999, WildTangent, Inc.",IDC_STATIC,8,86,\r
+                    128,8\r
+    CONTROL         126,IDB_ACTVIEW,"Static",SS_BITMAP | SS_SUNKEN | \r
+                    WS_BORDER,10,7,125,64\r
+END\r
+\r
+IDD_BLENDER DIALOG DISCARDABLE  0, 0, 322, 207\r
+STYLE WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
+CAPTION "Motion Blender"\r
+FONT 8, "MS Sans Serif"\r
+BEGIN\r
+    LTEXT           "Motions:",IDC_STATIC,7,125,34,8\r
+    LISTBOX         IDC_MOTIONSLIST,7,134,93,66,LBS_SORT | \r
+                    LBS_NOINTEGRALHEIGHT | LBS_WANTKEYBOARDINPUT | \r
+                    WS_VSCROLL | WS_TABSTOP\r
+    PUSHBUTTON      "Add",IDC_ADD,104,134,50,14\r
+    PUSHBUTTON      "Remove",IDC_REMOVE,266,55,50,14\r
+    PUSHBUTTON      "Move up",IDC_MOVEUP,266,10,50,14\r
+    PUSHBUTTON      "Move Down",IDC_MOVEDOWN,266,31,50,14\r
+    CONTROL         "",IDC_STATIC,"Static",SS_BLACKFRAME | SS_SUNKEN,7,121,\r
+                    309,1\r
+    LTEXT           "Time Offset",IDC_STATIC,165,151,37,8\r
+    EDITTEXT        IDC_EDITTIMEOFFSET,209,149,26,12,ES_AUTOHSCROLL\r
+    LTEXT           "Start Time",IDC_STATIC,165,170,37,8\r
+    EDITTEXT        IDC_EDITSTARTTIME,209,168,26,12,ES_AUTOHSCROLL\r
+    LTEXT           "End Time",IDC_STATIC,165,188,37,8\r
+    EDITTEXT        IDC_EDITENDTIME,209,187,26,12,ES_AUTOHSCROLL\r
+    LTEXT           "Time Scale",IDC_STATIC,242,151,37,8\r
+    EDITTEXT        IDC_EDITTIMESCALE,284,149,26,12,ES_AUTOHSCROLL\r
+    LTEXT           "Start Blend",IDC_STATIC,243,170,37,8\r
+    EDITTEXT        IDC_EDITSTARTBLEND,284,168,26,12,ES_AUTOHSCROLL | \r
+                    ES_NUMBER\r
+    LTEXT           "End Blend",IDC_STATIC,243,188,37,8\r
+    EDITTEXT        IDC_EDITENDBLEND,284,187,26,12,ES_AUTOHSCROLL | \r
+                    ES_NUMBER\r
+    PUSHBUTTON      "Test Output",IDC_TESTOUT,266,90,50,14\r
+    CONTROL         "",IDC_STATICBLEND,"Static",SS_BLACKFRAME,7,7,253,110\r
+    CTEXT           "Submotion",IDC_STATICSUBMOTION,169,132,140,10,SS_SUNKEN\r
+END\r
+\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Cursor\r
+//\r
+\r
+IDC_ZOOM                CURSOR  DISCARDABLE     "..\\res\\zoom.cur"\r
+IDC_PAN                 CURSOR  DISCARDABLE     "..\\res\\pan.cur"\r
+IDC_ROTATE              CURSOR  DISCARDABLE     "..\\res\\rotate.cur"\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Accelerator\r
+//\r
+\r
+IDR_ACCELERATOR1 ACCELERATORS DISCARDABLE \r
+BEGIN\r
+    "E",            ID_OPTIONS_FRAMERATE,   VIRTKEY, NOINVERT\r
+    "O",            ID_FILE_OPEN,           VIRTKEY, CONTROL, NOINVERT\r
+    VK_ESCAPE,      IDC_NOTHING,            VIRTKEY, NOINVERT\r
+    VK_F1,          ID_HELP_CONTENTS,       VIRTKEY, NOINVERT\r
+END\r
+\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// DESIGNINFO\r
+//\r
+\r
+#ifdef APSTUDIO_INVOKED\r
+GUIDELINES DESIGNINFO DISCARDABLE \r
+BEGIN\r
+    IDD_ABOUT, DIALOG\r
+    BEGIN\r
+        LEFTMARGIN, 7\r
+        RIGHTMARGIN, 138\r
+        TOPMARGIN, 7\r
+        BOTTOMMARGIN, 112\r
+    END\r
+\r
+    IDD_BLENDER, DIALOG\r
+    BEGIN\r
+        LEFTMARGIN, 7\r
+        RIGHTMARGIN, 316\r
+        TOPMARGIN, 7\r
+        BOTTOMMARGIN, 200\r
+    END\r
+END\r
+#endif    // APSTUDIO_INVOKED\r
+\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// String Table\r
+//\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+    IDS_CLASSNAME           "MOTION_BLENDER_WINDOW_CLASS"\r
+    IDS_PROGRAMNAME         "Genesis3D Actor Viewer"\r
+    IDS_UNIQUEMESSAGE       "ActorViewerUniqueMessageString"\r
+    IDS_DEFAULTPOSE         "(Default Pose)"\r
+    IDS_BLENDEDMOTION       "(Blended Motion)"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+    ID_FILE_EXIT            "Exit the program"\r
+    ID_FILE_OPEN            "Open a file"\r
+    ID_MOTION_SELECT        "Select motion"\r
+    ID_OPTIONS_FRONT        "Save current orientation as front"\r
+    ID_OPTIONS_FRAMERATE    "Toggle frame rate counter"\r
+    IDS_CANTADDWORLD        "Can't add world to engine."\r
+    IDS_CANTSTARTTIMER      "Can't start timer.  Animations will not function."\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+    IDC_PAN                 "Pan  A"\r
+    IDC_ROTATE              "Rotate  R"\r
+    IDC_ZOOM                "Zoom  Z"\r
+    IDI_PLAY                "Play  P"\r
+    IDI_PAUSE               "Pause  U"\r
+    IDI_RRSTART             "Go to start  0"\r
+    IDI_RRFRAME             "Back frame  <"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+    IDI_STOP                "Stop  S"\r
+    IDI_FFFRAME             "Forward frame  >"\r
+    IDI_FFEND               "Go to end  9"\r
+    IDC_FRONT               "Front view  N"\r
+    IDC_EDITSCALE           "Actor scale (percent of normal)"\r
+    IDC_BACK                "Back view  B"\r
+    IDC_EDITSPEED           "Animation speed (percent of normal)"\r
+    IDC_LEFT                "Left side view  L"\r
+    IDC_RIGHT               "Right side view  I"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+    IDS_CANTCREATEENGINE    "Could not create engine"\r
+    IDS_CANTCREATECAMERA    "Could not create camera"\r
+    IDS_CANTCREATEWORLD     "Could not create world"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+    IDC_EDITFRAMETIME       "Frame step time (1/100 second)"\r
+    IDC_TOP                 "Top view  T"\r
+    IDC_BOTTOM              "Bottom view  B"\r
+    IDC_STATICEND           "Animation ending time"\r
+    IDS_STATICSTART         "Animation start time"\r
+    IDC_STATICCURRENTTIME   "Current animation time (in seconds)"\r
+    IDC_CENTER              "Center actor at origin  C"\r
+    IDC_BLEND               "Blend Motion  D"\r
+END\r
+\r
+STRINGTABLE DISCARDABLE \r
+BEGIN\r
+    IDS_CANTLOADDRIVER      "Couldn't load graphics driver"\r
+    IDS_CANTINITENGINE      "Unable to initialize engine"\r
+    IDS_CANTLOADACTOR       "Couldn't load actor file '%s'"\r
+    IDS_BEGINFRAMEFAIL      "EngineBeginFrame failed."\r
+    IDS_RENDERFAIL          "Could not render the world."\r
+    IDS_INIFILENAME         "ActView.ini"\r
+    IDS_ENDFRAMEFAIL        "EngineEndFrame failed."\r
+    IDS_HELPFILENAME        "ActView.hlp"\r
+    IDS_PROGRAMBASENAME     "ActView"\r
+    IDS_ACTFILEFILTER       "*.act"\r
+    IDS_ACTFILEEXT          "act"\r
+    IDS_ACTFILEFILTERDESC   "Genesis3D Actor Files (.act)"\r
+    IDS_UNNAMED             "(Unnamed %d)"\r
+END\r
+\r
+#endif    // English (U.S.) resources\r
+/////////////////////////////////////////////////////////////////////////////\r
+\r
+\r
+\r
+#ifndef APSTUDIO_INVOKED\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Generated from the TEXTINCLUDE 3 resource.\r
+//\r
+\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+#endif    // not APSTUDIO_INVOKED\r
+\r
diff --git a/ActView/Main/Blender.h b/ActView/Main/Blender.h
new file mode 100644 (file)
index 0000000..c325a2a
--- /dev/null
@@ -0,0 +1,57 @@
+/****************************************************************************************/\r
+/*  BLENDER.H                                                                           */\r
+/*                                                                                      */\r
+/*  Author: Jim Mischel                                                                            */\r
+/*  Description:  Actor Viewer's motion blender dialog box.                                                            */\r
+/*                                                                                      */\r
+/*                                                                                      */\r
+/*  The contents of this file are subject to the Genesis3D Public License               */\r
+/*  Version 1.01 (the "License"); you may not use this file except in                   */\r
+/*  compliance with the License. You may obtain a copy of the License at                */\r
+/*  http://www.genesis3d.com                                                            */\r
+/*                                                                                      */\r
+/*  Software distributed under the License is distributed on an "AS IS"                 */\r
+/*  basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.  See                */\r
+/*  the License for the specific language governing rights and limitations              */\r
+/*  under the License.                                                                  */\r
+/*                                                                                      */\r
+/*  The Original Code is Genesis3D, released March 25, 1999.                            */\r
+/*  Genesis3D Version 1.1 released November 15, 1999                                 */\r
+/*  Copyright (C) 1999 WildTangent, Inc. All Rights Reserved           */\r
+/*                                                                                      */\r
+/****************************************************************************************/\r
+#ifndef BLENDER_H\r
+#define BLENDER_H\r
+\r
+#include <windows.h>\r
+#include "genesis.h"\r
+\r
+#ifdef __cplusplus\r
+       extern "C" {\r
+#endif\r
+\r
+#define WM_BLENDERCLOSING              WM_USER + 1\r
+#define WM_BLENDERMOTIONCHANGED        WM_USER + 2\r
+\r
+#define DEFAULT_POSE_INDEX  -1\r
+\r
+HWND Blender_Create\r
+       (\r
+         HWND hwndParent,\r
+         HINSTANCE hinst,\r
+         geActor_Def *ActorDef,\r
+         geMotion *BlendedMotion\r
+       );\r
+\r
+void Blender_UpdateActor\r
+       (\r
+         HWND hwndBlender,\r
+         geActor_Def *ActorDef,\r
+         geMotion *BlendedMotion\r
+       );\r
+\r
+#ifdef __cplusplus\r
+       }\r
+#endif\r
+\r
+#endif\r
diff --git a/ActView/Main/actview.c b/ActView/Main/actview.c
new file mode 100644 (file)
index 0000000..0db7d85
--- /dev/null
@@ -0,0 +1,2123 @@
+/****************************************************************************************/\r
+/*  ACTVIEW.C                                                                           */\r
+/*                                                                                      */\r
+/*  Author: Jim Mischel                                                                            */\r
+/*  Description:  Actor Viewer and Motion Blender.  Main module.                                               */\r
+/*                                                                                      */\r
+/*  The contents of this file are subject to the Genesis3D Public License               */\r
+/*  Version 1.01 (the "License"); you may not use this file except in                   */\r
+/*  compliance with the License. You may obtain a copy of the License at                */\r
+/*  http://www.genesis3d.com                                                            */\r
+/*                                                                                      */\r
+/*  Software distributed under the License is distributed on an "AS IS"                 */\r
+/*  basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.  See                */\r
+/*  the License for the specific language governing rights and limitations              */\r
+/*  under the License.                                                                  */\r
+/*                                                                                      */\r
+/*  The Original Code is Genesis3D, released March 25, 1999.                            */\r
+/*Genesis3D Version 1.1 released November 15, 1999                            */\r
+/*  Copyright (C) 1999 WildTangent, Inc. All Rights Reserved           */\r
+/*                                                                                      */\r
+/****************************************************************************************/\r
+\r
+#include <windows.h>\r
+#pragma warning(disable : 4201 4214 4115)\r
+#include <commctrl.h>\r
+#include <commdlg.h>\r
+#include <mmsystem.h>\r
+#include <shellapi.h>\r
+#pragma warning(default : 4201 4214 4115)\r
+\r
+#include <stdio.h>\r
+#include <io.h>\r
+#include <math.h>\r
+#include "genesis.h"\r
+#include "rcstring.h"\r
+#include "resource.h"\r
+#include "InstCheck.h"\r
+#include "FilePath.h"\r
+#include "ram.h"\r
+#include <assert.h>\r
+#include "drvlist.h"\r
+#include "about.h"\r
+#include "units.h"\r
+#include "blender.h"\r
+\r
+#pragma warning (disable:4514)         // unreferenced inline function\r
+\r
+#pragma message ("Need to disable buttons when no actor selected")\r
+\r
+#define        USER_ALL        0xffffffff\r
+\r
+#define ACTOR_WINDOW_WIDTH     480\r
+#define ACTOR_WINDOW_HEIGHT 360\r
+\r
+#define RENDER_BORDER 5\r
+\r
+#define DEFAULT_POSE_INDEX             -1\r
+#define BLENDED_MOTION_INDEX   -2\r
+\r
+// Message string used to create a custom message for the multimedia timer stuff.\r
+static const char ActViewMessageString[] = "ActorViewerMessageString";\r
+\r
+#define DESIRED_MMTIMER_FREQUENCY      33\r
+#define DESIRED_MMTIMER_RESOLUTION  (DESIRED_MMTIMER_FREQUENCY/5)\r
+#define LORES_TIMER_NUMBER 1\r
+\r
+typedef enum\r
+{\r
+       AWM_NONE,\r
+       AWM_PAN,\r
+       AWM_ROTATE,\r
+       AWM_ZOOM\r
+} ActView_Mode;\r
+\r
+typedef enum\r
+{\r
+       PLAYMODE_STOP,\r
+       PLAYMODE_PLAY,\r
+       PLAYMODE_PAUSE\r
+} ActView_PlayMode;\r
+\r
+typedef struct\r
+{\r
+       HINSTANCE       Instance;\r
+       HWND            hwnd;\r
+       char            ActorFilename[MAX_PATH];\r
+       char            IniFilename[MAX_PATH];\r
+       char            LastDir[MAX_PATH];\r
+       ActView_Mode    MouseMode;                      // Mouse mode (none, pan, rotate, zoom)\r
+       HWND            hwndTT;                                 // tooltips window\r
+       HWND            hwndBlender;                    // motion blender dialog\r
+\r
+       // Engine and such\r
+       geEngine        *Engine;\r
+       geWorld         *World;\r
+       geCamera        *Camera;\r
+       GE_Rect         Rect;\r
+       geFloat         XRotCam, YRotCam, Dist, Height;\r
+       BOOL            ShowFrameRate;\r
+\r
+       // animation stuff\r
+       DWORD           MotionStartTime;\r
+       geFloat         LastFrameTime;\r
+       ActView_PlayMode PlayMode;\r
+       int                     Scale;\r
+       int                     Speed;\r
+       int                     FrameDelta;\r
+       geFloat         StartExtent, EndExtent, MotionLength;\r
+       geBoolean       Loop;\r
+\r
+       // actor stuff\r
+       geActor_Def     *ActorDef;\r
+       geActor         *Actor;\r
+       geFloat         InitialXRot, InitialYRot;\r
+       geFloat         XRotActor, YRotActor;\r
+       geVec3d         ActorPos, ActorDefaultPos;\r
+       geMotion        *Motion;\r
+       int                     LastX, LastY;                   // for mouse movement...\r
+       int                     CurrentMotion;\r
+       geMotion        *BlendedMotion;\r
+\r
+       // timer stuff\r
+       UINT            loresTimer;\r
+       MMRESULT        hiresTimer;\r
+       UINT            TimerMessageId;\r
+       BOOL            ProcessingTimerMessage;\r
+} ActView_WindowData;\r
+\r
+/*\r
+  There's some serious ugliness here, but I don't know a way around it.\r
+  The ActView_ToolHook and ActView_DlgHandle variables must be global\r
+  in order for the tooltips to work.  I don't have to like it...\r
+*/\r
+static HHOOK ActView_ToolHook = NULL;\r
+static HWND ActView_DlgHandle = NULL;\r
+\r
+static ActView_WindowData *ActView_GetWindowData (HWND hwnd)\r
+{\r
+       return (ActView_WindowData *)GetWindowLong (hwnd, GWL_USERDATA);\r
+}\r
+\r
+// Turn an integer value into a percentage expressed in floating point.  (Divides by 100)\r
+static geFloat floatPercent (int Val)\r
+{\r
+       geFloat fPercent = ((geFloat)Val)/100.0f;\r
+\r
+       return fPercent;\r
+}\r
+\r
+// Turn a floating point value into an integer percentage.  (Multiplies by 100).\r
+static int MakePercent (geFloat fVal)\r
+{\r
+       int iPercent;\r
+\r
+       iPercent = (int)floor((fVal * 100.0f) + 0.5f);\r
+       return iPercent;\r
+}\r
+\r
+// returns GE_TRUE if the requested key is currently being pressed\r
+static geBoolean IsKeyDown(int KeyCode)\r
+{\r
+       return (GetAsyncKeyState (KeyCode) & 0x8000) ? GE_TRUE : GE_FALSE;\r
+}\r
+\r
+/*\r
+  Formats an error message and displays a message box with that error.\r
+  The passed FormatStringID is the resource identifier of the format string.\r
+*/\r
+static void MyError\r
+       (\r
+         HWND hwnd,\r
+         HINSTANCE hinst,\r
+         int FormatStringID,\r
+         ...\r
+       )\r
+{\r
+       char Buffer[1024];\r
+       const char *FormatString;\r
+       va_list argptr;\r
+\r
+       va_start (argptr, FormatStringID);\r
+       FormatString = rcstring_Load (hinst, FormatStringID);\r
+       vsprintf (Buffer, FormatString, argptr);\r
+       va_end (argptr);\r
+\r
+       MessageBox (hwnd, Buffer, rcstring_Load (hinst, IDS_PROGRAMNAME), MB_ICONEXCLAMATION | MB_OK);\r
+}\r
+\r
+// Set up the dialog's title bar.\r
+static void ActView_SetupTitle\r
+       (\r
+         ActView_WindowData *pData\r
+       )\r
+{\r
+       char Title[MAX_PATH+100];\r
+       const char *ProgramName = rcstring_Load (pData->Instance, IDS_PROGRAMNAME);\r
+\r
+       // If there's an actor loaded, display the file name in the title bar.\r
+       if (pData->ActorFilename[0] == '\0')\r
+       {\r
+               strcpy (Title, ProgramName);\r
+       }\r
+       else\r
+       {\r
+               sprintf (Title, "%s - %s", ProgramName, pData->ActorFilename);\r
+       }\r
+       SetWindowText (pData->hwnd, Title);\r
+}\r
+\r
+// Sets the menu option to indicate state of frame rate display.\r
+// Instructs engine to enable/disable frame rate counter.\r
+static void ActView_SetFrameRateToggle\r
+       (\r
+         ActView_WindowData *pData\r
+       )\r
+{\r
+       HMENU Menu = GetMenu (pData->hwnd);\r
+       if (Menu != NULL)\r
+       {\r
+               CheckMenuItem \r
+               (\r
+                       Menu, \r
+                       ID_OPTIONS_FRAMERATE, \r
+                       MF_BYCOMMAND | (pData->ShowFrameRate ? MF_CHECKED : MF_UNCHECKED)\r
+               );\r
+       }\r
+       // tell engine not to show frame rate\r
+       geEngine_EnableFrameRateCounter (pData->Engine, pData->ShowFrameRate);\r
+}\r
+\r
+// Hook procedure for checking on mouse messages passed to the dialog box.\r
+// This is required in order to make the tooltips work.\r
+static LRESULT CALLBACK ActView_HookProc \r
+       (\r
+         int nCode, \r
+         WPARAM wParam, \r
+         LPARAM lParam\r
+       )\r
+{\r
+       MSG *pMsg;\r
+       \r
+       pMsg = (MSG *)lParam;\r
+       // We're only interested in mouse messages for windows that are children of the main dialog.\r
+       if ((nCode >= 0) && (IsChild (ActView_DlgHandle, pMsg->hwnd)))\r
+       {\r
+               switch (pMsg->message)\r
+               {\r
+                       case WM_MOUSEMOVE :\r
+                       case WM_LBUTTONDOWN :\r
+                       case WM_LBUTTONUP :\r
+                       case WM_RBUTTONDOWN :\r
+                       case WM_RBUTTONUP :\r
+                       {\r
+                               ActView_WindowData *pData = (ActView_WindowData *)GetWindowLong (ActView_DlgHandle, GWL_USERDATA);\r
+\r
+                               // if we find such a message, we relay it to the tooltip control,\r
+                               // which in turn sends a TTN_NEEDTEXT query to the dialog \r
+                               if (pData->hwndTT != NULL)\r
+                               {\r
+                                       MSG msg;\r
+\r
+                                       msg.lParam = pMsg->lParam;\r
+                                       msg.wParam = pMsg->wParam;\r
+                                       msg.message = pMsg->message;\r
+                                       msg.hwnd = pMsg->hwnd;\r
+                                       SendMessage (pData->hwndTT, TTM_RELAYEVENT, 0, (LPARAM)&msg);\r
+                               }\r
+                               break;\r
+                       }\r
+\r
+                       default :\r
+                               break;\r
+               }\r
+       }\r
+\r
+       return CallNextHookEx (ActView_ToolHook, nCode, wParam, lParam);\r
+}\r
+\r
+static void SetSpinnerRange (HWND hwnd, int Spinner, short low, short high)\r
+{\r
+       SendDlgItemMessage (hwnd, Spinner, UDM_SETRANGE, 0, MAKELONG (high, low));\r
+}\r
+\r
+// Sets the value of an edit control and updates the associated spinner's value.\r
+static void SetEditControlValue (HWND hwnd, int Edit, int Spinner, int ValuePercent)\r
+{\r
+       int Pos = ValuePercent;\r
+\r
+       SetDlgItemInt (hwnd, Edit, Pos, FALSE);\r
+       SendDlgItemMessage (hwnd, Spinner, UDM_SETPOS, 0, MAKELONG (Pos, 0));\r
+}\r
+\r
+// Sets up the slider's range and displays the the ending time value\r
+static void SetSliderRange (ActView_WindowData *pData, int SliderId)\r
+{\r
+       int StartRange, EndRange;\r
+       char sTime[100];\r
+\r
+       StartRange = MakePercent (pData->StartExtent);\r
+       EndRange = MakePercent (pData->EndExtent);\r
+       SendDlgItemMessage (pData->hwnd, SliderId, TBM_SETRANGEMIN, FALSE, StartRange);\r
+       SendDlgItemMessage (pData->hwnd, SliderId, TBM_SETRANGEMAX, TRUE, EndRange);\r
+\r
+       sprintf (sTime, "%.2f", pData->StartExtent);\r
+       SetDlgItemText (pData->hwnd, IDC_STATICSTART, sTime);\r
+\r
+       sprintf (sTime, "%.2f", pData->EndExtent);\r
+       SetDlgItemText (pData->hwnd, IDC_STATICEND, sTime);\r
+}\r
+\r
+// Sets the slider's current position and displays the current slider time\r
+// in the box above the slider.\r
+static void SetSliderTime (HWND hwnd, int SliderId, geFloat FTime)\r
+{\r
+       char sTime[100];\r
+       int iPercent;\r
+\r
+       iPercent = MakePercent (FTime);\r
+       SendDlgItemMessage (hwnd, SliderId, TBM_SETPOS, TRUE, iPercent);\r
+\r
+       sprintf (sTime, "%.2f", FTime);\r
+       SetDlgItemText (hwnd, IDC_STATICCURRENTTIME, sTime);\r
+}\r
+\r
+// Set the engine's camera attributes from the passed transform and rectangle\r
+static void SetupCamera(geCamera *Camera, GE_Rect *Rect, geXForm3d *XForm)\r
+{\r
+       geCamera_SetWorldSpaceXForm (Camera, XForm);\r
+       geCamera_SetAttributes (Camera, 2.0f, Rect);\r
+}\r
+\r
+// Create a transform from the passed rotations and distance\r
+static void SetupXForm (geXForm3d *XForm, geFloat XRot, geFloat YRot, geFloat Dist)\r
+{\r
+       geXForm3d_SetTranslation (XForm, 0.0f, 0.0f, Dist);\r
+\r
+       geXForm3d_RotateX(XForm, XRot);\r
+       geXForm3d_RotateY(XForm, YRot);\r
+}\r
+\r
+static void ActView_UpdateFrame (ActView_WindowData *pData)\r
+{\r
+       // do frame update\r
+       if (pData == NULL)\r
+       {\r
+               return;\r
+       }\r
+\r
+       if ((pData->Engine == NULL) || (pData->World == NULL) || (pData->Camera == NULL))\r
+       {\r
+               return;\r
+       }\r
+\r
+       // Always begin frame (last parameter is clear screen flag)\r
+       if (!geEngine_BeginFrame (pData->Engine, pData->Camera, GE_TRUE))\r
+       {\r
+               MyError (pData->hwnd, pData->Instance, IDS_BEGINFRAMEFAIL);\r
+       }\r
+\r
+       {\r
+               geXForm3d XForm;\r
+\r
+               // Set up the render camera\r
+               SetupXForm (&XForm, pData->XRotCam, pData->YRotCam, pData->Dist);\r
+               geXForm3d_Translate (&XForm, 0.0f, pData->Height, 0.0f);\r
+               SetupCamera (pData->Camera, &pData->Rect, &XForm);\r
+\r
+               // Set up transform for actor motion\r
+               SetupXForm (&XForm, pData->XRotActor, pData->YRotActor, 0.0f);\r
+\r
+               // adjust position based on default pos, current rotation, and X,Y panning...\r
+               {\r
+                       geXForm3d XFormPos;\r
+\r
+                       geXForm3d_SetTranslation (&XFormPos, pData->ActorDefaultPos.X, pData->ActorDefaultPos.Y, pData->ActorDefaultPos.Z);\r
+                       geXForm3d_Translate (&XForm, pData->ActorPos.X, pData->ActorPos.Y, pData->ActorPos.Z);\r
+                       geXForm3d_Multiply (&XForm, &XFormPos, &XForm);\r
+               }\r
+\r
+               // If we have a current motion, then display the actor at\r
+               // the proper key time.  Otherwise clear the pose.\r
+               if (pData->Actor != NULL)\r
+               {\r
+                       if (pData->Motion != NULL)\r
+                       {\r
+                               geFloat MotionTime = 0.0f;\r
+                               switch (pData->PlayMode)\r
+                               {\r
+                                       case PLAYMODE_PLAY :\r
+                                       {\r
+                                               // playing, so update current frame time...\r
+                                               DWORD CurrentTime;\r
+                                               geFloat ElapsedSeconds;\r
+\r
+                                               CurrentTime = timeGetTime ();\r
+                                               // Convert elapsed milliseconds from timeGetTime to seconds.\r
+                                               ElapsedSeconds = ((geFloat)(CurrentTime - pData->MotionStartTime))/1000.0f;\r
+                                               // And then apply speed factor\r
+                                               ElapsedSeconds *= ((geFloat)pData->Speed)/100.0f;\r
+\r
+                                               // check for looping...\r
+                                               if (pData->Loop)\r
+                                               {\r
+                                                       MotionTime = pData->StartExtent + (geFloat)fmod (ElapsedSeconds, pData->MotionLength);\r
+                                               }\r
+                                               else\r
+                                               {\r
+                                                       // and stop animation if not looping\r
+                                                       if (ElapsedSeconds > pData->MotionLength)\r
+                                                       {\r
+                                                               pData->PlayMode = PLAYMODE_STOP;\r
+                                                               MotionTime = pData->EndExtent;\r
+                                                       }\r
+                                                       else\r
+                                                       {\r
+                                                               MotionTime = pData->StartExtent + ElapsedSeconds;\r
+                                                       }\r
+                                               }\r
+                                               break;\r
+                                       }\r
+\r
+                                       case PLAYMODE_STOP :\r
+                                       case PLAYMODE_PAUSE :\r
+                                               MotionTime = pData->LastFrameTime;\r
+                                               break;\r
+                               }\r
+\r
+                               // Update frame time\r
+                               pData->LastFrameTime = MotionTime;\r
+                               // Set actor's pose\r
+                               geActor_SetPose (pData->Actor, pData->Motion, MotionTime, &XForm);\r
+                               // and update the slider\r
+                               SetSliderTime (pData->hwnd, IDC_SLIDERTIME, pData->LastFrameTime);\r
+                       }\r
+                       else\r
+                       {\r
+                               geActor_ClearPose (pData->Actor, &XForm);\r
+                       }\r
+               }\r
+       }\r
+\r
+       // All world changes are made...render the results.\r
+       if (!geEngine_RenderWorld (pData->Engine, pData->World, pData->Camera, 0.0f))\r
+       {\r
+               MyError (pData->hwnd, pData->Instance, IDS_RENDERFAIL);\r
+       }\r
+\r
+       // Always end frame\r
+       if (!geEngine_EndFrame (pData->Engine))\r
+       {\r
+               MyError (pData->hwnd, pData->Instance, IDS_ENDFRAMEFAIL);\r
+       }\r
+}\r
+\r
+// Load an actor from the passed filename.\r
+// returns TRUE if the actor is loaded successfully.\r
+// This will unload any currently-loaded actor.\r
+BOOL ActView_LoadActor\r
+       (\r
+         HWND hwnd,\r
+         const char *ActorFilename\r
+       )\r
+{\r
+       ActView_WindowData *pData = (ActView_WindowData *)GetWindowLong (hwnd, GWL_USERDATA);\r
+\r
+       {\r
+               geActor_Def     *ActorDef = NULL;\r
+               geActor         *Actor;\r
+\r
+               {\r
+                       // Open VFS directory...\r
+                       geVFile *ActorDir;\r
+                       char ActorPath[MAX_PATH];\r
+\r
+                       FilePath_GetDriveAndDir (ActorFilename, ActorPath);\r
+                       // OpenNewSystem doesn't like the path to have a trailing '\'\r
+                       if (ActorPath [strlen (ActorPath)-1] =='\\')\r
+                       {\r
+                               ActorPath[strlen (ActorPath)-1] = '\0';\r
+                       }\r
+\r
+                       ActorDir = geVFile_OpenNewSystem (NULL, GE_VFILE_TYPE_DOS, ActorPath, NULL, GE_VFILE_OPEN_DIRECTORY | GE_VFILE_OPEN_READONLY);\r
+\r
+                       if (ActorDir != NULL)\r
+                       {\r
+                               // open actor file\r
+                               geVFile *ActorFile;\r
+                               char ActorName[MAX_PATH];\r
+\r
+                               FilePath_GetNameAndExt (ActorFilename, ActorName);\r
+                               ActorFile = geVFile_Open (ActorDir, ActorName, GE_VFILE_OPEN_READONLY);\r
+                               if (ActorFile != NULL)\r
+                               {\r
+                                       // and load the actor from that file\r
+                                       ActorDef = geActor_DefCreateFromFile (ActorFile);\r
+                                       // close the VFS file\r
+                                       geVFile_Close (ActorFile);\r
+                               }\r
+                       }\r
+\r
+                       if (ActorDef == NULL)\r
+                       {\r
+                               return GE_FALSE;\r
+                       }\r
+               }\r
+\r
+               // Actor definition is loaded.\r
+               // Create it and place it in the world.\r
+               Actor = geActor_Create (ActorDef);\r
+               if (Actor == NULL)\r
+               {\r
+                       geActor_DefDestroy (&ActorDef);\r
+                       return GE_FALSE;\r
+               }\r
+\r
+               // and add the new actor to the world...\r
+               if (geWorld_AddActor (pData->World, Actor, GE_ACTOR_RENDER_ALWAYS | GE_ACTOR_COLLIDE, USER_ALL) == GE_FALSE)\r
+               {\r
+                       geActor_Destroy (&Actor);\r
+                       geActor_DefDestroy (&ActorDef);\r
+                       return GE_FALSE;\r
+               }\r
+\r
+               // got the actor.  Remove previous actor from world.\r
+               if (pData->Actor != NULL)\r
+               {\r
+                       geWorld_RemoveActor (pData->World, pData->Actor);\r
+                       geActor_Destroy (&pData->Actor);\r
+                       pData->Actor            = NULL;\r
+               }\r
+\r
+               if (pData->ActorDef != NULL)\r
+               {\r
+                       geActor_DefDestroy (&pData->ActorDef);\r
+                       pData->ActorDef         = NULL;\r
+               }\r
+\r
+               pData->ActorDef = ActorDef;\r
+               pData->Actor = Actor;\r
+\r
+               pData->Motion = NULL;\r
+\r
+               // copy the new filename\r
+               strcpy (pData->ActorFilename, ActorFilename);\r
+       }\r
+\r
+\r
+       {\r
+               // Set the actor's position and default pose.\r
+\r
+               geVec3d BoxPos;\r
+               geXForm3d XForm;\r
+               geExtBox ExtBox;\r
+               \r
+               pData->XRotActor = pData->InitialXRot;\r
+               pData->YRotActor = pData->InitialYRot;\r
+               \r
+               // Get the actor's bounding box,\r
+               // and place the center of the bounding box at the origin...\r
+               geXForm3d_SetIdentity (&XForm);\r
+\r
+               // set the actor's default pose\r
+               geActor_ClearPose (pData->Actor, &XForm);\r
+               geActor_GetDynamicExtBox (pData->Actor, &ExtBox);\r
+\r
+               geVec3d_Add (&ExtBox.Min, &ExtBox.Max, &BoxPos);\r
+               // save position for centering...\r
+               geVec3d_Scale (&BoxPos, -0.5f, &pData->ActorDefaultPos);\r
+               // current offsets from center are 0\r
+               geVec3d_Clear (&pData->ActorPos);\r
+       }\r
+\r
+       {\r
+               // Fill motion combo box with the actor's motions.\r
+               int NumMotions;\r
+               int iMotion;\r
+               HWND hwndCombo;\r
+               int Index;\r
+\r
+               hwndCombo = GetDlgItem (hwnd, IDC_MOTIONCOMBO);\r
+               SendMessage (hwndCombo, CB_RESETCONTENT, 0, 0);\r
+\r
+               NumMotions = geActor_GetMotionCount (pData->ActorDef);\r
+               for (iMotion = 0; iMotion < NumMotions; ++iMotion)\r
+               {\r
+                       const char *MotionName = geActor_GetMotionName (pData->ActorDef, iMotion);\r
+                       char TempName[MAX_PATH];\r
+\r
+                       // The motion API allows unnamed motions.\r
+                       // So if MotionName comes back NULL, we have to create a name for this item\r
+                       if (MotionName == NULL)\r
+                       {\r
+                               geMotion *MyMotion;\r
+\r
+                               MyMotion = geActor_GetMotionByIndex (pData->ActorDef, iMotion);\r
+                               sprintf (TempName, rcstring_Load (pData->Instance, IDS_UNNAMED), iMotion);\r
+                               MotionName = TempName;\r
+                               geMotion_SetName (MyMotion, MotionName);\r
+                       }\r
+\r
+                       Index = SendMessage (hwndCombo, CB_ADDSTRING, 0, (LONG)MotionName);\r
+                       SendMessage (hwndCombo, CB_SETITEMDATA, Index, iMotion);\r
+               }\r
+\r
+               // Add blended motion to list.\r
+               if (pData->BlendedMotion != NULL)\r
+               {\r
+                       Index = SendMessage (hwndCombo, CB_ADDSTRING, 0, (LONG)rcstring_Load (pData->Instance, IDS_BLENDEDMOTION));\r
+                       SendMessage (hwndCombo, CB_SETITEMDATA, Index, BLENDED_MOTION_INDEX);\r
+               }\r
+\r
+               // Add Default Pose selection\r
+               pData->CurrentMotion = DEFAULT_POSE_INDEX;\r
+               Index = SendMessage (hwndCombo, CB_ADDSTRING, 0, (LONG)rcstring_Load (pData->Instance, IDS_DEFAULTPOSE));\r
+               SendMessage (hwndCombo, CB_SETITEMDATA, Index, DEFAULT_POSE_INDEX);\r
+\r
+               // and select it as current item\r
+               SendMessage (hwndCombo, CB_SETCURSEL, Index, 0);\r
+       }\r
+\r
+       return TRUE;\r
+}\r
+\r
+static void ActView_DoLoadActor \r
+       (\r
+         ActView_WindowData *pData,\r
+         const char *Filename\r
+       )\r
+{\r
+       // show wait cursor while loading...\r
+       HCURSOR OldCursor = SetCursor (LoadCursor (NULL, IDC_WAIT));\r
+\r
+       // We got a filename, so load the actor.\r
+       if (!ActView_LoadActor (pData->hwnd, Filename))\r
+       {\r
+               MyError (pData->hwnd, pData->Instance, IDS_CANTLOADACTOR, Filename);\r
+               return;\r
+       }\r
+       {\r
+               // give the actor some cool(?) lighting effects\r
+               geVec3d FillLightNormal;\r
+\r
+               geVec3d_Set (&FillLightNormal, -0.3f, 1.0f, 0.4f);\r
+               geVec3d_Normalize (&FillLightNormal);\r
+\r
+               geActor_SetLightingOptions \r
+               (\r
+                       pData->Actor, GE_TRUE, &FillLightNormal,\r
+                       128.0f, 128.0f, 128.0f,         // Fill light\r
+                       128.0f, 128.0f, 128.0f,         // Ambient light\r
+                       GE_FALSE,                                       // Ambient light from floor\r
+                       0,              // no dynamic lights,\r
+                       NULL, FALSE\r
+               );\r
+       }\r
+\r
+       ActView_SetupTitle (pData);\r
+\r
+       // Set last directory...\r
+       FilePath_GetDriveAndDir (Filename, pData->LastDir);\r
+\r
+       // Clear blended motion and notify blend dialog (if one)\r
+       // that the actor has changed.\r
+       if (pData->BlendedMotion != NULL)\r
+       {\r
+               geMotion_Destroy (&pData->BlendedMotion);\r
+       }\r
+       pData->BlendedMotion = geMotion_Create (GE_TRUE);\r
+       if (pData->hwndBlender != NULL)\r
+       {\r
+               Blender_UpdateActor (pData->hwndBlender, pData->ActorDef, pData->BlendedMotion);\r
+       }\r
+       SetCursor (OldCursor);\r
+}\r
+\r
+/*\r
+  Prompts user for actor filename, and creates a new window\r
+  in which the actor is displayed.\r
+*/\r
+static void PromptForActorWindow (ActView_WindowData *pData)\r
+{\r
+       OPENFILENAME ofn;       // Windows open filename structure...\r
+       char Filename[MAX_PATH];\r
+       char Filter[MAX_PATH];\r
+\r
+       Filename[0] = '\0';\r
+\r
+       ofn.lStructSize = sizeof (OPENFILENAME);\r
+       ofn.hwndOwner = pData->hwnd;\r
+       ofn.hInstance = pData->Instance;\r
+       {\r
+               char *c;\r
+\r
+               // build actor file filter string\r
+               strcpy (Filter, rcstring_Load (ofn.hInstance, IDS_ACTFILEFILTERDESC));\r
+               c = &Filter[strlen (Filter)] + 1;\r
+               // c points one beyond end of string\r
+               strcpy (c, rcstring_Load (ofn.hInstance, IDS_ACTFILEFILTER));\r
+               c = &c[strlen (c)] + 1;\r
+               *c = '\0';      // 2nd terminating nul character\r
+       }\r
+       ofn.lpstrFilter = Filter;\r
+       ofn.lpstrCustomFilter = NULL;\r
+       ofn.nMaxCustFilter = 0;\r
+       ofn.nFilterIndex = 1;\r
+       ofn.lpstrFile = Filename;\r
+       ofn.nMaxFile = sizeof (Filename);\r
+       ofn.lpstrFileTitle = NULL;\r
+       ofn.nMaxFileTitle = 0;\r
+       ofn.lpstrInitialDir = pData->LastDir;\r
+       ofn.lpstrTitle = NULL;\r
+       ofn.Flags = OFN_FILEMUSTEXIST | OFN_NOCHANGEDIR;\r
+       ofn.nFileOffset = 0;\r
+       ofn.nFileExtension = 0;\r
+       ofn.lpstrDefExt = rcstring_Load (ofn.hInstance, IDS_ACTFILEEXT);\r
+       ofn.lCustData = 0;\r
+       ofn.lpfnHook = NULL;\r
+       ofn.lpTemplateName = NULL;\r
+\r
+       if (GetOpenFileName (&ofn))\r
+       {\r
+               ActView_DoLoadActor (pData, Filename);\r
+       }\r
+}\r
+\r
+// Load program options.\r
+// Searches the current directory, and then the executable's directory\r
+// for the ini file.\r
+// Saves the filename and loads the options from that file.\r
+static void ActView_LoadOptions\r
+       (\r
+         ActView_WindowData *pData\r
+       )\r
+{\r
+       char FName[MAX_PATH];\r
+\r
+       // Rotation options defaults.\r
+       pData->InitialXRot = 0.0f;\r
+       pData->InitialYRot = 0.0f;\r
+\r
+       // search current directory first...\r
+       GetCurrentDirectory (sizeof (FName), FName);\r
+       FilePath_AppendName (FName, rcstring_Load (pData->Instance, IDS_INIFILENAME), FName);\r
+       strcpy (pData->IniFilename, FName);\r
+\r
+       if (_access (FName, 0) != 0)\r
+       {\r
+               char ModuleFilename[MAX_PATH];\r
+\r
+               GetModuleFileName (NULL, ModuleFilename, sizeof (ModuleFilename));\r
+               FilePath_GetDriveAndDir (ModuleFilename, FName);\r
+               FilePath_AppendName (FName, rcstring_Load (pData->Instance, IDS_INIFILENAME), FName);\r
+               if (_access (FName, 0) != 0)\r
+               {\r
+                       // no ini file.  Set defaults and exit.\r
+                       return;\r
+               }\r
+               strcpy (pData->IniFilename, FName);\r
+       }\r
+       // pData->IniFilename has full path to .INI file\r
+\r
+       // load rotation values\r
+       {\r
+               char sRot[100];\r
+\r
+               GetPrivateProfileString ("Options", "XRot", "0", sRot, sizeof (sRot), FName);\r
+               pData->InitialXRot = (geFloat)atof (sRot);\r
+\r
+               GetPrivateProfileString ("Options", "YRot", "0", sRot, sizeof (sRot), FName);\r
+               pData->InitialYRot = (geFloat)atof (sRot);\r
+\r
+               GetPrivateProfileString ("Options", "LastDir", "", pData->LastDir, sizeof (pData->LastDir), FName);\r
+       }\r
+}\r
+\r
+// Saves the current rotations to the ini file as the "Front" rotations.\r
+static void ActView_SaveFront\r
+       (\r
+         ActView_WindowData *pData\r
+       )\r
+{\r
+       // Set front rotations...\r
+       pData->InitialXRot = pData->XRotActor;\r
+       pData->InitialYRot = pData->YRotActor;\r
+\r
+       // IniFilename should have been setup by LoadOptions function...\r
+       if (pData->IniFilename[0] != '\0')\r
+       {\r
+               char sRot[100];\r
+\r
+               sprintf (sRot, "%f", pData->InitialXRot);\r
+               WritePrivateProfileString ("Options", "XRot", sRot, pData->IniFilename);\r
+               sprintf (sRot, "%f", pData->InitialYRot);\r
+               WritePrivateProfileString ("Options", "YRot", sRot, pData->IniFilename);\r
+       }\r
+}\r
+\r
+static BOOL SetRenderCursor (ActView_WindowData *pData, int Mode)\r
+{\r
+       // If the mouse is in the render window, then set the cursor to reflect\r
+       // the current mouse mode.\r
+       RECT WindowRect;\r
+       POINT pt;\r
+\r
+       pData->MouseMode = Mode;\r
+\r
+       GetCursorPos (&pt);\r
+\r
+       GetWindowRect (GetDlgItem (pData->hwnd, IDC_RENDERWIN), &WindowRect);\r
+       if (PtInRect (&WindowRect, pt))\r
+       {\r
+               int CursorId = -1;\r
+\r
+               // determine which cursor to load\r
+               switch (pData->MouseMode)\r
+               {\r
+                       case AWM_ZOOM :\r
+                               CursorId = IDC_ZOOM;\r
+                               break;\r
+                       case AWM_PAN :\r
+                               CursorId = IDC_PAN;\r
+                               break;\r
+                       case AWM_ROTATE :\r
+                               CursorId = IDC_ROTATE;\r
+                               break;\r
+                       default :\r
+                               break;\r
+               }\r
+               // If mouse mode is set, then load and display the proper cursor.\r
+               if (CursorId != -1)\r
+               {\r
+                       SetCursor ((HCURSOR)LoadCursor (pData->Instance, MAKEINTRESOURCE (CursorId)));\r
+                       return TRUE;\r
+               }\r
+       }\r
+\r
+       return FALSE;\r
+}\r
+\r
+// Sets the current frame time to NewFrameTime\r
+// This will clamp the values to the range StartExtent..EndExtent\r
+static void ActView_SetFrameTime (ActView_WindowData *pData, const geFloat fTime)\r
+{\r
+       geFloat NewFrameTime = fTime;\r
+\r
+       if (NewFrameTime < pData->StartExtent)\r
+       {\r
+               NewFrameTime = pData->StartExtent;\r
+       }\r
+       if (NewFrameTime > pData->EndExtent)\r
+       {\r
+               NewFrameTime = pData->EndExtent;\r
+       }\r
+       // Set current frame time\r
+       pData->LastFrameTime = NewFrameTime;\r
+       // adjust motion start time so that it's consistent with current time\r
+       pData->MotionStartTime = \r
+               (DWORD)(timeGetTime() - \r
+               (1000.0f * (pData->LastFrameTime - pData->StartExtent)/floatPercent (pData->Speed)));\r
+       // and set the slider to reflect the new time\r
+       SetSliderTime (pData->hwnd, IDC_SLIDERTIME, pData->LastFrameTime);\r
+}\r
+\r
+// Update the speed value\r
+// Gets the value from the edit control, validates it, and if good sets the value\r
+// in the spinner and in the program data.\r
+static void ActView_UpdateSpeed (ActView_WindowData *pData)\r
+{\r
+       UINT NewValue;\r
+       BOOL IsOk;\r
+\r
+       // Get the value\r
+       NewValue = GetDlgItemInt (pData->hwnd, IDC_EDITSPEED, &IsOk, FALSE);\r
+       if (IsOk && (NewValue > 0) && (NewValue <= 10000))\r
+       {\r
+               // Got a new speed value.\r
+               // We need to adjust the speed, but keep the current time the same.\r
+               // So update the speed value and then change the motion start time\r
+               // to reflect the new value.\r
+               pData->Speed = NewValue;\r
+               ActView_SetFrameTime (pData, pData->LastFrameTime);\r
+       }\r
+       // Be sure that the edit control matches stored data values\r
+       SetEditControlValue (pData->hwnd, IDC_EDITSPEED, IDC_SPINSPEED, pData->Speed);\r
+}\r
+\r
+// Add TimeDelta (expressed in 100ths of a second) to the current frame time\r
+static void ActView_AdjustFrameTime (ActView_WindowData *pData, int TimeDelta)\r
+{\r
+       geFloat fDelta = floatPercent (TimeDelta);\r
+\r
+       ActView_SetFrameTime (pData, pData->LastFrameTime + fDelta);\r
+}\r
+\r
+// Update the actor scale value.\r
+// Gets the value from the edit control, validates it, and if good sets the value\r
+// in the spinner and in the program data, and changes the actor's scale.\r
+static void ActView_UpdateScale (ActView_WindowData *pData)\r
+{\r
+       UINT NewValue;\r
+       BOOL IsOk;\r
+\r
+       // Get the value\r
+       NewValue = GetDlgItemInt (pData->hwnd, IDC_EDITSCALE, &IsOk, FALSE);\r
+       if (IsOk && (NewValue > 0) && (NewValue <= 10000))\r
+       {\r
+               // if it's good, update everything\r
+               pData->Scale = NewValue;\r
+               // If an actor is loaded, change its size\r
+               if (pData->Actor != NULL)\r
+               {\r
+                       geFloat fScale = floatPercent (pData->Scale);\r
+                       geActor_SetScale (pData->Actor, fScale, fScale, fScale);\r
+               }\r
+       }\r
+       // in any case, make sure that the edit control matches our value.\r
+       SetEditControlValue (pData->hwnd, IDC_EDITSCALE, IDC_SPINSCALE, pData->Scale);\r
+}\r
+\r
+// Updates the FrameDelta value\r
+static void ActView_UpdateFrameDelta (ActView_WindowData *pData)\r
+{\r
+       UINT NewValue;\r
+       BOOL IsOk;\r
+\r
+       NewValue = GetDlgItemInt (pData->hwnd, IDC_EDITFRAMETIME, &IsOk, FALSE);\r
+       if (IsOk && (NewValue > 0) && (NewValue <= 100))\r
+       {\r
+               pData->FrameDelta = NewValue;\r
+       }\r
+       // make sure that edit control always reflects current data value\r
+       SetEditControlValue (pData->hwnd, IDC_EDITFRAMETIME, IDC_SPINFRAMETIME, pData->FrameDelta);\r
+}\r
+\r
+\r
+// Select a new motion.\r
+static void ActView_SelectMotion \r
+       (\r
+         ActView_WindowData *pData,\r
+         int NewMotion\r
+       )\r
+{\r
+       pData->CurrentMotion = NewMotion;\r
+       switch (pData->CurrentMotion)\r
+       {\r
+               case DEFAULT_POSE_INDEX :\r
+                       // selected the default pose\r
+                       pData->Motion = NULL;\r
+                       break;\r
+\r
+               case BLENDED_MOTION_INDEX :\r
+                       pData->Motion = pData->BlendedMotion;\r
+                       break;\r
+\r
+               default :\r
+                       pData->Motion = geActor_GetMotionByIndex (pData->ActorDef, pData->CurrentMotion);\r
+                       break;\r
+       }\r
+       if (pData->Motion != NULL)\r
+       {                                       \r
+               geMotion_GetTimeExtents (pData->Motion, &pData->StartExtent, &pData->EndExtent);\r
+       }\r
+       else\r
+       {\r
+               pData->StartExtent = 0.0f;\r
+               pData->EndExtent = 0.0f;\r
+       }\r
+       pData->MotionLength = pData->EndExtent - pData->StartExtent;\r
+       SetSliderRange (pData, IDC_SLIDERTIME);\r
+}\r
+\r
+#pragma warning (disable:4100)\r
+static LRESULT wm_Command\r
+       (\r
+         HWND hwnd,\r
+         ActView_WindowData *pData,\r
+         WORD wNotifyCode,\r
+         WORD wID,\r
+         HWND hwndCtl\r
+       )\r
+{\r
+       switch (wID)\r
+       {\r
+               case ID_FILE_OPEN :\r
+                       PromptForActorWindow (pData);\r
+                       return 0;\r
+\r
+               case ID_FILE_EXIT :\r
+               case IDCANCEL :\r
+                       DestroyWindow (hwnd);\r
+                       return 0;\r
+\r
+               case ID_OPTIONS_FRONT :\r
+                       ActView_SaveFront (pData);\r
+                       return 0;\r
+\r
+               case ID_OPTIONS_FRAMERATE :\r
+                       pData->ShowFrameRate = !(pData->ShowFrameRate);\r
+                       ActView_SetFrameRateToggle (pData);\r
+                       return 0;\r
+\r
+               case ID_HELP_CONTENTS :\r
+                       WinHelp (hwnd, rcstring_Load (pData->Instance, IDS_HELPFILENAME), HELP_FINDER, 0);\r
+                       return 0;\r
+\r
+               case ID_HELP_ABOUT :\r
+                       About_DoDialog (hwnd, pData->Instance);\r
+                       return 0;\r
+\r
+               // Pan, Rotate, and Zoom just set the mouse mode.\r
+               // No processing is done with these modes until a click+mouse move in the render window.\r
+               case IDC_PAN :\r
+                       SetRenderCursor (pData, AWM_PAN);\r
+                       return 0;\r
+\r
+               case IDC_ROTATE :\r
+                       SetRenderCursor (pData, AWM_ROTATE);\r
+                       return 0;\r
+\r
+               case IDC_ZOOM :\r
+                       SetRenderCursor (pData, AWM_ZOOM);\r
+                       return 0;\r
+\r
+               // If a new motion is selected, then get the extents and reset the slider\r
+               case IDC_MOTIONCOMBO :\r
+                       if (wNotifyCode == CBN_SELENDOK)\r
+                       {\r
+                               int Index = SendMessage (hwndCtl, CB_GETCURSEL, 0, 0);\r
+                               int NewMotion = SendMessage (hwndCtl, CB_GETITEMDATA, Index, 0);\r
+                               ActView_SelectMotion (pData, NewMotion);\r
+                               ActView_SetFrameTime (pData, pData->StartExtent);\r
+                       }\r
+                       return 0;\r
+\r
+               case IDC_LOOPED :\r
+                       pData->Loop = (SendDlgItemMessage (hwnd, IDC_LOOPED, BM_GETCHECK, 0, 0) == 1) ? GE_TRUE : GE_FALSE;\r
+                       return 0;\r
+\r
+               case IDC_EDITSPEED :\r
+                       if (wNotifyCode == EN_KILLFOCUS)\r
+                       {\r
+                               ActView_UpdateSpeed (pData);\r
+                       }\r
+                       return 0;\r
+\r
+               case IDC_EDITSCALE :\r
+                       if (wNotifyCode == EN_KILLFOCUS)\r
+                       {\r
+                               ActView_UpdateScale (pData);\r
+                       }\r
+                       return 0;\r
+\r
+               case IDC_EDITFRAMETIME :\r
+                       if (wNotifyCode == EN_KILLFOCUS)\r
+                       {\r
+                               ActView_UpdateFrameDelta (pData);\r
+                       }\r
+                       return 0;\r
+\r
+               case IDI_PLAY :\r
+                       if (pData->Motion != NULL)\r
+                       {\r
+                               switch (pData->PlayMode)\r
+                               {\r
+                                       case PLAYMODE_STOP :\r
+                                               // if stopped, then restart at the beginning\r
+                                               pData->PlayMode = PLAYMODE_PLAY;\r
+                                               ActView_SetFrameTime (pData, pData->StartExtent);\r
+                                               break;\r
+\r
+                                       case PLAYMODE_PAUSE :\r
+                                               // if paused, then continue...\r
+                                               pData->PlayMode = PLAYMODE_PLAY;\r
+                                               ActView_SetFrameTime (pData, pData->LastFrameTime);\r
+                                               break;\r
+                               }\r
+                       }\r
+                       return 0;\r
+\r
+               case IDI_STOP :\r
+                       if (pData->Motion != NULL)\r
+                       {\r
+                               if (pData->PlayMode != PLAYMODE_STOP)\r
+                               {\r
+                                       pData->PlayMode = PLAYMODE_STOP;\r
+                               }\r
+                       }\r
+                       return 0;\r
+\r
+               case IDI_PAUSE :\r
+                       if (pData->Motion != NULL)\r
+                       {\r
+                               switch (pData->PlayMode)\r
+                               {\r
+                                       case PLAYMODE_PLAY :            // animation playing...pause it\r
+                                               pData->PlayMode = PLAYMODE_PAUSE;\r
+                                               break;\r
+\r
+                                       case PLAYMODE_STOP :\r
+                                       case PLAYMODE_PAUSE :           // animation paused...restart it\r
+                                               pData->PlayMode = PLAYMODE_PLAY;\r
+                                               ActView_SetFrameTime (pData, pData->LastFrameTime);\r
+                                               break;\r
+                               }\r
+                       }\r
+                       return 0;\r
+\r
+               case IDI_RRFRAME :\r
+                       ActView_AdjustFrameTime (pData, -(pData->FrameDelta));\r
+                       return 0;\r
+\r
+               case IDI_FFFRAME :\r
+                       ActView_AdjustFrameTime (pData, pData->FrameDelta);\r
+                       return 0;\r
+\r
+               case IDI_RRSTART :              // rewind to start of animation\r
+                       ActView_SetFrameTime (pData, pData->StartExtent);\r
+                       return 0;\r
+\r
+               case IDI_FFEND :                // go to end of animation\r
+                       ActView_SetFrameTime (pData, pData->EndExtent);\r
+                       return 0;\r
+\r
+               // Set predefined orientation.\r
+               // All of these are rotational only...translations remain\r
+               case IDC_FRONT :\r
+                       pData->XRotActor = pData->InitialXRot;\r
+                       pData->YRotActor = pData->InitialYRot;\r
+                       return 0;\r
+\r
+               case IDC_BACK :\r
+                       pData->XRotActor = pData->InitialXRot;\r
+                       pData->YRotActor = pData->InitialYRot + GE_PI;\r
+                       return 0;\r
+\r
+               case IDC_LEFT :\r
+                       pData->XRotActor = pData->InitialXRot;\r
+                       pData->YRotActor = pData->InitialYRot - GE_PI/2.0f;\r
+                       return 0;\r
+\r
+               case IDC_RIGHT :\r
+                       pData->XRotActor = pData->InitialXRot;\r
+                       pData->YRotActor = pData->InitialYRot + GE_PI/2.0f;\r
+                       return 0;\r
+\r
+               case IDC_TOP :\r
+                       pData->XRotActor = pData->InitialXRot + GE_PI/2.0f;\r
+                       pData->YRotActor = pData->InitialYRot;\r
+                       return 0;\r
+\r
+               case IDC_BOTTOM :\r
+                       pData->XRotActor = pData->InitialXRot - GE_PI/2.0f;\r
+                       pData->YRotActor = pData->InitialYRot;\r
+                       return 0;\r
+\r
+               case IDC_CENTER :\r
+                       // Put actor back at default position\r
+                       geVec3d_Clear (&pData->ActorPos);\r
+                       return 0;\r
+\r
+               case IDC_BLEND :\r
+                       if ((pData->ActorDef != NULL) && (pData->Actor != NULL))\r
+                       {\r
+                               // if blender window exists, then display it.\r
+                               if (pData->hwndBlender != NULL)\r
+                               {\r
+                                       SetForegroundWindow (pData->hwndBlender);\r
+                               }\r
+                               else\r
+                               {\r
+                                       // otherwise create it\r
+                                       pData->hwndBlender = Blender_Create (pData->hwnd, pData->Instance, pData->ActorDef, pData->BlendedMotion);\r
+                                       if (pData->hwndBlender != NULL)\r
+                                       {\r
+                                               ShowWindow (pData->hwndBlender, SW_SHOW);\r
+                                               UpdateWindow (pData->hwndBlender);\r
+                                       }\r
+                               }\r
+                               // and select the blended motion if not already selected\r
+                               if (pData->CurrentMotion != BLENDED_MOTION_INDEX)\r
+                               {\r
+                                       int Item, nItems;\r
+                                       HWND hwndCombo = GetDlgItem (pData->hwnd, IDC_MOTIONCOMBO);\r
+\r
+                                       nItems = SendMessage (hwndCombo, CB_GETCOUNT, 0, 0);\r
+                                       for (Item = 0; Item < nItems; ++Item)\r
+                                       {\r
+                                               int iMotion = SendMessage (hwndCombo, CB_GETITEMDATA, 0, 0);\r
+                                               if (iMotion == BLENDED_MOTION_INDEX)\r
+                                               {\r
+                                                       SendMessage (hwndCombo, CB_SETCURSEL, Item, 0);\r
+                                                       ActView_SelectMotion (pData, BLENDED_MOTION_INDEX);\r
+                                                       ActView_SetFrameTime (pData, pData->StartExtent);\r
+                                                       break;\r
+                                               }\r
+                                       }\r
+                               }\r
+                       }\r
+                       return 0;\r
+       }\r
+       return 0;\r
+}\r
+#pragma warning (default:4100)\r
+\r
+// Moves the control specified by id by changing the control's vertical position\r
+// as indicated by the DeltaY value.\r
+static void ActView_MoveControl\r
+       (\r
+         HWND hdlg,\r
+         int id,\r
+         int DeltaY,\r
+         int *MaxX\r
+       )\r
+{\r
+       HWND hwndCtrl;\r
+\r
+       // get the control's window handle.\r
+       hwndCtrl = GetDlgItem (hdlg, id);\r
+       if (hwndCtrl != NULL)\r
+       {\r
+               RECT WindowRect;\r
+               POINT pt;\r
+\r
+               // get its current position\r
+               GetWindowRect (hwndCtrl, &WindowRect);\r
+               // position is in screen coordinates, and we need dialog window relative\r
+               pt.x = WindowRect.left;\r
+               pt.y = WindowRect.top + DeltaY;\r
+               ScreenToClient (hdlg, &pt);\r
+\r
+               // and move the control\r
+               SetWindowPos (hwndCtrl, NULL, pt.x, pt.y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);\r
+\r
+               // and check right side for max X\r
+               pt.x = WindowRect.right;\r
+               pt.y = WindowRect.bottom + DeltaY;\r
+               ScreenToClient (hdlg, &pt);\r
+               if (pt.x > *MaxX)\r
+               {\r
+                       *MaxX = pt.x;\r
+               }\r
+       }\r
+}\r
+\r
+// Creates tooltips window and returns its handle\r
+static HWND CreateTooltipsWindow (HWND hwnd)\r
+{\r
+\r
+       // Controls that will be tipped...\r
+       static const int TooltipButtons[] =\r
+       {\r
+               IDI_PLAY,               IDI_PAUSE,      IDI_STOP,       IDI_RRSTART,    IDI_RRFRAME, \r
+               IDI_FFFRAME,    IDI_FFEND,      IDC_ZOOM,       IDC_PAN,                IDC_ROTATE,\r
+               IDC_FRONT,              IDC_BACK,       IDC_LEFT,       IDC_RIGHT,              IDC_TOP, \r
+               IDC_BOTTOM,             IDC_CENTER,     IDC_STATICCURRENTTIME,          IDC_STATICEND,\r
+               IDC_EDITSCALE,  IDC_EDITSPEED,  IDC_EDITFRAMETIME,              IDC_BLEND,\r
+               IDC_STATICSTART\r
+       };\r
+       static const int nTooltipButtons = sizeof (TooltipButtons) / sizeof (int);\r
+\r
+       int iButton;\r
+       HWND hwndTT;\r
+       HINSTANCE hInst = (HINSTANCE)GetWindowLong (hwnd, GWL_HINSTANCE);\r
+\r
+       // Create tooltip control's window\r
+       hwndTT = CreateWindowEx \r
+       (\r
+               0,\r
+               TOOLTIPS_CLASS, \r
+               NULL, \r
+               TTS_ALWAYSTIP,\r
+               CW_USEDEFAULT, CW_USEDEFAULT,\r
+               CW_USEDEFAULT, CW_USEDEFAULT,\r
+               hwnd,\r
+               (HMENU)NULL,\r
+               hInst,\r
+               NULL\r
+       );\r
+\r
+       if (hwndTT == NULL)\r
+       {\r
+               return NULL;\r
+       }\r
+\r
+       // Add each of the controls in the array to the tooltip\r
+       for (iButton = 0; iButton < nTooltipButtons; ++iButton)\r
+       {\r
+               TOOLINFO ti;\r
+               char TipBuffer[MAX_PATH];\r
+\r
+               TipBuffer[0] = '\0';\r
+               LoadString (hInst, TooltipButtons[iButton], TipBuffer, sizeof (TipBuffer));\r
+               ti.cbSize = sizeof (TOOLINFO);\r
+               ti.uFlags = TTF_IDISHWND;\r
+               ti.hwnd = hwnd;\r
+               ti.uId = (UINT)GetDlgItem (hwnd, TooltipButtons[iButton]);\r
+               ti.hinst = 0;\r
+               ti.lpszText = LPSTR_TEXTCALLBACK;\r
+               SendMessage (hwndTT, TTM_ADDTOOL, 0, (LPARAM)&ti);\r
+       }\r
+       return hwndTT;\r
+}\r
+\r
+// Process hi resolution timer messages.\r
+#pragma warning (disable:4100)\r
+static void CALLBACK hiresTimerProc (UINT uID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2)\r
+{\r
+       // The user data should be the window handle.\r
+       HWND hwnd = (HWND)dwUser;\r
+       // get the data\r
+       ActView_WindowData *pData = (ActView_WindowData *)GetWindowLong (hwnd, GWL_USERDATA);\r
+\r
+       // if there's no user data, then this message isn't for us.\r
+       // Don't know how to handle it, so just quit.\r
+       if (pData == NULL)\r
+       {\r
+               return;\r
+       }\r
+\r
+       // Well, if the timer id matches the timer id we created, then go for it.\r
+       if ((pData->hiresTimer != 0) && (uID == (UINT)pData->hiresTimer))\r
+       {\r
+               if (pData->ProcessingTimerMessage == FALSE)\r
+               {\r
+                       // we use a flag to prevent overflowing the queue on a slow machine\r
+                       pData->ProcessingTimerMessage = TRUE;\r
+                       PostMessage (hwnd, pData->TimerMessageId, uID, 0);\r
+               }\r
+       }\r
+}\r
+#pragma warning (default:4100)\r
+\r
+static BOOL ActView_InitializeDialog (HWND hwnd)\r
+{\r
+       ActView_WindowData *pData;\r
+\r
+       // allocate window local data structure\r
+       pData = GE_RAM_ALLOCATE_STRUCT (ActView_WindowData);\r
+       if (pData == NULL)\r
+       {\r
+               DestroyWindow (hwnd);\r
+               return TRUE;\r
+       }\r
+\r
+       // and initialize it\r
+       pData->Instance         = (HINSTANCE)GetWindowLong (hwnd, GWL_HINSTANCE);\r
+       pData->hwnd                     = hwnd;\r
+       *pData->ActorFilename = '\0';\r
+       *pData->LastDir         = '\0';\r
+       pData->Camera           = NULL;\r
+       pData->World            = NULL;\r
+       pData->Engine           = NULL;\r
+       pData->Actor            = NULL;\r
+       pData->ActorDef         = NULL;\r
+       pData->LastX            = 0;\r
+       pData->LastY            = 0;\r
+       pData->Motion           = 0;\r
+       pData->PlayMode         = PLAYMODE_STOP;\r
+       pData->MouseMode        = AWM_NONE;\r
+       pData->Scale            = 100;\r
+       pData->Speed            = 100;\r
+       pData->FrameDelta       = 5;\r
+       pData->LastFrameTime = 0.0f;\r
+       pData->Loop                     = GE_FALSE;\r
+       pData->hwndTT           = NULL;\r
+       pData->hwndBlender      = NULL;\r
+       pData->ShowFrameRate = FALSE;\r
+       pData->loresTimer       = 0;\r
+       pData->hiresTimer       = 0;\r
+       pData->ProcessingTimerMessage = FALSE;\r
+\r
+       // create an empty motion for the blender\r
+       pData->BlendedMotion = geMotion_Create (GE_TRUE);\r
+       if (pData->BlendedMotion == NULL)\r
+       {\r
+               return FALSE;\r
+       }\r
+\r
+       // Load program options.\r
+       ActView_LoadOptions (pData);\r
+\r
+       // Set the window data pointer in the GWL_USERDATA field\r
+       SetWindowLong (hwnd, GWL_USERDATA, (LPARAM)pData);\r
+\r
+       // set the program icon on the dialog window\r
+       SendMessage (hwnd, WM_SETICON, ICON_BIG, (LPARAM)LoadIcon (pData->Instance, MAKEINTRESOURCE (IDI_MAINICON)));\r
+\r
+\r
+       // Set scale, speed, and frame time values\r
+       SetSpinnerRange (hwnd, IDC_SPINSCALE, 1, 10000);\r
+       SetEditControlValue (hwnd, IDC_EDITSCALE, IDC_SPINSCALE, pData->Scale);\r
+\r
+       SetSpinnerRange (hwnd, IDC_SPINSPEED, 1, 10000);\r
+       SetEditControlValue (hwnd, IDC_EDITSPEED, IDC_SPINSPEED, pData->Speed);\r
+\r
+       SetSpinnerRange (hwnd, IDC_SPINFRAMETIME, 1, 100);\r
+       SetEditControlValue (hwnd, IDC_EDITFRAMETIME, IDC_SPINFRAMETIME, pData->FrameDelta);\r
+\r
+       // Setup slider\r
+       SetSliderRange (pData, IDC_SLIDERTIME);\r
+       SetSliderTime (hwnd, IDC_SLIDERTIME, 0.0f);\r
+\r
+       {\r
+               // position render window and the rest of the controls.\r
+               int DeltaY;\r
+               int RenderWindowWidth;\r
+\r
+               HWND hwndRender = GetDlgItem (hwnd, IDC_RENDERWIN);\r
+\r
+               // Initialize the dialog box.\r
+               // Set render window to proper size and position.\r
+               // Resize dialog box to fit\r
+               // Move all the other controls to the bottom of the dialog\r
+               // Initialize the engine in the render window\r
+               {\r
+                       // Size the render window.\r
+                       // When done, ClientRect will contain the required width of\r
+                       // the main window's client rect.\r
+                       int Style = GetWindowLong (hwndRender, GWL_STYLE);\r
+                       int OldBottom;\r
+                       RECT WindowRect, ClientRect;\r
+\r
+                       GetWindowRect (hwndRender, &WindowRect);\r
+                       OldBottom = WindowRect.bottom;\r
+\r
+                       // compute window size for client rect\r
+                       ClientRect.left = 0;\r
+                       ClientRect.top = 0;\r
+                       ClientRect.right = ACTOR_WINDOW_WIDTH - 1;\r
+                       ClientRect.bottom = ACTOR_WINDOW_HEIGHT - 1;\r
+\r
+                       AdjustWindowRect (&ClientRect, Style, FALSE);   // FALSE == No menu\r
+                       {\r
+                               int WindowWidth = ClientRect.right - ClientRect.left + 1;\r
+                               int WindowHeight = ClientRect.bottom - ClientRect.top + 1;\r
+\r
+                               SetWindowPos \r
+                               (\r
+                                       hwndRender, 0,\r
+                                       RENDER_BORDER, RENDER_BORDER, WindowWidth, WindowHeight,\r
+                                       SWP_NOCOPYBITS | SWP_NOZORDER\r
+                               );\r
+\r
+                               // Compute DeltaY--the vertical position difference between the old\r
+                               // bottom of render window and new bottom of render window.\r
+                               GetWindowRect (hwndRender, &WindowRect);\r
+                               DeltaY = WindowRect.bottom - OldBottom;\r
+                               RenderWindowWidth = WindowRect.right - WindowRect.left - 1;\r
+                       }\r
+               }\r
+\r
+\r
+               {\r
+                       RECT ClientRect;\r
+                       int ClientWidth, ClientHeight;\r
+                       int Style;\r
+                       static int MoveableControls[] =\r
+                       {\r
+                               IDC_STATICSTART, IDC_STATICCURRENTTIME, IDC_STATICEND, IDC_SLIDERTIME,\r
+                               IDC_PAN, IDC_ROTATE, IDC_ZOOM,\r
+                               IDC_STATICMOTION, IDC_MOTIONCOMBO,\r
+                               IDC_LOOPED,\r
+                               IDC_STATICSCALE, IDC_EDITSCALE, IDC_SPINSCALE,\r
+                               IDC_STATICSPEED, IDC_EDITSPEED, IDC_SPINSPEED,\r
+                               IDC_STATICFRAME, IDC_EDITFRAMETIME, IDC_SPINFRAMETIME,\r
+                               IDC_FRONT, IDC_BACK, IDC_LEFT, IDC_RIGHT, IDC_TOP, IDC_BOTTOM, IDC_CENTER,\r
+                               IDI_PLAY, IDI_STOP, IDI_PAUSE, IDI_RRFRAME, IDI_FFFRAME, IDI_RRSTART, IDI_FFEND,\r
+                               IDC_BLEND\r
+                       };\r
+                       static int NumControls = sizeof (MoveableControls) / sizeof (int);\r
+                       int i, MaxX;\r
+\r
+                       MaxX = RenderWindowWidth;\r
+                       // Add the DeltaY value (computed above) to the position of all dialog controls\r
+                       // except the render window.\r
+                       for (i = 0; i < NumControls; ++i)\r
+                       {\r
+                               ActView_MoveControl (hwnd, MoveableControls[i], DeltaY, &MaxX);\r
+                       }\r
+\r
+                       GetClientRect (hwnd, &ClientRect);\r
+                       // add border for render window\r
+                       ClientRect.bottom += DeltaY + RENDER_BORDER;\r
+                       ClientRect.right = 2*RENDER_BORDER + MaxX;\r
+\r
+                       // adjust the dialog window's size.\r
+                       Style = GetWindowLong (hwnd, GWL_STYLE);\r
+                       AdjustWindowRect (&ClientRect, Style, TRUE);\r
+                       ClientWidth = ClientRect.right - ClientRect.left + 1;\r
+                       ClientHeight = ClientRect.bottom - ClientRect.top + 1;\r
+                       {\r
+                               int left, top;\r
+\r
+                               // Center the dialog on the screen\r
+                               left = (GetSystemMetrics (SM_CXSCREEN) - ClientWidth)/2;\r
+                               top = (GetSystemMetrics (SM_CYSCREEN) - ClientHeight)/2;\r
+\r
+                               SetWindowPos\r
+                               (\r
+                                       hwnd, NULL,\r
+                                       left, top, ClientWidth, ClientHeight,\r
+                                       SWP_NOCOPYBITS | SWP_NOZORDER\r
+                               );\r
+                       }\r
+                       \r
+                       // Now center the rendered window horizontally in the dialog\r
+                       {\r
+                               RECT rectRender;\r
+                               RECT rectParent;\r
+                               POINT pt;\r
+\r
+                               GetWindowRect (hwnd, &rectParent);\r
+                               GetWindowRect (hwndRender, &rectRender);\r
+\r
+                               pt.x = rectRender.left;\r
+                               pt.y = rectRender.top;\r
+                               ScreenToClient (hwnd, &pt);\r
+\r
+                               pt.x = (rectParent.right - rectParent.left)/2 - RenderWindowWidth/2;\r
+                               SetWindowPos (hwndRender, NULL, pt.x, pt.y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);\r
+                       }\r
+               }\r
+\r
+               {\r
+                       // Add images to the buttons.\r
+\r
+                       // Array of button ids and image identifiers\r
+                       static const int ButtonImages[][2] =\r
+                       {\r
+                               {IDI_PLAY,              IDI_PLAY},              // Button ID, image ID\r
+                               {IDI_PAUSE,             IDI_PAUSE},\r
+                               {IDI_STOP,              IDI_STOP},\r
+                               {IDI_RRFRAME,   IDI_RRFRAME},\r
+                               {IDI_FFFRAME,   IDI_FFFRAME},\r
+                               {IDI_RRSTART,   IDI_RRSTART},\r
+                               {IDI_FFEND,             IDI_FFEND},\r
+                               {IDC_ZOOM,              IDI_ZOOM},\r
+                               {IDC_PAN,               IDI_PAN},\r
+                               {IDC_ROTATE,    IDI_ROTATE},\r
+                               {IDC_BLEND,             IDI_BLEND}\r
+                       };\r
+                       static const int nButtons = sizeof (ButtonImages) / (2*sizeof (int));\r
+                       int iButton;\r
+\r
+                       for (iButton = 0; iButton < nButtons; ++iButton)\r
+                       {\r
+                               // set the button image\r
+                               SendDlgItemMessage \r
+                               (\r
+                                       hwnd,\r
+                                       ButtonImages[iButton][0],\r
+                                       BM_SETIMAGE, \r
+                                       IMAGE_ICON, \r
+                                       (LPARAM)LoadIcon (pData->Instance, MAKEINTRESOURCE (ButtonImages[iButton][1]))\r
+                               );\r
+                       }\r
+               }\r
+\r
+               /*\r
+                 Create the tooltips window so we can do flyby hints.\r
+                 If the window is created successfully, then we install a message filter hook \r
+                 so the dialog can capture and respond to mouse movement messages and thus\r
+                 provide the tooltips.\r
+               */\r
+               pData->hwndTT = CreateTooltipsWindow (hwnd);\r
+               if (pData->hwndTT != NULL)\r
+               {\r
+                       ActView_ToolHook = SetWindowsHookEx (WH_GETMESSAGE, (HOOKPROC)ActView_HookProc, NULL, GetCurrentThreadId ());\r
+               }\r
+       }\r
+\r
+       DragAcceptFiles (hwnd, TRUE);\r
+\r
+       return TRUE;\r
+}\r
+\r
+static void ActView_ShutdownAll\r
+       (\r
+         HWND hwnd,\r
+         ActView_WindowData *pData\r
+       )\r
+{\r
+       // don't want no more files.\r
+       DragAcceptFiles (hwnd, FALSE);\r
+\r
+       // Uninstall the message hook (ugliness ensues if you forget this)\r
+       if (ActView_ToolHook != NULL)\r
+       {\r
+               UnhookWindowsHookEx (ActView_ToolHook);\r
+               ActView_ToolHook = NULL;\r
+       }\r
+\r
+       // save last directory\r
+       if (*pData->IniFilename != '\0')\r
+       {\r
+               WritePrivateProfileString ("Options", "LastDir", pData->LastDir, pData->IniFilename);\r
+       }\r
+\r
+       // When the window is closed, we need to notify the parent\r
+       // so that it can remove us from its list.\r
+       // We also need to free our local data.\r
+       if (pData != NULL)\r
+       {\r
+               // Free all allocated data\r
+\r
+               // shut down timers first thing...\r
+               if (pData->loresTimer != 0)\r
+               {\r
+                       KillTimer (hwnd, pData->loresTimer);\r
+                       pData->loresTimer = 0;\r
+               }\r
+               if (pData->hiresTimer != 0)\r
+               {\r
+                       timeKillEvent (pData->hiresTimer);\r
+                       pData->hiresTimer = 0;\r
+                       timeEndPeriod (DESIRED_MMTIMER_RESOLUTION);\r
+               }\r
+\r
+               // Shut down the engine and all its associated stuff\r
+               if (pData->BlendedMotion != NULL)\r
+               {\r
+                       geMotion_Destroy (&pData->BlendedMotion);\r
+                       pData->BlendedMotion = NULL;\r
+               }\r
+\r
+               if (pData->Actor != NULL)\r
+               {\r
+                       geWorld_RemoveActor (pData->World, pData->Actor);\r
+                       geActor_Destroy (&pData->Actor);\r
+                       pData->Actor = NULL;\r
+               }\r
+\r
+               if (pData->ActorDef != NULL)\r
+               {\r
+                       geActor_DefDestroy (&pData->ActorDef);\r
+                       pData->ActorDef = NULL;\r
+               }\r
+\r
+               if (pData->Camera != NULL)\r
+               {\r
+                       geCamera_Destroy (&pData->Camera);\r
+                       pData->Camera = NULL;\r
+               }\r
+               if (pData->World != NULL)\r
+               {\r
+                       geWorld_Free (pData->World);\r
+                       pData->World = NULL;\r
+               }\r
+\r
+               if (pData->Engine != NULL)\r
+               {\r
+                       geEngine_Free (pData->Engine);\r
+                       pData->Engine           = NULL;\r
+               }\r
+       }\r
+\r
+       if (pData != NULL)\r
+       {\r
+               geRam_Free (pData);\r
+       }\r
+       SetWindowLong (hwnd, GWL_USERDATA, (LPARAM)NULL);\r
+}\r
+\r
+#pragma warning (disable:4100)\r
+static BOOL CALLBACK ActView_DlgProc\r
+       (\r
+         HWND hwnd,\r
+         UINT msg,\r
+         WPARAM wParam,\r
+         LPARAM lParam\r
+       )\r
+{\r
+       ActView_WindowData *pData = ActView_GetWindowData (hwnd);\r
+\r
+       // if the message is a wakeup call, then wake up and return.\r
+       if (msg == InstCheck_GetUniqueMessageId ())\r
+       {\r
+               if (IsIconic(hwnd))\r
+               {\r
+                       ShowWindow(hwnd, SW_RESTORE);\r
+               }\r
+               SetForegroundWindow (hwnd);\r
+               return 0;\r
+       }\r
+\r
+       // Process our timer messages.\r
+       if ((pData != NULL) && (msg == pData->TimerMessageId))\r
+       {\r
+               if (((pData->hiresTimer != 0) && ((MMRESULT)wParam == pData->hiresTimer)) ||\r
+                       ((pData->loresTimer != 0) && ((UINT)wParam == pData->loresTimer)))\r
+               {\r
+                       ActView_UpdateFrame (pData);\r
+                       // clear the flag so another timer message can come through\r
+                       pData->ProcessingTimerMessage = FALSE;\r
+                       return FALSE;\r
+               }\r
+       }\r
+\r
+       switch (msg)\r
+       {\r
+               case WM_INITDIALOG :\r
+                       return ActView_InitializeDialog (hwnd);\r
+\r
+               case WM_DESTROY :\r
+                       ActView_ShutdownAll (hwnd, pData);\r
+                       PostQuitMessage (0);\r
+                       break;\r
+\r
+               case WM_COMMAND :\r
+               {\r
+                       WORD wNotifyCode = HIWORD (wParam);\r
+                       WORD wID = LOWORD (wParam);\r
+                       HWND hwndCtl = (HWND)lParam;\r
+\r
+                       return wm_Command (hwnd, pData, wNotifyCode, wID, hwndCtl);\r
+               }\r
+\r
+               case WM_DROPFILES :\r
+               {\r
+                       // Files dropped.  Only take the first one.\r
+                       HDROP hDrop;\r
+                       UINT FileCount;\r
+                       char Buff[MAX_PATH];\r
+\r
+                       hDrop = (HDROP)wParam;\r
+                       FileCount = DragQueryFile (hDrop, 0xffffffff, Buff, sizeof (Buff));\r
+                       if (FileCount > 0)\r
+                       {\r
+                               // get the first one and open it...\r
+                               DragQueryFile (hDrop, 0, Buff, sizeof (Buff));\r
+                       }\r
+                       DragFinish (hDrop);\r
+                       ActView_DoLoadActor (pData, Buff);\r
+                       return 0;\r
+               }\r
+\r
+               case WM_MOUSEMOVE :\r
+               {\r
+                       /*\r
+                         If the mouse moves in the render window and the left mouse button\r
+                         is down, then we need to move the actor or the camera based on\r
+                         the MouseMode state (Pan, Rotate, Zoom).\r
+                       */\r
+                       RECT WindowRect;\r
+                       POINT pt;\r
+\r
+                       pt.x = LOWORD (lParam);\r
+                       pt.y = HIWORD (lParam);\r
+                       /*\r
+                         The mouse coordinates we're given are window-relative.\r
+                         But the window rect that we use to determine if we're within the\r
+                         render window is in screen coordinates, so we convert the mouse pos.\r
+                       */\r
+                       ClientToScreen (hwnd, &pt);\r
+                       GetWindowRect (GetDlgItem (hwnd, IDC_RENDERWIN), &WindowRect);\r
+                       if (PtInRect (&WindowRect, pt) && IsKeyDown (VK_LBUTTON))\r
+                       {\r
+                               static geFloat Velocity = 1.0f;\r
+                               static geFloat ActorAdjust = 1.0f;\r
+                               // compute movement deltas.\r
+                               geFloat dx = (geFloat)(pt.x - pData->LastX);\r
+                               geFloat dy = (geFloat)(pt.y - pData->LastY);\r
+\r
+                               switch (pData->MouseMode)\r
+                               {\r
+                                       case AWM_PAN :\r
+                                               // pan moves the actor's position\r
+                                               pData->ActorPos.X += (ActorAdjust * dx);\r
+                                               pData->ActorPos.Y -= (ActorAdjust * dy);\r
+                                               break;\r
+\r
+                                       case AWM_ROTATE :\r
+                                               // Rotate changes the actor's orientation.\r
+                                               // 150.0f is an emperically derived value.\r
+                                               pData->XRotActor += (dy/150.0f);\r
+                                               pData->YRotActor += (dx/150.0f);\r
+                                               break;\r
+\r
+                                       case AWM_ZOOM :\r
+                                               // zoom just moves the camera.\r
+                                               pData->Dist += (Velocity * dy);\r
+                                               // don't let camera go beyond origin...\r
+                                               if (pData->Dist < Velocity)\r
+                                               {\r
+                                                       pData->Dist = Velocity;\r
+                                               }\r
+                                               break;\r
+                               }\r
+                       }\r
+                       // in any case, we update the current position\r
+                       pData->LastX = pt.x;\r
+                       pData->LastY = pt.y;\r
+\r
+                       return 0;\r
+               }\r
+\r
+               case WM_SETCURSOR :\r
+                       return SetRenderCursor (pData, pData->MouseMode);\r
+\r
+               case WM_VSCROLL :\r
+               {\r
+                       // handle spinners\r
+                       HWND hwndScrollbar = (HWND)lParam;\r
+//                     int nPos = HIWORD (wParam);\r
+\r
+                       if (hwndScrollbar == GetDlgItem (hwnd, IDC_SPINSCALE))\r
+                       {\r
+                               ActView_UpdateScale (pData);\r
+                       }\r
+                       else if (hwndScrollbar == GetDlgItem (hwnd, IDC_SPINSPEED))\r
+                       {\r
+                               ActView_UpdateSpeed (pData);\r
+                       }\r
+                       else if (hwndScrollbar == GetDlgItem (hwnd, IDC_SPINFRAMETIME))\r
+                       {\r
+                               ActView_UpdateFrameDelta (pData);\r
+                       }\r
+                       return 0;\r
+               }\r
+\r
+               case WM_HSCROLL :\r
+               {\r
+                       // handle slider\r
+                       HWND hwndScrollbar = (HWND)lParam;\r
+\r
+                       if (hwndScrollbar == GetDlgItem (hwnd, IDC_SLIDERTIME))\r
+                       {\r
+                               int nPos = SendMessage (hwndScrollbar, TBM_GETPOS, 0, 0);\r
+                               ActView_SetFrameTime (pData, floatPercent (nPos));\r
+                       }\r
+                       return 0;\r
+               }\r
+\r
+               case WM_NOTIFY :\r
+               {\r
+                       NMHDR  *pHdr = (NMHDR *)lParam;\r
+\r
+\r
+                       if (pHdr->code == TTN_NEEDTEXT)\r
+                       {\r
+                               // The tooltip control will pass a TTN_NEEDTEXT message to the\r
+                               // parent (us) when the mouse passes over one of the controls that\r
+                               // has a hint associated with it.\r
+                               TOOLTIPTEXT *ptt = (TOOLTIPTEXT *)lParam;\r
+                               int idCtrl = GetDlgCtrlID ((HWND)pHdr->idFrom);\r
+\r
+                               ptt->lpszText = (char *)rcstring_Load (pData->Instance, idCtrl);\r
+                       }\r
+                       return 0;\r
+               }\r
+\r
+               case WM_BLENDERCLOSING :\r
+                       // Message passed when the child dialog is closed.\r
+                       // If this is the same as the blender dialog, then clear our blender\r
+                       // dialog value.\r
+                       if ((HWND)wParam == pData->hwndBlender)\r
+                       {\r
+                               pData->hwndBlender = NULL;\r
+                       }\r
+                       return 0;\r
+\r
+               case WM_BLENDERMOTIONCHANGED :\r
+                       // Message passed when the blender dialog changes the motion.\r
+                       // Parent must reload motion because its time extents may have changed.\r
+                       if (pData->CurrentMotion == BLENDED_MOTION_INDEX)\r
+                       {\r
+                               // load blended motion and redraw the UI\r
+                               ActView_SelectMotion (pData, BLENDED_MOTION_INDEX);\r
+                       }\r
+                       return 0;\r
+\r
+               default :\r
+                       break;\r
+\r
+       }\r
+       return FALSE;\r
+}\r
+#pragma warning (default:4100)\r
+\r
+\r
+// Loads the Genesis3D engine.  Returns GE_TRUE if successful.\r
+// returns GE_FALSE if something failed.\r
+static geBoolean StartTheEngine\r
+       (\r
+         HWND hwndParent,\r
+         int ControlID,\r
+         ActView_WindowData *pData\r
+       )\r
+{\r
+       HWND hwnd = GetDlgItem (hwndParent, ControlID);\r
+       assert (hwnd != NULL);\r
+\r
+       //\r
+       // Start up the engine\r
+       //\r
+       pData->Engine = geEngine_Create \r
+       (\r
+               hwnd, \r
+               rcstring_Load (pData->Instance, IDS_PROGRAMBASENAME),\r
+               "."             // driver directory\r
+       );\r
+       \r
+       if (pData->Engine == NULL)\r
+       {\r
+               MyError (hwndParent, pData->Instance, IDS_CANTCREATEENGINE);\r
+               return GE_FALSE;\r
+       }\r
+\r
+       //\r
+       //      Setup the viewing rect\r
+       //\r
+       pData->Rect.Left = 0;\r
+       pData->Rect.Right = ACTOR_WINDOW_WIDTH - 1;\r
+       pData->Rect.Top = 0;\r
+       pData->Rect.Bottom = ACTOR_WINDOW_HEIGHT - 1;\r
+\r
+       // Initial position is 100 from origin along the Z axis...\r
+       pData->XRotCam = 0.0f;\r
+       pData->YRotCam = 0.0f;\r
+       pData->Dist = 100.0f;\r
+       pData->Height = 25.0f;\r
+\r
+       //\r
+       //      Create a camera\r
+       //\r
+       pData->Camera = geCamera_Create(GE_PI/2.0f, &pData->Rect);\r
+\r
+       if (pData->Camera == NULL)\r
+       {\r
+               MyError (hwndParent, pData->Instance, IDS_CANTCREATECAMERA);\r
+               return GE_FALSE;\r
+       }\r
+\r
+       // Create an empty world (this is cool, huh?)\r
+       pData->World = geWorld_Create (NULL);\r
+\r
+       if (pData->World == NULL)\r
+       {\r
+               MyError (hwndParent, pData->Instance, IDS_CANTCREATEWORLD);\r
+               return GE_FALSE;\r
+       }\r
+\r
+       if (geEngine_AddWorld (pData->Engine, pData->World) == GE_FALSE)\r
+       {\r
+               MyError (hwndParent, pData->Instance, IDS_CANTADDWORLD);\r
+               return GE_FALSE;\r
+       }\r
+\r
+       // Set some light type defaults\r
+       geWorld_SetLTypeTable (pData->World, 0, "z");\r
+       geWorld_SetLTypeTable (pData->World, 1, "mmnmmommommnonmmonqnmmo");\r
+       geWorld_SetLTypeTable (pData->World, 2, "abcdefghijklmnopqrstuvwxyzyxwvutsrqponmlkjihgfedcba");\r
+       geWorld_SetLTypeTable (pData->World, 3, "mmmmmaaaaammmmmaaaaaabcdefgabcdefg");\r
+       geWorld_SetLTypeTable (pData->World, 4, "mamamamamama");\r
+       geWorld_SetLTypeTable (pData->World, 5, "jklmnopqrstuvwxyzyxwvutsrqponmlkj");\r
+       geWorld_SetLTypeTable (pData->World, 6, "nmonqnmomnmomomno");\r
+       geWorld_SetLTypeTable (pData->World, 7, "mmmaaaabcdefgmmmmaaaammmaamm");\r
+       geWorld_SetLTypeTable (pData->World, 8, "mmmaaammmaaammmabcdefaaaammmmabcdefmmmaaaa");\r
+       geWorld_SetLTypeTable (pData->World, 9, "aaaaaaaazzzzzzzz");\r
+       geWorld_SetLTypeTable (pData->World, 10,"mmamammmmammamamaaamammma");\r
+       geWorld_SetLTypeTable (pData->World, 11,"abcdefghijklmnopqrrqponmlkjihgfedcba");\r
+\r
+       {\r
+               // Select driver from list.\r
+               // In this case, DrvList has been modified to present only\r
+               // those drivers that have a windowed mode.\r
+               geDriver *Driver;\r
+               geDriver_Mode *Mode;\r
+\r
+               DrvList_PickDriver (pData->Instance, hwndParent, pData->Engine, &Driver, &Mode);\r
+               if ((Driver == NULL) || (Mode == NULL))\r
+               {\r
+                       MyError (hwndParent, pData->Instance, IDS_CANTLOADDRIVER);\r
+                       return GE_FALSE;\r
+               }\r
+               // disable frame rate when displaying splash screen...\r
+               geEngine_EnableFrameRateCounter (pData->Engine, GE_FALSE);\r
+\r
+               if (geEngine_SetDriverAndMode (pData->Engine, Driver, Mode) == GE_FALSE)\r
+               {\r
+                       MyError (hwndParent, pData->Instance, IDS_CANTLOADDRIVER);\r
+                       return GE_FALSE;\r
+               }\r
+\r
+       }\r
+\r
+       return GE_TRUE;\r
+}\r
+\r
+\r
+#pragma warning (disable:4100)\r
+int CALLBACK WinMain\r
+      (\r
+        HINSTANCE instance,\r
+        HINSTANCE prev_instance,\r
+        LPSTR cmd_line,\r
+        int cmd_show\r
+      )\r
+{\r
+       ActView_WindowData *pData;\r
+\r
+       {\r
+               HWND prev_hwnd;\r
+\r
+               // Check for previous instance and exit if one found\r
+               prev_hwnd = InstCheck_CheckForPreviousInstance\r
+               (\r
+                       instance,\r
+                       rcstring_Load (instance, IDS_PROGRAMNAME),\r
+                       rcstring_Load (instance, IDS_UNIQUEMESSAGE)\r
+               );\r
+\r
+               if (prev_hwnd != NULL)\r
+               {\r
+                       // send wakeup call to the previous instance\r
+                       SendMessage (prev_hwnd, InstCheck_GetUniqueMessageId (), 0, 0);\r
+                       return 0;\r
+               }\r
+       }\r
+\r
+       InitCommonControls ();\r
+\r
+    // create main window.\r
+       // This is the controlling dialog.\r
+    ActView_DlgHandle = CreateDialog \r
+       (\r
+               instance, \r
+               MAKEINTRESOURCE (IDD_ACTOR),\r
+               NULL, \r
+               ActView_DlgProc\r
+       );\r
+\r
+    if (ActView_DlgHandle == NULL)\r
+    {\r
+        return 0;\r
+    }\r
+\r
+       pData = ActView_GetWindowData (ActView_DlgHandle);\r
+       \r
+       ShowWindow (ActView_DlgHandle, SW_SHOWNORMAL);\r
+       UpdateWindow (ActView_DlgHandle);\r
+\r
+       // The window's created the right size, so startup the engine\r
+       if (!StartTheEngine (ActView_DlgHandle, IDC_RENDERWIN, pData))\r
+       {\r
+               MyError (ActView_DlgHandle, pData->Instance, IDS_CANTINITENGINE);\r
+               DestroyWindow (ActView_DlgHandle);\r
+               return 0;\r
+       }\r
+\r
+       // clear render window's text\r
+       // (otherwise it might show through at times...trust me)\r
+       SetDlgItemText (ActView_DlgHandle, IDC_RENDERWIN, "");\r
+\r
+       ActView_SetupTitle (pData);\r
+       ActView_SetFrameRateToggle (pData);\r
+\r
+       // Check the command line.  If a filename specified, try to load it.\r
+       {\r
+               if (*cmd_line != '\0')\r
+               {\r
+                       ActView_DoLoadActor (pData, cmd_line);\r
+               }\r
+       }\r
+\r
+       // Set up timer stuff\r
+       // Register custom window message for timer stuff\r
+       pData->TimerMessageId = RegisterWindowMessage (ActViewMessageString);\r
+       if (pData->TimerMessageId != 0)\r
+       {\r
+               if (timeBeginPeriod (DESIRED_MMTIMER_RESOLUTION) == TIMERR_NOERROR)\r
+               {\r
+                       pData->hiresTimer = timeSetEvent (DESIRED_MMTIMER_FREQUENCY, DESIRED_MMTIMER_RESOLUTION, hiresTimerProc, (DWORD)ActView_DlgHandle, TIME_PERIODIC);\r
+                       if (pData->hiresTimer == 0)\r
+                       {\r
+                               timeEndPeriod (DESIRED_MMTIMER_RESOLUTION);\r
+                       }\r
+               }\r
+       }\r
+       \r
+       if (pData->hiresTimer == 0)\r
+       {\r
+               pData->TimerMessageId = WM_TIMER;\r
+               pData->loresTimer = SetTimer (ActView_DlgHandle, LORES_TIMER_NUMBER, 50, NULL);\r
+               if (pData->loresTimer == 0)\r
+               {\r
+                       MyError (ActView_DlgHandle, pData->Instance, IDS_CANTSTARTTIMER);\r
+               }\r
+       }\r
+\r
+       {\r
+               // the application's message loop\r
+               MSG Msg;\r
+               HACCEL accel = LoadAccelerators (instance, MAKEINTRESOURCE (IDR_ACCELERATOR1));\r
+\r
+               // do the message loop thing...\r