⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 entities.bas

📁 超级C&C有没有搞错,VB还能编出这种即时策略游戏来!没错,这就是我们的超级C&C!虽然游戏经常无故退出,但是原码仍有很多可圈可点的地方.祝你早日编出中国的超级RA,超级KKND,超级星际,超级家园
💻 BAS
📖 第 1 页 / 共 5 页
字号:
      If ObjModels(.ModelIndex).Abilities(ABILITY_REQUIRESTRACTION) = True Then
        TurnSpeed = ObjTurnSpeed / 4
      End If
    End If
    DestYaw = Math.GetYawFromXY(.Position.X, .Position.Y, ObjDest.X, ObjDest.Y)
    If .Vector.Yaw - 3 < DestYaw Then
      If .Vector.Yaw + 3 > DestYaw Then
        .Vector.Yaw = DestYaw
        SteerObjectDirection = True
        Exit Function
      End If
    End If
    If DestYaw > .Vector.Yaw Then
      If DestYaw - .Vector.Yaw < 180 Then
        .Vector.Yaw = .Vector.Yaw + TurnSpeed
      Else
        .Vector.Yaw = .Vector.Yaw - TurnSpeed
      End If
    Else
      If .Vector.Yaw - DestYaw < 180 Then
        .Vector.Yaw = .Vector.Yaw - TurnSpeed
      Else
        .Vector.Yaw = .Vector.Yaw + TurnSpeed
      End If
    End If
    If .Vector.Yaw + (TurnSpeed + 2) > DestYaw Then
      If .Vector.Yaw - (TurnSpeed + 2) < DestYaw Then
        .Vector.Yaw = DestYaw
        SteerObjectDirection = True
      End If
    End If
    Call Math.CheckVector(.Vector)
    .Vector.ZIncline = 0
    Call SetDisplayDirection(ObjIndex)
End With
End Function
Function SteerTurretDirection(ObjIndex, ObjDest As Point3D) As Boolean
Dim TempVector As Vect3D
With Objects(ObjIndex)
    DestYaw = Math.GetYawFromXY(.Position.X, .Position.Y, ObjDest.X, ObjDest.Y)
    If .TopDirection - 6 < DestYaw Then
      If .TopDirection + 6 > DestYaw Then
        .TopDirection = DestYaw
        SteerTurretDirection = True
        Exit Function
      End If
    End If
    If DestYaw > .TopDirection Then
      If DestYaw - .TopDirection < 180 Then
        .TopDirection = .TopDirection + 6
      Else
        .TopDirection = .TopDirection - 6
      End If
    Else
      If .TopDirection - DestYaw < 180 Then
        .TopDirection = .TopDirection - 6
      Else
        .TopDirection = .TopDirection + 6
      End If
    End If
    If .TopDirection + 8 > DestYaw Then
      If .TopDirection - 8 < DestYaw Then
        .TopDirection = DestYaw
        SteerTurretDirection = True
      End If
    End If
    TempVector.Yaw = .TopDirection
    Call Math.CheckVector(TempVector)
    .TopDirection = TempVector.Yaw
    Call SetDisplayDirection(ObjIndex)
End With
End Function
Sub SetDisplayDirection(ObjIndex)
With Objects(ObjIndex)
  If ObjModels(.ModelIndex).Attributes(ATTRIBUTE_DIRECTIONAMOUNT) <> 1 Then
    .DisplayDirection = Int((.Vector.Yaw + ObjModels(.ModelIndex).Consts(CONST_DIRECTIONDIVDIV)) / ObjModels(.ModelIndex).Consts(CONST_DIRECTIONDIV))
    If .DisplayDirection = ObjModels(.ModelIndex).Attributes(ATTRIBUTE_DIRECTIONAMOUNT) Then .DisplayDirection = 0
  Else
    .DisplayDirection = 0
  End If
  If ObjModels(.ModelIndex).Attributes(ATTRIBUTE_TOPDIRECTIONAMOUNT) <> 1 Then
    If ObjModels(.ModelIndex).Abilities(ABILITY_BODYISBISECTED) = True Then
      .TopDisplayDirection = Int((.TopDirection + ObjModels(.ModelIndex).Consts(CONST_TOPDIRECTIONDIVDIV)) / ObjModels(.ModelIndex).Consts(CONST_TOPDIRECTIONDIV))
      If .TopDisplayDirection = ObjModels(.ModelIndex).Attributes(ATTRIBUTE_TOPDIRECTIONAMOUNT) Then .TopDisplayDirection = 0
    End If
  Else
    .TopDisplayDirection = 0
  End If
