[Ideia] .EXE? Não cara, .GAME!

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

[Ideia] .EXE? Não cara, .GAME!

Mensagem por luiz_eldorado em Sex 02 Nov 2012, 19:43

Não queria postar isso, mas à pedido do moisesBR, vou postar.

Arquivos .game
O usuário baixaria um programa exe que eu mesmo fiz, que executa arquivos .game (não fiz ainda...). Então ele baixaria arquivos .game (que são zip com extensão mudada) de algum lugar, nesses arquivos teriam jogos criados no Game Maker - não o exe, mas sim os objetos, sprites, room espalhados em arquivos dentro deste zip.

Cada exe que você baixa de jogos tem 2mb à mais do que o próprio jogo. Se você baixar esses 2mb apenas uma vez nesse programa, e depois baixar apenas os jogos mesmo, estará economizando 2mb por cada jogo. Isso é um bom alívio para os que tem internet 3g (que na verdade é 2g, mas isso não vem ao caso).

Porém estou com problemas, estou procurando ajuda mas ninguém me ajuda não tive muitos sucessos. Preciso de ajuda com coisas como: Como será a organização dos arquivos dentro do arquivo? Lembrando que o jogo será carregado dentro do executável, no Creation Code da primeira room sem nome.

Ah, eu já vi o jogo genérico do saim.

luiz_eldorado

Ranking : Nota C
Número de Mensagens : 928
Idade : 17
Data de inscrição : 30/07/2011
Notas recebidas : C
Reputação : 47
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 1

http://luizpontes.tk/

Voltar ao Topo Ir em baixo

Re: [Ideia] .EXE? Não cara, .GAME!

Mensagem por Alex FC em Sex 02 Nov 2012, 20:16

Cara a ideia é legal, só que não.

Resumindo teriamos que ter um programa para rodar os jogos. Seria como o Game Maker 1. Iria perder a praticidade.

Economizar apenas 2 Mb não é o bastante para a ser atrativo, mesmo que isso seja pra vários jogos. 2G baixa rápido:

2G - EDGE - 256 Kbits /s - 32 Kbytes /s: baixaria em 1 m e 04 segundos;
2G - GPRS - 56 Kbits /s - 7 Kbytes /s: baixaria em 4 m e 45 segundos;

Lógicamente existe o limite de tráfego que limita a velocidade, mas mesmo assim não demora muito não.

É teoricamente fácil fazer isso que você quer (Usando funções binárias). Mas isso implicaria diretamente na velocidade do jogo, pois teriamos que descompactar os arquivos e logo também teriamos que carrega-los.

Edit: Olhe o esquema que fiz para tu entender como é "facil":


FLWS!

Alex FC

Ranking : Nota A
Número de Mensagens : 2503
Idade : 23
Data de inscrição : 20/12/2008
Notas recebidas : B A
Reputação : 174
Insignia 1 x 1 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 2
   : 1
   : 1

http://redscreensoft.blogspot.com

Voltar ao Topo Ir em baixo

Re: [Ideia] .EXE? Não cara, .GAME!

Mensagem por Overflow em Ter 06 Nov 2012, 14:47

acho que com um registro no sistema operacional do usuario, daria para executar sem precisar de um programa, ou seja, pelo DOS (cmd) do sistema operacional, assim o computador entenderia a extensão...



Overflow

Número de Mensagens : 42
Data de inscrição : 22/03/2012
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: [Ideia] .EXE? Não cara, .GAME!

Mensagem por theguitarmester em Ter 06 Nov 2012, 15:45

Overflow escreveu:acho que com um registro no sistema operacional do usuario, daria para executar sem precisar de um programa, ou seja, pelo DOS (cmd) do sistema operacional, assim o computador entenderia a extensão...


Acho que você não entendeu o que está sendo debatido, ele quer fazer um Arquivo/jogo/projeto que exexuta outros, esse outros que seriam jogos feitos com base no GameMaker, ou algo assim.


Vou Ver se consigo Fazer Algo do Tipo.

