Copy some editor stuff from d1x-rebirth to d2x-rebirth, like use of the OS native cursor

This commit is contained in:
Chris Taylor 2010-12-24 12:34:30 +08:00
parent 535edf0691
commit 5cbfece8c4
25 changed files with 195 additions and 403 deletions

View file

@ -1,5 +1,9 @@
D2X-Rebirth Changelog
20101224
--------
d2x-rebirth.xcodeproj/project.pbxproj, include/ui.h, main/editor/centers.c, main/editor/editor.h, main/editor/group.c, main/editor/medrobot.c, main/editor/medwall.c, main/editor/mine.c, main/editor/texpage.h, main/gamesave.c, main/gamesave.h, main/switch.c, main/switch.h, ui/button.c, ui/checkbox.c, ui/func.c, ui/harderr.c, ui/keytrap.c, ui/medfunc.c, ui/menubar.c, ui/mouse.c, ui/radio.c, ui/ui.c, ui/window.c: Copy some editor stuff from d1x-rebirth to d2x-rebirth, like use of the OS native cursor
20101223
--------
main/net_udp.c, main/net_udp.h: Reworked object sending/receiving to work without unnecessary type casting and a bit less error prone; Also increased UDP max packet size to 2048 so we can send 7 objects per frame; Fixded joinign games - GameID was sent for full game info, not lite info

View file

@ -815,16 +815,13 @@
EBC651900890CEAE004FCAA3 /* button.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = button.c; sourceTree = "<group>"; };
EBC651910890CEAE004FCAA3 /* checkbox.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = checkbox.c; sourceTree = "<group>"; };
EBC651920890CEAE004FCAA3 /* file.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = file.c; sourceTree = "<group>"; };
EBC651930890CEAE004FCAA3 /* func.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = func.c; sourceTree = "<group>"; };
EBC651940890CEAE004FCAA3 /* gadget.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = gadget.c; sourceTree = "<group>"; };
EBC651950890CEAE004FCAA3 /* harderr.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = harderr.c; sourceTree = "<group>"; };
EBC651960890CEAE004FCAA3 /* icon.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = icon.c; sourceTree = "<group>"; };
EBC651970890CEAE004FCAA3 /* inputbox.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = inputbox.c; sourceTree = "<group>"; };
EBC651980890CEAE004FCAA3 /* keypad.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = keypad.c; sourceTree = "<group>"; };
EBC651990890CEAE004FCAA3 /* keypress.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = keypress.c; sourceTree = "<group>"; };
EBC6519A0890CEAE004FCAA3 /* keytrap.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = keytrap.c; sourceTree = "<group>"; };
EBC6519B0890CEAE004FCAA3 /* listbox.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = listbox.c; sourceTree = "<group>"; };
EBC6519D0890CEAE004FCAA3 /* medfunc.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = medfunc.c; sourceTree = "<group>"; };
EBC6519E0890CEAE004FCAA3 /* menu.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = menu.c; sourceTree = "<group>"; };
EBC6519F0890CEAE004FCAA3 /* menubar.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = menubar.c; sourceTree = "<group>"; };
EBC651A00890CEAE004FCAA3 /* message.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = message.c; sourceTree = "<group>"; };
@ -1494,16 +1491,13 @@
EBC651900890CEAE004FCAA3 /* button.c */,
EBC651910890CEAE004FCAA3 /* checkbox.c */,
EBC651920890CEAE004FCAA3 /* file.c */,
EBC651930890CEAE004FCAA3 /* func.c */,
EBC651940890CEAE004FCAA3 /* gadget.c */,
EBC651950890CEAE004FCAA3 /* harderr.c */,
EBC651960890CEAE004FCAA3 /* icon.c */,
EBC651970890CEAE004FCAA3 /* inputbox.c */,
EBC651980890CEAE004FCAA3 /* keypad.c */,
EBC651990890CEAE004FCAA3 /* keypress.c */,
EBC6519A0890CEAE004FCAA3 /* keytrap.c */,
EBC6519B0890CEAE004FCAA3 /* listbox.c */,
EBC6519D0890CEAE004FCAA3 /* medfunc.c */,
EBC6519E0890CEAE004FCAA3 /* menu.c */,
EBC6519F0890CEAE004FCAA3 /* menubar.c */,
EBC651A00890CEAE004FCAA3 /* message.c */,

View file

@ -11,6 +11,12 @@ AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.
COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
*/
/*
*
* Header file for user interface
*
*/
#ifndef _UI_H
#define _UI_H
@ -204,8 +210,10 @@ typedef struct {
short b3_last_status;
short bg_x, bg_y;
short bg_saved;
#ifdef __MSDOS__
grs_bitmap * background;
grs_bitmap * pointer;
#endif
fix64 time_lastpressed;
short moved;
} UI_MOUSE;
@ -291,12 +299,12 @@ extern void ui_wprintf_at( UI_WINDOW * wnd, short x, short y, char * format, ...
extern void ui_draw_radio( UI_GADGET_RADIO * radio );
extern UI_GADGET_RADIO * ui_add_gadget_radio( UI_WINDOW * wnd, short x, short y, short w, short h, short group, char * text );
extern void ui_radio_do( UI_GADGET_RADIO * radio, int keypress );
extern void ui_radio_set_value(UI_GADGET_RADIO *radio, sbyte value);
extern void ui_radio_set_value(UI_GADGET_RADIO *radio, int value);
extern void ui_draw_checkbox( UI_GADGET_CHECKBOX * checkbox );
extern UI_GADGET_CHECKBOX * ui_add_gadget_checkbox( UI_WINDOW * wnd, short x, short y, short w, short h, short group, char * text );
extern void ui_checkbox_do( UI_GADGET_CHECKBOX * checkbox, int keypress );
extern void ui_checkbox_check(UI_GADGET_CHECKBOX * checkbox, sbyte check);
extern void ui_checkbox_check(UI_GADGET_CHECKBOX * checkbox, int check);
extern UI_GADGET * ui_gadget_get_prev( UI_GADGET * gadget );
extern UI_GADGET * ui_gadget_get_next( UI_GADGET * gadget );

View file

@ -53,7 +53,7 @@ COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
static UI_WINDOW *MainWindow = NULL;
static UI_GADGET_BUTTON *QuitButton;
static UI_GADGET_RADIO *CenterFlag[MAX_CENTER_TYPES];
static UI_GADGET_CHECKBOX *RobotMatFlag[64]; // 2 ints = 64 bits
static UI_GADGET_CHECKBOX *RobotMatFlag[MAX_ROBOT_TYPES];
static int old_seg_num;
@ -94,7 +94,7 @@ int do_centers_dialog()
CenterFlag[4] = ui_add_gadget_radio( MainWindow, 18, i, 16, 16, 0, "RobotCen" ); i += 24;
// These are the checkboxes for each robot flag.
for (i=0; i < 64; i++)
for (i=0; i<N_robot_types; i++)
RobotMatFlag[i] = ui_add_gadget_checkbox( MainWindow, 128 + (i%2)*92, 20+(i/2)*24, 16, 16, 0, Robot_names[i]);
old_seg_num = -2; // Set to some dummy value so everything works ok on the first frame.
@ -113,9 +113,7 @@ void close_centers_window()
void do_centers_window()
{
int i;
int robot_flags;
int redraw_window;
int robot_index;
if ( MainWindow == NULL ) return;
@ -126,26 +124,20 @@ void do_centers_window()
ui_window_do_gadgets(MainWindow);
//------------------------------------------------------------
// If we change walls, we need to reset the ui code for all
// of the checkboxes that control the wall flags.
// If we change centers, we need to reset the ui code for all
// of the checkboxes that control the center flags.
//------------------------------------------------------------
if (old_seg_num != Cursegp-Segments) {
if (old_seg_num != Cursegp-Segments)
{
for (i = 0; i < MAX_CENTER_TYPES; i++)
ui_radio_set_value(CenterFlag[i], 0);
Assert(Curseg2p->special < MAX_CENTER_TYPES);
ui_radio_set_value(CenterFlag[Curseg2p->special], 1);
// Read materialization center robot bit flags
for (i = 0; i < 2; i++)
{
robot_index = i * 32;
robot_flags = RobotCenters[Curseg2p->matcen_num].robot_flags[i];
while (robot_flags)
{
ui_checkbox_check(RobotMatFlag[i], robot_flags & 1);
robot_flags >>= 1;
robot_index++;
}
}
for (i = 0; i < N_robot_types; i++)
ui_checkbox_check(RobotMatFlag[i], RobotCenters[Curseg2p->matcen_num].robot_flags[i >= 32 ? 1 : 0] & (1 << (i % 32)));
}
//------------------------------------------------------------
@ -168,26 +160,12 @@ void do_centers_window()
}
}
for (i = 0; i < 2; i++)
for (i = 0; i < N_robot_types; i++)
{
robot_flags = RobotCenters[Curseg2p->matcen_num].robot_flags[i];
for (robot_index = 0; robot_index < 32; robot_index++)
{
if (RobotMatFlag[robot_index + i * 32]->flag == 1)
{
if (!(robot_flags & (1 << robot_index)))
{
robot_flags |= (1 << robot_index);
}
}
else if (robot_flags & 1 << robot_index)
{
robot_flags &= ~(1 << robot_index);
}
}
RobotCenters[Curseg2p->matcen_num].robot_flags[i] = robot_flags;
if ( RobotMatFlag[i]->flag == 1 )
RobotCenters[Curseg2p->matcen_num].robot_flags[i >= 32 ? 1 : 0] |= (1 << (i % 32));
else
RobotCenters[Curseg2p->matcen_num].robot_flags[i >= 32 ? 1 : 0] &= ~(1 << (i % 32));
}
//------------------------------------------------------------

View file

@ -13,7 +13,7 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
/*
*
* FIXME: put description here
* Header for editor functions, data strcutures, etc.
*
*/

View file

@ -1092,7 +1092,7 @@ int med_save_group( char *filename, short *vertex_ids, short *segment_ids, int n
group_header.num_segments = num_segments;
// Write the editor info
header_offset = cftell(SaveFile);
header_offset = PHYSFS_tell(SaveFile);
PHYSFS_write( SaveFile, &group_header, sizeof(group_header), 1);
//===================== SAVE EDITOR INFO ==========================
@ -1109,13 +1109,13 @@ int med_save_group( char *filename, short *vertex_ids, short *segment_ids, int n
group_editor.Groupsegp = 0;
group_editor.Groupside = Groupside[current_group];
editor_offset = cftell(SaveFile);
editor_offset = PHYSFS_tell(SaveFile);
PHYSFS_write( SaveFile, &group_editor, sizeof(group_editor), 1);
//===================== SAVE VERTEX INFO ==========================
vertex_offset = cftell(SaveFile);
vertex_offset = PHYSFS_tell(SaveFile);
for (i=0;i<num_vertices;i++) {
tvert = Vertices[vertex_ids[i]];
PHYSFS_write( SaveFile, &tvert, sizeof(tvert), 1);
@ -1124,7 +1124,7 @@ int med_save_group( char *filename, short *vertex_ids, short *segment_ids, int n
//===================== SAVE SEGMENT INFO =========================
segment_offset = cftell(SaveFile);
segment_offset = PHYSFS_tell(SaveFile);
for (i=0;i<num_segments;i++) {
tseg = Segments[segment_ids[i]];
@ -1152,7 +1152,7 @@ int med_save_group( char *filename, short *vertex_ids, short *segment_ids, int n
//===================== SAVE TEXTURE INFO ==========================
texture_offset = cftell(SaveFile);
texture_offset = PHYSFS_tell(SaveFile);
for (i=0;i<NumTextures;i++)
strncpy(current_tmap_list[i], TmapInfo[i].filename, 13);

View file

@ -552,6 +552,8 @@ void do_robot_window()
// the current AI mode button be flagged as pressed down.
//------------------------------------------------------------
if (old_object != Cur_object_index ) {
for ( i=0; i < NUM_BOXES; i++ )
ui_radio_set_value(InitialMode[i], 0);
if ( Cur_object_index > -1 ) {
int behavior = Objects[Cur_object_index].ctype.ai_info.behavior;
if ( !((behavior >= MIN_BEHAVIOR) && (behavior <= MAX_BEHAVIOR))) {

View file

@ -426,14 +426,10 @@ void do_wall_window()
ui_checkbox_check(DoorFlag[1], w->flags & WALL_DOOR_AUTO);
ui_checkbox_check(DoorFlag[2], w->flags & WALL_ILLUSION_OFF);
if (Walls[Cursegp->sides[Curside].wall_num].keys & KEY_NONE)
ui_radio_set_value(KeyFlag[0], 1);
if (Walls[Cursegp->sides[Curside].wall_num].keys & KEY_BLUE)
ui_radio_set_value(KeyFlag[1], 1);
if (Walls[Cursegp->sides[Curside].wall_num].keys & KEY_RED)
ui_radio_set_value(KeyFlag[2], 1);
if (Walls[Cursegp->sides[Curside].wall_num].keys & KEY_GOLD)
ui_radio_set_value(KeyFlag[3], 1);
ui_radio_set_value(KeyFlag[0], w->keys & KEY_NONE);
ui_radio_set_value(KeyFlag[1], w->keys & KEY_BLUE);
ui_radio_set_value(KeyFlag[2], w->keys & KEY_RED);
ui_radio_set_value(KeyFlag[3], w->keys & KEY_GOLD);
}
}
@ -464,12 +460,8 @@ void do_wall_window()
} else {
for (i = 0; i < 2; i++)
ui_checkbox_check(DoorFlag[i], 0);
for ( i=0; i < 4; i++ ) {
if ( KeyFlag[i]->flag == 1 ) {
KeyFlag[i]->flag = 0;
KeyFlag[i]->status = 1;
}
}
for ( i=0; i < 4; i++ )
ui_radio_set_value(KeyFlag[i], 0);
}
if (Walls[Cursegp->sides[Curside].wall_num].type == WALL_ILLUSION) {

View file

@ -43,7 +43,7 @@ COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
#define REMOVE_EXT(s) (*(strchr( (s), '.' ))='\0')
int CreateDefaultNewSegment();
int save_mine_data(CFILE * SaveFile);
int save_mine_data(PHYSFS_file * SaveFile);
static char current_tmap_list[MAX_TEXTURES][13];
@ -349,7 +349,7 @@ int med_save_mine(char * filename)
// -----------------------------------------------------------------------------
// saves to an already-open file
int save_mine_data(CFILE * SaveFile)
int save_mine_data(PHYSFS_file * SaveFile)
{
int header_offset, editor_offset, vertex_offset, segment_offset, doors_offset, texture_offset, walls_offset, triggers_offset; //, links_offset;
int newseg_verts_offset;

View file

@ -11,6 +11,12 @@ AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.
COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
*/
/*
*
* Definitions for texpage.c
*
*/
#ifndef _TEXPAGE_H
#define _TEXPAGE_H

View file

@ -875,15 +875,13 @@ int load_game_data(CFILE *LoadFile)
//==================== READ TRIGGER INFO ==========================
// for MACINTOSH -- assume all triggers >= verion 31 triggers.
for (i = 0; i < Num_triggers; i++)
{
if (game_top_fileinfo_version < 31)
{
v30_trigger trig;
int t,type;
int flags = 0;
type=0;
if (game_top_fileinfo_version < 30) {
@ -915,8 +913,8 @@ int load_game_data(CFILE *LoadFile)
Int3();
else if (trig.flags & TRIGGER_EXIT)
type = TT_EXIT;
else if (trig.flags & TRIGGER_ONE_SHOT)
Int3();
//else if (trig.flags & TRIGGER_ONE_SHOT)
// Int3();
else if (trig.flags & TRIGGER_MATCEN)
type = TT_MATCEN;
else if (trig.flags & TRIGGER_ILLUSION_OFF)
@ -935,8 +933,10 @@ int load_game_data(CFILE *LoadFile)
type = TT_ILLUSORY_WALL;
else
Int3();
if (trig.flags & TRIGGER_ONE_SHOT)
flags = TF_ONE_SHOT;
Triggers[i].type = type;
Triggers[i].flags = 0;
Triggers[i].flags = flags;
Triggers[i].num_links = trig.num_links;
Triggers[i].num_links = trig.num_links;
Triggers[i].value = trig.value;
@ -952,12 +952,6 @@ int load_game_data(CFILE *LoadFile)
//================ READ CONTROL CENTER TRIGGER INFO ===============
#if 0
if (game_fileinfo.control_offset > -1)
if (!cfseek(LoadFile, game_fileinfo.control_offset, SEEK_SET))
{
Assert(game_fileinfo.control_sizeof == sizeof(control_center_triggers));
#endif // 0
control_center_triggers_read_n(&ControlCenterTriggers, 1, LoadFile);
//================ READ MATERIALOGRIFIZATIONATORS INFO ===============
@ -1069,39 +1063,40 @@ int load_game_data(CFILE *LoadFile)
// MK, 10/17/95: Make walls point back at the triggers that control them.
// Go through all triggers, stuffing controlling_trigger field in Walls.
{ int t;
{
int t;
for (i=0; i<Num_walls; i++)
Walls[i].controlling_trigger = -1;
for (i=0; i<Num_walls; i++)
Walls[i].controlling_trigger = -1;
for (t=0; t<Num_triggers; t++) {
int l;
for (l=0; l<Triggers[t].num_links; l++) {
int seg_num, side_num, wall_num;
for (t=0; t<Num_triggers; t++) {
int l;
for (l=0; l<Triggers[t].num_links; l++) {
int seg_num, side_num, wall_num;
seg_num = Triggers[t].seg[l];
side_num = Triggers[t].side[l];
wall_num = Segments[seg_num].sides[side_num].wall_num;
seg_num = Triggers[t].seg[l];
side_num = Triggers[t].side[l];
wall_num = Segments[seg_num].sides[side_num].wall_num;
// -- if (Walls[wall_num].controlling_trigger != -1)
// -- Int3();
// -- if (Walls[wall_num].controlling_trigger != -1)
// -- Int3();
//check to see that if a trigger requires a wall that it has one,
//and if it requires a matcen that it has one
//check to see that if a trigger requires a wall that it has one,
//and if it requires a matcen that it has one
if (Triggers[t].type == TT_MATCEN) {
if (Segment2s[seg_num].special != SEGMENT_IS_ROBOTMAKER)
Int3(); //matcen trigger doesn't point to matcen
}
else if (Triggers[t].type != TT_LIGHT_OFF && Triggers[t].type != TT_LIGHT_ON) { //light triggers don't require walls
if (wall_num == -1)
Int3(); // This is illegal. This trigger requires a wall
else
Walls[wall_num].controlling_trigger = t;
if (Triggers[t].type == TT_MATCEN) {
if (Segment2s[seg_num].special != SEGMENT_IS_ROBOTMAKER)
Int3(); //matcen trigger doesn't point to matcen
}
else if (Triggers[t].type != TT_LIGHT_OFF && Triggers[t].type != TT_LIGHT_ON) { //light triggers don't require walls
if (wall_num == -1)
Int3(); // This is illegal. This trigger requires a wall
else
Walls[wall_num].controlling_trigger = t;
}
}
}
}
}
//fix old wall structs
if (game_top_fileinfo_version < 17) {
@ -1210,25 +1205,25 @@ int load_level(char * filename_passed)
strcpy(filename,filename_passed);
#ifdef EDITOR
//if we have the editor, try the LVL first, no matter what was passed.
//if we don't have an LVL, try what was passed or RL2
//if we don't have the editor, we just use what was passed
change_filename_extension(filename,filename_passed,".lvl");
use_compiled_level = 0;
if (!cfexist(filename))
{
char *p = strrchr(filename_passed, '.');
#ifdef EDITOR
//if we have the editor, try the LVL first, no matter what was passed.
//if we don't have an LVL, try what was passed or RL2
//if we don't have the editor, we just use what was passed
if (stricmp(p, ".lvl"))
strcpy(filename, filename_passed); // set to what was passed
else
change_filename_extension(filename, filename, ".rl2");
use_compiled_level = 1;
}
#endif
change_filename_extension(filename,filename_passed,".lvl");
use_compiled_level = 0;
if (!cfexist(filename))
{
char *p = strrchr(filename_passed, '.');
if (stricmp(p, ".lvl"))
strcpy(filename, filename_passed); // set to what was passed
else
change_filename_extension(filename, filename, ".rl2");
use_compiled_level = 1;
}
#endif
if (!cfexist(filename))
sprintf(filename,"%s%s",MISSION_DIR,filename_passed);
@ -1547,7 +1542,7 @@ int save_game_data(PHYSFS_file *SaveFile)
return 0;
}
int save_mine_data(FILE * SaveFile);
int save_mine_data(PHYSFS_file * SaveFile);
// -----------------------------------------------------------------------------
// Save game

View file

@ -29,9 +29,6 @@ int get_level_name(void);
extern int load_level(char *filename);
extern int save_level(char *filename);
// called in place of load_game() to only load the .min data
extern void load_mine_only(char * filename);
extern char Gamesave_current_filename[];
extern int Gamesave_current_version;

View file

@ -675,50 +675,52 @@ void trigger_write(trigger *t, short version, PHYSFS_file *fp)
{
int i;
if (version != 30)
if (version <= 29)
PHYSFSX_writeU8(fp, 0); // unused 'type'
else if (version >= 31)
PHYSFSX_writeU8(fp, t->type);
if (version <= 29)
if (version <= 30)
switch (t->type)
{
case TT_OPEN_DOOR:
PHYSFS_writeSLE16(fp, TRIGGER_CONTROL_DOORS);
PHYSFS_writeSLE16(fp, TRIGGER_CONTROL_DOORS | ((t->flags & TF_ONE_SHOT) ? TRIGGER_ONE_SHOT : 0));
break;
case TT_EXIT:
PHYSFS_writeSLE16(fp, TRIGGER_EXIT);
PHYSFS_writeSLE16(fp, TRIGGER_EXIT | ((t->flags & TF_ONE_SHOT) ? TRIGGER_ONE_SHOT : 0));
break;
case TT_MATCEN:
PHYSFS_writeSLE16(fp, TRIGGER_MATCEN);
PHYSFS_writeSLE16(fp, TRIGGER_MATCEN | ((t->flags & TF_ONE_SHOT) ? TRIGGER_ONE_SHOT : 0));
break;
case TT_ILLUSION_OFF:
PHYSFS_writeSLE16(fp, TRIGGER_ILLUSION_OFF);
PHYSFS_writeSLE16(fp, TRIGGER_ILLUSION_OFF | ((t->flags & TF_ONE_SHOT) ? TRIGGER_ONE_SHOT : 0));
break;
case TT_SECRET_EXIT:
PHYSFS_writeSLE16(fp, TRIGGER_SECRET_EXIT);
PHYSFS_writeSLE16(fp, TRIGGER_SECRET_EXIT | ((t->flags & TF_ONE_SHOT) ? TRIGGER_ONE_SHOT : 0));
break;
case TT_ILLUSION_ON:
PHYSFS_writeSLE16(fp, TRIGGER_ILLUSION_ON);
PHYSFS_writeSLE16(fp, TRIGGER_ILLUSION_ON | ((t->flags & TF_ONE_SHOT) ? TRIGGER_ONE_SHOT : 0));
break;
case TT_UNLOCK_DOOR:
PHYSFS_writeSLE16(fp, TRIGGER_UNLOCK_DOORS);
PHYSFS_writeSLE16(fp, TRIGGER_UNLOCK_DOORS | ((t->flags & TF_ONE_SHOT) ? TRIGGER_ONE_SHOT : 0));
break;
case TT_OPEN_WALL:
PHYSFS_writeSLE16(fp, TRIGGER_OPEN_WALL);
PHYSFS_writeSLE16(fp, TRIGGER_OPEN_WALL | ((t->flags & TF_ONE_SHOT) ? TRIGGER_ONE_SHOT : 0));
break;
case TT_CLOSE_WALL:
PHYSFS_writeSLE16(fp, TRIGGER_CLOSE_WALL);
PHYSFS_writeSLE16(fp, TRIGGER_CLOSE_WALL | ((t->flags & TF_ONE_SHOT) ? TRIGGER_ONE_SHOT : 0));
break;
case TT_ILLUSORY_WALL:
PHYSFS_writeSLE16(fp, TRIGGER_ILLUSORY_WALL);
PHYSFS_writeSLE16(fp, TRIGGER_ILLUSORY_WALL | ((t->flags & TF_ONE_SHOT) ? TRIGGER_ONE_SHOT : 0));
break;
default:

View file

@ -42,7 +42,7 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
#define TT_CLOSE_WALL 10 // Makes a wall closed
#define TT_ILLUSORY_WALL 11 // Makes a wall illusory
#define TT_LIGHT_OFF 12 // Turn a light off
#define TT_LIGHT_ON 13 // Turn s light on
#define TT_LIGHT_ON 13 // Turn a light on
#define NUM_TRIGGER_TYPES 14
// Trigger flags

View file

@ -11,6 +11,12 @@ AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.
COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
*/
/*
*
* Routines for manipulating the button gadgets.
*
*/
#include <stdlib.h>
#include <string.h>

View file

@ -126,7 +126,7 @@ void ui_checkbox_do( UI_GADGET_CHECKBOX * checkbox, int keypress )
}
void ui_checkbox_check(UI_GADGET_CHECKBOX * checkbox, sbyte check)
void ui_checkbox_check(UI_GADGET_CHECKBOX * checkbox, int check)
{
check = check != 0;
if (checkbox->flag == check)

110
ui/func.c
View file

@ -1,110 +0,0 @@
/* $Id: func.c,v 1.1.1.1 2006/03/17 19:52:18 zicodxx Exp $ */
/*
THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO
END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
IN USING, DISPLAYING, AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
FREE PURPOSES. IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES. THE END-USER UNDERSTANDS
AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.
COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
*/
#ifdef RCS
static char rcsid[] = "$Id: func.c,v 1.1.1.1 2006/03/17 19:52:18 zicodxx Exp $";
#endif
#include <stdlib.h>
#include <string.h>
#include "func.h"
#define MAX_PARAMS 10
static FUNCTION * func_table = NULL;
static int func_size = 0;
static int initialized = 0;
static int func_params[MAX_PARAMS];
int func_howmany()
{
return func_size;
}
void func_init( FUNCTION * funtable, int size )
{
if (!initialized)
{
initialized = 1;
func_table = funtable;
func_size = size;
atexit( func_close );
}
}
void func_close()
{
if (initialized)
{
initialized = 0;
func_table = NULL;
func_size = 0;
}
}
int (*func_get( char * name, int * numparams ))(void)
{
int i;
for (i=0; i<func_size; i++ )
if (!strcmpi( name, func_table[i].name ))
{
*numparams = func_table[i].nparams;
return func_table[i].cfunction;
}
return NULL;
}
int func_get_index( char * name )
{
int i;
for (i=0; i<func_size; i++ )
if (!strcmpi( name, func_table[i].name ))
{
return i;
}
return -1;
}
int (*func_nget( int func_number, int * numparams, char **name ))(void)
{
if (func_number < func_size )
{
*name = func_table[func_number].name;
*numparams = func_table[func_number].nparams;
return func_table[func_number].cfunction;
}
return NULL;
}
void func_set_param( int n, int value )
{
func_params[n] = value;
}
int func_get_param( int n )
{
return func_params[n];
}

View file

@ -1,18 +0,0 @@
/* $Id: harderr.c,v 1.1.1.1 2006/03/17 19:52:15 zicodxx Exp $ */
/*
THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO
END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
IN USING, DISPLAYING, AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
FREE PURPOSES. IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES. THE END-USER UNDERSTANDS
AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.
COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
*/
#ifdef RCS
static char rcsid[] = "$Id: harderr.c,v 1.1.1.1 2006/03/17 19:52:15 zicodxx Exp $";
#endif

View file

@ -1,4 +1,15 @@
/* $Id: keytrap.c,v 1.1.1.1 2006/03/17 19:52:19 zicodxx Exp $ */
/*
THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO
END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
IN USING, DISPLAYING, AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
FREE PURPOSES. IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES. THE END-USER UNDERSTANDS
AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.
COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
*/
#include <stdlib.h>
#include <string.h>

View file

@ -1,115 +0,0 @@
/* $Id: medfunc.c,v 1.1.1.1 2006/03/17 19:52:17 zicodxx Exp $ */
/*
THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO
END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
IN USING, DISPLAYING, AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
FREE PURPOSES. IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES. THE END-USER UNDERSTANDS
AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.
COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
*/
#ifdef RCS
static char rcsid[] = "$Id: medfunc.c,v 1.1.1.1 2006/03/17 19:52:17 zicodxx Exp $";
#endif
typedef struct {
char * name;
int nparams;
double (*cfunction)(void);
} FUNCTION;
FUNCTION funtable[] = {
// In khelp.c
{ "med-help", 0, DoHelp },
// In kcurve.c
{ "med-curve-init", 0, InitCurve },
{ "med-curve-generate" 0, GenerateCurve },
{ "med-curve-decrease-r4", 0, DecreaseR4 },
{ "med-curve-increase-r4", 0, IncreaseR4 },
{ "med-curve-decrease-r1", 0, DecreaseR1 },
{ "med-curve-increase-r1", 0, IncreaseR1 },
{ "med-curve-delete", 0, DeleteCurve },
{ "med-curve-set", 0, SetCurve },
// In kmine.c
{ "med-mine-save", 0, SaveMine },
{ "med-mine-load", 0, LoadMine },
{ "med-mine-menu", 0, MineMenu },
{ "med-mine-create-new", 0, CreateNewMine },
// In kview.c
{ "med-view-zoom-out", 0, ZoomOut },
{ "med-view-zoom-in", 0, ZoomIn },
{ "med-view-move-away", 0, MoveAway },
{ "med-view-move-closer", 0, MoveCloser },
{ "med-view-toggle-chase", 0, ToggleChaseMode },
// In kbuild.c
{ "med-build-bridge", 0, CreateBridge },
{ "med-build-joint", 0, FormJoint },
{ "med-build-adj-joint", 0, CreateAdjacentJoint },
{ "med-build-adj-joints-segment", 0, CreateAdjacentJointsSegment },
{ "med-build-adj-joints-all", 0, CreateAdjacentJointsAll },
// In ksegmove.c
{ "med-segmove-decrease-heading", 0, DecreaseHeading },
{ "med-segmove-increase-heading", 0, IncreaseHeading },
{ "med-segmove-decrease-pitch", 0, DecreasePitch },
{ "med-segmove-increase-pitch", 0, IncreasePitch },
{ "med-segmove-decrease-bank", 0, DecreaseBank },
{ "med-segmove-increase-bank", 0, IncreaseBank },
// In ksegsel.c
{ "med-segsel-next-segment", 0, SelectCurrentSegForward },
{ "med-segsel-prev-segment", 0, SelectCurrentSegBackward },
{ "med-segsel-next-side", 0, SelectNextSide },
{ "med-segsel-prev-side", 0, SelectPrevSide },
{ "med-segsel-set-marked", 0, CopySegToMarked },
{ "med-segsel-bottom", 0, SelectBottom },
{ "med-segsel-front", 0, SelectFront },
{ "med-segsel-top", 0, SelectTop },
{ "med-segsel-back", 0, SelectBack },
{ "med-segsel-left", 0, SelectLeft },
{ "med-segsel-right", 0, SelectRight },
// In ksegsize.c
{ "med-segsize-increase-length", 0, IncreaseSegLength },
{ "med-segsize-decrease-length", 0, DecreaseSegLength },
{ "med-segsize-decrease-width", 0, DecreaseSegWidth },
{ "med-segsize-increase-width", 0, IncreaseSegWidth },
{ "med-segsize-increase-height", 0, IncreaseSegHeight },
{ "med-segsize-decrease-height", 0, DecreaseSegHeight },
{ "med-segsize-increase-length-big", 0, IncreaseSegLengthBig },
{ "med-segsize-decrease-length-big", 0, DecreaseSegLengthBig },
{ "med-segsize-decrease-width-big", 0, DecreaseSegWidthBig },
{ "med-segsize-increase-width-big", 0, IncreaseSegWidthBig },
{ "med-segsize-increase-height-big", 0, IncreaseSegHeightBig },
{ "med-segsize-decrease-height-big", 0, DecreaseSegHeightBig },
// In ktmap.c
{ "med-tmap-assign", 0, AssignTexture },
{ "med-tmap-propogate", 0, PropagateTextures },
{ "med-tmap-propogate-selected", 0, PropagateTexturesSelected },
// In macro.c
{ "med-macro-menu", 0, MacroMenu },
{ "med-macro-play-fast", 0, MacroPlayFast },
{ "med-macro-play-normal", 0, MacroPlayNormal },
{ "med-macro-record-all", 0, MacroRecordAll },
{ "med-macro-record-keys", 0, MacroRecordKeys },
{ "med-macro-save", 0, MacroSave },
{ "med-macro-load", 0, MacroLoad },
// The terminating marker
{ NULL, 0, NULL } };

View file

@ -111,7 +111,7 @@ void menu_show( MENU * menu )
gr_set_current_canvas(NULL);
// Don't save background it if it's already drawn
if (!menu->Displayed)
if (!menu->Displayed && menu->w>0 && menu->h>0)
{
// Save the background
gr_bm_ubitblt(menu->w, menu->h, 0, 0, menu->x, menu->y, &(grd_curscreen->sc_canvas.cv_bitmap), menu->Background);

View file

@ -12,20 +12,21 @@ AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.
COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
*/
#ifdef RCS
static char rcsid[] = "$Id: mouse.c,v 1.1.1.1 2006/03/17 19:52:18 zicodxx Exp $";
#endif
/*
*
* Mouse interface routines.
*
*/
#include <stdlib.h>
#include <SDL/SDL.h>
#include "u_mem.h"
#include "fix.h"
#include "pstypes.h"
#include "gr.h"
#include "mouse.h"
#include "timer.h"
#include "ui.h"
#include "timer.h"
// 16x16
@ -99,6 +100,9 @@ int ui_mouse_find_gadget(short n)
void ui_mouse_show()
{
#ifndef __MSDOS__
SDL_ShowCursor(1);
#else
if (Mouse.hidden==1 ) {
Mouse.hidden = 0;
// Save the background under new pointer
@ -108,10 +112,12 @@ void ui_mouse_show()
// Draw the new pointer
gr_bm_ubitbltm( Mouse.pointer->bm_w, Mouse.pointer->bm_h, Mouse.x, Mouse.y, 0, 0, Mouse.pointer, &(grd_curscreen->sc_canvas.cv_bitmap) );
}
#endif
}
void ui_mouse_hide()
{
#ifdef __MSDOS__
if (Mouse.hidden==0 ) {
Mouse.hidden = 1;
if (Mouse.bg_saved==1) {
@ -119,20 +125,23 @@ void ui_mouse_hide()
Mouse.bg_saved = 0;
}
}
#endif
}
void ui_mouse_process()
{ int buttons,w,h;
//if (Mouse.hidden==0)
// mouse_get_pos( &Mouse.x, &Mouse.y );
//else
// mouse_set_pos( Mouse.x, Mouse.y );
{
int buttons,w,h;
#ifndef __MSDOS__
int new_x, new_y;
buttons = SDL_GetMouseState(&new_x,&new_y);
Mouse.dx = new_x - Mouse.x;
Mouse.dy = new_y - Mouse.y;
#else
Mouse.dx = Mouse.new_dx;
Mouse.dy = Mouse.new_dy;
buttons = Mouse.new_buttons;
#endif
Mouse.x += Mouse.dx;
Mouse.y += Mouse.dy;
@ -153,6 +162,7 @@ void ui_mouse_process()
if ( (Mouse.bg_x!=Mouse.x) || (Mouse.bg_y!=Mouse.y) || (Mouse.bg_saved==0) )
{
#ifdef __MSDOS__
// Restore the background under old pointer
if (Mouse.bg_saved==1) {
gr_bm_ubitblt( Mouse.background->bm_w, Mouse.background->bm_h, Mouse.bg_x, Mouse.bg_y, 0, 0, Mouse.background, &(grd_curscreen->sc_canvas.cv_bitmap) );
@ -170,6 +180,7 @@ void ui_mouse_process()
// Draw the new pointer
gr_bm_ubitbltm( Mouse.pointer->bm_w, Mouse.pointer->bm_h, Mouse.x, Mouse.y, 0, 0, Mouse.pointer, &(grd_curscreen->sc_canvas.cv_bitmap) );
}
#endif /* __MSDOS__*/
}
Mouse.b1_last_status = Mouse.b1_status;
@ -235,6 +246,9 @@ void ui_mouse_init()
{
int i, w,h;
#ifndef __MSDOS__
SDL_ShowCursor(1);
#endif
//mouse_init();
w = grd_curscreen->sc_w;
@ -279,13 +293,16 @@ void ui_mouse_init()
Mouse.b3_status = Mouse.b3_last_status = BUTTON_RELEASED;
Mouse.bg_x = Mouse.bg_y = 0;
Mouse.bg_saved = 0;
#ifdef __MSDOS__
Mouse.pointer = default_pointer;
Mouse.background = gr_create_bitmap( Mouse.pointer->bm_w, Mouse.pointer->bm_h );
#endif
Mouse.time_lastpressed = 0;
Mouse.moved = 0;
}
#ifdef __MSDOS__
grs_bitmap * ui_mouse_set_pointer( grs_bitmap * new )
{
grs_bitmap * temp = Mouse.pointer;
@ -303,11 +320,13 @@ grs_bitmap * ui_mouse_set_pointer( grs_bitmap * new )
}
#endif
void ui_mouse_close()
{
#ifdef __MSDOS__
gr_free_sub_bitmap(default_pointer);
gr_free_bitmap(Mouse.background);
#endif
}

View file

@ -11,6 +11,12 @@ AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.
COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
*/
/*
*
* Radio box gadget stuff.
*
*/
#include <stdlib.h>
#include <string.h>
#include "fix.h"
@ -144,10 +150,11 @@ void ui_radio_do( UI_GADGET_RADIO * radio, int keypress )
}
void ui_radio_set_value(UI_GADGET_RADIO *radio, sbyte value)
void ui_radio_set_value(UI_GADGET_RADIO *radio, int value)
{
UI_GADGET_RADIO *tmp;
value = value != 0;
if (radio->flag == value)
return;

View file

@ -11,6 +11,12 @@ AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.
COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
*/
/*
*
* UI init and close functions.
*
*/
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>

View file

@ -11,11 +11,15 @@ AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.
COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
*/
/*
*
* Windowing functions and controller.
*
*/
#include <stdlib.h>
#include <stdio.h>
#include <stdarg.h>
#define _disable()
#define _enable()
#include "window.h"
#include "u_mem.h"
@ -24,8 +28,8 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
#include "gr.h"
#include "ui.h"
#include "key.h"
#include "timer.h"
#include "mouse.h"
#include "timer.h"
#include "error.h"
#define W_BACKGROUND (wnd->background )
@ -41,6 +45,10 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
#define W_NEXT (wnd->next)
#define W_PREV (wnd->prev)
#ifndef __MSDOS__
#define _disable()
#define _enable()
#endif
UI_WINDOW * CurWindow = NULL;
UI_WINDOW * FirstWindow = NULL;