End With
End Sub
Public Function SpawnObject(ClassNum, Side, X, Y, Z, Yaw, ZIncline) As Integer
If ObjModels(ClassNum).Abilities(ABILITY_ISPHYSICAL) = True Then
  If GroundBlocks(X, Y).Occupied = True Then
    GoTo DontSpawn
  End If
End If
If ObjModels(ClassNum).Attributes(ATTRIBUTE_MAPIMPRINT) <> NOMAPIMPRINT Then
  If Map.IsImprintSpaceNonGrass(X, Y, ObjModels(ClassNum).Attributes(ATTRIBUTE_MAPIMPRINT)) = True Then
    GoTo DontSpawn
  End If
  If Map.IsImprintSpaceOccupied(X, Y, ObjModels(ClassNum).Attributes(ATTRIBUTE_MAPIMPRINT)) = True Then
    GoTo DontSpawn
  End If
End If
For I = 1 To MAXOBJECTS
  If Objects(I).Active = False Then
    NewObject = I
    Exit For
  End If
Next I
If ObjectsActive < NewObject Then ObjectsActive = NewObject

With Objects(NewObject)
    'Clears all it's properties so it doesn't do something wacky!
    For I = 1 To MAXOBJECTPROPERTIES
      .Properties(I) = 0
    Next I
    
    'Initializes the object
    .Frozen = False
    .Active = True
    .Side = Side
    .ModelIndex = ClassNum
    .CurrentSpeed = 0
    .Position.X = Map.UnProjectToMapX(X)
    .Position.Y = Map.UnProjectToMapY(Y)
    .Position.Z = Z
    .Objective.MainDestination = Map.ProjectToMap3DPoint(.Position)
    .Objective.MainDestination.Z = Z
    .Objective.CurrentDestination = .Objective.MainDestination
    .DisplayDirection = 0
    .Vector.Yaw = Yaw
    .Vector.ZIncline = ZIncline
    .Objective.Goal = GOAL_NOTHING
    .States(STATE_MOVING) = False
    .Sprite.SpriteNumber = ObjModels(ClassNum).Attributes(ATTRIBUTE_SPRITE)
    .Sprite.SpriteFrameNumber = 1
    .Sprite.SpriteGroupNumber = 1
    
    .TopSprite.SpriteNumber = ObjModels(ClassNum).Attributes(ATTRIBUTE_TOPSPRITE)
    .TopSprite.SpriteFrameNumber = 1
    .TopSprite.SpriteGroupNumber = 1
    .TopDirection = .Vector.Yaw
    .DisplayDirection = .DisplayDirection
    
    .Properties(PROPERTY_TIMEUNTILADJUSTDIRECTION) = OBJCONST_TimeTillAdjustDirection
    .Properties(PROPERTY_WEAPONOBJECTTYPE) = ObjModels(ClassNum).Attributes(ATTRIBUTE_DEFAULTWEAPONOBJECT)
    .Properties(PROPERTY_HEALTH) = ObjModels(ClassNum).Attributes(ATTRIBUTE_HEALTH)
    
    If ObjModels(ClassNum).Abilities(ABILITY_HASDNA) = True Then Call Assign_DNA(NewObject)
    
    Call SetObjectMapPosition(NewObject)
    If ObjModels(.ModelIndex).BehaviorType = BEHAVIORMODE_TANK Then
      Dim TempPos As Point3D
      For I = 1 To 10
        SparkDirection = Int(360 * Rnd)
        TempPos = Math.GetPropelCoordinates(.Position, SparkDirection, 0, 7 + (5 * Rnd))
        Call SpawnSpark(TempPos.X, TempPos.Y, .Position.Z, PALLETE_BLUE, SparkDirection, 2, 10, 7, 1)
      Next I
      Call ObjectCommand_MoveSomewhere(NewObject, .MapPosition.X, .MapPosition.Y)
    End If
    If CheckObject(NewObject, OBJCHECK_OCCUPIESMAPSPACE) = True Then Call SetGroundOccupiedByObject(NewObject)
    'returns the handle of the object
    If ObjModels(ClassNum).Abilities(ABILITY_BUILDS) = True Then
      Call BuildObjectsChanged(Side)
    End If
