CIVILIZATION-1 auf dem C64 möglich?

  • Hallo zusammen,

    erst mal vielen Dank für Eure vielen Antworten!
    Ich denke mal wir stimmen grob überein, Civilization 1 ist
    möglich auf dem C64.

    Wenn Ihr Euch wirklich dransetzen und etwas entwickeln wollt,
    würde ich alles semantisch oo und in Pseudocode
    entwerfen/dokumentieren, dann läßt es sich später beliebig
    skalieren und umsetzen - egal womit. Außerdem haben wir ein
    zentrales Dokument, das jeder versteht.
    (Hat jemand einen Server, der eine Versionsverwaltung aufnehmen könnte, Subversion oder sowas?)

    Die Karte als pointerfeld umzusetzen find ich schon mal nicht
    schlecht, würde aber noch einen Schritt weiter gehen und
    Pointer.pointerlisten nehmen, damit man nur was speichert, wenn
    auch was da ist. D.h. Meer wird nicht gespeichert, nur Objekte
    die sich darauf befinden, also Land, Resourcen, Bebauungen,
    Städte und Einheiten.
    Mal ein Beispiel basteln:
    Schiff(25).x=1 .y=2
    Land(5).x=4 .y=3
    Land(6).x=71 .y=7
    Land(7).x=89 .y=25
    Land(8).x=112 .y=2
    Wollen wir jetzt einen Kleinen Screen von x1y1 bis x4y4
    darstellen, dann gehen wir die nach x,y sortierte Liste durch, setzen auf den blauen Hintergrund alle Einheiten, dann die Landfelder gefolgt von den Recourcen. Land und Resourcen muß man natürlich nur darstellen, wenn keine Einheit oder Stadt an der gleichen Stelle ist, wir brauchen also noch die Z-Ebene, einen Adressstapel.
    Ein Problem ist, dass wir die Liste nach x, y und eigentlich auch
    nach z sortiert haben bräuchten, wobei man Z sicher auch live
    sortieren lassen kann.

    Sollte man doch eine Lösung mit Zeichensatz wählen, dann würde
    ich evtl. sogar vier Zeichen pro Feld nehmen - einzelne Zeichen
    pro Feld nur beim rauszoomen :)
    Sehr hübsch fänd ich, wenn mann die Wellen an die Küste rollen
    lassen könnte ^^


    Zur KI:
    Man braucht nur eine KI, die je nach Charakter andere Parameter
    bekommt.
    In Civ 1 spielt die auch alles andere als fair, die haben da
    getrickst wie sonst was.
    Da werden ganz einfache Faustformeln genügen, wie zB.

    Modus Siedeln:
    Laufe nach dem Muster X
    n Felder weit,
    merke dir auf dem Weg Muster A, B, C, D, E und F,
    wobei A das günstigste, F das am wenigsten günstigste Muster ist.
    Sobald du mindestens Y Felder von deiner letzten Stadt entfernt
    bist und Muster A oder B entdeckt hast, baue dort eine Stadt.
    Bist Du die ganze Stecke n gelaufen, ohne Muster A oder B zu
    finden, laufe bis zum günstigsten Muster zurück und siedel dort.

    Modus Feindkontakt:
    Vorab Diplomatie, Selbsteinschätzung, Gegnereinschätzung, je nach
    Charakter und Unter- oder Überlegenheit zum Gegner, gekoppelt mit
    dem bisherigen Status zu anderen Civilisationen, wird Krieg
    geführt, geblockt, geflohen, Tribut gefordert oder gegeben.

    /* Einschub!
    An dieser Stelle würde ich gerne ansetzen ein großes Manko
    auszubessern. Ich möchte Vertrauenspunkte für Gegner vergeben,
    so daß im krassen Gegensatz zum Original Frieden tatsächlich auch
    Nutzen haben kann und zu Freundschaft und Kooperation führen
    kann. */

    Diplomatie
    Also man bekommt ja auf jeden Fall eine grobe Schätzung, wie
    mächtig der jeweilige Gegner ist, und wie mächtig man selbst ist,
    Größe: Anzahl der Einheiten, Städte, Einwohner
    Stärke: Summe der Trefferpunkte(TP) die man mit allen Einheiten
    pro Runde austeilen könnte
    Verteidigung: Summe der TP die man mit allen Einheiten pro Runde
    abwehren könnte.
    Entwicklung: Summe der Fortschrittspunkte pro Runde.

    Also je nach diplomatischer Entscheidung, werden verschiedene
    Strategien ausgewählt, wie
    Angriff,Blocken, Rückzug, Expansion, gesicherte Expansion

    D.h. wir haben pro Civilisation, pro Stadt, und pro Einheit eine
    ganze Reihe von Informationen, die gespeichert werden müßten.
    Sagen wir mal, wir hätten 256 Einheiten, Städte, Zivilisationen (E+S+Z=256),
    Beispiel "ein Siedler", er hat, wie alles,
    eine Position, 2 Byte,
    gehört einer Stadt an, 1 Byte,
    Entfernung zur Stadt, 2 Byte,
    das gewählte Suchmuster, 1 Byte
    Bisher gegangene Schritte, 1 Byte,
    gemerkte Muster,sagen wir 5 pro Musterschritt* 1 Byte,
    Klasse(A-F) 3 Bit + weitere Informationen, wie Feindkontakt,
    Städte, sagen wir also einfach 1 Byte, damit sind wir schon bei
    5x2 Byte, also 10 Byte
    (*pro Muster müssen wir uns keine Position merken, wir haben ja
    die Position der Stadt, also das Startfeld, die Schrittnummer und
    das Suchmuster, spart also 1 Byte pro Muster)
    256*(2+1+2+1+1+10)=256*17=4352 Bytes.

    Dann braucht man noch die Muster A-F,
    verschiedene Suchmuster, die die Bewegung beschreiben.
    Die Zivilisation steuert die Diplomatie und die Städte, die
    Städte die Entwicklung und die Einheiten, wobei die Zivilisation
    Angriffsziele und entwicklungsrichtungen angeben kann.

    Viel Code, der aber schön skaliert werdenen kann, grob über den
    Daumen gepeilt je nach Anzahl der Einheiten, 5 bis 10 KB Code,
    Daten inklusive.


    Die Spektrum-Version sieht beeindruckend aus!
  • Wie gesagt, bin kein C64 Experte, danke für die Infos über Charmode.

    enthusi schrieb:

    Wie kommst Du auf 9216 Bytes fuer 256 Tiles?

    bei 16x16 Pixel Hires Tiles (Wie bei original-Zivilisation bzw. am Amiga 500): 16x2 Bytes fürs Bitmap+4 Bytes für die Attribute=36 Bytes und das mal 256
    Bei 8x8 Tiles wären es demnach nur 2304 Bytes.
  • Das klingt alles sehr vielversprechend. Man könnte ein Projekt daraus machen. Ich würde gerne bei Arbeiten mitwirken, für die es keiner großen ASM-Kenntnisse bedarf.

    Mein Angebot wäre sich z.B. um sowas zu kümmern:
    - Wissenschaftsbaum
    - Einheitensystem
    - Gebäudesystem
    - Weltwunder
    - CivPedia-Texte
    - KI-Eigenischaften

    Bei eingem wäre zu klären, ob die codende Fraktion 'ne Engine/'nen Editor bastelt, um die Daten/Texte/Eigenschaften einzupflegen. Bei anderem (KI) würde ich gern helfen, die Civ1-KI nachzubilden/zu verbessern, indem man erstmal definiert, was ein Computergegner können muss.
    an allem schuld (sagt Sauhund, und der ist bekanntlich nicht ohne)
  • Paar Anmerkungen zu Worfs schon sehr konkreten Ausführungen:
    - Diplomatie: in der Tat bis mindestens Civ2 ganz schwach. Früher oder später wenden sich auch die langjährigsten Verbündeten gegen einen, selbst wenn man sie doch einst vor dem Russen (bzw. der stärksten/zweitstärksten Super-Macht) gerettet hat. Das sollte man besser hinkriegen.
    - Karte: Kriegt man (glaube ich) ökonomischer in den Speicher als durch allzu viel dimensionierte Variablen, Stichwort: Stringketten, die mit 'ner String-Säge dann zerlegt und interpretiert werden. Vgl. Pirates! in BASIC
    - Einheiten: die Kopplung von Einheiten an Städte

    Quellcode

    1. Militia (HAMBURG)
    würde ich mir schenken. Verschwendet nur sinnlos Speicher. Ab Civ3 oder 4 wurde dazu übergegangen, die Größe des Militärs anders zu begrenzen, über Regierungsform/Unterhaltskosten. Nur noch die Siedler waren z.T. an Städte gekoppelt (was aber auch nur für Frust sorgt).
    an allem schuld (sagt Sauhund, und der ist bekanntlich nicht ohne)
  • TheRyk schrieb:

    Ab Civ3 oder 4 wurde dazu übergegangen, die Größe des Militärs anders zu begrenzen, über Regierungsform/Unterhaltskosten. Nur noch die Siedler waren z.T. an Städte gekoppelt (was aber auch nur für Frust sorgt).


    Dem allseits unbeliebten Unit-Spamming nämlich, bei dem jede Nation über mehrere hundert Einheiten verfügt und bei dem fast jede Partie zu einer hirnlosen Materialschlacht verkommt, die mit dem Begriff "Civilisation" bald gar nichts mehr am Hut hat. Das macht wenig Freude und geht allein von der Rechenzeit schon mal gar nicht. Um das einzugrenzen könnte/sollte die maximal mögliche Anzahl der Einheiten von der Größe der Bevölkerung (Bevölkerungspunkte der Städte) abhängig gemacht werden.
  • Fröhn schrieb:


    Fast richtig. Wenn man weiss, das Pascal einfach nur eingeschränktes C mit "lesbareren" Schlüsselworten ist. Ich persönlich würde aber jederzeit { ... } dem BEGIN...END vorziehen, die die sich mehr von den Variablennamen etc abheben.

    Da lob ich mir doch Python, da hat man auf beides verzichtet, die schlichte Einrückung ist da Teil der Sprache :)

    Quellcode

    1. for x in range(6):
    2. if x==1:
    3. # Überspringe diese Zahl
    4. continue
    5. if x==4:
    6. # Beende die Schleife
    7. break
    8. print x
  • Zum Thema Grafik: Ich würde mich evtl. an der Erstellung der Tiles beteiligen. Ich wäre für Charset-Grafik und zwar Multicolor/halbe Auflösung und Hires-Chars gemischt, so wie es z.B. bei Giana Sisters gemacht wurde. Ich finde die Ästhetik von reiner Hires-Grafik (ob nun bitmapped oder Char) nicht besonders ansprechend, das sieht immer so nach Spectrum und wenig nach C64 aus. Die Tiles sollte man dann immer aus 2 x 2 Chars bauen. Allerdings kenne ich mich mit dem Spiel selbst überhaupt nicht aus, sodass mir die benötigten Grafiken als Tabelle, bzw. aussagekräftige Screenshots einer anderen Version zur Verfügung gestellt werden müssten. So ca. 50 Tiles zu malen, hört sich nach einem überschaubaren Projekt an.

    Wenn jemand anderes die Grafik lieber machen möchte, soll er es aber tun. Das ist jetzt nur ein Angebot von mir, ich möchte niemanden aus dem Projekt drängen. Allerdings würde ich mich auch erst an die Grafik setzen, wenn schon einiges an KI und grundsätzlicher Programmierung fertig gestellt ist, da ich nicht für die Tonne arbeiten möchte.
  • worf schrieb:

    Da lob ich mir doch Python, da hat man auf beides verzichtet, die schlichte Einrückung ist da Teil der Sprache :)

    Ich hab da so eine Whitespace-Phobie... Bei Tabs und Spaces hab ich schon viel Horror bei verschiedenen Editoren erlebt. Deswegen bin ich eigentlich ganz froh, dass man bei C/C++ einrücken kann wie man will, denn man weiss manchmal nicht, was am Ende heraus kommt.
  • @LCD:
    Wenn man einen Multiplexer bastelt dann kann man die Sprites auch wieder verwenden.
    Aber ich denke mal das bei einem Spiel wie Civ auf dem Brotkasten keine Grafikwunder zu erwarten sind...
    Schau dir mal Magic Of Endoria an, die PC Version und dann die Cevi Version, da liegen Welten(!) zwischen. ;)
    SELECT signatur FROM dummesprueche WHERE forumsbezug > 0
    0 rows returned.
  • Retrofan schrieb:

    Zum Thema Grafik: Ich würde mich evtl. an der Erstellung der Tiles beteiligen. Ich wäre für Charset-Grafik und zwar Multicolor/halbe Auflösung und Hires-Chars gemischt, ...
    Das ist cool, dann mach doch einfach mal 3 Tiles aus jeweils 4 Chars, vielleicht ein Landfeld, einen Siedler und eine Stadt, dann können die anderen damit schon mal was entwerfern.

    @ TheRyk
    >Mein Angebot wäre sich z.B. um sowas zu kümmern:

    - Wissenschaftsbaum
    - Einheitensystem
    - Gebäudesystem
    - Weltwunder
    - CivPedia-Texte
    - KI-Eigenischaften

    Das ist auch viel Arbeit.
    Der Entwicklungsbaum ist in sowas wie einem Selfjoin organisiert.
    Das Einheitensystem geht direkt darin über, auch die Gebäude und Wunder.
    Wir brauchen das gleich zweimal, einmal in klein und kompakt, also nur die schlichten Informationen, wann man womit was kann, um es ständig im Speicher zu haben, jedenfalls das, was man davon noch braucht, sobald eine entwicklung für alle veraltet ist, muß sie keinen Speicher mehr belegen.
    Und dann noch mal in schön, mit viel Text und Bildchen, beides würde ich mir erst mal zusammenkopieren.

    Die KI macht erst Sinn, wenn die Spielmechanik steht.
    Mit den Ki's werden wir viel Spaß haben, ich denke mal daran wollen viele mitarbeiten :)
    Schön wäre eine einheitliche Schnittstelle, dann können wir viele KI's bauen und die dann gegeneinander antreten lassen - dann werde ich endlich mal genetische Algorithmen ausprobieren.
  • worf schrieb:

    Wenn Ihr Euch wirklich dransetzen und etwas entwickeln wollt,
    würde ich alles semantisch oo und in Pseudocode
    entwerfen/dokumentieren, dann läßt es sich später beliebig
    skalieren und umsetzen - egal womit.


    worf schrieb:

    Die KI macht erst Sinn, wenn die Spielmechanik steht.
    Mit den Ki's werden wir viel Spaß haben, ich denke mal daran wollen viele mitarbeiten :)
    Schön wäre eine einheitliche Schnittstelle, dann können wir viele KI's bauen und die dann gegeneinander antreten lassen - dann werde ich endlich mal genetische Algorithmen ausprobieren.

    ich will ja nicht wieder gehauen werden ; ) aber schreit das nicht förmlich nach c?
  • Gabs eigentlich ne eingedeutschte Version von Civilisation? Ich stelle gerade fest, dass in der englischen Ausgabe ein Grossteil des Geschwafels im Klartext vorliegt. Da könnte man sich schonmal ne Menge Getippe sparen, wenn es die entsprechende Übersetzung schon gäbe.
    "<Lieblingskalenderspruch bitte hier vorstellen>"
  • Sehr interessanter Thread :)

    IMHO ist eine Umsetzung von Civ auf den 64er doch etwas problematischer und das bereits in Hinblick auf Spielkonzept und Grafik. Noch nicht mal so sehr was theoretisch möglich ist, sondern wie es hinterher ausschaut bzw. sich spielt. 256 Tiles bei der Grafik relativieren sich schnell, wenn man nicht nur Hintergrund, Städte und Einheiten (nach Möglichkeit in verschiedenen Entwicklungsstufen) zusammenquetschen muss. Genauso spannend ist dabei, wie lange die Wartezeiten zwischen den Zügen im fortgeschrittenen Spielverlauf ausfallen. 5 Minuten, 10 Minuten oder vielleicht noch länger?

    Die Präsentation ist sicher kein Thema. Auch mit den Beschränkungen des Char-Modes (3 feste Farben, die vierte Farbe nur aus der halben Palette) lässt sich bestimmt was machen. Falls Ihr ein Tool für die Hintergründe braucht, schaut Euch doch mal MapEddi2 an (war früher unser Inhouse-Tool bei Bonespark). Er untertützt flexible Kartengrößen, 2x2 Tiles mit gemischter Auflösung und character-unabhängige Farbzuordnung. Ihr braucht nur eine 1351-Maus oder halt Vice ab Version 2.0. Falls die Anleitung nicht reicht, helfe ich gerne...

    MapEddi2-Link CSDb
  • Damit, würde ich sagen, steht das Projekt.
    Ich schlage den Arbeitstitel CIV64 vor.

    :thumbsup: Wer ist alles dabei? Wer will was machen?

    TheRyk - Entwicklungsbaum, Civilpedia und Einheitensystem
    Retrofan - Grafikdesign

    Wir brauchen noch viele für:

    Spielsteuerung, Menüs
    Spieltechnik
    Karten- und Spielspeicherung
    Bildschirmdarstellung, Scrolling
    Soundeffekte
    Musik
    KI
    QS - Testen was geht
    Dokumentation, Webdesign
    Systemtechnik

    ... fällt Euch noch was ein?

    Ach ja, ich fänd es gut, wenn jeder Bereich von mindestens zwei Leuten gemacht wird, dann ist niemand allein und das Projekt kommt nicht so leicht ins Stocken.

    Gruß, Worf
  • Wie bereits gesagt, habe ich bereits Tiles für Spectrum-Version gemacht, aber da eine andere Version dann erschienen ist, werde ich sie bei einem anderen Projekt verwenden (Anm: "Daikaju Taisen"). Diese liegen im Hires-Modus vor, und können für den C64 verwendet werden. Derzeit ist aber mein Haupt-PC lahmgelegt (Netzteil gibt plötzlich um 5 Volt mehr bei -12 Volt). Sobald ich ein neues gekauft habe, werde ich hier mal die Bilder posten. Am Notebook habe ich diese Bilder leider nicht gespeichert.
    Sie wurden der Amiga-Version nachgezeichnet.