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" #Region "UseItem"
Private Shared Sub SelectedItemHandler(ByVal params As Object()) Private Shared Sub SelectedItemHandler(ByVal params As Object())
SelectedItem(CInt(params(0))) SelectedItem(CStr(params(0)))
End Sub 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) Dim Item As Item = Item.GetItemByID(itemID.ToString)
If Item.CanBeUsedInBattle = True Then If Item.CanBeUsedInBattle = True Then
@ -1103,9 +1103,9 @@
End If End If
End Sub 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))) UseItem(CInt(params(0)))
End Sub End Sub

Binary file not shown.

Binary file not shown.

View File

@ -37,12 +37,12 @@
Select Case name.ToLower() Select Case name.ToLower()
Case "volume" Case "volume"
MusicManager.MasterVolume = CSng(CDbl(value) / 100) MusicManager.MasterVolume = CSng(CInt(value) / 100)
SoundManager.Volume = CSng(CDbl(value) / 100) SoundManager.Volume = CSng(CInt(value) / 100)
Case "music" Case "music"
MusicManager.MasterVolume = CSng(CDbl(value) / 100) MusicManager.MasterVolume = CSng(CInt(value) / 100)
Case "sound" Case "sound"
SoundManager.Volume = CSng(CDbl(value) / 100) SoundManager.Volume = CSng(CInt(value) / 100)
Case "muted" Case "muted"
SoundManager.Muted = CBool(value) SoundManager.Muted = CBool(value)
MusicManager.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 GameModeFunction As String = "" 'A GameMode can specify a pre defined function for a move.
Public IsGameModeMove As Boolean = False Public IsGameModeMove As Boolean = False
Public gmDeductPP As Boolean = True
Private _power As Integer = 40 Private _power As Integer = 40
Private _accuracy As Integer = 100 Private _accuracy As Integer = 100
@ -187,6 +188,8 @@
Public EffectChances As New List(Of Integer) Public EffectChances As New List(Of Integer)
'#End '#End
'#SpecialDefinitions '#SpecialDefinitions
'Damage and effect types 'Damage and effect types
Public MakesContact As Boolean = True Public MakesContact As Boolean = True
@ -2057,7 +2060,11 @@
''' <param name="Own">If the own Pokémon used the move.</param> ''' <param name="Own">If the own Pokémon used the move.</param>
''' <param name="BattleScreen">Reference to the BattleScreen.</param> ''' <param name="BattleScreen">Reference to the BattleScreen.</param>
Public Overridable Function DeductPP(ByVal own As Boolean, ByVal BattleScreen As BattleScreen) As Boolean Public Overridable Function DeductPP(ByVal own As Boolean, ByVal BattleScreen As BattleScreen) As Boolean
If Me.IsGameModeMove = True Then
Return gmDeductPP
Else
Return True Return True
End If
End Function End Function
''' <summary> ''' <summary>

View File

@ -13,10 +13,171 @@
''' <param name="BattleScreen">Reference to the BattleScreen.</param> ''' <param name="BattleScreen">Reference to the BattleScreen.</param>
Public Shared Sub ExecuteMoveHitsFunction(ByVal Move As Attack, ByVal own As Boolean, ByVal BattleScreen As BattleScreen) Public Shared Sub ExecuteMoveHitsFunction(ByVal Move As Attack, ByVal own As Boolean, ByVal BattleScreen As BattleScreen)
Dim functions() As String = Move.GameModeFunction.Split("|") Dim functions() As String = Move.GameModeFunction.Split("|")
Dim Trigger As String = ""
For i = 0 To functions.Count - 1 For i = 0 To functions.Count - 1
Dim f As String = functions(i) Dim f As String = functions(i)
Dim fMain As String = f Dim fMain As String = f
Dim fSub As String = "" 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 If f.Contains(",") = True Then
fMain = f.GetSplit(0, ",") fMain = f.GetSplit(0, ",")
fSub = f.GetSplit(1, ",") fSub = f.GetSplit(1, ",")
@ -196,6 +357,7 @@
Case "sleep" Case "sleep"
Sleep(Move, own, BattleScreen, CInt(fSub)) Sleep(Move, own, BattleScreen, CInt(fSub))
End Select End Select
End If
Next Next
End Sub End Sub

View File

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

View File

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

View File

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