Themabewertung:
  • 4 Bewertung(en) - 3.5 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Reverse Engineering der NLT II
(Vor 10 Stunden)HenneNWH schrieb: Großartig, ab jetzt gibt es eine baubare schick_clang.



mit meinem build_cl.bat baut er auch irgendwie eine Windows Exe mit der Microsoft-Toolchain - die läuft natürlich nicht besonders gut oder eher garnicht - Direktcrash (was ja zu erwarten war)



Code:
call "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars64.bat"

set cl_run=cl.exe /nologo -c

%cl_run% datseg.cpp
%cl_run% seg001.cpp
%cl_run% seg002.cpp
%cl_run% seg003.cpp
%cl_run% seg004.cpp
%cl_run% seg005.cpp
%cl_run% seg006.cpp
%cl_run% seg007.cpp
%cl_run% seg008.cpp
%cl_run% seg009.cpp
%cl_run% seg010.cpp
%cl_run% seg011.cpp
%cl_run% seg024.cpp
%cl_run% seg025.cpp
%cl_run% seg026.cpp
%cl_run% seg027.cpp
%cl_run% seg028.cpp
%cl_run% seg029.cpp
%cl_run% seg030.cpp
%cl_run% seg031.cpp
%cl_run% seg032.cpp
%cl_run% seg033.cpp
%cl_run% seg034.cpp
%cl_run% seg035.cpp
%cl_run% seg036.cpp
%cl_run% seg037.cpp
%cl_run% seg038.cpp
%cl_run% seg039.cpp
%cl_run% seg040.cpp
%cl_run% seg041.cpp
%cl_run% seg042.cpp
%cl_run% seg043.cpp
%cl_run% seg044.cpp
%cl_run% seg045.cpp
%cl_run% seg046.cpp
%cl_run% seg047.cpp
%cl_run% seg048.cpp
%cl_run% seg049.cpp
%cl_run% seg050.cpp
%cl_run% seg051.cpp
%cl_run% seg052.cpp
%cl_run% seg053.cpp
%cl_run% seg054.cpp
%cl_run% seg055.cpp
%cl_run% seg056.cpp
%cl_run% seg057.cpp
%cl_run% seg058.cpp
%cl_run% seg059.cpp
%cl_run% seg060.cpp
%cl_run% seg061.cpp
%cl_run% seg062.cpp
%cl_run% seg063.cpp
%cl_run% seg064.cpp
%cl_run% seg065.cpp
%cl_run% seg066.cpp
%cl_run% seg067.cpp
%cl_run% seg068.cpp
%cl_run% seg069.cpp
%cl_run% seg070.cpp
%cl_run% seg071.cpp
%cl_run% seg072.cpp
%cl_run% seg073.cpp
%cl_run% seg074.cpp
%cl_run% seg075.cpp
%cl_run% seg076.cpp
%cl_run% seg077.cpp
%cl_run% seg078.cpp
%cl_run% seg079.cpp
%cl_run% seg080.cpp
%cl_run% seg081.cpp
%cl_run% seg082.cpp
%cl_run% seg083.cpp
%cl_run% seg084.cpp
%cl_run% seg085.cpp
%cl_run% seg086.cpp
%cl_run% seg087.cpp
%cl_run% seg088.cpp
%cl_run% seg089.cpp
%cl_run% seg090.cpp
%cl_run% seg091.cpp
%cl_run% seg092.cpp
%cl_run% seg093.cpp
%cl_run% seg094.cpp
%cl_run% seg095.cpp
%cl_run% seg096.cpp
%cl_run% seg097.cpp
%cl_run% seg098.cpp
%cl_run% seg099.cpp
%cl_run% seg100.cpp
%cl_run% seg101.cpp
%cl_run% seg102.cpp
%cl_run% seg103.cpp
%cl_run% seg104.cpp
%cl_run% seg105.cpp
%cl_run% seg106.cpp
%cl_run% seg107.cpp
%cl_run% seg108.cpp
%cl_run% seg109.cpp
%cl_run% seg110.cpp
%cl_run% seg111.cpp
%cl_run% seg112.cpp
%cl_run% seg113.cpp
%cl_run% seg114.cpp
%cl_run% seg115.cpp
%cl_run% seg116.cpp
%cl_run% seg117.cpp
%cl_run% seg118.cpp
%cl_run% seg119.cpp
%cl_run% seg120.cpp
%cl_run% seg121.cpp
%cl_run% seg122.cpp

