Screenshot:

Controls:
W - Move forward
S - Move backward
A - Move left
D - Move right
Q - Move down (global axis)
E - Move up (global axis)
Download:
Here
rawr. be very afraid
*poke*
. Populate the AutoHotkey city. Pointless but somewhat fun. .
Have you thought about making a virtual avatar? Just a face that could be rotated around or an entire body? THAT would be impressive.
#NoEnv ;LoadOBJ(A_ScriptDir . "\Mesh.obj") LoadOBJ(ByRef Mesh,ObjectName) { VerticesIndex := 1, TexCoordsIndex := 1, VertexNormalsIndex := 1 Str := A_IsUnicode ? "AStr" : "Str" hOpenGL32 := DllCall("GetModuleHandle","Str","opengl32") pBegin := DllCall("GetProcAddress","UInt",hOpenGL32,Str,"glBegin") pNormal := DllCall("GetProcAddress","UInt",hOpenGL32,Str,"glNormal3f") pTexCoord := DllCall("GetProcAddress","UInt",hOpenGL32,Str,"glTexCoord2f") pVertex := DllCall("GetProcAddress","UInt",hOpenGL32,Str,"glVertex3f") pEnd := DllCall("GetProcAddress","UInt",hOpenGL32,Str,"glEnd") ListIndex := DllCall("opengl32\glGenLists","Int",1) DllCall("opengl32\glNewList","UInt",ListIndex,"UInt",0x1300) ;GL_COMPILE Loop, Parse, Mesh, `n, `r { Temp1 := InStr(A_LoopField," "), Action := SubStr(A_LoopField,1,Temp1 - 1), Temp1 := SubStr(A_LoopField,Temp1 + 1) If IsLabel("LoadOBJAction" . Action) Gosub, LoadOBJAction%Action% } DllCall("opengl32\glEndList") Return, ListIndex . "|0,0,0|0,0,0|1,1,1|" LoadOBJActionv: Vertices%VerticesIndex% := Temp1, VerticesIndex ++ Return LoadOBJActionvt: TexCoords%TexCoordsIndex% := Temp1, TexCoordsIndex ++ Return LoadOBJActionvn: VertexNormals%VertexNormalsIndex% := Temp1, VertexNormalsIndex ++ Return LoadOBJActionf: DllCall(pBegin,"UInt",0x9) ;GL_POLYGON Loop, Parse, Temp1, %A_Space% { StringSplit, TempVar, A_LoopField, / If TempVar3 { StringSplit, TempVertexNormals, VertexNormals%TempVar3%, %A_Space% DllCall(pNormal,"Float",TempVertexNormals1,"Float",TempVertexNormals2,"Float",TempVertexNormals3) } If TempVar2 { StringSplit, TempTexCoords, TexCoords%TempVar2%, %A_Space% DllCall(pTexCoord,"Float",TempTexCoords1,"Float",TempTexCoords2) } StringSplit, TempVertices, Vertices%TempVar1%, %A_Space% DllCall(pVertex,"Float",TempVertices1,"Float",TempVertices2,"Float",TempVertices3) } DllCall(pEnd) Return }
Some ideas:
• Full screen mode (F4?)
• Fly around mode (no actions needed)
• Screensaver! (connected to the previous)
couple notes:
doesn't work with BBLean shell. no window shows and my mouse gets locked in the upper-middle of the screen. but other OpenGL games work just fine... even your other AHK3d doodads.
and
don't be so wimpy with the starting values!
I changed the fog to start at 100 and end at 200
and made the city 100x100 and up to 12 tall with no fps drop and instant load time (on a 5 year old pc)