Subversion Repositories plumbers

Compare Revisions

Regard whitespace Rev 10 → Rev 9

/trunk/FileFormat/Delphi/GameBinStruct.pas
54,15 → 54,12
unknown2: array[0..1] of Word;
scenes: array[0..99] of TSceneDef; // Scenes start at 0x0016
pictures: array[0..1999] of TPictureDef; // Pictures start at 0x2596
 
function AddSceneAtEnd(SceneID: integer): PSceneDef;
procedure DeleteScene(SceneIndex: integer);
procedure SwapScene(IndexA, IndexB: integer);
procedure DeletePicture(PictureIndex: integer);
procedure SwapPicture(IndexA, IndexB: integer);
function AddPictureBetween(Index: integer; assignToUpperScene: boolean=true): PPictureDef;
function RealPictureCount: integer;
function RealActionCount: integer;
function AddPictureBetween(Index: integer): PPictureDef;
end;
 
procedure _WriteStringToFilename(x: PAnsiFileName; s: AnsiString);
96,31 → 93,8
CopyMemory(@Self.scenes[SceneIndex], @Self.scenes[SceneIndex+1], (Length(Self.scenes)-SceneIndex-1)*SizeOf(TSceneDef));
end;
ZeroMemory(@Self.scenes[Length(Self.scenes)-1], SizeOf(TSceneDef));
Dec(Self.numScenes);
end;
 
function TGameBinFile.RealActionCount: integer;
var
iScene: integer;
begin
result := 0;
for iScene := 0 to Self.numScenes - 1 do
begin
result := result + Self.scenes[iScene].numActions;
end;
end;
 
function TGameBinFile.RealPictureCount: integer;
var
iScene: integer;
begin
result := 0;
for iScene := 0 to Self.numScenes - 1 do
begin
result := result + Self.scenes[iScene].numPics;
end;
end;
 
procedure TGameBinFile.SwapScene(IndexA, IndexB: integer);
var
bakScene: TSceneDef;
134,12 → 108,10
 
procedure TGameBinFile.DeletePicture(PictureIndex: integer);
var
iScene, iScene2: integer;
protection: integer; // prevents that two scenes get the same picture index when all pictures in a scene are deleted
iScene: integer;
begin
if (PictureIndex < 0) or (PictureIndex >= Length(Self.pictures)) then raise Exception.Create('Invalid picture index');
 
protection := 0;
for iScene := 0 to Self.numScenes-1 do
begin
if (PictureIndex >= Self.scenes[iScene].pictureIndex) and
146,31 → 118,18
(PictureIndex <= Self.scenes[iScene].pictureIndex + Self.scenes[iScene].numPics - 1) then
begin
Dec(Self.scenes[iScene].numPics);
if Self.scenes[iScene].numPics = 0 then
begin
for iScene2 := 0 to Self.numScenes-1 do
begin
if Self.scenes[iScene2].pictureIndex = PictureIndex+1 then
begin
protection := 1;
break;
end;
end;
end;
end
else if (PictureIndex+protection < Self.scenes[iScene].pictureIndex) then
else if (PictureIndex < Self.scenes[iScene].pictureIndex) then
begin
Dec(Self.scenes[iScene].pictureIndex);
end;
end;
 
If (PictureIndex+protection < Length(Self.pictures)-1) and (protection = 0) then
If PictureIndex < Length(Self.pictures)-1 then
begin
CopyMemory(@Self.pictures[PictureIndex+protection], @Self.pictures[PictureIndex+protection+1], (Length(Self.pictures)-PictureIndex+protection-1)*SizeOf(TPictureDef));
CopyMemory(@Self.pictures[PictureIndex], @Self.pictures[PictureIndex+1], (Length(Self.pictures)-PictureIndex-1)*SizeOf(TPictureDef));
end;
ZeroMemory(@Self.pictures[Length(Self.pictures)-1], SizeOf(TPictureDef));
 
Dec(Self.numPics);
end;
 
procedure TGameBinFile.SwapPicture(IndexA, IndexB: integer);
187,34 → 146,13
CopyMemory(@Self.pictures[IndexB], @bakPicture, SizeOf(TPictureDef));
end;
 
function TGameBinFile.AddPictureBetween(Index: integer; assignToUpperScene: boolean=true): PPictureDef;
 