link /OUT:schickm_cl.exe datseg.obj seg001.obj seg002.obj seg003.obj seg004.obj seg005.obj seg006.obj seg007.obj seg008.obj seg009.obj seg010.obj seg011.obj seg024.obj seg025.obj seg026.obj seg027.obj seg028.obj seg029.obj seg030.obj seg031.obj seg032.obj seg033.obj seg034.obj seg035.obj seg036.obj seg037.obj seg038.obj seg039.obj seg040.obj seg041.obj seg042.obj seg043.obj seg044.obj seg045.obj seg046.obj seg047.obj seg048.obj seg049.obj seg050.obj seg051.obj seg052.obj seg053.obj seg054.obj seg055.obj seg056.obj seg057.obj seg058.obj seg059.obj seg060.obj seg061.obj seg062.obj seg063.obj seg064.obj seg065.obj seg066.obj seg067.obj seg068.obj seg069.obj seg070.obj seg071.obj seg072.obj seg073.obj seg074.obj seg075.obj seg076.obj seg077.obj seg078.obj seg079.obj seg080.obj seg081.obj seg082.obj seg083.obj seg084.obj seg085.obj seg086.obj seg087.obj seg088.obj seg089.obj seg090.obj seg091.obj seg092.obj seg093.obj seg094.obj seg095.obj seg096.obj seg097.obj seg098.obj seg099.obj seg100.obj seg101.obj seg102.obj seg103.obj seg104.obj seg105.obj seg106.obj seg107.obj seg108.obj seg109.obj seg110.obj seg111.obj seg112.obj seg113.obj seg114.obj seg115.obj seg116.obj seg117.obj seg118.obj seg119.obj seg120.obj seg121.obj seg122.obj

und mit dieser feinen build_clang.bat kommt auch eine schöne, abstürzenden Windows EXE heraus

Code:
@echo off

set clang_exe="c:\Program Files\LLVM\bin\clang.exe"
rem set clang_compile=%clang_exe% -c -Wno-deprecated-declarations -Wno-deprecated-register -Wno-format-security -Wno-unused-parameter -Wno-unused-variable -Wall -Wextra -Wpedantic
set clang_compile=%clang_exe% -c -Wno-deprecated-declarations -Wno-deprecated-register

