Merge pull request #458 from NQNStudios:credits-overhaul

Auto-generated credits / Update the credits from IndieGOGO
This commit is contained in:
2024-11-23 18:54:51 -05:00
committed by GitHub
27 changed files with 2062 additions and 71 deletions

12
pkg/credits/Code.txt Normal file
View File

@@ -0,0 +1,12 @@
Confirmed:
- Khoth
- Ormus
- Chokboyz
- Celtic Minstrel
- Ben Scott
- Sylae Corell
- xq
- Daerogami
- NQNStudios
- Sei Satzparad
- Brendan Miller

38
pkg/credits/Funding.txt Normal file
View File

@@ -0,0 +1,38 @@
Confirmed:
- Alan Elkins
- Alan Monroe
- Amanda Klecker
- Andrew Flicker
- Anonymous
- Baste Nesse Buanes
- Bret Rodabaugh
- Dylan Nugent
- Evan Mulrooney
- Jake Harrelson
- Jared Forcinito
- Jeff Potter
- Jeff Vogel
- Jeremy Bracegirdle
- Joel Joslin
- Joshua Murphy
- Juan Dionicio Becerra
- Kelandon
- Kelson (Andulos)
- K L
- Laura Nelson
- Mariann Krizsan
- Mike Lapinsky
- Nick Chaimov
- Nick Fisher
- Nicole Tietz-Sokolskaya
- Nikki Jeffery
- Noah Nelson
- Ruby Paterson
- Samael
- Sean Hayden
- Souren Papazian
- Tony Martyn
- Tony Vazquez
- Trent Nelson
- Vida Krevs
- William Hensley

7
pkg/credits/Graphics.txt Normal file
View File

@@ -0,0 +1,7 @@
Confirmed:
- The Almighty
Doer of Stuff
- Mistb0rn
- Celtic Minstrel
- Kelyar-Ihrno
- Jewels

3
pkg/credits/Testing.txt Normal file
View File

@@ -0,0 +1,3 @@
Confirmed:
- The Almighty
Doer of Stuff

View File

@@ -0,0 +1,76 @@
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<!--
{{Warning}}
-->
<?xml-stylesheet href="dialog.xsl" type="text/xsl"?>
<dialog defbtn='okay'>
<!--
TODO: This dialog contains out-of-date information, such as pricing.
-->
<pict type='dlog' num='16' top='6' left='6'/>
<text top='6' left='50' width='420' height='33'>
Blades of Exile v2.0 alpha <br/>
Copyright 1997-2015, Spiderweb Software, Inc., All rights reserved.
</text>
<pane top='42' left='50' width='400' height='100'>
<text size='large' top='42' left='150' width='300' height='17'>------ CREDITS ------</text>
<!-- The height of this text needs to be 10 times the number of lines. -->
<text top='52' left='50' width='400' height='240'>
ORIGINAL GAME: <br/><br/><br/><br/><br/><br/>
OPEN SOURCE CREDITS: {{0}}<br/><br/>
SCENARIO FIXES AND UPDATES: <br/><br/>
</text>
<!-- This text is right-aligned and fills out the above text with sub-headings -->
<text top='52' left='50' width='180' height='{{Height}}' align='right'>
<br/>
Concept, Design, Programming: <br/>
Graphics: <br/>
Business Manager: <br/>
Title/Splash Screens: <br/>
<br/>
<br/>
Programming: {{1}}
Graphics: {{2}}
Testing and Troubleshooting: {{3}}
Funding: {{4}}
<br/><br/>
Bandit Busywork: <br/>
</text>
<text top='52' left='250' width='230' height='{{Height}}'>
<!-- ORIGINAL GAME --><br/>
<!-- Concept, Design, Programming -->Jeff Vogel <br/>
<!-- Graphics -->Andrew Hunter <br/>
<!-- Business Manager -->Mariann Krizsan <br/>
<!-- Title/Splash Screens -->James Ernest <br/>
<br/><!-- OPEN SOURCE CREDITS --><br/>
<!-- Programming -->{{5}}
<!-- Graphics -->{{6}}
<!-- Testing and Troubleshooting -->{{7}}
<!-- Funding -->{{8}}
<br/><!-- SCENARIO FIXES AND UPDATES --><br/>
<!-- Bandit Busywork -->The Almighty Doer of Stuff <br/>
</text>
</pane>
<text top='153' left='50' width='410' height='51'>
Blades of Exile is brought to you by Spiderweb Software - <br/>
"Where our aberrations become your reality." <br/>
"Blades of Exile" and Spiderweb Software are trademarks of Spiderweb Software.
</text>
<text relative='pos-in pos' rel-anchor='prev' top='0' left='-8' width='424'>
Open Blades of Exile is sustained by the hard work of passionate volunteers.
We sincerely hope you enjoy, share, and discuss this game, and maybe even make and release your own scenario!<br/>
Open Blades of Exile is a modification of Blades of Exile, created by Spiderweb Software, Inc. in 1997.
It is released under GNU GPL 2.0+. The source code can be found here:
</text>
<text name= 'src' relative='pos-in pos' rel-anchor='prev' top='10' left='16' colour='link' underline='true'>
https://github.com/calref/cboe/
</text>
<text relative='neg pos' rel-anchor='prev' top='0' left='16' width='353'>
Comments and questions? The maintainers of Open Blades of Exile want to hear them.<br/>
Open a ticket here:
</text>
<text name= 'issues' relative='pos-in pos' rel-anchor='prev' top='0' left='16' colour='link' underline='true'>
https://github.com/calref/cboe/issues
</text>
<button name='okay' relative='neg' type='regular' top='30' left='70'>OK</button>
</dialog>

957
pkg/credits/font-8.bdf Normal file
View File