function _HasBuffer(Index: integer): boolean;
function TGameBinFile.AddPictureBetween(Index: integer): PPictureDef;
var
iScene: integer;
begin
for iScene := 0 to Self.numScenes-1 do
begin
if Self.scenes[iScene].pictureIndex = Index+1 then
begin
result := true;
exit;
end;
end;
result := false;
end;
 
var
iScene: integer;
begin
if Self.numPics >= Length(Self.pictures) then raise Exception.Create('No more space for another picture');
if ((Index < 0) or (Index >= Length(Self.pictures))) then raise Exception.Create('Invalid picture index');
 
if assignToUpperScene then
begin
// Sc1 Sc2 Sc1 Sc2
// A B | C ==> A B | X C
// ^
for iScene := 0 to Self.numScenes-1 do
begin
if (Index >= Self.scenes[iScene].pictureIndex) and
222,40 → 160,15
begin
Inc(Self.scenes[iScene].numPics);
end
else if (index < Self.scenes[iScene].pictureIndex) and not _HasBuffer(index) then
else if (index < Self.scenes[iScene].pictureIndex) then
begin
Inc(Self.scenes[iScene].pictureIndex);
end;
end;
end
else
begin
// Sc1 Sc2 Sc1 Sc2
// A B | C ==> A B X | C
// ^
for iScene := 0 to Self.numScenes-1 do
begin
if (Index >= 1 + Self.scenes[iScene].pictureIndex) and
(index <= 1 + Self.scenes[iScene].pictureIndex + Max(0,Self.scenes[iScene].numPics-1)) then
begin
Inc(Self.scenes[iScene].numPics);
end
else if (index <= Self.scenes[iScene].pictureIndex) and not _HasBuffer(index) then
begin
Inc(Self.scenes[iScene].pictureIndex);
end;
end;
end;
 
result := @Self.pictures[Index];
if not _HasBuffer(index) then
begin
CopyMemory(@Self.pictures[Index+1], result, (Length(Self.pictures)-Index-1)*SizeOf(TPictureDef));
end;
ZeroMemory(result, SizeOf(TPictureDef));
 
Inc(Self.numPics);
end;
 
end.
/trunk/SceneEditor/Unit1.dfm
15,7 → 15,6
Menu = MainMenu1
OldCreateOrder = False
Position = poScreenCenter
OnCloseQuery = FormCloseQuery
OnCreate = FormCreate
OnShow = FormShow
DesignSize = (
66,7 → 65,7
Height = 46
Anchors = [akLeft, akBottom]
Caption = 'Save'
TabOrder = 7
TabOrder = 6
OnClick = Button3Click
end
object Button4: TButton
96,7 → 95,7
Height = 46
Anchors = [akLeft, akBottom]
Caption = 'Save + Test'
TabOrder = 8
TabOrder = 7
OnClick = Button10Click
end
object PageControl2: TPageControl
106,7 → 105,7
Height = 603
ActivePage = TabSheet4
Anchors = [akLeft, akTop, akRight, akBottom]
TabOrder = 9
TabOrder = 8
object TabSheet4: TTabSheet
Caption = 'Pictures'
DesignSize = (
303,18 → 302,56
OnClick = Button13Click
end
object MediaPlayer1: TMediaPlayer
Left = 604
Top = 21
Left = 684
Top = 371
Width = 29
Height = 25
Height = 30
ColoredButtons = []
VisibleButtons = [btPlay]
DoubleBuffered = True
Visible = False
ParentDoubleBuffered = False
TabOrder = 14
end
object GroupBox1: TGroupBox
Left = 591
Top = 63
Width = 185
Height = 121
Caption = 'Scene length'
TabOrder = 15
object Label20: TLabel
Left = 16
Top = 24
Width = 119
Height = 13
Caption = 'Picture sequence length:'
end
object Label21: TLabel
Left = 16
Top = 43
Width = 37
Height = 13
Caption = 'Label21'
end
object Label22: TLabel
Left = 16
Top = 72
Width = 91
Height = 13
Caption = 'Soundtrack length:'
end
object Label23: TLabel
Left = 16
Top = 91
Width = 37
Height = 13
Caption = 'Label23'
end
end
object GroupBox2: TGroupBox
Left = 591
Top = 234
Top = 190
Width = 185
Height = 167
Caption = 'Playback'
366,7 → 403,7
Left = 272
Top = 439
Width = 305
Height = 122
Height = 125
Anchors = [akLeft, akTop, akBottom]
ItemHeight = 13
PopupMenu = PopupMenu1
380,7 → 417,6
Top = 143
Width = 26
Height = 21
Hint = 'Open file'
Caption = '1'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
388,8 → 424,6
Font.Name = 'Wingdings'
Font.Style = []
ParentFont = False
ParentShowHint = False
ShowHint = True
TabOrder = 10
Visible = False
OnClick = Button12Click
399,7 → 433,6
Top = 60
Width = 31
Height = 21
Hint = 'Open file'
Caption = '1'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
407,8 → 440,6
Font.Name = 'Wingdings'
Font.Style = []
ParentFont = False
ParentShowHint = False
ShowHint = True
TabOrder = 2
Visible = False
OnClick = Button18Click
419,7 → 450,7
Width = 305
Height = 212
BevelOuter = bvNone
TabOrder = 15
TabOrder = 16
object Image2: TImage
Left = 0
Top = 1
430,125 → 461,22
end
end
object Panel3: TPanel
Left = 592
Left = 583
Top = 439
Width = 185
Width = 194
Height = 122
BevelOuter = bvNone
TabOrder = 16
TabOrder = 17
object Image3: TImage
Left = 0
Left = 8
Top = 0
Width = 185
Height = 122
Width = 177
Height = 108
Stretch = True
OnDblClick = ListBox3DblClick
end
end
object PageControl3: TPageControl
Left = 592
Top = 68
Width = 185
Height = 141
ActivePage = TabSheet6
TabOrder = 17
object TabSheet6: TTabSheet
Caption = 'Scene length'
ExplicitWidth = 281
ExplicitHeight = 165
object Label20: TLabel
Left = 16
Top = 15
Width = 119
Height = 13
Caption = 'Picture sequence length:'
end
object Label21: TLabel
Left = 16
Top = 34
Width = 37
Height = 13
Caption = 'Label21'
end
object Label22: TLabel
Left = 16
Top = 63
Width = 91
Height = 13
Caption = 'Soundtrack length:'
end
object Label23: TLabel
Left = 16
Top = 82
Width = 37
Height = 13
Caption = 'Label23'
end
end
object TabSheet7: TTabSheet
Caption = 'Stats'
ImageIndex = 1
ExplicitWidth = 281
ExplicitHeight = 165
object Label34: TLabel
Left = 16
Top = 16
Width = 61
Height = 13
Caption = 'SceneIndex:'
end
object Label35: TLabel
Left = 98
Top = 16
Width = 12
Height = 13
Caption = '---'
end
object Label32: TLabel
Left = 16
Top = 35
Width = 66
Height = 13
Caption = 'PictureCount:'
end
object Label33: TLabel
Left = 98
Top = 35
Width = 12
Height = 13
Caption = '---'
end
object Label30: TLabel
Left = 16
Top = 54
Width = 65
Height = 13
Caption = 'PictureIndex:'
end
object Label31: TLabel
Left = 98
Top = 54
Width = 12
Height = 13
Caption = '---'
end
object Label36: TLabel
Left = 16
Top = 73
Width = 63
Height = 13
Caption = 'ActionCount:'
end
object Label37: TLabel
Left = 98
Top = 73
Width = 12
Height = 13
Caption = '---'
end
end
end
end
object TabSheet5: TTabSheet
Caption = 'Decision'
ImageIndex = 1
703,7 → 631,6
Width = 145
Height = 21
Style = csDropDownList
ItemHeight = 13
TabOrder = 0
OnChange = ActionTargetChange
end
738,7 → 665,6
Width = 145
Height = 21
Style = csDropDownList
ItemHeight = 13
TabOrder = 0
OnChange = ActionTargetChange
end
828,7 → 754,6
Width = 145
Height = 21
Style = csDropDownList
ItemHeight = 13
TabOrder = 0
OnChange = ActionTargetChange
end
905,7 → 830,6
Top = 35
Width = 30
Height = 21
Hint = 'Open file'
Caption = '1'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
913,8 → 837,6
Font.Name = 'Wingdings'
Font.Style = []
ParentFont = False
ParentShowHint = False
ShowHint = True
TabOrder = 1
Visible = False
OnClick = Button11Click
951,15 → 873,6
TabOrder = 5
OnClick = Button14Click
end
object Button19: TButton
Left = 136
Top = 534
Width = 81
Height = 25
Caption = 'Undo all'
TabOrder = 6
OnClick = Button19Click
end
object Timer1: TTimer
Enabled = False
Interval = 100
/trunk/SceneEditor/Unit1.pas
1,25 → 1,24
unit Unit1;
 
// BUG: deleting of pictures does not work! the editor becomes very confused, and the changes are not saved at all?
// TODO: when closing the editor: ask if the user wants to save (but only if they changed something)
// TODO: the "folder open" icons look like you can CHOOSE a file, not open it!
// - change the icon to something else
// - add open-dialogs for choosing the bmp and wav files
// TODO: Give controls better names
// Idea: When actions are deleted, remove the colorful marking on the picture?
// Idea: decision bitmap markings: anti moiree?
// Idea: unused liste auch bei decision page anzeigen
// Idea: hotspots: netz ziehen anstelle linke und rechts maustaste. netz in jede beliebige richtung ziehen und topleft/bottomright automatisch bestimmen
// Idea: Automatic correct wrong Game.numScenes/numPics values? (especially since we rely on them when adding a scene)
// Idea: "defragmentation": shift all pictures to the left if a scene has a higher "numPics" value than actual pictures
// Idea: decision bitmap markings: anti moiree?
 
interface
 
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Spin, Grids, GameBinStruct, ComCtrls, ExtCtrls, MPlayer,
Menus;
Dialogs, StdCtrls, Spin, Grids, GameBinStruct, ComCtrls, ExtCtrls, Vcl.MPlayer,
Vcl.Menus;
 
const
CUR_VER = '2017-10-04';
CUR_VER = '2017-10-03';
 
type
TForm1 = class(TForm)
88,6 → 87,11
Button14: TButton;
MediaPlayer1: TMediaPlayer;
Timer1: TTimer;
GroupBox1: TGroupBox;
Label20: TLabel;
Label21: TLabel;
Label22: TLabel;
Label23: TLabel;
GroupBox2: TGroupBox;
Button15: TButton;
Button17: TButton;
121,22 → 125,6
Panel2: TPanel;
Panel3: TPanel;
Image3: TImage;
Button19: TButton;
PageControl3: TPageControl;
TabSheet6: TTabSheet;
TabSheet7: TTabSheet;
Label20: TLabel;
Label21: TLabel;
Label22: TLabel;
Label23: TLabel;
Label34: TLabel;
Label35: TLabel;
Label32: TLabel;
Label33: TLabel;
Label30: TLabel;
Label31: TLabel;
Label36: TLabel;
Label37: TLabel;
procedure ListBox1Click(Sender: TObject);
procedure Edit1Change(Sender: TObject);
procedure Edit2Change(Sender: TObject);
183,11 → 171,8
procedure ListBox3MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure ListBox3Click(Sender: TObject);
procedure Button19Click(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
private
Game: TGameBinFile;
GameBak: TGameBinFile;
PlayStart: Cardinal;
MediaplayerOpened: boolean;
StopPlayRequest: boolean;
210,7 → 195,6
procedure RecalcSlideshowLength;
procedure RecalcSoundtrackLength;
procedure RecalcUnusedFiles;
procedure RecalcStats;
procedure HandlePossibleEmptySceneList;
procedure DisableEnableSceneControls(enable: boolean);
procedure DisableEnablePictureControls(enable: boolean);
228,10 → 212,6
uses
Math, MMSystem, ShellAPI;
 
const
DEFAULT_DURATION = 0;
DEFAULT_FILENAME = 'DUMMY.BMP';
 
function GetSceneIDFromName(sceneName: string): Integer;
var
sSceneID: string;
241,16 → 221,6
if not TryStrToInt(sSceneID, result) then raise Exception.Create('Scene name invalid');
end;
 
procedure SelectFilenameBase(Edit: TEdit);
begin
if Edit.CanFocus then
begin
Edit.SetFocus;
Edit.SelStart := 0;
Edit.SelLength := Pos('.', Edit.Text)-1;
end;
end;
 
function _DecisecondToTime(ds: integer): string;
begin
result := FormatDatetime('hh:nn:ss', ds / 10 / (24*60*60))+','+IntToStr(ds mod 10);
353,7 → 323,7
procedure TForm1.Button10Click(Sender: TObject);
begin
Save;
if not FileExists('ShowTime32.exe') then raise Exception.Create('GAME.BIN saved; ShowTime32.exe not found.');
if not FileExists('ShowTime32.exe') then raise Exception.Create('ShowTime32.exe not found.');
ShellExecute(Application.Handle, 'open', 'ShowTime32.exe', '', '', SW_NORMAL);
end;
 
403,6 → 373,7
procedure TForm1.Button14Click(Sender: TObject);
begin
New;
HandlePossibleEmptySceneList;
end;
 
procedure TForm1.DisableEnableSceneControls(enable: boolean);
608,12 → 579,6
ShellExecute(Application.Handle, 'open', PChar(fileName), '', '', SW_NORMAL);
end;
 
procedure TForm1.Button19Click(Sender: TObject);
begin
CopyMemory(@Game, @GameBak, SizeOf(Game));
SetupGUIAfterLoad;
end;
 
procedure TForm1.NewScene;
var
sceneID: integer;
629,7 → 594,6
 
newScene := Game.AddSceneAtEnd(sceneID);
newScene.actions[0].nextSceneID := SCENEID_ENDGAME;
newScene.pictureIndex := Game.numPics;
ListBox1.Items.Add(newScene.szSceneFolder);
ReloadActionSceneLists;
HandlePossibleEmptySceneList;
688,6 → 652,7
end;
 
Game.DeleteScene(ListBox1.ItemIndex);
Dec(Game.numScenes);
 
bakItemindex := ListBox1.ItemIndex;
ListBox1.Items.Delete(bakItemindex);
726,25 → 691,19
var
pic: PPictureDef;
begin
if ListBox2.Items.Count > 0 then
pic := Game.AddPictureBetween(CurScene^.pictureIndex + Max(ListBox2.ItemIndex+1,0), false)
else
pic := Game.AddPictureBetween(CurScene^.pictureIndex + Max(ListBox2.ItemIndex,0), true);
pic.duration := DEFAULT_DURATION;
pic.szBitmapFile := DEFAULT_FILENAME;
pic := Game.AddPictureBetween(CurScene^.pictureIndex + Max(ListBox2.ItemIndex,0));
pic.duration := 0;
pic.szBitmapFile := 'DUMMY.BMP';
ListBox2.Items.Insert(ListBox2.ItemIndex, '(0) DUMMY.BMP');
if ListBox2.ItemIndex = -1 then
begin
ListBox2.Items.Insert(ListBox2.Count, Format('(%d) %s', [DEFAULT_DURATION, DEFAULT_FILENAME]));
ListBox2.ItemIndex := ListBox2.Count - 1;
end
else
begin
ListBox2.Items.Insert(ListBox2.ItemIndex+1, Format('(%d) %s', [DEFAULT_DURATION, DEFAULT_FILENAME]));
ListBox2.ItemIndex := ListBox2.ItemIndex + 1;
ListBox2.ItemIndex := ListBox2.ItemIndex - 1;
end;
ListBox2Click(Listbox2);
SelectFilenameBase(Edit3);
RecalcStats;
end;
 
procedure TForm1.Button7Click(Sender: TObject);
754,7 → 713,7
if Listbox2.Count > 0 then
begin
bakIdx := ListBox2.ItemIndex;
Game.DeletePicture(CurScene^.pictureIndex + bakIdx);
Game.DeletePicture(bakIdx);
ListBox2.Items.Delete(bakIdx);
if ListBox2.Count > 0 then
begin
764,7 → 723,6
end;
RecalcUnusedFiles;
end;
RecalcStats;
end;
 
procedure TForm1.Button8Click(Sender: TObject);
785,8 → 743,6
var
fs: TFileStream;
begin
CopyMemory(@GameBak, @Game, SizeOf(Game));
 
fs := TFileStream.Create('GAME.BIN', fmOpenWrite or fmCreate);
try
fs.WriteBuffer(Game, SizeOf(Game));
855,33 → 811,10
Button12.Visible := CurPicture^.szBitmapFile <> '';
end;
 
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if not CompareMem(@Game, @GameBak, SizeOf(Game)) then
begin
case MessageDlg('Do you want to save the changes?', mtConfirmation, mbYesNoCancel, 0) of
ID_YES:
begin
Save;
CanClose := true;
end;
ID_NO:
begin
CanClose := true;
end;
ID_CANCEL:
begin
CanClose := false;
end;
end;
end;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
PageControl1.ActivePageIndex := 0;
PageControl2.ActivePageIndex := 0;
PageControl3.ActivePageIndex := 0;
Label10.Caption := '';
Label21.Caption := '';
Label23.Caption := '';
964,26 → 897,7
end;
 
procedure TForm1.ListBox2Click(Sender: TObject);
var
bakEvent: TNotifyEvent;
begin
if CurScene^.numPics = 0 then
begin
SpinEdit13.Value := 0;
 
bakEvent := Edit3.OnChange;
try
Edit3.OnChange := nil;
Edit3.Text := '';
finally
Edit3.OnChange := bakEvent;
end;
 
Label18.Caption := '';
Image2.Picture := nil;
exit;
end;
SpinEdit13.Value := CurPicture^.duration;
Edit3.Text := string(CurPicture^.szBitmapFile);
 
995,8 → 909,6
begin
Button15Click(Button15);
end;
 
RecalcStats;
end;
 
procedure TForm1.ListBox2DblClick(Sender: TObject);
1070,7 → 982,6
procedure TForm1.New;
begin
ZeroMemory(@Game, SizeOf(Game));
ZeroMemory(@GameBak, SizeOf(Game));
 
SetupGUIAfterLoad;
end;
1086,14 → 997,6
FreeAndNil(fs);
end;
 
if Game.RealPictureCount <> Game.numPics then
begin
MessageDlg('Picture count was wrong. Value was corrected.', mtInformation, [mbOk], 0);
Game.numPics := Game.RealPictureCount;
end;
 
CopyMemory(@GameBak, @Game, SizeOf(Game));
 
SetupGUIAfterLoad;
end;
 
1215,17 → 1118,15
procedure _PreparePictureList;
var
i: integer;
//pic: PPictureDef;
pic: PPictureDef;
begin
ListBox2.Clear;
 
if CurScene^.numPics = 0 then
begin
(*
pic := Game.AddPictureBetween(CurScene^.pictureIndex + Max(ListBox2.ItemIndex,0));
pic.duration := DEFAULT_DURATION;
pic.szBitmapFile := DEFAULT_FILENAME;
*)
pic.duration := 0;
pic.szBitmapFile := 'DUMMY.BMP';
end;
 
for i := CurScene^.pictureIndex to CurScene^.pictureIndex + CurScene^.numPics - 1 do
1273,24 → 1174,8
RecalcSoundtrackLength;
 
RecalcUnusedFiles;
 
RecalcStats;
end;
 
procedure TForm1.RecalcStats;
begin
Label35.Caption := IntToStr(ListBox1.ItemIndex) + ' / ' + IntToStr(Game.numScenes);
 
if ListBox2.ItemIndex >= 0 then
Label31.Caption := IntToStr(CurScene^.pictureIndex) + ' + ' + IntToStr(ListBox2.ItemIndex) + ' = ' + IntToStr(CurScene^.pictureIndex+ListBox2.ItemIndex)
else
Label31.Caption := IntToStr(CurScene^.pictureIndex);
 
Label33.Caption := IntToStr(CurScene^.numPics) + ' / ' + IntToStr(Game.numPics);
 
Label37.Caption := IntToStr(CurScene^.numActions) + ' / ' + IntToStr(Game.RealActionCount);
end;
 
procedure TForm1.ReloadActionSceneLists;
 
procedure _ReloadActionSceneLists(ComboBox: TComboBox);
1335,8 → 1220,6
CurScene^.numActions := SpinEdit12.Value;
 
// QUE: zero data of actions which are inactive (numActions<action)?
 
RecalcStats;
end;
 
procedure TForm1.SpinEdit13Change(Sender: TObject);
1384,7 → 1267,7
 
procedure TForm1.About1Click(Sender: TObject);
begin
ShowMessage('Plumbers Don''t Wear Ties - GAME.BIN editor (can be also used to create new games based on the "ShowTime" engine!)'+#13#10#13#10+'Written by Daniel Marschall (www.daniel-marschall.de)'+#13#10#13#10+'Published by ViaThinkSoft (www.viathinksoft.com)'+#13#10#13#10+'Current version: ' + CUR_VER);
ShowMessage('Plumbers Dont''t Wear Ties - GAME.BIN editor (can be also used to create new games based on the "ShowTime" engine!)'+#13#10#13#10+'Written by Daniel Marschall (www.daniel-marschall.de)'+#13#10#13#10+'Published by ViaThinkSoft (www.viathinksoft.com)'+#13#10#13#10+'Current version: ' + CUR_VER);
end;
 
procedure TForm1.ActionSpinEditsChange(Sender: TObject);