The Seventh Week

This week was “reading week,” meaning that we had no mandatory scheduled sessions, and were therefore working to less of a defined structure than usual. Therefore, having stayed up quite late the night before (to finish last week’s blog post), I didn’t go to the studio super early on Monday morning (as I usually would), though I did get there before 10:00. As a group, our plan for the week was to work from the idea of “passing the baton,” where you may be alone in the moment, but the togetherness of asynchronous cooperation and the sharing of experiences avoids a feeling of loneliness. I’d said to the others on Friday that I had an idea for how to program an experience to be passed on and shared asynchronously, and while I was to work on prototyping that feature, the others were to generate ideas of how to expand on it, so that we could get together and discuss the ideas in the middle of the week (during our podcast). After spending some of the morning and afternoon generating and documenting ideas for the prototype (concerning how to go about making it, and how the player might interface with it), my laptop’s hard disk disconnected, and I needed to get inside my laptop to reconnect it. After finding that James’ screwdriver was too large for the job, I headed home to retrieve my set, and promptly took the laptop apart when I returned. The fix seemed to work, so once that was sorted, I continued documenting and generating ideas.

img_3048

Using the concept that we’d spoken about as a group on Friday, my idea for the prototype was to have players place three paving stones between a start and end point before dying and generating a code to pass onto the next player, so that they’d start where the previous player left off. I also wanted for the seed that’s generated to be able to fit in a tweet on Twitter (so that it can be easily shared with numerous people). While generating and documenting ideas, I was considering whether to have a square or hexagonal grid, which perspective to give the player and what to place as the end goal. For the sake of the prototype, I opted for a hexagonal grid (allowing for relatively simple coding, though less so than a square grid, and more options in terms of placement) with a first-person camera (making the solitude feel more personal and the sense of progression more apparent) and a mysterious obelisk/pillar as an end goal (to have a sense of mystery and save me some time, considering this was just meant to represent the seed generation and loading for asynchronous progress). Once I’d settled on what I was doing, I printed-off an image of a hexagon and headed home, using the image (and some simple trigonometry) to calculate dimensions for the hexagonal grid. I then figured out how to automate the generation of the grid using the values I’d calculated, making it easier to code when I got to that point. Below are the pages I worked on throughout Monday.

idea 1 prototype concept

idea 1 prototype calculations

On Tuesday morning, I headed to the studio to start developing the prototype. I began by creating a hexagonal prism in Blender, by creating a circle, reducing the number of sides to six and then extruding the face to make it three-dimensional. However, I extruded it the wrong way first, which flipped the normals and made it look pretty weird in Unity. Fixing the issue was simple, though, and didn’t take long. After importing the proper prism into Unity, I placed a few of them beside each other and realised that each side of the hexagonal face was one unit in length, which would make placing them much easier (it meant that the row offset between columns would be exactly 3 / 2 , and the offset of rows within the same column would be 3 ). I then made different materials for the hex grid spaces, to determine when they’re placed paving stones or just highlighting where one will be placed, and made each version into a prefab to be instantiated in code. I then programmed the loops to make a hex grid in world space from a two-dimensional array of Booleans (storing which grid spaces should be occupied by paving stones), using the method I’d come up with on paper as a guide. After that, I proceeded to spend hours working on getting a hexadecimal string converted into binary to provide the values for the Boolean array. While I knew what I wanted of the code, I didn’t know the proper syntax for what I was using, and finding the syntax online proved to be difficult. Also, Bernie joined George and me at the studio in the afternoon, and the discussions we had about the industry and possible game concepts (the latter was mostly the other two) meant that I wasn’t completely focused on finding the solution for a while (not that that’s a bad thing). Once I’d found a solution for what I wanted in an online forum, I spent time making sure I was able to understand everything that was happening in the solution, which led to me learning about ternary operators and proper use of bit shifting (which will both certainly be useful in future). I trusted the suggested character conversions from hexadecimal into integers without spending too long trying to look them up, because I feel that knowledge is more arbitrary than properly practical. I then spent hours trying to convert the bytes (from the hex string) into Boolean values for the two-dimensional array, staying up into the early hours to do so. While I didn’t solve the problem during the evening, I made enough progress to know what to try in the morning (as there were only errors concerning data type conversions that I had to worry about, and I thought of a way to handle it).

On Wednesday morning, I headed to the studio and continued my attempts at converting a hex string into Boolean values for the array. Thankfully, after a lot of piddling about and trying fixes, the code seemed to be mostly working. However, there was an issue during testing where paving stones weren’t being instantiated at the correct z positions. I eventually figured out that they were simply spawning on top of each other, and then noticed that I was using a constant value for the z positions instead of the variable I’d intended to be used. Switching this solved the problem, and the hexagonal grid was now being properly created from a hexadecimal string. With the process now working to convert hexadecimal into a byte array into a binary string into a Boolean array into a grid in world space, the focus was on reversing that process so that a string could be exported.

In the afternoon, we gathered as a team to record the first part of our weekly podcast, though we had Ella speaking into the microphone through Bernie’s phone via a video call, as she’d been away from Winchester during the week. Although the podcast recording was cut short, since Ella and Bernie were both feeling unwell (and getting worse throughout the podcast), we still discussed a number of topics. The main topics were: our focus and structure for the week; Bernie’s game idea, narratively focusing on a character who rejects the importance of considering the future (due to feeling that anything they say or do now loses its context, relevance and meaning when passed onto others and future generations, being completely misunderstood), but then learns about the importance of sharing experiences, possibly through a character they begin to care about (he said that he intentionally took the issue to an extreme, so that it can be presented as a genuine issue to be solved throughout the game); an idea I came up with as a response, where solutions that players find to problems aren’t completely applicable to problems that other players need to solve, so passing solutions on means that they’ll inherently lose their initial meaning and context, even with aspects possibly still being useful; George’s concern that a character so set in their thoughts would be unlikely to change, so the narrative might not be believable; the importance of believable character growth and arcs, as well as the need to avoid characters who serve as fodder for the plot; George’s idea of a world with no definitive direction, where it’s so vast or confusing that the only way to progress is to rely on other players being pioneers, with the first players of a world being unlikely to be able to finish the game there; the need to make players feel like their discoveries are generally useful, in that the game isn’t playing itself; Bernie’s idea of player’s having to split up to find different things within a forest, since the space is so vast and directionless; the differences between an intended experience and a procedural one, and whether to make the game replayable; Bernie’s idea of players having different specialisations, so that multiple different people have to be relied upon; and whether it’s okay to have people play the game around other people, due to the game’s message and focus. We decided to record a second part of the podcast on the Friday, so that we could further develop our ideas, discuss them with Andy and return with a fresh perspective (as well as everyone in the same room and hopefully not ill). After the podcast recording, I went to my CBT session and then spent the rest of the evening continuing with the prototype. I made it so that the Boolean values of the array for the grid’s spaces are converted into a binary string, and then made it so that the values of the string are converted into bytes in a loop. Then, after searching for a good while online for how to convert the bytes into hexadecimal characters, I found (and made sure I understood) a solution, before heading to bed (feeling quite unhappy).

On Thursday morning (still quite unhappy), I went to the studio and continued programming, this time seeking to change the code that was meant to convert the binary string into bytes (since it wasn’t working). I switched from simply converting the string’s characters to parsing them, and that worked. After copying and adjusting the code, I made it work to convert the Boolean array for gravestones into a hex string, too. With that, the prototype was now successfully converting both ways between hexadecimal strings and hexagonal grids in world space, so now the focus was to import strings from, and export them to, text files. After testing the code with a new test seed (including all hexadecimal values instead of just two), I created the necessary text files and their associated variables, and checked for ways to check whether the text file being loaded from is empty (so that it doesn’t try to load from nothing). After putting in a check for whether the text file’s contents are the right length, Ella arrived at the studio with Bernie, back from being away, and my unhappiness had compounded massively into hopelessness. I spent hours being incapable of working, and spoke to the others about being hopeless and wanting to die, with them offering other perspectives and outlooks. I made a bit more progress that evening, successfully making the code save to a text file, but apart from a lone trip to Tesco fr a milkshake and some sweets, achieved nothing else.

On Friday morning, I got to the studio and began to program it such that the grid position the player is targeting (to place a new paving stone) is determined by the direction in which they’re facing. I started by having an integer value, representing the side the player is looking at, determined by one of six ranges of Euler angle values for the player’s direction. Then, I made it so that the grid position the player is currently occupying is determined by reversing the calculations used for instantiating new paving stones. After I did this, Ella, George and I spoke to Andy about our ideas, and he provided us with some very helpful feedback. He spoke about the concept of making a genetic game, where parts of it are inherited and passed onto future versions, and other parts are randomised or taken from elsewhere. We also spoke about the idea of leaving digital footprints, being traces of the history of how things have changed when passed between players. He also said about how the concept of shared experiences made him think of how the hashtags and comments added to social media posts change their meaning and interpretation, due to the collective layering of different thoughts and interpretations. When we spoke about the idea we’d be tackling the following week, concerning barriers of understanding and the resulting loneliness, Andy suggested the possibility of having to start by finding novel ways of communicating, until you’re able to build up an understanding of other characters’ language and can communicate properly (like being in a foreign country). Finally, Andy told us to use university as an opportunity to take risks (as long as we learn from our failures), that we could try finding a sponsor for the game (possibly a charity), and that he particularly liked the idea of a game that evolves as it’s passed on, with a potential marketing hook being that it starts with only one copy and is spread virally.

40

