• Welcome to Install Base!
    Join the Community and gain access to Prediction Leagues, Polls, specific answers and exclusive content now!

New project in the works: ggx2ac and the archives of Nintendo earnings data and other video game companies (title pending)

This is the latest update.

In the Games section of the webpage, the games that have game over screens have been changed.

Also, Tech Demo has been renamed to Tech Demo Plus because it is now playable. Keyboard controls for Tech Demo Plus are found in the Games page.

That is all for the latest update.
 
This is the latest update.

The webpage has been updated, the Nintendo global and regional hardware/software numbers in the special page have been updated with increased accuracy.

If you go to this Nintendo URL: https://www.nintendo.co.jp/ir/en/finance/historical_data/index.html
It will have an excel file containing historical data which I have probably mentioned before in this thread. You will notice in the excel file and even in Nintendo earnings results sometimes that a hardware/software number might show either 0, -0 or - for the value. All those numbers and symbols have different meanings.

In relation to the above, let's start with the easiest number, what is 0? That's right, it's not zero. It's a value that is less than ten thousand units rounded down to zero. Look at Nintendo earnings releases or the excel file in the link and it will tell you that they report numbers rounded to ten thousand units.

Now that you know what 0 is, let's talk about the second easiest number, what is -0? That's right, it's not zero. It's a value that is less than minus ten thousand units rounded down to zero.

What is -? That's right, it's zero.

Here's one of the tables from my webpage to show the new values:
Code:
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
| Nintendo DS Hardware Total               |
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
| FY3/2005 Cumulative           |    5.27M |
| FY3/2006 Cumulative           |   11.46M |
| FY3/2007 Cumulative           |   23.56M |
| FY3/2008 Cumulative           |   30.31M |
| FY3/2009 Cumulative           |   31.18M |
| FY3/2010 Cumulative           |   27.11M |
| FY3/2011 Cumulative           |   17.52M |
| FY3/2012 Cumulative           |     5.1M |
| FY3/2013 Cumulative           |    2.35M |
| FY3/2014 Cumulative           |    0.13M |
| FY3/2015 Cumulative           |    0.02M |
| FY3/2016 Cumulative           |    0.01M |
| FY3/2017 Cumulative           | < −0.01M |
| FY3/2018 Cumulative           | < −0.01M |
| FY3/2019 Cumulative           | < −0.01M |
| FY3/2020 Cumulative           | < −0.01M |
| FY3/2021 Cumulative           |  < 0.01M |
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
| Global - Life-To-Date (Units) |  154.02M |
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+

Every occurrence of the < symbol indicates that the value is less than (plus or minus) ten thousand units. It is not known what the value is and since the value is smaller than ten thousand units which is rounded down to zero means that it doesn't affect the LTD number on these tables.

That is all for the latest update.
 
This is the latest update.

Game Three now has a playable build on the webpage. The controls are Keyboard or Touchscreen only, mouse clicks will not work on the screen buttons for this game.

There's a very simple reason for that, the game is in the style of a side-scroller and to let people on their phones be able to play, I had to find a way to let pressing the buttons to move left or right work similarly to holding the arrow keys for left and right.

The controls for the keyboard will be onscreen. There's a simple strategy for beating the enemy, you'll only lose to time in this.

The enemy would have been difficult to beat because of how precise the attack would have needed to be, but I increased the range of attack by 5 times so timing the attack isn't as difficult.

These "|" characters are walls and you have to use the Jump Over command to vault over it. You can jump back the other way with the same command when you are on the other side of the wall.

After defeating the enemy, you can go to the right-end of the screen to load up a new screen and fight another enemy. There is only three in total, and they follow the same behaviour.

To strike the enemy, you can only do it when against a wall. Depending on the side of the wall you are on you will either go up when you strike or go down when you strike. Knowing this, you want to Strike the enemy in your path when it is going up or down.

Keep pressing Jump Over when there are multiple walls.

The enemy doesn't have an HP bar, every time you strike it, you slice off a piece of its body which is why you see it getting smaller.

That is all for the latest update.
 
Last edited:
Events calendar has been updated for 11 of 22 companies having earnings release during April to May 2023.

The calendar will continue to be updated until all releases occur, a reminder that some companies do not reveal the date of the earnings release until it happens on the day i.e., Square Enix.
 
Lazy loading and the trade-offs
I have just made an update to the website that is live right now. You may notice a very brief loading screen whenever you go to different pages.

