232 lines
9.4 KiB
VB.net
232 lines
9.4 KiB
VB.net
Public Class RockClimbEntity
|
|
|
|
Inherits Entity
|
|
|
|
Dim TempScriptEntity As ScriptBlock = Nothing
|
|
Dim TempClicked As Boolean = False 'If true, walk up.
|
|
|
|
Public Overrides Sub ClickFunction()
|
|
If Badge.CanUseHMMove(Badge.HMMoves.RockClimb) = True Or GameController.IS_DEBUG_ACTIVE = True Or Core.Player.SandBoxMode = True Then
|
|
TempClicked = True
|
|
If GetRockClimbPokemon() Is Nothing Then
|
|
Screen.TextBox.Show("A Pokémon could~climb this rock...", {Me}, True, True)
|
|
Else
|
|
Screen.TextBox.Show("A Pokémon could~climb this rock.*Do you want to~use Rock Climb?%Yes|No%", {Me}, True, True)
|
|
End If
|
|
End If
|
|
End Sub
|
|
|
|
Public Overrides Sub WalkOntoFunction()
|
|
If Badge.CanUseHMMove(Badge.HMMoves.RockClimb) = True Or GameController.IS_DEBUG_ACTIVE = True Or Core.Player.SandBoxMode = True Then
|
|
TempClicked = False
|
|
If GetRockClimbPokemon() Is Nothing Then
|
|
Screen.TextBox.Show("A Pokémon could~climb this rock...", {Me}, True, True)
|
|
Else
|
|
Screen.TextBox.Show("A Pokémon could~climb this rock.*Do you want to~use Rock Climb?%Yes|No%", {Me}, True, True)
|
|
End If
|
|
SoundManager.PlaySound("select")
|
|
Else
|
|
Screen.TextBox.Show("A path is engraved~into this rock...", {Me}, True, True)
|
|
End If
|
|
End Sub
|
|
|
|
Public Overrides Sub ResultFunction(ByVal Result As Integer)
|
|
If Result = 0 Then
|
|
If Me.TempClicked = True Then
|
|
Me.WalkUp()
|
|
Else
|
|
Me.WalkDown()
|
|
End If
|
|
End If
|
|
End Sub
|
|
|
|
Private Function GetRockClimbPokemon() As Pokemon
|
|
For Each teamPokemon As Pokemon In Core.Player.Pokemons
|
|
If teamPokemon.IsEgg() = False Then
|
|
For Each a As BattleSystem.Attack In teamPokemon.Attacks
|
|
If a.Name.ToLower() = "rock climb" Then
|
|
Return teamPokemon
|
|
End If
|
|
Next
|
|
End If
|
|
Next
|
|
|
|
'No rock climb in team:
|
|
If GameController.IS_DEBUG_ACTIVE = True Or Core.Player.SandBoxMode = True Then
|
|
If Core.Player.Pokemons.Count > 0 Then
|
|
Return Core.Player.Pokemons(0)
|
|
Else
|
|
Dim p As Pokemon = Pokemon.GetPokemonByID(10)
|
|
p.Generate(10, True)
|
|
Return p
|
|
End If
|
|
Else
|
|
Return Nothing
|
|
End If
|
|
End Function
|
|
|
|
Private Sub WalkUp()
|
|
Dim facing As Integer = CInt(Me.Rotation.Y / MathHelper.PiOver2)
|
|
facing -= 2
|
|
If facing < 0 Then
|
|
facing += 4
|
|
End If
|
|
|
|
Screen.Camera.PlannedMovement = Vector3.Zero
|
|
|
|
If Screen.Camera.GetPlayerFacingDirection() = facing And Screen.Camera.IsMoving = False Then
|
|
Dim Steps As Integer = 0
|
|
|
|
Dim checkPosition As Vector3 = Screen.Camera.GetForwardMovedPosition()
|
|
checkPosition.Y = checkPosition.Y.ToInteger()
|
|
|
|
Dim foundSteps As Boolean = True
|
|
While foundSteps = True
|
|
Dim e As Entity = GetEntity(Screen.Level.Entities, checkPosition, True, {GetType(RockClimbEntity), GetType(ScriptBlock), GetType(WarpBlock)})
|
|
If Not e Is Nothing Then
|
|
If e.EntityID.ToLower() = "rockclimbentity" Then
|
|
Steps += 1
|
|
checkPosition.X += Screen.Camera.GetMoveDirection().X
|
|
checkPosition.Z += Screen.Camera.GetMoveDirection().Z
|
|
checkPosition.Y += 1
|
|
Else
|
|
If e.EntityID = "ScriptBlock" Then
|
|
TempScriptEntity = CType(e, ScriptBlock)
|
|
ElseIf e.EntityID = "WarpBlock" Then
|
|
CType(e, WarpBlock).WalkAgainstFunction()
|
|
End If
|
|
foundSteps = False
|
|
End If
|
|
Else
|
|
foundSteps = False
|
|
End If
|
|
End While
|
|
|
|
Screen.Level.OverworldPokemon.Visible = False
|
|
Screen.Level.OverworldPokemon.warped = True
|
|
|
|
Dim tempSkin As String = Core.Player.Skin
|
|
|
|
Dim RockClimbPokemon As Pokemon = GetRockClimbPokemon()
|
|
|
|
Screen.Level.OwnPlayer.Texture = RockClimbPokemon.GetOverworldTexture()
|
|
Screen.Level.OwnPlayer.ChangeTexture()
|
|
|
|
Dim s As String = "version=2" & Environment.NewLine &
|
|
"@pokemon.cry(" & RockClimbPokemon.Number & ")" & Environment.NewLine &
|
|
"@player.setmovement(" & Screen.Camera.GetMoveDirection().X & ",1," & Screen.Camera.GetMoveDirection().Z & ")" & Environment.NewLine &
|
|
"@sound.play(destroy)" & Environment.NewLine &
|
|
"@player.move(" & Steps & ")" & Environment.NewLine &
|
|
"@player.setmovement(" & Screen.Camera.GetMoveDirection().X & ",0," & Screen.Camera.GetMoveDirection().Z & ")" & Environment.NewLine &
|
|
"@pokemon.hide" & Environment.NewLine &
|
|
"@player.move(1)" & Environment.NewLine &
|
|
"@pokemon.hide" & Environment.NewLine &
|
|
"@player.wearskin(" & tempSkin & ")" & Environment.NewLine
|
|
|
|
If Not Me.TempScriptEntity Is Nothing Then
|
|
s &= GetScriptStartLine(Me.TempScriptEntity) & Environment.NewLine
|
|
Me.TempScriptEntity = Nothing
|
|
End If
|
|
|
|
s &= ":end"
|
|
|
|
'Reset the player's transparency:
|
|
Screen.Level.OwnPlayer.Opacity = 1.0F
|
|
|
|
CType(Core.CurrentScreen, OverworldScreen).ActionScript.StartScript(s, 2, False)
|
|
End If
|
|
|
|
facing = CInt(Me.Rotation.Y / MathHelper.PiOver2)
|
|
If facing < 0 Then
|
|
facing += 4
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub WalkDown()
|
|
Dim facing As Integer = CInt(Me.Rotation.Y / MathHelper.PiOver2)
|
|
|
|
Screen.Camera.PlannedMovement = Vector3.Zero
|
|
|
|
If Screen.Camera.GetPlayerFacingDirection() = facing Then
|
|
Dim Steps As Integer = 0
|
|
|
|
Dim checkPosition As Vector3 = Screen.Camera.GetForwardMovedPosition()
|
|
checkPosition.Y = checkPosition.Y.ToInteger() - 1
|
|
|
|
Dim foundSteps As Boolean = True
|
|
While foundSteps = True
|
|
Dim e As Entity = GetEntity(Screen.Level.Entities, checkPosition, True, {GetType(RockClimbEntity), GetType(ScriptBlock), GetType(WarpBlock)})
|
|
If Not e Is Nothing Then
|
|
If e.EntityID = "RockClimbEntity" Then
|
|
Steps += 1
|
|
checkPosition.X += Screen.Camera.GetMoveDirection().X
|
|
checkPosition.Z += Screen.Camera.GetMoveDirection().Z
|
|
checkPosition.Y -= 1
|
|
Else
|
|
If e.EntityID = "ScriptBlock" Then
|
|
Me.TempScriptEntity = CType(e, ScriptBlock)
|
|
ElseIf e.EntityID = "WarpBlock" Then
|
|
CType(e, WarpBlock).WalkAgainstFunction()
|
|
End If
|
|
foundSteps = False
|
|
End If
|
|
Else
|
|
foundSteps = False
|
|
End If
|
|
End While
|
|
|
|
Screen.Level.OverworldPokemon.Visible = False
|
|
Screen.Level.OverworldPokemon.warped = True
|
|
|
|
Dim tempSkin As String = Core.Player.Skin
|
|
|
|
Dim RockClimbPokemon As Pokemon = GetRockClimbPokemon()
|
|
|
|
Screen.Level.OwnPlayer.Texture = RockClimbPokemon.GetOverworldTexture()
|
|
Screen.Level.OwnPlayer.ChangeTexture()
|
|
|
|
Dim s As String = "version=2" & Environment.NewLine &
|
|
"@pokemon.cry(" & RockClimbPokemon.Number & ")" & Environment.NewLine &
|
|
"@player.move(1)" & Environment.NewLine &
|
|
"@player.setmovement(" & Screen.Camera.GetMoveDirection().X & ",-1," & Screen.Camera.GetMoveDirection().Z & ")" & Environment.NewLine &
|
|
"@sound.play(destroy)" & Environment.NewLine &
|
|
"@player.move(" & Steps & ")" & Environment.NewLine &
|
|
"@pokemon.hide" & Environment.NewLine &
|
|
"@player.wearskin(" & tempSkin & ")" & Environment.NewLine
|
|
|
|
If Not Me.TempScriptEntity Is Nothing Then
|
|
s &= GetScriptStartLine(Me.TempScriptEntity) & Environment.NewLine
|
|
Me.TempScriptEntity = Nothing
|
|
End If
|
|
|
|
s &= ":end"
|
|
|
|
'Reset the player's transparency:
|
|
Screen.Level.OwnPlayer.Opacity = 1.0F
|
|
|
|
CType(Core.CurrentScreen, OverworldScreen).ActionScript.StartScript(s, 2, False)
|
|
End If
|
|
End Sub
|
|
|
|
Private Function GetScriptStartLine(ByVal ScriptEntity As ScriptBlock) As String
|
|
If Not ScriptEntity Is Nothing Then
|
|
If ScriptEntity.CorrectRotation() = True Then
|
|
Select Case ScriptEntity.GetActivationID()
|
|
Case 0
|
|
Return "@script.start(" & ScriptEntity.ScriptID & ")"
|
|
Case 1
|
|
Return "@script.text(" & ScriptEntity.ScriptID & ")"
|
|
Case 2
|
|
Return "@script.run(" & ScriptEntity.ScriptID & ")"
|
|
End Select
|
|
End If
|
|
End If
|
|
|
|
Return ""
|
|
End Function
|
|
|
|
Public Overrides Sub Render()
|
|
Me.Draw(Me.Model, Textures, False)
|
|
End Sub
|
|
|
|
End Class |