Design Document for King's Feast

Version # 0.4
November 06, 2002



<< Design History >>

	This I suppose, is a history of the design document.

Version 0.4
	Added Section
		- User Interface

Version 0.3
	Fixed typos
	Updated the following sections:
		- Feature Set
		- The World Layout
		- Object Rendering
		- Game Engine
	Changed copyright
	Changed 'Dural' to 'Levbolne'
	Changed 'Character Rendering' to 'Object Rendering' (section titles)
	Added Section - 'Incomplete Sections'
	Added Section - 'Credits'
	Added GFDL/GPL information to document
	Edited the Document for readability

Version 0.2

	Updated the following sections:
		- Game World
		- Game Engine
		- Musical Scores and Sound Effects

Version 0.1

	Version 0.1 is the initial document.
		- Everything is new :)



<< Incomplete Sections >>

Incomplete Sections
	mostly all of them could use additional information

Completely-Devoid-of-Info (need the most help with these)
	Rendering Systems
	Lighting Models
	The World Layout



<< Game Overview >>

Philosophy

Main Game Focus

	The main reason to do this game is to get a step by step documentation
	how to design a game. Also, if we have a good mechanism to make 
	decisions based on taste, we could get our code into Worldforge 
	development, thus helping to conquer the world...er...to make it an 
	even better platform for games. Last but not least, we do it to 
	learn/improve our C++ skills and to have lots of fun.
			(Kai Blin)

Supported Platforms

	Currently the game code compiles and runs on Linux, most UNIX variants,
	and versions of Windows. (At least we think it should)



<< Common Questions >>

What is the game?

	You are Levbolne's best chef. Unfortunately you are stuck with 
	Levbolne's second best kitchen.  The best kitchen is, of course, in the
	king's palace. Alas, that's also where Levbolne's second best chef is.
	So in order to get where you belong, you have to prove you simply are
	the best. You have to prepare the best menus for guests and your local
	duke and become really famous. Eventually, the king will decide you're 
	the best and hire you. Or so you hope.

Why create this game?

	King's Feast is a WorldForge project that aims to teach, both C++ 
	programming and WorldForge game design techniques.

Where does the game take place?

	The game, as one might expect, takes place in a kitchen, where you are 
	the best cook in the land with the second best kitchen. You must prove 
	that you are the best and earn the job of King's cook.

What do I control?

	The player controls recipes, assistant cooks, and anything that is in 
	the kitchen. 

How many characters do I control?

	There are other assistants that one can control or order to prepare 
	items. However, it is just a simple order, not an in-depth guiding 
	process for these other characters.

What is the main focus?

	The main focus is to create innovative dishes that taste good, in order 
	to win the favor of the King and earn the job of cook in his court.



<< Feature Set >>

General Features

	Large Castle for the Cooking Contest

