13 #include "Sexp_tree.h"
16 #include "Management.h"
18 #include "OperatorArgTypeSelect.h"
20 #include "EventEditor.h"
21 #include "MissionGoalsDlg.h"
25 #include "CampaignEditorDlg.h"
27 #include "IgnoreOrdersDlg.h"
35 #include "AddVariableDlg.h"
36 #include "ModifyVariableDlg.h"
51 #define TREE_NODE_INCREMENT 100
53 #define MAX_OP_MENUS 30
54 #define MAX_SUBMENUS (MAX_OP_MENUS * MAX_OP_MENUS)
56 #define ID_VARIABLE_MENU 0xda00
57 #define ID_ADD_MENU 0xdc00
58 #define ID_REPLACE_MENU 0xde00
63 static char THIS_FILE[] = __FILE__;
70 ON_NOTIFY_REFLECT(TVN_BEGINDRAG, OnBegindrag)
75 ON_NOTIFY_REFLECT(TVN_KEYDOWN, OnKeydown)
79 static
int Add_count, Replace_count;
80 static
int Modify_variable;
89 select_sexp_node = -1;
93 m_p_image_list = NULL;
101 mprintf((
"Resetting dynamic tree node limit from %d to %d...\n",
tree_nodes.size(), 0));
159 Assert(sexp_var_index > -1);
171 while (index != -1) {
251 int var_name_length = strcspn(text,
"(");
254 strncpy(var_name, text, var_name_length);
255 var_name[var_name_length] =
'\0';
258 #define NO_PREVIOUS_NODE -9
270 if ((
tree_nodes[cur].parent >= 0) && !at_root) {
295 }
else if (last >= 0){
339 mprintf((
"Bumping dynamic tree node limit from %d to %d...\n", old_size,
tree_nodes.size()));
377 while ((i != after) && (
tree_nodes[i].next != -1))
454 Assert(strlen(text) < max_length);
573 int i, j,
z,
count, op, add_type, replace_type,
type, subcategory_id;
577 POINT click_point, mouse;
578 CMenu menu, *mptr, *popup_menu, *add_data_menu = NULL, *replace_data_menu = NULL;
580 CMenu *replace_op_menu, replace_op_submenu[
MAX_OP_MENUS];
582 CMenu *replace_variable_menu = NULL;
593 GetCursorPos(&mouse);
595 ScreenToClient(&click_point);
596 h = HitTest(CPoint(click_point), &_flags);
600 popup_menu = menu.GetSubMenu(0);
601 ASSERT(popup_menu != NULL);
604 add_op_menu = replace_op_menu = insert_op_menu = NULL;
607 i = popup_menu->GetMenuItemCount();
609 if ( (mptr = popup_menu->GetSubMenu(i)) > 0 ) {
610 popup_menu->GetMenuString(i, buf,
sizeof(buf), MF_BYPOSITION);
612 if (!
stricmp(buf,
"add operator")) {
615 }
else if (!
stricmp(buf,
"replace operator")) {
616 replace_op_menu = mptr;
618 }
else if (!
stricmp(buf,
"add data")) {
619 add_data_menu = mptr;
621 }
else if (!
stricmp(buf,
"replace data")) {
622 replace_data_menu = mptr;
624 }
else if (!
stricmp(buf,
"insert operator")) {
625 insert_op_menu = mptr;
627 }
else if (!
stricmp(buf,
"replace variable")) {
628 replace_variable_menu = mptr;
636 add_op_submenu[
i].CreatePopupMenu();
637 replace_op_submenu[
i].CreatePopupMenu();
638 insert_op_submenu[
i].CreatePopupMenu();
640 add_op_menu->AppendMenu(MF_POPUP, (
UINT) add_op_submenu[i].m_hMenu,
op_menu[i].
name);
641 replace_op_menu->AppendMenu(MF_POPUP, (
UINT) replace_op_submenu[i].m_hMenu,
op_menu[i].name);
642 insert_op_menu->AppendMenu(MF_POPUP, (
UINT) insert_op_submenu[i].m_hMenu,
op_menu[i].name);
691 int temp = first_arg;
733 Assert(max_sexp_vars < 512);
735 for (
int idx=0;
idx<max_sexp_vars;
idx++) {
746 if ( type & SEXPT_STRING ) {
751 if ( type & SEXPT_NUMBER ) {
769 if (!( (
idx + 3) % 30)) {
770 flag |= MF_MENUBARBREAK;
795 add_op_subcategory_menu[
i].CreatePopupMenu();
796 replace_op_subcategory_menu[
i].CreatePopupMenu();
797 insert_op_subcategory_menu[
i].CreatePopupMenu();
803 add_op_submenu[j].AppendMenu(MF_POPUP, (
UINT) add_op_subcategory_menu[i].m_hMenu,
op_submenu[i].
name);
804 replace_op_submenu[j].AppendMenu(MF_POPUP, (
UINT) replace_op_subcategory_menu[i].m_hMenu,
op_submenu[i].name);
805 insert_op_submenu[j].AppendMenu(MF_POPUP, (
UINT) insert_op_subcategory_menu[i].m_hMenu,
op_submenu[i].name);
816 if (subcategory_id == -1)
847 if (j < Num_op_menus) {
848 add_op_submenu[j].AppendMenu(MF_STRING | MF_GRAYED,
Operators[i].value,
Operators[i].text);
889 if (j < Num_submenus) {
890 add_op_subcategory_menu[j].AppendMenu(MF_STRING | MF_GRAYED,
Operators[i].value,
Operators[i].text);
918 menu.EnableMenuItem(ID_EDIT_COPY, MF_GRAYED);
924 popup_menu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, mouse.
x, mouse.
y,
this);
934 menu.EnableMenuItem(
ID_DELETE, MF_GRAYED);
972 if ( (data_idx + 3) % 30) {
973 add_data_menu->AppendMenu(MF_STRING | MF_ENABLED,
ID_ADD_MENU + data_idx, ptr->
text);
975 add_data_menu->AppendMenu(MF_MENUBARBREAK | MF_STRING | MF_ENABLED,
ID_ADD_MENU + data_idx, ptr->
text);
1038 menu.EnableMenuItem(
ID_DELETE, MF_GRAYED);
1043 int temp = first_arg;
1055 for (i=Replace_count+1; i<
count; i++) {
1057 menu.EnableMenuItem(
ID_DELETE, MF_GRAYED);
1082 if ( (data_idx + 3) % 30)
1083 replace_data_menu->AppendMenu(MF_STRING | MF_ENABLED,
ID_REPLACE_MENU + data_idx, ptr->
text);
1085 replace_data_menu->AppendMenu(MF_MENUBARBREAK | MF_STRING | MF_ENABLED,
ID_REPLACE_MENU + data_idx, ptr->
text);
1141 if (Replace_count == 0) {
1263 if (replace_type == z)
1264 menu.EnableMenuItem(ID_EDIT_PASTE, MF_ENABLED);
1271 menu.EnableMenuItem(ID_EDIT_PASTE_SPECIAL, MF_ENABLED);
1275 menu.EnableMenuItem(ID_EDIT_PASTE, MF_ENABLED);
1278 menu.EnableMenuItem(ID_EDIT_PASTE, MF_ENABLED);
1281 menu.EnableMenuItem(ID_EDIT_PASTE_SPECIAL, MF_ENABLED);
1284 menu.EnableMenuItem(ID_EDIT_PASTE_SPECIAL, MF_ENABLED);
1288 menu.EnableMenuItem(ID_EDIT_PASTE, MF_ENABLED);
1291 menu.EnableMenuItem(ID_EDIT_PASTE_SPECIAL, MF_ENABLED);
1297 if (!(menu.GetMenuState(
ID_DELETE, MF_BYCOMMAND) & MF_GRAYED))
1298 menu.EnableMenuItem(ID_EDIT_CUT, MF_ENABLED);
1301 popup_menu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, mouse.
x, mouse.
y,
this);
1311 while (node != -1) {
1326 while (node != -1) {
1406 Assert(parent_node >= 0);
1414 HTREEITEM
h = item.hItem;
1415 char *str = item.pszText;
1417 bool update_node =
true;
1454 update_node =
false;
1462 int val = atoi(str);
1465 update_node =
false;
1503 int z,
i, op, arg_num, opf, opr;
1504 const char *sub_best = NULL, *best = NULL;
1566 id = LOWORD(wParam);
1620 Assert(sexp_var_index != -1);
1639 Assert(sexp_var_index != -1);
1695 if (Modify_variable) {
1706 if (type & SEXPT_NUMBER) {
1710 if (type & SEXPT_STRING) {
1799 SetItemData(h, node);
1804 SetItemData(h, node);
1808 SetItemData(h, node);
1890 case ID_EDIT_PASTE_SPECIAL:
1983 int parent, theNode;
2032 return CTreeCtrl::OnCommand(wParam, lParam);
2038 int i, op_index, op2;
2181 free((
void *) ptr->
text);
2223 Assert(sexp_var_index != -1);
2243 Assert(sexp_var_index != -1);
2347 sprintf(sexp_str_token,
"%d", temp);
2369 sprintf(sexp_str_token,
"%d", temp);
2390 sprintf(sexp_str_token,
"%d", temp);
2398 if (i==4) temp = 100;
2400 sprintf(sexp_str_token,
"%d", temp);
2428 int sound_index = -1;
2439 if (sound_index >= 0)
2465 free((
void *) first_ptr->
text);
2476 strcpy(text_buf, list->
text);
2477 item->
text = text_buf;
2495 str =
"<name of ship here>";
2499 str =
"<all fighters>";
2509 str =
"<name of wing here>";
2513 str =
"<docker point>";
2517 str =
"<dockee point>";
2524 str =
"<name of subsystem>";
2541 str =
"<any wingman>";
2545 str =
"<waypoint path>";
2549 str =
"<mission name>";
2553 str =
"<goal name>";
2557 str =
"<ship type here>";
2561 str =
"<event name>";
2565 str =
"<huge weapon type>";
2569 str =
"<Jump node name>";
2581 str =
"<persona name>";
2593 str =
"<Effect Name>";
2601 str =
"<new default required!>";
2729 if (
Wings[j].wave_count)
2800 return (
Ssm_info.size() > 0) ? 1 : 0;
2831 SetItem(h, TVIF_TEXT,
tree_nodes[node].text, 0, 0, 0, 0, 0);
2836 Expand(h, TVE_EXPAND);
2843 Expand(h, TVE_EXPAND);
2844 h = GetChildItem(h);
2847 h = GetNextSiblingItem(h);
3132 sprintf(text,
"%s\n\nContinue checking for more errors?", msg);
3167 start = strstr(text,
"(");
3172 len = strlen(start);
3173 strncpy(default_text, start, len-1);
3176 default_text[len-1] =
'\0';
3182 length = strcspn(text,
"(");
3184 strncpy(var_name, text, length);
3190 int sexp_var_index = -1;
3200 Assert(sexp_var_index >= 0);
3204 sexp_var_index = atoi(node_text);
3205 Assert(sexp_var_index >= 0);
3207 else if (strchr(node_text,
'(') && strchr(node_text,
')')) {
3231 int op, arg_num,
type, tmp;
3232 static int flag = 0;
3234 bool is_variable_arg =
false;
3253 is_variable_arg =
true;
3258 if (!list && (arg_num >=
Operators[op].min)) {
3283 text_ptr = default_variable_text;
3288 bool types_match =
false;
3289 Assert(sexp_var_index != -1);
3314 text_ptr = default_variable_text;
3324 if (ptr->
text != NULL) {
3338 if (list->
op >= 0) {
3346 bool invalid =
false;
3406 while (ItemHasChildren(h))
3407 DeleteItem(GetChildItem(h));
3410 SetItemText(h, data);
3412 SetItemImage(h, bmap, bmap);
3438 while (ItemHasChildren(h)) {
3439 DeleteItem(GetChildItem(h));
3446 SetItemText(h, buf);
3470 while (ItemHasChildren(h))
3471 DeleteItem(GetChildItem(h));
3556 HTREEITEM
h = 0, child, next;
3564 GetItemImage(source, image1, image2);
3565 h =
insert(GetItemText(source), image1, image2, parent, after);
3569 GetItemImage(source, image1, image2);
3570 h =
insert(GetItemText(source), image1, image2, parent, after);
3573 SetItemData(h, GetItemData(source));
3574 child = GetChildItem(source);
3576 next = GetNextSiblingItem(child);
3581 if (GetItemState(source, TVIS_EXPANDED) & TVIS_EXPANDED)
3582 Expand(h, TVE_EXPAND);
3602 GetItemImage(source, image1, image2);
3603 h =
insert(GetItemText(source), image1, image2, parent, after);
3607 GetItemImage(source, image1, image2);
3608 h =
insert(GetItemText(source), image1, image2, parent, after);
3611 SetItemData(h, GetItemData(source));
3612 child = GetChildItem(source);
3615 child = GetNextSiblingItem(child);
3618 if (GetItemState(source, TVIS_EXPANDED) & TVIS_EXPANDED)
3619 Expand(h, TVE_EXPAND);
3627 Assert(!GetParentItem(one));
3628 Assert(!GetParentItem(two));
3667 CTreeCtrl::OnLButtonDown(nFlags, point);
3672 HTREEITEM hitem = NULL;
3678 if ((hitem = HitTest(point, &flags)) != NULL)
3679 if (!GetParentItem(hitem)) {
3681 SelectDropTarget(hitem);
3687 CTreeCtrl::OnMouseMove(nFlags, point);
3725 SelectDropTarget(NULL);
3728 CTreeCtrl::OnLButtonUp(nFlags, point);
3731 const static UINT Numbered_data_bitmaps[] = {
3756 CImageList *pimagelist;
3761 int stops[2] = { 10, 30 };
3763 help_box -> SetTabStops(2, (LPINT) stops);
3766 pimagelist = GetImageList(TVSIL_NORMAL);
3768 pimagelist =
new CImageList();
3769 pimagelist->Create(16, 16,
TRUE, 2, 22);
3773 pimagelist->Add(&bitmap, (COLORREF) 0xFFFFFF);
3774 bitmap.DeleteObject();
3777 pimagelist->Add(&bitmap, (COLORREF) 0xFF00FF);
3778 bitmap.DeleteObject();
3781 pimagelist->Add(&bitmap, (COLORREF) 0xFF00FF);
3782 bitmap.DeleteObject();
3785 pimagelist->Add(&bitmap, (COLORREF) 0xFF00FF);
3786 bitmap.DeleteObject();
3789 pimagelist->Add(&bitmap, (COLORREF) 0xFFFFFF);
3790 bitmap.DeleteObject();
3793 pimagelist->Add(&bitmap, (COLORREF) 0xFF00FF);
3794 bitmap.DeleteObject();
3797 pimagelist->Add(&bitmap, (COLORREF) 0xFFFFFF);
3798 bitmap.DeleteObject();
3801 pimagelist->Add(&bitmap, (COLORREF) 0xFFFFFF);
3802 bitmap.DeleteObject();
3805 pimagelist->Add(&bitmap, (COLORREF) 0xFFFFFF);
3806 bitmap.DeleteObject();
3809 int num =
sizeof(Numbered_data_bitmaps)/
sizeof(
UINT);
3811 for(i = 0; i <
num; i++)
3813 bitmap.LoadBitmap(Numbered_data_bitmaps[i]);
3814 pimagelist->Add(&bitmap, (COLORREF) 0xFF00FF);
3815 bitmap.DeleteObject();
3818 SetImageList(pimagelist, TVSIL_NORMAL);
3834 return InsertItem(lpszItem, image, sel_image, hParent, hInsertAfter);
3840 CImageList *pimagelist;
3842 pimagelist = GetImageList(TVSIL_NORMAL);
3844 pimagelist->DeleteImageList();
3848 CTreeCtrl::OnDestroy();
3901 mprintf((
"Allender! If you add new sexp operators, add help for them too! :)\n"));
3944 char buffer[10240] = {
""};
3947 const char *helpstr =
help(code);
3948 bool display_number =
true;
3954 const char *loc=NULL, *loc2=NULL;
3958 sprintf(searchstr,
"\n%d:", sibling_place);
3959 loc = strstr(helpstr, searchstr);
3964 sprintf(searchstr,
"\t%d:", sibling_place);
3965 loc = strstr(helpstr, searchstr);
3969 sprintf(searchstr,
" %d:", sibling_place);
3970 loc = strstr(helpstr, searchstr);
3974 sprintf(searchstr,
"%d:", sibling_place);
3975 loc = strstr(helpstr, searchstr);
3979 loc = strstr(helpstr,
"Rest:");
3983 loc = strstr(helpstr,
"All:");
3989 while(*loc==
'\r' || *loc ==
'\n' || *loc ==
' ' || *loc ==
'\t') loc++;
3992 loc2 = strpbrk(loc,
"\r\n");
3995 size_t size = loc2-loc;
3996 strncpy(buffer, loc, size);
3997 if(size <
sizeof(buffer))
3999 buffer[
size] =
'\0';
4001 display_number =
false;
4006 display_number =
false;
4014 sprintf(buffer,
"%d:", sibling_place);
4023 while ((j >= 0) && (j != i)) {
4045 str =
"No help available";
4069 find[find_count++] =
i;
4072 if (find_count == MAX_SEARCH_MESSAGE_DEPTH) {
4086 TV_KEYDOWN *pTVKeyDown = (TV_KEYDOWN *) pNMHDR;
4088 key = pTVKeyDown->wVKey;
4089 if (key == VK_SPACE)
4090 EditLabel(GetSelectedItem());
4489 if (w_arg < 1 && e_arg < 1 ) {
4510 int arg_num, current_node;
4514 current_node =
tree_nodes[parent_node].child;
4515 while (current_node >= 0)
4518 if (current_node == child_node)
4523 current_node =
tree_nodes[current_node].next;
4535 if(child_node == -1)
4541 current_node = child_node;
4542 parent_node =
tree_nodes[current_node].parent;
4544 while (parent_node >= 0)
4551 current_node = parent_node;
4552 parent_node =
tree_nodes[current_node].parent;
4575 int idx = (count % 100) / 5;
4577 int num =
sizeof(Numbered_data_bitmaps)/
sizeof(
UINT);
4593 if(myparent->
child == -1)
4601 if(mysibling == &tree_nodes[node])
4604 if(mysibling->
next == -1)
4608 mysibling = &tree_nodes[mysibling->
next];
4647 if ( parent_node != -1 ) {
4700 int op = 0, dock_ship = -1, require_cap_ship = 0;
4704 if ( parent_node >= 0 ) {
4721 Assert( dock_ship != -1 );
4762 if (
Wings[i].wave_count){
4771 #define OPS_CAP_CARGO 1
4772 #define OPS_STRENGTH 2
4773 #define OPS_BEAM_TURRET 3
4775 #define OPS_ROTATE 5
4780 int special_subsys = 0;
4786 Assert(parent_node >= 0);
4902 switch(special_subsys){
4956 int i, child, shipnum, num_added = 0;
4993 if (num_added == 0) {
5009 for (j = 0; (
uint) j < ii->get_waypoints().size(); ++j)
5011 sprintf(buf,
"%s:%d", ii->get_name(), j + 1);
5045 head.
add_data(
"<species support ship class>");
5131 int i, restrict_to_players;
5135 for (restrict_to_players = 0; restrict_to_players < 2; restrict_to_players++)
5159 int i,
n,
w,
z, child;
5162 Assert(parent_node >= 0);
5204 Assert(parent_node >= 0);
5241 Assert(parent_node >= 0);
5510 Assert(parent_node >= 0);
5590 Assert(parent_node >= 0);
5896 for (i=0; i < ppe_names.size(); i++) {
6040 char search_str[64];
6043 sprintf(search_str,
"%s(", var_name);
6080 char search_str[64];
6087 if (
Sexp_variables[sexp_var_index].type & SEXP_VARIABLE_NUMBER) {
6097 sprintf(search_str,
"%s(", old_name);
6132 int chars_to_copy = strcspn(tree_name,
"(");
6136 strncpy(var_name, tree_name, chars_to_copy);
6137 var_name[chars_to_copy] =
'\0';
6147 char compare_name[64];
6156 if ( strstr(
tree_nodes[idx].text, compare_name) ) {
#define SF2_TOGGLE_SUBSYSTEM_SCANNING
CImageList * m_p_image_list
#define ID_REPLACE_NUMBER
void expand_operator(int node)
#define OPF_ROTATING_SUBSYSTEM
#define OPF_AUDIO_VOLUME_OPTION
int stars_get_num_entries(bool is_a_sun, bool bitmap_count)
#define MAX_SEARCH_MESSAGE_DEPTH
int handler(int code, int goal)
SCP_vector< medal_stuff > Medals
void swap_handler(int node1, int node2)
int find_argument_number(int parent_node, int child_node)
int query_default_argument_available(int op)
model_subsystem * system_info
sexp_list_item * get_listing_opf_message()
SCP_vector< ArmorType > Armor_types
#define OPF_SUPPORT_SHIP_CLASS
bool m_type_player_persistent
#define SEXP_VARIABLE_NETWORK
#define SEXP_ATOM_OPERATOR
sexp_list_item * get_listing_opf_order_recipient()
sexp_list_item * get_listing_opf_who_from()
sexp_list_item * get_listing_opf_string()
sexp_list_item * get_listing_opf(int opf, int parent_node, int arg_index)
void sexp_variable_sort()
op_menu_struct op_submenu[]
GLfloat GLfloat GLfloat GLfloat h
void add_sub_tree(int node, HTREEITEM root)
weapon_info Weapon_info[MAX_WEAPON_TYPES]
#define OPF_SHIP_CLASS_NAME
sexp_list_item * get_listing_opf_turret_target_order()
char * Explosion_option[]
#define OPF_WAYPOINT_PATH
#define OP_CUTSCENES_SHOW_SUBTITLE
SCP_vector< game_snd > Snds
int add_default_operator(int op, int argnum)
int query_node_argument_type(int node)
const char * stars_get_name_FRED(int index, bool is_a_sun)
int sexp_add_variable(const char *text, const char *var_name, int type, int index)
sexp_list_item * get_listing_opf_dockee_point(int parent_node)
GLsizei const GLfloat * value
campaign_editor * Campaign_tree_formp
#define OP_BEAM_FIRE_COORDS
#define OP_HITS_LEFT_SUBSYSTEM
sexp_list_item * get_listing_opf_damage_type()
sexp_list_item * get_listing_opf_ship_effect()
#define MAX_OBJECT_FLAG_NAMES
void swap_handler(int node1, int node2)
#define OPF_VARIABLE_NAME
SCP_vector< ssm_info > Ssm_info
#define OP_HAS_UNDOCKED_DELAY
sexp_list_item * get_listing_opf_ship_class_name()
#define SEXP_ALL_BANKS_STRING
void insert_handler(int old, int node)
#define OP_CAMPAIGN_ONLY_FLAG
#define NUM_COMM_ORDER_ITEMS
sexp_list_item * get_listing_opf_sound_environment_option()
#define ID_REPLACE_STRING
void copy_branch(HTREEITEM source, HTREEITEM parent=TVI_ROOT, HTREEITEM after=TVI_LAST)
void _cdecl void void _cdecl void _cdecl Warning(char *filename, int line, SCP_FORMAT_STRING const char *format,...) SCP_FORMAT_STRING_ARGS(3
#define TREE_NODE_INCREMENT
#define OP_EXPLOSION_EFFECT
sexp_list_item * get_listing_opf_support_ship_class()
#define OP_DISTANCE_SUBSYSTEM
void stuff_special_arrival_anchor_name(char *buf, int iff_index, int restrict_to_players, int retail_format)
#define OPF_TURRET_TARGET_ORDER
void set_data(const char *str, int t=(SEXPT_STRING|SEXPT_VALID))
sexp_list_item * get_listing_opf_medal_name()
#define OP_PREVIOUS_GOAL_INCOMPLETE
#define SEXP_VARIABLE_SET
int get_item_index_to_var_index()
#define OPF_EXPLOSION_OPTION
#define OPF_ANIMATION_TYPE
#define OPF_BACKGROUND_BITMAP
GLenum GLsizei GLenum GLenum const GLvoid * image
#define MAX_AI_FLAG_NAMES
void free_node2(int node)
#define OP_PREVIOUS_EVENT_FALSE
sexp_list_item * get_listing_opf_subsystem_or_none(int parent_node, int arg_index)
#define OP_SET_VARIABLE_BY_INDEX
#define MAX_TRIGGER_ANIMATION_TYPES
void link_modified(int *ptr)
#define OP_COPY_VARIABLE_FROM_INDEX
#define OP_NONCAMPAIGN_FLAG
#define NUM_TURRET_ORDER_TYPES
void sexp_fred_modify_variable(const char *text, const char *var_name, int index, int type)
int get_subcategory(int sexp_id)
#define PERSONA_FLAG_WINGMAN
#define END_OF_LIST(head)
#define OP_SHIP_SUBSYS_GUARDIAN_THRESHOLD
int add_variable_data(const char *data, int type)
int alloc_sexp(char *text, int type, int subtype, int first, int rest)
SCP_vector< sexp_tree_item > tree_nodes
sexp_list_item * get_listing_opf_jump_nodes()
afx_msg void OnMouseMove(UINT nFlags, CPoint point)
#define BITMAP_NUMBERED_DATA
void delete_sexp_tree_variable(const char *var_name)
sexp_variable Sexp_variables[MAX_SEXP_VARIABLES]
const char * match_closest_operator(const char *str, int node)
void setup(CEdit *ptr=NULL)
int edit_label(HTREEITEM h)
#define SEXP_VARIABLE_NOT_USED
GLenum GLuint GLenum GLsizei const GLchar * message
#define OP_REVERSE_ROTATING_SUBSYSTEM
#define ST_ROOT_DELETABLE
UINT WPARAM LPARAM lParam
sexp_list_item * get_listing_opf_hud_gauge_name()
#define SEXP_FLAG_VARIABLE
afx_msg void OnBegindrag(NMHDR *pNMHDR, LRESULT *pResult)
int find_text(const char *text, int *find)
#define OPF_ARRIVAL_LOCATION
int get_index_sexp_variable_name(const char *text)
sexp_list_item * get_listing_opf_ship_point()
SOUNDTRACK_INFO Soundtracks[MAX_SOUNDTRACKS]
int get_default_value(sexp_list_item *item, char *text_buf, int op, int i)
char * textify_scancode(int code)
sexp_list_item * get_listing_opf_persona()
char Neb2_poof_filenames[MAX_NEB2_POOFS][MAX_FILENAME_LEN]
sexp_list_item * get_listing_opf_weapon_name()
GLenum GLuint GLenum GLsizei const GLchar * buf
void set_node(int index, int type, const char *text)
int query_operator_argument_type(int op, int argnum)
int get_docking_list(int model_index)
mission_goal Mission_goals[MAX_GOALS]
void get_post_process_effect_names(SCP_vector< SCP_string > &names)
SCP_list< waypoint_list > Waypoint_lists
sexp_list_item * get_listing_opf_priority()
int get_type(HTREEITEM h)
sexp_list_item * get_listing_opf_docker_point(int parent_node)
void right_clicked(int mode=0)
sexp_list_item * get_listing_opf_game_snds()
void verify_and_fix_arguments(int node)
#define OPF_AWACS_SUBSYSTEM
SCP_list< CJumpNode > Jump_nodes
#define OPF_ORDER_RECIPIENT
int get_tree_name_to_sexp_variable_index(const char *tree_name)
int get_variable_count(const char *var_name)
config_item Control_config[]
Stores the keyboard configuration.
#define OPF_FLEXIBLE_ARGUMENT
iff_info Iff_info[MAX_IFFS]
void sexp_variable_delete(int index)
void swap_roots(HTREEITEM one, HTREEITEM two)
sexp_list_item * get_listing_opf_adjust_audio_volume()
void get_variable_name_from_sexp_tree_node_text(const char *text, char *var_name)
sexp_list_item * get_listing_opf_background_bitmap()
int valid_cap_subsys_cargo_list(char *subsys)
int query_operator_return_type(int op)
SCP_vector< MMessage > Messages
sexp_list_item * get_listing_opf_departure_location()
void update_help(HTREEITEM h)
void sexp_mark_persistent(int n)
typedef int(SCP_EXT_CALLCONV *SCPDLL_PFVERSION)(SCPDLL_Version *)
#define OPF_SUBSYSTEM_TYPE
bool m_type_campaign_persistent
sexp_list_item * get_listing_opf_goal_name(int parent_node)
sexp_list_item * get_listing_opf_sun_bitmap()
sexp_list_item * get_listing_opf_iff()
GLdouble GLdouble GLdouble r
int Num_sound_environment_options
char * Departure_location_names[MAX_DEPARTURE_NAMES]
#define MAX_DEPARTURE_NAMES
#define OP_CAP_SUBSYS_CARGO_KNOWN_DELAY
int save_branch(int cur, int at_root=0)
char * Animation_type_names[MAX_TRIGGER_ANIMATION_TYPES]
void replace_operator(const char *op)
char Neb2_bitmap_filenames[MAX_NEB2_BITMAPS][MAX_FILENAME_LEN]
sexp_list_item * get_listing_opf_point()
void var_name_from_sexp_tree_text(char *var_name, const char *text)
virtual void build_tree()
sexp_list_item * get_listing_opf_skybox_flags()
sexp_list_item * get_listing_opf_ship_wing_point_or_none()
#define OP_SABOTAGE_SUBSYSTEM
#define OPF_SHIP_WING_SHIPONTEAM_POINT
event_editor * Event_editor_dlg
char * current_message_name(int index)
afx_msg void OnLButtonUp(UINT nFlags, CPoint point)
sexp_list_item * get_listing_opf_nebula_patterns()
#define SEXP_VARIABLE_BLOCK
int get_data_image(int node)
int gray_menu_tree(CMenu *base)
#define OPF_TARGET_PRIORITIES
int end_label_edit(TVITEMA &item)
sexp_list_item * get_listing_opf_nebula_storm_type()
mission_event Mission_events[MAX_MISSION_EVENTS]
#define OPF_SHIP_WING_POINT
afx_msg void OnKeydown(NMHDR *pNMHDR, LRESULT *pResult)
void insert_handler(int old, int node)
sexp_list_item * get_listing_opf_sound_environment()
sexp_list_item * get_listing_opf_ship_wing()
sprintf(buf,"(%f,%f,%f)", v3->xyz.x, v3->xyz.y, v3->xyz.z)
ai_flag_name Ai_flag_names[]
sexp_list_item * get_listing_opf_font()
sexp_list_item * get_listing_opf_ship_not_player()
sexp_list_item * get_listing_opf_explosion_option()
SCP_vector< storm_type > Storm_types
void sexp_unmark_persistent(int n)
#define OPF_NEBULA_PATTERN
sexp_list_item * get_listing_opf_huge_weapon()
sexp_list_item * get_listing_opf_skybox_model()
#define OP_TRIGGER_SUBMODEL_ANIMATION
#define OP_SET_SUBSYSTEM_STRNGTH
#define OP_MODIFY_VARIABLE
int query_sexp_ai_goal_valid(int sexp_ai_goal, int ship_num)
#define OPF_MESSAGE_OR_STRING
bool can_construe_as_integer(const char *text)
sexp_list_item * get_listing_opf_keypress()
void merge_operator(int node)
char * Turret_target_order_names[NUM_TURRET_ORDER_TYPES]
const char * help(int code)
#define OPF_SHIP_WING_WHOLETEAM
int category_of_subcategory(int subcategory_id)
int get_modify_variable_type(int parent)
sexp_list_item * get_listing_opf_subsystem(int parent_node, int arg_index)
char Mission_filename[80]
sexp_list_item * get_listing_opf_soundtrack_name()
int get_operator_index(const char *token)
sexp_list_item * get_listing_opf_post_effect()
#define ID_SEXP_TREE_MODIFY_VARIABLE
sexp_list_item * get_listing_opf_waypoint_path()
sexp_list_item * get_listing_opf_animation_type()
int add_data(const char *data, int type)
#define OPF_HUD_GAUGE_NAME
void expand_branch(HTREEITEM h)
sexp_list_item * get_listing_opf_arrival_location()
#define IDC_MINI_HELP_BOX
int query_restricted_opf_range(int opf)
HTREEITEM insert(LPCTSTR lpszItem, int image=BITMAP_ROOT, int sel_image=BITMAP_ROOT, HTREEITEM hParent=TVI_ROOT, HTREEITEM hInsertAfter=TVI_LAST)
char * Subsystem_types[SUBSYSTEM_MAX]
#define SEXP_ALL_TURRETS_STRING
sexp_list_item * get_listing_opf_ship_wing_wholeteam()
bool m_type_player_persistent
#define OPF_SOUND_ENVIRONMENT_OPTION
sexp_list_item * get_listing_opf_positive()
bool m_type_network_variable
#define OP_SHIP_TYPE_DESTROYED
int sexp_variable_count()
#define OP_SET_ARMOR_TYPE
comm_order Comm_orders[NUM_COMM_ORDER_ITEMS]
#define OP_PREVIOUS_EVENT_TRUE
#define OP_ADD_BACKGROUND_BITMAP
#define OPF_SKYBOX_MODEL_NAME
void replace_data(const char *data, int type)
char * Sound_environment_option[]
void insert_handler(int old, int node)
sexp_list_item * get_listing_opf_ssm_class()
sexp_list_item * get_listing_opf_bool(int parent_node=-1)
#define OPF_SUBSYSTEM_OR_NONE
sexp_list_item * get_listing_opf_ship_type()
afx_msg void OnLButtonDown(UINT nFlags, CPoint point)
int handler(int code, int node, char *str=NULL)
void move_branch(int source, int parent=-1)
int Num_explosion_options
flag_def_list Hud_gauge_types[]
SCP_string name
The name of the sound.
sexp_list_item * get_listing_opf_intel_name()
#define SEXP_SIM_HULL_STRING
sexp_list_item * get_listing_opf_ship_wing_point()
sexp_list_item * get_listing_opf_ai_order()
int wing_name_lookup(const char *name, int ignore_count)
void get_combined_variable_name(char *combined_name, const char *sexp_var_name)
GLuint const GLchar * name
#define ID_SEXP_TREE_ADD_VARIABLE
#define OPF_SHIP_WITH_BAY
sexp_list_item * get_listing_opf_armor_type()
bool m_type_network_variable
sexp_list_item * get_listing_opf_skill_level()
ship_flag_name Ship_flag_names[]
CMissionGoalsDlg * Goal_editor_dlg
#define OP_LOCK_ROTATING_SUBSYSTEM
#define OP_PREVIOUS_GOAL_FALSE
int get_category(int sexp_id)
SCP_vector< ship_effect > Ship_effects
#define IDB_CHAINED_DIRECTIVE
#define OPF_WEAPON_BANK_NUMBER
void add_data(const char *str, int t=(SEXPT_STRING|SEXPT_VALID))
sexp_list_item * get_listing_opf_hud_gauge()
sexp_list_item * get_listing_opf_turret_target_priorities()
int load_sub_tree(int index, bool valid, const char *text)
#define MB_ICONEXCLAMATION
void ensure_visible(int node)
#define OP_SET_SUPPORT_SHIP
bool ship_has_dock_bay(int shipnum)
#define OP_EVERY_TIME_ARGUMENT
void swap_handler(int node1, int node2)
sexp_list_item * get_listing_opf_wing()
#define OPF_JUMP_NODE_NAME
sexp_list_item * get_listing_opf_weapon_banks()
void add_operator(const char *op, HTREEITEM h=TVI_ROOT)
#define OP_REPAIR_SUBSYSTEM
void add_data_dup(const char *str, int t=(SEXPT_STRING|SEXPT_VALID))
void replace_variable_data(int var_idx, int type)
int ship_docking_valid(int docker, int dockee)
void free_node(int node, int cascade=0)
int get_sibling_place(int node)
sexp_help_struct Sexp_help[]
void set_data_dup(const char *str, int t=(SEXPT_STRING|SEXPT_VALID))
sexp_list_item * get_listing_opf_mission_name()
#define SUBSYSTEM_UNKNOWN
#define OPF_SOUNDTRACK_NAME
void read_mission_goal_list(int num)
CString m_cur_variable_name
sexp_tree * m_p_sexp_tree
int save_tree(int node=-1)
HTREEITEM handle(int node)
#define OP_GOOD_SECONDARY_TIME
#define OP_MISSILE_LOCKED
#define OP_FREE_ROTATING_SUBSYSTEM
#define SEXP_VARIABLE_CAMPAIGN_PERSISTENT
sexp_list_item * get_listing_opf_flexible_argument()
char subobj_name[MAX_NAME_LEN]
char * Docking_bay_list[MAX_DOCKS]
#define MAX_SHIP_FLAG_NAMES
SCP_vector< EFXREVERBPROPERTIES > EFX_presets
sexp_list_item * get_listing_opf_hud_elements()
int sexp_query_type_match(int opf, int opr)
capital warp hole closing
SCP_vector< ship_info > Ship_info
#define OP_STRING_SET_SUBSTRING
#define OP_TECH_ADD_INTEL
int MessageBox(HWND h, const char *s1, const char *s2, int i)
const char * Skill_level_names(int skill_level, int translate=1)
GLenum GLsizei GLenum GLenum const GLvoid * data
int find_ancestral_argument_number(int parent_op, int child_node)
The total number of defined control actions (or last define + 1)
sexp_list_item * get_listing_opf_ship_flags()
int get_operator_const(const char *token)
#define OP_STRING_CONCATENATE
SCP_vector< DamageTypeStruct > Damage_types
#define OPF_ARRIVAL_ANCHOR_ALL
void load_tree(int index, const char *deflt="true")
#define OPF_DEPARTURE_LOCATION
char * HUD_gauge_text[NUM_HUD_GAUGES]
#define OPF_SOUND_ENVIRONMENT
GLenum GLuint GLenum GLsizei length
sexp_list_item * get_listing_opf_ai_goal(int parent_node)
void add_or_replace_operator(int op, int replace_flag=0)
int node_error(int node, const char *msg, int *bypass)
GLsizei GLsizei GLchar * source
int handler(int code, int node, char *str=NULL)
sexp_list_item * get_listing_opf_nebula_poof()
team_data Team_data[MAX_TVT_TEAMS]
#define SEXP_VARIABLE_NUMBER
sexp_list_item * get_listing_opf_ship_wing_shiponteam_point()
void hilite_item(int node)
void get_variable_default_text_from_variable_text(char *text, char *default_text)
#define MAX_ARRIVAL_NAMES
sexp_list_item * get_listing_opf_team_colors()
#define SEXP_SHIELD_STRING
sexp_list_item * get_listing_opf_mission_moods()
capital warp hole opening
int ship_index[MAX_SHIPS_PER_WING]
sexp_list_item * get_listing_opf_cargo()
sexp_list_item * get_listing_opf_null()
void add_list(sexp_list_item *list)
SCP_map< SCP_string, team_color > Team_Colors
SCP_vector< SCP_string > Builtin_moods
int load_branch(int index, int parent)
char * Adjust_audio_options[]
#define OP_PREVIOUS_EVENT_INCOMPLETE
int Num_adjust_audio_options
int ship_name_lookup(const char *name, int inc_players)
int query_false(int node=-1)
bool m_type_campaign_persistent
obj_flag_name Object_flag_names[]
int get_ship_from_obj(int obj)
sexp_list_item * get_listing_opf_event_name(int parent_node)
#define OP_HUD_GAUGE_SET_ACTIVE
#define EMP_DEFAULT_INTENSITY
sexp_list_item * get_listing_opf_number()
#define IDB_ROOT_DIRECTIVE
#define OPF_NEBULA_STORM_TYPE
#define OPR_FLEXIBLE_ARGUMENT
#define OP_CHANGE_AI_CLASS
#define OP_ROTATING_SUBSYS_SET_TURN_TIME
int identify_arg_type(int node)
#define OP_HUD_ACTIVATE_GAUGE_TYPE
sexp_list_item * get_listing_opf_variable_names()
#define OP_PREVIOUS_GOAL_TRUE
void lcl_fred_replace_stuff(char *text, size_t max_len)
#define OP_STRING_GET_SUBSTRING
SCP_vector< ai_target_priority > Ai_tp_list
char iff_name[NAME_LENGTH]
virtual BOOL OnCommand(WPARAM wParam, LPARAM lParam)
#define OP_SCRIPT_EVAL_STRING
sexp_list_item * get_listing_opf_ai_class()
#define OPF_SHIP_NOT_PLAYER
#define OP_ADD_SUN_BITMAP
sexp_list_item * get_listing_opf_arrival_anchor_all()
#define SEXP_ALL_ENGINES_STRING
char ship_name[NAME_LENGTH]
sexp_list_item * get_listing_opf_subsys_or_generic(int parent_node, int arg_index)
#define OPF_SUBSYS_OR_GENERIC
sexp_list_item * get_listing_opf_ship_with_bay()
#define OP_HAS_DOCKED_DELAY
#define SEXP_VARIABLE_STRING
SCP_vector< ship_type_info > Ship_types
cmission missions[MAX_CAMPAIGN_MISSIONS]
void clear_tree(const char *op=NULL)
void modify_sexp_tree_variable(const char *old_name, int sexp_var_index)
#define MAX_SEXP_VARIABLES
#define OPF_SHIP_WING_POINT_OR_NONE
#define OP_AWACS_SET_RADIUS
#define IDR_MENU_EDIT_SEXP_TREE
int get_loadout_variable_count(int var_index)
#define SEXP_VARIABLE_PLAYER_PERSISTENT
char filename[MAX_FILENAME_LEN]
sexp_list_item * get_listing_opf_ship(int parent_node=-1)
sexp_list_item * get_listing_opf_ship_or_none()
sexp_list_item * get_listing_opf_subsystem_type(int parent_node)
char * Arrival_location_names[MAX_ARRIVAL_NAMES]
#define SEXP_ARGUMENT_STRING
void setup_selected(HTREEITEM h=NULL)