Concept
I have come to the decision to change my initial idea with Piano Tiles to one that had more connection with me and my interest. And TA-DA here I go again connecting my project to favorite Friends show. The reason I switched is because I knew it would be easier to create a project that you will have fun building and also passionate about. In this project, I wanted to highlight key moments from the show through the perspective of the characters, since each of them has a different story and individuality. There are six main characters in the show, and creating a game for each of them was kind of challenging and time inefficient, so I came up with different interactive project ideas for characters. I would like to stop on each one:
- Phoebe
I started from creating a page for Phoebe. I still wanted to work with music in my midterm, so I chose a famous song sang by Phoebe, called Smelly Cat. I wanted to make it similar to karaoke, so I implemented an interactive element, where the user could press the specific keys to get the singing of specific lines of the song. So, there is only a karaoke version of the song playing in the background and to make the song complete, the user should add the lyrics sounds by pressing on keys. This page took me a lot of time working and correcting the code, because the sounds in p5js are pretty hard to handle. First of all, I separated the song to the lyrics sound and to the instrumental part, then I cut the lyrics sound to the lines, and assigned each line a specific key. But the hardest part now comes with the playing of the sounds.let soundPlayed = { 'S': false, 'W': false, 'F': false, 'T': false, 'R': false, 'Y': false, 'N': false }; function smellykeys() { // converting the pressed key to uppercase let pressedKey = key.toUpperCase(); // logic is to play a specific sound and stop the rest if (pressedKey === 'S' && !smelly.isPlaying() && !soundPlayed['S']) { stopAllSoundsExcept('smelly'); smelly.setVolume(0.2); smelly.playMode('untilDone'); smelly.play(); soundPlayed['S'] = true; } else if (pressedKey === 'W' && !whatarethey.isPlaying() && !soundPlayed['W']) { stopAllSoundsExcept('whatarethey'); whatarethey.setVolume(0.2); whatarethey.playMode('untilDone'); whatarethey.play(); soundPlayed['W'] = true; } else if (pressedKey === 'F' && !itsnot.isPlaying() && !soundPlayed['F']) { stopAllSoundsExcept('itsnot'); itsnot.setVolume(0.2); itsnot.playMode('untilDone'); itsnot.play(); soundPlayed['F'] = true; } else if (pressedKey === 'T' && !theywont.isPlaying() && !soundPlayed['T']) { stopAllSoundsExcept('theywont'); theywont.setVolume(0.2); theywont.playMode('untilDone'); theywont.play(); soundPlayed['T'] = true; } else if (pressedKey === 'R' && !yourobv.isPlaying() && !soundPlayed['R']) { stopAllSoundsExcept('yourobv'); yourobv.setVolume(0.2); yourobv.playMode('untilDone'); yourobv.play(); soundPlayed['R'] = true; } else if (pressedKey === 'Y' && !youmay.isPlaying() && !soundPlayed['Y']) { stopAllSoundsExcept('youmay'); youmay.setVolume(0.2); youmay.playMode('untilDone'); youmay.play(); soundPlayed['Y'] = true; } else if (pressedKey === 'N' && !yournot.isPlaying() && !soundPlayed['N']) { stopAllSoundsExcept('yournot'); yournot.setVolume(0.2); yournot.playMode('untilDone'); yournot.play(); soundPlayed['N'] = true; } } function stopAllSoundsExcept(keep) { for (let key in soundPlayed) { soundPlayed[key] = false; } // stop all sounds except the currently selected one if (keep !== 'smelly' && smelly.isPlaying()) { smelly.stop(); } if (keep !== 'whatarethey' && whatarethey.isPlaying()) { whatarethey.stop(); } if (keep !== 'itsnot' && itsnot.isPlaying()) { itsnot.stop(); } if (keep !== 'theywont' && theywont.isPlaying()) { theywont.stop(); } if (keep !== 'yourobv' && yourobv.isPlaying()) { yourobv.stop(); } if (keep !== 'youmay' && youmay.isPlaying()) { youmay.stop(); } if (keep !== 'yournot' && yournot.isPlaying()) { yournot.stop(); } }
It is surely part of the code I’m really proud of. It took me couple of days to understand how to solve a problem of repeating sounds and lagging . Some sounds would block others and code didn’t work at all. By introducing variables with boolean values, I could create a check points in the code to get what I wanted (f.e. when the key is pressed, the sound plays only ones and doesn’t repeat until it is called out again) .
- Chandler
When I thought about Chandler’s character, I immediately thought about his sarcastic sense of humor. So, I decided, I want to prompt the user to ask a question by typing it in the input line, and get an answer from “Chandler’ by sending the question. So, basically how I did it was by creating csv.file with all sarcastic punch lines Chandler character could actually say in the show. I wanted really to appeal to Friends fans, so I tried to create realistic Chandler’s responses. There wasn’t much difficulty with this page. - Joey
I was confused with what could I possible introduce for Joey character, apart from his immense love for food, especially pizza. I decided to tie it to his character quality of not sharing food with anyone. I wanted to represent it directly in the interaction. So on his page, the user can place pizza slice wherever they want to except place, where actually the user’s plate is located. In that way, I am implying that if they go with Joey to the restaurant, they won’t get even a slice of his pizza to their own plate. For this page, I used arrays. - Rachel
I definitely wanted to work with “fashion” part of Rachel’s character. As I watching the show myself, I was always inspired by the looks that were created for this character. So, for this page I decided to make a journal layout, where all Rachel’s outfits are collected and sorted by the purposes, like casual, festive, office. This page really reminded me of the scrapbook, and I find it pretty aesthetic. - Ross
What I remember brightly about Ross’ character is his lines, especially “We were on a break!” one. So, I decided to focus on that side. I decided to implement OOP for this page to introduce more movement on the screen. So basically, when a user presses on this phrase, he will get a happy face of Ross, since by this phrase he used to make excuse of his cheating. And there is another phrase “It is a big deal!”, said by his ex, which made him angry, so when the user presses on it, there are bubbles with Ross’ angry face. - Monica
When I thought about Monica’s character, I was struck by many ideas, because of so many qualities that she was presented in the show. So I decided to compile them all together. I came up with the creative text that would describe one of the main activities that Monica does during the show, like cleaning, cooking, dancing, organizing.
I extensively used Canva for this assignment to get high quality images.
Also to follow the aesthetics, I chose a color palette for my project and also selected the fonts (Helvetica and Friends theme font).
Final Version
https://editor.p5js.org/aa11832/full/JSemZD8wC
Hopefully, I could convince you to watch at least one episode of Friends!
Future Improvements
- For the future improvement of the project, I would really like to work on the sound accompaniment across different pages, not only Phoebe one. I could implement sounds starting from Friends show theme song to the sound of the specific key character lines, like maybe adding the sound of line “We were on a break!” to Ross page. I believe that would enhance user’s immersion to Friends universe.
- I would also to expand my work with object oriented programming in different parts of the project. I feel like there is a room for working with different objects as a parts of the background or the main interaction.
- I would also like to transfer my project to the full screen.
- I think what this project lacks is gamification. While there are many ways to interact with the project, there are no scored activities that are usually appealing most to the user. For example there are ways to gamify the karaoke page by evaluating how exact was the user in pressing the keys to match the song lyrics.
- I would also like to improve the immersion of the user to the show environment. What I created in my project captures very shallow part of the whole Friends show. Adding more unique content and games, I can address this problem.