Gryphonheart Professions

Transcription

Gryphonheart Professions
Christian Warnecke
Gryphonheart Professions
Addons for support and improvement of roleplaying
in MMORPGs
Master thesis in Digital Media Engineering
Christian Warnecke
Gryphonheart Professions
Addons for support and improvement of roleplaying
in MMORPGs
Master thesis in Digital Media Engineering
Report produced by:
Christian Warnecke
Supervisor(s)
Michael Rose
DTU Informatics
Technical University of Denmark
Department of Informatics and Mathematical Modeling
Richard Petersens Plads 321
DK-2800 Kgs. Lyngby
Denmark
www.imm.dtu.dk
Tel:
(+45) 45 25 33 51
Fax:
(+45) 45 88 26 73
E-mail: [email protected]
Date Published:
Class:
13. May 2013
1 (public)
Version:
1. version
Notes:
This report is delivered as a part of the requirement for obtaining of Master of Science in Engineering (MSc)at the Technical
University of Denmark. The report reprecents 30 ECTS points.
License
c
Christian
Warnecke ,2013
Abstract
An interesting minority in MMORPG games are players who
take part of active roleplaying with other players. Active roleplaying distinguish itself from normal RPG behaviour by including more immersion, typically by expressing ones character
through communication with other players, acting as the character. The active roleplaying community is most present in World
of Warcaft (WoW). The roleplayers does however face some issues, as the game does not have mechanics that directly support
the roleplay. Such issues is lack of diversity as well as lack of
realism in the roleplay.
In this report a concept is developed to solve or improve on the
issues. The concept is tested in a rapid prototype and afterwards
implemented as a full prototype inside an AddOn.
During the development of the prototype, several technical issues were handled. Solutions were developed for issues such as
Geographical data storage, client to client data sharing and floor
detection in the game world. A tool for unit testing of AddOns
were also developed.
The final prototype were user tested, in addition to the unit
tests done as part of the test driven development used. The
user test showed that the solution has great potential to solve
the problems of lack of diversity and realism in roleplaying, once
implemented in a full version.
2
Reading instructions
The structure of the report is based on normal development flow.
In the first sections (section 1 and 2) the problem is introduced
and it is further analysed in section 3 Problem Analysis. A solution concept is developed in section 4, which is further developed
and specified into requirements in section 5. A prototype is designed and implemented in section 6, which is then tested in
section 7. The test and the overall implementation is evaluated
in section 8. This section also includes short descriptions of the
technical challenges encountered under the implementation. The
details for thse technical challenges are available in appendix D
- G.
3
Contents
1 Technical problem statement
2 Introduction
2.1 Motivation . . . . . .
2.2 Problem statement . .
2.3 Target group . . . . .
2.4 Development structure
.
.
.
.
.
.
.
.
.
.
.
.
9
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3 Problem analysis
3.1 Purpose . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2 Roleplaying mechanics of MMORPGS . . . . . . . . .
3.3 Passive roleplaying and active roleplaying . . . . . . .
3.4 Roleplaying between players . . . . . . . . . . . . . . .
3.5 MMORPGs with active roleplaying between players .
3.6 Lack of diversity . . . . . . . . . . . . . . . . . . . . .
3.7 Lack of interaction . . . . . . . . . . . . . . . . . . . .
3.8 Problematic interface for roleplaying with many people
3.9 Applied solutions . . . . . . . . . . . . . . . . . . . . .
3.10 Conclusion . . . . . . . . . . . . . . . . . . . . . . . .
4 Concept
4.1 Purpose . . . . . . . . . . . . . . .
4.2 Concept Goals . . . . . . . . . . .
4.3 Solution platform . . . . . . . . . .
4.4 Solution Ideas . . . . . . . . . . . .
4.5 Idea selection . . . . . . . . . . . .
4.6 Relevant aesthetics . . . . . . . . .
4.7 Concept description . . . . . . . .
4.8 Dynamics delivering the aesthetics
4.9 Goals for aesthetics and dynamics
4.10 Conclusion . . . . . . . . . . . . .
5 Prototype Requirements
5.1 Purpose . . . . . . . .
5.2 Basis mechanics . . . .
5.3 Mechanics goals . . . .
5.4 Platform . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
10
10
11
11
11
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
present
. . . .
. . . .
13
13
13
13
14
14
15
19
19
20
21
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
22
22
22
22
22
24
24
25
25
26
26
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
30
30
30
30
32
6 Prototype design and implementation
6.1 Purpose . . . . . . . . . . . . . . . . .
6.2 The basic profession system . . . . . .
6.3 Mechanic terms . . . . . . . . . . . . .
6.4 Nearby objects . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
34
34
34
34
34
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
6.5
6.6
6.7
6.8
6.9
6.10
6.11
Perform action system . . . .
Hand item to another player .
Normal usage UI . . . . . . .
Creation UI . . . . . . . . . .
Usage scenario . . . . . . . .
Implementation method . . .
Architecture . . . . . . . . . .
7 Prototype test
7.1 Purpose . . . . . . . . . .
7.2 Technical test . . . . . . .
7.3 First prototype test . . . .
7.4 Final prototype usage test
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
35
36
36
37
37
37
38
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
40
40
40
40
41
8 Prototype evaluation
43
8.1 Purpose . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
8.2 Overall evaluation . . . . . . . . . . . . . . . . . . . . . . . . 43
8.3 Technical challenges . . . . . . . . . . . . . . . . . . . . . . . 43
9 Conclusion
46
9.1 Purpose . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
9.2 Project delimitation and further development . . . . . . . . . 46
9.3 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
References
48
Appendix
50
A Number of roleplayers across MMORPGS
51
B UI Design sketches
53
C Usage scenarios
60
C.1 Usage Scenario 1 - Mine foreman . . . . . . . . . . . . . . . . 61
D Tool for unit testing lua code for WoW AddOn development
D.1 Problem description and analysis . . . . . . . . . . . . . . . .
D.2 Solution concept . . . . . . . . . . . . . . . . . . . . . . . . .
D.3 Implementation . . . . . . . . . . . . . . . . . . . . . . . . . .
D.4 Test and evaluation . . . . . . . . . . . . . . . . . . . . . . . .
5
64
65
66
68
70
E Floor level determination
E.1 Problem description and analysis
E.2 Existing solutions . . . . . . . . .
E.3 Solution design . . . . . . . . . .
E.4 Solution Implementation . . . . .
E.5 Test and evaluation . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
F Geographical data storage
F.1 Problem description and analysis
F.2 Relevant data structures . . . . .
F.3 Implementation method . . . . .
F.4 Test and evaluation . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
90
. 91
. 92
. 97
. 105
clients
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
G Syncronization of datasets between
G.1 Problem description and analysis .
G.2 Related Solutions . . . . . . . . . .
G.3 Solution development . . . . . . . .
G.4 Implementation . . . . . . . . . . .
G.5 Test and evaluation . . . . . . . . .
H UML Class diagrams
I
AddOn
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
72
73
74
75
77
85
107
108
110
112
115
118
123
User test of the initial prototype - Chat transcript
125
I.1 Odo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
I.2 Shelnara . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
J Final user test
132
J.1 Lancl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
J.2 Hinkerburry . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
J.3 Eddard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
K Final prototype screenshots
142
L GHG Pitch
145
6
List of Figures
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Predicted development structure . . . . . . . . . . . . . . . . 12
Concept goals . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Goals for aesthetics and dynamics . . . . . . . . . . . . . . . 27
UI sketch for the quickbar showing equipped and nearby objects 54
UI sketch for the Perform Action UI . . . . . . . . . . . . . . 55
UI sketch for the Profession overview part of the main menu.
Example with a ”skill sum” type project . . . . . . . . . . . . 56
UI sketch for the Profession overview part of the main menu.
Example with a ”unlimited” type project . . . . . . . . . . . 57
UI sketch for the Abilities list in the main menu. . . . . . . . 58
UI sketch for the Custom profession list in the main menu. . 59
Unittest Plugin UI . . . . . . . . . . . . . . . . . . . . . . . . 69
State machine example for a house with 3 zones . . . . . . . . 78
Line intersection example . . . . . . . . . . . . . . . . . . . . 78
Line segment intersection test setup . . . . . . . . . . . . . . 83
Staircase example with 3 floor areas . . . . . . . . . . . . . . 83
Floor determination in action . . . . . . . . . . . . . . . . . . 85
Split rules for kd-trees. Source: Songrit and Mount[9] . . . . 93
Example of a kd-tree . . . . . . . . . . . . . . . . . . . . . . . 97
The standard split (above) and sliding midpoint split (below)
applied to the same dataset. . . . . . . . . . . . . . . . . . . . 98
Performance measurements . . . . . . . . . . . . . . . . . . . 106
DHT inspired solution - Scenario 1 . . . . . . . . . . . . . . . 112
Flowdiagram for scenario 1 . . . . . . . . . . . . . . . . . . . 121
Flowdiagram for scenario 2 . . . . . . . . . . . . . . . . . . . 122
UML class diagram for GHP model . . . . . . . . . . . . . . . 124
The quick bar . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
Handing an item to another player from the quick bar . . . . 143
The ability page . . . . . . . . . . . . . . . . . . . . . . . . . 144
The perform action UI. In this example the user have added
one additional expression . . . . . . . . . . . . . . . . . . . . 144
7
List of Tables
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Problem, maintenance and solution goals . . . . . . . . . . .
Problem, maintenance and solution goals . . . . . . . . . . .
Object terms and meanings . . . . . . . . . . . . . . . . . . .
Number of estimated roleplayers across different MMORPG
titles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Bugs and issues located in the plugin . . . . . . . . . . . . . .
Runtime for the native implementation . . . . . . . . . . . . .
Runtime for the kd-tree . . . . . . . . . . . . . . . . . . . . .
Runtime for the M-tree implementation . . . . . . . . . . . .
Runtime of the solutions . . . . . . . . . . . . . . . . . . . . .
Data list function example for AbilityList . . . . . . . . . . .
Bittorent solution measurements - Scenario 1 . . . . . . . . .
Native solution measurements - Scenario 1 . . . . . . . . . . .
Bittorent solution measurements - Scenario 2 . . . . . . . . .
Native solution measurements - Scenario 2 . . . . . . . . . . .
8
28
29
35
52
71
92
93
95
114
115
119
119
120
120
1
Technical problem statement
It is the purpose of this project to develop one or more AddOns to improve
the quality of role-playing between players in MMORPGs. The focus of the
report is on the overall software development of the AddOn and the technical
challenges that rises in the development phase. The challenges are:
• There is currently no tool that supports unit testing of the AddOns
in an easy way. It is necessary to develop such a tool to fit into the
normal AddOn development workflow.
• In World of Warcraft, there is no access to the z-coordinate for the
players location. This is a problem when the player is located inside a
multi storage building, as the AddOns does not know what floor the
player is located at. The challenge is to create a system that can determine the player floor location from the relative limited information.
• Some of the data for the AddOn depends on x and y coordinates, for
each data point. It is necessary to develop/research and implement an
efficient way of searching the dataset for all points located close to a
given point.
• A central issues for the AddOn, and earlier AddOns, is datasets that
are used by multiple clients. The AddOns in World of Warcraft does
not have access to a server to store data on. Due to this, it is necessary
to develop a method for sharing and maintaining a dataset between
the clients.
9
2
Introduction
2.1
Motivation
MMORPG (massive multiplayer online role playing games) are in a rapid
development currently and has been so over the last several years. The
games often include a lot of mechanics for combat, both between the player
and the computer / environment (PvE) and combat between the player and
other players (PvP). Except for these combat mechanics, there is little focus on the mechanics in regards to rolepaying. Some games got mechanics
for role-playing between the player and the environment and there is only
few basic mechanics and features for role-playing between players. These
basic features available for role-playing between players are often only chatsystems.
Over several years I, the author, have observed and experienced several
areas with room for improvement and problematic situations related to roleplaying. Many of these could possibly be improved by more or better game
mechanics or tools. These observations are mainly done in the game World
of Warcraft (WoW). Examples of such problems are:
• Little diversity in the theme of the role-playing, which have lead to
players quitting the game.
• Unrealistic amount of players in role-playing in a powerful or heroic
role, compared to normal people. This has lead to a less immersive
world and reduced the quality of the role-playing.
• Players looking for role-playing are observed standing idle in public
locations in the game without successfully getting involved in roleplaying with other players.
While different tools and game mechanic can help problems like this,
experiences have shown that it is a balance act. If the mechanics are too
much in focus, it could take the focus away from the roleplaying between
players itself.
WoW allows the use of 3rd party developed AddOns to modify the UI
of the game. This allow for development of tools and mechanics that can
improve the game areas and problems in relation to role-playing. I, the
author, have created an AddOn which is a platform for creating virtual items
inside WoW, called Gryphonheart Items (GHI). This is already widely used
by roleplayers to create props, such as books or trinkets, to enhance and
support the roleplaying experience. It is the intention to extend and use the
platform to create better AddOns for enhancing the roleplaying experience
for the users.
10
2.2
Problem statement
To improve the quality of roleplaying between players in MMORPGs, problems and issues for these players should be analysed. An AddOn concept,
that can improve or solve these problems in the roleplaying interactions,
should be developed through a feature analysis and requirement development, based on research of the problems.
2.3
Target group
The target group for the final AddOn is role-players in MMORPG’s. A further specialisation of the target group would be active roleplayers, who have
roleplayed for a while, since they would be most interested in improvements,
in order to keep it interesting.
The target group for the technical challenges solved as part of the development of the prototype is other AddOn developers, as they systems might
be used by other AddOns.
2.4
Development structure
The development of a solution to the problem will depend a lot on user
feedback. Due to that it is favourable to develop prototypes etc in an agile
manner. Spiral development is determined to be a suitable solution for the
initial phases. It results in a rapid prototype, which can relatively quickly
be used to determine how suited the solution is. Figure 1 is an initial sketch
of the predicted activities in the first iterations.
While the development take place in a spiral form, with several iterations,
it is documented as one process gathering the development and results for
all iterations.
11
Figure 1: Predicted development structure
12
3
3.1
Problem analysis
Purpose
The purpose of the problem analysis is to research the scale and magnitude
of the problem, as well as investigate what solutions have been applied that
have minimized or solved the problem.
3.2
Roleplaying mechanics of MMORPGS
Major part of MMORPGS is encounters, which is lead by quests and progression systems of different kinds.
Pen and paper roleplaying games (PnPRPG) can be more focussed on the
character development and roleplaying between players. However computer
RPGs does not have the same flexibility, as described by an analysis of The
quest problem[19].
”But there is a crucial difference with computer games that applies to both cases, and that is, not everything is predetermined.
This might seem a banal observation, but it is very important
to consider that pen&paper roleplaying games have a human
gamemaster that constantly adjusts the adventure to the playerss actions, acts as all the non-playing characters showing their
personalities with real-time dialogue, and can even change the
hard rules if something is not convenient for the adventure.”[19]
The hard rules and thus inflexibility of the MMORPGs contributes to
the issue for the roleplaying players. In some games these mechanics have
been made less hard, giving the players a less linear path through the game.
This allows for a bit better roleplaying between a player and NPCs (non
player characters).
3.3
Passive roleplaying and active roleplaying
Roleplaying in MMORPGs can be parted up into two types: active and
passive roleplayers. Passive roleplaying is when players roleplay with their
environment through game mechanics, such as dialogs with NPCs and doing
quests. Active roleplaying is when a player roleplay with their environment
through typed dialog. In some cases a players roleplaying can also be a mix
of the two. E.g. a few players doing a quick (passive roleplay) while spicing
it up with dialog between their characters (active roleplay). The active
roleplaying often requires the presence of other players, but technically it
can be done alone as well.
”I had always assumed that the RP in MMORPG was ironic.
After all, most MMORPGs have had to deliberately set aside
13
designated role-playing servers, and these have always been in
the minority. This suggested that role-playing wasnt something
most players wanted to do in an MMORPG. At the same time,
it was clear that a role-playing subculture existed that operated
with its own rules and etiquette.”[21]
Active roleplaying often requires more work from the participants to keep
flowing and keep alive. There is very limited content, mechanics and help
given by the game itself to inspire and sustain the active roleplaying.
”Role-playing is almost impossible within MMORPGs, even ones
with such a developed world background as World ofWarcraft.
The game absolves itself of responsibility, sets no rules, and gives
no guidelines on how to role-play within its structure. Roleplaying realms are in the minority, with many players choosing
not to or being unable to assume a character within the game.
There are no gains from role-playing. A priest who holds a roleplaying event in a church does not gain extra points.
...
These conditions makes the act of role-play an act of deviance
within the text of World of Warcraft, one which tries to distrub
the game’s gameplay elements.”[5]
3.4
Roleplaying between players
The quest systems and other mechanics allows for some roleplaying between
the player and the environment (the NPCs). Some roleplayers does however
seek roleplaying with other players, but there is much fewer games and
mechanics for that. Especially active roleplaying (see section 3.3) requires
interaction with other players to work.
3.5
MMORPGs with active roleplaying between players
Some mmorpgs have acknowledged the special focus and interests of the
gamers who prefer to engage in active roleplaying inside the MMORPG and
have created specific realms, servers or in other ways separate world instances for these players. This is often accompanied with special rules that
requires players to respect the roleplaying of other players.
An analysis of which MMORPGs have the largest amount of active roleplayers can be seen in appendix A table 4. From the analysis it can be seen
that the majority of the estimated amount of roleplayers is to be found in
World of Warcraft. It could be interesting to research the presence of the
problems in some of the other games with many roleplayers, such as Star
Wars - the old republic and Rift.
14
3.6
Lack of diversity
While playing World of Warcraft (WoW), I have frequently observed comments from other players that confirmed the problem with lack of diversity
in roleplaying (RP). This is also seen on the official World of Warcraft forum.
A frequent comment or complain from roleplayers is the lack of diversity
in the theme of roleplaying. This can be seen mentioned often on the WoW
forums.
”Have to agree, most guilds come down to a military based concept, some form of fighting unit in armour and with surcoats
and the like. Guards, bandits, soldiers, mercenaries, random
elite dudes. There’s more than that, but makes up the most of
the guilds I see anywhere. All the guilds that include Battalion,
Regiment, Order, Guard, Unit, Company and the like in their
names come down to this and I mean no offense to them, clearly
they are successful and popular, but there is not a lot of diversity
between them.
Stomwind for example is a quite well guarded town, but 90% of
the RPers wear armour and carry large/many weapons. Why are
there so few actual civillians? It feels like some sort of military
fort with everyone walking around like a tin can.”1
”Civilians are generally played as alts or based on short-lived
impulse. Those who play civilians full-time and longer than a
few weeks are rare individuals. No ground sturdy enough to
found a long-lasting guild on.” 2
”Problem is, there’s far less for a civilian to react to. A warrior
has many a unique situation - discussing tactics, engaging the
enemy, conflicting morals, battlefield comradeship.
A civilian has very little to play with that we don’t have in our
everyday life. To properly develop, they need other civilians, to
create drama, stories, interesting situations.
Problem is, nobody roleplays civilians. At least, not what’s defined as ”proper” ones.”3
1
http://eu.battle.net/wow/en/forum/topic/3553606041?page=2#24
http://eu.battle.net/wow/en/forum/topic/5616541745
3
http://eu.battle.net/wow/en/forum/topic/5616541745#3
2
15
The lack of economy/profession/civilian related roleplaying is often mentioned by users on the wow forum. Many of the posts involves different ideas
and proposals for systems that could solve the problem on a community basis.
”The problem with using wow’s gold is that it isn’t gained in a
IC manor. As in a general rich noble isn’t going to learn mining
and go travelling hitting rocks with a piece of metal. This would
also give a opportunity for chars to actually gain the gold by
maybe making a shop or something.” 4
”Anyways, the whole point of this post is to try and perhaps
set some rules reguarding in character money, hopefully making
Roleplay easier and alittle more coherant.” 5
The large presence of hero and military based guilds also seems to have
impact on the realism and immersion of the roleplaying. Some players finds
that a problem.
”Today I would like to ask you why we don’t have commoner
roleplay? In my opinipn such roleplay will bring a lot of ”life”
to capital cities making the immertion much better. It would
be great aeeing merchants around with the goods , drunkards
brawling and rest of commoner stuff.
Why we don’t have such roleplayers? Maybe becouse they prefer
to wear shiny armours and titles? Seeing the social pyramid in
roleplay could be interesting enough to see difference in behaving,
their needs and worries.” 6
Different roleplayers have given their own answer to the about the above
question. Some of these are:
”Sure, would be nice to have, but most people, including me,
don’t find roleplaying commoners as fun.” 7
”I whole-heartedly agree with you - it would bring more life to the
greater cities - yet it seems the majority finds it more worthwhile
to RP the ”hero”/”villain” on a slightly more epic scale” 8
4
http://eu.battle.net/wow/en/forum/topic/4552506600?page=1
http://eu.battle.net/wow/en/forum/topic/3980578108
6
http://eu.battle.net/wow/en/forum/topic/5058396020#1
7
http://eu.battle.net/wow/en/forum/topic/5058396020#4
8
http://eu.battle.net/wow/en/forum/topic/5058396020#6
5
16
”It has been initiated - and still is, all the time, by numerous
guilds. Some guilds, I understand, (such as Gutter Runners,
Fablewind Faire) are based entirely on commoner concepts. But
considering the overall consensus of the server, the majority of
players doesn’t seem to find enough thrill in commoner RP, but
rather drift towards military, magic and those high ranks and
fancy titles.” 9
”The major ’issue’ with commoner rp - people have to create
their own rp at the end of the day. Anyhow - what they bring
to rp? Immersion for rpers! I’m sure a civilian reacts more
impressed on a story told by a soldier then if he/she would tell
it to another soldier, just to give a quick example. They make
the world feel more alive. For example; Stormwind would be
horribly dull if only nobles and military chars would remain no?
Just imagine not having TGR around! Who would you have to
chase trough Stormwind to get your pouch back!?
Promoting civilian rp? Well... It is never wrong to promote a
guild or what so ever, yet I simply think there is a lack in interest
in rping these characters, for the reasons given by me above, and
by others. And still the rper is mostly dependant onto creating
their own rp, whereas a lot of people prefer to join military guilds
to get spoon-fed with it.” 10
Some of the initiatives to promote civilian roleplaying have been creation
of guilds (a grouping of 10 to 200 players) with civilian roleplaying themes.
An example of these is The Heedemark Trading Union on the Argent Dawn
(EU) server. An interview was conducted with Reghall, the leader of this
guild.
Q: What themes and experiences do you think brings/brought
players to your guild?
A: Ah, that is a tricky question right away - well, honestly I
think that ”market” rp is something that a lot of people actually find appealing - I know from experience, having a local
medieval fair every year, in general I feel people are interested in
all aspects of their characters lives, making a living and having
a trade is also part of it.
The idea of traveling with a group of fellow merchants bring
9
10
http://eu.battle.net/wow/en/forum/topic/5058396020#7
http://eu.battle.net/wow/en/forum/topic/5058396020?page=2#24
17
one to think of fun and good times, at least they do for me.
Sadly I also think that market RP won’t appeal to everyone,
since it usually lack the.. shall we say ”omph” that military RP
- or similar more conflict ridden RP offers.
While market RP also can offer ”conflict” its usually more subtle, and often involves spoken word rather then sword and wand
tips - as it where.
So in short; I think its the idea of living into your character
”more” that brough in players to the guild.
Q: What lack of themes or experiences would you then think
would keep some players from joining the guild?
A: Like I already discussed - I think the lack of ”action” is
something that turns people away - after having talked to several
potential members that rejected the idea because ”It sounds a
bit tame”, I also think that the market RP can put some people
off as it forces you into a more serious mindsetting - some people
enjoy mindless and a bit more, um ”free spirited” RP.
I think, perhaps having something that could ”spice it up” could
be what would bring more people to the table, making it more
action packed I guess.
Q: What do you think makes players go inactive from the guild
or leave the guild?
A: Honestly? I think its down to people not enjoying themselves, if things were going smoothly - and there were things
that they enjoyed, they’d be active - but people generally tend
to put things away once they get boring, and uninteresting - In
hindsight - perhaps introducing ”rewards” or something similar
would have been a way to keep peoples attention, even if its just
breadcrumbs.
Q: Do you believe that a set of game mechanicals suited to support trade and profession roleplaying would improve the situation for the guild?
A: Well, naturally - GHI and TRP2 offered item creation, and
that alone sparked peoples interest - usually people had items
made long before they started selling, of course the opposite were
18
true, people shunned away from downloading addons in general
and instead refused - and even left because of it.
But in general, adding more options in the game, as in say allowing people to have some manner of way to visually improve
their characters trading skills - or in other ways ”enchant” their
trades.
I found that the trading part was shown to be hard - as in,
people usually felt it a bit clunky to emote and -then- trade an
item via the games trading function.
Q: For closing, is there anything you would like to add?
A: Well, I think I covered the most important really so no.
The interview shows that the attempts on creating more diversity in the
roleplaying have faced several issues. Some of these issues were also mentioned in the forum post about the topic. Overall some of the main issues
that stops players from choosing e.g. the role of a civilian is:
• Not much action such as combat
• Lack of development or feeling of progress
• Lack of reason to interact. E.g. merchants having lack of customers
• Too much like the real life
The issues are counterweighted by several positive sides of the civilian RP,
which causes some to try out the civilian RP and a few to stick with it more
permanently.
3.7
Lack of interaction
An interesting observation from inside the game is that roleplayers tend to
gather in specific roleplaying hotspots. At these hotspots some engage in
roleplay with each other, but a surprising amount of the roleplayers present
there seems to be standing still and not interact with other players. They
are however passively seeking roleplay.
3.8
Problematic interface for roleplaying with many people
present
Over my years of roleplaying in WoW I have faced some problems with the
basic interface of the game as a tool for roleplaying. There is only the basic
19
chat/emote system to perform the roleplay. Jill Walker Rettberg, Professor
at University of Bergen, also describes this problem at her blog.
”I think the main problem is that the interface is not at all optimised for role-playing. The visual and gestural interface works
well for fighting and exploring, but is very limited for interpersonal communication other than attacking each other.”11
She had done her observations in a roleplaying event on a roleplaying
server, involving a lot of players, where the amount of communication around
her made individual roleplaying drown in the sea of others roleplaying chat
messages. The user interface (UI) in WoW allows some standard means
of communication, such as normal talk (/say), yelling and whispering to a
specific person. In addition you can also do an emote, which is either a
predetermined action (such as waving) or a custom text, where the player
can describe to others what he/she is doing. This is the same tools as old
text based roleplaying games. Some of the problems with this system can
be:
• There is a lot to read (and easily missed) when there is a lot of people
in one place (as mentioned above).
• It takes a long time to respond with custom emotes.
• There is limited possibility of making character animation etc fit to
the situation.
• It is not possible to see when others are about to say something, resulting in players talking at the same time, creating a fragmented
conversation.
These issues is the everyday of most roleplayers. It can be assumed that
most players have gotten used to working in the environment with these
problems.
3.9
Applied solutions
Roleplaying have been in WoW since it was launched in february 2005.
Over these 7 years the roleplaying have stabilized into the form described so
far, but meanwhile there have been some solutions, in form of AddOns, to
partly solve some of the problems, improve the situation or in general help
the roleplayers.
• A number of different chat addons, allowing for a more pleasant overview
of all the chat.
11
Jill Walker Rettberg, http://jilltxt.net/?p=1638
20
• Different flag addons, allowing roleplayers to display their character
information. E.g. flavor such as their characters lastname, title, appearance and as well if they are currently looking for roleplaying or
not.
• AddOns allowing users to create their own roleplay items (that does
not influence the official game mechanics) such as books, heirlooms or
other props for roleplaying. One of these addons have been developed
by myself, as previous actions to improve on the roleplaying.
There have so far been very little improvement for active roleplayers from
the game developer of WoW (Blizzard entertainment). However some of the
improvements implemented to the passive roleplaying community, which is
the vast majority, have been an improvement for the active roleplayers as
well.
The flag addons includes a solution for the lack of interaction between inactive roleplayers. In the flag addon, they can show that they are interested
in other roleplayers contact them.
3.10
Conclusion
MMORPGs often contains quest or similar encounter systems as their core
mechanics. These systems are designed for players doing passive roleplaying,
but this results in a lack of game mechanics that supports active roleplaying
between players. This gives some problems for active roleplayers such as:
• Lack of diversity in player roleplaying themes
• Lack of interaction between players
• Problematic game interface for roleplaying
21
4
Concept
4.1
Purpose
The purpose is to determine the precise goals of the concept. This includes
the users goals and needs. This allow to create an overview of how the goals
and needs enforces each other or how if they obstruct each other. A concept
design should then be developed based on the goals determined.
4.2
Concept Goals
From the problem analysis the following goals for an overall solution can be
derived. It is not certain that one solution should solve all problems, but
they should be included in the goals, to analyse if they obstruct each other,
to avoid enlarging another problem when solving one.
Among the goals from the problems are also a few maintenance goals,
which can be improved by the solutions to the other goals, but must not be
worsen. The sturcture of the goals can be seen in figure 2. The goals are
listed in table 1.
4.3
Solution platform
As discovered in the estimates of active roleplayer community size (ref),
WoW seems to be the primary target for a solution to these problems. In
addition to this, WoW offers a large degree of open user interface, which
allows for 3rd party AddOns to modify the UI experience. This is however
limited to modifying the user interface, meaning that the 3D game world
can not be interfered with, except for a limited API for the normal UI
functionality. The AddOn execution area is placed in a sandbox, which
restricts it from communication with anything but the provided API.
4.4
Solution Ideas
Civilian Roleplaying
WoW, as well as most other MMORPGs with dedicated RP realms, is based
on a medieval world, with some degree of steam punk and high fantasy elements12 . Since one of the goals for the solution is to improve or at least
maintain realism, it could be a good start to consider how the everyday life
were in the medieval times.
Overall the everyday life of people in the medieval times can be said to
focus on, obtain or maintain wealth or power. That could be through trade,
12
http://en.wikipedia.org/wiki/World of warcraft
22
Figure 2: Concept goals
social hierarchy or religion13 . Looking at the comments by players in ref,
it can be seen that the majority of guilds are military based, which often
got a social hierachy, which seems to be driving force in that concept. This
element could, together with the two others, could be applied to strengthen
civilian RP.
Derived from this, a solution could be to build a system that supports
trade, social hierarchy and religion. This solution would is estimated to be
able to cover most of the goals, to some degree.
Quick replies
One of the issues contributing to the problem regarding interface for roleplaying is the time it takes for a user to reply to other players emotes. E.g.
if two players, who are roleplaying actively, pass each other on a road, one
could nod towards the other one, as a casual greeting. Normally the other
player would like to nod back to the first player as a response.
A solution to the problem could be to implement a system that allows
for a player to respond to such situation with the click of one button, which
then posts a reply. This could however conflict a bit with goal #6 (Maintain
active roleplay), as these automatic responses resembles passive roleplay
mechanics. This conflict could however be limited by letting the player
predetermine the responses to different situations themselves. This would
also maintain the possibility for creativity from the player.
13
http://www.themiddleages.net/people middle ages.html
23
Voice synthesizing of chat
Another issue in the interface for roleplaying can be the immersion of reading
text, which is in general lower than if the sentences were spoken in voice by
an actor.
”More live, voice over dialogs would certainly be a good thing,
and would help you get into character and the environment much
more quickly then reading dialog would.”14
A great improvement to the immersion for roleplayers (Goal #5) could
be to make a system that automatically voice the text of the roleplayers
using speech synthesis. Such system could also be used to voice the in-game
quests and its flavor texts. That solution holds a large potential, as it could
also be of large interest for passive roleplayers, which is that vast majority.
4.5
Idea selection
For the first iteration of spiral development it would be favorable to select
one solution on work on implementation of this one. It is chosen to first
focus on the civilian roleplay solution, since it have potential to also solve
or partly complete goal #3 and its child goals.
4.6
Relevant aesthetics
Goal #9 states that the player should be given the feeling of progress or
similar aesthetics. This term is based on the MDA (mechanics, dynamics,
aesthetics) framework[13]. This framework describes the that the mechanics
(the components of the game) delivers the dynamics (the behavior of the
game) which then results the aesthetics (the emotional response) from the
player.
This framework allows to develop the concept from the aesthetics point
of view, instead of starting from the game mechanics. This results in the
possibility to control that the chosen dynamics and mechanics results in the
desired aesthetics. This is important for this concept, because the goals
requires that the player maintain specific emotional states. A key example
of this is the goal of maintain the focus on active roleplaying. If the system
is implemented with focus on mechanics, such as skinner box methods, it
could very easily result in the user changing into being passive roleplaying
through the mechanics.
A selection of aesthetics that could be relevant for the system for the
idea is:
14
http://us.battle.net/wow/en/forum/topic/6713012679?page=1
24
• Expression - Self discovery (acting out the character in roleplaying)
• Fellowship - Social interaction with other players
• Discovery - Exploration and discovery of, to the player, unknown
things
• Fantasy - Using imagination and creativity to create
• Dependence - Seeking other players dependence on you and reason to
interact with you
• Action - The feeling of high phased and risky interaction
The listed aesthetics can play a key role in the choice of dynamics, in order
to secure the intended reaction from the players.
4.7
Concept description
The system should support trade, social hierarchy and religion. It should
improve the civilian RP by provide action, give the feeling of progress or
similar aesthetics and give more reason for interaction between active roleplayers. The following concept is developed to fit these goals.
A system that allows players to choose one or more professions
in order to gather materials, craft items or perform services for
other roleplayers. The gathering of wealth allow the player to
progress in a social hierarchy. The professions should be tied
together in an economical system, creating demands for goods
and services from other players in order to progress.
4.8
Dynamics delivering the aesthetics
The following is examples of dynamics that can deliver the desired aesthetics
within the concept.
• Expression:
– The player should be able to choose their own combination of
professions. Being a specialist in one, or a jack of all trades.
– The players should be able to define their own profession to fit
their character
– Let the players chosen background have impact on their strengths
and weaknesses
• Fellowship
25
– Encourage players to use networks to get trade relations and improve income.
– Have competition between players
• Discovery
– Ability to discover new combinations of materials to create or
perfect new goods
• Fantasy
– Ability to define your own profession (see expression)
– Inspiring but realistic fantasy items and professions.
– Create more living cities by civilian RP
• Dependence
– Having the economic system result in demand on goods from
other players.
• Action
– Ability to choose a way to obtain items thats include a risk of
loss, but is also more rewarding.
4.9
Goals for aesthetics and dynamics
The concept goals (table 1) can be expanded using the selected aesthetics
and the suggested dynamics. The result is the goal relation seen in figure
4.8 and goals described in table 2.
4.10
Conclusion
The platform for the solution is selected to be world of warcraft, because it
holds the majority of active roleplayers and allows for implementation of 3rd
party AddOns to modify the UI. Three solutions is suggested to solve the
problem: Civilian roleplay system, quick replies and voice synthesizing. The
civilian roleplay system is selected for further development at this point, as
it holds potential to complete the majority of the goals. A set of relevant
aesthetics is selected in order to deliver the desired emotional reaction from
the player using the system. The concept is described and ideas for dynamics
that is delivering the selected aesthetics is pitched.
26
Figure 3: Goals for aesthetics and dynamics
27
No.
#1
Goal
Improve diversity
in RP
#2
Increase interaction
#3
Improve interface
for RP
#4
Maintain / improve realism
Maintain / improve immersion
#5
#6
Maintain
roleplay
active
#7
Improve
RP
civilian
#8
Provide action
#9
Give the feeling of
progress or similar aesthetics
Give more reason
for interaction
#10
#11
#12
Provide a way to
react fast in RP
Provide a way
to for players to
use gestures and
mimics in RP
Description
There should be more diversity in the themes of roleplaying
Inactive roleplayers should be
given more reason, encouragement and help to interact with
other roleplayers.
Improve the user interface
for better interaction between
roleplayers.
The realism of the fantasy
world must be upheld.
The immersion of the roleplayer must be maintained or
improved
The tool should not change
active roleplay into inactive
roleplay
The quality and attractiveness of civilian RP should be
improved
More action should be provided in civilian RP
Civilian RP should have a
feeling of progress or a similar
aesthetics
There should be more reason
to interact with others when
doing civilian RP
There should be a quick way
to react to things in RP.
It should be possible for players to use more detailed gestures and mimics in RP with
other players
Level
Problem
goal
Problem
goal
Problem
goal
Maintenance
goal
Maintenance
goal
Maintenance
goal
Solution
goal
1
Solution
goal
Solution
goal
7, 5
4, 6
7
6
Solution
goal
2, 6, 7
5
Solution
goal
Solution
goal
3, 4, 5
Table 1: Problem, maintenance and solution goals
28
Supp. Obst.
3,4
No.
#13
Goal
Expression
#14
Action
#15
Discovery
#16
Fantasy
Description
Self discovery (acting out the character in
roleplaying)
The feeling of high phased and risky interaction
Exploration and discovery of, to the
player, unknown things
Using imagination and creativity to create
#17
Fellowship
Social interaction with other players
#18
Dependence
#19
Combine
sions
#20
Impact of character background
Custom professions
Optional
risky
gameplay
Seeking other players dependence on you
and reason to interact with you
The player should be able to choose their
own combination of professions. Being a
specialist in one, or a jack of all trades.
Let the players chosen background have
impact on their strengths and weaknesses
The players should be able to define their
own profession to fit their character
Ability to choose a way to obtain items
thats include a risk of loss, but is also more
rewarding.
Ability to discover new combinations of
materials to create or perfect new goods
#21
#22
#23
#24
#25
#26
#27
#28
profes-
Discover
new
recipes / item
combinations
Inspiring but realistic
Living cities
Network for trade
relations
Competition between players
Other players demanding goods
Inspiring but realistic fantasy items and
professions.
Create more living cities by civilian RP
Encourage players to use networks to get
trade relations and improve income.
Have competition between players
Having the economic system result in demand on goods from other players.
Table 2: Problem, maintenance and solution goals
29
Level
Aesthetics
goal
Aesthetics
goal
Aesthetics
goal
Aesthetics
goal
Aesthetics
goal
Aesthetics
goal
Dynamics
goal
Supp.
5, 6, 9
8, 9
9
5, 9
9, 10
9, 10
13
Dynamics 13
goal
Dynamics 13, 16
goal
Dynamics 14
goal
Dynamics 15
goal
Dynamics
goal
Dynamics
goal
Dynamics
goal
Dynamics
goal
Dynamics
goal
16
16
17
17
18
5
Prototype Requirements
5.1
Purpose
The purpose of the prototype requirements is to specify how the prototype
should result in the suggested dynamics (see section 4), by specifying it
mechanics. It is also included to validate that the mechanics does not conflict
with any of the goals. Attentions should be paid to the potential obstructions
illustrated in figure 2.
5.2
Basis mechanics
The concept description describes a profession system that can hold features
which can complete several of the goals. The basic concept contains a selection of professions that either gather items, or craft items out of other items.
The basic functionality have the following functional / mechanics goals:
• Display the users inventory of items.
• Allow the user to trade items with other users.
• Allow the user to select professions from a list of professions
• Each profession contains several different abilities
• Each ability can consume items, require items and / or produce items.
5.3
Mechanics goals
The concept description suggests dynamics about a profession system that
can be interpreted into mechanics goals, which enforces the dynamics. Mechanics that can enforce the dynamics are selected through a brainstorm as
well as a research in already existing games. Each of these mechanics are
then evaluated using de Bonos 6 thinking hats15 .
Goal #19 - Combine professions
The player should be able to choose their own combination of professions.
Being a specialist in one, or a jack of all trades.
• Two tiers professions. You can chose tier 1 and tier 2 of a profession
or tier 1 of two different professions
• Dynamic points. You have a fixed max sum of skill points
15
http://www.debonothinkingsystems.com/tools/6hats.htm
30
Goal #20 - Impact of character background
Let the players chosen background have impact on their strengths and weaknesses
• Let the player select between different perks in each category, such
as race, origination, social status, childhood etc. These perks can be
selected either all at once or over time,
• Let the player choose e.g. 2 traits. Traits can e.g. be a special talent
your character has or a something for his/her upbringing. This is
inspired by the pen and paper RPG called D&D Pathfinder.
Goal #21 - Custom professions
The players should be able to define their own profession to fit their character
• Allow the user to create their own profession within a set of value
rules. E.g. an item with value X should take Y seconds to gather and
should have a rarity of Z.
Goal #22 - Optional risky gameplay
Ability to choose a way to obtain items thats include a risk of loss, but is
also more rewarding.
• A system for committing criminal activity in the roleplay. This adds
the risk of getting caught.
• Make difficult stuff with the risk of failing and thus losing the materials.
Goal #23 - Discover new recipes / item combinations
Ability to discover new combinations of materials to create or perfect new
goods
• Perfect a craft by adjusting the ingredient ratio.
Goal #24 - Inspiring but realistic
Inspiring but realistic fantasy items and professions.
• Let items in the profession system be inspired by ingame locations,
names, cultures etc
31
Goal #25 - Living cities
Create more living cities by civilian RP
• Let players crafting, trading etc result in emotes. It should be non
automatic emotes to avoid conflict with goal #6.
• Let the transportation of wares be realistic, giving more traffic around
cities and on roads, compared to people running or flying quickly between points.
Goal #26 - Network for trade relations
Encourage players to use networks to get trade relations and improve income.
• Give players a game mechanical for handing out credits or discounts
to other players
.
Goal #27 - Competition between players
Have competition between players
• Allow players to offer discounts to other players.
Goal #28 - Other players demanding goods
Having the economic system result in demand on goods from other players.
• Have the different profession depend on each other enough to ensure
the need for trade
5.4
Platform
Over the last few years, I (the author) have developed an addon that makes
it possible for players or other addons to create custom made items. This
system have been designed as a platform for a profession system like this.
The addon is named Gryphonheart Items (or GHI for short) and currently have an estimated user base of around 20.000 users.
In addition to serve as a good platform for the final system, then the
addon also holds a high level interface, intended to be used by creative players. It is possible to use this interface to implement a lightweight prototype,
which can be distributed to user of GHI without further download. This
32
gives the opportunity to test the concept of the prototype in a test community relatively quickly.
The profession system will be implemented under the name Gryphonheart Professions, or GHP for short.
33
6
6.1
Prototype design and implementation
Purpose
The purpose is to determine how the prototype should be implemented.
This includes design of the implemented systems. The section also includes
the implementation of the system.
6.2
The basic profession system
The core of the designed solution is a profession system. A profession system would allow the user to select a profession for a set of professions. Each
profession can then gather or process materials. The materials are then required by other professions and by that by other players.
In general each profession includes several abilities. An ability can require objects or items to be activated and can then produce or modify item
and objects when activated. Examples of this is to mine a mining node.
This would require an object (the mining node) to be nearby and would
require the player to have an item (such as a pick axe) equipped. When the
ability is done, it have then produced an item (the iron ore).
A very basic example is a profession system in which there are two professions: Mining and Blacksmithing. The miner can provided the blacksmith
with metal, but requires tools. The smith can provide the miner with tools,
but requires metal. This system have great possibilities for being scaled as
the development progress, by adding one or more professions.
6.3
Mechanic terms
The prototype includes a lot of different kind of data objects, such as items
and abilities. In table 3 these objects and their meaning are explained.
6.4
Nearby objects
Since AddOns are limited to only interact and modify the user interface of
the game, then they can not modify the game world. This gives a challenge
in terms of how to display what objects (e.g. mining nodes, an anvil, stuff
on the ground etc.) are close to the player.
A solution for the display of nearby objects as a list of icons, where the
first in the list is the closest object. The distance and direction to the object
is displayed in the object tooltip, as text. E.g. ”10 meters north east”. The
list of nearby objects could be combined in a UI with related information,
34
Name:
Item
Ability
Profession
Object
Profession system
Description:
Physical objects that can be
carried
A physical action
An area of expertice where a
person knows a lot
A physical object in the world
that is not intended to move
A set of professions designed
to interact with each other
Example:
A book, a chuck of iron
ore or a pick axe
Fetch water or Mine a
rock
Blacksmith or miner
A cave rock or a large
wooden table
N/A
Table 3: Object terms and meanings
such as equipped items and a menu button. A sketch for this Quick Bar UI
can be seen in appendix B figure 4.
The Quick Bar UI is designed to be small and light weight, since roleplayers in general prefer as little UI as possible while roleplaying. It is the
intention that all interaction with the profession system should follow the
same design as GHI: simple in the top, but advanced in the bottom. This is
achieved by letting the Quick Bar be opened by pressing a button at the side
of the GHI button. From the Quick Bar the user can then dig deeper into the
AddOn by pressing the menu button. Pressing this button shows the menu
for professions overview, abilities etc. (see section 6.7). From that menu,
there are further access to menus for creating professions, attributes etc.
This method of reviling complexity as the user digs deeper down have been
used in GHI, which users have pointed out as a very successful characteristic
of the AddOn.
6.5
Perform action system
A core element in active roleplaying is the typed and creative descriptions
put into emotes16 and says17 . The idea of semi automating this, as part
of the profession, could be relevant, but it would remove the creativity in
roleplaying too easily, which would counter one the purposes of roleplaying (obstruction with goal #6. A better solution is to tie the expressions
(emotions and things said) together with the progress of doing an ability. In
practise this can be done by requesting an expression from the user in order
to let the ability progress.
16
17
orange messages describing an action to characters around you
white message being said, visible to the characters around you
35
The first prototype tests solves the perform UI with a standard dialog
box. In this the player can type what he want to say or emote. Tests
of the prototype shows that this approx confused the user and that it did
not have the roleplaying feel to it. The UI for these expression requests
should then have a stronger connection to the chat boxes normally used for
expression. In order to achieve this familiarity, the design of the UI is based
on the chat box and its simplicity. A concept sketch for this approach can
be seen in appendix B figure 5. It is the regular chat box, but shown in
the middle of the screen, in order to get the users attention. It got a few
additions, such as the ability to select between emote and say, as well as
adding more expressions to be executed after the first one. All functionality
are implemented with a UI design that matches the lightweightness of the
normal chatbox.
6.6
Hand item to another player
A quite central functionality in the system is to give an item in your possession to another player. The GHI AddOn have been dealing with items and
transferring of items between players for years. It uses the normal ingame
trade system for these transfers. The ingame trade system are designed
around ”something for something” trades, which work less well, when the
case of one player wanting to just give a single item to another player. Due
to this, it would be relevant to design a system for handing a single item
to another player. It should be lightweight and have as few steps as possible.
The result is a system where the user can right click on an item equipped
in their main hand and then choose ”hand to ..”. This brings up a list of
the nearby players and the target player can then be chosen. If the player
is nearby, he will receive a dialogbox, asking if he want to accept the item.
6.7
Normal usage UI
It is necessary to have a UI for the normal usage. The functionality of this
UI is to display information about the professions, such as what professions
the player haves, display a list of his abilities (from where the abilities can
be dragged to the normal ingame actionbars) and allow the user to add new
professions to the profession system (see section 6.8.
The user reaches this menu from the quick bar, which means that it can
hold a larger amount of information, but should still be intuitive to use.
Since the game already have similar menus for the official game abilities and
professions, then it could be a good solution to base these menus off their
official counterparts. This ensures that the users will encounter them with
some degree of familiarity. Sketches can for these UI menus can be seen in
36
appendix B figure 6 to 9.
6.8
Creation UI
A central part of the AddOn is the ability for players to be creative and
contribute with their own profession. This is a functionality that might not
be used by every user, but could be used extensively by some users. Based
on the experience drawn from similar menus in GHI, then it is relevant to
design menus on at least two different abstraction levels: A normal menu,
with submenus with more details and a wizard style menu, which guides the
user in creating professions step by step.
6.9
Usage scenario
As the roleplaying experience is quite central, a usage roleplaying scenario
have been developed. It is an example of usage and gives a shows the
intended flow with dialog and AddOn functionality in the roleplaying session.
The scenario include some of the functionality described in the previous
subsections. The usage scenario developed can be seen in appendix C.
6.10
Implementation method
As many of the concept relies on assumptions of the roleplaying community’s reaction on the system, then it is considered a valuable idea to release
a rapid prototype relatively fast in the process to test if the concept holds.
The system can be implemented into GHI by creating an item for each item
and ability in the profession system. The items then holds one or more
scripts and dynamic actions that can be executed, when interacting with
the item or ability. Interaction between the items and abilities can be done
through the GHI API[20]. In this way, the majority of the coding needed is
already given. This method is however only use full for the fast prototype,
as the system is inflexible when more functionality should be implemented.
After the first concept prototype, further prototypes should be implemented in a more permanent and flexible manner, as an AddOn. Lua is
not OO18 , but it is possible to mimic classes using tables. In this way the
solution can be implemented OO. The UI can best be implemented in the
same way as the official game UI is implemented, in XML. An exception
to this is creation menus, which can be faster to implement using the API
provided in GHM19 .
18
19
object orientated
Gryphonheart Menu. A library for menus included in GHI
37
6.11
Architecture
The general architecture is inspired by the MVC20 pattern and can be
summed down as Model-API-UI. The UI calls an API function, which does
checks and modifies or gets information from the model which is returned
to update the UI. The API also works as a security membrane between the
GUI and the Model. This approach is chosen to in order to let the users
scripts also interact with the API. In this way all the functionality that is
presented to the UI can also be presented to the users who seeks to create
special items, abilities or professions that interact with the system. This
gives even stronger possibilities for creativity in the user generated content.
The UI can not be requesting information from the API on every single
frame update, so it is necessary for it to known when data is changed. There
are two relevant approaches to this problem:
1. Let the UI (or script) supply a callback function in the functions. The
api then calls this callback function when data have changed
2. An event system where the UI (or script) registers a function that
should be called when a certain event occurs. The model then executes
all the functions registered for a given event, when this event happens.
It is chosen to implement the event system, as it scales better than the
callback function solution
Many of the objects used in the system (as listed in table 3 are implemented as data objects. It is however relevant for some of these to exist
multiple times. E.g. there is more than one pick axe in the whole system.
Due to this, it is relevant to have instances of this object. A classic way
of doing that would be to have multiple instances of the object where each
instance can be modified. This can however be optimised by using another
system, since most information across instances of the same object would be
the same. This results in a system called Object(Template) - ObjectInstance
- ObjectList. The object serves as a template and holds all the default information. The object instance holds the information that is specific for the
instance. It typically draws the rest of the information from the object. The
object list is used for the objectInstance and other relevant classes to find
the object template. This system is used for all the objects listed in table
3. The names of the three classes are then X, XInstance and XList, where
X is replaced with the name of the object (e.g. Ability or Item).
20
Model-View-Controller
38
The Template-Instance-List pattern can be seen applied in the UML
class diagram for the model in GHP (see appendix H). The pattern is applied to Profession, Abilities, Profession Systems and Objects.
39
7
Prototype test
7.1
Purpose
The purpose of the prototype test is to gather test data that can be used to
evaluate the prototype. The test data can be gathered through a user test.
7.2
Technical test
The implementation of the AddOn have been done mainly through TDD.
This have helped secure the correctness of the implementation to a large
degree. Errors were discovered while implemented. A raw estimate is that
around 50% of the errors had root in the implementation while the other
50% were errors in the unit test itself. In both cases, these were fixed as
part of the implementation.
Some errors slipped past the unit tests and were first discovered in the
ingame tests and the user tests. This were typically errors related to special
cases in the game, not simulated by the unit tests, such as issues with
retrieving coordinates while the user is actively browsing the ingame maps.
There were also some initialization errors, which got discovered when using
the system ingame, such as the kd-tree module not giving correct errors when
an empty tree was attempted created. There were also some errors related
to the interfacing with GHI. These were a variety of both missunderstanding
of the API and direct errors in the API for special cases. In some cases the
GHI API had to be expanded.
7.3
First prototype test
The purpose of the first prototype test is to see if the concept improves the
roleplaying experience as intended. This is checked through an user test.
The first prototype holds three different aspects:
1. The general gathering profession concept
2. Displaying of nearby objects
3. Use emote messages as part of the profession
Each of these aspects should be evaluated in the user test. The test
can be executed by giving the prototype to a few users, with just the basic
instructions abouts its purpose.
Typical questions to the subjects before the test:
• Are you interested in civilian roleplay. Why / why not?
40
Questions for after the test:
• Do you feel that the solution makes profession roleplay more interesting?
• Did the display of nearby and equipped objects work fluently for you?
• How did you feel about the emote driven abilities?
A user test of the initial prototype were carried out on a few test subjects. The transcription of the interviews conducted with them can be seen
in appendix I. In general the user test can conclude that the system have a
good chance of improving the roleplaying for the players interested in doing
civilian roleplaying. It might be less relevant for players who focus less on
civilian roleplaying, but it could inspire more to try it.
The quick bar seems to work well. The users move it to a part of
the screen where it fits in their UI21 . Expressions being tied together with
progress in the professions also seemed to work quite well. It was noted
that some users did not find the connection between the input in the box
and an expression intuitive. The user test resulted in a number of small
improvement suggestions to the UI in general.
The experience from the initial test have been used in the design in the
earlier sections. E.g. the problem with the expression action box not being
very intuitive have resulted in the design choice for the final Perform action
UI.
7.4
Final prototype usage test
In the end of the development of the final prototype, some user testing is
performed. Its purpose is to confirm if the concept fulfils the desired aesthetics (see appendix 4.8). The focus is also on the usability and intuitiveness
of the UI’s in the solutions. Chat transcripts of the usage tests can be seen
in appendix J.
The overall feedback points towards that the concept is relatively solid
and gives a good flow. Players interested in civilian roleplaying seems to be
very positive towards the solution in practise.
”Usually when you roleplay, you use your character as the tool.
You need other players around you to respond to your actions
and emotes and that’s a good thing, too. But what this AddOn
does, is provide you with an invisible participant. - Finally,
21
Depending on settings and what AddOns a player is using, the UI’s can look very
different in layout
41
your character is actually more than just a tool to the roleplay,
it becomes a vibrant part of the play itself. You play with your
character and the AddOn makes your character play back WITH
you as a companion rather than just an empty vessel.” Lancl Argent Dawn (EU)
It is currently lacking many of the features that can fulfil the desired
aesthetics, but the platform is promising. Currently it does give the player
a sence of discovery and realism. The users have expressed that it inspires
profession roleplay and makes it more interesting.
The perform action concept and UI works good according to the players.
That is an improvement over the first perform action UI, where the users
could not see a clear connection to the UI and the expressions posted. The
additional functionality, such as adding several expressions and giving delays seems to cover all the needs.
The ’hand to’ functionality have gotten very positive reactions from the
users. The functionality seems to be a great improvement over the trade
functionality used in GHI. The players confirm that it works a lot better in
the flow of the roleplaying.
The quickbar UI works quite well. Some minor improvements were suggested, such as making it more clear that it can be moved and is not attached
to the GHI bag. The elements of the UI seems to be clear to the users. The
concept of nearby objects (that are never displayed ingame) works well for
the users as well. The tooltip descriptions for direction and distance have
been able to guide the players to the objects location, with only minor problems the first time. It is suggested to improve the UI with a direction arrow.
The user test reviled that some parts of the UI, such as the list of abilities,
were not easy for the users to find. It were not clear that learning the mining
abilities added abilities as well. This could be solved by adding text messages
stated what abilities is learnt. It was also not clear which nearby objects
can be picked up and which cannot.
Some minor bugs have been discovered during the user test. Examples
of this is that the list of nearby object is not sorted by which one of the
objects is closest.
42
8
Prototype evaluation
8.1
Purpose
The purpose is to evaluate the prototype against the problem description
and the goals developed, using the results from the prototype test.
8.2
Overall evaluation
The final prototype have been validated through its TDD. Overall it is a
solid platform to further expand the solution on. It includes some minor
errors that have been corrected, plus room for improvement in regards to
the UI.
In general the TDD have been a great help and ensured correctness. This
have been valuable in the complex parts of the AddOn. It have however been
rather redundant and a huge time sink for simple functions, such as setters /
getters and functions that are parsing information along from other classes.
Due to this the amount of use case coverage have been dwindling for most
areas of the AddOn, while it have been upheld in the technical modules that
have a higher level of complexity.
The goals for the solution were ambitious and mainly fitting a final solution. Yet the prototype display potential to deliver the aesthetics that
are the goal for a full solution. The solution seem to give better conditions
for civilian roleplaying and would, in a full version, be able to create more
diversity in the general RP scene.
8.3
Technical challenges
In the development of the AddOn implemented prototype several technical
difficulties have risen. The most needed and best suited technical challenges
are then further focused on. The problem in each challenge are analysed,
possible related solutions are researched and a solution to the problem are
developed and evaluated.
As it is the intention to develop and validate the AddOn solution using
TDD22 . It does however require an efficient way of implementing and executing unit tests, which is currently not available. This problem is being
handled in appendix D.
The result is a plugin for the IntelliJ IDEA (the IDE used by the
Gryphonheart Team, and others, for AddOn development) which allows
to run and evaluate unit tests following the API for the busted unit testing
22
test driven development
43
framework.
Another issue that raised while developing the prototype was related
to the location of the player in the game world. The data available to the
AddOns in the game are limited to a x and y coordinate, plus flags regarding
if the user is indoor or outdoors, swimming and flying. This is a problem
when players need to interact with nearby objects e.g. in a house. An
object placed close to the player (in x and y coordinates), but on another
floor would be seen as on the same floor.
The solution developed to solve the problem (see appendix E) build on
a concept of parting the relevant buildings into floor zones. E.g. the ground
floor would be zone A, the staircase would be zone B and the top floor would
be zone C. It is then possible to trace the location of a player by detecting
transition between the zones. The solution have been tested to be relatively
robust and easy to scale, since most of the multistory buildings ingame consists of a relatively small amount of models that are reused over and over.
Placing of objects, to be shown in the nearby object list, holds another
issue than just detecting the correct floor location. The native implementation of the list of nearby objects has some performance issues when scaled
up. Finding all nearby objects requires the solution to look through all
placed objects in the world, which could relatively fast be a lot. In order
to counter this, it is required to find a more optimal solution to store this
geographical dependent data.
A solution to this problem were developed in appendix F. The solution
builds on a kd-tree, which is a tree data structure designed for storing data
with coordinates in d dimensions (in this case only 2). The solution implements an special version of the kd-tree that is optimised towards clustered
data. It can be assumed that the objects stored in the solution will be
heavily clustered around buildings and RP hotspots inside the game, which
makes this solution optimal. Implementation of the solution into the final
AddOn went relatively easy and it worked optimally. Some minor issues
were discovered regarding the reaction to an empty tree, which were not
error handled correctly by the kd-tree implementation.
A central issue in the prototype is the issue of sharing and maintaining a
dataset across the different AddOn clients. This is an issue that have been
relevant in earlier AddOn titles in the Gryphonheart series, but the solution
is not efficient enough. It is a non trivial problem because there is no servers
available for the AddOns to store data on, so data can only be stored on the
participating clients. Development of a solution that solves this technical
challenge have been done in appendix G.
The solution developed is inspired by the bittorent protocol. It bases on a
two scenario system: 1, a player has new information he needs to share with
44
everyone and 2, a player logs on and needs to retrieve updated information
from all other players. The solution works as a great improvement compared
to the native implementation in earlier GH AddOns tackling this issue. The
interface for the module is suited towards being coupled with a list class and
share all its data. Implementing the solution into the AddOn have however
reviled that it can not handle partial data sharing, where it is only relevant
to share specific parts of the set with everyone. In GHP that means that
all profession systems, professions etc would be shared will all who have the
AddOn. While this would be quite optimal for getting players to try out
each others crafted professions, it is however very heavy on the memory
usage.
45
9
9.1
Conclusion
Purpose
The purpose of this section is to round up the loose ends of the project and
conclude on the rests with perspective in the goals, the problem statement
and the technical problem statement.
9.2
Project delimitation and further development
Due to time constrains for the project, it is necessary to perform a project
delimitation. Most technical challenges have been overcome as part of the
development of the prototype. The prototype is however greatly limited and
is not yet at a state where it implement the desired dynamics in order to
fulfil the goals intended (see section 4.8). The prototype and the platform
it implements does hold a potential for carrying many of the dynamics that
can delivers on the desired aesthetics. It is relatively easy to implement
these features in the future, since most of the technical difficulties have been
handled, but it still time consuming to do.
Due to the large amount of time that it would take to finish the implementation, then it could be considered if it is enough to let the project be
finished as a free-time project by, as with the previous AddOns. The rules
for WoW AddOns constrains the AddOns for being sold, have premium versions or include advertisement. Due to this, there is no sustainable business
model for WoW AddOns. An alternative could be to let the project rely on
donations. E.g. by creating a kickstarter campaign for the project.
The solutions that have been developed for the technical challenges holds
further potential for being used by other AddOns as well. An an example
the datasharing solution could be used in a wide selection of applications
that requires data. An idea it could realize is called Gryphonheart Groups
(GHG). A pitch for this AddOn can be seen in appendix L.
9.3
Conclusion
Problems and challenges rising for roleplayers in MMORPG have been analysed and it have become evident that there are several different issues that
relate to roleplayers performing active roleplaying on dedicated servers in
MMORPGs, especially World of Warcraft (WoW). Further research have
shown that many roleplayers face issues that are closely related, such as
lack of diversity in roleplaying roles and lack of realism.
A solution concept were designed to improve the conditions regarding these
issues. This concept builds on a supplying mechanics for profession, in order
to give better conditions for civilian roleplaying. The concept is developed
46
using MDA (mechanics - dynamics - aesthetics), which is a framework for
determine the right mechanics to deliver the intended dynamics.
The developed concept were implemented first as a fast prototype into a
series of scripts inside another AddOn, called GHI (Gryphonheart Items).
A series of user tests with this prototype were able to validate that the
concept could possible be a solution to some of the issues. A larger scale
prototype were afterwards implemented into an AddOn, under the name
GHP (Gryphonheart Professions), as it will be drawing upon some of the
functionality in GHI and will be part of the same AddOn series.
In the development of the AddOn several technical challenges were handled.
The first challenge were the lack of proper tool support for test driven development (TDD) of the AddOns. A plugin to IntelliJ IDEA (an IDE used for
development of AddOns) were developed to serve as such as tool. Another
problem were lack of floor or z coordinate information. For this a detection
system were build, which can track when the player changes from one floor
to another in the game. A challenge that had risen in the prototype development, as well as for other AddOns developed before that, is the lack of
a server to store data on. For this a client to client data sharing system,
inspired by Bittorent, were developed. The resulting solution have great potential for further use in AddOns that uses shared datasets. A last challenge
were regarding optimal storing of geographical data. For this, a tailored kdtree solution were implemented, which optimised the performance greatly
compared to the native solution.
The final prototype solution, as well as the solution to most of the technical
challenges, were implemented using TDD. This ensured a high degree of
correctness, especially in the complex parts.
User tests of the final prototype have shown positive reactions for the users.
The solution shows great potential of solving the problems regarding the lack
of diversity and realism in roleplaying. Users that were already interested in
civilian roleplaying shows a greater motivation for roleplaying civilian professions, when using the AddOn.
Overall the solution got a great potential for creating more diversity in
the RP scene of WoW and improve the roleplaying experience for both its
users and other players interacting with its users.
Christian Warnecke
47
References
[1] Franklin Antonio.
Faster line segment intersection, 1992.
http://tog.acm.org/resources/GraphicsGems/gemsiii/insectc.c.
[2] Barfolomeu.
Flighthud,
http://www.wowace.com/addons/flight-hud/.
2013.
[3] Jon Louis Bentley.
Multidimensional binary search trees
used for associative searching. Communications of the ACM,
18(9):509–517, 1975. http://cgi.di.uoa.gr/%7ead/MDE515/p509bentley.pdf.
[4] Bram Cohen.
The bittorrent protocol specification, 2008.
http://www.bittorrent.org/beps/bep 0003.html.
[5] H.G. Corneliussen and J.W. Rettberg. Digital culture, play, and
identity: a World of Warcraft reader. World of Warcraft Reader
Series. Mit Press, 2008.
[6] Jeff Ericson. Non-lecture f: Line segment intersection, 2002.
http://compgeom.cs.uiuc.edu/
jeffe/teaching/373/notes/x06sweepline.pdf.
[7] David Kirk. Graphics Gems: III. Graphics Gems - IBM Series.
AP Professional, 1992.
[8] Olivine Labs.
busted, elegant lua unit testing,
http://olivinelabs.com/busted.
2013.
[9] Songrit Maneewongvatana and David M. Mount. It’s okay
to be skinny, if your friends are fat.
Proceedings of the
4th Annual CGC Workshop on Computational Geometry, 1999.
http://www.cs.umd.edu/%7emount/Papers/cgc99-smpack.pdf.
[10] M.v. Kreveld Mark de Berg, O. Cheong and M. Overmars. Computational Geometry. Springer, 2008.
[11] Marco Patella Paolo Ciaccia and Pavel Zezula. M-tree: An efficient
access method for similarity search in metric spaces. Proceedings
of the 23rd International Conference on Very Large Data Bases,
1997. http://www.vldb.org/conf/1997/P426.PDF.
[12] Iway
Indoor
Positioning.
Iway,
http://www.iway.nl/index.php/en/indoorpositioning-en.
48
2012.
[13] Robert Zubek Robin Hunicke, Marc LeBlanc.
Mda: A
formal approach to game design and game research, 2010.
https://sakai.rutgers.edu/access/content/group/af43d59b-528f42d0-b8e5-70af85c439dc/reading/hunicke 2004.pdf.
[14] Dan Sunday.
Intersections of a set of segments - bentley ottmann algorithm, 2012. http://geomalgorithms.com/a09intersect-3.html#Bentley-Ottmann-Algorithm.
[15] Sasu Tarkoma. Overlay and p2p networks - structured networks
and dhts, 2013. http://www.cs.helsinki.fi/webfm send/1082.
[16] Sasu Tarkoma. Overlay and p2p networks - unstructured networks
i, 2013. http://www.cs.helsinki.fi/webfm send/1052.
[17] Sasu Tarkoma. Overlay and p2p networks - unstructured networks
ii, 2013. http://www.cs.helsinki.fi/webfm send/1056.
[18] David Hoksza Toms Skopal. Improving the performance of
m-tree family by nearest-neighbor graphs.
ADBIS’07 Proceedings of the 11th East European conference on Advances
in databases and information systems, pages 172–188, 2007.
http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.134.8046.
[19] Susana Tosca. The quest problem in computer games, 2003.
http://www.itu.dk/people/tosca/quest.htm.
[20] Chrisitan Warnecke.
Pilus.info wiki:
http://pilus.info/index.php?title=API.
Ghi api,
2012.
[21] Nick Yee.
Introduction to the role-playing series, 2006.
http://www.nickyee.com/daedalus/archives/001524.php.
49
Appendix
50
A
Number of roleplayers across
MMORPGS
The following calculations does not take the play patterns and global
player distribution into account. It also assumes an even player distribution across all realms.
1
http://www.wowwiki.com/Realms list
http://www.ign.com/articles/2012/10/04/mists-of-pandaria-pushes-warcraft-subsover-10-million
3
http://www.swtor.com/server-status
4
http://www.mmodata.net/ - oct 2012
5
http://www.inquisitr.com/331128/guild-wars-2-sales-break-two-million-mark/
6
http://www.guildwars2guru.com/news/856-wvw-rankings-as-of-october-26th/
7
http://forums.darkfallonline.com/
8
http://www.guildwars2guru.com/topic/47745-rp-servers/
9
http://forums.ddo.com/
10
http://aoc.wikia.com/wiki/Servers
11
http://na.aiononline.com/about-aion/servers
12
http://forums.na.aiononline.com/na/showthread.php?t=83528
13
http://eu.riftgame.com/en/shardstatus/index.php
14
http://wiki.eveonline.com/en/wiki/Shard
15
http://na.cityofheroes.com/en/news/server status/server status.php
16
http://darkageofcamelot.com/content/rvr-server-types
17
http://forums.lotro.com/index.php
18
List partly selected from http://www.gameogre.com/topmmorpgs.htm
19
Calculated from the total number of players times the normal server to roleplaying
server ratio (percentage)
2
51
Game:
Total
number of
servers/
realms:
Percentage Number
of
RP of
playservers:
ers18 :
7641
Total
number
of
dedicated RP
servers:
581
Estimates
number of
roleplayers19 :
Note:
World
of
Warcraft
7.5%
10.000.0002
750.000
No
RP
servers in
all
Asian
realms
Star Wars.
the old republic
Guild wars
II
203
73
35.0%
1.400.0004
490.000
516
08
N/A
2.000.0005
N/A
D&D Online
Age of Conan
Aion
Rift
EvE Online
City
of
Heroes
Dark Age of
Camelot
Lord
of
the Rings
Online
Warhammer
Online
89
09
N/A
110.0004
N/A
2110
210
9.5%
75.0004
7.000
811
1813
214
1615
012
313
014
015
N/A
16.6%
N/A
N/A
2.400.0004
250.0004
450.0004
125.0004
N/A
41.000
N/A
N/A
1116
016
N/A
30.0004
N/A
2917
317
9.6%
260.0004
25.000
N/A
N/A
N/A
100.0004
N/A
Table 4: Number of estimated roleplayers across different MMORPG titles
52
Number is
number of
total sales
B
UI Design sketches
53
Figure 4: UI sketch for the quickbar showing equipped and nearby objects
54
Figure 5: UI sketch for the Perform Action UI
55
Figure 6: UI sketch for the Profession overview part of the main menu.
Example with a ”skill sum” type project
56
Figure 7: UI sketch for the Profession overview part of the main menu.
Example with a ”unlimited” type project
57
Figure 8: UI sketch for the Abilities list in the main menu.
58
Figure 9: UI sketch for the Custom profession list in the main menu.
59
C
Usage scenarios
60
C.1
Usage Scenario 1 - Mine foreman
Setting: The Azurelode Mine in Hillsbrad Foothill.
A player (John) approaches the foreman of a mine (Peter), who is
standing just outside the entrance to the mine.
Emote: Peter looks towards John as he approaches.
Emote: John nods at Peter.
Peter says: You must be one of the day labourers for the mine, eh?
John says: Yessum. Ah dont know first thing bout that mines and
whats not, but ah aint a weak sissy.
Peter says: Ah, I see, but do not worry about that. I can teach you
the basics of it.
Emote: John nods at Peter and then picks his nose while looking at
him, without realising.
Peter clicks on the Teaching ability in his action bar, which opens the
teaching UI. He then chooses to teach John mining. The UI requests
one or more emotions from him, describing the teaching action he is
doing. He is given the option to also make one or more emotions for
each ability in the profession that are known as basic (spot minerals
etc). It is optional for him to give expressions for each ability. Peter
chooses emote and fills in some text.
Emote: Peter starts to explain the basic of mining to John.
You have been taught [Mining] (profession) by Peter. (Shown only on
Johns screen)
You have taught John [Mining] (profession). (Shown only on Peters
screen)
Peter says: First you try to try and spot the iron veins inside the mine.
Just look for small areas in the mine wall that looks a bit brighter than
rock.
You have been taught [Spot Minerals] by Peter. (Shown only on Johns
screen)
You have taught John [Spot Minerals]. (Shown only on Peters screen)
Peter says: Then when you have found a good spot, just use a [Mining
Pick] to mine the some of the rock in the wall down.
You have been taught [Mine Iron Vein] by Peter. (John)
You have taught John [Mine Iron Vein]. (Peter)
Peter says: From all the chunks and boulders of rocks you then have
to try and separate the iron.
You have been taught [Separate iron ore] by Peter. (John)
You have taught John [Separate iron ore]. (Peter)
Emote: John nods to Peter.
61
John says: Ah think ah got it.
Peter says: Good. Do you have a pick yourself?
John says: No, ah don’t think ah got any.
Peter says: Okay. I have one you can borrow.
Peter opens his bag (in the nearby objects, because he have placed his
bag on the ground near him) and right clicks on an [Iron Pick]. This
displays a drop down menu, where he select Hand to.. and then selects
John. Peter is then requested to fill in an emote, describing the action.
You attempt to hand [Iron Pick] to John. (Peter)
Emote: Peter attempts to hand [Iron Pick] to you. (John)
Emote: Peter takes an [Iron Pick] from his bag and hands it towards
John.
John gets a dialogbox where he can chose to accept it, or reject it. He
accepts and are requested to make an emote, describing that.
Emote: John accepts the [Iron Pick] and holds it in his hand.
The Iron pick is now placed in Johns main hand slot in the Equipped
items ui at the quick bar. Its icon flashes for a moment after it appears.
John says: Alright. Ill get oan it.
Emote: John walks into the mine while whistling.
When inside the mine, John decides to look for minerals. He presses
the book button on the quickbar. This opens a spellbook, where John
looks for the Spot Minerals ability. It is flashing in the spellbook, because he just learned it. John drags the ability into his action bar for
easy access and clicks it. John is then requested an emote, describing
the action. John fills out the emote.
Emote: John stands and looks at the mine wall, trying to spot any iron
ore in the wall.
A cast bar appears and starts to progress. When the cast bar is done
after 30 seconds, a few Iron ore veins appears in the Nearby objects
list in the quickbar. They flash up for a few seconds. In their tooltip
they describe how far they are away (approximately) and the direction
(approximately in directions, north, northeast etc.).
You have discovered 3 [Iron vein]s nearby.
John says: Aha...
John walks in the direction described in the tooltip until it reaches less
than a meters distance. He then right clicks the iron vein. He is request
an emote describing the mining of the node.
Emote: John takes the [Iron pick] and starts to mine down chunks of
the wall.
The cast bar appears and starts to process. While it is processing mining sounds are playing. After the process bar is done, a new object
appears in the nearby objects lists. It is a [Boulders and chunks of
62
rock]. John clicks it and is again requested an emote describing the
action of searching the boulders for rocks.
Emote: John kneels down and starts to sort the small pieces of rock,
looking for chunks of rock he can identify as iron.
The cast bar appears and rumbling sounds can be heard. After the cast
bar is done A small Iron ore appears in the nearby objects. John picks
up the iron ore and puts it in the back.
After repeating this a few times at different nodes, John have gathered plenty of iron ore. He then returns to Peter outside the mine and
hands him the iron ore. John gives him his day pay, for a job well done.
63
D
Tool for unit testing lua
code for WoW AddOn development
64
D.1
Problem description and analysis
Purpose
The purpose of this section is to describe the problem and analyse it.
Description and analysis
Unit tests are widely used to ensure quality in software as well as aid
in its development. In the development of the Gryphonheart AddOns
and other addons, it is desired to use unit tests to raise the quality
and ensure correct implementation of new technical modules. These
technical modules are intended to be implemented using TDD (test
driven development). Currently there aren’t any tools that supports
this completely.
Development of wow AddOns does not require a compiler, so the
development can be done in any text editor. In the Gryphonheart
Team, the development is done in an IDE (integrated developer environment) called IntelliJ IDEA. Through a plugin, it provides several
helpful features, such as syntax highlight, syntax errors and global
function lookups.
65
D.2
Solution concept
Purpose
The purpose is to design a solution concept basic on combinations of
existing tools.
Existing unit test tools
Lua is used for other things than wow AddOns, but a large degree of
this is console applications or scripts. Due to this, the only existing
unit test framework is console based. It is called Busted and supports
lua tests through an API[8]. E.g. a unit test can be created by calling
a describe function with nested it functions. The api includes various
related functions, such as detailed assert and spy functions. Through
a library the system also supports coverage analysis.
Ingame solution
A relevant and basic solution to the problem could be to implement
some test functions that can be executed in the game. These can then
be triggered after the game is loaded and will run the tests.
Overall the solution holds the following advantages and disadvantages. Advantages:
• It relatively easy to implement
• It got all the ingame special functions
Disadvantages:
• It is not that practical to reload environment
• It requires game to run
• It can be hard to simulate more clients
• Adding a file requires the game to be restarted
IDE Plugin solution
Working with the busted library, it is clear that it can be a bit tedious
to run the unit tests, as it requires several console commands. A solution to that could be to make a batch script that runs the console
commands, but it is a more long sighted solution to make a plugin to
66
the IDE used, which then handles the unit tests.
The plugin solution has the following advantages:
• It is easy to reload the environment
• It is possible to create multiple clients
• It does not require the game to run
• The tests run relatively fast, compared to ingame.
The solution has the following disadvantages:
• It requires mocking of in game functions.
• The environment might preform different than the ingame environment in performance.
Solution selection
Based on the solution descriptions it can be seen that the most advantageous solution would be to implement an IDE plugin to manage the
unit tests, using the Busted library. An obvious target IDE for this
would be IntelliJ IDEA, as this already has plugin that gives many
relevant features for wow AddOn developers. This plugin is developed
using JAVA.
67
D.3
Implementation
Purpose
The purpose is to describe the development of the solution, including
its implementation.
Interface with Busted
It is possible to interface with the busted library using CLI (Command
line interface)[8]. It supports many different options. One of the most
relevant ones is to define additional locations for the system to look for
lua files. The result of the run unit test can also be read in the CLI,
where it will be printed.
The java plugin can interface with Busted through a separate process, created though a ProcessBuilder class. It is passed the command
string and then awaits the results printed. The resulting strings are
relatively easily analyzed, since they all follow the same format: A line
with the result for all the tests in the test file and a line with eventual
errors. There are one error line pr failed test. The results are put into
a RunResult object.
Structure of AddOn and its tests
All AddOns have a .toc file, which is a list of all the files the game is
told to load. This is normally created manually by the AddOn author
while developing. The structure of the files used for the Gryphonheart
AddOns is based on its implementation pattern, which is a slightly
modified version of MVC (model-view-controller), with folders such as
GUI, API, Model and Modules. This is supported by default in the
plugin, by letting the busted library look for the lua files in these folders.
In addition to the mentioned folders, there are also a TEST folder.
In these the test files for a corresponding lua file are located, in a
mirrored structure. That means that a test file for Model
MyClass.lua are TEST
Model
MyClass.lua. This separation have been chosen to make it easier to
exclude all test files when packing and deploying an AddOn for the
users.
The file information from the .toc file are used to create FilePair’s
and FilePairDirectories, which then holds all necesary information about
68
Figure 10: Unittest Plugin UI
the lua files in the AddOn and the corresponding test file they are
paired together with.
User interface
It is chosen to let the user interface of the plugin be focussed around
a treeview. This treeview displays the structure of the tests files as
nodes in the tree and then the results for each file as the leafs.
The tree is implemented as a JTree. This includes implementation
of TreeModel and TreeCellRenderer suited to display the tests.
The UI is also given one button to reload all unit tests. The unit
tests are run when the plugin is started, but pressing this button will
rerun it. It is possible to run a particular set by right clicking it and
press Run test.
69
D.4
Test and evaluation
Purpose
The purpose is to test and evaluate the performance and correctness
of the plugin trough long term use.
Test
The plugin have been tested trough five months of use as part of development of AddOns. Minor errors found while use the solution have
been corrected. It have resulted in an overall acceptable correctness of
the solution. The test have revieled a few minor issues and bugs, which
are described in table 5.
Conclusion
A unittest plugin for the IntellJ IDEA IDE were implemented using
JAVA. This plugin interfaces with the Busted library and makes is
possible to run unit tests, that uses the Busted api, inside the IDE.
The plugin were implemented successfully and tested though extensive
usage. Minor bugs and issues were recorded and fitting resolutions were
documented.
70
Description
Syntax errors in the tests in
the test are not displayed.
Possible resolution
This is an error in the analysis
of the test result by Busted.
The test runner should be
modified to catch these errors.
The model should be modified
make it possible to tie an error
to a file pair.
This error can be corrected in
the view code where the tree
is updated.
Running a test with a syntax
error also results in the next
level directory being folded in
the UI.
Long error reports can be
hard to read, since it is all
on one line, no matter of the
length.
This can be fixed in the view
by either let the node be possible more than one line high
or by displaying the full text
in a mouse over tooltip.
This could be fixed by letting
the tests run in a complete
parallel thread. of the UI.
When running tests that takes
a long time, the whole UI
freezes
Table 5: Bugs and issues located in the plugin
71
E
Floor level determination
72
E.1
Problem description and analysis
Purpose
The purpose is to determine and describe the problem in details,
Problem description
The problem is to determine the floor location, in a building, for a person, derived from only the x and y coordinates. The challenge in the
problem is the missing z/height/altitude information for the subject.
The problem occurs for AddOns in the MMORPG World of Warcraft (wow). They can not obtain information about the players zcoordinate, which can be an issue when determining what floor in an
ingame building the player is currently at.
In the case of wow, the x and y coordinates are available with a great
accuracy, down to millimeters. Furthermore the buildings in wow are
standardized. There are a limited number of different multistory building models in the game. These models are then reused many times in
the game world.
In general indoor movement in the game limited to walking/running
and jumping. This means that the solution should handle eventual
balconies that the player can jump off from. It is however not possible
to jump out of windows in the game.
Conclusion
There are no z-coordinate available for wow AddOns. There are however very accurate x,y coordinates and a relatively static game world.
73
E.2
Existing solutions
Purpose
The purpose is to find existing solutions that relates to the problem.
Existing solutions
Due to the special conditions in the problem, there are no existing
complete solutions to the problem.
Flight HUD
Flight HUD is an AddOn for World of Warcraft that displays that
presents flying related information to the player in form of a overlay
display similar to the HUD (heads up display) in fighter jet planes[2].
The AddOn and its methods are mainly useful for flying in wow. It
retrieves information about the flying angle, the speed and direction.
The AddOn does not take collisions into account or if the user is moving sideways or backwards.
The AddOn states clearly that it can not show the z-coordinate, due
to UI limitations. The Z coordinate could be derived from the angle,
speed and direction, but not when the user is colliding with obstacles.
IWAY
Indoor positioning (in real life) is currently in active development.
Google is profiling their maps with indoor features, such as floor plans.
There are also solutions being developed for more precise indoor positioning, such as IWAY. It uses a combination of the wifi and 3G/4G
networks to determine the users position[12].
Conclusion
There are not any complete solution to the problem, but some of the
existing solutions might serve as inspiration for a solution.
74
E.3
Solution design
Purpose
The purpose is to design one or more possible solutions for the problem.
This is based off the problem analysis and the knowledge of existing
solutions. A solution should be selected and it can then be parted up
into subproblems.
Solution for the problem
Altitude derived from change of velocity
It is possible to use the same information as the Flight HUD addon
regarding position, direction and speed. A player walking up a staircase would make his x,y speed change, in the same way that a planes
ground speed changes when flying upwards without its true air speed
changing.
Note that the vertical direction of the user walking in a building is not
available, since the inputs for controlling vertical direction of flying is
not present here.
This concept can be used without knowledge about the buildings,
but it has a few limitations and issues:
• It can not differ between rising and falling, since both would limit
the ground speed
• It does not take collisions with objects/walls into account
Floor level from linked zones
Using the available accurate x,y coordinates a solution could be to
divide a building into zones. The zone of the player could then be
changed when the player crosses different points of interest. E.g. a
staircase or a doorway. Such point of interests could be detected by
the player crossing one or more transition lines.
The downside of this system is that zones and transition lines should
be defined for the building, but this is a minor downside, as the multistory buildings in WoW is based of the same, relatively few, models.
An issue could be to determine the starting position, if the player
starts inside a building. This could however be solved by saving the
75
zone information between each session. It would then only be a problem the first time a player logs in with the AddOn.
The solution can not give any precise z or height coordinate, but
that is not directly required.
Selection of solution
The solution with the fewest issues is the floor level from linked zones.
This solution is the most suited for further research and development.
Conclusion
Two solution concepts were designed. One based on calculating the
altitude from the change in speed when moving upwards. The other
one based on transition over points of interest, such as staircases. The
later one of the solutions are chosen for further development.
76
E.4
Solution Implementation
Purpose
The purpose is to specify the implementation methods for the linked
zones solution, which can then be used for implementation. It should
also include unit test cases, since the unit tests are required part of the
implementation in TDD23 .
Solution Implementation
State machine
The concept with the player position changing from one zone to another if certain properties is fulfilled resembles the concept of a state
machine. An example of such concept is shown in figure 11.
The state machines for buildings would in the worst case have a
total of 5-10 states. Due to this relatively small size, it will not be
relevant with methods for compromising or otherwise optimising the
state machine.
A way to implement this state machine mechanic is with a table of
states, which each have a transition table.
Line intersection
When the state machines eventual transitions are calculated, it can be
done with information about the current location and the new location
(both with x and y coordinates). This information is two points in a
plane and the connection between these two points form a line segment.
The areas of interest that should trigger the transitions between zones
are defined by one or more line segments each. The transition between
two areas / states should then happen if the line segment between the
two coordinates.crosses with a transition line segment.
Line segment intersection problems is a well documented area. Some
algorithms that have been developed to find all intersections between
all line segments have a logarithmic time pr. intersection[10]. It is
however not relevant for this particular problem to find all line segment intersections, since only required to know if the movement line
segment intersects with any of the other segments.
23
Test driven development
77
Figure 11: State machine example for a house with 3 zones
Figure 12: Line intersection example
There are simple methods and algorithms for determining if two
line segment crosses each other, without the intersection point being
calculated, as stated in the following.
Two segments ab and cd intersect if and only if:
• the endpoints a and b are on opposite sides of the line
cd, and
• the endpoints c and d are on opposite sides of the line
ab.
[6]
This is however not enough to test transition from one zone into
another, since this does not take into account that more lines might be
crossed. It might however still be useful, if it is necessary to detect if
two segments cross.
In the above example sa crosses both segment sb and sc . In this case
there is a transition into the other zone, but then back into the first
zone again. There could theoretically be examples where sc could be
78
places in the transition logic of the 2th zone and lead to a transmission
into yet a 3rd zone. In such case it would be relevant to split sa up
into two segments. One from its start to the intersection with sb and
one from the intersection to sb to the end. This is why it is relevant
for the algorithm to calculate the points of intersection and thus why
this simple solution can not be used alone.
An algorithm for locating all intersection points in a set of line segments is the Bentley-Ottmann Algorithm. It is a line sweep algorithm
that works in logarithmic time[14]. It is however only interesting for
this case to find all intersections between a particular segment and all
other segments. Due to this, it would be a bit excessive to find all segment intersections between all segments in the set. A closer look into
the Bently-Ottmann reveals that it calculates the intersection points of
all intersecting segments, without any improvements to that part. As a
result of that it is not efficient using that algorithm. The best solution
is then to calculate the intersections between the movement segment
and all the transition segments. This narrows the problem down to
calculating the intersection points.
Calculating the intersection points between two line segments can
be done in a relatively fast way, using the ’Faster Line Segment Intersection’ algorithm[7]. This algorithm builds on calculating alpha and
beta (ranging from 0 to 1), which denotes the location of the intersection in on each of the lines. The alpha and beta values would then be
outside of the range 0 to 1, if the lines does not intersect. Formula for
intersection between the line segments P1 to P2 and P3 to P4 can be
seen in formula 1. Solving it results in formula 2 and 3.
0 = (P 1 − P 3) + α(P 2 − P 1) + β(P 3 − P 4)
(P 3 − P 4)y × (P 1 − P 3)x − (P 3 − P 4)x × (P 1 − P 3)y
(P 2 − P 1)y × (P 3 − P 4)x − (P 2 − P 1)x × (P 3 − P 4)y
(P 2 − P 1)x × (P 1 − P 3)y − (P 2 − P 1)y × (P 1 − P 3)x
β=
(P 2 − P 1)y × (P 3 − P 4)x − (P 2 − P 1)x × (P 3 − P 4)y
α=
(1)
(2)
(3)
The offset and position of the intersection can be derived from the
alpha and beta values using the methods implemented in the example
provided with Graphics Gems: III[1]. The algorithm implements the
pseudo code seen in algorith 1.
79
Algorithm 1: Calculation of intersection point
Input: d: the numerator of the alpha equation. See formula
2 and 3
e: the beta numerator
f: the common denominator
1
2
3
4
5
6
7
8
9
10
11
12
numx = d * (P2x - P1x)
if numx have same sign as f then
offsetx = f / 2
else
offsetx = - f / 2
numy = d * (P2y - P1y)
if numy have same sign as f then
offsety = f / 2
else
offsety = - f / 2
x = P1x + (numx + offsetx) / f
y = P1y + (numy + offsety) / f
Notice that this pseudo code does not include checks for if the segments intersect at all. If they are parallel, then f would be 0, which
would result in dividing by 0. In the implementation it can be seen
that the following tests, to determine non intersection, should also be
done in the algorithm (see algorithm 2).
Algorithm 2: Intersection validation X
1
2
3
4
5
6
7
8
9
10
11
12
13
14
if P2x - P1x ¡ 0 then
xLowA = P2x
xHighA = P1x
else
xLowA = P1x
xHighA = P2x
if P4x - P3x ¡ 0 then
xLowB = P4x
xHighB = P3x
else
xLowB = P3x
xHighB = P4x
if xHighA ¡ xLowB or xHighB ¡ xLowA then
return No intersection
Algorithm 2 should also be carried out for the Y values. The alpha
and beta values should also be tested, as stated in the pseudo algorithm
80
3.
Algorithm 3: Intersection validation Alpha - Beta
Input: d: the numerator of the alpha equation. See formula
2 and 3
e: the beta numerator
f: the common denominator
1
2
3
4
5
6
7
8
9
10
11
12
if f == 0 then
return
else if if f ¿ 0 then
if d ¡ 0 or d ¿ f then
return
if e ¡ 0 or e ¿ f then
return
else
if d ¿ 0 or d ¡ f then
return
if e ¿ 0 or e ¡ f then
return
Combined the three pieces of pseudo code forms an algorithm that
can determine if the line intersects. On top of this should be an algorithm that determines which segment is crossed first. To ease determination of that, the alpha and beta values could be returned from
the function. Depending on direction and if the movement segment is
P1P2 or P3P4, then this information can be derived from the alpha or
beta value. Note that the crossing direction can be determined from
weather f is positive or negative.
Building location
As mentioned in the solution design, most models for multi-storage
buildings in the game is the same. Due to that, it could be a good solution to have the information stored for each building model, and then
deploy them dynamically for each location / rotation of the building
model ingame.
Determining the model location and rotation in game can be done
by measuring 2-3 easy recognisable points inside the building.
The set of transition segments for the building model can be transposed to fit the building instance ingame by using the location (offset)
81
and rotation. This can be applied using the matrix algebra seen in
formula 4.
0 cos θ − sin θ x
of fx
x
=
+
y0
sin θ cos θ
y
of fy
(4)
This is a quite optimal solution because the information for the
building instance can be narrowed down to the offset (x and y), the
rotation and the building reference, 4 values total. A rotation matrix
can then be calculated just once for all segments in the building. The
rotation matrix and the offset vector can then be applied to all segments
for the building.
Unit test cases
As unit tests are a necessity to start development in TDD, then test
cases should be considered as part of the solution design.
GetLineSegmentIntersection
The function for finding line segment intersections should be unit tested
with variety of different inputs. This includes both positive tests, where
the segments does collide, and negative tests where the segments does
not collide. A structured way to test a lot of possible and relevant
combinations of inputs could be to divide the area around a segment
into subareas and place point of interests there.
Figure 13 is an setup with a segment and points of interest. The
function can be tested extensively. The complete truth table for that
setup can be seen in appendix A. An x denotes a nil value (no intersection). A value describes the estimated alpha/beta value (from 0 to
1) of where the intersection would happen.
FloorDeterminationStateLogic
The state machine for determining the current floor can be tested using
a relatively simple example. This is because the transitions can happen
in relatively few ways. The only special cases is to consider situations
where more than one segment is crossed.
82
Figure 13: Line segment intersection test setup
Figure 14: Staircase example with 3 floor areas
83
The example in figure 14 is based off the looks of staircase in a
building inside the game. There are two special things to notice about
this example:
• It is possible for the player to jump over the railing in the lower
part of the staircase, crossing either from Floor A and onto the
staircase (Floor B) or the other direction. This is represented by
the transition lines between P2 and P4.
• It is possible for the player to jump from a balcony area on top of
the staircase (Floor C) and onto the staircase (Floor C). This is
the reason why the transition line is P1 - P3 instead of P1 - P2.
84
Figure 15: Floor determination in action
E.5
Test and evaluation
Purpose
The purpose is to test and evaluate the implemented concept for floor
determination.
Test results
The solution were implemented into the GHP AddOn as a module using TDD. This places a large portion of the testing into the unit tests.
As described in description of the unit test cases, the tests have a large
coverage for the segment intersection function. It results in a total of
678 unit tests. The state machine implementation also got a reasonable
amount of unit tests. All the unit tests have passed successfully.
Inside the game, the system have been tested with implementation
of a common tavern (of the human race). This building holds two separate staircases, leading from the ground floor to the first floor and to
the basement. The coordinates for the transition points were measured
in-game and it were noted down in the building data. This building
data were tested by inserting two instances of the building in-game and
measure the calculated floor level as the character were moved around
in the building.
85
The tests showed that the floor information does not change at once
after crossing a transition line, but after up to 1 second. That is due to
the chosen delta time. This could easily be increased to create a more
precise tracking.
Conclusion
The solution to the floor detection problem were implemented successfully. The test results are positive and it works as intended, which have
been validated through a relatively large amount of unit tests.
86
Appendix A
Truth table for segment intersection test
1
2
3
4
5
6
7
8
9
10
11
12
13
1
x
x
x
x
x
x
x
x
0
x
x
x
x
2
x
x
x
x
x
x
x
x
0
x
x
x
x
3
x
x
x
x
x
x
x
x
0
x
x
x
x
4
x
x
x
x
x
x
x
x
0
x
x
x
x
5
x
x
x
x
x
x
x
x
0
x
x
x
x
6
x
x
x
x
x
x
x
x
0
0.2
x
x
x
7
x
x
x
x
x
x
x
x
0
0.25
x
x
x
8
x
x
x
x
x
x
x
x
0
0.33
x
x
x
9
1
1
1
1
1
1
1
1
x
1
1
1
1
10
x
x
x
x
x
0.8
0.75
0.67
0
x
0.71
0.52
0.56
11
x
x
x
x
x
x
x
x
0
0.29
x
x
x
12
x
x
x
x
x
x
x
x
0
0.48
x
x
x
13
x
x
x
x
x
x
x
x
0
0.44
x
x
x
14
1
1
1
1
1
1
1
1
x
1
1
1
1
15
0.88
0.81
0.74
0.5
x
0.81
0.78
0.57
0
x
0.71
0.6
0.5
16
0.77
0.65
0.68
0.5
x
0.71
0.69
0.5
0
x
0.63
0.5
0.4
17
0.69
0.64
0.53
x
x
0.63
0.55
0.36
0
x
0.5
0.38
0.29
18
x
x
x
x
x
x
x
x
0
0.5
x
x
x
19
1
1
1
1
1
1
1
1
x
1
1
1
1
20
0.75
0.76
0.66
0.5
x
0.72
0.68
0.5
0
x
0.64
0.5
0.43
21
0.63
0.6
0.48
0.33
x
0.58
0.5
0.32
0
x
0.45
0.31
0.22
22
0.58
0.54
0.45
x
x
0.5
0.42
0.28
0
x
0.37
0.29
0.19
23
x
x
x
0.77
0.5
x
x
x
0
x
x
x
x
24
x
0.75
0.7
0.5
0.25
x
0.67
0.5
0
x
x
0.5
0.5
25
0.6
0.6
0.5
0.3
x
0.55
0.5
0.34
0
x
0.47
0.32
0.26
26
0.55
0.5
0.4
0.25
x
0.46
0.4
0.24
0
x
0.36
0.35
0.19
27
0.5
0.45
0.4
x
x
0.42
0.37
0.25
0
x
0.31
0.23
0.12
27
1
4
15
16
17
18
19 20
21
22
23
24
25
26
1
0
0.12
0.23
0.31
x
0
0.25
0.37
0.42
x
x
0.4
0.45 0.5
2
0
0.19
0.35
0.36
x
0
0.24
0.4
0.46
x
0.25
0.4
0.5
0.55
3
0
0.26
0.32
0.47
x
0
0.34
0.52
0.55
x
0.3
0.5
0.6
0.6
4
0
0.5
0.5
x
x
0
0.5
0.67
x
0.23
0.5
0.7
0.75 x
5
0
x
x
x
x
0
x
x
x
0.5
0.75
x
x
6
0
0.19
0.29
0.37
x
0
0.28
0.42
0.5
x
x
0.45 0.54 0.58
7
0
0.22
0.31
0.45
x
0
0.32
0.5
0.58
x
0.33
0.5
8
0
0.43
0.5
0.64
x
0
0.5
0.68
0.72
x
0.5
0.66 0.76 0.75
9
x
1
1
1
1
x
1
1
1
1
1
1
1
1
10
0
x
x
x
0.5
0
x
x
x
x
x
x
x
x
11
0
0.29
0.38
0.5
x
0
0.36
0.55
0.63
x
x
0.53 0.64 0.69
12
0
0.4
0.5
0.63
x
0
0.5
0.69
0.71
x
0.5
0.68 0.65 0.77
13
0
0.5
0.6
0.71
x
0
0.57
0.78
0.81
x
0.5
0.74 0.81 0.88
14
x
1
1
1
1
x
1
1
1
1
1
1
1
1
15
0
x
x
x
0.44
0
x
x
x
x
x
x
x
x
0.6
x
0.63
16
0
x
x
x
0.48
0
x
x
x
x
x
x
x
x
17
0
x
x
x
0.29
0
x
x
x
x
x
x
x
x
18
0
0.56
0.52
0.71
x
0
0.67
0.75
0.8
x
x
x
x
x
19
x
1
1
1
1
x
1
1
1
1
1
1
1
1
20
0
x
x
x
0.33
0
x
x
x
x
x
x
x
x
21
0
x
x
x
0.25
0
x
x
x
x
x
x
x
x
22
0
x
x
x
0.2
0
x
x
x
x
x
x
x
x
23
0
x
x
x
x
0
x
x
x
x
x
x
x
x
24
0
x
x
x
x
0
x
x
x
x
x
x
x
x
25
0
x
x
x
x
0
x
x
x
x
x
x
x
x
26
0
x
x
x
x
0
x
x
x
x
x
x
x
x
27
0
x
x
x
x
0
x
x
x
x
x
x
x
x
F
Geographical data storage
90
F.1
Problem description and analysis
Purpose
The purpose is to determine and describe the problem in details.
Problem description
The problem is focused on determine the most optimal data structure
for geographical data storage of points. It is desired to storage a large
number of points, with coordinates in two dimensions. The points are
inhomogeneous distributed and have a likelihood of generally being
clustered together around points of interest. It can be assumed that
the majority of the points is known at the point of initialization of the
data structure. New points could be added over time and known points
could be removed or change position. The only query interfacing with
the data structure is to get all points that are within a given radius of
a given vantage point.
An additional optional requirement includes the ability to let each
point have a non-static interaction radius. The query for getting interaction points for the vantage point would in that case result in all
points where the vantage point are within the points interaction radius.
91
F.2
Relevant data structures
purpose
It is the purpose to research relevant data structures that fulfills the
requirements in F.1 relatively efficient.
Native implementation
A native way of solving the data problem is considered as a mark
to compare other solutions to. This native solution builds on looping
trough all points in the set and then return all points that are within the
interaction radius to the vantage point. This method has the following
runtime:
Setup
Insertion
Deletion
Query
Dept
Size
O(1)
O(1)
O(1)
O(n)
N/A
n
Table 6: Runtime for the native implementation
KD-Trees
The KD-Tree is a widely used data structure for storing data in multidimensional spaces. The structure splits the set of points following a
split rule and then handles each of these subsets in the same way as
the original tree. For a two dimensional space, this results in a average
search speed of O(log(n))[3]. A central part of the data structure is
the split rule.
• The standard split works by sorting the points of the cell by
coordinates and then let the lowest half be the left subtree and
the other half be the right subtree. With a two dimensional data
set the odd levels of splitting is sorted by the x-coordinate and
the even is sorted by the y-coordinate. This creates a split that
is most optimal for a homogeneous spread of points.
• The midpoint split splits the given cell by its middle, independent of the location of the points. This gives some empty leafs,
for the fields that does not hold any points.
92
• The sliding midpoint split is an improvement of the midpoint
split, suggested by Songrit and Mount[9]. It works like the midpoint split, except that it places the split, not at the middle of
the cell, but at the point closest to the middle of the cell. This
method is particular efficient for sets of data points that are spread
inhomogeneous.
Figure 16: Split rules for kd-trees. Source: Songrit and Mount[9]
As mentioned, the standard split method is the most optimal for
a homogeneous spread of points, but the typical dataset given has a
inhomogeneous spread of points, as specified in F.1. For a dataset with
these characteristics the sliding midpoint split would be more optimal.
In figure 16 it can be seen how the three different methods splits the cell
in a inhomogeneous dataset. In the areas far from the vantage point,
a query call could very fast conclude that there is no nearby objects.
With the sliding midpoint split rule in a kd-tree, a solution would
still only be able to return all points within a given two dimensional
range. It is required to check which one of these points is within the
request radius afterward, but that does not effect the runtime much. In
total this can be implemented to have to following average performance:
Setup
Insertion
Deletion
Query
Dept
Size
O(n)
O(log(n))
O(log(n))
O(log(n))
log(n)
n
Table 7: Runtime for the kd-tree
93
M-Trees
The M-tree is balanced tree for storing and quiring on data based
metrics (distance functions)[11]. The concept of the tree builds on
dividing the points into M circular areas. The areas is set as nodes
as the first tree. Each of these circular areas has its center in one of
the points. This division is then repeated on each of these circular
areas, creating yet another level in the tree. Some points might serve
as center of a circular areas on more than one level in this structure.
The data structure of each area / subtree holds the following information:
• The pivot point
• The covering radius of the sub tree
• The distance from the point to the parent point
• A pointer to the subtree
The leafs of the tree follows a different structure. It only holds the
point, distance to the parent point and a reference to the data object.
Since the internal nodes are all auxiliary points, the number of leaf
notes are always N.
The amount of subtrees in each internal node is, as mentioned, M,
hence the name M-tree. A typical M value is 3 or 4, as this reduces the
dept of the tree a lot, compared to a M value of 2, but does not effect
the query time for each node a lot, as a high M value would.
If the tree is balanced optimally, the dept of the tree can be expressed by the following:
N = M d−1 ⇔
d = ceiling(
log(N ) + log(M )
)
log(M )
Derived from the layout of the tree, the total amount of notes in an
optimal tree can be calculated from the dept as:
s=N+
d−1
X
M d−2
i=2
The range query, which finds all points within a given range to a
given point, can be done in log(N). This is the query that is most relevant for the solution to the given problem.
94
The setup of the M-tree is performed with recursive insertion over
the given dataset. Insertion into the M-tree can be performed with
O(log n) [18]. Due to that, the setup of the tree can be done in O(log
n * n * 0.5), which can be approximated to O(n log n) or O(log n!).
The query time is approximately O(n) [18]. It is faster than O(n), but
its runtime is rounded down to O(n), since it is not O(log(n)).
In conclusion the M-tree implementation would have the following
average performance:
Setup
Insertion
Deletion
Query
Dept
Size
O(n log n)
O(log n)
O(log n)
O(n)
log(N ) + log(M )
ceiling(
)
log(M )
dept−1
X
N+
M d−2
i=2
Table 8: Runtime for the M-tree implementation
Other solutions
Several other data structure have been researched as possible solutions.
This includes tree structures such as the APD and LSH, who are both
discarded as they are improvements for high dimension problems, while
the given problem only holds 2 dimensions. The VP (vantage point)
tree have also been analyzed, but it is only usable for stationary vantage
point. This is rarely the case in the given problem. A similar structure
to the M-tree, is the ball-tree. It is however optimized for solving the
nearest neighbor problem. This optimization is of little interest to the
solution of the problem.
Solution selection
Based on the gathered information and analysis, the best suiting solution should be selected. The main concern for the evaluation is the
speed of the Query. Secondly it is the Setup, Insertion and Deletion.
Third the memory usage (and thus size of the tree) is considered.
Comparing the native solution6 to the kd-tree7 and the M-tree8,
the following can be concluded.
95
• In query, the kd-tree solution is running in logarithmic time,
which is faster than both the m-tree and native solutions.
• In setup, insertion and deletion the native solution will always be
fastest, as it is running in constant time, due to its simplicity.
• In insertion and deletion both the kd-tree and m-tree solutions
are running at logarithmic speed.
• In the setup the kd-tree is much faster than the m-tree, with linear
speed over an n-logarithmic speed.
Through this comparison it is clear that the kd-tree is the most
efficient implementation. The best suited kd-tree implementation for
this is using the sliding midpoint split.
Conclusion
Several different solutions were researched and the best were proposed
for comparison. This were a kd-tree and a m-tree solution. The two solutions were analyzed in details and compared to each other and to the
native solution. It could be concluded that the kd-tree implementation
has the fastest performance.
96
F.3
Implementation method
Purpose
The purpose is to describe the implementation method of the kd-tree
with sliding midpoint split.
Concept of the kd-tree
As mentioned in F.2, the basic workings of the kd-trees is splitting the
dataset following the first dimension on the first level, second on second
etc. until the number of used dimensions is reached. In a kd-tree for
a two dimensional dataset, that results in all odd levels splits on the
first (x) dimension and all the even on the second (y) dimension. After
the split the lower part of the split is placed in the left subtree and the
higher nodes in the right subtree. This split is repeated recursively.
An example of a kd-tree for 7 nodes can be seen in figure 17.
Figure 17: Example of a kd-tree
Split methods
The basic split is, as mentioned, to sort the points by one dimension.
If the data points are clustered, then it can result in cells from the
clustered areas also covering large amounts of the empty area. As a
result of that, a query in the empty area would have to go trough a
long set of trees, before concluding that there is nothing near that area.
97
In F.2 an alternative split method, the sliding midpoint split method,
where shortly described. This split method focuses on optimization for
clustered data points. The split on a set of points in a cell works as
follows [9]:
1. Consider a median going trough the middle of the cell in the
longest of its sides.
2. If there are points on both sides of the median, then this is the
splitting line. No point is set in the node. The points from the
two sides of the median is set as its two subtrees.
3. If there are only points on one side of the median, then the median
slides toward the first/closest point. This point is set as the node.
The points left are set as its subtree (to the left or right, depending
on where the points are located).
An example of this split algorithm applied can be seen in figure 18.
It can be observed that the tree will become deeper in the clustered
areas. For this impact in a large dataset, see the visualization in figure
16. The sliding midpoint implementation can include that the diagonal
is placed in the direction, so it slices the cell on the longest dimension.
Figure 18: The standard split (above) and sliding midpoint split (below)
applied to the same dataset.
98
Building the kd-tree
Following the given description for the sliding midpoint split, an algorithm for building the kd-tree can be designed. This is described as
psuedo code in algorithm 4.
99
Algorithm 4: BuildKdTree
Input: P: points for the subtree.
cStart: start coordinates for the cell.
cEnd: end coordinates for the cell.
Output: The tree/subtree in kd-Tree format
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
if P contains only one point then
return a leaf with the info from P[1].
if the cell x size is larger than its y size then
sort P by x coordinates
m = the x coordinate of the median of the cell
else
sort P by y coordinates
m = the y coordinate of the median of the cell
if m is on the left of P[1] then
Let the node be P[1]
Let pLeft be nothing
Let pRight be all the points, except P[1]
Let the right cell (cRightStart and cRightEnd) be the area on
the right of the median line trough P[1]
else if m is on the right of P[#(P)] then
Let the node be P[#(P)]
Let pLeft be all the points, except P[#(P)]
Let pRight be nothing
Let the left cell (cLeftStart and cLeftEnd be the area on the
left of the median line trough P[#(P)]
else
Let i be the index of the point closest to the median line on
the right side
Let the node nothing
Let pLeft be points P[1 to i-1]
Let pRight be points P[i to #(P)]
Let the left cell be the area on the left of the median
Let the right cell be the area on the right side of the median
if pLeft then
v.l = BuildKdTree(pLeft,cLeftStart,cLeftEnd)
if pRight then
v.l = BuildKdTree(pRight,cRightStart,cRightEnd)
return v
100
Querying the kd-tree
The structure of the kd-tree is optimized for querying. The common
query function for a kd-tree is the query of a range interval for each
dimension. For two dimensions, this is the x and y range interval from
which the points queried should be.
As the data required depends on a circle rather than on a square area,
the query function can be optimized for this purpose. It is given a
center point and a range, rather than an x and a y range interval. The
check for a given coordinate is then performed by analyzing if the point
is with the given range to the given point. This algorithm is described
Algorithm 5: SearchKdTree
1
2
3
4
as pseudo code in algorithm 5.
5
6
7
8
9
10
11
12
13
14
15
Input: v: kd subtree
p: search pivot point
r: search range
T: Table of the results so far.
Output: Table of the the data fitting the range
if v contains a point then
if coordinates is within range then
table.insert(T,v)
if v is not a leaf then
if the median is parallel to the y axis then
if p.x - r < v.x then
T = SearchKDTree(v.l,p,r,T)
if p.x + r >= v.x then
T = SearchKDTree(v.r,p,r,T)
else
if p.y - r < v.y then
T = SearchKDTree(v.l,p,r,T)
if p.y + r >= v.y then
T = SearchKDTree(v.r,p,r,T)
return T
101
Insert node
Nodes can be inserted in the tree in similar fashion to how nodes are
inserted in other search trees. The algorithm is to search down into
the tree, to find the location best fitting and the insert the node when
reaching a leaf. The insertion run in logarithmic time, since the average
dept of the kd-tree. This insertion mode can result in a non optimal
balanced tree.
A pseudo code implementation of the algorithm can be seen in Algorithm 6.
Algorithm 6: InsertKdTree
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Input: v: current point in the tree or its root
p: point to insert
Output:
if the median is parallel to the y axis then
if p.x <= v.x then
if v.l then
InsertKdTree(v.l,p)
else
v.l = p
else
if v.r then
InsertKdTree(v.r,p)
else
v.r = p
else
if p.y <= v.y then
if v.l then
InsertKdTree(v.l,p)
else
v.l = p
else
if v.r then
InsertKdTree(v.r,p)
else
v.r = p
102
Remove node
Nodes can be removed from the tree in two ways. The node data can
be stripped from the node that should be removed, while the node is
kept as an auxiliary node, if it is not a leaf. This method is fast, but the
tree does not get smaller in size when the middle notes are removed.
The other method is to completely remove the node and then rebuild
the subtree of the cell. This method takes longer time, but it optimizes
the structure of the subtree.
As stated in the requirements in F.1, some nodes might change position.
If this is done by Remove and Insertion, using the first mentioned
removal method, it could result in an explosion of the size of the tree.
Due to this, it is best to implement it using the rebuilding method,
which is done in psuedo code in algorithm 7 and algorithm 8.
Algorithm 7: GetAllKdNodes
1
2
3
4
5
Input: v: current point in the tree or its root
T: table of nodes so far
Output:
insert v in T
if v.l then
GetAllKdNodes(v.l,T)
if v.r then
GetAllKdNodes(v.r,T)
Algorithm 8: RemoveKDTree
1
2
3
4
5
6
7
8
9
10
Input: p: the point to remove
Output:
parent = p.p
initialize table T
if p.l then
GetAllKDNodes(p.l,T)
if p.r then
GetAllKDNodes(p.r,T)
if parent.l = p then
parent.l = BuildKDTree(T)
else
parent.r = BuildKDTree(T)
Implementation
The kd-tree is described in the algorithms as functions, but it can
however be implemented as either functions or as a class. Since the
103
functions are relevant to be applied on all nodes in a kd tree, then it
is best implemented as global functions.
The functions can be implemented using Test driven development. It
is relatively easy to predict how the tree would look for a small dataset
and then check that the output tree is as expected. The tests can then
also be expanded to larger datasets, where the results can be validated
using the query functions.
104
F.4
Test and evaluation
Purpose
The correctness and performance of the implementation should be
tested and validated trough a series of tests.
Test trough TDD
The solution is implemented using TDD (Test driven development).
This includes design of a series of test cases for the unit tests used in
TDD. These unit tests are written while the code is developed. Several unit tests is created for each function implemented. A general
structure in these tests is to first test the functionality on a leaf, implement that functionality, and then test against a simple tree example.
All the unit tests created are run successfully in the end. Some of
the unit tests have uncovered minor, but vital errors in the code. An
example there off is checks that stops the BuildKdTree function from
running recursive, when there is no more points left to insert.
Performance test
In order to verify the performance improvement by the solution, the
kd-tree solution is run in a performance test. This is held up against
the native implementation, run in the same test. The test is run on
different number of points, but all in the same area (1000x1000). The
performance is measured by the runtime of 10000 query calls.
The measurements confirms the huge difference between the native
and the kd-tree implementation. It also confirms that the expected
run times are correct. The native implementation runs in O(n) and
the kd-tree implementation runs in O(log(n)). The results of the measurements are shown in figure 19.
Conclusion
The solution have been tested under the implementated and minor
errors found have been corrected. The solution have been performancetested in a large scale scenario. This have revealed that the
KD-tree implementation runs in O(log(n)) time, which is much faster
105
Figure 19: Performance measurements
than the O(n) native implementation. The solution is a huge improvement and a solution that fulfills all the given requirements.
106
G
Syncronization of datasets
between AddOn clients
107
G.1
Problem description and analysis
Purpose
The purpose is to determine and describe the problem in details.
Problem description
Sharing and maintaining of datasets for AddOns in World of Warcraft
(wow) holds some problems and challenges. AddOns are given two
different ways of communicating: Directly from one player to another
and from one player to all other players in the same channel. There
is no way to that all communication has to be between client, with no
central server.
The communication is limited to a fixed limit of 4 KB/s when the
performance of the game is above 20 fps and 2 KB/s when it is bellow 20 fps. This limitation is applied to both communication from one
player to another and from one player to all players in the communication channel. The fixed limitation is implemented inside a widely
used 3rd party library for AddOns called ”ChatThrottleLib”. This is
done for security reasons, as there exists a currently unknown limit, set
by the client. If a player exceeds this limit, they will be disconnected
at once. There is currently no known limit to how many messages a
player can receive, but the receiving players AddOns will have to process all received messages. A large amount of messages received can
then potentially slow down the client. Due to this channel communication (from one player to all), should be kept at a minimum.
Even though all traffic from one player to another goes via the central server for the game (or for the game realm), there can be some
minor difference between the communication latency between players.
This measurement of this latency are available to the AddOns trough
the ingame API.
The majority of AddOn communication is small notifications or
flags, send between two players or from one players to many. Some of
these can be in a longer chain of communication similar to handshaking.
A typical need for addon datasets, relevant to several clients for an
AddOn, is to synchronise a relatively large datasets between multiple
players. This need exists as a consequence of the lack of a server to store
these datasets. These datasets typically got a version for each subset,
allowing concurrent changes to different subsets. A typical dataset can
108
be up to 2 MB of size.
A worst case scenario is a player who got new versions of all subdatasets and comes online on a realm with many users. This can result
in him having to send the data to each other player that requests the
data. If the dataset is 2 MB, then this would take 500 sec (8.3 minutes)
pr player. This is an unacceptable scenario, since it would render that
players client completely useless, in terms of other AddOn communication, while the requests are taken care of.
The typical usage described above has two typical scenarios.
1. PlayerA changes several nodes in a central dataset. 100+ other
players are interested in getting this new information.
2. PlayerB comes online and has an out of date dataset. There are
100+ other players who has the up to date dataset.
The two scenarios covers most of the common usage, but it can be
more complicated, as it is realistic that the two scenarios happens at
the almost same time.
109
G.2
Related Solutions
purpose
It is the purpose to research relevant solution concepts that can be used
to solve the problem with synchronization of datasets between AddOn
clients.
BitTorrent
Data communication between AddOn clients have a lot in common
with peer to peer (P2P) communication, which makes the bittorrent
protocol and concepts a relevant system to draw solutions from.
The basics of the bittorent is that one client, who holds the data,
first creates a torrent file. This file holds different necessary information, including a list of the data to be shared, which is separated into
pieces of typically 256K bytes[4]. The user with the data and first client
then uploads a torrent file to a tracker (server). This server only function is to supply a list of the clients that takes part in sharing of this
torrent. Clients (peers) gets the pieces from the seeders (the client that
have the whole data and others who have completed the download).
The peers can also get pieces from other peers, but that happens in a
”tit for tat” manner, where they exchange pieces that the other part
need[17].
Gnutella
Gnutella is a different P2P network type. It is an overlay network,
where the client discovers other client in the network trough Pings
(and Pong responses). In the same way it sends out queries in the
network, which then are returned from the first other client who got
the information queried[16].
The relevant parts of this system is that it is send between clients,
where not all knows each other. A system like this can then reach
players that are not in the common communication channel.
DHT
The DHT (distributed hash table) overlay network is a different approach, where the responsibility and data for each subset is distributed
out to different clients. In order to do a query or a set call, the client
110
must then connect to the client responsible for the subset[15]. It provides a solution that have a low memory usage, as most data is only
present at the client when requested. It does however come at the cost
of the network usage, which is relatively high. In addition, the system
is vulnerable to clients being offline.
111
G.3
Solution development
Purpose
The purpose of the solution development is to develop and evaluate
solution designs based on the related research described in section G.2.
DHT inspired solution
One possible solution works by creating an overlay network, which is
inspired by DHT. In scenario 1 this can be done by sharing the updated
data to the other players in a leaf like structure. First player 1 sends
information to player 2, then player 1 sends information to player 3,
while player 2 sends the information on to player 4. This is illustrated
in figure 20.
Figure 20: DHT inspired solution - Scenario 1
The sharing can, as seen in the figure, happen in logarithmic time.
It has the runtime of O(s * (log(n) + 1) ) where s is the size of the
data set or subset and n is the number of players to send the data to.
A solution to scenario two is relatively easy, as the data is known to
many. The new arriving player just have to request the dataset from
any player that got it. This gives a linear transfer time of O(s + 1 ).
Bittorent inspired solution
It is relevant to work on a solution that is inspired by the bittorrent
protocol and the concept of how it works. Bittorent is strongest when
there is a lot of seeders, which imply that this solution might work
better for scenario 2 than scenario 1.
112
The dataset / subset is split up into parts of fitting size (e.g. half
the size of the bandwidth).
In scenario 1, it is possible to do the sharing from one player (the
seeder) to all the other players trough relay sharing. The seeder sends
the parts one by one to the first player. Each time a player receives a
part, they relay this part on to the next player. This solution solves
the scenario in the time O(n + p - 1 ), where n is the number of players
to share the data to and p is the number of pieces to send.
Scenario 2 can be solved in an efficient manner by letting all the
players with the information parts send specific parts to the requesting
player. These specific parts are chosen in a determent fashion from
the known number of parts and the known list of players participating.
This solution utilises the strongest side of bittorrent: fast transfer by
receiving the data from multiple sources. This strength is even more
visible for wow AddOns, as there is a limit on how much a player can
send, but there is no known limit to how much data a player can receive. This solution solves scenario 2 in the time O(p / n).
The solutions does have some issues in certain problematic situations, but these can also be solved. In scenario 2, it is a realistic
situation that a player goes offline while participating in this predetermined sharing pattern. A solution for that is that the receiving player
can request missing pieces from the players that it have received messages from, once the others are received. This would only give a minor
delay.
A problem in scenario 1 could be if a player has a long message
queue (evt. from other AddOns temporarily using all the bandwidth).
This can be done by letting a client with high queue return a negative
message to the previous sender, who then just relay the data to the
next on the list.
Solution selection
Both of the suggested solutions are related in their designs. The expected performance are however very different, as seen in table 9. It
can be seen that the bittorent solution preforms a lot faster in both
scenarios. It is especially fast in scenario 2, if there is many users.
113
Scenario 1
Scenario 2
DHT
O(s * (log(n) + 1))
O(s + 1 )
Bittorent
O(n + p - 1 )
O(p / n)
Table 9: Runtime of the solutions
114
G.4
Implementation
Purpose
The purpose is to describe the implementation of the datasharing solution. This includes analysis of its desired interface, as well as development of the communication flow.
Usage and interface
It is relevant to analyse the intended usage of the solution, in order
to make the most fitting interface to the solution. Typically data is
managed by a data list class, which can be interfaced with a selection
of functions. The functions that are in common with all of these data
lists are described in an example in table 10. Note that the get and
set functions change names depending on the data list, but follows the
syntax GetX and SetX, where X is the name of the object type the list
handles. The objects typically has a version number which can also be
retrieved trough the functions. This number is either incremented or
set to a time stamp every time it is edited.
Considering the interface of the list functions, then the most dynamic interface would be to let the Get, Set and GetAllGuids functions
be supplied as the constructor arguments to the datasharing module.
This allows the module to be compatible with changes to the list class
structure.
Distribution flow
As described in section G.3, the solution builds on splitting the data
into pieces. The pieces are distributed following two scenarios, as deFunction:
Functionality:
list.GetAbility(guid)
Gets the ability object by the given guid.
list.SetAbility(guid,data) Sets the object for a given guid with an
object created upon the given data.
list.GetAllGuids()
Returns a table with the guids of all objects in the list.
obj.Serialize()
Returns the data from the object.
obj.GetVersion()
Returns the version of the data in the object.
Table 10: Data list function example for AbilityList
115
scribed in section G.1.
Scenario 1 is a mass distribution scenario, where one player’s client
has updated data and needs to distribute it to all the other player’s
clients. The selected solution works on sending the pieces trough a
chain of clients. The flow for this distribution can be seen as a flow
diagram in Appendix ?. In addition to the described chain sending of
pieces, then the flow also handles two other special cases.
1. If a receiving player got a even newer version of the data. This
should however not happen in normal use.
2. If a receiving player has too low bandwidth capacity available to
relay the data on to the next player.
The second case (for player B) is handled sending back a notification
to the sender (player A), which then relays the old messages to the
next player (player C). All data pieces after this are then send from
player A, to both player B and C, but only the data to player C has
information about what players to relay the data on to further.
Scenario 2 happens when a user comes online with outdated data.
The solution uses the strength of bittorrent by receiving pieces from
many other clients concurrently. Since it can not be known for sure
that all clients in the network are able to send, up to date and available,
then it is troublesome to send all pieces in a predetermined pattern.
Due to this, the player coming online sends his versions to the common
channel. All the other clients then responds to the versions and sends
eventual offers and requests back to that player. The flow for this can
be seen in the flowdiagram in appendix ?. An interesting detail in the
design is an optimization for the case where the player comes online
and has an updated dateset compared to all other users. This could be
the case if the user have edited a subset while nobody else were online.
The clients waits and gathers both requests and offers. If there is more
than one request for a given set, then it sends this set out in the same
way as it is done in scenario 1. Regarding the offers, then it finds the
newest offers and then spreads out the requests on multiple player who
have given the newest offer.
Depending on the data list and the data being handled, it can be a
relevant scenario that multiple users/players attempts to edit the same
subset at the same time. This problem can be avoided by creating
a lock system, inspired by the semaphore practice used in concurrent
programming. This can be implemented by sending a lock flag to the
116
chat channel. If the player receives his own message in the channel
before he receives a lock message from any other player attempting the
same, then it can be considered successfully locked.
117
G.5
Test and evaluation
Purpose
The correctness and performance of the implementation should be
tested and validated trough a series of tests.
Test trough TDD
The solution is implemented using TDD (Test driven development),
which results in a great coverage in unit tests. Following the TDD
rules, the tests are created for all pieces of functionality, before this
functionality is implemented, one at the time. This ensures a high
level of correctness of the implementation. Since all unit tests create
have passed successfully, then the implementation can be concluded to
be correct.
Performance test
The performance of the system, especially the sharing speed, is quite
important. Due to this, a performance test is done to measure the
performance of the final system. The test is executed in a simulated
environment, rather than in the game environment, since it would require relatively complex coordinate or a large amount of game accounts
and computers, in order to carry out a full scale performance test. A
native solution have also been implemented, which will serve as reference in the performance tests.
The initial tests and comparison with the performance of the native
solution showed an unexpected result: The performance fell rapidly in
the case of small datasets and a large amount of players. This was
due to the auxiliary data send with the data stream, namely the list
of players. In these cases, the list of players could be multiple times
larger than the actual data, which gave the bad performance. This
problem were solved by sending the ripples of data out several times to
separate lists of players. The number of times to do that would then
be ceiling(n / p * k), where k is the time for a piece to go from one
player in the list to the next. In the simulation, the latency factor is
not included and thus this constant would be 1. This change solves the
problem and results in a more expected development when the amount
of players is rise on a small dataset, as seen in table 11.
In the initial tests it were also observed that the solution were quite
inefficient in small datasets, regardless of the amount of players. Analyses shows that this is due to the pieces being typically only 1 at these
118
Players:
Data size:
1
10
50
100
500
10
50
100
200
400
0.09
1.08
3.1
6
38
4.1
6
15
27
130
9
14
31
54
245
21
29
64
110
476
44
60
130
220
937
Table 11: Bittorent solution measurements - Scenario 1
Players:
Data size:
1
10
50
100
500
10
50
100
200
400
0.02
4.01
20
39
198
3.01
23
109
216
1078
7.01
46
220
438
2178
14
93
443
880
4378
30
187
889
1765
8779
Table 12: Native solution measurements - Scenario 1
sets. If the piece size is lowered, then it improves the performance for
small datasets, but it decreases the performance for large datasets. Due
to this, the piece size is set to change dynamically to be a 10th of the
data size. This results in there always being 10 pieces when sending
out data in scenario 1. The change effected both the small and large
data set tests positively.
Overall the final performance test results, seen in table 11 for scenario 1 shows that the solution is a great improvement compared to
the results for the native solution (see table 12).
Performance tests similar to those for scenario 1 were also carried
out for scenario 2. The measurements showed that it is an improvement, but it has the same performance as the native solution until
a certain data size is reached. As seen in table 13 and table 14 the
improvement is relatively large for larger datasets.
Conclusion
The solution were implemented as a class that requires some basic
functions from the data handling class. This method of implementation
allows for the system to be used dynamically and easily by most data
classes. An implementation trough TDD have verified the correctness
of the solution.
The solution have resulted in the expected performance improve119
Players:
Data size:
1
10
50
100
500
10
50
100
200
400
0.001
0.001
0.93
0.95
2.99
0.001
0.001
0.93
0.95
1.99
0.001
0.001
0.93
0.95
1.99
0.001
0.001
0.93
0.95
1.99
0.001
0.001
0.93
0.95
1.99
Table 13: Bittorent solution measurements - Scenario 2
Players:
Data size:
1
10
50
100
500
10
50
100
200
400
0.001
0.001
2
4
22
0.001
0.001
2
4
22
0.001
0.001
2
4
22
0.001
0.001
2
4
22
0.001
0.001
2
4
22
Table 14: Native solution measurements - Scenario 2
ment. The effect of the improvement is largest for scenario 1 (sharing
from one client to multiple clients), where it is a relatively large improvement for both increases in amount of participating clients and
the size of the dataset. The improvements in scenario 2 (sharing from
multiple clients to one client) are mainly visible for increases in the
dataset size, rather than in the increase of participating clients.
120
Appendix A
Figure 21: Flowdiagram for scenario 1
121
Appendix B
Figure 22: Flowdiagram for scenario 2
122
H
UML Class diagrams
123
Figure 23: UML class diagram for GHP model
124
I
User test of the initial prototype - Chat transcript
I.1
Odo
Character name: Odo Forum name: CMD.exe
Pre test questions
14:36:36 [Pilus]: Okay. First a few questions before we start the acual
test
14:36:59 [Pilus]: Have you done civilian / profession related RP before?
14:37:16 [Odo]: Does Stormwind City Guard-RP count?
14:37:35 [Pilus]: I would catagorize that as militiary myself.
14:38:15 [Odo]: Well, I’ve done civilian... Not that much though.
14:38:38 [Pilus]: Great. Are there any particular reason why you have
not done much of it?
14:38:45 [Odo]: Yea. Server died out.
14:38:56 [Odo]: All the RP left. ;-;
14:39:42 [Pilus]: Indeed sad. I am trying to develop a platform and
some tools to make the civilian / profession related RP more interesting and flowing.
14:40:24 [Pilus]: Do you think that tools can improve your experience
enough to engage in more cilivian RP?
14:40:49 [Odo]: A GHI-Currency would be too much of a hassle...
14:41:11 [Pilus]: Too much a hassle in what way?
14:41:52 [Odo]: Not for you. From my point of view, people would
most likely force it to some degree.
14:42:14 [Odo]: That is, if I know people corretcly.
14:42:33 [Pilus]: What do you mean by force it?
14:42:46 [Odo]: Okay, imagine this.
14:45:15 [Odo]: Guy A walks into a bar. The bartender, Guy B, is in
a guild that runs/owns the bar and the guild leader wants everyone to
use GHI because of the currency. However, Guy A doesn’t have GHI
for one reason or another and thus can’t give Guy B the money (c)
14:45:17 [Odo]: for the ale.
14:45:40 [Odo]: Yes, I’ve met people that are that fanatic...
14:46:09 [Pilus]: Indeed. Issues with people not wanting to have or
download the addon.
14:46:47 [Odo]: Indeed... Too much of an hassle for them and in some
cases, might deny people RP because of it.
125
14:47:08 [Pilus]: In regards to yourself, could you imagine that profession RP would be more interesting with mechanics that supports the
gathering, crafting and trade with other people?
14:48:06 [Odo]: Well, that would most certanly give me a very good
reason to start doing civilian/profession RP, so yea. Though wouldn’t
it kinda end up like Minecraft in some ways?
14:48:43 [Pilus]: You mean that the mechanic get focus over the acual
RP?
14:49:22 [Odo]: For some, yes. For others, no. It would depent on the
person in question.
14:50:07 [Pilus]: Indeed. And that is also why I am testing a concept.
Trying to see if it enhances the active roleplaying rather than enhance
passive roleplaying trough mehanics
During testing
14:53:06 [Pilus]: You can go into the mine and try them. Feel free to
14:53:19 [Pilus]: * think out loud and post what comes to your mind
14:54:02 [Odo]: Alrighty then.
14:55:36 [Odo]: Hmmmm...
14:56:36 [Odo]: Time to test this Spot-thingy.
14:56:54 [Odo]: Maybe an emote or something to let you know that
you didn’t find anything...
14:57:09 [Pilus]: Good idea
14:57:35 [Odo]: Okay. So I found two ores...Thing.
14:57:38 [Odo]: Where are they?
14:58:04 [Odo]: Ah, 2 meters towards northwest...
14:58:07 [Pilus]: They are not shown in the game world but they can
be interacted with in the menu.
14:58:51 [Odo]: It would be great to have something to messure meters
with. Since the Americans use ”Feets” and other nonsense.
14:59:35 [Pilus]: An option to show units in feets etc is a good idea
indeed
15:00:29 [Odo]: So I have 4 ores... And no idea if it’s twice the same
ore or not...
15:00:42 [Odo]: Does it stack ontop of each other after each spot?
15:00:49 [Odo]: Each new spot*
15:00:53 [Pilus]: They should, but they dont stack yet
15:01:05 [Odo]: Alright.
15:01:23 [Pilus]: Is it veins or Iron ore that you got?
15:01:35 [Odo]: All of them are Iron Ore Vein.
15:01:49 [Odo]: And one just dissappeared.
126
15:01:57 [Pilus]: They are nearby objects. Try and interact with them
by clicking on them
15:02:09 [Pilus]: In the menu that is
15:02:48 [Odo]: Too far away... Maybe a text to say how far away it is.
15:02:56 [Odo]: Kinda like the ARcheoligy on retail.
15:03:16 [Pilus]: Noted.
15:03:27 [Odo]: Oh, so it does update how far its away...
15:03:38 [Pilus]: Indeed
15:04:48 [Odo]: Two things.
15:05:28 [Odo]: The animation would be awesome and why is there a
cap in the perform-emote?
15:06:25 [Pilus]: Good idea about the cap. Regarding the animation,
then addons does sadly not have access to modify your character or
the game world
15:06:43 [Pilus]: AddOns can only do what can be done with emotes.
E.g. wave/kneel/sit.
15:07:09 [Odo]: Kneeling would be nice here.
15:07:15 [Pilus]: Noted.
15:07:53 [Odo]: And maybe that sound from the Link-Game when he
gains a new item if you successfully find the ore.
15:08:26 [Pilus]: So some kind of UI sound when the new item shows
up?
15:09:10 [Odo]: That or some text-announcement like ”You found a
ore!” or ”You found lots of ore!” or maybe ”You didn’t find anything...”
15:09:31 [Odo]: Is there a fail-chance with this?
15:09:33 [Pilus]: Indeed. More info feedback.
15:09:55 [Pilus]: Not currently, but there is rich options for adding stuff
like that.
15:10:07 [Pilus]: Anyhow, the test ends around here, so I got a few
questions for you
After test questions
15:12:07 [Pilus]: First off, as we talked about earlier, the mechanics
should not take focus away from the text roleplaying. How did you
think that the emote driven abilities in this prototype worked?
15:12:42 [Odo]: Hmmm... About that, let me test something before I
answer.
15:13:02 [Odo]: Yea, there should be a minimum-text-amount...
15:13:12 [Pilus]: Noted.
15:13:28 [Pilus]: Did it feel natural to you to roleplay trough a menu
like that?
127
15:14:07 [Odo]: Other then that, I quite liked it, really. It was kinda,
though not by much, immersion breaking but other then that, it was
really nice.
15:14:44 [Odo]: Maybe give pop-up window regarding examples on how
to keep the emote...
15:14:55 [Odo]: For the ill-experienced, that is.
15:15:15 [Pilus]: Could you elaborate that?
15:17:35 [Odo]: Sure. Have a little ”?” button that says ”Hints” or
”Examples”, going somewhere along the lines of either ”Hint: Look
for some specific color/patern in the stone wall” or ”Example: Bob
carefully eyes the stone walls of the mining tunnel, trying to (c)
15:17:47 [Odo]: find hints or clues of any veins to mine.”
15:18:40 [Pilus]: Do you mean in addition to the example in the ”Abilitity details” in the menu, or should it be that, just easier to spot?
15:19:55 [Odo]: Just a simple emote example to show/act as a guideline
on how to write the emote.
15:20:15 [Pilus]: Ah, as direct examples. Good idea.
15:20:24 [Odo]: Yup.
15:20:51 [Odo]: Because, quite frankly... I had no idea what the box
wanted me to do at one point. ;P
15:21:01 [Pilus]: Noted.
15:21:32 [Pilus]: Regarding the little UI with the nearby and the equipped
objects. How do you think that worked out?
15:24:11 [Odo]: The UI is nice and I find it to be easily understandable.
Though I had no idea where to put the ”Spot Minerals” item/skill...
So I threw one into my actionbar and the other on the left hand. An
explanation regarding the ”Equipped”-part would be grand.
15:24:29 [Odo]: Also, regarding the UI...
15:24:40 [Odo]: Where can I see what skills I’ve learned?
15:25:22 [Pilus]: You can see skills you have learned by pressing the
book icon in the menu. (That button is indeed missing a tooltip)
15:26:05 [Pilus]: And regarding the skill. It is indeed intended that you
can just drag it into an action bar
15:26:34 [Odo]: I pressed the book... Found the ”Spot Minerals” and
then dragged it off into the LeftHand slot... And the book is empty
now.
15:27:10 [Pilus]: Ah, that is a bug and should not be possible.
15:27:31 [Odo]: Huh. Got the item for less then 2 minutes and already
broke it.
15:27:31 [Pilus]: It is the idea that you should need to have a pickaxe
equipped later on.
15:27:50 [Pilus]: Well, this is a prototype test, so it is quite bugged.
128
15:28:02 [Odo]: It doesn’t seem that much bugged.
15:28:47 [Pilus]: Another thing regarding the UI. Did you move it away
from the middle of the screen and did you close it at any point?
15:29:51 [Odo]: Yea, I moved it down to the bottom right-half so I
could see where I was going. And I think I closed it once or twice,
though it was just to test it.
15:30:02 [Pilus]: Okay.
15:30:45 [Pilus]: Overall, do you think that a large scale system build
like this would make profession / civilian RP more appealing?
15:32:31 [Odo]: If it’s accessable, yea. Though there would ”need” to
be a group/community based around it. People can’t really bother to
solo-RP these days.
15:35:40 [Pilus]: Were you able to orientate yourself in regards to what
direction the ”nearby objects” were located?
15:36:58 [Odo]: With the aid of the ingame map, yea. And the update
regarding on how far away the vein was is really nice. An arrow that
points to the direction of the ore would be fantastic though.
15:37:36 [Pilus]: Would it work with an icon on the minimap? (like
with real mining notes)
15:38:59 [Odo]: That’d be great too. Just to show the general area
where the ore is, though it’s not really needed, it just makes it easier
to find it.
15:39:25 [Pilus]: Noted. Just one last thing then.
15:40:29 [Pilus]: I am developing this concept and AddOn as past of
a master thesis at the Technical University of Denmark. May I quote
parts of the feedback in the report if nescesary?
15:41:13 [Odo]: ... ”Master Thesis”?
15:41:37 [Pilus]: The final project at a master / candidate education.
15:41:43 [Odo]: Aaaah.
15:41:44 [Odo]: Gratz.
15:42:13 [Pilus]: Thanks. May I quote you in it?
15:42:13 [Odo]: But yea, since you’re doing more effort then me to
support WoW RP, you can use anything you want.
15:42:23 [Pilus]: Great.
15:42:34 [Pilus]: That was all. Thanks a lot for your help.
15:43:02 [Odo]: By the way...
15:43:14 [Pilus]: Yes?
15:43:31 [Odo]: You’re awesome. :3
15:43:37 [Pilus]: hehe, thanks.
15:43:44 [Odo]: Felt like adding that to your essay.
129
I.2
Shelnara
Character name: Shelnara
Pre test questions
Pilus: First I would like to ask you a question before the test.
Shelnara: Alright.
Pilus: Do you normally like doing civilian roleplaying
Shelnara: Not really! Unless my character is disguising as one.
Shelnara: Or possible as a side-character but those i’d usually RP IM
or forum style.
Pilus: Are there any particular reason why you would not roleplay as
a citizen e.g. a farmer or miner?
Shelnara: It’s just too mundane for my liking. I understand that sometimes people get upset when all they see are ”heroes” and ”villains”
but I’m over that already. I don’t mind. I think it’s a small price to
pay.
Shelnara: There are other games more suited for simple civilians roles
as well.
Pilus: Do you believe that game mechanicals tailored to the professions
(e.g. detailed mechanics for mining) could inspire you towards liking
civilian RP more?
Shelnara: Well, the problem is I’ve usually played on private RP servers
where you did not have systems like on here and you could easily port
around to get to RP as well as add items through GM commands so the
professions were completely redundant and people trying to RP simple roles were often ignored since the ’heroes’ always had their armor
and weapons already and whatnot. Here those professions are actually
useful because of how the game was made. I could perhaps see myself
rolling an old grizzled human blacksmith alt but not as a main character.
Pilus: Great. Thanks for the detailed answers
During testing
Pilus: First off, how did the menu showing your equipment and the
nearby objects feel to you? What were your initial thoughts?
Shelnara: Clean and neat, fits into WoW and everything is clear. No
complains.
Pilus: Did you move it away from the middle of the screen?
Shelnara: Well yes. I moved it near my mini-map, otherwise it was
130
getting in the way but since its moveable, its fine.
Pilus: Is the menu something that you could imagine having open all
the time while doing profession roleplaying?
Shelnara: Well honestly, my roleplay experience depends almost solely
on literacy and writing, not any kind of systems, as neat as they may be.
After test questions
Pilus: Very well, that leads me well to the next question. How do you
feel about abilities that are tied together with emotes, like one you
experienced with ’search for minerals’ ?
Shelnara: I think it reminded me of some Neverwinter Nights servers
that I used to frequent. Roleplaying servers. So, somewhat nostalgic.
I’d say it felt good so if there were roleplayers that would actually want
to that advantage of this, theyd like it too.
Pilus: You spoke earlier about that you were not very interested in doing profession roleplaying. Do you think that a system like this would
make you more interested in doing such roleplaying?
Shelnara: Like I said, my roleplaying experience is never tied to systems. It is useually purely based on text and imagination alone. That
is my personal opinion, of cause, it may vary.
Pilus: Thank you for that. The development of the AddOn / Solution
is part of a master thesis I am doing at the Technical University of
Denmark. Do you mind if I quote you in the report if needed?
Shelnara: No. I do not mind
Pilus: Thank you for your time :)
131
J
J.1
Final user test
Lancl
Party Pilus: First I got some questions before the tests.
Party Pilus: Do you normally do civilian roleplaying?
Party Lancl: I do enjoy civilian roleplay, yes.
Party Pilus: Are there any particular reasons why you enjoy it?
Party Lancl: Civilian roleplay provides a far more relaxed atmosphere.
Ironically you have the ability to stand out more and socialize in a far
more relaxed enviroment.
Party Pilus: Do you feel that the civilian roleplaying get the acceptance, support and aknowledge from other roleplayers at it should?
Party Lancl: I’d say it largely depends on the roleplayer. There’ll
always be mixed receptions to the roleplay you provide and support.
Overall, I think it’s quite fair.
Party Pilus: Are there any particular roles that you persue in civilian
roleplaying?
Party Lancl: Ofcourse. While some enjoy playing the more entitled or
noble classes of roleplay, I prefer to get ’down and dirty’ if so to say.
The working class or downtrodden branch is of particular interrest to
me.
Party Pilus: When playing a role in the working class, do you normally
play the part of the worker in an off work situation or in work related
situations?
Party Lancl: It’s a wide combination depending on my mood and circumstances. I would, however, claim that it is more often in a working
scenario. I’ll often roleplay all alone by myself in certain enviroments.
This can be rewarding as you entertain yourself with whatParty Lancl: - tools you have available while also bring some marvel
to any random passer-by who may approach. It makes the world feel
more living for others while providing you lots of fun.
Party Pilus: Do you believe that mechanics tailored towards roleplaying professions could improve the value and entertainment gained in
while roleplaying a worker in a professional scenario?
Party Lancl: Most certainly. While the game provides its’ own tools
and means, there will always be ways which can enhance the experience. Usually you have to imagine those tools or make-believe they
exist. If they could be provided in a constructive manner to helpParty Lancl: - improve the experience and provide something that feels
more ’real’ than the ”because I said so” ethic, it would be absolutely
marvellous.
132
Party Pilus: Thanks. I would like you to come to me in the game and
then we can try out a little scenario. The setting is a mine worker in
the Jasperlode mine.
Party Lancl: Ofcourse! I’ll be right there.
You smile at Lancl.
Lancl waves at you.
Malbridge says: Afternoon and welcome to the Jasperlode Mine
Lancl raises his brow lightly at the well dressed gentleman.
Lancl says: Howdy, Sah. And thanks fer’ the invitation.
Tuvae has defeated Elisia in a duel
Malbridge says: Are you ready to give a hand in the mine?
Lancl says: I’d been under the impression this’ere mine’d been closed
off for a dang while. When I heard t’was opened back up’n’such.. Well,
I’d to take the chance, eh?
Malbridge says: That is great. Have you mined before?
Lancl says: Oh, yessah! But I’m a little rusty, I’d say. An’ I’ve ain’t
ever been to this here mine b’fore.
Malbridge says: Ah, I got some few notes noted down that might help
you. It is quite crude and simple
Malbridge gets some notes from his pocket and hands them to Lancl.
Party Lancl: Uhhhh...
Lancl accepts the notes from Malbridge and smiles warmly.
Lancl says: Thanks, tha’s mighty kind of ye’.
Lancl opens the notes to read through them. His facial expression display a clear interrest.
Party Pilus: What is your first impression on the ”Hand to” functionality?
Party Lancl: Very simple and easy to understand. The sound was really what had me interrested as the familiar sound that we have become
programmed to understand means ”trade” was played.
Party Lancl: Subconciously that meant I easilly understood exactly
what was going on despite it being the first time I experience the GHI
trading system.
Party Pilus: Great
Party Pilus: What is your impression on the quickbar (the one showing
nearby objects and equipped objects)?
Party Lancl: Small and simple. As with all new things, you have a
sense of curiousity to find out what the buttons mean and what the
slots do. It’s encouraging that it’s not an overwhelming mess of option
boxes, but rather a simple and encouraging design.
Party Pilus: Do you think it is an UI you could like to have open while
doing profession related RP?
133
Party Lancl: Naturally. It’s pretty neat and makes you aware of its’
presence without seeming imposing or dominant.
Party Pilus: Good.
Lancl says: I’ll be. This venture jus’ keeps givin’ huh?
Malbridge says: It is just for borrowing
Lancl accepts the mining pick from Malbridge. He takes a quick glance
across the surface of the wood to determine the sturdiness. Upon the
inspection his eyes also casually glance past the head as he examines
the metallic composition.
Lancl says: Did sound too good t’ be true, too, aye. This’s a fine pick.
Lancl grins warmly as he nods encouragingly.
Malbridge says: Glad you think. Off you go then
Lancl says: Alrighty!
Malbridge says: Find yourself a good vein and hack away.
Lancl swings the Mining Pick over his shoulder as he looks up into the
sky. With a determined gaze in his eyes he smiles as his lips curve to
form a gentle circle. A merry tune is soon heard escape his lips as he
ventures into the mine!
Kobold Miner says: You no take candle!
Lancl looks around curiously to see if he can locate any minerals.
Party Pilus: What is your first impression on the action UI you just
encountered?
Lancl says: Oh my, I’s already spotted me’self two Iron veins! Yippee!!
Party Lancl: Very nifty. Actively searching for veins is a smart idea.
What steals the cake is how the game expects me to type in an emote
to trigger the action. It makes it feel more alive.
Party Pilus: Great. Did you take any notice to the blue (!) button in
the action UI?
Party Lancl: Oh, no. I did’nt notice that.
Party Pilus: Noted.
Lancl Swings the pick from his back and nods. This must be where the
Iron vein is located!
Lancl says: I’ve got a hunch that there’s plenty of Iron under this’ere
vein, yep.
Lancl says: Seems I’s got myself some chunks of raw Iron Ore on me
left.
Lancl says: Better pick ’em up!
Lancl says: ...Once I’ve broken it down a bit.
Lancl begins breaking the iron ore. He wipes his brow lightly while
working and his whistling tune has turned to groans.
Lancl says: ’ere we go. Some Raw Iron Ore’s always good, ayep!
Party Pilus: This concludes the demonstration. I got a few ending
134
questions for you
Party Lancl: Ofcourse. Ask away.
Party Pilus: Did the solution improve your profession roleplay of a
miner compared to doing it without the AddOn?
Party Lancl: Oh absolutely! It was a pretty cool experience, like a
game within the game. It gave the entire situration a well needed flavor. Walking around as a miner is fun in and of itself, but this made
me feel like I was ACTUALY doing something worthwhile.
Party Pilus: What do you think about the lenght of each action? (They
are after all quite a bit longer than their normal game profession counterparts)
Party Lancl: Hm. I actualy did not pay much attention to it. I mean,
ofcourse I realized it took longer, but it was more satisfactory than punishing. I mean, the action was a reward for my emote, so the lenght
was not an issue, quite contrary.
Party Pilus: What do you think about the detail level and the amount
of steps in your way from spotting the mineral to getting some raw iron
ore?
Party Lancl: I loved that part. I did’nt want to break character to
explain it, but I have to say it was fantastic. When it comes to rewarding players for actions there are two extremes that are easilly reached.
There’s the instant grattification which immidiately Party Lancl: - rewards the player for simply clicking a button but it
becomes tideous and grindy very quickly. And then there’s the extreme
where a player is forced through tonnes of unwanted texts and steps
that they would really rather skip to get to the results. Party Lancl: The way this was implemented in the experiment was
absolutely fantastic. It struck a fine balance between rewarding and
encouraging. Not many games manage to find such a balance, but
within this short test I can say without a doubt that I was both Party Lancl: - encouraged to continue but likewise also rewarded for
my efforts.
Party Pilus: Thanks for your replied. Do you have any comments to
add yourself?
Party Lancl: Usually when you roleplay, you use your character as the
tool. You need other players around you to respond to your actions
and emotes and that’s a good thing, too. But what this AddOn does,
is provide you with an invisible participant. Party Lancl: - Finally, your character is actualy more than just a tool
to the roleplay, it becomes a vibrant part of the play itself. You play
with your character and the AddOn makes your character play back
WITH you as a companion rather than just an empty vessel.
135
Party Lancl: And I really appreciated that.
Party Pilus: Thanks
J.2
Hinkerburry
Party Pilus: First off, I would like to ask you a few questions before
the test
Party Pilus: Are you generally interested in civilian roleplay?
Party Hinkerburry: Generally I do - its my favorite type of RP, I do
enjoy being able to RP out the ”whole” kit when it come to it - I mean
sure there are the standard adventures, and warriors etc - but they
need to have village to defend or a city to fight for - and there are
people there, those indivudals live in a fantasy world with no ”special”
things about them, mirrowing our own world in a unique way, I adore
really sinking into a character like that becouse I can -really- relate to
them.
Party Pilus: Do you feel that the game mechanics and focus of the
game gives you good oppotunities to live out simple civilian roles?
Party Hinkerburry: Well, the game is not very focused on any type of
RP to be fair - its never offered us the simplest tools like plonking down
a box or what-not, or having any ”real impact” on the world around
us, in particular the cities and villages where there can be various of
things in the way to ensure the PvE aspects are lived out - invisible
walls, not being able to toss out smoke screens.
Party Hinkerburry: Short: No I don’t think so.
Party Pilus: Do you currently feel acceptance, backup and/or interest
from other RPers when taken on a simple civilian role?
Party Hinkerburry: It all depends on the circle of people I am with but I’ll presume we mean the ”public” RP scene.
Party Pilus: Let me hear about it for both cases
Party Hinkerburry: In that case - well generally we are often met with
optimism - people are often veiwing us as ”cool” becouse we do something diffrent, but we are often ignored aswell since its often quite
”heavy” rp we do, and generally could be concidered bland if you Party
Hinkerburry: more focused on killing dragons and rescuing maidens as
opposed to living into a character.
Party Hinkerburry: As for private circles? Well yeah, its my friends.
Party Pilus: Thanks. Do you have anything to add before we move on
to the testing?
Party Hinkerburry: Hrm, well I’d like to add that I feel that if we
could get people to develop their RP - start thinking deeping into
136
their actions and relaitons we might improve upon it somewhat. Party
Hinkerburry: And civilian RP and the things it brings to the table as culture, realtions, circomstances, nations - are all great basis for it
to grow.
Party Pilus: Thanks.
Party Pilus: Regarding the addon. Have you noticed where you open
it yet?
Party Hinkerburry: Aye the arrows there.
Party Pilus: Great.
Party Hinkerburry: No nearby objects, and I’ve got no equippments.
Party Pilus: Have you moved that UI anywhere on the screen?
Party Hinkerburry: No, but I just did - works just fine.
Party Pilus: Were it clear to you that you could move it, or should
that be more clear?
Party Hinkerburry: I think that potentially moving it away from the
bag a bit might make it clearer - I figured it was attached to the bag
untill you told me I could move it.
Party Pilus: Noted.
Party Pilus: Is it clear to you what the UI does?
Party Hinkerburry: I would presume that the nerby objects would light
up as I move into them - as for the bag, I guess its for gathering things
in to later move to your big bag.
Party Hinkerburry: Sheated item, not quite sure - gusseing a tool of
some sort.
Party Hinkerburry: Which then goes into the offhand or mainhand.
Party Hinkerburry: And the arrows I’d guess are to move everything
around if there are several items about.
Party Hinkerburry: Then the box open the proffetion screen.
Party Pilus: Indeed
Party Hinkerburry: Which is currently empty.
Party Pilus: Now for the next part of the test, I would like us to stage
a bit of an RP setting
Party Hinkerburry: Very well.
Party Pilus: I am a mine foreman and I would like for you to take upon
yourself the role of a labourer comming here to seek work at the mine.
You smile at Hinkerburry.
Pilus says: Greetings.
Hinkerburry says: ’aum sir? I be guessin’ yer the foreman? You nod
at Hinkerburry.
Pilus says: That is indeed correct. Welcome to the Jasperlode mine
Hinkerburry says: Hinkerbury at ye service sir. First day at work.
Hinkerburry salutes you with respect.
137
Pilus says: Ah great. Do you know anything about mining?
Hinkerburry says: Ah.. well I was in.. ye kno’ them kids school.. No,
nay really sir - I know ye suppose to use em pickaxe, right?
Pilus says: Ah, dont worry. I got a few things noted down that could
get you started
Hinkerburry says: Much obligted sir.
Pilus hands some notes to Hinkerburry.
Hinkerburry gingerly accepts the notes...
Hinkerburry says: Think I am getting the hang of this sir.
Party Pilus: Sounds good
Pilus says: Sounds good
Party Pilus: You can find the abilities in the abilities tab in the menu
Hinkerburry says: Want me to try it out then? I am eager to earn my
paycheck!
Pilus says: Sure thing. Knock yourself out
Party Hinkerburry: Sure
Hinkerburry salutes you with respect.
You salute Hinkerburry with respect.
Hinkerburry says: On my way then sir, thanks for all the help.
Hinkerburry looks for the minerals around the cave!
Party Pilus: feel free to think out loud with your impressions
Party Hinkerburry: I liked the forced emote.
Party Hinkerburry: Makes sense.
Party Hinkerburry: Right standing here where I think its telling me it
is.
Party Pilus: Good
Hinkerburry looks for minerals!
Hinkerburry tried out the extra mineral tab!
Party Hinkerburry: A note: Tried to ”move” the spot minerals and it
stuck to me untill I moved outside the spellbook.
Party Hinkerburry: Minor annoyance.
Party Hinkerburry: Hrm, can’t seem to use the iron picks.
Party Hinkerburry: Do I have to be closer then 0 meter?
Party Pilus: Noted. A hint: try to use the iron ore vein
Party Hinkerburry: Both are iron!
Party Hinkerburry: Perhaps adding in a compass might be a good
thing?
Party Pilus: Ah, I see what you mean now
Party Pilus: And that is a good point
Party Hinkerburry: Can’t use this one either.
Party Pilus: Well, it is sadly because it is the end of the demonstration
setup I made
138
Party Hinkerburry: Ah fair enough ;3
Party Pilus: What is your impressions so far?
Party Hinkerburry: First impression:
Party Hinkerburry: Its fucking cool - a bit confusion in finding the
nodes - since there is no visual aid, sugges a compas other otherwise.
Party Hinkerburry: I like the simple design - not to impossing, the
spellbook might be a tad alrge, perhaps a resize button might be good?
Party Hinkerburry: Other then that its the top down design from GHI
and it fits well with its overall theme.
Party Pilus: Would a direction error in the tooptip of the nearby object
be sufficient?
Party Hinkerburry: Well, anything to give you a ”warmer” ”colder”
feel might be good.
Party Hinkerburry: Right: So to compile my toughts.
Party Hinkerburry: First off all, like I’ve mentioned I enjoyed the sleek
design - but that the spellbook might be just a tad large, I would have
enjoyed some manner of resizing option, or at least three or so sizes:
Small medium big - what ever.
Party Hinkerburry: Secondly - the looking for nodes was fine, but for a
first time user it was somewhat of a pain to properly find some things
- it did give directions in south -west etc, but without an easy to reach
compass its easy to get turned about, had to look at the minimap its nothing ”big” thats for certain, but I know some people don’t have
minimaps left on their UI’s, even if its rare - I’d suggests a togable compass of some sort to allow you a better and more direct visual stimuli perhaps even have it go ”This way” at one of its points - the emote system was neat, especially that you could add several windows - would it
be possible to have a delay option, perhaps just a little dropbox saying
1-2-3-4-5 sec delays to allow for several emotes, instead of having them
drop directly after each other?
Party Hinkerburry: As for the useage of items - never got to try it, but
I’d imagen if you have several proffetions looking into the proffetion
screen that it may be clutered just like the spellbox - a search function
or similar would be nice!
Party Hinkerburry: To summerice: I firmly belive its a soild core, there
is nothing major that sticks out as flawed, (aside from well, thats its
not finished) overall the design is enjoyably simple and straight forward, and I rather quickly got a hang of it - quicker actually then my
first time opening GHI.
Party Pilus: It is the goal for the system to create professions that have
many steps in making things. E.g. getting from finding a iron ore to
having the final iron bar would be 10-15 steps. Do you think that this
139
would be more helpfull and inspirering for RPing a miner?
Party Hinkerburry: Well yeah - it would encourage deeper thinking
then ”Lulz I am blacksmith” - adding in the various steps of making
things into a final iron bar would be cool - and probably encourage
people to actually go out into the woods find their ore and make it into
bars - perhaps even togheter with friends.
Party Hinkerburry: You know, spend a day making a blade had been
neat.
Party Hinkerburry: Honestly I am quite exited to see what people
might create with this addon.
J.3
Eddard
Party Pilus: First, before the test, I would like to ask you a few questions
Party Pilus: Do you do civilian roleplaying?
Party Eddard: Not in a long time.
Party Eddard: I’m more or so an adventurer/military role-player.
Party Pilus: Are there any particular reasons why you prefer those
types of roleplaying over civilian roleplaying?
Party Eddard: I usually prefer being a lone-wolf adventurer, usually
because I’m able to explore a lot of hubs and such.
Party Eddard: As a citizen you’re restricted in your own area.
Party Eddard: And I’m not fond of staying in the same terrain all the
time. I like change.
Party Pilus: Understandable.
Party Pilus: Do you in general feel that civilian roles get appriciated
enough?
Party Eddard: No. In Partys, they are usually neglected. Dalaran
tried, and Dalaran failed. However, Pyrewood is a very good Party for
such roles.
Party Eddard: I had fun role-playing as a paranoid citizen there.
Party Pilus: So it would be correct to say that Pyrewood is successfull
for citizens due to the threads and by that the Action there?
Party Eddard: Nah, more or so the lack of 24/7 war/conflict. It’s a
small town, and so everyone will know eachother. It’s a friendly community, and citizens usually get to take part in every event as well.
Party Pilus: That sounds nice
Party Pilus: For the next things I would like for you to come to me.
Party Pilus: As you might know, I am the foreman of the Azurelode
mine and IC’ly I could use some help with the mining
140
Party Eddard: All right. One moment.
Eddard says: The Cap’n sent me, sir! There’s work to be done?
Pilus says: Ah, yes, indeed.
Eddard nods at you.
Pilus says: First off, do you know how to mine?
Eddard says: Aye, ’course.
Pilus says: Great.
Pilus says: There is a few things we do different here, but I got it noted
down in some simple words.
Eddard says: Spent me days serving as a mason - an’ the others workin’
in the mines, sir!
Pilus hands Eddard some notes
Party Eddard: That’s bad ass.
Pilus says: And ofcause a mining pick
Pilus picks up a mining pick and hands it to Eddard.
Eddard grabs it, nodding.
Eddard says: Well, shall we, sir?
Eddard bows down graciously.
Party Pilus: Does the menu with nearby objects and equipped items
seems intuitive for you so far?
Pilus says: indeed. Just follow me.
Party Eddard: Yeah, it seems pretty cool.
Party Eddard: I like what you’ve done with it so far.
Pilus says: Try and see if you can spot a good place to mine yourself
Eddard nods.
Party Eddard: The other Party I am associated with is having an
event right now, so I’m going to have to switch characters. I’ll download patch-c and have it all ready the next time you need it tested, if
that’s all right.
Party Pilus: Sure
Party Eddard: All right, it looks good so far. I like the new additions.
Were books fixed?
Party Pilus: So far I am notified, yes
Party Pilus: I just have a final question before you leave
Party Eddard: Neat! Sure, what is it?
Party Pilus: Do you think that a system with more details in e.g. professions would make civilian roleplaying more interesting for you?
Party Eddard: Yeah, sure. It would be neat to to do this with a couple
friends and such.
Party Pilus: Thanks.
Party Pilus: It is all for now :)
141
K
Final prototype screenshots
The following is screenshots from the final prototype.
142
Figure 24: The quick bar
Figure 25: Handing an item to another player from the quick bar
143
Figure 26: The ability page
Figure 27: The perform action UI. In this example the user have added one
additional expression
144
L
GHG Pitch
I would like to get some feedback on a little addon idea i got, which
have the working title Gryphonheart Groups or GHG.
The addon allows you to join one or more groups. These groups
works like guilds, except that they are not visible to others. It can
be used to form a secret lodge, a craftsmans guild, a subguild in an
existing guild or whatever other guild fits your need.
The group UI includes many of the normal guild features.
Planned features:
• List of members
• ustomize member ranks ( not limited to only 10).
• Seperate channel (like guilds. It does not take a channel slot).
• Member item / insignia. An insignia that automatically updates
to display your group membership and rank. These can be customized freely by the group leader.
• Message of the day.
• Group info.
• Group events in the calendar.
• Customizeable group icon.
Note that some of the data (like the message and info) can be a bit
out of date if you are online without any other GHG users are online.
I expect the implementation time to be quite small compared to
e.g. GHI.
145
www.imm.dtu.dk
DTU Informatics
Department of Informatics and Mathematical Modeling
Technical University of Denmark
Richard Petersens Plads 321
DK-2800 Kgs. Lyngby
Denmark
Tel:
(+45) 45 25 33 51
Fax:
(+45) 45 88 26 73
E-mail: [email protected]