%clang_compile% datseg.cpp
%clang_compile% seg001.cpp
%clang_compile% seg002.cpp
%clang_compile% seg003.cpp
%clang_compile% seg004.cpp
%clang_compile% seg005.cpp
%clang_compile% seg006.cpp
%clang_compile% seg007.cpp
%clang_compile% seg008.cpp
%clang_compile% seg009.cpp
%clang_compile% seg010.cpp
%clang_compile% seg011.cpp
%clang_compile% seg024.cpp
%clang_compile% seg025.cpp
%clang_compile% seg026.cpp
%clang_compile% seg027.cpp
%clang_compile% seg028.cpp
%clang_compile% seg029.cpp
%clang_compile% seg030.cpp
%clang_compile% seg031.cpp
%clang_compile% seg032.cpp
%clang_compile% seg033.cpp
%clang_compile% seg034.cpp
%clang_compile% seg035.cpp
%clang_compile% seg036.cpp
%clang_compile% seg037.cpp
%clang_compile% seg038.cpp
%clang_compile% seg039.cpp
%clang_compile% seg040.cpp
%clang_compile% seg041.cpp
%clang_compile% seg042.cpp
%clang_compile% seg043.cpp
%clang_compile% seg044.cpp
%clang_compile% seg045.cpp
%clang_compile% seg046.cpp
%clang_compile% seg047.cpp
%clang_compile% seg048.cpp
%clang_compile% seg049.cpp
%clang_compile% seg050.cpp
%clang_compile% seg051.cpp
%clang_compile% seg052.cpp
%clang_compile% seg053.cpp
%clang_compile% seg054.cpp
%clang_compile% seg055.cpp
%clang_compile% seg056.cpp
%clang_compile% seg057.cpp
%clang_compile% seg058.cpp
%clang_compile% seg059.cpp
%clang_compile% seg060.cpp
%clang_compile% seg061.cpp
%clang_compile% seg062.cpp
%clang_compile% seg063.cpp
%clang_compile% seg064.cpp
%clang_compile% seg065.cpp
%clang_compile% seg066.cpp
%clang_compile% seg067.cpp
%clang_compile% seg068.cpp
%clang_compile% seg069.cpp
%clang_compile% seg070.cpp
%clang_compile% seg071.cpp
%clang_compile% seg072.cpp
%clang_compile% seg073.cpp
%clang_compile% seg074.cpp
%clang_compile% seg075.cpp
%clang_compile% seg076.cpp
%clang_compile% seg077.cpp
%clang_compile% seg078.cpp
%clang_compile% seg079.cpp
%clang_compile% seg080.cpp
%clang_compile% seg081.cpp
%clang_compile% seg082.cpp
%clang_compile% seg083.cpp
%clang_compile% seg084.cpp
%clang_compile% seg085.cpp
%clang_compile% seg086.cpp
%clang_compile% seg087.cpp
%clang_compile% seg088.cpp
%clang_compile% seg089.cpp
%clang_compile% seg090.cpp
%clang_compile% seg091.cpp
%clang_compile% seg092.cpp
%clang_compile% seg093.cpp
%clang_compile% seg094.cpp
%clang_compile% seg095.cpp
%clang_compile% seg096.cpp
%clang_compile% seg097.cpp
%clang_compile% seg098.cpp
%clang_compile% seg099.cpp
%clang_compile% seg100.cpp
%clang_compile% seg101.cpp
%clang_compile% seg102.cpp
%clang_compile% seg103.cpp
%clang_compile% seg104.cpp
%clang_compile% seg105.cpp
%clang_compile% seg106.cpp
%clang_compile% seg107.cpp
%clang_compile% seg108.cpp
%clang_compile% seg109.cpp
%clang_compile% seg110.cpp
%clang_compile% seg111.cpp
%clang_compile% seg112.cpp
%clang_compile% seg113.cpp
%clang_compile% seg114.cpp
%clang_compile% seg115.cpp
%clang_compile% seg116.cpp
%clang_compile% seg117.cpp
%clang_compile% seg118.cpp
%clang_compile% seg119.cpp
%clang_compile% seg120.cpp
%clang_compile% seg121.cpp
%clang_compile% seg122.cpp

