mirror of
https://bitbucket.org/grumdrig/pq.git
synced 2026-09-30 01:01:00 -06:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
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.
+135
-7
@@ -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
|
||||
@@ -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
|
||||
@@ -124,6 +152,7 @@ object K: TK
|
||||
'Sadness'
|
||||
'Seasick'
|
||||
'Gyp'
|
||||
'Shoelaces'
|
||||
'Innoculate'
|
||||
'Cone of Annoyance'
|
||||
'Magnetic Orb'
|
||||
@@ -133,6 +162,7 @@ object K: TK
|
||||
'Spectral Miasma'
|
||||
'Clever Fellow'
|
||||
'Lockjaw'
|
||||
'History Lesson'
|
||||
'Hydrophobia'
|
||||
'Big Sister'
|
||||
'Cone of Paste'
|
||||
@@ -289,6 +319,7 @@ object K: TK
|
||||
'Crankbow|6'
|
||||
'Blibo|7'
|
||||
'Broadsword|7'
|
||||
'Kreen|7'
|
||||
'Morning Star|8'
|
||||
'Pole-adze|8'
|
||||
'Spontoon|8'
|
||||
@@ -343,7 +374,8 @@ object K: TK
|
||||
'Bijou'
|
||||
'Spangle'
|
||||
'Gimcrack'
|
||||
'Hood')
|
||||
'Hood'
|
||||
'Vulpeculum')
|
||||
TabOrder = 6
|
||||
WordWrap = False
|
||||
end
|
||||
@@ -495,7 +527,8 @@ object K: TK
|
||||
'casket'
|
||||
'nosegay'
|
||||
'trinket'
|
||||
'credenza')
|
||||
'credenza'
|
||||
'writ')
|
||||
TabOrder = 9
|
||||
WordWrap = False
|
||||
end
|
||||
@@ -571,7 +604,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|*'
|
||||
@@ -734,7 +767,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 +838,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.2'
|
||||
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
|
||||
|
||||
@@ -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,6 +203,7 @@ var
|
||||
kOpenCommand: String;
|
||||
begin
|
||||
kOpenCommand := '"' + Application.ExeName + '" "%1"';
|
||||
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');
|
||||
@@ -204,6 +214,11 @@ begin
|
||||
// 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;
|
||||
|
||||
procedure TMainForm.MinimizeIt;
|
||||
@@ -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,14 +723,16 @@ 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);
|
||||
@@ -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
|
||||
@@ -735,12 +841,15 @@ begin
|
||||
t := 0;
|
||||
for i := 0 to 5 do Inc(t,Square(GetI(Stats,i)));
|
||||
t := Random(t);
|
||||
if t < 0 then i := Random(Stats.Items.Count)
|
||||
else begin
|
||||
i := -1;
|
||||
while t >= 0 do begin
|
||||
Inc(i);
|
||||
Dec(t,Square(GetI(Stats,i)));
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
Add(Stats, Stats.Items[i].Caption, 1);
|
||||
end;
|
||||
|
||||
@@ -763,7 +872,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 +977,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 +1003,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 +1035,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
|
||||
@@ -997,7 +1121,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 +1247,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 +1267,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 +1282,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 +1302,7 @@ begin
|
||||
FMinToTray := true;
|
||||
FExportSheets := false;
|
||||
|
||||
MakeFileAssociations;
|
||||
if Win32MajorVersion < 6 then MakeFileAssociations;
|
||||
end;
|
||||
|
||||
procedure TMainForm.SpeedButton1Click(Sender: TObject);
|
||||
@@ -1395,10 +1524,6 @@ begin
|
||||
f.Free;
|
||||
except
|
||||
on EZCompressionError do begin
|
||||
// backwards-compatibility
|
||||
//m.Free;
|
||||
//m := f;
|
||||
//f := nil;
|
||||
ShowMessage('Error loading game.');
|
||||
Close;
|
||||
Exit;
|
||||
@@ -1508,6 +1633,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 +1680,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 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
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 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.
|
||||
@@ -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
+1
-1
@@ -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>
|
||||
|
||||
<p>
|
||||
<small>©:Copyright 2003
|
||||
<small>©:Copyright 2022
|
||||
<a href=mailto:grumdrig@progressquest.com>grumdrig@progressquest.com</a>
|
||||
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.
@@ -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