mirror of
https://github.com/infinitefusion/infinitefusion-e18.git
synced 2025-12-24 01:45:08 +00:00
Compare commits
13 Commits
rocket-azu
...
290b6f81d1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
290b6f81d1 | ||
|
|
80de6b019d | ||
|
|
eb694dcdb5 | ||
|
|
230b1b86b4 | ||
|
|
692a78d041 | ||
|
|
fc87f353d7 | ||
|
|
a0fb092441 | ||
|
|
a895180ac5 | ||
|
|
f7ff2da270 | ||
|
|
e6b17bf990 | ||
|
|
f7d05eca58 | ||
|
|
bd7a15d1fc | ||
|
|
6af6e448e6 |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -51,6 +51,7 @@ class Game_System
|
||||
def bgm_play_internal2(name,volume,pitch,position) # :nodoc:
|
||||
vol = volume
|
||||
vol *= $PokemonSystem.bgmvolume/100.0
|
||||
vol+=30
|
||||
vol = vol.to_i
|
||||
begin
|
||||
Audio.bgm_play(name,vol,pitch,position)
|
||||
|
||||
@@ -283,7 +283,13 @@ Events.onMapChange += proc { |_sender, e|
|
||||
if new_map_metadata && new_map_metadata.teleport_destination
|
||||
$PokemonGlobal.healingSpot = new_map_metadata.teleport_destination
|
||||
end
|
||||
$PokemonMap.clear if $PokemonMap
|
||||
if $PokemonMap
|
||||
blackFluteUsed = $PokemonMap.blackFluteUsed
|
||||
whiteFluteUsed = $PokemonMap.whiteFluteUsed
|
||||
$PokemonMap.clear
|
||||
$PokemonMap.blackFluteUsed = blackFluteUsed
|
||||
$PokemonMap.whiteFluteUsed = whiteFluteUsed
|
||||
end
|
||||
$PokemonEncounters.setup($game_map.map_id) if $PokemonEncounters
|
||||
$PokemonGlobal.visitedMaps[$game_map.map_id] = true
|
||||
next if old_map_ID == 0 || old_map_ID == $game_map.map_id
|
||||
|
||||
@@ -445,6 +445,7 @@ def pbLearnMove(pkmn, move, ignoreifknown = false, bymachine = false, fast = fal
|
||||
end
|
||||
pkmnname = pkmn.name
|
||||
movename = GameData::Move.get(move).name
|
||||
pkmn.add_learned_move(move) if !bymachine
|
||||
if pkmn.hasMove?(move)
|
||||
pbMessage(_INTL("{1} already knows {2}.", pkmnname, movename), &block) if !ignoreifknown
|
||||
return false
|
||||
@@ -462,7 +463,12 @@ def pbLearnMove(pkmn, move, ignoreifknown = false, bymachine = false, fast = fal
|
||||
if forgetmove >= 0
|
||||
oldmovename = pkmn.moves[forgetmove].name
|
||||
oldmovepp = pkmn.moves[forgetmove].pp
|
||||
forgotten_move = pkmn.moves[forgetmove]
|
||||
pkmn.add_learned_move(forgotten_move)
|
||||
|
||||
pkmn.moves[forgetmove] = Pokemon::Move.new(move) # Replaces current/total PP
|
||||
pkmn.add_learned_move(move)
|
||||
|
||||
if bymachine && Settings::TAUGHT_MACHINES_KEEP_OLD_PP
|
||||
pkmn.moves[forgetmove].pp = [oldmovepp, pkmn.moves[forgetmove].total_pp].min
|
||||
end
|
||||
|
||||
@@ -148,17 +148,19 @@ Events.onStepTaken += proc {
|
||||
|
||||
ItemHandlers::UseInField.add(:BLACKFLUTE, proc { |item|
|
||||
pbUseItemMessage(item)
|
||||
pbMessage(_INTL("Wild Pokémon will be repelled."))
|
||||
$PokemonMap.blackFluteUsed = true
|
||||
message = $PokemonMap.blackFluteUsed ? "Wild Pokemon will no longer be repelled.": "Wild Pokémon will be repelled."
|
||||
pbMessage(_INTL(message))
|
||||
$PokemonMap.blackFluteUsed = !$PokemonMap.blackFluteUsed
|
||||
$PokemonMap.whiteFluteUsed = false
|
||||
next 1
|
||||
})
|
||||
|
||||
ItemHandlers::UseInField.add(:WHITEFLUTE, proc { |item|
|
||||
pbUseItemMessage(item)
|
||||
pbMessage(_INTL("Wild Pokémon will be lured."))
|
||||
message = $PokemonMap.whiteFluteUsed ? "Wild Pokemon will no longer be lured.": "Wild Pokémon will be lured."
|
||||
pbMessage(_INTL(message))
|
||||
$PokemonMap.whiteFluteUsed = !$PokemonMap.whiteFluteUsed
|
||||
$PokemonMap.blackFluteUsed = false
|
||||
$PokemonMap.whiteFluteUsed = true
|
||||
next 1
|
||||
})
|
||||
|
||||
|
||||
@@ -55,7 +55,7 @@ class Pokemon
|
||||
# @return [Array<Pokemon::Move>] the moves known by this Pokémon
|
||||
attr_accessor :moves
|
||||
|
||||
# @return [Array<Pokemon::Move>] All the moves ever learned by this Pokémon
|
||||
# @return [Array<Symbol>] All the move (ids) ever learned by this Pokémon
|
||||
attr_accessor :learned_moves
|
||||
|
||||
# @return [Array<Integer>] the IDs of moves known by this Pokémon when it was obtained
|
||||
@@ -606,12 +606,12 @@ class Pokemon
|
||||
|
||||
# Makes this Pokémon male.
|
||||
def makeMale
|
||||
self.gender = 0;
|
||||
@gender = 0
|
||||
end
|
||||
|
||||
# Makes this Pokémon female.
|
||||
def makeFemale
|
||||
self.gender = 1;
|
||||
@gender = 1
|
||||
end
|
||||
|
||||
# @return [Boolean] whether this Pokémon is male
|
||||
@@ -874,14 +874,20 @@ class Pokemon
|
||||
for i in first_move_index...knowable_moves.length
|
||||
move = Pokemon::Move.new(knowable_moves[i])
|
||||
@moves.push(move)
|
||||
@learned_moves = [] if !@learned_moves
|
||||
@learned_moves << move if !@learned_moves.include?(move)
|
||||
add_learned_move(move)
|
||||
end
|
||||
end
|
||||
|
||||
def add_learned_move(move)
|
||||
@learned_moves = [] if !@learned_moves
|
||||
@learned_moves << move unless @learned_moves.include?(move)
|
||||
if move.is_a?(Symbol)
|
||||
@learned_moves << move unless @learned_moves.include?(move)
|
||||
else
|
||||
move_id = move.id
|
||||
if move_id
|
||||
@learned_moves << move_id unless @learned_moves.include?(move_id)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -902,9 +908,7 @@ class Pokemon
|
||||
@moves.push(move)
|
||||
# Delete the first known move if self now knows more moves than it should
|
||||
@moves.shift if numMoves > MAX_MOVES
|
||||
@learned_moves = [] if !@learned_moves
|
||||
@learned_moves << move if !@learned_moves.include?(move)
|
||||
echoln @learned_moves
|
||||
add_learned_move(move)
|
||||
end
|
||||
|
||||
# Deletes the given move from the Pokémon.
|
||||
@@ -912,17 +916,23 @@ class Pokemon
|
||||
def forget_move(move_id)
|
||||
move_data = GameData::Move.try_get(move_id)
|
||||
return if !move_data
|
||||
add_learned_move(move_id)
|
||||
@moves.delete_if { |m| m.id == move_data.id }
|
||||
end
|
||||
|
||||
# Deletes the move at the given index from the Pokémon.
|
||||
# @param index [Integer] index of the move to be deleted
|
||||
def forget_move_at_index(index)
|
||||
move_id = @moves[index].id
|
||||
add_learned_move(move_id)
|
||||
@moves.delete_at(index)
|
||||
end
|
||||
|
||||
# Deletes all moves from the Pokémon.
|
||||
def forget_all_moves
|
||||
for move in @moves
|
||||
add_learned_move(move)
|
||||
end
|
||||
@moves.clear
|
||||
end
|
||||
|
||||
|
||||
@@ -1190,6 +1190,43 @@ class PokemonPartyScreen
|
||||
end
|
||||
end
|
||||
|
||||
def pbRememberMoves(pokemon)
|
||||
learnable_moves = pokemon.learned_moves
|
||||
learnable_moves = [] if !learnable_moves
|
||||
#exclude current moves
|
||||
echoln "learned moves: #{learnable_moves}"
|
||||
for current_move in pokemon.moves
|
||||
echoln current_move.id
|
||||
if learnable_moves.include?(current_move.id)
|
||||
learnable_moves.delete(current_move.id)
|
||||
end
|
||||
end
|
||||
move_ids = []
|
||||
for move in learnable_moves
|
||||
if move.is_a?(Symbol)
|
||||
move_ids << move
|
||||
end
|
||||
end
|
||||
|
||||
if move_ids.empty?
|
||||
pbMessage(_INTL("{1} has no moves to remember!",pokemon.name))
|
||||
return false
|
||||
end
|
||||
|
||||
echoln move_ids
|
||||
|
||||
retval = true
|
||||
pbFadeOutIn {
|
||||
scene = MoveRelearner_Scene.new
|
||||
screen = MoveRelearnerScreen.new(scene)
|
||||
if !learnable_moves.empty?
|
||||
retval = screen.pbStartScreen(pokemon, move_ids)
|
||||
else
|
||||
return false
|
||||
end
|
||||
}
|
||||
return retval
|
||||
end
|
||||
def pbPokemonRename(pkmn, pkmnid)
|
||||
cmd = 0
|
||||
loop do
|
||||
@@ -1240,6 +1277,7 @@ class PokemonPartyScreen
|
||||
cmdMail = -1
|
||||
cmdItem = -1
|
||||
cmdHat = -1
|
||||
cmdLearnMove = -1
|
||||
|
||||
# Build the commands
|
||||
commands[cmdSummary = commands.length] = _INTL("Summary")
|
||||
@@ -1263,6 +1301,8 @@ class PokemonPartyScreen
|
||||
end
|
||||
end
|
||||
commands[cmdNickname = commands.length] = _INTL("Nickname") if !pkmn.egg?
|
||||
commands[cmdLearnMove = commands.length] = _INTL("Remember moves")
|
||||
|
||||
commands[commands.length] = _INTL("Cancel")
|
||||
command = @scene.pbShowCommands(_INTL("Do what with {1}?", pkmn.name), commands)
|
||||
havecommand = false
|
||||
@@ -1324,6 +1364,8 @@ class PokemonPartyScreen
|
||||
}
|
||||
elsif cmdHat >= 0 && command == cmdHat
|
||||
pbPokemonHat(pkmn)
|
||||
elsif cmdLearnMove > 0 && command == cmdLearnMove
|
||||
pbRememberMoves(pkmn)
|
||||
elsif cmdNickname >= 0 && command == cmdNickname
|
||||
pbPokemonRename(pkmn, pkmnid)
|
||||
elsif cmdDebug >= 0 && command == cmdDebug
|
||||
|
||||
@@ -131,13 +131,14 @@ end
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
class NumberOption
|
||||
class NumberOption < Option
|
||||
include PropertyMixin
|
||||
attr_reader :name
|
||||
attr_reader :optstart
|
||||
attr_reader :optend
|
||||
|
||||
def initialize(name, optstart, optend, getProc, setProc)
|
||||
def initialize(name, optstart, optend, getProc, setProc, description="")
|
||||
super(description)
|
||||
@name = name
|
||||
@optstart = optstart
|
||||
@optend = optend
|
||||
@@ -214,6 +215,7 @@ class Window_PokemonOption < Window_DrawableCommand
|
||||
@mustUpdateDescription = false
|
||||
@selected_position = 0
|
||||
@allow_arrows_jump = false
|
||||
@is_first_update = true
|
||||
for i in 0...@options.length
|
||||
@optvalues[i] = 0
|
||||
end
|
||||
@@ -321,23 +323,43 @@ class Window_PokemonOption < Window_DrawableCommand
|
||||
oldindex = self.index
|
||||
@mustUpdateOptions = false
|
||||
super
|
||||
dorefresh = (self.index != oldindex)
|
||||
|
||||
if @is_first_update
|
||||
# Needed for displaying the description of the initially selected option correctly
|
||||
@selected_position = self[self.index]
|
||||
@mustUpdateOptions = true
|
||||
@mustUpdateDescription = true
|
||||
@is_first_update = false
|
||||
refresh
|
||||
return
|
||||
end
|
||||
|
||||
if self.active && self.index < @options.length
|
||||
if Input.repeat?(Input::LEFT)
|
||||
self[self.index] = @options[self.index].prev(self[self.index])
|
||||
dorefresh =
|
||||
@selected_position = self[self.index]
|
||||
@mustUpdateOptions = true
|
||||
@mustUpdateDescription = true
|
||||
elsif Input.repeat?(Input::RIGHT)
|
||||
self[self.index] = @options[self.index].next(self[self.index])
|
||||
dorefresh = true
|
||||
@selected_position = self[self.index]
|
||||
@mustUpdateOptions = true
|
||||
@mustUpdateDescription = true
|
||||
refresh if self[self.index]
|
||||
return
|
||||
end
|
||||
if Input.repeat?(Input::RIGHT)
|
||||
self[self.index] = @options[self.index].next(self[self.index])
|
||||
@selected_position = self[self.index]
|
||||
@mustUpdateOptions = true
|
||||
@mustUpdateDescription = true
|
||||
refresh
|
||||
return
|
||||
end
|
||||
if Input.repeat?(Input::UP) || Input.repeat?(Input::DOWN)
|
||||
@selected_position = self[self.index]
|
||||
@mustUpdateOptions = true
|
||||
@mustUpdateDescription = true
|
||||
refresh
|
||||
return
|
||||
end
|
||||
end
|
||||
refresh if dorefresh
|
||||
refresh if (self.index != oldindex)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -190,7 +190,7 @@ class MoveRelearnerScreen
|
||||
end
|
||||
if move
|
||||
if @scene.pbConfirm(_INTL("Teach {1}?", GameData::Move.get(move).name))
|
||||
if pbLearnMove(pkmn, move)
|
||||
if pbLearnMove(pkmn, move, false, true)
|
||||
@scene.pbEndScene
|
||||
return true
|
||||
end
|
||||
|
||||
@@ -201,14 +201,24 @@ PokemonDebugMenuCommands.register("setlevel", {
|
||||
if pkmn.egg?
|
||||
screen.pbDisplay(_INTL("{1} is an egg.", pkmn.name))
|
||||
else
|
||||
params = ChooseNumberParams.new
|
||||
params.setRange(1, GameData::GrowthRate.max_level)
|
||||
params.setDefaultValue(pkmn.level)
|
||||
level = pbMessageChooseNumber(
|
||||
_INTL("Set the Pokémon's level (max. {1}).", params.maxNumber), params) { screen.pbUpdate }
|
||||
if level != pkmn.level
|
||||
screen.pbRefreshSingle(pkmnid)
|
||||
|
||||
if $PokemonSystem.level_caps==1
|
||||
choice= pbMessage(_INTL("Set to which level?"),[_INTL("Set to level cap"), _INTL("Set to specific level"), _INTL("Cancel")],2)
|
||||
if choice==0
|
||||
level = getCurrentLevelCap()
|
||||
elsif choice == 1
|
||||
level = promptSetLevelToNumber(pkmn,screen)
|
||||
else
|
||||
return
|
||||
end
|
||||
else
|
||||
level = promptSetLevelToNumber(pkmn,screen)
|
||||
end
|
||||
if level && level != pkmn.level
|
||||
pkmn.level = level
|
||||
pkmn.calc_stats
|
||||
screen.pbUpdate
|
||||
screen.pbRefreshSingle(pkmnid)
|
||||
end
|
||||
end
|
||||
@@ -216,6 +226,15 @@ PokemonDebugMenuCommands.register("setlevel", {
|
||||
}
|
||||
})
|
||||
|
||||
def promptSetLevelToNumber(pkmn,screen)
|
||||
params = ChooseNumberParams.new
|
||||
params.setRange(1, GameData::GrowthRate.max_level)
|
||||
params.setDefaultValue(pkmn.level)
|
||||
level = pbMessageChooseNumber(
|
||||
_INTL("Set the Pokémon's level (max. {1}).", params.maxNumber), params) { screen.pbUpdate }
|
||||
return level
|
||||
end
|
||||
|
||||
PokemonDebugMenuCommands.register("setexp", {
|
||||
"parent" => "levelstats",
|
||||
"name" => _INTL("Set Exp"),
|
||||
|
||||
Binary file not shown.
BIN
Graphics/Pictures/Quests/dialogIcon.png
Normal file
BIN
Graphics/Pictures/Quests/dialogIcon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 355 B |
61
README.md
Normal file
61
README.md
Normal file
@@ -0,0 +1,61 @@
|
||||
## Thank you for downloading Pokémon Infinite Fusion!
|
||||
|
||||
Playing the game
|
||||
---
|
||||
**Windows**
|
||||
|
||||
Use **Game.exe** to play the game. That's it!
|
||||
|
||||
If you are experiencing issues such as long loading times, you can also try Game-performance.exe.
|
||||
|
||||
-----
|
||||
**MacOS / Linux**
|
||||
|
||||
The game is not made to run natively on anything other than Windows. However, it is possible to play it Mac and Linux using Wine or Whiskey.
|
||||
|
||||
Refer to these tutorials:
|
||||
|
||||
[Wine install guide](https://hackmd.io/@PIF-Tech/MacWineGuide)
|
||||
|
||||
[Whiskey install guide](https://hackmd.io/@PIF-Tech/MacWhiskeyGuide)
|
||||
|
||||
|
||||
Once Wine is installed on your computer, you can use "launch-wine.sh" to launch the game.
|
||||
|
||||
---
|
||||
**Android**
|
||||
|
||||
To play Infinite Fusion on Android, you need to use a RPG Maker emulator called [JoiPlay](https://joiplay.net/).
|
||||
|
||||
[Android setup guide](https://hackmd.io/@PIF-Tech/AndroidGuide)
|
||||
|
||||
---
|
||||
## Contributing to the game
|
||||
|
||||
Pokémon Infinite Fusion is open-source! All of the game's code is located in the Data/Scripts folder.
|
||||
|
||||
We accept pull requests for bug fixes and minor features* (Please contact chardub on the game's Discord if you have a feature idea to get it pre-approved before you start working on it!)
|
||||
|
||||
**Note: Any pull request that modifies the RPG Maker files outside of the Scripts folder will be automatically denied.
|
||||
This includes any changes to the maps/game events. The reason for this is that unfortunately, the way RPG Maker XP's data
|
||||
files are structured does not allow to easily see what the changes made are.**
|
||||
|
||||
To contribute:
|
||||
|
||||
- Fork the game's repo from https://github.com/infinitefusion/infinitefusion-e18
|
||||
- Work from the **develop** branch to avoid merge conflicts
|
||||
- Open a pull request once you're done to merge into **develop**. A pull request should only contain a single feature or bug fix. Any PR that bundles multiple features/fixes will be denied.
|
||||
|
||||
**There is no guarantee that submitted pull requests will be accepted.*
|
||||
|
||||
---
|
||||
## Useful links:
|
||||
- [Wiki](https://infinitefusion.fandom.com/)
|
||||
- [Discord](https://discord.gg/infinitefusion)
|
||||
- [Reddit](https://www.reddit.com/r/PokemonInfiniteFusion/)
|
||||
- [Pokecommunity](https://www.pokecommunity.com/showthread.php?t=347883)
|
||||
- [Showdown](http://play.pokeathlon.com)
|
||||
- [Fusion calculator](https://www.fusiondex.org/)
|
||||
|
||||
This is a free-to-play Pokémon fan game. If you paid any amount of money to play this game, you have been scammed.
|
||||
This game is not affiliated with Nintendo, Game Freak or Creatures Inc.
|
||||
16
readme.txt
16
readme.txt
@@ -1,16 +0,0 @@
|
||||
Thank you for downloading Pok?mon Infinite Fusion!
|
||||
|
||||
Use Game.exe to play the game.
|
||||
If you are experiencing issues such as long loading times, you can also try the alternate launcher.
|
||||
|
||||
|
||||
Useful links:
|
||||
Wiki: https://infinitefusion.fandom.com/
|
||||
Discord: https://discord.gg/infinitefusion
|
||||
Reddit: https://www.reddit.com/r/PokemonInfiniteFusion/
|
||||
Pokecommunity https://www.pokecommunity.com/showthread.php?t=347883
|
||||
Showdown play.pokeathlon.com
|
||||
Fusion calculator https://www.fusiondex.org/
|
||||
|
||||
This is a free-to-play Pok?mon fan game. If you paid any amount of money to play this game, you have been scammed.
|
||||
This game is not affiliated with Nintendo, Game Freak or Creatures Inc.
|
||||
Reference in New Issue
Block a user