Jump to content
Rpg²S Forum

Il Mire OpenSource in C++


Thejuster
 Share

Recommended Posts

Volevo segnalarvi qui questo piccolo progetto.

 

Diciamo che non è un proprio alla pari di Mire, anche perché può sembrare strano per voi.

Ma le prestazioni di Mire scritte in C# superano quelle di C++.

 

Sarà perché ci ho lavorato per 10 anni ed ottimizzato al massimo ogni funzione possibile.

fatto sta che con gli stessi metodi e procedimenti trascritti in c++ con le OpenGL

risultano essere più lente del motore di Mire.

 

Bada alla chiacchiere.

 

Ho fatto questo piccolo progetto unicamente a scopo didattico.

Diciamo una prova del nove per me. Per vedere fin quando le mie conoscenze del C++ potevano avere limite

o fin dove riuscivo ad arrivare creando un motore interamente in c++.

 

Per ora và alla grande.

 

per chi è interessato o anche curioso.

E' tutto openSource, Cross-Plattform ovviamente,

Anche perché questo progetto lo sto scrivendo direttamente da linux e testato anche su windows.

 

Qui trovate tutto il sorgente

https://github.com/Thejuster/Mappy

 

 

Ecco per ora Juster cosa ha tirato fuori:

 

Editor Principale.

Possibilità di salvare la mappa e caricarla in modalità binaria.

Supporta Little e Big Endian per la codifica dei vari sistemi operativi.

 

 

Screenshot-20181224-193320.png

 

 

 

 

Prototipo Editor di Eventi come in Mire ( Ma meno elaborato per ora XD )

 

Screenshot-20181224-193629.png

 

Connessioni tra moduli.

e come in Mire i moduli hanno la capacità di scambiarsi informazioni sui collegamenti o sul loro comportamento

 

Proprio come accade in mire settando alcuni flag.

ModuleMessage::ModuleMessage(QString Title, int ID)
{
    Pressed = false;
    ModuleName = Title;
    id = ID;
    setFlag(QGraphicsItem::ItemIsMovable);
    setFlag(QGraphicsItem::ItemSendsScenePositionChanges);
}

QRectF ModuleMessage::boundingRect() const
{
    return QRectF(0,0,100,100);
}

Se volete provarlo, vi serve il compilatore QT.

In Alcune versioni di Linux è QT è già pre-installato perché il KDE Plasma è scritto in QT C++

Lo stesso che utilizzo io. altrimenti bisogna scaricarlo dal sito. che la versione community è gratuita.

 

se riscontrate bug segnalate please.

Nell'occasione, buona vigilia a tutti

Edited by Thejuster

Rpgmaker Asset Converter & UI Tool by Making Italia


______________________________________________________
Produzione Software, Componenti e Controlli
_______________________________________________________

*** Linguaggi di Programmazione Conosciuti e competenze Tecniche ***

C#, Javascript, Java, PHP, SQL, Autoit , JQuery, HTML, HTML5, C++, VB.NET,
Android, DirectX, HLSL, XML, Access, LUA, Delphi, Pascal, Assembly, Fortan, Angular JS

Python, Delphi, OpenGL, Git, Bash, ASP, CMake, WinService


Making Italia

 

Link to comment
Share on other sites

Buona vigilia anche a te, Juster! ^ ^

 

Ricordo di quando avevi parlato di C++ e C#, bello poter osservare un po' il codice comodamente da github, una piccola occhiata alle classi la do volentieri sperando di capirci qualcosa.

^ ^

(\_/)
(^ ^) <----coniglietto rosso, me!
(> <)


Il mio Tumblr dove seguire i miei progetti, i progetti della Reverie : : Project ^ ^

http://i.imgur.com/KdUDtQt.png disponibile su Google Play, qui i dettagli! ^ ^

http://i.imgur.com/FwnGMI3.png completo! Giocabile online, qui i dettagli! ^ ^

REVERIE : : RENDEZVOUS (In allenamento per apprendere le buone arti prima di cominciarlo per bene ^ ^) Trovate i dettagli qui insieme alla mia intervista (non utilizzerò più rpgmaker) ^ ^

  Reveal hidden contents

 

Link to comment
Share on other sites

  • 3 months later...

Porto qualche news anche per questo piccolo progettino nato giusto per sperimentare

fin quando posso arrivare lontano utilizzando c++ come linguaggio.

 

 

IDE Migliorato con funzioni aggiuntive come matita, gomma, salvataggio e apertura di mappe.

Salvataggio in formato binario compatibile con tutti i sistemi operativi ovviamente.

 

Immagine.png

 

 

 

Screen dall'engine

 

Immagine.png

 

 

Utilizzo dei Charaset

 

unknown.png?width=584&height=559

 

 

I Charaset possono essere dinamici con dimensioni diversi e frame diversi.

 

Ad esempio posso utilizzare un Chara grande 3 volte quello standard con 8 frame ad esempio.

Basta specificarlo nel costruttore ed il motore elabora in modo automatico tutti i frame e la suddivisione esatta.

 

unknown.png?width=744&height=558

 

 

Semplicemente creando un vero e proprio oggetto denominato Character.


//@param Nome del file
//@param Numero di Frame

Character *NPC = new Character("Hero1",8);

//Movimento automatico con animazione automatica.
//Si sposta gradualmente in un'altra casella

NPC->MoveDown(); 

Avevo pensato anche di implementare tipo delle azioni comuni.

un IA ad esempio, un percorso da seguire.

 

Per ora ho elaborato un semplice template che poi implementerò quando posso.

#define CH Character

template <class T>
class Action
{
    T value[1000];

private:
    int counter = 0;

public:

     struct TAction
     {   
        public:
        CH *npc;
        DWORD act_id;        
     }

    void Add(int id)
    {
        value[counter] = id;
        counter;;
    }
};
Edited by Thejuster

Rpgmaker Asset Converter & UI Tool by Making Italia


______________________________________________________
Produzione Software, Componenti e Controlli
_______________________________________________________

*** Linguaggi di Programmazione Conosciuti e competenze Tecniche ***

C#, Javascript, Java, PHP, SQL, Autoit , JQuery, HTML, HTML5, C++, VB.NET,
Android, DirectX, HLSL, XML, Access, LUA, Delphi, Pascal, Assembly, Fortan, Angular JS

Python, Delphi, OpenGL, Git, Bash, ASP, CMake, WinService


Making Italia

 

Link to comment
Share on other sites

Cos'è quel logo Mappy lì in basso? :3

 

Bene per strumenti e character di dimensioni variabili.

Nel secondo parametro si imposta il numero dei frame, ma tali frame come vanno disposti sul file grafico? Sempre divisi per 4 a seconda della direzione? Implementare un sistema più libero con un formato a più direzioni, animazioni idle, ecc...? ^ ^

(\_/)
(^ ^) <----coniglietto rosso, me!
(> <)


Il mio Tumblr dove seguire i miei progetti, i progetti della Reverie : : Project ^ ^

http://i.imgur.com/KdUDtQt.png disponibile su Google Play, qui i dettagli! ^ ^

http://i.imgur.com/FwnGMI3.png completo! Giocabile online, qui i dettagli! ^ ^

REVERIE : : RENDEZVOUS (In allenamento per apprendere le buone arti prima di cominciarlo per bene ^ ^) Trovate i dettagli qui insieme alla mia intervista (non utilizzerò più rpgmaker) ^ ^

  Reveal hidden contents

 

Link to comment
Share on other sites

Mappy il logo del progetto XD

 

L'ho fatto con quei generatori che si trovano online gratuitamente.

era molto carino e l'ho utilizzato come logo del progetto.

 

 

  On 4/2/2019 at 1:01 PM, Guardian of Irael said:

Nel secondo parametro si imposta il numero dei frame, ma tali frame come vanno disposti sul file grafico? Sempre divisi per 4 a seconda della direzione? Implementare un sistema più libero con un formato a più direzioni, animazioni idle, ecc...? ^ ^

 

no i frame vanno divisi per animazione di movimenti.

 

Le direzioni ho lasciato le classiche 4, uhm ma penso di poterle far definire all'utente finale.

 

i frame intendo la sequenza di animazioni per un direzione.

 

ad esempio questa screen

 

4 Direzioni * 9 Frame

 

http://i.imgur.com/gHpOxaJ.png

 

 

L'algoritmo è molto facile

 

Per la larghezza di ogni singolo frame basta dividere la larghezza dell'intero file, per il numero di frame specificato.


this->char_sizeW = map.width() / TotalFrame;
this->char_sizeH = map.height() / TotalDirection;

int sourceX = iFrame * char_sizeW;
rectSource.X = (m_iFrame / TotalDirection) * char_sizeW;
int sourceY = Direction * char_sizeH;

Al resto pensa l'oggetto Character a tener la posizione, frame, movimenti ed animazione.

 

