mirror of
https://github.com/ondra-novak/gates_of_skeldal.git
synced 2025-07-22 07:04:47 -04:00
github publish
This commit is contained in:
commit
506e23bf32
542 changed files with 120675 additions and 0 deletions
976
MAPS/MAPEDIT.C
Normal file
976
MAPS/MAPEDIT.C
Normal file
|
@ -0,0 +1,976 @@
|
|||
#include <skeldal_win.h>
|
||||
#include <stdio.h>
|
||||
#include <mem.h>
|
||||
#include <malloc.h>
|
||||
#include <stdlib.h>
|
||||
#include <types.h>
|
||||
#include <memman.h>
|
||||
#include <event.h>
|
||||
#include <devices.h>
|
||||
#include <bmouse.h>
|
||||
#include <bgraph.h>
|
||||
#include <gui.h>
|
||||
#include <basicobj.h>
|
||||
#include <strlite.h>
|
||||
#include <strlists.h>
|
||||
#include <zvuk.h>
|
||||
#include <signal.h>
|
||||
#include <inicfg.h>
|
||||
#include "dump.h"
|
||||
#include "mapy.h"
|
||||
#include "edit_map.h"
|
||||
#include "globals.h"
|
||||
#include "steny.h"
|
||||
#include "save_map.h"
|
||||
#include "wiz_tool.h"
|
||||
#include "mob_edit.h"
|
||||
#include "../crashdump.h"
|
||||
#include "../mapedit/version.h"
|
||||
#include "../mapedit/editor.h"
|
||||
|
||||
//#define FONTPATH "d:\\tp\\vga\\"
|
||||
#define FONTPATH "..\\font\\"
|
||||
extern T_EVENT_ROOT *ev_tree;
|
||||
|
||||
static char newmap=0;
|
||||
static char nosound=0;
|
||||
TSTR_LIST config_file;
|
||||
|
||||
word *icones,*vga_font;
|
||||
char *sample_path;
|
||||
char *script_name;
|
||||
extern word ikones;
|
||||
extern word boldcz;
|
||||
extern word font8x5;
|
||||
word icone_color[7]={RGB555(8,8,8),RGB555(31,31,31),RGB555(0,0,15),RGB555(16,16,16),RGB555(0x1b,0x1b,0x1b)};
|
||||
extern word sipka;
|
||||
static char *error_texts[]=
|
||||
{
|
||||
"Progamov chyba",
|
||||
"Pr vˆ bˆ‘¡c¡ ud lost zp–sobila neplatnou referenci pamˆŸi!",
|
||||
"Pr vˆ bˆ‘¡c¡ ud lost zp–sobila zpracov n¡ neplatn‚ instrukce!",
|
||||
"Syst‚m zachytil neo‡ek vanou chybu programu!"
|
||||
};
|
||||
|
||||
static char ask_exit_status;
|
||||
|
||||
word menu_win=-1;
|
||||
char hicolor=1;
|
||||
char sekceid[8]="<BLOCK>";
|
||||
long pc_counter=0;
|
||||
long pc_max=1;
|
||||
long pc_result=0;
|
||||
long pc_tick=0;
|
||||
int test_mode=4;
|
||||
char *background_file=NULL;
|
||||
int editor_win=-1;
|
||||
char color16=0;
|
||||
|
||||
void close_test()
|
||||
{
|
||||
close_window(waktual);
|
||||
}
|
||||
|
||||
void logo(void)
|
||||
{
|
||||
CTL3D ctl;
|
||||
word *p;
|
||||
|
||||
ctl.light=RGB555(31,31,31);
|
||||
ctl.shadow=RGB555(16,16,16);
|
||||
ctl.bsize=2;
|
||||
ctl.ctldef=0;
|
||||
draw_border(120,120,0x18f,0x6a,&ctl);
|
||||
p=(word *)LoadResourceFont("MAPEDIT.HI");
|
||||
put_picture(120,120,p);
|
||||
// free(p);
|
||||
showview(0,0,0,0);
|
||||
}
|
||||
|
||||
void about();
|
||||
|
||||
void movesize_test()
|
||||
{
|
||||
WINDOW *w;
|
||||
|
||||
w=find_window(map_win);
|
||||
if (w==NULL) return;
|
||||
movesize_win(w,0,0,100,100);
|
||||
redraw_desktop();
|
||||
}
|
||||
|
||||
void forced_map_test()
|
||||
{
|
||||
int i;
|
||||
|
||||
for(i=0;i<maplen;i++)
|
||||
{
|
||||
if (minfo[i].flags & 0x1)
|
||||
{
|
||||
call_testmap(i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
EVENT_PROC(exit_key)
|
||||
{
|
||||
int c;
|
||||
|
||||
GET_USER_PTR();
|
||||
WHEN_MSG(E_INIT)
|
||||
return;
|
||||
WHEN_MSG(E_KEYBOARD)
|
||||
{
|
||||
c=GET_DATA(int);
|
||||
if ((c & 0xff)==0 && (c>>8)=='D') terminate();
|
||||
if ((c & 0xff)==0 && (c>>8)==';') about();
|
||||
if ((c & 0xff)==0 && (c>>8)=='?') save_dump();
|
||||
if ((c & 0xff)==0 && (c>>8)=='<') movesize_test();
|
||||
if ((c & 0xff)=='t' || (c & 0xff)=='T' || (c & 0xff)==' ' ) forced_map_test();
|
||||
}
|
||||
}
|
||||
|
||||
EVENT_PROC(wait_ms_key)
|
||||
{
|
||||
MS_EVENT *ms;
|
||||
|
||||
GET_USER_PTR();
|
||||
WHEN_MSG(E_INIT)
|
||||
return;
|
||||
WHEN_MSG(E_MOUSE)
|
||||
{
|
||||
ms=get_mouse(GET_MSG_VAR());
|
||||
if (ms->event_type & 4) terminate();
|
||||
}
|
||||
}
|
||||
|
||||
EVENT_PROC(main_menu)
|
||||
{
|
||||
MS_EVENT *ms;
|
||||
|
||||
GET_USER_PTR();
|
||||
WHEN_MSG(E_INIT)
|
||||
return;
|
||||
WHEN_MSG(E_MOUSE)
|
||||
{
|
||||
ms=get_mouse(GET_MSG_VAR());
|
||||
if (ms->event_type & 32) select_window(menu_win),redraw_window();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void wait_mouse(void)
|
||||
{
|
||||
send_message(E_ADD,E_MOUSE,wait_ms_key);
|
||||
escape();
|
||||
send_message(E_DONE,E_MOUSE,wait_ms_key);
|
||||
}
|
||||
|
||||
EVENT_PROC(all_status)
|
||||
{
|
||||
char *c;
|
||||
char *fn;
|
||||
char **p;
|
||||
|
||||
GET_USER_PTR();
|
||||
WHEN_MSG(E_INIT) return;
|
||||
WHEN_MSG(E_DONE) return;
|
||||
c=GET_DATA_PTR(char);
|
||||
c=(char *)msg->data;
|
||||
fn=strrchr(filename,'\\');
|
||||
if (fn) fn++;else fn=filename;
|
||||
sprintf(c,"CH:%d, N:%d, P:%d, file: %s ",maplen,0,max_items,fn);
|
||||
c=strchr(c,'\0');
|
||||
if (pc_result<0) sprintf(c,"(wait)");else sprintf(c,"CPU %03d%%",pc_result);
|
||||
c=strchr(c,'\0');
|
||||
p=&GET_DATA_PTR(char)
|
||||
*p=c;
|
||||
pc_counter++;
|
||||
}
|
||||
|
||||
void *pc_metter(EVENT_MSG *msg)
|
||||
{
|
||||
static int last1,last2;
|
||||
if (msg->msg==E_INIT) return &pc_metter;
|
||||
if (msg->msg==E_DONE) return NULL;
|
||||
pc_tick++;
|
||||
if (pc_tick>10)
|
||||
{
|
||||
if (pc_counter>pc_max)
|
||||
if (last1>pc_max && last2>pc_max) pc_max=pc_counter;
|
||||
else last2=last1;last1=pc_counter;
|
||||
pc_result=100-pc_counter*100/pc_max;
|
||||
pc_counter=0;
|
||||
pc_tick=0;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void graph_init(char windowed)
|
||||
{
|
||||
/*
|
||||
int c;
|
||||
static word *p=NULL;
|
||||
if (color16)
|
||||
{
|
||||
if (p==NULL)p=create_blw_palette16();
|
||||
initmode16(p);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (hicolor) c=initmode32() ;else c=-1;
|
||||
if (c)
|
||||
{
|
||||
|
||||
if (p==NULL)p=create_special_palette();
|
||||
if (initmode256(p))
|
||||
initmode_lo(p);
|
||||
}
|
||||
}
|
||||
*/
|
||||
// report_mode(1);
|
||||
|
||||
const char *c=get_text_field(config_file,"MAPEDIT_WINDOW");
|
||||
int scale = 1;
|
||||
if (c != 0)
|
||||
{
|
||||
int x,y;
|
||||
if (sscanf(c,"%dx%d",&x,&y) == 2 && x>=640 && y>=480)
|
||||
DxSetInitResolution(x,y);
|
||||
}
|
||||
;
|
||||
c=get_text_field(config_file,"MAPEDIT_SCALE");
|
||||
if (c != 0)
|
||||
{
|
||||
sscanf(c,"%d",&scale);
|
||||
}
|
||||
initmode_dx(windowed,scale,0,0);
|
||||
|
||||
}
|
||||
|
||||
void init_sound()
|
||||
{
|
||||
int a,b,c,d;
|
||||
if (nosound)
|
||||
{
|
||||
a=DEV_NOSOUND;
|
||||
}
|
||||
else if (sound_detect(&a,&b,&c,&d))
|
||||
{
|
||||
puts("No sound device found");
|
||||
a=DEV_NOSOUND;
|
||||
}
|
||||
set_mixing_device(a,22000,b,c,d);
|
||||
}
|
||||
|
||||
void prg_error(EVENT_MSG *msg,void **unused)
|
||||
{
|
||||
int *err;
|
||||
char *c;
|
||||
|
||||
unused;
|
||||
if (msg->msg==E_PRGERROR)
|
||||
{
|
||||
err=(int *)(*(int **)msg->data);
|
||||
switch (*err)
|
||||
{
|
||||
case ERR_MEMREF:c=error_texts[1];break;
|
||||
case ERR_ILLEGI:c=error_texts[2];break;
|
||||
default: c=error_texts[3];break;
|
||||
}
|
||||
zobraz_mysku();
|
||||
showview(0,0,0,0);
|
||||
*err=2-msg_box(error_texts[0],' ',c,"Ignoruj","Konec","Ulo‘ mapu",NULL);
|
||||
if (*err==-1) save_all_map();
|
||||
}
|
||||
}
|
||||
|
||||
void raise_error_conv(int i)
|
||||
{
|
||||
/* if (i==SIGILL) raise_error(ERR_ILLEGI);
|
||||
else
|
||||
if (i==SIGSEGV) raise_error(ERR_MEMREF);
|
||||
else
|
||||
raise_error(ERR_MEMREF);
|
||||
*/
|
||||
}
|
||||
|
||||
static void key_test(va_list args)
|
||||
{
|
||||
word c;
|
||||
do
|
||||
{
|
||||
c=*(word *)task_wait_event(E_KEYBOARD);
|
||||
}
|
||||
while ((c & 0xff)!='!');
|
||||
puts("\x7");
|
||||
}
|
||||
|
||||
void ddl_init()
|
||||
{
|
||||
char *c;
|
||||
char *path,*temp;
|
||||
|
||||
c=get_text_field(config_file,"CESTA_DATA");
|
||||
concat(path,c,"SKELDAL.DDL");
|
||||
c=get_text_field(config_file,"CESTA_TEMP");
|
||||
if (c!=NULL)concat(temp,c,"~MAPEDIT.TMP");else temp=c;
|
||||
printf("Hledam soubor %s\n",path);
|
||||
init_manager(path,temp);
|
||||
}
|
||||
|
||||
void init(void)
|
||||
{
|
||||
mapy_init();
|
||||
ddl_init();
|
||||
vga_font=LoadResourceFont("BOLDCZ");
|
||||
default_font=vga_font;
|
||||
icones=LoadResourceFont("IKONY");
|
||||
graph_init(1);
|
||||
curcolor=RGB555(24,24,24);memcpy(charcolors,flat_color(0x0000),sizeof(charcolors));
|
||||
init_events(100);
|
||||
curfont=default_font;
|
||||
register_ms_cursor(LoadResourceFont("SIPKA.HI"));
|
||||
init_mysky();
|
||||
// hranice_mysky(0,0,639,479);
|
||||
add_task(1024,key_test);
|
||||
send_message(E_ADD,E_STATUS_LINE,status_line);
|
||||
send_message(E_STATUS_LINE,E_ADD,E_IDLE,all_status);
|
||||
send_message(E_STATUS_LINE,E_ADD,E_IDLE,status_mem_info);
|
||||
send_message(E_STATUS_LINE,E_ADD,E_IDLE,show_time);
|
||||
send_message(E_ADD,E_TIMER,pc_metter);
|
||||
send_message(E_ADD,E_KEYBOARD,exit_key);
|
||||
send_message(E_ADD,E_PRGERROR,prg_error);
|
||||
signal(SIGILL,raise_error_conv);
|
||||
signal(SIGSEGV,raise_error_conv);
|
||||
install_gui();
|
||||
redraw_desktop();do_events();
|
||||
send_message(E_ADD,E_MOUSE,main_menu);
|
||||
msg_box_font=vga_font;
|
||||
msg_icn_font=icones;
|
||||
ukaz_mysku();
|
||||
update_mysky();
|
||||
}
|
||||
/*
|
||||
w=create_window(100,100,400,200,0x6318,&x);
|
||||
id=desktop_add_window(w);
|
||||
define(10,20,50,30,0,sample,"Test");
|
||||
property(&x,NULL,flat_color(0x7000),0xffff);
|
||||
define(10,20,70,30,3,button,"Tlacitko");
|
||||
property(NULL,NULL,flat_color(0x000f),0x01c0);on_change(close_test);
|
||||
w=create_window(5,5,200,200,0x6318,&x);
|
||||
id=desktop_add_window(w);
|
||||
define(50,50,70,30,3,button,"Tlacitko");
|
||||
property(NULL,NULL,flat_color(0x7fff),0x000f);on_change(close_test);
|
||||
w=create_window(300,150,300,200,0x6318,&x);
|
||||
id=desktop_add_window(w);
|
||||
define(50,50,70,30,3,button,"Tlacitko");
|
||||
property(NULL,NULL,flat_color(0x7fff),0x000f);on_change(close_test);
|
||||
*/
|
||||
|
||||
long def_window(word xs,word ys,char *name)
|
||||
{
|
||||
word x=0,y=0;
|
||||
WINDOW *p;
|
||||
CTL3D ctl;
|
||||
FC_TABLE fc;
|
||||
long q;
|
||||
|
||||
if (waktual!=NULL)
|
||||
{
|
||||
x=waktual->x;
|
||||
y=waktual->y;
|
||||
}
|
||||
|
||||
highlight(&ctl,WINCOLOR);
|
||||
ctl.bsize=2;ctl.ctldef=0;
|
||||
x+=20;y+=20;
|
||||
memcpy(fc,flat_color(RGB555(31,31,0)),sizeof(FC_TABLE));
|
||||
fc[0]=0x0000;
|
||||
if (x+xs>SCR_WIDTH_X-2) x=SCR_WIDTH_X-2-xs;
|
||||
if (y+ys>SCR_WIDTH_Y-2) y=SCR_WIDTH_Y-2-ys;
|
||||
p=create_window(x,y,xs,ys,WINCOLOR,&ctl);
|
||||
q=desktop_add_window(p);
|
||||
define(0,2,2,xs-5-20*(xs>=70),14,0,win_label,name);
|
||||
ctl.bsize=1;ctl.ctldef=1;
|
||||
o_end->autoresizex=1;
|
||||
property(&ctl,vga_font,&fc,LABELCOLOR);
|
||||
if (xs>=70)
|
||||
{
|
||||
define(1,1,1,19,16,1,button,"\x0f");
|
||||
property(NULL,icones,&icone_color,WINCOLOR);on_change(close_test);
|
||||
}
|
||||
return q;
|
||||
}
|
||||
|
||||
void def_dialoge(word x,word y,word xs, word ys, char *name)
|
||||
{
|
||||
CTL3D ctl;
|
||||
FC_TABLE fc;
|
||||
WINDOW *p;
|
||||
|
||||
|
||||
memcpy(fc,flat_color(RGB555(31,31,0)),sizeof(FC_TABLE));
|
||||
memcpy(&ctl,def_border(2,WINCOLOR),sizeof(CTL3D));
|
||||
p=create_window(x,y,xs,ys,WINCOLOR,&ctl);
|
||||
desktop_add_window(p);
|
||||
set_window_modal();
|
||||
ctl.bsize=1;ctl.ctldef=1;
|
||||
define(0,1,1,xs-2,14,0,win_label,name);
|
||||
o_end->autoresizex=1;
|
||||
property(&ctl,vga_font,&fc,LABELCOLOR);
|
||||
}
|
||||
|
||||
void dtext_init(OBJREC *o,char *title)
|
||||
{
|
||||
title=get_title(title);
|
||||
o->userptr=(void *)getmem(strlen(title)+1);
|
||||
strcpy((char *)o->userptr,title);
|
||||
}
|
||||
|
||||
|
||||
void dtext_draw(int x1,int y1,int x2, int y2,OBJREC *o)
|
||||
{
|
||||
x2;y2;
|
||||
fontdsize=1;
|
||||
position(x1,y1);
|
||||
outtext((char *)o->userptr);
|
||||
fontdsize=0;
|
||||
}
|
||||
|
||||
void dtext(OBJREC *o)
|
||||
{
|
||||
o->runs[0]=dtext_init;
|
||||
o->runs[1]=dtext_draw;
|
||||
//o->runs[2]=sample_event;
|
||||
//o->runs[3]=sample_done;
|
||||
}
|
||||
|
||||
void about()
|
||||
{
|
||||
FC_TABLE c={0,RGB555(31,31,0),RGB555(28,28,28),RGB555(24,24,24),RGB555(20,20,20)};
|
||||
FC_TABLE c2={0,RGB555(31,16,0),RGB555(28,16,0),RGB555(24,16,0),RGB555(20,16,0)};
|
||||
FC_TABLE c3={0,RGB555(0,24,0),RGB555(0,20,0),RGB555(0,16,0),RGB555(0,10,0)};
|
||||
static about_win=-1;
|
||||
|
||||
if (find_window(about_win)==NULL)
|
||||
{
|
||||
about_win=def_window(300,200,"About");
|
||||
waktual->x=320-150;
|
||||
waktual->y=140;
|
||||
memcpy(f_default,flat_color(0x0),sizeof(FC_TABLE));
|
||||
waktual->modal=1;
|
||||
default_font=vga_font;
|
||||
define(-1,5,25,29,29,0,dtext,"\x8");property(NULL,icones,&c,WINCOLOR);
|
||||
define(-1,75,25,100,29,0,dtext,"MAPEDIT");property(NULL,NULL,&c2,WINCOLOR);
|
||||
define(-1,200,35,60,29,0,label,"verze 2.0");property(NULL,NULL,&c3,WINCOLOR);
|
||||
define(-1,20,80,200,10,0,label,"Naps no pro hru \"Br ny Skeldalu\"");
|
||||
define(-1,20,92,200,10,0,label,"(C) 1997 Napoleon gameS ");
|
||||
define(-1,20,104,200,10,0,label,"Naprogamoval: Ond©ej Nov k ");
|
||||
define(-1,20,116,200,10,0,label,"Tento software sm¡ b˜t pou‘it jen");
|
||||
define(-1,20,128,200,10,0,label,"ve spojen¡ s v˜vojem hry \"Br ny");
|
||||
define(-1,20,140,200,10,0,label,"Skeldalu\" (a p©¡padn‚ dal¨¡ verze)");
|
||||
define(-1,20,152,200,10,0,label,"a to pouze ‡leny v˜vojov‚ho t˜mu.");
|
||||
define(10,110,170,80,20,0,button,"Ok");on_change(close_test);
|
||||
}
|
||||
else select_window(about_win);
|
||||
redraw_window();
|
||||
}
|
||||
|
||||
void fog_bar_draw(int x1,int y1,int x2,int y2,OBJREC *o)
|
||||
{
|
||||
disable_bar(x1,y1,x2-x1,y2-y1,o->color);
|
||||
}
|
||||
|
||||
void fog_bar(OBJREC *o)
|
||||
{
|
||||
o->runs[1]=fog_bar_draw;
|
||||
}
|
||||
|
||||
void close_app(void)
|
||||
{
|
||||
WINDOW *w;
|
||||
CTL3D x={0,0,0,0};
|
||||
|
||||
int mx = DxGetResX() - 1;
|
||||
int my = DxGetResY() - 1;
|
||||
|
||||
w=create_window(0,0,1,1,0,&x);
|
||||
desktop_add_window(w);
|
||||
define(-1,0,0,mx,my,0,fog_bar);property(NULL,NULL,NULL,RGB555(16,0,0));
|
||||
redraw_desktop();
|
||||
if ((ask_exit_status=msg_box("Dotaz?",'\x2',"Chce¨ program ukon‡it, nebo nahr t jinou mapu?","Jinou mapu","Ukon‡it","Ne",NULL))!=3) terminate();
|
||||
close_window(w);
|
||||
do_events();
|
||||
}
|
||||
|
||||
void edit_basic_maze()
|
||||
{
|
||||
if (tool_sel>40) tool_sel=30;
|
||||
create_map_win(-1);
|
||||
if (newmap)
|
||||
{
|
||||
edit_side(0,0);
|
||||
sector_details_call(0);
|
||||
if (str_count(side_names)>2 || side_names[1]!=NULL) newmap=0;
|
||||
}
|
||||
}
|
||||
|
||||
void spawn_editor(char *dosline)
|
||||
{
|
||||
// deinstall_mouse_handler();
|
||||
closemode();
|
||||
system(dosline);
|
||||
graph_init(1);
|
||||
// install_mouse_handler();
|
||||
// hranice_mysky(0,0,639,479);
|
||||
redraw_desktop();
|
||||
}
|
||||
|
||||
void edit_script_file()
|
||||
{
|
||||
char s[255]="";
|
||||
char *pr;WINDOW *w;
|
||||
|
||||
|
||||
w=find_window(sektor_win);
|
||||
if (w!=NULL) close_window(w);
|
||||
switch (o_aktual->id)
|
||||
{
|
||||
case 10:strcat(s,pripona(filename,SCR));break;
|
||||
case 20:strcat(s,pripona(filename,".TXT"));break;
|
||||
case 30:strcat(s,ITEMS_SCRIPT);break;
|
||||
case 40:strcat(s,ITEMS_PICS);break;
|
||||
}
|
||||
EditSkeldalFile(s);
|
||||
pr=pripona(filename,SCR);
|
||||
read_full_side_script(pr);
|
||||
read_side_list(ITEMS_SCRIPT,&vzhled_veci,0,4);
|
||||
read_side_list(ITEMS_PICS,&pohledy_veci,0,2);
|
||||
read_side_list(WEAPONS_SCRIPT,&weapons,0,3);
|
||||
read_side_list(WEAPONS_SCRIPT,&weapons_pos,2,3);
|
||||
}
|
||||
|
||||
void call_animator()
|
||||
{
|
||||
spawn_editor("ani");
|
||||
}
|
||||
|
||||
|
||||
void open_editor_win()
|
||||
{
|
||||
if (find_window(editor_win)==NULL)
|
||||
{
|
||||
editor_win=def_window(100,150,"Editory");
|
||||
define(10,10,25,80,20,0,button,"map script");on_change(edit_script_file);
|
||||
define(20,10,50,80,20,0,button,"map texty");on_change(edit_script_file);
|
||||
define(30,10,75,80,20,0,button,"items.scr");on_change(edit_script_file);
|
||||
define(40,10,100,80,20,0,button,"items.pic");on_change(edit_script_file);
|
||||
define(50,10,125,80,20,0,button,"animator");on_change(call_animator);
|
||||
redraw_window();
|
||||
}
|
||||
else
|
||||
{
|
||||
select_window(editor_win);
|
||||
redraw_window();
|
||||
}
|
||||
}
|
||||
|
||||
void create_menu(void)
|
||||
{
|
||||
FC_TABLE c={0,RGB555(31,31,31),RGB555(24,24,24),RGB555(16,16,16),RGB555(4,4,4)};
|
||||
menu_win=def_window(400,150,"Map Edit v2.0 for Windows - " MAPEDIT_VERSION );
|
||||
waktual->x=120;
|
||||
waktual->y=250;
|
||||
on_change(close_app);
|
||||
curcolor=WINCOLOR;
|
||||
default_font=icones;
|
||||
define(10,5,25,29,29,0,button,"\x8");property(NULL,NULL,&c,WINCOLOR);on_change(edit_basic_maze);
|
||||
define(20,5,55,29,29,0,button,"\x9");property(NULL,NULL,&c,WINCOLOR);on_change(editor_veci);
|
||||
define(30,5,85,29,29,0,button,"\xA");property(NULL,NULL,&c,WINCOLOR);on_change(enemy_window);
|
||||
c[1]=RGB555(20,0,0);c[2]=RGB555(0,0,16);
|
||||
define(40,200,25,29,29,0,button,"e");property(NULL,NULL,&c,WINCOLOR);on_change(shop_train_edit);
|
||||
c[1]=RGB555(31,31,31);c[2]=RGB555(24,24,24);
|
||||
c[3]=RGB555(20,0,0);c[4]=RGB555(0,0,16);
|
||||
define(50,200,55,29,29,0,button,"E");property(NULL,NULL,&c,WINCOLOR);on_change(open_editor_win);
|
||||
define(60,200,85,29,29,0,button,"S");property(NULL,NULL,&c,WINCOLOR);on_change(save_all_map);
|
||||
define(70,5,115,29,29,0,button,"P");property(NULL,NULL,&c,WINCOLOR);on_change(pcxviewer);
|
||||
memcpy(c,flat_color(RGB555(0,0,15)),sizeof(FC_TABLE));
|
||||
define(-1,45,35,90,20,0,label,"Kreslen¡ mapy");property(NULL,vga_font,&c,WINCOLOR);
|
||||
define(-1,45,65,90,20,0,label,"Pokl d n¡ p©edmˆt–");property(NULL,vga_font,&c,WINCOLOR);
|
||||
define(-1,45,95,90,20,0,label,"Um¡sŸov n¡ nestv–r");property(NULL,vga_font,&c,WINCOLOR);
|
||||
define(-1,240,35,90,20,0,label,"Obchody");property(NULL,vga_font,&c,WINCOLOR);
|
||||
define(-1,240,65,90,20,0,label,"Editor script–");property(NULL,vga_font,&c,WINCOLOR);
|
||||
define(-1,240,95,90,20,0,label,"Ulo‘en¡ mapy");property(NULL,vga_font,&c,WINCOLOR);
|
||||
define(-1,45,125,90,20,0,label,"Prohl¡‘e‡ PCX");property(NULL,vga_font,&c,WINCOLOR);
|
||||
default_font=vga_font;
|
||||
memcpy(f_default,flat_color(0x0000),sizeof(charcolors));
|
||||
//set_enable(0,20,0);
|
||||
//set_enable(0,30,0);
|
||||
}
|
||||
|
||||
void help(void)
|
||||
{
|
||||
printf("Parametry:\n\n");
|
||||
printf("mapedit filename [/4] [/2] [/c|t|v|m] [/?] \n"
|
||||
"\n"
|
||||
"/2 Prosadi 256 barev\n"
|
||||
"/1 Prosadi 16 barev\n"
|
||||
"/c Inicializace mysi se simulaci CGA karty (default)\n"
|
||||
"/t Inicializace mysi se simulaci textoveho rezimu (standard)\n"
|
||||
"/v Inicializace mysi se simulaci VGA\n"
|
||||
"/m Inicializace mysi se simulaci MCGA\n"
|
||||
"/? Tento help\n"
|
||||
"/s Bez zvuku (dobre pro WIN95)\n"
|
||||
);
|
||||
exit(0);
|
||||
}
|
||||
|
||||
void args_support(char count, char *sw[])
|
||||
{
|
||||
int i;
|
||||
char c;
|
||||
|
||||
for(i=1;i<=count;i++)
|
||||
if (sw[i][0]=='/')
|
||||
{
|
||||
c=sw[i][1];
|
||||
switch (c)
|
||||
{
|
||||
case '?': help();break;
|
||||
/* case '4': line480=1;break;
|
||||
case '2': hicolor=0;break;
|
||||
case '1': color16=1;break;
|
||||
case 'c':
|
||||
case 'C': ms_fake_mode=0x6;break;
|
||||
case 't':
|
||||
case 'T': ms_fake_mode=0x3;break;
|
||||
case 'v':
|
||||
case 'V': ms_fake_mode=0x12;break;
|
||||
case 'm':
|
||||
case 'M': ms_fake_mode=0x13;break;
|
||||
case 'r':
|
||||
case 'R': test_mode=sw[i][2]-48;if (test_mode<0 || test_mode>4) test_mode=0;break;*/
|
||||
case 's': nosound=1;break;
|
||||
}
|
||||
}
|
||||
else
|
||||
strcpy(filename,sw[i]);
|
||||
}
|
||||
|
||||
char *pripona(char *fname,char *prip)
|
||||
{
|
||||
static char name[128],*s,*t;
|
||||
|
||||
strncpy(name,fname,128);
|
||||
name[127]='\0';
|
||||
t=strchr(name,'.');
|
||||
s=t;
|
||||
while (s!=NULL)
|
||||
{
|
||||
t=s;
|
||||
s=strchr(t+1,'.');
|
||||
}
|
||||
if (t==NULL)
|
||||
{
|
||||
t=strchr(name,'\0');
|
||||
}
|
||||
strcpy(t,prip);
|
||||
return name;
|
||||
}
|
||||
|
||||
|
||||
void load_background()
|
||||
{
|
||||
FILE *f;
|
||||
long siz;
|
||||
|
||||
if (gui_background!=NULL)
|
||||
{
|
||||
free(gui_background);
|
||||
gui_background=NULL;
|
||||
}
|
||||
f=fopen(background_file,"rb");
|
||||
if (f==NULL) return;
|
||||
fseek(f,0,SEEK_END);siz=ftell(f);
|
||||
fseek(f,0,SEEK_SET);
|
||||
gui_background=getmem(siz);
|
||||
fread(gui_background,1,siz,f);
|
||||
redraw_desktop();
|
||||
fclose(f);
|
||||
}
|
||||
|
||||
static void shut_down()
|
||||
{
|
||||
// deinstall_mouse_handler();
|
||||
closemode();
|
||||
}
|
||||
|
||||
void init_maps(void);
|
||||
|
||||
static ask_password_event(EVENT_MSG *msg,OBJREC *obj)
|
||||
{
|
||||
obj;
|
||||
WHEN_MSG(E_KEYBOARD)
|
||||
{
|
||||
char c=GET_DATA(char);
|
||||
if (c==13) {goto_control(20);terminate();}
|
||||
if (c==27) {goto_control(30);terminate();}
|
||||
}
|
||||
}
|
||||
|
||||
char ask_password(char *pass,char text)
|
||||
{
|
||||
char *c;
|
||||
|
||||
switch (text)
|
||||
{
|
||||
case 0:c="Provˆ©en¡";break;
|
||||
case 1:c="Zmˆna hesla";break;
|
||||
case 2:c="Kontrola";break;
|
||||
}
|
||||
def_dialoge(320-100,240-50,200,90,c);
|
||||
define(-1,10,20,1,1,0,label,"Vlo‘ heslo:");
|
||||
define(10,10,40,180,12,0,input_line,49);
|
||||
property(def_border(3,WINCOLOR),NULL,flat_color(RGB555(31,31,31)),RGB555(8,8,8));
|
||||
if (text==1)set_default(pass);else set_default("");on_event(ask_password_event);
|
||||
define(20,5,5,50,20,2,button,"OK");
|
||||
property(def_border(1,0),NULL,NULL,WINCOLOR);on_change(terminate);
|
||||
define(30,5,5,50,20,3,button,"Zru¨it");
|
||||
property(def_border(1,0),NULL,NULL,WINCOLOR);on_change(terminate);
|
||||
redraw_window();
|
||||
goto_control(10);
|
||||
escape();
|
||||
if (o_aktual->id==30) text=0;else
|
||||
{
|
||||
text=1;
|
||||
get_value(0,10,pass);
|
||||
}
|
||||
close_current();
|
||||
return text;
|
||||
}
|
||||
|
||||
static int data_edit_enabled=0;
|
||||
static char data_password[50]="";
|
||||
|
||||
char check_data_password(void)
|
||||
{
|
||||
char text[50];
|
||||
|
||||
if (data_password[0]==0) data_edit_enabled=1;
|
||||
if (data_edit_enabled) return 1;
|
||||
if (ask_password(text,0)==0) return 0;
|
||||
if (strcmp(data_password,text))
|
||||
{
|
||||
msg_box("Chyba!",1,"Chybn‚ heslo! P©¡stup zam¡tnut!","OK",NULL);
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
data_edit_enabled=1;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
char *set_data_password(char *text)
|
||||
{
|
||||
if (text!=NULL)
|
||||
{
|
||||
strncpy(data_password,text,sizeof(data_password));
|
||||
data_password[sizeof(data_password)-1]=0;
|
||||
}
|
||||
return data_password;
|
||||
}
|
||||
|
||||
/*TSTR_LIST read_ddl_dir(char *filter)
|
||||
{
|
||||
TSTR_LIST ls;
|
||||
int i=0;
|
||||
char *s;
|
||||
|
||||
ls=create_list(256);
|
||||
s=read_next_entry(MMR_FIRST);
|
||||
while (s!=NULL)
|
||||
{
|
||||
char *d;
|
||||
char c[13];
|
||||
|
||||
strncpy(c,s,12);
|
||||
c[12]=0;
|
||||
if (filter!=NULL)
|
||||
{
|
||||
d=strrchr(c,'.');
|
||||
if (d!=NULL && !strncmp(d+1,filter,3)) str_replace(&ls,i++,c);
|
||||
}
|
||||
else
|
||||
str_replace(&ls,i++,c);
|
||||
s=read_next_entry(MMR_NEXT);
|
||||
}
|
||||
if (i==0) str_add(&ls,"<chyba>");
|
||||
ls=sort_list(ls,-1);
|
||||
return ls;
|
||||
}
|
||||
*/
|
||||
|
||||
SMapFiles mapFiles;
|
||||
|
||||
static char *strdup2(const char *a, const char *b)
|
||||
{
|
||||
char *res=malloc(strlen(a)+strlen(b)+1);
|
||||
strcpy(res,a);
|
||||
strcat(res,b);
|
||||
return res;
|
||||
}
|
||||
|
||||
static void InitMapFiles(const char *path)
|
||||
{
|
||||
mapFiles.items_script=strdup2(path,XITEMS_SCRIPT);
|
||||
mapFiles.items_pics=strdup2(path,XITEMS_PICS);
|
||||
mapFiles.items_dat=strdup2(path,XITEM_FILE);
|
||||
mapFiles.dialogy_scr=strdup2(path,XDLG_SCRIPT);
|
||||
mapFiles.weapons_scr=strdup2(path,XWEAPONS_SCRIPT);
|
||||
mapFiles.shops_dat=strdup2(path,XSHOP_NAME);
|
||||
mapFiles.enemy=strdup2(path,XMOB_FILE);
|
||||
mapFiles.enemy_sound=strdup2(path,XMOB_SOUND);
|
||||
}
|
||||
static void ClearMapFiles()
|
||||
{
|
||||
free(mapFiles.items_script);
|
||||
free(mapFiles.items_pics);
|
||||
free(mapFiles.items_dat);
|
||||
free(mapFiles.dialogy_scr);
|
||||
free(mapFiles.weapons_scr);
|
||||
free(mapFiles.shops_dat);
|
||||
free(mapFiles.enemy);
|
||||
free(mapFiles.enemy_sound);
|
||||
|
||||
}
|
||||
|
||||
|
||||
static BOOL WINAPI HandlerRoutine(
|
||||
DWORD dwCtrlType // control signal type
|
||||
)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
int main(int argc,char *argv[])
|
||||
{
|
||||
char *s;
|
||||
char *pr;
|
||||
char test[50];
|
||||
char *mask;
|
||||
InitCrashDump();
|
||||
SetConsoleCtrlHandler(HandlerRoutine,TRUE);
|
||||
filename[0]='\0';
|
||||
// strcpy(filename,"TEST.MAP");
|
||||
args_support(argc-1,argv);
|
||||
printf("Hledam konfiguracni soubor\n");
|
||||
config_file=read_config("WSKELDAL.INI");
|
||||
if (config_file==NULL)
|
||||
{
|
||||
puts("...nemohu najit WSKELDAL.INI\n");
|
||||
return 1;
|
||||
}
|
||||
if (strlen(filename)>3 && stricmp(filename+strlen(filename)-3,"adv")==0)
|
||||
{
|
||||
TSTR_LIST adv_cfg=read_config(filename);
|
||||
config_file=merge_configs(config_file,adv_cfg);
|
||||
filename[0]=0;
|
||||
}
|
||||
sample_path=get_text_field(config_file,"CESTA_ZVUKY");
|
||||
if (sample_path==NULL) sample_path="";
|
||||
mob_dir=get_text_field(config_file,"CESTA_ENEMY");
|
||||
if (mob_dir==NULL) mob_dir="";
|
||||
init_sound();
|
||||
init();
|
||||
|
||||
concat(mask,get_text_field(config_file,"CESTA_MAPY"),"*.map");
|
||||
atexit(shut_down);
|
||||
// signal(SIGABRT,shut_down);
|
||||
init_mob_list();
|
||||
InitMapFiles(get_text_field(config_file,"CESTA_MAPY"));
|
||||
do
|
||||
{
|
||||
ask_exit_status=2;
|
||||
if (filename[0]=='\0') browser(mask,filename);
|
||||
if (filename[0]!='\0')
|
||||
{
|
||||
char *mapy=get_text_field(config_file,"CESTA_MAPY");
|
||||
memmove(filename+strlen(mapy),filename,strlen(filename)+1);
|
||||
memcpy(filename,mapy,strlen(mapy));
|
||||
s=pripona(filename,".HI");
|
||||
background_file=(char *)getmem(strlen(s)+1);strcpy(background_file,s);
|
||||
load_background();
|
||||
}
|
||||
do_events();
|
||||
logo();
|
||||
pr=pripona(filename,SCR);
|
||||
script_name=NewArr(char,strlen(pr)+1);
|
||||
strcpy(script_name,pr);
|
||||
read_full_side_script(pr);
|
||||
read_spec_procs();
|
||||
read_side_list(ITEMS_SCRIPT,&vzhled_veci,0,4);
|
||||
read_side_list(ITEMS_PICS,&pohledy_veci,0,2);
|
||||
read_dlg_list(DLG_SCRIPT,&dlg_names,&dlg_pgfs);
|
||||
read_side_list(WEAPONS_SCRIPT,&weapons,0,3);
|
||||
read_side_list(WEAPONS_SCRIPT,&weapons_pos,2,3);
|
||||
set_defaults();
|
||||
init_multiactions();
|
||||
memset(vyklenky,0,sizeof(vyklenky));
|
||||
init_item_system();
|
||||
if (filename[0]!='\0' )
|
||||
{
|
||||
int sel=1;
|
||||
|
||||
init_maps();
|
||||
set_defaults();
|
||||
if (load_map(filename))
|
||||
msg_box(filename,'\01',"Tento soubor je buƒ ne‡iteln˜, nebo po¨kozen˜","Pokra‡ovat",NULL);
|
||||
if (check_password(NULL)==0)
|
||||
if (ask_password(test,0)==0 || check_password(test)==0)
|
||||
{
|
||||
filename[0]=0;
|
||||
ask_exit_status=1;
|
||||
goto preskoc;
|
||||
}
|
||||
if (maplen<2)
|
||||
{
|
||||
sel=msg_box(filename,' ',"Soubor neexistuje, bude vytvo©en nov˜. Nyn¡ je nutn‚ nastavit z kladn¡ stˆny"
|
||||
" a jin‚ dal¨¡ parametry pro tuto mapu","Pokra‡ujem","Zav©it",NULL);
|
||||
if (sel==1)
|
||||
{
|
||||
newmap=1;
|
||||
}
|
||||
|
||||
}
|
||||
if (sel==1)
|
||||
{
|
||||
create_menu();
|
||||
redraw_window();
|
||||
escape();
|
||||
filename[0]=0;
|
||||
close_current();
|
||||
}
|
||||
}
|
||||
preskoc:
|
||||
free(background_file);
|
||||
}
|
||||
while (ask_exit_status==1);
|
||||
ClearMapFiles();
|
||||
redraw_desktop();
|
||||
close_manager();
|
||||
return 0;
|
||||
}
|
||||
|
||||
int __stdcall WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
|
||||
{
|
||||
return main(__argc,__argv);
|
||||
}
|
||||
|
||||
|
||||
int GetExeVersion()
|
||||
{
|
||||
return MAPEDIT_NVERSION;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue