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:
2025-11-29 16:24:34 +09:00
commit e067522598
5135 changed files with 1745744 additions and 0 deletions

View File

@@ -0,0 +1,443 @@
VERSION 5.00
Object = "{F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0"; "comdlg32.ocx"
Begin VB.Form frmEffects
BorderStyle = 1 'Fixed Single
Caption = "Audio Effects using DirectMusic AudioPaths"
ClientHeight = 4845
ClientLeft = 45
ClientTop = 330
ClientWidth = 4800
Icon = "frmFX.frx":0000
LinkTopic = "Form1"
MaxButton = 0 'False
ScaleHeight = 4845
ScaleWidth = 4800
StartUpPosition = 3 'Windows Default
Begin VB.CheckBox chkLoop
Caption = "Loop Sound"
Height = 315
Left = 780
TabIndex = 15
Top = 4380
Width = 1455
End
Begin VB.CommandButton cmdStop
Caption = "&Stop"
Height = 375
Left = 3540
TabIndex = 14
Top = 4380
Width = 1095
End
Begin VB.CommandButton cmdPlay
Caption = "&Play"
Height = 375
Left = 2340
TabIndex = 13
Top = 4380
Width = 1095
End
Begin VB.Frame fraEffects
Caption = "Effects Information"
Height = 3495
Left = 120
TabIndex = 2
Top = 780
Width = 4515
Begin VB.TextBox txtFile
Height = 285
Left = 120
Locked = -1 'True
TabIndex = 9
Text = "No file loaded..."
Top = 480
Width = 3855
End
Begin VB.CommandButton cmdBrowse
Caption = "..."
Height = 285
Left = 3960
TabIndex = 8
Top = 480
Width = 315
End
Begin VB.ListBox lstAvail
Height = 1815
ItemData = "frmFX.frx":0442
Left = 120
List = "frmFX.frx":045E
TabIndex = 7
Top = 1080
Width = 1875
End
Begin VB.ListBox lstUse
Height = 1815
Left = 2400
TabIndex = 6
Top = 1080
Width = 1875
End
Begin VB.CommandButton cmdAdd
Caption = ">"
Height = 285
Left = 2040
TabIndex = 5
Top = 1500
Width = 315
End
Begin VB.CommandButton cmdRemove
Caption = "<"
Height = 285
Left = 2040
TabIndex = 4
Top = 2220
Width = 315
End
Begin VB.CommandButton cmdApply
Caption = "Apply Effects"
Height = 315
Left = 3120
TabIndex = 3
Top = 3000
Width = 1215
End
Begin VB.Label lbl
BackStyle = 0 'Transparent
Caption = "Currently loaded sound file:"
Height = 195
Index = 0
Left = 120
TabIndex = 12
Top = 240
Width = 4515
End
Begin VB.Label lbl
BackStyle = 0 'Transparent
Caption = "Available Effects"
Height = 195
Index = 1
Left = 120
TabIndex = 11
Top = 840
Width = 1215
End
Begin VB.Label lbl
BackStyle = 0 'Transparent
Caption = "Effects in use"
Height = 195
Index = 2
Left = 2700
TabIndex = 10
Top = 840
Width = 1215
End
End
Begin MSComDlg.CommonDialog cdlOpen
Left = 300
Top = 3720
_ExtentX = 847
_ExtentY = 847
_Version = 393216
End
Begin VB.Label lbl
BackStyle = 0 'Transparent
Caption = "Audio Effects using DirectMusic Audiopaths"
Height = 255
Index = 4
Left = 660
TabIndex = 1
Top = 60
Width = 3195
End
Begin VB.Label lbl
BackStyle = 0 'Transparent
Caption = "Copyright (C) 1999-2001 Microsoft Corporation, All Rights Reserved."
Height = 435
Index = 3
Left = 660
TabIndex = 0
Top = 300
Width = 3555
End
Begin VB.Image Image1
Height = 480
Left = 120
Picture = "frmFX.frx":04AF
Top = 180
Width = 480
End
End
Attribute VB_Name = "frmEffects"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'
' Copyright (C) 1999-2001 Microsoft Corporation. All Rights Reserved.
'
' File: frmFX.frm
'
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'API declare for windows folder
Private Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
Private Const mlMaxEffects As Long = 20
'Private declares for our DirectX objects
Private dx As DirectX8
Private dmp As DirectMusicPerformance8
Private dml As DirectMusicLoader8
Private dmSeg As DirectMusicSegment8
Private dmSegState As DirectMusicSegmentState8
Private Sub cmdAdd_Click()
If lstAvail.ListIndex = -1 Then 'Nothing is selected
MsgBox "Please select an available effect before attempting to add it.", vbOKOnly Or vbInformation, "Nothing selected."
Exit Sub
End If
If lstUse.ListCount >= mlMaxEffects Then
MsgBox "You cannot add more than " & CStr(mlMaxEffects) & " effects in this sample.", vbOKOnly Or vbInformation, "No more effects."
Exit Sub
End If
'Add this item to our list of effects
lstUse.AddItem lstAvail.List(lstAvail.ListIndex)
End Sub
Private Sub cmdApply_Click()
On Local Error GoTo NoFX
Dim DSEffects() As DSEFFECTDESC
Dim lResults() As Long
Dim lCount As Long
Dim dsb As DirectSoundSecondaryBuffer8
'Do we have a sound buffer
If dmSeg Is Nothing Then
MsgBox "You must first load an audio file before you can apply effects to it.", vbOKOnly Or vbInformation, "No buffer"
Exit Sub
End If
'Yup, stop a sound already playing
If dmp.IsPlaying(dmSeg, dmSegState) = True Then
MsgBox "Stop the currently playing sound before adding effects.", vbOKOnly Or vbInformation, "Sound is playing"
Exit Sub
End If
'Yes we do, do we have effects selected?
If lstUse.ListCount = 0 Then
If MsgBox("Do you want to turn off effects for this buffer?", vbYesNo Or vbQuestion, "No effects") = vbYes Then
'We need to get a DirectSoundSecondaryBuffer from the audio path
Set dsb = dmp.GetDefaultAudioPath.GetObjectinPath(DMUS_PCHANNEL_ALL, DMUS_PATH_BUFFER, 0, GUID_ALL, 0, IID_DirectSoundSecondaryBuffer)
'Before we can call SetFX on our Audio Path, we need to deactivate it first
dmp.GetDefaultAudioPath.Activate False
'Go ahead and apply our effects
dsb.SetFX 0, DSEffects, lResults
'Now we can reactivate our audio path
dmp.GetDefaultAudioPath.Activate True
Exit Sub
Else
MsgBox "You must first select some effects to use.", vbOKOnly Or vbInformation, "No effects"
Exit Sub
End If
End If
'Ok, let's apply our effects info here
'First get an array of effects structs the right size
ReDim DSEffects(lstUse.ListCount - 1)
ReDim lResults(lstUse.ListCount - 1)
For lCount = 0 To lstUse.ListCount - 1
Select Case LCase(lstUse.List(lCount))
Case "distortion"
DSEffects(lCount).guidDSFXClass = DSFX_STANDARD_DISTORTION
Case "echo"
DSEffects(lCount).guidDSFXClass = DSFX_STANDARD_ECHO
Case "chorus"
DSEffects(lCount).guidDSFXClass = DSFX_STANDARD_CHORUS
Case "flanger"
DSEffects(lCount).guidDSFXClass = DSFX_STANDARD_FLANGER
Case "compressor"
DSEffects(lCount).guidDSFXClass = DSFX_STANDARD_COMPRESSOR
Case "gargle"
DSEffects(lCount).guidDSFXClass = DSFX_STANDARD_GARGLE
Case "parameq"
DSEffects(lCount).guidDSFXClass = DSFX_STANDARD_PARAMEQ
Case "wavesreverb"
DSEffects(lCount).guidDSFXClass = DSFX_STANDARD_WAVES_REVERB
End Select
Next
'We need to get a DirectSoundSecondaryBuffer from the audio path
Set dsb = dmp.GetDefaultAudioPath.GetObjectinPath(DMUS_PCHANNEL_ALL, DMUS_PATH_BUFFER, 0, GUID_ALL, 0, IID_DirectSoundSecondaryBuffer)
'Before we can call SetFX on our Audio Path, we need to deactivate it first
dmp.GetDefaultAudioPath.Activate False
'Go ahead and apply our effects
dsb.SetFX lstUse.ListCount, DSEffects, lResults
'Now we can reactivate our audio path
dmp.GetDefaultAudioPath.Activate True
Exit Sub
NoFX:
MsgBox "This set of effects could not be set on this audio file.", vbOKOnly Or vbInformation, "Cannot set"
End Sub
Private Sub cmdBrowse_Click()
Static sCurDir As String
'We want to open a file now
cdlOpen.flags = cdlOFNHideReadOnly Or cdlOFNFileMustExist
cdlOpen.Filter = "Wave Files (*.wav)|*.wav|Music Files (*.mid;*.rmi)|*.mid;*.rmi|Segment Files (*.sgt)|*.sgt|All Audio Files|*.wav;*.mid;*.rmi;*.sgt|All Files (*.*)|*.*"
cdlOpen.FileName = vbNullString
If sCurDir = vbNullString Then
'Set the init folder to \windows\media if it exists. If not, set it to the \windows folder
Dim sWindir As String
sWindir = Space$(255)
If GetWindowsDirectory(sWindir, 255) = 0 Then
'We couldn't get the windows folder for some reason, use the c:\
cdlOpen.InitDir = "C:\"
Else
Dim sMedia As String
sWindir = Left$(sWindir, InStr(sWindir, Chr$(0)) - 1)
If Right$(sWindir, 1) = "\" Then
sMedia = sWindir & "Media"
Else
sMedia = sWindir & "\Media"
End If
'We are trying to find the windows\media directory. If it
'doesn't exist, then use the windows folder as a default
If Dir$(sMedia, vbDirectory) <> vbNullString Then
cdlOpen.InitDir = sMedia
Else
cdlOpen.InitDir = sWindir
End If
End If
Else
'No need to move folders. Stay where they picked the last file
cdlOpen.InitDir = sCurDir
End If
On Local Error GoTo ClickedCancel
cdlOpen.CancelError = True
cdlOpen.ShowOpen ' Display the Open dialog box
'Save the current information
sCurDir = GetFolder(cdlOpen.FileName)
On Local Error GoTo NoLoadSegment
'Before we load the buffer stop one if it's playing
If Not (dmSeg Is Nothing) Then
dmp.StopEx dmSeg, 0, 0
dmSeg.Unload dmp.GetDefaultAudioPath
Set dmSeg = Nothing
End If
'Now let's load the segment
dml.SetSearchDirectory sCurDir
Set dmSeg = dml.LoadSegment(cdlOpen.FileName)
If (Right$(cdlOpen.FileName, 4) = ".mid") Or (Right$(cdlOpen.FileName, 4) = ".rmi") Or (Right$(cdlOpen.FileName, 5) = ".midi") Then
dmSeg.SetStandardMidiFile
End If
dmSeg.Download dmp.GetDefaultAudioPath
txtFile.Text = cdlOpen.FileName
Exit Sub
NoLoadSegment:
If Err.Number = DSERR_BUFFERTOOSMALL Then 'This buffer isn't big enough to control effects on
MsgBox "This file isn't long enough to control effects. Please choose a longer audio file.", vbOKOnly Or vbCritical, "Couldn't load"
Else 'Some other error
MsgBox "Couldn't load this file", vbOKOnly Or vbCritical, "Couldn't load"
End If
txtFile.Text = "No file loaded..."
ClickedCancel:
End Sub
Private Sub cmdPlay_Click()
If dmSeg Is Nothing Then
MsgBox "You must first load a audio file before you can play it.", vbOKOnly Or vbInformation, "No buffer"
Exit Sub
End If
If chkLoop.Value = vbChecked Then
dmSeg.SetRepeats -1
Else
dmSeg.SetRepeats 0
End If
Set dmSegState = dmp.PlaySegmentEx(dmSeg, DMUS_SEGF_DEFAULT, 0, , dmp.GetDefaultAudioPath)
End Sub
Private Sub cmdRemove_Click()
If lstUse.ListIndex = -1 Then 'Nothing is selected
MsgBox "Please select an effect that's being used before attempting to remove it.", vbOKOnly Or vbInformation, "Nothing selected."
Exit Sub
End If
'Add this item to our list of effects
lstUse.RemoveItem lstUse.ListIndex
End Sub
Private Sub cmdStop_Click()
If dmSeg Is Nothing Then
MsgBox "You must first load an audio file before you can stop it.", vbOKOnly Or vbInformation, "No buffer"
Exit Sub
End If
dmp.StopEx dmSeg, 0, 0
End Sub
Private Sub Form_Load()
InitAudio
End Sub
Private Sub Form_Unload(Cancel As Integer)
Cleanup
End Sub
Private Sub InitAudio()
On Local Error Resume Next
Dim dma As DMUS_AUDIOPARAMS
Set dx = New DirectX8
'Create our default Performance and Loader objects
Set dmp = dx.DirectMusicPerformanceCreate
Set dml = dx.DirectMusicLoaderCreate
'We want to be able to get a buffer, and control effects.
dmp.InitAudio Me.hWnd, DMUS_AUDIOF_EAX Or DMUS_AUDIOF_BUFFERS, dma, , DMUS_APATH_DYNAMIC_3D, 128
'Make sure we did init the audio
If Err <> 0 Then 'Nope we didn't
MsgBox "Could not initialize DirectMusic." & vbCrLf & "This sample will exit.", vbOKOnly Or vbInformation, "Exiting..."
Unload Me
End If
End Sub
Private Sub Cleanup()
'Let's clean up now
If Not dmSeg Is Nothing Then
'If we are playing our file, stop it
dmp.StopEx dmSeg, 0, 0
dmSeg.Unload dmp.GetDefaultAudioPath
End If
'Destroy our objects
Set dmSeg = Nothing
If Not (dmp Is Nothing) Then dmp.CloseDown
Set dmp = Nothing
Set dml = Nothing
Set dx = Nothing
End Sub
Private Function GetFolder(ByVal sFile As String) As String
Dim lCount As Long
For lCount = Len(sFile) To 1 Step -1
If Mid$(sFile, lCount, 1) = "\" Then
GetFolder = Left$(sFile, lCount)
Exit Function
End If
Next
GetFolder = vbNullString
End Function
Private Sub lstAvail_DblClick()
'Double clicking should be the same as clicking the 'Add' button
cmdAdd_Click
End Sub
Private Sub lstUse_DblClick()
'Double clicking should be the same as clicking the 'Remove' button
cmdRemove_Click
End Sub

