Arkham Horror Virtualization Project

Developed by Kaleb Houck, Zack Kimball, Douglas
Drobny, Aaron Phillips, Miguel Ramirez, Ben Adler,
Premsagar Donga, Ryan Savage, Gary Hollingshead,
Wenlong Huang
Brief Introduction
Virtualization effort of Arkham Horror Board Game
 Will be developed for two platforms: Linux and
Table System
 Our team will be doing development using Agile
methods.
 Our project will be developed in a highly modular
fashion using Unicon.
 We will be using a virtual development
environment called Assembla.
 We will be discussing in this presentation what has
been done by the three sub teams : Team Gary,
Team Doug, and Team Ben.

Combat (Collaboration)
Combat (Activity)
Sealing a Gate (Sequence)
Mythos
Common
Item
Decks
Card
Many to many relationship
Arkham Event
#############################
# This is a record of a card. Opt-int to use records instead
# of classes. The fields of a record are accessed the same way
# (with a '.') and can be procedures.
# name = Card name
# text = Card text
# deck = Deck the card belongs to
# frontPic = Picture to put on front of card
# backPic = Picture to put on the back of the card
# total = Number of cards left in deck to draw or total cards to put in deck
# cUse = link to procedure that gets called when used
# cDrop = link to procedure that gets called when dropped
# cPickup = link to procedure that gets called when picked up
# handCost = how many hands needed to use
# exhausted = yes or no for exhausted or not
##############################
record Card(name, text, deck, frontPic, backPic, total, cUse, cDrop, cPickup, handCost,
exhausted)
local lMythosDeck
local lArkhamEventDeck
local lOtherworldEventDeck
local lNormalItemDeck
local lMagicItemDeck
local lSpellDeck
local lSkillDeck
local lHenchmenDeck
START MENU
Location Pathing
Locations have a list of all adjacent
locations
 Calculates all paths of length 9
 Removes paths without destination
 Truncates locations after the destination
 Finds shortest list

Samples
Environment and Player
Character Classes

Stat Tables



Houses many relevant player stats within an easily accessed table
Two Tables: BaseStatsTable and BuffStatsTable
Buff System


Allows for handling of multiple independent stat bonus effects with limited durations.
The Buff Object consists of:
○
○
Name:
Expiration: Names of the period in which this buff is to expire

○
Effects(list): the list of 1 or more stat modifications for this given buff

○
Common expirations are:
- Combat: These buffs are discarded after each combat turn
- Turn: These buffs expire at the end of the player’s current turn
- Phase: These buffs expire at the end of the current phase.
- Upkeep: These buffs expire at the start of next Upkeep Phase
- Passive: These buffs expire when the item giving the benefit is discarded (handled by
discard() method)
It is a list of pairs [ “stat”, magnitude ] , where the “stat” is the key for the proper stat in the
StatTables and the magnitude is the (+/-) integer.
Conditions(list): used to allow for the buffs that have conditions attached.


Example: [“type”, “cultist”] implies the buff only affects cultist type creatures
Example: [“locationtype”,”street”] implies this buff only works when you are tested and found to
be in a street
Player Character Class

Stat Sliders
 Implemented in two parts: BaseStatsTable and
three integer variables:
○ Mobilityslider: controls the slider of Speed
Sneak
○ Combatslider: controls the slider of Fight
Will
○ Mentalslider : controls the slider of Lore
Luck
○ Each of these integers is contained within the
range of 0 to 3
 When the character is initialized, their stats in the
BaseStatsTable is set to the value on the far left,
and the sliders are all set to a value of 0

StatusTable
 There are many toggles that can be placed on
your character, these have all been migrated to
the StatusTable, under their appropriate keys.
Environment Class

Player Table
 Contains specific instances of the player character
class
○ The keys for these are player1 through player’n’ in
order to prevent odd player names from interfering with
the table’s function

Deck Table
 Contains specific instances of the deck class,
accessed by giving a ‘key’ that uniquely identifies the
deck
○ Drawing a common item is as easy as
DeckTable[“common”].DrawCard()
○ This table has the potential to hold every deck, from
items to encounter cards, to the gate and monster
decks.
Environment Class
Player Table
Variable
Value
Key
Value
PlayerTable
<table> object
“Player1”
<class> object
DeckTable
<table>object
“Player2”
<class> object
….
….
….
….
CurrentPlayer
<string>
“Player n”
<class> object
CurrentPhase
<string>
….
…..
PlayerTable[“Player1”].GetStat(“MaxStamina”)
Player-Character class
BaseStatsTable
Key
Value
variable
Value
MaxStamina
6
Name
“Bobby”
MaxSanity
4
….
….
…
…
BaseStatsTabl
e
<table> object
Speed
2
….
….
Sneak
0
BuffList
<list> object
Etc..
Etc..
BuffStatsTable
<table> object
Collaboration diagram
Sequence diagram
method OnZoom(ev)
w:=BoardImage.w_spec
h:=BoardImage.h_spec
x:=&x-BoardPanel.x_spec
y:=&y-BoardPanel.y_spec
if (BoardImage.w=BoardPanel.w_spec) then {
BoardImage.set_size(w*5, h*5)
x:=x*5-BoardPanel.w_spec/2
y:=y*5-Boardpanel.h_spec/2
MAXx:=BoardImage.w_specBoardPanel.w_spec
MAXy:=BoardImage.h_spec-BoardPanel.h_spec
if (x<0) then x:=0
if (y<0) then y:=0
if (x>MAXx) then x:=MAXx
if(y>MAXy) then y:=MAXy
BoardImage.set_pos(-x, -y)
VerticalZoomScrollBar.set_value(50*y/MAXy)
HorizontalZoomScrollBar.set_value(50*x/MAXx)
overlay_set_1.set_which_one(overlay_item_1)
}
else {
BoardImage.set_size(w/5, h/5)
BoardIMage.set_pos(0,0)
overlay_set_1.set_which_one(overlay_item_2)
}
resize()
end
method OnHorizontalZoomScrollBarPress(ev)
y:=BoardImage.y_spec
MAXx:=BoardImage.w_spec-BoardPanel.w_spec
x:=HorizontalZoomScrollBar.value*MAXx/50
BoardImage.set_pos(-x, y)
resize()
end
Zoomed out Map Game Display
Player clicks the zoom icon
Player clicks on map
Investigator Stats Display
Player clicks the investigator
Main Game Display
Player clicks the investigator
Player clicks return
Equipment Stats Display
Player clicks an item in the list
Chatbox is an optional feature wherein
the users can chat with each other
during playtime.
Chatbox
Chatbox
Chatbox