Initial commit: ROW Client source code
Game client codebase including: - CharacterActionControl: Character and creature management - GlobalScript: Network, items, skills, quests, utilities - RYLClient: Main client application with GUI and event handlers - Engine: 3D rendering engine (RYLGL) - MemoryManager: Custom memory allocation - Library: Third-party dependencies (DirectX, boost, etc.) - Tools: Development utilities 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,418 @@
|
||||
VERSION 5.00
|
||||
Begin VB.Form Form1
|
||||
Caption = "Vertex Blend"
|
||||
ClientHeight = 4485
|
||||
ClientLeft = 60
|
||||
ClientTop = 345
|
||||
ClientWidth = 5640
|
||||
Icon = "vertexblend.frx":0000
|
||||
LinkTopic = "Form1"
|
||||
ScaleHeight = 299
|
||||
ScaleMode = 3 'Pixel
|
||||
ScaleWidth = 376
|
||||
StartUpPosition = 3 'Windows Default
|
||||
End
|
||||
Attribute VB_Name = "Form1"
|
||||
Attribute VB_GlobalNameSpace = False
|
||||
Attribute VB_Creatable = False
|
||||
Attribute VB_PredeclaredId = True
|
||||
Attribute VB_Exposed = False
|
||||
'-----------------------------------------------------------------------------
|
||||
' File: VertexBlend.frm
|
||||
'
|
||||
' Desc: Example code showing how to do a skinning effect, using the vertex
|
||||
' blending feature of Direct3D. Normally, Direct3D transforms each
|
||||
' vertex through the world matrix. The vertex blending feature,
|
||||
' however, uses mulitple world matrices and a per-vertex blend factor
|
||||
' to transform each vertex.
|
||||
'
|
||||
' Copyright (C) 1999-2001 Microsoft Corporation. All rights reserved.
|
||||
'-----------------------------------------------------------------------------
|
||||
|
||||
|
||||
Option Explicit
|
||||
|
||||
Const D3DVBF_DISABLE = 0 ' Disable vertex blending
|
||||
Const D3DVBF_1WEIGHTS = 1 ' 2 matrix blending
|
||||
Const D3DVBF_2WEIGHTS = 2 ' 3 matrix blending
|
||||
Const D3DVBF_3WEIGHTS = 3 ' 4 matrix blending
|
||||
Const D3DVBF_0WEIGHTS = 256 ' one matrix is used with weight 1.0
|
||||
|
||||
'-----------------------------------------------------------------------------
|
||||
' Name: struct D3DBLENDVERTEX
|
||||
' Desc: Custom vertex which includes a blending factor
|
||||
'-----------------------------------------------------------------------------
|
||||
Private Type D3DBLENDVERTEX
|
||||
|
||||
v As D3DVECTOR
|
||||
blend As Single
|
||||
n As D3DVECTOR
|
||||
tu As Single
|
||||
tv As Single
|
||||
|
||||
End Type
|
||||
|
||||
Const D3DFVF_BLENDVERTEX = (D3DFVF_XYZB1 Or D3DFVF_NORMAL Or D3DFVF_TEX1)
|
||||
|
||||
Dim m_Object As CD3DMesh
|
||||
Dim m_matUpperArm As D3DMATRIX
|
||||
Dim m_matLowerArm As D3DMATRIX
|
||||
Dim m_mediadir As String
|
||||
Dim g_ftime As Single
|
||||
|
||||
Dim m_bInit As Boolean ' Indicates that d3d has been initialized
|
||||
Dim m_bMinimized As Boolean ' Indicates that display window is minimized
|
||||
|
||||
|
||||
'-----------------------------------------------------------------------------
|
||||
' Name: Form_Load()
|
||||
' Desc:
|
||||
'-----------------------------------------------------------------------------
|
||||
Private Sub Form_Load()
|
||||
|
||||
|
||||
' Show the form
|
||||
Me.Show
|
||||
DoEvents
|
||||
|
||||
|
||||
Me.Caption = "VertexBlend: Surface Skinning Example"
|
||||
|
||||
|
||||
|
||||
' Initialize D3D
|
||||
' Note: D3DUtil_Init will attempt to use D3D Hardware acceleartion.
|
||||
' If it is not available it attempt to use the Software Reference Rasterizer.
|
||||
' If all fail it will display a message box indicating so.
|
||||
'
|
||||
m_bInit = D3DUtil_Init(Me.hwnd, True, 0, 0, D3DDEVTYPE_HAL, Nothing)
|
||||
If Not (m_bInit) Then End
|
||||
|
||||
|
||||
' Find and set the path to our media
|
||||
m_mediadir = FindMediaDir("mslogo.x")
|
||||
D3DUtil_SetMediaPath m_mediadir
|
||||
|
||||
' Create new D3D mesh objects and loads content from disk
|
||||
InitDeviceObjects
|
||||
|
||||
' Sets the state for those objects and the current D3D device
|
||||
RestoreDeviceObjects
|
||||
|
||||
' Start our timer
|
||||
DXUtil_Timer TIMER_start
|
||||
|
||||
' Run the simulation forever
|
||||
' See Form_Keydown for exit processing
|
||||
Do While True
|
||||
|
||||
' Increment the simulation
|
||||
FrameMove
|
||||
|
||||
' Render one image of the simulation
|
||||
If Render Then
|
||||
|
||||
' Present the image to the screen
|
||||
D3DUtil_PresentAll g_focushwnd
|
||||
End If
|
||||
|
||||
' Allow for events to get processed
|
||||
DoEvents
|
||||
|
||||
Loop
|
||||
|
||||
End Sub
|
||||
|
||||
'-----------------------------------------------------------------------------
|
||||
' Name: Form_KeyDown()
|
||||
' Desc: Process key messages for exit and change device
|
||||
'-----------------------------------------------------------------------------
|
||||
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
|
||||
Select Case KeyCode
|
||||
|
||||
Case vbKeyEscape
|
||||
Unload Me
|
||||
|
||||
Case vbKeyF2
|
||||
|
||||
' Pause the timer
|
||||
DXUtil_Timer TIMER_STOP
|
||||
|
||||
' Bring up the device selection dialog
|
||||
' we pass in the form so the selection process
|
||||
' can make calls into InitDeviceObjects
|
||||
' and RestoreDeviceObjects
|
||||
frmSelectDevice.SelectDevice Me
|
||||
|
||||
' Restart the timer
|
||||
DXUtil_Timer TIMER_start
|
||||
|
||||
Case vbKeyReturn
|
||||
|
||||
' Check for Alt-Enter if not pressed exit
|
||||
If Shift <> 4 Then Exit Sub
|
||||
|
||||
' If we are windowed go fullscreen
|
||||
' If we are fullscreen returned to windowed
|
||||
If g_d3dpp.Windowed Then
|
||||
D3DUtil_ResetFullscreen
|
||||
Else
|
||||
D3DUtil_ResetWindowed
|
||||
End If
|
||||
|
||||
' Call Restore after ever mode change
|
||||
' because calling reset looses state that needs to
|
||||
' be reinitialized
|
||||
RestoreDeviceObjects
|
||||
|
||||
End Select
|
||||
End Sub
|
||||
|
||||
|
||||
'-----------------------------------------------------------------------------
|
||||
' Name: Form_Resize()
|
||||
' Desc: hadle resizing of the D3D backbuffer
|
||||
'-----------------------------------------------------------------------------
|
||||
Private Sub Form_Resize()
|
||||
|
||||
' If D3D is not initialized then exit
|
||||
If Not m_bInit Then Exit Sub
|
||||
|
||||
' If we are in a minimized state stop the timer and exit
|
||||
If Me.WindowState = vbMinimized Then
|
||||
DXUtil_Timer TIMER_STOP
|
||||
m_bMinimized = True
|
||||
Exit Sub
|
||||
|
||||
' If we just went from a minimized state to maximized
|
||||
' restart the timer
|
||||
Else
|
||||
If m_bMinimized = True Then
|
||||
DXUtil_Timer TIMER_start
|
||||
m_bMinimized = False
|
||||
End If
|
||||
End If
|
||||
|
||||
' Dont let the window get too small
|
||||
If Me.ScaleWidth < 10 Then
|
||||
Me.width = Screen.TwipsPerPixelX * 10
|
||||
Exit Sub
|
||||
End If
|
||||
|
||||
If Me.ScaleHeight < 10 Then
|
||||
Me.height = Screen.TwipsPerPixelY * 10
|
||||
Exit Sub
|
||||
End If
|
||||
|
||||
|
||||
'reset and resize our D3D backbuffer to the size of the window
|
||||
D3DUtil_ResizeWindowed Me.hwnd
|
||||
|
||||
'All state get losts after a reset so we need to reinitialze it here
|
||||
g_lWindowWidth = Me.ScaleWidth
|
||||
g_lWindowHeight = Me.ScaleHeight
|
||||
RestoreDeviceObjects
|
||||
|
||||
End Sub
|
||||
|
||||
|
||||
'-----------------------------------------------------------------------------
|
||||
' Name: Form_Unload()
|
||||
' Desc:
|
||||
'-----------------------------------------------------------------------------
|
||||
Private Sub Form_Unload(Cancel As Integer)
|
||||
DeleteDeviceObjects
|
||||
End
|
||||
End Sub
|
||||
|
||||
'-----------------------------------------------------------------------------
|
||||
' Name: FrameMove()
|
||||
' Desc: Called once per frame, the call is the entry point for animating
|
||||
' the scene.
|
||||
'-----------------------------------------------------------------------------
|
||||
Sub FrameMove()
|
||||
g_ftime = DXUtil_Timer(TIMER_GETAPPTIME)
|
||||
|
||||
' Set the vertex blending matrices for this frame
|
||||
D3DXMatrixIdentity m_matUpperArm
|
||||
Dim vAxis As D3DVECTOR
|
||||
vAxis = vec3(2 + Sin(g_ftime * 3.1), 2 + Sin(g_ftime * 3.3), Sin(g_ftime * 3.5))
|
||||
|
||||
D3DXMatrixRotationAxis m_matLowerArm, vAxis, Sin(3 * g_ftime)
|
||||
|
||||
End Sub
|
||||
|
||||
|
||||
|
||||
'-----------------------------------------------------------------------------
|
||||
' Name: Render()
|
||||
' Desc: Called once per frame, the call is the entry point for 3d
|
||||
' rendering. This function sets up render states, clears the
|
||||
' viewport, and renders the scene.
|
||||
'-----------------------------------------------------------------------------
|
||||
Function Render() As Boolean
|
||||
Dim hr As Long
|
||||
|
||||
Render = False
|
||||
'See what state the device is in.
|
||||
hr = g_dev.TestCooperativeLevel
|
||||
If hr = D3DERR_DEVICENOTRESET Then
|
||||
g_dev.Reset g_d3dpp
|
||||
RestoreDeviceObjects
|
||||
End If
|
||||
|
||||
'dont bother rendering if we are not ready yet
|
||||
If hr <> 0 Then Exit Function
|
||||
Render = True
|
||||
|
||||
' Clear the backbuffer
|
||||
D3DUtil_ClearAll &HFF&
|
||||
|
||||
With g_dev
|
||||
.BeginScene
|
||||
|
||||
|
||||
' Enable vertex blending
|
||||
.SetRenderState D3DRS_VERTEXBLEND, D3DVBF_1WEIGHTS
|
||||
.SetTransform D3DTS_WORLD, m_matUpperArm
|
||||
.SetTransform D3DTS_WORLD1, m_matLowerArm
|
||||
|
||||
' Display the object
|
||||
m_Object.Render g_dev
|
||||
|
||||
' End the scene.
|
||||
.EndScene
|
||||
End With
|
||||
|
||||
End Function
|
||||
|
||||
|
||||
|
||||
'-----------------------------------------------------------------------------
|
||||
' Name: InitDeviceObjects()
|
||||
' Desc: Initialize scene objects.
|
||||
'-----------------------------------------------------------------------------
|
||||
Function InitDeviceObjects() As Boolean
|
||||
|
||||
Dim b As Boolean
|
||||
|
||||
Set m_Object = New CD3DMesh
|
||||
|
||||
b = m_Object.InitFromFile(g_dev, m_mediadir + "mslogo.x")
|
||||
|
||||
If Not b Then
|
||||
MsgBox "media not found"
|
||||
End
|
||||
End If
|
||||
|
||||
|
||||
' Set a custom FVF for the mesh
|
||||
m_Object.SetFVF g_dev, D3DFVF_BLENDVERTEX
|
||||
|
||||
Dim VertB As Direct3DVertexBuffer8
|
||||
Dim Vertices() As D3DBLENDVERTEX
|
||||
Dim NumVertices As Long
|
||||
Dim MinX As Single
|
||||
Dim MaxX As Single
|
||||
Dim a As Single
|
||||
Dim i As Long
|
||||
|
||||
NumVertices = m_Object.mesh.GetNumVertices()
|
||||
Set VertB = m_Object.mesh.GetVertexBuffer()
|
||||
|
||||
|
||||
MinX = 10000000000#
|
||||
MaxX = -10000000000#
|
||||
|
||||
ReDim Vertices(NumVertices)
|
||||
|
||||
'copy data into our own array
|
||||
D3DVertexBuffer8GetData VertB, 0, NumVertices * Len(Vertices(0)), 0, Vertices(0)
|
||||
|
||||
|
||||
' Calculate the min/max z values for all the vertices
|
||||
For i = 0 To NumVertices - 1
|
||||
If Vertices(i).v.x < MinX Then MinX = Vertices(i).v.x
|
||||
If Vertices(i).v.x > MaxX Then MaxX = Vertices(i).v.x
|
||||
Next
|
||||
|
||||
' Set the blend factors for the vertices
|
||||
|
||||
For i = 0 To NumVertices - 1
|
||||
a = (Vertices(i).v.x - MinX) / (MaxX - MinX)
|
||||
Vertices(i).blend = 1 - Sin(a * g_pi * 1)
|
||||
Next
|
||||
|
||||
|
||||
D3DVertexBuffer8SetData VertB, 0, NumVertices * Len(Vertices(0)), 0, Vertices(0)
|
||||
|
||||
Set VertB = Nothing
|
||||
|
||||
InitDeviceObjects = True
|
||||
|
||||
|
||||
End Function
|
||||
|
||||
'-----------------------------------------------------------------------------
|
||||
' Name: RestoreDeviceObjects()
|
||||
' Desc: Restore device-memory objects and state after a device is created or
|
||||
' resized.
|
||||
'-----------------------------------------------------------------------------
|
||||
Sub RestoreDeviceObjects()
|
||||
|
||||
' Restore mesh's local memory objects
|
||||
m_Object.RestoreDeviceObjects g_dev
|
||||
|
||||
' Set miscellaneous render states
|
||||
With g_dev
|
||||
.SetRenderState D3DRS_ZENABLE, 1 'TRUE
|
||||
.SetRenderState D3DRS_AMBIENT, &H444444
|
||||
|
||||
|
||||
' Set the projection matrix
|
||||
Dim matProj As D3DMATRIX
|
||||
D3DXMatrixPerspectiveFovLH matProj, g_pi / 4, Me.ScaleHeight / Me.ScaleWidth, 1#, 10000#
|
||||
.SetTransform D3DTS_PROJECTION, matProj
|
||||
|
||||
' Set the app view matrix for normal viewing
|
||||
Dim vEyePt As D3DVECTOR, vLookatPt As D3DVECTOR, vUpVec As D3DVECTOR
|
||||
Dim matView As D3DMATRIX
|
||||
vEyePt = vec3(0#, -5#, -10#)
|
||||
vLookatPt = vec3(0#, 0#, 0#)
|
||||
vUpVec = vec3(0#, 1#, 0#)
|
||||
D3DXMatrixLookAtLH matView, vEyePt, vLookatPt, vUpVec
|
||||
.SetTransform D3DTS_VIEW, matView
|
||||
|
||||
' Create a directional light
|
||||
Dim light As D3DLIGHT8
|
||||
D3DUtil_InitLight light, D3DLIGHT_DIRECTIONAL, 1, -1, 1
|
||||
.SetLight 1, light
|
||||
.LightEnable 1, 1 'True
|
||||
.SetRenderState D3DRS_LIGHTING, 1 'TRUE
|
||||
|
||||
|
||||
End With
|
||||
|
||||
End Sub
|
||||
|
||||
|
||||
'-----------------------------------------------------------------------------
|
||||
' Name: InvalidateDeviceObjects()
|
||||
' Desc: Called when the device-dependant objects are about to be lost.
|
||||
'-----------------------------------------------------------------------------
|
||||
Sub InvalidateDeviceObjects()
|
||||
m_Object.InvalidateDeviceObjects
|
||||
End Sub
|
||||
|
||||
|
||||
'-----------------------------------------------------------------------------
|
||||
' Name: DeleteDeviceObjects()
|
||||
' Desc: Called when the app is exitting, or the device is being changed,
|
||||
' this function deletes any device dependant objects.
|
||||
'-----------------------------------------------------------------------------
|
||||
Sub DeleteDeviceObjects()
|
||||
m_Object.Destroy
|
||||
Set m_Object = Nothing
|
||||
m_bInit = False
|
||||
End Sub
|
||||
|
||||
Reference in New Issue
Block a user