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,493 @@
|
||||
VERSION 5.00
|
||||
Object = "{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0"; "MSCOMCTL.OCX"
|
||||
Begin VB.Form frmMain
|
||||
BorderStyle = 1 'Fixed Single
|
||||
Caption = "DLS Sound Effects"
|
||||
ClientHeight = 4920
|
||||
ClientLeft = 45
|
||||
ClientTop = 330
|
||||
ClientWidth = 5670
|
||||
Icon = "DLSFX.frx":0000
|
||||
LinkTopic = "Form1"
|
||||
MaxButton = 0 'False
|
||||
MinButton = 0 'False
|
||||
ScaleHeight = 4920
|
||||
ScaleWidth = 5670
|
||||
StartUpPosition = 3 'Windows Default
|
||||
Begin VB.Frame Frame1
|
||||
Caption = "Heartbeat"
|
||||
Height = 3255
|
||||
Left = 120
|
||||
TabIndex = 17
|
||||
Top = 1560
|
||||
Width = 2895
|
||||
Begin VB.CommandButton cmdB7
|
||||
Caption = "&On"
|
||||
BeginProperty Font
|
||||
Name = "Arial"
|
||||
Size = 8.25
|
||||
Charset = 0
|
||||
Weight = 400
|
||||
Underline = 0 'False
|
||||
Italic = 0 'False
|
||||
Strikethrough = 0 'False
|
||||
EndProperty
|
||||
Height = 495
|
||||
Left = 480
|
||||
TabIndex = 8
|
||||
Top = 360
|
||||
Width = 735
|
||||
End
|
||||
Begin VB.CommandButton cmdOff
|
||||
Caption = "O&ff"
|
||||
Enabled = 0 'False
|
||||
BeginProperty Font
|
||||
Name = "Arial"
|
||||
Size = 8.25
|
||||
Charset = 0
|
||||
Weight = 400
|
||||
Underline = 0 'False
|
||||
Italic = 0 'False
|
||||
Strikethrough = 0 'False
|
||||
EndProperty
|
||||
Height = 495
|
||||
Left = 1800
|
||||
TabIndex = 9
|
||||
Top = 360
|
||||
Width = 735
|
||||
End
|
||||
Begin MSComctlLib.Slider sliderB7
|
||||
Height = 375
|
||||
Left = 360
|
||||
TabIndex = 11
|
||||
Top = 1440
|
||||
Width = 2295
|
||||
_ExtentX = 4048
|
||||
_ExtentY = 661
|
||||
_Version = 393216
|
||||
LargeChange = 3
|
||||
Min = 1
|
||||
Max = 13
|
||||
SelStart = 1
|
||||
Value = 1
|
||||
End
|
||||
Begin MSComctlLib.Slider sliderPitch
|
||||
Height = 375
|
||||
Left = 360
|
||||
TabIndex = 13
|
||||
Top = 2400
|
||||
Width = 2295
|
||||
_ExtentX = 4048
|
||||
_ExtentY = 661
|
||||
_Version = 393216
|
||||
LargeChange = 1365
|
||||
SmallChange = 128
|
||||
Max = 16383
|
||||
SelStart = 8065
|
||||
TickFrequency = 1365
|
||||
Value = 8065
|
||||
End
|
||||
Begin VB.Label Label2
|
||||
Caption = "&Note (B7-B8)"
|
||||
Height = 255
|
||||
Left = 480
|
||||
TabIndex = 10
|
||||
Top = 1080
|
||||
Width = 1695
|
||||
End
|
||||
Begin VB.Label lblPitch
|
||||
Caption = "&Pitch Bend"
|
||||
Height = 255
|
||||
Left = 480
|
||||
TabIndex = 12
|
||||
Top = 2040
|
||||
Width = 1815
|
||||
End
|
||||
End
|
||||
Begin VB.CommandButton cmdExit
|
||||
Cancel = -1 'True
|
||||
Caption = "E&xit"
|
||||
Height = 495
|
||||
Left = 3720
|
||||
TabIndex = 16
|
||||
Top = 3120
|
||||
Width = 1335
|
||||
End
|
||||
Begin VB.CommandButton cmdC10
|
||||
BackColor = &H00FFFFFF&
|
||||
Caption = "C&10"
|
||||
BeginProperty Font
|
||||
Name = "Arial"
|
||||
Size = 8.25
|
||||
Charset = 0
|
||||
Weight = 400
|
||||
Underline = 0 'False
|
||||
Italic = 0 'False
|
||||
Strikethrough = 0 'False
|
||||
EndProperty
|
||||
Height = 495
|
||||
Left = 4688
|
||||
TabIndex = 6
|
||||
Top = 720
|
||||
Width = 615
|
||||
End
|
||||
Begin VB.CommandButton cmdC9
|
||||
Caption = "C&9"
|
||||
BeginProperty Font
|
||||
Name = "Arial"
|
||||
Size = 8.25
|
||||
Charset = 0
|
||||
Weight = 400
|
||||
Underline = 0 'False
|
||||
Italic = 0 'False
|
||||
Strikethrough = 0 'False
|
||||
EndProperty
|
||||
Height = 495
|
||||
Left = 3968
|
||||
TabIndex = 5
|
||||
Top = 720
|
||||
Width = 615
|
||||
End
|
||||
Begin VB.CommandButton cmdC5
|
||||
Caption = "C&5"
|
||||
BeginProperty Font
|
||||
Name = "Arial"
|
||||
Size = 8.25
|
||||
Charset = 0
|
||||
Weight = 400
|
||||
Underline = 0 'False
|
||||
Italic = 0 'False
|
||||
Strikethrough = 0 'False
|
||||
EndProperty
|
||||
Height = 495
|
||||
Left = 1808
|
||||
TabIndex = 2
|
||||
Top = 720
|
||||
Width = 615
|
||||
End
|
||||
Begin VB.CommandButton cmdC4
|
||||
Caption = "C&4"
|
||||
BeginProperty Font
|
||||
Name = "Arial"
|
||||
Size = 8.25
|
||||
Charset = 0
|
||||
Weight = 400
|
||||
Underline = 0 'False
|
||||
Italic = 0 'False
|
||||
Strikethrough = 0 'False
|
||||
EndProperty
|
||||
Height = 495
|
||||
Left = 1088
|
||||
TabIndex = 1
|
||||
Top = 720
|
||||
Width = 615
|
||||
End
|
||||
Begin VB.CommandButton cmdC6
|
||||
Caption = "C&6"
|
||||
BeginProperty Font
|
||||
Name = "Arial"
|
||||
Size = 8.25
|
||||
Charset = 0
|
||||
Weight = 400
|
||||
Underline = 0 'False
|
||||
Italic = 0 'False
|
||||
Strikethrough = 0 'False
|
||||
EndProperty
|
||||
Height = 495
|
||||
Left = 2528
|
||||
TabIndex = 3
|
||||
Top = 720
|
||||
Width = 615
|
||||
End
|
||||
Begin VB.CommandButton cmdC3
|
||||
Caption = "C&3"
|
||||
BeginProperty Font
|
||||
Name = "Arial"
|
||||
Size = 8.25
|
||||
Charset = 0
|
||||
Weight = 400
|
||||
Underline = 0 'False
|
||||
Italic = 0 'False
|
||||
Strikethrough = 0 'False
|
||||
EndProperty
|
||||
Height = 495
|
||||
Left = 368
|
||||
TabIndex = 0
|
||||
Top = 720
|
||||
Width = 615
|
||||
End
|
||||
Begin VB.CommandButton cmdC7
|
||||
Caption = "C&7"
|
||||
BeginProperty Font
|
||||
Name = "Arial"
|
||||
Size = 8.25
|
||||
Charset = 0
|
||||
Weight = 400
|
||||
Underline = 0 'False
|
||||
Italic = 0 'False
|
||||
Strikethrough = 0 'False
|
||||
EndProperty
|
||||
Height = 495
|
||||
Left = 3248
|
||||
TabIndex = 4
|
||||
Top = 720
|
||||
Width = 615
|
||||
End
|
||||
Begin MSComctlLib.Slider sliderVelocity
|
||||
Height = 195
|
||||
Left = 3360
|
||||
TabIndex = 15
|
||||
Top = 1920
|
||||
Width = 2295
|
||||
_ExtentX = 4048
|
||||
_ExtentY = 344
|
||||
_Version = 393216
|
||||
LargeChange = 16
|
||||
Max = 127
|
||||
SelStart = 127
|
||||
TickFrequency = 16
|
||||
Value = 127
|
||||
End
|
||||
Begin VB.Label Label3
|
||||
Caption = "&Velocity of New Notes"
|
||||
Height = 255
|
||||
Left = 3480
|
||||
TabIndex = 14
|
||||
Top = 1560
|
||||
Width = 1935
|
||||
End
|
||||
Begin VB.Label Label1
|
||||
Alignment = 2 'Center
|
||||
Caption = "Boids.dls - ""Vocals"" Instrument Regions"
|
||||
BeginProperty Font
|
||||
Name = "Arial"
|
||||
Size = 8.25
|
||||
Charset = 0
|
||||
Weight = 400
|
||||
Underline = 0 'False
|
||||
Italic = 0 'False
|
||||
Strikethrough = 0 'False
|
||||
EndProperty
|
||||
Height = 255
|
||||
Left = 428
|
||||
TabIndex = 7
|
||||
Top = 240
|
||||
Width = 4815
|
||||
End
|
||||
End
|
||||
Attribute VB_Name = "frmMain"
|
||||
Attribute VB_GlobalNameSpace = False
|
||||
Attribute VB_Creatable = False
|
||||
Attribute VB_PredeclaredId = True
|
||||
Attribute VB_Exposed = False
|
||||
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
|
||||
'
|
||||
' Copyright (C) 1999-2001 Microsoft Corporation. All Rights Reserved.
|
||||
'
|
||||
' File: dlsfx.frm
|
||||
'
|
||||
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
|
||||
|
||||
|
||||
' This application demonstrates the use of Downloadable Sounds for sound
|
||||
' effects, and how to send MIDI notes.
|
||||
|
||||
' The DLS instruments are taken from Boids.dls. That collection actually
|
||||
' contains only a single instrument, called Vocals. However, the instrument
|
||||
' is based on different wave samples for different "regions" or ranges
|
||||
' of notes. For example, the first speech sound is used when any note
|
||||
' between C3 and B3 is sent. The speech sounds are played at the correct
|
||||
' pitch only when the note is the lowest one in the region.
|
||||
|
||||
' One of the samples, called Heartbeat, is valid for the range B7-B8.
|
||||
' Because this is not a vocal sample, we can reasonably vary the pitch
|
||||
' by playing various notes within that range, as determined by the
|
||||
' slider setting.
|
||||
|
||||
' Heartbeat is also the only sample in the DLS collection that is based
|
||||
' on a looped wave. Hence it can be played continuously for up to the
|
||||
' maximum duration of a note. The other samples will play only once
|
||||
' regardless of the duration of the note sent.
|
||||
|
||||
Option Explicit
|
||||
|
||||
Const patch = 127 ' Assigned to "Vocals" instrument in Boids.dls
|
||||
Const channel = 1
|
||||
Const hbchannel = 32
|
||||
|
||||
' NoteDur is the duration of any of the non-repeating samples. It should
|
||||
' be long enough to accommodate all the sound effects but not so long
|
||||
' that notes continue using up resources (voices) after the sample has
|
||||
' finished playing. Note that if you send the same note before the last
|
||||
' one has finished playing, it might not play properly.
|
||||
|
||||
Const NoteDurC3 = 4000 ' milliseconds
|
||||
Const NoteDurC4 = 7000 ' milliseconds
|
||||
Const NoteDurC5 = 5500 ' milliseconds
|
||||
Const NoteDurC6 = 5000 ' milliseconds
|
||||
Const NoteDurC7 = 2800 ' milliseconds
|
||||
Const NoteDurC9 = 5000 ' milliseconds
|
||||
Const NoteDurC10 = 3800 ' milliseconds
|
||||
|
||||
Dim B7Freq As Byte
|
||||
Dim B7Playing As Boolean
|
||||
Dim gVelocity As Byte
|
||||
Dim mediapath As String
|
||||
|
||||
Dim dx As New DirectX8
|
||||
Dim perf As DirectMusicPerformance8
|
||||
Dim coll As DirectMusicCollection8
|
||||
Dim seg As DirectMusicSegment8
|
||||
|
||||
Private Sub SendNote(chan As Integer, pitch As Byte, dur As Long)
|
||||
|
||||
Dim noteMsg As DMUS_NOTE_PMSG
|
||||
noteMsg.velocity = gVelocity
|
||||
noteMsg.flags = DMUS_NOTEF_NOTEON
|
||||
noteMsg.midiValue = pitch
|
||||
noteMsg.mtDuration = dur
|
||||
Call perf.SendNotePMSG(0, DMUS_PMSGF_REFTIME, chan, noteMsg)
|
||||
|
||||
End Sub
|
||||
|
||||
Private Sub B7NoteOff()
|
||||
|
||||
' To turn off a note, we send a note-off message on the same
|
||||
' channel and at the same pitch.
|
||||
|
||||
Dim noteMsg As DMUS_NOTE_PMSG
|
||||
noteMsg.flags = 0
|
||||
noteMsg.midiValue = B7Freq
|
||||
Call perf.SendNotePMSG(0, DMUS_PMSGF_REFTIME, hbchannel, noteMsg)
|
||||
End Sub
|
||||
|
||||
|
||||
Private Sub cmdB7_Click()
|
||||
' For the hearbeat we'll send the note using a standard MIDI message.
|
||||
' That way we don't have to worry about the duration of the note;
|
||||
' it will play till we stop it.
|
||||
Call perf.SendMIDIPMSG(0, DMUS_PMSGF_REFTIME, hbchannel, &H90, B7Freq, gVelocity)
|
||||
B7Playing = True
|
||||
cmdB7.Enabled = False
|
||||
cmdOff.Enabled = True
|
||||
End Sub
|
||||
|
||||
Private Sub cmdExit_Click()
|
||||
Unload Me
|
||||
End Sub
|
||||
|
||||
Private Sub cmdOff_Click()
|
||||
B7NoteOff
|
||||
B7Playing = False
|
||||
cmdB7.Enabled = True
|
||||
cmdOff.Enabled = False
|
||||
End Sub
|
||||
|
||||
Private Sub cmdC3_Click()
|
||||
SendNote channel, 36, NoteDurC3
|
||||
End Sub
|
||||
|
||||
Private Sub cmdC4_Click()
|
||||
SendNote channel, 48, NoteDurC4
|
||||
End Sub
|
||||
|
||||
Private Sub cmdC5_Click()
|
||||
SendNote channel, 60, NoteDurC5
|
||||
End Sub
|
||||
|
||||
Private Sub cmdC6_Click()
|
||||
SendNote channel, 72, NoteDurC6
|
||||
End Sub
|
||||
|
||||
Private Sub cmdC7_Click()
|
||||
SendNote channel, 84, NoteDurC7
|
||||
End Sub
|
||||
|
||||
Private Sub cmdC9_Click()
|
||||
SendNote channel, 108, NoteDurC9
|
||||
End Sub
|
||||
|
||||
Private Sub cmdC10_Click()
|
||||
SendNote channel, 120, NoteDurC10
|
||||
End Sub
|
||||
|
||||
Private Sub Form_Load()
|
||||
|
||||
On Error GoTo FAILEDINIT
|
||||
Dim dmA As DMUS_AUDIOPARAMS
|
||||
|
||||
Set perf = dx.DirectMusicPerformanceCreate
|
||||
perf.InitAudio Me.hWnd, DMUS_AUDIOF_ALL, dmA, , DMUS_APATH_SHARED_STEREOPLUSREVERB, 64
|
||||
|
||||
On Error GoTo FAILEDLOAD
|
||||
mediapath = FindMediaDir("sample.sgt")
|
||||
If mediapath <> vbNullString Then ChDir mediapath
|
||||
|
||||
Dim loader As DirectMusicLoader8
|
||||
Set loader = dx.DirectMusicLoaderCreate
|
||||
Set coll = loader.LoadCollection(mediapath & "boids.dls")
|
||||
|
||||
' Load any segment. We're not actually going to play it,
|
||||
' but we need a valid segment object so we can download the DLS.
|
||||
|
||||
Set seg = loader.LoadSegment(mediapath & "sample.sgt")
|
||||
seg.ConnectToCollection coll
|
||||
seg.Download perf.GetDefaultAudioPath
|
||||
On Error GoTo 0
|
||||
|
||||
' Assign the Vocals instrument to two channels
|
||||
' One will be used only for the heartbeat so we can pitch bend
|
||||
Call perf.SendPatchPMSG(0, DMUS_PMSGF_REFTIME, channel, patch, 5, 0)
|
||||
Call perf.SendPatchPMSG(0, DMUS_PMSGF_REFTIME, hbchannel, patch, 5, 0)
|
||||
|
||||
' Initialize heartbeat note. B7 is MIDI note 95.
|
||||
B7Freq = sliderB7.Value + 94
|
||||
gVelocity = sliderVelocity.Value
|
||||
|
||||
Exit Sub
|
||||
|
||||
FAILEDINIT:
|
||||
MsgBox "Could not initialize DirectMusic." & vbCrLf & "This sample will exit.", vbOKOnly Or vbInformation, "Exiting..."
|
||||
Unload Me
|
||||
Exit Sub
|
||||
FAILEDLOAD:
|
||||
MsgBox "Failed to load file."
|
||||
Unload Me
|
||||
Exit Sub
|
||||
End Sub
|
||||
|
||||
|
||||
Private Sub Form_Unload(Cancel As Integer)
|
||||
If Not (seg Is Nothing) Then seg.Unload perf.GetDefaultAudioPath
|
||||
Set seg = Nothing
|
||||
If Not (perf Is Nothing) Then perf.CloseDown
|
||||
Set perf = Nothing
|
||||
End
|
||||
End Sub
|
||||
|
||||
Private Sub sliderB7_Change()
|
||||
B7NoteOff
|
||||
B7Freq = 94 + sliderB7.Value
|
||||
If B7Playing Then
|
||||
Call perf.SendMIDIPMSG(0, DMUS_PMSGF_REFTIME, hbchannel, &H90, B7Freq, gVelocity)
|
||||
End If
|
||||
|
||||
End Sub
|
||||
|
||||
Private Sub sliderPitch_Change()
|
||||
Dim hi As Byte, lo As Byte
|
||||
|
||||
' Split value into 7-bit bytes
|
||||
hi = Fix(sliderPitch.Value / 128)
|
||||
lo = CByte(sliderPitch.Value And 127)
|
||||
|
||||
' Send pitch bend message
|
||||
Call perf.SendMIDIPMSG(0, DMUS_PMSGF_REFTIME, hbchannel, &HE0, _
|
||||
lo, hi)
|
||||
|
||||
End Sub
|
||||
|
||||
Private Sub sliderVelocity_Change()
|
||||
gVelocity = sliderVelocity.Value
|
||||
End Sub
|
||||
|
||||
Reference in New Issue
Block a user