/// <summary>Get the data to display for this subject.</summary>
        public override IEnumerable <ICustomField> GetData()
        {
            // island shrine puzzle
            {
                IslandShrine shrine   = (IslandShrine)this.Location;
                bool         complete = shrine.puzzleFinished.Value;

                if (this.ProgressionMode && !complete)
                {
                    yield return(new GenericField(I18n.Puzzle_Solution(), new FormattedText(I18n.Puzzle_Solution_Hidden(), Color.Gray)));
                }
                else
                {
                    var field = new CheckboxListField(I18n.Puzzle_Solution(),
                                                      CheckboxListField.Checkbox(
                                                          text: I18n.Puzzle_IslandShrine_Solution_North(shrine.northPedestal.requiredItem.Value.DisplayName),
                                                          value: complete || shrine.northPedestal.match.Value
                                                          ),
                                                      CheckboxListField.Checkbox(
                                                          text: I18n.Puzzle_IslandShrine_Solution_East(shrine.eastPedestal.requiredItem.Value.DisplayName),
                                                          value: complete || shrine.eastPedestal.match.Value
                                                          ),
                                                      CheckboxListField.Checkbox(
                                                          text: I18n.Puzzle_IslandShrine_Solution_South(shrine.southPedestal.requiredItem.Value.DisplayName),
                                                          value: complete || shrine.southPedestal.match.Value
                                                          ),
                                                      CheckboxListField.Checkbox(
                                                          text: I18n.Puzzle_IslandShrine_Solution_West(shrine.westPedestal.requiredItem.Value.DisplayName),
                                                          value: complete || shrine.westPedestal.match.Value
                                                          )
                                                      );

                    field.AddIntro(complete
                        ? I18n.Puzzle_Solution_Solved()
                        : I18n.Puzzle_IslandShrine_Solution()
                                   );

                    yield return(field);
                }
            }

            // raw map data
            foreach (ICustomField field in base.GetData())
            {
                yield return(field);
            }
        }