Added a GameMode Move property and 2 functions

* Fixed an issue with GameMode Items in battles
* Updated the example files for GameMode Items and GameMode Moves
* Maybe fixed something audio volume related

* Made it possible to disable the reduction of PP using the DeductPP (bool) property for GameModeMoves
* Added the new functions "SetTrigger" and "RemoveTrigger" for GameModeMoves:

Function "SetTrigger" checks if a Pokémon does or does not have a certain Status and prevents functions after it from executing if the Pokémon does not have the desired Status.
The function is formatted like this: Function|SetTrigger,Target,Triggers
* "Target" determines which Pokémon's Status is checked and has to be either 0 or 1 (0 = check own Pokémon, 1 = check opponent's Pokémon)
* "Triggers" determines the status effect(s) that should or should not be on the target Pokémon. You can add multiple possible status effects to check for by separating them with a semicolon (;), the values can be: "burn", "freeze", "paralyze", "poison", "badpoison", "anypoison", "sleep", "noburn", "nofreeze", "noparalyze", "nopoison", "nobadpoison", "nopoison", "nosleep"
Function "RemoveTrigger" removes such a trigger so that functions after it are executed
This commit is contained in:
JappaWakka 2023-06-13 20:22:35 +02:00
parent 7bffd5df72
commit a0aa947c5c
9 changed files with 348 additions and 173 deletions

View File

@ -1059,10 +1059,10 @@
#Region "UseItem"
Private Shared Sub SelectedItemHandler(ByVal params As Object())
SelectedItem(CInt(params(0)))
SelectedItem(CStr(params(0)))
End Sub
Private Shared Sub SelectedItem(ByVal itemID As Integer)
Private Shared Sub SelectedItem(ByVal itemID As String)
Dim Item As Item = Item.GetItemByID(itemID.ToString)
If Item.CanBeUsedInBattle = True Then
@ -1103,9 +1103,9 @@
End If
End Sub
Shared TempItemID As Integer = -1
Shared TempItemID As String = "-1"
Private Shared Sub UseItemhandler(ByVal params As Object())
Private Shared Sub UseItemHandler(ByVal params As Object())
UseItem(CInt(params(0)))
End Sub

Binary file not shown.

Binary file not shown.

View File

@ -37,12 +37,12 @@
Select Case name.ToLower()
Case "volume"
MusicManager.MasterVolume = CSng(CDbl(value) / 100)
SoundManager.Volume = CSng(CDbl(value) / 100)
MusicManager.MasterVolume = CSng(CInt(value) / 100)
SoundManager.Volume = CSng(CInt(value) / 100)
Case "music"
MusicManager.MasterVolume = CSng(CDbl(value) / 100)
MusicManager.MasterVolume = CSng(CInt(value) / 100)
Case "sound"
SoundManager.Volume = CSng(CDbl(value) / 100)
SoundManager.Volume = CSng(CInt(value) / 100)
Case "muted"
SoundManager.Muted = CBool(value)
MusicManager.Muted = CBool(value)

View File