Aggiungendo semplicemente al metodo update

 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);

     makeCurrent();
     glMatrixMode(GL_MODELVIEW);
     glPushMatrix();


     QColor color = QColor::fromRgb(153,204,255);
     qglClearColor(color.dark());

     glShadeModel(GL_SMOOTH);
     glEnable(GL_DEPTH_TEST);
     glEnable(GL_CULL_FACE);
     glEnable(GL_LIGHTING);
     glEnable(GL_LIGHT0);
     glEnable(GL_MULTISAMPLE);
     static GLfloat lightPosition[4] = { 0.5, 5.0, 7.0, 1.0 };
     glLightfv(GL_LIGHT0, GL_POSITION, lightPosition);


         glShadeModel(GL_FLAT);
         glDisable(GL_CULL_FACE);
         glDisable(GL_DEPTH_TEST);
         glDisable(GL_LIGHTING);

         glMatrixMode(GL_MODELVIEW);
         glPopMatrix();

       //Update Cycle Player and NPC ( Character class Object )  
       Player->Update();
       NPC00->Update();
       NPC01->Update();

  }

Credo che cmq l'idea di avere anche più direzioni sia buona rispetto alle classiche 4 che siamo abituati sempre a vedere.

Edited by Thejuster

Rpgmaker Asset Converter & UI Tool by Making Italia


______________________________________________________
Produzione Software, Componenti e Controlli
_______________________________________________________

*** Linguaggi di Programmazione Conosciuti e competenze Tecniche ***

C#, Javascript, Java, PHP, SQL, Autoit , JQuery, HTML, HTML5, C++, VB.NET,
Android, DirectX, HLSL, XML, Access, LUA, Delphi, Pascal, Assembly, Fortan, Angular JS

Python, Delphi, OpenGL, Git, Bash, ASP, CMake, WinService


Making Italia

 

Link to comment
Share on other sites

Il logo è carino, Mappy quindi! XD

 

4, ma con possibilità di definirle in futuro, non sarebbe male; visto che punti sempre all'ottimizzazione in tutto te la butto lì...

https://www.codeandweb.com/texturepacker

magari è fuori scope per il tipo di giochi che il Mire propone, però un texture packer interno all'engine potrebbe essere interessante, non è un tool così comune.

^ ^

(\_/)
(^ ^) <----coniglietto rosso, me!
(> <)


Il mio Tumblr dove seguire i miei progetti, i progetti della Reverie : : Project ^ ^

http://i.imgur.com/KdUDtQt.png disponibile su Google Play, qui i dettagli! ^ ^

http://i.imgur.com/FwnGMI3.png completo! Giocabile online, qui i dettagli! ^ ^

REVERIE : : RENDEZVOUS (In allenamento per apprendere le buone arti prima di cominciarlo per bene ^ ^) Trovate i dettagli qui insieme alla mia intervista (non utilizzerò più rpgmaker) ^ ^

  Reveal hidden contents

 

Link to comment
Share on other sites

Uhm non so se può essere utile per un progetto rpg.

Per singole Sprite, avere tutto ottimizzato e una gran cosa. Met per i charaset che sono già ottimizzati per frame e dimensioni credo sia inutile.

Rpgmaker Asset Converter & UI Tool by Making Italia


______________________________________________________
Produzione Software, Componenti e Controlli
_______________________________________________________

*** Linguaggi di Programmazione Conosciuti e competenze Tecniche ***

C#, Javascript, Java, PHP, SQL, Autoit , JQuery, HTML, HTML5, C++, VB.NET,
Android, DirectX, HLSL, XML, Access, LUA, Delphi, Pascal, Assembly, Fortan, Angular JS

Python, Delphi, OpenGL, Git, Bash, ASP, CMake, WinService


Making Italia

 

Link to comment
Share on other sites

che bello vedere che il progetto continua!

un pò meno bello vedere sempre le sprite di rpg maker...

Dovresti fare una serie di tutorial su youtube per spiegare come funziona e mostrare come fare alcuni giochi!
Sicuramente attirerebbe!

th_95398_Banner_copia_122_1134lo.jpg

Ho provato a creare un Platform Game usando Rpg Maker...
questo è il risultato:

2319.png

Link to comment
Share on other sites

  • 4 weeks later...

L'idea è buona mi sa che farò proprio qualche piccolo video tutorial style professional per spiegare i primi passi.

Molti abbandono proprio al primo errore credendo che non funzioni. Ma invece non è così

Rpgmaker Asset Converter & UI Tool by Making Italia


______________________________________________________
Produzione Software, Componenti e Controlli
_______________________________________________________

*** Linguaggi di Programmazione Conosciuti e competenze Tecniche ***

C#, Javascript, Java, PHP, SQL, Autoit , JQuery, HTML, HTML5, C++, VB.NET,
Android, DirectX, HLSL, XML, Access, LUA, Delphi, Pascal, Assembly, Fortan, Angular JS

Python, Delphi, OpenGL, Git, Bash, ASP, CMake, WinService


Making Italia

 

Link to comment
Share on other sites

  • 1 month later...

Credo di aver passato anche questa prova :D

Vi allego una screen delle ultime modifiche e funzionalità.

 

Principalmente, il C++ non è così semplice come il .net da programmare,

E trovare una libreria che faccia esattamente quello che mi serve è pò complicato.

Mi sono dovuto creare un interprete JSON ed una classe ad hoc in grado di generare codice JSON compatibile con

javascript nativamente. senza l'utilizzo di tool ad esempio "Node.js" che facilitano il lavoro.

 

Come si nota dalla screen

 

In alto nel menu Tool -> Export to JSON

 

Immagine.jpg

 

 

 

Anche se per la nostra vista è poco chiaro dal blocco notes

 

Immagine.jpg

 

A noi interessa che funzioni.
Ma aprendo il file con un adeguato editor diventa tutto leggibile.

 

Quello che a noi interessa è appunto il risultato finale

 

Immagine.jpg

 

 

Per ora sono abbastanza soddisfatto del risultato e mi fermo un pò su questo progetto.
Magari chissà forse lo continuo quando ho un pò di tempo libero. ( Che mi è molto raro ormai.)

 

Ricordo che tutto e completamente OpenSource raggiungibile da qui: https://github.com/Thejuster/Mappy

 

Se avete vogliadi continuarlo o qualcuno è interessato a capire il funzionamento, potete trovare tutto l'occorrente li sopra.

Rpgmaker Asset Converter & UI Tool by Making Italia


______________________________________________________
Produzione Software, Componenti e Controlli
_______________________________________________________

*** Linguaggi di Programmazione Conosciuti e competenze Tecniche ***

C#, Javascript, Java, PHP, SQL, Autoit , JQuery, HTML, HTML5, C++, VB.NET,
Android, DirectX, HLSL, XML, Access, LUA, Delphi, Pascal, Assembly, Fortan, Angular JS

Python, Delphi, OpenGL, Git, Bash, ASP, CMake, WinService


Making Italia

 

Link to comment
Share on other sites

  Quote

 

senza l'utilizzo di tool ad esempio "Node.js" che facilitano il lavoro.

Per qualche problema dato o per il voler fare tutto "a mano"? ^ ^

 

Buono il fatto che tutto funzioni senza problemi nonostante verrà messo in pausa.

^ ^

(\_/)
(^ ^) <----coniglietto rosso, me!
(> <)


Il mio Tumblr dove seguire i miei progetti, i progetti della Reverie : : Project ^ ^

http://i.imgur.com/KdUDtQt.png disponibile su Google Play, qui i dettagli! ^ ^

http://i.imgur.com/FwnGMI3.png completo! Giocabile online, qui i dettagli! ^ ^

REVERIE : : RENDEZVOUS (In allenamento per apprendere le buone arti prima di cominciarlo per bene ^ ^) Trovate i dettagli qui insieme alla mia intervista (non utilizzerò più rpgmaker) ^ ^

  Reveal hidden contents

 

Link to comment
Share on other sites

uhm no semplicemente perché per far funzionare il Node.js serve appunto un server.

mentre nel mio caso ho deciso di fare semplicemente uno stand-alone funzionate senza nessuna dipedenza.

 

quindi in pratica qualsiasi dispositivo in grado di poter aprire una pagina html, può tranquillamente avviare l'output del gioco

senza ricevere nessun errore o una mancata libreria.

 

Apparte che poi il JSON è semplicissimo,

Basta giocare con la manipolazione delle stringe ed ottenere una struttura come si deve.

 

L'undica differenza a non voler usare il Node.js

è che una mappa salvata in formato JSON, non puoi essere letta con il parse.

ad esempio

 

Utilizzando il Node.JS

'use strict';

const fs = require('fs');

let data = fs.readFileSync('mappa1.json');  
let mappa = JSON.parse(data);  

Mentre la mia tecnica sta nel dichiarare un file javascript ma con una variabile che contiene tutta la struttura json.

ed utilizzare l'oggetto come semplice contenitore array senza parsare niente.

Edited by Thejuster

Rpgmaker Asset Converter & UI Tool by Making Italia


______________________________________________________
Produzione Software, Componenti e Controlli
_______________________________________________________

*** Linguaggi di Programmazione Conosciuti e competenze Tecniche ***

C#, Javascript, Java, PHP, SQL, Autoit , JQuery, HTML, HTML5, C++, VB.NET,
Android, DirectX, HLSL, XML, Access, LUA, Delphi, Pascal, Assembly, Fortan, Angular JS

Python, Delphi, OpenGL, Git, Bash, ASP, CMake, WinService


Making Italia

 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...