Phone-Modding Part 4 – The End?

Previously on…

All right. Time to open the last page:

https://learn.adafruit.com/touch-tone-phone-dial-a-song/assemble-the-dial-a-song

First up, connecting the handset to the amplifier. See the photo:

I cut the wires from the jack for the handset, stripped the two that were for the speaker, added some shrink tubing (probably unnecessary) and connected them to the out jacks on the amplifier. I don’t think it matters which is which, or I got lucky. I believe the other two wires are for the microphone. I wasn’t able to disassemble the handset to be sure, but it worked fine.

Next, the switch hook connection. Again, this ends up being a lot easier with a newer phone.

This was a bit more complicated. There is a connection between the EN pin on the Feather and ground that will either be connected or disconnected when you set the handset down on the cradle. I’m still a little confused as to the reason. I feel like there should be a connection from EN(able) to ground to make it work. But there’s not normally a connection to that, so it would never work. It appears that the connection of EN to ground kills the program.

The switch itself has different connectors that are normally open or normally closed that change position with the handset is put in the cradle. I managed to find the two pins on this switch that made it work.

Last connection is for the regular USB power.

The usb cable is threaded through the hole in the back that would normally be where the phone connects to the wall. I tied a knot in this to prevent tension on the USB cable from possibly disconnecting the pins. The cable has all the pins a USB cable would need, but we only need two. First, the red wire is our 5 volt source that will power everything up for us. That needs to connect to the USB pin on the Feather. The black wire needs to connect to our ground.

And that’s it. Make sure the jumper wires don’t get in the way of the cradle switch. Put the keypad back in position. Connect the handset to the handset jack. And put the top of the phone back on. Screw it all back together, and you’re done. Plug the usb cable into something that’ll give it power, lift the handset, and it works!

Right?

Right??

Next up, troubleshooting.

Phone-Modding Part 3 – Circuitry and Phone Guts

Previously on Phone-Modding

Next up we’re going to take that phone apart! But first, remember to refer to the source!

https://learn.adafruit.com/touch-tone-phone-dial-a-song/build-the-dial-a-song-circuit

So it shows the circuit a few different ways. There’s an illustration of the circuit on a breadboard. (is it right? I’m not sure!) There’s a diagram! (Is that right? Some is, but some is definitely broken!) Then there’s a bunch of pictures. (How about those? They’re what I used, so yes?)

The first set of photos are for the amplifier. You should have already soldered a set of 5 pins to this, and two pins for the audio out connector. The 5 pins are (left to right) A+, A-, SD, Vin, Gnd. A- and Gnd need to get to a common ground. Vin connects to a 3 volt source. And SD doesn’t need to connect to anything. A+ connects via a series of two resistors to the TX connector on the Feather. Between the two resistors place the capacitor, and connect it to ground. Note the capacitor has a positive and negative side. Negative side goes to ground.

Next is the keypad. The instructions have a lot of desoldering and adding pins, etc. None of that is necessary.

Looking at the second photo first, you can see the rows and columns of the keypad next to the cable. If you look at the first cable, you can see the end of the cable popping up behind the keypad with a bunch of jumpers going into it.

Also, since you can see in the phone here, I have removed everything except for the connector for the handset, the connector and switch for the disconnect hook, and the keypad. You can get rid of everything else. You’re going to need that space for the little self-adhesive breadboards.

Anyway, one nice thing about not doing it the way they say to, is it doesn’t lock you into using the pins on the Feather that the instructions recommend. And one of the reasons that we want to avoid that is that the SD card interface likes to use some of the pins that the instructions use for the keypad. To summarize:

Keypad Columns/RowsInstructions My Circuit
C1A3A3
C2A2A2
C3A1A1
R1D24D24
R2D25D25
R3SCKD4
R4MOSID5
Connect jumpers from the keypad cable to the Feather.

Since we’re here, lets also talk about the SD card reader.

Once you solder the pins onto the board, you may be confused, since there are a LOT of pins. You only need the first six. 3V, Gnd, Clk, SO, SI, and CS.

