Sfoglia il codice sorgente

Add many values to parser.. many left to go

Andrew Swistak 6 anni fa
parent
commit
94bcc47467
2 ha cambiato i file con 112 aggiunte e 6 eliminazioni
  1. 63 2
      pokemon-parsing/gen7/parse.go
  2. 49 4
      pokemon/pokemon.go

+ 63 - 2
pokemon-parsing/gen7/parse.go

@@ -19,10 +19,71 @@ func Parse(rawPokemon p.RawPokemon) (*p.Pokemon, error) {
 	}
 
 	var pkmn p.Pokemon
-	pkmn.PokedexNumber = binary.LittleEndian.Uint16(rawPokemon[0x08:])
+	pkmn.RawPokemon = &rawPokemon
+
+	pkmn.EncryptionConstant = binary.LittleEndian.Uint32(rawPokemon[0x00:0x08])
+	pkmn.PokedexNumber = binary.LittleEndian.Uint16(rawPokemon[0x08:0x0a])
+	pkmn.HeldItemID = binary.LittleEndian.Uint16(rawPokemon[0x0a:0x0c])
+	pkmn.TrainerID = binary.LittleEndian.Uint16(rawPokemon[0x0c:0x0e])
+	pkmn.SecretID = binary.LittleEndian.Uint16(rawPokemon[0x0e:0x10])
+	pkmn.FullTrainerID = binary.LittleEndian.Uint32(rawPokemon[0x0c:0x10])
+	pkmn.Experience = binary.LittleEndian.Uint32(rawPokemon[0x10:0x15])
+	pkmn.AbilityID = rawPokemon[0x14]
+	pkmn.AbilityNum = rawPokemon[0x14]
+	pkmn.PID = binary.LittleEndian.Uint32(rawPokemon[0x18:0x1c])
+	pkmn.NatureID = rawPokemon[0x1c]
+
+	genderByte := rawPokemon[0x1d]
+	pkmn.FatefulEncounter = (genderByte & 0x01) == 1
+	if (genderByte & 0x02) == 0x02 {
+		pkmn.Gender = "F"
+	} else if (genderByte & 0x04) == 0x04 {
+		pkmn.Gender = ""
+	} else {
+		pkmn.Gender = "M"
+	}
+	pkmn.FormID = genderByte >> 3
+
+	pkmn.HPEV = rawPokemon[0x1e]
+	pkmn.AtkEV = rawPokemon[0x1f]
+	pkmn.DefEV = rawPokemon[0x20]
+	pkmn.SpeEV = rawPokemon[0x21]
+	pkmn.SpAtkEV = rawPokemon[0x22]
+	pkmn.SpDefEV = rawPokemon[0x23]
+
+	pokerusByte := rawPokemon[0x2b]
+	pkmn.PokerusDuration = pokerusByte & 15
+	pkmn.PokerusStrain = pokerusByte >> 4
+
 	pkmn.RawNickname = rawPokemon[0x40:0x58]
 	pkmn.Nickname = binaryToUTF16leString(pkmn.RawNickname)
-	pkmn.RawPokemon = &rawPokemon
+
+	pkmn.Move1ID = binary.LittleEndian.Uint16(rawPokemon[0x5a:0x5c])
+	pkmn.Move2ID = binary.LittleEndian.Uint16(rawPokemon[0x5c:0x5e])
+	pkmn.Move3ID = binary.LittleEndian.Uint16(rawPokemon[0x5e:0x60])
+	pkmn.Move4ID = binary.LittleEndian.Uint16(rawPokemon[0x60:0x62])
+	pkmn.Move1PP = rawPokemon[0x62]
+	pkmn.Move2PP = rawPokemon[0x63]
+	pkmn.Move3PP = rawPokemon[0x64]
+	pkmn.Move4PP = rawPokemon[0x65]
+	pkmn.Move1PPUsed = rawPokemon[0x66]
+	pkmn.Move2PPUsed = rawPokemon[0x67]
+	pkmn.Move3PPUsed = rawPokemon[0x68]
+	pkmn.Move4PPUsed = rawPokemon[0x69]
+	pkmn.EggMove1ID = binary.LittleEndian.Uint16(rawPokemon[0x6a:0x6c])
+	pkmn.EggMove2ID = binary.LittleEndian.Uint16(rawPokemon[0x6c:0x6e])
+	pkmn.EggMove3ID = binary.LittleEndian.Uint16(rawPokemon[0x6e:0x70])
+	pkmn.EggMove4ID = binary.LittleEndian.Uint16(rawPokemon[0x70:0x72])
+
+	ivBytes := binary.LittleEndian.Uint32(rawPokemon[0x74:0x78])
+	pkmn.HPIV = ivBytes & 0x1f
+	pkmn.AtkIV = ivBytes >> 5 & 0x1f
+	pkmn.DefIV = ivBytes >> 10 & 0x1f
+	pkmn.SpeIV = ivBytes >> 15 & 0x1f
+	pkmn.SpAtkIV = ivBytes >> 20 & 0x1f
+	pkmn.SpDefIV = ivBytes >> 25 & 0x1f
+	pkmn.IsEgg = ((ivBytes >> 30) % 2) == 1
+	pkmn.IsNicknamed = ((ivBytes >> 31) % 2) == 1
 
 	return &pkmn, nil
 }

+ 49 - 4
pokemon/pokemon.go

@@ -6,8 +6,53 @@ type RawPokemon []byte
 // Pokemon is a struct the has fields for all relevant pokemon data from a
 // RawPokemon.
 type Pokemon struct {
-	PokedexNumber uint16      `json:"pokedex_number"`
-	RawNickname   []byte      `json:"raw_nickname"`
-	Nickname      string      `json:"nickname"`
-	RawPokemon    *RawPokemon `json:"raw_pokemon"`
+	RawPokemon         *RawPokemon `json:"raw_pokemon"`
+	EncryptionConstant uint32      `json:"encryption_constant"`
+	PokedexNumber      uint16      `json:"pokedex_number"`
+	HeldItemID         uint16      `json:"held_item_id"`
+	TrainerID          uint16      `json:"trainer_id"`
+	SecretID           uint16      `json:"secret_id"`
+	FullTrainerID      uint32      `json:"full_trainer_id"`
+	Experience         uint32      `json:"experience"`
+	AbilityID          uint8       `json:"ability_id"`
+	AbilityNum         uint8       `json:"Ability_number"`
+	PID                uint32      `json:"pid"`
+	NatureID           uint8       `json:"nature_id"`
+	FatefulEncounter   bool        `json:"fateful_encounter"`
+	Gender             string      `json:"gender"`
+	FormID             uint8       `json:"form_id"`
+	HPEV               uint8       `json:"hp_ev"`
+	AtkEV              uint8       `json:"attack_ev"`
+	DefEV              uint8       `json:"defense_ev"`
+	SpeEV              uint8       `json:"speed_ev"`
+	SpAtkEV            uint8       `json:"special_attack_ev"`
+	SpDefEV            uint8       `json:"special_defense_ev"`
+	PokerusDuration    uint8       `json:"pokerus_duration"`
+	PokerusStrain      uint8       `json:"pokerus_strain"`
+	RawNickname        []byte      `json:"raw_nickname"`
+	Nickname           string      `json:"nickname"`
+	Move1ID            uint16      `json:"move_1_id"`
+	Move2ID            uint16      `json:"move_2_id"`
+	Move3ID            uint16      `json:"move_3_id"`
+	Move4ID            uint16      `json:"move_4_id"`
+	Move1PP            uint8       `json:"move_1_pp"`
+	Move2PP            uint8       `json:"move_2_pp"`
+	Move3PP            uint8       `json:"move_3_pp"`
+	Move4PP            uint8       `json:"move_4_pp"`
+	Move1PPUsed        uint8       `json:"move_1_pp_used"`
+	Move2PPUsed        uint8       `json:"move_2_pp_used"`
+	Move3PPUsed        uint8       `json:"move_3_pp_used"`
+	Move4PPUsed        uint8       `json:"move_4_pp_used"`
+	EggMove1ID         uint16      `json:"egg_move_1_id"`
+	EggMove2ID         uint16      `json:"egg_move_2_id"`
+	EggMove3ID         uint16      `json:"egg_move_3_id"`
+	EggMove4ID         uint16      `json:"egg_move_4_id"`
+	HPIV               uint32      `json:"hp_iv"`
+	AtkIV              uint32      `json:"attack_iv"`
+	DefIV              uint32      `json:"defense_iv"`
+	SpeIV              uint32      `json:"speed_iv"`
+	SpAtkIV            uint32      `json:"special_attack_iv"`
+	SpDefIV            uint32      `json:"special_defense_iv"`
+	IsEgg              bool        `json:"is_egg"`
+	IsNicknamed        bool        `json:"is_nicknamed"`
 }