objed.bas

来自「超级C&C有没有搞错,VB还能编出这种即时策略游戏来!没错,这就是我们的超级C&」· BAS 代码 · 共 184 行

BAS
184
字号
Attribute VB_Name = "Module1"
Global Const FILE_TAGFILE = "ObjectFormat.Dat"
Global Const IonFile$ = "Original.Ion"
Global Const TAGOPMAX = 200
Global Const TAGDEFMAX = 200
Global Const CURRVERSION$ = "ION FORMAT VERSION: 1.0"
Type TagDf
  active As Boolean
  TagName As String
  NonOption As Boolean
  TagOptions(1 To TAGOPMAX) As String
  TagOptionMax As Integer
End Type
Global TagDefs(TAGDEFMAX) As TagDf
Global MaxTags As Integer

Type Objz
  active As Boolean
  Tags(TAGDEFMAX) As String
End Type
Global Const MAXOBJZ = 100
Global Objects(MAXOBJZ) As Objz
Global CObj As Integer
Sub LoadObjectTags()
On Error GoTo ErrRR
For i = 0 To TAGDEFMAX
  TagDefs(i).active = False
Next i
MaxTags = 0

Open FILE_TAGFILE For Input As #1
Do
  Line Input #1, a$
  If a$ = "[ENDOFFILE]" Then Exit Do
  If a$ = "[OBJTAGDEF]" Then
    MaxTags = MaxTags + 1
    TagDefs(MaxTags).active = True
    Line Input #1, a$
    TagDefs(MaxTags).TagName = a$
    OpMax = 0
    Do
      Line Input #1, a$
      If a$ = "[ENDOBJDEF]" Then Exit Do
      If a$ = "NULL" Then
        TagDefs(MaxTags).NonOption = True
        Exit Do
      Else
        TagDefs(MaxTags).NonOption = False
      End If
      OpMax = OpMax + 1
      TagDefs(MaxTags).TagOptions(OpMax) = a$
    Loop
    TagDefs(MaxTags).TagOptionMax = OpMax
  End If
Loop
Close #1
Form1.HScroll1.Max = MaxTags
Call UpdatePage
Exit Sub
ErrRR:
Close
Call UpdatePage
End Sub
Sub UpdatePage()
On Error Resume Next
tval = Form1.HScroll1.Value
PVal = Form1.List1.ListIndex
Form1.List1.Clear
Form1.List1.AddItem "[New Object]"
For i = 1 To MAXOBJZ
  If Objects(i).active = True Then
    Form1.List1.AddItem Objects(i).Tags(1)
  End If
Next i
DoEvents
Form1.List1.ListIndex = PVal
Form1.Text1.Text = TagDefs(tval).TagName
If TagDefs(tval).TagName = "ATTRIBUTE_SPRITE" Then
  Form1.Combo1.Clear
  Open "Sprites.Dat" For Input As #1
  Form1.Combo1.AddItem "-Nothing-"
  Do
    Line Input #1, a$
    If a$ = "[ENDOFFILE]" Then Exit Do
    If a$ = "[SPRITEDEF]" Then
      Line Input #1, a$
      a$ = Right$(a$, Len(a$) - 12)
      Form1.Combo1.AddItem a$
    End If
  Loop
  Close #1
  Form1.Combo1.Visible = True
  Form1.Text2.Visible = False
  If Objects(CObj).Tags(tval) <> "" Then Form1.Combo1.Text = Objects(CObj).Tags(tval)
ElseIf TagDefs(tval).TagName = "ATTRIBUTE_EXPLOSIONSPRITE" Then
  Form1.Combo1.Clear
  Form1.Combo1.AddItem "-Nothing-"
  Open "Sprites.Dat" For Input As #1
  Do
    Line Input #1, a$
    If a$ = "[ENDOFFILE]" Then Exit Do
    If a$ = "[SPRITEDEF]" Then
      Line Input #1, a$
      a$ = Right$(a$, Len(a$) - 12)
      Form1.Combo1.AddItem a$
    End If
  Loop
  Close #1
  Form1.Combo1.Visible = True
  Form1.Text2.Visible = False
  If Objects(CObj).Tags(tval) <> "" Then Form1.Combo1.Text = Objects(CObj).Tags(tval)
Else

    If TagDefs(tval).NonOption = True Then
      Form1.Combo1.Visible = False
      Form1.Text2.Visible = True
      If Objects(CObj).Tags(tval) = "" Then
        Form1.Text2.Text = "-Enter a value-"
      Else
        Form1.Text2.Text = Objects(CObj).Tags(tval)
      End If
    Else
      Form1.Combo1.Visible = True
      Form1.Text2.Visible = False
      Form1.Combo1.Clear
      For i = 1 To TagDefs(tval).TagOptionMax
        Form1.Combo1.AddItem TagDefs(tval).TagOptions(i)
      Next i
      If Objects(CObj).Tags(tval) <> "" Then
        Form1.Combo1.Text = Objects(CObj).Tags(tval)
      End If
    End If
End If
End Sub
Sub LoadObjz()
On Error GoTo ER
Open "Units.Dat" For Input As #1
Line Input #1, a$
Mo = 0
Select Case a$
Case "ION FORMAT VERSION: 1.0"
  Do
    Line Input #1, a$
    If a$ = "[ENDOFFILE]" Then Exit Do
    If a$ = "[OBJECTDEFSTART]" Then
      Mo = Mo + 1
      Objects(Mo).active = True
      For i = 1 To MaxTags
        Line Input #1, a$
        Objects(Mo).Tags(i) = GetPropertyValue(a$)
      Next i
    End If
  Loop
End Select
Close #1
Call UpdatePage
Exit Sub
ER:
Close #1
End Sub
Sub SaveObjz()
Open "Units.Dat" For Output As #1
Print #1, CURRVERSION$
For i = 1 To MAXOBJZ
  If Objects(i).active = True Then
    Print #1, "[OBJECTDEFSTART]"
    For i2 = 1 To MaxTags
      If Objects(i).Tags(i2) <> "" Then
        Print #1, TagDefs(i2).TagName & " " & Objects(i).Tags(i2)
      Else
        Print #1, TagDefs(i2).TagName
      End If
    Next i2
    Print #1, "[OBJECTDEFEND]"
  End If
Next i
Print #1, "[ENDOFFILE]"
Close #1
End Sub
Public Function GetPropertyValue(TextString) As String
GetPropertyValue = Right$(TextString, Len(TextString) - InStr(1, TextString, " "))
If InStr(1, TextString, " ") = 0 Then GetPropertyValue = ""
End Function

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?