Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Reactivate In Extremo concert #55

Merged
merged 16 commits into from Apr 20, 2021
Merged

Reactivate In Extremo concert #55

merged 16 commits into from Apr 20, 2021

Conversation

szapp
Copy link
Collaborator

@szapp szapp commented Apr 12, 2021

Deutscher Text unten


The In Extremo concert is disabled in some versions of the game due to legal concerns. Depending on the circumstances, this fix allows to re-enable it.

Disclaimer

This fix of the G1CP does not add the concert, but merely adds the option to re-enable it yourself, provided all necessary files are present in your Gothic installation. The G1CP thereby does not provide any legally questionably files. That means, if your copy of Gothic did not ship the necessary music files and the original code to run the concert, the concert will not be available.

To further avoid any legal ambiguities, the G1CP itself does not re-activate the concert, but only offers the user to enabled it. This necessary action from the user is equivalent to the workload of opening the VDF in their Gothic installation with freely available tools and extracting the WAV file. The G1CP team thereby wants to distance itself from any legal concerns.

Enable the Concert

Given the necessary files and code are present in their exact original form, the concert can be enabled by removing the fix ID (55) from the disabled-list in the Gothic.ini file. Navigate to the System directory of your Gothic installation and open the file Gothic.ini with a text editor. Find the section [G1CP] and remove the 55 from the entry disabled. The concert should now be available in the game, during the second chapter. If not, your installation does not provide the necessary files.

Example (no other disabled fixes)

Before

[G1CP]
disabled=55

After

[G1CP]
disabled=

Example (with other disabled fixes)

If other fixes are disabled, leave them in the list. Exemplary fixes 23 and 144 are disabled here.
Before

[G1CP]
disabled=23,55,144

After

[G1CP]
disabled=23,144


Das In Extremo Konzert ist in manchen Kaufversionen des Spiels aus rechtlichen Gründen deaktiviert. Dieser Fix hier erlaubt es, es unter Umständen wieder zu aktivieren.

Disclaimer

Dieser Fix des G1CP fügt das Konzert nicht hinzu, sondern erlaubt lediglich es selbst wieder zu aktivieren, vorausgesetzt alle erforderlichen Dateien sind in der Gothic Installation vorhanden. Der G1CP stellt daher keinerlei legal fragliche Dateien zur Verfügung. Das bedeutet, wenn eine Installation von Gothic vorliegt, die nicht die nötigen Musikdateien und die originalen Skripte für das Konzert beinhaltet, wird das Konzert auch weiterhin nicht verfügbar sein.

Um weitere rechtliche Unklarheiten auszuschließen, aktiviert der G1CP das Konzert nicht selbst, sondern ermöglicht lediglich, dass der Nutzer es selbst aktivieren kann. Diese nötigen Schritte seitens des Nutzers sind äquivalent zum Arbeitsaufwand, die VDF-Datei in der Gothic Installation mit frei verfügbarer Software zu öffnen und die WAV-Datei zu extrahieren. Damit möchte sich das G1CP Team von möglichen rechtlichen Fragen distanzieren.

Konzert aktivieren

Vorausgesetzt alle nötigen Datein und der relevante Skriptcode sind exakt in ihrer ursprünglichen Form vorhanden, kann das Konzert re-aktiviert werden. Dazu muss die Fix ID (55) aus der Disabled-Liste in der Gothic.ini entfernt werden. Im System Verzeichnis der Gothic Installation befindet sich die Gothic.ini. Mit einem Texteditor lässt sich unter der Sektion [G1CP] die 55 aus dem Eintrag disabled entfernen. Das Konzert sollte daraufhin im zweiten Kapitel des Spiels verfügbar sein. Falls das nicht der Fall ist, beinhaltet diese Gothic Installation nicht die nötigen Dateien.

Beispiel (keine weiteren deaktivierten Fixes)

Vorher

[G1CP]
disabled=55

Nachher

[G1CP]
disabled=

Beispiel (mit weiteren deaktivierten Fixes)

Falls andere Fixes deaktiviert sind, sollten diese einfach in der Liste verbleiben. Hier sind beispielhaft auch 23 und 144 deaktiviert.
Vorher

[G1CP]
disabled=23,55,144

Nacher

[G1CP]
disabled=23,144

@AmProsius AmProsius added validation required language dependent This issue only occurs in certain localizations. labels Jan 6, 2021
@AmProsius AmProsius added this to To Do in v1.0.0 via automation Jan 6, 2021
@catalinstoian
Copy link

catalinstoian commented Jan 24, 2021

//-------- InExtremo vorbereiten --------
//B_InsertInExtremo();

changed to

		//-------- InExtremo vorbereiten --------
		B_InsertInExtremo();

@szapp
Copy link
Collaborator

szapp commented Jan 24, 2021

  • I suppose aside from language, we would need to somehow check if the necessary sound/music files are present in the installation.
  • By adding the line into B_Kapitelwechsel.d the concert would only show up if the patch is installed during the chapter transition.