theguitarmester

Ranking : Sem avaliações
Número de Mensagens : 1908
Idade : 21
Data de inscrição : 28/02/2012
Notas recebidas : B
Reputação : 80
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 1
Prêmios
   : 2
   : 2
   : 1

http://guitarmester.no.comunidades.net/index.php?pagina=19362978

Voltar ao Topo Ir em baixo

Re: [Ideia] .EXE? Não cara, .GAME!

Mensagem por saim em Ter 06 Nov 2012, 16:15

Eu andei pensando, acho que aquilo que falei por mensagem funcionaria.

Cada arquivo .game pode ter um arquivo com nome padronizado, que vou chamar de "principal". O executável procuraria esse arquivo e veria as instruções dentro dele, que seriam transformadas em uma string e executadas. Nessas instruções estariam as localizações dos demais arquivos dentro do .game, que seriam acessados e transformados em strings, na ordem definida pelo arquivo principal.
Aí, essas strings seriam executadas na ordem correta, o que adicionaria objetos, eventos, recursos, tudo de dentro do .game. A restrição que você comentou das aspas acaba não comprometendo muito a programação. Falo por experiência própria - o meu game genérico tem essa restrição e eu me viro numa boa.

Claro que há mais restrições, também.

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Re: [Ideia] .EXE? Não cara, .GAME!

Mensagem por Luiz A. Oliveira em Ter 06 Nov 2012, 17:08

Teria um jeito de entender como o GM compila os arquivos .gmk, seria mais fácil fazer isso em Delphi.
Não sei se estou falando besteira, mas seria como um GMK compactado em um arquivo de extensão personalizada (.game no caso) dai você extraía ele para uma pasta temporária e dava um jeito de compilar e executar o .gmk.

Seria isso que seu programa faria?

Você quer ele em GML?

Posso dar uma pesquisada, você sabe como se chama programas que fazem isso?

Luiz A. Oliveira

Ranking : Nota C
Número de Mensagens : 914
Idade : 19
Data de inscrição : 08/09/2010
Notas recebidas : D-B-C
Reputação : 5
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://luizgm.blogspot.com/

Voltar ao Topo Ir em baixo

Re: [Ideia] .EXE? Não cara, .GAME!

Mensagem por luiz_eldorado em Ter 06 Nov 2012, 22:00

@Alex FC: Não sei, mas pra mim parece que 2mb é muita coisa. Deve ser porque, quando o download é muito grande, ele dá falhar no meio, tendo que reiniciar. E pra mim, 5 minutos valem outro. Esse esquema que você fez, é meio estranho. Pelo jeito você pensa no arquivo .game como um arquivo com vários arquivos. Isso pode ser mais simples usando .zip. Mesmo assim, o que siginifica um "arquivo objeto"? O que teria dentro dele, exatamente?
PS: "Roons" Razz

@Overflow e @theguitarmester: É o que o theguitarmester disse. Se conseguir fazer, me avisa >)

@saim: Sim, sim, isso mesmo que eu pensei... Mas que restrição que comentei entre aspas?

@luiz_100juizo: É difícil entender como GM faz estes arquivos, e não tem nenhum tipo de informação na internet. Não adianta nada mascarar o .gmk por .game. Assim isso meio que perderia a utilidade. Meu programa vai ter um tipo de arquivo próprio, contendo todas as informações que encontraria num .gmk, porém de forma "diferente". Acho que não vai achar nada na net.

Por enquanto nenhum progresso. Se quiserem ver o GMK do executador do .game...

!siam étA

luiz_eldorado

Ranking : Nota C
Número de Mensagens : 928
Idade : 17
Data de inscrição : 30/07/2011
Notas recebidas : C
Reputação : 47
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 1

http://luizpontes.tk/

Voltar ao Topo Ir em baixo

Re: [Ideia] .EXE? Não cara, .GAME!

Mensagem por theguitarmester em Qua 07 Nov 2012, 00:20