3V connects to the same 3 volt source you’re using for the amplifier. That also connects to the 3V pin on the Feather. Gnd connects to the same ground you’re using for the amplifier. Again, this also connects to the Gnd pin on the Feather.

CLK connects to the SCK pin on the Feather. SO connects to the Feather’s MI pin. SI connects to the MO pin. (Remember MISO and MOSI). Finally, the CS pin needs to connect to a data pin on the Feather. I used D10.

Side note: Some of the pins on the Feather use the same data addresses. My understanding is that this could theoretically cause issues if you have two pins with the same address trying to operate at the same time. I chose all the pins so that they wouldn’t conflict with any other pins.

Next up, More Phone Guts?

Phone-Modding Part 2, the Python and the Program

Part 1

Again, I highly recommend reviewing the previously linked site for how to get python up and running. Here’s a link to the next section:

https://learn.adafruit.com/touch-tone-phone-dial-a-song/circuitpython

I followed the instructions on here closely and had no problem getting python running and connecting to the board. I used a short USB type C connector to connect the feather to my computer. I never needed to use safe mode or anything. It just worked.

Next is the code:

https://learn.adafruit.com/touch-tone-phone-dial-a-song/circuitpython

I highly recommend getting Mu, which is a tool to assist in programming with python on boards like this. Here’s a link with help on doing that:

https://learn.adafruit.com/welcome-to-circuitpython/installing-mu-editor

In the video I posted, showing the system working, I am using Mu. I have the program stopped at the beginning, and then using the REPL, I start the program, which causes the dial tone to start playing. Basically, you connect your Feather to the computer. You start Mu. You open a serial connection to the Feather in Mu. And finally, you hit Ctrl-C to stop the program. You hit Ctrl-D to restart it.

Another great thing about Mu is that it will check the code for you. For example, several of the lines in the code provided are too long according to Mu. Also, be careful with spaces around comments.

In addition to the code provided with the instructions on building the phone, we also need code for our SD Card reader. Here’s where I went for help:

https://learn.adafruit.com/adafruit-micro-sd-breakout-board-card-tutorial/circuitpython

Which is different from this:

https://learn.adafruit.com/adafruit-microsd-spi-sdio/circuitpython

Note that there are a number of confusing and contradictory bits. The code I ended up using seemed the simplest, and it ultimately worked.

Returning to the main guide for the phone, the last thing mentioned on the program page is regarding modifying audio files so that they’ll work with the program.

https://learn.adafruit.com/microcontroller-compatible-audio-file-conversion/check-your-files

Make sure you follow the instructions closely when making your audio files. I accidentally used a 24000 hz instead of 20000 hz for one file, and the program wouldn’t open it.

Finally, here’s the code I used. It works so far.

# SPDX-FileCopyrightText: 2022 John Park for Adafruit Industries
# Modified By Ariock for beekeepers
# SPDX-License-Identifier: MIT
#
# DTMF keypad phone Dial-a-Song
import time
import random
import board
import keypad
from audiocore import WaveFile
from audiopwmio import PWMAudioOut as AudioOut  # for RP2040 etc
import audiomixer
import busio
import sdcardio
import storage

# Use the board's primary SPI bus
# spi = board.SPI()
# Or, use an SPI bus on specific pins:
spi = busio.SPI(board.SCK, board.MOSI, board.MISO)
# old spi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO)
# spi = busio.SPI(board.SD_SCK, MOSI=board.SD_MOSI, MISO=board.SD_MISO)

# For breakout boards, you can choose any GPIO pin that's convenient:
cs = board.D10
# Boards with built in SPI SD card slots will generally have a
# pin called SD_CS:
# cs = board.SD_CS

sdcard = sdcardio.SDCard(spi, cs)
vfs = storage.VfsFat(sdcard)

storage.mount(vfs, "/sd")

# time.sleep(3)  # let USB settle during development, remove when on battery

km = keypad.KeyMatrix(
    # 2500 phone ignoring first column store/redial/memory. reverse mount Feather RP2040
    column_pins=(board.A3, board.A2, board.A1,),
    row_pins=(
                board.D24,
                board.D25,
                board.D4,
                board.D5,
                 ),
)