View File

@@ -0,0 +1,41 @@
//-----------------------------------------------------------------------------
//
// Sample Name: VB Audio Effects Sample
//
// Copyright (C) 1999-2001 Microsoft Corporation. All rights reserved.
//
// GM/GS<47> Sound Set Copyright <20>1996, Roland Corporation U.S.
//
//-----------------------------------------------------------------------------
Description
===========
The sample demonstrates:
How to use standard effects (FX) with DirectMusic
Path
====
Source: DXSDK\Samples\Multimedia\VBSamples\DirectMusic\AudioEffects
Executable: DXSDK\Samples\Multimedia\VBSamples\DirectMusic\Bin
User's Guide
============
- make sure a sound file is loaded (can be WAV, MID, SGT, or RMI)
- by default, no FX are enabled. try playing the sound to see what it
orginally sounds like.
- enable one or more FXs by adding them to the 'In use' listbox and Apply them
- Hit play to hear the FX applied.
Programming Notes
=================
To Enable a standard effect, ultimately, you need to obtain a DirectSoundSecondaryBuffer.
Fill one or more DSEFFECTDESC structs, and pass them into DirectSoundSecondaryBuffer.SetFX.

View File

@@ -0,0 +1,32 @@
Type=Exe
Reference=*\G{00020430-0000-0000-C000-000000000046}#2.0#0#stdole2.tlb#OLE Automation
Reference=*\G{E1211242-8E94-11D1-8808-00C04FC2C603}#1.0#0#dx8vb.dll#DirectX 8 for Visual Basic Type Library
Object={F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0; comdlg32.ocx
Form=frmFX.frm
Startup="frmEffects"
HelpFile=""
Command32=""
Name="vbAudioEffects"
HelpContextID="0"
CompatibleMode="0"
MajorVer=1
MinorVer=0
RevisionVer=0
AutoIncrementVer=0
ServerSupportFiles=0
VersionCompanyName="Microsoft"
CompilationType=0
OptimizationType=0
FavorPentiumPro(tm)=0
CodeViewDebugInfo=0
NoAliasing=0
BoundsCheck=0
OverflowCheck=0
FlPointCheck=0
FDIVCheck=0
UnroundedFP=0
StartMode=0
Unattended=0
Retained=0
ThreadPerObject=0
MaxNumberOfThreads=1