@szapp szapp added the type: revert on save The fix for this issue impacts the game and should be reverted when saving. label Jan 24, 2021
@AmProsius
Copy link
Owner Author

AmProsius commented Jan 24, 2021

I suppose aside from language, we would need to somehow check if the necessary sound/music files are present in the installation.

As far as I know the sound files are present in every installation.

By adding the line into B_Kapitelwechsel.d the concert would only show up if the patch is installed during the chapter transition.

I don't see a problem there or do you have a better solution?

@AmProsius AmProsius removed this from To Do in v1.0.0 Jan 26, 2021
@AmProsius AmProsius added this to To Do in v1.0.0 Jan 28, 2021
@AmProsius AmProsius removed this from To Do in v1.0.0 Jan 28, 2021
@AmProsius AmProsius added the provided fix This issue has a fix provided in the comments. label Feb 11, 2021
@AmProsius AmProsius added the validation: validated This issue is still present even with Systempack/Union. label Feb 20, 2021
@AmProsius AmProsius changed the title Reactivate In Extremo concert for german language versions Reactivate In Extremo Feb 24, 2021
@AmProsius AmProsius changed the title Reactivate In Extremo Reactivate In Extremo concert Feb 24, 2021
@AmProsius AmProsius added opinionated This issue or this issues' fix is opinionated and not predefined by the scripts. and removed language dependent This issue only occurs in certain localizations. labels Feb 24, 2021
@AmProsius AmProsius added this to To Do in v1.1.0 via automation Mar 5, 2021
@AmProsius AmProsius added this to the v1.1.0 milestone Mar 5, 2021
@szapp szapp added this to Other in Fix templates Mar 17, 2021
@szapp szapp added impl: hook script func This issue requires hooking script functions. impl: modify/analyze script func This issue requires analyzing and/or modifying the bytecode of script functions. compatibility: difficult This issue is difficult to make compatible. labels Mar 17, 2021
@szapp szapp self-assigned this Mar 17, 2021
@szapp
Copy link
Collaborator

szapp commented Apr 12, 2021

Here is a rough draft of how that fix will have to look:

One-time checks (session):

  • Functions exist
    • B_InsertInExtremo
    • B_InExtremoStopMusic
    • B_KillInExtremo
    • B_Kapitelwechsel
  • Variables exist
    • InExtremoPlaying
    • Kapitel
  • NPCs exist (including fans) - make no exceptions: We are only re-enabling it, not re-creating it
    • InExtremo_DrPymonte
    • InExtremo_TheFlail
    • InExtremo_ThomasTheForger
    • InExtremo_Unicorn
    • InExtremo_YellowPfeiffer
    • InExtremo_Lutter
    • InExtremo_Flex
    • IE_397_Announcer
    • Charlotte
    • IEFan1
    • IEFan2
    • IEFan3
    • IEFan4
    • Vlk_580_Grim
  • NPCs' daily routine functions exist
    • Rtn_Start_580
    • Rtn_InExtremo_580
    • Rtn_concert_390
    • Rtn_off_390
    • Rtn_concert_391
    • Rtn_off_391
    • Rtn_concert_392
    • Rtn_off_392
    • Rtn_concert_393
    • Rtn_off_393
    • Rtn_concert_394
    • Rtn_off_394
    • Rtn_concert_395
    • Rtn_off_395
    • Rtn_concert_396
    • Rtn_off_396
    • Rtn_announce_397
    • Rtn_concert_397
    • Rtn_off_397
    • Rtn_announce_398
    • Rtn_concert_398
    • Rtn_off_398
    • Rtn_concert_399
    • Rtn_off_399
    • Rtn_concert_400
    • Rtn_off_400
    • Rtn_concert_401
    • Rtn_off_401
    • Rtn_concert_402
    • Rtn_off_402
  • Grim's dialog DIA_Grim_INEXTREMO exists
  • Content of B_InsertInExtremo is as expected
  • Content of B_InExtremoStopMusic is as expected
  • Content of B_KillInExtremo is as expected
  • Content of DIA_Grim_INEXTREMO_Info is as expected: change of routine
  • Function B_InsertInExtremo is not called in entire code stack
  • Variable InExtremoPlaying is set nowhere outside of B_InsertInExtremo and B_InExtremoStopMusic

One-time checks (world):

  • Waypoints exist
    • "OCR_IE_PYMONTE"
    • "OCR_IE_FLAIL"
    • "OCR_IE_THOMAS"
    • "OCR_IE_UNICORN"
    • "OCR_IE_PFEIFFER"
    • "OCR_IE_LUTTER"
    • "OCR_IE_FLEX"
    • "OCR_AUDIENCE_01"
    • "OCR_AUDIENCE_02"
    • "OCR_AUDIENCE_03"
    • "OCR_CROWD_01"
    • "OCR_CROWD_02"
    • "OCR_CROWD_03"
    • "OCR_CROWD_04"
  • Music VOBs exist
    • "INEXTREMO_IE"
    • "INEXTREMO_MUSIK"
  • From the music VOBs retrieve the filenames and check if they exist