numbers = {
            "8675309" : "songs/beepbox.wav",
            "6358393" : "songs/streetchicken.wav",
            "5551212" : "songs/carpeter.wav",
            "7654321" : "songs/daisy.wav",
            "9255292" : "/sd/week1_subject2.wav",  # walkawa
            "2772643" : "/sd/week1_subject3.wav",  # arrange
            "2696338" : "/sd/week1_subject1.wav",  # boymeet
            "4423273" : "/sd/week1_subject5.wav",  # ihadare
            "9486377" : "/sd/week2_subject2.wav",  # witness
            "7332888" : "/sd/week2_subject3.wav",  # redbutt
            "4376636" : "/sd/week2_subject1.wav",  # ifsomeo
            "6537743" : "/sd/week2_subject5.wav",  # oldspie
            "8446546" : "/sd/week3_subject2.wav",  # thinkin
            "2442536" : "/sd/week3_subject3.wav",  # chicken
            "8293778" : "/sd/week3_subject1.wav",  # taxessu
            "2762259" : "/sd/week3_subject5.wav",  # apocaly
            "2443640" : "/sd/week4_subject2.wav",  # bigdog0
            "8682559" : "/sd/week4_subject3.wav",  # totally
            "2834800" : "/sd/week4_subject1.wav",  # audit00
            "7327848" : "/sd/week4_subject4.wav",  # recruit
            "3644620" : "/sd/week4_subject5.wav",  # enigma0
            "2264000" : "/sd/week5_subject2.wav",  # bang000
            "2274660" : "/sd/week5_subject3.wav",  # casino0
            "2765343" : "/sd/week5_subject1.wav",  # asoldie
            "9333464" : "/sd/week5_subject4.wav",  # wedding
            "3333464" : "/sd/week5_subject5.wav",  # feeding
            "4232732" : "/sd/week6_subject2.wav",  # icecrea
            "2332470" : "/sd/week6_subject3.wav",  # affair0
            "7867699" : "/sd/week6_subject1.wav",  # stormyw
            "5867370" : "/sd/week6_subject4.wav",  # jumper0
            "6926672" : "/sd/week6_subject5.wav",  # myconsc
            "2444373" : "/sd/week7_subject2.wav",  # biggerd
            "9276463" : "/sd/week7_subject3.wav",  # yasmine
            "7533777" : "/sd/week7_subject1.wav",  # sleepsp
            "5278786" : "/sd/week7_subject4.wav",  # laststo
            "3475662" : "/sd/week7_subject5.wav",  # diploma
            "3863725" : "/sd/week8_subject2.wav",  # funeral
            "2672547" : "/sd/week8_subject3.wav",  # coralis
            "4475423" : "/sd/week8_subject1.wav",  # girlhad
            "6965353" : "/sd/week8_subject4.wav",  # myoldke
            "7378587" : "/sd/week8_subject5.wav",  # results
            "2797825" : "/sd/week9_subject2.wav",  # crystal
            "3384500" : "/sd/week9_subject3.wav",  # devil00
            "7383693" : "/sd/week9_subject1.wav",  # sevenye
            "2526246" : "/sd/week9_subject4.wav",  # clamcho
            "9687325" : "/sd/week9_subject5.wav",  # youreal
            "5646464" : "/sd/week10_subject2.wav",  # joining
            "3264597" : "/sd/week10_subject3.wav",  # familyr
            "5377397" : "/sd/week10_subject1.wav",  # jerseys
            "7358282" : "/sd/week10_subject4.wav",  # relucta
            "8742645" : "/sd/week10_subject5.wav",  # triangl
            "4376370" : "/sd/week11.wav",  # heroes0
            "6637646" : "/sd/week12_subject2.wav",  # onepoin
            "3426233" : "/sd/week12_subject3.wav",  # fiancee
            "5878254" : "/sd/week12_subject1.wav",  # justali
            "7328466" : "/sd/week12_subject4.wav"  # section
}

ringing = "songs/full_ring.wav"
wrong_number = "songs/blank_number.wav"
dial_tone = "songs/dial_tone_loop.wav"
busy_signal = "songs/busy_loop.wav"

