@@ -0,0 +1,108 @@
1++++
2+title = "Slam"
3+date = "2022-02-28"
4+[taxonomies]
5+grant_type = ["Proposal"]
6+grant_category = ["App Dev"]
7+[extra]
8+image = ""
9+description = "Slam Action Game"
10+reward = "$24000 in WSTR"
11+assignee = "~hanfel-dovned"
12+champion = "~rabsef-bicrym"
13+id = ""
14+completed = false
15+link = ""
16++++
17+
18+## Overview
19+
20+Slam is a small action game for Urbit where you battle your %pals' %gora.
21+
22+## Background
23+
24+Super Smash Bros. for Nintendo 3DS has a mode called StreetSmash where players can battle the AI-controlled ghosts of other players using little hockey pucks—see [this video](https://youtu.be/x1xBUU8_12Y?t=106) for gameplay footage.
25+
26+I'd like to create a similar asynchronous social action game on Urbit: StreetSmash, but with %gora instead of Nintendo characters, and with %pals instead of StreetPass guests.
27+
28+## Motivation
29+
30+The obvious value that Slam will bring to the network is that it's fun. But there's a deeper motivation here. An Urbitier reason that's a little harder to articulate. Luckily for me, this recent post from ~winter-paches captures it perfectly:
31+
32+> Consider paldev's suite of tiny apps: %pals, %face, %zone, &c. Throw in Dalten Collective's %gora. Taken individually they look throwaway and useless. However, their eventual personal use is emergent as different people discover ways to use and combine them in interesting ways. Eventually those patterns will become socialized and copied, but in advance of that there will be wildly varied experimentation which may look like chaos. Imagine if facebook were a totally open set of components/api in which anyone could individually combine, configure and tailor them how they saw fit. You and i might both have "facebook" but it might be totally unrecognizable as such.
33+
34+Slam's integration with pals and gora is something that can only happen on Urbit, and I think that pursuing projects which explore these types of combinations will give us a lot of intel about how we can best achieve a future where small-scale custom software is common.
35+
36+## About Me
37+
38+Hi! I'm ~hanfel-dovned.
39+
40+Throughout college, I developed about two dozen games ranging in scope from small weekend projects to a multi-year professional release on consoles. I designed and coded them in GameMaker: Studio using GML, a language with C-like syntax and looser-than-C rules. Some games were made entirely by me, and on others I collaborated with a couple friends on art and sound. (I'd be happy to share this portfolio with anyone interested.)
41+
42+I recently graduated with a degree in computer science and am currently doing an internship where not much happens. I discovered Urbit in mid-2021, fell in love with it, went through Hoon School, did an apprenticeship, attended Assembly, and plan on building on Urbit full time when my internship is over in June.
43+
44+My Hoon skills are up to par with the previous out-of-date Gall Guide; I can write a Gall agent, but don't have any experience with implementing a frontend or distributing apps. Code for my apprenticeship is here.
45+
46+## Design
47+
48+As with any game, the specific features and details that I have in my head are still fuzzy and will need to be fleshed out over the course of development. For example:
49+
50+- The controls will need to be adapated to a mouse and keyboard, which will change the game's feel and necessitate rethinking some of the mechanics.
51+
52+- It would be cool to be able to level up your gora or have some reason to compete with your friends, but I don't want the metagame to be addictive in such a way that makes people feel compelled to play the relatively simple actual game for longer than they have fun with it.
53+
54+- Exposing a player's entire gora collection to all of their pals would be a privacy concern. Slam could pull only from a player's public gora collection, or there could be a specific tag players add to gorae that they want Slam to be able to recognize.
55+
56+- Could Slam issue a default gora to all players in case they don't have any yet? Using crow for this looks promising.
57+
58+- What implications would a progression system have for a gora's value? If you own a gora with a high win count, and some other future app wants to use that info for something interesting, should that consideration impact the design of the progression system?
59+
60+- Is it worth it to try and prevent players from cheating? Likely not, but testing the waters here could help the Urbit community discover new mechanisms for sources of truth in decentralized apps.
61+
62+## Implementation Plan
63+
64+1. Develop the game in Javascript using the Kaboom.js library.
65+
66+- I don’t have a ton of experience with JavaScript, but I’m confident that this portion of development will go pretty smoothly. Kaboom seems really easy to use from the little I’ve messed with it, and there’s plenty of JavaScript documentation everywhere.
67+
68+2. Write the hoon backend to gather data for Slam from %pals and %gora.
69+
70+- While I have experience writing gall agents, Slam will be more complicated with its inter-app functionality.
71+
72+- Future improvements/stretch goals to Slam notwithstanding, the primary goal of the hoon agent in this iteration will be the gathering of gora and pal data and the surfacing of that data to the Kaboom.js implementation of the game.
73+
74+3. Integrate the backend with the frontend.
75+
76+4. Future/stretch goals:
77+
78+- %gora have unique properties based on their data
79+- multiple AI for computer-controlled combatants
80+- score sharing modality (possibly the issuance of a gora from a loser to a winner)
81+- %gora stat improvement paths
82+- 'arenas' for battle w/ prescribed rules and a 3rd party arbiter of victory for direct p2p play, confidence in scores
83+
84+Though I will likely work on the first three points concurrently, naturally allowing their designs to mesh and influence each other, it seems unlikely to me that I’ll be able to complete the entire project within the 2-3 month time period that would be appropriate for a single milestone.
85+
86+I have therefore separated them out into two separate milestones that cover, roughly, bullets one and two+three, respectively.
87+
88+## Champion
89+
90+I’ll be working with ~rabsef under a tea towel as a Champion. Rabsef has, with Quartus, produced a lot of software that is live on the network today and I am confident that he will be able to answer the questions I may run in to while writing Slam; things along the lines of: “What does the workflow look like for developing gall agents that require other apps? How do I install apps on a fake ship? etc.” Quartus also produced %gora so I’ll have a direct connection to the %gora development team, should I need any support working with their system.
91+
92+## Milestones
93+
94+### Milestone 1 - Frontend Game Demo is Released
95+
96+Expected Completion: May 2022
97+
98+Payment: $12,000
99+
100+A fully playable and polished single-player version of Slam with all gameplay mechanics intact, but no pals or gora implementation, will be available for Urbit users to play via app distribution.
101+
102+### Milestone 2 - Full Slam Release
103+
104+Expected Completion: August 2022
105+
106+Payment: $12,000
107+
108+Slam will be updated with gora and pals functionality as described in this proposal. If any minor bugs pop up in the weeks after release, they will be quickly fixed.