Merge pull request #1314 from javierhimura/master

Chain Shiny method for Pokeradar shiny grass patch
This commit is contained in:
Kurt 2017-07-07 08:19:48 -07:00 committed by GitHub
commit f77e0083dd
4 changed files with 23 additions and 14 deletions

View file

@ -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);

View file

@ -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:

View file

@ -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),
}); });
} }

View file

@ -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++)