Kethiran Astronomy

As another example of the amazing depth of the HârnWorld setting, it includes not only wonderful maps, but the whole solar system is detailed as well as its night sky. Even early versions of the setting had this level of detail. Kethira is the name the planet where Hârn and Venârivè are located. In 2014 Kelestia Production published a product that details astronomy and astrology and it comes with a program written in Java that can work on both Windows and macOS. It's a great program and I am grateful that the author put so much work into it. After using it for a time though I came up with a few ideas on how to improve the interface, which looks like this on macOS.

The Java version of the astronomy program.

I wanted a better looking interface and the ability to see the information directly in the application. I also wanted a number of quality of life improvements. For example, while there are 13 built-in locations across Venârivè with preset coordinates, and you can enter coordinates manually, there is no way to save locations and add them to the list.

A thing that bothered me also was that when you create a star map or a horoscope, it creates a file named temp.svg in the same folder as the program. If you press Create Star Map, then Create Horoscope, it silently replaces the star map file with the horoscope unless you changed the name of the file. And you can't view those files from within the app.

So I decompiled the Java version and I created a SwiftUI version based on that code.

The star map view of the SwiftUI version of Kethiran Astrology.

For reference this is the star map at the same location and time as given by the original Java program.

Date & Time

The first thing I did was to change how the time is displayed. The time is internally represented as a fraction of a day, and this was what appeared on both the celestial chart and the astrological forecast, as depicted here.

I modified it not only to display a legible time but also to incorporate both the “standard” time (the time at the Prime Meridian or longitude zero), which I refer to as OST (Ómrium Standard Time).

Ecliptic & Zodiac Boundaries

As shown in the above picture, the original program does not draw the ecliptic. Instead, it displays red dots at the zodiacal boundaries on the ecliptic. I found the red dots unappealing, so I substituted them with a line for the ecliptic and tick marks for the boundaries.

I also observed that the defined boundaries did not align with the signs listed in the rulebook. For example, if you enter the date as the 4th of Peonu, the rulebook states that your sign is Arálius, while the program claims that you are Ùlándus instead. This discrepancy can be attributed to axial precession. In fact, the boundaries were accurate in year 1, but over time, even the smallest deviations accumulated, resulting in their misalignment in year 720. It is important to note that the reference year in all Hârn publications remains the year 720. So the rulebook sunsign tables should be valid in year 720 and I changed the boundaries to match it.

Constellation outlines

The original didn’t include outlines for the constellations, so I added them. However, I encountered a dilemma: I remembered the outlines from previous editions, but they had changed in the most recent publication. The new outlines are very simple, usually just a “circle around” the constellation’s stars, while the earlier version had more complex ones. Here is the latest version of the Aik constellation:

And this was the previous version.

I much prefer the previous versions. I debated with myself and actually consulted someone at KP, and he also preferred the older version. This is what I put in my program.

As I traced the contours, I noticed several things. Firstly, some stars were not accurately placed according to the standard star maps. While not many, I had to adjust their positions. Additionally, I modified numerous constellation labels, as they were often significantly removed from the actual constellation, a detail that is harder to discern without the aid of the outlines.

Then I noticed that the position of the zodiac constellations weren't inside the zodiac boundaries. I told myself that was probably because I changed those boundaries. Yet when I checked the original, I found that they did not fall inside the original boundaries either (those red dots).

Ascendant and Descendant signs

Around that time, a user on the Lythia Hârn discussion board brought up an issue with the horoscope. They noted that the software was providing incorrect information about the ascending and descending zodiacal signs. In some instances, it reported both signs as identical. The ascendant is defined as “the sign that is rising in the East at that time and place”, while the descendant is “the constellation setting on the other horizon.” These cannot be the same sign.

Upon investigation, I discovered that the software was determining the angle φ of the ascendant and then flipping its sign to -φ to compute the descendant. This is not the correct approach, as it can lead to both the ascendant and descendant having the same constellation for small angles. The correct method is to add π (working in radians) to the calculated angle to obtain the descendant.

Meridian Local Time

I have conducted a test to compare the time zones at the Prime Meridian, or zero longitude. Typically, the standard and local time should differ by a maximum of 8 minutes along this line, but in the original code, there was a significant discrepancy of half a day. I resolved this issue in my revision. I also opted to use OST as a shorthand for standard time. It's similar to GMT, but on Kethira, the closest notable city to the Meridian is Ómrium so I went with Ómrium Standard Time.

Esthetics

The most recent astronomical chart boasted a violet hue, with white labels for the zodiac constellations and yellow ones for the others. The constellation labels featured diacritics, and some of them had undergone spelling modifications since the program’s creation. To align with the latest chart, I revised the labels and colours for a more accurate representation.

Magnitudes

In the initial iteration of the software, all stars appeared as identical dots, without any distinction in brightness. I added magnitude data for all the canonical stars and incorporated an additional 500 faint background stars.

Full Moon

Someone asked an excellent question about the syzygy, or the actual time of the full moon. I checked, and the program doesn’t really provide that information. However, a numerical value was displayed in a table, which I had not thoroughly examined. In HârnWorld, the Full Moon always falls on the 15th of each month, while the New Moon occurs on the 30th. It was only upon being prompted that I began to explore this further.

I discovered that the program reported the full moon on the 16th! I looked at the code and realized that this was even worse than I thought. The full moon was set to appear on the 17th of year 1, and it was only a slow drift that made it move to the 16th by year 720.

I also fixed that, and, like the other aspects, I made it so that the full moon occurs on the 15th at the beginning of the year 720. Moving forward or back in time from 720 will move it by about 2.5 minutes per year, so it will align with the rulebook for a while.

As I was repairing the Moon’s phase, I incorporated an accurate depiction of the lunar phase into the celestial chart and astrological reading. Instead of a complete white circle, it now displays the precise phase. Moreover, the illuminated side aligns with the Sun’s position.

Saved Locations & Map Picker

In the initial version of the program, you had a little more than 10 predefined locations and the ability to enter longitude and latitude manually, but there was no way to save these coordinates or change any of the predefined locations. I incorporated a function that allows you to save locations (and delete them). I also integrated a map-based location selector for Venârivè. All you need to do is tap on the desired spot and the coordinates will be instantly populated.

The location picker view of the SwiftUI version of Kethiran Astrology.

Of course you can zoom in. The interrupted sinusoidal projection is taken into account. This converts the coordinates of the image into the correct longitude and latitude for the selected point on the map. You can then label and store that location for later use.

Some other things

In addition to saving as SVG I also added a save as PDF option for the star map and horoscope, and a save as TXT option for the table information. I also persist the location selected (either named location or manual coordinates), as well as the date and time between app launches. I also added information on the type of celestial body in the Nolomar System tab. You can now more easily select the time of day, and it now works in both dark and light modes.

Thank you to the original author

I want to express my gratitude to the creator of this program, as they did the bulk of the work. I could not have made these modifications without their impressive initial efforts. I made a few adjustments, but I built on top of their extensive foundation. Therefore, I would like to thank you, whoever you are, for creating such an enjoyable and functional program.