mirror of
https://github.com/sfall-team/sfall.git
synced 2026-07-27 16:52:34 -07:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7500e6b637 | ||
|
|
560eead694 | ||
|
|
45baeff397 | ||
|
|
2df1dfbadc | ||
|
|
cbe31e845c | ||
|
|
2e2d3f7946 | ||
|
|
854adc2afc | ||
|
|
0c8794661c | ||
|
|
ceb55cdfa9 | ||
|
|
6791b15af1 | ||
|
|
ff4f5d7e73 | ||
|
|
564c48354a | ||
|
|
4232be088c | ||
|
|
9ec8a12288 | ||
|
|
b97c5fd65d | ||
|
|
5c377ad3df | ||
|
|
3c47288e70 | ||
|
|
5d7ee90f71 | ||
|
|
6193afff11 | ||
|
|
b4800361e6 | ||
|
|
0debe89a27 | ||
|
|
aae34d5d82 | ||
|
|
26e814581f | ||
|
|
a62a4d6911 | ||
|
|
20746abba2 | ||
|
|
e11755cb2d | ||
|
|
83b0862db6 | ||
|
|
386b5a6678 | ||
|
|
5bd69dfee2 | ||
|
|
a388a9e602 | ||
|
|
69bea44481 | ||
|
|
e2fc1ee0ec | ||
|
|
912abbd213 | ||
|
|
653b419be6 | ||
|
|
4480ecfcad | ||
|
|
08b9d98d3b | ||
|
|
c20e709659 | ||
|
|
68a345f398 | ||
|
|
730cd212a4 | ||
|
|
ce0f5ea8c9 | ||
|
|
2ce1c0f36e | ||
|
|
72e370117e | ||
|
|
6ab45bbc3c | ||
|
|
7bcf06c227 | ||
|
|
bc8f7477c7 | ||
|
|
f5c570ddc1 | ||
|
|
504f66f002 | ||
|
|
76f2301b6c | ||
|
|
4788ac757b | ||
|
|
a71b33aab1 | ||
|
|
222f3eaf68 | ||
|
|
823d2b92f7 | ||
|
|
f478e9a1f9 | ||
|
|
8718b86440 | ||
|
|
67adb9b592 | ||
|
|
ca5781a44a | ||
|
|
4edf36a1dc | ||
|
|
4a5f556cd3 | ||
|
|
2b7754746c | ||
|
|
8a4a83c8f8 | ||
|
|
c04df22c48 | ||
|
|
8e0ccc576c | ||
|
|
42566cc9da | ||
|
|
9e1c68e78d | ||
|
|
9765396b08 | ||
|
|
b008502e13 | ||
|
|
d71efe5b82 | ||
|
|
120888e5ed | ||
|
|
7b5075042d | ||
|
|
12ad41043d | ||
|
|
e509932add | ||
|
|
ba3ad33587 | ||
|
|
6e74c3166a | ||
|
|
e320acce0b | ||
|
|
4f48926105 | ||
|
|
5611931063 | ||
|
|
f00022fed6 | ||
|
|
78815425e2 | ||
|
|
9ddddcc120 | ||
|
|
11c15cec93 | ||
|
|
f36bd6fb61 | ||
|
|
26ab38c6c3 | ||
|
|
9b50e6be1e | ||
|
|
2427634ee8 | ||
|
|
36d1d0a5fc | ||
|
|
486f00cdf4 | ||
|
|
b6fd424665 | ||
|
|
3d679db758 | ||
|
|
92e1f919d9 | ||
|
|
d259e8c903 | ||
|
|
dea0e596c3 | ||
|
|
90b39f3dde | ||
|
|
c80224f661 | ||
|
|
d7d8de5e1a | ||
|
|
0a21e4abfa | ||
|
|
1340eeb0d3 | ||
|
|
a350fed4d1 | ||
|
|
402d4f40f2 | ||
|
|
0f49c7f68d | ||
|
|
deb0299776 | ||
|
|
4bb3fa0275 | ||
|
|
da31455cef | ||
|
|
4da10e2fdb | ||
|
|
5426d043c1 | ||
|
|
719cec74d1 | ||
|
|
627fe11c29 | ||
|
|
dcca405b89 | ||
|
|
cce9437d19 | ||
|
|
09b3bf3aed | ||
|
|
08a891a0fc | ||
|
|
e9df81ac78 | ||
|
|
3e982be4b6 | ||
|
|
8a888f387d | ||
|
|
712b4de5f7 | ||
|
|
a3b456cf0a | ||
|
|
9f689863d7 | ||
|
|
b5306406b3 | ||
|
|
ce3b9c172c | ||
|
|
b8a77d77fb | ||
|
|
a01da656c7 | ||
|
|
5eda8dd7a0 | ||
|
|
c05babeda7 | ||
|
|
cc2b95d64e | ||
|
|
fb62bd51b5 | ||
|
|
f4d7ccef40 | ||
|
|
85bb34377c | ||
|
|
af24c6eae4 | ||
|
|
930f463000 | ||
|
|
e1aefcc1ed | ||
|
|
25554ff0b2 | ||
|
|
dad0860d6e | ||
|
|
a7e492a80f | ||
|
|
d9b748c261 | ||
|
|
0aad511e3e | ||
|
|
d117296990 | ||
|
|
e672db53c7 | ||
|
|
25bbd91fc5 | ||
|
|
8db528330b | ||
|
|
f761f7834e | ||
|
|
f6c4e5133c | ||
|
|
2e30c86467 | ||
|
|
1679f7c59d | ||
|
|
9a4cbd4fa9 | ||
|
|
0c561ba677 | ||
|
|
20ccdacee8 | ||
|
|
d44663ce76 | ||
|
|
a196160258 | ||
|
|
55a97a5793 | ||
|
|
3eaa64ee16 | ||
|
|
aa9257ab1c | ||
|
|
81a8fd4863 | ||
|
|
ed260ad7e5 | ||
|
|
9dce3c8d62 | ||
|
|
f28a179c78 | ||
|
|
540abbe273 | ||
|
|
8dda3940d0 | ||
|
|
44b9b24490 | ||
|
|
dafbc357b2 | ||
|
|
02572a5193 | ||
|
|
cab19b5ca0 | ||
|
|
d6952a0c93 | ||
|
|
b996867d65 | ||
|
|
bd18c240f9 | ||
|
|
2ad28e3086 | ||
|
|
ef5ff4e90f | ||
|
|
0a672c1e10 | ||
|
|
01214633f4 | ||
|
|
334e98c4c1 | ||
|
|
78a29ad556 | ||
|
|
e5d14ff845 | ||
|
|
716bfd4156 | ||
|
|
9b67db7208 | ||
|
|
e92ded34e4 | ||
|
|
1689542165 | ||
|
|
2c86201db9 | ||
|
|
d7c9acf713 | ||
|
|
399da0d322 | ||
|
|
774adaa3b0 | ||
|
|
b4d174d91b | ||
|
|
3291f6fe17 | ||
|
|
84f442ca08 | ||
|
|
f5c35eb639 | ||
|
|
514894ed59 | ||
|
|
204810d067 | ||
|
|
ec4ba13a28 | ||
|
|
14a6ef7fc6 | ||
|
|
c3a74070ca | ||
|
|
302fd4bb51 | ||
|
|
c7520c71cf | ||
|
|
45632d6887 | ||
|
|
866c9165c0 | ||
|
|
813abbf452 | ||
|
|
c6864e01f6 | ||
|
|
0eab48932a | ||
|
|
6c3efc5b84 | ||
|
|
cb8d7dc94a | ||
|
|
5786cfb267 | ||
|
|
78dfb530a9 | ||
|
|
d588f2e691 | ||
|
|
daf7a82997 | ||
|
|
9ad2b19e1a | ||
|
|
4b66dd3682 | ||
|
|
4899aeece1 | ||
|
|
946266e367 | ||
|
|
438ea071fc | ||
|
|
89760235c7 | ||
|
|
321f1c6034 | ||
|
|
513338f160 | ||
|
|
08b92542f4 | ||
|
|
46013c94b0 | ||
|
|
7a4ab59089 | ||
|
|
e505e204cb | ||
|
|
7343754d53 | ||
|
|
ae1e17d359 | ||
|
|
32dbe5581d | ||
|
|
a93ad5a9ba | ||
|
|
874b047ce1 | ||
|
|
afa590c5a8 | ||
|
|
b89c52fcec | ||
|
|
ec2d323f75 | ||
|
|
586679b07f |
@@ -46,8 +46,6 @@ nb-configuration.xml
|
|||||||
*.user
|
*.user
|
||||||
*.userosscache
|
*.userosscache
|
||||||
*.sln.docstates
|
*.sln.docstates
|
||||||
*.VC.db
|
|
||||||
*.VC.opendb
|
|
||||||
|
|
||||||
# User-specific files (MonoDevelop/Xamarin Studio)
|
# User-specific files (MonoDevelop/Xamarin Studio)
|
||||||
*.userprefs
|
*.userprefs
|
||||||
|
|||||||
Generated
+94
-69
@@ -24,16 +24,17 @@
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
private void InitializeComponent() {
|
private void InitializeComponent() {
|
||||||
this.dataGridView1 = new System.Windows.Forms.DataGridView();
|
this.dataGridView1 = new System.Windows.Forms.DataGridView();
|
||||||
|
this.Column0 = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
||||||
|
this.Column1 = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
||||||
|
this.Column2 = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
||||||
|
this.Column3 = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
||||||
this.bGlobals = new System.Windows.Forms.Button();
|
this.bGlobals = new System.Windows.Forms.Button();
|
||||||
this.bMapVars = new System.Windows.Forms.Button();
|
this.bMapVars = new System.Windows.Forms.Button();
|
||||||
this.bCritters = new System.Windows.Forms.Button();
|
this.bCritters = new System.Windows.Forms.Button();
|
||||||
this.bSGlobals = new System.Windows.Forms.Button();
|
this.bSGlobals = new System.Windows.Forms.Button();
|
||||||
this.bArrays = new System.Windows.Forms.Button();
|
this.bArrays = new System.Windows.Forms.Button();
|
||||||
this.Column0 = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
|
||||||
this.Column1 = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
|
||||||
this.Column2 = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
|
||||||
this.Column3 = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
|
||||||
this.bEdit = new System.Windows.Forms.Button();
|
this.bEdit = new System.Windows.Forms.Button();
|
||||||
|
this.bCrittersLvar = new System.Windows.Forms.Button();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit();
|
((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit();
|
||||||
this.SuspendLayout();
|
this.SuspendLayout();
|
||||||
//
|
//
|
||||||
@@ -41,84 +42,38 @@
|
|||||||
//
|
//
|
||||||
this.dataGridView1.AllowUserToAddRows = false;
|
this.dataGridView1.AllowUserToAddRows = false;
|
||||||
this.dataGridView1.AllowUserToDeleteRows = false;
|
this.dataGridView1.AllowUserToDeleteRows = false;
|
||||||
this.dataGridView1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
this.dataGridView1.AllowUserToResizeRows = false;
|
||||||
| System.Windows.Forms.AnchorStyles.Left)
|
this.dataGridView1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||||
| System.Windows.Forms.AnchorStyles.Right)));
|
| System.Windows.Forms.AnchorStyles.Left)
|
||||||
this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
|
| System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.dataGridView1.ColumnHeadersHeight = 22;
|
||||||
this.dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
|
this.dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
|
||||||
this.Column0,
|
this.Column0,
|
||||||
this.Column1,
|
this.Column1,
|
||||||
this.Column2,
|
this.Column2,
|
||||||
this.Column3});
|
this.Column3});
|
||||||
this.dataGridView1.Location = new System.Drawing.Point(12, 12);
|
this.dataGridView1.Location = new System.Drawing.Point(12, 12);
|
||||||
|
this.dataGridView1.MultiSelect = false;
|
||||||
this.dataGridView1.Name = "dataGridView1";
|
this.dataGridView1.Name = "dataGridView1";
|
||||||
this.dataGridView1.Size = new System.Drawing.Size(444, 215);
|
this.dataGridView1.RowHeadersVisible = false;
|
||||||
|
this.dataGridView1.RowHeadersWidthSizeMode = System.Windows.Forms.DataGridViewRowHeadersWidthSizeMode.DisableResizing;
|
||||||
|
this.dataGridView1.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
|
||||||
|
this.dataGridView1.Size = new System.Drawing.Size(561, 354);
|
||||||
this.dataGridView1.TabIndex = 0;
|
this.dataGridView1.TabIndex = 0;
|
||||||
|
this.dataGridView1.CellDoubleClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridView1_CellDoubleClick);
|
||||||
this.dataGridView1.CellEndEdit += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridView1_CellEndEdit);
|
this.dataGridView1.CellEndEdit += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridView1_CellEndEdit);
|
||||||
//
|
this.dataGridView1.RowsAdded += new System.Windows.Forms.DataGridViewRowsAddedEventHandler(this.dataGridView1_RowsAdded);
|
||||||
// bGlobals
|
|
||||||
//
|
|
||||||
this.bGlobals.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
|
||||||
this.bGlobals.Location = new System.Drawing.Point(12, 233);
|
|
||||||
this.bGlobals.Name = "bGlobals";
|
|
||||||
this.bGlobals.Size = new System.Drawing.Size(100, 23);
|
|
||||||
this.bGlobals.TabIndex = 1;
|
|
||||||
this.bGlobals.Text = "Globals";
|
|
||||||
this.bGlobals.UseVisualStyleBackColor = true;
|
|
||||||
this.bGlobals.Click += new System.EventHandler(this.bGlobals_Click);
|
|
||||||
//
|
|
||||||
// bMapVars
|
|
||||||
//
|
|
||||||
this.bMapVars.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
|
||||||
this.bMapVars.Location = new System.Drawing.Point(118, 233);
|
|
||||||
this.bMapVars.Name = "bMapVars";
|
|
||||||
this.bMapVars.Size = new System.Drawing.Size(100, 23);
|
|
||||||
this.bMapVars.TabIndex = 2;
|
|
||||||
this.bMapVars.Text = "Map variables";
|
|
||||||
this.bMapVars.UseVisualStyleBackColor = true;
|
|
||||||
this.bMapVars.Click += new System.EventHandler(this.bMapVars_Click);
|
|
||||||
//
|
|
||||||
// bCritters
|
|
||||||
//
|
|
||||||
this.bCritters.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
|
||||||
this.bCritters.Location = new System.Drawing.Point(118, 262);
|
|
||||||
this.bCritters.Name = "bCritters";
|
|
||||||
this.bCritters.Size = new System.Drawing.Size(100, 23);
|
|
||||||
this.bCritters.TabIndex = 3;
|
|
||||||
this.bCritters.Text = "Critters";
|
|
||||||
this.bCritters.UseVisualStyleBackColor = true;
|
|
||||||
this.bCritters.Click += new System.EventHandler(this.bCritters_Click);
|
|
||||||
//
|
|
||||||
// bSGlobals
|
|
||||||
//
|
|
||||||
this.bSGlobals.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
|
||||||
this.bSGlobals.Location = new System.Drawing.Point(225, 233);
|
|
||||||
this.bSGlobals.Name = "bSGlobals";
|
|
||||||
this.bSGlobals.Size = new System.Drawing.Size(100, 23);
|
|
||||||
this.bSGlobals.TabIndex = 4;
|
|
||||||
this.bSGlobals.Text = "sfall globals";
|
|
||||||
this.bSGlobals.UseVisualStyleBackColor = true;
|
|
||||||
this.bSGlobals.Click += new System.EventHandler(this.bSGlobals_Click);
|
|
||||||
//
|
|
||||||
// bArrays
|
|
||||||
//
|
|
||||||
this.bArrays.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
|
||||||
this.bArrays.Location = new System.Drawing.Point(12, 262);
|
|
||||||
this.bArrays.Name = "bArrays";
|
|
||||||
this.bArrays.Size = new System.Drawing.Size(100, 23);
|
|
||||||
this.bArrays.TabIndex = 5;
|
|
||||||
this.bArrays.Text = "sfall arrays";
|
|
||||||
this.bArrays.UseVisualStyleBackColor = true;
|
|
||||||
this.bArrays.Click += new System.EventHandler(this.bArrays_Click);
|
|
||||||
//
|
//
|
||||||
// Column0
|
// Column0
|
||||||
//
|
//
|
||||||
this.Column0.HeaderText = "ID";
|
this.Column0.HeaderText = "ID";
|
||||||
this.Column0.Name = "Column0";
|
this.Column0.Name = "Column0";
|
||||||
this.Column0.ReadOnly = true;
|
this.Column0.ReadOnly = true;
|
||||||
|
this.Column0.Width = 50;
|
||||||
//
|
//
|
||||||
// Column1
|
// Column1
|
||||||
//
|
//
|
||||||
|
this.Column1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;
|
||||||
this.Column1.HeaderText = "Name";
|
this.Column1.HeaderText = "Name";
|
||||||
this.Column1.Name = "Column1";
|
this.Column1.Name = "Column1";
|
||||||
this.Column1.ReadOnly = true;
|
this.Column1.ReadOnly = true;
|
||||||
@@ -133,10 +88,65 @@
|
|||||||
this.Column3.HeaderText = "Value (Float)";
|
this.Column3.HeaderText = "Value (Float)";
|
||||||
this.Column3.Name = "Column3";
|
this.Column3.Name = "Column3";
|
||||||
//
|
//
|
||||||
|
// bGlobals
|
||||||
|
//
|
||||||
|
this.bGlobals.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
||||||
|
this.bGlobals.Location = new System.Drawing.Point(12, 372);
|
||||||
|
this.bGlobals.Name = "bGlobals";
|
||||||
|
this.bGlobals.Size = new System.Drawing.Size(100, 23);
|
||||||
|
this.bGlobals.TabIndex = 1;
|
||||||
|
this.bGlobals.Text = "Globals";
|
||||||
|
this.bGlobals.UseVisualStyleBackColor = true;
|
||||||
|
this.bGlobals.Click += new System.EventHandler(this.bGlobals_Click);
|
||||||
|
//
|
||||||
|
// bMapVars
|
||||||
|
//
|
||||||
|
this.bMapVars.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
||||||
|
this.bMapVars.Location = new System.Drawing.Point(118, 372);
|
||||||
|
this.bMapVars.Name = "bMapVars";
|
||||||
|
this.bMapVars.Size = new System.Drawing.Size(100, 23);
|
||||||
|
this.bMapVars.TabIndex = 2;
|
||||||
|
this.bMapVars.Text = "Map variables";
|
||||||
|
this.bMapVars.UseVisualStyleBackColor = true;
|
||||||
|
this.bMapVars.Click += new System.EventHandler(this.bMapVars_Click);
|
||||||
|
//
|
||||||
|
// bCritters
|
||||||
|
//
|
||||||
|
this.bCritters.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
||||||
|
this.bCritters.Location = new System.Drawing.Point(12, 401);
|
||||||
|
this.bCritters.Name = "bCritters";
|
||||||
|
this.bCritters.Size = new System.Drawing.Size(100, 23);
|
||||||
|
this.bCritters.TabIndex = 3;
|
||||||
|
this.bCritters.Text = "Critters";
|
||||||
|
this.bCritters.UseVisualStyleBackColor = true;
|
||||||
|
this.bCritters.Click += new System.EventHandler(this.bCritters_Click);
|
||||||
|
//
|
||||||
|
// bSGlobals
|
||||||
|
//
|
||||||
|
this.bSGlobals.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.bSGlobals.Location = new System.Drawing.Point(367, 372);
|
||||||
|
this.bSGlobals.Name = "bSGlobals";
|
||||||
|
this.bSGlobals.Size = new System.Drawing.Size(100, 23);
|
||||||
|
this.bSGlobals.TabIndex = 4;
|
||||||
|
this.bSGlobals.Text = "sfall globals";
|
||||||
|
this.bSGlobals.UseVisualStyleBackColor = true;
|
||||||
|
this.bSGlobals.Click += new System.EventHandler(this.bSGlobals_Click);
|
||||||
|
//
|
||||||
|
// bArrays
|
||||||
|
//
|
||||||
|
this.bArrays.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.bArrays.Location = new System.Drawing.Point(473, 372);
|
||||||
|
this.bArrays.Name = "bArrays";
|
||||||
|
this.bArrays.Size = new System.Drawing.Size(100, 23);
|
||||||
|
this.bArrays.TabIndex = 5;
|
||||||
|
this.bArrays.Text = "sfall arrays";
|
||||||
|
this.bArrays.UseVisualStyleBackColor = true;
|
||||||
|
this.bArrays.Click += new System.EventHandler(this.bArrays_Click);
|
||||||
|
//
|
||||||
// bEdit
|
// bEdit
|
||||||
//
|
//
|
||||||
this.bEdit.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
this.bEdit.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||||
this.bEdit.Location = new System.Drawing.Point(225, 262);
|
this.bEdit.Location = new System.Drawing.Point(473, 401);
|
||||||
this.bEdit.Name = "bEdit";
|
this.bEdit.Name = "bEdit";
|
||||||
this.bEdit.Size = new System.Drawing.Size(100, 23);
|
this.bEdit.Size = new System.Drawing.Size(100, 23);
|
||||||
this.bEdit.TabIndex = 6;
|
this.bEdit.TabIndex = 6;
|
||||||
@@ -144,11 +154,23 @@
|
|||||||
this.bEdit.UseVisualStyleBackColor = true;
|
this.bEdit.UseVisualStyleBackColor = true;
|
||||||
this.bEdit.Click += new System.EventHandler(this.bEdit_Click);
|
this.bEdit.Click += new System.EventHandler(this.bEdit_Click);
|
||||||
//
|
//
|
||||||
|
// bCrittersLvar
|
||||||
|
//
|
||||||
|
this.bCrittersLvar.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
||||||
|
this.bCrittersLvar.Enabled = false;
|
||||||
|
this.bCrittersLvar.Location = new System.Drawing.Point(119, 401);
|
||||||
|
this.bCrittersLvar.Name = "bCrittersLvar";
|
||||||
|
this.bCrittersLvar.Size = new System.Drawing.Size(99, 23);
|
||||||
|
this.bCrittersLvar.TabIndex = 7;
|
||||||
|
this.bCrittersLvar.Text = "Local variables";
|
||||||
|
this.bCrittersLvar.UseVisualStyleBackColor = true;
|
||||||
|
//
|
||||||
// DebugEditor
|
// DebugEditor
|
||||||
//
|
//
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
this.ClientSize = new System.Drawing.Size(468, 297);
|
this.ClientSize = new System.Drawing.Size(585, 436);
|
||||||
|
this.Controls.Add(this.bCrittersLvar);
|
||||||
this.Controls.Add(this.bEdit);
|
this.Controls.Add(this.bEdit);
|
||||||
this.Controls.Add(this.bArrays);
|
this.Controls.Add(this.bArrays);
|
||||||
this.Controls.Add(this.bSGlobals);
|
this.Controls.Add(this.bSGlobals);
|
||||||
@@ -156,8 +178,10 @@
|
|||||||
this.Controls.Add(this.bMapVars);
|
this.Controls.Add(this.bMapVars);
|
||||||
this.Controls.Add(this.bGlobals);
|
this.Controls.Add(this.bGlobals);
|
||||||
this.Controls.Add(this.dataGridView1);
|
this.Controls.Add(this.dataGridView1);
|
||||||
|
this.MinimumSize = new System.Drawing.Size(450, 300);
|
||||||
this.Name = "DebugEditor";
|
this.Name = "DebugEditor";
|
||||||
this.Text = "DebugEditor";
|
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
|
||||||
|
this.Text = "sfall Debug Editor";
|
||||||
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.DebugEditor_FormClosing);
|
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.DebugEditor_FormClosing);
|
||||||
((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit();
|
((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit();
|
||||||
this.ResumeLayout(false);
|
this.ResumeLayout(false);
|
||||||
@@ -172,11 +196,12 @@
|
|||||||
private System.Windows.Forms.Button bCritters;
|
private System.Windows.Forms.Button bCritters;
|
||||||
private System.Windows.Forms.Button bSGlobals;
|
private System.Windows.Forms.Button bSGlobals;
|
||||||
private System.Windows.Forms.Button bArrays;
|
private System.Windows.Forms.Button bArrays;
|
||||||
|
private System.Windows.Forms.Button bEdit;
|
||||||
private System.Windows.Forms.DataGridViewTextBoxColumn Column0;
|
private System.Windows.Forms.DataGridViewTextBoxColumn Column0;
|
||||||
private System.Windows.Forms.DataGridViewTextBoxColumn Column1;
|
private System.Windows.Forms.DataGridViewTextBoxColumn Column1;
|
||||||
private System.Windows.Forms.DataGridViewTextBoxColumn Column2;
|
private System.Windows.Forms.DataGridViewTextBoxColumn Column2;
|
||||||
private System.Windows.Forms.DataGridViewTextBoxColumn Column3;
|
private System.Windows.Forms.DataGridViewTextBoxColumn Column3;
|
||||||
private System.Windows.Forms.Button bEdit;
|
private System.Windows.Forms.Button bCrittersLvar;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+183
-139
@@ -4,14 +4,16 @@ using System.ComponentModel;
|
|||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
using File=System.IO.File;
|
using File = System.IO.File;
|
||||||
using StreamReader=System.IO.StreamReader;
|
using StreamReader = System.IO.StreamReader;
|
||||||
using MemoryStream=System.IO.MemoryStream;
|
using MemoryStream = System.IO.MemoryStream;
|
||||||
using BinaryReader=System.IO.BinaryReader;
|
using BinaryReader = System.IO.BinaryReader;
|
||||||
using BinaryWriter=System.IO.BinaryWriter;
|
using BinaryWriter = System.IO.BinaryWriter;
|
||||||
|
|
||||||
namespace FalloutClient {
|
namespace FalloutClient {
|
||||||
public partial class DebugEditor : Form {
|
|
||||||
|
public partial class DebugEditor : Form
|
||||||
|
{
|
||||||
[System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Explicit)]
|
[System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Explicit)]
|
||||||
private struct ByteConverter {
|
private struct ByteConverter {
|
||||||
[System.Runtime.InteropServices.FieldOffset(0)]
|
[System.Runtime.InteropServices.FieldOffset(0)]
|
||||||
@@ -20,86 +22,84 @@ namespace FalloutClient {
|
|||||||
private float f;
|
private float f;
|
||||||
|
|
||||||
public int GetAsInt(float f) {
|
public int GetAsInt(float f) {
|
||||||
this.f=f;
|
this.f = f;
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
public float GetAsFloat(int i) {
|
public float GetAsFloat(int i) {
|
||||||
this.i=i;
|
this.i = i;
|
||||||
return f;
|
return f;
|
||||||
}
|
}
|
||||||
public byte[] GetAsBytes(ulong ul) {
|
public byte[] GetAsBytes(ulong ul) {
|
||||||
byte[] b=new byte[8];
|
byte[] b = new byte[8];
|
||||||
for(int i=0;i<8;i++) b[i]=(byte)((ul&((ulong)0xff<<(i*8)))>>(i*8));
|
for (int i = 0; i < 8; i++) b[i] = (byte)((ul & ((ulong)0xff << (i * 8))) >> (i * 8));
|
||||||
return b;
|
return b;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static ByteConverter converter=new ByteConverter();
|
private static ByteConverter converter = new ByteConverter();
|
||||||
|
|
||||||
private enum Mode { Globals, MapVars, SGlobals, Arrays, Critters }
|
private enum Mode { Globals, MapVars, SGlobals, Arrays, Critters }
|
||||||
|
|
||||||
private readonly EditorConnection connection;
|
private readonly EditorConnection connection;
|
||||||
private Mode mode;
|
private Mode mode;
|
||||||
|
|
||||||
private readonly Dictionary<int, string> GlobNames=new Dictionary<int, string>();
|
private readonly Dictionary<int, string> GlobNames = new Dictionary<int, string>();
|
||||||
private readonly Dictionary<uint, string> CritNames=new Dictionary<uint, string>();
|
private readonly Dictionary<uint, string> CritNames = new Dictionary<uint, string>();
|
||||||
|
|
||||||
private void Redraw() {
|
private void Redraw() {
|
||||||
|
bEdit.Enabled = false;
|
||||||
|
Column2.ReadOnly = false;
|
||||||
|
Column3.ReadOnly = false;
|
||||||
|
Column2.HeaderText = "Value (Int)";
|
||||||
|
Column3.HeaderText = "Value (Float)";
|
||||||
|
dataGridView1.SelectionMode = DataGridViewSelectionMode.CellSelect;
|
||||||
dataGridView1.SuspendLayout();
|
dataGridView1.SuspendLayout();
|
||||||
dataGridView1.Rows.Clear();
|
dataGridView1.Rows.Clear();
|
||||||
switch(mode) {
|
switch (mode) {
|
||||||
case Mode.Globals:
|
case Mode.Globals:
|
||||||
Column2.ReadOnly=false;
|
for (int i = 0; i < connection.Globals.Length; i++) {
|
||||||
Column3.ReadOnly=false;
|
string name = GlobNames.ContainsKey(i) ? GlobNames[i] : "";
|
||||||
Column2.HeaderText="Value (Int)";
|
|
||||||
Column3.HeaderText="Value (Float)";
|
|
||||||
bEdit.Enabled=false;
|
|
||||||
for(int i=0;i<connection.Globals.Length;i++) {
|
|
||||||
string name=GlobNames.ContainsKey(i)?GlobNames[i]:"";
|
|
||||||
dataGridView1.Rows.Add(i, name, connection.Globals[i], converter.GetAsFloat(connection.Globals[i]));
|
dataGridView1.Rows.Add(i, name, connection.Globals[i], converter.GetAsFloat(connection.Globals[i]));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case Mode.MapVars:
|
case Mode.MapVars:
|
||||||
Column2.ReadOnly=false;
|
for (int i = 0; i < connection.MapVars.Length; i++) {
|
||||||
Column3.ReadOnly=false;
|
|
||||||
Column2.HeaderText="Value (Int)";
|
|
||||||
Column3.HeaderText="Value (Float)";
|
|
||||||
bEdit.Enabled=false;
|
|
||||||
for(int i=0;i<connection.MapVars.Length;i++) {
|
|
||||||
dataGridView1.Rows.Add(i, "", connection.MapVars[i], converter.GetAsFloat(connection.MapVars[i]));
|
dataGridView1.Rows.Add(i, "", connection.MapVars[i], converter.GetAsFloat(connection.MapVars[i]));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case Mode.SGlobals:
|
case Mode.SGlobals:
|
||||||
Column2.ReadOnly=false;
|
for (int i = 0; i < connection.SGlobalKeys.Length; i++) {
|
||||||
Column3.ReadOnly=false;
|
string s = connection.SGlobalKeys[i] > 0xffffffff
|
||||||
Column2.HeaderText="Value (Int)";
|
? new string(System.Text.ASCIIEncoding.ASCII.GetChars(converter.GetAsBytes(connection.SGlobalKeys[i])))
|
||||||
Column3.HeaderText="Value (Float)";
|
: (connection.SGlobalKeys[i].ToString());
|
||||||
bEdit.Enabled=false;
|
|
||||||
for(int i=0;i<connection.SGlobalKeys.Length;i++) {
|
|
||||||
string s=connection.SGlobalKeys[i]>0xffffffff?new string(System.Text.ASCIIEncoding.ASCII.GetChars(converter.GetAsBytes(connection.SGlobalKeys[i]))):("0x"+connection.SGlobalKeys[i].ToString("x"));
|
|
||||||
dataGridView1.Rows.Add(s, "", connection.sGlobals[i], converter.GetAsFloat(connection.sGlobals[i]));
|
dataGridView1.Rows.Add(s, "", connection.sGlobals[i], converter.GetAsFloat(connection.sGlobals[i]));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case Mode.Arrays:
|
case Mode.Arrays:
|
||||||
Column2.ReadOnly=true;
|
dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
|
||||||
Column3.ReadOnly=true;
|
Column2.ReadOnly = true;
|
||||||
Column2.HeaderText="Array length";
|
Column3.ReadOnly = true;
|
||||||
Column3.HeaderText="Element size";
|
Column2.HeaderText = "Array size";
|
||||||
bEdit.Enabled=true;
|
Column3.HeaderText = "Array flags";
|
||||||
for(int i=0;i<connection.Arrays.Length;i++) {
|
bEdit.Enabled = true;
|
||||||
dataGridView1.Rows.Add(connection.Arrays[i], "", connection.ArrayLengths[i], connection.ArrayDataSizes[i]);
|
for (int i = 0; i < connection.Arrays.Length; i++) {
|
||||||
|
bool isMap = connection.ArrayIsMap[i];
|
||||||
|
int arrlen = connection.ArrayLengths[i];
|
||||||
|
if (isMap) arrlen /= 2;
|
||||||
|
dataGridView1.Rows.Add(connection.Arrays[i], isMap ? "Map" : "", arrlen, "0x" + connection.ArrayFlag[i].ToString("x").ToUpper());
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case Mode.Critters:
|
case Mode.Critters:
|
||||||
Column2.ReadOnly=true;
|
dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
|
||||||
Column3.ReadOnly=true;
|
Column2.ReadOnly = true;
|
||||||
Column2.HeaderText="pid";
|
Column3.ReadOnly = true;
|
||||||
Column3.HeaderText="";
|
Column2.HeaderText = "PID";
|
||||||
bEdit.Enabled=true;
|
Column3.HeaderText = "Pointer";
|
||||||
for(int i=0;i<connection.Critters.Length;i++) {
|
bEdit.Enabled = true;
|
||||||
uint modcrit=(connection.Critters[i]&0xfffff);
|
for (int i = 0; i < connection.Critters.Length / 2; i++) {
|
||||||
string name=CritNames.ContainsKey(modcrit)?CritNames[modcrit]:"";
|
uint modcrit = (connection.Critters[i, 0] & 0xfffff);
|
||||||
dataGridView1.Rows.Add(i+1, name, connection.Critters[i].ToString("x"), "");
|
string name = CritNames.ContainsKey(modcrit) ? CritNames[modcrit] : "";
|
||||||
|
dataGridView1.Rows.Add(i + 1, name, connection.Critters[i, 0].ToString("x").ToUpper(), connection.Critters[i, 1].ToString());
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -108,21 +108,29 @@ namespace FalloutClient {
|
|||||||
|
|
||||||
internal DebugEditor(EditorConnection connection) {
|
internal DebugEditor(EditorConnection connection) {
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
this.connection=connection;
|
this.connection = connection;
|
||||||
mode=Mode.Globals;
|
mode = Mode.Globals;
|
||||||
if(File.Exists("globals.txt")) {
|
if (File.Exists(".\\data\\data\\vault13.gam")) {
|
||||||
StreamReader sr=new StreamReader("globals.txt");
|
StreamReader sr=new StreamReader(".\\data\\data\\vault13.gam");
|
||||||
while(!sr.EndOfStream) {
|
int gvar = 0;
|
||||||
string[] line=sr.ReadLine().Split(' ');
|
while (!sr.EndOfStream) {
|
||||||
GlobNames[int.Parse(line[0])]=line[1];
|
string line = sr.ReadLine().TrimStart();
|
||||||
|
if (line.StartsWith("GVAR_")) GlobNames[gvar++] = line.Remove(line.IndexOf(':')).TrimEnd();
|
||||||
|
}
|
||||||
|
sr.Close();
|
||||||
|
} else if (File.Exists("globals.txt")) {
|
||||||
|
StreamReader sr = new StreamReader("globals.txt");
|
||||||
|
while (!sr.EndOfStream) {
|
||||||
|
string[] line = sr.ReadLine().Split(' ');
|
||||||
|
GlobNames[int.Parse(line[0])] = line[1];
|
||||||
}
|
}
|
||||||
sr.Close();
|
sr.Close();
|
||||||
}
|
}
|
||||||
if(File.Exists("critters.txt")) {
|
if (File.Exists("critters.txt")) {
|
||||||
StreamReader sr=new StreamReader("critters.txt");
|
StreamReader sr = new StreamReader("critters.txt");
|
||||||
while(!sr.EndOfStream) {
|
while (!sr.EndOfStream) {
|
||||||
string line=sr.ReadLine();
|
string line = sr.ReadLine();
|
||||||
CritNames[uint.Parse(line.Remove(line.IndexOf(' ')))]=line.Substring(line.IndexOf(' ')+1);
|
CritNames[uint.Parse(line.Remove(line.IndexOf(' ')))] = line.Substring(line.IndexOf(' ') + 1);
|
||||||
}
|
}
|
||||||
sr.Close();
|
sr.Close();
|
||||||
}
|
}
|
||||||
@@ -135,65 +143,67 @@ namespace FalloutClient {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void bGlobals_Click(object sender, EventArgs e) {
|
private void bGlobals_Click(object sender, EventArgs e) {
|
||||||
mode=Mode.Globals;
|
mode = Mode.Globals;
|
||||||
Redraw();
|
Redraw();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void bMapVars_Click(object sender, EventArgs e) {
|
private void bMapVars_Click(object sender, EventArgs e) {
|
||||||
mode=Mode.MapVars;
|
mode = Mode.MapVars;
|
||||||
Redraw();
|
Redraw();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void bSGlobals_Click(object sender, EventArgs e) {
|
private void bSGlobals_Click(object sender, EventArgs e) {
|
||||||
mode=Mode.SGlobals;
|
mode = Mode.SGlobals;
|
||||||
Redraw();
|
Redraw();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void bArrays_Click(object sender, EventArgs e) {
|
private void bArrays_Click(object sender, EventArgs e) {
|
||||||
mode=Mode.Arrays;
|
mode = Mode.Arrays;
|
||||||
Redraw();
|
Redraw();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void bCritters_Click(object sender, EventArgs e) {
|
private void bCritters_Click(object sender, EventArgs e) {
|
||||||
mode=Mode.Critters;
|
mode = Mode.Critters;
|
||||||
Redraw();
|
Redraw();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e) {
|
private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e) {
|
||||||
int[] array=null;
|
int[] array = null;
|
||||||
DataTypeSend dts;
|
DataTypeSend dts;
|
||||||
switch(mode) {
|
switch (mode) {
|
||||||
case Mode.Globals:
|
case Mode.Globals:
|
||||||
array=connection.Globals;
|
array = connection.Globals;
|
||||||
dts=DataTypeSend.SetGlobal;
|
dts = DataTypeSend.SetGlobal;
|
||||||
break;
|
break;
|
||||||
case Mode.MapVars:
|
case Mode.MapVars:
|
||||||
array=connection.MapVars;
|
array = connection.MapVars;
|
||||||
dts=DataTypeSend.SetMapVar;
|
dts = DataTypeSend.SetMapVar;
|
||||||
break;
|
break;
|
||||||
case Mode.SGlobals:
|
case Mode.SGlobals:
|
||||||
array=connection.sGlobals;
|
array = connection.sGlobals;
|
||||||
dts=DataTypeSend.SetSGlobal;
|
dts = DataTypeSend.SetSGlobal;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(e.ColumnIndex==2) {
|
if (e.ColumnIndex == 2) {
|
||||||
|
string str = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString();
|
||||||
int val;
|
int val;
|
||||||
if(!int.TryParse(dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString(), out val)) {
|
if (str == null || !int.TryParse(str, out val)) {
|
||||||
dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value=array[e.RowIndex];
|
dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = array[e.RowIndex];
|
||||||
} else {
|
} else {
|
||||||
array[e.RowIndex]=val;
|
array[e.RowIndex] = val;
|
||||||
connection.WriteDataType(dts);
|
connection.WriteDataType(dts);
|
||||||
connection.WriteInt(e.RowIndex);
|
connection.WriteInt(e.RowIndex);
|
||||||
connection.WriteInt(val);
|
connection.WriteInt(val);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
string str = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString();
|
||||||
float val;
|
float val;
|
||||||
if(!float.TryParse(dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString(), out val)) {
|
if (str == null || !float.TryParse(str, out val)) {
|
||||||
dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value=array[e.RowIndex];
|
dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = array[e.RowIndex];
|
||||||
} else {
|
} else {
|
||||||
array[e.RowIndex]=converter.GetAsInt(val);
|
array[e.RowIndex] = converter.GetAsInt(val);
|
||||||
connection.WriteDataType(dts);
|
connection.WriteDataType(dts);
|
||||||
connection.WriteInt(e.RowIndex);
|
connection.WriteInt(e.RowIndex);
|
||||||
connection.WriteInt(converter.GetAsInt(val));
|
connection.WriteInt(converter.GetAsInt(val));
|
||||||
@@ -202,43 +212,50 @@ namespace FalloutClient {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void bEdit_Click(object sender, EventArgs e) {
|
private void bEdit_Click(object sender, EventArgs e) {
|
||||||
if(dataGridView1.SelectedRows.Count!=1) return;
|
if (dataGridView1.SelectedRows.Count == 0) return;
|
||||||
int i=dataGridView1.SelectedRows[0].Index;
|
int i = (int)dataGridView1.SelectedRows[0].Tag;
|
||||||
switch(mode) {
|
switch (mode) {
|
||||||
case Mode.Arrays: {
|
case Mode.Arrays: {
|
||||||
DataType[] types=new DataType[connection.ArrayLengths[i]];
|
DataType[] types = new DataType[connection.ArrayLengths[i]];
|
||||||
string[] strings=new string[connection.ArrayLengths[i]];
|
int[] lenType = new int[connection.ArrayLengths[i]];
|
||||||
connection.WriteDataType(DataTypeSend.GetArray);
|
string[] strings = new string[connection.ArrayLengths[i]];
|
||||||
connection.WriteInt(i);
|
connection.WriteDataType(DataTypeSend.GetArray); // code
|
||||||
for(int j=0;j<strings.Length;j++) types[j]=(DataType)connection.ReadInt();
|
connection.WriteInt(i); // index
|
||||||
byte[] buf=connection.ReadBytes(connection.ArrayLengths[i]*connection.ArrayDataSizes[i]);
|
int lenData = 0;
|
||||||
MemoryStream ms=new MemoryStream(buf);
|
for (int j = 0; j < strings.Length; j++) {
|
||||||
BinaryReader br=new BinaryReader(ms);
|
types[j] = (DataType)connection.ReadInt();
|
||||||
for(int j=0;j<strings.Length;j++) {
|
lenType[j] = connection.ReadInt(); // len data of type
|
||||||
ms.Position=j*connection.ArrayDataSizes[i];
|
lenData += lenType[j];
|
||||||
switch(types[j]) {
|
}
|
||||||
|
byte[] buf = connection.ReadBytes(lenData); // read data
|
||||||
|
BinaryReader br = new BinaryReader(new MemoryStream(buf));
|
||||||
|
for (int j = 0; j < strings.Length; j++) {
|
||||||
|
switch (types[j]) {
|
||||||
|
case DataType.None:
|
||||||
|
br.BaseStream.Position += 4;
|
||||||
|
break;
|
||||||
case DataType.Int:
|
case DataType.Int:
|
||||||
strings[j]=br.ReadInt32().ToString();
|
strings[j] = br.ReadInt32().ToString();
|
||||||
break;
|
break;
|
||||||
case DataType.Float:
|
case DataType.Float:
|
||||||
strings[j]=br.ReadSingle().ToString();
|
strings[j] = br.ReadSingle().ToString();
|
||||||
break;
|
break;
|
||||||
case DataType.String:
|
case DataType.String:
|
||||||
byte[] bytes=br.ReadBytes(connection.ArrayDataSizes[i]);
|
byte[] bytes = br.ReadBytes(lenType[j]);
|
||||||
strings[j]=System.Text.Encoding.ASCII.GetString(bytes, 0, Array.IndexOf<byte>(bytes, 0));
|
strings[j] = System.Text.Encoding.ASCII.GetString(bytes, 0, Array.IndexOf<byte>(bytes, 0));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
br.Close();
|
br.Close();
|
||||||
strings=EditorWindow.ShowEditor(null, types, strings);
|
strings = EditorWindow.ShowEditor(this, null, types, strings, connection.ArrayIsMap[i]);
|
||||||
if(strings!=null) {
|
if (strings != null) { // save
|
||||||
connection.WriteDataType(DataTypeSend.SetArray);
|
MemoryStream ms = new MemoryStream(lenData);
|
||||||
connection.WriteInt(i);
|
BinaryWriter bw = new BinaryWriter(ms);
|
||||||
ms=new MemoryStream(connection.ArrayLengths[i]*connection.ArrayDataSizes[i]);
|
for (int j = 0; j < strings.Length; j++) {
|
||||||
BinaryWriter bw=new BinaryWriter(ms);
|
switch (types[j]) {
|
||||||
for(int j=0;j<strings.Length;j++) {
|
case DataType.None:
|
||||||
ms.Position=j*connection.ArrayDataSizes[i];
|
bw.BaseStream.Position += 4;
|
||||||
switch(types[j]) {
|
break;
|
||||||
case DataType.Int:
|
case DataType.Int:
|
||||||
bw.Write(int.Parse(strings[j]));
|
bw.Write(int.Parse(strings[j]));
|
||||||
break;
|
break;
|
||||||
@@ -246,55 +263,82 @@ namespace FalloutClient {
|
|||||||
bw.Write(float.Parse(strings[j]));
|
bw.Write(float.Parse(strings[j]));
|
||||||
break;
|
break;
|
||||||
case DataType.String:
|
case DataType.String:
|
||||||
byte[] bytes=System.Text.Encoding.ASCII.GetBytes(strings[j]);
|
byte[] bytes = System.Text.Encoding.ASCII.GetBytes(strings[j]);
|
||||||
if(bytes.Length<connection.ArrayDataSizes[i]) bw.Write(bytes);
|
if (bytes.Length < lenType[j])
|
||||||
else bw.Write(bytes, 0, connection.ArrayDataSizes[i]-1);
|
bw.Write(bytes);
|
||||||
bw.Write(0);
|
else
|
||||||
|
bw.Write(bytes, 0, lenType[j] - 1);
|
||||||
|
bw.Write((byte)0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
connection.WriteBytes(ms.GetBuffer(), 0, connection.ArrayLengths[i]*connection.ArrayDataSizes[i]);
|
// send data to sfall
|
||||||
|
connection.WriteDataType(DataTypeSend.SetArray);
|
||||||
|
connection.WriteInt(i); // index
|
||||||
|
connection.WriteInt(lenData);
|
||||||
|
connection.WriteBytes(ms.GetBuffer(), 0, lenData);
|
||||||
bw.Close();
|
bw.Close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case Mode.Critters: {
|
case Mode.Critters: {
|
||||||
DataType[] types=new DataType[29];
|
DataType[] types = new DataType[33];
|
||||||
string[] strings=new string[29];
|
string[] strings = new string[33];
|
||||||
string[] names=new string[29];
|
string[] names = new string[33];
|
||||||
connection.WriteDataType(DataTypeSend.RetrieveCritter);
|
connection.WriteDataType(DataTypeSend.RetrieveCritter);
|
||||||
connection.WriteInt(i);
|
connection.WriteInt(i);
|
||||||
BinaryReader br=new BinaryReader(new System.IO.MemoryStream(connection.ReadBytes(29*4)));
|
BinaryReader br = new BinaryReader(new System.IO.MemoryStream(connection.ReadBytes(33 * 4)));
|
||||||
for(int j=0;j<29;j++) {
|
for (int j = 0; j < 33; j++) {
|
||||||
types[j]=DataType.Int;
|
types[j] = DataType.Int;
|
||||||
strings[j]=br.ReadInt32().ToString();
|
strings[j] = br.ReadInt32().ToString();
|
||||||
names[j]="0x"+(j*4).ToString("x");
|
|
||||||
}
|
}
|
||||||
br.Close();
|
br.Close();
|
||||||
names[1]="Tile";
|
names[0] = " ID";
|
||||||
names[10]="Elevation";
|
names[1] = " Tile";
|
||||||
names[11]="Inventory count";
|
names[6] = " Current frame";
|
||||||
names[13]="Inventory pointer";
|
names[7] = " Rotation";
|
||||||
names[16]="Current AP";
|
names[8] = " FID";
|
||||||
names[17]="Crippled limbs";
|
names[9] = " Flags";
|
||||||
names[22]="HP";
|
names[10] = " Elevation";
|
||||||
names[23]="Rads";
|
names[11] = " Inventory count";
|
||||||
names[24]="Poison";
|
names[13] = " Inventory pointer";
|
||||||
names[25]="Proto ID";
|
names[14] = " Reaction";
|
||||||
strings=EditorWindow.ShowEditor(names, types, strings);
|
names[15] = " Combat state";
|
||||||
if(strings!=null) {
|
names[16] = " Current AP";
|
||||||
MemoryStream ms=new MemoryStream(29*4);
|
names[17] = " Combat flags";
|
||||||
BinaryWriter bw=new BinaryWriter(ms);
|
names[18] = " Last Turn Damage";
|
||||||
for(int j=0;j<29;j++) bw.Write(int.Parse(strings[j]));
|
names[19] = " AI Packet";
|
||||||
|
names[20] = " Team";
|
||||||
|
names[21] = " Who hit me";
|
||||||
|
names[22] = " HP";
|
||||||
|
names[23] = " Rads";
|
||||||
|
names[24] = " Poison";
|
||||||
|
names[25] = " Proto ID";
|
||||||
|
names[26] = " Combat ID";
|
||||||
|
names[29] = " Outline flags";
|
||||||
|
names[30] = " Script ID";
|
||||||
|
names[32] = " Script index";
|
||||||
|
strings = EditorWindow.ShowEditor(this, names, types, strings);
|
||||||
|
if (strings != null) {
|
||||||
|
MemoryStream ms = new MemoryStream(33 * 4);
|
||||||
|
BinaryWriter bw = new BinaryWriter(ms);
|
||||||
|
for (int j = 0; j < 33; j++) bw.Write(int.Parse(strings[j]));
|
||||||
connection.WriteDataType(DataTypeSend.SetCritter);
|
connection.WriteDataType(DataTypeSend.SetCritter);
|
||||||
connection.WriteInt(i);
|
connection.WriteInt(i);
|
||||||
connection.WriteBytes(ms.GetBuffer(), 0, 29*4);
|
connection.WriteBytes(ms.GetBuffer(), 0, 33 * 4);
|
||||||
bw.Close();
|
bw.Close();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e) {
|
||||||
|
bEdit.PerformClick();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void dataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e) {
|
||||||
|
dataGridView1.Rows[e.RowIndex].Tag = e.RowIndex;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,9 @@ using System.Net.Sockets;
|
|||||||
using System.IO;
|
using System.IO;
|
||||||
|
|
||||||
namespace FalloutClient {
|
namespace FalloutClient {
|
||||||
class EditorConnection {
|
|
||||||
|
class EditorConnection
|
||||||
|
{
|
||||||
private TcpClient client;
|
private TcpClient client;
|
||||||
private NetworkStream stream;
|
private NetworkStream stream;
|
||||||
private BinaryReader br;
|
private BinaryReader br;
|
||||||
@@ -11,73 +13,81 @@ namespace FalloutClient {
|
|||||||
|
|
||||||
public readonly int[] Globals;
|
public readonly int[] Globals;
|
||||||
public readonly int[] MapVars;
|
public readonly int[] MapVars;
|
||||||
public readonly uint[] Critters;
|
public readonly uint[,] Critters;
|
||||||
public readonly ulong[] SGlobalKeys;
|
public readonly ulong[] SGlobalKeys;
|
||||||
public readonly int[] sGlobals;
|
public readonly int[] sGlobals;
|
||||||
public readonly uint[] Arrays;
|
public readonly uint[] Arrays;
|
||||||
public readonly int[] ArrayLengths;
|
public readonly int[] ArrayLengths;
|
||||||
public readonly int[] ArrayDataSizes;
|
public readonly int[] ArrayFlag;
|
||||||
|
public readonly bool[] ArrayIsMap;
|
||||||
|
|
||||||
public EditorConnection() {
|
public EditorConnection() {
|
||||||
System.Threading.Thread.Sleep(1000);
|
System.Threading.Thread.Sleep(1000);
|
||||||
client=new TcpClient("127.0.0.1", 4245);
|
client = new TcpClient("127.0.0.1", 4245);
|
||||||
stream=client.GetStream();
|
stream = client.GetStream();
|
||||||
br=new BinaryReader(stream);
|
br = new BinaryReader(stream);
|
||||||
bw=new BinaryWriter(stream);
|
bw = new BinaryWriter(stream);
|
||||||
Globals=new int[br.ReadInt32()];
|
Globals = new int[br.ReadInt32()];
|
||||||
MapVars=new int[br.ReadInt32()];
|
MapVars = new int[br.ReadInt32()];
|
||||||
SGlobalKeys=new ulong[br.ReadInt32()];
|
SGlobalKeys = new ulong[br.ReadInt32()];
|
||||||
sGlobals=new int[SGlobalKeys.Length];
|
sGlobals = new int[SGlobalKeys.Length];
|
||||||
Arrays=new uint[br.ReadInt32()];
|
Arrays = new uint[br.ReadInt32()];
|
||||||
ArrayLengths=new int[Arrays.Length];
|
ArrayLengths = new int[Arrays.Length];
|
||||||
ArrayDataSizes=new int[Arrays.Length];
|
ArrayFlag = new int[Arrays.Length];
|
||||||
Critters=new uint[br.ReadInt32()];
|
ArrayIsMap = new bool[Arrays.Length];
|
||||||
|
Critters = new uint[br.ReadInt32(), 2];
|
||||||
|
|
||||||
for(int i=0;i<Globals.Length;i++) Globals[i]=br.ReadInt32();
|
for (int i = 0; i < Globals.Length; i++) Globals[i] = br.ReadInt32();
|
||||||
for(int i=0;i<MapVars.Length;i++) MapVars[i]=br.ReadInt32();
|
for (int i = 0; i < MapVars.Length; i++) MapVars[i] = br.ReadInt32();
|
||||||
for(int i=0;i<sGlobals.Length;i++) {
|
for (int i = 0; i < sGlobals.Length; i++) {
|
||||||
SGlobalKeys[i]=br.ReadUInt64();
|
SGlobalKeys[i] = br.ReadUInt64();
|
||||||
sGlobals[i]=br.ReadInt32();
|
sGlobals[i] = br.ReadInt32();
|
||||||
br.ReadInt32();
|
br.ReadInt32();
|
||||||
}
|
}
|
||||||
for(int i=0;i<Arrays.Length;i++) {
|
for (int i = 0; i < Arrays.Length; i++) {
|
||||||
Arrays[i]=br.ReadUInt32();
|
Arrays[i] = br.ReadUInt32();
|
||||||
ArrayLengths[i]=br.ReadInt32();
|
ArrayIsMap[i] = (br.ReadInt32() != 0);
|
||||||
ArrayDataSizes[i]=br.ReadInt32();
|
ArrayLengths[i] = br.ReadInt32();
|
||||||
|
ArrayFlag[i] = br.ReadInt32();
|
||||||
|
}
|
||||||
|
for (int i = 0; i < Critters.Length / 2; i++) {
|
||||||
|
Critters[i, 0] = br.ReadUInt32();
|
||||||
|
Critters[i, 1] = br.ReadUInt32();
|
||||||
}
|
}
|
||||||
for(int i=0;i<Critters.Length;i++) Critters[i]=br.ReadUInt32();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Close() {
|
public void Close() {
|
||||||
stream.Close();
|
stream.Close();
|
||||||
client.Close();
|
client.Close();
|
||||||
stream=null;
|
stream = null;
|
||||||
client=null;
|
client = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void WriteDataType(DataTypeSend type) {
|
public void WriteDataType(DataTypeSend type) {
|
||||||
stream.WriteByte((byte)type);
|
stream.WriteByte((byte)type);
|
||||||
//bw.Write((byte)type);
|
//bw.Write((byte)type);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void WriteByte(byte b) { bw.Write(b); }
|
public void WriteByte(byte b) { bw.Write(b); }
|
||||||
public void WriteInt16(short value) { bw.Write(value); }
|
public void WriteInt16(short value) { bw.Write(value); }
|
||||||
public void WriteInt(int value) { bw.Write(value); }
|
public void WriteInt(int value) { bw.Write(value); }
|
||||||
public void WriteBytes(byte[] buf) { bw.Write(buf); }
|
public void WriteBytes(byte[] buf) { bw.Write(buf); }
|
||||||
|
|
||||||
public void WriteBytes(byte[] buf, int start, int len) {
|
public void WriteBytes(byte[] buf, int start, int len) {
|
||||||
bw.Write(buf, start, len);
|
bw.Write(buf, start, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Read(byte[] buffer) {
|
public void Read(byte[] buffer) {
|
||||||
int upto=0;
|
int upto = 0;
|
||||||
while(upto<buffer.Length) {
|
while (upto < buffer.Length) {
|
||||||
upto+=stream.Read(buffer, upto, buffer.Length-upto);
|
upto += stream.Read(buffer, upto, buffer.Length - upto);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public void Read(byte[] buffer, int offset, int length) {
|
public void Read(byte[] buffer, int offset, int length) {
|
||||||
int upto=0;
|
int upto = 0;
|
||||||
//System.Diagnostics.Debug.WriteLine("Read - offset: "+offset+" length: "+length);
|
//System.Diagnostics.Debug.WriteLine("Read - offset: "+offset+" length: "+length);
|
||||||
while(upto<length) {
|
while (upto < length) {
|
||||||
upto+=stream.Read(buffer, offset+upto, length-upto);
|
upto += stream.Read(buffer, offset + upto, length - upto);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public int ReadByte() {
|
public int ReadByte() {
|
||||||
|
|||||||
Generated
+25
-11
@@ -34,8 +34,8 @@
|
|||||||
//
|
//
|
||||||
// bSave
|
// bSave
|
||||||
//
|
//
|
||||||
this.bSave.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
this.bSave.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
||||||
this.bSave.Location = new System.Drawing.Point(281, 265);
|
this.bSave.Location = new System.Drawing.Point(12, 336);
|
||||||
this.bSave.Name = "bSave";
|
this.bSave.Name = "bSave";
|
||||||
this.bSave.Size = new System.Drawing.Size(75, 23);
|
this.bSave.Size = new System.Drawing.Size(75, 23);
|
||||||
this.bSave.TabIndex = 0;
|
this.bSave.TabIndex = 0;
|
||||||
@@ -46,7 +46,7 @@
|
|||||||
// bCancel
|
// bCancel
|
||||||
//
|
//
|
||||||
this.bCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
this.bCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||||
this.bCancel.Location = new System.Drawing.Point(200, 265);
|
this.bCancel.Location = new System.Drawing.Point(371, 336);
|
||||||
this.bCancel.Name = "bCancel";
|
this.bCancel.Name = "bCancel";
|
||||||
this.bCancel.Size = new System.Drawing.Size(75, 23);
|
this.bCancel.Size = new System.Drawing.Size(75, 23);
|
||||||
this.bCancel.TabIndex = 1;
|
this.bCancel.TabIndex = 1;
|
||||||
@@ -58,47 +58,61 @@
|
|||||||
//
|
//
|
||||||
this.dataGridView1.AllowUserToAddRows = false;
|
this.dataGridView1.AllowUserToAddRows = false;
|
||||||
this.dataGridView1.AllowUserToDeleteRows = false;
|
this.dataGridView1.AllowUserToDeleteRows = false;
|
||||||
this.dataGridView1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
this.dataGridView1.AllowUserToResizeRows = false;
|
||||||
| System.Windows.Forms.AnchorStyles.Left)
|
this.dataGridView1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||||
| System.Windows.Forms.AnchorStyles.Right)));
|
| System.Windows.Forms.AnchorStyles.Left)
|
||||||
this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
|
| System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.dataGridView1.ColumnHeadersHeight = 22;
|
||||||
this.dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
|
this.dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
|
||||||
this.Column1,
|
this.Column1,
|
||||||
this.Column2,
|
this.Column2,
|
||||||
this.Column3});
|
this.Column3});
|
||||||
this.dataGridView1.Location = new System.Drawing.Point(12, 12);
|
this.dataGridView1.Location = new System.Drawing.Point(12, 12);
|
||||||
|
this.dataGridView1.MultiSelect = false;
|
||||||
this.dataGridView1.Name = "dataGridView1";
|
this.dataGridView1.Name = "dataGridView1";
|
||||||
this.dataGridView1.Size = new System.Drawing.Size(344, 247);
|
this.dataGridView1.RowHeadersVisible = false;
|
||||||
|
this.dataGridView1.RowHeadersWidthSizeMode = System.Windows.Forms.DataGridViewRowHeadersWidthSizeMode.DisableResizing;
|
||||||
|
this.dataGridView1.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.CellSelect;
|
||||||
|
this.dataGridView1.Size = new System.Drawing.Size(434, 318);
|
||||||
this.dataGridView1.TabIndex = 2;
|
this.dataGridView1.TabIndex = 2;
|
||||||
this.dataGridView1.CellEndEdit += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridView1_CellEndEdit);
|
this.dataGridView1.CellEndEdit += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridView1_CellEndEdit);
|
||||||
//
|
//
|
||||||
// Column1
|
// Column1
|
||||||
//
|
//
|
||||||
this.Column1.HeaderText = "Name";
|
this.Column1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;
|
||||||
|
this.Column1.HeaderText = "Element";
|
||||||
this.Column1.Name = "Column1";
|
this.Column1.Name = "Column1";
|
||||||
this.Column1.ReadOnly = true;
|
this.Column1.ReadOnly = true;
|
||||||
|
this.Column1.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
||||||
//
|
//
|
||||||
// Column2
|
// Column2
|
||||||
//
|
//
|
||||||
this.Column2.HeaderText = "Type";
|
this.Column2.HeaderText = "Type";
|
||||||
this.Column2.Name = "Column2";
|
this.Column2.Name = "Column2";
|
||||||
this.Column2.ReadOnly = true;
|
this.Column2.ReadOnly = true;
|
||||||
|
this.Column2.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
||||||
|
this.Column2.Width = 75;
|
||||||
//
|
//
|
||||||
// Column3
|
// Column3
|
||||||
//
|
//
|
||||||
this.Column3.HeaderText = "Value";
|
this.Column3.HeaderText = "Value";
|
||||||
this.Column3.Name = "Column3";
|
this.Column3.Name = "Column3";
|
||||||
|
this.Column3.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
||||||
|
this.Column3.Width = 150;
|
||||||
//
|
//
|
||||||
// EditorWindow
|
// EditorWindow
|
||||||
//
|
//
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
this.ClientSize = new System.Drawing.Size(368, 300);
|
this.ClientSize = new System.Drawing.Size(458, 371);
|
||||||
this.Controls.Add(this.dataGridView1);
|
this.Controls.Add(this.dataGridView1);
|
||||||
this.Controls.Add(this.bCancel);
|
this.Controls.Add(this.bCancel);
|
||||||
this.Controls.Add(this.bSave);
|
this.Controls.Add(this.bSave);
|
||||||
|
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.SizableToolWindow;
|
||||||
|
this.MinimumSize = new System.Drawing.Size(300, 200);
|
||||||
this.Name = "EditorWindow";
|
this.Name = "EditorWindow";
|
||||||
this.Text = "EditorWindow";
|
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
|
||||||
|
this.Text = "Edit Values";
|
||||||
((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit();
|
((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit();
|
||||||
this.ResumeLayout(false);
|
this.ResumeLayout(false);
|
||||||
|
|
||||||
|
|||||||
+29
-16
@@ -3,31 +3,42 @@ using System.Collections.Generic;
|
|||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
|
|
||||||
namespace FalloutClient {
|
namespace FalloutClient {
|
||||||
public enum DataType : int { None=0, Int=1, Float=2, String=3 }
|
|
||||||
public partial class EditorWindow : Form {
|
public enum DataType : int { None = 0, Int = 1, Float = 2, String = 3 }
|
||||||
|
|
||||||
|
public partial class EditorWindow : Form
|
||||||
|
{
|
||||||
private readonly DataType[] types;
|
private readonly DataType[] types;
|
||||||
private readonly string[] values;
|
private readonly string[] values;
|
||||||
private bool save;
|
private bool save;
|
||||||
|
|
||||||
private EditorWindow(string[] names, DataType[] types, string[] values) {
|
private EditorWindow(string[] names, DataType[] types, string[] values, bool isMap) {
|
||||||
this.types=types;
|
this.types = types;
|
||||||
this.values=values;
|
this.values = values;
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
dataGridView1.SuspendLayout();
|
dataGridView1.SuspendLayout();
|
||||||
if(names==null) for(int i=0;i<types.Length;i++) dataGridView1.Rows.Add(i.ToString(), types[i].ToString(), values[i]);
|
if (names == null)
|
||||||
else for(int i=0;i<types.Length;i++) dataGridView1.Rows.Add(names[i], types[i].ToString(), values[i]);
|
for (int i = 0; i < types.Length; i++) {
|
||||||
|
string element = i.ToString();
|
||||||
|
if (isMap && (i % 2) == 0) element += " - Key";
|
||||||
|
dataGridView1.Rows.Add(element, types[i].ToString(), values[i]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
for (int i = 0; i < types.Length; i++) dataGridView1.Rows.Add("[0x" + (i * 4).ToString("x").ToUpper() + "]" + names[i], types[i].ToString(), values[i]);
|
||||||
dataGridView1.ResumeLayout();
|
dataGridView1.ResumeLayout();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static string[] ShowEditor(string[] names, DataType[] types, string[] values) {
|
public static string[] ShowEditor(DebugEditor form, string[] names, DataType[] types, string[] values, bool isMap = false) {
|
||||||
EditorWindow editor=new EditorWindow(names, types, values);
|
EditorWindow editor = new EditorWindow(names, types, values, isMap);
|
||||||
editor.ShowDialog();
|
editor.ShowDialog();
|
||||||
if(editor.save) return editor.values;
|
if (editor.save)
|
||||||
else return null;
|
return editor.values;
|
||||||
|
else
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool CheckInput(DataType type, string str) {
|
private bool CheckInput(DataType type, string str) {
|
||||||
switch(type) {
|
switch (type) {
|
||||||
case DataType.Int:
|
case DataType.Int:
|
||||||
int i;
|
int i;
|
||||||
return int.TryParse(str, out i);
|
return int.TryParse(str, out i);
|
||||||
@@ -39,9 +50,11 @@ namespace FalloutClient {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e) {
|
private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e) {
|
||||||
string str=(string)dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;
|
string str = (string)dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;
|
||||||
if(CheckInput(types[e.RowIndex], str)) values[e.RowIndex]=str;
|
if (str != null && CheckInput(types[e.RowIndex], str))
|
||||||
else dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value=values[e.RowIndex];
|
values[e.RowIndex] = str;
|
||||||
|
else
|
||||||
|
dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = values[e.RowIndex];
|
||||||
}
|
}
|
||||||
|
|
||||||
private void bCancel_Click(object sender, EventArgs e) {
|
private void bCancel_Click(object sender, EventArgs e) {
|
||||||
@@ -49,7 +62,7 @@ namespace FalloutClient {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void bSave_Click(object sender, EventArgs e) {
|
private void bSave_Click(object sender, EventArgs e) {
|
||||||
save=true;
|
save = true;
|
||||||
Close();
|
Close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+12
-6
@@ -12,17 +12,23 @@ namespace FalloutClient {
|
|||||||
Application.EnableVisualStyles();
|
Application.EnableVisualStyles();
|
||||||
Application.SetCompatibleTextRenderingDefault(false);
|
Application.SetCompatibleTextRenderingDefault(false);
|
||||||
|
|
||||||
if(args.Length==1&&args[0]=="-debugedit") {
|
if (args.Length == 1 && args[0] == "-debugedit") {
|
||||||
Application.Run(new DebugEditor(new EditorConnection()));
|
Application.Run(new DebugEditor(new EditorConnection()));
|
||||||
} else {
|
} else {
|
||||||
throw new Exception("Multiplayer is no longer supported");
|
MessageBox.Show("The debug editor can only be run from the game.",
|
||||||
|
"sfall Debug Editor", MessageBoxButtons.OK, MessageBoxIcon.Stop);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
enum DataTypeSend {
|
enum DataTypeSend {
|
||||||
Mouse=0, LMouseDown=1, LMouseUp=2, RMouseDown=3, RMouseUp=4, TakeChar=5, ReleaseChar=6,
|
SetGlobal = 0,
|
||||||
SetGlobal=0, SetMapVar=1, RetrieveCritter=2, SetCritter=3, SetSGlobal=4, GetArray=9, SetArray=10,
|
SetMapVar = 1,
|
||||||
Exit=254
|
RetrieveCritter = 2,
|
||||||
}
|
SetCritter = 3,
|
||||||
|
SetSGlobal = 4,
|
||||||
|
GetArray = 9,
|
||||||
|
SetArray = 10,
|
||||||
|
Exit = 254
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,12 +5,12 @@ using System.Runtime.InteropServices;
|
|||||||
// General Information about an assembly is controlled through the following
|
// General Information about an assembly is controlled through the following
|
||||||
// set of attributes. Change these attribute values to modify the information
|
// set of attributes. Change these attribute values to modify the information
|
||||||
// associated with an assembly.
|
// associated with an assembly.
|
||||||
[assembly: AssemblyTitle("FalloutClient")]
|
[assembly: AssemblyTitle("sfall Debug Editor")]
|
||||||
[assembly: AssemblyDescription("")]
|
[assembly: AssemblyDescription("")]
|
||||||
[assembly: AssemblyConfiguration("")]
|
[assembly: AssemblyConfiguration("")]
|
||||||
[assembly: AssemblyCompany("")]
|
[assembly: AssemblyCompany("")]
|
||||||
[assembly: AssemblyProduct("FalloutClient")]
|
[assembly: AssemblyProduct("sfall")]
|
||||||
[assembly: AssemblyCopyright("Copyright © 2009")]
|
[assembly: AssemblyCopyright("Copyright © 2019")]
|
||||||
[assembly: AssemblyTrademark("")]
|
[assembly: AssemblyTrademark("")]
|
||||||
[assembly: AssemblyCulture("")]
|
[assembly: AssemblyCulture("")]
|
||||||
|
|
||||||
@@ -29,5 +29,5 @@ using System.Runtime.InteropServices;
|
|||||||
// Build Number
|
// Build Number
|
||||||
// Revision
|
// Revision
|
||||||
//
|
//
|
||||||
[assembly: AssemblyVersion("1.0.0.0")]
|
[assembly: AssemblyVersion("4.1.7.0")]
|
||||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
[assembly: AssemblyFileVersion("4.1.7.0")]
|
||||||
|
|||||||
@@ -16,6 +16,21 @@
|
|||||||
<UpgradeBackupLocation>
|
<UpgradeBackupLocation>
|
||||||
</UpgradeBackupLocation>
|
</UpgradeBackupLocation>
|
||||||
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
|
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
|
||||||
|
<IsWebBootstrapper>false</IsWebBootstrapper>
|
||||||
|
<PublishUrl>publish\</PublishUrl>
|
||||||
|
<Install>true</Install>
|
||||||
|
<InstallFrom>Disk</InstallFrom>
|
||||||
|
<UpdateEnabled>false</UpdateEnabled>
|
||||||
|
<UpdateMode>Foreground</UpdateMode>
|
||||||
|
<UpdateInterval>7</UpdateInterval>
|
||||||
|
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
|
||||||
|
<UpdatePeriodically>false</UpdatePeriodically>
|
||||||
|
<UpdateRequired>false</UpdateRequired>
|
||||||
|
<MapFileExtensions>true</MapFileExtensions>
|
||||||
|
<ApplicationRevision>0</ApplicationRevision>
|
||||||
|
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
|
||||||
|
<UseApplicationTrust>false</UseApplicationTrust>
|
||||||
|
<BootstrapperEnabled>false</BootstrapperEnabled>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
<DebugSymbols>true</DebugSymbols>
|
<DebugSymbols>true</DebugSymbols>
|
||||||
@@ -33,6 +48,8 @@
|
|||||||
<DefineConstants>TRACE</DefineConstants>
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
<ErrorReport>prompt</ErrorReport>
|
<ErrorReport>prompt</ErrorReport>
|
||||||
<WarningLevel>4</WarningLevel>
|
<WarningLevel>4</WarningLevel>
|
||||||
|
<CheckForOverflowUnderflow>true</CheckForOverflowUnderflow>
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
@@ -62,6 +79,18 @@
|
|||||||
<DependentUpon>EditorWindow.cs</DependentUpon>
|
<DependentUpon>EditorWindow.cs</DependentUpon>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<BootstrapperPackage Include="Microsoft.Net.Client.3.5">
|
||||||
|
<Visible>False</Visible>
|
||||||
|
<ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
|
||||||
|
<Install>false</Install>
|
||||||
|
</BootstrapperPackage>
|
||||||
|
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
|
||||||
|
<Visible>False</Visible>
|
||||||
|
<ProductName>.NET Framework 3.5 SP1</ProductName>
|
||||||
|
<Install>false</Install>
|
||||||
|
</BootstrapperPackage>
|
||||||
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
||||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||||
Other similar extension points exist, see Microsoft.Common.targets.
|
Other similar extension points exist, see Microsoft.Common.targets.
|
||||||
@@ -71,6 +100,7 @@
|
|||||||
</Target>
|
</Target>
|
||||||
-->
|
-->
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<PostBuildEvent>copy "$(TargetPath)" "C:\Games\Fallout2\$(TargetName)$(TargetExt)"</PostBuildEvent>
|
<PostBuildEvent>
|
||||||
|
</PostBuildEvent>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
</Project>
|
</Project>
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
Microsoft Visual Studio Solution File, Format Version 11.00
|
Microsoft Visual Studio Solution File, Format Version 11.00
|
||||||
# Visual Studio 2010
|
# Visual Studio 2010
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MPClient", "MPClient.csproj", "{80ED0DCE-100E-4EC9-A79D-2FBFA4CAD1E3}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SfallDebugEditor", "SfallDebugEditor.csproj", "{80ED0DCE-100E-4EC9-A79D-2FBFA4CAD1E3}"
|
||||||
EndProject
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
; Allows you to configure advanced settings for drugs.
|
|
||||||
; Maximum 50 drugs are allowed
|
|
||||||
; Note: for vanilla drugs, you can only override the values of NumEffect and AddictTime parameters
|
|
||||||
|
|
||||||
[main]
|
|
||||||
; set to 1 to change Jet addiction to be removed after the time expires
|
|
||||||
JetWithdrawal=0
|
|
||||||
|
|
||||||
; total number of drugs in this file
|
|
||||||
Count=0
|
|
||||||
|
|
||||||
; count starts from 1
|
|
||||||
[1]
|
|
||||||
; drug item PID
|
|
||||||
PID=0
|
|
||||||
; set a limit on the count of first and second delayed effects when using the drug, i.e. if the queue has delayed effects from the drug,
|
|
||||||
; and their count is greater or equal to NumEffects, it is not possible to obtain new effects from using the drug
|
|
||||||
; this count is 4 for Buffout/Mentats/Psycho/Jet
|
|
||||||
; set -1 to leave this parameter unchanged
|
|
||||||
NumEffects=-1
|
|
||||||
; the duration of the addiction effect in game minutes (i.e. 1440 = 24 game hours)
|
|
||||||
; set to 0 to use the default time (7 days for all drugs except Jet)
|
|
||||||
AddictTime=0
|
|
||||||
; the number of the global variable from vault13.gam responsible for displaying addiction in the character screen
|
|
||||||
; set to 0 if the addiction is not required
|
|
||||||
GvarID=0
|
|
||||||
; the index number from editor.msg to display the title of the addiction (the description uses the index number of TextID + 100)
|
|
||||||
TextID=-1
|
|
||||||
; the line number (0-indexed) of the corresponding FRM in skilldex.lst
|
|
||||||
FrmID=-1
|
|
||||||
@@ -35,18 +35,10 @@
|
|||||||
|
|
||||||
;If the value is set to -99999, the variable will be ignored (similar to comment out that line)
|
;If the value is set to -99999, the variable will be ignored (similar to comment out that line)
|
||||||
|
|
||||||
;You can add simple extra perks with ID numbers from 119 to 255
|
;This is a modification to perk 119
|
||||||
; that do not require using scripting functions to change player stats, and can also be used for Armor perks
|
[119]
|
||||||
;These parameters are only for extra perks
|
|
||||||
;Stat1-Stat2 = same as Stat
|
|
||||||
;Stat1Mag-Stat2Mag = same as StatMag
|
|
||||||
;Skill3-Skill5 = The skill to be modified (or -1 for none)
|
|
||||||
;Skill3Mod-Skill5Mod = The increased/decreased value to the modified skill
|
|
||||||
|
|
||||||
;This is a modification to vanilla perk 0
|
|
||||||
[0]
|
|
||||||
Name=Example
|
Name=Example
|
||||||
Desc=This is an example perk description
|
Desc=This is an example perk~Second line
|
||||||
Image=72
|
Image=72
|
||||||
Ranks=1
|
Ranks=1
|
||||||
Level=1
|
Level=1
|
||||||
@@ -65,39 +57,6 @@ INT=0
|
|||||||
AGL=0
|
AGL=0
|
||||||
LCK=0
|
LCK=0
|
||||||
|
|
||||||
;Example for creating extra perks
|
|
||||||
[119]
|
|
||||||
Name=Extra Perk
|
|
||||||
Desc=This perk can change player stats and skills
|
|
||||||
Image=72
|
|
||||||
Ranks=1
|
|
||||||
Level=2
|
|
||||||
Type=0
|
|
||||||
Stat=-1
|
|
||||||
StatMag=0
|
|
||||||
Skill1=-1
|
|
||||||
Skill1Mag=0
|
|
||||||
Skill2=-1
|
|
||||||
Skill2Mag=0
|
|
||||||
STR=0
|
|
||||||
PER=0
|
|
||||||
END=0
|
|
||||||
CHR=0
|
|
||||||
INT=0
|
|
||||||
AGL=0
|
|
||||||
LCK=0
|
|
||||||
; for extra perks only
|
|
||||||
Stat1=-1
|
|
||||||
Stat1Mag=0
|
|
||||||
Stat2=-1
|
|
||||||
Stat2Mag=0
|
|
||||||
Skill3=-1
|
|
||||||
Skill3Mod=0
|
|
||||||
Skill4=-1
|
|
||||||
Skill4Mod=0
|
|
||||||
Skill5=-1
|
|
||||||
Skill5Mod=0
|
|
||||||
|
|
||||||
;This is a modification to trait 0
|
;This is a modification to trait 0
|
||||||
[t0]
|
[t0]
|
||||||
NoHardcode=0
|
NoHardcode=0
|
||||||
|
|||||||
@@ -14,4 +14,4 @@ PartyAddictMsg=Addict
|
|||||||
[AppearanceMod]
|
[AppearanceMod]
|
||||||
RaceText=Race
|
RaceText=Race
|
||||||
StyleText=Style
|
StyleText=Style
|
||||||
MainButtonText=Appearance
|
DoneBtn=Done
|
||||||
|
|||||||
@@ -1,91 +0,0 @@
|
|||||||
;WeaponAnims codes
|
|
||||||
; 1 - Knife (D)
|
|
||||||
; 2 - Club (E)
|
|
||||||
; 3 - Sledgehammer (F)
|
|
||||||
; 4 - Spear (G)
|
|
||||||
; 5 - Pistol (H)
|
|
||||||
; 6 - SMG (I)
|
|
||||||
; 7 - Rifle (J)
|
|
||||||
; 8 - Big Gun (K)
|
|
||||||
; 9 - Minigun (L)
|
|
||||||
; 10 - Rocket Launcher (M)
|
|
||||||
; 11-15 - sfall additional weapon animation codes
|
|
||||||
|
|
||||||
; This section maps 7 armor types to corresponding armor item PIDs
|
|
||||||
[ArmorTypes]
|
|
||||||
Jacket = 74,265
|
|
||||||
Leather = 1,379
|
|
||||||
Metal = 2,240,380
|
|
||||||
Power = 3,232
|
|
||||||
AdvPower = 348,349
|
|
||||||
Combat = 17,239,381
|
|
||||||
Robe = 113,524
|
|
||||||
|
|
||||||
; Default armor FIDs (the same for all NPCs)
|
|
||||||
[Default]
|
|
||||||
Power=16777217
|
|
||||||
AdvPower=16777287
|
|
||||||
Robe=16777218
|
|
||||||
|
|
||||||
|
|
||||||
; Sulik
|
|
||||||
[1]
|
|
||||||
PID=16777313
|
|
||||||
WeaponAnims=1,3,4,6
|
|
||||||
Default=16777280
|
|
||||||
Leather=16777325
|
|
||||||
Power=16777324
|
|
||||||
Metal=16777323
|
|
||||||
Jacket=16777321
|
|
||||||
Combat=16777322
|
|
||||||
|
|
||||||
; Vic
|
|
||||||
[2]
|
|
||||||
PID=16777278
|
|
||||||
WeaponAnims=1,5,7
|
|
||||||
Default=16777307
|
|
||||||
Jacket=16777329
|
|
||||||
Combat=16777330
|
|
||||||
Metal=16777331
|
|
||||||
Power=16777332
|
|
||||||
Leather=16777333
|
|
||||||
|
|
||||||
; Cassidy
|
|
||||||
[3]
|
|
||||||
PID=16777305
|
|
||||||
WeaponAnims=4,5,7
|
|
||||||
Default=16777354
|
|
||||||
Leather=16777260
|
|
||||||
Power=16777328
|
|
||||||
Metal=16777327
|
|
||||||
Jacket=16777351
|
|
||||||
Combat=16777326
|
|
||||||
|
|
||||||
; Myron
|
|
||||||
[4]
|
|
||||||
PID=16777376
|
|
||||||
WeaponAnims=1,5
|
|
||||||
Default=16777304
|
|
||||||
Leather=
|
|
||||||
Power=16777349
|
|
||||||
Combat=16777350
|
|
||||||
|
|
||||||
; Cat Jules
|
|
||||||
[5]
|
|
||||||
PID=16777734
|
|
||||||
WeaponAnims=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
|
|
||||||
Default=16777353
|
|
||||||
Leather=16777347
|
|
||||||
Metal=16777348
|
|
||||||
Jacket=16777346
|
|
||||||
Combat=16777226
|
|
||||||
|
|
||||||
; Kitsune
|
|
||||||
[6]
|
|
||||||
PID=16777724
|
|
||||||
WeaponAnims=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
|
|
||||||
Default=16777222
|
|
||||||
Leather=16777221
|
|
||||||
Metal=16777223
|
|
||||||
Jacket=16777222
|
|
||||||
Combat=16777219
|
|
||||||
@@ -1,57 +0,0 @@
|
|||||||
[Highlighting]
|
|
||||||
|
|
||||||
; DX scancode of a key to press to highlight items on the ground
|
|
||||||
; 42 - SHIFT key
|
|
||||||
Key=42
|
|
||||||
|
|
||||||
; Set to 1 to also highlight containers
|
|
||||||
Containers=1
|
|
||||||
|
|
||||||
; Set to 1 to also highlight lootable corpses
|
|
||||||
Corpses=1
|
|
||||||
|
|
||||||
; Set to 1 to only highlight objects in the player's line-of-sight
|
|
||||||
CheckLOS=0
|
|
||||||
|
|
||||||
; Set the color of outlines, available colors:
|
|
||||||
; 1 - glowing red
|
|
||||||
; 2 - red
|
|
||||||
; 4 - grey
|
|
||||||
; 8 - glowing green
|
|
||||||
; 16 - bright yellow
|
|
||||||
; 32 - dark yellow
|
|
||||||
; 64 - purple
|
|
||||||
OutlineColor=16
|
|
||||||
|
|
||||||
; Motion Scanner mode:
|
|
||||||
; 0 - ignored
|
|
||||||
; 1 - requires Motion Scanner present in player inventory to activate highlighting
|
|
||||||
; 2 - requires Motion Scanner and also requires 1 charge on every use (depleted scanner will not work anymore)
|
|
||||||
MotionScanner=0
|
|
||||||
|
|
||||||
|
|
||||||
[CombatControl]
|
|
||||||
;Allows you to directly control other critters in combat
|
|
||||||
;Set to 0 to disable
|
|
||||||
;Set to 1 to control all critters in combat
|
|
||||||
;Set to 2 to control all party members
|
|
||||||
;If you want to control only specific critters, uncomment the PIDList line and set a comma delimited list of PIDs
|
|
||||||
Mode=0
|
|
||||||
;PIDList=62,89,97,107,160,161
|
|
||||||
|
|
||||||
;Choose a notification box to display the name of the controlled critter above the interface bar
|
|
||||||
;Must be between 5 and (4 + the value of BoxBarCount in ddraw.ini)
|
|
||||||
;For sfall 4.1.6+ the number for the notification box is set automatically, so just use any value
|
|
||||||
;Set to 0 to disable
|
|
||||||
DisplayName=0
|
|
||||||
|
|
||||||
;Set the color of display name, available colors:
|
|
||||||
;0 - green
|
|
||||||
;1 - red
|
|
||||||
;2 - white
|
|
||||||
;3 - yellow
|
|
||||||
;4 - dark yellow
|
|
||||||
;5 - blue
|
|
||||||
;6 - purple
|
|
||||||
;7 - dull pink
|
|
||||||
DisplayNameColor=0
|
|
||||||
+40
-62
@@ -1,5 +1,5 @@
|
|||||||
;sfall configuration settings
|
;sfall configuration settings
|
||||||
;v4.1.6
|
;v3.8.17
|
||||||
|
|
||||||
[Main]
|
[Main]
|
||||||
;Change to 1 if you want to use command line args to tell sfall to use another ini file.
|
;Change to 1 if you want to use command line args to tell sfall to use another ini file.
|
||||||
@@ -8,14 +8,6 @@ UseCommandLine=0
|
|||||||
;Uncomment and point to a file to get alternate translations for some sfall messages
|
;Uncomment and point to a file to get alternate translations for some sfall messages
|
||||||
;TranslationsINI=./Translations.ini
|
;TranslationsINI=./Translations.ini
|
||||||
|
|
||||||
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
||||||
[ExtraPatches]
|
|
||||||
;This section allows you to set multiple paths to folders containing mods or patches that will be loaded by the game
|
|
||||||
;The priority of read files will be higher than the files in patchXXX.dat. If DataLoadOrderPatch is enabled, the data load order will be:
|
|
||||||
;master_patches > critter_patches > PatchFile99 - PatchFile0 > patchXXX.dat > ...
|
|
||||||
;Paths to folders and Fallout .dat files are supported. The available range for PatchFile option names is from 0 to 99
|
|
||||||
;PatchFile0=mods\RP_data
|
|
||||||
|
|
||||||
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
||||||
[Sound]
|
[Sound]
|
||||||
;Sets the number of allowed simultaneous sound effects
|
;Sets the number of allowed simultaneous sound effects
|
||||||
@@ -78,8 +70,11 @@ GraphicsHeight=0
|
|||||||
;GPU is faster, but requires v2.0 pixel shader support
|
;GPU is faster, but requires v2.0 pixel shader support
|
||||||
GPUBlt=0
|
GPUBlt=0
|
||||||
|
|
||||||
;Set to 1 to allow using 32 bit graphics for talking heads
|
;Set to 1 to allow using 32-bit textures for talking heads
|
||||||
;Requires graphics mode 4 or 5, and GPUBlt set to 1
|
;The texture files should be placed in art/heads/<name of the talking head FRM file>/ (w/o extension)
|
||||||
|
;The files in the folder should be numbered according to the number of frames in the talking head FRM file (0.png, 1.png, etc.)
|
||||||
|
;See the text file in the modders pack for a detailed description
|
||||||
|
;Requires DX9 graphics mode and v2.0 pixel shader support (see GPUBlt option)
|
||||||
Use32BitHeadGraphics=0
|
Use32BitHeadGraphics=0
|
||||||
|
|
||||||
;Set to 1 to automatically search for alternative avi video files when Fallout tries to play the game movies
|
;Set to 1 to automatically search for alternative avi video files when Fallout tries to play the game movies
|
||||||
@@ -147,6 +142,23 @@ SpeedKey9=0x00
|
|||||||
;Set to -1 for either ctrl key, -2 for either alt key or -3 for either shift key
|
;Set to -1 for either ctrl key, -2 for either alt key or -3 for either shift key
|
||||||
WindowScrollKey=0
|
WindowScrollKey=0
|
||||||
|
|
||||||
|
;A key to press to toggle the highlighting of all items on the ground on the current map
|
||||||
|
;Set to 0 if you don't want a toggle key, or a DX scancode otherwise
|
||||||
|
ToggleItemHighlightsKey=42
|
||||||
|
|
||||||
|
;Set to 1 to also highlight containers
|
||||||
|
HighlightContainers=1
|
||||||
|
|
||||||
|
;Set the color of outlines, available colors:
|
||||||
|
;0x01 - glowing red
|
||||||
|
;0x02 - red
|
||||||
|
;0x04 - grey
|
||||||
|
;0x08 - glowing green
|
||||||
|
;0x10 - bright yellow
|
||||||
|
;0x20 - dark yellow
|
||||||
|
;0x40 - purple
|
||||||
|
OutlineColor=0x10
|
||||||
|
|
||||||
;A key to press to reload your currently equipped weapon
|
;A key to press to reload your currently equipped weapon
|
||||||
;Set to 0 if you don't want a reload key, or a DX scancode otherwise
|
;Set to 0 if you don't want a reload key, or a DX scancode otherwise
|
||||||
ReloadWeaponKey=0
|
ReloadWeaponKey=0
|
||||||
@@ -215,10 +227,6 @@ UseFileSystemOverride=0
|
|||||||
;Modified: master_patches > critter_patches > patchXXX.dat > critter_dat > f2_res_patches > f2_res_dat > master_dat
|
;Modified: master_patches > critter_patches > patchXXX.dat > critter_dat > f2_res_patches > f2_res_dat > master_dat
|
||||||
DataLoadOrderPatch=0
|
DataLoadOrderPatch=0
|
||||||
|
|
||||||
;Set to 1 to enable loading alternative dialog msg files from text/language/dialog_female/ for female PC
|
|
||||||
;Set to 2 to also load subtitle files from text/language/cuts_female/ for female PC
|
|
||||||
FemaleDialogMsgs=0
|
|
||||||
|
|
||||||
;To change the default and starting player models, uncomment the next four lines.
|
;To change the default and starting player models, uncomment the next four lines.
|
||||||
;The default models can also be changed ingame via script
|
;The default models can also be changed ingame via script
|
||||||
;MaleStartModel=hmwarr
|
;MaleStartModel=hmwarr
|
||||||
@@ -420,6 +428,7 @@ UseScrollingQuestsList=1
|
|||||||
|
|
||||||
;Use this line to modify the list of cities and their associated global variables used for city reputations
|
;Use this line to modify the list of cities and their associated global variables used for city reputations
|
||||||
;Syntax is 'city id:global id', with each city/global pair separated by a comma.
|
;Syntax is 'city id:global id', with each city/global pair separated by a comma.
|
||||||
|
;CityRepsCount=19
|
||||||
;CityRepsList=0:47,2:48,1:49,4:50,5:51,3:52,8:53,6:54,7:55,13:56,10:57,11:59,14:61,17:63,19:64,18:65,25:66,9:294,20:308
|
;CityRepsList=0:47,2:48,1:49,4:50,5:51,3:52,8:53,6:54,7:55,13:56,10:57,11:59,14:61,17:63,19:64,18:65,25:66,9:294,20:308
|
||||||
|
|
||||||
;Set this to a valid path to save a copy of the console contents
|
;Set this to a valid path to save a copy of the console contents
|
||||||
@@ -428,14 +437,6 @@ UseScrollingQuestsList=1
|
|||||||
;Set to 1 to add additional pages of save slots
|
;Set to 1 to add additional pages of save slots
|
||||||
ExtraSaveSlots=0
|
ExtraSaveSlots=0
|
||||||
|
|
||||||
;To use more than one save slot for quick saving (F6 key) without picking a slot beforehand, set the next two lines
|
|
||||||
;AutoQuickSave sets how many save slots on a page you want to use for quick saving (valid range: 1..10)
|
|
||||||
;AutoQuickSavePage is the page number to use (valid range: 1..1000) if ExtraSaveSlots is enabled
|
|
||||||
;The quick saves will be rotated from the first slot on the page to the n-th slot
|
|
||||||
;Set to 0 to disable. AutoQuickSave will use the current selected page if AutoQuickSavePage is disabled
|
|
||||||
AutoQuickSave=0
|
|
||||||
AutoQuickSavePage=0
|
|
||||||
|
|
||||||
;Set to 1 to speed up the HP/AC counter animations
|
;Set to 1 to speed up the HP/AC counter animations
|
||||||
;Set to 2 to update the HP/AC counters instantly
|
;Set to 2 to update the HP/AC counters instantly
|
||||||
;Set to 3 to update the AC counter instantly when switching to other controlled critters in combat
|
;Set to 3 to update the AC counter instantly when switching to other controlled critters in combat
|
||||||
@@ -443,6 +444,7 @@ SpeedInterfaceCounterAnims=0
|
|||||||
|
|
||||||
;These lines allow you to control the karma FRMs displayed on the character screen
|
;These lines allow you to control the karma FRMs displayed on the character screen
|
||||||
;Number of KarmaPoints should be 1 less than number of KarmaFRMs
|
;Number of KarmaPoints should be 1 less than number of KarmaFRMs
|
||||||
|
;KarmaFRMsCount=3
|
||||||
;KarmaFRMs=47,48,49
|
;KarmaFRMs=47,48,49
|
||||||
;KarmaPoints=-100,100
|
;KarmaPoints=-100,100
|
||||||
|
|
||||||
@@ -453,11 +455,8 @@ ScienceOnCritters=0
|
|||||||
;Default is 166
|
;Default is 166
|
||||||
SpeedInventoryPCRotation=166
|
SpeedInventoryPCRotation=166
|
||||||
|
|
||||||
;Modify the number of the extra interface boxes available to modders. (Default is 5, and the maximum is 95)
|
;Uncomment to set the text colour of the extra 5 interface boxes
|
||||||
BoxBarCount=5
|
;The line must contain 5 digits, each either a 0 for green or 1 for red
|
||||||
|
|
||||||
;Uncomment to set the text colour of the extra interface boxes
|
|
||||||
;The line must contain the same number of digits as the value of BoxBarCount, each either a 0 for green or 1 for red
|
|
||||||
;BoxBarColours=00000
|
;BoxBarColours=00000
|
||||||
|
|
||||||
;Set to 1 to fix the bug that caused bonus HtH damage to not be applied correctly.
|
;Set to 1 to fix the bug that caused bonus HtH damage to not be applied correctly.
|
||||||
@@ -499,10 +498,6 @@ BoostScriptDialogLimit=0
|
|||||||
;See the Stats.ini in the modders pack for an example file
|
;See the Stats.ini in the modders pack for an example file
|
||||||
;DerivedStats=Stats.ini
|
;DerivedStats=Stats.ini
|
||||||
|
|
||||||
;Allows you to change some parameters for drugs and their addictions
|
|
||||||
;See the Drugs.ini in the modders pack for an example file
|
|
||||||
;DrugsFile=Drugs.ini
|
|
||||||
|
|
||||||
;These options modify the checks to see if a critter can carry an additional item, changing which items are counted towards the weight limit and adding an additional size check
|
;These options modify the checks to see if a critter can carry an additional item, changing which items are counted towards the weight limit and adding an additional size check
|
||||||
;Set the mode to 0 to disable the size check, 1 to apply to the PC only, 2 to apply to the PC and party members, or 3 to apply to all critters
|
;Set the mode to 0 to disable the size check, 1 to apply to the PC only, 2 to apply to the PC and party members, or 3 to apply to all critters
|
||||||
;Only the PC uses CritterInvSizeLimit. Other critters will use the unused stat (STAT_unused = 10) or have the size limit of 100 if the stat is not set
|
;Only the PC uses CritterInvSizeLimit. Other critters will use the unused stat (STAT_unused = 10) or have the size limit of 100 if the stat is not set
|
||||||
@@ -514,6 +509,7 @@ CritterInvSizeLimit=100
|
|||||||
;Some bit flags to alter behaviour of the motion sensor
|
;Some bit flags to alter behaviour of the motion sensor
|
||||||
;1 - Allow sensor use on automap when motion sensor is in pack rather than hands
|
;1 - Allow sensor use on automap when motion sensor is in pack rather than hands
|
||||||
;2 - Motion sensor doesn't require charges
|
;2 - Motion sensor doesn't require charges
|
||||||
|
;4 - Motion sensor is required to use the item highlight feature
|
||||||
MotionScannerFlags=1
|
MotionScannerFlags=1
|
||||||
|
|
||||||
;Set to non-0 to adjust the maximum encounter table size
|
;Set to non-0 to adjust the maximum encounter table size
|
||||||
@@ -601,6 +597,14 @@ DialogPanelAnimDelay=33
|
|||||||
;Controls the speed of pipboy alarm clock animations (lower - faster; valid range: 0..127)
|
;Controls the speed of pipboy alarm clock animations (lower - faster; valid range: 0..127)
|
||||||
PipboyTimeAnimDelay=50
|
PipboyTimeAnimDelay=50
|
||||||
|
|
||||||
|
;Allows you to directly control other critters in combat
|
||||||
|
;Set to 0 to disable
|
||||||
|
;Set to 1 to control all critters in combat
|
||||||
|
;Set to 2 to control all party members
|
||||||
|
;If you want to control only specific critters, uncomment the ControlCombatPIDList line and set a comma delimited list of PIDs
|
||||||
|
ControlCombat=0
|
||||||
|
;ControlCombatPIDList=62,89,97,107,160,161
|
||||||
|
|
||||||
;Set to 1 to stack empty identical weapons, no matter what type of ammo was loaded before
|
;Set to 1 to stack empty identical weapons, no matter what type of ammo was loaded before
|
||||||
StackEmptyWeapons=0
|
StackEmptyWeapons=0
|
||||||
|
|
||||||
@@ -638,9 +642,6 @@ CarChargingFix=1
|
|||||||
InstantWeaponEquip=0
|
InstantWeaponEquip=0
|
||||||
|
|
||||||
;To add additional game msg files, uncomment the next line and set a comma delimited list of filenames without .msg extension
|
;To add additional game msg files, uncomment the next line and set a comma delimited list of filenames without .msg extension
|
||||||
;By default, the files will have consecutive numbers assigned beginning with 0
|
|
||||||
;You can use the syntax 'filename:number' to manually assign numbers to specific msg files, with each pair separated by a comma
|
|
||||||
;If a file after the specified pair does not have a number assigned, it will have the next consecutive number from the last pair
|
|
||||||
;You need to use the message_str_game script function to get messages from the files
|
;You need to use the message_str_game script function to get messages from the files
|
||||||
;ExtraGameMsgFileList=
|
;ExtraGameMsgFileList=
|
||||||
|
|
||||||
@@ -650,9 +651,6 @@ NumbersInDialogue=0
|
|||||||
;Set to 1 to use Fallout's normal text font instead of DOS-like font on the world map
|
;Set to 1 to use Fallout's normal text font instead of DOS-like font on the world map
|
||||||
WorldMapFontPatch=0
|
WorldMapFontPatch=0
|
||||||
|
|
||||||
;Set to 1 to keep the selected attack mode when moving the weapon between active item slots
|
|
||||||
KeepWeaponSelectMode=1
|
|
||||||
|
|
||||||
;Set to 1 to display full item description for weapon/ammo in the barter screen
|
;Set to 1 to display full item description for weapon/ammo in the barter screen
|
||||||
FullItemDescInBarter=0
|
FullItemDescInBarter=0
|
||||||
|
|
||||||
@@ -662,17 +660,6 @@ DisplaySwiftLearnerExp=1
|
|||||||
;Set to 1 to display party member's current level/AC/addict flag on the combat control panel
|
;Set to 1 to display party member's current level/AC/addict flag on the combat control panel
|
||||||
PartyMemberExtraInfo=0
|
PartyMemberExtraInfo=0
|
||||||
|
|
||||||
;Set to 1 to fix the bug of using First Aid/Doctor skills when using them on the player
|
|
||||||
;This will cause the party member to apply his/her skills when you use First Aid/Doctor skills on the player, but only if
|
|
||||||
;the player is standing next to the party member
|
|
||||||
;Note that because the related engine function is not fully implemented, enabling this option without a global script
|
|
||||||
;that overrides First Aid/Doctor functions has very limited usefulness
|
|
||||||
PartyMemberSkillFix=0
|
|
||||||
|
|
||||||
;Set to 1 to skip loading game settings from a saved game, except for the game/combat difficulty settings
|
|
||||||
;Set to 2 to also skip loading the game/combat difficulty settings
|
|
||||||
SkipLoadingGameSettings=0
|
|
||||||
|
|
||||||
;Set to 1 to prevent the inventory/loot/automap interfaces from being placed on top of other script-created windows
|
;Set to 1 to prevent the inventory/loot/automap interfaces from being placed on top of other script-created windows
|
||||||
InterfaceDontMoveOnTop=0
|
InterfaceDontMoveOnTop=0
|
||||||
|
|
||||||
@@ -680,16 +667,13 @@ InterfaceDontMoveOnTop=0
|
|||||||
;Set to -1 to disable the special death message when the global variable is set
|
;Set to -1 to disable the special death message when the global variable is set
|
||||||
SpecialDeathGVAR=491
|
SpecialDeathGVAR=491
|
||||||
|
|
||||||
|
;Set to 1 to disable the special handling of map IDs 19 and 37 in the engine when entering the maps
|
||||||
|
;Note that enabling this option can break the map changes in Modoc and Vault 15
|
||||||
|
DisableSpecialMapIDs=0
|
||||||
|
|
||||||
;Set to 1 to display sfall built-in credits at the bottom of credits.txt contents instead of at the top
|
;Set to 1 to display sfall built-in credits at the bottom of credits.txt contents instead of at the top
|
||||||
CreditsAtBottom=0
|
CreditsAtBottom=0
|
||||||
|
|
||||||
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
||||||
[Scripts]
|
|
||||||
;Comma-separated list of masked paths to load global scripts from
|
|
||||||
;Only use single slash \ as directory separator
|
|
||||||
;Paths outside of scripts folder are supported
|
|
||||||
GlobalScriptPaths=scripts\gl*.int,scripts\sfall\gl*.int
|
|
||||||
|
|
||||||
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
||||||
[Debugging]
|
[Debugging]
|
||||||
;Extra sfall configuration settings that can be used by modders
|
;Extra sfall configuration settings that can be used by modders
|
||||||
@@ -733,12 +717,6 @@ DontDeleteProtos=0
|
|||||||
;Set to 1 to give scripts direct access to Fallout's address space, and to make arbitrary calls into Fallout's code
|
;Set to 1 to give scripts direct access to Fallout's address space, and to make arbitrary calls into Fallout's code
|
||||||
AllowUnsafeScripting=0
|
AllowUnsafeScripting=0
|
||||||
|
|
||||||
;Set to 1 to force sfall to search for global scripts every time the game loads rather than only once on the first game start
|
|
||||||
AlwaysFindScripts=0
|
|
||||||
|
|
||||||
;Set to 1 to force sfall to inject all hooks code into the game, even if corresponding hook scripts don't exist
|
|
||||||
InjectAllGameHooks=0
|
|
||||||
|
|
||||||
;Set to 1 to hide error messages in debug output when a null value is passed to the function as an object
|
;Set to 1 to hide error messages in debug output when a null value is passed to the function as an object
|
||||||
HideObjIsNullMsg=0
|
HideObjIsNullMsg=0
|
||||||
|
|
||||||
|
|||||||
@@ -1,44 +0,0 @@
|
|||||||
/*
|
|
||||||
Example implementation of the algorithm of how the game engine sets the explosive timer.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "..\..\scripting_docs\headers\sfall.h"
|
|
||||||
#include "..\..\scripting_docs\headers\define_lite.h"
|
|
||||||
|
|
||||||
// from CONDTION.H
|
|
||||||
#define ROLL_CRITICAL_FAILURE (0)
|
|
||||||
#define ROLL_FAILURE (1)
|
|
||||||
#define ROLL_SUCCESS (2)
|
|
||||||
#define ROLL_CRITICAL_SUCCESS (3)
|
|
||||||
|
|
||||||
procedure start;
|
|
||||||
|
|
||||||
procedure start begin
|
|
||||||
if game_loaded then begin
|
|
||||||
register_hook(HOOK_EXPLOSIVETIMER);
|
|
||||||
end else begin
|
|
||||||
variable
|
|
||||||
time := get_sfall_arg,
|
|
||||||
result := ROLL_CRITICAL_FAILURE;
|
|
||||||
|
|
||||||
if has_trait(TRAIT_PERK, dude_obj, PERK_demolition_expert_perk) then
|
|
||||||
result := ROLL_SUCCESS;
|
|
||||||
else begin
|
|
||||||
result := roll_vs_skill(dude_obj, SKILL_TRAPS, 0);
|
|
||||||
end
|
|
||||||
|
|
||||||
if (result) then begin
|
|
||||||
if (result == ROLL_FAILURE) then
|
|
||||||
time /= 2;
|
|
||||||
else begin // success or critical success
|
|
||||||
result := ROLL_SUCCESS;
|
|
||||||
end
|
|
||||||
end else begin // critical failure
|
|
||||||
time := 0;
|
|
||||||
result := ROLL_FAILURE;
|
|
||||||
end
|
|
||||||
|
|
||||||
set_sfall_return(time);
|
|
||||||
set_sfall_return(result); // failure/success
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,60 +0,0 @@
|
|||||||
/*
|
|
||||||
Example implementation of the algorithm of how the game engine checks if one critter sees another critter.
|
|
||||||
|
|
||||||
NOTE: the AllowUnsafeScripting option must be enabled.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "..\headers\define.h"
|
|
||||||
#include "..\headers\command.h"
|
|
||||||
#include "..\headers\sfall\sfall.h"
|
|
||||||
#include "..\headers\sfall\define_extra.h"
|
|
||||||
|
|
||||||
#define can_see_(source, target) call_offset_r2(0x412BEC, source, target)
|
|
||||||
#define obj_dist_(target, source) call_offset_r2(0x48BBD4, target, source)
|
|
||||||
|
|
||||||
procedure start;
|
|
||||||
|
|
||||||
procedure start begin
|
|
||||||
if game_loaded then begin
|
|
||||||
register_hook(HOOK_WITHINPERCEPTION);
|
|
||||||
end else begin
|
|
||||||
variable
|
|
||||||
source := get_sfall_arg,
|
|
||||||
target := get_sfall_arg,
|
|
||||||
original := get_sfall_arg,
|
|
||||||
hookType := get_sfall_arg, /* new arg */
|
|
||||||
result := 0,
|
|
||||||
distance;
|
|
||||||
|
|
||||||
if target then begin
|
|
||||||
distance := get_critter_stat(source, STAT_pe);
|
|
||||||
|
|
||||||
if can_see_(source, target) then begin
|
|
||||||
distance *= 5;
|
|
||||||
if (get_flags(target) bwand FLAG_TRANSGLASS) then distance /= 2;
|
|
||||||
end else if combat_is_initialized then begin
|
|
||||||
distance *= 2;
|
|
||||||
end
|
|
||||||
|
|
||||||
if (target == dude_obj) then begin
|
|
||||||
if sneak_success then begin
|
|
||||||
distance /= 4;
|
|
||||||
if has_skill(target, SKILL_SNEAK) > 120 then distance -= 1;
|
|
||||||
end else if dude_is_sneaking then begin
|
|
||||||
distance := distance * 2 / 3;
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if obj_dist_(target, source) <= distance then result := 1;
|
|
||||||
|
|
||||||
// example
|
|
||||||
if (result) then begin
|
|
||||||
display_msg("hs_withinperception: " + obj_name(source) + " sees " + obj_name(target) + " [original: " + original + " script: " + result + "]");
|
|
||||||
end else begin
|
|
||||||
display_msg("hs_withinperception: " + obj_name(source) + " does not see " + obj_name(target) + " [original: " + original + " script: " + result + "]");
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
//set_sfall_return(result);
|
|
||||||
end
|
|
||||||
end
|
|
||||||
Binary file not shown.
@@ -1,134 +0,0 @@
|
|||||||
/**
|
|
||||||
|
|
||||||
Item Highlight mod.
|
|
||||||
|
|
||||||
Previously was part of sfall itself, now a separate mod.
|
|
||||||
Features:
|
|
||||||
- highlighting items, containers (optional) and lootable corpses (optional) on the ground
|
|
||||||
- configurable hotkey is used to trigger highlight
|
|
||||||
- only objects in direct line-of-sight of player are highlighted (optional)
|
|
||||||
- motion scanner is required to enable highlight (optional)
|
|
||||||
- motion scanner charges are decreased on each use (optional)
|
|
||||||
|
|
||||||
NOTE: this script requires compiler from sfall modderspack with -s option
|
|
||||||
(short circuit evaluation)
|
|
||||||
|
|
||||||
version 1.1
|
|
||||||
|
|
||||||
**/
|
|
||||||
|
|
||||||
#include "main.h"
|
|
||||||
//#include "..\..\..\!SRC\headers\define.h"
|
|
||||||
|
|
||||||
#define CRITTER_IS_DEAD (1)
|
|
||||||
#define PID_MOTION_SENSOR (59)
|
|
||||||
#define NO_HIGHLIGHT(obj) (get_flags(obj) bwand FLAG_NOHIGHLIGHT)
|
|
||||||
#define NO_STEAL(obj) (get_proto_data(obj_pid(obj), PROTO_CR_FLAGS) bwand CFLG_NOSTEAL)
|
|
||||||
|
|
||||||
variable configSection := "Highlighting";
|
|
||||||
variable highlightKey;
|
|
||||||
variable isHighlight;
|
|
||||||
variable alsoContainer;
|
|
||||||
variable alsoCorpse;
|
|
||||||
variable checkLOS;
|
|
||||||
variable outlineColor;
|
|
||||||
variable motionScanner;
|
|
||||||
variable highlightFailMsg1;
|
|
||||||
variable highlightFailMsg2;
|
|
||||||
|
|
||||||
procedure ToggleHighlightObject(variable obj, variable enable) begin
|
|
||||||
if obj and (not enable or not checkLOS or not obj_blocking_line(dude_obj, tile_num(obj), BLOCKING_TYPE_SHOOT)) then begin
|
|
||||||
if (alsoContainer and obj_item_subtype(obj) == item_type_container) or (not NO_HIGHLIGHT(obj)) then begin
|
|
||||||
if (enable) then set_outline(obj, outlineColor);
|
|
||||||
else set_outline(obj, 0);
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
procedure ToggleHighlight(variable enable) begin
|
|
||||||
variable obj;
|
|
||||||
foreach obj in list_as_array(LIST_GROUNDITEMS) begin
|
|
||||||
if obj != outlined_object then begin
|
|
||||||
call ToggleHighlightObject(obj, enable);
|
|
||||||
end
|
|
||||||
end
|
|
||||||
if (alsoCorpse) then begin
|
|
||||||
foreach obj in list_as_array(LIST_CRITTERS) begin
|
|
||||||
if critter_state(obj) == CRITTER_IS_DEAD and not NO_STEAL(obj) then begin
|
|
||||||
call ToggleHighlightObject(obj, enable);
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
tile_refresh_display;
|
|
||||||
end
|
|
||||||
|
|
||||||
procedure KeyPressHandler begin
|
|
||||||
variable pressed := get_sfall_arg,
|
|
||||||
scanCode := get_sfall_arg,
|
|
||||||
scanner, charges;
|
|
||||||
|
|
||||||
if scanCode == highlightKey and not(get_game_mode bwand (INTFACELOOT bwor BARTER)) then begin
|
|
||||||
if pressed then begin
|
|
||||||
isHighlight := true;
|
|
||||||
if motionScanner then begin
|
|
||||||
scanner := obj_carrying_pid_obj(dude_obj, PID_MOTION_SENSOR);
|
|
||||||
if scanner then begin
|
|
||||||
if motionScanner >= 2 then begin
|
|
||||||
charges := get_weapon_ammo_count(scanner);
|
|
||||||
if charges > 0 then begin
|
|
||||||
set_weapon_ammo_count(scanner, charges - 1);
|
|
||||||
intface_redraw;
|
|
||||||
call ToggleHighlight(true);
|
|
||||||
end else begin
|
|
||||||
display_msg(highlightFailMsg2);
|
|
||||||
end
|
|
||||||
end else begin
|
|
||||||
call ToggleHighlight(true);
|
|
||||||
end
|
|
||||||
end else begin
|
|
||||||
display_msg(highlightFailMsg1);
|
|
||||||
end
|
|
||||||
end else begin
|
|
||||||
call ToggleHighlight(true);
|
|
||||||
end
|
|
||||||
end else begin
|
|
||||||
isHighlight := false;
|
|
||||||
call ToggleHighlight(false);
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
procedure CombatTurnHandler begin
|
|
||||||
if isHighlight then begin
|
|
||||||
isHighlight := false;
|
|
||||||
call ToggleHighlight(false);
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
procedure GameModeChangeHandler begin
|
|
||||||
if isHighlight and (get_game_mode bwand (INTFACELOOT bwor BARTER)) then begin
|
|
||||||
isHighlight := false;
|
|
||||||
call ToggleHighlight(false);
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
procedure start begin
|
|
||||||
if game_loaded and (sfall_ver_major >= 4) then begin
|
|
||||||
call InitConfigs;
|
|
||||||
|
|
||||||
highlightKey := GetConfig(configSection, "Key", 0);
|
|
||||||
alsoContainer := GetConfig(configSection, "Containers", 0);
|
|
||||||
alsoCorpse := GetConfig(configSection, "Corpses", 0);
|
|
||||||
checkLOS := GetConfig(configSection, "CheckLOS", 0);
|
|
||||||
outlineColor := GetConfig(configSection, "OutlineColor", 16);
|
|
||||||
if (outlineColor < 1) then outlineColor := 64;
|
|
||||||
motionScanner := GetConfig(configSection, "MotionScanner", 0);
|
|
||||||
|
|
||||||
highlightFailMsg1 := Translate("HighlightFail1", "You aren't carrying a motion sensor.");
|
|
||||||
highlightFailMsg2 := Translate("HighlightFail2", "Your motion sensor is out of charge.");
|
|
||||||
|
|
||||||
register_hook_proc(HOOK_KEYPRESS, KeyPressHandler);
|
|
||||||
register_hook_proc(HOOK_COMBATTURN, CombatTurnHandler);
|
|
||||||
register_hook_proc(HOOK_GAMEMODECHANGE, GameModeChangeHandler);
|
|
||||||
end
|
|
||||||
end
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user