KBLE, l'éditeur de niveau que personne n'a demandé.
Posté le 01/02/2021 15:36
Bonjour ! Etant donné que KBLE n'est pas uniquement dédié à JTMM2, j'ai décidé de déplacer les informations ici.
KBLE est un éditeur de niveau modal, conçu pour être le plus efficace possible et entièrement utilisable au clavier. Bien qu'étant entièrement utilisable au clavier, il est possible de combiner clavier/souris. Dans l'état actuel, KBLE supporte :
Sélection clavier.
Sélection souris.
Actions.
Zoom.
Sauvegarde et chargement.
Répétition de déplacement et paramètres d'actions.
Configuration.
Pourquoi apprendre KBLE ?
Pour plus d'informations, rendez vous sur la
page du projet Sourcehut.
Ci-dessous se trouvent les articles des RDP où est apparu KBLE, et des vidéos de démonstration par ordre chronologique.
Significations de l'acronyme
Alice a écrit :
KBLE, c'est pour Kikoodx Basic Level Editor ?
Tituya a écrit :
C'est pour péter un KaBLE
Revue des Projets
RDP 198
Vidéos
Jour 8 : démonstration des fonctionnalités souris.
Jour 9 : démonstartion des modes au clavier.
Liens utiles
Parcourir le dépôt Git de KBLE.
Ouvrir une issue (report de bug, proposition de fonctionnalité, etc.).
Projets utilisant KBLE
Painfull Success (GNU/Linux)
Painfull Success CG (Casio 90+e)
Citer : Posté le 28/02/2021 10:35 | #
Ha oui ! Ca donne du fil à retordre aux futurs potentiels utilisateurs de KBLE pour des jeux !
Merci en tout cas pour ton retour, et bravo !
Citer : Posté le 28/02/2021 13:52 | # | Fichier joint
Au contraire c'est conçu pour être facile à utiliser pour les utilisateurs et les développeurs. J'ai rapidement écrit un parser de fichiers .KBLE en Python qui supporte la spécification complète pour montrer à quel point c'est simple
The MIT License (MIT)
Copyright © 2021 KikooDX
Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the
“Software”), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
"""
def info(*args) -> None:
print("info:", *args)
def merge_bytes(_bytes: bytes) -> int:
"""
Get a bytes slice and merge them into an integer.
"""
mul = 256 ** len(_bytes)
sum = 0
for byte in _bytes:
mul //= 256
sum += byte * mul
return sum
def kble_parse(_bytes: bytes) -> list:
"""
Read content of binary file using the KBLE format and output a two
dimensional int grid.
"""
# Read whole file at once.
# Check version byte.
assert(_bytes[0] == 0)
# Get byte length of cells.
cell_size: int = _bytes[1]
info("Cell size:", cell_size)
# Get level dimensions.
width = merge_bytes(_bytes[2:4])
height = merge_bytes(_bytes[4:6])
info("Level width:", width)
info("Level height:", height)
# Check than the number of bytes matches the obtained informations.
assert(len(_bytes) == width * height * cell_size + 6)
info("Correct format.")
# Process remaining bytes and add them to a list.
grid: list = [[0 for _ in range(width)] for _ in range(height)]
i: int = 6
x: int = 0
y: int = 0
while (i < len(_bytes)):
SLICE = _bytes[i:i + cell_size]
grid[y][x] = merge_bytes(SLICE)
i += cell_size
x += 1
if x == width:
x = 0
y += 1
info("Parsing ended successfully.")
return grid
if __name__ == "__main__":
with open("sample.kble", "rb") as file:
BYTES = file.read()
data = kble_parse(BYTES)
# Pretty print.
for line in data:
for cell in line:
print(cell, "\t", end="")
print()
J'ai gardé le code simple et le « parser » fait moins de 20 lignes de code significative. Ce code est en fichier joint.
Ajouté le 01/03/2021 à 22:34 :
Salut ! J'ai terminé mon premier projet avec KBLE ─ le jeu de la game jam. Personne n'y jouera jamais étant donné qu'il faut le compiler Cela reste une preuve que l'éditeur est utilisable, et j'affirme que j'ai été plus productif qu'avec n'importe quel autre éditeur existant. J'ai noté quelques problèmes d'efficacité, et j'en ai pris note en ouvrant de nouvelles issues.
Si vous voulez voir le jeu ─ et les niveaux ─ les sources sont sur SourceHut et itch.io. Sous licenses libres bien sûr
https://kikoodx.itch.io/painfull-success
https://git.sr.ht/~kikoodx/painfull-success
Et si vous pensez que ce n'est pas lié aux calculatrices, please stand by
Citer : Posté le 01/03/2021 22:54 | # | Fichier joint
Alors voilà je tiens à dire que (1) la direction des rebonds est pas très claire, et (2) j'ai tellement plus galéré à capturer le GIF et à le faire assez léger qu'à installer le jeu, c'est horrible.
Cela dit enjoy, les idées sont sympa
Citer : Posté le 02/03/2021 01:02 | #
Merci d'avoir pris le temps d'y jouer !
(1) Oui désolé, j'ai pensé pendant tout le développement que ce comportement est évident alors qu'il ne l'est clairement pas x(
(2) C'est un très beau GIF.
J'avais oublié de mettre un lien vers les mises à jour prévues pour KBLE, les voici :
~kikoodx/kble#4: Yank/paste system.
~kikoodx/kble#5: No selection verb call.
Bonne nuitée !
Je veux garder mon streak de messages post. une heure du matin.
Ajouté le 13/03/2021 à 01:11 :
Hello peeps, j'ai pris un peu de temps pour créer des issues sur KBLE (#6→9) et en résoudre une (#6). Vous pouvez les voir sur le tracker, ils ne sont pas encore tous acceptés alors ça peut bouger.
La fonctionnalité implémentée est une mémoire de paramètre. C'est dur à expliquer, surtout à cette heure ci, néanmoins je vais essayer ^^' C'est diantrement pratique et est indiqué dans le README.
Lorsque l'utilisateur effectue une action, le paramètre passé est 1 par défaut. C'est ce qui fait que r place la tuile 1 (grise) par exemple. Cette fonctionnalité rend le « paramètre par défaut » dynamique ! Entrer 2p met cette valeur à 2, et appuyer sur r placera désormais la tuile 2 (rouge) La valeur peut être réinitialisée en pressant p sans paramètre. La commande P (capitalisé !) agit comme la pipette dans beaucoup d'éditeurs graphiques : la valeur de la case où se trouve actuellement le curseur devient le paramètre par défaut.
J'espère que j'ai bien expliqué la fonctionnalité, encore une fois c'est un peu abstrait et un concept nouveau conçu pour l'éditeur. Je recommande de l'essayer par vous même pour comprendre.
Pseudo HS : je travaille sur un projet (desktop ) qui utilise KBLE, je vais m'occuper de ce dernier en parallèle pour bien suivre mes besoins. J'espère que l'éditeur deviendra assez efficace et utile pour que d'autres personnes que moi même considèrent l'utiliser dans leurs projets un jour
Maintenant je devrais probablement aller dormir.
Peut-être.
On verra bien.
Ajouté le 15/03/2021 à 18:49 :
Une mise à jour avant minuit ? Deviendrais-je fou, lunatique, timbré, taré ?
Ne vous faites point de souci pour moi, je reviendrai demain à une heure
J'annonce la création et la sortie simultanée de kble2lua(pas ™), un utilitaire de conversion très simple d'utilisation qui prend le chemin vers un fichier .kble en entrée et écrit sur la sortie standard un programme Lua correspondant. Cela permet d'ajouter un niveau d'abstraction au format de fichier pour les développeurs d'add-ins par exemple, pour qui il sera plus simple de traiter ces fichiers avec un script Lua. Pour les programmeurs C, le projet peut faire office d'un exemple d'implémentation du format en 69 lignes (nice).
Installation :
make
sudo make install
Désinstallation :
RTFM :
Exemple :
Un miroir est disponible sur le Gitea <https://gitea.planet-casio.com/KikooDX/kble2lua>.
Citer : Posté le 18/03/2021 19:24 | #
Bonjour ! Aujourd'hui je voulais commencer un projet d'add-in mais OpenBSD + GNU =
Pour patienter, j'ai démarré « KBLE 2 », que j'appellerai KBLE C. Je vais le développer plus lentement que KBLE Zig, je veux qu'il soit plus simple, portable et puisse utiliser plusieurs méthodes de rendu (au moins ncurses et raylib). Soyons fous, pour peut-être avoir un jour une version oncalc.
KBLE C n'est pas encore utilisable. Le format de fichier est le même que pour KBLE Zig, je continuerai d'utiliser KBLE Zig pendant le développement de KBLE C.
Pourquoi ?
J'aime programmer en C, et j'ai besoin d'entrainement.
T'en es où sagouin ?
Sagouin ? Ouille J'ai commencé aujourd'hui, j'ai eu le temps de programmer la lecture et l'écriture des niveaux ─ qui sont déjà mieux programmés que dans la version Zig, j'en suis plutôt content.
Vous pouvez trouver KBLE C sur SourceHut.
⇒ https://git.sr.ht/~kikoodx/kble-c
Pour le moment vous pouvez le construire comme tout projet CMake :
$ mkdir build && cd build
$ cmake ..
$ make
$ ./kblec ../sample.kble reduced.kble
Vous ne verrez rien, mais ../sample.kble est ouvert et sauvegardé sous reduced.kble. En fait pour le moment, ne clonez pas le dépôt sauf si vous voulez lire le peu de code que j'ai écrit (~200 lignes).
@RDP
Citer : Posté le 19/03/2021 08:28 | #
Question rapide ! Tu es sûr que tu ne t'infliges pas des dommages supplémentaires avec Ncurses ? C'est pas la joie à programmer de ce que je me souviens ^^"
Citer : Posté le 22/03/2021 13:21 | #
Question rapide ! Tu es sûr que tu ne t'infliges pas des dommages supplémentaires avec Ncurses ? C'est pas la joie à programmer de ce que je me souviens ^^"
En effet c'est pas la joie, mais ça m'intéresse. ncurses est accessible en TTY et j'aime bien travailler en TTY, ce qui est impossible avec KBLE Zig. Je verrai ça plus tard de toute manière, vu que j'ai fait un pas en diagonale :
Je vous présente un projet sans nom.
https://gitea.planet-casio.com/KikooDX/gotc
Pour le moment il charge et sauvegarde les .kble sur calculatrice. Je vais sûrement essayer de faire un petit jeu avec mode développeur et éditeur de niveau. Pour le moment je vais juste faire l'éditeur, et coller un jeu dessus si il fonctionne bien 8)
Yep je me fais facilement distraire.
@èredespets @RDP