Trainers don't walk through NPCs or objects...

....unless you want them to which you can accomplish by adding "|0" to the end of the AdditionalValue
This commit is contained in:
JappaWakka 2024-11-10 13:57:59 +01:00
parent c19a7b06cd
commit 4edb20faae
16 changed files with 164 additions and 119 deletions

View File

@ -334,10 +334,10 @@ Corners:
{"Entity"{ENT[{"Position"{sngArr[6,1,12]}}{"EntityID"{str[WallBlock]}}{"TexturePath"{str[Cherrygrove]}}{"Textures"{recArr[[96,16,16,16]]}}{"TextureIndex"{intArr[-1,-1,0,0]}}{"Collision"{bool[1]}}{"ModelID"{int[5]}}{"Action"{int[0]}}{"AdditionalValue"{str[]}}{"Rotation"{int[0]}}]}} {"Entity"{ENT[{"Position"{sngArr[6,1,12]}}{"EntityID"{str[WallBlock]}}{"TexturePath"{str[Cherrygrove]}}{"Textures"{recArr[[96,16,16,16]]}}{"TextureIndex"{intArr[-1,-1,0,0]}}{"Collision"{bool[1]}}{"ModelID"{int[5]}}{"Action"{int[0]}}{"AdditionalValue"{str[]}}{"Rotation"{int[0]}}]}}
NPC: NPC:
{"NPC"{NPC[{"Position"{sngArr[13,-0.24,62]}}{"TextureID"{str[35]}}{"ID"{int[0]}}{"Name"{str[IDlotto]}}{"Action"{int[2]}}{"AdditionalValue"{str[2|trainer\fortune\north\002]}}{"Rotation"{int[1]}}{"Movement"{str[Looking]}}{"MoveRectangles"{recArr[[17,2,2,1]]}}]}} {"NPC"{NPC[{"Position"{sngArr[13,-0.24,62]}}{"TextureID"{str[35]}}{"ID"{int[0]}}{"Name"{str[IDlotto]}}{"Action"{int[2]}}{"AdditionalValue"{str[2|trainer\fortune\north\002|0]}}{"Rotation"{int[1]}}{"Movement"{str[Looking]}}{"MoveRectangles"{recArr[[17,2,2,1]]}}]}}
{"NPC"{NPC[{"Position"{sngArr[10,-0.24,44]}}{"TextureID"{str[35]}}{"ID"{int[1]}}{"Name"{str[IDlotto]}}{"Action"{int[2]}}{"AdditionalValue"{str[1|trainer\fortune\north\003l]}}{"Rotation"{int[0]}}{"Movement"{str[Still]}}{"MoveRectangles"{recArr[[17,2,2,1]]}}]}} {"NPC"{NPC[{"Position"{sngArr[10,-0.24,44]}}{"TextureID"{str[35]}}{"ID"{int[1]}}{"Name"{str[IDlotto]}}{"Action"{int[2]}}{"AdditionalValue"{str[1|trainer\fortune\north\003l|0]}}{"Rotation"{int[0]}}{"Movement"{str[Still]}}{"MoveRectangles"{recArr[[17,2,2,1]]}}]}}
{"NPC"{NPC[{"Position"{sngArr[11,-0.24,44]}}{"TextureID"{str[34]}}{"ID"{int[2]}}{"Name"{str[IDlotto]}}{"Action"{int[2]}}{"AdditionalValue"{str[1|trainer\fortune\north\003r]}}{"Rotation"{int[0]}}{"Movement"{str[Still]}}{"MoveRectangles"{recArr[[17,2,2,1]]}}]}} {"NPC"{NPC[{"Position"{sngArr[11,-0.24,44]}}{"TextureID"{str[34]}}{"ID"{int[2]}}{"Name"{str[IDlotto]}}{"Action"{int[2]}}{"AdditionalValue"{str[1|trainer\fortune\north\003r|0]}}{"Rotation"{int[0]}}{"Movement"{str[Still]}}{"MoveRectangles"{recArr[[17,2,2,1]]}}]}}
{"NPC"{NPC[{"Position"{sngArr[13,-0.24,34]}}{"TextureID"{str[34]}}{"ID"{int[3]}}{"Name"{str[IDlotto]}}{"Action"{int[2]}}{"AdditionalValue"{str[2|trainer\fortune\north\004]}}{"Rotation"{int[1]}}{"Movement"{str[Looking]}}{"MoveRectangles"{recArr[[17,2,2,1]]}}]}} {"NPC"{NPC[{"Position"{sngArr[13,-0.24,34]}}{"TextureID"{str[34]}}{"ID"{int[3]}}{"Name"{str[IDlotto]}}{"Action"{int[2]}}{"AdditionalValue"{str[2|trainer\fortune\north\004|0]}}{"Rotation"{int[1]}}{"Movement"{str[Looking]}}{"MoveRectangles"{recArr[[17,2,2,1]]}}]}}
{"NPC"{NPC[{"Position"{sngArr[12,0,15]}}{"TextureID"{str[19]}}{"ID"{int[4]}}{"Name"{str[IDlotto]}}{"Action"{int[2]}}{"AdditionalValue"{str[1|trainer\fortune\north\005]}}{"Rotation"{int[0]}}{"Movement"{str[Still]}}{"MoveRectangles"{recArr[[17,2,2,1]]}}]}} {"NPC"{NPC[{"Position"{sngArr[12,0,15]}}{"TextureID"{str[19]}}{"ID"{int[4]}}{"Name"{str[IDlotto]}}{"Action"{int[2]}}{"AdditionalValue"{str[1|trainer\fortune\north\005]}}{"Rotation"{int[0]}}{"Movement"{str[Still]}}{"MoveRectangles"{recArr[[17,2,2,1]]}}]}}
{"NPC"{NPC[{"Position"{sngArr[8,0,24]}}{"TextureID"{str[gruntm]}}{"ID"{int[5]}}{"Name"{str[IDlotto]}}{"Action"{int[2]}}{"AdditionalValue"{str[2|trainer\fortune\north\006]}}{"Rotation"{int[1]}}{"Movement"{str[Still]}}{"MoveRectangles"{recArr[[17,2,2,1]]}}]}} {"NPC"{NPC[{"Position"{sngArr[8,0,24]}}{"TextureID"{str[gruntm]}}{"ID"{int[5]}}{"Name"{str[IDlotto]}}{"Action"{int[2]}}{"AdditionalValue"{str[2|trainer\fortune\north\006]}}{"Rotation"{int[1]}}{"Movement"{str[Still]}}{"MoveRectangles"{recArr[[17,2,2,1]]}}]}}

View File

@ -334,10 +334,10 @@ Corners:
{"Entity"{ENT[{"Position"{sngArr[6,1,12]}}{"EntityID"{str[WallBlock]}}{"TexturePath"{str[Cherrygrove]}}{"Textures"{recArr[[96,16,16,16]]}}{"TextureIndex"{intArr[-1,-1,0,0]}}{"Collision"{bool[1]}}{"ModelID"{int[5]}}{"Action"{int[0]}}{"AdditionalValue"{str[]}}{"Rotation"{int[0]}}]}} {"Entity"{ENT[{"Position"{sngArr[6,1,12]}}{"EntityID"{str[WallBlock]}}{"TexturePath"{str[Cherrygrove]}}{"Textures"{recArr[[96,16,16,16]]}}{"TextureIndex"{intArr[-1,-1,0,0]}}{"Collision"{bool[1]}}{"ModelID"{int[5]}}{"Action"{int[0]}}{"AdditionalValue"{str[]}}{"Rotation"{int[0]}}]}}
NPC: NPC:
{"NPC"{NPC[{"Position"{sngArr[13,-0.24,62]}}{"TextureID"{str[35]}}{"ID"{int[0]}}{"Name"{str[IDlotto]}}{"Action"{int[2]}}{"AdditionalValue"{str[2|trainer\fortune\north\002]}}{"Rotation"{int[1]}}{"Movement"{str[Looking]}}{"MoveRectangles"{recArr[[17,2,2,1]]}}]}} {"NPC"{NPC[{"Position"{sngArr[13,-0.24,62]}}{"TextureID"{str[35]}}{"ID"{int[0]}}{"Name"{str[IDlotto]}}{"Action"{int[2]}}{"AdditionalValue"{str[2|trainer\fortune\north\002|0]}}{"Rotation"{int[1]}}{"Movement"{str[Looking]}}{"MoveRectangles"{recArr[[17,2,2,1]]}}]}}
{"NPC"{NPC[{"Position"{sngArr[10,-0.24,44]}}{"TextureID"{str[35]}}{"ID"{int[1]}}{"Name"{str[IDlotto]}}{"Action"{int[2]}}{"AdditionalValue"{str[1|trainer\fortune\north\003l]}}{"Rotation"{int[0]}}{"Movement"{str[Still]}}{"MoveRectangles"{recArr[[17,2,2,1]]}}]}} {"NPC"{NPC[{"Position"{sngArr[10,-0.24,44]}}{"TextureID"{str[35]}}{"ID"{int[1]}}{"Name"{str[IDlotto]}}{"Action"{int[2]}}{"AdditionalValue"{str[1|trainer\fortune\north\003l|0]}}{"Rotation"{int[0]}}{"Movement"{str[Still]}}{"MoveRectangles"{recArr[[17,2,2,1]]}}]}}
{"NPC"{NPC[{"Position"{sngArr[11,-0.24,44]}}{"TextureID"{str[34]}}{"ID"{int[2]}}{"Name"{str[IDlotto]}}{"Action"{int[2]}}{"AdditionalValue"{str[1|trainer\fortune\north\003r]}}{"Rotation"{int[0]}}{"Movement"{str[Still]}}{"MoveRectangles"{recArr[[17,2,2,1]]}}]}} {"NPC"{NPC[{"Position"{sngArr[11,-0.24,44]}}{"TextureID"{str[34]}}{"ID"{int[2]}}{"Name"{str[IDlotto]}}{"Action"{int[2]}}{"AdditionalValue"{str[1|trainer\fortune\north\003r|0]}}{"Rotation"{int[0]}}{"Movement"{str[Still]}}{"MoveRectangles"{recArr[[17,2,2,1]]}}]}}
{"NPC"{NPC[{"Position"{sngArr[13,-0.24,34]}}{"TextureID"{str[34]}}{"ID"{int[3]}}{"Name"{str[IDlotto]}}{"Action"{int[2]}}{"AdditionalValue"{str[2|trainer\fortune\north\004]}}{"Rotation"{int[1]}}{"Movement"{str[Looking]}}{"MoveRectangles"{recArr[[17,2,2,1]]}}]}} {"NPC"{NPC[{"Position"{sngArr[13,-0.24,34]}}{"TextureID"{str[34]}}{"ID"{int[3]}}{"Name"{str[IDlotto]}}{"Action"{int[2]}}{"AdditionalValue"{str[2|trainer\fortune\north\004|0]}}{"Rotation"{int[1]}}{"Movement"{str[Looking]}}{"MoveRectangles"{recArr[[17,2,2,1]]}}]}}
{"NPC"{NPC[{"Position"{sngArr[12,0,15]}}{"TextureID"{str[19]}}{"ID"{int[4]}}{"Name"{str[IDlotto]}}{"Action"{int[2]}}{"AdditionalValue"{str[1|trainer\fortune\north\005]}}{"Rotation"{int[0]}}{"Movement"{str[Still]}}{"MoveRectangles"{recArr[[17,2,2,1]]}}]}} {"NPC"{NPC[{"Position"{sngArr[12,0,15]}}{"TextureID"{str[19]}}{"ID"{int[4]}}{"Name"{str[IDlotto]}}{"Action"{int[2]}}{"AdditionalValue"{str[1|trainer\fortune\north\005]}}{"Rotation"{int[0]}}{"Movement"{str[Still]}}{"MoveRectangles"{recArr[[17,2,2,1]]}}]}}
{"NPC"{NPC[{"Position"{sngArr[7,0,22]}}{"TextureID"{str[gruntm]}}{"ID"{int[5]}}{"Name"{str[Grunt Liberty]}}{"Action"{int[2]}}{"AdditionalValue"{str[1|trainer\fortune\north\006]}}{"Rotation"{int[2]}}{"Movement"{str[Still]}}{"MoveRectangles"{recArr[[17,2,2,1]]}}]}} {"NPC"{NPC[{"Position"{sngArr[7,0,22]}}{"TextureID"{str[gruntm]}}{"ID"{int[5]}}{"Name"{str[Grunt Liberty]}}{"Action"{int[2]}}{"AdditionalValue"{str[1|trainer\fortune\north\006]}}{"Rotation"{int[2]}}{"Movement"{str[Still]}}{"MoveRectangles"{recArr[[17,2,2,1]]}}]}}

View File

@ -490,8 +490,8 @@ NPC:
{"NPC"{NPC[{"Position"{sngArr[7,1,21]}}{"TextureID"{str[littlegirl]}}{"ID"{int[5]}}{"Name"{str[IDlotto]}}{"Action"{int[2]}}{"AdditionalValue"{str[1|trainer\fortune\water\005r]}}{"Rotation"{int[2]}}{"Movement"{str[Still]}}{"MoveRectangles"{recArr[]}}]}} {"NPC"{NPC[{"Position"{sngArr[7,1,21]}}{"TextureID"{str[littlegirl]}}{"ID"{int[5]}}{"Name"{str[IDlotto]}}{"Action"{int[2]}}{"AdditionalValue"{str[1|trainer\fortune\water\005r]}}{"Rotation"{int[2]}}{"Movement"{str[Still]}}{"MoveRectangles"{recArr[]}}]}}
{"NPC"{NPC[{"Position"{sngArr[12,1,13]}}{"TextureID"{str[pinkshirtgirl]}}{"ID"{int[6]}}{"Name"{str[IDlotto]}}{"Action"{int[2]}}{"AdditionalValue"{str[3|trainer\fortune\water\006]}}{"Rotation"{int[0]}}{"Movement"{str[Looking]}}{"MoveRectangles"{recArr[]}}]}} {"NPC"{NPC[{"Position"{sngArr[12,1,13]}}{"TextureID"{str[pinkshirtgirl]}}{"ID"{int[6]}}{"Name"{str[IDlotto]}}{"Action"{int[2]}}{"AdditionalValue"{str[3|trainer\fortune\water\006]}}{"Rotation"{int[0]}}{"Movement"{str[Looking]}}{"MoveRectangles"{recArr[]}}]}}
{"NPC"{NPC[{"Position"{sngArr[13,-0.24,35]}}{"TextureID"{str[34]}}{"ID"{int[2]}}{"Name"{str[Swimmer1]}}{"Action"{int[2]}}{"AdditionalValue"{str[3|trainer\fortune\water\004]}}{"Rotation"{int[3]}}{"Movement"{str[Looking]}}{"MoveRectangles"{recArr[]}}]}} {"NPC"{NPC[{"Position"{sngArr[13,-0.24,35]}}{"TextureID"{str[34]}}{"ID"{int[2]}}{"Name"{str[Swimmer1]}}{"Action"{int[2]}}{"AdditionalValue"{str[3|trainer\fortune\water\004|0]}}{"Rotation"{int[3]}}{"Movement"{str[Looking]}}{"MoveRectangles"{recArr[]}}]}}
{"NPC"{NPC[{"Position"{sngArr[14,-0.24,44]}}{"TextureID"{str[35]}}{"ID"{int[3]}}{"Name"{str[Swimmer2]}}{"Action"{int[2]}}{"AdditionalValue"{str[3|trainer\fortune\water\003]}}{"Rotation"{int[3]}}{"Movement"{str[Looking]}}{"MoveRectangles"{recArr[]}}]}} {"NPC"{NPC[{"Position"{sngArr[14,-0.24,44]}}{"TextureID"{str[35]}}{"ID"{int[3]}}{"Name"{str[Swimmer2]}}{"Action"{int[2]}}{"AdditionalValue"{str[3|trainer\fortune\water\003|0]}}{"Rotation"{int[3]}}{"Movement"{str[Looking]}}{"MoveRectangles"{recArr[]}}]}}
Signs: Signs:
{"Entity"{ENT[{"EntityID"{str[SignBlock]}}{"Position"{sngArr[8,1,14]}}{"TexturePath"{str[Cherrygrove]}}{"Textures"{recArr[[16,32,16,16][32,32,16,16]]}}{"TextureIndex"{intArr[0,0,1,1,1,1,0,0,1,1]}}{"Collision"{bool[1]}}{"ModelID"{int[4]}}{"Action"{int[0]}}{"AdditionalValue"{str[Wanted!~The Ultimate Horn!]}}{"Rotation"{int[0]}}]}} {"Entity"{ENT[{"EntityID"{str[SignBlock]}}{"Position"{sngArr[8,1,14]}}{"TexturePath"{str[Cherrygrove]}}{"Textures"{recArr[[16,32,16,16][32,32,16,16]]}}{"TextureIndex"{intArr[0,0,1,1,1,1,0,0,1,1]}}{"Collision"{bool[1]}}{"ModelID"{int[4]}}{"Action"{int[0]}}{"AdditionalValue"{str[Wanted!~The Ultimate Horn!]}}{"Rotation"{int[0]}}]}}

View File

@ -27,6 +27,7 @@
Public TrainerSight As Integer = 1 Public TrainerSight As Integer = 1
Public TrainerBeaten As Boolean = False Public TrainerBeaten As Boolean = False
Public TrainerChecked As Boolean = False Public TrainerChecked As Boolean = False
Public TrainerCheckCollision As Boolean = True
Dim AnimateIdle As Boolean = True Dim AnimateIdle As Boolean = True
Dim AnimationX As Integer = 1 Dim AnimationX As Integer = 1
@ -82,6 +83,9 @@
Me.TrainerSight = CInt(Me.AdditionalValue.GetSplit(0, "|")) Me.TrainerSight = CInt(Me.AdditionalValue.GetSplit(0, "|"))
Me.AdditionalValue = Me.AdditionalValue.GetSplit(1, "|") Me.AdditionalValue = Me.AdditionalValue.GetSplit(1, "|")
If Me.AdditionalValue.Split.Count > 2 Then
Me.TrainerCheckCollision = CBool(Me.AdditionalValue.GetSplit(2, "|"))
End If
End If End If
Me.DropUpdateUnlessDrawn = False Me.DropUpdateUnlessDrawn = False
@ -380,91 +384,129 @@
distance = distance.ToPositive() distance = distance.ToPositive()
If distance <= Me.TrainerSight Then If distance <= Me.TrainerSight Then
Dim InSightMusic As String = "nomusic"
If Me.IsTrainer = True Then Dim canReach As Boolean = True
Dim trainerFilePath As String = GameModeManager.GetScriptPath(Me.AdditionalValue & ".dat") If TrainerCheckCollision = True Then
Security.FileValidation.CheckFileValid(trainerFilePath, False, "NPC.vb") Select Case faceRotation
Case 0
For i = CInt(Me.Position.Z - distance) To CInt(Me.Position.Z - 1)
If CheckCollision(New Vector3(Me.Position.X, Me.Position.Y, i), False) = False Then
canReach = False
Exit For
End If
Next
Case 2
For i = CInt(Me.Position.Z + 1) To CInt(Me.Position.Z + distance)
If CheckCollision(New Vector3(Me.Position.X, Me.Position.Y, i), False) = False Then
canReach = False
Exit For
End If
Next
Case 1
For i = CInt(Me.Position.X - distance) To CInt(Me.Position.X - 1)
If CheckCollision(New Vector3(i, Me.Position.Y, Me.Position.Z), False) = False Then
canReach = False
Exit For
End If
Next
Case 3
For i = CInt(Me.Position.X + 1) To CInt(Me.Position.X + distance)
If CheckCollision(New Vector3(i, Me.Position.Y, Me.Position.Z), False) = False Then
canReach = False
Exit For
End If
Next
End Select
Dim trainerContent() As String = System.IO.File.ReadAllLines(trainerFilePath)
For Each line As String In trainerContent
Dim l As String = line.Trim()
If l.ToLower.StartsWith("@trainer:") = True Then
Dim trainerID As String = l.GetSplit(1, ":")
If Trainer.IsBeaten(trainerID) = True Then
Exit Sub
Else
Dim t As New Trainer(trainerID)
InSightMusic = t.GetInSightMusic()
End If
ElseIf l.ToLower.StartsWith("@battle.starttrainer(") = True Then
Dim trainerID As String = l.Remove(l.Length - 1, 1).Remove(0, "@battle.starttrainer(".Length)
If Trainer.IsBeaten(trainerID) = True Then
Exit Sub
Else
Dim t As New Trainer(trainerID)
InSightMusic = t.GetInSightMusic()
End If
End If
Next
End If End If
If canReach = True Then
Dim needFacing As Integer = 0 Dim InSightMusic As String = "nomusic"
Select Case Me.faceRotation
Case 0
needFacing = 2
Case 1
needFacing = 3
Case 2
needFacing = 0
Case 3
needFacing = 1
End Select
CType(Core.CurrentScreen, OverworldScreen).TrainerEncountered = True If Me.IsTrainer = True Then
If InSightMusic <> "nomusic" And InSightMusic <> "" Then Dim trainerFilePath As String = GameModeManager.GetScriptPath(Me.AdditionalValue & ".dat")
MusicManager.Play(InSightMusic, True, 0.0F) Security.FileValidation.CheckFileValid(trainerFilePath, False, "NPC.vb")
End If
Screen.Camera.StopMovement()
Me.Movement = Movements.Still
Dim offset As New Vector2(0, 0) Dim trainerContent() As String = System.IO.File.ReadAllLines(trainerFilePath)
Select Case Me.faceRotation For Each line As String In trainerContent
Case 0 Dim l As String = line.Trim()
offset.Y = -0.01F If l.ToLower.StartsWith("@trainer:") = True Then
Case 1 Dim trainerID As String = l.GetSplit(1, ":")
offset.X = -0.01F If Trainer.IsBeaten(trainerID) = True Then
Case 2 Exit Sub
offset.Y = 0.01F Else
Case 3 Dim t As New Trainer(trainerID)
offset.X = 0.01F InSightMusic = t.GetInSightMusic()
End Select End If
ElseIf l.ToLower.StartsWith("@battle.starttrainer(") = True Then
Dim s As String = "version=2" & Environment.NewLine & Dim trainerID As String = l.Remove(l.Length - 1, 1).Remove(0, "@battle.starttrainer(".Length)
"@player.turnto(" & needFacing & ")" & Environment.NewLine If Trainer.IsBeaten(trainerID) = True Then
Exit Sub
With CType(Screen.Camera, OverworldCamera) Else
If CType(Screen.Camera, OverworldCamera).ThirdPerson = True And IsOnScreen() = False Then Dim t As New Trainer(trainerID)
s &= "@camera.setfocus(npc," & Me.NPCID & ")" & Environment.NewLine InSightMusic = t.GetInSightMusic()
Dim cPosition = .ThirdPersonOffset.X.ToString() & "," & .ThirdPersonOffset.Y.ToString() & "," & .ThirdPersonOffset.Z.ToString() End If
s &= "@sound.play(Emote_Exclamation)" & Environment.NewLine & End If
"@entity.showmessagebulb(1|" & Me.Position.X + offset.X & "|" & Me.Position.Y + 0.7F & "|" & Me.Position.Z + offset.Y & ")" & Environment.NewLine & Next
"@npc.move(" & Me.NPCID & "," & distance - 1 & ")" & Environment.NewLine &
"@script.start(" & Me.AdditionalValue & ")" & Environment.NewLine &
"@camera.resetfocus" & Environment.NewLine &
"@camera.setposition(" & cPosition & ")" & Environment.NewLine &
":end"
Else
s &= "@sound.play(Emote_Exclamation)" & Environment.NewLine &
"@entity.showmessagebulb(1|" & Me.Position.X + offset.X & "|" & Me.Position.Y + 0.7F & "|" & Me.Position.Z + offset.Y & ")" & Environment.NewLine &
"@npc.move(" & Me.NPCID & "," & distance - 1 & ")" & Environment.NewLine &
"@script.start(" & Me.AdditionalValue & ")" & Environment.NewLine &
":end"
End If End If
End With
CType(Core.CurrentScreen, OverworldScreen).ActionScript.StartScript(s, 2,,, "NPCInSight") Dim needFacing As Integer = 0
ActionScript.IsInSightScript = True Select Case Me.faceRotation
Case 0
needFacing = 2
Case 1
needFacing = 3
Case 2
needFacing = 0
Case 3
needFacing = 1
End Select
CType(Core.CurrentScreen, OverworldScreen).TrainerEncountered = True
If InSightMusic <> "nomusic" And InSightMusic <> "" Then
MusicManager.Play(InSightMusic, True, 0.0F)
End If
Screen.Camera.StopMovement()
Me.Movement = Movements.Still
Dim offset As New Vector2(0, 0)
Select Case Me.faceRotation
Case 0
offset.Y = -0.01F
Case 1
offset.X = -0.01F
Case 2
offset.Y = 0.01F
Case 3
offset.X = 0.01F
End Select
Dim s As String = "version=2" & Environment.NewLine &
"@player.turnto(" & needFacing & ")" & Environment.NewLine
With CType(Screen.Camera, OverworldCamera)
If CType(Screen.Camera, OverworldCamera).ThirdPerson = True And IsOnScreen() = False Then
s &= "@camera.setfocus(npc," & Me.NPCID & ")" & Environment.NewLine
Dim cPosition = .ThirdPersonOffset.X.ToString() & "," & .ThirdPersonOffset.Y.ToString() & "," & .ThirdPersonOffset.Z.ToString()
s &= "@sound.play(Emote_Exclamation)" & Environment.NewLine &
"@entity.showmessagebulb(1|" & Me.Position.X + offset.X & "|" & Me.Position.Y + 0.7F & "|" & Me.Position.Z + offset.Y & ")" & Environment.NewLine &
"@npc.move(" & Me.NPCID & "," & distance - 1 & ")" & Environment.NewLine &
"@script.start(" & Me.AdditionalValue & ")" & Environment.NewLine &
"@camera.resetfocus" & Environment.NewLine &
"@camera.setposition(" & cPosition & ")" & Environment.NewLine &
":end"
Else
s &= "@sound.play(Emote_Exclamation)" & Environment.NewLine &
"@entity.showmessagebulb(1|" & Me.Position.X + offset.X & "|" & Me.Position.Y + 0.7F & "|" & Me.Position.Z + offset.Y & ")" & Environment.NewLine &
"@npc.move(" & Me.NPCID & "," & distance - 1 & ")" & Environment.NewLine &
"@script.start(" & Me.AdditionalValue & ")" & Environment.NewLine &
":end"
End If
End With
CType(Core.CurrentScreen, OverworldScreen).ActionScript.StartScript(s, 2,,, "NPCInSight")
ActionScript.IsInSightScript = True
End If
End If End If
End If End If
End If End If
@ -793,50 +835,53 @@
End Select End Select
End Sub End Sub
Private Function CheckCollision(ByVal newPosition As Vector3) As Boolean Private Function CheckCollision(ByVal newPosition As Vector3, Optional CheckPlayer As Boolean = True) As Boolean
newPosition = New Vector3(CInt(newPosition.X), CInt(newPosition.Y), CInt(newPosition.Z)) newPosition = New Vector3(CInt(newPosition.X), CInt(newPosition.Y), CInt(newPosition.Z))
Dim oldPosition As Vector3 = Me.Position Dim oldPosition As Vector3 = Me.Position
Dim blocked As Boolean = False Dim blocked As Boolean = False
'' check if player or a following Pokémon is not in the way If CheckPlayer = True Then
If Screen.Camera.IsMoving() = False Then '' check if player or a following Pokémon is not in the way
If CInt(Screen.Camera.Position.X) = newPosition.X And CInt(Screen.Camera.Position.Y) = newPosition.Y And CInt(Screen.Camera.Position.Z) = newPosition.Z Then If Screen.Camera.IsMoving() = False Then
blocked = True If CInt(Screen.Camera.Position.X) = newPosition.X And CInt(Screen.Camera.Position.Y) = newPosition.Y And CInt(Screen.Camera.Position.Z) = newPosition.Z Then
End If
If Screen.Level.OverworldPokemon.IsVisible = True Then
If CInt(Screen.Level.OverworldPokemon.Position.X) = newPosition.X And CInt(Screen.Level.OverworldPokemon.Position.Y) = newPosition.Y And CInt(Screen.Level.OverworldPokemon.Position.Z) = newPosition.Z Then
blocked = True blocked = True
End If End If
End If If Screen.Level.OverworldPokemon.IsVisible = True Then
Else If CInt(Screen.Level.OverworldPokemon.Position.X) = newPosition.X And CInt(Screen.Level.OverworldPokemon.Position.Y) = newPosition.Y And CInt(Screen.Level.OverworldPokemon.Position.Z) = newPosition.Z Then
Dim cameraNewPosition As Vector3 = CType(Screen.Camera, OverworldCamera).LastStepPosition + Screen.Camera.PlannedMovement() blocked = True
Dim cameraOldPosition As Vector3 = CType(Screen.Camera, OverworldCamera).LastStepPosition End If
End If
Else
Dim cameraNewPosition As Vector3 = CType(Screen.Camera, OverworldCamera).LastStepPosition + Screen.Camera.PlannedMovement()
Dim cameraOldPosition As Vector3 = CType(Screen.Camera, OverworldCamera).LastStepPosition
If CInt(cameraNewPosition.X) = newPosition.X And CInt(cameraNewPosition.Y) = newPosition.Y And CInt(cameraNewPosition.Z) = newPosition.Z Then If CInt(cameraNewPosition.X) = newPosition.X And CInt(cameraNewPosition.Y) = newPosition.Y And CInt(cameraNewPosition.Z) = newPosition.Z Then
blocked = True
End If
If Screen.Level.OverworldPokemon.IsVisible = True Then
If CInt(Screen.Level.OverworldPokemon.Position.X) = newPosition.X And CInt(Screen.Level.OverworldPokemon.Position.Y) = newPosition.Y And CInt(Screen.Level.OverworldPokemon.Position.Z) = newPosition.Z OrElse
CInt(cameraOldPosition.X) = newPosition.X And CInt(cameraOldPosition.Y) = newPosition.Y And CInt(cameraOldPosition.Z) = newPosition.Z Then
blocked = True blocked = True
End If End If
If Screen.Level.OverworldPokemon.IsVisible = True Then
If CInt(Screen.Level.OverworldPokemon.Position.X) = newPosition.X And CInt(Screen.Level.OverworldPokemon.Position.Y) = newPosition.Y And CInt(Screen.Level.OverworldPokemon.Position.Z) = newPosition.Z OrElse
CInt(cameraOldPosition.X) = newPosition.X And CInt(cameraOldPosition.Y) = newPosition.Y And CInt(cameraOldPosition.Z) = newPosition.Z Then
blocked = True
End If
End If
End If End If
'' check if a NetworkPlayer is not in the way
For Each Player As NetworkPlayer In Screen.Level.NetworkPlayers
If CInt(Player.Position.X) = newPosition.X And CInt(Player.Position.Y) = newPosition.Y And CInt(Player.Position.Z) = newPosition.Z Then
blocked = True
Exit For
End If
Next
'' check if a NetworkPokémon is not in the way
For Each Pokemon As NetworkPokemon In Screen.Level.NetworkPokemon
If CInt(Pokemon.Position.X) = newPosition.X And CInt(Pokemon.Position.Y) = newPosition.Y And CInt(Pokemon.Position.Z) = newPosition.Z Then
blocked = True
Exit For
End If
Next
End If End If
'' check if a NetworkPlayer is not in the way
For Each Player As NetworkPlayer In Screen.Level.NetworkPlayers
If CInt(Player.Position.X) = newPosition.X And CInt(Player.Position.Y) = newPosition.Y And CInt(Player.Position.Z) = newPosition.Z Then
blocked = True
Exit For
End If
Next
'' check if a NetworkPokémon is not in the way
For Each Pokemon As NetworkPokemon In Screen.Level.NetworkPokemon
If CInt(Pokemon.Position.X) = newPosition.X And CInt(Pokemon.Position.Y) = newPosition.Y And CInt(Pokemon.Position.Z) = newPosition.Z Then
blocked = True
Exit For
End If
Next
'' check if an NPC is not in the way '' check if an NPC is not in the way
For Each NPC As NPC In Screen.Level.GetNPCs() For Each NPC As NPC In Screen.Level.GetNPCs()
If CInt(NPC.Position.X) = newPosition.X And CInt(NPC.Position.Y) = newPosition.Y And CInt(NPC.Position.Z) = newPosition.Z And NPC.NPCID <> Me.NPCID Then If CInt(NPC.Position.X) = newPosition.X And CInt(NPC.Position.Y) = newPosition.Y And CInt(NPC.Position.Z) = newPosition.Z And NPC.NPCID <> Me.NPCID Then