title screen

Beyond the Horizon

If you have any issues with sound (dialog or music), please try the wav version. You are discouraged from playing this game without sound.

The Alexandria array, a set of spaceborne data cores carrying the combined cultural wisdom of a faraway civilization, has gone missing. Their trajectory brought them right to the Charybdis anomaly, from which only data can escape. Someone willing to recover the lost data would have to be willing to become data themselves....



Dat Voice!
Presented by wezu

Stanislaw Lem award for science fiction excellence
Presented by mit-mit

Give this entry an award


Ratings (show detail)

Overall: 4.3
Fun: 3.9
Production: 4.7
Innovation: 4.3

Respondents: 15


File Uploader Date
Windows executable
Cosmologicon 2015/08/16 22:23
wav/bmp version 1: does not require ogg or jpg support
Cosmologicon 2015/08/16 15:37
final version 1 (fixed python3 support)
Cosmologicon 2015/08/16 15:35
title screen
Cosmologicon 2015/08/16 02:24
wav/bmp version: does not require ogg or jpg support
Cosmologicon 2015/08/16 02:11
day 3 screenshot
Cosmologicon 2015/08/11 12:58

Diary Entries

Game complete!

Unlike last time, this time we're actually submitting a complete game, yay! There's a lot I could say about the process, but for now, I'm just asking for bug reports and crashes. Let me know if the game doesn't work for you!



This is just a bunch of random thoughts. I wasn't able to edit it into something more coherent. Don't feel like you need to read it.

This entry was important for me. It assuaged the frustration I felt after The Forgotten Angel, my PyWeek 19 entry. That was supposed to be a plot-heavy action game, of limited difficulty, with a mysterious, unfolding storyline. Although the core mechanics were implemented, only about half the plot was there, and there were a lot of rough edges. I had voiceover planned, but I ran out of time. Beyond the Horizon had many of the same goals as The Forgotten Angel, but it was actually complete. Overall I'm happy with how it turned out.

One thing I always aim for is introducing material (both story and mechanics) as you go along, instead of one big dump at the beginning or end. This requires a lot of care: if you mess up, players don't have all the information when they need it. But I think it makes a big difference in immersion. Beyond the Horizon actually has a playable cold open, which is a first for me. It's great from a dramatic perspective because it means the player is paying attention for the title screen (and I put a lot of effort into the title screen this time).

Another thing I aim for (not always successfully) is economy of controls. I want to make the controls as simple as possible. Usually that means keyboard or mouse only, not both. When it is keyboard, arrow keys plus one action key, maybe two. Midway through this time I realized I was up to four action keys, but I was able to bring that down. I combined two into one by making hold and tap of one key do different things. And I eliminated another by making different ships each do a single action. I was happy with that. I don't know how much of a difference it makes in the end, but I feel like it's worth it. It's so easy to let controls get overly complex.

I had voiceover for the first time in PyWeek this time! Voiceover is great, because then people can't skip the story, and you don't need to write the later part wondering if they heard the beginning. I think it's also easier for people to absorb. But, obviously, it's a lot of work. When you're coordinating with different people, things serialize, which makes the deadlines that much tighter. I needed to have all the game mechanics decided on Tuesday, so the story could be finished by Wednesday, so the voice actors could be done by Friday. And of course it helps the artist to know what the characters sound like, and vice versa. By the time the playtester got the game on Saturday, there was absolutely no way to change the core mechanics in a way that would be reflected in the dialogue. (There was one minor thing I needed to change to prevent the game from getting into an unwinnable state, but it contradicts the dialogue. I just changed it and hoped nobody noticed that the dialogue was slightly wrong.)

So the game mechanics and story were a bit rushed. I originally wanted you to have to build a network of connections between the surface and objectives, and to fill in your map as you explore. I felt like this wasn't really coming together, so I dropped it on Wednesday in favor of simply locating objectives. And instead of you finding or placing things and having them added to the map, stuff just shows up on the map and you go to it.

That was probably the main thing I wish I could have spent more time on. The sense of exploration and discovery was not as great as it could have been. At one point in the game, you start locating what are called "convergences". Originally you would need to follow the pattern of bubbles in the background and look for where they come together. But, I was worried this was way too subtle, and I couldn't think of a good way to hint at it without running the risk of players completely missing it. So now convergences just get added to your map and you go there. (Actually, the follow-the-bubbles thing is still in there, and you can use it to find convergences that aren't on your map, but I'm guessing nobody noticed.)

So the gameplay didn't hold as much of a sense of mystery as I originally wanted, but I think the game still has that sense, with the storyline, the special effects, and especially the music. I think marybee did a great job on the music. The main game theme is accomplished with three channels of sound of increasing drama and fullness, all of which are looping throughout the whole game. Their volume is varied to crossfade between them, depending on how dramatic the scene is supposed to be.

As I said earlier, the storyline was rushed, but it's okay. I wanted to foreshadow the ending, so that it wasn't that confusing, but I think I overdid it and now it's too obvious. There's also a couple plot holes I didn't have time to deal with. One thing my playtester pointed out, that I feel dumb for not realizing, was the fact that I have two things called a "horizon" and it wasn't clear from the dialogue that they're different. It was too late to change the dialogue, so I just labeled them on the map. This alone made having a playtester worthwhile, for me, since something like that can completely confuse players. I also wasn't sure that people would know the astrophysical term "horizon" to mean a boundary. I figured people had heard of an "event horizon" but might not know what it is. Hopefully the title screen helped with that, but I don't really know.

The core teleportation mechanic and the circular geometry were pretty much unchanged from the very beginning. Even though I had to change some mechanics, I feel like I lucked out with the teleportation. Not only did it work from a gameplay perspective, but it complemented the storyline well. I wanted teleportation to feel liberating, while flying ships felt stifling. I wanted players, by the end of the game, to feel comfortable hopping from ship to ship quickly, so that you sympathize with the main character. The mechanic of different ships only having limited abilities is important here, as it forces players to teleport even when they don't need to move up. I always make it a point to start with my core mechanics inspired directly by the theme. Sometimes I wind up adding on enough other stuff that it's not obvious, but this time I think the connection to the theme remained pretty apparent.

On the technical side, I used two new libraries that I wrote since last PyWeek, enco and ptext. I really like them. I know everyone really likes their own libraries, but what are you gonna do? If you think the text in this game is well done, I do recommend checking out ptext. I thought of a couple features to add to each one, too. I'm pleased that I was able to support arbitrary resolutions. I think I've got a good technique for it now, but it definitely needs to be a decision you make from the very beginning. This was my first time supporting Python 3 as well. There's really not much to it, but I still haven't worked out a satisfactory import setup that works for both 2 and 3. Maybe by next time.

All right, like I said, that's just a bunch of random thoughts. Thanks to everyone who played!