%clang_exe% datseg.obj seg001.obj seg002.obj seg003.obj seg004.obj seg005.obj seg006.obj seg007.obj seg008.obj seg009.obj seg010.obj seg011.obj seg024.obj seg025.obj seg026.obj seg027.obj seg028.obj seg029.obj seg030.obj seg031.obj seg032.obj seg033.obj seg034.obj seg035.obj seg036.obj seg037.obj seg038.obj seg039.obj seg040.obj seg041.obj seg042.obj seg043.obj seg044.obj seg045.obj seg046.obj seg047.obj seg048.obj seg049.obj seg050.obj seg051.obj seg052.obj seg053.obj seg054.obj seg055.obj seg056.obj seg057.obj seg058.obj seg059.obj seg060.obj seg061.obj seg062.obj seg063.obj seg064.obj seg065.obj seg066.obj seg067.obj seg068.obj seg069.obj seg070.obj seg071.obj seg072.obj seg073.obj seg074.obj seg075.obj seg076.obj seg077.obj seg078.obj seg079.obj seg080.obj seg081.obj seg082.obj seg083.obj seg084.obj seg085.obj seg086.obj seg087.obj seg088.obj seg089.obj seg090.obj seg091.obj seg092.obj seg093.obj seg094.obj seg095.obj seg096.obj seg097.obj seg098.obj seg099.obj seg100.obj seg101.obj seg102.obj seg103.obj seg104.obj seg105.obj seg106.obj seg107.obj seg108.obj seg109.obj seg110.obj seg111.obj seg112.obj seg113.obj seg114.obj seg115.obj seg116.obj seg117.obj seg118.obj seg119.obj seg120.obj seg121.obj seg122.obj -o schickm_clang.exe
Zitieren
Um die Abstürze zu vermeiden solltest du die SCHICK.DAT und die GAMES.NAM noch nach src/schick kopieren. Die Namen müssen groß sein.
Zitieren
ich gerade gemerkt das ich gar keine CD ROM Version 3.02 habe - glaube das ist der Stand der hier verwendet wird - und so "leicht" lässt sich der scheinbar auch nicht besorgen aus dem Internet
Zitieren
(Vor 6 Stunden)llm schrieb: ich gerade gemerkt das ich gar keine CD ROM Version 3.02 habe - glaube das ist der Stand der hier verwendet wird - und so "leicht" lässt sich der scheinbar auch nicht besorgen aus dem Internet

Ist bei GOG gerade für 1,39 € mit Sternenschweif zusammen im Sale. Da müsste die V3.02 dabei sein. EDIT: V3.02 ist in Deutsch an Bord, habs gerade überprüft.
-> https://www.gog.com/de/game/realms_of_arkania_1_2
Zum NLT-Wiki: http://nlt-wiki.crystals-dsa-foren.de/doku.php , Zum Drakensang-Wiki: http://drakensang-wiki.crystals-dsa-foren.de/doku.php
KEIN SUPPORT per E-Mail, PN, IRC, ICQ! Lest die Regeln und benutzt das Forum für sämtliche Anfragen! KEINE persönliche Betreuung!
Zitieren
(Vor 7 Stunden)HenneNWH schrieb: Um die Abstürze zu vermeiden solltest du die SCHICK.DAT und die GAMES.NAM noch nach src/schick kopieren. Die Namen müssen groß sein.

bei meiner schickm_cl.exe (also mit MSVC cl.exe gebaut) und schickm_clang.exe (mit windows clang.exe gebaut)

Code:
WEATHER1=5, WEATHER2=3 -> Heutige Wetter-Anpassung der Schiffs-Geschwindigkeiten: 157,5%.

und dann passiert nix mehr
Zitieren
(Vor 6 Stunden)Crystal schrieb:
(Vor 6 Stunden)llm schrieb: ich gerade gemerkt das ich gar keine CD ROM Version 3.02 habe - glaube das ist der Stand der hier verwendet wird - und so "leicht" lässt sich der scheinbar auch nicht besorgen aus dem Internet

Ist bei GOG gerade für 1,39 € mit Sternenschweif zusammen im Sale. Da müsste die V3.02 dabei sein. EDIT: V3.02 ist in Deutsch an Bord, habs gerade überprüft.
-> https://www.gog.com/de/game/realms_of_arkania_1_2

gekauft!
Zitieren
Das waren die besten 1,39€ die du seit langem ausgegeben hast!
Zitieren
Für 1,09 € gibt es Riva dazu, dann ist die Trilogie komplett. :)
-> https://www.gog.com/de/game/realms_of_arkania_3
Zum NLT-Wiki: http://nlt-wiki.crystals-dsa-foren.de/doku.php , Zum Drakensang-Wiki: http://drakensang-wiki.crystals-dsa-foren.de/doku.php
KEIN SUPPORT per E-Mail, PN, IRC, ICQ! Lest die Regeln und benutzt das Forum für sämtliche Anfragen! KEINE persönliche Betreuung!
Zitieren
Es gibt für jeden Helden einen Zähler, der seine belegten Inventar-Slots zählt (hero.num_inv_slots_used im aktuellen BrightEyes). Es ist bekannt, dass dieser slot counter nicht immer korrekt aktualisiert wird. Henne hat schon eine Stelle gefixt, wo zwei Stapel gleichartiger Gegenstände zusammengeführt werden. Dabei wird ein Slot frei, aber es wurde vergessen, den counter zu erhöhen. Aber da liegt wohl noch mehr im Argen.

