D2Data and Quest data (#9)

This commit is contained in:
Héctor Giménez
2024-02-02 20:19:44 +09:00
committed by GitHub
parent f06c587c7a
commit db8fc7d6db
16 changed files with 25749 additions and 462 deletions

60
pkg/memory/quests.go Normal file
View File

@@ -0,0 +1,60 @@
package memory
import (
"fmt"
"github.com/hectorgimenez/d2go/pkg/data/quest"
)
func (gd *GameReader) getQuests(questBytes []byte) quest.Quests {
return quest.Quests{
// Act 1
quest.Act1DenOfEvil: gd.getQuestStatus([2]byte(questBytes[0:2])),
quest.Act1SistersBurialGrounds: gd.getQuestStatus([2]byte(questBytes[2:4])),
quest.Act1ToolsOfTheTrade: gd.getQuestStatus([2]byte(questBytes[4:6])),
quest.Act1TheSearchForCain: gd.getQuestStatus([2]byte(questBytes[6:8])),
quest.Act1TheForgottenTower: gd.getQuestStatus([2]byte(questBytes[8:10])),
quest.Act1SistersToTheSlaughter: gd.getQuestStatus([2]byte(questBytes[10:12])),
// Act 2
quest.Act2RadamentsLair: gd.getQuestStatus([2]byte(questBytes[16:18])),
quest.Act2TheHoradricStaff: gd.getQuestStatus([2]byte(questBytes[18:20])),
quest.Act2TaintedSun: gd.getQuestStatus([2]byte(questBytes[20:22])),
quest.Act2ArcaneSanctuary: gd.getQuestStatus([2]byte(questBytes[22:24])),
quest.Act2TheSummoner: gd.getQuestStatus([2]byte(questBytes[24:26])),
quest.Act2TheSevenTombs: gd.getQuestStatus([2]byte(questBytes[26:28])),
// Act 3
quest.Act3LamEsensTome: gd.getQuestStatus([2]byte(questBytes[32:34])),
quest.Act3KhalimsWill: gd.getQuestStatus([2]byte(questBytes[34:36])),
quest.Act3BladeOfTheOldReligion: gd.getQuestStatus([2]byte(questBytes[36:38])),
quest.Act3TheGoldenBird: gd.getQuestStatus([2]byte(questBytes[38:40])),
quest.Act3TheBlackenedTemple: gd.getQuestStatus([2]byte(questBytes[40:42])),
quest.Act3TheGuardian: gd.getQuestStatus([2]byte(questBytes[42:44])),
// Act 4
quest.Act4TheFallenAngel: gd.getQuestStatus([2]byte(questBytes[48:50])),
quest.Act4TerrorsEnd: gd.getQuestStatus([2]byte(questBytes[50:52])),
quest.Act4HellForge: gd.getQuestStatus([2]byte(questBytes[52:54])),
// Act 5
quest.Act5SiegeOnHarrogath: gd.getQuestStatus([2]byte(questBytes[68:70])),
quest.Act5RescueOnMountArreat: gd.getQuestStatus([2]byte(questBytes[70:72])),
quest.Act5PrisonOfIce: gd.getQuestStatus([2]byte(questBytes[72:74])),
quest.Act5BetrayalOfHarrogath: gd.getQuestStatus([2]byte(questBytes[74:76])),
quest.Act5RiteOfPassage: gd.getQuestStatus([2]byte(questBytes[76:78])),
quest.Act5EveOfDestruction: gd.getQuestStatus([2]byte(questBytes[78:80])),
}
}
func (gd *GameReader) getQuestStatus(questBytes [2]byte) []quest.Status {
combinedValue := uint16(questBytes[0])<<8 | uint16(questBytes[1])
binaryRepresentation := fmt.Sprintf("%016b", combinedValue)
var activeStates []quest.Status
for i, char := range binaryRepresentation {
if char == '1' {
if 15-i >= 0 && i < 16 {
activeStates = append(activeStates, quest.Status(15-i))
}
}
}
return activeStates
}