top of page
6

}

public class JackSell : Programmer, Designer {

1
2
3
4
5
this = jack;

jack.currentLocation = "Groningen, NL";
jack.interests = CV.interests;
jack.quote = "Standing still never got me very far.";
jackphoto.png
Restore
7
imgSet[0].name = "GardenWorkshop"
imgSet[1].name = "Client Packages"
imgSet[2].name = "Meliae"
imgSet[3].name = "Restore"
8

}

public void PortfolioContents (List<Animation> imgSet) {

Garden
9
10
11
12
13
14
15
16
17
18
19

20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49

public class Garden Workshop: Project, Unity, VR {

jack.role = leadProgrammer;
jack.responsibilities = Range(state machines, ui/ux, github, inventory, physics, task delegation);


// Over the course of 9 weeks, my team of six researched, planned, designed, and developed a VR
// workshop experience for a client. The Garden Workshop is a VR game built with consideration
// for the Buitenschool Glimmen, where the player plants, grows, and collects vegetables from
// their garden.​

#endregion
[-]
#region Summary
[-]
#region Systems Review (Code)
public void CodeReview (stateMachines) {
// My first attempt at creating a state machine for growth was based on
// using multiple scripts and abstracts. However, this proved to be
// unfriendly for the rest of the team. In order to empower my team, I
// instead built a quasi-state machine based around switch statements and
// cases per growth state.​


Reflection(changes);
// Much of my time was spent making the code understandable for others,
// rather than putting that time into optimization. The systems worked,
// but doesn't allow for as much flexibility in future development and
// feature expansion. 

}

public void CodeReview (inventory, recipes) {
// Process and Iteration
// To address the need for an objective in the project, I built an
// inventory system using dictionaries for items harvested. The items and
// recipes derived from scriptable objects for ease of implementation.

// This allowed "pages" in a UI clipboard per recipe that used a for loop
// to cycle through pages.


Reflection
(changes);
// By building a framework with scriptable objects, my team could create
// the recipes and items themselves, streamlining the process and
// reducing my workload.

}

#endregion
50
public void DisplayMedia(Video video, List<Image> imgSet) {
video.name = "Garden Workshop Gameplay Footage"
imgSet[0].name = "RecipeUI"
imgSet[1].name = "GameScene"
imgSet[2].name = "StateChange"
imgSet[3].name = "StateChangeGrow"
51

}

Package
52

public class PackageDelivery : Project, Unity {

53
54
55
56
57
58
59
60
61

62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
[-]
[-]
jack.role = soleProgrammer;
jack.responsibilities = Range(dialogue system, sprint/stamina, minor features);


// As a modified assignment, I developed systems and mechanics for another student's project. Due to their
// general lack of programming knowledge, the focus was on ease of implementation and accessibility.
// The requested features were interactions with NPCs including basic fetch quest functions and changes to
// the world environment based on those interactions.

#endregion
#region Summary
#region Systems Review (Code)
public void CodeReview (dialogue) {
// I chose to use scriptable objects and made an enum list in a namespace
// for dialogue. This held a list of states that the NPCs could present
// to the player, and the dialogue script pulled the appropriate
// scriptable object from a list according to the namespace. Each object
// also had a call to the next state, which progressed the NPC state when
// conditions were met.

// Quests and Dialogue were bundled into a single script to simplify
// client's usage: they only needed to attach one script to an NPC.


Reflection(changes);
// For future development, I would pursue three main things: branching
// dialogue options (player choice), randomization, and variable
// objectives. 

// For dialogue loops such as Idle, implementing the option to randomize
// lines from multiple lists would be simple enough to implement. 

// Instead of single objects and outcomes, each could be created as their
// own type of object. Whether a fetch quest, escort, etc, it could
// become something to slot into a “quest type” variable in the same way
// that the quest objective currently exists, then a prefab containing
// the details of that quest type. Inheritance from a parent QuestClass
// scriptable object seems like a good place to start.

// If not developing for a specific client, I would also separate the
// current script references into multiple purpose-specific scripts.

}

public void CodeReview (sprint, stamina) {
// Sprint was a simple bool tied to player speed on keypress.
// Implementing stamina introduced tracking decay over time if the
// character is sprinting. I also implemented checks for when it reached
// 0, an inverse of decay to recharge stamina, and toggling UI on/off
// depending on stamina and sprint states.


Reflection
(changes);
// Further development of stamina could include impact of external
// forces, both positive and negative. 

// Stamina was not a requested feature from the client. I took initiative
// to make this feature, and developed it after careful review of
// timelines for my deliverables.

}

public void
CodeReview (microFeatures) {
// The client requested several small features that were quick to
// implement, including sprite swaps, animation swaps, sprite masking,
// playing a particle effect at a triggered event.

// I built several methods for each, testing iterations to see what the
// most viable solution was for the client needs.


Reflection(changes);
// These were mostly also bundled into the same NPC script as dialogue.
// This is another area where I would prefer to separate the scripts in a
// case where I was not developing for a specific client's needs.

}
#endregion
124
public void DisplayMedia(Video video) {
video.name = "Client Requested Features Demo"
Package
125

public class Meliae : Project, Unreal {

[-]
#region Summary
126
127
128
129
130
131
132
133
134
jack.role = leadProgrammer;
jack.responsibilities = Range(terrain, character skills, ui, mechanics);


// Meliae is a top down bullet hell game, developed with the goal to raise awareness of deforestation and 
// empower players to make change through donation and eco partnerships.


Debug.LogError("Further Sections Under Construction");
#endregion
135
public void DisplayMedia(List<Image> imgSet) {
ArgumentOutOfRangeException
ArgumentOutOfRangeException
ArgumentOutOfRangeException
imgSet[0].name = "Terrain Gen"
Package
136

public class Restore : Project, Unity, Mobile {

jack.role = Programmer;
jack.responsibilities = Range(inventory, crafting, ui/ux, game settings);


// Restore is a 3D mobile game based on the prompt "Plastic Waste," with the goal of exploration,
// collection, and recycling waste into new habitats and a habitable world.


Debug.LogError("Further Sections Under Construction");
#endregion
[-]
#region Summary
137
138
139
140
141
142
143
144
145
146
public void DisplayMedia(List<Image> imgSet) {
imgSet[3].name = "World Objects"
imgSet[2].name = "Settings Menu"
imgSet[1].name = "UI Navigation"
imgSet[0].name = "UI Alert"
bottom of page