Detailed Analysis of Economies in MMOs (massive multiplayer online games) and Their Applications to a Younger Generation
Advisor: Mr. Powers
Internship Location: Remote
Stock market literacy is a valuable asset for making money through the stock market, yet many people still engage into the stock market without proper skills and background information, leading to incurring massive losses that Are easily avoidable. This project aims to create an educational video game based on the real-world stock market, teaching valuable skills such as analysis of company products along with rational investments in order to teach the audience How to effectively trade stocks and consistently profit off of the stock market. Through a cyclic gameplay loop to minimize random luck and thus preventing accidental positive feedback through luck, this game aims to teach players in a stress-free and relaxing environment. After the development of the game, the project will also evaluate the effectiveness of the game in teaching stock market literacy through analysis of the gameplay along with an assessment before/after playing the game to determine which skills the players have learned.
Project Blog
Post 1: Detailed Analysis of Economies in MMOs (massive multiplayer online games) and Their Applications to a Younger Generation
Blog Post 0
Hello!
My name is Theodore Chen. This is going to be Blog Post 0, so, uh, have a nice read.
For starters, I’m going to go over a quick overview on what you’re going to be seeing within the next few posts. Expect a quick overview of the research I have done (along with some vacation photos. The photos are important to the senior project. Trust me.)
To begin my project, I am going to do some data collection by finding virtual items of interest in video games that act as a form of “currency” that other items are traded by. Additionally, rather than focusing primarily on the raw data of the price of the item relative to the game’s original currency, I’m going to focus on important details and the bigger picture when examining each item – for example, did this item get a buff? Did a new competing item get released? So on and so forth.
Secondly, I’m going to create a basic framework for the game, which should handle all of the actual data that is occurring and the whole game loop. Nothing fancy, just enough to function. After that, it’s going to be a little bit of polishing before I finish up the main game. The main element that’s going to be added is that the change in the stock will be pre-simulated, and players have to infer that change by receiving tidbits of information (that will be gathered in the first step).
Lastly, I’m going to create a short test/assessment/survey that records the testers’ stock knowledge before and after development to assess the effectiveness of the game.
For a timeline, I’m hoping to finish data collection in the first three weeks. On that third week, I want to begin creating the framework for the game, and have an alpha product by the end of week 5. After that, I want to spend the next two weeks for art and polish, maybe sending out test versions of the game and drafting the assessment for effectiveness.
Blog 1
This week was quite a hectic week, but I did manage to get a good chunk of content done along with a decent setup for next week. (However, given the fact that my next week will also be hectic, I can only hope that this preparation pays off.)
Main accomplishments:
Tuesday, tried creating a sample scenario of the game, realized that the scenario that I was planning didn’t really have a good teaching aspect to it just by copying real-life values from the item price of the virtual item. (Context, the Great Potato War in Hypixel Skyblock in 2020.) Interestingly enough, while the item in question (potatoes) did increase in supply, its price also increased due to hype and popular attention towards the item.
Decided to create more of an “attention” level stock market growth – stocks with more attention will create more volatility
This does correlate with real-life principles, and that got me thinking to focus on principles and draft events from scratch rather than find real-life events and try to shove them into certain principles
Ex. SMCI versus BRK.B. SMCI is a hyped up AI technology company stock, and its value fluctuates worse than the school’s Wifi. BRK.B is a real estate company that doesn’t get much attention but does get guaranteed growth.
Wednesday, had meeting with IA (Mr. Powers), got some valuable insights on a couple of important mechanics I wanted to implement, including:
Taxes and how tax brackets work in order to keep the game engaging
Play length – how long can a player play before they have to stop? I wanted to decide in what “interval” each day would ideally take place through, and eventually decided on 20 minutes as a rough baseline. On one hand, it can’t be too long, otherwise the casual player won’t be able to stay focused and remember everything. On the other hand, if it’s too short, the player can’t actually learn anything meaningful!
Information retention between days. Decided that the player would only get minor context.
Storylines for each stock (a series of linked events that occur one after another)
Thursday, more drafting concepts. Not much to talk about here, mainly working on getting more framework set up.
Friday, was going to have a meeting with EA (Mr. Orr), unfortunately something came up and we didn’t end up meeting.
Ended up continuing on the feedback from Wednesday.
Began drafting slight pseudocode for the entire game, mainly considering which variables will control the stocks and how that’s handled.
Week 1: Blog 1 (Detailed Analysis of Economies in MMOs)
This week was quite a hectic week, but I did manage to get a good chunk of content done along with a decent setup for next week. (However, given the fact that my next week will also be hectic, I can only hope that this preparation pays off.)
Main accomplishments:
Tuesday, tried creating a sample scenario of the game, realized that the scenario that I was planning didn’t really have a good teaching aspect to it just by copying real-life values from the item price of the virtual item. (Context, the Great Potato War in Hypixel Skyblock in 2020.) Interestingly enough, while the item in question (potatoes) did increase in supply, its price also increased due to hype and popular attention towards the item.
Decided to create more of an “attention” level stock market growth – stocks with more attention will create more volatility
This does correlate with real-life principles, and that got me thinking to focus on principles and draft events from scratch rather than find real-life events and try to shove them into certain principles
Ex. SMCI versus BRK.B. SMCI is a hyped up AI technology company stock, and its value fluctuates rapidly. BRK.B is a real estate company that doesn’t get much attention but does get guaranteed growth.
Wednesday, had meeting with IA (Mr. Powers), got some valuable insights on a couple of important mechanics I wanted to implement, including:
Taxes and how tax brackets work in order to keep the game engaging
Play length – how long can a player play before they have to stop? I wanted to decide in what “interval” each day would ideally take place through, and eventually decided on 20 minutes as a rough baseline. On one hand, it can’t be too long, otherwise the casual player won’t be able to stay focused and remember everything. On the other hand, if it’s too short, the player can’t actually learn anything meaningful!
Information retention between days. Decided that the player would only get minor context.
Storylines for each stock (a series of linked events that occur one after another)
Thursday, more drafting concepts. Not much to talk about here, mainly working on getting more framework set up.
Friday, was going to have a meeting with EA (Mr. Orr), unfortunately something came up and we didn’t end up meeting.
Ended up continuing on the feedback from Wednesday.
Began drafting slight pseudocode for the entire game, mainly considering which variables will control the stocks and how that’s handled.
Week 2: Blog 2 (Detailed Analysis of Economies in MMOs)
Blog 2:
A bit of a hectic timeflow, but decent progress was made. Most of the game is (theoretically) ready to be coded in, but coding in the actual game might prove to be a struggle, considering how much the little content I have planned is already amassing to.
Quick overview:
Monday. Had meetings with both IA and EA. Got a more refined and definitely more feasible outlook on the final vision of the game. The main things that were changed were both the format of the game and the timeframe of the game.
The game went from an endless, potentially-infinite-time sink to a limited, fixed, 10-segment game. This saves me a lot of time in coding in the game, mostly because I can control a majority of the variables within the game and thus save myself a bunch of hassle when it comes to reinforcing the lessons taught.Tuesday, began (re)framing the game once more. I lost a couple of hours to a flight, so these hours were done pretty late at night in a very weird-ish timezone. This overlapped into Wednesday, and I only realized the missing day until the time of writing this blog. That being said, I established a pretty good guideline for what I needed to do and how the general execution would look like.
Wednesday, lost day. Also jet lag.
Thursday, I did more work on the game format. Refined the pseudocode that I was going to use, started drafting pseudocode for the menus. Did some last-minute research on effective stock market strategies to stuff into the game, and on top of doing that added a couple of more NPC tooltips to help the player along a “learning path”.
Giving players a general idea of how a stock functions but not its predicted values, which is kind of lenient but also forces the player to think about the stock price for once.
Pattern recognition is key for this game, so I decided to reinforce that. Gave stocks some personality, some extra behavior.
Friday, made up for a couple of extra hours missed on that Tuesday/Wednesday. Polished up a general timeline of the weeks, wrote some extra information for quarterly earnings (and had to do a bit of extensive research on how I was going to determine how the stock prices would change from those quarterly earnings). In the end, I decided to create a general boost to most stocks’ prices, giving the player a tiny boost in their income and to reward them for investing aggressively prior to the quarterly earnings release.
Overall, a hopeful start. Praying that coding and polish next week won't take 50 hours instead of 15.
Week 3: Blog 3 (Detailed Analysis of Economies in MMOs)
This week was quite the blur. It was mainly comprised of rehashing and actual finalization this time.
A quick recap of what happened:
The first two days were primarily spent re-evaluating the game’s final vision after receiving input from my external and internal advisor.My original 10-segment game idea had multiple flaws in it when I re-evaluated it, so I decided to expand it to the course of half a year -- 26 segments, short enough to not last forever but long enough for the player to be able to make mistakes and learn from those mistakes. In essence, I needed to give the player a little more time to play the game. I needed events to happen twice in order for the player to learn from their mistakes: having an event only happen once wouldn't allow the player to apply their newly gained knowledge. I think I’ve done a pretty good outline that should be able to teach using this method effectively, although it really does depend on the playtesting week in the far future to see how those results will actually go like.
Thursday was mainly spent grinding tutorials on Godot 4. While I have had prior experience making games, it was my first time using the engine, and I might’ve gotten completely lost for the first hour. At that moment, I decided to simultaneously watch tutorials and read through the Godot 4 logs to know what I had at my disposal. I would say that it was a pretty productive use of my time, as I was able to get general knowledge on the engine, but it was an entire day lost.
Friday, however… was a huge pain. It took me around 4 hours of work to even try to get a menu set up, and even then it didn’t work out. My one main weakness when it comes to coding projects is always the starting menu. Never was able to do it well. With the whole confusion of nodes and states and all that, even after watching a tutorial on Youtube, I was still hardstuck. At that point, I was honestly considering switching engines, but I knew that the engine probably wasn’t the problem. I decided to shove it for later and start working on the actual gameplay rather then the menu from now on, and save the menu for the polish phase. (Oh, and I worked on this blog.)
Saturday saw me get the basics of the code done! Finally, in-game menus were starting to look okay. Okay, maybe that’s an exaggeration, but something works. Now, it’s time for the fun stuff next week… functionality!
Week 4: Blog 4 (Detailed Analysis of Economies in MMOs)
This week was a huge process of hashing it out. Not much action in the narration here, but there was decent progress along with a severe reality check.
Tuesday, I decided to try and create the menu for the game. I want to say that I did a good amount of work here, but it was a painful process of trial and error to get anything working from scratch. At the end of the day, not much was really accomplished aside from me realizing that transferring my pseudocode into an actual working product would be far more complicated than I anticipated.
Wednesday, I decided to take a step back. I started the day making basic scripts for everything, creating functions for the game, and creating a text-based version to ensure that the framework looks okay. I think that decision was probably the best plan of action I could’ve taken, as I was in no state of mind to struggle with visuals again.
Thursday, nothing much happened. I plugged in dummy values for the stocks, tested a rudimentary buying and selling system (and made some adjustments to it), and started thinking about my implementation and optimization of the information-giving NPCs. In order to (hopefully) optimize further additions and expansions to be made, I also decided to create subclasses and input data through .txt files, which will likely make my life a lot easier further down the line.
Friday, I worked on the blog and decided to do a little more research due to the mental exhaustion of thinking about optimization and convenience. I searched up an external framework for a visual novel that I tried implementing into my game, but it ended up being too much of a hassle to implement and I decided to cross that bridge later when it was time to add that in.
Saturday, nothing new really happened. I managed to set up a basic, text-based version of the game -- a huge accomplishment. Now, all that remains is figuring out how to add visuals in, which tends to be the hardest part in any game.
Week 5: Blog 5 (Detailed Analysis of Economies in MMOs)
This week was another week of somewhat fruitful work, although with some caveats. I did eventually manage to get a product, but given my current progression, my scale might have been too ambitious (especially with the minor roadblocks causing a massive amount of struggle and the major roadblocks being simple fixes.)
Tuesday, I had my meeting with my internal advisor. Discussed a couple of minor details with them, including creating a future plan on the key aspects of the game. Additionally, discussed the ideal distribution method for playtesting the game. Afterwards, continued working on the buttons for the game, trying to display information from the variables onto the screen in a graphical UI. The main issue came from dynamically changing text outputs on screen.
Wednesday, managed to get some semblance of text online. I could now change the text displayed on the screen dynamically, which was a pretty big accomplishment. I could now display the user’s information on the screen. The only thing left was to (finally) implement buttons and hook them up to the main game function so that the player could play the game.
Thursday… the buttons were proving to be quite the hassle. Despite my reading guides on how to set up buttons in Godot, it proved to be a difficult task to readjust the code that I had made to adapt to the buttons. In short, I had my game loop set up to run without buttons (but with functions) and assumed that the transition would be a pretty easy fix, which it didn’t end up being.
Friday, I had my meeting with my external counselor. They recommended that I consider making a text-based version of the game if the graphical interface was being too finicky to handle -- especially in Godot. I did consider their idea and started planning (and coding) the general outline of my pseudocode from last week into Python, which proved to be a lot easier than expected.
Saturday mainly consisted of finalizing a very rough version of my game in Python, with some extra print statements to replicate what would or should have happened in Godot, which left me in a pretty confident state that something could and would happen by the end of next week, leaving me with a decent period to get playtesting and feedback along with create a survey to evaluate effectiveness.
Week 6: Blog 6 (Detailed Analysis of Economies in MMOs)
Week 6
This week was mainly a recovery week. Fortunately, after the fiasco of last week, I did manage to get a text-based version of the game (mostly) working, minus a couple of bugs that comes with porting stuff over to Python. Spent most of the week trying to hotfix the structure, fix bugs, etc. On the bright side, a working product… which is something, and should make shoving it into engine less of a pressing restriction.
Tuesday, continued from last time and continued hashing in the data gathering phase through a simple randomized data check. Had to restructure a lot of things with the transition from Godot (namely, the fact that variables don’t edit themselves in python functions!!). This would prove to cause a lot of issues later down the line, but little would I know.
Wednesday, began ironing out the buy and sell code to make the money update from Monday, but ran into so many issues with mixed spaces and indentation in code. Anyone who works with indentation-based code will understand how painful it is when half of your code is spaces and half of your code is indents. The code stops working for a good three hours. Yippee.
Thursday, I had my meeting with my internal advisor. Updated progress with him, got some feedback. Not much of note happened besides adding “real” data values as opposed to the dummy values that I had in earlier from prototyping and testing, which also made me catch a couple more errors.
Friday, I had my meeting with my external advisor. He gave me some tips about how I should proceed with the project, and pointed out a few bugs in my code. I got back to work fixing it for the rest of the day, and finished my blog. I also restructured some of the data gathering code, and through that testing found even more bugs. Yippee.
Saturday, I met with my internal advisor again to update progress. (In the near future, I’ll also be patching out any other bugs I find, along with fix everything I found on Friday. Bugfixing is hard work, especially when it comes to things that don’t seem to be broken in theory.)A very rough WIP link here: https://teddcrush.trinket.io/sites/stock-market-port
Expect bugs and player experience to be patched over the next week or so. Hopefully earlier, but only time will tell.
Week 7: Blog 7 (Detailed Analysis of Economies in MMOs)
This week wasn’t super dynamic, so I’ll go over the details in a quick summary as opposed to a day by day structure.
Most of the time this week was centered around bugfixing and catching silly mistakes. Yes, even a well-thought plan is prone to really stupid mistakes. The transition from Godot to Python really left the early versions of the code with some… interesting issues, such as the actions loop for all actions (what makes the actions happen before the list is empty) happen after the empty list check, meaning… well, the actions wouldn’t process. Not to mention the funny lapse in judgement in the sell function, where it wouldn’t work because I emptied the value before subtracting the money, making the function do nothing. That one was on me.
More polish happened on the text based format, along with a general ready-to-push format for the text based engine. All the data was added, some randomization was optimized, and the game is now in a fully-playable state. Well, mostly-playable, as there’s always more content I can add along with more nuance. There’s never such a thing as too little content.
Further preparation to move the game into its original intended format (Godot). Honestly, I hadn’t expected it to be this late down in the timeline, but with most of the core framework done (and with the transition being fairly easy) it shouldn’t be too hard to rig up the game into a visual format in a week or two, depending on if I work into spring break. I additionally readied the assessment I was planning to use to validate the effectiveness of my game, which should help outline how I want the game loop to look like based on the text version of the game.
Week 8: Blog 8 (Detailed Analysis of Economies in MMOs)
Nearing the final stretch, and while I am a little behind, I am still making a fairly decent pace. Recap of this week below.
Monday, I realized that price adjustments needed to be made. Graphing the prices that I had made, I noticed that the highest change was quite… small, around 8% at most. Considering the current state of the economy and how prices are in severe chaos due to extraordinary circumstances, I decided to “inflate” the changes in the stock pricing in order to hammer home the reward system of making good decisions. Probably my best decision yet. Additionally, I added a quick evaluation to the end of the game, highlighting any mistakes made during the game, such as holding onto stocks of a company that goes bankrupt.
Tuesday, I turned my attention back to Godot to continue implementing the code. Over the break, I did migrate the code over (which I had to do again today) and managed to get a very basic UI to work (which I did have to make adjustments to today). Today, I managed to fix a couple of bugs and errors that were being thrown at me from the editor, including positions not setting themselves and horizontal containers refusing to work. I was able to implement enough buttons to the point where I was able to roughly navigate the menu, similar to what the text-based version does.
Wednesday, I met with my external advisor and made some changes to my code accordingly. Instead of letting the player gather an unlimited amount of information, I decided to implement a time system where the player can only gather a few pieces of information at a time. Additionally, by separating the information into categories and forcing the player to select where they want to research in (ex. the news, product reviews, etc.), it should reflect more accurately to the real world as not everyone has unlimited time.
Thursday was a pretty uneventful day. Aside from one bugfix that was bugging me, I worked mainly on the slides and got a majority of the presentation done (aside from some images from Godot that I need to import later, once the visual part is actually finished). It was harder than expected to summarize the main challenges of this project into only one slide -- there were so many!
Friday, I worked on getting a game loop to work. It was mainly a tedious process of hooking up functions to buttons, praying that it would work, crashing out when a new bug showed up, and spending 20 minutes getting sidetracked solving the minor bug. In the end, however, I did manage to get the buy and sell functions working and a very rough prototype of how I wanted the information gathering to look like. This also brought to my attention that I need an actual font, which I will likely be doing over the weekend.
Week 9: Blog 9 (Detailed Analysis of Economies in MMOs)
Having mastered the art of Godot, I did some decent work this week! Hopefully the polish isn’t going to mess me up down the line.
Monday. With the deadline of the project soon approaching, I did one last test run through the python version (text-based) and made sure it all worked roughly correctly. After that, I started directly porting over whatever code I could to the visual editor. Not much else happened besides basic setup.
Tuesday, I tried getting custom fonts to work in the game so that the information would appear a bit more stylized. Unfortunately, it was giving me some hassles, so I decided to put that on hold. With fonts not working, I decided to take a break and grab images for my slideshow, along with working on said slideshow more due to the incoming deadline.
Wednesday was also fairly uneventful. It mainly consisted of painful porting over of code again. For some quick context about the actual structure of the code:
The main code (python) was made with prayers and packaging tape (metaphorically, of course). Everything was done in one class, with the exception of creating one object without methods. Money was handled quite inefficiently, due to python’s limitations on global variables, and the menuing for the game itself was poorly executed for a visual format.
Thus, the entirety of Wednesday consisted of hooking up buttons to commands and trying to get an automatic processing of the buttons (in other words, automatically adapting menus to the amount of stocks available) was a huge hassle. Hooking up those functions ended up taking the entire day and a little extra. (That being said, Godot was a much more convenient editor in the end.)
Thursday was mainly bug testing. Nothing interesting aside from a really weird bug with references not exactly working. On that note, did you know that Godot’s scenetree allows for some really convenient inheritance properties that should’ve let me make menu screens easier, except for the fact that I didn’t use them at first? Who would’ve guessed.
Friday was another unfun day of polish. I made some temporary sprites to be used in the final product (to be redone if I manage to have any extra time), plugged those in, prayed they worked, and surprisingly it functioned okay. I also started with a long list of “things I need to do before submission if I miraculously find time”, such as cleaner transitions and minor bugfixes. I don’t know if any of these things will find their inclusion by the end of next week, but I really do hope that they do.
Week 10: Blog 10 (Detailed Analysis of Economies in MMOs)
The final week. More cramming done. In hindsight, I should’ve not lost those two weeks in the middle of the project randomly and/or started two weeks earlier. Game development is a lot harder than I expected…
Monday, last touchups on the basic framework. Started doing all of the art stuff. Shoved in some elevator music that I found on the internet into the game (with credit of course). Additionally, did some minor UI changes to try and make the game a little easier on the eyes.
Tuesday, tried to get some sort of playable test build out. It’s still far rougher than where I’d like it to be, but everything works. Honestly a huge accomplishment considering all of the setbacks I’ve had during this project, so I’ll take whatever small victory I can at this point. Did some adjusting, made the textboxes slightly cleaner and made sure scrollbars work roughly as intended (preventing text overflow from their boxes), finished that one phone sprite I was meaning to do all along, and adding an actions counter to the top of the screen to help indicate how many actions the player had left. It did remind me to add a cool next week transition rather than the one I have now.
That aside, sent it out for testing.Wednesday, tried to make a tutorial for the game. It was miserable, simply speaking -- almost as much time making the actual framework for the game. On the bright side, there is a tutorial now! The only major flaw being that the player has to play through it every single time because I don’t have save data. Yikes.
Added some BBcode colored text to make the walls of text slightly more engaging and easier to read. Stock price raises and falls, information segments, etc. The only thing I wish I could’ve done was something along the lines of a generative stock line detailing the prices over time, although that would’ve been far too hard to realistically do with the short amount of time that I have left. Go figure.Thursday, ported in the fancy buttons. That’s it, along with all of the text files from the python version, poor taste included. Making sure all of those worked took a while, mainly going through all of them.
Friday, did a last checkup on the “final” state. If I’m being honest, I’m not exactly satisfied with the way it turned out. Had I known that the editor would’ve taken a lot longer than seven weeks, I would’ve secretly started this project all the way back in October when I first got the idea for it. All things considered, however, I’m fairly happy with my end product.