Descent3/editor/levelkeypad.cpp

1252 lines
38 KiB
C++
Raw Permalink Normal View History

/*
2024-06-15 18:12:48 +00:00
* Descent 3
* Copyright (C) 2024 Parallax Software
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
// levelkeypad.cpp : implementation file
//
#include "stdafx.h"
#include "editor.h"
#include "levelkeypad.h"
#include "physics.h"
#include "levelgoal.h"
#include "boa.h"
#include "terrain.h"
#include "aiambient.h"
#include "objinfo.h"
#include "game.h"
2024-09-25 20:47:03 +00:00
#include "pserror.h"
#include "soundload.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// levelkeypad dialog
2024-06-15 18:12:48 +00:00
levelkeypad::levelkeypad(CWnd *pParent /*=NULL*/) : CKeypadDialog(levelkeypad::IDD, pParent) {
//{{AFX_DATA_INIT(levelkeypad)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
2024-06-15 18:12:48 +00:00
void levelkeypad::DoDataExchange(CDataExchange *pDX) {
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(levelkeypad)
DDX_Control(pDX, IDC_LEVELGOALTRIGGER_COMBO, m_trigger_combo);
DDX_Control(pDX, IDC_LEVELGOALOBJECT_COMBO, m_object_combo);
DDX_Control(pDX, IDC_LEVELGOAL_ROOM_COMBO, m_room_combo);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(levelkeypad, CDialog)
2024-06-15 18:12:48 +00:00
//{{AFX_MSG_MAP(levelkeypad)
ON_WM_PAINT()
ON_EN_KILLFOCUS(IDC_LEVEL_GRAVITY_EDIT, OnKillfocusLevelGravityEdit)
ON_BN_CLICKED(IDC_LEVEL_PREV_GOAL_BUTTON, OnLevelPrevGoalButton)
ON_BN_CLICKED(IDC_LEVEL_NEXT_GOAL_BUTTON, OnLevelNextGoalButton)
ON_BN_CLICKED(IDC_LEVEL_NEW_GOAL_BUTTON, OnLevelNewGoalButton)
ON_EN_KILLFOCUS(IDC_LEVEL_GOAL_NAME_EDIT, OnKillfocusLevelGoalNameEdit)
ON_EN_KILLFOCUS(IDC_LEVEL_GOAL_LOC_NAME_EDIT, OnKillfocusLevelGoalLocNameEdit)
ON_EN_KILLFOCUS(IDC_LEVEL_GOAL_DESC_EDIT, OnKillfocusLevelGoalDescEdit)
ON_BN_CLICKED(IDC_LEVEL_GOAL_NEW_ITEM_BUTTON, OnLevelGoalNewItemButton)
ON_BN_CLICKED(IDC_LEVEL_GOAL_NEXT_ITEM_BUTTON, OnLevelGoalNextItemButton)
ON_BN_CLICKED(IDC_LEVEL_GOAL_PREV_ITEM_BUTTON, OnLevelGoalPrevItemButton)
ON_BN_CLICKED(IDC_LEVEL_GOAL_DELETE_ITEM_BUTTON, OnLevelGoalDeleteItemButton)
ON_BN_CLICKED(IDC_LEVEL_GOAL_ROOM_ITEM_RADIO, OnLevelGoalRoomItemRadio)
ON_BN_CLICKED(IDC_LEVEL_GOAL_CELL_ITEM_RADIO, OnLevelGoalCellItemRadio)
ON_BN_CLICKED(IDC_LEVEL_GOAL_OBJ_ITEM_RADIO, OnLevelGoalObjItemRadio)
ON_BN_CLICKED(IDC_GOAL_AUTO_COMPLETE_CHECK, OnGoalAutoCompleteCheck)
ON_BN_CLICKED(IDC_LEVEL_GOAL_SEC_GOAL_CHECK, OnLevelGoalSecGoalCheck)
ON_BN_CLICKED(IDC_LEVEL_GOAL_ENABLED_CHECK, OnLevelGoalEnabledCheck)
ON_BN_CLICKED(IDC_LEVEL_GOAL_COMPLETED_CHECK, OnLevelGoalCompletedCheck)
ON_BN_CLICKED(IDC_LEVEL_GOAL_TLG_CHECK, OnLevelGoalTlgCheck)
ON_BN_CLICKED(IDC_LEVEL_GOAL_GDKL_CHECK, OnLevelGoalGdklCheck)
ON_BN_CLICKED(IDC_LEVEL_GOAL_NLB_CHECK, OnLevelGoalNlbCheck)
ON_BN_CLICKED(IDC_LEVEL_GOAL_PASTE_OBJREF_ITEM_BUTTON, OnLevelGoalPasteObjrefItemButton)
ON_BN_CLICKED(IDC_LEVEL_GOAL_GOTO_ITEM_BUTTON, OnLevelGoalGotoItemButton)
ON_BN_CLICKED(IDC_LEVEL_DELETE_GOAL_BUTTON, OnLevelDeleteGoalButton)
ON_EN_KILLFOCUS(IDC_LEVEL_GOAL_ITEM_EDIT, OnKillfocusLevelGoalItemEdit)
ON_EN_KILLFOCUS(IDC_LEVEL_GOAL_PRIORITY_EDIT1, OnKillfocusLevelGoalPriorityEdit1)
ON_BN_CLICKED(IDC_LEVEL_GOAL_END_LEVEL_CHECK, OnLevelGoalEndLevelCheck)
ON_WM_VSCROLL()
ON_WM_HSCROLL()
ON_WM_SIZE()
ON_CBN_SELENDOK(IDC_AMB_TYPE1, OnSelendokAmbType1)
ON_CBN_SELENDOK(IDC_AMB_TYPE2, OnSelendokAmbType2)
ON_CBN_SELENDOK(IDC_AMB_TYPE3, OnSelendokAmbType3)
ON_CBN_SELENDOK(IDC_AMB_TYPE4, OnSelendokAmbType4)
ON_CBN_SELENDOK(IDC_AMB_TYPE5, OnSelendokAmbType5)
ON_CBN_SELENDOK(IDC_AMB_TYPE6, OnSelendokAmbType6)
ON_EN_KILLFOCUS(IDC_AMB_MAX1, OnKillfocusAmbMax1)
ON_EN_KILLFOCUS(IDC_AMB_MAX2, OnKillfocusAmbMax2)
ON_EN_KILLFOCUS(IDC_AMB_MAX3, OnKillfocusAmbMax3)
ON_EN_KILLFOCUS(IDC_AMB_MAX4, OnKillfocusAmbMax4)
ON_EN_KILLFOCUS(IDC_AMB_MAX5, OnKillfocusAmbMax5)
ON_EN_KILLFOCUS(IDC_AMB_MAX6, OnKillfocusAmbMax6)
ON_EN_KILLFOCUS(IDC_AMB_MIN1, OnKillfocusAmbMin1)
ON_EN_KILLFOCUS(IDC_AMB_MIN2, OnKillfocusAmbMin2)
ON_EN_KILLFOCUS(IDC_AMB_MIN3, OnKillfocusAmbMin3)
ON_EN_KILLFOCUS(IDC_AMB_MIN4, OnKillfocusAmbMin4)
ON_EN_KILLFOCUS(IDC_AMB_MIN5, OnKillfocusAmbMin5)
ON_EN_KILLFOCUS(IDC_AMB_MIN6, OnKillfocusAmbMin6)
ON_EN_KILLFOCUS(IDC_AMB_N_GROUPS1, OnKillfocusAmbNGroups1)
ON_EN_KILLFOCUS(IDC_AMB_N_GROUPS2, OnKillfocusAmbNGroups2)
ON_EN_KILLFOCUS(IDC_AMB_N_GROUPS3, OnKillfocusAmbNGroups3)
ON_EN_KILLFOCUS(IDC_AMB_N_GROUPS4, OnKillfocusAmbNGroups4)
ON_EN_KILLFOCUS(IDC_AMB_N_GROUPS5, OnKillfocusAmbNGroups5)
ON_EN_KILLFOCUS(IDC_AMB_N_GROUPS6, OnKillfocusAmbNGroups6)
ON_BN_CLICKED(IDC_AMB_OUTSIDE1, OnAmbOutside1)
ON_BN_CLICKED(IDC_AMB_OUTSIDE2, OnAmbOutside2)
ON_BN_CLICKED(IDC_AMB_OUTSIDE3, OnAmbOutside3)
ON_BN_CLICKED(IDC_AMB_OUTSIDE4, OnAmbOutside4)
ON_BN_CLICKED(IDC_AMB_OUTSIDE5, OnAmbOutside5)
ON_BN_CLICKED(IDC_AMB_OUTSIDE6, OnAmbOutside6)
ON_EN_KILLFOCUS(IDC_LEVEL_GOAL_COMPLETION_EDIT, OnKillfocusLevelGoalCompletionEdit)
ON_BN_CLICKED(IDC_LG_ACTIVATE_RADIO, OnLgActivateRadio)
ON_BN_CLICKED(IDC_LG_ENTER_RADIO, OnLgEnterRadio)
ON_BN_CLICKED(IDC_LG_DESTROYED_RADIO, OnLgDestroyedRadio)
ON_BN_CLICKED(IDC_LG_PPW_COLLIDE_RADIO, OnLgPpwCollideRadio)
ON_BN_CLICKED(IDC_LG_LC_RADIO, OnLgLcRadio)
ON_BN_CLICKED(IDC_LG_DALLAS_RADIO, OnLgDallasRadio)
ON_BN_CLICKED(IDC_TRIGGER_RADIO, OnTriggerRadio)
ON_BN_CLICKED(IDC_LEVEL_GOAL_MINE_RADIO, OnLevelGoalMineRadio)
ON_CBN_SELENDOK(IDC_LEVELGOAL_ROOM_COMBO, OnSelendokLevelgoalRoomCombo)
ON_CBN_SELENDOK(IDC_LEVELGOALOBJECT_COMBO, OnSelendokLevelgoalobjectCombo)
ON_CBN_SELENDOK(IDC_LEVELGOALTRIGGER_COMBO, OnSelendokLevelgoaltriggerCombo)
ON_EN_KILLFOCUS(IDC_EDIT57, OnKillfocusEdit57)
ON_BN_CLICKED(IDC_LEVEL_CEILING_EVERYWHERE, OnLevelCeilingEverywhere)
ON_EN_KILLFOCUS(IDC_LEVEL_CEILING_EDIT, OnKillfocusLevelCeilingEdit)
ON_CBN_SELENDOK(IDC_FFOS_COMBO, OnSelendokFfosCombo)
ON_CBN_SELENDOK(IDC_BGOS_COMBO, OnSelendokBgosCombo)
ON_EN_KILLFOCUS(IDC_FFT1_EDIT, OnKillfocusFft1Edit)
ON_EN_KILLFOCUS(IDC_FFT2_EDIT, OnKillfocusFft2Edit)
ON_CBN_SELENDOK(IDC_FFT1_COMBO, OnSelendokFft1Combo)
ON_CBN_SELENDOK(IDC_FFT2_COMBO, OnSelendokFft2Combo)
ON_EN_KILLFOCUS(IDC_FIXED_FFT1_EDIT, OnKillfocusFixedFft1Edit)
ON_CBN_SETFOCUS(IDC_FFT1_COMBO, OnSetfocusFft1Combo)
ON_CBN_SETFOCUS(IDC_FFT2_COMBO, OnSetfocusFft2Combo)
ON_BN_CLICKED(IDC_LEVEL_PIW, OnLevelPiw)
ON_EN_KILLFOCUS(IDC_FFT3_EDIT, OnKillfocusFft3Edit)
ON_CBN_SELENDOK(IDC_FFT3_COMBO, OnSelendokFft3Combo)
ON_CBN_SETFOCUS(IDC_FFT3_COMBO, OnSetfocusFft3Combo)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// levelkeypad message handlers
2024-06-15 18:12:48 +00:00
void levelkeypad::OnPaint() {
CPaintDC dc(this); // device context for painting
2024-06-15 18:12:48 +00:00
if (!m_Active)
return;
2024-06-15 18:12:48 +00:00
UpdateDialog();
}
2024-06-15 18:12:48 +00:00
bool levelkeypad::ValidateCurrentGoal() {
int num_goals = Level_goals.GetNumGoals();
2024-06-15 18:12:48 +00:00
if (num_goals > 0) {
if (m_current_goal < 0 || m_current_goal >= num_goals)
m_current_goal = 0;
2024-06-15 18:12:48 +00:00
return true;
} else {
m_current_goal = -1;
return false;
}
}
2024-06-15 18:12:48 +00:00
bool levelkeypad::ValidateCurrentItem() {
if (ValidateCurrentGoal()) {
int num_items = Level_goals.GoalGetNumItems(m_current_goal);
if (num_items > 0) {
if (m_current_item < 0 || m_current_item >= num_items)
m_current_item = 0;
2024-06-15 18:12:48 +00:00
return true;
}
}
2024-06-15 18:12:48 +00:00
m_current_item = -1;
return false;
}
2024-06-15 18:12:48 +00:00
void make_goal_dialog_text(char *big_text_message) {
int i;
int j;
big_text_message[0] = '\0';
int num_goals[2 * MAX_GOAL_LISTS];
int goals[2 * MAX_GOAL_LISTS][MAX_LEVEL_GOALS];
int p[2 * MAX_GOAL_LISTS][MAX_LEVEL_GOALS];
for (i = 0; i < 2 * MAX_GOAL_LISTS; i++) {
num_goals[i] = 0;
}
int n = Level_goals.GetNumGoals();
for (i = 0; i < n; i++) {
int priority;
char list;
int flags;
Level_goals.GoalPriority(i, LO_GET_SPECIFIED, &priority);
Level_goals.GoalGoalList(i, LO_GET_SPECIFIED, &list);
Level_goals.GoalStatus(i, LO_GET_SPECIFIED, &flags, true);
if (flags & LGF_SECONDARY_GOAL) {
list += MAX_GOAL_LISTS;
}
int insert = num_goals[list];
for (j = 0; j < num_goals[list]; j++) {
if (priority < p[list][j]) {
insert = j;
break;
}
}
for (j = num_goals[list]; j > insert; j--) {
goals[list][j] = goals[list][j - 1];
p[list][j] = p[list][j - 1];
}
goals[list][insert] = i;
p[list][insert] = priority;
num_goals[list]++;
}
for (i = 0; i < 2 * MAX_GOAL_LISTS; i++) {
strcat(big_text_message, "\r\n---------------------\r\n");
if (i < MAX_GOAL_LISTS) {
char cur[50];
sprintf(cur, "Primary List %d\r\n", i);
strcat(big_text_message, cur);
} else {
char cur[50];
sprintf(cur, "Secondary List %d\r\n", i - MAX_GOAL_LISTS);
strcat(big_text_message, cur);
}
strcat(big_text_message, "---------------------\r\n");
for (j = 0; j < num_goals[i]; j++) {
char name[41];
char p_text[5];
strcat(big_text_message, " ");
Level_goals.GoalGetName(goals[i][j], name, 40);
int flags;
Level_goals.GoalStatus(goals[i][j], LO_GET_SPECIFIED, &flags, true);
if (flags & LGF_TELCOM_LISTS) {
strcat(big_text_message, "(Obj) ");
}
strcat(big_text_message, name);
sprintf(p_text, " (%d)", p[i][j]);
strcat(big_text_message, p_text);
strcat(big_text_message, "\r\n");
}
}
}
// call this to update all the text entries in the keypad.
2024-06-15 18:12:48 +00:00
void levelkeypad::UpdateDialog() {
CButton *bbox;
int flags;
int lgflags;
int priority;
char g_list;
char name[256];
char iname[256];
char desc[2560];
char message[2560];
int num_goals;
int num_items = 0;
int i;
char big_text_message[MAX_LEVEL_GOALS * 5 * 40];
char item_type;
int item_handle;
SendDlgItemMessage(IDC_BGOS_COMBO, CB_RESETCONTENT, 0, 0);
for (i = 0; i < MAX_SOUNDS; i++) {
if (Sounds[i].used)
SendDlgItemMessage(IDC_BGOS_COMBO, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)Sounds[i].name);
}
if (sound_override_glass_breaking != -1)
SendDlgItemMessage(IDC_BGOS_COMBO, CB_SELECTSTRING, 0, (LPARAM)(LPCTSTR)Sounds[sound_override_glass_breaking].name);
else
SendDlgItemMessage(IDC_BGOS_COMBO, CB_SELECTSTRING, 0, (LPARAM)(LPCTSTR) "Default");
if (force_field_bounce_texture[0] != -1)
SendDlgItemMessage(IDC_FFT1_COMBO, CB_SELECTSTRING, 0,
(LPARAM)(LPCTSTR)GameTextures[force_field_bounce_texture[0]].name);
else
SendDlgItemMessage(IDC_FFT1_COMBO, CB_SELECTSTRING, 0, (LPARAM)(LPCTSTR) "Not Assigned");
if (force_field_bounce_texture[1] != -1)
SendDlgItemMessage(IDC_FFT2_COMBO, CB_SELECTSTRING, 0,
(LPARAM)(LPCTSTR)GameTextures[force_field_bounce_texture[1]].name);
else
SendDlgItemMessage(IDC_FFT2_COMBO, CB_SELECTSTRING, 0, (LPARAM)(LPCTSTR) "Not Assigned");
if (force_field_bounce_texture[2] != -1)
SendDlgItemMessage(IDC_FFT3_COMBO, CB_SELECTSTRING, 0,
(LPARAM)(LPCTSTR)GameTextures[force_field_bounce_texture[2]].name);
else
SendDlgItemMessage(IDC_FFT3_COMBO, CB_SELECTSTRING, 0, (LPARAM)(LPCTSTR) "Not Assigned");
SendDlgItemMessage(IDC_FFOS_COMBO, CB_RESETCONTENT, 0, 0);
for (i = 0; i < MAX_SOUNDS; i++) {
if (Sounds[i].used)
SendDlgItemMessage(IDC_FFOS_COMBO, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)Sounds[i].name);
}
if (sound_override_force_field != -1)
SendDlgItemMessage(IDC_FFOS_COMBO, CB_SELECTSTRING, 0, (LPARAM)(LPCTSTR)Sounds[sound_override_force_field].name);
else
SendDlgItemMessage(IDC_FFOS_COMBO, CB_SELECTSTRING, 0, (LPARAM)(LPCTSTR) "Default");
int idc_amb_type[6] = {IDC_AMB_TYPE1, IDC_AMB_TYPE2, IDC_AMB_TYPE3, IDC_AMB_TYPE4, IDC_AMB_TYPE5, IDC_AMB_TYPE6};
int idc_chars[6][4] = {
{IDC_AMB_N_GROUPS1, IDC_AMB_MAX1, IDC_AMB_MIN1}, {IDC_AMB_N_GROUPS2, IDC_AMB_MAX2, IDC_AMB_MIN2},
{IDC_AMB_N_GROUPS3, IDC_AMB_MAX3, IDC_AMB_MIN3}, {IDC_AMB_N_GROUPS4, IDC_AMB_MAX4, IDC_AMB_MIN4},
{IDC_AMB_N_GROUPS5, IDC_AMB_MAX5, IDC_AMB_MIN5}, {IDC_AMB_N_GROUPS6, IDC_AMB_MAX6, IDC_AMB_MIN6}};
int idc_outside[6] = {IDC_AMB_OUTSIDE1, IDC_AMB_OUTSIDE2, IDC_AMB_OUTSIDE3,
IDC_AMB_OUTSIDE4, IDC_AMB_OUTSIDE5, IDC_AMB_OUTSIDE6};
for (i = 0; i < 6; i++) {
int j;
uint8_t x;
for (j = 1; j <= 3; j++) {
a_life.GetALValue(i, j, &x);
PrintToDlgItem(this, idc_chars[i][j - 1], "%d", (int)x);
}
int n_id = idc_outside[i];
a_life.GetALValue(i, ALI_FLAGS, &x);
bbox = (CButton *)GetDlgItem(n_id);
bbox->SetCheck(x != 0);
}
for (i = 0; i < 6; i++) {
int n_id = idc_amb_type[i];
int j;
int x;
SendDlgItemMessage(n_id, CB_RESETCONTENT, 0, 0);
SendDlgItemMessage(n_id, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR) "None");
for (j = 0; j < MAX_OBJECT_IDS; j++) {
if (Object_info[j].type != OBJ_NONE) {
SendDlgItemMessage(n_id, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)Object_info[j].name);
}
}
a_life.GetALValue(i, ALI_TYPE, &x);
if (x >= 0 && x < MAX_OBJECT_IDS && Object_info[x].type != OBJ_NONE)
SendDlgItemMessage(n_id, CB_SELECTSTRING, 0, (LPARAM)(LPCTSTR)Object_info[x].name);
else
SendDlgItemMessage(n_id, CB_SELECTSTRING, 0, (LPARAM)(LPCTSTR) "None");
}
Level_goals.LGStatus(LO_GET_SPECIFIED, &lgflags);
if (ValidateCurrentGoal()) {
num_goals = Level_goals.GetNumGoals();
num_items = Level_goals.GoalGetNumItems(m_current_goal);
Level_goals.GoalStatus(m_current_goal, LO_GET_SPECIFIED, &flags, true);
Level_goals.GoalPriority(m_current_goal, LO_GET_SPECIFIED, &priority);
Level_goals.GoalGoalList(m_current_goal, LO_GET_SPECIFIED, &g_list);
Level_goals.GoalGetName(m_current_goal, name, sizeof(name));
Level_goals.GoalGetItemName(m_current_goal, iname, sizeof(iname));
Level_goals.GoalGetDesc(m_current_goal, desc, sizeof(desc));
Level_goals.GoalGetCompletionMessage(m_current_goal, message, sizeof(message));
make_goal_dialog_text(big_text_message);
} else {
num_goals = 0;
num_items = 0;
flags = 0;
priority = 0;
g_list = 0;
strcpy(name, "No goals");
strcpy(iname, "No goals");
strcpy(desc, "No goals");
strcpy(message, "No goals");
strcpy(big_text_message, "No goals");
}
if (ValidateCurrentItem()) {
Level_goals.GoalItemInfo(m_current_goal, m_current_item, LO_GET_SPECIFIED, &item_type, &item_handle, NULL);
} else {
item_type = LIT_OBJECT;
item_handle = OBJECT_HANDLE_NONE;
}
PrintToDlgItem(this, IDC_FIXED_FFT1_EDIT, "%f", force_field_bounce_multiplier[0]);
PrintToDlgItem(this, IDC_FFT2_EDIT, "%f", force_field_bounce_multiplier[1]);
PrintToDlgItem(this, IDC_FFT3_EDIT, "%f", force_field_bounce_multiplier[2]);
PrintToDlgItem(this, IDC_LEVEL_GRAVITY_EDIT, "%f", -Gravity_strength);
PrintToDlgItem(this, IDC_LEVEL_GOAL_NUM_GOALS_STATIC, "Number of goals: %d", num_goals);
PrintToDlgItem(this, IDC_LEVEL_GOAL_CUR_GOAL_STATIC, "Current goal: %d", m_current_goal + 1);
PrintToDlgItem(this, IDC_LEVEL_GOAL_NUM_ITEMS_STATIC, "Number of items: %d", num_items);
PrintToDlgItem(this, IDC_LEVEL_GOAL_CUR_ITEM_STATIC, "Current item: %d", m_current_item + 1);
PrintToDlgItem(this, IDC_GOAL_TABLE_EDIT, big_text_message);
PrintToDlgItem(this, IDC_LEVEL_CEILING_EDIT, "%f", Ceiling_height);
// IDC_LEVEL_PREV_GOAL_BUTTON
// IDC_LEVEL_NEXT_GOAL_BUTTON
// IDC_LEVEL_NEW_GOAL_BUTTON
PrintToDlgItem(this, IDC_LEVEL_GOAL_NAME_EDIT, "%s", name);
PrintToDlgItem(this, IDC_LEVEL_GOAL_LOC_NAME_EDIT, "%s", iname);
PrintToDlgItem(this, IDC_LEVEL_GOAL_DESC_EDIT, "%s", desc);
PrintToDlgItem(this, IDC_LEVEL_GOAL_COMPLETION_EDIT, "%s", message);
// IDC_LEVEL_GOAL_NEW_ITEM_BUTTON
// IDC_LEVEL_GOAL_NEXT_ITEM_BUTTON
// IDC_LEVEL_GOAL_PREV_ITEM_BUTTON
// IDC_LEVEL_GOAL_DELETE_ITEM_BUTTON
bbox = (CButton *)GetDlgItem(IDC_LEVEL_GOAL_ROOM_ITEM_RADIO);
bbox->SetCheck(item_type == LIT_INTERNAL_ROOM);
bbox = (CButton *)GetDlgItem(IDC_LEVEL_GOAL_CELL_ITEM_RADIO);
bbox->SetCheck(item_type == LIT_TERRAIN_CELL);
bbox = (CButton *)GetDlgItem(IDC_LEVEL_GOAL_OBJ_ITEM_RADIO);
bbox->SetCheck(item_type == LIT_OBJECT);
bbox = (CButton *)GetDlgItem(IDC_TRIGGER_RADIO);
bbox->SetCheck(item_type == LIT_TRIGGER);
// bbox = (CButton *)GetDlgItem(IDC_GOAL_AUTO_COMPLETE_CHECK);
// bbox->SetCheck(flags & LGF_AUTO_COMPLETION);
bbox = (CButton *)GetDlgItem(IDC_LEVEL_GOAL_SEC_GOAL_CHECK);
bbox->SetCheck(flags & LGF_SECONDARY_GOAL);
bbox = (CButton *)GetDlgItem(IDC_LEVEL_GOAL_ENABLED_CHECK);
bbox->SetCheck(flags & LGF_ENABLED);
bbox = (CButton *)GetDlgItem(IDC_LEVEL_GOAL_COMPLETED_CHECK);
bbox->SetCheck(flags & LGF_COMPLETED);
bbox = (CButton *)GetDlgItem(IDC_LEVEL_GOAL_TLG_CHECK);
bbox->SetCheck(flags & LGF_TELCOM_LISTS);
bbox = (CButton *)GetDlgItem(IDC_LEVEL_GOAL_GDKL_CHECK);
bbox->SetCheck(flags & LGF_GB_DOESNT_KNOW_LOC);
bbox = (CButton *)GetDlgItem(IDC_LEVEL_GOAL_NLB_CHECK);
bbox->SetCheck(flags & LGF_NOT_LOC_BASED);
// bbox = (CButton *)GetDlgItem(IDC_LEVEL_GOAL_END_LEVEL_CHECK);
// bbox->SetCheck(lgflags & LGF_AUTO_END_LEVEL);
bbox = (CButton *)GetDlgItem(IDC_LG_ACTIVATE_RADIO);
bbox->SetCheck((flags & LGF_COMP_MASK) == LGF_COMP_ACTIVATE);
bbox = (CButton *)GetDlgItem(IDC_LG_ENTER_RADIO);
bbox->SetCheck((flags & LGF_COMP_MASK) == LGF_COMP_ENTER);
bbox = (CButton *)GetDlgItem(IDC_LEVEL_CEILING_EVERYWHERE);
bbox->SetCheck(FVI_always_check_ceiling);
bbox = (CButton *)GetDlgItem(IDC_LEVEL_PIW);
bbox->SetCheck(Level_powerups_ignore_wind);
bbox = (CButton *)GetDlgItem(IDC_LG_DESTROYED_RADIO);
bbox->SetCheck((flags & LGF_COMP_MASK) == LGF_COMP_DESTROY);
bbox = (CButton *)GetDlgItem(IDC_LG_PPW_COLLIDE_RADIO);
bbox->SetCheck((flags & LGF_COMP_MASK) == LGF_COMP_PLAYER_WEAPON);
bbox = (CButton *)GetDlgItem(IDC_LG_LC_RADIO);
bbox->SetCheck((flags & LGF_COMP_MASK) == LGF_COMP_PLAYER);
bbox = (CButton *)GetDlgItem(IDC_LG_DALLAS_RADIO);
bbox->SetCheck((flags & LGF_COMP_MASK) == LGF_COMP_DALLAS);
if (item_type == LIT_OBJECT)
m_object_combo.SetSelected(item_handle);
else
m_object_combo.SetSelected(-1);
if (item_type == LIT_INTERNAL_ROOM)
m_room_combo.SetSelected(item_handle);
else
m_room_combo.SetSelected(-1);
if (item_type == LIT_TRIGGER)
m_trigger_combo.SetSelected(item_handle);
else
m_trigger_combo.SetSelected(-1);
// IDC_LEVEL_GOAL_PASTE_OBJREF_ITEM_BUTTON
// IDC_LEVEL_GOAL_GOTO_ITEM_BUTTON
// IDC_LEVEL_DELETE_GOAL_BUTTON
// PrintToDlgItem(this, IDC_LEVEL_GOAL_ITEM_EDIT, "%d", item_handle);
PrintToDlgItem(this, IDC_LEVEL_GOAL_PRIORITY_EDIT1, "%d", priority);
PrintToDlgItem(this, IDC_EDIT57, "%d", g_list);
}
void levelkeypad::UpdateKeypad(int mask) {
if (mask & KUF_LEVEL_LOADED) {
m_trigger_combo.Init(-1);
m_object_combo.Init(OBJ_NONE, OBJECT_HANDLE_NONE);
m_room_combo.Init(-1);
2024-06-15 18:12:48 +00:00
m_current_goal = m_current_item = 0;
2024-06-15 18:12:48 +00:00
UpdateDialog();
}
}
2024-06-15 18:12:48 +00:00
void levelkeypad::OnKillfocusLevelGravityEdit() {
char str[21];
((CEdit *)GetDlgItem(IDC_LEVEL_GRAVITY_EDIT))->GetWindowText(str, 20);
2024-06-15 18:12:48 +00:00
Gravity_strength = -atof(str);
2024-06-15 18:12:48 +00:00
UpdateDialog();
}
2024-06-15 18:12:48 +00:00
BOOL levelkeypad::OnInitDialog() {
CDialog::OnInitDialog();
m_room_combo.Init(-1);
m_trigger_combo.Init(-1);
m_object_combo.Init(OBJ_NONE, OBJECT_HANDLE_NONE);
UpdateDialog();
int i;
SendDlgItemMessage(IDC_FFT1_COMBO, CB_RESETCONTENT, 0, 0);
SendDlgItemMessage(IDC_FFT2_COMBO, CB_RESETCONTENT, 0, 0);
SendDlgItemMessage(IDC_FFT3_COMBO, CB_RESETCONTENT, 0, 0);
2024-06-15 18:12:48 +00:00
SendDlgItemMessage(IDC_FFT1_COMBO, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR) "Not Assigned");
SendDlgItemMessage(IDC_FFT2_COMBO, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR) "Not Assigned");
SendDlgItemMessage(IDC_FFT3_COMBO, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR) "Not Assigned");
2024-06-15 18:12:48 +00:00
for (i = 0; i < MAX_TEXTURES; i++) {
if (GameTextures[i].used) {
SendDlgItemMessage(IDC_FFT1_COMBO, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)GameTextures[i].name);
SendDlgItemMessage(IDC_FFT2_COMBO, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)GameTextures[i].name);
SendDlgItemMessage(IDC_FFT3_COMBO, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)GameTextures[i].name);
}
}
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
2024-06-15 18:12:48 +00:00
void levelkeypad::OnLevelPrevGoalButton() {
int num_goals = Level_goals.GetNumGoals();
2024-06-15 18:12:48 +00:00
if (m_current_goal > 0) {
m_current_goal--;
} else {
m_current_goal = num_goals - 1;
}
m_current_item = 0;
2024-06-15 18:12:48 +00:00
UpdateDialog();
}
2024-06-15 18:12:48 +00:00
void levelkeypad::OnLevelNextGoalButton() {
int num_goals = Level_goals.GetNumGoals();
2024-06-15 18:12:48 +00:00
if (m_current_goal < num_goals - 1) {
m_current_goal++;
} else {
m_current_goal = 0;
}
m_current_item = 0;
2024-06-15 18:12:48 +00:00
UpdateDialog();
}
2024-06-15 18:12:48 +00:00
void levelkeypad::OnLevelNewGoalButton() {
m_current_goal = Level_goals.AddGoal(true);
m_current_item = 0;
UpdateDialog();
2024-06-15 18:12:48 +00:00
OnLevelGoalNewItemButton();
}
2024-06-15 18:12:48 +00:00
void levelkeypad::OnLevelDeleteGoalButton() {
Level_goals.DeleteGoal(m_current_goal);
m_current_goal = 0;
m_current_item = 0;
2024-06-15 18:12:48 +00:00
UpdateDialog();
}
2024-06-15 18:12:48 +00:00
void levelkeypad::OnKillfocusLevelGoalNameEdit() {
char str[256];
((CEdit *)GetDlgItem(IDC_LEVEL_GOAL_NAME_EDIT))->GetWindowText(str, 255);
Level_goals.GoalSetName(m_current_goal, str);
2024-06-15 18:12:48 +00:00
UpdateDialog();
}
2024-06-15 18:12:48 +00:00
void levelkeypad::OnKillfocusLevelGoalLocNameEdit() {
char str[256];
2024-06-15 18:12:48 +00:00
((CEdit *)GetDlgItem(IDC_LEVEL_GOAL_LOC_NAME_EDIT))->GetWindowText(str, 255);
Level_goals.GoalSetItemName(m_current_goal, str);
UpdateDialog();
}
2024-06-15 18:12:48 +00:00
void levelkeypad::OnKillfocusLevelGoalDescEdit() {
char str[2560];
2024-06-15 18:12:48 +00:00
((CEdit *)GetDlgItem(IDC_LEVEL_GOAL_DESC_EDIT))->GetWindowText(str, 2559);
Level_goals.GoalSetDesc(m_current_goal, str);
2024-06-15 18:12:48 +00:00
UpdateDialog();
}
2024-06-15 18:12:48 +00:00
void levelkeypad::OnLevelGoalNewItemButton() {
int item;
2024-06-15 18:12:48 +00:00
item = Level_goals.GoalAddItem(m_current_goal);
if (item != -1) {
m_current_item = item;
} else {
OutrageMessageBox(MBOX_OK, "Sorry: No more items are allowed for this goal. See Chris.");
}
UpdateDialog();
}
2024-06-15 18:12:48 +00:00
void levelkeypad::OnLevelGoalNextItemButton() {
if (m_current_item < Level_goals.GoalGetNumItems(m_current_goal) - 1)
m_current_item++;
else
m_current_item = 0;
2024-06-15 18:12:48 +00:00
UpdateDialog();
}
2024-06-15 18:12:48 +00:00
void levelkeypad::OnLevelGoalPrevItemButton() {
if (m_current_item > 0)
m_current_item--;
else
m_current_item = Level_goals.GoalGetNumItems(m_current_goal) - 1;
UpdateDialog();
}
2024-06-15 18:12:48 +00:00
void levelkeypad::OnLevelGoalDeleteItemButton() {
if (Level_goals.GoalGetNumItems(m_current_goal)) {
Level_goals.GoalDeleteItem(m_current_goal, m_current_item);
m_current_item = 0;
}
2024-06-15 18:12:48 +00:00
UpdateDialog();
}
2024-06-15 18:12:48 +00:00
void levelkeypad::OnLevelGoalRoomItemRadio() {
char type = LIT_INTERNAL_ROOM;
int handle = -1;
Level_goals.GoalItemInfo(m_current_goal, m_current_item, LO_SET_SPECIFIED, &type, &handle, NULL);
2024-06-15 18:12:48 +00:00
UpdateDialog();
}
2024-06-15 18:12:48 +00:00
void levelkeypad::OnLevelGoalCellItemRadio() {
char type = LIT_TERRAIN_CELL;
int handle = -1;
2024-06-15 18:12:48 +00:00
Level_goals.GoalItemInfo(m_current_goal, m_current_item, LO_SET_SPECIFIED, &type, &handle, NULL);
UpdateDialog();
}
2024-06-15 18:12:48 +00:00
void levelkeypad::OnLevelGoalObjItemRadio() {
char type = LIT_OBJECT;
int handle = -1;
2024-06-15 18:12:48 +00:00
Level_goals.GoalItemInfo(m_current_goal, m_current_item, LO_SET_SPECIFIED, &type, &handle, NULL);
UpdateDialog();
}
2024-06-15 18:12:48 +00:00
void levelkeypad::OnTriggerRadio() {
char type = LIT_TRIGGER;
int handle = -1;
Level_goals.GoalItemInfo(m_current_goal, m_current_item, LO_SET_SPECIFIED, &type, &handle, NULL);
2024-06-15 18:12:48 +00:00
UpdateDialog();
}
2024-06-15 18:12:48 +00:00
void levelkeypad::OnLevelGoalMineRadio() {
char type = LIT_ANY_MINE;
int handle = -1;
Level_goals.GoalItemInfo(m_current_goal, m_current_item, LO_SET_SPECIFIED, &type, &handle, NULL);
2024-06-15 18:12:48 +00:00
UpdateDialog();
}
2024-06-15 18:12:48 +00:00
void levelkeypad::DoGoalFlagToggle(int flag) {
char op = LO_CLEAR_SPECIFIED;
int flags;
bool f_set;
2024-06-15 18:12:48 +00:00
Level_goals.GoalStatus(m_current_goal, LO_GET_SPECIFIED, &flags, true);
f_set = ((flags & flag) == 0);
2024-06-15 18:12:48 +00:00
if (f_set) {
op = LO_SET_SPECIFIED;
}
2024-06-15 18:12:48 +00:00
Level_goals.GoalStatus(m_current_goal, op, &flag, true);
UpdateDialog();
}
2024-06-15 18:12:48 +00:00
void levelkeypad::OnGoalAutoCompleteCheck() { DoGoalFlagToggle(LGF_COMPLETED); }
2024-06-15 18:12:48 +00:00
void levelkeypad::OnLevelGoalSecGoalCheck() { DoGoalFlagToggle(LGF_SECONDARY_GOAL); }
2024-06-15 18:12:48 +00:00
void levelkeypad::OnLevelGoalEnabledCheck() { DoGoalFlagToggle(LGF_ENABLED); }
2024-06-15 18:12:48 +00:00
void levelkeypad::OnLevelGoalCompletedCheck() { DoGoalFlagToggle(LGF_COMPLETED); }
2024-06-15 18:12:48 +00:00
void levelkeypad::OnLevelGoalTlgCheck() { DoGoalFlagToggle(LGF_TELCOM_LISTS); }
2024-06-15 18:12:48 +00:00
void levelkeypad::OnLevelGoalGdklCheck() { DoGoalFlagToggle(LGF_GB_DOESNT_KNOW_LOC); }
2024-06-15 18:12:48 +00:00
void levelkeypad::OnLevelGoalNlbCheck() { DoGoalFlagToggle(LGF_NOT_LOC_BASED); }
2024-06-15 18:12:48 +00:00
void levelkeypad::OnLevelGoalPasteObjrefItemButton() {
int handle = Copied_object_id;
2024-06-15 18:12:48 +00:00
Level_goals.GoalItemInfo(m_current_goal, m_current_item, LO_SET_SPECIFIED, NULL, &handle, NULL);
UpdateDialog();
}
2024-06-15 18:12:48 +00:00
void levelkeypad::OnLevelGoalGotoItemButton() {
char type;
int handle;
2024-06-15 18:12:48 +00:00
if (Level_goals.GoalItemInfo(m_current_goal, m_current_item, LO_GET_SPECIFIED, &type, &handle, NULL)) {
bool valid = false;
vector pnt;
int roomnum;
2024-06-15 18:12:48 +00:00
MakeBOA();
2024-06-15 18:12:48 +00:00
switch (type) {
case LIT_OBJECT: {
object *obj = ObjGet(handle);
if (obj) {
pnt = obj->pos;
roomnum = obj->roomnum;
valid = true;
}
} break;
case LIT_INTERNAL_ROOM: {
if (handle >= 0 && handle <= Highest_room_index && Rooms[handle].used) {
pnt = Rooms[handle].path_pnt;
roomnum = handle;
valid = true;
}
} break;
case LIT_TERRAIN_CELL: {
if (handle >= 0 && handle < TERRAIN_WIDTH * TERRAIN_DEPTH) {
ComputeTerrainSegmentCenter(&pnt, handle);
roomnum = MAKE_ROOMNUM(handle);
valid = true;
}
} break;
}
2024-06-15 18:12:48 +00:00
if (valid) {
ObjSetPos(Viewer_object, &pnt, roomnum, NULL, false);
Viewer_moved = 1;
} else {
OutrageMessageBox(MBOX_OK, "Cannot move viewer: This item is not valid.");
}
} else {
OutrageMessageBox(MBOX_OK, "Cannot move viewer: This item is not defined.");
}
2024-06-15 18:12:48 +00:00
UpdateDialog();
}
2024-06-15 18:12:48 +00:00
void levelkeypad::OnKillfocusLevelGoalItemEdit() {
int handle;
char str[256];
2024-06-15 18:12:48 +00:00
((CEdit *)GetDlgItem(IDC_LEVEL_GOAL_ITEM_EDIT))->GetWindowText(str, 255);
sscanf(str, "%d", &handle);
2024-06-15 18:12:48 +00:00
Level_goals.GoalItemInfo(m_current_goal, m_current_item, LO_SET_SPECIFIED, NULL, &handle, NULL);
UpdateDialog();
}
2024-06-15 18:12:48 +00:00
void levelkeypad::OnKillfocusLevelGoalPriorityEdit1() {
int priority;
char str[256];
2024-06-15 18:12:48 +00:00
((CEdit *)GetDlgItem(IDC_LEVEL_GOAL_PRIORITY_EDIT1))->GetWindowText(str, 255);
sscanf(str, "%d", &priority);
2024-06-15 18:12:48 +00:00
Level_goals.GoalPriority(m_current_goal, LO_SET_SPECIFIED, &priority);
UpdateDialog();
}
2024-06-15 18:12:48 +00:00
void levelkeypad::OnLevelGoalEndLevelCheck() {
int flag = 0; // LGF_AUTO_END_LEVEL;
char op = LO_CLEAR_SPECIFIED;
int flags;
bool f_set;
2024-06-15 18:12:48 +00:00
Level_goals.LGStatus(LO_GET_SPECIFIED, &flags);
f_set = ((flags & flag) == 0);
2024-06-15 18:12:48 +00:00
if (f_set) {
op = LO_SET_SPECIFIED;
}
2024-06-15 18:12:48 +00:00
Level_goals.LGStatus(op, &flag);
UpdateDialog();
}
2024-06-15 18:12:48 +00:00
void levelkeypad::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar *pScrollBar) {
CKeypadDialog::OnVScroll(nSBCode, nPos, pScrollBar);
}
2024-06-15 18:12:48 +00:00
void levelkeypad::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar *pScrollBar) {
CKeypadDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}
2024-06-15 18:12:48 +00:00
void levelkeypad::OnSize(UINT nType, int cx, int cy) { CKeypadDialog::OnSize(nType, cx, cy); }
2024-06-15 18:12:48 +00:00
void levelkeypad::SetAmbType(int i, int n_id) {
int cur;
char name[200];
2024-06-15 18:12:48 +00:00
cur = SendDlgItemMessage(n_id, CB_GETCURSEL, 0, 0);
SendDlgItemMessage(n_id, CB_GETLBTEXT, cur, (LPARAM)(LPCTSTR)name);
2024-06-15 18:12:48 +00:00
int obj_id = FindObjectIDName(name);
a_life.SetALValue(i, ALI_TYPE, &obj_id);
2024-06-15 18:12:48 +00:00
UpdateDialog();
}
2024-06-15 18:12:48 +00:00
void levelkeypad::OnSelendokAmbType1() { SetAmbType(0, IDC_AMB_TYPE1); }
2024-06-15 18:12:48 +00:00
void levelkeypad::OnSelendokAmbType2() { SetAmbType(1, IDC_AMB_TYPE2); }
2024-06-15 18:12:48 +00:00
void levelkeypad::OnSelendokAmbType3() { SetAmbType(2, IDC_AMB_TYPE3); }
2024-06-15 18:12:48 +00:00
void levelkeypad::OnSelendokAmbType4() { SetAmbType(3, IDC_AMB_TYPE4); }
2024-06-15 18:12:48 +00:00
void levelkeypad::OnSelendokAmbType5() { SetAmbType(4, IDC_AMB_TYPE5); }
2024-06-15 18:12:48 +00:00
void levelkeypad::OnSelendokAmbType6() { SetAmbType(5, IDC_AMB_TYPE6); }
2024-06-15 18:12:48 +00:00
void levelkeypad::SetAmbCharVal(char index, char item, int n_id) {
int ival;
uint8_t val;
char str[256];
2024-06-15 18:12:48 +00:00
((CEdit *)GetDlgItem(n_id))->GetWindowText(str, 255);
sscanf(str, "%d", &ival);
val = ival;
2024-06-15 18:12:48 +00:00
a_life.SetALValue(index, item, &val);
UpdateDialog();
}
2024-06-15 18:12:48 +00:00
void levelkeypad::OnKillfocusAmbMax1() { SetAmbCharVal(0, ALI_MAX, IDC_AMB_MAX1); }
2024-06-15 18:12:48 +00:00
void levelkeypad::OnKillfocusAmbMax2() { SetAmbCharVal(1, ALI_MAX, IDC_AMB_MAX2); }
2024-06-15 18:12:48 +00:00
void levelkeypad::OnKillfocusAmbMax3() { SetAmbCharVal(2, ALI_MAX, IDC_AMB_MAX3); }
2024-06-15 18:12:48 +00:00
void levelkeypad::OnKillfocusAmbMax4() { SetAmbCharVal(3, ALI_MAX, IDC_AMB_MAX4); }
2024-06-15 18:12:48 +00:00
void levelkeypad::OnKillfocusAmbMax5() { SetAmbCharVal(4, ALI_MAX, IDC_AMB_MAX5); }
2024-06-15 18:12:48 +00:00
void levelkeypad::OnKillfocusAmbMax6() { SetAmbCharVal(5, ALI_MAX, IDC_AMB_MAX6); }
2024-06-15 18:12:48 +00:00
void levelkeypad::OnKillfocusAmbMin1() { SetAmbCharVal(0, ALI_MIN, IDC_AMB_MIN1); }
void levelkeypad::OnKillfocusAmbMin2() { SetAmbCharVal(1, ALI_MIN, IDC_AMB_MIN2); }
void levelkeypad::OnKillfocusAmbMin3() { SetAmbCharVal(2, ALI_MIN, IDC_AMB_MIN3); }
void levelkeypad::OnKillfocusAmbMin4() { SetAmbCharVal(3, ALI_MIN, IDC_AMB_MIN4); }
void levelkeypad::OnKillfocusAmbMin5() { SetAmbCharVal(4, ALI_MIN, IDC_AMB_MIN5); }
void levelkeypad::OnKillfocusAmbMin6() { SetAmbCharVal(5, ALI_MIN, IDC_AMB_MIN6); }
void levelkeypad::OnKillfocusAmbNGroups1() { SetAmbCharVal(0, ALI_TOTAL, IDC_AMB_N_GROUPS1); }
void levelkeypad::OnKillfocusAmbNGroups2() { SetAmbCharVal(1, ALI_TOTAL, IDC_AMB_N_GROUPS2); }
void levelkeypad::OnKillfocusAmbNGroups3() { SetAmbCharVal(2, ALI_TOTAL, IDC_AMB_N_GROUPS3); }
void levelkeypad::OnKillfocusAmbNGroups4() { SetAmbCharVal(3, ALI_TOTAL, IDC_AMB_N_GROUPS4); }
2024-06-15 18:12:48 +00:00
void levelkeypad::OnKillfocusAmbNGroups5() { SetAmbCharVal(4, ALI_TOTAL, IDC_AMB_N_GROUPS5); }
2024-06-15 18:12:48 +00:00
void levelkeypad::OnKillfocusAmbNGroups6() { SetAmbCharVal(5, ALI_TOTAL, IDC_AMB_N_GROUPS6); }
void levelkeypad::OnAmbOutside1() {
CButton *bbox;
uint8_t x;
bbox = (CButton *)GetDlgItem(IDC_AMB_OUTSIDE1);
x = bbox->GetCheck();
a_life.SetALValue(0, ALI_FLAGS, &x);
}
2024-06-15 18:12:48 +00:00
void levelkeypad::OnAmbOutside2() {
CButton *bbox;
uint8_t x;
2024-06-15 18:12:48 +00:00
bbox = (CButton *)GetDlgItem(IDC_AMB_OUTSIDE2);
x = bbox->GetCheck();
2024-06-15 18:12:48 +00:00
a_life.SetALValue(1, ALI_FLAGS, &x);
}
2024-06-15 18:12:48 +00:00
void levelkeypad::OnAmbOutside3() {
CButton *bbox;
uint8_t x;
2024-06-15 18:12:48 +00:00
bbox = (CButton *)GetDlgItem(IDC_AMB_OUTSIDE3);
x = bbox->GetCheck();
2024-06-15 18:12:48 +00:00
a_life.SetALValue(2, ALI_FLAGS, &x);
}
2024-06-15 18:12:48 +00:00
void levelkeypad::OnAmbOutside4() {
CButton *bbox;
uint8_t x;
2024-06-15 18:12:48 +00:00
bbox = (CButton *)GetDlgItem(IDC_AMB_OUTSIDE4);
x = bbox->GetCheck();
2024-06-15 18:12:48 +00:00
a_life.SetALValue(3, ALI_FLAGS, &x);
}
2024-06-15 18:12:48 +00:00
void levelkeypad::OnAmbOutside5() {
CButton *bbox;
uint8_t x;
2024-06-15 18:12:48 +00:00
bbox = (CButton *)GetDlgItem(IDC_AMB_OUTSIDE5);
x = bbox->GetCheck();
2024-06-15 18:12:48 +00:00
a_life.SetALValue(4, ALI_FLAGS, &x);
}
2024-06-15 18:12:48 +00:00
void levelkeypad::OnAmbOutside6() {
CButton *bbox;
uint8_t x;
2024-06-15 18:12:48 +00:00
bbox = (CButton *)GetDlgItem(IDC_AMB_OUTSIDE6);
x = bbox->GetCheck();
2024-06-15 18:12:48 +00:00
a_life.SetALValue(5, ALI_FLAGS, &x);
}
2024-06-15 18:12:48 +00:00
void levelkeypad::OnKillfocusLevelGoalCompletionEdit() {
char str[2560];
2024-06-15 18:12:48 +00:00
((CEdit *)GetDlgItem(IDC_LEVEL_GOAL_COMPLETION_EDIT))->GetWindowText(str, 2559);
Level_goals.GoalSetCompletionMessage(m_current_goal, str);
UpdateDialog();
}
2024-06-15 18:12:48 +00:00
void levelkeypad::OnLgActivateRadio() {
int flags = LGF_COMP_MASK;
Level_goals.GoalStatus(m_current_goal, LO_CLEAR_SPECIFIED, &flags, true);
2024-06-15 18:12:48 +00:00
flags = LGF_COMP_ACTIVATE;
Level_goals.GoalStatus(m_current_goal, LO_SET_SPECIFIED, &flags, true);
}
2024-06-15 18:12:48 +00:00
void levelkeypad::OnLgEnterRadio() {
int flags = LGF_COMP_MASK;
Level_goals.GoalStatus(m_current_goal, LO_CLEAR_SPECIFIED, &flags, true);
2024-06-15 18:12:48 +00:00
flags = LGF_COMP_ENTER;
Level_goals.GoalStatus(m_current_goal, LO_SET_SPECIFIED, &flags, true);
}
2024-06-15 18:12:48 +00:00
void levelkeypad::OnLgDestroyedRadio() {
int flags = LGF_COMP_MASK;
Level_goals.GoalStatus(m_current_goal, LO_CLEAR_SPECIFIED, &flags, true);
2024-06-15 18:12:48 +00:00
flags = LGF_COMP_DESTROY;
Level_goals.GoalStatus(m_current_goal, LO_SET_SPECIFIED, &flags, true);
}
2024-06-15 18:12:48 +00:00
void levelkeypad::OnLgPpwCollideRadio() {
int flags = LGF_COMP_MASK;
Level_goals.GoalStatus(m_current_goal, LO_CLEAR_SPECIFIED, &flags, true);
2024-06-15 18:12:48 +00:00
flags = LGF_COMP_PLAYER_WEAPON;
Level_goals.GoalStatus(m_current_goal, LO_SET_SPECIFIED, &flags, true);
}
2024-06-15 18:12:48 +00:00
void levelkeypad::OnLgLcRadio() {
int flags = LGF_COMP_MASK;
Level_goals.GoalStatus(m_current_goal, LO_CLEAR_SPECIFIED, &flags, true);
2024-06-15 18:12:48 +00:00
flags = LGF_COMP_PLAYER;
Level_goals.GoalStatus(m_current_goal, LO_SET_SPECIFIED, &flags, true);
}
2024-06-15 18:12:48 +00:00
void levelkeypad::OnLgDallasRadio() {
int flags = LGF_COMP_MASK;
Level_goals.GoalStatus(m_current_goal, LO_CLEAR_SPECIFIED, &flags, true);
2024-06-15 18:12:48 +00:00
flags = LGF_COMP_DALLAS;
Level_goals.GoalStatus(m_current_goal, LO_SET_SPECIFIED, &flags, true);
}
2024-06-15 18:12:48 +00:00
void levelkeypad::OnSelendokLevelgoalRoomCombo() {
int handle = m_room_combo.GetSelected();
2024-06-15 18:12:48 +00:00
Level_goals.GoalItemInfo(m_current_goal, m_current_item, LO_SET_SPECIFIED, NULL, &handle, NULL);
UpdateDialog();
}
2024-06-15 18:12:48 +00:00
void levelkeypad::OnSelendokLevelgoalobjectCombo() {
int handle = m_object_combo.GetSelected();
2024-06-15 18:12:48 +00:00
Level_goals.GoalItemInfo(m_current_goal, m_current_item, LO_SET_SPECIFIED, NULL, &handle, NULL);
UpdateDialog();
}
2024-06-15 18:12:48 +00:00
void levelkeypad::OnSelendokLevelgoaltriggerCombo() {
int handle = m_trigger_combo.GetSelected();
2024-06-15 18:12:48 +00:00
Level_goals.GoalItemInfo(m_current_goal, m_current_item, LO_SET_SPECIFIED, NULL, &handle, NULL);
UpdateDialog();
}
/*
2024-06-15 18:12:48 +00:00
void levelkeypad::OnKillfocusLevelGoalListEdit()
{
2024-06-15 18:12:48 +00:00
int int_g_list;
char g_list;
char str[256];
((CEdit *) GetDlgItem(IDC_LEVEL_GOAL_LIST_EDIT))->GetWindowText(str,255);
sscanf(str, "%d", &int_g_list);
g_list = (char)int_g_list;
Level_goals.GoalGoalList(m_current_goal, LO_SET_SPECIFIED, &g_list);
UpdateDialog();
}
*/
2024-06-15 18:12:48 +00:00
void levelkeypad::OnKillfocusEdit57() {
int int_g_list;
char g_list;
char str[256];
2024-06-15 18:12:48 +00:00
((CEdit *)GetDlgItem(IDC_EDIT57))->GetWindowText(str, 255);
sscanf(str, "%d", &int_g_list);
g_list = (char)int_g_list;
Level_goals.GoalGoalList(m_current_goal, LO_SET_SPECIFIED, &g_list);
UpdateDialog();
}
2024-06-15 18:12:48 +00:00
void levelkeypad::OnLevelCeilingEverywhere() {
if (FVI_always_check_ceiling)
FVI_always_check_ceiling = false;
else
FVI_always_check_ceiling = true;
2024-06-15 18:12:48 +00:00
UpdateDialog();
}
void levelkeypad::OnKillfocusLevelCeilingEdit() {
char str[21];
((CEdit *)GetDlgItem(IDC_LEVEL_CEILING_EDIT))->GetWindowText(str, 20);
2024-06-15 18:12:48 +00:00
Ceiling_height = atof(str);
2024-06-15 18:12:48 +00:00
UpdateDialog();
}
2024-06-15 18:12:48 +00:00
void levelkeypad::OnSelendokFfosCombo() {
char name[200];
2024-06-15 18:12:48 +00:00
int cur = SendDlgItemMessage(IDC_FFOS_COMBO, CB_GETCURSEL, 0, 0);
SendDlgItemMessage(IDC_FFOS_COMBO, CB_GETLBTEXT, cur, (LPARAM)(LPCTSTR)name);
2024-06-15 18:12:48 +00:00
if (stricmp(name, "Default") != 0)
sound_override_force_field = FindSoundName(name);
else
sound_override_force_field = -1;
2024-06-15 18:12:48 +00:00
UpdateDialog();
}
2024-06-15 18:12:48 +00:00
void levelkeypad::OnSelendokBgosCombo() {
char name[200];
2024-06-15 18:12:48 +00:00
int cur = SendDlgItemMessage(IDC_BGOS_COMBO, CB_GETCURSEL, 0, 0);
SendDlgItemMessage(IDC_BGOS_COMBO, CB_GETLBTEXT, cur, (LPARAM)(LPCTSTR)name);
2024-06-15 18:12:48 +00:00
if (stricmp(name, "Default") != 0)
sound_override_glass_breaking = FindSoundName(name);
else
sound_override_glass_breaking = -1;
2024-06-15 18:12:48 +00:00
UpdateDialog();
}
2024-06-15 18:12:48 +00:00
void levelkeypad::OnKillfocusFft1Edit() {}
2024-06-15 18:12:48 +00:00
void levelkeypad::OnKillfocusFft2Edit() {
char str[21];
((CEdit *)GetDlgItem(IDC_FFT2_EDIT))->GetWindowText(str, 20);
2024-06-15 18:12:48 +00:00
force_field_bounce_multiplier[1] = atof(str);
2024-06-15 18:12:48 +00:00
UpdateDialog();
}
2024-06-15 18:12:48 +00:00
void levelkeypad::OnSelendokFft1Combo() {
char name[200];
2024-06-15 18:12:48 +00:00
int cur = SendDlgItemMessage(IDC_FFT1_COMBO, CB_GETCURSEL, 0, 0);
SendDlgItemMessage(IDC_FFT1_COMBO, CB_GETLBTEXT, cur, (LPARAM)(LPCTSTR)name);
2024-06-15 18:12:48 +00:00
if (stricmp(name, "Not Assigned") != 0)
force_field_bounce_texture[0] = FindTextureName(name);
else
force_field_bounce_texture[0] = -1;
2024-06-15 18:12:48 +00:00
UpdateDialog();
}
2024-06-15 18:12:48 +00:00
void levelkeypad::OnSelendokFft2Combo() {
char name[200];
2024-06-15 18:12:48 +00:00
int cur = SendDlgItemMessage(IDC_FFT2_COMBO, CB_GETCURSEL, 0, 0);
SendDlgItemMessage(IDC_FFT2_COMBO, CB_GETLBTEXT, cur, (LPARAM)(LPCTSTR)name);
2024-06-15 18:12:48 +00:00
if (stricmp(name, "Not Assigned") != 0)
force_field_bounce_texture[1] = FindTextureName(name);
else
force_field_bounce_texture[1] = -1;
2024-06-15 18:12:48 +00:00
UpdateDialog();
}
2024-06-15 18:12:48 +00:00
void levelkeypad::OnKillfocusFixedFft1Edit() {
char str[21];
((CEdit *)GetDlgItem(IDC_FIXED_FFT1_EDIT))->GetWindowText(str, 20);
2024-06-15 18:12:48 +00:00
force_field_bounce_multiplier[0] = atof(str);
2024-06-15 18:12:48 +00:00
UpdateDialog();
}
2024-06-15 18:12:48 +00:00
void levelkeypad::OnSetfocusFft1Combo() {
int i;
2024-06-15 18:12:48 +00:00
SendDlgItemMessage(IDC_FFT1_COMBO, CB_RESETCONTENT, 0, 0);
SendDlgItemMessage(IDC_FFT1_COMBO, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR) "Not Assigned");
for (i = 0; i < MAX_TEXTURES; i++) {
if (GameTextures[i].used) {
SendDlgItemMessage(IDC_FFT1_COMBO, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)GameTextures[i].name);
}
}
}
2024-06-15 18:12:48 +00:00
void levelkeypad::OnSetfocusFft2Combo() {
int i;
2024-06-15 18:12:48 +00:00
SendDlgItemMessage(IDC_FFT2_COMBO, CB_RESETCONTENT, 0, 0);
SendDlgItemMessage(IDC_FFT2_COMBO, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR) "Not Assigned");
for (i = 0; i < MAX_TEXTURES; i++) {
if (GameTextures[i].used) {
SendDlgItemMessage(IDC_FFT2_COMBO, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)GameTextures[i].name);
}
}
}
2024-06-15 18:12:48 +00:00
void levelkeypad::OnLevelPiw() {
if (Level_powerups_ignore_wind)
Level_powerups_ignore_wind = false;
else
Level_powerups_ignore_wind = true;
2024-06-15 18:12:48 +00:00
UpdateDialog();
}
2024-06-15 18:12:48 +00:00
void levelkeypad::OnKillfocusFft3Edit() {
char str[21];
((CEdit *)GetDlgItem(IDC_FFT3_EDIT))->GetWindowText(str, 20);
force_field_bounce_multiplier[2] = atof(str);
UpdateDialog();
}
2024-06-15 18:12:48 +00:00
void levelkeypad::OnSelendokFft3Combo() {
char name[200];
2024-06-15 18:12:48 +00:00
int cur = SendDlgItemMessage(IDC_FFT3_COMBO, CB_GETCURSEL, 0, 0);
SendDlgItemMessage(IDC_FFT3_COMBO, CB_GETLBTEXT, cur, (LPARAM)(LPCTSTR)name);
2024-06-15 18:12:48 +00:00
if (stricmp(name, "Not Assigned") != 0)
force_field_bounce_texture[2] = FindTextureName(name);
else
force_field_bounce_texture[2] = -1;
2024-06-15 18:12:48 +00:00
UpdateDialog();
}
2024-06-15 18:12:48 +00:00
void levelkeypad::OnSetfocusFft3Combo() {
int i;
SendDlgItemMessage(IDC_FFT3_COMBO, CB_RESETCONTENT, 0, 0);
SendDlgItemMessage(IDC_FFT3_COMBO, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR) "Not Assigned");
for (i = 0; i < MAX_TEXTURES; i++) {
if (GameTextures[i].used) {
SendDlgItemMessage(IDC_FFT3_COMBO, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)GameTextures[i].name);
}
}
}