Clickomania goes open source

There are faithful Clickomania players out there, who hold on to my game more than ten years after the last update. They not only still play the game, but they’re as well submitting Online results to this page here. Not as numerous as years before, but still in considerable amouts.

Unfortunately, the submission of new results does not work anymore at this time. As you may have seen, I have switched this domain to SSL, which was high time. But Clickomania was created in a time where https was not widely available, and I am not even sure if it was possible to use encryption at all. For the reasons explained here, I am not able to provide an update.

Update: Good news. There is a solution available. It is explained here.

And these are the two other possible solutions I discussed in the original blog post:

First, someone out there can help out and add encryption to the game – and maybe even update it to more modern look and feel. For this to happen, I do what I should have done a long time ago: I declare the game open source and I make the program code available here. So, go ahead and make it happen!

… and please understand that I do not have the capacity to provide any explanations – besides, the code is so old that I do not remember any consideration I may or may not have made at the time. It is spaghetti code, for crying out loud! But I never had to earn a living writing code.

I used Delphi 5, if I remember correctly. But since you would not want to use that version anymore, you’d need to to a lot of adaptation anyway. It is probably a very frustrating Kamikaze job – so don’t tell me I did not warn you.

If you succeed, though, please come back to me: I’ll gladly provide the new version here, so that the stats can run as long as the internet itself remains up.

Back.JPG

The first version from 1997.

The second solution (which is probably easier to achieve), is to exclude the PHP script for the result submission from encryption. I’ve tried that with a .htaccess file, but it did not work so far. If you have any clue for that, I am happy to try it out. Please add your suggestions to the comment section.

That is my code so far:

RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule ^ngscores/Writescore.php(.*)$ http://www.clickomania.ch/ngscores/Writescore.php$1 [L]

Autor: Matthias

Diese Website gibt es seit 1999. Gebloggt wird hier seit 2007.

11 Gedanken zu „Clickomania goes open source“

  1. Wie sieht denn die .htaccess aktuell aus?

    Wahrscheinlich etwa so?:
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

    Dann sollte das funktionieren:
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteCond %{REQUEST_URI} !^/ngscores/Writescore.php
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

    Bedingungen („RewriteCond“) werden mit „AND“ verknüpft, ausser es steht „[OR]“ am Schluss. Also WENN HTTPS = aus UND URI beginnt NICHT mit /ngscores/Writescore.php, DANN umleiten auf HTTPS.

    Deine Lösung funktioniert aus zwei Gründen nicht: Wenn HTTPS schon „on“ ist, ist es zu spät, da Clickomania keine HTTPS-Anfragen absetzen kann. Und die Regel leitet weiter auf eine andere Seite, was beim Client eine neue Anfrage auslöst, für welche die Regeln dann wieder angewendet werden. (HTTP und somit mod_rewrite sind statuslos, jede Anfrage wird wieder abgearbeitet.)

    1. Danke! Die ursprüngliche .htaccess-Datei ist leer. Das bedeutet wahrscheinlich, dass via .htaccess nichts auszurichten ist. Ich müsste https für die ganze Domain abschalten, was ich aber nicht tun will. Da bleibt der Weg über ein Update des Spiels, was eh viel sauberer ist: Denn natürlich sollten die Resultate verschlüsselt übermittelt werden!

      1. Vermutlich gibt es auf dem Hosting eine Einstellung „HTTPS erzwingen“ oder ähnlich. Dann wäre das Rewrite nicht in der .htaccess-Datei, sondern in der Serverkonfiguration zu finden. Und die hat Priorität vor dem .htaccess.

        Man könnte „HTTPS erzwingen“ deaktivieren und HTTPS dann in der .htaccess erzwingen inkl. der Ausnahme für die Resultate. Da öffentlich abrufbar, müssen sie ja nicht unbedingt verschlüsselt übertragen werden. 🙂

        Aber ja, ein Update des Spiels ist sicher die zukunftssicherere Variante!

        1. Ich frage mal bei Hostpoint nach. Wenn die keine Einwände haben, mache ich das so. Ansonsten müssen wir aufs Update warten.

          Und die Verschlüsselung ist deswegen sinnvoll, weil jemand sonst den String abfangen und dort sein Resultat noch etwas aufpolieren könnte. Denn ich muss hier leider zugeben, dass ich damals zufrieden war, dass es überhaupt funktioniert hat und ich nur ganz primitive Sicherheitsmassnahmen gegen Manipulationsversuche eingebaut habe. (☉_☉)

  2. „nur ganz primitive Sicherheitsmassnahmen gegen Manipulationsversuche eingebaut“

    …die hinfällig sind, seitdem Du den Source Code veröffentlicht hast. 😛

  3. Habe es nicht lassen können und die Sourcen im aktuellen Delphi aufgemacht. Die Projektdatei lässt sich noch laden. 🙂 Aber es gibt zwei Probleme:

    – Die Komponente „TPicPanel“ gibt es in dieser Version nicht mehr. Lösung: Du müsstest die Datei „D:\Borland 5\Delphi5\Source\Vcl\comctrls.pas“ ins ZIP packen (oder besser gleich das ganze Vcl-Verzeichnis, falls es Abhängigkeiten gibt).

    – Die Datei „..\Komponenten\TSystem\hh.pas“ ist nicht im ZIP. Diese stammt soweit ich erkennen kann nicht von Delphi, sondern Du hast sie aus einer anderen Quelle. Die müsste auch ins ZIP.

    1. Autsch. Ja, ich erinnere mich vage, dass ich zusätzliche Komponenten verwendet habe. Dank des grossartigen Namens «hh.pas» wird es auch sehr einfach sein zu rekonstruieren, wozu die gut gewesen ist. 😱

      Man sieht an diesem Beispiel deutlich, dass eine gute Projektdokumentation kein übertriebener Aufwand ist.

      Die gute Nachricht: Ich habe tatsächlich beide Dinge gefunden; ich scheine schon damals ein kleiner Backup-Neurotiker gewesen zu sein. Ich aktualisiere das Archiv gleich entsprechend.

      1. Gratulation für das Backup-Konzept. 🙂

        Es sieht nicht mal so schlecht aus eigentlich: Die zusätzlichen Komponenten lassen sich einbinden. Nur TListView fehlt noch, sowie die Netzwerkkomponenten (wobei man die sowieso austauschen muss für SSL).

        Wenn man die Form mit den Highscores rausnimmt, lässt sich die Sache sogar kompilieren. Aber: beim Start kommen ein paar Meldungen bezüglich „Access Violation“ und dann ist Schluss. Dies ist ebenfalls so beim mitgelieferten EXE. Hast Du es mal unter Windows 10 getestet?

        1. Danke. Und danke! *g*

          Bei mir läuft die Exe-Datei unter Windows 10 problemlos. Lustigerweise; denn Meldungen , wie du sie beschreibst, hatte ich ab Windows Vista immer mal wieder (auch von Spielern gemeldet), wobei das Spiel trotz der Fehler noch brauchbar war. Windows 10 ist hier bei mir wieder kompatibler. Mir ist nie klar geworden, warum die Probleme nicht zuverlässig reproduzierbar sind. Naja, da müsste man Microsoft wahrscheinlich den Windows-Quellcode klauen (und zehn Jahre in die Analyse investieren), um klarer zu sehen…

          1. Leider muss ich aufgeben… 🙁

            Bei der EXE, die man über die Website downloaden kann, gibt es keinen Fehler. Wohl aber bei der, die mit den Sourcen mitgeliefert ist.

            Mit Delphi 10.2 konnte ich es nie kompilieren. Habe dann noch Delphi 7 (von 2002 oder so) gefunden. Wenn man alles, was mit Netzwerk zu tun hat auskommentiert, kann man es kompilieren. Die so erzeugte EXE ergibt aber abwechselnd eine Access Violation oder gibt nur eine Meldung mit rotem Kreuz aus. Da der Debugger nicht läuft, ist die Fehlersuche fast unmöglich.

            Deshalb zwei Vorschläge:

            – Unity: Damit kannst Du relativ leicht ein Spiel mit allen grafischen Schikanen erstellen. 3D-Animationen etc. sind kein Problem. Dieses kannst Du dann als EXE, als Browsergame oder als Smartphone-App kompilieren.
            – HTML5/JavaScript: Spiel läuft im Browser, was regelmässige Besuche auf der Website brächte.

            Beides liesse sich im Rahmen einer Artikelserie realisieren. 🙂

  4. Danke, dass du überhaupt so lange durchgehalten hast. Das ist mehr, als man erwarten kann!

    Es war meine Vermutung, dass man einiges an Zeit investieren müsste, um den Code auf den neuesten Stand zu bringen. Das braucht nicht nur bei den Netzwerkkomponenten Zeit. Auch bei den Windows-Schnittstellen und der Delphi VCL dürfte sich viel getan haben. Und dann würde man auch das Look und Feel auf den neuesten Stand bringen wollen – da ist mit Unity das passende Stichwort gefallen.

    Mich würde diese Aufgabe reizen, aber mir fehlt die Zeit. Doch es müsste doch eigentlich junge Nachwuchstalente geben, die eine solche Aufgabe als Herausforderung betrachten! 😉

Kommentar verfassen