One-time apply (only if all above confirmed)

  • Hook after B_Kapitelwechsel
    • Check if Kapitel == 2 and run apply function
    • Check if Kapitel != 2 and run revert function

Apply

  • Check if Kapitel == 2
  • Check correct world by waypoints (how many are sufficient?)
  • How to check if they are already there? InExtremoPlaying won't help here
  • Do NOT call B_InsertInExtremo but a variant where the NPCs are moved if they exist instead of inserting them
  • Depending on the told state of the dialog DIA_Grim_INEXTREMO_Info
    • Adjust Grim's daily routine
    • Call B_InExtremoStartMusic

Revert

  • Check if fix is applied
  • Check correct world by waypoints (important?)
  • How to check if they are already there? InExtremoPlaying won't help here
  • Call B_InExtremoStopMusic
  • Call B_KillInExtremo

@szapp szapp marked this pull request as draft April 12, 2021 21:46
@szapp
Copy link
Collaborator

szapp commented Apr 12, 2021

  • Test is functional
  • Fix is early work-in-progress

The one-time init function currently takes 38 ms on my computer, which is quite okay, considering its length.

@szapp szapp moved this from To Do to In Progress in v1.1.0 Apr 12, 2021
The implementation is a proof of concept and still very ugly. One
remaining conceptual thing is the restarting of the music on saving.
Because the sound-VOB is disabled on reverting, the music restarts when
saving is complete. This could possibly be adjusted.

Refs #55
@szapp
Copy link
Collaborator

szapp commented Apr 20, 2021

@AmProsius Should be ready to test now!

Copy link
Owner

@AmProsius AmProsius left a comment

Choose a reason for hiding this comment

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

When I save (or load) in front of the stage, the music of the Old Camp starts playing after the fix is reapplied. Then the In Extremo music file also starts again and the two tracks overlap each other.

@AmProsius
Copy link
Owner Author

Everything else works! I don't know if the music can be fixed. If not, we can merge this PR.

@szapp
Copy link
Collaborator

szapp commented Apr 20, 2021

I think we go with it for now. I heard there is a problem with partially overlapping music with the concert anyway, so it might not necessarily a bug of this fix.

@AmProsius AmProsius merged commit d907cc9 into master Apr 20, 2021
v1.1.0 automation moved this from In Progress to Done Apr 20, 2021
@AmProsius AmProsius deleted the bug055 branch April 20, 2021 20:16
szapp added a commit that referenced this pull request Apr 20, 2021
@szapp szapp moved this from Other to Story events in Fix templates Apr 26, 2021
@szapp
Copy link
Collaborator

szapp commented May 4, 2021

@AmProsius There is a wrong comparison in the fix, such that the existence of the variables InExtremoPlaying and Kapitel is not properly checked. I am not sure if this has severe consequences, but it should definitely be fixed.

if (varPlyingId == 1) || (varChaptrId == 1) {
MEM_Info("Necessary variables not found");
return FALSE;
};

changed to (-1 in the comparisons)

    if (varPlyingId == -1) || (varChaptrId == -1) {
        MEM_Info("Necessary variables not found");
        return FALSE;
    };

@szapp szapp added this to To Do in v1.2.0 May 4, 2021
AmProsius added a commit that referenced this pull request May 4, 2021
@AmProsius AmProsius moved this from To Do to Done in v1.2.0 May 4, 2021
szapp added a commit that referenced this pull request May 4, 2021
szapp added a commit that referenced this pull request May 4, 2021
AmProsius added a commit that referenced this pull request May 9, 2021
@szapp szapp moved this from Modify story events to Default gamesave manual in Fix templates Feb 6, 2022
@justtoask
Copy link

(sorry if this is a wrong place to ask) How to activate it in spine?

@AmProsius
Copy link
Owner Author

(sorry if this is a wrong place to ask) How to activate it in spine?

Just follow the steps above. There's no difference in how to play the game (Spine/Steam/Original EXE).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
compatibility: difficult This issue is difficult to make compatible. impl: hook script func This issue requires hooking script functions. impl: modify/analyze script func This issue requires analyzing and/or modifying the bytecode of script functions. opinionated This issue or this issues' fix is opinionated and not predefined by the scripts. provided fix This issue has a fix provided in the comments. type: revert on save The fix for this issue impacts the game and should be reverted when saving. validation: validated This issue is still present even with Systempack/Union.
Projects
Fix templates
Default gamesave manual
v1.1.0
  
Done
v1.2.0
  
Done
Development

Successfully merging this pull request may close these issues.

None yet

4 participants