mirror of
https://github.com/kwsch/PKHeX
synced 2024-12-18 16:33:24 +00:00
Merge pull request #1314 from javierhimura/master
Chain Shiny method for Pokeradar shiny grass patch
This commit is contained in:
commit
f77e0083dd
4 changed files with 23 additions and 14 deletions
|
@ -789,6 +789,7 @@ namespace PKHeX.Core
|
||||||
MarkEncountersVersion(ref h_c, GameVersion.C);
|
MarkEncountersVersion(ref h_c, GameVersion.C);
|
||||||
|
|
||||||
var extra = AddExtraTableSlots(c, h_c, f, bcc_c, safari_c);
|
var extra = AddExtraTableSlots(c, h_c, f, bcc_c, safari_c);
|
||||||
|
MarkSlotLocation(ref extra);
|
||||||
return Version == GameVersion.C ? extra : AddExtraTableSlots(Slots, extra);
|
return Version == GameVersion.C ? extra : AddExtraTableSlots(Slots, extra);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -818,7 +819,6 @@ namespace PKHeX.Core
|
||||||
MarkG2Slots(ref SlotsGS);
|
MarkG2Slots(ref SlotsGS);
|
||||||
MarkG2Slots(ref SlotsC);
|
MarkG2Slots(ref SlotsC);
|
||||||
MarkG2Slots(ref SlotsGSC);
|
MarkG2Slots(ref SlotsGSC);
|
||||||
MarkSlotLocation(ref SlotsC);
|
|
||||||
MarkEncountersGeneration(ref SlotsGS, 2);
|
MarkEncountersGeneration(ref SlotsGS, 2);
|
||||||
MarkEncountersGeneration(ref SlotsC, 2);
|
MarkEncountersGeneration(ref SlotsC, 2);
|
||||||
MarkEncountersGeneration(ref SlotsGSC, 2);
|
MarkEncountersGeneration(ref SlotsGSC, 2);
|
||||||
|
|
|
@ -599,8 +599,18 @@ namespace PKHeX.Core
|
||||||
if (s.Location == 233 && s.Gift)
|
if (s.Location == 233 && s.Gift)
|
||||||
return val == PIDType.Pokewalker;
|
return val == PIDType.Pokewalker;
|
||||||
return s.Shiny == true ? val == PIDType.ChainShiny : val == PIDType.Method_1;
|
return s.Shiny == true ? val == PIDType.ChainShiny : val == PIDType.Method_1;
|
||||||
case EncounterSlot _:
|
case EncounterSlot sl:
|
||||||
return val == PIDType.Method_1 || val == PIDType.CuteCharm;
|
if (val == PIDType.Method_1)
|
||||||
|
return true;
|
||||||
|
if (val == PIDType.CuteCharm)
|
||||||
|
// Cute charm does not work with swarms pokemon
|
||||||
|
return sl.Type != SlotType.Swarm;
|
||||||
|
if (val != PIDType.ChainShiny)
|
||||||
|
return false;
|
||||||
|
// Chain shiny with poke radar is only possible in DPPt in tall grass, safari zone do not allow pokeradar
|
||||||
|
// TypeEncounter TallGrass discard any cave or city
|
||||||
|
var IsDPPt = GameVersion.DP.Contains((GameVersion)pkm.Version) || (GameVersion)pkm.Version == GameVersion.Pt;
|
||||||
|
return pkm.IsShiny && IsDPPt && sl.TypeEncounter == EncounterType.TallGrass && !Legal.SafariZoneLocation_4.Contains(sl.Location);
|
||||||
case PGT _: // manaphy
|
case PGT _: // manaphy
|
||||||
return IsG4ManaphyPIDValid(val, pkm);
|
return IsG4ManaphyPIDValid(val, pkm);
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -78,7 +78,7 @@ namespace PKHeX.Core
|
||||||
int index = i + r*slotCount;
|
int index = i + r*slotCount;
|
||||||
slots[index].Rate = rates[r];
|
slots[index].Rate = rates[r];
|
||||||
slots[index].SlotNumber = i;
|
slots[index].SlotNumber = i;
|
||||||
slots[i].Time = r == 1 ? EncounterTime.Day : EncounterTime.Night;
|
slots[index].Time = r == 1 ? EncounterTime.Day : EncounterTime.Night;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -148,10 +148,9 @@ namespace PKHeX.Core
|
||||||
var areas = new List<EncounterArea>();
|
var areas = new List<EncounterArea>();
|
||||||
while (data[ofs] != 0xFF) // end
|
while (data[ofs] != 0xFF) // end
|
||||||
{
|
{
|
||||||
int _Location = data[ofs++] << 8 | data[ofs++];
|
|
||||||
areas.Add(new EncounterArea
|
areas.Add(new EncounterArea
|
||||||
{
|
{
|
||||||
Location = _Location,
|
Location = data[ofs++] << 8 | data[ofs++],
|
||||||
Slots = GetSlots2_GW(data, ref ofs, t, slotSets, slotCount),
|
Slots = GetSlots2_GW(data, ref ofs, t, slotSets, slotCount),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,17 +2,17 @@
|
||||||
|
|
||||||
namespace PKHeX.Core
|
namespace PKHeX.Core
|
||||||
{
|
{
|
||||||
// Pokemon Crystal Headbutt tree encounters by trainer id, base on mechanics described in
|
// Pokemon Crystal Headbutt tree encounters by trainer id, based on mechanics described in
|
||||||
// https://bulbapedia.bulbagarden.net/wiki/Headbutt_tree#Mechanics
|
// https://bulbapedia.bulbagarden.net/wiki/Headbutt_tree#Mechanics
|
||||||
|
|
||||||
public enum TreeEncounterAvailable
|
public enum TreeEncounterAvailable
|
||||||
{
|
{
|
||||||
ValidTree, // Encounter is possible a reacheable tree
|
ValidTree, // Encounter is possible a reachable tree
|
||||||
InvalidTree, // Encounter is only possible a tree reacheable only with walk-trought walls cheats
|
InvalidTree, // Encounter is only possible a tree reachable only with walk-trough walls cheats
|
||||||
Impossible // Encounter is not possible in any tree
|
Impossible // Encounter is not possible in any tree
|
||||||
}
|
}
|
||||||
|
|
||||||
public class TreeCoordinates
|
internal class TreeCoordinates
|
||||||
{
|
{
|
||||||
internal int X { get; set; }
|
internal int X { get; set; }
|
||||||
internal int Y { get; set; }
|
internal int Y { get; set; }
|
||||||
|
@ -72,8 +72,8 @@ namespace PKHeX.Core
|
||||||
|
|
||||||
private void ReadAreaRawData(byte[] entrie)
|
private void ReadAreaRawData(byte[] entrie)
|
||||||
{
|
{
|
||||||
// Coordinates of trees for every are obtained with programa G2Map
|
// Coordinates of trees for every are obtained with the program G2Map
|
||||||
// ValidTrees are those accesible from the player
|
// ValidTrees are those accessible by the player
|
||||||
// Invalid tress are trees that the player can not reach without cheating devices, like a tree beyond other trees
|
// Invalid tress are trees that the player can not reach without cheating devices, like a tree beyond other trees
|
||||||
Location = entrie[0];
|
Location = entrie[0];
|
||||||
ValidTrees = new TreeCoordinates[entrie[1]];
|
ValidTrees = new TreeCoordinates[entrie[1]];
|
||||||
|
@ -103,14 +103,14 @@ namespace PKHeX.Core
|
||||||
|
|
||||||
private void GenerateAreaTreeIndex()
|
private void GenerateAreaTreeIndex()
|
||||||
{
|
{
|
||||||
// For legallity purpose only the tree index is needed, group the trees data by their index, trees with the same index are indistinguible
|
// For legality purpose only the tree index is needed, group the trees data by their index, trees with the same index are indistinguishable
|
||||||
ValidTreeIndex = ValidTrees.Select(t => t.Index).Distinct().OrderBy(i => i).ToArray();
|
ValidTreeIndex = ValidTrees.Select(t => t.Index).Distinct().OrderBy(i => i).ToArray();
|
||||||
InvalidTreeIndex = InvalidTrees.Select(t => t.Index).Distinct().OrderBy(i => i).Except(ValidTreeIndex).ToArray();
|
InvalidTreeIndex = InvalidTrees.Select(t => t.Index).Distinct().OrderBy(i => i).Except(ValidTreeIndex).ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void GenerateAreaTrainerEncounters()
|
private void GenerateAreaTrainerEncounters()
|
||||||
{
|
{
|
||||||
// Check for every trainer pivot index if there is trees with low encounter and moderate encounter available in the area
|
// Check for every trainer pivot index if there are trees with low encounter and moderate encounter available in the area
|
||||||
TrainerModerateEncounterTree = new TreeEncounterAvailable[10];
|
TrainerModerateEncounterTree = new TreeEncounterAvailable[10];
|
||||||
TrainerLowEncounterTree = new TreeEncounterAvailable[10];
|
TrainerLowEncounterTree = new TreeEncounterAvailable[10];
|
||||||
for (int pivotindex = 0; pivotindex < 10; pivotindex++)
|
for (int pivotindex = 0; pivotindex < 10; pivotindex++)
|
||||||
|
|
Loading…
Reference in a new issue