40 Commits
Author SHA1 Message Date
Eric Fredricksen a2ae462d30 Fixed: can't create a character using email, only nickname 2022-01-13 20:08:55 -08:00
Eric Fredricksen 5fa415a542 These don't need to exist in the repo either 2022-01-07 23:25:13 -08:00
Eric Fredricksen a12ef24a3b Provide footnote 2022-01-07 23:21:39 -08:00
Eric Fredricksen de061990c9 Remove this partly obsolescent info 2022-01-07 23:10:48 -08:00
Eric Fredricksen a692172852 Ignore more things 2022-01-07 23:07:37 -08:00
Eric Fredricksen 2794b6eced This stuff really doesn't need to be in the repo 2022-01-07 23:00:44 -08:00
Eric Fredricksen fd0680126b Remove executable flag from these 2022-01-07 22:54:43 -08:00
Eric Fredricksen 17f4c78a74 v6.4.1: Fix errors attempted v6.4 launch, interplot cinematics in particular.
Also fixed the ImpressiveGuy stuff and how the plot progress bar worked for the prologue
2022-01-07 22:50:55 -08:00
Eric Fredricksen c7911ffbca Use A rather than G for roman numeral 5000 2022-01-05 13:12:41 -08:00
Eric Fredricksen e3c564529d Release candidate for pq 6.4 2022-01-05 12:42:43 -08:00
Eric Fredricksen 16c8a5b053 Beta test build for v6.4 2022-01-05 12:18:52 -08:00
Eric Fredricksen bf3619f270 Update version info, leave some stuff out of repo 2022-01-04 23:15:09 -08:00
Eric Fredricksen 861e68e477 Don't need to hang onto these in the repo 2022-01-04 23:10:24 -08:00
Eric Fredricksen f503ab75a7 Bump version, revert extension 2022-01-04 22:41:43 -08:00
Eric Fredricksen 24895486cf Invent some roman numerals, G for 5000 and T for 10,000
This'll keep the Spells list from looking like a bunch of MMMMMMs at high levels
2022-01-04 21:30:33 -08:00
Eric Fredricksen cbb3d5daac Merge branch 'pq6' of bitbucket.org:grumdrig/pq into pq6 2022-01-04 20:53:11 -08:00
Eric Fredricksen 9030d1ba58 Bump PQ version to 6.4 2022-01-04 20:52:48 -08:00
Eric Fredricksen a0e0d53739 Fix bug causing an error when the sum of squares of stats exceeded 0x7FFFFFFF. And:
Restore file extension pq.
Bump version to 6.4 (6.3 wasn't officially released but has been used in ports.)
Turbo mode for testing.
Limit the number of fancy items won to keep the Invetory not too huge
2022-01-04 20:48:35 -08:00
Eric Fredricksen 64aca6ec2f Restore original levelling schedule 2022-01-04 19:33:15 -08:00
Eric Fredricksen bf632cb99b Don't try to make file associations starting with Vista
At some point the registry key setting stopped working, not sure as of what Windows version. But this will avoid the 'Failed to set data for '' ' error
2022-01-04 19:11:29 -08:00
Eric Fredricksen d611931e37 Ignore exceptions when setting file associations, for Win 7 users
without admin privs
2012-02-14 08:41:54 -08:00
Eric Fredricksen e371be0bc4 Mention pq-web in README 2011-11-18 13:02:45 -08:00
Eric Fredricksen 07b569a7d1 I really should be looking at the markdown edits on the client side 2011-05-20 08:52:32 -07:00
Eric Fredricksen cad63aac86 Put bullets on list 2011-05-20 08:51:00 -07:00
Eric Fredricksen 86f57c02cb Switch README to markdown 2011-05-20 08:49:07 -07:00
Eric Fredricksen 082c65a863 Hide rest preamble 2011-05-20 08:45:46 -07:00
Eric Fredricksen 38e1fc3763 Mention open sourcing taking place 2011-05-20 08:36:23 -07:00
Eric Fredricksen 9396003e3f Fix ReST err 2011-05-20 08:32:40 -07:00
Eric Fredricksen c6eaa46994 Fix ReST err 2011-05-20 08:31:27 -07:00
Eric Fredricksen 6f3a72ac27 Fix ReST warning 2011-05-20 08:29:49 -07:00
Eric Fredricksen ddff883b06 More documentation. Jungle Clown. Incidental moves in forms, etc. 2010-01-13 13:21:23 -08:00
Eric Fredricksen 03468f6666 Added forensic info about 6.3 changes (which are few) 2010-01-12 16:15:25 -08:00
Eric Fredricksen 32f584559a Update README a little. Add version tags. 2010-01-12 15:41:35 -08:00
Eric Fredricksen 3d107337fd Added tag v6.0 for changeset 5785c7997168 2010-01-12 15:41:05 -08:00
Eric Fredricksen d5b41649ea Added tag v6.1 for changeset c76a4888afe5 2010-01-12 15:40:40 -08:00
Eric Fredricksen a0f0879520 Added tag v6.2 for changeset 548ea069b984 2010-01-12 15:39:57 -08:00
Eric Fredricksen ee648fd4ec latest 2007-02-20 14:44:38 +00:00
Eric Fredricksen 05718c79d9 annoying dup named file (other than case difference) 2007-02-06 06:59:04 +00:00
Eric Fredricksen 5d11926e15 some old changes to poach & pq9x that turned out to be on this sony laptop
project navigator pep-up
adding math thing for dad
2007-01-26 19:34:17 +00:00
Eric Fredricksen 9a85adf823 (contents of README)
ProgressQuest v6.3
------------------
This directory represents an ex post facto rendering of pq6 in its
various versions in svn, so that changes will be trackable thataway.

The version as of this moment in svn is 6.3

(I didn't add this file in PQ 6.0, but after that you can use this README
to trace the checkin history using svn.)
2006-12-24 21:53:08 +00:00
43 changed files with 1203 additions and 500 deletions

No files matched your search

+7
View File
@@ -0,0 +1,7 @@
*.obj
*.~*
*.bak
*.dcu
*.ddp
*.pq
pq.exe
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
+135 -7
View File
@@ -1,7 +1,7 @@
object K: TK object K: TK
Left = 335 Left = 202
Top = 119 Top = 129
Width = 572 Width = 800
Height = 567 Height = 567
Caption = 'K' Caption = 'K'
Color = clBtnFace Color = clBtnFace
@@ -111,6 +111,34 @@ object K: TK
Height = 13 Height = 13
Caption = 'DefenseBad' Caption = 'DefenseBad'
end end
object Label15: TLabel
Left = 480
Top = 8
Width = 26
Height = 13
Caption = 'Race'
end
object Label16: TLabel
Left = 480
Top = 120
Width = 25
Height = 13
Caption = 'Class'
end
object Label17: TLabel
Left = 328
Top = 120
Width = 25
Height = 13
Caption = 'Titles'
end
object Label18: TLabel
Left = 476
Top = 428
Width = 74
Height = 13
Caption = 'Impressive titles'
end
object Spells: TMemo object Spells: TMemo
Left = 8 Left = 8
Top = 132 Top = 132
@@ -124,6 +152,7 @@ object K: TK
'Sadness' 'Sadness'
'Seasick' 'Seasick'
'Gyp' 'Gyp'
'Shoelaces'
'Innoculate' 'Innoculate'
'Cone of Annoyance' 'Cone of Annoyance'
'Magnetic Orb' 'Magnetic Orb'
@@ -133,6 +162,7 @@ object K: TK
'Spectral Miasma' 'Spectral Miasma'
'Clever Fellow' 'Clever Fellow'
'Lockjaw' 'Lockjaw'
'History Lesson'
'Hydrophobia' 'Hydrophobia'
'Big Sister' 'Big Sister'
'Cone of Paste' 'Cone of Paste'
@@ -289,6 +319,7 @@ object K: TK
'Crankbow|6' 'Crankbow|6'
'Blibo|7' 'Blibo|7'
'Broadsword|7' 'Broadsword|7'
'Kreen|7'
'Morning Star|8' 'Morning Star|8'
'Pole-adze|8' 'Pole-adze|8'
'Spontoon|8' 'Spontoon|8'
@@ -343,7 +374,8 @@ object K: TK
'Bijou' 'Bijou'
'Spangle' 'Spangle'
'Gimcrack' 'Gimcrack'
'Hood') 'Hood'
'Vulpeculum')
TabOrder = 6 TabOrder = 6
WordWrap = False WordWrap = False
end end
@@ -495,7 +527,8 @@ object K: TK
'casket' 'casket'
'nosegay' 'nosegay'
'trinket' 'trinket'
'credenza') 'credenza'
'writ')
TabOrder = 9 TabOrder = 9
WordWrap = False WordWrap = False
end end
@@ -571,7 +604,7 @@ object K: TK
'Brass Dragon|7|pole' 'Brass Dragon|7|pole'
'Tin Dragon|8|*' 'Tin Dragon|8|*'
'Bronze Dragon|9|medal' 'Bronze Dragon|9|medal'
'Chromatic Dragon|16|mineral water' 'Chromatic Dragon|16|scale'
'Copper Dragon|8|loafer' 'Copper Dragon|8|loafer'
'Gold Dragon|8|filling' 'Gold Dragon|8|filling'
'Green Dragon|8|*' 'Green Dragon|8|*'
@@ -734,7 +767,8 @@ object K: TK
'Uruk|2|boot' 'Uruk|2|boot'
'Poroid|4|node' 'Poroid|4|node'
'Moakum|8|frenum' 'Moakum|8|frenum'
'Fly|0|*') 'Fly|0|*'
'Hogbird|3|curl')
TabOrder = 10 TabOrder = 10
WordWrap = False WordWrap = False
end end
@@ -804,4 +838,98 @@ object K: TK
TabOrder = 13 TabOrder = 13
WordWrap = False WordWrap = False
end end
object Races: TMemo
Left = 480
Top = 24
Width = 249
Height = 89
Lines.Strings = (
'Half Orc|HP Max'
'Half Man|CHA'
'Half Halfling|DEX'
'Double Hobbit|STR'
'Hob-Hobbit|DEX,CON'
'Low Elf|CON'
'Dung Elf|WIS'
'Talking Pony|MP Max,INT'
'Gyrognome|DEX'
'Lesser Dwarf|CON'
'Crested Dwarf|CHA'
'Eel Man|DEX'
'Panda Man|CON,STR'
'Trans-Kobold|WIS'
'Enchanted Motorcycle|MP Max'
'Will o'#39' the Wisp|WIS'
'Battle-Finch|DEX,INT'
'Double Wookiee|STR'
'Skraeling|WIS'
'Demicanadian|CON'
'Land Squid|STR,HP Max')
TabOrder = 14
end
object Klasses: TMemo
Left = 480
Top = 136
Width = 249
Height = 89
Lines.Strings = (
'Ur-Paladin|WIS,CON'
'Voodoo Princess|INT,CHA'
'Robot Monk|STR'
'Mu-Fu Monk|DEX'
'Mage Illusioner|INT,MP Max'
'Shiv-Knight|DEX'
'Inner Mason|CON'
'Fighter/Organist|CHA,STR'
'Puma Burgular|DEX'
'Runeloremaster|WIS'
'Hunter Strangler|DEX,INT'
'Battle-Felon|STR'
'Tickle-Mimic|WIS,INT'
'Slow Poisoner|CON'
'Bastard Lunatic|CON'
'Jungle Clown|DEX,CHA'
'Birdrider|WIS'
'Vermineer|INT')
TabOrder = 15
end
object Titles: TMemo
Left = 328
Top = 136
Width = 57
Height = 81
Lines.Strings = (
'Mr.'
'Mrs.'
'Sir'
'Sgt.'
'Ms.'
'Captain'
'Chief'
'Admiral'
'Saint')
TabOrder = 16
end
object ImpressiveTitles: TMemo
Left = 476
Top = 442
Width = 149
Height = 89
Lines.Strings = (
'King'
'Queen'
'Lord'
'Lady'
'Viceroy'
'Mayor'
'Prince'
'Princess'
'Chief'
'Boss'
'Archbishop'
'Baron'
'Comptroller')
TabOrder = 17
WordWrap = False
end
end end
+8
View File
@@ -37,6 +37,14 @@ type
Label13: TLabel; Label13: TLabel;
DefenseBad: TMemo; DefenseBad: TMemo;
Label14: TLabel; Label14: TLabel;
Races: TMemo;
Label15: TLabel;
Label16: TLabel;
Klasses: TMemo;
Label17: TLabel;
Titles: TMemo;
ImpressiveTitles: TMemo;
Label18: TLabel;
end; end;
var var
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
+5 -5
View File
@@ -5,7 +5,7 @@ object FrontForm: TFrontForm
BorderIcons = [] BorderIcons = []
BorderStyle = bsNone BorderStyle = bsNone
BorderWidth = 2 BorderWidth = 2
ClientHeight = 251 ClientHeight = 255
ClientWidth = 452 ClientWidth = 452
Color = clRed Color = clRed
TransparentColorValue = clWhite TransparentColorValue = clWhite
@@ -93,19 +93,19 @@ object FrontForm: TFrontForm
Left = 0 Left = 0
Top = 0 Top = 0
Width = 452 Width = 452
Height = 251 Height = 255
Align = alClient Align = alClient
BevelInner = bvLowered BevelInner = bvLowered
Color = clWhite Color = clWhite
TabOrder = 0 TabOrder = 0
object Label2: TLabel object Label2: TLabel
Left = 2 Left = 2
Top = 236 Top = 240
Width = 448 Width = 448
Height = 13 Height = 13
Align = alBottom Align = alBottom
Alignment = taCenter Alignment = taCenter
Caption = #169' 2003 Eric Fredricksen - v6.2' Caption = #169' 2002-2022 Eric Fredricksen - v6.4.2'
Color = clWhite Color = clWhite
Font.Charset = DEFAULT_CHARSET Font.Charset = DEFAULT_CHARSET
Font.Color = 11382189 Font.Color = 11382189
@@ -184,7 +184,7 @@ object FrontForm: TFrontForm
Left = 2 Left = 2
Top = 2 Top = 2
Width = 251 Width = 251
Height = 234 Height = 238
Align = alLeft Align = alLeft
BevelOuter = bvNone BevelOuter = bvNone
BorderWidth = 10 BorderWidth = 10
+2 -6
View File
@@ -23,10 +23,6 @@ type
Label1: TLabel; Label1: TLabel;
procedure HomeLinkClick(Sender: TObject); procedure HomeLinkClick(Sender: TObject);
procedure LogoClick(Sender: TObject); procedure LogoClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; end;
var var
@@ -40,12 +36,12 @@ uses ShellAPI, Main, Info;
procedure TFrontForm.HomeLinkClick(Sender: TObject); procedure TFrontForm.HomeLinkClick(Sender: TObject);
begin begin
ShellExecute(GetDesktopWindow(), 'open', 'http://progressquest.com/', nil, '', SW_SHOW); ShellExecute(GetDesktopWindow(), 'open', 'http://progressquest.com/', nil, '', SW_SHOW);
end; end;
procedure TFrontForm.LogoClick(Sender: TObject); procedure TFrontForm.LogoClick(Sender: TObject);
begin begin
ShellExecute(GetDesktopWindow(), 'open', 'http://progressquest.com/', nil, '', SW_SHOW); ShellExecute(GetDesktopWindow(), 'open', 'http://progressquest.com/', nil, '', SW_SHOW);
end; end;
end. end.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
+14 -14
View File
@@ -1,8 +1,8 @@
object MainForm: TMainForm object MainForm: TMainForm
Left = 281 Left = 238
Top = 121 Top = 148
Width = 682 Width = 682
Height = 569 Height = 513
HorzScrollBar.Visible = False HorzScrollBar.Visible = False
VertScrollBar.Visible = False VertScrollBar.Visible = False
Caption = 'Progress Quest' Caption = 'Progress Quest'
@@ -96,7 +96,7 @@ object MainForm: TMainForm
Left = 0 Left = 0
Top = 0 Top = 0
Width = 200 Width = 200
Height = 507 Height = 444
Align = alLeft Align = alLeft
TabOrder = 0 TabOrder = 0
object Label1: TLabel object Label1: TLabel
@@ -214,7 +214,7 @@ object MainForm: TMainForm
Left = 1 Left = 1
Top = 271 Top = 271
Width = 198 Width = 198
Height = 203 Height = 140
Align = alClient Align = alClient
Columns = < Columns = <
item item
@@ -236,7 +236,7 @@ object MainForm: TMainForm
end end
object Cheats: TPanel object Cheats: TPanel
Left = 1 Left = 1
Top = 474 Top = 411
Width = 198 Width = 198
Height = 32 Height = 32
Align = alBottom Align = alBottom
@@ -293,7 +293,7 @@ object MainForm: TMainForm
Left = 474 Left = 474
Top = 0 Top = 0
Width = 200 Width = 200
Height = 507 Height = 444
Align = alRight Align = alRight
TabOrder = 1 TabOrder = 1
object Label3: TLabel object Label3: TLabel
@@ -326,7 +326,7 @@ object MainForm: TMainForm
end end
object QuestBar: TProgressBar object QuestBar: TProgressBar
Left = 1 Left = 1
Top = 490 Top = 427
Width = 198 Width = 198
Height = 16 Height = 16
Align = alBottom Align = alBottom
@@ -377,7 +377,7 @@ object MainForm: TMainForm
Left = 1 Left = 1
Top = 190 Top = 190
Width = 198 Width = 198
Height = 300 Height = 237
Align = alClient Align = alClient
Columns = < Columns = <
item item
@@ -401,7 +401,7 @@ object MainForm: TMainForm
Left = 200 Left = 200
Top = 0 Top = 0
Width = 274 Width = 274
Height = 507 Height = 444
Align = alClient Align = alClient
TabOrder = 2 TabOrder = 2
object InventoryLabelAlsoGameStyle: TLabel object InventoryLabelAlsoGameStyle: TLabel
@@ -420,7 +420,7 @@ object MainForm: TMainForm
end end
object Label7: TLabel object Label7: TLabel
Left = 1 Left = 1
Top = 477 Top = 414
Width = 272 Width = 272
Height = 13 Height = 13
Align = alBottom Align = alBottom
@@ -450,7 +450,7 @@ object MainForm: TMainForm
Left = 1 Left = 1
Top = 189 Top = 189
Width = 272 Width = 272
Height = 288 Height = 225
Align = alClient Align = alClient
Columns = < Columns = <
item item
@@ -473,7 +473,7 @@ object MainForm: TMainForm
end end
object EncumBar: TProgressBar object EncumBar: TProgressBar
Left = 1 Left = 1
Top = 490 Top = 427
Width = 272 Width = 272
Height = 16 Height = 16
Align = alBottom Align = alBottom
@@ -562,7 +562,7 @@ object MainForm: TMainForm
end end
object Panel4: TPanel object Panel4: TPanel
Left = 0 Left = 0
Top = 507 Top = 444
Width = 674 Width = 674
Height = 35 Height = 35
Align = alBottom Align = alBottom
+175 -44
View File
@@ -1,8 +1,9 @@
unit Main; unit Main;
{ copyright (c)2002 Eric Fredricksen all rights reserved } { copyright (c)2022 Eric Fredricksen all rights reserved }
{$UNDEF CHEATS} {$UNDEF CHEATS}
{$UNDEF LOGGING} {$UNDEF LOGGING}
{$UNDEF TURBO}
interface interface
@@ -12,11 +13,15 @@ uses
const const
// revs: // revs:
// 8: pq 6.4.1
// 7: pq 6.4
// 6: pq-web
// 5: pq 6.3 (no official release)
// 4: pq 6.2 // 4: pq 6.2
// 3: pq 6.1 // 3: pq 6.1
// 2: pq 6.0 // 2: pq 6.0
// 1: pq 6.0, some early release I guess; don't remember // 1: pq 6.0, some early release I guess; don't remember
RevString = '&rev=4'; RevString = '&rev=8';
wmIconTray = WM_USER + Ord('t'); wmIconTray = WM_USER + Ord('t');
kFileExt = '.pq'; kFileExt = '.pq';
@@ -104,6 +109,9 @@ type
{$ENDIF} {$ENDIF}
procedure ExportCharSheet; procedure ExportCharSheet;
function CharSheet: String; function CharSheet: String;
procedure InterplotCinematic;
function NamedMonster(level: Integer): String;
function ImpressiveGuy: String;
public public
FTrayIcon: TNotifyIconData; FTrayIcon: TNotifyIconData;
FReportSave: Boolean; FReportSave: Boolean;
@@ -145,7 +153,8 @@ type
var var
MainForm: TMainForm; MainForm: TMainForm;
function Split(s: String; field: Integer): String; function Split(s: String; field: Integer): String; overload;
function Split(s: String; field: Integer; separator: String): String; overload;
procedure Navigate(url: String); procedure Navigate(url: String);
@@ -194,15 +203,21 @@ var
kOpenCommand: String; kOpenCommand: String;
begin begin
kOpenCommand := '"' + Application.ExeName + '" "%1"'; kOpenCommand := '"' + Application.ExeName + '" "%1"';
RegWrite(HKEY_CLASSES_ROOT, kFileExt,'', kPQFileType); try
RegWrite(HKEY_CLASSES_ROOT, kPQFileType, '', 'Progresss Quest saved game'); RegWrite(HKEY_CLASSES_ROOT, kFileExt,'', kPQFileType);
RegWrite(HKEY_CLASSES_ROOT, kPQFileType + '\DefaultIcon', '', Application.ExeName + ',0'); RegWrite(HKEY_CLASSES_ROOT, kPQFileType, '', 'Progresss Quest saved game');
RegWrite(HKEY_CLASSES_ROOT, kPQFileType + '\Shell\Open', '', '&Open'); RegWrite(HKEY_CLASSES_ROOT, kPQFileType + '\DefaultIcon', '', Application.ExeName + ',0');
if RegRead(HKEY_CLASSES_ROOT, kPQFileType + '\Shell\Open\Command', '') <> kOpenCommand then begin RegWrite(HKEY_CLASSES_ROOT, kPQFileType + '\Shell\Open', '', '&Open');
RegWrite(HKEY_CLASSES_ROOT, kPQFileType + '\Shell\Open\Command', '', kOpenCommand); if RegRead(HKEY_CLASSES_ROOT, kPQFileType + '\Shell\Open\Command', '') <> kOpenCommand then begin
// Notify Windows Explorer to realize we added this. In case this is slow RegWrite(HKEY_CLASSES_ROOT, kPQFileType + '\Shell\Open\Command', '', kOpenCommand);
// I don't do this unless I'm sure this one has changed. // Notify Windows Explorer to realize we added this. In case this is slow
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil); // I don't do this unless I'm sure this one has changed.
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);
end;
except
on Exception do begin
// Don't care
end;
end; end;
end; end;
@@ -322,6 +337,11 @@ begin
Result := Min(Random(below),Random(below)); Result := Min(Random(below),Random(below));
end; end;
function PickLow(s: TStrings): String;
begin
Result := s[RandomLow(s.Count)];
end;
function Ends(s,e: String): Boolean; function Ends(s,e: String): Boolean;
begin begin
Result := Copy(s,1+Length(s)-Length(e),Length(e)) = e; Result := Copy(s,1+Length(s)-Length(e),Length(e)) = e;
@@ -342,20 +362,25 @@ begin
else Result := s + 's'; else Result := s + 's';
end; end;
function Split(s: String; field: Integer): String; function Split(s: String; field: Integer; separator: String): String;
var var
p: Integer; p: Integer;
begin begin
while field > 0 do begin while field > 0 do begin
p := Pos('|',s); p := Pos(separator,s);
s := Copy(s,p+1,10000); s := Copy(s,p+1,10000);
Dec(field); Dec(field);
end; end;
if Pos('|',s) > 0 if Pos(separator,s) > 0
then Result := Copy(s,1,Pos('|',s)-1) then Result := Copy(s,1,Pos(separator,s)-1)
else Result := s; else Result := s;
end; end;
function Split(s: String; field: Integer): String;
begin
result := Split(s, field, '|');
end;
function Indefinite(s: String; qty: Integer): String; function Indefinite(s: String; qty: Integer): String;
begin begin
if qty = 1 then begin if qty = 1 then begin
@@ -428,11 +453,80 @@ begin
end; end;
end; end;
procedure TMainForm.InterplotCinematic;
var
nemesis: String;
i, s: Integer;
begin
case Random(3) of
0: begin
Q('task|1|Exhausted, you arrive at a friendly oasis in a hostile land');
Q('task|2|You greet old friends and meet new allies');
Q('task|2|You are privy to a council of powerful do-gooders');
Q('task|1|There is much to be done. You are chosen!');
end;
1: begin
Q('task|1|Your quarry is in sight, but a mighty enemy bars your path!');
nemesis := NamedMonster(GetI(Traits,'Level')+3);
Q('task|4|A desperate struggle commences with ' + nemesis);
s := Random(3);
for i := 1 to Random(1 + Plots.Items.Count) do begin
Inc(s, 1 + Random(2));
case s mod 3 of
0: Q('task|2|Locked in grim combat with ' + nemesis);
1: Q('task|2|' + nemesis + ' seems to have the upper hand');
2: Q('task|2|You seem to gain the advantage over ' + nemesis);
end;
end;
Q('task|3|Victory! ' + nemesis + ' is slain! Exhausted, you lose conciousness');
Q('task|2|You awake in a friendly place, but the road awaits');
end;
2: begin
nemesis := ImpressiveGuy;
Q('task|2|Oh sweet relief! You''ve reached the kind protection of ' + nemesis);
Q('task|3|There is rejoicing, and an unnerving encouter with ' + nemesis + ' in private');
Q('task|2|You forget your ' + BoringItem + ' and go back to get it');
Q('task|2|What''s this!? You overhear something shocking!');
Q('task|2|Could ' + nemesis + ' be a dirty double-dealer?');
Q('task|3|Who can possibly be trusted with this news!? -- Oh yes, of course');
end;
end;
Q('plot|2|Loading');
end;
function TMainForm.NamedMonster(level: Integer): String;
var
lev, i: Integer;
m: String;
begin
lev := 0; // shut up, compiler hint
for i := 1 to 5 do begin
m := Pick(K.Monsters.Lines);
if (Result = '') or (abs(level-StrToInt(Split(m,1))) < abs(level-lev)) then begin
Result := Split(m,0);
lev := StrToInt(Split(m,1));
end;
end;
Result := GenerateName + ' the ' + Result;
end;
function TMainForm.ImpressiveGuy: String;
begin
Result := Pick(K.ImpressiveTitles.Lines);
case Random(2) of
0: Result := 'the ' + Result + ' of the ' + Plural(Split(Pick(K.Races.Lines), 0));
1: Result := Result + ' ' + GenerateName + ' of ' + GenerateName;
end;
end;
function TMainForm.MonsterTask(var level: Integer): String; function TMainForm.MonsterTask(var level: Integer): String;
var var
qty, lev, i: Integer; qty, lev, i: Integer;
monster, m1: string; monster, m1: string;
definite: Boolean;
begin begin
definite := false;
for i := level downto 1 do begin for i := level downto 1 do begin
if Odds(2,5) then if Odds(2,5) then
Inc(level, RandSign()); Inc(level, RandSign());
@@ -442,7 +536,13 @@ begin
if Odds(1,25) then begin if Odds(1,25) then begin
// use an NPC every once in a while // use an NPC every once in a while
monster := 'passing ' + Pick(NewGuyForm.Race.Items) + ' ' + Pick(NewGuyForm.Klass.Items); monster := ' ' + Pick(NewGuyForm.Race.Items);
if Odds(1,2)
then monster := 'passing' + monster + ' ' + Pick(NewGuyForm.Klass.Items)
else begin
monster := PickLow(K.Titles.Lines) + ' ' + GenerateName + ' the' + monster;
definite := true;
end;
lev := level; lev := level;
monster := monster + '|' + IntToStr(level) + '|*'; monster := monster + '|' + IntToStr(level) + '|*';
end else if (fQuest.Caption <> '') and Odds(1,4) then begin end else if (fQuest.Caption <> '') and Odds(1,4) then begin
@@ -501,7 +601,7 @@ begin
lev := level; lev := level;
level := lev * qty; level := lev * qty;
Result := Indefinite(Result, qty); if not definite then Result := Indefinite(Result, qty);
end; end;
function ProperCase(s:String):String; function ProperCase(s:String):String;
@@ -554,7 +654,11 @@ begin
a := Split(fQueue.Items[0],0); a := Split(fQueue.Items[0],0);
n := StrToInt(Split(fQueue.Items[0],1)); n := StrToInt(Split(fQueue.Items[0],1));
s := Split(fQueue.Items[0],2); s := Split(fQueue.Items[0],2);
if a = 'task' then begin if (a = 'task') or (a = 'plot') then begin
if a = 'plot' then begin
CompleteAct;
s := 'Loading ' + Plots.Items[Plots.Items.Count-1].Caption;
end;
Task(s, n * 1000); Task(s, n * 1000);
fQueue.Items.Delete(0); fQueue.Items.Delete(0);
end else begin end else begin
@@ -619,17 +723,19 @@ begin
if SubItems.Count < 1 if SubItems.Count < 1
then SubItems.Add(value) then SubItems.Add(value)
else SubItems[0] := value; else SubItems[0] := value;
Selected := true;
MakeVisible(false);
end; end;
//list.MultiSelect := true; //list.MultiSelect := true;
//list.RowSelect := true; //list.RowSelect := true;
//list.HideSelection := false; //list.HideSelection := false;
list.Items[pos].Selected := true;
end; end;
function LevelUpTime(level: Integer): Integer; function LevelUpTime(level: Integer): Integer; // seconds
begin begin
// ~20 minutes for level 1, eventually dominated by exponential // ~20 minutes for level 1, eventually dominated by exponential
Result := Round((20.0 + IntPower(1.15,level)) * 60.0); Result := Round((20.0 + IntPower(1.15,level)) * 60.0);
end; end;
procedure TMainForm.GoButtonClick(Sender: TObject); procedure TMainForm.GoButtonClick(Sender: TObject);
@@ -639,16 +745,16 @@ begin
Max := LevelUpTime(1); Max := LevelUpTime(1);
end; end;
fTask.Caption := ''; fTask.Caption := 'load';
fQuest.Caption := ''; fQuest.Caption := '';
fQueue.Items.Clear; fQueue.Items.Clear;
Task('Loading.',2000); // that dot is spotted for later... Task('Loading',2000);
Q('task|10|Experiencing an enigmatic and foreboding night vision'); Q('task|10|Experiencing an enigmatic and foreboding night vision');
Q('task|6|Much is revealed about that wise old bastard you''d underestimated'); Q('task|6|Much is revealed about that wise old bastard you''d underestimated');
Q('task|6|A shocking series of events leaves you alone and bewildered, but resolute'); Q('task|6|A shocking series of events leaves you alone and bewildered, but resolute');
Q('task|4|Drawing upon an unexpected reserve of determination, you set out on a long and dangerous journey'); Q('task|4|Drawing upon an unexpected reserve of determination, you set out on a long and dangerous journey');
Q('task|2|Loading'); Q('plot|2|Loading');
PlotBar.Max := 26; PlotBar.Max := 26;
with Plots.Items.Add do begin with Plots.Items.Add do begin
@@ -735,10 +841,13 @@ begin
t := 0; t := 0;
for i := 0 to 5 do Inc(t,Square(GetI(Stats,i))); for i := 0 to 5 do Inc(t,Square(GetI(Stats,i)));
t := Random(t); t := Random(t);
i := -1; if t < 0 then i := Random(Stats.Items.Count)
while t >= 0 do begin else begin
Inc(i); i := -1;
Dec(t,Square(GetI(Stats,i))); while t >= 0 do begin
Inc(i);
Dec(t,Square(GetI(Stats,i)));
end;
end; end;
end; end;
Add(Stats, Stats.Items[i].Caption, 1); Add(Stats, Stats.Items[i].Caption, 1);
@@ -763,7 +872,9 @@ end;
procedure TMainForm.WinItem; procedure TMainForm.WinItem;
begin begin
Add(Inventory, SpecialItem, 1); if max(250, Random(999)) < Inventory.Items.Count
then Add(Inventory, Inventory.Items[Random(Inventory.Items.Count)].Caption, 1)
else Add(Inventory, SpecialItem, 1);
end; end;
procedure TMainForm.CompleteQuest; procedure TMainForm.CompleteQuest;
@@ -866,8 +977,14 @@ begin
end; end;
end; end;
// I V X L C D M A T P E
// 1 5 10 50 100 500 1000 5000 10000 50000 100000
function IntToRoman(n: Integer): String; function IntToRoman(n: Integer): String;
begin begin
while Rome(n, 10000, Result, 'T') do ;
Rome(n, 9000, Result, 'MT');
Rome(n, 5000, Result, 'A');
Rome(n, 4000, Result, 'MA');
while Rome(n, 1000, Result, 'M') do ; while Rome(n, 1000, Result, 'M') do ;
Rome(n, 900, Result, 'CM'); Rome(n, 900, Result, 'CM');
Rome(n, 500, Result, 'D'); Rome(n, 500, Result, 'D');
@@ -886,6 +1003,10 @@ end;
function RomanToInt(n: String): Integer; function RomanToInt(n: String): Integer;
begin begin
Result := 0; Result := 0;
while UnRome(n, 10000, Result, 'T') do ;
UnRome(n, 9000, Result, 'MT');
UnRome(n, 5000, Result, 'A');
UnRome(n, 4000, Result, 'MA');
while UnRome(n, 1000, Result, 'M') do ; while UnRome(n, 1000, Result, 'M') do ;
UnRome(n, 900, Result, 'CM'); UnRome(n, 900, Result, 'CM');
UnRome(n, 500, Result, 'D'); UnRome(n, 500, Result, 'D');
@@ -914,11 +1035,14 @@ begin
StateIndex := 0; StateIndex := 0;
Width := Width-1; Width := Width-1;
end; end;
if Items.Count > 2 then WinItem;
if Items.Count > 3 then WinEquip;
end; end;
SaveGame; SaveGame;
Brag('a'); Brag('a');
end; end;
{$IFDEF LOGGING} {$IFDEF LOGGING}
procedure TMainForm.Log(line: String); procedure TMainForm.Log(line: String);
var var
@@ -997,7 +1121,7 @@ begin
else WrLn( ' ' + Indefinite(Items[i].Caption, GetI(Inventory,i))); else WrLn( ' ' + Indefinite(Items[i].Caption, GetI(Inventory,i)));
WrLn; WrLn;
WrLn( '-- ' + DateTimeToStr(Now)); WrLn( '-- ' + DateTimeToStr(Now));
WrLn( '-- Progress Quest 6.2 - http://progressquest.com/'); WrLn( '-- Progress Quest 6.4 - http://progressquest.com/');
Result := f; Result := f;
end; end;
@@ -1123,16 +1247,19 @@ var
begin begin
gain := Pos('kill|',fTask.Caption) = 1; gain := Pos('kill|',fTask.Caption) = 1;
with TaskBar do begin with TaskBar do begin
{$IFDEF TURBO}
Position := Max;
{$ENDIF}
if Position >= Max then begin if Position >= Max then begin
ClearAllSelections; ClearAllSelections;
if Kill.SimpleText = 'Loading....' then Max := 0; // gain XP / level up
if gain then with ExpBar do if Position >= Max if gain then with ExpBar do if Position >= Max
then LevelUp then LevelUp
else Position := Position + TaskBar.Max div 1000; else Position := Position + TaskBar.Max div 1000;
with ExpBar do Hint := IntToStr(Max-Position) + ' XP needed for next level'; with ExpBar do Hint := IntToStr(Max-Position) + ' XP needed for next level';
// advance quest
if gain then if Plots.Items.Count > 1 then with QuestBar do if Position >= Max then begin if gain then if Plots.Items.Count > 1 then with QuestBar do if Position >= Max then begin
CompleteQuest; CompleteQuest;
end else if Quests.Items.Count > 0 then begin end else if Quests.Items.Count > 0 then begin
@@ -1140,9 +1267,11 @@ begin
Hint := IntToStr(100 * Position div Max) + '% complete'; Hint := IntToStr(100 * Position div Max) + '% complete';
end; end;
with PlotBar do if Position >= Max // advance plot
then CompleteAct if (PlotBar.Position >= PlotBar.Max) and gain
else Position := Position + TaskBar.Max div 1000; then InterplotCinematic
else if fTask.Caption <> 'load'
then PlotBar.Position := Math.Min(PlotBar.Position + TaskBar.Max div 1000, PlotBar.Max);
//Time.Caption := FormatDateTime('h:mm:ss',PlotBar.Position / (24.0 * 60 * 60)); //Time.Caption := FormatDateTime('h:mm:ss',PlotBar.Position / (24.0 * 60 * 60));
PlotBar.Hint := RoughTime(PlotBar.Max-PlotBar.Position) + ' remaining'; PlotBar.Hint := RoughTime(PlotBar.Max-PlotBar.Position) + ' remaining';
@@ -1153,7 +1282,7 @@ begin
elapsed := LongInt(timeGetTime) - LongInt(Timer1.Tag); elapsed := LongInt(timeGetTime) - LongInt(Timer1.Tag);
if elapsed > 100 then elapsed := 100; if elapsed > 100 then elapsed := 100;
if elapsed < 0 then elapsed := 0; if elapsed < 0 then elapsed := 0;
Position := Position + elapsed;//Integer(Timer1.Interval); Position := Position + elapsed;
end; end;
end; end;
Timer1.Tag := timeGetTime; Timer1.Tag := timeGetTime;
@@ -1173,7 +1302,7 @@ begin
FMinToTray := true; FMinToTray := true;
FExportSheets := false; FExportSheets := false;
MakeFileAssociations; if Win32MajorVersion < 6 then MakeFileAssociations;
end; end;
procedure TMainForm.SpeedButton1Click(Sender: TObject); procedure TMainForm.SpeedButton1Click(Sender: TObject);
@@ -1395,10 +1524,6 @@ begin
f.Free; f.Free;
except except
on EZCompressionError do begin on EZCompressionError do begin
// backwards-compatibility
//m.Free;
//m := f;
//f := nil;
ShowMessage('Error loading game.'); ShowMessage('Error loading game.');
Close; Close;
Exit; Exit;
@@ -1508,6 +1633,12 @@ var
const const
flat = 1; flat = 1;
begin begin
{$IFDEF TURBO}
Exit; // For testing multiplayer saves without hitting the server
{$ENDIF}
{$IFDEF CHEATS}
Exit; // For testing multiplayer saves without hitting the server
{$ENDIF}
if FExportSheets then if FExportSheets then
ExportCharSheet; ExportCharSheet;
if GetPasskey = 0 then Exit; // not a online game! if GetPasskey = 0 then Exit; // not a online game!
@@ -1549,7 +1680,7 @@ end;
function TMainForm.AuthenticateUrl(url: String): String; function TMainForm.AuthenticateUrl(url: String): String;
begin begin
if (GetLogin <> '') or (GetPassword <> '') then if (GetLogin <> '') or (GetPassword <> '') then
Result := StuffString(url, 8, 0, GetLogin+':'+GetPassword+'@') Result := StuffString(url, 8, 0, UrlEncode(GetLogin)+':'+UrlEncode(GetPassword)+'@')
else else
Result := url; Result := url;
end; end;
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
+7 -6
View File
@@ -1,6 +1,6 @@
object NewGuyForm: TNewGuyForm object NewGuyForm: TNewGuyForm
Left = 203 Left = 474
Top = 146 Top = 177
BorderIcons = [] BorderIcons = []
BorderStyle = bsDialog BorderStyle = bsDialog
Caption = 'Progress Quest - New Character' Caption = 'Progress Quest - New Character'
@@ -86,6 +86,7 @@ object NewGuyForm: TNewGuyForm
OldCreateOrder = False OldCreateOrder = False
Position = poScreenCenter Position = poScreenCenter
OnActivate = FormActivate OnActivate = FormActivate
OnCreate = FormCreate
OnShow = FormShow OnShow = FormShow
PixelsPerInch = 96 PixelsPerInch = 96
TextHeight = 13 TextHeight = 13
@@ -100,10 +101,10 @@ object NewGuyForm: TNewGuyForm
'Half Man' 'Half Man'
'Half Halfling' 'Half Halfling'
'Double Hobbit' 'Double Hobbit'
'Gobhobbit'
'Low Elf' 'Low Elf'
'Dung Elf' 'Dung Elf'
'Talking Pony' 'Talking Pony'
'Greater Gnome'
'Gyrognome' 'Gyrognome'
'Lesser Dwarf' 'Lesser Dwarf'
'Crested Dwarf' 'Crested Dwarf'
@@ -136,14 +137,14 @@ object NewGuyForm: TNewGuyForm
'Fighter/Organist' 'Fighter/Organist'
'Puma Burgular' 'Puma Burgular'
'Runeloremaster' 'Runeloremaster'
'Tongueblade'
'Hunter Strangler' 'Hunter Strangler'
'Battle-Felon' 'Battle-Felon'
'Tickle-Mimic' 'Tickle-Mimic'
'Slow Poisoner' 'Slow Poisoner'
'Bastard Lunatic' 'Bastard Lunatic'
'Lowling' 'Jungle Clown'
'Birdrider') 'Birdrider'
'Vermineer')
TabOrder = 1 TabOrder = 1
end end
object GroupBox1: TGroupBox object GroupBox1: TGroupBox
+18 -4
View File
@@ -44,6 +44,7 @@ type
procedure ApplicationEvents1Minimize(Sender: TObject); procedure ApplicationEvents1Minimize(Sender: TObject);
procedure GenClick(Sender: TObject); procedure GenClick(Sender: TObject);
procedure FormActivate(Sender: TObject); procedure FormActivate(Sender: TObject);
procedure FormCreate(Sender: TObject);
private private
procedure RollEm; procedure RollEm;
function GetAccount: String; function GetAccount: String;
@@ -57,10 +58,11 @@ var
NewGuyForm: TNewGuyForm; NewGuyForm: TNewGuyForm;
function UrlEncode(s: string): string; function UrlEncode(s: string): string;
function GenerateName: string;
implementation implementation
uses Main, SelServ, StrUtils, Web; uses Main, SelServ, StrUtils, Web, Config;
{$R *.dfm} {$R *.dfm}
@@ -182,15 +184,15 @@ begin
else url := 'http://www.progressquest.com/create.php?'; else url := 'http://www.progressquest.com/create.php?';
// url := StringReplace(url, '.com/', '.com/dev/', []); // url := StringReplace(url, '.com/', '.com/dev/', []);
if (GetAccount <> '') or (GetPassword <> '') then if (GetAccount <> '') or (GetPassword <> '') then
url := StuffString(url, 8, 0, GetAccount+':'+GetPassword+'@'); url := StuffString(url, 8, 0, UrlEncode(GetAccount)+':'+UrlEncode(GetPassword)+'@');
args := 'cmd=create' + args := 'cmd=create' +
'&name=' + UrlEncode(Name.Text) + '&name=' + UrlEncode(Name.Text) +
'&realm=' + UrlEncode(MainForm.GetHostName) + '&realm=' + UrlEncode(MainForm.GetHostName) +
RevString; RevString;
ParseSoldResponse(DownloadString(url + args)); ParseSoldResponse(DownloadString(url + args));
except except
on EWebError do begin on E: EWebError do begin
ShowMessage('Error connecting to server'); ShowMessage('Error connecting to server')//: ' + StringReplace(E.Message, '&', '&&', [rfReplaceAll]));
end; end;
end; end;
finally finally
@@ -250,4 +252,16 @@ begin
end; end;
end; end;
procedure TNewGuyForm.FormCreate(Sender: TObject);
var
i: Integer;
begin
Race.Items.Clear;
for i := 0 to K.Races.Lines.Count-1 do
Race.Items.Add(Split(K.Races.Lines[i],0));
Klass.Items.Clear;
for i := 0 to K.Klasses.Lines.Count-1 do
Klass.Items.Add(Split(K.Klasses.Lines[i],0));
end;
end. end.
-12
View File
@@ -1,12 +0,0 @@
[contents of readme]
ProgressQuest v6.2 (probably as released)
-----------------------------------------
This directory represents an ex post facto rendering of pq6 in its
various versions in svn, so that changes will be trackable thataway.
The version as of this moment in svn is 6.2 (but I had two copies
around, so I'm not positive this is the final one, and not the previous
rev checked in)
(I didn't add this file in PQ 6.0, but after that you can use this README
to trace the checkin history using svn.)
+49
View File
@@ -0,0 +1,49 @@
ProgressQuest v6.4
==================
BUILDING
--------
Requires Delphi 6.
Requires the package in DelphiZLib.zip to be installed in Delphi, or
decompress the .obj files from there into this, the project, directory.
VCS NOTES
---------
Converted to Mercurial on 1/12/2010 & sent to
http://bitbucket.org/grumdrig/pq/ ; development will continue from
there. If at all. Source opened 5/20/11. The world ends tomorrow anyway.[^1]
This project represents an ex post facto rendering of pq6 in its
various versions in version control, so that changes will be trackable
thataway.
(I didn't add this README file in PQ 6.0, but after that you can use
this README to trace the checkin history using version control.)
Subversion revsion numbers vs. versions:
* r321 v6.3 as I found it after a couple years of inactivity
* r320 v6.2 probably as released, though I'm not totally sure
* r318 v6.2 but probably a slightly older version
* r317 v6.1
* r313 v6.0
(But these revision numbers aren't immediately accessible, if at all,
since moving to git.)
SEE ALSO
--------
The in-browser edition: this project, ported to JavaScript/HTML
https://bitbucket.org/grumdrig/pq-web
[^1]: Although I don't remember it here in 2022, this is presumably a reference
to Christian radio host Harold Camping's prediction that the world would
end on 5/21/11 at 6pm. It did not, to the dismay of himself and his
followers (only).
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
+1 -1
View File
@@ -51,7 +51,7 @@ begin
Result := ''; Result := '';
conntype := INTERNET_OPEN_TYPE_DIRECT; conntype := INTERNET_OPEN_TYPE_DIRECT;
if proxyok then conntype := INTERNET_OPEN_TYPE_PRECONFIG; if proxyok then conntype := INTERNET_OPEN_TYPE_PRECONFIG;
NetHandle := InternetOpen('PQ6.2', conntype, nil, nil, 0); NetHandle := InternetOpen('PQ6.4', conntype, nil, nil, 0);
if Assigned(NetHandle) then if Assigned(NetHandle) then
begin { begin {
if Len(username + password) > 0 then if Len(username + password) > 0 then
+777
View File
@@ -0,0 +1,777 @@
{*****************************************************************************
* ZLibEx.pas *
* *
* copyright (c) 2000-2002 base2 technologies *
* copyright (c) 1997 Borland International *
* *
* revision history *
* 2002.03.15 updated to zlib version 1.1.4 *
* 2001.11.27 enhanced TZDecompressionStream.Read to adjust source *
* stream position upon end of compression data *
* fixed endless loop in TZDecompressionStream.Read when *
* destination count was greater than uncompressed data *
* 2001.10.26 renamed unit to integrate "nicely" with delphi 6 *
* 2000.11.24 added soFromEnd condition to TZDecompressionStream.Seek *
* added ZCompressStream and ZDecompressStream *
* 2000.06.13 optimized, fixed, rewrote, and enhanced the zlib.pas unit *
* included on the delphi cd (zlib version 1.1.3) *
* *
* acknowledgements *
* erik turner Z*Stream routines *
* david bennion finding the nastly little endless loop quirk with the *
* TZDecompressionStream.Read method *
* burak kalayci informing me about the zlib 1.1.4 update *
*****************************************************************************}
unit ZLibEx;
interface
uses
Sysutils, Classes;
const
ZLIB_VERSION = '1.1.4';
type
TZAlloc = function (opaque: Pointer; items, size: Integer): Pointer;
TZFree = procedure (opaque, block: Pointer);
TZCompressionLevel = (zcNone, zcFastest, zcDefault, zcMax);
{** TZStreamRec ***********************************************************}
TZStreamRec = packed record
next_in : PChar; // next input byte
avail_in : Longint; // number of bytes available at next_in
total_in : Longint; // total nb of input bytes read so far
next_out : PChar; // next output byte should be put here
avail_out: Longint; // remaining free space at next_out
total_out: Longint; // total nb of bytes output so far
msg : PChar; // last error message, NULL if no error
state : Pointer; // not visible by applications
zalloc : TZAlloc; // used to allocate the internal state
zfree : TZFree; // used to free the internal state
opaque : Pointer; // private data object passed to zalloc and zfree
data_type: Integer; // best guess about the data type: ascii or binary
adler : Longint; // adler32 value of the uncompressed data
reserved : Longint; // reserved for future use
end;
{** TCustomZStream ********************************************************}
TCustomZStream = class(TStream)
private
FStream : TStream;
FStreamPos : Integer;
FOnProgress: TNotifyEvent;
FZStream : TZStreamRec;
FBuffer : Array [Word] of Char;
protected
constructor Create(stream: TStream);
procedure DoProgress; dynamic;
property OnProgress: TNotifyEvent read FOnProgress write FOnProgress;
end;
{** TZCompressionStream ***************************************************}
TZCompressionStream = class(TCustomZStream)
private
function GetCompressionRate: Single;
public
constructor Create(dest: TStream; compressionLevel: TZCompressionLevel = zcDefault);
destructor Destroy; override;
function Read(var buffer; count: Longint): Longint; override;
function Write(const buffer; count: Longint): Longint; override;
function Seek(offset: Longint; origin: Word): Longint; override;
property CompressionRate: Single read GetCompressionRate;
property OnProgress;
end;
{** TZDecompressionStream *************************************************}
TZDecompressionStream = class(TCustomZStream)
public
constructor Create(source: TStream);
destructor Destroy; override;
function Read(var buffer; count: Longint): Longint; override;
function Write(const buffer; count: Longint): Longint; override;
function Seek(offset: Longint; origin: Word): Longint; override;
property OnProgress;
end;
{** zlib public routines ****************************************************}
{*****************************************************************************
* ZCompress *
* *
* pre-conditions *
* inBuffer = pointer to uncompressed data *
* inSize = size of inBuffer (bytes) *
* outBuffer = pointer (unallocated) *
* level = compression level *
* *
* post-conditions *
* outBuffer = pointer to compressed data (allocated) *
* outSize = size of outBuffer (bytes) *
*****************************************************************************}
procedure ZCompress(const inBuffer: Pointer; inSize: Integer;
out outBuffer: Pointer; out outSize: Integer;
level: TZCompressionLevel = zcDefault);
{*****************************************************************************
* ZDecompress *
* *
* pre-conditions *
* inBuffer = pointer to compressed data *
* inSize = size of inBuffer (bytes) *
* outBuffer = pointer (unallocated) *
* outEstimate = estimated size of uncompressed data (bytes) *
* *
* post-conditions *
* outBuffer = pointer to decompressed data (allocated) *
* outSize = size of outBuffer (bytes) *
*****************************************************************************}
procedure ZDecompress(const inBuffer: Pointer; inSize: Integer;
out outBuffer: Pointer; out outSize: Integer; outEstimate: Integer = 0);
{** string routines *********************************************************}
function ZCompressStr(const s: String; level: TZCompressionLevel = zcDefault): String;
function ZDecompressStr(const s: String): String;
{** stream routines *********************************************************}
procedure ZCompressStream(inStream, outStream: TStream;
level: TZCompressionLevel = zcDefault);
procedure ZDecompressStream(inStream, outStream: TStream);
{****************************************************************************}
type
EZLibError = class(Exception);
EZCompressionError = class(EZLibError);
EZDecompressionError = class(EZLibError);
implementation
{** link zlib code **********************************************************}
{$L deflate.obj}
{$L inflate.obj}
{$L infblock.obj}
{$L inftrees.obj}
{$L infcodes.obj}
{$L infutil.obj}
{$L inffast.obj}
{$L trees.obj}
{$L adler32.obj}
{*****************************************************************************
* note: do not reorder the above -- doing so will result in external *
* functions being undefined *
*****************************************************************************}
const
{** flush constants *******************************************************}
Z_NO_FLUSH = 0;
Z_PARTIAL_FLUSH = 1;
Z_SYNC_FLUSH = 2;
Z_FULL_FLUSH = 3;
Z_FINISH = 4;
{** return codes **********************************************************}
Z_OK = 0;
Z_STREAM_END = 1;
Z_NEED_DICT = 2;
Z_ERRNO = (-1);
Z_STREAM_ERROR = (-2);
Z_DATA_ERROR = (-3);
Z_MEM_ERROR = (-4);
Z_BUF_ERROR = (-5);
Z_VERSION_ERROR = (-6);
{** compression levels ****************************************************}
Z_NO_COMPRESSION = 0;
Z_BEST_SPEED = 1;
Z_BEST_COMPRESSION = 9;
Z_DEFAULT_COMPRESSION = (-1);
{** compression strategies ************************************************}
Z_FILTERED = 1;
Z_HUFFMAN_ONLY = 2;
Z_DEFAULT_STRATEGY = 0;
{** data types ************************************************************}
Z_BINARY = 0;
Z_ASCII = 1;
Z_UNKNOWN = 2;
{** compression methods ***************************************************}
Z_DEFLATED = 8;
{** return code messages **************************************************}
_z_errmsg: array[0..9] of PChar = (
'need dictionary', // Z_NEED_DICT (2)
'stream end', // Z_STREAM_END (1)
'', // Z_OK (0)
'file error', // Z_ERRNO (-1)
'stream error', // Z_STREAM_ERROR (-2)
'data error', // Z_DATA_ERROR (-3)
'insufficient memory', // Z_MEM_ERROR (-4)
'buffer error', // Z_BUF_ERROR (-5)
'incompatible version', // Z_VERSION_ERROR (-6)
''
);
ZLevels: array [TZCompressionLevel] of Shortint = (
Z_NO_COMPRESSION,
Z_BEST_SPEED,
Z_DEFAULT_COMPRESSION,
Z_BEST_COMPRESSION
);
SZInvalid = 'Invalid ZStream operation!';
{** deflate routines ********************************************************}
function deflateInit_(var strm: TZStreamRec; level: Integer; version: PChar;
recsize: Integer): Integer; external;
function deflate(var strm: TZStreamRec; flush: Integer): Integer;
external;
function deflateEnd(var strm: TZStreamRec): Integer; external;
{** inflate routines ********************************************************}
function inflateInit_(var strm: TZStreamRec; version: PChar;
recsize: Integer): Integer; external;
function inflate(var strm: TZStreamRec; flush: Integer): Integer;
external;
function inflateEnd(var strm: TZStreamRec): Integer; external;
function inflateReset(var strm: TZStreamRec): Integer; external;
{** zlib function implementations *******************************************}
function zcalloc(opaque: Pointer; items, size: Integer): Pointer;
begin
GetMem(result,items * size);
end;
procedure zcfree(opaque, block: Pointer);
begin
FreeMem(block);
end;
{** c function implementations **********************************************}
procedure _memset(p: Pointer; b: Byte; count: Integer); cdecl;
begin
FillChar(p^,count,b);
end;
procedure _memcpy(dest, source: Pointer; count: Integer); cdecl;
begin
Move(source^,dest^,count);
end;
{** custom zlib routines ****************************************************}
function DeflateInit(var stream: TZStreamRec; level: Integer): Integer;
begin
result := DeflateInit_(stream,level,ZLIB_VERSION,SizeOf(TZStreamRec));
end;
// function DeflateInit2(var stream: TZStreamRec; level, method, windowBits,
// memLevel, strategy: Integer): Integer;
// begin
// result := DeflateInit2_(stream,level,method,windowBits,memLevel,
// strategy,ZLIB_VERSION,SizeOf(TZStreamRec));
// end;
function InflateInit(var stream: TZStreamRec): Integer;
begin
result := InflateInit_(stream,ZLIB_VERSION,SizeOf(TZStreamRec));
end;
// function InflateInit2(var stream: TZStreamRec; windowBits: Integer): Integer;
// begin
// result := InflateInit2_(stream,windowBits,ZLIB_VERSION,SizeOf(TZStreamRec));
// end;
{****************************************************************************}
function ZCompressCheck(code: Integer): Integer;
begin
result := code;
if code < 0 then
begin
raise EZCompressionError.Create(_z_errmsg[2 - code]);
end;
end;
function ZDecompressCheck(code: Integer): Integer;
begin
Result := code;
if code < 0 then
begin
raise EZDecompressionError.Create(_z_errmsg[2 - code]);
end;
end;
procedure ZCompress(const inBuffer: Pointer; inSize: Integer;
out outBuffer: Pointer; out outSize: Integer;
level: TZCompressionLevel);
const
delta = 256;
var
zstream: TZStreamRec;
begin
FillChar(zstream,SizeOf(TZStreamRec),0);
outSize := ((inSize + (inSize div 10) + 12) + 255) and not 255;
GetMem(outBuffer,outSize);
try
zstream.next_in := inBuffer;
zstream.avail_in := inSize;
zstream.next_out := outBuffer;
zstream.avail_out := outSize;
ZCompressCheck(DeflateInit(zstream,ZLevels[level]));
try
while ZCompressCheck(deflate(zstream,Z_FINISH)) <> Z_STREAM_END do
begin
Inc(outSize,delta);
ReallocMem(outBuffer,outSize);
zstream.next_out := PChar(Integer(outBuffer) + zstream.total_out);
zstream.avail_out := delta;
end;
finally
ZCompressCheck(deflateEnd(zstream));
end;
ReallocMem(outBuffer,zstream.total_out);
outSize := zstream.total_out;
except
FreeMem(outBuffer);
raise;
end;
end;
procedure ZDecompress(const inBuffer: Pointer; inSize: Integer;
out outBuffer: Pointer; out outSize: Integer; outEstimate: Integer);
var
zstream: TZStreamRec;
delta : Integer;
begin
FillChar(zstream,SizeOf(TZStreamRec),0);
delta := (inSize + 255) and not 255;
if outEstimate = 0 then outSize := delta
else outSize := outEstimate;
GetMem(outBuffer,outSize);
try
zstream.next_in := inBuffer;
zstream.avail_in := inSize;
zstream.next_out := outBuffer;
zstream.avail_out := outSize;
ZDecompressCheck(InflateInit(zstream));
try
while ZDecompressCheck(inflate(zstream,Z_NO_FLUSH)) <> Z_STREAM_END do
begin
Inc(outSize,delta);
ReallocMem(outBuffer,outSize);
zstream.next_out := PChar(Integer(outBuffer) + zstream.total_out);
zstream.avail_out := delta;
end;
finally
ZDecompressCheck(inflateEnd(zstream));
end;
ReallocMem(outBuffer,zstream.total_out);
outSize := zstream.total_out;
except
FreeMem(outBuffer);
raise;
end;
end;
{** string routines *********************************************************}
function ZCompressStr(const s: String; level: TZCompressionLevel): String;
var
buffer: Pointer;
size : Integer;
begin
ZCompress(PChar(s),Length(s),buffer,size,level);
SetLength(result,size);
Move(buffer^,result[1],size);
FreeMem(buffer);
end;
function ZDecompressStr(const s: String): String;
var
buffer: Pointer;
size : Integer;
begin
ZDecompress(PChar(s),Length(s),buffer,size);
SetLength(result,size);
Move(buffer^,result[1],size);
FreeMem(buffer);
end;
{** stream routines *********************************************************}
procedure ZCompressStream(inStream, outStream: TStream;
level: TZCompressionLevel);
const
bufferSize = 32768;
var
zstream : TZStreamRec;
zresult : Integer;
inBuffer : Array [0..bufferSize-1] of Char;
outBuffer: Array [0..bufferSize-1] of Char;
inSize : Integer;
outSize : Integer;
begin
FillChar(zstream,SizeOf(TZStreamRec),0);
ZCompressCheck(DeflateInit(zstream,ZLevels[level]));
inSize := inStream.Read(inBuffer,bufferSize);
while inSize > 0 do
begin
zstream.next_in := inBuffer;
zstream.avail_in := inSize;
repeat
zstream.next_out := outBuffer;
zstream.avail_out := bufferSize;
ZCompressCheck(deflate(zstream,Z_NO_FLUSH));
// outSize := zstream.next_out - outBuffer;
outSize := bufferSize - zstream.avail_out;
outStream.Write(outBuffer,outSize);
until (zstream.avail_in = 0) and (zstream.avail_out > 0);
inSize := inStream.Read(inBuffer,bufferSize);
end;
repeat
zstream.next_out := outBuffer;
zstream.avail_out := bufferSize;
zresult := ZCompressCheck(deflate(zstream,Z_FINISH));
// outSize := zstream.next_out - outBuffer;
outSize := bufferSize - zstream.avail_out;
outStream.Write(outBuffer,outSize);
until (zresult = Z_STREAM_END) and (zstream.avail_out > 0);
ZCompressCheck(deflateEnd(zstream));
end;
procedure ZDecompressStream(inStream, outStream: TStream);
const
bufferSize = 32768;
var
zstream : TZStreamRec;
zresult : Integer;
inBuffer : Array [0..bufferSize-1] of Char;
outBuffer: Array [0..bufferSize-1] of Char;
inSize : Integer;
outSize : Integer;
begin
FillChar(zstream,SizeOf(TZStreamRec),0);
ZCompressCheck(InflateInit(zstream));
inSize := inStream.Read(inBuffer,bufferSize);
while inSize > 0 do
begin
zstream.next_in := inBuffer;
zstream.avail_in := inSize;
repeat
zstream.next_out := outBuffer;
zstream.avail_out := bufferSize;
ZCompressCheck(inflate(zstream,Z_NO_FLUSH));
// outSize := zstream.next_out - outBuffer;
outSize := bufferSize - zstream.avail_out;
outStream.Write(outBuffer,outSize);
until (zstream.avail_in = 0) and (zstream.avail_out > 0);
inSize := inStream.Read(inBuffer,bufferSize);
end;
repeat
zstream.next_out := outBuffer;
zstream.avail_out := bufferSize;
zresult := ZCompressCheck(inflate(zstream,Z_FINISH));
// outSize := zstream.next_out - outBuffer;
outSize := bufferSize - zstream.avail_out;
outStream.Write(outBuffer,outSize);
until (zresult = Z_STREAM_END) and (zstream.avail_out > 0);
ZCompressCheck(inflateEnd(zstream));
end;
{** TCustomZStream **********************************************************}
constructor TCustomZStream.Create(stream: TStream);
begin
inherited Create;
FStream := stream;
FStreamPos := stream.Position;
end;
procedure TCustomZStream.DoProgress;
begin
if Assigned(FOnProgress) then FOnProgress(Self);
end;
{** TZCompressionStream *****************************************************}
constructor TZCompressionStream.Create(dest: TStream;
compressionLevel: TZCompressionLevel);
begin
inherited Create(dest);
FZStream.next_out := FBuffer;
FZStream.avail_out := SizeOf(FBuffer);
ZCompressCheck(DeflateInit(FZStream,ZLevels[compressionLevel]));
end;
destructor TZCompressionStream.Destroy;
begin
FZStream.next_in := Nil;
FZStream.avail_in := 0;
try
if FStream.Position <> FStreamPos then FStream.Position := FStreamPos;
while ZCompressCheck(deflate(FZStream,Z_FINISH)) <> Z_STREAM_END do
begin
FStream.WriteBuffer(FBuffer,SizeOf(FBuffer) - FZStream.avail_out);
FZStream.next_out := FBuffer;
FZStream.avail_out := SizeOf(FBuffer);
end;
if FZStream.avail_out < SizeOf(FBuffer) then
begin
FStream.WriteBuffer(FBuffer,SizeOf(FBuffer) - FZStream.avail_out);
end;
finally
deflateEnd(FZStream);
end;
inherited Destroy;
end;
function TZCompressionStream.Read(var buffer; count: Longint): Longint;
begin
raise EZCompressionError.Create(SZInvalid);
end;
function TZCompressionStream.Write(const buffer; count: Longint): Longint;
begin
FZStream.next_in := @buffer;
FZStream.avail_in := count;
if FStream.Position <> FStreamPos then FStream.Position := FStreamPos;
while FZStream.avail_in > 0 do
begin
ZCompressCheck(deflate(FZStream,Z_NO_FLUSH));
if FZStream.avail_out = 0 then
begin
FStream.WriteBuffer(FBuffer,SizeOf(FBuffer));
FZStream.next_out := FBuffer;
FZStream.avail_out := SizeOf(FBuffer);
FStreamPos := FStream.Position;
DoProgress;
end;
end;
result := Count;
end;
function TZCompressionStream.Seek(offset: Longint; origin: Word): Longint;
begin
if (offset = 0) and (origin = soFromCurrent) then
begin
result := FZStream.total_in;
end
else raise EZCompressionError.Create(SZInvalid);
end;
function TZCompressionStream.GetCompressionRate: Single;
begin
if FZStream.total_in = 0 then result := 0
else result := (1.0 - (FZStream.total_out / FZStream.total_in)) * 100.0;
end;
{** TZDecompressionStream ***************************************************}
constructor TZDecompressionStream.Create(source: TStream);
begin
inherited Create(source);
FZStream.next_in := FBuffer;
FZStream.avail_in := 0;
ZDecompressCheck(InflateInit(FZStream));
end;
destructor TZDecompressionStream.Destroy;
begin
inflateEnd(FZStream);
inherited Destroy;
end;
function TZDecompressionStream.Read(var buffer; count: Longint): Longint;
var
zresult: Integer;
begin
FZStream.next_out := @buffer;
FZStream.avail_out := count;
if FStream.Position <> FStreamPos then FStream.Position := FStreamPos;
zresult := Z_OK;
while (FZStream.avail_out > 0) and (zresult <> Z_STREAM_END) do
begin
if FZStream.avail_in = 0 then
begin
FZStream.avail_in := FStream.Read(FBuffer,SizeOf(FBuffer));
if FZStream.avail_in = 0 then
begin
result := count - FZStream.avail_out;
Exit;
end;
FZStream.next_in := FBuffer;
FStreamPos := FStream.Position;
DoProgress;
end;
zresult := ZDecompressCheck(inflate(FZStream,Z_NO_FLUSH));
end;
if (zresult = Z_STREAM_END) and (FZStream.avail_in > 0) then
begin
FStream.Position := FStream.Position - FZStream.avail_in;
FStreamPos := FStream.Position;
FZStream.avail_in := 0;
end;
result := count - FZStream.avail_out;
end;
function TZDecompressionStream.Write(const Buffer; Count: Longint): Longint;
begin
raise EZDecompressionError.Create(SZInvalid);
end;
function TZDecompressionStream.Seek(Offset: Longint; Origin: Word): Longint;
var
buf: Array [0..8191] of Char;
i : Integer;
begin
if (offset = 0) and (origin = soFromBeginning) then
begin
ZDecompressCheck(inflateReset(FZStream));
FZStream.next_in := FBuffer;
FZStream.avail_in := 0;
FStream.Position := 0;
FStreamPos := 0;
end
else if ((offset >= 0) and (origin = soFromCurrent)) or
(((offset - FZStream.total_out) > 0) and (origin = soFromBeginning)) then
begin
if origin = soFromBeginning then Dec(offset,FZStream.total_out);
if offset > 0 then
begin
for i := 1 to offset div SizeOf(buf) do ReadBuffer(buf,SizeOf(buf));
ReadBuffer(buf,offset mod SizeOf(buf));
end;
end
else if (offset = 0) and (origin = soFromEnd) then
begin
while Read(buf,SizeOf(buf)) > 0 do ;
end
else raise EZDecompressionError.Create(SZInvalid);
result := FZStream.total_out;
end;
end.
-39
View File
@@ -1,39 +0,0 @@
Chillmitts [Oobag]
Gyrognome Puma Burgular
Level 1 (exp. 220/1200)
Plot stage: Act I (5 hours remaining)
Quest: Deliver this counterpane (83% complete)
Stats:
STR 10
CON 9
DEX 6
INT 7
WIS 5 HP Max 2
CHA 15 MP Max 8
Equipment:
Weapon Sharp Stick
Shield Pie Plate
Helm
Hauberk
Brassairts -1 Holey Threadbare Chamois
Vambraces
Gauntlets
Cuisses
Greaves
Sollerets
Spell Book:
Hastiness I
Big Sister III
Inventory (20/20 cubits):
34 Gold
2 orc snouts
a merman trident
a Gleaming Bandolier of Grob
-- June 12 2002 10:12:12
-- Progress Quest 6.2 - http://progressquest.com
+1 -1
View File
@@ -125,5 +125,5 @@ running</i>. Your character will make <i>no</i> progress once you quit the prog
<tr><td>Alt-F4<td>Exit <b>Progress Quest</b></table> <tr><td>Alt-F4<td>Exit <b>Progress Quest</b></table>
<p> <p>
<small>&copy:Copyright 2003 <small>&copy:Copyright 2022
<a href=mailto:grumdrig@progressquest.com>grumdrig@progressquest.com</a> <a href=mailto:grumdrig@progressquest.com>grumdrig@progressquest.com</a>
+2 -2
View File
@@ -1,5 +1,5 @@
Progress Quest version 6.2 Progress Quest version 6.4
Copyright (c) 2003 Eric Fredricksen Copyright (c) 2022 Eric Fredricksen
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
+2 -2
View File
@@ -31,5 +31,5 @@
-M -M
-$M16384,1048576 -$M16384,1048576
-K$00400000 -K$00400000
-LE"c:\appl\delphi6\Projects\Bpl" -LE"c:\program files\borland\delphi6\Projects\Bpl"
-LN"c:\appl\delphi6\Projects\Bpl" -LN"c:\program files\borland\delphi6\Projects\Bpl"
-9
View File
@@ -1,9 +0,0 @@
[2003-04-12 11:34:34] Gained a swamp elf lilypad
[2003-04-12 11:34:34] Executing a fetal Anhkheg...
[2003-04-12 11:37:14] Loaded game: C:\proj\pq6.2\Chillmitts [Oobag].pq
[2003-04-12 11:37:15] Saving game: C:\proj\pq6.2\Chillmitts [Oobag].pq
[2003-04-12 11:51:16] Loaded game: C:\proj\pq6.2\Chillmitts [Oobag].pq
[2003-04-12 11:51:30] Gained an anhkheg chitin
[2003-04-12 11:51:30] Executing a fetal Anhkheg...
[2003-04-12 11:51:36] Gained an anhkheg chitin
[2003-04-12 11:51:36] Executing a fetal Anhkheg...
Binary file not shown.
-45
View File
@@ -1,45 +0,0 @@
Chillmitts [Oobag]
Gyrognome Puma Burgular
Level 2 (exp. 345/1279)
Plot stage: Act I (5 hours remaining)
Quest: Exterminate the Gargoyles (40% complete)
Stats:
STR 11
CON 10
DEX 6
INT 8
WIS 5 HP Max 9
CHA 16 MP Max 11
Equipment:
Shield Pie Plate
Helm -2 Holey Threadbare Chamois
Hauberk -2 Burlap
Vambraces Macrame
Gauntlets Mildewed Motheaten Chamois
Gambeson Macrame
Greaves -4 Faded Chamois
Spell Book:
Slime Finger II
Sadness I
Seasick I
Inventory (19/21 cubits):
89 gold pieces
a peryton antler
a lizard man tail
a pirate booty
a gray ooze gravy
a hobgoblin patella
a violet fungi spore
2 billy goat beards
an eel sashimi
6 yellow mold spores
2 nixie webbings
the Fearsome Laurel of Prurience
-- 4/12/2003 1:19:29 PM
-- Progress Quest 6.2 - http://progressquest.com/
-266
View File
@@ -1,266 +0,0 @@
[2003-04-12 11:41:57] Loaded game: C:\proj\pq6.2\Cokie [Oobag].pq
[2003-04-12 11:42:02] Gained a manes tooth
[2003-04-12 11:42:02] Executing a Manes...
[2003-04-12 11:42:09] Gained a manes tooth
[2003-04-12 11:42:09] Executing a Battle-Manes...
[2003-04-12 11:42:22] Quest completed: Deliver this bucket
[2003-04-12 11:42:22] Commencing quest: Placate the Boogies
[2003-04-12 11:42:22] Saving game: C:\proj\pq6.2\Cokie [Oobag].pq
[2003-04-12 11:42:22] Gained a manes tooth
[2003-04-12 11:42:22] Executing a Nixie...
[2003-04-12 11:42:28] Gained a nixie webbing
[2003-04-12 11:42:28] Executing a Goblin...
[2003-04-12 11:42:34] Gained a goblin ear
[2003-04-12 11:42:34] Heading to market to sell loot...
[2003-04-12 11:42:38] Selling a gnoll collar...
[2003-04-12 11:42:40] Got paid a gold piece
[2003-04-12 11:42:40] Selling a pirate booty...
[2003-04-12 11:42:41] Got paid a gold piece
[2003-04-12 11:42:41] Selling a quasit tail...
[2003-04-12 11:42:42] Got paid a gold piece
[2003-04-12 11:42:42] Selling a girl scout cookie...
[2003-04-12 11:42:43] Got paid a gold piece
[2003-04-12 11:42:43] Selling a multicell dendrite...
[2003-04-12 11:42:44] Got paid a gold piece
[2003-04-12 11:42:44] Selling a nebbish belly...
[2003-04-12 11:42:46] Got paid a gold piece
[2003-04-12 11:42:46] Selling a troglodyte tail...
[2003-04-12 11:42:47] Got paid a gold piece
[2003-04-12 11:42:47] Selling a merman trident...
[2003-04-12 11:42:48] Got paid a gold piece
[2003-04-12 11:42:48] Selling a yellow mold spore...
[2003-04-12 11:42:49] Got paid a gold piece
[2003-04-12 11:42:49] Selling a hippogriff egg...
[2003-04-12 11:42:50] Got paid a gold piece
[2003-04-12 11:42:50] Selling a koala heart...
[2003-04-12 11:42:52] Got paid a gold piece
[2003-04-12 11:42:52] Selling 7 manes tooths...
[2003-04-12 11:42:53] Got paid 7 gold pieces
[2003-04-12 11:42:53] Selling a nixie webbing...
[2003-04-12 11:42:54] Got paid a gold piece
[2003-04-12 11:42:54] Selling a goblin ear...
[2003-04-12 11:42:55] Got paid a gold piece
[2003-04-12 11:42:55] Heading to the killing fields...
[2003-04-12 11:42:59] Executing an undernourished Triton...
[2003-04-12 11:43:12] Gained a triton scale
[2003-04-12 11:43:12] Executing a passing Battle-Finch Hunter Strangler...
[2003-04-12 11:43:24] Gained a Fearsome Sceptre of Loyalty
[2003-04-12 11:43:24] Executing an Uruk...
[2003-04-12 11:43:36] Gained an uruk boot
[2003-04-12 11:43:36] Executing a Battle-Dwarf...
[2003-04-12 11:43:49] Gained a dwarf drawers
[2003-04-12 11:43:49] Executing a Pixie...
[2003-04-12 11:43:55] Gained a pixie dust
[2003-04-12 11:43:55] Executing a Nebbish...
[2003-04-12 11:44:01] Gained a nebbish belly
[2003-04-12 11:44:01] Executing a Battle-Beagle...
[2003-04-12 11:44:07] Gained a beagle collar
[2003-04-12 11:44:07] Executing a Manes...
[2003-04-12 11:44:13] Gained a manes tooth
[2003-04-12 11:44:13] Executing a Sea Elf...
[2003-04-12 11:44:20] Gained a Level
[2003-04-12 11:44:20] Gained 7 HP Maxes
[2003-04-12 11:44:20] Gained 8 MP Maxes
[2003-04-12 11:44:20] Gained a STR
[2003-04-12 11:44:20] Gained a STR
[2003-04-12 11:44:20] Saving game: C:\proj\pq6.2\Cokie [Oobag].pq
[2003-04-12 11:44:22] Gained a sea elf jerkin
[2003-04-12 11:44:22] Executing a crippled preadolescent Umber Hulk...
[2003-04-12 11:44:28] Gained an umber hulk claw
[2003-04-12 11:44:28] Executing a cursed Orc...
[2003-04-12 11:44:37] Quest completed: Placate the Boogies
[2003-04-12 11:44:37] Commencing quest: Placate the Nymphs
[2003-04-12 11:44:37] Saving game: C:\proj\pq6.2\Cokie [Oobag].pq
[2003-04-12 11:44:37] Gained an orc snout
[2003-04-12 11:44:37] Executing a Wolf...
[2003-04-12 11:44:43] Gained a wolf paw
[2003-04-12 11:44:43] Executing a greater Nixie...
[2003-04-12 11:44:50] Gained a nixie webbing
[2003-04-12 11:44:50] Executing a Grid Bug...
[2003-04-12 11:44:53] Gained a grid bug carapace
[2003-04-12 11:44:53] Executing a Troglodyte...
[2003-04-12 11:44:59] Gained a troglodyte tail
[2003-04-12 11:44:59] Executing an Uruk...
[2003-04-12 11:45:06] Gained an uruk boot
[2003-04-12 11:45:06] Executing an underage Piercer...
[2003-04-12 11:45:12] Gained a piercer tip
[2003-04-12 11:45:12] Executing a Brown Elf...
[2003-04-12 11:45:15] Gained a brown elf tusk
[2003-04-12 11:45:15] Executing a greater Swamp Elf...
[2003-04-12 11:45:21] Gained a swamp elf lilypad
[2003-04-12 11:45:21] Executing a crippled Medusa...
[2003-04-12 11:45:31] Gained a medusa eye
[2003-04-12 11:45:31] Executing an undernourished Nymph...
[2003-04-12 11:45:38] Gained a nymph hanky
[2003-04-12 11:45:38] Executing a Stun Worm...
[2003-04-12 11:45:44] Gained a stun worm trode
[2003-04-12 11:45:44] Heading to market to sell loot...
[2003-04-12 11:45:48] Selling a triton scale...
[2003-04-12 11:45:49] Got paid 2 gold pieces
[2003-04-12 11:45:49] Selling a Fearsome Sceptre of Loyalty...
[2003-04-12 11:45:50] Got paid 2 gold pieces
[2003-04-12 11:45:50] Selling 2 uruk boots...
[2003-04-12 11:45:52] Got paid 4 gold pieces
[2003-04-12 11:45:52] Selling a dwarf drawers...
[2003-04-12 11:45:53] Got paid 2 gold pieces
[2003-04-12 11:45:53] Selling a pixie dust...
[2003-04-12 11:45:54] Got paid 2 gold pieces
[2003-04-12 11:45:54] Selling a nebbish belly...
[2003-04-12 11:45:55] Got paid 2 gold pieces
[2003-04-12 11:45:55] Selling a beagle collar...
[2003-04-12 11:45:57] Got paid 2 gold pieces
[2003-04-12 11:45:57] Selling a manes tooth...
[2003-04-12 11:45:58] Got paid 2 gold pieces
[2003-04-12 11:45:58] Selling a sea elf jerkin...
[2003-04-12 11:45:59] Got paid 2 gold pieces
[2003-04-12 11:45:59] Selling an umber hulk claw...
[2003-04-12 11:46:00] Got paid 2 gold pieces
[2003-04-12 11:46:00] Selling an orc snout...
[2003-04-12 11:46:01] Got paid 2 gold pieces
[2003-04-12 11:46:01] Selling a wolf paw...
[2003-04-12 11:46:03] Got paid 2 gold pieces
[2003-04-12 11:46:03] Selling a nixie webbing...
[2003-04-12 11:46:04] Got paid 2 gold pieces
[2003-04-12 11:46:04] Selling a grid bug carapace...
[2003-04-12 11:46:05] Got paid 2 gold pieces
[2003-04-12 11:46:05] Selling a troglodyte tail...
[2003-04-12 11:46:06] Got paid 2 gold pieces
[2003-04-12 11:46:06] Selling a piercer tip...
[2003-04-12 11:46:07] Got paid 2 gold pieces
[2003-04-12 11:46:07] Selling a brown elf tusk...
[2003-04-12 11:46:09] Got paid 2 gold pieces
[2003-04-12 11:46:09] Selling a swamp elf lilypad...
[2003-04-12 11:46:10] Got paid 2 gold pieces
[2003-04-12 11:46:10] Selling a medusa eye...
[2003-04-12 11:46:11] Got paid 2 gold pieces
[2003-04-12 11:46:11] Selling a nymph hanky...
[2003-04-12 11:46:12] Got paid 2 gold pieces
[2003-04-12 11:46:12] Selling a stun worm trode...
[2003-04-12 11:46:13] Got paid 2 gold pieces
[2003-04-12 11:46:13] Negotiating purchase of better equipment...
[2003-04-12 11:46:19] Spent 60 gold pieces
[2003-04-12 11:46:19] Heading to the killing fields...
[2003-04-12 11:46:23] Executing a greater Rot Grub...
[2003-04-12 11:46:29] Gained a rot grub eggsac
[2003-04-12 11:46:29] Executing a sick Quasit...
[2003-04-12 11:46:32] Gained a quasit tail
[2003-04-12 11:46:33] Executing an underage Sea Hag...
[2003-04-12 11:46:39] Gained a sea hag wart
[2003-04-12 11:46:39] Executing a greater Bunny...
[2003-04-12 11:46:42] Gained a bunny ear
[2003-04-12 11:46:42] Executing a greater Uruk...
[2003-04-12 11:46:51] Gained an uruk boot
[2003-04-12 11:46:51] Executing a comatose Catoblepas...
[2003-04-12 11:46:58] Gained a catoblepas neck
[2003-04-12 11:46:58] Executing a Piercer...
[2003-04-12 11:47:07] Gained a piercer tip
[2003-04-12 11:47:07] Executing a greater Wolf...
[2003-04-12 11:47:17] Quest completed: Placate the Nymphs
[2003-04-12 11:47:17] Gained an INT
[2003-04-12 11:47:17] Commencing quest: Deliver this trinket
[2003-04-12 11:47:17] Saving game: C:\proj\pq6.2\Cokie [Oobag].pq
[2003-04-12 11:47:17] Gained a wolf paw
[2003-04-12 11:47:17] Executing a Cub Scout...
[2003-04-12 11:47:20] Gained a cub scout neckercheif
[2003-04-12 11:47:20] Executing a Sylph...
[2003-04-12 11:47:29] Gained a sylph thigh
[2003-04-12 11:47:29] Executing a Bat...
[2003-04-12 11:47:32] Gained a bat wing
[2003-04-12 11:47:32] Executing an underage Homonculus...
[2003-04-12 11:47:36] Gained a homonculus fluid
[2003-04-12 11:47:36] Executing a Gnoll...
[2003-04-12 11:47:42] Gained a gnoll collar
[2003-04-12 11:47:42] Executing an Eel...
[2003-04-12 11:47:48] Gained an eel sashimi
[2003-04-12 11:47:48] Executing a Girl Scout...
[2003-04-12 11:47:54] Gained a girl scout cookie
[2003-04-12 11:47:54] Executing a greater Merman...
[2003-04-12 11:48:01] Gained a merman trident
[2003-04-12 11:48:01] Executing a Battle-Orc...
[2003-04-12 11:48:07] Gained an orc snout
[2003-04-12 11:48:07] Executing a Yellow Mold...
[2003-04-12 11:48:10] Gained a yellow mold spore
[2003-04-12 11:48:10] Executing a cursed Goblin...
[2003-04-12 11:48:19] Gained a goblin ear
[2003-04-12 11:48:19] Executing a Piercer...
[2003-04-12 11:48:29] Gained a piercer tip
[2003-04-12 11:48:29] Executing a Jumpskin...
[2003-04-12 11:48:38] Gained a jumpskin shin
[2003-04-12 11:48:38] Executing a greater Grid Bug...
[2003-04-12 11:48:44] Gained a grid bug carapace
[2003-04-12 11:48:44] Heading to market to sell loot...
[2003-04-12 11:48:48] Selling a rot grub eggsac...
[2003-04-12 11:48:50] Got paid 2 gold pieces
[2003-04-12 11:48:50] Selling a quasit tail...
[2003-04-12 11:48:51] Got paid 2 gold pieces
[2003-04-12 11:48:51] Selling a sea hag wart...
[2003-04-12 11:48:52] Got paid 2 gold pieces
[2003-04-12 11:48:52] Selling a bunny ear...
[2003-04-12 11:48:53] Got paid 2 gold pieces
[2003-04-12 11:48:53] Selling an uruk boot...
[2003-04-12 11:48:54] Got paid 2 gold pieces
[2003-04-12 11:48:54] Selling a catoblepas neck...
[2003-04-12 11:48:56] Got paid 2 gold pieces
[2003-04-12 11:48:56] Selling 2 piercer tips...
[2003-04-12 11:48:57] Got paid 4 gold pieces
[2003-04-12 11:48:57] Selling a wolf paw...
[2003-04-12 11:48:58] Got paid 2 gold pieces
[2003-04-12 11:48:58] Selling a cub scout neckercheif...
[2003-04-12 11:48:59] Got paid 2 gold pieces
[2003-04-12 11:48:59] Selling a sylph thigh...
[2003-04-12 11:49:00] Got paid 2 gold pieces
[2003-04-12 11:49:00] Selling a bat wing...
[2003-04-12 11:49:02] Got paid 2 gold pieces
[2003-04-12 11:49:02] Selling a homonculus fluid...
[2003-04-12 11:49:03] Got paid 2 gold pieces
[2003-04-12 11:49:03] Selling a gnoll collar...
[2003-04-12 11:49:04] Got paid 2 gold pieces
[2003-04-12 11:49:04] Selling an eel sashimi...
[2003-04-12 11:49:05] Got paid 2 gold pieces
[2003-04-12 11:49:05] Selling a girl scout cookie...
[2003-04-12 11:49:06] Got paid 2 gold pieces
[2003-04-12 11:49:06] Selling a merman trident...
[2003-04-12 11:49:08] Got paid 2 gold pieces
[2003-04-12 11:49:08] Selling an orc snout...
[2003-04-12 11:49:09] Got paid 2 gold pieces
[2003-04-12 11:49:09] Selling a yellow mold spore...
[2003-04-12 11:49:10] Got paid 2 gold pieces
[2003-04-12 11:49:10] Selling a goblin ear...
[2003-04-12 11:49:11] Got paid 2 gold pieces
[2003-04-12 11:49:11] Selling a jumpskin shin...
[2003-04-12 11:49:12] Got paid 2 gold pieces
[2003-04-12 11:49:12] Selling a grid bug carapace...
[2003-04-12 11:49:14] Got paid 2 gold pieces
[2003-04-12 11:49:14] Heading to the killing fields...
[2003-04-12 11:49:18] Executing a greater Leprechaun...
[2003-04-12 11:49:24] Gained a leprechaun wallet
[2003-04-12 11:49:24] Executing a cursed Crayfish...
[2003-04-12 11:49:30] Gained a crayfish antenna
[2003-04-12 11:49:30] Executing an Iron Peasant...
[2003-04-12 11:49:40] Gained an iron peasant chaff
[2003-04-12 11:49:40] Executing an undernourished Green Slime...
[2003-04-12 11:49:43] Gained a green slime sample
[2003-04-12 11:49:43] Executing an Uruk...
[2003-04-12 11:49:49] Gained an uruk boot
[2003-04-12 11:49:49] Executing an underage Violet Fungi...
[2003-04-12 11:49:55] Gained a violet fungi spore
[2003-04-12 11:49:55] Executing a Camel...
[2003-04-12 11:50:01] Gained a camel hump
[2003-04-12 11:50:01] Executing a greater Rat...
[2003-04-12 11:50:23] Loaded game: C:\proj\pq6.2\Cokie [Oobag].pq
[2003-04-12 11:50:23] Gained a wolf paw
[2003-04-12 11:50:23] Executing a Yellow Mold...
[2003-04-12 11:50:27] Gained a yellow mold spore
[2003-04-12 11:50:27] Executing a massive Nixie...
[2003-04-12 11:50:30] Saving game: C:\proj\pq6.2\Cokie [Oobag].pq
[2003-04-12 11:52:42] Loaded game: C:\proj\pq6.2\Cokie [Oobag].pq
[2003-04-12 11:53:40] Loaded game: C:\proj\pq6.2\Cokie [Oobag].pq
[2003-04-12 11:53:46] Gained a nixie webbing
[2003-04-12 11:53:46] Executing a Yellow Mold...
[2003-04-12 11:53:49] Gained a yellow mold spore
[2003-04-12 11:53:49] Executing a massive Nixie...
[2003-04-12 11:53:59] Gained a nixie webbing
[2003-04-12 11:53:59] Executing a Goblin...
[2003-04-12 11:54:02] Gained a goblin ear
[2003-04-12 11:54:02] Executing a Battle-Leprechaun...
[2003-04-12 11:54:06] Saving game: C:\proj\pq6.2\Cokie [Oobag].pq
Binary file not shown.
-37
View File
@@ -1,37 +0,0 @@
Cookie [Oobag]
Half Halfling Puma Burgular
Level 3 (exp. 44/1291)
Plot stage: Act I (5 hours remaining)
Quest: Exterminate the Unicorns (93% complete)
Stats:
STR 12
CON 9
DEX 6
INT 14
WIS 13 HP Max 19
CHA 11 MP Max 19
Equipment:
Shield +1 Pie Plate
Helm Macrame
Hauberk -1 Canvas
Brassairts Mildewed Rusty Pleathers
Vambraces Cracked Patched Pleathers
Gauntlets Lace
Gambeson Lace
Greaves -1 Macrame
Sollerets -1 Burlap
Spell Book:
Hastiness III
Slime Finger III
Sadness I
Rabbit Punch I
Inventory (1/22 cubits):
6 gold pieces
-- 9/5/2003 12:22:01 AM
-- Progress Quest 6.2 - http://progressquest.com/
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
View File
Binary file not shown.