Skip to content

feat(intro): Add short Intro Logo for The Super Hackers team#2267

Open
xezon wants to merge 5 commits intoTheSuperHackers:mainfrom
xezon:xezon/add-new-intro
Open

feat(intro): Add short Intro Logo for The Super Hackers team#2267
xezon wants to merge 5 commits intoTheSuperHackers:mainfrom
xezon:xezon/add-new-intro

Conversation

@xezon
Copy link

@xezon xezon commented Feb 7, 2026

Merge with Rebase

This change has 5 commits:

  1. Move intro related code to new file and class
  2. Simplify the intro state machine to make it easier to modify and extend
  3. Remove the non functional copyright string and simplify the EA logo movie code. This also shortens the effective EA logo duration by 3 to 5 seconds.
  4. Remove the superfluous legal page from intro sequence, which would have lasted 4 seconds after Sizzle video but was practically never visible except if the mem pass would have failed (relevant for 2000 era computers). I think the condition was actually meant to be the inverse...
  5. Add new intro screen for The Super Hacker team

Old Intro Sequence

  1. EA Logo, 3 seconds, non skippable
  2. Black Screen, 3-5 seconds (*1), non skippable
  3. Sizzle Video, skippable
  4. Legal Page, 4 seconds, practically never shown
  5. Shell Map load screen

(*1) I did not measure how long the black screen was. According to code somewhere between 3 to 5 seconds.

New Intro Sequence

  1. EA Logo, 3 seconds, non skippable
  2. Black Screen, 800 milliseconds, non skippable
  3. The Super Hackers Logo, 3 seconds, non skippable
  4. Black Screen, 1 second, non skippable
  5. Sizzle Video, skippable
  6. Shell Map load screen
image

TODO

  • Replicate in Generals
  • Add pull id to commit titles
  • Verify each commit compiles individually

@xezon xezon added Art Is art related Enhancement Is new feature or request Minor Severity: Minor < Major < Critical < Blocker Gen Relates to Generals ZH Relates to Zero Hour Refactor Edits the code with insignificant behavior changes, is never user facing labels Feb 7, 2026
@greptile-apps
Copy link

greptile-apps bot commented Feb 7, 2026

Greptile Summary

This PR refactors the intro sequence handling by extracting it into a dedicated Intro class, removing non-functional copyright display code, eliminating the legal page that was practically never shown, and adding a new 3-second logo screen for The Super Hackers team.

Major changes:

  • Created new Intro class with clean state machine to manage intro sequence (IntroState_StartIntroState_EALogoMovieIntroState_TheSuperHackersWaitIntroState_TheSuperHackersIntroState_SizzleMovieWaitIntroState_SizzleMovieIntroState_Done)
  • Removed Display::playLogoMovie() and associated copyright string rendering that never worked correctly
  • Removed legal page window that was only shown when memory pass failed (2000-era computers)
  • Removed obsolete m_afterIntro flag from GlobalData class, simplifying state management
  • Shortened EA logo effective duration by removing 3-5 second black screen delay
  • New intro sequence: EA Logo (3s) → Black (800ms) → Super Hackers Logo (3s) → Black (1s) → Sizzle Video (skippable)

Confidence Score: 5/5

  • Safe to merge - well-structured refactoring with no logical issues
  • Clean refactoring that improves code organization, all previously reported issues have been addressed (timing overflow fixed, state machine verified), removed dead code, and maintains backward compatibility with command-line flags
  • No files require special attention

Important Files Changed

Filename Overview
Core/GameEngine/Include/GameClient/Intro.h New header defining the Intro class with state machine for managing intro sequence
Core/GameEngine/Source/GameClient/Intro.cpp Implementation of Intro class with EA logo, Super Hackers logo, and sizzle movie handling
GeneralsMD/Code/GameEngine/Source/GameClient/Display.cpp Removed playLogoMovie() implementation and copyright string handling logic
GeneralsMD/Code/GameEngine/Source/GameClient/GameClient.cpp Replaced old intro logic with new Intro class, removing legal page and simplifying flow

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    Start[IntroState_Start] --> CheckFlags{Check Allowed States}
    CheckFlags --> |m_playIntro == true| EALogo[IntroState_EALogoMovie<br/>Play EA Logo 3s]
    CheckFlags --> |m_playIntro == false<br/>m_playSizzle == true| SizzleWait
    CheckFlags --> |Both false| Done
    
    EALogo --> TSHWait[IntroState_TheSuperHackersWait<br/>Black Screen 800ms]
    TSHWait --> TSH[IntroState_TheSuperHackers<br/>Super Hackers Logo 3s<br/>with fade in/out]
    TSH --> SizzleWait[IntroState_SizzleMovieWait<br/>Black Screen 1000ms]
    
    SizzleWait --> |m_playSizzle == true| Sizzle[IntroState_SizzleMovie<br/>Play Sizzle Video<br/>skippable]
    SizzleWait --> |m_playSizzle == false| Done
    Sizzle --> Done[IntroState_Done<br/>Show Shell Map]
    
    Done --> End((End Intro))