@@ -0,0 +1,957 @@
STARTFONT 2.1
FONT -FontForge-Untitled1-Regular-R-Normal--8-80-75-75-P-61-ISO8859-1
SIZE 8 75 75
FONTBOUNDINGBOX 15 11 -5 -2
COMMENT "Generated by fontforge, http://fontforge.sourceforge.net"
COMMENT "Copyright (c) 2024, Nat"
STARTPROPERTIES 32
FOUNDRY "FontForge"
FAMILY_NAME "Untitled1"
WEIGHT_NAME "Regular"
SLANT "R"
SETWIDTH_NAME "Normal"
ADD_STYLE_NAME ""
PIXEL_SIZE 8
POINT_SIZE 80
RESOLUTION_X 75
RESOLUTION_Y 75
SPACING "P"
AVERAGE_WIDTH 61
CHARSET_REGISTRY "ISO8859"
CHARSET_ENCODING "1"
FONTNAME_REGISTRY ""
CHARSET_COLLECTIONS "ISOLatin1Encoding"
FONT_NAME "Untitled1"
FACE_NAME "Untitled1"
COPYRIGHT "Copyright (c) 2024, Nat"
FONT_VERSION "001.000"
FONT_ASCENT 6
FONT_DESCENT 2
UNDERLINE_POSITION -1
UNDERLINE_THICKNESS 1
X_HEIGHT 5
CAP_HEIGHT 7
RAW_ASCENT 800
RAW_DESCENT 200
NORM_SPACE 3
FIGURE_WIDTH 7
AVG_LOWERCASE_WIDTH 59
AVG_UPPERCASE_WIDTH 71
ENDPROPERTIES
CHARS 65
STARTCHAR space
ENCODING 32
SWIDTH 375 0
DWIDTH 3 0
BBX 1 1 1 0
BITMAP
00
ENDCHAR
STARTCHAR exclam
ENCODING 33
SWIDTH 375 0
DWIDTH 3 0
BBX 2 8 0 0
BITMAP
C0
C0
C0
C0
C0
C0
00
C0
ENDCHAR
STARTCHAR quotedbl
ENCODING 34
SWIDTH 875 0
DWIDTH 7 0
BBX 6 3 0 5
BITMAP
FC
6C
D8
ENDCHAR
STARTCHAR quotesingle
ENCODING 39
SWIDTH 500 0
DWIDTH 4 0
BBX 3 3 0 5
BITMAP
E0
60
C0
ENDCHAR
STARTCHAR parenleft
ENCODING 40
SWIDTH 500 0
DWIDTH 4 0
BBX 3 8 1 0
BITMAP
60
C0
C0
C0
C0
C0
C0
60
ENDCHAR
STARTCHAR parenright
ENCODING 41
SWIDTH 500 0
DWIDTH 4 0
BBX 3 8 0 0
BITMAP
C0
60
60
60
60
60
60
C0
ENDCHAR
STARTCHAR comma
ENCODING 44
SWIDTH 500 0
DWIDTH 4 0
BBX 3 3 0 -2
BITMAP
60
60
C0
ENDCHAR
STARTCHAR hyphen
ENCODING 45
SWIDTH 750 0
DWIDTH 6 0
BBX 5 1 0 3
BITMAP
F8
ENDCHAR
STARTCHAR period
ENCODING 46
SWIDTH 375 0
DWIDTH 3 0
BBX 2 1 0 0
BITMAP
C0
ENDCHAR
STARTCHAR slash
ENCODING 47
SWIDTH 750 0
DWIDTH 6 0
BBX 5 8 0 0
BITMAP
18
18
30
30
60
60
C0
C0
ENDCHAR
STARTCHAR zero
ENCODING 48
SWIDTH 875 0
DWIDTH 7 0
BBX 6 8 0 0
BITMAP
78
CC
DC
FC
EC
CC
CC
78
ENDCHAR
STARTCHAR colon
ENCODING 58
SWIDTH 375 0
DWIDTH 3 0
BBX 2 5 0 0
BITMAP
C0
00
00
00
C0
ENDCHAR
STARTCHAR question
ENCODING 63
SWIDTH 875 0
DWIDTH 7 0
BBX 6 8 0 0
BITMAP
78
CC
0C
18
30
30
00
30
ENDCHAR
STARTCHAR A
ENCODING 65
SWIDTH 875 0
DWIDTH 7 0
BBX 6 8 0 0
BITMAP
30
30
78
78
CC
FC
CC
CC
ENDCHAR
STARTCHAR B
ENCODING 66
SWIDTH 875 0
DWIDTH 7 0
BBX 6 8 0 0
BITMAP
F8
CC
CC
F8
CC
CC
CC
F8
ENDCHAR
STARTCHAR C
ENCODING 67
SWIDTH 875 0
DWIDTH 7 0
BBX 6 8 0 0
BITMAP
78
CC
C0
C0
C0
C0
CC
78
ENDCHAR
STARTCHAR D
ENCODING 68
SWIDTH 875 0
DWIDTH 7 0
BBX 6 8 0 0
BITMAP
F0
D8
CC
CC
CC
CC
D8
F0
ENDCHAR
STARTCHAR E
ENCODING 69
SWIDTH 750 0
DWIDTH 6 0
BBX 5 8 0 0
BITMAP
F8
C0
C0
F0
C0
C0
C0
F8
ENDCHAR
STARTCHAR F
ENCODING 70
SWIDTH 750 0
DWIDTH 6 0
BBX 5 8 0 0
BITMAP
F8
C0
C0
F0
C0
C0
C0
C0
ENDCHAR
STARTCHAR G
ENCODING 71
SWIDTH 875 0
DWIDTH 7 0
BBX 6 8 0 0
BITMAP
78
CC
C0
C0
DC
CC
CC
78
ENDCHAR
STARTCHAR H
ENCODING 72
SWIDTH 875 0
DWIDTH 7 0
BBX 6 8 0 0
BITMAP
CC
CC
CC
FC
CC
CC
CC
CC
ENDCHAR
STARTCHAR I
ENCODING 73
SWIDTH 875 0
DWIDTH 7 0
BBX 6 8 0 0
BITMAP
FC
30
30
30
30
30
30
FC
ENDCHAR
STARTCHAR J
ENCODING 74
SWIDTH 875 0
DWIDTH 7 0
BBX 6 8 0 0
BITMAP
0C
0C
0C
0C
0C
CC
CC
78
ENDCHAR
STARTCHAR K
ENCODING 75
SWIDTH 875 0
DWIDTH 7 0
BBX 6 8 0 0
BITMAP
CC
D8
F0
E0
E0
F0
D8
CC
ENDCHAR
STARTCHAR L
ENCODING 76
SWIDTH 750 0
DWIDTH 6 0
BBX 5 8 0 0
BITMAP
C0
C0
C0
C0
C0
C0
C0
F8
ENDCHAR
STARTCHAR M
ENCODING 77
SWIDTH 1125 0
DWIDTH 9 0
BBX 8 8 0 0
BITMAP
C3
E7
FF
DB
C3
C3
C3
C3
ENDCHAR
STARTCHAR N
ENCODING 78
SWIDTH 875 0
DWIDTH 7 0
BBX 6 8 0 0
BITMAP
CC
EC
EC
FC
FC
DC
DC
CC
ENDCHAR
STARTCHAR O
ENCODING 79
SWIDTH 875 0
DWIDTH 7 0
BBX 6 8 0 0
BITMAP
78
CC
CC
CC
CC
CC
CC
78
ENDCHAR
STARTCHAR P
ENCODING 80
SWIDTH 875 0
DWIDTH 7 0
BBX 6 8 0 0
BITMAP
F8
CC
CC
CC
F8
C0
C0
C0
ENDCHAR
STARTCHAR Q
ENCODING 81
SWIDTH 1000 0
DWIDTH 8 0
BBX 8 10 0 -2
BITMAP
7C
C6
C6
C6
C6
D6
DE
7C
06
03
ENDCHAR
STARTCHAR R
ENCODING 82
SWIDTH 875 0
DWIDTH 7 0
BBX 6 8 0 0
BITMAP
F8
CC
CC
CC
F8
D8
CC
CC
ENDCHAR
STARTCHAR S
ENCODING 83
SWIDTH 875 0
DWIDTH 7 0
BBX 6 8 0 0
BITMAP
78
CC
C0
78
0C
0C
CC
78
ENDCHAR
STARTCHAR T
ENCODING 84
SWIDTH 875 0
DWIDTH 7 0
BBX 6 8 0 0
BITMAP
FC
30
30
30
30
30
30
30
ENDCHAR
STARTCHAR U
ENCODING 85
SWIDTH 750 0
DWIDTH 6 0
BBX 5 8 0 0
BITMAP
D8
D8
D8
D8
D8
D8
D8
70
ENDCHAR
STARTCHAR V
ENCODING 86
SWIDTH 875 0
DWIDTH 7 0
BBX 6 8 0 0
BITMAP
CC
CC
78
78
78
30
30
30
ENDCHAR
STARTCHAR W
ENCODING 87
SWIDTH 1375 0
DWIDTH 11 0
BBX 10 8 0 0
BITMAP
C0C0
CCC0
6D80
7F80
7F80
3300
3300
3300
ENDCHAR
STARTCHAR X
ENCODING 88
SWIDTH 875 0
DWIDTH 7 0
BBX 6 8 0 0
BITMAP
CC
CC
78
30
78
FC
CC
CC
ENDCHAR
STARTCHAR Y
ENCODING 89
SWIDTH 875 0
DWIDTH 7 0
BBX 6 8 0 0
BITMAP
CC
CC
FC
78
30
30
30
30
ENDCHAR
STARTCHAR Z
ENCODING 90
SWIDTH 875 0
DWIDTH 7 0
BBX 6 8 0 0
BITMAP
FC
0C
0C
38
70
C0
C0
FC
ENDCHAR
STARTCHAR a
ENCODING 97
SWIDTH 750 0
DWIDTH 6 0
BBX 5 6 0 0
BITMAP
70
D8
78
D8
D8
78
ENDCHAR
STARTCHAR b
ENCODING 98
SWIDTH 750 0
DWIDTH 6 0
BBX 5 8 0 0
BITMAP
C0
C0
F0
D8
D8
D8
D8
F0
ENDCHAR
STARTCHAR c
ENCODING 99
SWIDTH 750 0
DWIDTH 6 0
BBX 5 6 0 0
BITMAP
70
D8
C0
C0
D8
70
ENDCHAR
STARTCHAR d
ENCODING 100
SWIDTH 750 0
DWIDTH 6 0
BBX 5 8 0 0
BITMAP
18
18
78
D8
D8
D8
D8
78
ENDCHAR
STARTCHAR e
ENCODING 101
SWIDTH 750 0
DWIDTH 6 0
BBX 5 6 0 0
BITMAP
70
D8
F8
C0
D8
70
ENDCHAR
STARTCHAR f
ENCODING 102
SWIDTH 750 0
DWIDTH 6 0
BBX 5 8 0 0
BITMAP
38
60
F0
60
60
60
60
60
ENDCHAR
STARTCHAR g
ENCODING 103
SWIDTH 750 0
DWIDTH 6 0
BBX 5 8 0 -2
BITMAP
78
D8
D8
D8
D8
78
18
70
ENDCHAR
STARTCHAR h
ENCODING 104
SWIDTH 750 0
DWIDTH 6 0
BBX 5 8 0 0
BITMAP
C0
C0
F0
D8
D8
D8
D8
D8
ENDCHAR
STARTCHAR i
ENCODING 105
SWIDTH 500 0
DWIDTH 4 0
BBX 3 8 0 0
BITMAP
60
00
E0
60
60
60
60
60
ENDCHAR
STARTCHAR j
ENCODING 106
SWIDTH 500 0
DWIDTH 4 0
BBX 8 11 -5 -2
BITMAP
80
03
00
07
03
03
03
03
03
03
0E
ENDCHAR
STARTCHAR k
ENCODING 107
SWIDTH 750 0
DWIDTH 6 0
BBX 5 8 0 0
BITMAP
C0
C0
D8
F0
E0
E0
F0
D8
ENDCHAR
STARTCHAR l
ENCODING 108
SWIDTH 500 0
DWIDTH 4 0
BBX 3 8 0 0
BITMAP
E0
60
60
60
60
60
60
60
ENDCHAR
STARTCHAR m
ENCODING 109
SWIDTH 1125 0
DWIDTH 9 0
BBX 8 6 0 0
BITMAP
FE
DB
DB
DB
DB
DB
ENDCHAR
STARTCHAR n
ENCODING 110
SWIDTH 750 0
DWIDTH 6 0
BBX 5 6 0 0
BITMAP
F0
D8
D8
D8
D8
D8
ENDCHAR
STARTCHAR o
ENCODING 111
SWIDTH 750 0
DWIDTH 6 0
BBX 5 6 0 0
BITMAP
70
D8
D8
D8
D8
70
ENDCHAR
STARTCHAR p
ENCODING 112
SWIDTH 750 0
DWIDTH 6 0
BBX 5 8 0 -2
BITMAP
F0
D8
D8
D8
D8
F0
C0
C0
ENDCHAR
STARTCHAR q
ENCODING 113
SWIDTH 750 0
DWIDTH 6 0
BBX 5 8 0 -2
BITMAP
70
D8
D8
D8
D8
78
18
18
ENDCHAR
STARTCHAR r
ENCODING 114
SWIDTH 750 0
DWIDTH 6 0
BBX 5 6 0 0
BITMAP
F8
E0
C0
C0
C0
C0
ENDCHAR
STARTCHAR s
ENCODING 115
SWIDTH 750 0
DWIDTH 6 0
BBX 5 6 0 0
BITMAP
70
D8
70
18
D8
70
ENDCHAR
STARTCHAR t
ENCODING 116
SWIDTH 625 0
DWIDTH 5 0
BBX 4 8 0 0
BITMAP
60
60
F0
60
60
60
60
30
ENDCHAR
STARTCHAR u
ENCODING 117
SWIDTH 750 0
DWIDTH 6 0
BBX 5 6 0 0
BITMAP
D8
D8
D8
D8
D8
78
ENDCHAR
STARTCHAR v
ENCODING 118
SWIDTH 750 0
DWIDTH 6 0
BBX 6 6 0 0
BITMAP
CC
CC
78
78
30
30
ENDCHAR
STARTCHAR w
ENCODING 119
SWIDTH 1125 0
DWIDTH 9 0
BBX 8 6 0 0
BITMAP
C3
C3
7E
7E
3C
3C
ENDCHAR
STARTCHAR x
ENCODING 120
SWIDTH 750 0
DWIDTH 6 0
BBX 5 6 0 0
BITMAP
D8
D8
70
70
D8
D8
ENDCHAR
STARTCHAR y
ENCODING 121
SWIDTH 750 0
DWIDTH 6 0
BBX 5 8 0 -2
BITMAP
D8
D8
D8
D8
D8
78
18
70
ENDCHAR
STARTCHAR z
ENCODING 122
SWIDTH 750 0
DWIDTH 6 0
BBX 5 6 0 0
BITMAP
F8
18
30
60
C0
F8
ENDCHAR
ENDFONT

