horse, horsegen: generate lobby conversation data
This commit is contained in:
@@ -223,6 +223,18 @@ func main() {
|
|||||||
Value2: s.ColumnInt32(4),
|
Value2: s.ColumnInt32(4),
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
convos := load(ctx1, loadgroup, db, "lobby conversations", conversationSQL, func(s *sqlite.Stmt) horse.Conversation {
|
||||||
|
return horse.Conversation{
|
||||||
|
CharacterID: horse.CharacterID(s.ColumnInt(0)),
|
||||||
|
Number: s.ColumnInt(1),
|
||||||
|
Location: horse.LobbyConversationLocationID(s.ColumnInt(2)),
|
||||||
|
LocationName: horse.LobbyConversationLocationID(s.ColumnInt(2)).String(),
|
||||||
|
Chara1: horse.CharacterID(s.ColumnInt(3)),
|
||||||
|
Chara2: horse.CharacterID(s.ColumnInt(4)),
|
||||||
|
Chara3: horse.CharacterID(s.ColumnInt(5)),
|
||||||
|
ConditionType: s.ColumnInt(6),
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
if err := os.MkdirAll(filepath.Join(out, region), 0775); err != nil {
|
if err := os.MkdirAll(filepath.Join(out, region), 0775); err != nil {
|
||||||
slog.Error("create output dir", slog.Any("err", err))
|
slog.Error("create output dir", slog.Any("err", err))
|
||||||
@@ -239,6 +251,7 @@ func main() {
|
|||||||
writegroup.Go(func() error { return write(ctx2, out, region, "saddle.json", saddles) })
|
writegroup.Go(func() error { return write(ctx2, out, region, "saddle.json", saddles) })
|
||||||
writegroup.Go(func() error { return write(ctx2, out, region, "scenario.json", scenarios) })
|
writegroup.Go(func() error { return write(ctx2, out, region, "scenario.json", scenarios) })
|
||||||
writegroup.Go(func() error { return write(ctx2, out, region, "spark.json", mergesparks(sparks, sparkeffs)) })
|
writegroup.Go(func() error { return write(ctx2, out, region, "spark.json", mergesparks(sparks, sparkeffs)) })
|
||||||
|
writegroup.Go(func() error { return write(ctx2, out, region, "conversation.json", convos) })
|
||||||
if err := writegroup.Wait(); err != nil {
|
if err := writegroup.Wait(); err != nil {
|
||||||
slog.ErrorContext(ctx, "write", slog.Any("err", err))
|
slog.ErrorContext(ctx, "write", slog.Any("err", err))
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
@@ -268,6 +281,8 @@ var (
|
|||||||
sparkSQL string
|
sparkSQL string
|
||||||
//go:embed sql/spark-effect.sql
|
//go:embed sql/spark-effect.sql
|
||||||
sparkEffectSQL string
|
sparkEffectSQL string
|
||||||
|
//go:embed sql/conversation.sql
|
||||||
|
conversationSQL string
|
||||||
)
|
)
|
||||||
|
|
||||||
func load[T any](ctx context.Context, group *errgroup.Group, db *sqlitex.Pool, kind, sql string, row func(*sqlite.Stmt) T) func() ([]T, error) {
|
func load[T any](ctx context.Context, group *errgroup.Group, db *sqlitex.Pool, kind, sql string, row func(*sqlite.Stmt) T) func() ([]T, error) {
|
||||||
|
|||||||
10
cmd/horsegen/sql/conversation.sql
Normal file
10
cmd/horsegen/sql/conversation.sql
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
SELECT
|
||||||
|
gallery_chara_id,
|
||||||
|
disp_order,
|
||||||
|
pos_id,
|
||||||
|
chara_id_1,
|
||||||
|
chara_id_2,
|
||||||
|
chara_id_3,
|
||||||
|
condition_type
|
||||||
|
FROM home_story_trigger
|
||||||
|
ORDER BY gallery_chara_id, disp_order
|
||||||
2274
global/conversation.json
Normal file
2274
global/conversation.json
Normal file
File diff suppressed because it is too large
Load Diff
@@ -17,3 +17,43 @@ type AffinityRelation struct {
|
|||||||
IDC int `json:"chara_c,omitzero"`
|
IDC int `json:"chara_c,omitzero"`
|
||||||
Affinity int `json:"affinity"`
|
Affinity int `json:"affinity"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Conversation describes a lobby conversation.
|
||||||
|
type Conversation struct {
|
||||||
|
// CharacterID is the ID of the character who has the conversation as
|
||||||
|
// a gallery entry.
|
||||||
|
CharacterID CharacterID `json:"chara_id"`
|
||||||
|
// Number is the conversation number within the character's gallery.
|
||||||
|
Number int `json:"number"`
|
||||||
|
// Location is the ID of the location the conversation occurs in the lobby.
|
||||||
|
Location LobbyConversationLocationID `json:"location"`
|
||||||
|
// LocationName is the name of the lobby location, for convenience.
|
||||||
|
LocationName string `json:"location_name"`
|
||||||
|
// Chara1 is the first conversation participant ID.
|
||||||
|
// It does not necessarily match CharacterID.
|
||||||
|
Chara1 CharacterID `json:"chara_1"`
|
||||||
|
// Chara2 is the second conversation participant ID.
|
||||||
|
Chara2 CharacterID `json:"chara_2,omitzero"`
|
||||||
|
// Chara3 is the third conversation participant ID.
|
||||||
|
Chara3 CharacterID `json:"chara_3,omitzero"`
|
||||||
|
// ConditionType is a complete mystery to me.
|
||||||
|
ConditionType int `json:"condition_type"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type LobbyConversationLocationID int
|
||||||
|
|
||||||
|
//go:generate go run golang.org/x/tools/cmd/stringer@v0.41.0 -type LobbyConversationLocationID -trimprefix Lobby -linecomment
|
||||||
|
const (
|
||||||
|
LobbyRightFront1 LobbyConversationLocationID = 110 // right side front
|
||||||
|
LobbyRightFront2 LobbyConversationLocationID = 120 // right side front
|
||||||
|
LobbyRightFront3 LobbyConversationLocationID = 130 // right side front
|
||||||
|
LobbyLeftTable1 LobbyConversationLocationID = 210 // left side table
|
||||||
|
LobbyLeftTable2 LobbyConversationLocationID = 220 // left side table
|
||||||
|
LobbyBackSeat LobbyConversationLocationID = 310 // center back seat
|
||||||
|
LobbyPosters1 LobbyConversationLocationID = 410 // center posters
|
||||||
|
LobbyPosters2 LobbyConversationLocationID = 420 // center posters
|
||||||
|
LobbyPosters3 LobbyConversationLocationID = 430 // center posters
|
||||||
|
LobbySchoolMap1 LobbyConversationLocationID = 510 // left side school map
|
||||||
|
LobbySchoolMap2 LobbyConversationLocationID = 520 // left side school map
|
||||||
|
LobbySchoolMap3 LobbyConversationLocationID = 530 // left side school map
|
||||||
|
)
|
||||||
|
|||||||
47
horse/lobbyconversationlocationid_string.go
Normal file
47
horse/lobbyconversationlocationid_string.go
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
// Code generated by "stringer -type LobbyConversationLocationID -trimprefix Lobby -linecomment"; DO NOT EDIT.
|
||||||
|
|
||||||
|
package horse
|
||||||
|
|
||||||
|
import "strconv"
|
||||||
|
|
||||||
|
func _() {
|
||||||
|
// An "invalid array index" compiler error signifies that the constant values have changed.
|
||||||
|
// Re-run the stringer command to generate them again.
|
||||||
|
var x [1]struct{}
|
||||||
|
_ = x[LobbyRightFront1-110]
|
||||||
|
_ = x[LobbyRightFront2-120]
|
||||||
|
_ = x[LobbyRightFront3-130]
|
||||||
|
_ = x[LobbyLeftTable1-210]
|
||||||
|
_ = x[LobbyLeftTable2-220]
|
||||||
|
_ = x[LobbyBackSeat-310]
|
||||||
|
_ = x[LobbyPosters1-410]
|
||||||
|
_ = x[LobbyPosters2-420]
|
||||||
|
_ = x[LobbyPosters3-430]
|
||||||
|
_ = x[LobbySchoolMap1-510]
|
||||||
|
_ = x[LobbySchoolMap2-520]
|
||||||
|
_ = x[LobbySchoolMap3-530]
|
||||||
|
}
|
||||||
|
|
||||||
|
const _LobbyConversationLocationID_name = "right side frontright side frontright side frontleft side tableleft side tablecenter back seatcenter posterscenter posterscenter postersleft side school mapleft side school mapleft side school map"
|
||||||
|
|
||||||
|
var _LobbyConversationLocationID_map = map[LobbyConversationLocationID]string{
|
||||||
|
110: _LobbyConversationLocationID_name[0:16],
|
||||||
|
120: _LobbyConversationLocationID_name[16:32],
|
||||||
|
130: _LobbyConversationLocationID_name[32:48],
|
||||||
|
210: _LobbyConversationLocationID_name[48:63],
|
||||||
|
220: _LobbyConversationLocationID_name[63:78],
|
||||||
|
310: _LobbyConversationLocationID_name[78:94],
|
||||||
|
410: _LobbyConversationLocationID_name[94:108],
|
||||||
|
420: _LobbyConversationLocationID_name[108:122],
|
||||||
|
430: _LobbyConversationLocationID_name[122:136],
|
||||||
|
510: _LobbyConversationLocationID_name[136:156],
|
||||||
|
520: _LobbyConversationLocationID_name[156:176],
|
||||||
|
530: _LobbyConversationLocationID_name[176:196],
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i LobbyConversationLocationID) String() string {
|
||||||
|
if str, ok := _LobbyConversationLocationID_map[i]; ok {
|
||||||
|
return str
|
||||||
|
}
|
||||||
|
return "LobbyConversationLocationID(" + strconv.FormatInt(int64(i), 10) + ")"
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user