I have implemented something called Lazy Loading. The idea behind it is to run something only when it is needed. In the case of websites, websites are getting bigger and bigger, so companies apply lazy loading to split up the code so that only parts of the code are loaded when a user goes to some part of the website.

There are trade-offs to this, instead of downloading everything in one go, you will be downloading things as you open up different pages when going through the website (lazy loading can be done with components inside a page and not just at the URL level).

To show how this looks, here are two images.

The first image is the build file of my website before doing any code-splitting which results in lazy loading. Very important to note that you do not end up downloading 1.9MB of data, what you download from the .js file is on the right side where it is compressed at 380kB. Once you download that then you can pretty much go to every page on my website without noticing any load times. This is pretty much how you've experienced using my website at any time before now.
pain233.jpg

The following which is the second image is when code-splitting is applied. I chose to only split things at the router level i.e., when the URL ends with / or /nintendo or /capcom etc on my website. When you go to my homepage, it will first load the index-33aff... file which is 115kB compressed, it has not loaded any other .js file. This means that loading my website is probably three times faster to load at the home page. When you go to the Nintendo page, it will then load a few more .js files: Nintendo-35daf... which is 72kB compressed, GRAPH_CONSOLIDATED_EARNINGS which is 131kB compressed, GRAPH_NINTENDO_GLOBAL which is 1.17kB.

Why is one of the graph files so huge? Because I haven't split it further, it actually uses all the decades of data from every company besides Nintendo. I haven't split it up further so that it only loads the Nintendo data for the graphs. Compare that to the other GRAPH mentioned above and you can see why there's such a huge difference.

Ignoring the graphs, let's go by the files that give the data in tables since that is the main data you see for every page.
Nintendo-35dafbb8.js: 72.70kB compressed
Capcom-e25... : 20.16kB compressed
SquareEnix-4cc... : 2.14kB compressed
BandaiNamco-d02... : 2.17kB compressed
KoeiTecmo-4d5... : 1.60kB compressed
Sega-3713 : 8.58kB compressed
sales_per_software_unit_cml-422... : 8.54kB compressed
annual_report_cml_data-b23... : 3.10kB compressed

Again, similar to the graphs, the last two files on that list are using data that is sharing code across all the companies not named Nintendo which is why further code-splitting would have to be applied there to so that going to the Capcom page only loads the sales per software unit file for Capcom.

Why did I do the code-splitting? As you saw from above, maybe you're someone that doesn't go to my website to look at Nintendo data. If you are looking at other things, then you don't have to download the Nintendo data which as you saw is which is bigger than all the other companies combined.

As my website continues to get bigger and bigger because more and more data will appear in the future, it's going to be a problem if I don't use code-splitting. Right now, 380kB isn't a big deal, but triple that amount and then it's going to be a problem regarding loading times. This is why I have implemented code-splitting, at worse you are going to experience a slight loading time when you go from the Nintendo page to the Capcom page as mentioned already but, when you search through the years of data for Capcom, there's no loading because everything has already loaded for that page.

The loading screens already feel annoying to me when going to different pages but that's not reflective of how I use the website. Maybe I might change things back just to not notice loading screens but eventually I will have to implement code-splitting when this app gets bigger. So, I should look at making a better loading screen. Edit: I have now added a custom loading screen.

That is all for the latest update.
 
Last edited:
This is the latest update.

I have released Game Four, it will not display the clouds correctly on mobile, it's too much work to implement a fix and there's no more common text I could use to represent clouds for the fonts I am restricted to.

Here's another update, go to the Capcom special page, click on Capcom Platinum Titles - Cumulative. Before I talk about the new feature, there has been a bug fix. The Capcom Platinum Titles - Cumulative was displaying data for some games wrong by showing reversed causality (it was taking data from the future and applying it to the past), that issue is now fixed.

Regarding the new feature, I don't know where I am implementing it yet. For now, this is where it has started, you will see a select list and a search bar inside the area where you view the tables for the Capcom Platinum Titles - Cumulative in the Capcom special page. If you don't do anything, you will still get to see (currently) all 115 titles as usual as you scroll down. The new search bar will let you search for titles that include the word you put in, e.g., typing "evil" will show you all games that include the word evil so it will find Resident Evil titles and Devil May Cry titles. When you click on the select list, you can specify the platform you want to see to narrow the search list further. The platform search is not perfect, when you search for PS1 titles it unfortunately grabs every PS1, PS2, PS3, PS4, PS5 title. Same thing for searching NES titles will include SNES titles as well.

I will see if I can get the platform search working better.

Anyway, as you can see if you have tried it, the (currently) 115 titles can now be filtered down to whatever titles you want to search for. Typing "resident" will show you every Resident Evil title on the list (about 32 of them). Currently the title search is set to using lower case letters only so that you don't need to type "Evil" to find all resident evil titles for example but "evil" will include devil may cry titles.

I am obviously thinking about using this new feature where the tables are too long when scrolling down that filtering makes things easier for what you want to search for.

That is all for the latest update.
 
The webpage has been updated.

Following the above post regarding the new search feature added to the Capcom special page inside Capcom Platinum Titles - Cumulative; the platform search feature is now improved.

The platform search feature:
- Now has Wii U, Wii and Xbox 360 in the list because I forgot.
- Now correctly filters games by platform, e.g., filtering by NES will not include SNES titles by mistake.
- The platform search list has been changed to reverse chronological order to have the newest platforms at the top except for DL (Download) which takes precedence over the others in the list.

That is all for the latest update.
 
Last edited:
This is the latest update.

The webpage is updated and I have finished adding Platform and/or Title search features to the Capcom page for:
In "Date by Fiscal Year": Software Platform Shipments, FY Platinum Titles, All Platinum Titles, FY Game Series.
In "Special Page": Capcom Platinum Titles - Cumulative, Capcom Software Platform Shipments - Cumulative, Capcom FY Game Series - Cumulative.

I have added the remaining missing platforms in the Platform search for Capcom Platinum Titles - Cumulative. I would rather not manually add those and instead automate it like I did for the FY/All Platinum Titles in "Date By Fiscal Year" however, doing that will mean I can't get the platforms in reverse chronological order.

To clarify, it was more complex adding the search features to every year in "Date By Fiscal Year" compared to the special page where all the data is grouped together. For example, if you go to the All Platinum Titles data for FY3/2006 the platform list will correctly show all platforms for that year and not include stuff like PS5 and XSX. If you go to FY Platinum Titles data for FY3/2023, it will not show NES in the listed platforms unless an NES title sells enough to increase the count by 100k+ units.

With the search features completed for the Capcom page, I will move onto the other companies. I don't know how long it's going to take to complete the rest.

That is all for the latest update.
 
Latest update:
Code:
+================================+
| Capcom page status             |
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
| Latest update: Platform and/or title   |
| search feature applied to Software     |
| Platform Shipments, FY Platinum        |
| Titles, All Platinum Titles, FY Game   |
| Series, Capcom Platinum Titles -       |
| Cumulative, Capcom Software Platform   |
| Shipments - Cumulative, Capcom FY Game |
| Series - Cumulative.                   |
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
| Future update planned: Notes section.  |
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
+================================+
| Sega page status               |
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
| Latest update: IP Type and/or title    |
| search feature applied to Software     |
| Sales, Software Units, Sega Sammy      |
| Software Units - Cumulative, Sega      |
| Sammy FY Series IP - Cumulative        |
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
| Future update planned: Notes section.  |
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
+================================+
| Bandai Namco page status       |
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
| Latest update: Title search feature    |
| applied to FY Series IP, Bandai Namco  |
| FY Series IP - Cumulative.             |
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
+================================+
| Square Enix page status        |
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
| Latest update: Title search feature    |
| applied to FY Series IP, Square Enix   |
| FY Series IP - Cumulative.             |
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+

Implementing the search features for the Nintendo page will take longer than all the others combined.

That is all for the latest update.
 
The webpage has gone through a pretty big update.

Not done with implementing search features yet for the Nintendo page, I have only implemented search features for the Nintendo Special page for most of the sections. You'll notice it has changed.

From this:

To this:

Because there are now filters for region and/or platform for those sections that have regional data.

Also, when you are selecting a fiscal year from the Date By Fiscal Year for any of the companies, it is just a simple click list now. You no longer have to type out the fiscal year.

What is probably the biggest update is what has been added to every search feature in every company page: Optional predictive single word searching.

You may know already that when you are searching for titles or other stuff by typing into the text field that it filters the list to what matches closely to what you typed. The issue is that you might not know what to filter, I could have used the Autocomplete component from Mantine that was used previously for typing in a Fiscal Year. The problem with that component is that you would end up finding only a single title to select and view and not multiple titles to view.

For that reason, I went and made a predictive single word search, how does it work? In this example I went to the Capcom Platinum Titles in the special page:
I start typing out the first two letters for evil, under the title search bar are single word suggestions. I set it that only up to five may appear at a time.

If you decide to click on one of those words, it will autofill the text field with the suggested word:

As you can see, the title search went from 43 titles to 3 titles with one word chosen. You can click on the clear search button to clear all the text and try searching for something else.

The biggest flaw with the predictive single word search is that I have not gotten it to work with Pokémon because the obvious letter there is more difficult to work with.

If I can't get that fixed, you will have to make do with typing "pok" to show all pokemon titles.

That is all for the latest update.
 
This is the latest update.

Following from my previous post, I have now completed adding search features with predictive single word search to the "Date By Fiscal Year" section for Nintendo.

Current status:
Code:
+================================+
| Nintendo page status           |
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
| Latest update: Region and/or Platform  |
| and/or title search feature and        |
| predictive single word search applied  |
| to Consolidated Sales Information,     |
| Global Hardware/Software Units, Key    |
| Sales Indicators, FY Million-Seller    |
| Titles, Regional Hardware/Software     |
| Units, Top Selling Titles, Nintendo    |
| Consolidated Sales Information -       |
| Cumulative, Nintendo Hardware/Software |
| - Cumulative, Nintendo FY              |
| Million-Seller Titles - Cumulative and |
| Nintendo Top Selling Titles -          |
| Cumulative.                            |
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
| Future update planned: Notes section.  |
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
+================================+
| Capcom page status             |
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
| Latest update: Platform and/or title   |
| search feature and predictive single   |
| word search applied to Software        |
| Platform Shipments, FY Platinum        |
| Titles, All Platinum Titles, FY Game   |
| Series, Capcom Platinum Titles -       |
| Cumulative, Capcom Software Platform   |
| Shipments - Cumulative, Capcom FY Game |
| Series - Cumulative.                   |
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
| Future update planned: Notes section.  |
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
+================================+
| Sega page status               |
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
| Latest update: IP Type and/or title    |
| search feature and predictive single   |
| word search applied to Software Sales, |
| Software Units, Sega Sammy Software    |
| Units - Cumulative, Sega Sammy FY      |
| Series IP - Cumulative                 |
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
| Future update planned: Notes section.  |
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
+================================+
| Bandai Namco page status       |
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
| Latest update: Title search feature    |
| and predictive single word search      |
| applied to FY Series IP, Bandai Namco  |
| FY Series IP - Cumulative.             |
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
+================================+
| Koei Tecmo page status         |
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
| Latest update: 3rd Quarter Earnings    |
| release data for FY3/2023 added.       |
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
+================================+
| Square Enix page status        |
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
| Latest update: Title search feature    |
| applied and predictive single word     |
| search to FY Series IP, Square Enix FY |
| Series IP - Cumulative.                |
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+

Also, Pokémon can now be found from the predictive single word search, see these examples:

That is all for the latest update.
 
The events calendar on my webpage has been updated.

See status:
Code:
+================================+
| Events page status             |
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
| Page update: Updated calendar for 20   |
| of 22 companies from April to May      |
| 2023.                                  |
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+

A reminder that earnings releases have already started today with Koei Tecmo so you may want to have a look at the calendar.

Note: Square Enix has actually revealed the date for their fourth quarter earnings ahead of time. Go to the calendar on my webpage or go to their IR page and then to their IR calendar to find out the date.
 
This is the latest update.

Before the next earnings releases happen in July/August, I am going through refactoring my code yet again. Last time it was for fixing issues with scalability, this time I am fixing issues with type safety and performance.

The webpage has had a large update. The consolidated earnings results on the special page for every company can now display data for 1st Quarter, 2nd Quarter, 3rd Quarter, 4th Quarter, First Half, First Three Quarters and FY Cumulative.


This means you'll be able to check for new records every quarter. Will the 1st quarter for Nintendo FY3/2024 have a new record in net sales, operating income or net income? Who knows but now you'll have an easier time finding out.

You can now see the consolidated operating results from 1981 to 2003 for Nintendo in the Date by Fiscal Year section other than the Special Page:

That is all for the latest update.

Once again, it is going to take a long time refactoring a lot of things because it will have to be rewritten from the ground up. The main reason for this is dealing with all kinds of data, and it is often that you won't have data for every quarter such as the Nintendo earnings data above. My code before this update did not handle this well.

After learning about algebraic data types, I went and started this refactoring by changing the type system I have in place:

The type in the image at the top that says Earnings is the old type, EarningsV2 is the new type. EarningsV2 looks like a plain object, go to the second image and you will see the EarningsValue type, this is what is going to improve things. This type is structured using a "discriminated union" in TypeScript.

To understand how this works, look at the type above it called Maybe. The Maybe type is a type that can result in a Just type containing a value of some type or it can result in the nothing type. Here is an example:

JavaScript:
type Nothing = { kind: "Nothing"}
type Just<T> = { kind: "Just", value: T}

type Maybe<T> =
  | Just<T>
  | Nothing

function divide(x: number, y: number): Maybe<number> {
  if (y === 0) {
    return { kind: "Nothing"}
  } else {
    return {
      kind: "Just",
      value: x/y
    }
  }
}

console.log(divide(3,0));
console.log(divide(3,6))

Code:
[LOG]: {
  "kind": "Nothing"
}
[LOG]: {
  "kind": "Just",
  "value": 0.5
}

Using a function to divide numbers safely that makes use of the Maybe type with a number as input. In most languages, if you try to divide by zero, you'll get an error. Of course, in JavaScript if you divide by zero it will just return Infinity. Maybe you don't want a transaction to occur over the internet that will cost infinity dollars because JavaScript divided by zero in one of its computations, you might have an if condition where it keeps running the same result because the condition relies on a number being greater than infinity.

For this divide function being used, if "y" which is the divisor is equal to zero, then the function is going to return an object of the Nothing type. If the divisor is not equal to zero, then it will return an object of the Just type containing the value from the result.

If you look back at my EarningsValue type in the image, you'll see I have objects that are for different types of data, and they all hold different values. This provides better type safety compared to the old Earnings type I made because that old type did not have constraints for each different type of data. When you look at the EarningsValue type, you will see that each kind of object only knows what they know so TypeScript will prevent you from making a mistake if you are not inserting the correct data. The Nothing type inside the EarningsValue type deals with data I don't have, which can make things easier for handling undefined data.

The old Earnings type required using multiple objects placed into a list. When I needed to perform any computations, I could end up with lists of lists (nested lists) and they cannot be flattened.

With the new EarningsV2 type I made, I made one single object to have all the data needed which means nested lists are less likely to occur. Since my code involves making a lot of objects and since it will likely grow over time, I had to change the data structure being used. Creating regular JavaScript Objects are expensive because they take up a lot of memory (compared to other types) and also take longer to create. To solve this issue since I am using objects is to make use of the Map() function/data structure. It has already been implemented for the code that uses the EarningsV2 type. What this means is that over time as the data on the webpage grows, the performance from using Map() will be much better compared to lists holding objects when looking at Heap memory usage and time spent doing computations on objects i.e. adding, removing or modifying objects.

I know that right now, there isn't much of a performance problem yet however, I am saving myself time from doing this now instead of another major refactoring in the future.

While I did solve the issue regarding missing quarters such as in the image above which is from one of the Capcom fiscal years between 2001 to 2003, I noticed that I would also need to implement a function for subtracting from halves and not just quarters since the fourth quarter data isn't correct.

That is all for the latest update.
 
This is the latest update.

The webpage has had another large update.

This update is for the software sales/sales per software unit data (for Bandai Namco, Sega, Square Enix, Koei Tecmo, Capcom) which took a lot longer than expected due to the data complexity.

First, just like the previous update with the consolidated earnings data, missing data for software sales/sales per software unit is more easily handled now: (left image is old, right image is new)

Square Enix now has graphs for sales per software unit in the data by fiscal year section:

Lastly, just like the consolidated earnings data in the special page. The sales per software unit data in the special page now has data for all time periods i.e., 1st quarter to 4th quarter, first half to fy cumulative.

That is all for the latest update.
 
This is the latest update.

I have rewritten the code for the annual report stuff or data that is recorded annually for Capcom, Sega, Square Enix and Bandai Namco.

You may notice some differences; I haven't decided whether to remove the zero values that occur in the special page data from annual reports.

The events calendar has been updated with 14 of 22 companies that will be having their earnings results during July/August. Earnings results is starting as early as July 20th with Ubisoft.

That is all for the latest update.
 
Back
Top Bottom