Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.

Forum Casio - Projets de programmation


Index du Forum » Projets de programmation » Refonte de CalcCity
Shadow15510 Hors ligne Administrateur Points: 4981 Défis: 16 Message

Refonte de CalcCity

Posté le 10/10/2021 10:55

Hey o/

Il y a quelques années, j'étais tombé sur CalcCity, de Menno, un jeu de gestion de ville façon Sim's City. J'avais été très séduit par le jeu, mais il restait quelques problèmes notamment des crash de la calto (plus le programme en Anglais )

J'avais voulu refondre le code pour avoir un truc plus propre, mais j'avais pas le niveau et le code était vraiment horrible. Et puis, ces derniers temps, j'ai eu envie de faire un jeu de gestion façon Sim's City… et je me suis dit que nettoyer CalcCity et le porter pour Gint, pouvait être une bonne idée (le programme final serait posté sur la page du jeu d'origine).

Je promet pas d'avancer vite, mais je pense le faire tranquillement. (Faut déjà que j'arrive à comprendre le code )


Lephenixnoir Hors ligne Administrateur Points: 20789 Défis: 143 Message

Citer : Posté le 10/10/2021 11:02 | #


Je ne connaissais même pas cet add-in dis donc ! Le code n'a pas l'air hyper élégant mais pas non plus hyper compliqué. Si tu as un problème avec n'hésite pas à demander
Shadow15510 Hors ligne Administrateur Points: 4981 Défis: 16 Message

Citer : Posté le 10/10/2021 11:03 | #


J'y penserais ! Merci

Première étape : convertir les tableaux de 0 et 1 du CasioSDK en image png \o/

Ajouté le 10/10/2021 à 15:34 :
J'ai fait un dépôt : https://gitea.planet-casio.com/Shadow15510/CalcCity et converti les images du jeu d'origine en png (merci Python xD).

Dans les prochaines étapes :
- comprendre les variables du jeu et faire une structure pour cacher tout ça
- idem avec la caméra (faire un truc avec la position de la souris, la position sur la map et le zoom)
- reconstruire un vrai tileset
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Inikiwi Hors ligne Membre Points: 161 Défis: 0 Message

Citer : Posté le 10/10/2021 21:00 | #


hey, ça a l’air super sympa! j'adore simcity!
Shadow15510 a écrit :

Dans les prochaines étapes :
- comprendre les variables du jeu et faire une structure pour cacher tout ça

le code source de simcity de 1987 a été libéré https://github.com/osgcc/simcity
c'est simcity (ms-dos, amstad, atari 800,...) recodé par un des créateurs en c++, toues les mécanique du jeu ce dans ce code.
Shadow15510 Hors ligne Administrateur Points: 4981 Défis: 16 Message

Citer : Posté le 10/10/2021 21:07 | #


Je ne porte pas Simcity mais CalcCity (y a un lien dans le post principal)
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Inikiwi Hors ligne Membre Points: 161 Défis: 0 Message

Citer : Posté le 10/10/2021 21:21 | #


mais ça serait bien de se rapprocher du vrai jeu avec tout les stats(crime, trafic, valeur immobilière, taxes, impôts), car c'est très sympa a jouer.
simcity a été porté sur un 6502 (bbc micro) donc c'est censé pouvoir tourner sur un sh4 (au niveau des performances de calcul, mais j'avoue que simcity sur 8086(ms-dos) c'est comme-même lent )
Shadow15510 Hors ligne Administrateur Points: 4981 Défis: 16 Message

Citer : Posté le 10/10/2021 21:25 | #


CalcCity s'en rapproche vraiment il y a un système taxe, impôt. Ainsi qu'un système crime / sécurité, et une gestion des catastrophes (feux, accident nucléaire, tremblement de terre).
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Inikiwi Hors ligne Membre Points: 161 Défis: 0 Message

Citer : Posté le 10/10/2021 21:27 | #


Shadow15510 a écrit :
- idem avec la caméra (faire un truc avec la position de la souris, la position sur la map et le zoom)
- reconstruire un vrai tileset

au mois ça c’est une super bonne idée
(admirez mon nouvel avatar)
Shadow15510 Hors ligne Administrateur Points: 4981 Défis: 16 Message

Citer : Posté le 10/10/2021 21:29 | #


En parlant du tileset, j'ai terminé le tileset des grandes icônes, il me reste à fusionner quelques trucs et c'est bon.
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Massena Hors ligne Rédacteur Points: 1894 Défis: 11 Message

Citer : Posté le 12/10/2021 21:53 | #


Sympa tout ça !
Encore un jeu de simulation, aussi étonnant que Kikoo qui développe un Plateformer

J'ai toujours voulu jouer à CalcCity, mais il a jamais voulu se lancer sur ma calto. Je jouerai à ton adaptation avec grand plaisir, bon courage
Shadow15510 Hors ligne Administrateur Points: 4981 Défis: 16 Message

Citer : Posté le 12/10/2021 21:54 | #


Merci !
J'ai pas trop avancé, ces derniers jours, j'espère pouvoir commencer à comprendre un peu le code ce week-end (je mise un peu sur les vacances pour avoir de vraies avancées)

Ajouté le 13/10/2021 à 18:00 :
Hey o/
Ayant un peu de temps, je me suis penché vers ce qui sert de main et là, ça commence bien… j'ai une image encodée dans un truc qui doit être de l'hexadécimal… L'image doit faire 128 pixels par 64, mais dans le code, elle est représentée comme une simple liste :
unsigned long im2_C0[] = {
0x00000000,0x00000000,0x00000000,0x00000000,0x7FFFFFFF,0xFFFFFFFF,0xFFFFFFFE,0x0FE03FFE,0x7FFFFFFF,0xFFFFFFFF,
0xFFFC1E0E,0xAFEABFFE,0x7F83FFF3,0xFFC1F3FF,0xFFFD5EAE,0x0FE03FC0,0x7E01FFF3,0xFF00F3BF,0xFFFC1E0E,0xAFEAB054,
0x7C78FFF3,0xFE3C7F3F,0xFFFD02AE,0x03E01540,0x7CFCF0E7,0x867E6413,0xCFFC2A00,0xAB095054,0x78FFE066,0x007FE413,
0x9FFD02AA,0x03401540,0x79FFCE66,0x70FFE673,0x9FFC2A00,0xAB095014,0x79FFFE64,0xFCFFE673,0x3FFD02AA,0x00400500,
0x79FFC064,0xFCFFE673,0x3FE02A00,0xA9094014,0x79F99CE4,0xFCFCE67A,0x7FEA00AA,0x00400500,0x78F39CCC,0xE479CCF8,
0x7F002800,0xA9094014,0x7C0380CE,0x0601CC38,0xFF4A00A4,0x00400500,0x7E0FC4CF,0x0F07CC38,0xFF000000,0x00000014,
0x7FFFFFFF,0xFFFFFFF9,0xFE000000,0x00000000,0x7FFFFFFF,0xFFFFFFC1,0xFC000000,0x00000000,0x7FFFFFFF,0xFFFFFFC3,
0xFFFFFFFF,0xFFFF0FFE,0x7FFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFE1FFE,0x7FFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFC1FFE,
0x7FFFFDFF,0x1FFFFFF8,0x3FFFFFFF,0xFFF83FFE,0x7FFFFAFE,0xEFFFFFFB,0xDFFFFFFF,0xFFF03FFE,0x7FFFFAFD,0xF63438FB,
0xD77FFFFF,0xFFE27FFE,0x7FFFFAFD,0xFDD2D778,0x177FFFFF,0xFFD97FFE,0x7FFFF77D,0xC616D07B,0xDAFFFFFF,0xFFA6FFFE,
0x7FFFF07D,0xF5D6D7FB,0xDAFFFFFF,0xFF7EFFFE,0x7FFFEFBE,0xED96D77B,0xDDFFFFFF,0xFEC5FFFE,0x7FFFEFBF,0x1E56D8F8,
0x3DFFFFFF,0xFD85FFFE,0x7FFFFFFF,0xFFFFFFFF,0xFDFFFFFF,0xFB0BFFFE,0x7FFFFFFF,0xFFFFFFFF,0xFBFFFFFF,0xF71BFFFE,
0x7FFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xEFF7FFFE,0x7FFEFBFF,0xFFFFFDFF,0x83FFFFFF,0xDFF7FFFE,0x7FFE73FF,0xFFFFFDFF,
0xBDFFFFFF,0xBFEFFFFE,0x7FFE7318,0x61C7E58F,0xBD8E3FFF,0x71EFFFFE,0x7FFEAAEB,0xAEBBD977,0x8175DFFE,0xE1DFFFFE,
0x7FFEAA0B,0xAEBBDD07,0xBD067FFD,0xC1DFFFFE,0x7FFEAAFB,0xAEBBDD7F,0xBD7FBFFB,0xC3BFFFFE,0x7FFEDAEB,0xAEBBD977,
0xBD75DFF7,0x87BFFFFE,0x7FFEDB1B,0xAEC7E58F,0x838E3FEF,0x877FFFFE,0x7FFFFFFF,0xFFFFFFFF,0xFFFFFFDF,0xFF7FFFFE,
0x7FFFFFFF,0xFFFFFFFF,0xFFFFFFBF,0xFEFFFFFE,0x7FFFFFFF,0xFFFFFFFF,0xFFFFFF7F,0xFEFFFFFE,0x7FFFFFFF,0xF1C7183F,
0xFFFFFEF8,0x3DFFFFFE,0x7FFFFFFF,0xEEBAEF7F,0xFFFFFDF0,0x7DFFFFFE,0x7FFFFFFF,0xFEBAEF7F,0xFFFFFBE0,0x7BFFFFFE,
0x7FFFFFFF,0xFEBAEEFF,0xFFFFF7C0,0xFBFFFFFE,0x7FFFFFFF,0xFDBAEEFF,0xFFFFEF81,0xF7FFFFFE,0x7FFFFFFF,0xFBBAEDFF,
0xFFFFDF81,0xF7FFFFFE,0x7FFFFFFF,0xF7BAEDFF,0xFFFFBF03,0xEFFFFFFE,0x7FFFFFFF,0xE0C71DFF,0xFFFF7E07,0xEFFFFFFE,
0x7FFFFFFF,0xFFFFFFFF,0xFFFEFE07,0xDFFFFFFE,0x7FFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFE,0x7FFFFFFF,0xFE3FFF7F,
0x7AFFFFBF,0xFFFFFFFE,0x7FFFFFFF,0xFDDFFFFF,0x77FFFFBF,0xFFFFFFFE,0x7775DD77,0x7BF8E363,0x6E872CB1,0xA1F8D65E,
0x76B5AD6B,0x7BF75D5D,0x4EBACB2E,0x96F74D9E,0x7AAEABAA,0xFBF8675D,0x2EBAEBAE,0xB6F75DDE,0x7AAEABAA,0xFBF77B5D,
0x76BAEBAE,0xB6F75DDE,0x7DDF77DD,0xFDD65D5D,0x76BACB2E,0xB6F75D9E,0x7DDF77DD,0xEE396363,0x7ABB2CB1,0xB6D8DE5E,
0x7FFFFFFF,0xFFFFFFFF,0xFFFFEFFF,0xFFFFFFDE,0x7FFFFFFF,0xFFFFFFFF,0xFFFE1FFF,0xFFFFFC3E,0x7FFFFFFF,0xFFFFFFFF,
0xFFFFFFFF,0xFFFFFFFE,0x00000000,0x00000000,0x00000000,0x00000000};

Autant les images avec juste un tableau de 0 et de 1, je voyais assez bien comment la convertir, autant là, j'avoue que je comprends pas comment retrouver l'image au format png ^^'

Merci d'avance !
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Lephenixnoir Hors ligne Administrateur Points: 20789 Défis: 143 Message

Citer : Posté le 13/10/2021 19:05 | # | Fichier joint


Je te conseille cette partie du TDM 18 qui explique en détail l'histoire de l'hexa mieux que je ne pourrais le faire à l'improviste. C'est bien un tableau de bits !

Ah et aussi c'est certainement du row-major, donc tu as tous les bits d'une ligne suivis immédiatement de tous les bits d'une autre. Tu peux mettre la liste dans un programme Python et décoder toi-même ou bien utiliser convert en une seule ligne pour la récupérer.

Je pars de l'hexa sans les caractères supplémentaires :

% cat image.txt
00000000 00000000 00000000 00000000 7FFFFFFF FFFFFFFF FFFFFFFE 0FE03FFE 7FFFFFFF FFFFFFFF
FFFC1E0E AFEABFFE 7F83FFF3 FFC1F3FF FFFD5EAE 0FE03FC0 7E01FFF3 FF00F3BF FFFC1E0E AFEAB054
7C78FFF3 FE3C7F3F FFFD02AE 03E01540 7CFCF0E7 867E6413 CFFC2A00 AB095054 78FFE066 007FE413
9FFD02AA 03401540 79FFCE66 70FFE673 9FFC2A00 AB095014 79FFFE64 FCFFE673 3FFD02AA 00400500
79FFC064 FCFFE673 3FE02A00 A9094014 79F99CE4 FCFCE67A 7FEA00AA 00400500 78F39CCC E479CCF8
7F002800 A9094014 7C0380CE 0601CC38 FF4A00A4 00400500 7E0FC4CF 0F07CC38 FF000000 00000014
7FFFFFFF FFFFFFF9 FE000000 00000000 7FFFFFFF FFFFFFC1 FC000000 00000000 7FFFFFFF FFFFFFC3
FFFFFFFF FFFF0FFE 7FFFFFFF FFFFFFFF FFFFFFFF FFFE1FFE 7FFFFFFF FFFFFFFF FFFFFFFF FFFC1FFE
7FFFFDFF 1FFFFFF8 3FFFFFFF FFF83FFE 7FFFFAFE EFFFFFFB DFFFFFFF FFF03FFE 7FFFFAFD F63438FB
D77FFFFF FFE27FFE 7FFFFAFD FDD2D778 177FFFFF FFD97FFE 7FFFF77D C616D07B DAFFFFFF FFA6FFFE
7FFFF07D F5D6D7FB DAFFFFFF FF7EFFFE 7FFFEFBE ED96D77B DDFFFFFF FEC5FFFE 7FFFEFBF 1E56D8F8
3DFFFFFF FD85FFFE 7FFFFFFF FFFFFFFF FDFFFFFF FB0BFFFE 7FFFFFFF FFFFFFFF FBFFFFFF F71BFFFE
7FFFFFFF FFFFFFFF FFFFFFFF EFF7FFFE 7FFEFBFF FFFFFDFF 83FFFFFF DFF7FFFE 7FFE73FF FFFFFDFF
BDFFFFFF BFEFFFFE 7FFE7318 61C7E58F BD8E3FFF 71EFFFFE 7FFEAAEB AEBBD977 8175DFFE E1DFFFFE
7FFEAA0B AEBBDD07 BD067FFD C1DFFFFE 7FFEAAFB AEBBDD7F BD7FBFFB C3BFFFFE 7FFEDAEB AEBBD977
BD75DFF7 87BFFFFE 7FFEDB1B AEC7E58F 838E3FEF 877FFFFE 7FFFFFFF FFFFFFFF FFFFFFDF FF7FFFFE
7FFFFFFF FFFFFFFF FFFFFFBF FEFFFFFE 7FFFFFFF FFFFFFFF FFFFFF7F FEFFFFFE 7FFFFFFF F1C7183F
FFFFFEF8 3DFFFFFE 7FFFFFFF EEBAEF7F FFFFFDF0 7DFFFFFE 7FFFFFFF FEBAEF7F FFFFFBE0 7BFFFFFE
7FFFFFFF FEBAEEFF FFFFF7C0 FBFFFFFE 7FFFFFFF FDBAEEFF FFFFEF81 F7FFFFFE 7FFFFFFF FBBAEDFF
FFFFDF81 F7FFFFFE 7FFFFFFF F7BAEDFF FFFFBF03 EFFFFFFE 7FFFFFFF E0C71DFF FFFF7E07 EFFFFFFE
7FFFFFFF FFFFFFFF FFFEFE07 DFFFFFFE 7FFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE 7FFFFFFF FE3FFF7F
7AFFFFBF FFFFFFFE 7FFFFFFF FDDFFFFF 77FFFFBF FFFFFFFE 7775DD77 7BF8E363 6E872CB1 A1F8D65E
76B5AD6B 7BF75D5D 4EBACB2E 96F74D9E 7AAEABAA FBF8675D 2EBAEBAE B6F75DDE 7AAEABAA FBF77B5D
76BAEBAE B6F75DDE 7DDF77DD FDD65D5D 76BACB2E B6F75D9E 7DDF77DD EE396363 7ABB2CB1 B6D8DE5E
7FFFFFFF FFFFFFFF FFFFEFFF FFFFFFDE 7FFFFFFF FFFFFFFF FFFE1FFF FFFFFC3E 7FFFFFFF FFFFFFFF
FFFFFFFF FFFFFFFE 00000000 00000000 00000000 00000000

Ensuite je récupère un fichier binaire contenant ces données (au lieu de leur représentation textuelle) :

% xxd -r -p < image.txt > image.bin
# J'obtiens un fichier de 1024 octets puisqu'il y a 256 int de 4 octets chacun

Et enfin je convertis du format brut en PNG avec convert.

% bitswap.py image.bin image.bin # Un détail
% convert -size 128x64 mono:image.bin -negate image.png

Et voilà.

Shadow15510 Hors ligne Administrateur Points: 4981 Défis: 16 Message

Citer : Posté le 13/10/2021 20:13 | #


Wow !
Merci beaucoup !!
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque


LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2021 | Il y a 33 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd