diff --git a/analyze/overwrites.json b/analyze/overwrites.json
index 0e58de7..ee79a13 100644
--- a/analyze/overwrites.json
+++ b/analyze/overwrites.json
@@ -41,6 +41,10 @@
{
"Name": "EndYear",
"Type": "int"
+ },
+ {
+ "Name": "Plus",
+ "Type": "bool"
}
],
"Structure": [
diff --git a/backend/model/collections.go b/backend/model/collections.go
index 311244f..c714ad5 100644
--- a/backend/model/collections.go
+++ b/backend/model/collections.go
@@ -81,15 +81,17 @@ func (x *HistoricalEventCollectionCeremony) Html(e *HistoricalEventCollection, c
if event, ok := c.World.HistoricalEvents[e.Event[0]]; ok {
if d, ok := event.Details.(*HistoricalEventCeremony); ok {
if entity, ok := c.World.Entities[d.CivId]; ok {
- occ := entity.Occasion[d.OccasionId]
- if len(occ.Schedule) > 1 {
- switch d.ScheduleId {
- case 0:
- r = "opening ceremony"
- case len(occ.Schedule) - 1:
- r = "closing ceremony"
- default:
- r = "main ceremony"
+ if d.OccasionId < len(entity.Occasion) {
+ occ := entity.Occasion[d.OccasionId]
+ if len(occ.Schedule) > 1 {
+ switch d.ScheduleId {
+ case 0:
+ r = "opening ceremony"
+ case len(occ.Schedule) - 1:
+ r = "closing ceremony"
+ default:
+ r = "main ceremony"
+ }
}
}
}
@@ -105,8 +107,12 @@ func (x *HistoricalEventCollectionCompetition) Html(e *HistoricalEventCollection
if event, ok := c.World.HistoricalEvents[e.Event[0]]; ok {
if d, ok := event.Details.(*HistoricalEventCompetition); ok {
if entity, ok := c.World.Entities[d.CivId]; ok {
- occ := entity.Occasion[d.OccasionId]
- r = occ.Schedule[d.ScheduleId].Type_.String()
+ if d.OccasionId < len(entity.Occasion) {
+ occ := entity.Occasion[d.OccasionId]
+ if d.ScheduleId < len(occ.Schedule) {
+ r = occ.Schedule[d.ScheduleId].Type_.String()
+ }
+ }
}
}
}
@@ -137,8 +143,10 @@ func (x *HistoricalEventCollectionJourney) Html(e *HistoricalEventCollection, c
func (x *HistoricalEventCollectionOccasion) Html(e *HistoricalEventCollection, c *Context) string {
if civ, ok := c.World.Entities[x.CivId]; ok {
- occ := civ.Occasion[x.OccasionId]
- return util.If(x.Ordinal > 1, "the "+ord(x.Ordinal)+"occasion of ", "") + e.Link(occ.Name_)
+ if x.OccasionId < len(civ.Occasion) {
+ occ := civ.Occasion[x.OccasionId]
+ return util.If(x.Ordinal > 1, "the "+ord(x.Ordinal)+"occasion of ", "") + e.Link(occ.Name_)
+ }
}
return util.If(x.Ordinal > 1, "the "+ord(x.Ordinal)+"occasion of ", "") + e.Link("UNKNOWN OCCASION")
}
@@ -149,8 +157,12 @@ func (x *HistoricalEventCollectionPerformance) Html(e *HistoricalEventCollection
if event, ok := c.World.HistoricalEvents[e.Event[0]]; ok {
if d, ok := event.Details.(*HistoricalEventPerformance); ok {
if entity, ok := c.World.Entities[d.CivId]; ok {
- occ := entity.Occasion[d.OccasionId]
- r = occ.Schedule[d.ScheduleId].Type_.String()
+ if d.OccasionId < len(entity.Occasion) {
+ occ := entity.Occasion[d.OccasionId]
+ if d.ScheduleId < len(occ.Schedule) {
+ r = occ.Schedule[d.ScheduleId].Type_.String()
+ }
+ }
}
}
}
diff --git a/backend/model/events.go b/backend/model/events.go
index b1851f0..d8722be 100644
--- a/backend/model/events.go
+++ b/backend/model/events.go
@@ -425,11 +425,13 @@ func (x *HistoricalEventBuildingProfileAcquired) Html(c *Context) string {
func (x *HistoricalEventCeremony) Html(c *Context) string {
r := c.entity(x.CivId) + " held a ceremony in " + c.site(x.SiteId, "")
if e, ok := c.World.Entities[x.CivId]; ok {
- o := e.Occasion[x.OccasionId]
- r += " as part of " + o.Name()
- s := o.Schedule[x.ScheduleId]
- if len(s.Feature) > 0 {
- r += ". The event featured " + andList(util.Map(s.Feature, c.feature))
+ if x.OccasionId < len(e.Occasion) {
+ o := e.Occasion[x.OccasionId]
+ r += " as part of " + o.Name()
+ s := o.Schedule[x.ScheduleId]
+ if len(s.Feature) > 0 {
+ r += ". The event featured " + andList(util.Map(s.Feature, c.feature))
+ }
}
}
return r
@@ -449,16 +451,12 @@ func (x *HistoricalEventChangeHfBodyState) Html(c *Context) string {
}
func (x *HistoricalEventChangeHfJob) Html(c *Context) string {
- w := ""
- if x.SubregionId != -1 {
- w = " in " + c.region(x.SubregionId)
- }
- if x.SiteId != -1 {
- w = " in " + c.site(x.SiteId, "")
- }
+ w := c.location(x.SiteId, " in", x.SubregionId, " in")
old := articled(strcase.ToDelimited(x.OldJob, ' '))
new := articled(strcase.ToDelimited(x.NewJob, ' '))
- if x.OldJob == "standard" {
+ if x.OldJob == "" && x.NewJob == "" {
+ return c.hf(x.Hfid) + " became a UNKNOWN JOB" + w
+ } else if x.OldJob == "standard" {
return c.hf(x.Hfid) + " became " + new + w
} else if x.NewJob == "standard" {
return c.hf(x.Hfid) + " stopped being " + old + w
@@ -502,7 +500,7 @@ func (x *HistoricalEventChangeHfState) Html(c *Context) string {
return c.hf(x.Hfid) + " fled " + c.site(x.SiteId, "to")
case HistoricalEventChangeHfStateReason_ConvictionExile, HistoricalEventChangeHfStateReason_ExiledAfterConviction:
return c.hf(x.Hfid) + " departed " + c.site(x.SiteId, "to") + r
- case HistoricalEventChangeHfStateReason_None:
+ default:
return c.hf(x.Hfid) + " settled " + c.location(x.SiteId, "in", x.SubregionId, "in")
}
case HistoricalEventChangeHfStateState_Visiting:
@@ -543,10 +541,19 @@ func (x *HistoricalEventChangedCreatureType) Html(c *Context) string {
}
func (x *HistoricalEventCompetition) Html(c *Context) string {
- e := c.World.Entities[x.CivId]
- o := e.Occasion[x.OccasionId]
- s := o.Schedule[x.ScheduleId]
- return c.entity(x.CivId) + " held a " + strcase.ToDelimited(s.Type_.String(), ' ') + c.site(x.SiteId, " in") + " as part of the " + o.Name() +
+ oName := "UNKNOWN OCCASION"
+ sType := "competition"
+ if e, ok := c.World.Entities[x.CivId]; ok {
+ if x.OccasionId < len(e.Occasion) {
+ o := e.Occasion[x.OccasionId]
+ oName = o.Name_
+ if x.ScheduleId < len(o.Schedule) {
+ s := o.Schedule[x.ScheduleId]
+ sType = strcase.ToDelimited(s.Type_.String(), ' ')
+ }
+ }
+ }
+ return c.entity(x.CivId) + " held a " + sType + c.site(x.SiteId, " in") + " as part of the " + oName +
". Competing " + util.If(len(x.CompetitorHfid) > 1, "were ", "was ") + c.hfList(x.CompetitorHfid) + ". " +
util.Capitalize(c.hf(x.WinnerHfid)) + " was the victor"
}
@@ -1976,14 +1983,21 @@ func (x *HistoricalEventPeaceRejected) Html(c *Context) string {
func (x *HistoricalEventPerformance) Html(c *Context) string {
r := c.entity(x.CivId) + " held "
+ oName := "UNKNOWN OCCASION"
+ sType := "a performance"
if e, ok := c.World.Entities[x.CivId]; ok {
- o := e.Occasion[x.OccasionId]
- s := o.Schedule[x.ScheduleId]
- r += c.schedule(s)
- r += " as part of " + o.Name()
- r += c.site(x.SiteId, " in")
- r += string(util.Json(s))
+ if x.OccasionId < len(e.Occasion) {
+ o := e.Occasion[x.OccasionId]
+ oName = o.Name_
+ if x.ScheduleId < len(o.Schedule) {
+ s := o.Schedule[x.ScheduleId]
+ sType = c.schedule(s)
+ }
+ }
}
+ r += sType
+ r += " as part of " + oName
+ r += c.site(x.SiteId, " in")
return r
}
@@ -2005,21 +2019,23 @@ func (x *HistoricalEventPoeticFormCreated) Html(c *Context) string {
func (x *HistoricalEventProcession) Html(c *Context) string {
r := c.entity(x.CivId) + " held a procession in " + c.site(x.SiteId, "")
if e, ok := c.World.Entities[x.CivId]; ok {
- o := e.Occasion[x.OccasionId]
- r += " as part of " + o.Name()
- s := o.Schedule[x.ScheduleId]
- if s.Reference != -1 {
- r += ". It started at " + c.structure(x.SiteId, s.Reference)
- if s.Reference2 != -1 && s.Reference2 != s.Reference {
- r += " and ended at " + c.structure(x.SiteId, s.Reference2)
- } else {
- r += " and returned there after following its route"
+ if x.OccasionId < len(e.Occasion) {
+ o := e.Occasion[x.OccasionId]
+ r += " as part of " + o.Name()
+ s := o.Schedule[x.ScheduleId]
+ if s.Reference != -1 {
+ r += ". It started at " + c.structure(x.SiteId, s.Reference)
+ if s.Reference2 != -1 && s.Reference2 != s.Reference {
+ r += " and ended at " + c.structure(x.SiteId, s.Reference2)
+ } else {
+ r += " and returned there after following its route"
+ }
}
+ if len(s.Feature) > 0 {
+ r += ". The event featured " + andList(util.Map(s.Feature, c.feature))
+ }
+ r += string(util.Json(s))
}
- if len(s.Feature) > 0 {
- r += ". The event featured " + andList(util.Map(s.Feature, c.feature))
- }
- r += string(util.Json(s))
}
return r
}
diff --git a/backend/model/functions.go b/backend/model/functions.go
index 1cc7844..fd31096 100644
--- a/backend/model/functions.go
+++ b/backend/model/functions.go
@@ -49,14 +49,16 @@ var AddMapLandmass = func(w *DfWorld, id int) template.HTML {
var AddMapRegion = func(w *DfWorld, id int) template.HTML {
if x, ok := w.Regions[id]; ok {
coords := strings.Join(util.Map(x.Outline(), func(c Coord) string { return fmt.Sprintf(`coord(%d,%d)`, c.X, c.Y-1) }), ",")
- fillColor := "transparent"
- switch x.Evilness {
- case RegionEvilness_Evil:
- fillColor = "fuchsia"
- case RegionEvilness_Good:
- fillColor = "aqua"
+ if len(coords) > 0 {
+ fillColor := "transparent"
+ switch x.Evilness {
+ case RegionEvilness_Evil:
+ fillColor = "fuchsia"
+ case RegionEvilness_Good:
+ fillColor = "aqua"
+ }
+ return template.HTML(fmt.Sprintf(``, x.Id_, coords, fillColor))
}
- return template.HTML(fmt.Sprintf(``, x.Id_, coords, fillColor))
}
return ""
}
diff --git a/backend/model/map.go b/backend/model/map.go
index 3c7e4e6..500874c 100644
--- a/backend/model/map.go
+++ b/backend/model/map.go
@@ -121,6 +121,10 @@ func maxCoords(coords []Coord) Coord {
func (r *Region) Outline() []Coord {
var outline []Coord
+
+ if r.Coords == "" {
+ return outline
+ }
// if (cacheOutline != null)
// return cacheOutline;
diff --git a/backend/model/model.go b/backend/model/model.go
index aa450bd..3879412 100644
--- a/backend/model/model.go
+++ b/backend/model/model.go
@@ -1548,6 +1548,7 @@ type DfWorld struct {
Height int `json:"height" legend:"add" related:""` // Height
MapData []byte `json:"mapData" legend:"add" related:""` // MapData
MapReady bool `json:"mapReady" legend:"add" related:""` // MapReady
+ Plus bool `json:"plus" legend:"add" related:""` // Plus
PlusFilePath string `json:"plusFilePath" legend:"add" related:""` // PlusFilePath
Width int `json:"width" legend:"add" related:""` // Width
}
@@ -1616,6 +1617,7 @@ func (x *DfWorld) MarshalJSON() ([]byte, error) {
}
d["mapData"] = x.MapData
d["mapReady"] = x.MapReady
+ d["plus"] = x.Plus
d["plusFilePath"] = x.PlusFilePath
if x.Width != -1 {
d["width"] = x.Width
diff --git a/backend/model/parse.go b/backend/model/parse.go
index ad60f87..a44bf3d 100644
--- a/backend/model/parse.go
+++ b/backend/model/parse.go
@@ -99,7 +99,7 @@ BaseLoop:
bar.Finish()
- plus := true
+ plus := false
if plus {
file = strings.Replace(file, "-legends.xml", "-legends_plus.xml", 1)
@@ -131,6 +131,7 @@ BaseLoop:
}
}
}
+ world.Plus = true
world.PlusFilePath = file
bar.Finish()
diff --git a/backend/model/process.go b/backend/model/process.go
index 2f6b562..0be8c3e 100644
--- a/backend/model/process.go
+++ b/backend/model/process.go
@@ -4,6 +4,7 @@ import (
"sort"
"strings"
+ "github.com/iancoleman/strcase"
"github.com/robertjanetzko/LegendsBrowser2/backend/util"
"golang.org/x/exp/maps"
"golang.org/x/exp/slices"
@@ -49,10 +50,29 @@ func (w *DfWorld) process() {
sort.Slice(e.Wars, func(i, j int) bool { return e.Wars[i].Id_ < e.Wars[j].Id_ })
}
+ if !w.Plus {
+ for _, hf := range w.HistoricalFigures {
+ hf.Race = strings.Trim(strcase.ToDelimited(hf.Race, ' '), " 0123456789")
+ }
+
+ for _, a := range w.DanceForms {
+ a.Name_ = a.Description[:strings.Index(a.Description, " is a ")]
+ }
+ for _, a := range w.MusicalForms {
+ a.Name_ = a.Description[:strings.Index(a.Description, " is a ")]
+ }
+ for _, a := range w.PoeticForms {
+ a.Name_ = a.Description[:strings.Index(a.Description, " is a ")]
+ }
+ }
+
// check events texts
- // for _, e := range w.HistoricalEvents {
- // e.Details.Html(&Context{World: w})
- // }
+ for _, e := range w.HistoricalEvents {
+ e.Details.Html(&Context{World: w})
+ }
+ for _, e := range w.HistoricalEventCollections {
+ e.Details.Html(e, &Context{World: w})
+ }
}