@ -170,6 +170,7 @@
Public GameModeFunction As String = "" 'A GameMode can specify a pre defined function for a move.
Public IsGameModeMove As Boolean = False
Public gmDeductPP As Boolean = True
Private _power As Integer = 40
Private _accuracy As Integer = 100
@ -187,6 +188,8 @@
Public EffectChances As New List(Of Integer)
'#End
'#SpecialDefinitions
'Damage and effect types
Public MakesContact As Boolean = True
@ -2057,7 +2060,11 @@
''' <param name="Own">If the own Pokémon used the move.</param>
''' <param name="BattleScreen">Reference to the BattleScreen.</param>
Public Overridable Function DeductPP(ByVal own As Boolean, ByVal BattleScreen As BattleScreen) As Boolean
If Me.IsGameModeMove = True Then
Return gmDeductPP
Else
Return True
End If
End Function
''' <summary>

View File

@ -13,10 +13,171 @@
''' <param name="BattleScreen">Reference to the BattleScreen.</param>
Public Shared Sub ExecuteMoveHitsFunction(ByVal Move As Attack, ByVal own As Boolean, ByVal BattleScreen As BattleScreen)
Dim functions() As String = Move.GameModeFunction.Split("|")
Dim Trigger As String = ""
For i = 0 To functions.Count - 1
Dim f As String = functions(i)
Dim fMain As String = f
Dim fSub As String = ""
Select Case f.GetSplit(0, ",").ToLower
Case "settrigger"
Trigger = f.GetSplit(1, ",") & "," & f.GetSplit(2, ",")
Case "removetrigger"
Trigger = ""
End Select
If Trigger <> "" Then
Dim Target As Boolean = CBool(Trigger.GetSplit(0, ","))
Dim Triggers() As String = Trigger.GetSplit(1, ",").Split(";")
Dim Success As Boolean = False
For t = 0 To Triggers.Count - 1
Select Case Triggers(t).ToLower()
Case "burn"
If Target = True Then
If BattleScreen.OppPokemon.Status = Pokemon.StatusProblems.Burn Then
Success = True
End If
Else
If BattleScreen.OwnPokemon.Status = Pokemon.StatusProblems.Burn Then
Success = True
End If
End If
Case "freeze"
If Target = True Then
If BattleScreen.OppPokemon.Status = Pokemon.StatusProblems.Freeze Then
Success = True
End If
Else
If BattleScreen.OwnPokemon.Status = Pokemon.StatusProblems.Freeze Then
Success = True
End If
End If
Case "paralyze"
If Target = True Then
If BattleScreen.OppPokemon.Status = Pokemon.StatusProblems.Paralyzed Then
Success = True
End If
Else
If BattleScreen.OwnPokemon.Status = Pokemon.StatusProblems.Paralyzed Then
Success = True
End If
End If
Case "poison"
If Target = True Then
If BattleScreen.OppPokemon.Status = Pokemon.StatusProblems.Poison Then
Success = True
End If
Else
If BattleScreen.OwnPokemon.Status = Pokemon.StatusProblems.Poison Then
Success = True
End If
End If
Case "toxic", "badpoison"
If Target = True Then
If BattleScreen.OppPokemon.Status = Pokemon.StatusProblems.BadPoison Then
Success = True
End If
Else
If BattleScreen.OwnPokemon.Status = Pokemon.StatusProblems.BadPoison Then
Success = True
End If
End If
Case "anypoison"
If Target = True Then
If BattleScreen.OppPokemon.Status = Pokemon.StatusProblems.Poison OrElse BattleScreen.OppPokemon.Status = Pokemon.StatusProblems.BadPoison Then
Success = True
End If
Else
If BattleScreen.OwnPokemon.Status = Pokemon.StatusProblems.Poison OrElse BattleScreen.OwnPokemon.Status = Pokemon.StatusProblems.BadPoison Then
Success = True
End If
End If
Case "sleep"
If Target = True Then
If BattleScreen.OppPokemon.Status = Pokemon.StatusProblems.Sleep Then
Success = True
End If
Else
If BattleScreen.OwnPokemon.Status = Pokemon.StatusProblems.Sleep Then
Success = True
End If
End If
Case "noburn"
If Target = True Then
If BattleScreen.OppPokemon.Status <> Pokemon.StatusProblems.Burn Then
Success = True
End If
Else
If BattleScreen.OwnPokemon.Status <> Pokemon.StatusProblems.Burn Then
Success = True
End If
End If
Case "nofreeze"
If Target = True Then
If BattleScreen.OppPokemon.Status <> Pokemon.StatusProblems.Freeze Then
Success = True
End If
Else
If BattleScreen.OwnPokemon.Status <> Pokemon.StatusProblems.Freeze Then
Success = True
End If
End If
Case "noparalyze"
If Target = True Then
If BattleScreen.OppPokemon.Status <> Pokemon.StatusProblems.Paralyzed Then
Success = True
End If
Else
If BattleScreen.OwnPokemon.Status <> Pokemon.StatusProblems.Paralyzed Then
Success = True
End If
End If
Case "nopoison"
If Target = True Then
If BattleScreen.OppPokemon.Status <> Pokemon.StatusProblems.Poison Then
Success = True
End If
Else
If BattleScreen.OwnPokemon.Status <> Pokemon.StatusProblems.Poison Then
Success = True
End If
End If
Case "notoxic", "nobadpoison"
If Target = True Then
If BattleScreen.OppPokemon.Status <> Pokemon.StatusProblems.BadPoison Then
Success = True
End If
Else
If BattleScreen.OwnPokemon.Status <> Pokemon.StatusProblems.BadPoison Then
Success = True
End If
End If
Case "nopoison"
If Target = True Then
If BattleScreen.OppPokemon.Status <> Pokemon.StatusProblems.Poison AndAlso BattleScreen.OppPokemon.Status <> Pokemon.StatusProblems.BadPoison Then
Success = True
End If
Else
If BattleScreen.OwnPokemon.Status <> Pokemon.StatusProblems.Poison AndAlso BattleScreen.OwnPokemon.Status <> Pokemon.StatusProblems.BadPoison Then
Success = True
End If
End If
Case "nosleep"
If Target = True Then
If BattleScreen.OppPokemon.Status <> Pokemon.StatusProblems.Sleep Then
Success = True
End If
Else
If BattleScreen.OwnPokemon.Status <> Pokemon.StatusProblems.Sleep Then
Success = True
End If
End If
End Select
Next
If Success = True Then
Trigger = ""
End If
Else
If f.Contains(",") = True Then
fMain = f.GetSplit(0, ",")
fSub = f.GetSplit(1, ",")
@ -196,6 +357,7 @@
Case "sleep"
Sleep(Move, own, BattleScreen, CInt(fSub))
End Select
End If
Next
End Sub

View File

@ -178,6 +178,8 @@
move.UseOppDefense = CBool(value)
Case "useoppevasion"
move.UseOppEvasion = CBool(value)
Case "deductpp"
move.gmDeductPP = CBool(value)
End Select
End If
Next

View File

@ -120,7 +120,7 @@ Public Class GameModeItemLoader
item.gmIsHealingItem = CBool(value)
Case "healhpamount"
item.gmHealHPAmount = CInt(value)
Case "curestatuseffects"
Case "curestatus"
Dim StatusEffectList As New List(Of String)
Dim valueSplit As String() = value.Split(",")
For i = 0 To valueSplit.Count - 1

View File

@ -984,7 +984,11 @@ Public Class NewInventoryScreen
Case INFO_ITEM_OPTION_TOSS
TossItem(cItem)
Case INFO_ITEM_OPTION_SELECT
FireSelectionEvent(cItem.ID)
If cItem.IsGameModeItem = True Then
FireSelectionEvent(cItem.gmID)
Else
FireSelectionEvent(cItem.ID.ToString)
End If
CloseInfoScreen()
_closing = True
End Select
@ -1268,7 +1272,7 @@ Public Class NewInventoryScreen
Public Event SelectedObject(params() As Object) Implements ISelectionScreen.SelectedObject
Private Sub FireSelectionEvent(ByVal itemId As Integer)
Private Sub FireSelectionEvent(ByVal itemId As String)
RaiseEvent SelectedObject(New Object() {itemId})
End Sub