Skip to content

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

Open
xezon wants to merge 8 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 8 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 Overview

Greptile Summary

Refactored intro sequence into dedicated Intro class with cleaner state machine design. The PR extracts scattered intro logic from GameClient, Display, and W3DDisplay into a single cohesive class (Core/GameEngine/Source/GameClient/Intro.cpp), improving maintainability and adding a new "The Super Hackers" logo screen between EA logo and Sizzle video.

Major Changes:

  • Created new Intro class with state machine managing EA logo → custom logo → Sizzle video sequence
  • Removed obsolete playLogoMovie() method and copyright string display logic from Display class
  • Removed m_afterIntro flag from GlobalData, simplifying state tracking
  • New intro screen displays "The Super Hackers" branding with fade-in/fade-out effects
  • Shortened black screen delays and removed non-functional legal page (practically never shown)

Code Quality:

  • Clean state machine pattern with flag-based state filtering
  • Proper memory management in DisplayEntity destructor
  • Follows repository style (GPL headers, #pragma once, nullptr usage)
  • Well-documented timing constants and fade logic

Confidence Score: 5/5

  • This PR is safe to merge with minimal risk
  • Well-structured refactoring with proper encapsulation, memory management, and state machine design. All previous review concerns have been addressed (timing is correct at 3000ms, state machine logic confirmed by developer). Code follows repository conventions and removes obsolete complexity while adding the requested feature cleanly.
  • No files require special attention

Important Files Changed

Filename Overview
Core/GameEngine/Include/GameClient/Intro.h New header for intro sequence class with proper GPL header and state machine design
Core/GameEngine/Source/GameClient/Intro.cpp New implementation of intro sequence with state machine, fade effects, and display entities
GeneralsMD/Code/GameEngine/Source/GameClient/GameClient.cpp Replaced inline intro logic with new Intro class, simplified state management
GeneralsMD/Code/GameEngine/Source/GameClient/Display.cpp Removed playLogoMovie() implementation and copyright display logic
GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DDisplay.cpp Replaced copyright display string rendering with GameClient::draw() call

Sequence Diagram

sequenceDiagram
    participant GC as GameClient
    participant I as Intro
    participant D as Display
    participant W as W3DDisplay

    GC->>I: new Intro()
    I->>I: Set allowed state flags based on m_playIntro and m_playSizzle
    
    loop Game Update Loop
        GC->>I: update()
        alt Movie not playing and wait expired
            I->>I: enterNextState()
            alt IntroState_EALogoMovie
                I->>D: playMovie("EALogoMovie")
            else IntroState_TheSuperHackersWait
                I->>I: doAsyncWait(800ms)
            else IntroState_TheSuperHackers
                I->>I: doTheSuperHackers() - setup display entities
                I->>I: doAsyncWait(3000ms)
            else IntroState_SizzleMovieWait
                I->>I: doAsyncWait(1000ms)
            else IntroState_SizzleMovie
                I->>D: playMovie("Sizzle")
            else IntroState_Done
                I->>I: doPostIntro() - set exit flags
            end
        end
        
        alt Intro not done
            GC->>D: UPDATE()
            D->>W: draw()
            W->>GC: DRAW()
            GC->>I: draw()
            I->>I: drawDisplayEntities() with fade effects
        else Intro done
            GC->>I: delete intro
            GC->>GC: Show shell map
        end
    end
Loading

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 sumary 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

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