button_tones = [
                "dtmf/tt_1.wav", "dtmf/tt_2.wav",  "dtmf/tt_3.wav",
                "dtmf/tt_4.wav", "dtmf/tt_5.wav", "dtmf/tt_6.wav",
                "dtmf/tt_7.wav", "dtmf/tt_8.wav", "dtmf/tt_9.wav",
                "dtmf/tt_star.wav", "dtmf/tt_0.wav", "dtmf/tt_pound.wav"
]

digits_entered = 0  # counter
dialed = []  # list of digits user enters to make one 7 digit number
dialed_str = ""  # stores the phone number string for dictionary comparison

audio = AudioOut(board.TX)  # PWM out pin
mixer = audiomixer.Mixer(
    voice_count=4,
    sample_rate=22050,
    channel_count=1,
    bits_per_sample=16,
    samples_signed=True,
)
audio.play(mixer)
mixer.voice[0].level = 1.0  # dial tone voice
mixer.voice[1].level = 1.0  # touch tone voice
mixer.voice[2].level = 0.0  # song/message voice
mixer.voice[3].level = 0.0  # busy signal

wave_file0 = open(dial_tone, "rb")
wave0 = WaveFile(wave_file0)
mixer.voice[0].play(wave0, loop=True)  # play dial tone

wave_file2 = open(wrong_number, "rb")
wave2 = WaveFile(wave_file2)

wave_file3 = open(busy_signal, "rb")
wave3 = WaveFile(wave_file3)
mixer.voice[3].play(wave3, loop=True)  # play dial tone


def reset_number():
    # pylint: disable=global-statement
    global digits_entered, dialed, dialed_str
    digits_entered = 0
    dialed = []
    dialed_str = ""
    km.events.clear()


while True:

    event = km.events.get()  # check for keypad presses
    if event:
        if event.pressed:
            mixer.voice[0].level = 0.0  # mute the dial tone
            wave_file1 = open(button_tones[event.key_number], "rb")  # play Touch Tone
            wave1 = WaveFile(wave_file1)
            mixer.voice[1].play(wave1)
            if event.key_number == 9 or event.key_number == 11:  # check fr special keys
                if event.key_number == 9:  # pressed the '*' key
                    reset_number()   # or make some cool new function for this key
                if event.key_number == 11:  # pressed the '#' key
                    reset_number()  # or make some cool new function for this key

            else:  # number keys
                if digits_entered < 7:  # adding up to full number
                    # convert event to number on the keypad button, add to string
                    if event.key_number < 9:  # 1-9 on keypad
                        dialed.append(event.key_number+1)
                    if event.key_number == 10:  # the 0 key, ignore '*' and "#'
                        dialed.append(0)
                    dialed_str = "".join(str(n) for n in dialed)
                    digits_entered = digits_entered + 1  # increment counter

                if digits_entered == 7:  # a full number has been entered
                    if not mixer.voice[2].playing:
                        dialed_str = "".join(str(n) for n in dialed)
                        if dialed_str in numbers:  # check if string is in directory
                            value = numbers[dialed_str]
                            time.sleep(0.6)

                            wave_file2 = open(ringing, "rb")  # ring before it answers
                            wave2 = WaveFile(wave_file2)
                            mixer.voice[2].level = 1.0
                            mixer.voice[2].play(wave2, loop=True)

                            time.sleep(random.uniform(4.0, 9.5))  # random ring b4 answr

                            wave_file2 = open(value, "rb")  # answered
                            wave2 = WaveFile(wave_file2)
                            mixer.voice[2].level = 1.0
                            mixer.voice[2].play(wave2, loop=True)

                        else:  # number is not in directory
                            time.sleep(0.5)
                            weighted_coin_toss = random.randint(0, 4)
                            if weighted_coin_toss < 3:  # favor the "not in service" msg
                                mixer.voice[2].level = 1.0
                                mixer.voice[2].play(wave2)
                            else:
                                mixer.voice[3].level = 1.0

                        reset_number()

                    if mixer.voice[2].playing:
                        reset_number()  # stop #s dialed during play doing anything

