- Moved some files around for better organization

- Fixed compile errors in the other targets.
- Added three test save files: one with a party not in a scenario, one with a party who has just entered Valley of Dying things,
  and one with the same party just after leaving town.
- Added the new menu file for the game that I'm working on (not yet used)

git-svn-id: http://openexile.googlecode.com/svn/trunk@53 4ebdad44-0ea0-11de-aab3-ff745001d230
This commit is contained in:
2009-05-06 20:23:54 +00:00
parent f8701fdaff
commit 68dcf3cdef
59 changed files with 2736 additions and 58 deletions

915
osx/tools/dlglowlevel.cpp Normal file
View File

@@ -0,0 +1,915 @@
/*
* dloglowlevel.cpp
* BoE
*
* Created by Celtic Minstrel on 16/04/09.
*
*/
#include <stdio.h>
#include <string.h>
#include "dlgconsts.h"
#include "dlglowlevel.h"
#include "dlgtool.h"
#include "soundtool.h"
#include "graphtool.h"
#include "mathutil.h"
extern PixPatHandle bg[];
extern GWorldPtr dlg_buttons_gworld[NUM_BUTTONS][2];
extern map<char*,GWorldPtr*> dlg_gworlds;
extern dlg_t dlgs[ND];
extern dlg_item_t items[NI];
extern char text_long_str[10][256];
extern char text_short_str[140][40];
extern dlg_label_t labels[NL];
extern short dlg_bg;
extern short available_dlog_buttons[NUM_DLOG_B];
extern btn_t buttons[];
void process_new_window (short which_dlg) {
short i = -1,j,free_slot = -1,free_item = -1,type,flag;
//char but_str[30];
Str255 item_str;
bool str_stored = false;
//Rect dlg_rect;
Rect store_rect;
short win_height = 0, win_width = 0;
short the_type;
Handle the_handle = NULL;
Rect small_rect;
short num_items;
short str_offset = 1;
WindowPtr hDlg = dlgs[which_dlg].win;
free_slot = which_dlg;
num_items = CountDITL(GetDialogFromWindow(hDlg));
dlgs[free_slot].highest_item = 0;
// Now, give the window its items
for (i = 0; i < num_items; i++) {
str_offset = 1;
GetDialogItem( GetDialogFromWindow(hDlg), i + 1, &the_type, &the_handle, &small_rect);
if (the_type % 128 == 8) {
GetDialogItemText(the_handle,item_str);
p2cstr(item_str);
dlgs[free_slot].highest_item++;
str_stored = false;
if (strlen((char *)item_str) == 0) {
sprintf((char *) item_str, "+");
type = DLG_TEXT_BOLD;
flag = 1;
str_stored = true;
}
else if (item_str[0] == '+') { // default is framed text
type = DLG_TEXT_BOLD;
flag = 1;
str_stored = true;
}
else if (item_str[0] == '*') {
type = DLG_TEXT_BOLD;
flag = 0;
str_stored = true;
}
else if (item_str[0] == '~') {
type = DLG_TEXT_LARGE;
flag = 0;
str_stored = true;
}
else if (item_str[0] == '!') {
type = DLG_TEXT_PLAIN;
flag = 0;
str_stored = true;
}
else if (item_str[0] == '=') {
type = DLG_TEXT_DEFAULT;
flag = 1;
str_stored = true;
}
else if (item_str[0] == '^') {
type = DLG_CUSTOM_BTN;
flag = 1;
if (string_length((char *) item_str) > 55)
flag = 2;
str_stored = true;
}
else if (((item_str[0] >= 65) && (item_str[0] <= 122)) || (item_str[0] == '"')) {
type = DLG_TEXT_DEFAULT;
flag = 0;
str_offset = 0;
str_stored = true;
}
else if (item_str[0] == '&') {
type = DLG_CUSTOM_DEF_BTN;
flag = 1;
if (string_length((char *) item_str) > 55)
flag = 2;
str_stored = true;
}
// else if (item_str[0] == '@') { // For potential future use
// type = DLG_PUSH_BTN;
// flag = 1;
// if (string_length((char *) item_str) > 55)
// flag = 2;
// str_stored = true;
// }
else {
#ifndef EXILE_BIG_GUNS
sscanf((char *) item_str,"%hd_%hd",&type,&flag);
#endif
#ifdef EXILE_BIG_GUNS
sscanf((char *) item_str,"%hd_%hd",&type,&flag);
#endif
}
free_item = -1;
// find free item
if(type == DLG_BUTTON || type == DLG_DEFAULT_BTN || type == DLG_LED_BUTTON ||
type == DLG_OLD_PICTURE || type == DLG_HIDDEN_BUTTON || type >= DLG_NEW_PICTURE){
for (j = 150; j < NI; j++)
if (items[j].dlg < 0) {
free_item = j;
break;
}
}else if ((type == 9) || (str_stored && (strlen((char *) item_str) > 35))) {
for (j = 0; j < 10; j++)
if (items[j].dlg < 0) {
free_item = j;
break;
}
}else {
for (j = 10; j < 140; j++)
if (items[j].dlg < 0) {
free_item = j;
break;
}
}
if (free_item >= 0) {
items[free_item].dlg = dlgs[free_slot].type;
items[free_item].type = type;
items[free_item].number = i + 1;
items[free_item].rect = get_item_rect(hDlg,i + 1);
items[free_item].flag = flag;
items[free_item].active = 1;
items[free_item].label = 0;
items[free_item].label_loc = -1;
items[free_item].key = 0;
switch (type) {
case DLG_BUTTON: case DLG_DEFAULT_BTN:
GetPortBounds(dlg_buttons_gworld[buttons[flag].type][0], &store_rect);
items[free_item].rect.right = items[free_item].rect.left + store_rect.right;
items[free_item].rect.bottom = items[free_item].rect.top + store_rect.bottom;
items[free_item].key = buttons[flag].def_key;
if (type == 1)
items[free_item].key = DLG_KEY_RETURN;
break;
case DLG_LED_BUTTON:
items[free_item].rect.right = items[free_item].rect.left + 14;
items[free_item].rect.bottom = items[free_item].rect.top + 10;
items[free_item].key = 255;
break;
case DLG_TEXT_BOLD: case DLG_TEXT_PLAIN: case DLG_TEXT_LARGE:
case DLG_TEXT_CLICKABLE: case DLG_TEXT_DEFAULT:
case DLG_CUSTOM_BTN: case DLG_CUSTOM_DEF_BTN:
//sprintf(((free_item < 10) ? text_long_str[free_item] : text_short_str[free_item - 10]),"");
if (str_stored == true) {
if (free_item < 10)
sprintf(text_long_str[free_item],"%s",(char *) (item_str + str_offset));
else
sprintf(text_short_str[free_item - 10],"%-39.39s", (char *) (item_str + str_offset));
}
items[free_item].key = 255;
if (type >= DLG_CUSTOM_BTN) {
GetPortBounds(dlg_buttons_gworld[1][0], &store_rect);
items[free_item].rect.right = items[free_item].rect.left + store_rect.right;
items[free_item].rect.bottom = items[free_item].rect.top + store_rect.bottom;
if (type == DLG_CUSTOM_DEF_BTN)
items[free_item].key = DLG_KEY_RETURN;
}
break;
}
win_height = max(win_height, items[free_item].rect.bottom + 5);
win_width = max(win_width, items[free_item].rect.right + 6);
}
}
}
ShortenDITL(GetDialogFromWindow(hDlg),dlgs[free_slot].highest_item);
SizeWindow(hDlg,win_width,win_height,false);
dlgs[free_slot].highest_item = num_items;
}
// LOW LEVEL
short cd_get_indices(short dlg_num, short item_num, short *dlg_index, short *item_index){
if ((*dlg_index = cd_get_dlg_index(dlg_num)) < 0) {
return -1;
}
if ((*item_index = cd_get_item_id(dlg_num,item_num)) < 0) {
return -1;
}
return 0;
}
short cd_get_dlg_index(short dlog_num){
short i;
for (i = 0; i < ND; i++)
if ((dlgs[i].key >= 0) && (dlgs[i].type == dlog_num))
return i;
return -1;
}
short cd_find_dlog(WindowPtr window, short *dlg_num, short *dlg_key){
short i;
for (i = 0; i < ND; i++)
if ((dlgs[i].key >= 0) && (dlgs[i].win == window)) {
*dlg_num = dlgs[i].type;
*dlg_key = dlgs[i].key;
return i;
}
return -1;
}
short cd_get_item_id(short dlg_num, short item_num){
short i;
for (i = 0; i < NI; i++)
if ((items[i].dlg == dlg_num) && (items[i].number == item_num))
return i;
return -1;
}
Rect get_item_rect(WindowPtr hDlg, short item_num){
short the_type;
Handle the_handle = NULL;
Rect small_rect;
GetDialogItem( GetDialogFromWindow(hDlg), item_num, &the_type, &the_handle, &small_rect);
return small_rect;
}
void frame_dlog_rect(GrafPtr hDlg, Rect rect, short val, short med_or_lt){
static RGBColor lt_gray = {57344,57344,57344},dk_gray = {12287,12287,12287},med_gray = {24574,24574,24574};
GrafPtr old_port;
GetPort(&old_port);
SetPort(hDlg);
InsetRect(&rect,-1 * val,-1 * val);
RGBForeColor(&dk_gray);
MoveTo(rect.left,rect.top);
LineTo(rect.right,rect.top);
if (med_or_lt) // hDlg == GetWindowPort(mainPtr) // ie for the pc editor only
RGBForeColor(&med_gray);
else RGBForeColor(&lt_gray);
LineTo(rect.right,rect.bottom);
LineTo(rect.left,rect.bottom);
RGBForeColor(&dk_gray);
LineTo(rect.left,rect.top);
ForeColor(blackColor);
SetPort(old_port);
}
// win_or_gworld: 0 - window 1 - gworld
// 0 - 300 number of terrain graphic -> PICT_TER (1), PICT_TER_ANIM (2)
// 400 + x - monster graphic num (uses index from scenario) -> PICT_MONST
// 400 is 1st monster from monster index, 401 is 2nd from m. index, and so on
// 700 + x dlog graphic -> PICT_DLG
// 800 + x pc graphic -> PICT_PC
// 900 + x B&W graphic -> PICT_BW
// 950 null item -> 0, PICT_BLANK (0)
// 1000 + x Talking face -> PICT_TALK
// 1100 - item info help -> PICT_INFO
// 1200 - pc screen help -> PICT_PC_HELP
// 1300 - combat ap -> PICT_COMBAT_AP
// 1400-1402 - button help -> PICT_HELP
// 1500 - stat symbols help -> PICT_STAT
// 1600 + x - scen graphics -> PICT_SCEN
// 1700 + x - anim / field graphic -> PICT_FIELD
// 1800 + x item graphic -> PICT_ITEM
// 2000 + x - custom graphics up to 2399
// 2400 + x - custom graphics up to 2799, BUT it's a split graphic ...
// it looks at the size of rect, and places a 32 x 32 or 36 x 36 graphic drawn
// from the custom gworld, depending on the size of rect. half of graphic is
// drawn from one custom slot, and half is drawn from next one.
// PICT_OLD (-1) to revert to the old behaviour
GrafPtr hDialog;
short w__gw;
bool fr;
void draw_dialog_graphic(GrafPtr hDlg, Rect rect, short which_g, short type_g, bool do_frame,short win_or_gworld){
RGBColor store_color;
if (which_g < 0)
return;
if (which_g >= 2000)
do_frame = false;
which_g = which_g % 2000;
if (type_g == PICT_OLD)
convert_pict(which_g,type_g,rect); // pass by reference
printf("Drawing graphic %i of type %i.\n",which_g,type_g);
if (type_g == PICT_BLANK) { // Empty. Maybe clear space.
if (win_or_gworld == 0) {
InsetRect(&rect, -3, -3);
FillCRect(&rect,bg[dlg_bg]);
}
return;
}
GetBackColor(&store_color);
BackColor(whiteColor);
hDialog = hDlg;
w__gw = win_or_gworld;
fr = do_frame;
switch (type_g) {
case PICT_TER: // terrain
draw_preset_ter_pic(which_g,rect);
break;
case PICT_TER_ANIM: // animated terrain
draw_preset_anim_ter_pic(which_g,rect);
break;
case PICT_MONST: // monster ... needs use index small_monst_rect
// There are 4 different ways to draw, depending on size of monster
if ((m_pic_index[which_g].x == 1) && (m_pic_index[which_g].y == 1))
draw_preset_monst_pic_small(which_g,rect);
else if ((m_pic_index[which_g].x == 2) && (m_pic_index[which_g].y == 1))
draw_preset_monst_pic_wide(which_g,rect);
else if ((m_pic_index[which_g].x == 1) && (m_pic_index[which_g].y == 2))
draw_preset_monst_pic_tall(which_g,rect);
else if ((m_pic_index[which_g].x == 2) && (m_pic_index[which_g].y == 2))
draw_preset_monst_pic_large(which_g,rect);
break;
case PICT_ITEM: // item
draw_preset_item_pic(which_g,rect);
break;
case PICT_DLG: // dialog
draw_preset_dlg_pic(which_g,rect);
break;
case PICT_DLG_LARGE:
draw_preset_dlg_pic_large(which_g,rect);
break;
case PICT_PC: // PC
draw_preset_pc_pic(which_g,rect);
break;
case PICT_TALK: // talk face
draw_preset_talk_pic(which_g,rect);
break;
case PICT_INFO_HELP: // item info help
draw_item_info_help_pic(rect);
break;
case PICT_PC_HELP: // item info help
draw_pc_info_help_pic(rect);
break;
case PICT_HELP: // button help
draw_help_pic(which_g,rect);
break;
case PICT_COMBAT_AP: // combat ap help
draw_combat_ap_help_pic(rect);
break;
case PICT_STAT: // stat symbols help
draw_pc_stat_help_pic(rect);
break;
case PICT_SCEN:
draw_preset_scen_pic(which_g,rect);
break;
case PICT_SCEN_LARGE:
draw_preset_scen_pic_large(which_g,rect);
break;
case PICT_FIELD: // dialog
draw_preset_field_pic(which_g,rect);
break;
case PICT_CUSTOM + PICT_MONST + PICT_WIDE_MONSTER:
draw_custom_monst_wide_pic(which_g,rect);
break;
case PICT_CUSTOM + PICT_MONST + PICT_TALL_MONSTER:
draw_custom_monst_tall_pic(which_g,rect);
break;
case PICT_CUSTOM + PICT_MONST + PICT_WIDE_MONSTER + PICT_TALL_MONSTER:
draw_custom_monst_large_pic(which_g,rect);
break;
case PICT_CUSTOM + PICT_DLG: // dialog, split
draw_custom_dlg_pic_split(which_g,rect);
break;
case PICT_CUSTOM + PICT_TALK: // facial graphic, split
case PICT_CUSTOM + PICT_SCEN: // Not currently possible; not sure it ever will be
draw_custom_talk_pic_split(which_g,rect);
break;
default: // PICT_CUSTOM + PICT_TER, PICT_TER_ANIM, PICT_MONST, PICT_ITEM, PICT_PC, PICT_FIELD, etc
if(type_g < PICT_CUSTOM) break; // not all of which are necessarily valid...
draw_custom_space_pic(which_g,rect);
break;
}
w__gw = 0;
hDialog = NULL;
fr = false;
if (do_frame == true) {
rect.bottom--;
rect.right--;
frame_dlog_rect(hDlg,rect,3);
}
RGBBackColor(&store_color);
}
void convert_pict(short& which_g, short& type_g,Rect& rect){
unsigned short r = which_g / 100;
printf("Parsing old-style graphic %i.\t",which_g);
if (r < 3){
type_g = PICT_TER;
}else if(r == 4){
type_g = PICT_TER_ANIM;
which_g -= 400;
}else if(r < 7){
type_g = PICT_MONST;
which_g -= 700;
}else if(r >= 20 && r <= 23){
type_g = PICT_CUSTOM + PICT_TER;
// It may not be a terrain graphic, but it's at least a terrain-sized graphic, so it matters not
which_g -= 2000;
}else if(r >= 24 && r <= 27){
type_g = PICT_CUSTOM;
which_g -= 2400;
if(rect.right - rect.left == 32){
type_g += PICT_TALK;
}else if(rect.right - rect.left == 36){
type_g += PICT_DLG;
}else{
type_g += PICT_TER; // This should never happen
}
}else if(which_g == 950){
type_g = PICT_BLANK;
}else switch(r){
case 7:
type_g = PICT_DLG;
which_g -= 700;
break;
case 10:
type_g = PICT_TALK;
which_g -= 1000;
break;
case 11:
type_g = PICT_INFO_HELP;
which_g -= 1100;
break;
case 12:
type_g = PICT_PC_HELP;
which_g -= 1200;
break;
case 13:
type_g = PICT_COMBAT_AP;
which_g -= 1300;
break;
case 14:
if(which_g > 10){
type_g = PICT_SCEN_LARGE;
}else{
type_g = PICT_HELP;
}
which_g -= 1400;
break;
case 15:
type_g = PICT_STAT;
which_g -= 1500;
break;
case 16:
type_g = PICT_SCEN;
which_g -= 1600;
break;
case 17:
type_g = PICT_FIELD;
which_g -= 1700;
case 18: case 19:
type_g = PICT_ITEM;
which_g -= 1800;
break;
}
printf("Reduced to type = %i, num = %i\n",type_g,which_g);
}
void draw_preset_ter_pic(short which_g,Rect& rect){ // terrain
short draw_dest = (w__gw == 1) ? 0 : 2;
printf("Getting terrain icon from sheet %i.\n",which_g / 50);
GWorldPtr from_gworld = dlg_gworlds["ter"][which_g / 50];
//GWorldPtr to_gworld = (GWorldPtr) ((w__gw == 1) ? (GWorldPtr) (hDialog): from_gworld);
GWorldPtr to_gworld = (GWorldPtr) hDialog;
which_g = which_g % 50;
Rect from_rect = calc_rect(which_g % 10, which_g / 10);
if (rect.right - rect.left > 28)
InsetRect(&rect,4,0);
rect_draw_some_item(from_gworld,from_rect, to_gworld, rect,0,draw_dest);
}
void draw_preset_anim_ter_pic(short which_g,Rect& rect){ // animated terrain
short draw_dest = (w__gw == 1) ? 0 : 2;
Rect from_rect = calc_rect(4 * (which_g / 5), which_g % 5);
GWorldPtr from_gworld = *dlg_gworlds["anim"];
//GWorldPtr to_gworld = (GWorldPtr) ((w__gw == 1) ? (GWorldPtr) (hDialog): from_gworld);
GWorldPtr to_gworld = (GWorldPtr) hDialog;
printf("Getting animated terrain graphic %i from sheet 20", which_g);
//printf(" at {%i,%i,%i,%i}",from_rect.top,from_rect.left,from_rect.bottom,from_rect.right);
//printf(" column %i, row %i.\n",from_rect.left/28,from_rect.top/36);
if (rect.right - rect.left > 28) {
InsetRect(&rect,4,0);
rect.right = rect.left + 28;
}
rect_draw_some_item(from_gworld ,from_rect, to_gworld,rect,0,draw_dest);
}
void draw_preset_monst_pic_small(short which_g,Rect& rect){ // monster
short draw_dest = (w__gw == 1) ? 0 : 2;
short m_start_pic = m_pic_index[which_g].i;
GWorldPtr from_gworld = dlg_gworlds["monst"][m_start_pic / 20];
//GWorldPtr to_gworld = (GWorldPtr) ((w__gw == 1) ? (GWorldPtr) (hDialog): from_gworld);
GWorldPtr to_gworld = (GWorldPtr) hDialog;
m_start_pic = m_start_pic % 20;
Rect from_rect = calc_rect(2 * (m_start_pic / 10), m_start_pic % 10);
rect.right = rect.left + 28; rect.bottom = rect.top + 36;
if (w__gw == 0)
PaintRect(&rect);
rect_draw_some_item(from_gworld,from_rect,to_gworld,rect,1,draw_dest);
}
void draw_preset_monst_pic_wide(short which_g,Rect& rect){
short draw_dest = (w__gw == 1) ? 0 : 2;
short m_start_pic = m_pic_index[which_g].i;
Rect small_monst_rect = {0,0,18,14};
rect.right = rect.left + 28; rect.bottom = rect.top + 36;
if (w__gw == 0)
PaintRect(&rect);
GWorldPtr from_gworld = dlg_gworlds["monst"][m_start_pic / 20];
//GWorldPtr to_gworld = (GWorldPtr) ((w__gw == 1) ? (GWorldPtr) (hDialog): from_gworld);
GWorldPtr to_gworld = (GWorldPtr) hDialog;
m_start_pic = m_start_pic % 20;
Rect from_rect = calc_rect(2 * (m_start_pic / 10), m_start_pic % 10);
OffsetRect(&small_monst_rect,rect.left,rect.top + 7);
if (w__gw == 0)
PaintRect(&small_monst_rect);
rect_draw_some_item(from_gworld,from_rect,to_gworld,small_monst_rect,1,draw_dest);
m_start_pic = m_pic_index[which_g].i + 1;
from_gworld = dlg_gworlds["monst"][m_start_pic / 20];
m_start_pic = m_start_pic % 20;
from_rect = calc_rect(2 * (m_start_pic / 10), m_start_pic % 10);
OffsetRect(&small_monst_rect,14,0);
if (w__gw == 0)
PaintRect(&small_monst_rect);
rect_draw_some_item(from_gworld,from_rect,to_gworld,small_monst_rect,1,draw_dest);
}
void draw_preset_monst_pic_tall(short which_g,Rect& rect){
short draw_dest = (w__gw == 1) ? 0 : 2;
short m_start_pic = m_pic_index[which_g].i;
Rect small_monst_rect = {0,0,18,14};
rect.right = rect.left + 28; rect.bottom = rect.top + 36;
if (w__gw == 0)
PaintRect(&rect);
GWorldPtr from_gworld = dlg_gworlds["monst"][m_start_pic / 20];
//GWorldPtr to_gworld = (GWorldPtr) ((w__gw == 1) ? (GWorldPtr) (hDialog): from_gworld);
GWorldPtr to_gworld = (GWorldPtr) hDialog;
m_start_pic = m_start_pic % 20;
Rect from_rect = calc_rect(2 * (m_start_pic / 10), m_start_pic % 10);
OffsetRect(&small_monst_rect,rect.left + 7,rect.top);
if (w__gw == 0)
PaintRect(&small_monst_rect);
rect_draw_some_item(from_gworld,from_rect,to_gworld,small_monst_rect,1,draw_dest);
m_start_pic = m_pic_index[which_g].i + 1;
from_gworld = dlg_gworlds["monst"][m_start_pic / 20];
m_start_pic = m_start_pic % 20;
from_rect = calc_rect(2 * (m_start_pic / 10), m_start_pic % 10);
OffsetRect(&small_monst_rect,0,18);
if (w__gw == 0)
PaintRect(&small_monst_rect);
rect_draw_some_item(from_gworld,from_rect,to_gworld,small_monst_rect,1,draw_dest);
}
void draw_preset_monst_pic_large(short which_g,Rect& rect){
short draw_dest = (w__gw == 1) ? 0 : 2;
short m_start_pic = m_pic_index[which_g].i;
Rect small_monst_rect = {0,0,18,14};
rect.right = rect.left + 28; rect.bottom = rect.top + 36;
if (w__gw == 0)
PaintRect(&rect);
GWorldPtr from_gworld = dlg_gworlds["monst"][m_start_pic / 20];
//GWorldPtr to_gworld = (GWorldPtr) ((w__gw == 1) ? (GWorldPtr) (hDialog): from_gworld);
GWorldPtr to_gworld = (GWorldPtr) hDialog;
m_start_pic = m_start_pic % 20;
Rect from_rect = calc_rect(2 * (m_start_pic / 10), m_start_pic % 10);
OffsetRect(&small_monst_rect,rect.left,rect.top);
if (w__gw == 0)
PaintRect(&small_monst_rect);
rect_draw_some_item(from_gworld,from_rect,to_gworld,small_monst_rect,1,draw_dest);
m_start_pic = m_pic_index[which_g].i + 1;
from_gworld = dlg_gworlds["monst"][m_start_pic / 20];
m_start_pic = m_start_pic % 20;
from_rect = calc_rect(2 * (m_start_pic / 10), m_start_pic % 10);
OffsetRect(&small_monst_rect,14,0);
if (w__gw == 0)
PaintRect(&small_monst_rect);
rect_draw_some_item(from_gworld,from_rect,to_gworld,small_monst_rect,1,draw_dest);
m_start_pic = m_pic_index[which_g].i + 2;
from_gworld = dlg_gworlds["monst"][m_start_pic / 20];
m_start_pic = m_start_pic % 20;
from_rect = calc_rect(2 * (m_start_pic / 10), m_start_pic % 10);
OffsetRect(&small_monst_rect,-14,18);
if (w__gw == 0)
PaintRect(&small_monst_rect);
rect_draw_some_item(from_gworld,from_rect,to_gworld,small_monst_rect,1,draw_dest);
m_start_pic = m_pic_index[which_g].i + 3;
from_gworld = dlg_gworlds["monst"][m_start_pic / 20];
m_start_pic = m_start_pic % 20;
from_rect = calc_rect(2 * (m_start_pic / 10), m_start_pic % 10);
OffsetRect(&small_monst_rect,14,0);
if (w__gw == 0)
PaintRect(&small_monst_rect);
rect_draw_some_item(from_gworld,from_rect,to_gworld,small_monst_rect,1,draw_dest);
}
void draw_preset_item_pic(short which_g,Rect& rect){ // item
short draw_dest = (w__gw == 1) ? 0 : 2;
rect.right = rect.left + 28; rect.bottom = rect.top + 36;
Rect to_rect = rect;
if (w__gw == 0)
PaintRect(&rect);
GWorldPtr from_gworld;
Rect from_rect = {0,0,18,18};
if (which_g < 45) {
from_gworld = *dlg_gworlds["items"];
from_rect = calc_rect(which_g % 5, which_g / 5);
}
else {
from_gworld = *dlg_gworlds["tiny-obj"];
//rect.top += 4; rect.bottom -= 4;
InsetRect(&to_rect,5,9);
OffsetRect(&from_rect,18 * (which_g % 10), 18 * (which_g / 10));
}
//GWorldPtr to_gworld = (GWorldPtr) ((w__gw == 1) ? (GWorldPtr) (hDialog): from_gworld);
GWorldPtr to_gworld = (GWorldPtr) hDialog;
rect_draw_some_item(from_gworld,from_rect,to_gworld,to_rect,1,draw_dest);
}
void draw_preset_dlg_pic(short which_g,Rect& rect){ // dialog
short draw_dest = (w__gw == 1) ? 0 : 2;
GWorldPtr from_gworld = *dlg_gworlds["dlog"];
//GWorldPtr to_gworld = (GWorldPtr) ((w__gw == 1) ? (GWorldPtr) (hDialog): from_gworld);
GWorldPtr to_gworld = (GWorldPtr) hDialog;
Rect from_rect = {0,0,36,36};
OffsetRect(&from_rect,36 * (which_g % 4),36 * (which_g / 4));
rect_draw_some_item(from_gworld,from_rect,to_gworld,rect,0,draw_dest);
}
void draw_preset_pc_pic(short which_g,Rect& rect){ // PC
short draw_dest = (w__gw == 1) ? 0 : 2;
GWorldPtr from_gworld;
if (*dlg_gworlds["pc"] != NULL)
from_gworld = *dlg_gworlds["pc"];
else from_gworld = load_pict(902);
//GWorldPtr to_gworld = (GWorldPtr) ((w__gw == 1) ? (GWorldPtr) (hDialog): from_gworld);
GWorldPtr to_gworld = (GWorldPtr) hDialog;
//which_g -= 800;
Rect from_rect = calc_rect(2 * (which_g / 8), which_g % 8);
PaintRect(&rect);
rect_draw_some_item(from_gworld,from_rect,to_gworld,rect,1,draw_dest);
if (*dlg_gworlds["pc"] == NULL)
DisposeGWorld(from_gworld);
}
void draw_preset_talk_pic(short which_g,Rect& rect){ // talk face
rect.right = rect.left + 32; rect.bottom = rect.top + 32;
GWorldPtr from_gworld = *dlg_gworlds["talkfaces"];
//GWorldPtr to_gworld = (GWorldPtr) ((w__gw == 1) ? (GWorldPtr) (hDialog): from_gworld);
GWorldPtr to_gworld = (GWorldPtr) hDialog;
Rect from_rect = {0,0,32,32};
OffsetRect(&from_rect,32 * ((which_g - 1) % 10),32 * ((which_g - 1) / 10));
rect_draw_some_item(from_gworld,from_rect,to_gworld,rect,0,0);
}
void draw_item_info_help_pic(Rect& rect){ // item info help
short draw_dest = (w__gw == 1) ? 0 : 2;
Rect from_rect = {0,174,113,312};
GWorldPtr from_gworld = *dlg_gworlds["mixed"];
//GWorldPtr to_gworld = (GWorldPtr) ((w__gw == 1) ? (GWorldPtr)hDialog: *dlg_gworlds["mixed"]);
GWorldPtr to_gworld = (GWorldPtr)hDialog;
rect.right = rect.left + from_rect.right - from_rect.left;
rect.bottom = rect.top + from_rect.bottom - from_rect.top;
rect_draw_some_item(from_gworld ,from_rect, to_gworld ,rect,0,draw_dest);
}
void draw_pc_info_help_pic(Rect& rect){ // item info help
short draw_dest = (w__gw == 1) ? 0 : 2;
Rect from_rect = {130,0,157,106};
GWorldPtr from_gworld = *dlg_gworlds["mixed"];
//GWorldPtr to_gworld = (GWorldPtr) ((w__gw == 1) ? (GWorldPtr) (hDialog): from_gworld);
GWorldPtr to_gworld = (GWorldPtr) hDialog;
rect.right = rect.left + from_rect.right - from_rect.left;
rect.bottom = rect.top + from_rect.bottom - from_rect.top;
rect_draw_some_item(from_gworld,from_rect,to_gworld,rect,0,draw_dest);
}
void draw_preset_scen_pic_large(short which_g,Rect& rect){
short draw_dest = (w__gw == 1) ? 0 : 2;
GWorldPtr from_gworld = load_pict(900 + which_g);
//GWorldPtr to_gworld = (GWorldPtr) ((w__gw == 1) ? (GWorldPtr) (hDialog): from_gworld);
GWorldPtr to_gworld = (GWorldPtr) hDialog;
Rect from_rect = {0,0,64,64};
rect_draw_some_item(from_gworld,from_rect,to_gworld,rect,0,draw_dest);
DisposeGWorld(from_gworld);
}
void draw_help_pic(short which_g,Rect& rect){ // button help
short draw_dest = (w__gw == 1) ? 0 : 2;
GWorldPtr from_gworld = load_pict(1401);
//GWorldPtr to_gworld = (GWorldPtr) ((w__gw == 1) ? (GWorldPtr) (hDialog): from_gworld);
GWorldPtr to_gworld = (GWorldPtr) hDialog;
Rect from_rect = {0,0,125,320};
rect.right = rect.left + from_rect.right;
rect.bottom = rect.top + from_rect.bottom;
OffsetRect(&from_rect,0,125 * which_g);
rect_draw_some_item(from_gworld,from_rect,to_gworld,rect,0,draw_dest);
DisposeGWorld(from_gworld);
}
void draw_combat_ap_help_pic(Rect& rect){ // combat ap help
short draw_dest = (w__gw == 1) ? 0 : 2;
GWorldPtr from_gworld = load_pict(1402);
//GWorldPtr to_gworld = (GWorldPtr) ((w__gw == 1) ? (GWorldPtr) (hDialog): from_gworld);
GWorldPtr to_gworld = (GWorldPtr) hDialog;
Rect from_rect = {0,0,100,275};
rect.right = rect.left + from_rect.right;
rect.bottom = rect.top + from_rect.bottom;
rect_draw_some_item(from_gworld,from_rect,to_gworld,rect,0,draw_dest);
DisposeGWorld(from_gworld);
}
void draw_pc_stat_help_pic(Rect& rect){ // stat symbols help
short draw_dest = (w__gw == 1) ? 0 : 2;
GWorldPtr from_gworld = load_pict(1400);
//GWorldPtr to_gworld = (GWorldPtr) ((w__gw == 1) ? (GWorldPtr) (hDialog): from_gworld);
GWorldPtr to_gworld = (GWorldPtr) hDialog;
Rect from_rect = {0,0,94,386};
rect.right = rect.left + from_rect.right;
rect.bottom = rect.top + from_rect.bottom;
rect_draw_some_item(from_gworld,from_rect,to_gworld,rect,0,draw_dest);
DisposeGWorld(from_gworld);
}
void draw_preset_scen_pic(short which_g,Rect& rect){
short draw_dest = (w__gw == 1) ? 0 : 2;
GWorldPtr from_gworld = load_pict(851);
//GWorldPtr to_gworld = (GWorldPtr) ((w__gw == 1) ? (GWorldPtr) (hDialog): from_gworld);
GWorldPtr to_gworld = (GWorldPtr) hDialog;
Rect from_rect = {0,0,32,32};
OffsetRect(&from_rect,32 * (which_g % 5),32 * (which_g / 5));
rect.right = rect.left + 32;
rect.bottom = rect.top + 32;
rect_draw_some_item(from_gworld,from_rect,to_gworld,rect,0,draw_dest);
DisposeGWorld(from_gworld);
}
void draw_preset_field_pic(short which_g,Rect& rect){ // dialog
short draw_dest = (w__gw == 1) ? 0 : 2;
GWorldPtr from_gworld = *dlg_gworlds["fields"];
//GWorldPtr to_gworld = (GWorldPtr) ((w__gw == 1) ? (GWorldPtr) (hDialog): from_gworld);
GWorldPtr to_gworld = (GWorldPtr) hDialog;
Rect from_rect = calc_rect(which_g % 8, which_g / 8);
if (w__gw == 0)
PaintRect(&rect);
rect_draw_some_item(from_gworld,from_rect,to_gworld,rect,0,draw_dest);
}
void draw_custom_space_pic(short which_g,Rect& rect){
short draw_dest = (w__gw == 1) ? 0 : 2;
printf("Drawing graphic %i as a custom space pic.\n",which_g);
rect.right = rect.left + 28;
rect.bottom = rect.top + 32;
GWorldPtr from_gworld = *dlg_gworlds["custom"];
//GWorldPtr to_gworld = (GWorldPtr) ((w__gw == 1) ? (GWorldPtr) (hDialog): from_gworld);
GWorldPtr to_gworld = (GWorldPtr) hDialog;
Rect from_rect = get_custom_rect(which_g);
if ((w__gw == 0) && (fr == true))
PaintRect(&rect);
rect_draw_some_item(from_gworld,from_rect,to_gworld,rect,1,draw_dest);
}
void draw_custom_monst_wide_pic(short which_g,Rect& rect){
short draw_dest = (w__gw == 1) ? 0 : 2;
Rect small_monst_rect = {0,0,18,14};
rect.right = rect.left + 28;
rect.bottom = rect.top + 36;
if ((w__gw == 0) && (fr == true))
PaintRect(&rect);
GWorldPtr from_gworld = *dlg_gworlds["custom"];
//GWorldPtr to_gworld = (GWorldPtr) ((w__gw == 1) ? (GWorldPtr) (hDialog): from_gworld);
GWorldPtr to_gworld = (GWorldPtr) hDialog;
Rect from_rect = get_custom_rect(which_g);
OffsetRect(&small_monst_rect,rect.left,rect.top + 7);
rect_draw_some_item(from_gworld,from_rect,to_gworld,small_monst_rect,1,draw_dest);
from_rect = get_custom_rect(which_g+1);
OffsetRect(&small_monst_rect,14,0);
rect_draw_some_item(from_gworld,from_rect,to_gworld,small_monst_rect,1,draw_dest);
}
void draw_custom_monst_tall_pic(short which_g,Rect& rect){
short draw_dest = (w__gw == 1) ? 0 : 2;
Rect small_monst_rect = {0,0,18,14};
rect.right = rect.left + 28;
rect.bottom = rect.top + 36;
if ((w__gw == 0) && (fr == true))
PaintRect(&rect);
GWorldPtr from_gworld = *dlg_gworlds["custom"];
//GWorldPtr to_gworld = (GWorldPtr) ((w__gw == 1) ? (GWorldPtr) (hDialog): from_gworld);
GWorldPtr to_gworld = (GWorldPtr) hDialog;
Rect from_rect = get_custom_rect(which_g);
OffsetRect(&small_monst_rect,rect.left + 7,rect.top);
rect_draw_some_item(from_gworld,from_rect,to_gworld,small_monst_rect,1,draw_dest);
OffsetRect(&small_monst_rect,0,18);
from_rect = get_custom_rect(which_g+1);
rect_draw_some_item(from_gworld,from_rect,to_gworld,small_monst_rect,1,draw_dest);
}
void draw_custom_monst_large_pic(short which_g,Rect& rect){
short draw_dest = (w__gw == 1) ? 0 : 2;
Rect small_monst_rect = {0,0,18,14};
rect.right = rect.left + 28;
rect.bottom = rect.top + 36;
if ((w__gw == 0) && (fr == true))
PaintRect(&rect);
GWorldPtr from_gworld = *dlg_gworlds["custom"];
//GWorldPtr to_gworld = (GWorldPtr) ((w__gw == 1) ? (GWorldPtr) (hDialog): from_gworld);
GWorldPtr to_gworld = (GWorldPtr) hDialog;
Rect from_rect = get_custom_rect(which_g);
OffsetRect(&small_monst_rect,rect.left,rect.top);
rect_draw_some_item(from_gworld,from_rect,to_gworld,small_monst_rect,1,draw_dest);
OffsetRect(&small_monst_rect,14,0);
from_rect = get_custom_rect(which_g+1);
rect_draw_some_item(from_gworld,from_rect,to_gworld,small_monst_rect,1,draw_dest);
OffsetRect(&small_monst_rect,-14,18);
from_rect = get_custom_rect(which_g+2);
rect_draw_some_item(from_gworld,from_rect,to_gworld,small_monst_rect,1,draw_dest);
OffsetRect(&small_monst_rect,14,0);
from_rect = get_custom_rect(which_g+3);
rect_draw_some_item(from_gworld,from_rect,to_gworld,small_monst_rect,1,draw_dest);
}
void draw_custom_dlg_pic_split(short which_g,Rect& rect){ // dialog, split
short draw_dest = (w__gw == 1) ? 0 : 2;
GWorldPtr from_gworld = *dlg_gworlds["custom"];
//GWorldPtr to_gworld = (GWorldPtr) ((w__gw == 1) ? (GWorldPtr) (hDialog): from_gworld);
GWorldPtr to_gworld = (GWorldPtr) hDialog;
Rect from_rect = get_custom_rect(which_g);
Rect to_rect = rect;
to_rect.right = to_rect.left + 18;
to_rect.bottom = to_rect.top + 36;
from_rect.right = from_rect.left + 18;
from_rect.bottom = from_rect.top + 36;
rect_draw_some_item(from_gworld,from_rect,to_gworld,to_rect,1,draw_dest);
from_rect = get_custom_rect(which_g + 1);
OffsetRect(&to_rect,18,0);
from_rect.right = from_rect.left + 18;
from_rect.bottom = from_rect.top + 36;
rect_draw_some_item(from_gworld,from_rect,to_gworld,to_rect,1,draw_dest);
}
void draw_custom_talk_pic_split(short which_g,Rect& rect){ // facial graphic, split
short draw_dest = (w__gw == 1) ? 0 : 2;
GWorldPtr from_gworld = *dlg_gworlds["custom"];
//GWorldPtr to_gworld = (GWorldPtr) ((w__gw == 1) ? (GWorldPtr) (hDialog): from_gworld);
GWorldPtr to_gworld = (GWorldPtr) hDialog;
Rect from_rect = get_custom_rect(which_g);
Rect to_rect = rect;
to_rect.right = to_rect.left + 16;
to_rect.bottom = to_rect.top + 32;
from_rect.right = from_rect.left + 16;
from_rect.bottom = from_rect.top + 32;
rect_draw_some_item(from_gworld,from_rect,to_gworld,to_rect,1,draw_dest);
from_rect = get_custom_rect(which_g + 1);
OffsetRect(&to_rect,16,0);
from_rect.right = from_rect.left + 16;
from_rect.bottom = from_rect.top + 32;
rect_draw_some_item(from_gworld,from_rect,to_gworld,to_rect,1,draw_dest);
}
void draw_preset_dlg_pic_large(short which_g,Rect& rect){
short draw_dest = (w__gw == 1) ? 0 : 2;
GWorldPtr from_gworld = *dlg_gworlds["dlog"];
//GWorldPtr to_gworld = (GWorldPtr) ((w__gw == 1) ? (GWorldPtr) (hDialog): from_gworld);
GWorldPtr to_gworld = (GWorldPtr) hDialog;
Rect from_rect = {0,0,72,72};
OffsetRect(&from_rect,36 * (which_g % 4),36 * (which_g / 4));
rect_draw_some_item(from_gworld,from_rect,to_gworld,rect,0,draw_dest);
}