feat(intro): Add short Intro Logo for The Super Hackers team#2267
feat(intro): Add short Intro Logo for The Super Hackers team#2267xezon wants to merge 6 commits intoTheSuperHackers:mainfrom
Conversation
|
| Filename | Overview |
|---|---|
| Core/GameEngine/Include/GameClient/Intro.h | New header for the Intro class; uses #pragma once, correct copyright for a new community file, all methods correctly placed in public/private sections. |
| Core/GameEngine/Source/GameClient/Intro.cpp | Core intro state machine; previously-reported bugs fixed. One remaining concern: the fade-out timer condition may underflow due to unsigned arithmetic when the wait has already expired. |
| GeneralsMD/Code/GameEngine/Include/GameClient/GameClient.h | Added Intro forward declaration and m_intro member; straightforward integration. |
| GeneralsMD/Code/GameEngine/Source/GameClient/GameClient.cpp | Intro lifecycle (construction, update, draw, deletion) wired correctly into the GameClient loop. |
| GeneralsMD/Code/GameEngine/Source/Common/CommandLine.cpp | Headless/replay/nologo command-line paths correctly disable both m_playIntro and m_playSizzle. |
| GeneralsMD/Code/GameEngine/Include/Common/GlobalData.h | m_afterIntro removed, m_playIntro/m_playSizzle/m_allowExitOutOfMovies retained; no issues. |
| Core/GameEngine/CMakeLists.txt | Intro.h and Intro.cpp added to the shared core engine build sources correctly. |
Flowchart
%%{init: {'theme': 'neutral'}}%%
flowchart TD
Start([IntroState_Start]) --> |enterNextState| EA[IntroState_EALogoMovie\ndoEALogoMovie\nplayMovie EALogoMovie]
EA --> |movie ends| TSHWait[IntroState_TheSuperHackersWait\ndoAsyncWait 800ms]
TSHWait --> |wait expires| TSH[IntroState_TheSuperHackers\ndoTheSuperHackers\ndoAsyncWait 3000ms]
TSH --> |wait expires| SizzleWait[IntroState_SizzleMovieWait\ndoAsyncWait 1000ms]
SizzleWait --> |wait expires| Sizzle[IntroState_SizzleMovie\ndoSizzleMovie\nplayMovie Sizzle]
Sizzle --> |movie ends| Done[IntroState_Done\ndoPostIntro\nm_breakTheMovie=TRUE]
Done --> Shell([Shell Map loads])
style TSH fill:#2d6a4f,color:#fff
style Done fill:#444,color:#fff
Prompt To Fix All With AI
This is a comment left during a code review.
Path: Core/GameEngine/Source/GameClient/Intro.cpp
Line: 272
Comment:
**Fade-out check fires indefinitely after wait expires**
`timeGetTime() + fadeOutMs > m_waitUntilMs` is always true once the timer has expired (i.e. once `timeGetTime() > m_waitUntilMs`), so the fade-out branch will keep running on every subsequent draw call. The condition is semantically inverted from what you probably want: "start fade-out when there are `fadeOutMs` milliseconds *remaining*". Additionally, `m_waitUntilMs` and `timeGetTime()` are both `UnsignedInt`, so `timeGetTime() + fadeOutMs` can overflow. The correct formulation checks remaining time via subtraction:
```suggestion
if (m_waitUntilMs - timeGetTime() < (UnsignedInt)fadeOutMs)
```
Note: when `timeGetTime() > m_waitUntilMs` the subtraction wraps, so you may also want to guard with an explicit expiry check first.
How can I resolve this? If you propose a fix, please make it concise.Reviews (11): Last reviewed commit: "fixup! feat(intro): Add short Intro Logo..." | Re-trigger Greptile
Additional Comments (1)
Fix by making Prompt To Fix With AIThis 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. |
999721b to
0f278e6
Compare
0f278e6 to
1a738f7
Compare
|
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! |
|
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. |
|
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: |
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. |
|
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. |
1a738f7 to
29b1ce7
Compare
Additional Comments (1)
Prompt To Fix With AIThis 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. |
29b1ce7 to
9c82551
Compare
|
Maybe text can be made a bit bigger. |
|
A suggestion: the credits screen would display all contributors names. Something like: The |
dc44ab3 to
0f958d9
Compare
0f958d9 to
12e53a2
Compare
12e53a2 to
832f3d8
Compare
|
How about some old school ASCII text? Like the Atari days. |
832f3d8 to
f3a985c
Compare
Maybe is a bit difficult to read. Also makes it look like hackware. Rebased. |
|
I've checked this locally and it rebases cleanly onto the current main branch with no conflicts. LGTM for merging (I think the pretext of Additionally, I wonder if instead of hardcoding this into the game engine, wouldn't it be better to create an external file like the original game intro |
|
We cannot put a BIK video because it would not work in forks of this project and requires a data patch. The intro is intentionally hard coded, because it is not meant to be changed, other than the localization. |
…movie code (#2267)
f3a985c to
bf25fd5
Compare



Merge with Rebase
This change has 5 commits:
Old Intro Sequence
(*1) I did not measure how long the black screen was. According to code somewhere between 3 to 5 seconds.
New Intro Sequence
TODO