mirror of
https://bitbucket.org/grumdrig/pq.git
synced 2026-09-30 01:01:00 -06:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
342a0ef59f | ||
|
|
ef1ed7f9f5 | ||
|
|
69816c5539 | ||
|
|
7f901f40a6 | ||
|
|
73fb6f5962 | ||
|
|
262633a20c | ||
|
|
95f5d66f97 | ||
|
|
4b16e8b7b9 | ||
|
|
73754959ac | ||
|
|
99314c4e0e | ||
|
|
e22fcdfa0e | ||
|
|
752f684fcc | ||
|
|
047dc7463c | ||
|
|
a2ae462d30 | ||
|
|
5fa415a542 | ||
|
|
a12ef24a3b | ||
|
|
de061990c9 | ||
|
|
a692172852 | ||
|
|
2794b6eced | ||
|
|
fd0680126b | ||
|
|
17f4c78a74 | ||
|
|
c7911ffbca | ||
|
|
e3c564529d | ||
|
|
16c8a5b053 | ||
|
|
bf3619f270 | ||
|
|
861e68e477 | ||
|
|
f503ab75a7 | ||
|
|
24895486cf | ||
|
|
cbb3d5daac | ||
|
|
9030d1ba58 | ||
|
|
a0e0d53739 | ||
|
|
64aca6ec2f | ||
|
|
bf632cb99b | ||
|
|
d611931e37 | ||
|
|
e371be0bc4 | ||
|
|
07b569a7d1 | ||
|
|
cad63aac86 | ||
|
|
86f57c02cb | ||
|
|
082c65a863 | ||
|
|
38e1fc3763 | ||
|
|
9396003e3f | ||
|
|
c6eaa46994 | ||
|
|
6f3a72ac27 | ||
|
|
ddff883b06 | ||
|
|
03468f6666 | ||
|
|
32f584559a | ||
|
|
3d107337fd | ||
|
|
d5b41649ea | ||
|
|
a0f0879520 | ||
|
|
ee648fd4ec | ||
|
|
05718c79d9 | ||
|
|
5d11926e15 | ||
|
|
9a85adf823 |
No files matched your search
@@ -0,0 +1,7 @@
|
||||
*.obj
|
||||
*.~*
|
||||
*.bak
|
||||
*.dcu
|
||||
*.ddp
|
||||
*.pq
|
||||
pq.exe
|
||||
BIN
Binary file not shown.
BIN
Binary file not shown.
+144
-17
@@ -1,7 +1,7 @@
|
||||
object K: TK
|
||||
Left = 335
|
||||
Top = 119
|
||||
Width = 572
|
||||
Left = 202
|
||||
Top = 129
|
||||
Width = 800
|
||||
Height = 567
|
||||
Caption = 'K'
|
||||
Color = clBtnFace
|
||||
@@ -32,7 +32,7 @@ object K: TK
|
||||
Top = 228
|
||||
Width = 70
|
||||
Height = 13
|
||||
Caption = 'Defense Atrtrib'
|
||||
Caption = 'Defense Attrib'
|
||||
end
|
||||
object Label4: TLabel
|
||||
Left = 140
|
||||
@@ -60,7 +60,7 @@ object K: TK
|
||||
Top = 428
|
||||
Width = 40
|
||||
Height = 13
|
||||
Caption = 'Speicals'
|
||||
Caption = 'Specials'
|
||||
end
|
||||
object Label8: TLabel
|
||||
Left = 8
|
||||
@@ -111,6 +111,34 @@ object K: TK
|
||||
Height = 13
|
||||
Caption = 'DefenseBad'
|
||||
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
|
||||
Left = 8
|
||||
Top = 132
|
||||
@@ -123,8 +151,8 @@ object K: TK
|
||||
'Good Move'
|
||||
'Sadness'
|
||||
'Seasick'
|
||||
'Gyp'
|
||||
'Innoculate'
|
||||
'Shoelaces'
|
||||
'Inoculate'
|
||||
'Cone of Annoyance'
|
||||
'Magnetic Orb'
|
||||
'Invisible Hands'
|
||||
@@ -133,6 +161,7 @@ object K: TK
|
||||
'Spectral Miasma'
|
||||
'Clever Fellow'
|
||||
'Lockjaw'
|
||||
'History Lesson'
|
||||
'Hydrophobia'
|
||||
'Big Sister'
|
||||
'Cone of Paste'
|
||||
@@ -158,7 +187,7 @@ object K: TK
|
||||
'Animate Tunic'
|
||||
'Ursine Armor'
|
||||
'Holy Roller'
|
||||
'Tonsilectomy'
|
||||
'Tonsillectomy'
|
||||
'Curse Family'
|
||||
'Infinite Confusion')
|
||||
TabOrder = 0
|
||||
@@ -289,6 +318,7 @@ object K: TK
|
||||
'Crankbow|6'
|
||||
'Blibo|7'
|
||||
'Broadsword|7'
|
||||
'Kreen|7'
|
||||
'Morning Star|8'
|
||||
'Pole-adze|8'
|
||||
'Spontoon|8'
|
||||
@@ -343,7 +373,8 @@ object K: TK
|
||||
'Bijou'
|
||||
'Spangle'
|
||||
'Gimcrack'
|
||||
'Hood')
|
||||
'Hood'
|
||||
'Vulpeculum')
|
||||
TabOrder = 6
|
||||
WordWrap = False
|
||||
end
|
||||
@@ -495,7 +526,8 @@ object K: TK
|
||||
'casket'
|
||||
'nosegay'
|
||||
'trinket'
|
||||
'credenza')
|
||||
'credenza'
|
||||
'writ')
|
||||
TabOrder = 9
|
||||
WordWrap = False
|
||||
end
|
||||
@@ -512,7 +544,7 @@ object K: TK
|
||||
'Beholder|10|eyestalk'
|
||||
'Black Pudding|10|saliva'
|
||||
'Blink Dog|4|eyelid'
|
||||
'Cub Scout|1|neckercheif'
|
||||
'Cub Scout|1|neckerchief'
|
||||
'Girl Scout|2|cookie'
|
||||
'Boy Scout|3|merit badge'
|
||||
'Eagle Scout|4|merit badge'
|
||||
@@ -550,7 +582,7 @@ object K: TK
|
||||
'Ice Devil|11|snow'
|
||||
'Lemure|3|blob'
|
||||
'Pit Fiend|13|seed'
|
||||
'Anklyosaurus|9|tail'
|
||||
'Ankylosaurus|9|tail'
|
||||
'Brontosaurus|30|brain'
|
||||
'Diplodocus|24|fin'
|
||||
'Elasmosaurus|15|neck'
|
||||
@@ -561,9 +593,9 @@ object K: TK
|
||||
'Pentasaurus|12|head'
|
||||
'Stegosaurus|18|plate'
|
||||
'Triceratops|16|horn'
|
||||
'Tyranosauraus Rex|18|forearm'
|
||||
'Tyrannosaurus Rex|18|forearm'
|
||||
'Djinn|7|lamp'
|
||||
'Doppleganger|4|face'
|
||||
'Doppelganger|4|face'
|
||||
'Black Dragon|7|*'
|
||||
'Plaid Dragon|7|sporrin'
|
||||
'Blue Dragon|9|*'
|
||||
@@ -571,7 +603,7 @@ object K: TK
|
||||
'Brass Dragon|7|pole'
|
||||
'Tin Dragon|8|*'
|
||||
'Bronze Dragon|9|medal'
|
||||
'Chromatic Dragon|16|mineral water'
|
||||
'Chromatic Dragon|16|scale'
|
||||
'Copper Dragon|8|loafer'
|
||||
'Gold Dragon|8|filling'
|
||||
'Green Dragon|8|*'
|
||||
@@ -632,7 +664,7 @@ object K: TK
|
||||
'Hippocampus|4|mane'
|
||||
'Hippogriff|3|egg'
|
||||
'Hobgoblin|1|patella'
|
||||
'Homonculus|2|fluid'
|
||||
'Homunculus|2|fluid'
|
||||
'Hydra|8|gyrum'
|
||||
'Imp|2|tail'
|
||||
'Invisible Stalker|8|*'
|
||||
@@ -734,7 +766,8 @@ object K: TK
|
||||
'Uruk|2|boot'
|
||||
'Poroid|4|node'
|
||||
'Moakum|8|frenum'
|
||||
'Fly|0|*')
|
||||
'Fly|0|*'
|
||||
'Hogbird|3|curl')
|
||||
TabOrder = 10
|
||||
WordWrap = False
|
||||
end
|
||||
@@ -804,4 +837,98 @@ object K: TK
|
||||
TabOrder = 13
|
||||
WordWrap = False
|
||||
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
|
||||
@@ -37,6 +37,14 @@ type
|
||||
Label13: TLabel;
|
||||
DefenseBad: TMemo;
|
||||
Label14: TLabel;
|
||||
Races: TMemo;
|
||||
Label15: TLabel;
|
||||
Label16: TLabel;
|
||||
Klasses: TMemo;
|
||||
Label17: TLabel;
|
||||
Titles: TMemo;
|
||||
ImpressiveTitles: TMemo;
|
||||
Label18: TLabel;
|
||||
end;
|
||||
|
||||
var
|
||||
|
||||
@@ -5,7 +5,7 @@ object FrontForm: TFrontForm
|
||||
BorderIcons = []
|
||||
BorderStyle = bsNone
|
||||
BorderWidth = 2
|
||||
ClientHeight = 251
|
||||
ClientHeight = 255
|
||||
ClientWidth = 452
|
||||
Color = clRed
|
||||
TransparentColorValue = clWhite
|
||||
@@ -93,19 +93,19 @@ object FrontForm: TFrontForm
|
||||
Left = 0
|
||||
Top = 0
|
||||
Width = 452
|
||||
Height = 251
|
||||
Height = 255
|
||||
Align = alClient
|
||||
BevelInner = bvLowered
|
||||
Color = clWhite
|
||||
TabOrder = 0
|
||||
object Label2: TLabel
|
||||
Left = 2
|
||||
Top = 236
|
||||
Top = 240
|
||||
Width = 448
|
||||
Height = 13
|
||||
Align = alBottom
|
||||
Alignment = taCenter
|
||||
Caption = #169' 2003 Eric Fredricksen - v6.2'
|
||||
Caption = #169' 2002-2022 Eric Fredricksen - v6.4.4'
|
||||
Color = clWhite
|
||||
Font.Charset = DEFAULT_CHARSET
|
||||
Font.Color = 11382189
|
||||
@@ -184,7 +184,7 @@ object FrontForm: TFrontForm
|
||||
Left = 2
|
||||
Top = 2
|
||||
Width = 251
|
||||
Height = 234
|
||||
Height = 238
|
||||
Align = alLeft
|
||||
BevelOuter = bvNone
|
||||
BorderWidth = 10
|
||||
|
||||
@@ -23,10 +23,6 @@ type
|
||||
Label1: TLabel;
|
||||
procedure HomeLinkClick(Sender: TObject);
|
||||
procedure LogoClick(Sender: TObject);
|
||||
private
|
||||
{ Private declarations }
|
||||
public
|
||||
{ Public declarations }
|
||||
end;
|
||||
|
||||
var
|
||||
@@ -40,12 +36,12 @@ uses ShellAPI, Main, Info;
|
||||
|
||||
procedure TFrontForm.HomeLinkClick(Sender: TObject);
|
||||
begin
|
||||
ShellExecute(GetDesktopWindow(), 'open', 'http://progressquest.com/', nil, '', SW_SHOW);
|
||||
ShellExecute(GetDesktopWindow(), 'open', 'http://progressquest.com/', nil, '', SW_SHOW);
|
||||
end;
|
||||
|
||||
procedure TFrontForm.LogoClick(Sender: TObject);
|
||||
begin
|
||||
ShellExecute(GetDesktopWindow(), 'open', 'http://progressquest.com/', nil, '', SW_SHOW);
|
||||
ShellExecute(GetDesktopWindow(), 'open', 'http://progressquest.com/', nil, '', SW_SHOW);
|
||||
end;
|
||||
|
||||
end.
|
||||
+4
-4
@@ -13,9 +13,9 @@
|
||||
{* BinaryData: Boolean - This setting specifies which type }
|
||||
{* of data will taken from the web. }
|
||||
{* If you set this property TRUE then }
|
||||
{* component will determinee the size }
|
||||
{* of files *before* getting them from }
|
||||
{* the web. }
|
||||
{* component will determine the size of}
|
||||
{* files *before* getting them from the}
|
||||
{* web. }
|
||||
{* If this property is FALSE then as we}
|
||||
{* do not knows the file size the }
|
||||
{* OnProgress event will doesn't work. }
|
||||
@@ -46,7 +46,7 @@
|
||||
{ EVENTS: }
|
||||
{ OnDoneFile - Occurs when the file is downloaded }
|
||||
{ OnDoneString - Occurs when the string is received }
|
||||
{ OnError - Occurs when error happend }
|
||||
{ OnError - Occurs when error happens }
|
||||
{ OnProgress - Occurs at the receiving of the BINARY DATA }
|
||||
{*************************************************************}
|
||||
{ Please see demo program for more information. }
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
object MainForm: TMainForm
|
||||
Left = 281
|
||||
Top = 121
|
||||
Left = 238
|
||||
Top = 148
|
||||
Width = 682
|
||||
Height = 569
|
||||
Height = 513
|
||||
HorzScrollBar.Visible = False
|
||||
VertScrollBar.Visible = False
|
||||
Caption = 'Progress Quest'
|
||||
@@ -96,7 +96,7 @@ object MainForm: TMainForm
|
||||
Left = 0
|
||||
Top = 0
|
||||
Width = 200
|
||||
Height = 507
|
||||
Height = 444
|
||||
Align = alLeft
|
||||
TabOrder = 0
|
||||
object Label1: TLabel
|
||||
@@ -214,7 +214,7 @@ object MainForm: TMainForm
|
||||
Left = 1
|
||||
Top = 271
|
||||
Width = 198
|
||||
Height = 203
|
||||
Height = 140
|
||||
Align = alClient
|
||||
Columns = <
|
||||
item
|
||||
@@ -236,7 +236,7 @@ object MainForm: TMainForm
|
||||
end
|
||||
object Cheats: TPanel
|
||||
Left = 1
|
||||
Top = 474
|
||||
Top = 411
|
||||
Width = 198
|
||||
Height = 32
|
||||
Align = alBottom
|
||||
@@ -293,7 +293,7 @@ object MainForm: TMainForm
|
||||
Left = 474
|
||||
Top = 0
|
||||
Width = 200
|
||||
Height = 507
|
||||
Height = 444
|
||||
Align = alRight
|
||||
TabOrder = 1
|
||||
object Label3: TLabel
|
||||
@@ -326,7 +326,7 @@ object MainForm: TMainForm
|
||||
end
|
||||
object QuestBar: TProgressBar
|
||||
Left = 1
|
||||
Top = 490
|
||||
Top = 427
|
||||
Width = 198
|
||||
Height = 16
|
||||
Align = alBottom
|
||||
@@ -377,7 +377,7 @@ object MainForm: TMainForm
|
||||
Left = 1
|
||||
Top = 190
|
||||
Width = 198
|
||||
Height = 300
|
||||
Height = 237
|
||||
Align = alClient
|
||||
Columns = <
|
||||
item
|
||||
@@ -401,7 +401,7 @@ object MainForm: TMainForm
|
||||
Left = 200
|
||||
Top = 0
|
||||
Width = 274
|
||||
Height = 507
|
||||
Height = 444
|
||||
Align = alClient
|
||||
TabOrder = 2
|
||||
object InventoryLabelAlsoGameStyle: TLabel
|
||||
@@ -420,7 +420,7 @@ object MainForm: TMainForm
|
||||
end
|
||||
object Label7: TLabel
|
||||
Left = 1
|
||||
Top = 477
|
||||
Top = 414
|
||||
Width = 272
|
||||
Height = 13
|
||||
Align = alBottom
|
||||
@@ -450,7 +450,7 @@ object MainForm: TMainForm
|
||||
Left = 1
|
||||
Top = 189
|
||||
Width = 272
|
||||
Height = 288
|
||||
Height = 225
|
||||
Align = alClient
|
||||
Columns = <
|
||||
item
|
||||
@@ -473,7 +473,7 @@ object MainForm: TMainForm
|
||||
end
|
||||
object EncumBar: TProgressBar
|
||||
Left = 1
|
||||
Top = 490
|
||||
Top = 427
|
||||
Width = 272
|
||||
Height = 16
|
||||
Align = alBottom
|
||||
@@ -562,7 +562,7 @@ object MainForm: TMainForm
|
||||
end
|
||||
object Panel4: TPanel
|
||||
Left = 0
|
||||
Top = 507
|
||||
Top = 444
|
||||
Width = 674
|
||||
Height = 35
|
||||
Align = alBottom
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
unit Main;
|
||||
{ copyright (c)2002 Eric Fredricksen all rights reserved }
|
||||
{ copyright (c)2022 Eric Fredricksen all rights reserved }
|
||||
|
||||
{$UNDEF CHEATS}
|
||||
{$UNDEF LOGGING}
|
||||
{$UNDEF TURBO}
|
||||
|
||||
interface
|
||||
|
||||
@@ -12,11 +13,15 @@ uses
|
||||
|
||||
const
|
||||
// revs:
|
||||
// 8: pq 6.4.1
|
||||
// 7: pq 6.4
|
||||
// 6: pq-web
|
||||
// 5: pq 6.3 (no official release)
|
||||
// 4: pq 6.2
|
||||
// 3: pq 6.1
|
||||
// 2: pq 6.0
|
||||
// 1: pq 6.0, some early release I guess; don't remember
|
||||
RevString = '&rev=4';
|
||||
RevString = '&rev=8';
|
||||
wmIconTray = WM_USER + Ord('t');
|
||||
kFileExt = '.pq';
|
||||
|
||||
@@ -104,6 +109,9 @@ type
|
||||
{$ENDIF}
|
||||
procedure ExportCharSheet;
|
||||
function CharSheet: String;
|
||||
procedure InterplotCinematic;
|
||||
function NamedMonster(level: Integer): String;
|
||||
function ImpressiveGuy: String;
|
||||
public
|
||||
FTrayIcon: TNotifyIconData;
|
||||
FReportSave: Boolean;
|
||||
@@ -145,7 +153,8 @@ type
|
||||
var
|
||||
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);
|
||||
|
||||
@@ -194,15 +203,21 @@ var
|
||||
kOpenCommand: String;
|
||||
begin
|
||||
kOpenCommand := '"' + Application.ExeName + '" "%1"';
|
||||
RegWrite(HKEY_CLASSES_ROOT, kFileExt,'', kPQFileType);
|
||||
RegWrite(HKEY_CLASSES_ROOT, kPQFileType, '', 'Progresss Quest saved game');
|
||||
RegWrite(HKEY_CLASSES_ROOT, kPQFileType + '\DefaultIcon', '', Application.ExeName + ',0');
|
||||
RegWrite(HKEY_CLASSES_ROOT, kPQFileType + '\Shell\Open', '', '&Open');
|
||||
if RegRead(HKEY_CLASSES_ROOT, kPQFileType + '\Shell\Open\Command', '') <> kOpenCommand then begin
|
||||
RegWrite(HKEY_CLASSES_ROOT, kPQFileType + '\Shell\Open\Command', '', kOpenCommand);
|
||||
// Notify Windows Explorer to realize we added this. In case this is slow
|
||||
// I don't do this unless I'm sure this one has changed.
|
||||
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);
|
||||
try
|
||||
RegWrite(HKEY_CLASSES_ROOT, kFileExt,'', kPQFileType);
|
||||
RegWrite(HKEY_CLASSES_ROOT, kPQFileType, '', 'Progresss Quest saved game');
|
||||
RegWrite(HKEY_CLASSES_ROOT, kPQFileType + '\DefaultIcon', '', Application.ExeName + ',0');
|
||||
RegWrite(HKEY_CLASSES_ROOT, kPQFileType + '\Shell\Open', '', '&Open');
|
||||
if RegRead(HKEY_CLASSES_ROOT, kPQFileType + '\Shell\Open\Command', '') <> kOpenCommand then begin
|
||||
RegWrite(HKEY_CLASSES_ROOT, kPQFileType + '\Shell\Open\Command', '', kOpenCommand);
|
||||
// Notify Windows Explorer to realize we added this. In case this is slow
|
||||
// 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;
|
||||
|
||||
@@ -322,6 +337,11 @@ begin
|
||||
Result := Min(Random(below),Random(below));
|
||||
end;
|
||||
|
||||
function PickLow(s: TStrings): String;
|
||||
begin
|
||||
Result := s[RandomLow(s.Count)];
|
||||
end;
|
||||
|
||||
function Ends(s,e: String): Boolean;
|
||||
begin
|
||||
Result := Copy(s,1+Length(s)-Length(e),Length(e)) = e;
|
||||
@@ -342,20 +362,25 @@ begin
|
||||
else Result := s + 's';
|
||||
end;
|
||||
|
||||
function Split(s: String; field: Integer): String;
|
||||
function Split(s: String; field: Integer; separator: String): String;
|
||||
var
|
||||
p: Integer;
|
||||
begin
|
||||
while field > 0 do begin
|
||||
p := Pos('|',s);
|
||||
p := Pos(separator,s);
|
||||
s := Copy(s,p+1,10000);
|
||||
Dec(field);
|
||||
end;
|
||||
if Pos('|',s) > 0
|
||||
then Result := Copy(s,1,Pos('|',s)-1)
|
||||
if Pos(separator,s) > 0
|
||||
then Result := Copy(s,1,Pos(separator,s)-1)
|
||||
else Result := s;
|
||||
end;
|
||||
|
||||
function Split(s: String; field: Integer): String;
|
||||
begin
|
||||
result := Split(s, field, '|');
|
||||
end;
|
||||
|
||||
function Indefinite(s: String; qty: Integer): String;
|
||||
begin
|
||||
if qty = 1 then begin
|
||||
@@ -428,11 +453,80 @@ begin
|
||||
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;
|
||||
var
|
||||
qty, lev, i: Integer;
|
||||
monster, m1: string;
|
||||
definite: Boolean;
|
||||
begin
|
||||
definite := false;
|
||||
for i := level downto 1 do begin
|
||||
if Odds(2,5) then
|
||||
Inc(level, RandSign());
|
||||
@@ -442,7 +536,13 @@ begin
|
||||
|
||||
if Odds(1,25) then begin
|
||||
// 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;
|
||||
monster := monster + '|' + IntToStr(level) + '|*';
|
||||
end else if (fQuest.Caption <> '') and Odds(1,4) then begin
|
||||
@@ -501,7 +601,7 @@ begin
|
||||
lev := level;
|
||||
level := lev * qty;
|
||||
|
||||
Result := Indefinite(Result, qty);
|
||||
if not definite then Result := Indefinite(Result, qty);
|
||||
end;
|
||||
|
||||
function ProperCase(s:String):String;
|
||||
@@ -554,7 +654,11 @@ begin
|
||||
a := Split(fQueue.Items[0],0);
|
||||
n := StrToInt(Split(fQueue.Items[0],1));
|
||||
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);
|
||||
fQueue.Items.Delete(0);
|
||||
end else begin
|
||||
@@ -619,17 +723,19 @@ begin
|
||||
if SubItems.Count < 1
|
||||
then SubItems.Add(value)
|
||||
else SubItems[0] := value;
|
||||
|
||||
Selected := true;
|
||||
MakeVisible(false);
|
||||
end;
|
||||
//list.MultiSelect := true;
|
||||
//list.RowSelect := true;
|
||||
//list.HideSelection := false;
|
||||
list.Items[pos].Selected := true;
|
||||
end;
|
||||
|
||||
function LevelUpTime(level: Integer): Integer;
|
||||
function LevelUpTime(level: Integer): Integer; // seconds
|
||||
begin
|
||||
// ~20 minutes for level 1, eventually dominated by exponential
|
||||
Result := Round((20.0 + IntPower(1.15,level)) * 60.0);
|
||||
// ~20 minutes for level 1, eventually dominated by exponential
|
||||
Result := Round((20.0 + IntPower(1.15,level)) * 60.0);
|
||||
end;
|
||||
|
||||
procedure TMainForm.GoButtonClick(Sender: TObject);
|
||||
@@ -639,16 +745,16 @@ begin
|
||||
Max := LevelUpTime(1);
|
||||
end;
|
||||
|
||||
fTask.Caption := '';
|
||||
fTask.Caption := 'load';
|
||||
fQuest.Caption := '';
|
||||
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|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|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;
|
||||
with Plots.Items.Add do begin
|
||||
@@ -725,20 +831,53 @@ end;
|
||||
|
||||
procedure TMainForm.WinStat;
|
||||
var
|
||||
i,t: Integer;
|
||||
function Square(x: Integer): Integer; begin Result := x * x; end;
|
||||
i: Integer;
|
||||
t: Int64;
|
||||
function Square(x: Int64): Int64; begin Result := x * x; end;
|
||||
|
||||
function Random64: Int64; overload;
|
||||
begin
|
||||
Int64Rec(Result).Hi := Random($3FFFFFFF);
|
||||
Int64Rec(Result).Lo := Random($FFFFFFFF);
|
||||
end;
|
||||
|
||||
function Random64(below: Int64): Int64; overload;
|
||||
begin
|
||||
Result := Random64 mod below;
|
||||
end;
|
||||
|
||||
{
|
||||
procedure TestRandom;
|
||||
var
|
||||
i, b: Integer;
|
||||
c: Integer;
|
||||
v: Int64;
|
||||
begin
|
||||
for b := 0 to 63 do begin
|
||||
c := 0;
|
||||
for i := 1 to 1000 do begin
|
||||
v := Random64($0fffffffffffffff);
|
||||
if ((v shr b) and 1) = 1 then Inc(c);
|
||||
end;
|
||||
OutputDebugString(PChar(IntToStr(b) + ' ' + IntToStr(c) + '\n'));
|
||||
end
|
||||
end;
|
||||
}
|
||||
|
||||
begin
|
||||
// TestRandom;
|
||||
|
||||
if Odds(1,2)
|
||||
then i := Random(Stats.Items.Count)
|
||||
else begin
|
||||
// favor the best stat so it will tend to clump
|
||||
// Favor the best stats so they will tend to clump
|
||||
t := 0;
|
||||
for i := 0 to 5 do Inc(t,Square(GetI(Stats,i)));
|
||||
t := Random(t);
|
||||
for i := 0 to 5 do Inc(t, Square(GetI(Stats,i)));
|
||||
t := Random64(t);
|
||||
i := -1;
|
||||
while t >= 0 do begin
|
||||
Inc(i);
|
||||
Dec(t,Square(GetI(Stats,i)));
|
||||
Dec(t, Square(GetI(Stats,i)));
|
||||
end;
|
||||
end;
|
||||
Add(Stats, Stats.Items[i].Caption, 1);
|
||||
@@ -763,7 +902,9 @@ end;
|
||||
|
||||
procedure TMainForm.WinItem;
|
||||
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;
|
||||
|
||||
procedure TMainForm.CompleteQuest;
|
||||
@@ -866,8 +1007,14 @@ begin
|
||||
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;
|
||||
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 ;
|
||||
Rome(n, 900, Result, 'CM');
|
||||
Rome(n, 500, Result, 'D');
|
||||
@@ -886,6 +1033,10 @@ end;
|
||||
function RomanToInt(n: String): Integer;
|
||||
begin
|
||||
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 ;
|
||||
UnRome(n, 900, Result, 'CM');
|
||||
UnRome(n, 500, Result, 'D');
|
||||
@@ -914,11 +1065,14 @@ begin
|
||||
StateIndex := 0;
|
||||
Width := Width-1;
|
||||
end;
|
||||
if Items.Count > 2 then WinItem;
|
||||
if Items.Count > 3 then WinEquip;
|
||||
end;
|
||||
SaveGame;
|
||||
Brag('a');
|
||||
end;
|
||||
|
||||
|
||||
{$IFDEF LOGGING}
|
||||
procedure TMainForm.Log(line: String);
|
||||
var
|
||||
@@ -979,7 +1133,7 @@ begin
|
||||
WrLn( Format(' CHA%7d MP Max%7d', [GetI(Stats,'CHA'), GetI(Stats,'MP Max')]));
|
||||
WrLn;
|
||||
WrLn( 'Equipment:');
|
||||
for i := 1 to Equips.Items.Count-1 do
|
||||
for i := 0 to Equips.Items.Count-1 do
|
||||
if Get(Equips,i) <> '' then
|
||||
WrLn( ' ' + LeftStr(Equips.Items[i].Caption + ' ', 12) + Get(Equips,i));
|
||||
WrLn;
|
||||
@@ -997,7 +1151,7 @@ begin
|
||||
else WrLn( ' ' + Indefinite(Items[i].Caption, GetI(Inventory,i)));
|
||||
WrLn;
|
||||
WrLn( '-- ' + DateTimeToStr(Now));
|
||||
WrLn( '-- Progress Quest 6.2 - http://progressquest.com/');
|
||||
WrLn( '-- Progress Quest 6.4 - http://progressquest.com/');
|
||||
Result := f;
|
||||
end;
|
||||
|
||||
@@ -1123,16 +1277,19 @@ var
|
||||
begin
|
||||
gain := Pos('kill|',fTask.Caption) = 1;
|
||||
with TaskBar do begin
|
||||
{$IFDEF TURBO}
|
||||
Position := Max;
|
||||
{$ENDIF}
|
||||
if Position >= Max then begin
|
||||
ClearAllSelections;
|
||||
|
||||
if Kill.SimpleText = 'Loading....' then Max := 0;
|
||||
|
||||
// gain XP / level up
|
||||
if gain then with ExpBar do if Position >= Max
|
||||
then LevelUp
|
||||
else Position := Position + TaskBar.Max div 1000;
|
||||
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
|
||||
CompleteQuest;
|
||||
end else if Quests.Items.Count > 0 then begin
|
||||
@@ -1140,9 +1297,11 @@ begin
|
||||
Hint := IntToStr(100 * Position div Max) + '% complete';
|
||||
end;
|
||||
|
||||
with PlotBar do if Position >= Max
|
||||
then CompleteAct
|
||||
else Position := Position + TaskBar.Max div 1000;
|
||||
// advance plot
|
||||
if (PlotBar.Position >= PlotBar.Max) and gain
|
||||
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));
|
||||
PlotBar.Hint := RoughTime(PlotBar.Max-PlotBar.Position) + ' remaining';
|
||||
@@ -1153,7 +1312,7 @@ begin
|
||||
elapsed := LongInt(timeGetTime) - LongInt(Timer1.Tag);
|
||||
if elapsed > 100 then elapsed := 100;
|
||||
if elapsed < 0 then elapsed := 0;
|
||||
Position := Position + elapsed;//Integer(Timer1.Interval);
|
||||
Position := Position + elapsed;
|
||||
end;
|
||||
end;
|
||||
Timer1.Tag := timeGetTime;
|
||||
@@ -1173,7 +1332,7 @@ begin
|
||||
FMinToTray := true;
|
||||
FExportSheets := false;
|
||||
|
||||
MakeFileAssociations;
|
||||
if Win32MajorVersion < 6 then MakeFileAssociations;
|
||||
end;
|
||||
|
||||
procedure TMainForm.SpeedButton1Click(Sender: TObject);
|
||||
@@ -1395,10 +1554,6 @@ begin
|
||||
f.Free;
|
||||
except
|
||||
on EZCompressionError do begin
|
||||
// backwards-compatibility
|
||||
//m.Free;
|
||||
//m := f;
|
||||
//f := nil;
|
||||
ShowMessage('Error loading game.');
|
||||
Close;
|
||||
Exit;
|
||||
@@ -1411,6 +1566,13 @@ begin
|
||||
for i := 0 to ComponentCount-1 do
|
||||
m.ReadComponent(Components[i]);
|
||||
m.Free;
|
||||
// Patch old misspellings found in save
|
||||
with Spells do for i := 1 to Items.Count-1 do begin
|
||||
if Items[i].Caption = 'Tonsilectomy' then
|
||||
Items[i].Caption := 'Tonsillectomy';
|
||||
if Items[i].Caption = 'Innoculate' then
|
||||
Items[i].Caption := 'Inoculate';
|
||||
end;
|
||||
{$IFDEF LOGGING}
|
||||
Log('Loaded game: ' + name);
|
||||
{$ENDIF}
|
||||
@@ -1476,7 +1638,7 @@ begin
|
||||
Navigate(GetHostAddr + 'name=' + UrlEncode(Get(Traits,'Name')));
|
||||
end;
|
||||
if (ssCtrl in Shift) and (Key = ord('G')) then begin
|
||||
SetGuild(InputBox('Progress Quest', 'Choose a guild.'#13#13'Make sure you undestand the guild rules before you join one. To learn more about guilds, visit http://progressquest.com/guilds.php', GetGuild));
|
||||
SetGuild(InputBox('Progress Quest', 'Choose a guild.'#13#13'Make sure you understand the guild rules before you join one. To learn more about guilds, visit http://progressquest.com/guilds.php', GetGuild));
|
||||
Guildify;
|
||||
end;
|
||||
end;
|
||||
@@ -1508,6 +1670,12 @@ var
|
||||
const
|
||||
flat = 1;
|
||||
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
|
||||
ExportCharSheet;
|
||||
if GetPasskey = 0 then Exit; // not a online game!
|
||||
@@ -1549,7 +1717,7 @@ end;
|
||||
function TMainForm.AuthenticateUrl(url: String): String;
|
||||
begin
|
||||
if (GetLogin <> '') or (GetPassword <> '') then
|
||||
Result := StuffString(url, 8, 0, GetLogin+':'+GetPassword+'@')
|
||||
Result := StuffString(url, 8, 0, UrlEncode(GetLogin)+':'+UrlEncode(GetPassword)+'@')
|
||||
else
|
||||
Result := url;
|
||||
end;
|
||||
|
||||
BIN
Binary file not shown.
BIN
Binary file not shown.
+7
-6
@@ -1,6 +1,6 @@
|
||||
object NewGuyForm: TNewGuyForm
|
||||
Left = 203
|
||||
Top = 146
|
||||
Left = 474
|
||||
Top = 177
|
||||
BorderIcons = []
|
||||
BorderStyle = bsDialog
|
||||
Caption = 'Progress Quest - New Character'
|
||||
@@ -86,6 +86,7 @@ object NewGuyForm: TNewGuyForm
|
||||
OldCreateOrder = False
|
||||
Position = poScreenCenter
|
||||
OnActivate = FormActivate
|
||||
OnCreate = FormCreate
|
||||
OnShow = FormShow
|
||||
PixelsPerInch = 96
|
||||
TextHeight = 13
|
||||
@@ -100,10 +101,10 @@ object NewGuyForm: TNewGuyForm
|
||||
'Half Man'
|
||||
'Half Halfling'
|
||||
'Double Hobbit'
|
||||
'Gobhobbit'
|
||||
'Low Elf'
|
||||
'Dung Elf'
|
||||
'Talking Pony'
|
||||
'Greater Gnome'
|
||||
'Gyrognome'
|
||||
'Lesser Dwarf'
|
||||
'Crested Dwarf'
|
||||
@@ -136,14 +137,14 @@ object NewGuyForm: TNewGuyForm
|
||||
'Fighter/Organist'
|
||||
'Puma Burgular'
|
||||
'Runeloremaster'
|
||||
'Tongueblade'
|
||||
'Hunter Strangler'
|
||||
'Battle-Felon'
|
||||
'Tickle-Mimic'
|
||||
'Slow Poisoner'
|
||||
'Bastard Lunatic'
|
||||
'Lowling'
|
||||
'Birdrider')
|
||||
'Jungle Clown'
|
||||
'Birdrider'
|
||||
'Vermineer')
|
||||
TabOrder = 1
|
||||
end
|
||||
object GroupBox1: TGroupBox
|
||||
|
||||
+18
-4
@@ -44,6 +44,7 @@ type
|
||||
procedure ApplicationEvents1Minimize(Sender: TObject);
|
||||
procedure GenClick(Sender: TObject);
|
||||
procedure FormActivate(Sender: TObject);
|
||||
procedure FormCreate(Sender: TObject);
|
||||
private
|
||||
procedure RollEm;
|
||||
function GetAccount: String;
|
||||
@@ -57,10 +58,11 @@ var
|
||||
NewGuyForm: TNewGuyForm;
|
||||
|
||||
function UrlEncode(s: string): string;
|
||||
function GenerateName: string;
|
||||
|
||||
implementation
|
||||
|
||||
uses Main, SelServ, StrUtils, Web;
|
||||
uses Main, SelServ, StrUtils, Web, Config;
|
||||
|
||||
{$R *.dfm}
|
||||
|
||||
@@ -182,15 +184,15 @@ begin
|
||||
else url := 'http://www.progressquest.com/create.php?';
|
||||
// url := StringReplace(url, '.com/', '.com/dev/', []);
|
||||
if (GetAccount <> '') or (GetPassword <> '') then
|
||||
url := StuffString(url, 8, 0, GetAccount+':'+GetPassword+'@');
|
||||
url := StuffString(url, 8, 0, UrlEncode(GetAccount)+':'+UrlEncode(GetPassword)+'@');
|
||||
args := 'cmd=create' +
|
||||
'&name=' + UrlEncode(Name.Text) +
|
||||
'&realm=' + UrlEncode(MainForm.GetHostName) +
|
||||
RevString;
|
||||
ParseSoldResponse(DownloadString(url + args));
|
||||
except
|
||||
on EWebError do begin
|
||||
ShowMessage('Error connecting to server');
|
||||
on E: EWebError do begin
|
||||
ShowMessage('Error connecting to server')//: ' + StringReplace(E.Message, '&', '&&', [rfReplaceAll]));
|
||||
end;
|
||||
end;
|
||||
finally
|
||||
@@ -250,4 +252,16 @@ begin
|
||||
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.
|
||||
@@ -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.)
|
||||
@@ -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 revision numbers vs. versions:
|
||||
|
||||
* r321 v6.3 as I found it after a couple of 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
Binary file not shown.
BIN
Binary file not shown.
@@ -51,7 +51,7 @@ begin
|
||||
Result := '';
|
||||
conntype := INTERNET_OPEN_TYPE_DIRECT;
|
||||
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
|
||||
begin {
|
||||
if Len(username + password) > 0 then
|
||||
|
||||
+777
@@ -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 nasty 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.
|
||||
@@ -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
|
||||
Vendored
+14
-14
@@ -12,7 +12,7 @@ The ancient reckoning held that the Five Skrelkampi (and their Truebine) would
|
||||
return when the great Trond-feast could be held anew and the Belnap reunited.
|
||||
But this legend became lost to all but the Papperboxen at Horbug.
|
||||
One of their own was Yallow the Speldrig, who found an unlikely pupil in
|
||||
Torbole Understeady, the discarded illigitimate waif of Wainthane Topknox,
|
||||
Torbole Understeady, the discarded illegitimate waif of Wainthane Topknox,
|
||||
whom Yallow renamed Grumdrig and began to school as a boar-pulmet's apprentice. ...And, as it
|
||||
was said by some, in aberdoxy.
|
||||
<p>
|
||||
@@ -20,13 +20,13 @@ As our story opens young Grumdrig has returned to Horbug following a trying stin
|
||||
Spilwaer Spond where his laconic disposition and fertile mind bred a series
|
||||
of misadventures which had landed him outside the good graces of the Jordref there,
|
||||
Welham, who had secretly begun a long term course of slow but
|
||||
disaccomodating illpeel in the lad's morning fanwael.
|
||||
disaccommodating illpeel in the lad's morning fanwael.
|
||||
Meanwhile, though scarce a tuft of <i>mansefur</i> had yet made its appearance
|
||||
on the boy's <i>manssach</i>, a number of visiting Roilwachhs have begun to
|
||||
exhibit a discreet
|
||||
and seemingly inexplicable interest in the boy. Strange indeed, as he would not reach
|
||||
his krouchensterm for another harvest or more.
|
||||
And when Grumdrig's resiliant compatriot Paedri
|
||||
And when Grumdrig's resilient compatriot Paedri
|
||||
appears at Grumdrig's lochnotat with a Scrolstamp from the old Speldrig,
|
||||
a woozy foreboding feeling rises from his young gut...
|
||||
|
||||
@@ -48,40 +48,40 @@ and other frustrations common to that older generation of RPG's.
|
||||
<h3> User manual </h3>
|
||||
|
||||
Even inexperienced gamers will find <b>Progress Quest</b>
|
||||
remarkably intutive and simple to play. Start the program
|
||||
remarkably intuitive and simple to play. Start the program
|
||||
and click the <code>New Game (Single Player)</code> button,
|
||||
or click <code>New Game (Multiplayer)</code> and select a Realm to
|
||||
compete against players from all over the world.
|
||||
You will then be presented with the character creation screen.
|
||||
|
||||
Select a name, race and class for the new character. Then, use the <code>Roll</code> button
|
||||
until you are statisfied with the stats
|
||||
until you are satisfied with the stats
|
||||
for your character. <i>Tip: You can use the <code>Unroll</code> button (a feature exclusive to <b>Progress Quest</b>)
|
||||
to go back to any previous roll if you find that you've
|
||||
clicked too hastily.</i>
|
||||
<p>
|
||||
If you choose to play an online game, your character will share adventures with other <b>Progress
|
||||
Quest</b> characters in an online virtual world. Online play requires
|
||||
internet connectivity, though sophisiticated algorithms
|
||||
internet connectivity, though sophisticated algorithms
|
||||
keep the bandwidth usage to a minimum. You can compare your character against
|
||||
the top <b>Progress Quest</b> players by visiting
|
||||
<a href=http://progressquest.com/realms.php>http://progressquest.com/realms.php</a>
|
||||
(or hit <Ctrl>-<B> from within the game).
|
||||
<p>
|
||||
Finally, hit the <code>Sold!</code> button to begin the game. The game will start immediately and
|
||||
Finally, hit the <code>Sold!</code> button to begin the game. The game will start immediately, and
|
||||
you can safely familiarize yourself with the game's single interface screen as the game progresses
|
||||
on its own.
|
||||
Soon your avatar will will be seeking and destroying an exotic panopoly of beasts while you
|
||||
Soon your avatar will be seeking and destroying an exotic panoply of beasts while you
|
||||
gaze proudly on. Missing, you will notice, is the tedious march from town, the bewildering maze of cookie cutter
|
||||
streets hiding some specific merchant or NPC,
|
||||
and the repetetive hunt for just the right beast to execute. <b>Progress Quest</b> supplies
|
||||
and the repetitive hunt for just the right beast to execute. <b>Progress Quest</b> supplies
|
||||
your character with an endless series of victims, as well as exciting quests which keep your quest
|
||||
log full to the brim at all times.
|
||||
<p>
|
||||
TREASURE: Each slain creature yields a trophy, which can be sold in any town.
|
||||
When the encumbrance bar reaches maximum, your character automatically returns to the nearest town
|
||||
to sell your loot. If sufficiently liquid, he may then purchase an upgrade in equpiment (weapon or armor).
|
||||
That being done, the interpid adventurer then returns to the frontier to spill more blood.
|
||||
to sell your loot. If sufficiently liquid, he may then purchase an upgrade in equipment (weapon or armor).
|
||||
That being done, the intrepid adventurer then returns to the frontier to spill more blood.
|
||||
<i>Tip: The amount your character can carry before his encumbrance bar fills up
|
||||
increases as his STR stat improves.</i>
|
||||
<p>
|
||||
@@ -121,9 +121,9 @@ running</i>. Your character will make <i>no</i> progress once you quit the prog
|
||||
|
||||
<h3> Keyboard quick reference </h3>
|
||||
|
||||
<table border=1 cellspacing=5><th>Key</th><th>Description</tr>
|
||||
<tr><td>Alt-F4<td>Exit <b>Progress Quest</b></table>
|
||||
<table border=1 cellspacing=5><tr><th>Key</th><th>Description</th></tr>
|
||||
<tr><td>Alt-F4</td><td>Exit <b>Progress Quest</b></td></tr></table>
|
||||
|
||||
<p>
|
||||
<small>©:Copyright 2003
|
||||
<small>©:Copyright 2022
|
||||
<a href=mailto:grumdrig@progressquest.com>grumdrig@progressquest.com</a>
|
||||
Vendored
+22
@@ -0,0 +1,22 @@
|
||||
Reminder: How I publish a new version
|
||||
-------------------------------------
|
||||
|
||||
$ cd pq/dist
|
||||
$ cp ../pq.exe .
|
||||
$ zip pq6-MAJOR-MINOR pq.exe README.html license.txt
|
||||
$ md5 pq6-MAJOR-MINOR.zip
|
||||
$ shasum pq6-MAJOR-MINOR.zip
|
||||
$ du -h pq6-MAJOR-MINOR.zip
|
||||
$ git add pq6-MAJOR_MINOR.zip
|
||||
$ git commit -am "new version!"
|
||||
$ scp pq6-MAJOR-MINOR.zip progressquest.com:www/progressquest.com/dl/
|
||||
$ ssh progressquest.com
|
||||
$ cd www/progressquest.com
|
||||
$ nano dl.php
|
||||
[copypasta in the new version and checksums and size]
|
||||
$ nano releasenotes.php
|
||||
[type in the changes]
|
||||
$ cd dl
|
||||
$ git add pq6-MAJOR-MINOR.zip
|
||||
$ git commit -am "New version published!"
|
||||
$ did Released PQ version 6-MAJOR-MINOR
|
||||
Vendored
+2
-2
@@ -1,5 +1,5 @@
|
||||
Progress Quest version 6.2
|
||||
Copyright (c) 2003 Eric Fredricksen
|
||||
Progress Quest version 6.4
|
||||
Copyright (c) 2022 Eric Fredricksen
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
||||
Vendored
BIN
Binary file not shown.
Vendored
BIN
Binary file not shown.
Vendored
BIN
Binary file not shown.
Vendored
BIN
Binary file not shown.
Vendored
BIN
Binary file not shown.
Vendored
BIN
Binary file not shown.
@@ -31,5 +31,5 @@
|
||||
-M
|
||||
-$M16384,1048576
|
||||
-K$00400000
|
||||
-LE"c:\appl\delphi6\Projects\Bpl"
|
||||
-LN"c:\appl\delphi6\Projects\Bpl"
|
||||
-LE"c:\program files\borland\delphi6\Projects\Bpl"
|
||||
-LN"c:\program files\borland\delphi6\Projects\Bpl"
|
||||
@@ -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.
@@ -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/
|
||||
@@ -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.
@@ -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.
Binary file not shown.
Reference in new issue
Block a user