Wurde AoE in Assembler geschrieben? - Stimmt das wirklich?!
- Assembler-Code in AoE und AoK: Es wurden etwa 13.000 Zeilen x86-32-Bit-Assembler-Code geschrieben. Der Großteil davon, rund 11.500 Zeilen, gehörte zum „Rendering-Kern“, der SLP-Sprites auf verschiedene Weise zeichnete.
- Kompilierung des Assembler-Codes: Die
.asm-Dateien wurden mit Microsoft Macro Assembler 6.1 zu .obj-Dateien „kompiliert“.
- Inline-Assembler in C++-Code: Der Compiler unterstützte „Inline-Assembler“, sodass innerhalb von Funktionen Assembler-Codeblöcke mit dem Schlüsselwort
__asm { } hinzugefügt werden konnten.
- Leistungssteigerung des Rendering-Kerns: Der mit Assembler geschriebene Rendering-Kern bot beim Zeichnen von Sprites eine etwa zehnmal höhere Geschwindigkeit als die C++-Referenzimplementierung.
- Technisches Design des Rendering-Kerns: Das Design berücksichtigte Cache-Architektur und UV-Pipelines und nutzte die Eigenschaften von Pentium-Prozessoren aus.
- Assembler-Code in der AoK:HD Edition: Auch in der AoK:HD Edition, einem 32-Bit-Spiel, wurde Assembler-Code verwendet.
- Neuschreibung in C++ für die Definitive Editions: In den Definitive Editions, die 64-Bit-Programme sind, wurden die Assembler-Funktionen in C++ neu geschrieben.
AoE-Community und Ressourcen
- Livestreams: Liste von AoE-bezogenen Livestreams auf Twitch und Facebook in verschiedenen Sprachen.
- Online-Spiel: Verschiedene Versionen des Spiels, einschließlich Age of Empires 2 Definitive Edition, können über Steam und den Microsoft Store gespielt werden.
- Aktueller Patch: Informationen zum Patch, aktualisiert am 26. Juli 2023.
- Turniere und Events: Turnierinformationen über AoEZone, AoE2 Liquipedia und einen Event-Kalender.
- Community-Seiten: Links zu verschiedenen Community-Seiten wie der offiziellen Age-of-Empires-Seite, Foren, Discord und AoK Heaven.
- Statistiken zu Einheiten und Gebäuden: Wiki- und Ressourcenlinks mit Informationen zu Einheiten und Kontern, Bugfixes, Spieltipps und Patch-Informationen.
- YouTube-Kanäle: Liste des offiziellen Kanals und bekannter AoE2-YouTuber.
Meinung von GN⁺
- Bedeutung von Assembler-Code: In den frühen Versionen der AoE-Serie hatte Assembler-Code großen Einfluss auf die Leistung des Spiels. Insbesondere bei der Grafikverarbeitung ermöglichte er Optimierungen, die mit modernen Hochsprachen nur schwer zu erreichen waren.
- Auswirkungen des technischen Fortschritts: Mit der Zeit verringerte sich durch die Entwicklung von 64-Bit-Compilern und die Einführung von Multicore-Verarbeitung die Notwendigkeit für Assembler-Code. Das zeigt, wie sich Fortschritte bei Programmiersprachen und Hardware auf die Softwareentwicklung auswirken.
- Rolle der Community: Die AoE-Community spielt eine wichtige Rolle für die anhaltende Popularität und Weiterentwicklung des Spiels. Durch vielfältige Ressourcen und Diskussionen bietet sie Fans eine Plattform, um ihre Leidenschaft für das Spiel zu teilen und Wissen auszutauschen.
1 Kommentare
Hacker-News-Kommentare
Ein Hacker-News-Nutzer teilte seine Erfahrung damit, 1999–2000 Konami-Spiele von der PSX auf den PC portiert zu haben. Der in C geschriebene Code enthielt viele
#ifdef-Blöcke mit Inline-Assembly, wobei der ursprüngliche C-Code erhalten blieb. Dieser ursprüngliche C-Code habe bei der Portierung enorm geholfen. Außerdem erwähnte er seine Arbeit an Softwareentwicklung für Intels Katmai-Prozessor unter Verwendung von SIMD-Instruktionen sowie Assembly-Optimierungen. Dabei sei Intels VTune eine große Hilfe gewesen. Er erinnerte sich jedoch auch daran, dass in Assembly geschriebener Code manchmal langsamer war als der vom Compiler erzeugte Code.Ein anderer Nutzer erwähnte NAC5, ein großes derzeit in Berlin stattfindendes Turnier für "Age of Empires 2" (AoE2), und teilte dazu einen relevanten Link.
Unter Berufung auf ein Entwicklerinterview wurde die Meinung geäußert, dass ein Spiel nicht veröffentlicht werden sollte, wenn man schon vor dem Release weiß, dass ein Patch nötig sein wird.
Es wurde erwähnt, dass eine der Techniken zur Beschleunigung von "Age of Empires" bei einem Mittagessen mit dem iD-Software-Programmierer und Optimierungsexperten Michael Abrash besprochen wurde; zugleich wurde Bedauern über den Verlust freier, spontaner Interaktionen durch das Internet ausgedrückt.
Es wurde die erstaunliche Tatsache geteilt, dass ein mit Assembly geschriebener Grafik-Kern im Vergleich zu C++ eine etwa zehnfache Beschleunigung beim Zeichnen von Sprites erreichte.
Es wurde die Ansicht geäußert, dass Michael Abrash offenbar überall dort auftauche, wo grafische Innovationen stattfinden.
Ein Nutzer merkte an, dies könne eine Gelegenheit sein zu verstehen, warum "Age of Empires 2: Definitive Edition" unter Wine eine schwache Performance zeigt.
"Age of Empires 2: Definitive Edition" enthalte zwar nicht den Spielcode selbst, aber die ausführbare Datei umfasse weiterhin handgeschriebenes Assembly, das den Spielcode zur Laufzeit dekomprimiere. Dadurch bleibe der gesamte Code im Zustand RWX, also gleichzeitig lesbar, schreibbar und ausführbar, was ihn sehr anfällig für Sicherheitsprobleme mache.
Ein Nutzer, der gerade über die Geschichte von Borland liest, schrieb, dass der Turbo-Pascal-Compiler größtenteils in Assembly geschrieben war und auch in Delphi 1.0 verwendet wurde. Da bei Borland niemand größere Änderungen am Code vornehmen konnte, habe man ihn schließlich für Delphi 2.0 neu geschrieben. Er sagte außerdem, dass Programmierer, die Software für komplexe CPUs in Assembler schreiben, seiner Meinung nach eine besondere Eigenart hätten.