The next section is on modding the phone itself.

Modding a Touch-Tone Phone to Play .wav Files

Happy 20th anniversary of ilovebees! I was thinking about this the other day and as my mind wandered, I thought, “Wouldn’t it be cool if you could have a touch tone phone, and if you dialled a number, it would play one of the audio clips from the ARG?” And then I searched for it, and found this link:

https://www.digikey.com/en/maker/projects/touch-tone-phone-dial-a-song/ae4fd7386c844a14a23d246330bca340

Later I found a better link. The one above has broken links to the software needed, but this one works better:

https://learn.adafruit.com/touch-tone-phone-dial-a-song/overview

And after a month on and off (mostly off) I have a working phone. Check my instagram for a video of the working circuit/program.

I’m going to get more detailed about what I did, what worked, what didn’t, what had to change, etc. so if you’re interested in doing this yourself, you’ll avoid the problems I ran into. Probably the big one for me is that I had no experience soldering electronics. It is not easy. It is absolutely necessary. But it is nowhere near as necessary as I made it. I ruined a couple of electronics components because I tried to pack too much into a small space.

Let’s talk about the bits and bobs you’ll need to make this. Refer to the website above.

  1. Adafruit Feather RP2040. Absolutely necessary. Comes with a set of posts that you’ll need to solder to the board. This is necessary, but if you’re careful, not terribly difficult.
  2. Featherwind Doubler. Not necessary. It comes with some items that can make you’re life easier. Instead of the posts that come with the Feather, it has headers. Basically posts that have openings on the other end that other posts can be put into.
  3. Audio Amplifier. Necessary. Also comes with posts. And a connector for the phone receiver.
  4. Battery. Not necessary. I got it, plugged it into the board far too early, and burned out the board. You need to be done before you plug the battery in. It may be obvious to you, but it wasn’t to me.
  5. Terminal Blocks and Wire ferrules. Both unnecessary.
  6. USB Adapter. Necessary. This is nice because the wires have connectors like the headers.
  7. Jumper Wires. Necessary if you want to minimize soldering.
  8. Resistors/Capacitors. Necessary. I had these from other kits I’ve gotten over the years.
  9. Telephone. Obviously. I didn’t get the model they have here. I went with “Home Intuition Classic Corded Phone for Hearing Impaired Telephone for Seniors with Extra Loud Ringer” from Amazon. One nice thing about it is that it’s a newer phone, so a lot of the connectors inside will easily accept jumper wires from item 7 above.
  10. Another thing I recommend getting is several Mini Breadboards. They can take the place of the Doubler in item 2 above. Again, I had several of these from previous kits. They are great because they have an adhesive backing that allows you to easily attach them inside the phone.
  11. For this project you’re also going to need a “MicroSD SPI or SDIO Card Breakout Board” (Get one that is only 3 Volts, not 5V) and a MicroSD card to hold all of the files. It turns out that the Feather has very limited onboard memory. The project is designed/programmed to play wav files and not mp3s. Even if playing of mp3s was possible, they’re still too large to fit on the Feather. All of the ARG audio files as mp3s are a total of 130 MB, and after converting them to wavs, they’re 819 MB.

I’m going to make this guide parallel the source material, with each section making up another page. Next up, the Python and the Program

Finding Satoshi (the OG)

I highly recommend that you watch this documentary about finding one person in a billion.

https://www3.nhk.or.jp/nhkworld/en/ondemand/video/3016112/

It’s really well done, almost lovingly crafted, telling of the story of the last (solvable) card of Perplex City to be solved. It’s only 50 minutes as well, so pretty briskly paced.

Dispatches From Elsewhere First Impressions

I wrote this over a year ago after first seeing the first episode of Dispatches from Elsewhere. As such, I’m not sure if the links still work, but we’ll see. I was able to watch episodes 2-4 after this since they were free to view on the AMC site, but I haven’t seen any of the other episodes.

Original Starts Here:


Hoooo boy. That hit me right in the feels.

So in case you haven’t seen it yet, because SPOILERS WILL BE COMING, apparently AMC tacked the first episode of Dispatches from Elsewhere on the end of The Walking Dead on their website. Here’s the link (go to 45 min if you’re not into zombies):

https://www.amc.com/shows/the-walking-dead/full-episodes/season-10/episode-09/squeeze

It’s free to watch/no login, though I had a weird experience when I tried to watch the first time. It automatically tried to log me in anyway. And I do not have AMC, so it wasn’t happy to see me. Reloading and hitting escape worked. Thank you to Michael J. Andersen at ARGN for the link.

Here’s where we’re going to put the SPOILER BREAK.

Seriously. Go watch it. It’s actually pretty good.

Thoughts as I was watching it.

    1. I’m glad Hull and McCall are listed as “executive producers” insofar as I hope they’re not involved. While I loved the Institute, the Socio-ReEngineering event was too much of a fuck you. Followed by the similar fuck you of The Institute movie and the real fuck you of the Latitude Society.
    2. I’ve seen the start of this. This bit where Octavio Coleman talks about Peter and his life. It was a teaser released a week or so ago. At one point when Peter is working, there’s a chalkboard in the background with “EPWA LIFE” written on it. I suppose here’s where I should talk about the New Noology Network tie-in game. I had very high hopes for this. There’s a lot of information about this, and here’s a link to an ARGN article: NNN. The problem with the game is that they’ve got a lot of blurring of the lines between In-Game (IG) and Out-of-Game (OOG). IG characters are showing up in chat groups run by players which should be OOG. This causes players to wonder if other players are IG. And in games where clues about who a person is might lead to more information about the story, this creates a breeding ground for doxxing of players. It’s to the point where players are finding out the identities of actors playing roles in the ARG. This blurring of the lines makes me worry that Hull and friends are involved in the ARG portion. But I think he’s got a new project that’s more based on perfect discretion or whatever new bullshit “dance for me but don’t tell anyone about it!” power trip.
    3. The call out of this being based on “The Institute” is pretty funny. So a movie I’m technically in is mentioned on the TV show. That’s kind of cool.
    4. HA. ok, about 8 minutes in, and we’ve got what are now referred to as “Easter Eggs.” (Sorry Hmrpita) In reality, they’re just references to the original game. The map is the original map? Sure looks the same. I would need to grab it from the shrine to check. Is that Arye Bender in the bed with a hand on his chest? Oh yeah, and the building he’s walking up to has the three hooded figures that are on 580 California Street.
    5. “for those dark horses with the spirit to look up and see, a recondite family awaits.” damn. yeah. Or do they? or is there no family at all, and the people you thought were family, who were part of your “crew” will they get in and leave you high and dry? More Latitude bitterness.
    6. ok. We’re at the Induction center. So this is chapter 1. Getting the key at the security desk is a little off. in the original game, you’d go to security and let them know you were there for the Jejune Institute. You’d get a name badge. They’d send you up to the 16th floor. On the 16th floor, there was another desk where you’d get the key with the instructions attached. And the door was a single door, and with no little antechamber. No weird devices along the hallway either. All the weirdness was inside the room itself. Let’s go in, shall we?
    7. Inside. you’d hear the voice telling you to sit  down. this wasn’t timed, if I recall correctly. No countdown. But when you sat in the chair, the video would immediately start. There’s a slight missed opportunity in that the desk in front of Octavio, and the background behind Octavio might be the background behind the TV, but it’s uniform enough with the rest of the room, that it could be any part of the room. The actual induction video had odd pictures behind Octavio, arranged asymmetrically, so when you saw them actually on the wall behind the TV, it was clearly the same wall. Or at least obviously the same arrangement meticulously recreated. Let’s watch the original! Part 1. Part 2. Part 3. So the I.D.E.A. is what Jejune referred to as The Algorithm.
    8. So they’re departing again from the original in that Octavio doesn’t tell Peter not to read or fill out the induction form.
    9. AHAHAHA! So they DID keep that in, but someone ELSE is telling Peter not to do what’s on the form. It was a weird dissonance. Providing the instructions but telling you not to do it. I get why they changed it.
    10. Also, nice pen. We got pencils that said, The Jejune Institute on them.
    11. I kind of wish we could see what’s actually written on the cards. Even though it doesn’t get done.
    12. So Peter is running. Again, the layout of the buildings is different. In the original, you HAD to take the elevator down. HOWEVER, there was an admonishment to avoid the security desk and take a side exit.
    13. No hobo marks for finding the way. O” No time anchor. those were so good.
    14. Commander 14 is calling NOW? So. It’s too bad they didn’t use Harry S. Robins. You know. Dr. Kleiner from Half-Life? Dr. Howland Owl of the Church of the SubGenius? Anyway. So is it just me, or is the voice of Commander 14 very familiar? I mean, like, obviously familiar? Is there an attempt to disguise this voice, because I mean, is it? I guess this will be a thing.
    15. We’re through the hidden garden and on to the shop. Easter Egg! The Elsewhere Brick. This brick wasn’t so much a brick as it was a plaque painted like and mounted to a brick. The brick plaque was hidden in an external alcove of Old St. Mary’s Cathedral. A picture of it would also be on the envelope available for sale in the Asian Image shop a couple blocks away. The garden and shop seem to be compressing a lot of this together.
    16. Peter and Simone’s montage after the shop compresses the rest of Chapter 1, including finding the peep hole and seeing the missing girl. Eva has become Clara.

It was a nice bit of nostalgia. But I am now forever leery of Nonchalance. I hope to see the other episodes eventually.


So that’s the original write up. As I mentioned, I was able to see the first four episodes. I have also now seen “In Bright Axiom,” and whoa boy Hull-as-Max was a lot. Max is an asshole who fails upwards and gets his supper anyway. So yeah.

What’s Ariock Playing?

My current playlist as of 4/2024:

  • Noita
  • Inscryption 
  • Rock Band 4 Rivals (always)
  • Factorio
  • Escape Room Simulator
  • Puzzle Trails / Puzzled Pint

My current playlist as of 9/2018:

  • Animal Crossing: Pocket Camp
  • Terraria 
  • Rock Band 4 Rivals
  • Lego Indiana Jones 2 (Crystal Skull)
  • Donut County
  • Codenames Duet

ADG 08/20/18 – Room Escape Artists

Last night the folks behind RoomEscapeArtist.com (REA) presented to the kind people at the Adventure Design Group (ADG) at The Laundry in SF. 

First off, holy crap, they’ve done a lot of room escapes. I’ve done…2 real ones and 4 of the SCRAP not-really-escaping-a-room escape rooms. They’ve done over  600? Assuming an average of $30/room, and ignoring the cost to travel and stay near the locations around the world, that’s still $18,000? Yikes.

Since I was unfamiliar with their work, as I was waiting for the event to start, I looked their site up. You should do that, if you haven’t. They have a lot of good information if you are looking to go to an Escape Room.

Some of the things I learned from their presentation (and the evening in general):

  • Someone was attempting to patent the idea of a mobile escape room. The folks at REA were not amused. Hopefully that has gone away.
  • Not too long ago, Business Week spurred a lot of folks into creating Escape Rooms. Some of the less well-thought-out ones aren’t doing terribly well (as would be expected) and may be closing shop soon. That shouldn’t be interpreted as the bottom falling out. Or the sky falling. Someone’s bottom may be someone else’s sky? I don’t know.
  • They were really impressed with a number of Rooms. Two that stood out for me were:  Palace Games (I’ve done their Houdini and Roosevelt rooms) and primarily with Strange Bird Immersive in Houston (several friends went there and LOVED IT).
  • There’s a group working to start up an Escape Room pretty close to downtown Oakland. They’re called Trivium Games (triviumgames.com and @triviumgames)

After the presentation, I ended up chatting with an SF expat living in LA about Room Escape Games. Since I’m terrible at names, I think Lily? and I reminisced about the Jejune Institute. They’d done everything up through the Chapel of the Chimes, but moved before the Socio-Re-engineering event (Which honestly was probably for the best). I mentioned an old thought about Air-BnB-based Escape Room, and found out they’d done something similar. 

All in all, it was a good evening. My only regret was not having a moment to say hello to Laura Hall who was in town for the event.