Gameplay

	The basis of the game is to create dishes that will effectively pass the
	test of the neural network and please the King. Creativity and variation
	are required in order to have new and innovative dishes to please the 
	King and get the job as his chef.

	The game is organized into days. The flow of a day will be as follows:
		1.Get your orders ("100 peasants and 3 dukes for supper tonight,
		m'lord," says the messenger.)
		2.Review information about your diners.
		3.Prepare a menu.
			Use recipes from cookbooks
			create recipes
			divide into courses
		4.Finalize everything. Chose who gets what. (The dukes get the 
		roast, the peasants only get dry bread) (could possibly have to 
		go to #3 if you don't have enough money)
		5.Cook.
		6.Get Results (Dukes hated the food, peasants loved the bread)
		7.Get money for the next day.
		8.Quit/Save/Continue

	Following a prescribed amount of time, the game will end. That way you 
	don't get an unlimited number of chances to impress the recipient of the
	meal.



<< The Game World >>

Overview

	King's Feast takes place in a Medieval Castle setting. There are various
	locations in the castle that the cook will utilize in order to 
	successfully craft a meal.

The Physical World

Overview

	The entire world is inside a castle. There are various rooms that a 
	player will need to utilize in order to be successful in crafting a 
	meal.

Key Locations

	Kitchen  Cooking is done here.
	Pantry
	Cellar
	Feast Hall
	Lesser Hall - for guest interaction
	StoreHouse - order and obtain supplies
	Meeting Room - create menus/budgets
	

Scale

	The game will encompass multiple rooms. Therefore, the scale of the 
	world will not be very large. The entire world will be about the size of
	a large castle.

Objects

	Bowls  For mixing ingredients
	Utensils  for mixing and cutting
	Ingredients  Quantity of these will be limited (?). And they will be 
		used to create dishes.
	Sink - For washing ingredients
	Oven - cooking food
	Open Fire - boil water, cook


Time

	The game will progress in Days. The player will cook for a day and then 
	after the results of the cook's efforts are in, the day will end and the
	cook will return the following day to cook again.



<< Rendering System >>

Overview

	Give an overview of how your game will be rendered and then go into 
	detail in the following paragraphs.

2D/3D Rendering

	Describe what sort of 2D/3D rendering engine will be used.

Camera

Overview

	Describe the way the camera will work and then go into details if the 
	camera is very complicated in sub sections.

Camera Detail #1

	The camera will move around like this and that.

Camera Detail #2

	The camera will sometimes move like this in this special circumstance.



<< Game Engine >>

Overview

	The game engine features a neural network to evaluate the dishes created
	by the player/cook.

Game Engine Detail #1

	The game engine will keep track of everything that the King has 
	previously eaten.  This will force the cook to continuously come up with
	new dishes. The neural network will also store information about how a 
	dish tastes.


Collision Detection

	I do not envision collision detection being a major component of the 
	game. It might be beneficial from the perspective that if the cook it 
	walking around and bumps into one of his hired hands, he might drop his 
	dish or something.  

Data Persistence

	Here are some solutions to the data storage problem:

	1. stdin/stdout: Many unix commandline tools don't store data at all, 
	but instead expect that it will all be provided through stdin. They 
	don't store anything, either, but just regurgitate it all to stdout. 
	For much software, this is a damn good approach because you can link 
	tools together via scripts or on the commandline. Of course, this is 
	completely inappropriate for games, so nevermind it. ;-)

	2. ASCII File I/O: This is a pretty straightforward way to go and since 
	most new programmers run into file input/output early on in their 
	studies is the preferred approach for pedagogical efforts like King's 
	Feast. It is also simple and portable, from the standpoint that all 
	operating systems have standard, built-in file handling approaches. 
	The downside is that you'd need to select (and implement) parsers to 
	read and write the files. The upside is that you will be able to edit 
	the files using regular text tools.

	3. Binary File I/O: With cleverness and care you can design a binary 
	format to store data in, which will be faster and more space efficient. 
	The downsides are that you can't easily read or edit the files, and it's
	a tad more complex. Some C++ frameworks include built-in means of 
	storing and loading objects from binary files, which is called 
	"serialization".

	4. Berkeley DB: Pretty much all UNIX systems have the Berkeley database 
	system available, as it's used for a lot of system level stuff. It's 
	small enough to be distributed with your app if you want to use it on 
	Windows, too, I believe. As a database system, it's pretty lightweight; 
	it supports key-value records, but isn't really relational or object 
	oriented.

	5. Relational SQL Database: There are several relational databases 
	available, including mysql and postgresql, which provide very powerful 
	ways to store and manage large amounts of data. The downsides are that 
	it can be quite involved to add the db support, and it forces an added 
	dependency - anyone wishing to install the software would first need to 
	install and configure the database software.
  
	Hmm, I think that covers all the options, but there might be more.

	Personally, I think for King's Feast the optimal policy would be ASCII 
	files (#2), because of the simplicity and flexibility. I doubt space or 
	performance will be any sort of design driver, and most of the files can
	just be loaded right into memory.

	Bryce 



<< Lighting Models >>

Overview

	Describe the lighting model you are going to use and then go into the 
	different aspects of it below.

Lighting Model Detail #1

	We are using the xyz technique to light our world.

Lighting Model Detail #2

	We won't be lighting the eggplants in the game because they are purple.



<< The World Layout >>

Overview

	Help is needed here! (for going through the castle paper)
	http://www.worldforge.org/project/newsletters/June2002/Castles

World Layout Detail #1

	??

World Layout Detail #2

	??



<< Game Characters >>

Overview

	The main character in King's Feast is the cook. The cook can control 
	npc's to do menial tasks for him. 

Creating a Character

	There will be a standard character (standard appearance, qualities, 
	etc).  Customization could be done by replacing the media used in the 
	game.



<< User Interface  >>

Overview

	The User Interface will be written using SDL and OpenGL.

User Interface Detail #1

	The player/cook will manipulate the items in the kitchen with the help 
	of npc cooks who will do the simple things for him.

	Kitchen features will not need knowledge of the other kitchen gadgets. 
	However the gadgets (sinks, ovens, etc.) will need to know what they are
	being used on, so they can properly manipulate the ingredient(s). 



<< Musical Scores and Sound Effects >>

Overview

	King's Feast will use a combination of Ogg files, mp3 files as well as 
	MIDI files for music and sound effects. The sound will be played through
	the SDL libraries.


Sound Design

	There is currently very limited work occuring as far as sounds go. An 
	expedition will be organized to journey into CVSROOT/media and see if 
	any suitable sounds can be found.  



<< Single-Player Game >>

Overview

	You are Levbolne's best chef. Unfortunately you are stuck with 
	Levbolne's second best kitchen.  The best kitchen is, of course, in the 
	king's palace. Alas, that's also where Levbolne's second best chef is. 
	So in order to get where you belong, you have to prove you simply are 
	the best. You have to prepare the best menus for guests and your local 
	duke and become really famous. Eventually, the king will decide you're 
	the best and hire you. Or so you hope.

Single Player Game Detail #1

	??

Single Player Game Detail #2

	??

Story

	The player is attempting to impress the King by cooking a grand meal for
	him. This will enable to cook to be hired by the King and therefore be 
	acknowledged as the best cook in the kingdom.

Hours of Gameplay

	The game will not last for an extended period of time. However, the 
	player will have to cook until the objective of satisfying the King is 
	met.

Victory Conditions

	The game is won when the King is happy.



<< User Interface >>

Overview

	The GUI in King's Feast should be very intuitive and easy to program.
	The following contains information about what information should be in
	the GUI. It also gives some ideas as to where everything should be 
	placed in the GUI.

	The following description uses the general layout of the UClient GUI as
	a starting point.
	
	Screenshots of UClient (in Acorn 0.4) are available here:
	http://www.worldforge.org/dev/eng/clients/uclient/screenshots/acorn_04/ 

Information Conveyed to User

	The following information will be conveyed to the user through the GUI.

	1. Status of Current Action (mixing, rinsing, etc)
		- These actions are ones for which the cook is required to be
		present
		- Bottom Display Bar 
	2. Status of Actions in the Background (baking, oven stuff, rising
	bread, etc)
		- These actions are ones for which the cook need not be present
		- Side Display Bar
	3. Status of the Meal as a whole (Individual Courses)
		- Side Display Bar (towards the top)
	4. Scrolling Window for debugging messages
		- This will be there for debugging of the game.
		- Bottom Display Bar



<< Object Rendering >>

Overview

	Object rendering will be done using OpenGL polygons and texture mapping.
	The OpenGL will be done inside the game's SDL interface.

Character Rendering

	Characters will consist of x number of polygons. And I have no other 
	ideas as to how the rendering will be done specifically for characters.

Ingredient Rendering

	A pile of a specific intgredient will be assigned a certain polygon 
	number. That number of polygons will be drawn (in a way to imitate a 
	pile of stuff). Each polygon will be texture-mapped with the appropriate
	texture.

	The purpose of giving a pile a large number of polygons is to make a 
	smooth transition if a cook picks up some of the ingredients. The 
	appropriate percentage of polygons could be moved, making the pick-up 
	seem very smooth.

	The major problem I see with the above idea, is that it could become 
	very CPU/video card intensive.



<< Credits >>

The following people's contributed to this document:
	Kai Blin (various descriptions and paragraphs)
	Bryce Harrington (Data Persistence, mentoring on copyright issues)
	Matt Raykowski (provided the template for the document)
	
	
The following websites were consulted as well:
	http://www.worldforge.org/dev/systems/kingsfeast
	http://victoria.worldforge.org/games/feast/notes.html

If anyone else contributed to the document, please let me know, and I will add
you to the credits.



<< Copyright Info >>

This document Copyright 2002 George Privon

This document is distributed under the terms of the GNU Free Documentation 
License (GFDL) and the GNU General Public License (GPL).

Written by George Privon