BYOW Ambition Features
Deadlines
Assignment | Tasks | Deliverable | Points | Due Date |
---|---|---|---|---|
Team Formation | - Task 0: Partnerships | Pre-Project Google Form | 5 | Mon, Nov 11 11:59pm PT |
Project 3A | - Task 1: Setup - Task 2: World Generation |
World Screenshots on Gradescope | 10 | Mon, Nov 18 11:59pm PT |
Mid-Project Google Form | 5 | |||
Project 3B | - Task 3: Main Menu - Task 4: Interactivity - Task 5: Saving and Loading - Task 6: Ambition Features |
Code on Gradescope (0 pts, but required for checkoff) |
0 | Tue, Nov 26 11:59pm PT |
Live Checkoff with TA (Checkoffs will happen Dec 2–6) |
100 | |||
Post-Project Google Form | 5 |
Ambition Features
30 points of your project score will be based on features of your choosing, which we call your “ambition score”. The big idea is that beyond the base requirements of this project, we want you to try to polish your product a bit more and add some cool features. Below is a list of features worth either 22 points (primary feature) or 8 points (secondary feature).
From these two categories, you need to implement 30 points of features, and at least one of your features must be a primary feature. Here are some ways to achieve this:
- One primary feature and one secondary feature. This is the most common way.
- Two primary features.
This “ambition” category is only worth 30 points. For example, if you implement 38 points of features, you do not get extra credit. However, feel free to add as many features as you’d like if you have the time and inclination.
Your project must still meet the basic requirements described earlier in the spec! For example, if you allow the user to use mouse clicks, the project should still allow keyboard based movement!
Under the description of some primary features, we’ve provided some GIFS that would score full points on their respective ambition point items to help clear any confusions. Yours do not need to look exactly like the examples given.
You are not restricted to the features we list below! We strongly encourage you to come up with your own. We will have an Ed megathread (feature request Ed thread) where you can run your ideas by us to confirm that it meets our standards.
22 Points Primary Features
-
Create a system so that the tile renderer only displays tiles on the screen that are within the line of sight of the avatar. The line of sight must be able to be toggled on and off with a keypress.
You don’t need to save/load the line-of-sight status. For example, it’s fine if the game always loads with the full world visible.
-
Add the ability for light sources to affect how the world is rendered, with at least one light source that can be turned on and off with a keypress. The intensity of the light must diminish in a gradient as the distance from the source increases. Light should also not pass through walls.
You don’t need to save/load the light status. For example, it’s fine if the game always loads with the lights on.
-
Add entities which chase the avatar/other entities by use of a search algorithm from class, with a toggle to display their projected path. Implementing more than one pathfinding algorithm will NOT count as a second primary feature.
-
Create a system for “encounters”, where a new interface appears when the avatar interacts with entities in the world, returning the avatar to the original interface when the encounter ends (e.g. Pokémon).
It’s okay if save/load is not available during encounters.
-
Add the ability for the user to change the perspective of their view (first-person, isometric 2.5D, 3D, etc.) (We’ve never seen anyone do isometric 2.5D or full 3D before! The Nintendo 64 game ‘Kirby 64 - The Crystal Shards’ is an example of what an isometric 2.5D world looks like). One particularly interesting example is Dorottya Urmossy and David Yang’s Fall 2022 submission, which is a 2.5D first-person view, i.e. the world is 3D but the entities are 2D.
-
Implement a battle system that allows players to interact with moving enemies and obstacles. Assign the player a health value, place collectibles that restore health around the map, and create randomly-moving enemies/objects that inflict damage on and receive damage from the player.
-
Make your world larger than the preset display size such that the player can “explore” beyond the starting world. The rendered world should move with the player beyond a certain point and be scrollable.
-
Make your world “wrap” around the border of the rendered world, where the player should be able to enter from one side of the screen and exit from the opposite side interchangeably. In order to wrap, you must have rooms on the edge of the world that clip off such that the opposite side also has a room that is clipped off, allowing the player to continue traveling on the floor tiles. The world should still follow the World Requirements from Part A excluding requirement #10.
-
Add online multiplayer where other users can join and leave the current game.
java.net.Socket
might be useful here. -
Add NPC interaction and dialogue with the player. Allow the player to choose different response options depending on the NPC and/or game state.
-
Implement elevators/navigable floors with a toggleable multi-floor view or with a significantly different interface with the ability to go back to the main world.
8 Points Secondary Features
- Add the ability for the user to “replay” their most recent save, visually displaying all the actions taken since the last time a new world was created. This must result in the same final state as would occur if the user had loaded the most recent save. This means that the game should be playable once the replay is complete.
- Add multiple save slots that can be accessed with a new menu option, and a new keyboard shortcut to save to a slot other than slot 1. You should be careful to still support the default behavior of saving and loading in order to be consistent with the replay string requirements.
- Add the ability to create a new world without closing and reopening the project, either as a special option you can press while exploring, or when you reach a “game over” state if you’ve turned your world into a game.
- Add a menu option to change your avatar’s appearance to a custom image created by you (e.g. a non-Tileset image).
- Add a menu option or randomly determine what the environment/theme of the world will be.
- Add a menu option or randomly determine what the landscape of the world will be (e.g, dungeons, islands, plains, etc.).
- Add a menu option to change all text in the interface to a different language. English should be the default and there should be a way to switch it back to English.
- Add support for mouse clicks on the main menu for anything that can be done with a keypress on the main menu. You do not have to implement this for typed user input (e.g. seed generation).
- Make your engine render images instead of unicode characters.
- Add cool music to your menu and/or exploration interface. The music does not have to resume from the same point on quits and loads.
- Add sound effects for interactions the avatar makes with the world.
- Add a minimap somewhere which shows the entire map and the current avatar location. This feature is a lot more interesting if you also implement a map which is larger than the screen so that you are unable to see the entire map normally.
- Add ability to rotate the world, i.e. turn the board 90 degrees and adjust movement keys accordingly.
- Add support for movement with mouse clicks on any visible square. You’ll need to implement some sort of algorithm for pathfinding.
- Add support for 2 users to interact at the same time. This will require that you have two avatars on screen which can move around, and they should have separate control schemes.
- Add support for undoing a movement (even moves that occurred in a previous save before the current one was loaded). Undoing a movement should reset the world back to before the most recent keypress but should add to the replay string instead of removing a character (i.e. undo command should be logged in the replay string).
- A “Heads Up Display” (HUD) that provides additional information that maybe useful to the user. At the bare minimum, this should include Text that describes the tile currently under the mouse pointer. This should not be flickering, if it flickers you won’t be able to receive credit.
- Add ability for the player to place and remove blocks based on a sequence of keypresses.