Loading

Last reviewed commit: 12e53a2

Copy link

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

9 files reviewed, 4 comments

Edit Code Review Agent Settings | Greptile

@greptile-apps
Copy link

greptile-apps bot commented Feb 7, 2026

Additional Comments (1)

GeneralsMD/Code/GameEngine/Source/GameClient/GameClient.cpp
Intro can block startup

GameClient::update() only shows the shell (TheShell->showShellMap/showShell) after m_intro->isDone(). With the new Intro implementation, if the global flags disable both intro and sizzle (m_playIntro==false and m_playSizzle==false) and m_afterIntro is not pre-set, Intro never reaches Done (see IntroState_Start handling), so the game can get stuck in the intro phase and never show the shell. This previously worked because GameEngine::init() forced m_afterIntro = TRUE when m_playIntro was false.

Fix by making Intro immediately become done when there are no enabled states, or by preserving the old m_afterIntro initialization behavior.

Prompt To Fix With AI
This is a comment left during a code review.
Path: GeneralsMD/Code/GameEngine/Source/GameClient/GameClient.cpp
Line: 514:531

Comment:
**Intro can block startup**

`GameClient::update()` only shows the shell (`TheShell->showShellMap/showShell`) after `m_intro->isDone()`. With the new `Intro` implementation, if the global flags disable both intro and sizzle (`m_playIntro==false` and `m_playSizzle==false`) and `m_afterIntro` is not pre-set, `Intro` never reaches `Done` (see `IntroState_Start` handling), so the game can get stuck in the intro phase and never show the shell. This previously worked because `GameEngine::init()` forced `m_afterIntro = TRUE` when `m_playIntro` was false.

Fix by making `Intro` immediately become done when there are no enabled states, or by preserving the old `m_afterIntro` initialization behavior.

How can I resolve this? If you propose a fix, please make it concise.

@xezon xezon force-pushed the xezon/add-new-intro branch from 999721b to 0f278e6 Compare February 7, 2026 14:15
@xezon xezon force-pushed the xezon/add-new-intro branch from 0f278e6 to 1a738f7 Compare February 7, 2026 16:19
Copy link

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

4 files reviewed, 2 comments

Edit Code Review Agent Settings | Greptile

@helmutbuhler
Copy link

Wouldn't it be more appropriate to show the Superhackers stuff in the credits menu? As is this would imply that the whole game is made by us. I don't think it would be fair to show our names more prominently than the original developers.

@xezon
Copy link
Author

xezon commented Feb 7, 2026

Wouldn't it be more appropriate to show the Superhackers stuff in the credits menu? As is this would imply that the whole game is made by us. I don't think it would be fair to show our names more prominently than the original developers.

Maybe remove all user names from this Intro and just show the Team name + url?

We can also clarify "Edited by ..."

@helmutbuhler
Copy link

Wouldn't it be more appropriate to show the Superhackers stuff in the credits menu? As is this would imply that the whole game is made by us. I don't think it would be fair to show our names more prominently than the original developers.

Maybe remove all user names from this Intro and just show the Team name + url?

We can also clarify "Edited by ..."

I wouldn't add anything to the intro. I don't think it's necessary to remind the player every time the game starts who made the patch. Maybe just add a tiny note on the shellmap screen below the gamename "patched by Superhackers" or something like that.

It's nice though that the 3-5 seconds black screen is removed here!

@Caball009
Copy link

Caball009 commented Feb 8, 2026

I didn't even know what the 'black screen' was when I saw this PR, because I have renamed the files for the EA logo and sizzle and I don't see it. This makes the game launch faster, and saves me 5+ seconds every time I launch the game. I strongly dislike changing anything that would unnecessarily increase the launch time for me as developer. I'm ok with it if I can skip it with some command line.

That said, I like the new intro.

@LegionnaireG
Copy link

LegionnaireG commented Feb 8, 2026

I don't think people will understand what it means if the intro screen is this plain. On the intro, maybe add 3 to 5 sentences with the key achievements of TheSuperHackers. Maybe something like:

  We've patched up the game to bring you:
  - Improving game stability
  - Unlocked 60+ FPS for single player
  - Significant reduction in mismatches for multiplayer
  - Higher graphics preset
  - Vulnerability fixes

@tintinhamans
Copy link

I don't think people will understand what it means if the intro screen is this plain. On the intro, maybe add 3 to 5 sentences with the key achievements of TheSuperHackers. Maybe something like:

  We've patched up the game to bring you:
  - Improving game stability
  - Unlocked 60+ FPS for single player
  - Significant reduction in mismatches for multiplayer
  - Higher graphics preset
  - Vulnerability fixes

I feel like adding too much text won't really be very useful given the fact that it's only shown for 3 seconds.

@xezon
Copy link
Author

xezon commented Feb 8, 2026

I feel like adding too much text won't really be very useful given the fact that it's only shown for 3 seconds.

I agree with this sentiment.

What we can add is a "Improved by" on top, to clarify that this Author has improved the game. This is very simple and broad.

@xezon
Copy link
Author

xezon commented Feb 9, 2026

When this is merged I will make a follow up to skip the entire intro sequence with a single ESC press. This will alleviate any waiting pains for impatient users.

@xezon xezon force-pushed the xezon/add-new-intro branch from 1a738f7 to 29b1ce7 Compare February 11, 2026 19:46
@xezon
Copy link
Author

xezon commented Feb 11, 2026

Improvements applied according to feedbacks:

  • Removed all individual contributor names (to be shown in Credits Menu instead)
  • Replaced github url with domain name
  • Added pretext to clarify that we did not built the game, but improved it
image

Copy link

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

12 files reviewed, 1 comment

Edit Code Review Agent Settings | Greptile

@greptile-apps
Copy link

greptile-apps bot commented Feb 11, 2026

Additional Comments (1)

GeneralsMD/Code/GameEngine/Source/GameClient/GameClient.cpp
Missing cleanup of m_intro in destructor - potential memory leak if GameClient is destroyed before intro completes.

	delete m_intro;
	m_intro = nullptr;
Prompt To Fix With AI
This is a comment left during a code review.
Path: GeneralsMD/Code/GameEngine/Source/GameClient/GameClient.cpp
Line: 119:119

Comment:
Missing cleanup of `m_intro` in destructor - potential memory leak if `GameClient` is destroyed before intro completes.

```suggestion
	delete m_intro;
	m_intro = nullptr;
```

How can I resolve this? If you propose a fix, please make it concise.

@xezon xezon force-pushed the xezon/add-new-intro branch from 29b1ce7 to 9c82551 Compare February 11, 2026 19:55
@xezon xezon requested a review from tintinhamans February 11, 2026 19:58
Copy link

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

12 files reviewed, 1 comment

Edit Code Review Agent Settings | Greptile

@xezon
Copy link
Author

xezon commented Feb 11, 2026

Maybe text can be made a bit bigger.

@fbraz3
Copy link

fbraz3 commented Feb 13, 2026

A suggestion: the credits screen would display all contributors names.

Something like:

# TheSuperHackers Team

Name 1 - Role
Name 2 - Role
Name 3 - Role
......

# Individual Contributors

Name 4 - 100 commits
Name 5 - 95 commits
.....

# EA games
......
......
......

The git summary command from Git Extras can be used to generate the individual contributors report and add it dinamically on build time.
https://github.com/tj/git-extras/blob/main/Commands.md#git-summary

@xezon xezon force-pushed the xezon/add-new-intro branch from dc44ab3 to 0f958d9 Compare February 22, 2026 09:45
@xezon
Copy link
Author

xezon commented Feb 22, 2026

Text was made bigger. And font scaling was made strict with factor 1.0. It will always look the same on any resolution, independent of Language.ini setups.

image

@xezon xezon force-pushed the xezon/add-new-intro branch from 0f958d9 to 12e53a2 Compare February 24, 2026 21:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Art Is art related Enhancement Is new feature or request Gen Relates to Generals Minor Severity: Minor < Major < Critical < Blocker Refactor Edits the code with insignificant behavior changes, is never user facing ZH Relates to Zero Hour

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants