Gurk est un RPG sortit à la base sur les nokia s30 (J2ME) puis porté sur android. J'y ai pas mal joué et je doit dire que c'est assez intuitif malgré sa sobriété (menu et combats très simplifiés), mais c'est en partit ça qui m'a convaincu que c'est un jeu plus ou moins "portable" facilement sur les TI z80.
Donc après quelques heures à galérer pour rassembler tout ce que j'avais besoin (tiles surtout, et notez la superbe façons dont spasm me permet les inclure), je me suis attaqué au tilemapper. En effet il n'y a pas à proprement parler de menu d'accueil, le jeu est reset sur la carte du monde à chaque lancement mais on peut charger une partie parmi les 3 emplacements disponibles pour sauver.
Devant l'énorme carte du monde (80*80 tiles si mes souvenirs sont bons) j'ai dû réfléchir au meilleur moyen de compression. Enfin ça c'était après avoir dû trouver un moyen rapide de convertir les cartes rippées du jeu en assembleur grâce à PureBasic.
J'ai donc opté pour un système se rapprochant du RLE, me permettant un gros gain de place et la possibilité de décompresser à la volé les tiles. Ceux-ci sont donc indexés par longueur d'enchaînement jusqu'à 255, ce qui m'a permis une compression de 60%. Bien-sûr cela sous entend une vitesse plus ou moins rapide de décompression selon la distance des tiles recherchés... Pour le moment je pense me tourner vers les interruptions pour maintenir un FPS constant selon cette distance.
Donc voilà mon tilemapper est prêt :

map_display: bcall _grbufclr ld c,5 map_display_y: ld b,6 map_display_x: push bc call tile_display pop bc djnz map_display_x dec c ld b,c djnz map_display_y call ionFastCopy ret tile_display: dec c push bc ld a,(map_x) add a,b ld h,0 ld l,a ld a,(map_y) pop bc push bc add a,c push af ld a,(map_w) ld d,0 ld e,a pop af call addhlde_a ld de,world_map call tile_decompress pop bc push bc xor a call adda16_b pop bc push af ld b,c xor a call adda16_b ld l,a pop af ld b,16 ld c,2 call ionLargeSprite ret tile_decompress: ld a,(de) ld b,0 ld c,a or a sbc hl,bc jr z,tile_decompress_ok jp m,tile_decompress_ok inc de inc de jr tile_decompress tile_decompress_ok: inc de ld a,(de) ld hl,tiles ld de,32 call addhlde_a push hl pop ix ret adda16_b: add a,16 djnz adda16_b sub 16 ret addhlde_a: or a \ ret z ld b,a addhlde_a_loop: add hl,de djnz addhlde_a_loop ret
Y'a sûrement des optimisations donc je suis preneur de toute remarque !
Bon voilà le plus dur était d'avoir les bases maintenant c'est plus que du remplissage... A la limite ce qui m'emmerde un peu c'est de ne pas avoir les statistiques pour les monstres et donc de ne pas pouvoir calculer exactement les même dégâts que l'original mais bon ça je ferai au mieux...
En espérant avoir le temps et l'envie de le continuer !

Plus d'info ici : http://deeph.servhome.org/?a=entrie&id=11