Tentei aprender sobre seu projeto, mas não entendi muito, Resolvi Criar um EXE meu, depois se funcionar algo, postarei aqui, mas ele por enquanto vai ser bem testes mesmo.

theguitarmester

Ranking : Sem avaliações
Número de Mensagens : 1908
Idade : 21
Data de inscrição : 28/02/2012
Notas recebidas : B
Reputação : 80
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 1
Prêmios
   : 2
   : 2
   : 1

http://guitarmester.no.comunidades.net/index.php?pagina=19362978

Voltar ao Topo Ir em baixo

Re: [Ideia] .EXE? Não cara, .GAME!

Mensagem por PedroX em Qua 07 Nov 2012, 14:40

Uma ferramenta interessante que poderia ajudá-lo é:

http://gmbr.forumeiros.com/t21709-gmk-splitter

Com ela você extrai o conteúdo do GMK para uma pasta e vice-versa.

Desse modo, você pode ler os arquivos sem estes estarem compilados ou salvos de algum outro modo.

Editado:

Continuando a ideia, você pode fazer assim:

Ao escolher o GMK, o seu programa via linha de comando extrai tudo para uma pasta. Então ele compacta em um arquivo com senha. Ele gera também um código e salva num arquivo de texto. Quando a pessoa distribuir, só o programa poderá decifrar o código e então saberá a senha para descriptografar. Então você precisa agora é ler os arquivos XML, que são de texto, gerando assim os objetos. Essa é a parte mais complicada. Existe uma DLL, a Ether, que lê esses arquivos mais facilmente.

Essa é apenas uma ideia, que pode ou não dar certo.

PedroX

Ranking : Nota C
Número de Mensagens : 6034
Idade : 21
Data de inscrição : 26/07/2008
Notas recebidas : C+B
Reputação : 286
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: [Ideia] .EXE? Não cara, .GAME!

Mensagem por saim em Qui 08 Nov 2012, 16:36

luiz_eldorado escreveu:Mas que restrição que comentei entre aspas?
Não, você não comentou entre aspas... você comentou A RESPEITO das aspas!
É que ao acrescentar eventos usando object_event_add a gente entra com o evento na forma de uma string. Essa string, claro usa aspas (' ou ") pra ser considerada string. Como nós queremos incluir strings muitos eventos (como, digamos, o draw_event), precisamos colocar aspas dentro dessa string, o que o game maker consideraria como o fechamento da string anteriormente aberta.
Um exemplo, pra não enlouquecermos:
Código:
object_event_add(objeto, ev_draw, 0, 'draw_text(x, y, 'olá mundo');');
A saída, como você sabe, é usar aspas diferentes. No exemplo, a string a ser desenhada seria "olá mundo", com aspas duplas. E com essa saída dá pra contornar a maioria dos problemas.

Claro que sempre tem a string dentro da string dentro da string, até a loucura. Pra isso, eu costumo armazenar as strings em variáveis e usá-las. Dá um trabalho maior, não dá pra generalizar a solução, mas resolve.
Código:
globalvar texto; texto = 'olá mundo';
object_event_add(objeto, ev_draw, 0, 'draw_text(x, y, texto);');

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Re: [Ideia] .EXE? Não cara, .GAME!

Mensagem por theguitarmester em Qui 08 Nov 2012, 16:48

Saim, essa é uma Questão Muito chata Mesmo, estava um dia a Fazer um Projeto que soltava arquivos, daí testei fazer com uma Foto, mas daí no Texto da foto Contem aspas dos 2 tipos, e então dava erro.

Será que não existe nem um Modo dele entender algo como só STRING, ou senão um modo em que para fechar o ASPAS aberto, teria de ter o Mesmo numero de Aspas?
Por exemplo:
varivaveltexto = """"""""""asdbjhzbdfkjad fasdhfo\s 2' 'bhlbl2 e32h1o '''i l'glui' ' uyg'' ' 'lui'gi'lg "IL"UG """""gui xxx x 200
3872912b 1 12ib3 //continua texto da variavel y y 22 iç2 2hb222 i
1 1 *.*+* * // edoqw qb23 432 2 1
1li GH""""kjç GHGH'" kjsdblkjsa """"""""""
//texto já fechado

theguitarmester

Ranking : Sem avaliações
Número de Mensagens : 1908
Idade : 21
Data de inscrição : 28/02/2012
Notas recebidas : B
Reputação : 80
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 1
Prêmios
   : 2
   : 2
   : 1

http://guitarmester.no.comunidades.net/index.php?pagina=19362978

Voltar ao Topo Ir em baixo

Re: [Ideia] .EXE? Não cara, .GAME!

Mensagem por luiz_eldorado em Qui 08 Nov 2012, 18:48

@PedroX: Hmmm, interessante esse GMK Spliter. Sim, seu edit é uma boa idéia, mas ler todos esses arquivos em xml... dá trabalho, vou tentar um pouco aqui, gostei dessa Ether, talvez dê pra criar um navegador com ela!

@saim:
saim escreveu:
luiz_eldorado escreveu:Mas que restrição que comentei entre aspas?
Não, você não comentou entre aspas... você comentou A RESPEITO das aspas!
Ri nessa parte! XD Esse code que deu de exemplo é loucura. O jeito é ler todos os eventos de arquivos mesmo. Algo assim:
Código:
object_event_add(objeto,ev_draw,0,execute_file("lerarquivo.gml","objeto_draw.objev"));

@theguitarmester: Acho que não há comos sobre isso.

Bem, não estou nada animado com o projeto, está aí:
Código:

/*** Simples sistema de carregamento de arquivos ".game" ***/

//Tela de "Loading"
draw_set_color(c_white); draw_set_halign(1); draw_set_valign(1);

screen_redraw(); draw_text(room_width/2,room_height/2,'Waiting user...'); screen_refresh();
//Executar arquivo se for aberto com o programa ("Abrir com...", etc).
//Caso aberto diretamente, perguntar pelo arquivo.
var fname;
fname=parameter_string(1);
if fname="" {
fname=get_open_filename("Game file (*.game)|*.game","");
if fname="" {game_end(); exit;}
}

//Para evitar problemas
if !file_exists(fname) {show_message("The file not exists."); game_end(); exit;}

//Recriar pasta
if !directory_exists(working_directory+"\temp")
{directory_create(working_directory+"\temp");}

screen_redraw(); draw_text(room_width/2,room_height/2,'Unziping...'); screen_refresh();

//Necessário para o VBSZIP (o arquivo tem que ser ".zip")
file_copy(fname,working_directory+'\temp.zip');

//Começo do "VBSZIP" (por Ninja8086)
//Foi modificado um pouco por razões de espaço, e etc.
//E não está em scripts, pois não se pode para este programa.

var Script, ZipFile, ZipDir, VBScript, TempFile;
ZipFile  = working_directory+'\temp.zip';
ZipDir  = working_directory+"\temp";

Script  = file_text_open_write(environment_get_variable('TEMP')+'\gmzip.vbs');
VBScript = '
    Set GMZIP = CreateObject("Shell.Application")
    GMZIP.NameSpace("' + ZipDir + '").CopyHere GMZIP.NameSpace("' + ZipFile + '").Items
';
file_text_write_string(Script, VBScript);
file_text_close(Script);

TempFile = environment_get_variable('TEMP')+'\gmzip.vbs';
execute_program('wscript', TempFile, true);
file_delete(TempFile);

//Fim do "VBSZIP"

//Não preciso mais disto
file_delete(working_directory+'\temp.zip');

//Configurações globais do jogo
screen_redraw(); draw_text(room_width/2,room_height/2,'Loading Global Game Settings');
screen_refresh();

var a;
a=file_text_open_read(working_directory+'\temp\global_game_settings');

var fullscreen,scale,color,sizeable,stayontop,showborder,showicons,cursor,colordepth,w,h,
    frequency,syn,priority;

                    fullscreen=real(string_digits(file_text_read_string(a)));
file_text_readln(a); scale=real(string_digits(file_text_read_string(a)));
file_text_readln(a); color=real(string_digits(file_text_read_string(a)));
file_text_readln(a); sizeable=real(string_digits(file_text_read_string(a)));
file_text_readln(a); stayontop=real(string_digits(file_text_read_string(a)));
file_text_readln(a); showborder=not real(string_digits(file_text_read_string(a)));
file_text_readln(a); showicons=not real(string_digits(file_text_read_string(a)));
file_text_readln(a); cursor=real(string_digits(file_text_read_string(a)))+1;
file_text_readln(a); colordepth=real(string_digits(file_text_read_string(a)));
file_text_readln(a); w=real(string_digits(file_text_read_string(a)));
file_text_readln(a); h=real(string_digits(file_text_read_string(a)));
file_text_readln(a); frequency=real(string_digits(file_text_read_string(a)));
file_text_readln(a); syn=real(string_digits(file_text_read_string(a)));
file_text_readln(a); priority=real(string_digits(file_text_read_string(a)));

file_text_close(a);

window_set_fullscreen(fullscreen); window_set_region_scale(scale,0); window_set_color(color);
window_set_sizeable(sizeable); window_set_stayontop(stayontop);
window_set_showborder(showborder); window_set_showicons(showicons); window_set_cursor(cursor);
display_set_all(w,h,frequency,colordepth); set_synchronization(syn);
set_program_priority(priority);

//Objetos
screen_redraw(); draw_text(room_width/2,room_height/2,'Loading Objects'); screen_refresh();

//begin; Créditos ao Jiraya, modificado por mim para fazer o que eu realmente queria
var i,f,pastas,dir,arquivos;
pastas=ds_list_create();
arquivos=ds_list_create();
dir=working_directory+"\Objects";
for(i=file_find_first(dir+"\*",fa_directory);i!="";i=file_find_next();)
{
if(i=="."||i=="..")continue;
if(directory_exists(dir+"\"+i)) {
ds_list_add(pastas,dir+"\"+i);

execute_string('globalvar '+i+';');
res=object_add();
variable_global_set(i,res);
a=file_text_open_read(dir+"\"+i+'\settings');
object_set_sprite(res,real(file_text_read_string(a))); file_text_readln(a);
object_set_visible(res,real(file_text_read_string(a))); file_text_readln(a);
object_set_solid(res,real(file_text_read_string(a))); file_text_readln(a);
object_set_depth(res,real(file_text_read_string(a))); file_text_readln(a);
object_set_persistent(res,real(file_text_read_string(a))); file_text_readln(a);
object_set_parent(res,real(file_text_read_string(a))); file_text_readln(a);
object_set_mask(res,real(file_text_read_string(a))); file_text_close(a);

}
}
file_find_close();

while(ds_list_size(pastas))
{
dir=ds_list_find_value(pastas,0);
ds_list_delete(pastas,0);
for(i=file_find_first(dir+"\*.*",fa_directory);i!="";i=file_find_next();)
{
if(i=="."||i=="..")continue;
if(directory_exists(dir+"\"+i))ds_list_add(pastas,dir+"\"+i);
if(file_exists(dir+"\"+i)) {
ds_list_add(arquivos,dir+"\"+i);

s='';
a=file_text_open_read(dir+"\"+i);
while !file_text_eof(a) {
s+=file_text_read_string(a)+chr(13)+chr(10);
file_text_readln(a);
}
file_text_close(a);
object_event_add(res,string_copy(i,1,string_pos(' ',i)),
string_copy(i,string_pos(' ',i)+1,string_length(i)-string_pos(' ',i)+1),s);

}
}
file_find_close();
}
ds_list_destroy(arquivos);
ds_list_destroy(pastas);

//Rooms
screen_redraw(); draw_text(room_width/2,room_height/2,'Loading Rooms'); screen_refresh();

var i,f,pastas,dir,arquivos;
pastas=ds_list_create();
arquivos=ds_list_create();
dir=working_directory+"\Rooms";
for(i=file_find_first(dir+"\*.*",fa_directory);i!="";i=file_find_next();)
{
if(i=="."||i=="..")continue;
if(directory_exists(dir+"\"+i)) {
ds_list_add(pastas,dir+"\"+i);

execute_string('globalvar '+i+';');
res=room_add();
variable_global_set(i,res);
a=file_text_open_read(dir+"\"+i+'\settings');
room_set_caption(res,file_text_read_string(a)); file_text_readln(a);
room_set_width(res,real(file_text_read_string(a))); file_text_readln(a);
room_set_height(res,real(file_text_read_string(a))); file_text_readln(a);
room_set_code(res,"room_speed="+file_text_read_string(a)+";"); file_text_readln(a);
room_set_persistent(res,real(file_text_read_string(a)));
file_text_close(a);

a=file_text_open_read(dir+"\"+i+'\background');
var col, show;
show=real(file_text_read_string(a)); file_text_readln(a);
col=real(file_text_read_string(a)); file_text_readln(a);
room_set_background_color(res,col,show); file_text_close(a);

var xx,yy,oo;
a=file_text_open_read(dir+"\"+i+'\instances');
while !file_text_eof(a) {
s=file_text_read_string(a)+' '; file_text_readln(a);
xx=real(string_copy(s,1,string_pos(' ',s))); s=string_delete(s,1,string_pos(' ',s)+1);
yy=real(string_copy(s,1,string_pos(' ',s))); s=string_delete(s,1,string_pos(' ',s)+1);
oo=real(string_copy(s,1,string_pos(' ',s)));
room_instance_add(res,xx,yy,oo);
}

//Futuramente terá tiles e backgrounds! Ou não! XD

}
}
file_find_close();

ds_list_destroy(arquivos);
ds_list_destroy(pastas);
//end;

if directory_exists(working_directory+"\temp") {
screen_redraw();
draw_text(room_width/2,room_height/2,'Deleting folders...'); screen_refresh();

//Começo do "BatchScript" (por Ninja8086)
//Usado para deletar pastas silenciosamente... mwhuahuahuahua! ¬_¬
//Foi modificado um pouco por razões de espaço, e etc.
var runcmd, runvbs, script, tempdr;
tempdr = environment_get_variable('TEMP');
runcmd = tempdr + '\run.cmd';
runvbs = tempdr + '\run.vbs';

script = file_text_open_write(runcmd);
file_text_write_string(script,'rd /s /q "'+working_directory+'\temp"');
file_text_close(script);

script = file_text_open_write(runvbs);

file_text_write_string(script,'
set cmdprompt = createobject("wscript.shell")
cmdprompt.run "' + runcmd + '"'
);

file_text_write_string(script, ',0');
file_text_write_string(script, ', true');
file_text_close(script);

if file_exists(runcmd) and file_exists(runvbs) {
    execute_program('wscript', '"' + runvbs + '"', true);
    file_delete(runcmd);
    file_delete(runvbs);
}
//Fim do "BatchScript"
}

//Valores resetados, para não mudar o jogo
draw_set_color(0); draw_set_halign(0); draw_set_valign(0);

//"Go Go Go Pb"!
room_goto_next();
ATENÇÃO! Não sei o que eu pus aí dentro e nem se funciona direito. Coloque no Creation Code da room.

Aleatorizador.game:
Código:
data:application;base64,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

luiz_eldorado

Ranking : Nota C
Número de Mensagens : 928
Idade : 17
Data de inscrição : 30/07/2011
Notas recebidas : C
Reputação : 47
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 1

http://luizpontes.tk/

Voltar ao Topo Ir em baixo

Re: [Ideia] .EXE? Não cara, .GAME!

Mensagem por PedroX em Qui 08 Nov 2012, 19:15

Finalmente, acho que achei uma solução. Sobre ela:

Não é a única.
Não é complicada demais.
Gera um jogo mais rápido que o normal.
Gera um jogo mais pesado que o normal, mas a pessoa baixa só o GMK.
É demorada.

O que você poderia fazer é compilar o GMK com o EnigmaDEV, que é uma IDE alternativa ao GM. Ela vem junto com o LGM, mas você não precisará dele pra isso. O que você vai fazer é compilar via Prompt de Comando.

Resumindo:

Baixar o Enigma e instalá-lo. Site: enigma-dev.org
Criar um programa que faz o Enigma compilar o GMK via linha de comando.
Opcionalmente, você pode usar o GMK Splitter.

Até!

PedroX

Ranking : Nota C
Número de Mensagens : 6034
Idade : 21
Data de inscrição : 26/07/2008
Notas recebidas : C+B
Reputação : 286
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: [Ideia] .EXE? Não cara, .GAME!

Mensagem por saim em Sex 09 Nov 2012, 09:47

Eu não ia responder, porque o PedroX encontrou uma solução totalmente diferente e que parece definitiva. Mas teve um comentário que ficou rodando na minha cabeça:

luiz_eldorado escreveu:O jeito é ler todos os eventos de arquivos mesmo. Algo assim:
Código:
object_event_add(objeto,ev_draw,0,execute_file("lerarquivo.gml","objeto_draw.objev"));
No caso do meu jogo genérico, acho trabalhoso demais, porque já organizei minha cabeça pra trabalhar de outra forma. Mas é interessante, a idéia. Vamos aos prós e contras.

contras (ou "porque não vou fazer isso"): cada objeto tem vários eventos. Pode haver objetos com poucos (ou até nenhum) eventos, mas em geral, eles têm pelo menos 3 eventos (create - step - draw). Um jogo bom tem algumas dezenas de objetos (também não é regra, mas é comum). Daí, o número de arquivos gerados usando a minha forma de organização é multiplicado pelo número de eventos usando essa nova forma. Organizar-se no meio de tantos arquivos, debugar, achar a linha que causa o erro (principalmente o maldito "unexpected error") seria algo trabalhoso.
Mas estou pré-supondo que você planeje programar diretamente nos arquivos externos. Posso estar muito enganado.

Agora, os prós - ainda supondo que você planeje programar diretamente nos arquivos externos: Isso possibilita, talvez até facilite, a programação modulada!
Programação modulada é um conceito que eu ainda não domino totalmente, mas já postei um tutorial a respeito da máquina de estados finitos, que usa isso. É programar em pedacinhos de código que se conectam, um chamando o outro. A vantagem disso é que você pode pegar um trecho de código e aplicar em situações diferentes, diminuindo o tempo de programação.
Isso está ficando abstrato, deixa eu partir pra um exemplo. Pense nos inimigos do Mario. Sempre que usamos um exemplo em programação de jogos, o Mario aparece... Os goombas (aqueles bichos marrons) se movem de um lado pro outro e, quando batem em algum obstáculo, mudam de direção. Quando acaba o chão, eles caem até encontrar mais chão ou sair da tela. Os Koopas (as tartarugas) fazem a mesma coisa. A diferença está no resultado de pular em cada um deles (e nas sprites, claro).
Ora, poderíamos usar o mesmo step event pros dois objetos, mudando apenas a colisão com o Mario!
Aí vem outro Koopa, um que anda pulando feito uma gazela. Bom, ainda dá pra usar o mesmo step event, se o contato com o chão for um evento à parte. Aí, no create, colocamos uma velocidade vertical no bicho e, ao colidir com o chão, ao invés de aterrissar, ele pula de novo. A colisão com o Mario fica igual à do outro Koopa e temos 3 inimigos diferentes com uns poucos arquivos.
É claro que isso requer uma maturidade muito grande da parte do designer e do programador, mas que fica viável, fica.

Particularmente, eu prefiro gerar templates e modificá-los. Issa gasta alguns bytes (talvez K-bytes) a mais, mas pra mim fica muito mais fácil de administrar.

luiz_eldorado escreveu:@theguitarmester: Acho que não há comos sobre isso.
De fato. Pesquisei e vi que quando queremos uma nova linha, usamos o símbolo "#" e quando queremos o símbolo, usamos "\#". Tentei usar o mesmo raciocínio pras aspas, mas não funcionou. Pra muitas aspas, muitas variáveis ou muito trabalho, não vejo outra solução.
Código:
globalvar texto;
texto[0] = 'olá mundo';
texto[1] = '"' + texto[0] + '"';
texto[2] = '"' + texto[1] + '"';
object_event_add(objeto, ev_draw, 0, 'draw_text(20, 20, texto[2]);');

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Re: [Ideia] .EXE? Não cara, .GAME!

Mensagem por theguitarmester em Sex 09 Nov 2012, 11:43

CONSEGUI UM JEITO DE USAR OS DOIS TIPOS DE ASPAS NO TEXTO, eu acho. óia propaganda!

nos testes que fiz aqui funcionou, Basicamente é isto, Você cria seu texto, Substitui uma das aspas(a que você no ecomeço e no fim) por algum outro texto que terá de ser sempre e apenas as aspas.Exemplo:
texto desejado texto="estava querendo fazer um "programa" que é só '1' arquivo, mas nele você pode "Lançar" ele irá extrair outros arquivos como "fotos", "DLLs", "Audio" 'basicamente' qualquer arquivo mas não conseguia devido ao problema das aspas, porque estes arquivos tem os dois tipos de aspas, assim ' e assim " "mas no jogo ficará assim:
Código:
texto="estava querendo fazer um "programa" que é só '1' arquivo, mas nele você pode "Lançar" ele irá extrair outros arquivos como "fotos",  "DLLs", "Audio" 'basicamente' qualquer arquivo mas não conseguia devido ao problema das aspas, porque estes arquivos tem os dois tipos de aspas, assim ' e assim "        "
use o FIND e REPLACE ainda em fase de programação e deixe seu texto assim:
Código:
texto="estava querendo fazer um <<aspas>>programa<<aspas>> que é só '1' arquivo, mas nele você pode <<aspas>>Lançar<<aspas>> ele irá extrair outros arquivos como <<aspas>>fotos<<aspas>>,  <<aspas>>DLLs<<aspas>>, <<aspas>>Audio<<aspas>> 'basicamente' qualquer arquivo mas não conseguia devido ao problema das aspas, porque estes arquivos tem os dois tipos de aspas, assim ' e assim <<aspas>>        "
agora quando executar o jogo faça o processo inverso, use o string_replace_all assim:
texto=string_replace_all(texto,"<>",'"')

Vou fazer uma Engine Assim, que nome eu posso colocar nela?
Usar 2tipos de aspas

theguitarmester

Ranking : Sem avaliações
Número de Mensagens : 1908
Idade : 21
Data de inscrição : 28/02/2012
Notas recebidas : B
Reputação : 80
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 1
Prêmios
   : 2
   : 2
   : 1

http://guitarmester.no.comunidades.net/index.php?pagina=19362978

Voltar ao Topo Ir em baixo

Re: [Ideia] .EXE? Não cara, .GAME!

Mensagem por Rodrigo Santiago em Dom 18 Nov 2012, 16:20

Você entende até que muito bem de scripts, mais lembre-se que exportar um jogo com o código fonte fácil de ser editado é muito arriscado e a maioria das pessoas não deseja que seus jogos sejam hackeados.
É bem mais seguro .exe . Mais sua ideia é compreensível.

Rodrigo Santiago

Ranking : Nota B
Número de Mensagens : 1281
Idade : 20
Data de inscrição : 28/07/2012
Notas recebidas : C + C + B
Reputação : 73
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 3
   : 1
   : 3

Voltar ao Topo Ir em baixo

Re: [Ideia] .EXE? Não cara, .GAME!

Mensagem por Conteúdo patrocinado Hoje à(s) 13:43


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum