diff --git a/P3D/Content/Data/Scripts/quest/sevault/chansey.dat b/P3D/Content/Data/Scripts/quest/sevault/chansey.dat
new file mode 100644
index 000000000..d94d64272
Binary files /dev/null and b/P3D/Content/Data/Scripts/quest/sevault/chansey.dat differ
diff --git a/P3D/Content/Data/Scripts/quest/sevault/danceguy.dat b/P3D/Content/Data/Scripts/quest/sevault/danceguy.dat
new file mode 100644
index 000000000..9e3272cb7
Binary files /dev/null and b/P3D/Content/Data/Scripts/quest/sevault/danceguy.dat differ
diff --git a/P3D/Content/Data/maps/fortune/0.dat b/P3D/Content/Data/maps/fortune/0.dat
new file mode 100644
index 000000000..a0421f030
Binary files /dev/null and b/P3D/Content/Data/maps/fortune/0.dat differ
diff --git a/P3D/Content/Data/maps/quest/1.dat b/P3D/Content/Data/maps/quest/1.dat
index 0feb8191f..0033afaf6 100644
--- a/P3D/Content/Data/maps/quest/1.dat
+++ b/P3D/Content/Data/maps/quest/1.dat
@@ -1,4 +1,4 @@
-{"Level"{LEV[{"Name"{str[Sevault Canyon]}}{"MusicLoop"{str[RouteMusic4]}}{"CurrentRegion"{str[sevii islands]}}]}}
+{"Level"{LEV[{"Name"{str[Sevault Canyon]}}{"MusicLoop"{str[violet]}}{"CurrentRegion"{str[sevii islands]}}]}}
{"Actions"{LEV[{"CanTeleport"{bool[0]}}{"CanDig"{bool[0]}}{"CanFly"{bool[0]}}{"EnviromentType"{int[1]}}{"Weather"{int[1]}}]}}
Floor:
@@ -24,23 +24,20 @@ Ceiling:
Furniture:
Table:
-{"Entity"{ENT[{"Scale"{sngArr[1,0.2,1]}}{"EntityID"{str[WallBlock]}}{"Position"{sngArr[3,-0.4,2]}}{"TexturePath"{str[Lab]}}{"Textures"{recArr[[16,64,16,3][16,67,16,3][16,70,16,3][16,73,16,3]]}}{"TextureIndex"{intArr[3,3,3,3,0,0,2,2,3,3]}}{"Collision"{bool[1]}}{"ModelID"{int[1]}}{"Action"{int[0]}}{"AdditionalValue"{str[]}}{"Rotation"{int[0]}}]}}
-{"Entity"{ENT[{"Scale"{sngArr[1,0.2,1]}}{"EntityID"{str[WallBlock]}}{"Position"{sngArr[4,-0.4,2]}}{"TexturePath"{str[Lab]}}{"Textures"{recArr[[16,64,16,3][16,67,16,3][16,70,16,3][16,73,16,3]]}}{"TextureIndex"{intArr[3,3,2,2,3,3,0,0,3,3]}}{"Collision"{bool[1]}}{"ModelID"{int[1]}}{"Action"{int[0]}}{"AdditionalValue"{str[]}}{"Rotation"{int[0]}}]}}
-{"Entity"{ENT[{"Scale"{sngArr[1,0.2,1]}}{"EntityID"{str[WallBlock]}}{"Position"{sngArr[3,-0.4,3]}}{"TexturePath"{str[Lab]}}{"Textures"{recArr[[16,64,16,3][16,67,16,3][16,70,16,3][16,73,16,3]]}}{"TextureIndex"{intArr[0,0,3,3,2,2,3,3,3,3]}}{"Collision"{bool[1]}}{"ModelID"{int[1]}}{"Action"{int[0]}}{"AdditionalValue"{str[]}}{"Rotation"{int[0]}}]}}
-{"Entity"{ENT[{"Scale"{sngArr[1,0.2,1]}}{"EntityID"{str[WallBlock]}}{"Position"{sngArr[4,-0.4,3]}}{"TexturePath"{str[Lab]}}{"Textures"{recArr[[16,64,16,3][16,67,16,3][16,70,16,3][16,73,16,3]]}}{"TextureIndex"{intArr[2,2,0,0,3,3,3,3,3,3]}}{"Collision"{bool[1]}}{"ModelID"{int[1]}}{"Action"{int[0]}}{"AdditionalValue"{str[]}}{"Rotation"{int[0]}}]}}
+{"Entity"{ENT[{"Scale"{sngArr[1,0.2,1]}}{"EntityID"{str[WallBlock]}}{"Position"{sngArr[3,-0.4,2]}}{"TexturePath"{str[Lab]}}{"Textures"{recArr[[16,64,16,3][16,67,16,3][16,70,16,3][16,73,16,3]]}}{"TextureIndex"{intArr[3,3,3,3,0,0,2,2,3,3]}}{"Collision"{bool[1]}}{"ModelID"{int[1]}}{"Action"{int[0]}}{"AdditionalValue"{str[]}}{"CameraDistanceDelta"{sng[0.2]}}{"Rotation"{int[0]}}]}}
+{"Entity"{ENT[{"Scale"{sngArr[1,0.2,1]}}{"EntityID"{str[WallBlock]}}{"Position"{sngArr[4,-0.4,2]}}{"TexturePath"{str[Lab]}}{"Textures"{recArr[[16,64,16,3][16,67,16,3][16,70,16,3][16,73,16,3]]}}{"TextureIndex"{intArr[3,3,2,2,3,3,0,0,3,3]}}{"Collision"{bool[1]}}{"ModelID"{int[1]}}{"Action"{int[0]}}{"AdditionalValue"{str[]}}{"CameraDistanceDelta"{sng[0.2]}}{"Rotation"{int[0]}}]}}
+{"Entity"{ENT[{"Scale"{sngArr[1,0.2,1]}}{"EntityID"{str[WallBlock]}}{"Position"{sngArr[3,-0.4,3]}}{"TexturePath"{str[Lab]}}{"Textures"{recArr[[16,64,16,3][16,67,16,3][16,70,16,3][16,73,16,3]]}}{"TextureIndex"{intArr[0,0,3,3,2,2,3,3,3,3]}}{"Collision"{bool[1]}}{"ModelID"{int[1]}}{"Action"{int[0]}}{"AdditionalValue"{str[]}}{"CameraDistanceDelta"{sng[0.2]}}{"Rotation"{int[0]}}]}}
+{"Entity"{ENT[{"Scale"{sngArr[1,0.2,1]}}{"EntityID"{str[WallBlock]}}{"Position"{sngArr[4,-0.4,3]}}{"TexturePath"{str[Lab]}}{"Textures"{recArr[[16,64,16,3][16,67,16,3][16,70,16,3][16,73,16,3]]}}{"TextureIndex"{intArr[2,2,0,0,3,3,3,3,3,3]}}{"Collision"{bool[1]}}{"ModelID"{int[1]}}{"Action"{int[0]}}{"AdditionalValue"{str[]}}{"CameraDistanceDelta"{sng[0.2]}}{"Rotation"{int[0]}}]}}
-{"Entity"{ENT[{"Scale"{sngArr[1,0.2,1]}}{"EntityID"{str[WallBlock]}}{"Position"{sngArr[3,-0.2,2]}}{"TexturePath"{str[House]}}{"Textures"{recArr[[64,80,16,3][80,64,16,16]]}}{"TextureIndex"{intArr[0,0,0,0,0,0,0,0,1,1]}}{"Collision"{bool[1]}}{"ModelID"{int[1]}}{"Action"{int[0]}}{"AdditionalValue"{str[]}}{"Rotation"{int[0]}}]}}
-{"Entity"{ENT[{"Scale"{sngArr[1,0.2,1]}}{"EntityID"{str[WallBlock]}}{"Position"{sngArr[4,-0.2,2]}}{"TexturePath"{str[House]}}{"Textures"{recArr[[64,80,16,3][96,64,16,16]]}}{"TextureIndex"{intArr[0,0,0,0,0,0,0,0,1,1]}}{"Collision"{bool[1]}}{"ModelID"{int[1]}}{"Action"{int[0]}}{"AdditionalValue"{str[]}}{"Rotation"{int[0]}}]}}
-{"Entity"{ENT[{"Scale"{sngArr[1,0.2,1]}}{"EntityID"{str[WallBlock]}}{"Position"{sngArr[3,-0.2,3]}}{"TexturePath"{str[House]}}{"Textures"{recArr[[64,80,16,3][80,80,16,16]]}}{"TextureIndex"{intArr[0,0,0,0,0,0,0,0,1,1]}}{"Collision"{bool[1]}}{"ModelID"{int[1]}}{"Action"{int[0]}}{"AdditionalValue"{str[]}}{"Rotation"{int[0]}}]}}
-{"Entity"{ENT[{"Scale"{sngArr[1,0.2,1]}}{"EntityID"{str[WallBlock]}}{"Position"{sngArr[4,-0.2,3]}}{"TexturePath"{str[House]}}{"Textures"{recArr[[64,80,16,3][96,80,16,16]]}}{"TextureIndex"{intArr[0,0,0,0,0,0,0,0,1,1]}}{"Collision"{bool[1]}}{"ModelID"{int[1]}}{"Action"{int[0]}}{"AdditionalValue"{str[]}}{"Rotation"{int[0]}}]}}
+{"Entity"{ENT[{"Scale"{sngArr[1,0.2,1]}}{"EntityID"{str[WallBlock]}}{"Position"{sngArr[3,-0.2,2]}}{"TexturePath"{str[House]}}{"Textures"{recArr[[64,80,16,3][80,64,16,16]]}}{"TextureIndex"{intArr[0,0,0,0,0,0,0,0,1,1]}}{"Collision"{bool[1]}}{"ModelID"{int[1]}}{"Action"{int[0]}}{"AdditionalValue"{str[]}}{"CameraDistanceDelta"{sng[0.2]}}{"Rotation"{int[0]}}]}}
+{"Entity"{ENT[{"Scale"{sngArr[1,0.2,1]}}{"EntityID"{str[WallBlock]}}{"Position"{sngArr[4,-0.2,2]}}{"TexturePath"{str[House]}}{"Textures"{recArr[[64,80,16,3][96,64,16,16]]}}{"TextureIndex"{intArr[0,0,0,0,0,0,0,0,1,1]}}{"Collision"{bool[1]}}{"ModelID"{int[1]}}{"Action"{int[0]}}{"AdditionalValue"{str[]}}{"CameraDistanceDelta"{sng[0.2]}}{"Rotation"{int[0]}}]}}
+{"Entity"{ENT[{"Scale"{sngArr[1,0.2,1]}}{"EntityID"{str[WallBlock]}}{"Position"{sngArr[3,-0.2,3]}}{"TexturePath"{str[House]}}{"Textures"{recArr[[64,80,16,3][80,80,16,16]]}}{"TextureIndex"{intArr[0,0,0,0,0,0,0,0,1,1]}}{"Collision"{bool[1]}}{"ModelID"{int[1]}}{"Action"{int[0]}}{"AdditionalValue"{str[]}}{"CameraDistanceDelta"{sng[0.2]}}{"Rotation"{int[0]}}]}}
+{"Entity"{ENT[{"Scale"{sngArr[1,0.2,1]}}{"EntityID"{str[WallBlock]}}{"Position"{sngArr[4,-0.2,3]}}{"TexturePath"{str[House]}}{"Textures"{recArr[[64,80,16,3][96,80,16,16]]}}{"TextureIndex"{intArr[0,0,0,0,0,0,0,0,1,1]}}{"Collision"{bool[1]}}{"ModelID"{int[1]}}{"Action"{int[0]}}{"AdditionalValue"{str[]}}{"CameraDistanceDelta"{sng[0.2]}}{"Rotation"{int[0]}}]}}
chairs:
{"Entity"{ENT[{"Scale"{sngArr[0.5,1,0.5]}}{"EntityID"{str[WallBlock]}}{"Position"{sngArr[5,0.21,3]}}{"TexturePath"{str[House2]}}{"Textures"{recArr[[0,48,16,16]]}}{"TextureIndex"{intArr[0,0]}}{"Collision"{bool[0]}}{"ModelID"{int[0]}}{"Action"{int[0]}}{"AdditionalValue"{str[]}}{"Rotation"{int[0]}}]}}
{"Entity"{ENT[{"Scale"{sngArr[0.3,0.2,0.3]}}{"EntityID"{str[WallBlock]}}{"Position"{sngArr[5,-0.4,3]}}{"TexturePath"{str[House2]}}{"Textures"{recArr[[16,57,16,7]]}}{"TextureIndex"{intArr[0,0,0,0,0,0,0,0,0,0]}}{"Collision"{bool[0]}}{"ModelID"{int[1]}}{"Action"{int[0]}}{"AdditionalValue"{str[]}}{"Rotation"{int[0]}}]}}
-{"Entity"{ENT[{"Scale"{sngArr[0.5,1,0.5]}}{"EntityID"{str[WallBlock]}}{"Position"{sngArr[2,0.21,3]}}{"TexturePath"{str[House2]}}{"Textures"{recArr[[0,48,16,16]]}}{"TextureIndex"{intArr[0,0]}}{"Collision"{bool[0]}}{"ModelID"{int[0]}}{"Action"{int[0]}}{"AdditionalValue"{str[]}}{"Rotation"{int[0]}}]}}
-{"Entity"{ENT[{"Scale"{sngArr[0.3,0.2,0.3]}}{"EntityID"{str[WallBlock]}}{"Position"{sngArr[2,-0.4,3]}}{"TexturePath"{str[House2]}}{"Textures"{recArr[[16,57,16,7]]}}{"TextureIndex"{intArr[0,0,0,0,0,0,0,0,0,0]}}{"Collision"{bool[0]}}{"ModelID"{int[1]}}{"Action"{int[0]}}{"AdditionalValue"{str[]}}{"Rotation"{int[0]}}]}}
-
Plants:
{"Entity"{ENT[{"Scale"{sngArr[0.6,0.6,0.6]}}{"EntityID"{str[WallBill]}}{"Position"{sngArr[0,-0.25,6]}}{"TexturePath"{str[House2]}}{"Textures"{recArr[[0,32,16,16]]}}{"TextureIndex"{intArr[0,0]}}{"Collision"{bool[1]}}{"ModelID"{int[3]}}{"Action"{int[0]}}{"AdditionalValue"{str[]}}{"Rotation"{int[0]}}]}}
{"Entity"{ENT[{"Scale"{sngArr[0.6,0.6,0.6]}}{"EntityID"{str[WallBill]}}{"Position"{sngArr[0,0.35,6]}}{"TexturePath"{str[House2]}}{"Textures"{recArr[[0,16,16,16]]}}{"TextureIndex"{intArr[0,0]}}{"Collision"{bool[1]}}{"ModelID"{int[3]}}{"Action"{int[0]}}{"AdditionalValue"{str[]}}{"Rotation"{int[0]}}]}}
@@ -62,5 +59,8 @@ tv:
{"Entity"{ENT[{"Scale"{sngArr[0.8,0.5,0.3]}}{"EntityID"{str[WallBlock]}}{"Position"{sngArr[2,0.15,0]}}{"TexturePath"{str[House]}}{"Textures"{recArr[[80,48,16,11][96,48,16,11][80,59,16,4]]}}{"TextureIndex"{intArr[0,0,1,1,1,1,2,2,2,2]}}{"Collision"{bool[1]}}{"ModelID"{int[1]}}{"Action"{int[0]}}{"AdditionalValue"{str[]}}{"Rotation"{int[0]}}]}}
NPCs:
-{"NPC"{NPC[{"Position"{sngArr[2,0,2]}}{"TextureID"{str[9]}}{"ID"{int[0]}}{"Name"{str[Father]}}{"Action"{int[0]}}{"AdditionalValue"{str[Urrrrrrrrgggghhhh...~Kwaaaaah!*...It's useless!*I can't make this spoon~bend with my mind.*Maybe I really don't have~any psychic powers.]}}{"Rotation"{int[3]}}{"Movement"{str[Still]}}{"MoveRectangles"{recArr[]}}]}}
-{"NPC"{NPC[{"Position"{sngArr[5,0,2]}}{"TextureID"{str[8]}}{"ID"{int[1]}}{"Name"{str[Father]}}{"Action"{int[0]}}{"AdditionalValue"{str[You know about a girl~Gym Leader in Saffron City?*She uses Psychic-type~Pokémon, right?*I admire her,~I really do.*I've heard she's one cool~customer and beautiful, too.]}}{"Rotation"{int[1]}}{"Movement"{str[Still]}}{"MoveRectangles"{recArr[]}}]}}
+{"NPC"{NPC[{"Position"{sngArr[1,0,2]}}{"TextureID"{str[9]}}{"ID"{int[0]}}{"Name"{str[Man]}}{"Action"{int[1]}}{"AdditionalValue"{str[quest\sevault\danceguy]}}{"Rotation"{int[2]}}{"Movement"{str[Still]}}{"MoveRectangles"{recArr[]}}]}}
+{"NPC"{NPC[{"Position"{sngArr[4,0,0]}}{"TextureID"{str[[POKEMON|N]113]}}{"ID"{int[1]}}{"Name"{str[Chansey]}}{"Action"{int[1]}}{"AdditionalValue"{str[quest\sevault\chansey]}}{"Rotation"{int[2]}}{"Movement"{str[Still]}}{"MoveRectangles"{recArr[]}}]}}
+
+Lucky Punch:
+{"Entity"{ENT[{"EntityID"{str[ItemObject]}}{"Position"{sngArr[4,0.03,2]}}{"TexturePath"{str[Routes]}}{"Textures"{recArr[[192,16,16,16]]}}{"TextureIndex"{intArr[0,0]}}{"Collision"{bool[1]}}{"ModelID"{int[3]}}{"Action"{int[0]}}{"AdditionalValue"{str[0,30]}}{"Rotation"{int[0]}}{"Scale"{sngArr[0.25,0.25,0.25]}}]}}
\ No newline at end of file
diff --git a/P3D/Debug/DebugFileWatcher.vb b/P3D/Debug/DebugFileWatcher.vb
index 5d951020f..db278159f 100644
--- a/P3D/Debug/DebugFileWatcher.vb
+++ b/P3D/Debug/DebugFileWatcher.vb
@@ -33,7 +33,8 @@ Public Class DebugFileWatcher
End Sub
Private Shared Function GetProjectPath() As String
- Return New DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory).Parent.Parent.FullName
+ Return New DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory).Parent.Parent.FullName '' Remove when making builds for others.
+ 'Return New DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory).FullName ''Use this one instead in such case.
End Function
Public Shared Sub StartWatching()
diff --git a/P3D/Entites/Entity.vb b/P3D/Entites/Entity.vb
index 5a7305195..6cbb82b30 100644
--- a/P3D/Entites/Entity.vb
+++ b/P3D/Entites/Entity.vb
@@ -23,12 +23,15 @@
Public Shader As New Vector3(1.0F)
Public Shaders As New List(Of Vector3)
+ Public CameraDistanceDelta As Single = 0.0F
+
Public SeasonColorTexture As String = ""
Public FaceDirection As Integer = 0
Public Moved As Single = 0.0F
Public Speed As Single = 0.04F
Public CanMove As Boolean = False
+ Public isDancing As Boolean = False
Public Opacity As Single = 1.0F
Private _normalOpactity As Single = 1.0F
@@ -122,7 +125,7 @@
Me.UpdateEntity()
End Sub
- Public Shared Function GetNewEntity(ByVal EntityID As String, ByVal Position As Vector3, ByVal Textures() As Texture2D, ByVal TextureIndex() As Integer, ByVal Collision As Boolean, ByVal Rotation As Vector3, ByVal Scale As Vector3, ByVal Model As BaseModel, ByVal ActionValue As Integer, ByVal AdditionalValue As String, ByVal Visible As Boolean, ByVal Shader As Vector3, ByVal ID As Integer, ByVal MapOrigin As String, ByVal SeasonColorTexture As String, ByVal Offset As Vector3, Optional ByVal Params() As Object = Nothing, Optional ByVal Opacity As Single = 1.0F, Optional ByVal AnimationData As List(Of List(Of Integer)) = Nothing) As Entity
+ Public Shared Function GetNewEntity(ByVal EntityID As String, ByVal Position As Vector3, ByVal Textures() As Texture2D, ByVal TextureIndex() As Integer, ByVal Collision As Boolean, ByVal Rotation As Vector3, ByVal Scale As Vector3, ByVal Model As BaseModel, ByVal ActionValue As Integer, ByVal AdditionalValue As String, ByVal Visible As Boolean, ByVal Shader As Vector3, ByVal ID As Integer, ByVal MapOrigin As String, ByVal SeasonColorTexture As String, ByVal Offset As Vector3, Optional ByVal Params() As Object = Nothing, Optional ByVal Opacity As Single = 1.0F, Optional ByVal AnimationData As List(Of List(Of Integer)) = Nothing, Optional ByVal CameraDistanceDelta As Single = 0.0F) As Entity
Dim newEnt As New Entity()
Dim propertiesEnt As New Entity()
@@ -144,6 +147,7 @@
propertiesEnt.MapOrigin = MapOrigin
propertiesEnt.SeasonColorTexture = SeasonColorTexture
propertiesEnt.Offset = Offset
+ propertiesEnt.CameraDistanceDelta = CameraDistanceDelta
Select Case EntityID.ToLower()
Case "animatedblock"
@@ -285,6 +289,7 @@
newEnt.SeasonColorTexture = PropertiesEnt.SeasonColorTexture
newEnt.Offset = PropertiesEnt.Offset
newEnt.NormalOpacity = PropertiesEnt.Opacity
+ newEnt.CameraDistanceDelta = PropertiesEnt.CameraDistanceDelta
End Sub
Public Shared Function GetRotationFromInteger(ByVal i As Integer) As Vector3
@@ -360,7 +365,7 @@
End Function
Protected Overridable Function CalculateCameraDistance(CPosition As Vector3) As Single
- Return Vector3.Distance(Me.GetCameraDistanceCenterPoint(), CPosition)
+ Return Vector3.Distance(Me.GetCameraDistanceCenterPoint(), CPosition) + CameraDistanceDelta
End Function
Public Overridable Sub UpdateEntity()
@@ -399,6 +404,7 @@
End Select
movement *= Speed
+
Me.Position += movement
Me.CreatedWorld = False
@@ -407,6 +413,7 @@
Me.Position.X = CInt(Me.Position.X)
Me.Position.Z = CInt(Me.Position.Z)
+
End If
End If
diff --git a/P3D/Entites/Other/NPC.vb b/P3D/Entites/Other/NPC.vb
index 4c7c76574..fe84e466f 100644
--- a/P3D/Entites/Other/NPC.vb
+++ b/P3D/Entites/Other/NPC.vb
@@ -621,7 +621,9 @@
Private Sub Move()
If Moved > 0.0F Then
- Me.Position += GetMove()
+ If Not isDancing Then
+ Me.Position += GetMove()
+ End If
If Me.Speed < 0 Then
Moved += Me.Speed
diff --git a/P3D/Entites/Other/OwnPlayer.vb b/P3D/Entites/Other/OwnPlayer.vb
index dc6232016..61db3da4f 100644
--- a/P3D/Entites/Other/OwnPlayer.vb
+++ b/P3D/Entites/Other/OwnPlayer.vb
@@ -95,7 +95,7 @@
End Sub
Private Sub Move()
- If Screen.Camera.IsMoving() = True And Me.DoAnimation = True Then
+ If (Screen.Camera.IsMoving() = True And Me.DoAnimation = True) OrElse (Screen.Level.OwnPlayer IsNot Nothing AndAlso Screen.Level.OwnPlayer.isDancing) Then
Me.AnimationDelay -= 0.13F
If AnimationDelay <= 0.0F Then
AnimationDelay = GetAnimationDelay()
diff --git a/P3D/Overworld/OverworldCamera.vb b/P3D/Overworld/OverworldCamera.vb
index b645b4aae..c25592e20 100644
--- a/P3D/Overworld/OverworldCamera.vb
+++ b/P3D/Overworld/OverworldCamera.vb
@@ -547,12 +547,15 @@ Public Class OverworldCamera
If _moved > 0.0F And Turning = False Then
Dim v As Vector3 = PlannedMovement * Speed
- Position += v
+ If Not Screen.Level.OwnPlayer().isDancing Then
+ Position += v
+ End If
+
_moved -= Speed
If _moved <= 0.0F Then
StopMovement()
-
+ Screen.Level.OwnPlayer().isDancing = False
Position.X = Position.X.ToInteger()
Position.Y = Position.Y.ToInteger() + 0.1F
Position.Z = Position.Z.ToInteger()
diff --git a/P3D/P3D.vbproj b/P3D/P3D.vbproj
index 2b2dd8838..28bd2345f 100644
--- a/P3D/P3D.vbproj
+++ b/P3D/P3D.vbproj
@@ -25441,6 +25441,15 @@
PreserveNewest
+
+ Always
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
diff --git a/P3D/Security/FileValidation.vb b/P3D/Security/FileValidation.vb
index f210083ee..9ae986535 100644
--- a/P3D/Security/FileValidation.vb
+++ b/P3D/Security/FileValidation.vb
@@ -6,7 +6,7 @@
Shared _valid As Boolean = False
Const RUNVALIDATION As Boolean = False
- Const EXPECTEDSIZE As Integer = 42421461
+ Const EXPECTEDSIZE As Integer = 977834
Const METAHASH As String = "MEEzNjIzMUE5RkEwNEFCQjgwQUQwODQ1NDVDRjVCNzQ="
Public Shared ReadOnly Property IsValid(ByVal ForceResult As Boolean) As Boolean
diff --git a/P3D/World/ActionScript/V2/ScriptCommands/DoNPC.vb b/P3D/World/ActionScript/V2/ScriptCommands/DoNPC.vb
index 2485d1a53..d58c2bb5f 100644
--- a/P3D/World/ActionScript/V2/ScriptCommands/DoNPC.vb
+++ b/P3D/World/ActionScript/V2/ScriptCommands/DoNPC.vb
@@ -125,6 +125,63 @@
targetNPC.Moved += steps
targetNPC.MoveAsync = True
+ IsReady = True
+ Case "dance"
+ Dim targetNPC As NPC = Screen.Level.GetNPC(int(argument.GetSplit(0)))
+ Dim steps As Integer = int(argument.GetSplit(1))
+
+ Screen.Level.UpdateEntities()
+ targetNPC.isDancing = True
+ If ScriptV2.started = False Then
+ If steps < 0 Then
+ If targetNPC.Speed > 0 Then
+ targetNPC.Speed *= -1
+ End If
+ Else
+ If targetNPC.Speed < 0 Then
+ targetNPC.Speed *= -1
+ End If
+ End If
+
+ steps = steps.ToPositive()
+
+ targetNPC.Moved += steps
+ ScriptV2.started = True
+ Else
+ If targetNPC.Moved <= 0.0F Then
+ If targetNPC.Speed < 0 Then
+ targetNPC.Speed *= -1
+ End If
+ IsReady = True
+ Else
+ If targetNPC.InCameraFocus() = True Then
+ Screen.Camera.Update()
+ End If
+ End If
+ End If
+ Case "danceasync"
+
+ Dim targetNPC As NPC = Screen.Level.GetNPC(int(argument.GetSplit(0)))
+ Dim steps As Integer = int(argument.GetSplit(1))
+
+ Screen.Level.UpdateEntities()
+
+ targetNPC.isDancing = True
+ If steps < 0 Then
+ If targetNPC.Speed > 0 Then
+ targetNPC.Speed *= -1
+ End If
+ Else
+ If targetNPC.Speed < 0 Then
+ targetNPC.Speed *= -1
+ End If
+ End If
+
+ steps = steps.ToPositive()
+
+ targetNPC.Moved += steps
+ targetNPC.MoveAsync = True
+
IsReady = True
Case "turn"
Dim targetNPC As NPC = Screen.Level.GetNPC(int(argument.GetSplit(0)))
diff --git a/P3D/World/ActionScript/V2/ScriptCommands/DoPlayer.vb b/P3D/World/ActionScript/V2/ScriptCommands/DoPlayer.vb
index ae44e062b..e9053ab3f 100644
--- a/P3D/World/ActionScript/V2/ScriptCommands/DoPlayer.vb
+++ b/P3D/World/ActionScript/V2/ScriptCommands/DoPlayer.vb
@@ -65,6 +65,20 @@
IsReady = True
End If
End If
+ Case "dance"
+ Screen.Level.OwnPlayer().isDancing = True
+ If Started = False Then
+ Screen.Camera.Move(sng(argument))
+ Started = True
+ Screen.Level.OverworldPokemon.Visible = False
+ Else
+ Screen.Level.UpdateEntities()
+ Screen.Camera.Update()
+ If Screen.Camera.IsMoving() = False Then
+ IsReady = True
+ Screen.Level.OverworldPokemon.Visible = False
+ End If
+ End If
Case "turnasync"
Screen.Camera.Turn(int(argument))
IsReady = True
diff --git a/P3D/World/LevelLoader.vb b/P3D/World/LevelLoader.vb
index 6ea8202af..ad78f1bea 100644
--- a/P3D/World/LevelLoader.vb
+++ b/P3D/World/LevelLoader.vb
@@ -859,6 +859,11 @@
Opacity = CSng(GetTag(Tags, "Opacity"))
End If
+ Dim CameraDistanceDelta As Single = 0.0F
+ If TagExists(Tags, "CameraDistanceDelta") = True Then
+ CameraDistanceDelta = CSng(GetTag(Tags, "CameraDistanceDelta"))
+ End If
+
For X = 0 To Size.Width - 1 Step Steps.X
For Z = 0 To Size.Height - 1 Step Steps.Z
For Y = 0 To SizeY - 1 Step Steps.Y
@@ -906,7 +911,8 @@
Offset,
{},
Opacity,
- AnimationData)
+ AnimationData,
+ CameraDistanceDelta)
newEnt.IsOffsetMapContent = loadOffsetMap
If Not newEnt Is Nothing Then
diff --git a/lib/P3D.ContentPipeline/Content/Content.mgcb b/lib/P3D.ContentPipeline/Content/Content.mgcb
index 5c5f5d93d..995d65cd5 100644
--- a/lib/P3D.ContentPipeline/Content/Content.mgcb
+++ b/lib/P3D.ContentPipeline/Content/Content.mgcb
@@ -1378,3 +1378,15 @@
/processorParam:Quality=Best
/build:Songs/wind.ogg
+#begin Songs/trainerschool.ogg
+/importer:OggImporter
+/processor:SongProcessor
+/processorParam:Quality=Best
+/build:Songs/trainerschool.ogg
+
+#begin Songs/intro/trainerschool.ogg
+/importer:OggImporter
+/processor:SongProcessor
+/processorParam:Quality=Best
+/build:Songs/intro/trainerschool.ogg
+
diff --git a/lib/P3D.ContentPipeline/Content/Songs/intro/trainerschool.ogg b/lib/P3D.ContentPipeline/Content/Songs/intro/trainerschool.ogg
new file mode 100644
index 000000000..513cf61c7
Binary files /dev/null and b/lib/P3D.ContentPipeline/Content/Songs/intro/trainerschool.ogg differ
diff --git a/lib/P3D.ContentPipeline/Content/Songs/trainerschool.ogg b/lib/P3D.ContentPipeline/Content/Songs/trainerschool.ogg
new file mode 100644
index 000000000..f431b67ee
Binary files /dev/null and b/lib/P3D.ContentPipeline/Content/Songs/trainerschool.ogg differ
diff --git a/lib/build/Content/Songs/intro/trainerschool.xnb b/lib/build/Content/Songs/intro/trainerschool.xnb
new file mode 100644
index 000000000..6052deda0
Binary files /dev/null and b/lib/build/Content/Songs/intro/trainerschool.xnb differ
diff --git a/lib/build/Content/Songs/trainerschool.xnb b/lib/build/Content/Songs/trainerschool.xnb
new file mode 100644
index 000000000..c504836c1
Binary files /dev/null and b/lib/build/Content/Songs/trainerschool.xnb differ
diff --git a/lib/build/Pokemon3D.exe b/lib/build/Pokemon3D.exe
index 8c9350e45..8d1129079 100644
Binary files a/lib/build/Pokemon3D.exe and b/lib/build/Pokemon3D.exe differ