← Back to my games
Posted: 7/20/2025

Memory Mall

Started: 1/22/2024

Completed: 5/14/2024

Memory Mall is a walking simulator where you can explore a mall reconstructed from my childhood memories. You can visit the various areas of the mall and read about memories I have in each specific location. Everything that appears in the game is something that I specifically remembered, more or less. So, empty areas means that I simply didn't remember any specific details.

You can play it in the browser (or download it for Windows) here.

Idea

It was a combination of two random ideas that were kicking around in my head that gave me the idea to do this:

First: Malls are something that I'm weirdly interested in. I have very distinct memories of family trips to various malls around the area, and going to one was always a big deal. At least, it was a big deal for me because they usually had a GameStop. I don't even really remember actually going into stores that much. The feeling of entering this massive manmade space full of different places to explore really stuck with me. At the same time, I didn't really get to experience a shopping mall as a place to hang out as a youth. By the time I could drive myself to whatever mall I desired, it wasn't really a thing that anybody I knew actually did. Nowadays, malls are a dying phenomenon, and that only makes me more interested in them. I would love to explore an abandoned mall someday.

Second: As much as I like writing code, I wanted a game project that would encourage me to focus on other aspects of games, like writing or art direction. Code is just the thing that I'm most familiar with (and like 30% of why I like making games is that it gives me an excuse to write code), but there are way more aspects to games than just code!

So, I combined these two things together and made Memory Mall. I made the game using Godot, used Blender for 3D assets, and did initial sketching with Procreate. The idea was that making simple walking simulator controls is pretty easy, so I didn't have to spent too much time implementing it, leaving more time to work on actually designing and creating the mall.

Layout

One of the first major things was figuring out the floor plan to the mall. I had to really dig into my memories. I have pretty distinct individual memories of different locations of the mall, but trying to put them together into a cohesive layout was an interesting challenge. It was kind of like reverse engineering the mall's layout by only using different random photos of the mall.

One of my first attempts at recreating the mall. It took quite a bit of iteration to get to what is actually in the game. I will not apologize for my poor handwriting.

As an artist, I don't really have much experience with designing things. Taking a lot of different ideas and combining them into something cohesive, like a character design, is something that I need more practice in. Memory Mall ended up being a smoother process because it was based entirely on my memories. I didn't have to try and synthesize details from how malls actually are. I wanted to convey the limitations of my brain; Blank spots and sparse details in the mall represented blank spots in my memory.

After I had a rough idea of the layout of the mall, I started creating it in Blender. I initially ran into quite a bit of friction with modeling and iterating on the floor plan. I could easily make flooring and walls, but if I wanted to make major layout changes, fiddling with selecting the right edges and vertices was very annoying. This was a huge issue because the nature of the project mean that I was going to end up changing the layout a lot throughout development.

My ideal system would be one where I could define the floor plan of the mall with a curve and have the walls and roof automatically generated based on the shape of the floor. Luckily, with Blender's very powerful geometry nodes, I was able to create a system that does exactly what I wanted! You can specify the shape of the floor, the thickness and height of the walls, and it automatically generates the walls, floor, and roof. This made iteration so much simpler because moving things around and making small tweaks was so easy.

(A video is supposed to go here but i'll fix that later)


The geometry node setup is quite elaborate and as of writing this, I probably couldn't easily debug it if something was wrong.

If I were to re-do this process, I probably would have experimented with other specialized level design tools like TrenchBroom (used with Qodot) because it might have been more geared to what I was trying to do than Blender. There may have also been Blender plugins that do exactly what I wanted so I didn't have to reinvent the wheel, but geometry nodes is kind of fun and so is reinventing the wheel sometimes.

Visual Design

One of the first things that I did for the project was try to establish a visual style that I wanted to work with. I wanted something with nice edge detection (and I wanted to experiment with shaders), so I got to work with that and learned quite a bit. Then I learned that they wouldn't work if I wanted to target HTML5 (so that the game could be played in the browser), so I scrapped it and worked on another solution. I decided to use a tried-and-true method: Inverse Hull Outlines. All I needed to do was duplicate the mesh, scale it up a bit, invert the normals, give it a material, and boom: an outline effect that would work. I even made a geometry nodes setup to have this process automated, so I could just apply it as an effect and have it function without any extra work.

I still wanted to mess around with shaders more, so I implemented some wiggle shaders. The first effect was put onto all of the inverse hull outlines so that they would wiggle around a bit. I made it use the view angle in its calculations, so objects would kind of react to you looking around. The second effect was a post processing shader that gave everything a wiggly look. I think I did something a bit wrong because you can still see the un-wiggled version very faintly on the screen. There are also faint horizontal lines that slowly crawl up the screen, but this was cool so I didn't try to fix it. The third effect was wiggling the outlines on the text boxes.

(A video is supposed to go here but i'll fix that later)

Initially, I was going to texture every object, but as things went on, I really didn't want to do that, so I decided to use solid colors and let the lighting color everything reddish (it kind of ended up purpleish, though). I chose red because I like the idea of a "rose-tinted" memory of the mall. This ended up also being a good decision for scope because it reduced the amount of work that I would have to spend on individual assets. I do need more practice with that though.

Assets

Props

I used Blender to create all of the 3D assets, and that was a challenge in and of itself.

Firstly, while I definitely did have the skills to create the various props in the game, I didn't really have a level of proficiency in 3D modeling that would have made it easy. Every small bit of friction in the creative process was multiplied for each asset that I was creating. This was the reason why I had decided to just use flat colors for everything instead of using textures: it sped the asset creation process along when I would have otherwise been discouraged after hitting so many tiny walls.

A collection of all of the props that I made for the game. They're all over the mall.

Secondly, It meant that I had to develop an asset pipeline that would allow me to very quickly and easily make changes and have those changes reflected automatically. This was probably the most difficult part of the process. I didn't get it working quite right and I just dealt with the shortcomings.

My ideal workflow in this case was: make something in Blender -> import it into Godot (As automatically as possible) -> place props in the Godot scene. Any change in Blender should be automatically reflected in Godot.

I wanted to make all of the assets in one file. This way I could share materials and geometry nodes, and I prefer to just have everything visible together in one scene. However, by default, Godot assumes that each blender file is converted to one scene, thus grouping sub objects together which is not what I want. I don't remember if there was already a solution that I just didn't see with the version of Godot that I was using, but it was a problem that I had to solve. I created a post-import script that would automatically extract every asset and then save it as their own separate scene file. It worked, but very poorly.

The entire point of the workflow was that I could make changes to the asset files in Blender, and then have those changes propagate to Godot through an automatic reimport. Despite all of my efforts, Godot really did not enjoy the fact that I was creating and changing files in this way, so sometimes the changes would not get propagated and I could not figure it out. It sucks when you've placed, like, 50 chairs and tables, and then made a change to the models, only for it to just not update in Godot, forcing you to go and change every instance of a chair and table. I ended up just dealing with it when problems happened. Not fun. The fact that none of the props have collision (so you can walk right through them) is because changing the collision meshes every time I changed the model was something that I didn't want to do. Godot is good at automatically generating collision from meshes, but of course I had to try and make my own system work.

I would have to do more experimentation, but I fear that the solution to my problem is just "don't put everything in one file". Blender has its own set of asset library systems that allow for the sharing of resources between files, so I guess I can rely on that instead?

Audio

I made the footstep sound myself! I just recorded sounds of my own shoes with my phone. Didn't really know what I was doing, but after some audio processing in Audacity, it was fine. I also did some extra audio bus post processing effects in Godot so that it has reverb.

Writing

I did a bunch of snippets of writing for various parts of the mall. All of the writing is accessible by standing in certain spots indicated by a glowing light effect. I wasn't really trying to go for a "liminal" sort of feel, so including my commentary made it feel more introspective and less empty. I talked about various details like where I acknowledged my lack of memory or pointing out small memories that stuck with me. This is a thing where I could spend endless amounts of time doing, and in the end, I like the amount of writing that I did. I ended up including mostly everything that I wanted to.

UI

I made a pause menu. It's fine. The thing that always happens is that the UI is one of the last things that I end up doing so it's a massive slog. I added the ability to teleport to any of the spots where I've written something by clicking on it in the pause menu. It also records which ones you've seen, so you can easily find what you've missed.

The "Title Screen" is really just a 3D model of the words "Memory Mall" with a start button in the level, where clicking it activates the first person movement. I did it this way because I was tired and I didn't feel like making a title screen.

Also, it took me until writing this to realize that I have an option for music volume except there was no music. I had planned to add some music (with a crusty intercom speaker filter) but I ended up cutting that and I guess I forgot to remove the option.

Final Thoughts

Overall, I think that I'm pretty happy with the result. I'm glad that I was able to experiment with a weird idea.

One thing that I always want to work on is learning how to plan better. I tend to do a thing where, once I have enough of an idea of the project's scope in my head, I just rush into it with no plans or foresight into how the whole thing fits together, so I get extreme tunnel vision. I did an ok job at planning this time around. I actually did have a plan and stuck to it this time. Choosing to cut textures from the 3D models helped me to stop fixating on each individual prop, which was good.

It was also my first completed 3D game, which is neat. I've had other prototypes of various levels of incompletion in the past. It's also the first game that I've made that takes place in a concrete Place. Most of my other games take place in abstract spaces. One thing I underestimated was how much effort it is to make a 3D game where you can look around freely. If I was committed to fully decorating this space, then the game would have taken like 3 times longer to make.

This was the first time that I've used audio that I've recorded in a game (the footstep sounds). Other than being kind of cumbersome, it was fun.

I worked on this game when I wasn't working on my undergraduate senior project, which was probably foolish, but was one of the only things that was keeping me sane at the time.