After we spoke with Andy, Bernie joined us (and we relayed the information to him), we all went for lunch, and then we gathered to record the second part of the week’s podcast. The main topics that we covered were: the concept of, and progress made with, the prototype I was working on; Andy’s concept of the potential wearing/weathering of digital images, like physical ones, to build extra history and connections; Bernie’s idea of a player’s interactions and legacy becoming less impactful or significant with each passing generation, or with the passing of time; Ella’s idea where the player is treated as if they’re some kind of ‘chosen one’, only to figure out over time (through remnants and remains of those that came before them, as well as playing as different people upon death and seeing the bodies of their previous characters) that they are one of many, and aren’t as special as they were made out to be; Ella’s idea of an environment (possibly a ‘haunted house’) you could explore and see the spiritual essences (‘ghost forms’) of predecessors who interacted with the environment, or see how people died within it; my response of being able to see footsteps, or other remnants of where people have been in an area, to pull away from the ‘haunted house’ that Ella didn’t like; Bernie’s response of being able to see how people interacted within hotspots; George’s idea, where players have a single life in an asynchronous experience (where they can leave things behind), where the goal is to connect with characters and reach a landmark that’s said to bring people together, where ‘forerunners’ are the first to enter a world and ‘successors’ are those who inherit it, and players have to venture to find their own way through an initially dark, directionless world, leaving clues behind to help those that come after them (as well as spirits on their bodies that can be obtained for people to temporarily get a better understanding of what that player has encountered, such as dangers), with all of the obtained spirits being released at the end of the game to reveal the players that led to the completion; Journey‘s multiplayer interactions; integrating a narrative into George’s idea, through Ella’s ‘chosen one’ concept, possibly having NPCs’ dialogue changing depending on how many came beforehand (trying to cover that up out of desperation, due to the increased numbers of fires being lit and the changing time of day revealing more of the world to the player); the desire to make the game properly designed instead of procedurally generated; whether a player would choose to hang around the fantasy of the NPCs or help fellow players; whether NPCs could be aware that they are unable to leave their intended spots (being NPCs), and thus don’t want the player to leave; NPCs referring to how other players have passed through, but aren’t the ‘chosen one’; NPCs that gave up trying to bring people together and decided to live alone or form small communities; giving NPCs proper personalities and stories, to be meaningful to the player; player characters possibly become part of the community after giving up; bodies crawling back from their point of death, retracing their steps and leaving a trail; players leaving voice or text messages upon death, as a last thing to leave for future players, and whether they should know that they’ll have to leave a message behind (so that they can consider what to say); giving the player the ability to spray a limited number of images on walls; the possible need for diversity and proper landmarks in the game’s environment, as opposed to just having a forest or natural area, but not too much hand-holding in visual direction; the need for a well-designed environment, but the understanding that the setting would be contextual to whatever the game is that we end up designing, though it will likely be fantastical; the idea of having to solve a series of puzzles, as if it’s a series of interconnected escape rooms; how to handle players’ sessions in terms of length and whether saves can persist between them; possibly having survival elements to encourage the sharing of resources, but more likely just having the sharing of tools and puzzle solutions to avoid diluting the experience; potential considerations for scope and feasibility; potential visual styles, using shaders and 2D illustration to create a painterly aesthetic, emphasising how experiences seem less real and people are more disconnected from reality in a time of loneliness; keeping the player on-track through the narrative and NPCs; the need to make sure people don’t start the game in one instance and get put right at the end of it in the next, so that a sense of progression and a clear goal can be maintained (prioritising joining worlds with less progress for players with less progress); and plans for the near future, in terms of the project. If you want to listen to the podcast, you can do so by clicking on the video below. After the podcast, we hung around in the studio for a while longer before heading home. I carried out no more work that evening, instead spending time with friends.

On Saturday morning and early in the afternoon, I spent more time on the prototype, making it so that the grid position that the player is targeting (to place a paving stone) is properly calculated, based on the player’s direction and their current position. After spending the afternoon with friends, I spent a portion of the evening continuing the code to work towards making the gold, translucent hexagonal prism appear in the space that the player is targeting. After a late evening walk, I headed to bed, ready to continue in the morning. On Sunday morning, I got up quite early, and continued the code, making it so that the glowing potential paving stone appears properly, and starting to work on the scripts for the player’s movement and camera controls. The prototype is still unfinished, though that’s mostly down to a lack of movement controls. Once movement’s in, it’ll just be a case of making sure everything’s triggered at the right time and in the right order, and briefly testing that the prototype is functional.

That brings me to the writing of this blog post, which took ages, as I also had to sort out moving the podcast from SoundCloud to YouTube (due to the three-hour audio limit on free SoundCloud accounts, which led to the removal of both episodes of the podcast from my account). This also meant sorting out a proper YouTube channel for Crowence, and everything added up to mean that I’m now finishing this post soon before 2:00 on Monday. I recommend sleep to anyone reading this, as I could really use some right now… Anyway, this coming week, we’ll be working on the premise of the need for communication and a common level of understanding, as well as the loneliness that comes from barriers to those things. I hope that the week is productive, and that I don’t have another day pulled from under my feet due to aggressive bouts of depression. I guess I’ll see, but I’m still pleased with what I’ve achieved so far with the prototype, and with the ideas and discussions that our group has had. I’m chuffed to be a part of it, and can’t wait to see what we can achieve. Anyway, I’ll hopefully see you next week.

Leave a comment