637
pkg/credits/font.sfd Normal file
View File

@@ -0,0 +1,637 @@
SplineFontDB: 3.2
FontName: Untitled1
FullName: Untitled1
FamilyName: Untitled1
Weight: Regular
Copyright: Copyright (c) 2024, Nat
UComments: "2024-11-17: Created with FontForge (http://fontforge.org)"
Version: 001.000
ItalicAngle: 0
UnderlinePosition: -100
UnderlineWidth: 50
Ascent: 800
Descent: 200
InvalidEm: 0
LayerCount: 2
Layer: 0 0 "Back" 1
Layer: 1 0 "Fore" 0
XUID: [1021 797 1039558778 2183619]
OS2Version: 0
OS2_WeightWidthSlopeOnly: 0
OS2_UseTypoMetrics: 1
CreationTime: 1731889305
ModificationTime: 1731937948
OS2TypoAscent: 0
OS2TypoAOffset: 1
OS2TypoDescent: 0
OS2TypoDOffset: 1
OS2TypoLinegap: 0
OS2WinAscent: 0
OS2WinAOffset: 1
OS2WinDescent: 0
OS2WinDOffset: 1
HheadAscent: 0
HheadAOffset: 1
HheadDescent: 0
HheadDOffset: 1
OS2Vendor: 'PfEd'
DEI: 91125
Encoding: ISO8859-1
UnicodeInterp: none
NameList: AGL For New Fonts
DisplaySize: 8
AntiAlias: 1
FitToEm: 0
WidthSeparation: 1
WinInfo: 0 19 7
OnlyBitmaps: 1
BeginChars: 256 65
StartChar: A
Encoding: 65 65 0
Width: 875
Flags: W
LayerCount: 2
EndChar
StartChar: B
Encoding: 66 66 1
Width: 875
Flags: W
LayerCount: 2
EndChar
StartChar: C
Encoding: 67 67 2
Width: 875
Flags: W
LayerCount: 2
EndChar
StartChar: D
Encoding: 68 68 3
Width: 875
Flags: W
LayerCount: 2
EndChar
StartChar: E
Encoding: 69 69 4
Width: 750
Flags: W
LayerCount: 2
EndChar
StartChar: F
Encoding: 70 70 5
Width: 750
Flags: W
LayerCount: 2
EndChar
StartChar: G
Encoding: 71 71 6
Width: 875
Flags: W
LayerCount: 2
EndChar
StartChar: H
Encoding: 72 72 7
Width: 875
Flags: W
LayerCount: 2
EndChar
StartChar: I
Encoding: 73 73 8
Width: 875
Flags: W
LayerCount: 2
EndChar
StartChar: J
Encoding: 74 74 9
Width: 875
Flags: W
LayerCount: 2
EndChar
StartChar: K
Encoding: 75 75 10
Width: 875
Flags: W
LayerCount: 2
EndChar
StartChar: L
Encoding: 76 76 11
Width: 750
Flags: W
LayerCount: 2
EndChar
StartChar: M
Encoding: 77 77 12
Width: 1125
Flags: W
LayerCount: 2
EndChar
StartChar: N
Encoding: 78 78 13
Width: 875
Flags: W
LayerCount: 2
EndChar
StartChar: O
Encoding: 79 79 14
Width: 875
Flags: W
LayerCount: 2
EndChar
StartChar: P
Encoding: 80 80 15
Width: 875
Flags: W
LayerCount: 2
EndChar
StartChar: Q
Encoding: 81 81 16
Width: 1000
Flags: W
LayerCount: 2
EndChar
StartChar: R
Encoding: 82 82 17
Width: 875
Flags: W
LayerCount: 2
EndChar
StartChar: S
Encoding: 83 83 18
Width: 875
Flags: W
LayerCount: 2
EndChar
StartChar: T
Encoding: 84 84 19
Width: 875
Flags: W
LayerCount: 2
EndChar
StartChar: U
Encoding: 85 85 20
Width: 750
Flags: W
LayerCount: 2
EndChar
StartChar: V
Encoding: 86 86 21
Width: 875
Flags: W
LayerCount: 2
EndChar
StartChar: W
Encoding: 87 87 22
Width: 1375
Flags: W
LayerCount: 2
EndChar
StartChar: X
Encoding: 88 88 23
Width: 875
Flags: W
LayerCount: 2
EndChar
StartChar: Y
Encoding: 89 89 24
Width: 875
Flags: W
LayerCount: 2
EndChar
StartChar: Z
Encoding: 90 90 25
Width: 875
Flags: W
LayerCount: 2
EndChar
StartChar: a
Encoding: 97 97 26
Width: 750
Flags: W
LayerCount: 2
EndChar
StartChar: b
Encoding: 98 98 27
Width: 750
Flags: W
LayerCount: 2
EndChar
StartChar: c
Encoding: 99 99 28
Width: 750
Flags: W
LayerCount: 2
EndChar
StartChar: d
Encoding: 100 100 29
Width: 750
Flags: W
LayerCount: 2
EndChar
StartChar: e
Encoding: 101 101 30
Width: 750
Flags: W
LayerCount: 2
EndChar
StartChar: f
Encoding: 102 102 31
Width: 750
Flags: W
LayerCount: 2
EndChar
StartChar: g
Encoding: 103 103 32
Width: 750
Flags: W
LayerCount: 2
EndChar
StartChar: h
Encoding: 104 104 33
Width: 750
Flags: W
LayerCount: 2
EndChar
StartChar: i
Encoding: 105 105 34
Width: 500
Flags: W
LayerCount: 2
EndChar
StartChar: j
Encoding: 106 106 35
Width: 500
Flags: W
LayerCount: 2
EndChar
StartChar: k
Encoding: 107 107 36
Width: 750
Flags: W
LayerCount: 2
EndChar
StartChar: l
Encoding: 108 108 37
Width: 500
Flags: W
LayerCount: 2
EndChar
StartChar: m
Encoding: 109 109 38
Width: 1125
Flags: W
LayerCount: 2
EndChar
StartChar: n
Encoding: 110 110 39
Width: 750
Flags: W
LayerCount: 2
EndChar
StartChar: o
Encoding: 111 111 40
Width: 750
Flags: W
LayerCount: 2
EndChar
StartChar: p
Encoding: 112 112 41
Width: 750
Flags: W
LayerCount: 2
EndChar
StartChar: q
Encoding: 113 113 42
Width: 750
Flags: W
LayerCount: 2
EndChar
StartChar: r
Encoding: 114 114 43
Width: 750
Flags: W
LayerCount: 2
EndChar
StartChar: s
Encoding: 115 115 44
Width: 750
Flags: W
LayerCount: 2
EndChar
StartChar: t
Encoding: 116 116 45
Width: 625
Flags: W
LayerCount: 2
EndChar
StartChar: u
Encoding: 117 117 46
Width: 750
Flags: W
LayerCount: 2
EndChar
StartChar: v
Encoding: 118 118 47
Width: 750
Flags: W
LayerCount: 2
EndChar
StartChar: w
Encoding: 119 119 48
Width: 1125
Flags: W
LayerCount: 2
EndChar
StartChar: x
Encoding: 120 120 49
Width: 750
Flags: W
LayerCount: 2
EndChar
StartChar: y
Encoding: 121 121 50
Width: 750
Flags: W
LayerCount: 2
EndChar
StartChar: z
Encoding: 122 122 51
Width: 750
Flags: W
LayerCount: 2
EndChar
StartChar: space
Encoding: 32 32 52
Width: 375
Flags: W
LayerCount: 2
EndChar
StartChar: hyphen
Encoding: 45 45 53
Width: 750
Flags: W
LayerCount: 2
EndChar
StartChar: quotesingle
Encoding: 39 39 54
Width: 500
Flags: W
LayerCount: 2
EndChar
StartChar: parenleft
Encoding: 40 40 55
Width: 500
Flags: W
LayerCount: 2
EndChar
StartChar: parenright
Encoding: 41 41 56
Width: 500
Flags: W
LayerCount: 2
EndChar
StartChar: comma
Encoding: 44 44 57
Width: 500
Flags: W
LayerCount: 2
EndChar
StartChar: period
Encoding: 46 46 58
Width: 375
Flags: W
LayerCount: 2
EndChar
StartChar: slash
Encoding: 47 47 59
Width: 750
Flags: W
LayerCount: 2
EndChar
StartChar: exclam
Encoding: 33 33 60
Width: 375
Flags: W
LayerCount: 2
EndChar
StartChar: quotedbl
Encoding: 34 34 61
Width: 875
Flags: W
LayerCount: 2
EndChar
StartChar: question
Encoding: 63 63 62
Width: 875
Flags: W
LayerCount: 2
EndChar
StartChar: zero
Encoding: 48 48 63
Width: 875
Flags: W
LayerCount: 2
EndChar
StartChar: colon
Encoding: 58 58 64
Width: 375
Flags: W
LayerCount: 2
EndChar
EndChars
BitmapFont: 8 65 6 2 1
BDFChar: 0 65 7 0 5 0 7
0JI`rbl#]/
BDFChar: 1 66 7 0 5 0 7
prptWbfn<+
BDFChar: 2 67 7 0 5 0 7
Gg*t=^qe0=
BDFChar: 3 68 7 0 5 0 7
nCYt/bfn`/
BDFChar: 4 69 6 0 4 0 7
pqX]7^qdb\
BDFChar: 5 70 6 0 4 0 7
pqX]7^qdb$
BDFChar: 6 71 7 0 5 0 7
Gg*t=gs!ue
BDFChar: 7 72 7 0 5 0 7
bfn</bfn;T
BDFChar: 8 73 7 0 5 0 7
r%KfY0JG3Y
BDFChar: 9 74 7 0 5 0 7
$k*OQ%*Zq?
BDFChar: 10 75 7 0 5 0 7
bh2FCi:,CC
BDFChar: 11 76 6 0 4 0 7
^qdb$^qdb\
BDFChar: 12 77 9 0 7 0 7
_rq'S_o'C0
BDFChar: 13 78 7 0 5 0 7
bj=]or7p)O
BDFChar: 14 79 7 0 5 0 7
Gg+CUbfn:U
BDFChar: 15 80 7 0 5 0 7
prpt+pqX\\
BDFChar: 16 81 8 0 7 -2 7
I)a1G`n'!o"p4i*
BDFChar: 17 82 7 0 5 0 7
prpt+pt3g7
BDFChar: 18 83 7 0 5 0 7
Gg*sJ$k1@)
BDFChar: 19 84 7 0 5 0 7
r%KfY0JG17
BDFChar: 20 85 6 0 4 0 7
f\"j/f\"hq
BDFChar: 21 86 7 0 5 0 7
bfk<VGVCg*
BDFChar: 22 87 11 0 9 0 7
^qe10D1I+dIt0<T1B932
BDFChar: 23 88 7 0 5 0 7
bfk;cGl5e0
BDFChar: 24 89 7 0 5 0 7
bfp!00JG17
BDFChar: 25 90 7 0 5 0 7
r!WunE599e
BDFChar: 26 97 6 0 4 0 5
E7fEffQ[Ar
BDFChar: 27 98 6 0 4 0 7
^qfHlf\"jG
BDFChar: 28 99 6 0 4 0 5
E7htAfPgfj
BDFChar: 29 100 6 0 4 0 7
(`7MMf\"i$
BDFChar: 30 101 6 0 4 0 5
E7js$fPgfj
BDFChar: 31 102 6 0 4 0 7
3+25`?smAM
BDFChar: 32 103 6 0 4 -2 5
GhC[$fQ\6P
BDFChar: 33 104 6 0 4 0 7
^qfHlf\"j/
BDFChar: 34 105 4 0 2 0 7
?i]+m?smAM
BDFChar: 35 106 4 -5 2 -2 8
J-,cV!s8W-!s9#5
BDFChar: 36 107 6 0 4 0 7
^qeUli8F+W
BDFChar: 37 108 4 0 2 0 7
i*]r#?smAM
BDFChar: 38 109 9 0 7 0 5
rnH2^gY2].
BDFChar: 39 110 6 0 4 0 5
nCZCGf[p0(
BDFChar: 40 111 6 0 4 0 5
E7igqfPgfj
BDFChar: 41 112 6 0 4 -2 5
nCZCGf^Q\l
BDFChar: 42 113 6 0 4 -2 5
E7igqfQ\5M
BDFChar: 43 114 6 0 4 0 5
pu&s'^q]pM
BDFChar: 44 115 6 0 4 0 5
E7f+HfPgfj
BDFChar: 45 116 5 0 3 0 7
?srJ3?sm@r
BDFChar: 46 117 6 0 4 0 5
f\"j/fQ[Ar
BDFChar: 47 118 6 0 5 0 5
bfk<V0JEJ,
BDFChar: 48 119 9 0 7 0 5
_o$qP4?NTD
BDFChar: 49 120 6 0 4 0 5
f[t.^f[p0(
BDFChar: 50 121 6 0 4 -2 5
f\"j/fQ\6P
BDFChar: 51 122 6 0 4 0 5
p_Y\m_"[m0
BDFChar: 52 32 3 1 1 0 0
z
BDFChar: 53 45 6 0 4 3 3
p](9o
BDFChar: 54 39 4 0 2 5 7
i*a>#
BDFChar: 55 40 4 1 3 0 7
@)0Rn^qd`n
BDFChar: 56 41 4 0 2 0 7
^gLPX?smBX
BDFChar: 57 44 4 0 2 -2 0
?spbM
BDFChar: 58 46 3 0 1 0 0
^]4?7
BDFChar: 59 47 6 0 4 0 7
(`4q\?spdc
BDFChar: 60 33 3 0 1 0 7
^qdb$^q]rc
BDFChar: 61 34 7 0 5 5 7
r+t!c
BDFChar: 62 63 7 0 5 0 7
Gg$R50JEJ\
BDFChar: 63 48 7 0 5 0 7
Gg+t@m**[u
BDFChar: 64 58 3 0 1 0 4
^]4?7^]4?7
EndBitmapFont
EndSplineFont

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
pkg/credits/startanim1.exr Normal file

Binary file not shown.

144
pkg/generate-credits.py Normal file
View File

@@ -0,0 +1,144 @@
# Call this manually every time the metadata in pkg/credits changes.
# Commit the generated files.
# Requires:
# - ImageMagick
# - Git Bash (on Windows)
# Usage: python pkg/generate-credits.py
from glob import glob
from os.path import basename, splitext
from subprocess import run
def get_confirmed_names(filename):
with open(filename, 'r') as file:
lines = [line.rstrip() for line in file]
# The first line should always be Confirmed:
lines = lines[1:]
# After the confirmed names, there may be Not Confirmed: names.
if 'Not Confirmed:' in lines:
lines = lines[0:lines.index('Not Confirmed:')]
# Lines should either start with "- " or " " if continuing the previous name, wrapped and indented:
return [line[2:] for line in lines if len(line) > 0]
def main():
# Generate about-boe.xml from about-boe-template.xml:
with open('pkg/credits/about-boe-template.xml', 'r') as template_file:
template = template_file.read()
content = template
name_files = glob('pkg/credits/*.txt')
name_dict = {}
num_dict = {}
total_num = 0
for name_file in name_files:
heading, _ = splitext(basename(name_file))
name_dict[heading] = get_confirmed_names(name_file)
num_dict[heading] = len(name_dict[heading])
total_num += len(name_dict[heading])
def replace_tabbed_lines(placeholder, lines, tabs):
return content.replace(placeholder, ('\n' + ('\t' * tabs)).join(lines.splitlines()))
# {{Warning}}:
content = replace_tabbed_lines('{{Warning}}', 'WARNING! This file is generated by pkg/generate-credits.py from\ntpkg/credits/about-boe-template.xml. Do not modify it manually!', 1)
# {{Height}}: 10 * (total # of lines, which includes 2 at the top and 4 per section break)
content = content.replace('{{Height}}', str(10 * (total_num + 10)))
# {{0}}: '<br/>' * (total # of confirmed names in pkg/credits/*.txt)
content = content.replace('{{0}}', '<br/>' * total_num)
# {{1}}: '<br/>' * (# of programmers)
content = content.replace('{{1}}', '<br/>' * num_dict['Code'])
# {{2}}: '<br/>' * (# of artists)
content = content.replace('{{2}}', '<br/>' * num_dict['Graphics'])
# {{3}}: '<br/>' * (# of testers)
content = content.replace('{{3}}', '<br/>' * num_dict['Testing'])
# {{4}}: '<br/>' * (# of donors)
content = content.replace('{{4}}', '<br/>' * num_dict['Funding'])
list_break = ' <br/>\n'
# {{5}}: Programmer name lines
name_lines = list_break.join(name_dict["Code"]) + list_break
content = replace_tabbed_lines('{{5}}', name_lines, 8)
# {{6}}: Artist name lines
name_lines = list_break.join(name_dict["Graphics"]) + list_break
content = replace_tabbed_lines('{{6}}', name_lines, 7)
# {{7}}: Tester name lines
name_lines = list_break.join(name_dict["Testing"]) + list_break
content = replace_tabbed_lines('{{7}}', name_lines, 12)
# {{8}}: Donor names
name_lines = list_break.join(name_dict["Funding"]) + list_break
content = replace_tabbed_lines('{{8}}', name_lines, 7)
with open('rsrc/dialogs/about-boe.xml', 'w') as output_file:
output_file.write(content)
# Generate startanim.png using ImageMagick
# These allow whitespace to come at the start of the real content, and will be cropped out.
image_lines_col1 = ["-"]
image_lines_col2 = ["-"]
# Note: blank lines need to have a space in them for some reason
def add_heading(heading):
image_lines_col1.append(f' - {heading.upper()} -')
image_lines_col1.append(' ')
image_lines_col2.extend([' ', ' '])
# (Complicated)
# Split the names into two columns, still vertically alphabetized,
# while keeping multi-line names on the same column!
names = name_dict[heading]
left_column = True
idx = 0
while idx < len(names):
current_column = image_lines_col1 if left_column else image_lines_col2
current_column.append(names[idx])
multiline_idx = idx + 1
while multiline_idx < len(names) and names[multiline_idx].startswith(' '):
current_column.append(names[multiline_idx])
multiline_idx += 1
idx += 1
left_column = len(image_lines_col1) <= len(image_lines_col2)
idx += 1
while len(image_lines_col1) != len(image_lines_col2):
current_column = image_lines_col1 if left_column else image_lines_col2
current_column.append(' ')
image_lines_col1.append(' ')
image_lines_col2.append(' ')
add_heading('Code')
add_heading('Graphics')
add_heading('Testing')
add_heading('Funding')
# when one column starts with blank lines, ImageMagick doesn't offset the top correctly.
# So we pass the number of lines to y-offset the right column image
col2_blank_lines_start = 0
for line in image_lines_col2:
if line == ' ':
col2_blank_lines_start += 1
else:
break
run(['bash', 'pkg/generate-startanim-col.sh', '1', '0'], input='\n'.join(image_lines_col1), encoding='ascii')
# print(col2_blank_lines_start)
run(['bash', 'pkg/generate-startanim-col.sh', '2', str(col2_blank_lines_start)], input='\n'.join(image_lines_col2), encoding='ascii')
run(['bash', 'pkg/generate-startanim.sh'])
if __name__ == "__main__":
main()

16
pkg/generate-startanim-col.sh Executable file
View File

@@ -0,0 +1,16 @@
#!/bin/bash
text="$(cat)"
line_count=$(echo "$text" | wc -l)
font_size=8
spacing=5
actual_line_size=$((font_size + spacing))
top_offset_lines=$2
first_line_offset=$((font_size + 2 + actual_line_size * top_offset_lines))
height=$((actual_line_size * line_count))
magick -size 140x$height xc:transparent \
-stroke black -pointsize $font_size -interline-spacing $spacing \
-font 'pkg/credits/font-8.bdf' -annotate +7+$first_line_offset "$text" \
pkg/credits/startanim-col-$1.png

12
pkg/generate-startanim.sh Executable file
View File

@@ -0,0 +1,12 @@
#!/bin/bash
font_size=8
spacing=5
actual_line_size=$((font_size + spacing))
magick convert +append pkg/credits/startanim-col-*.png pkg/credits/startanim-pt-2.png
magick convert pkg/credits/startanim-pt-2.png -chop 0x$actual_line_size -gravity North pkg/credits/startanim-pt-2.png
magick convert -append pkg/credits/startanim-pt-*.png rsrc/graphics/startanim.png
# Clean up:
rm pkg/credits/startanim-col-*.png
rm pkg/credits/startanim-pt-2.png

View File

@@ -1,4 +1,8 @@
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<!--
WARNING! This file is generated by pkg/generate-credits.py from
tpkg/credits/about-boe-template.xml. Do not modify it manually!
-->
<?xml-stylesheet href="dialog.xsl" type="text/xsl"?>
<dialog defbtn='okay'>
<!--
@@ -9,67 +13,117 @@
Blades of Exile v2.0 alpha <br/>
Copyright 1997-2015, Spiderweb Software, Inc., All rights reserved.
</text>
<pane top='42' left='50' width='400' height='67'>
<pane top='42' left='50' width='400' height='100'>
<text size='large' top='42' left='150' width='300' height='17'>------ CREDITS ------</text>
<!-- TODO: Get a proper right-aligned text setting so that I don't have to use this hack of weird numbers of spaces -->
<!-- The height of this text needs to be 10 times the number of lines. -->
<text top='52' left='50' width='400' height='240'>
ORIGINAL GAME: <br/>
Concept, Design, Programming: <br/>
Graphics: <br/>
Business Manager: <br/>
Title/Splash Screens: <br/>
<br/>
OPEN SOURCE CREDITS: <br/>
Programming: <br/><br/><br/><br/><br/><br/><br/>
Graphics: <br/><br/><br/><br/><br/>
Testing and Troubleshooting: <br/>
<br/>
SCENARIO FIXES AND UPDATES: <br/>
Bandit Busywork: <br/>
ORIGINAL GAME: <br/><br/><br/><br/><br/><br/>
OPEN SOURCE CREDITS: <br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
SCENARIO FIXES AND UPDATES: <br/><br/>
</text>
<!-- The height of this text needs to be 10 times the number of lines. -->
<!-- Also make sure that it properly aligns with the previous text. -->
<!-- Comments are included to aid with this. Don't mess it up! Test it to be sure! -->
<text top='52' left='250' width='230' height='240'>
<!-- This text is right-aligned and fills out the above text with sub-headings -->
<text top='52' left='50' width='180' height='660' align='right'>
<br/>
Concept, Design, Programming: <br/>
Graphics: <br/>
Business Manager: <br/>
Title/Splash Screens: <br/>
<br/>
<br/>
Programming: <br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
Graphics: <br/><br/><br/><br/><br/><br/>
Testing and Troubleshooting: <br/><br/>
Funding: <br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
<br/><br/>
Bandit Busywork: <br/>
</text>
<text top='52' left='250' width='230' height='660'>
<!-- ORIGINAL GAME --><br/>
<!-- Concept, Design, Programming -->Jeff Vogel (SpidWeb@spidweb.com) <br/>
<!-- Graphics -->Andrew Hunter (Wormius@aol.com) <br/>
<!-- Business Manager -->Mariann Krizsan (krizsan@spidweb.com)<br/>
<!-- Title/Splash Screens -->James Ernest (ernest@speakeasy.org) <br/>
<!-- Concept, Design, Programming -->Jeff Vogel <br/>
<!-- Graphics -->Andrew Hunter <br/>
<!-- Business Manager -->Mariann Krizsan <br/>
<!-- Title/Splash Screens -->James Ernest <br/>
<br/><!-- OPEN SOURCE CREDITS --><br/>
<!-- Programming -->Khoth <br/>
Ormus <br/>
Chokboyz <br/>
Celtic Minstrel <br/>
Ben Scott <br/>
Sylae Corell <br/>
xq <br/>
<!-- Graphics -->The Almighty Doer of Stuff <br/>
Mistb0rn <br/>
Celtic Minstrel <br/>
Kelyar-Ihrno <br/>
Jewels <br/>
<!-- Testing and Troubleshooting -->The Almighty Doer of Stuff <br/>
Ormus <br/>
Chokboyz <br/>
Celtic Minstrel <br/>
Ben Scott <br/>
Sylae Corell <br/>
xq <br/>
Daerogami <br/>
NQNStudios <br/>
Sei Satzparad <br/>
Brendan Miller <br/>
<!-- Graphics -->The Almighty <br/>
Doer of Stuff <br/>
Mistb0rn <br/>
Celtic Minstrel <br/>
Kelyar-Ihrno <br/>
Jewels <br/>
<!-- Testing and Troubleshooting -->The Almighty <br/>
Doer of Stuff <br/>
<!-- Funding -->Alan Elkins <br/>
Alan Monroe <br/>
Amanda Klecker <br/>
Andrew Flicker <br/>
Anonymous <br/>
Baste Nesse Buanes <br/>
Bret Rodabaugh <br/>
Dylan Nugent <br/>
Evan Mulrooney <br/>
Jake Harrelson <br/>
Jared Forcinito <br/>
Jeff Potter <br/>
Jeff Vogel <br/>
Jeremy Bracegirdle <br/>
Joel Joslin <br/>
Joshua Murphy <br/>
Juan Dionicio Becerra <br/>
Kelandon <br/>
Kelson (Andulos) <br/>
K L <br/>
Laura Nelson <br/>
Mariann Krizsan <br/>
Mike Lapinsky <br/>
Nick Chaimov <br/>
Nick Fisher <br/>
Nicole Tietz-Sokolskaya <br/>
Nikki Jeffery <br/>
Noah Nelson <br/>
Ruby Paterson <br/>
Samael <br/>
Sean Hayden <br/>
Souren Papazian <br/>
Tony Martyn <br/>
Tony Vazquez <br/>
Trent Nelson <br/>
Vida Krevs <br/>
William Hensley <br/>
<br/><!-- SCENARIO FIXES AND UPDATES --><br/>
<!-- Bandit Busywork -->The Almighty Doer of Stuff <br/>
</text>
</pane>
<text top='110' left='50' width='410' height='51'>
<text top='153' left='50' width='410' height='51'>
Blades of Exile is brought to you by Spiderweb Software - <br/>
"Where our aberrations become your reality." <br/>
"Blades of Exile" and Spiderweb Software are trademarks of Spiderweb Software.
</text>
<text top='162' left='50' width='424' height='145'>
Open Blades of Exile is brought to you from the hard work of volunteers who are passionate about this software.
<text relative='pos-in pos' rel-anchor='prev' top='0' left='-8' width='424'>
Open Blades of Exile is sustained by the hard work of passionate volunteers.
We sincerely hope you enjoy, share, and discuss this game, and maybe even make and release your own scenario!<br/>
Open Blades of Exile is a modification of Blades of Exile, created by Spiderweb Software, Inc. in 1997.
It is released under GNU GPL 2.0+. The source code can be found at https://github.com/calref/cboe/.
It is released under GNU GPL 2.0+. The source code can be found here:
</text>
<text top='240' left='60' width='353' height='66'>
Comments and questions? The creators and maintainers of Exile want to hear them.
Visit http://www.spidweb.com/, where you can find the official discussion forum and other great games!
<br/>Or open a ticket at https://github.com/calref/cboe/issues.
<text name= 'src' relative='pos-in pos' rel-anchor='prev' top='10' left='16' colour='link' underline='true'>
https://github.com/calref/cboe/
</text>
<button name='okay' type='regular' top='299' left='435'>OK</button>
<text relative='neg pos' rel-anchor='prev' top='0' left='16' width='353'>
Comments and questions? The maintainers of Open Blades of Exile want to hear them.<br/>
Open a ticket here:
</text>
<text name= 'issues' relative='pos-in pos' rel-anchor='prev' top='0' left='16' colour='link' underline='true'>
https://github.com/calref/cboe/issues
</text>
<button name='okay' relative='neg' type='regular' top='30' left='70'>OK</button>
</dialog>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 23 KiB

View File

@@ -164,6 +164,14 @@
<xs:attributeGroup ref="frame"/>
<xs:attributeGroup ref="font"/>
<xs:attribute name="underline" type="bool"/>
<xs:attribute name="align">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="left"/>
<xs:enumeration value="right"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute ref="def-key"/>
<xs:attribute name="fromlist" default="none" type="xs:string"/>
<xs:attributeGroup ref="rect-size"/>

View File

@@ -21,6 +21,9 @@
#include <boost/lexical_cast.hpp>
#include "winutil.hpp"
// Hyperlink forward declaration
extern void launchURL(std::string url);
void cControl::setText(std::string l){
lbl = l;
}
@@ -435,6 +438,16 @@ std::string cControl::parse(ticpp::Element& who, std::string fname) {
frame.height() = height > 0 ? height : bestSz.y;
setBounds(frame);
validatePostParse(who, fname, foundAttrs, foundNodes);
// Wire links to function:
// TODO links are identified only by having the color 'link', and can only link to their text value.
if(is_link){
attachClickHandler([](cDialog& self, std::string clicked, eKeyMod) {
launchURL(self[clicked].getText());
return false;
});
}
return id;
}
@@ -541,6 +554,8 @@ bool cControl::parseAttribute(ticpp::Attribute& attr, std::string tagName, std::
setColour({0x7f, 0xd7, 0xFF});
if(parent->getBg() == cDialog::BG_LIGHT)
setColour({0x00, 0x00, 0xFF});
is_link = true;
} else try {
sf::Color clr = parseColor(val);
setColour(clr);

View File

@@ -462,6 +462,7 @@ private:
// Transient values only used during parsing
ePosition horz = POS_ABS, vert = POS_ABS;
std::string anchor;
bool is_link = false;
};
#endif

View File

@@ -53,12 +53,18 @@ bool cTextMsg::parseAttribute(ticpp::Attribute& attr, std::string tagName, std::
throw xBadVal(tagName, attr.Name(), val, attr.Row(), attr.Column(), fname);
}
return true;
} else if(attr.Name() == "underline") {
}else if(attr.Name() == "underline"){
std::string val = attr.Value();
if(val == "true") underlined = true;
else if(val == "false") underlined = false;
else throw xBadVal(tagName, attr.Name(), val, attr.Row(), attr.Column(), fname);
return true;
}else if(attr.Name() == "align"){
std::string val = attr.Value();
if(val == "right") right_align = true;
else if(val == "left") right_align = false;
else throw xBadVal(tagName, attr.Name(), val, attr.Row(), attr.Column(), fname);
return true;
}
return cControl::parseAttribute(attr, tagName, fname);
}
@@ -233,7 +239,7 @@ void cTextMsg::draw(){
}
style.colour = draw_color;
if (!calculated) calculate_layout();
win_draw_string(*inWindow,to_rect,msg,text_mode,style,break_info);
win_draw_string(*inWindow,to_rect,msg,text_mode,style,break_info,right_align);
}
}

View File

@@ -63,5 +63,6 @@ private:
std::string msg;
void calculate_layout();
bool calculated = false;
bool right_align = false;
};
#endif

View File

@@ -91,6 +91,7 @@ The `<text>` tag accepts the following attributes:
* `framed` - See **Common Attributes** above. Defaults to `false`.
* `outline` - See **Common Attributes** above.
* `underline` - If true, the text will be underlined.
* `align` - `right` or `left`. Defaults to `left`.
* `fromlist`, `font`, `size`, `color`, `colour`, `def-key` -
See **Common Attributes** above.

View File

@@ -245,6 +245,7 @@ void show_dialog_action(std::string xml_file) {
if(recording){
record_action("show_dialog_action", xml_file);
}
cChoiceDlog(xml_file).show();
}

View File

@@ -266,10 +266,11 @@ void draw_startup_anim(bool advance) {
anim_from = anim_to;
anim_from.offset(-1,-4 + startup_anim_pos);
if(advance) startup_anim_pos = (startup_anim_pos + 1) % 542;
auto scroll_sprite = *ResMgr::graphics.get("startanim",true);
if(advance) startup_anim_pos = (startup_anim_pos + 1) % scroll_sprite.getSize().y;
rect_draw_some_item(*ResMgr::graphics.get("startbut",true),anim_size,mainPtr,startup_button[STARTBTN_SCROLL]);
anim_to.offset(startup_button[STARTBTN_SCROLL].left, startup_button[STARTBTN_SCROLL].top);
rect_draw_some_item(*ResMgr::graphics.get("startanim",true),anim_from,mainPtr,anim_to,sf::BlendAlpha);
rect_draw_some_item(scroll_sprite,anim_from,mainPtr,anim_to,sf::BlendAlpha);
}
void draw_startup_stats() {

View File

@@ -689,15 +689,7 @@ void init_boe(int argc, char* argv[]) {
}
void showWelcome() {
if(recording){
record_action("showWelcome", "");
}
cChoiceDlog welcome("welcome");
welcome->attachClickHandlers([](cDialog& self, std::string clicked, eKeyMod) {
launchURL(self[clicked].getText());
return false;
}, {"spidweb", "scen", "forum", "home", "src"});
welcome.show();
show_dialog_action("welcome");
}
using Key = sf::Keyboard::Key;
@@ -975,10 +967,10 @@ void update_terrain_animation() {
}
void update_startup_animation() {
static const long twentyTicks = time_in_ticks(20).asMilliseconds();
static const long interval = time_in_ticks(10).asMilliseconds();
if(overall_mode != MODE_STARTUP) return;
if(animTimer.getElapsedTime().asMilliseconds() < twentyTicks) return;
if(animTimer.getElapsedTime().asMilliseconds() < interval) return;
draw_startup_anim(true);
animTimer.restart();

View File

@@ -48,6 +48,7 @@ struct text_params_t {
std::vector<snippet_t> snippets;
// Pre-calculated line wrapping:
break_info_t break_info;
bool right_align = false;
};
static void push_snippets(size_t start, size_t end, text_params_t& options, size_t& iHilite, const std::string& str, location loc) {
@@ -110,13 +111,14 @@ break_info_t calculate_line_wrapping(rectangle dest_rect, std::string str, TextS
short i;
for(i = 0; text_len(i) != text_len(i + 1) && i < str_len; i++) {
if(((text_len(i) - text_len(last_line_break) > (dest_rect.width() - 6))
unsigned short line_width = text_len(i) - text_len(last_line_break);
if(((line_width > (dest_rect.width() - 6))
&& (last_word_break >= last_line_break)) || (str[i] == '|')) {
if(str[i] == '|') {
last_word_break = i + 1;
} else if(last_line_break == last_word_break)
last_word_break = i;
break_info.push_back(std::make_pair(last_line_break, last_word_break));
break_info.push_back(std::make_tuple(last_line_break, last_word_break, line_width));
last_line_break = last_word_break;
}
if(str[i] == ' ')
@@ -124,9 +126,10 @@ break_info_t calculate_line_wrapping(rectangle dest_rect, std::string str, TextS
}
if(i - last_line_break > 0) {
unsigned short line_width = text_len(i) - text_len(last_line_break);
std::string snippet = str.substr(last_line_break);
if(!snippet.empty())
break_info.push_back(std::make_pair(last_line_break, str.length() + 1));
break_info.push_back(std::make_tuple(last_line_break, str.length() + 1, line_width));
}
return break_info;
@@ -179,9 +182,13 @@ static void win_draw_string(sf::RenderTarget& dest_window,rectangle dest_rect,st
moveTo = location(dest_rect.left + adjust_x, dest_rect.top + adjust_y);
for(auto break_info_pair : break_info){
push_snippets(break_info_pair.first, break_info_pair.second, options, iHilite, str, moveTo);
for(auto break_info_tuple : break_info){
if(options.right_align){
moveTo.x += (dest_rect.width() - std::get<2>(break_info_tuple));
}
push_snippets(std::get<0>(break_info_tuple), std::get<1>(break_info_tuple), options, iHilite, str, moveTo);
moveTo.y += line_height;
moveTo.x = dest_rect.left;
}
} else {
switch(mode) {
@@ -229,16 +236,17 @@ static void win_draw_string(sf::RenderTarget& dest_window,rectangle dest_rect,st
}
}
void win_draw_string(sf::RenderTarget& dest_window,rectangle dest_rect,std::string str,eTextMode mode,TextStyle style) {
void win_draw_string(sf::RenderTarget& dest_window,rectangle dest_rect,std::string str,eTextMode mode,TextStyle style,bool right_align) {
break_info_t break_info;
win_draw_string(dest_window, dest_rect, str, mode, style, break_info);
win_draw_string(dest_window, dest_rect, str, mode, style, break_info, right_align);
}
void win_draw_string(sf::RenderTarget& dest_window,rectangle dest_rect,std::string str,eTextMode mode,TextStyle style,break_info_t break_info) {
void win_draw_string(sf::RenderTarget& dest_window,rectangle dest_rect,std::string str,eTextMode mode,TextStyle style,break_info_t break_info,bool right_align) {
text_params_t params;
params.mode = mode;
params.style = style;
params.break_info = break_info;
params.right_align = right_align;
win_draw_string(dest_window, dest_rect, str, params);
}

View File

@@ -10,6 +10,7 @@
#define BoE_RENDER_TEXT_HPP
#include <utility>
#include <tuple>
#include <vector>
#include <string>
@@ -37,8 +38,8 @@ struct TextStyle {
void applyTo(sf::Text& text);
};
// elements: std::make_pair(last_line_break, last_word_break)
typedef std::vector<std::pair<unsigned short, unsigned short>> break_info_t;
// elements: std::make_tuple(last_line_break, last_word_break, line_width)
typedef std::vector<std::tuple<unsigned short, unsigned short, unsigned short>> break_info_t;
struct snippet_t {
std::string text;
@@ -55,8 +56,8 @@ enum class eTextMode {
std::vector<rectangle> draw_string_hilite(sf::RenderTarget& dest_window,rectangle dest_rect,std::string str,TextStyle style,std::vector<hilite_t> hilites,sf::Color hiliteClr);
std::vector<snippet_t> draw_string_sel(sf::RenderTarget& dest_window,rectangle dest_rect,std::string str,TextStyle style,std::vector<hilite_t> hilites,sf::Color hiliteClr);
void win_draw_string(sf::RenderTarget& dest_window,rectangle dest_rect,std::string str,eTextMode mode,TextStyle style);
void win_draw_string(sf::RenderTarget& dest_window,rectangle dest_rect,std::string str,eTextMode mode,TextStyle style, break_info_t break_info);
void win_draw_string(sf::RenderTarget& dest_window,rectangle dest_rect,std::string str,eTextMode mode,TextStyle style,bool right_align = false);
void win_draw_string(sf::RenderTarget& dest_window,rectangle dest_rect,std::string str,eTextMode mode,TextStyle style, break_info_t break_info,bool right_align = false);
break_info_t calculate_line_wrapping(rectangle dest_rect, std::string str, TextStyle style);
size_t string_length(std::string str, TextStyle style, short* height = nullptr);