End With
If ObjModels(ClassNum).Attributes(ATTRIBUTE_MAPIMPRINT) <> NOMAPIMPRINT Then
  Call Map.PlaceMapImprint(ObjModels(ClassNum).Attributes(ATTRIBUTE_MAPIMPRINT), X, Y, NewObject)
End If
Call Object_PlaySound(NewObject, SoundEvent_Spawn)
SpawnObject = NewObject
Exit Function
DontSpawn:
  SpawnObject = NOOBJECT
End Function
Public Sub LoadObjectData()
Dim MaxMods As Integer, a$, propvalue$, I As Integer, DeployObjectList(MaxObjModels) As String, WepObjs(MaxObjModels) As String
On Error Resume Next
MaxMods = 0
Call FileFunctions.OpenGameFile(File_UnitDefinitions, 1)
Do
  Line Input #1, a$
  Select Case MiscFunctions.GetPropertyName(a$)
  Case FILETAG_ENDFILE
    Exit Do
  Case "[OBJECTDEFSTART]"
    MaxMods = MaxMods + 1
    Line Input #1, a$
    ObjModels(MaxMods).ObjClassName = MiscFunctions.GetPropertyValue(a$)

    Line Input #1, a$
    ObjModels(MaxMods).ObjName = MiscFunctions.GetPropertyValue(a$)
    Line Input #1, a$
    Select Case MiscFunctions.GetPropertyValue(a$)
    Case "-NONE-"
      BehavType = BEHAVIORMODE_NONE
    Case "BEHAVIORMODE_INANIMATE"
      BehavType = BEHAVIORMODE_INANIMATE
    Case "BEHAVIORMODE_BUILDING"
      BehavType = BEHAVIORMODE_BUILDING
    Case "BEHAVIORMODE_SOLDIER"
      BehavType = BEHAVIORMODE_SOLDIER
    Case "BEHAVIORMODE_SHIP"
      BehavType = BEHAVIORMODE_SHIP
    Case "BEHAVIORMODE_TANK"
      BehavType = BEHAVIORMODE_TANK
    Case "BEHAVIORMODE_AIRCRAFT"
      BehavType = BEHAVIORMODE_AIRCRAFT
    Case "BEHAVIORMODE_SPACECRAFT"
      BehavType = BEHAVIORMODE_SPACECRAFT
    Case "BEHAVIORMODE_WEAPON"
      BehavType = BEHAVIORMODE_WEAPON
    End Select
    ObjModels(MaxMods).BehaviorType = BehavType
    
    For I = 1 To MAXABILITIES
      Line Input #1, a$
      a$ = MiscFunctions.GetPropertyValue(a$)
      ObjModels(MaxMods).Abilities(I) = MiscFunctions.ConvertTrueFalse(a$)
    Next I
    
    
    Line Input #1, a$
    a$ = MiscFunctions.GetPropertyValue(a$)
    ObjModels(MaxMods).Attributes(ATTRIBUTE_SPRITE) = SpriteStuff.GetSpriteIndex(a$)
    
    Line Input #1, a$
    a$ = MiscFunctions.GetPropertyValue(a$)
    ObjModels(MaxMods).Attributes(ATTRIBUTE_SIZE) = Val(a$)
    
    Line Input #1, a$
    a$ = MiscFunctions.GetPropertyValue(a$)
    ObjModels(MaxMods).Attributes(ATTRIBUTE_LENGTHX) = Val(a$)

    Line Input #1, a$
    a$ = MiscFunctions.GetPropertyValue(a$)
    ObjModels(MaxMods).Attributes(ATTRIBUTE_LENGTHY) = Val(a$)
    
    Line Input #1, a$
    a$ = MiscFunctions.GetPropertyValue(a$)
    ObjModels(MaxMods).Attributes(ATTRIBUTE_LENGTHZ) = Val(a$)

    Line Input #1, a$
    a$ = MiscFunctions.GetPropertyValue(a$)
    ObjModels(MaxMods).Attributes(ATTRIBUTE_MAXSPEED) = Val(a$)
    
    Line Input #1, a$
    a$ = MiscFunctions.GetPropertyValue(a$)
    ObjModels(MaxMods).Attributes(ATTRIBUTE_BULLETARMOR) = Val(a$)
    
    Line Input #1, a$
    a$ = MiscFunctions.GetPropertyValue(a$)
    ObjModels(MaxMods).Attributes(ATTRIBUTE_SHELLARMOR) = Val(a$)
    
    Line Input #1, a$
    a$ = MiscFunctions.GetPropertyValue(a$)
    ObjModels(MaxMods).Attributes(ATTRIBUTE_BOMBARMOR) = Val(a$)

    Line Input #1, a$
    a$ = MiscFunctions.GetPropertyValue(a$)
    ObjModels(MaxMods).Attributes(ATTRIBUTE_FIREARMOR) = Val(a$)

    Line Input #1, a$
    a$ = MiscFunctions.GetPropertyValue(a$)
    ObjModels(MaxMods).Attributes(ATTRIBUTE_ELECTROMAGNETICARMOR) = Val(a$)

    Line Input #1, a$
    a$ = MiscFunctions.GetPropertyValue(a$)
    ObjModels(MaxMods).Attributes(ATTRIBUTE_RADIATIONARMOR) = Val(a$)

    Line Input #1, a$
    a$ = MiscFunctions.GetPropertyValue(a$)
    ObjModels(MaxMods).Attributes(ATTRIBUTE_MAXAMMO) = Val(a$)

    Line Input #1, a$
   
    Select Case MiscFunctions.GetPropertyValue(a$)
    Case "EXPLODETYPE_BULLET"
      ExplodeType = EXPLODETYPE_BULLET
    Case "EXPLODETYPE_SHELL"
      ExplodeType = EXPLODETYPE_SHELL
    Case "EXPLODETYPE_BOMB"
      ExplodeType = EXPLODETYPE_BOMB
    Case "EXPLODETYPE_FIRE"
      ExplodeType = EXPLODETYPE_FIRE
    Case "EXPLODETYPE_ELECTROMAGNETIC"
      ExplodeType = EXPLODETYPE_ELECTROMAGNETIC
    Case "EXPLODETYPE_RADIATION"
      ExplodeType = EXPLODETYPE_RADIATION
    End Select
    ObjModels(MaxMods).Attributes(ATTRIBUTE_EXPLOSIONTYPE) = ExplodeType
    
    Line Input #1, a$
    a$ = MiscFunctions.GetPropertyValue(a$)
    ObjModels(MaxMods).Attributes(ATTRIBUTE_EXPLOSIONINTENSITY) = Val(a$)

    Line Input #1, a$
    a$ = MiscFunctions.GetPropertyValue(a$)
    ObjModels(MaxMods).Attributes(ATTRIBUTE_EXPLOSIONRADIUS) = Val(a$)
    
    Line Input #1, a$
    a$ = Misc

⌨️ 快捷键说明

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