-body { background-color: black; }\r
-IMG { border-color: #222222; border: 0; }\r
-em { font-size: 11px; font-style: italic; font-weight: normal; color: #888888; }\r
-H1 { text-align: center; font-size: 15px; color: #2222AA; font-family: Geneva, Verdana, Helvetica, Arial, sans-serif; }\r
-H3 { text-align: center; font-size: 18px; color: #2222AA; font-family: Geneva, Verdana, Helvetica, Arial, sans-serif; }\r
-A { text-decoration: none; color: #6666DD; }\r
-A:HOVER { text-decoration: underline; color: #4444FF; }\r
-A:VISITED { text-decoration: none; color: #8888AA; }\r
-A.qindex { text-decoration: none; color: #6666DD; font-size: 11px; }\r
-A.qindex:HOVER { text-decoration: underline; color: #4444FF; font-size: 11px; }\r
-A.qindex:VISITED { text-decoration: none; color: #8888AA; font-size: 11px; }\r
-A.qindexRef { font-size: 11px; }\r
-A.el { text-decoration: none; font-weight: bold; }\r
-A.elRef { font-weight: bold; }\r
-A.code { text-decoration: none; font-weight: normal; color: #6666DD; }\r
-A.code:HOVER { text-decoration: underline; font-weight: normal; color: #4444FF; }\r
-A.code:VISITED { text-decoration: none; font-weight: normal; color: #8888AA; }\r
-A.codeRef { text-decoration: none; font-weight: normal; color: #6666DD; }\r
-A.codeRef:HOVER { text-decoration: underline; font-weight: normal; color: #4444FF; }\r
-A.codeRef:VISITED { text-decoration: none; font-weight: normal; color: #8888AA; }\r
-DL.el { margin-left: 2cm; width: 99%; }\r
-DIV.fragment { background-color: #FFFFFF; width: 99%; }\r
-DIV.ah { background-color: #AAAAAA; width: 99%; margin-bottom: 3; margin-top: 3; }\r
-TD.md { cellpadding: 0; background-color: #DDDDDD; border: 0; width: 99%; color: #222222; }\r
-DIV.groupHeader { margin-left: 16; margin-top: 12; margin-bottom: 6; font-weight: bold; color: #222222; }\r
-DIV.groupText { margin-left: 16; font-style: italic; font-size: smaller; }\r
-FONT.keyword { color: #0080A0; }\r
-FONT.keywordtype { color: #604020; }\r
-FONT.keywordflow { color: #E08000; }\r
-FONT.comment { color: #800000; }\r
-FONT.comment { color: #009900; text-decoration: italic; }\r
-FONT.preprocessor { color: #806020; }\r
-FONT.stringliteral{ color: #002080; }\r
-FONT.charliteral { color: #008080; }\r
+body { background-color: black; }
+IMG { border-color: #222222; border: 0; }
+em { font-size: 11px; font-style: italic; font-weight: normal; color: #888888; }
+H1 { text-align: center; font-size: 15px; color: #2222AA; font-family: Geneva, Verdana, Helvetica, Arial, sans-serif; }
+H3 { text-align: center; font-size: 18px; color: #2222AA; font-family: Geneva, Verdana, Helvetica, Arial, sans-serif; }
+A { text-decoration: none; color: #6666DD; }
+A:HOVER { text-decoration: underline; color: #4444FF; }
+A:VISITED { text-decoration: none; color: #8888AA; }
+A.qindex { text-decoration: none; color: #6666DD; font-size: 11px; }
+A.qindex:HOVER { text-decoration: underline; color: #4444FF; font-size: 11px; }
+A.qindex:VISITED { text-decoration: none; color: #8888AA; font-size: 11px; }
+A.qindexRef { font-size: 11px; }
+A.el { text-decoration: none; font-weight: bold; }
+A.elRef { font-weight: bold; }
+A.code { text-decoration: none; font-weight: normal; color: #6666DD; }
+A.code:HOVER { text-decoration: underline; font-weight: normal; color: #4444FF; }
+A.code:VISITED { text-decoration: none; font-weight: normal; color: #8888AA; }
+A.codeRef { text-decoration: none; font-weight: normal; color: #6666DD; }
+A.codeRef:HOVER { text-decoration: underline; font-weight: normal; color: #4444FF; }
+A.codeRef:VISITED { text-decoration: none; font-weight: normal; color: #8888AA; }
+DL.el { margin-left: 2cm; width: 99%; }
+DIV.fragment { background-color: #FFFFFF; width: 99%; }
+DIV.ah { background-color: #AAAAAA; width: 99%; margin-bottom: 3; margin-top: 3; }
+TD.md { cellpadding: 0; background-color: #DDDDDD; border: 0; width: 99%; color: #222222; }
+DIV.groupHeader { margin-left: 16; margin-top: 12; margin-bottom: 6; font-weight: bold; color: #222222; }
+DIV.groupText { margin-left: 16; font-style: italic; font-size: smaller; }
+FONT.keyword { color: #0080A0; }
+FONT.keywordtype { color: #604020; }
+FONT.keywordflow { color: #E08000; }
+FONT.comment { color: #800000; }
+FONT.comment { color: #009900; text-decoration: italic; }
+FONT.preprocessor { color: #806020; }
+FONT.stringliteral{ color: #002080; }
+FONT.charliteral { color: #008080; }
-body { background-color: black; }\r
-IMG { border-color: #222222; border: 1; }\r
-em { font-size: 11px; font-style: italic; font-weight: normal; color: #888888; }\r
-H1 { text-align: center; font-size: 15px; color: #2222AA; font-family: Geneva, Verdana, Helvetica, Arial, sans-serif; }\r
-H3 { text-align: center; font-size: 18px; color: #2222AA; font-family: Geneva, Verdana, Helvetica, Arial, sans-serif; }\r
-A { text-decoration: none; color: #6666DD; }\r
-A:HOVER { text-decoration: underline; color: #4444FF; }\r
-A:VISITED { text-decoration: none; color: #8888AA; }\r
-A.qindex { text-decoration: none; color: #6666DD; font-size: 11px; }\r
-A.qindex:HOVER { text-decoration: underline; color: #4444FF; font-size: 11px; }\r
-A.qindex:VISITED { text-decoration: none; color: #8888AA; font-size: 11px; }\r
-A.qindexRef { font-size: 11px; }\r
-A.el { text-decoration: none; font-weight: bold; }\r
-A.elRef { font-weight: bold; }\r
-A.code { text-decoration: none; font-weight: normal; color: #6666DD; }\r
-A.code:HOVER { text-decoration: underline; font-weight: normal; color: #4444FF; }\r
-A.code:VISITED { text-decoration: none; font-weight: normal; color: #8888AA; }\r
-A.codeRef { text-decoration: none; font-weight: normal; color: #6666DD; }\r
-A.codeRef:HOVER { text-decoration: underline; font-weight: normal; color: #4444FF; }\r
-A.codeRef:VISITED { text-decoration: none; font-weight: normal; color: #8888AA; }\r
-DL.el { margin-left: 2cm; width: 99%; }\r
-DIV.fragment { background-color: #FFFFFF; width: 99%; }\r
-DIV.ah { background-color: #AAAAAA; width: 99%; margin-bottom: 3; margin-top: 3; }\r
-TD.md { cellpadding: 2; background-color: #DDDDDD; border: 1; width: 99%; color: #222222; }\r
-DIV.groupHeader { margin-left: 16; margin-top: 12; margin-bottom: 6; font-weight: bold; color: #222222; }\r
-DIV.groupText { margin-left: 16; font-style: italic; font-size: smaller; }\r
-FONT.keyword { color: #0080A0; }\r
-FONT.keywordtype { color: #604020; }\r
-FONT.keywordflow { color: #E08000; }\r
-FONT.comment { color: #800000; }\r
-FONT.comment { color: #009900; text-decoration: italic; }\r
-FONT.preprocessor { color: #806020; }\r
-FONT.stringliteral{ color: #002080; }\r
-FONT.charliteral { color: #008080; }\r
-\r
+body { background-color: black; }
+IMG { border-color: #222222; border: 1; }
+em { font-size: 11px; font-style: italic; font-weight: normal; color: #888888; }
+H1 { text-align: center; font-size: 15px; color: #2222AA; font-family: Geneva, Verdana, Helvetica, Arial, sans-serif; }
+H3 { text-align: center; font-size: 18px; color: #2222AA; font-family: Geneva, Verdana, Helvetica, Arial, sans-serif; }
+A { text-decoration: none; color: #6666DD; }
+A:HOVER { text-decoration: underline; color: #4444FF; }
+A:VISITED { text-decoration: none; color: #8888AA; }
+A.qindex { text-decoration: none; color: #6666DD; font-size: 11px; }
+A.qindex:HOVER { text-decoration: underline; color: #4444FF; font-size: 11px; }
+A.qindex:VISITED { text-decoration: none; color: #8888AA; font-size: 11px; }
+A.qindexRef { font-size: 11px; }
+A.el { text-decoration: none; font-weight: bold; }
+A.elRef { font-weight: bold; }
+A.code { text-decoration: none; font-weight: normal; color: #6666DD; }
+A.code:HOVER { text-decoration: underline; font-weight: normal; color: #4444FF; }
+A.code:VISITED { text-decoration: none; font-weight: normal; color: #8888AA; }
+A.codeRef { text-decoration: none; font-weight: normal; color: #6666DD; }
+A.codeRef:HOVER { text-decoration: underline; font-weight: normal; color: #4444FF; }
+A.codeRef:VISITED { text-decoration: none; font-weight: normal; color: #8888AA; }
+DL.el { margin-left: 2cm; width: 99%; }
+DIV.fragment { background-color: #FFFFFF; width: 99%; }
+DIV.ah { background-color: #AAAAAA; width: 99%; margin-bottom: 3; margin-top: 3; }
+TD.md { cellpadding: 2; background-color: #DDDDDD; border: 1; width: 99%; color: #222222; }
+DIV.groupHeader { margin-left: 16; margin-top: 12; margin-bottom: 6; font-weight: bold; color: #222222; }
+DIV.groupText { margin-left: 16; font-style: italic; font-size: smaller; }
+FONT.keyword { color: #0080A0; }
+FONT.keywordtype { color: #604020; }
+FONT.keywordflow { color: #E08000; }
+FONT.comment { color: #800000; }
+FONT.comment { color: #009900; text-decoration: italic; }
+FONT.preprocessor { color: #806020; }
+FONT.stringliteral{ color: #002080; }
+FONT.charliteral { color: #008080; }
+
common/trigger
common/weapclip
liquid
-fog
\ No newline at end of file
+fog
team_icon/intruders_blue
team_icon/crusaders_blue
team_icon/pagans_blue
-team_icon/stroggs_blue
\ No newline at end of file
+team_icon/stroggs_blue
team_icon/intruders_red
team_icon/crusaders_red
team_icon/pagans_red
-team_icon/stroggs_red
\ No newline at end of file
+team_icon/stroggs_red
base_support/support1shiny
base_support/support2rust
base_support/wplat1_1
-base_support/plate2_5
\ No newline at end of file
+base_support/plate2_5
gothic_door/door02_j
gothic_door/door02_j3
gothic_door/door02_j4
-gothic_door/door02_k2b
\ No newline at end of file
+gothic_door/door02_k2b
"pitch" "-5" "5"
"yaw" "0" "360"
"scale" "1" "1.3"
-}
\ No newline at end of file
+}
Thx to RKone, for improving my q3w sig.
Azr for giving me ops in #qeradiant, k3wl :]
Everyone at the Quake3World Forums, I think of you all as my little worshippers :P
- id Software, of course.
\ No newline at end of file
+ id Software, of course.
this writing, I do not know all the details.
Geoffrey DeWan
-gdewan@prairienet.org
\ No newline at end of file
+gdewan@prairienet.org
print OFILE;
}
close(OFILE);
-close(FILE);
\ No newline at end of file
+close(FILE);
print OFILE;
}
close(OFILE);
-close(FILE);
\ No newline at end of file
+close(FILE);
-> both in Desktop_p_leaf.map, contributed by y_lavanant@vistech.ie
Mesh lightmap miscount
-(no test map)
\ No newline at end of file
+(no test map)
-body { font: 12pt "Times New Roman";\r
- margin-left: 5mm;\r
- margin-right: 5mm;\r
- text-align: justify;\r
- background: #ffffff;\r
- color: #000000 }\r
-h1 { font: bold 24pt Arial, Helvetica }\r
-h2 { font: bold italic 18pt Arial, Helvetica }\r
-.subheading { font: bold 16pt Arial, Helvetica }\r
-:link {color: blue;\r
- text-decoration: none; }\r
-:visited {color: purple;\r
- text-decoration: none; }\r
-h6 { font: 10pt "Times New Roman" }\r
-.MsoToc2 { font: bold small-caps 12pt "Times New Roman" }\r
-.MsoTitle { text-align:center;\r
- font: bold 24pt "BankGothic Md BT";\r
- letter-spacing:2.5pt }\r
-.heading { font: italic 10pt "Times New Roman" }\r
-.subcontents { font: 10pt "Times New Roman" }\r
-.tip { font: 10pt "Comic Sans MS" }\r
-.type { font: 10pt "Courier New" }\r
-.menu { font: 10pt Arial, Helvetica }
\ No newline at end of file
+body { font: 12pt "Times New Roman";
+ margin-left: 5mm;
+ margin-right: 5mm;
+ text-align: justify;
+ background: #ffffff;
+ color: #000000 }
+h1 { font: bold 24pt Arial, Helvetica }
+h2 { font: bold italic 18pt Arial, Helvetica }
+.subheading { font: bold 16pt Arial, Helvetica }
+:link {color: blue;
+ text-decoration: none; }
+:visited {color: purple;
+ text-decoration: none; }
+h6 { font: 10pt "Times New Roman" }
+.MsoToc2 { font: bold small-caps 12pt "Times New Roman" }
+.MsoTitle { text-align:center;
+ font: bold 24pt "BankGothic Md BT";
+ letter-spacing:2.5pt }
+.heading { font: italic 10pt "Times New Roman" }
+.subcontents { font: 10pt "Times New Roman" }
+.tip { font: 10pt "Comic Sans MS" }
+.type { font: 10pt "Courier New" }
+.menu { font: 10pt Arial, Helvetica }
-body { font: 12pt "Times New Roman";\r
- margin-left: 5mm;\r
- margin-right: 5mm;\r
- text-align: justify;\r
- background: #ffffff;\r
- color: #000000 }\r
-h1 { font: bold 24pt Arial, Helvetica }\r
-h2 { font: bold italic 18pt Arial, Helvetica }\r
-.subheading { font: bold 16pt Arial, Helvetica }\r
-:link {color: blue;\r
- text-decoration: none; }\r
-:visited {color: purple;\r
- text-decoration: none; }\r
-h6 { font: 10pt "Times New Roman" }\r
-.MsoToc2 { font: bold small-caps 12pt "Times New Roman" }\r
-.MsoTitle { text-align:center;\r
- font: bold 24pt "BankGothic Md BT";\r
- letter-spacing:2.5pt }\r
-.heading { font: italic 10pt "Times New Roman" }\r
-.subcontents { font: 10pt "Times New Roman" }\r
-.tip { font: 10pt "Comic Sans MS" }\r
-.type { font: 10pt "Courier New" }\r
-.menu { font: 10pt Arial, Helvetica }
\ No newline at end of file
+body { font: 12pt "Times New Roman";
+ margin-left: 5mm;
+ margin-right: 5mm;
+ text-align: justify;
+ background: #ffffff;
+ color: #000000 }
+h1 { font: bold 24pt Arial, Helvetica }
+h2 { font: bold italic 18pt Arial, Helvetica }
+.subheading { font: bold 16pt Arial, Helvetica }
+:link {color: blue;
+ text-decoration: none; }
+:visited {color: purple;
+ text-decoration: none; }
+h6 { font: 10pt "Times New Roman" }
+.MsoToc2 { font: bold small-caps 12pt "Times New Roman" }
+.MsoTitle { text-align:center;
+ font: bold 24pt "BankGothic Md BT";
+ letter-spacing:2.5pt }
+.heading { font: italic 10pt "Times New Roman" }
+.subcontents { font: 10pt "Times New Roman" }
+.tip { font: 10pt "Comic Sans MS" }
+.type { font: 10pt "Courier New" }
+.menu { font: 10pt Arial, Helvetica }
-body { font: 12pt "Times New Roman";\r
- margin-left: 5mm;\r
- margin-right: 5mm;\r
- text-align: justify;\r
- background: #ffffff;\r
- color: #000000 }\r
-h1 { font: bold 24pt Arial, Helvetica }\r
-h2 { font: bold italic 18pt Arial, Helvetica }\r
-.subheading { font: bold 16pt Arial, Helvetica }\r
-:link {color: blue;\r
- text-decoration: none; }\r
-:visited {color: purple;\r
- text-decoration: none; }\r
-h6 { font: 10pt "Times New Roman" }\r
-.MsoToc2 { font: bold small-caps 12pt "Times New Roman" }\r
-.MsoTitle { text-align:center;\r
- font: bold 24pt "BankGothic Md BT";\r
- letter-spacing:2.5pt }\r
-.heading { font: italic 10pt "Times New Roman" }\r
-.subcontents { font: 10pt "Times New Roman" }\r
-.tip { font: 10pt "Comic Sans MS" }\r
-.type { font: 10pt "Courier New" }\r
-.menu { font: 10pt Arial, Helvetica }
\ No newline at end of file
+body { font: 12pt "Times New Roman";
+ margin-left: 5mm;
+ margin-right: 5mm;
+ text-align: justify;
+ background: #ffffff;
+ color: #000000 }
+h1 { font: bold 24pt Arial, Helvetica }
+h2 { font: bold italic 18pt Arial, Helvetica }
+.subheading { font: bold 16pt Arial, Helvetica }
+:link {color: blue;
+ text-decoration: none; }
+:visited {color: purple;
+ text-decoration: none; }
+h6 { font: 10pt "Times New Roman" }
+.MsoToc2 { font: bold small-caps 12pt "Times New Roman" }
+.MsoTitle { text-align:center;
+ font: bold 24pt "BankGothic Md BT";
+ letter-spacing:2.5pt }
+.heading { font: italic 10pt "Times New Roman" }
+.subcontents { font: 10pt "Times New Roman" }
+.tip { font: 10pt "Comic Sans MS" }
+.type { font: 10pt "Courier New" }
+.menu { font: 10pt Arial, Helvetica }
#endif // WIN32
-#endif // __MULTIMON_H
\ No newline at end of file
+#endif // __MULTIMON_H
-------------
the config info needs to go down to the clients too
-for instance, mapxml loaded for q3map or radiant, doesn't rely on the same major?
\ No newline at end of file
+for instance, mapxml loaded for q3map or radiant, doesn't rely on the same major?
over to synapse before init? Possibly .. we'll just pass a NULL config node ptr
Add the config file path to CSynpaseServer::Initialize, pass the loaded XML file to
-the clients. Do we need to wrap in an object with some convenience functions?
\ No newline at end of file
+the clients. Do we need to wrap in an object with some convenience functions?
EXPORTS
; Explicit exports can go here
- Synapse_EnumerateInterfaces @1
\ No newline at end of file
+ Synapse_EnumerateInterfaces @1
int refCount;
aabb_t m_BBox;
IShader *m_pShader;
-};
\ No newline at end of file
+};
- TODO: add hooks with the selected face and selected patch data. tell the plugin when selected face
or selected patch has changed.
the hooks should use a generic interface inside Radiant for "observers"
-- TODO: add other usefull texturing tools, if designers come up with good ideas
\ No newline at end of file
+- TODO: add other usefull texturing tools, if designers come up with good ideas
{"CSGMerge", 'U', 0x04, ID_SELECTION_CSGMERGE, "menu_selection_csgmerge"},
{"CSGSubtract", 'U', 0x01, ID_SELECTION_CSGSUBTRACT, "menu_selection_csgsubstract"},
// {"ViewGroups", 'G', 0x00, ID_VIEW_GROUPS, "menu_view_groups"}, (temporary disabled)
+ {"SelectFuncGroup", 'G', 0x00, ID_SELECT_FUNC_GROUP, "menu_select_func_group"},
{"HideSelected", 'H', 0x00, ID_VIEW_HIDESHOW_HIDESELECTED, "menu_view_hideshow_hideselected"},
{"ShowHidden", 'H', 0x01, ID_VIEW_HIDESHOW_SHOWHIDDEN, "menu_view_hideshow_showhidden"},
{"BendMode", 'B', 0x00, ID_PATCH_BEND, "menu_patch_bend"},
case ID_TOGGLECONSOLE: g_pParentWnd->OnToggleconsole (); break;
case ID_VIEW_ENTITY: g_pParentWnd->OnViewEntity (); break;
case ID_VIEW_GROUPS: g_pParentWnd->OnViewGroups (); break;
+ case ID_SELECT_FUNC_GROUP: g_pParentWnd->OnSelectFuncGroup(); break;
case ID_TOGGLEVIEW: g_pParentWnd->OnToggleview (); break;
case ID_TOGGLEVIEW_YZ: g_pParentWnd->OnToggleviewYz (); break;
case ID_TOGGLEVIEW_XZ: g_pParentWnd->OnToggleviewXz (); break;
GTK_SIGNAL_FUNC (HandleCommand), ID_SELECTION_SELECTPARTIALTALL);
create_menu_item_with_mnemonic (menu_in_menu, "Select _Inside",
GTK_SIGNAL_FUNC (HandleCommand), ID_SELECTION_SELECTINSIDE);
+ create_menu_item_with_mnemonic (menu_in_menu, "Select Func _Group", GTK_SIGNAL_FUNC (HandleCommand), ID_SELECT_FUNC_GROUP);
#ifndef QUAKE3
create_menu_item_with_mnemonic (menu_in_menu, "Nudge Left",
GTK_SIGNAL_FUNC (HandleCommand), ID_SELECTION_SELECT_NUDGELEFT);
}
}
+void MainFrame::OnSelectFuncGroup()
+{
+ // check to see if the selected brush is part of a func group
+ // if it is, deselect everything and reselect the next brush
+ // in the group
+ brush_t *b2, *b = selected_brushes.next;
+ entity_t * e;
+ if (b != &selected_brushes)
+ {
+ if (strcmpi(b->owner->eclass->name, "worldspawn") != 0)
+ {
+ e = b->owner;
+ Select_SelectGroup(e);
+ }
+ }
+}
+
void MainFrame::OnCameraForward(bool keydown)
{
if (g_PrefsDlg.m_bCamDiscrete && (m_pCamWnd && !m_pCamWnd->m_bFreeMove) )
#define ID_COLORS_MINOR_ALT 40230
#define ID_COLORS_MAJOR_ALT 40231
+#define ID_SELECT_FUNC_GROUP 40233
+
// those must have their own ID chunk ID_GRID_025 <= ID_GRID <= ID_GRID_256
#define ID_GRID_025 40300
#define ID_GRID_05 40301
void OnFilterPaths();
void OnFilterClusterportals();
void OnFilterLightgrid();
+ void OnSelectFuncGroup();
private:
EViewStyle m_nCurrentStyle;
Sys_UpdateWindows (W_ALL);
}
+void Select_SelectGroup(entity_t* group)
+{
+ brush_t* b;
+ //brush_t* next;
+
+ Undo_Start ("select func group");
+ Undo_AddBrushList (&selected_brushes);
+ Undo_End();
+
+ Select_Deselect();
+
+ b = &group->brushes;
+
+ do
+ {
+ b = b->onext;
+ Brush_RemoveFromList(b);
+ Brush_AddToList(b, &selected_brushes);
+ } while( b->onext != &group->brushes );
+
+ Sys_UpdateWindows (W_ALL);
+}
+
+
void Select_Ungroup(void)
{
int numselectedgroups;
void Select_Reselect();
void Select_FitTexture(int nHeight = 1, int nWidth = 1);
+void Select_SelectGroup(entity_t* group);
+
// absolute texture coordinates
// TTimo NOTE: this is stuff for old brushes format and rotation texture lock .. sort of in-between with bush primitives
void ComputeAbsolute(face_t* f, vec3_t& p1, vec3_t& p2, vec3_t& p3);
{-0.425325f, 0.688191f, -0.587785f},
{-0.425325f, -0.688191f, -0.587785f},
{-0.587785f, -0.425325f, -0.688191f},
- {-0.688191f, -0.587785f, -0.425325f},
\ No newline at end of file
+ {-0.688191f, -0.587785f, -0.425325f},
------------------------------------------------------------------------------- */
+/*
+ProcessAdvertisements()
+copies advertisement info into the BSP structures
+*/
+
+static void ProcessAdvertisements( void ) {
+ int i;
+ const char* className;
+ const char* modelKey;
+ int modelNum;
+ bspModel_t* adModel;
+ bspDrawSurface_t* adSurface;
+
+ Sys_FPrintf( SYS_VRB, "--- ProcessAdvertisements ---\n" );
+
+ for( i = 0; i < numEntities; i++ ) {
+
+ /* is an advertisement? */
+ className = ValueForKey( &entities[ i ], "classname" );
+
+ if( !Q_stricmp( "advertisement", className ) ) {
+
+ modelKey = ValueForKey( &entities[ i ], "model" );
+
+ if( strlen( modelKey ) > MAX_QPATH - 1 ) {
+ Error( "Model Key for entity exceeds ad struct string length." );
+ } else {
+ if( numBSPAds < MAX_MAP_ADVERTISEMENTS ) {
+ bspAds[numBSPAds].cellId = IntForKey( &entities[ i ], "cellId" );
+ strncpy( bspAds[numBSPAds].model, modelKey, sizeof( bspAds[numBSPAds].model ) );
+
+ modelKey++;
+ modelNum = atoi( modelKey );
+ adModel = &bspModels[modelNum];
+
+ if( adModel->numBSPSurfaces != 1 ) {
+ Error( "Ad cell id %d has more than one surface.", bspAds[numBSPAds].cellId );
+ }
+
+ adSurface = &bspDrawSurfaces[adModel->firstBSPSurface];
+
+ // store the normal for use at run time.. all ad verts are assumed to
+ // have identical normals (because they should be a simple rectangle)
+ // so just use the first vert's normal
+ VectorCopy( bspDrawVerts[adSurface->firstVert].normal, bspAds[numBSPAds].normal );
+
+ // store the ad quad for quick use at run time
+ if( adSurface->surfaceType == MST_PATCH ) {
+ int v0 = adSurface->firstVert + adSurface->patchHeight - 1;
+ int v1 = adSurface->firstVert + adSurface->numVerts - 1;
+ int v2 = adSurface->firstVert + adSurface->numVerts - adSurface->patchWidth;
+ int v3 = adSurface->firstVert;
+ VectorCopy( bspDrawVerts[v0].xyz, bspAds[numBSPAds].rect[0] );
+ VectorCopy( bspDrawVerts[v1].xyz, bspAds[numBSPAds].rect[1] );
+ VectorCopy( bspDrawVerts[v2].xyz, bspAds[numBSPAds].rect[2] );
+ VectorCopy( bspDrawVerts[v3].xyz, bspAds[numBSPAds].rect[3] );
+ } else {
+ Error( "Ad cell %d has an unsupported Ad Surface type.", bspAds[numBSPAds].cellId );
+ }
+
+ numBSPAds++;
+ } else {
+ Error( "Maximum number of map advertisements exceeded." );
+ }
+ }
+ }
+ }
+
+ Sys_FPrintf( SYS_VRB, "%9d in-game advertisements\n", numBSPAds );
+}
/*
SetCloneModelNumbers() - ydnar
/* set light styles from targetted light entities */
SetLightStyles();
+ /* process in game advertisements */
+ ProcessAdvertisements();
+
/* finish and write bsp */
EndBSPFile();
bspFogs[ i ].brushNum = LittleLong( bspFogs[ i ].brushNum );
bspFogs[ i ].visibleSide = LittleLong( bspFogs[ i ].visibleSide );
}
+
+ /* advertisements */
+ for( i = 0; i < numBSPAds; i++ )
+ {
+ bspAds[ i ].cellId = LittleLong( bspAds[ i ].cellId );
+ bspAds[ i ].normal[ 0 ] = LittleFloat( bspAds[ i ].normal[ 0 ] );
+ bspAds[ i ].normal[ 1 ] = LittleFloat( bspAds[ i ].normal[ 1 ] );
+ bspAds[ i ].normal[ 2 ] = LittleFloat( bspAds[ i ].normal[ 2 ] );
+
+ for( j = 0; j < 4; j++ )
+ {
+ bspAds[ i ].rect[j][ 0 ] = LittleFloat( bspAds[ i ].rect[j][ 0 ] );
+ bspAds[ i ].rect[j][ 1 ] = LittleFloat( bspAds[ i ].rect[j][ 1 ] );
+ bspAds[ i ].rect[j][ 2 ] = LittleFloat( bspAds[ i ].rect[j][ 2 ] );
+ }
+
+ //bspAds[ i ].model[ MAX_QPATH ];
+ }
}
#define LUMP_LIGHTMAPS 14
#define LUMP_LIGHTGRID 15
#define LUMP_VISIBILITY 16
-#define HEADER_LUMPS 17
+#define LUMP_ADVERTISEMENTS 17
+#define HEADER_LUMPS 18
/* types */
free( buffer );
}
-
-
/*
LoadIBSPFile()
loads a quake 3 bsp file into memory
bspEntDataSize = CopyLump( (bspHeader_t*) header, LUMP_ENTITIES, bspEntData, 1);
CopyLightGridLumps( header );
-
+
+ /* advertisements */
+ numBSPAds = CopyLump( (bspHeader_t*) header, LUMP_ADVERTISEMENTS, bspAds, sizeof( bspAdvertisement_t ) );
+
/* free the file buffer */
free( header );
}
AddLump( file, (bspHeader_t*) header, LUMP_ENTITIES, bspEntData, bspEntDataSize );
AddLump( file, (bspHeader_t*) header, LUMP_FOGS, bspFogs, numBSPFogs * sizeof( bspFog_t ) );
AddLump( file, (bspHeader_t*) header, LUMP_DRAWINDEXES, bspDrawIndexes, numBSPDrawIndexes * sizeof( bspDrawIndexes[ 0 ] ) );
-
+
+ /* advertisements */
+ AddLump( file, (bspHeader_t*) header, LUMP_ADVERTISEMENTS, bspAds, numBSPAds * sizeof( bspAdvertisement_t ) );
+
/* emit bsp size */
size = ftell( file );
Sys_Printf( "Wrote %.1f MB (%d bytes)\n", (float) size / (1024 * 1024), size );
qfalse, /* flares */
"flareshader", /* default flare shader */
"IBSP", /* bsp file prefix */
- 46, /* bsp file version */
+ 47, /* bsp file version */
LoadIBSPFile, /* bsp load function */
WriteIBSPFile, /* bsp write function */
{ "nodlight", 0, 0, Q_SURF_NODLIGHT, 0, 0, 0 },
{ "dust", 0, 0, Q_SURF_DUST, 0, 0, 0 },
-
/* null */
{ NULL, 0, 0, 0, 0, 0, 0 }
}
if( light->style < LS_NORMAL || light->style >= LS_NONE )
Error( "Invalid lightstyle (%d) on entity %d", light->style, i );
+ if( light->style != LS_NORMAL ) {
+ Sys_FPrintf (SYS_WRN, "WARNING: Styled light found targeting %s\n **", target );
+ }
+
/* set light intensity */
intensity = FloatForKey( e, "_light" );
if( intensity == 0.0f )
}
}
}
-}
\ No newline at end of file
+}
float len;
mesh_t out;
- static bspDrawVert_t expand[MAX_EXPANDED_AXIS][MAX_EXPANDED_AXIS];
+ /* ydnar: static for os x */
+ MAC_STATIC bspDrawVert_t expand[MAX_EXPANDED_AXIS][MAX_EXPANDED_AXIS];
out.width = in.width;
bspDrawVert_t prev, next, mid;
mesh_t out;
- static bspDrawVert_t expand[ MAX_EXPANDED_AXIS ][ MAX_EXPANDED_AXIS ];
+ /* ydnar: static for os x */
+ MAC_STATIC bspDrawVert_t expand[ MAX_EXPANDED_AXIS ][ MAX_EXPANDED_AXIS ];
/* initial setup */
vec3_t proj, dir;
mesh_t out;
- static bspDrawVert_t expand[MAX_EXPANDED_AXIS][MAX_EXPANDED_AXIS];
+ /* ydnar: static for os x */
+ MAC_STATIC bspDrawVert_t expand[MAX_EXPANDED_AXIS][MAX_EXPANDED_AXIS];
out.width = in->width;
vec3_t dir;
float length, maxLength, amount;
mesh_t out;
-
- static bspDrawVert_t expand[MAX_EXPANDED_AXIS][MAX_EXPANDED_AXIS];
+ bspDrawVert_t expand[MAX_EXPANDED_AXIS][MAX_EXPANDED_AXIS];
out.width = in->width;
out.height = in->height;
#define C_ANTIPORTAL 0x00004000 /* like hint, but doesn't generate portals */
#define C_SKIP 0x00008000 /* like hint, but skips this face (doesn't split bsp) */
#define C_NOMARKS 0x00010000 /* no decals */
-
#define C_DETAIL 0x08000000 /* THIS MUST BE THE SAME AS IN RADIANT! */
#define MAX_MAP_DRAW_VERTS 0x80000
#define MAX_MAP_DRAW_INDEXES 0x80000
+#define MAX_MAP_ADVERTISEMENTS 30
/* key / value pair sizes in the entities lump */
#define MAX_KEY 32
bspDrawSurface_t;
+/* advertisements */
+typedef struct {
+ int cellId;
+ vec3_t normal;
+ vec3_t rect[4];
+ char model[ MAX_QPATH ];
+} bspAdvertisement_t;
+
/* -------------------------------------------------------------------------------
Q_EXTERN int numBSPFogs Q_ASSIGN( 0 );
Q_EXTERN bspFog_t bspFogs[ MAX_MAP_FOGS ];
+Q_EXTERN int numBSPAds Q_ASSIGN( 0 );
+Q_EXTERN bspAdvertisement_t bspAds[ MAX_MAP_ADVERTISEMENTS ];
/* end marker */
AdditionalDependencies="md5lib.lib ddslib.lib l_net.lib mathlib.lib picomodel.lib jpeg6.lib libxml2.lib libpng.lib glib-2.0.lib gobject-2.0.lib Wsock32.lib"\r
AdditionalLibraryDirectories=""$(SolutionDir)\..\libxml2\lib";"$(SolutionDir)\..\gtk2\lib";"$(SolutionDir)\build\$(ConfigurationName)\libs""\r
GenerateDebugInformation="true"\r
+ StackReserveSize="2097152"\r
+ StackCommitSize="2097152"\r
TargetMachine="1"\r
/>\r
<Tool\r
/>\r
<Tool\r
Name="VCPostBuildEventTool"\r
+ CommandLine="copy "$(TargetPath)" C:\alienbrainWork\QuakeZero\radiant\$(TargetFileName)"\r
/>\r
</Configuration>\r
<Configuration\r
AdditionalDependencies="md5lib.lib ddslib.lib l_net.lib mathlib.lib picomodel.lib jpeg6.lib libxml2.lib libpng.lib glib-2.0.lib gobject-2.0.lib Wsock32.lib"\r
AdditionalLibraryDirectories=""$(SolutionDir)\..\libxml2\lib";"$(SolutionDir)\..\gtk2\lib";"$(SolutionDir)\build\$(ConfigurationName)\libs""\r
GenerateDebugInformation="true"\r
+ StackReserveSize="2097152"\r
+ StackCommitSize="2097152"\r
OptimizeReferences="2"\r
EnableCOMDATFolding="2"\r
TargetMachine="1"\r
/>\r
<Tool\r
Name="VCPostBuildEventTool"\r
+ CommandLine="copy "$(TargetPath)" C:\alienbrainWork\QuakeZero\radiant\$(TargetFileName)"\r
/>\r
</Configuration>\r
</Configurations>\r
/* print it to the file */
fprintf( file, "%s%s\n", si->shader, si->shaderText );
- //% Sys_Printf( "%s%s\n", si->shader, si->shaderText ); /* FIXME: remove debugging code */
+ //Sys_Printf( "%s%s\n", si->shader, si->shaderText ); /* FIXME: remove debugging code */
Sys_FPrintf( SYS_VRB, "." );
}
/* close the shader */
+ fflush( file );
fclose( file );
Sys_FPrintf( SYS_VRB, "\n" );
char path[ 1024 ];
+ Sys_FPrintf( SYS_VRB, "--- EndBSPFile ---\n" );
+
EmitPlanes();
numBSPEntities = numEntities;