Ich habe deswegen gerade in relevante Code-Stellen reingeschaut und dabei gemerkt, dass mir schon die Bedeutung dieses counters nicht ganz klar ist. Es gibt zwei denkbare Varianten:
  • Es werden nur die belegten Inventarslots im Rucksack (also die 16 Slots auf der linken Seite) gezählt.
  • Es werden auch die 7 Slots am Körper (Kopf, Oberkörper, Hände usw.) mit einbezogen.
So, wie der Zähler aktualisiert wird, schaut es eher nach der zweiten Variante aus. Aber schaut man sich an, wie die Information benutzt wird, nämlich z.B. um zu ermitteln, ob der Held Platz für einen neuen Gegenstand hat (der dann ja erstmal im Rucksack landet), bräuchte man den counter in der ersten Variante.

Weiß jemand, wie sich dieser Widerspruch auflöst? Oder haben wir es hier mit einer weiteren Kostprobe Attic'scher Programmierkunst zu tun?
Zitieren
Mit dem Entfernen von am Körper getragenen Gegenständen (mir fällt da jetzt nur der Sumpf ein) hat es nichts zu tun?
"Alrik war durstig und hat getrunken."
Zitieren
(Vor 3 Stunden)llm schrieb:
(Vor 7 Stunden)HenneNWH schrieb: Um die Abstürze zu vermeiden solltest du die SCHICK.DAT und die GAMES.NAM noch nach src/schick kopieren. Die Namen müssen groß sein.

bei meiner schickm_cl.exe (also mit MSVC cl.exe gebaut) und schickm_clang.exe (mit windows clang.exe gebaut)

Code:
WEATHER1=5, WEATHER2=3 -> Heutige Wetter-Anpassung der Schiffs-Geschwindigkeiten: 157,5%.

und dann passiert nix mehr

Genauso ist der aktuelle Stand. Das Spiel läuft, befindet sich allerdings noch im Kartoffelmodus.
Zitieren
(Vor 2 Stunden)siebenstreich schrieb: Es gibt für jeden Helden einen Zähler, der seine belegten Inventar-Slots zählt (hero.num_inv_slots_used im aktuellen BrightEyes). Es ist bekannt, dass dieser slot counter nicht immer korrekt aktualisiert wird. Henne hat schon eine Stelle gefixt, wo zwei Stapel gleichartiger Gegenstände zusammengeführt werden. Dabei wird ein Slot frei, aber es wurde vergessen, den counter zu erhöhen. Aber da liegt wohl noch mehr im Argen.

Ich habe deswegen gerade in relevante Code-Stellen reingeschaut und dabei gemerkt, dass mir schon die Bedeutung dieses counters nicht ganz klar ist. Es gibt zwei denkbare Varianten:
  • Es werden nur die belegten Inventarslots im Rucksack (also die 16 Slots auf der linken Seite) gezählt.
  • Es werden auch die 7 Slots am Körper (Kopf, Oberkörper, Hände usw.) mit einbezogen.
So, wie der Zähler aktualisiert wird, schaut es eher nach der zweiten Variante aus. Aber schaut man sich an, wie die Information benutzt wird, nämlich z.B. um zu ermitteln, ob der Held Platz für einen neuen Gegenstand hat (der dann ja erstmal im Rucksack landet), bräuchte man den counter in der ersten Variante.

Weiß jemand, wie sich dieser Widerspruch auflöst? Oder haben wir es hier mit einer weiteren Kostprobe Attic'scher Programmierkunst zu tun?

Hab gerade einen Test gemacht: Diese Variable hat bei einem vollbepackten Helden den Wert 23.
Zitieren




Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste