Skip to content

Instantly share code, notes, and snippets.

@LikeLakers2
Last active October 9, 2018 23:07
Show Gist options
  • Save LikeLakers2/4873884dbcdf7ee1e1c0e723f69a1a52 to your computer and use it in GitHub Desktop.
Save LikeLakers2/4873884dbcdf7ee1e1c0e723f69a1a52 to your computer and use it in GitHub Desktop.
Demo Structure

This file is being remade. If you want to see this file's contents as it is currently, hit the Raw button at the corner of this gist.

This is an example of a larger project, one that contains many assets and would thus be easier to navigate if it were categorized.

addons/
	com.godotengine.generic_asset/
		sprite.png
		plugin.cfg

assets/
	robot/
		model.dae
		sound_footstep.ogg
		sound_jump.ogg
		texture_normal.png
		texture_metallic.png
		voice_death.wav
		voice_hurt.wav
	town_area/
		model_fountain.dae
		model_ground.dae
		model_tavern.dae
		model_tavern_inside.dae
		music.ogg
		sound_fountain.ogg
	town_guard/
		model.dae
		sound_footstep.ogg
		texture_normal.png
		voice_criminal_chase.wav	# Stop! You have violated the law!

objects/
	common_battle/
	
		menu.gd
		menu.tscn
	common_overworld/
		foliage.tres
	robot/
		in_battle.gd
		in_battle.tscn
		in_overworld.gd
		in_overworld.tscn
	town_area/
		outside/
			town_guard.gd
			town_healer.gd
		tavern/
			barkeep.gd
			bard.gd
			drunkard.gd

scenes/
	battle/
		battle_view.gd
		battle_view.tscn
	town_area/
		outside.tscn
		tavern.tscn

scripts/
	battle_system/
		actions/
			defensive/
				block.gd
				dodge.gd
				parry.gd
			offensive/
				punch.gd
				shoot.gd
			supportive/
				cure_status.gd
				heal.gd
		statuses/
			fainted.gd
			poisoned.gd
			poisoned_badly.gd
		battle_manager.gd
	quest_system/
		quest.gd
		quest_manager.gd

This is an example of a small project, one that does not contain many assets and would generally be easier to navigate if its assets were within the root folder.

When a comment contains a number in brackets, i.e. [1], that refers to a footnote at the bottom of this markdown file.

res://
	addons/
		com.godotengine.generic_asset/
			sprite.png
			plugin.cfg
	
	ATTRIBUTIONS.md		# Especially for demo projects, you may want to attribute the creators of some assets used. It's a good idea to have one file where all the attributions are.

	Enemy.gd		# For scenes (and their related files, such as code, sprites, etc.), you should be using PascalCase, as that is the default 
	Enemy.png		# casing style for many nodes. Additionally, all files relating to one object should use the same filename (but NOT the same
	Enemy.tscn		# extension). However, If a object requires more than one of a certain type of file, consider moving all of the object's files
				# into a subfolder. For example, if you have many PNGs for a Enemy object, you should use a subfolder called Enemy.
	
	LevelHills.tscn		# For the sake of this example, level scenes are prefixed with Level. This isn't needed.
	LevelLake.tscn		# However, if you have more than a few level scenes, consider moving them into a subdirectory, to avoid overflowing the
	LevelVolcano.tscn	# root directory with files.
	
	Platform.gd
	Platform.png
	Platform.tscn
	
	Player.gd
	Player.png
	Player.tscn
	
	UIMainMenu.gd		# UI scenes should be treated the same as level scenes -- no prefix needed, but if you have more than a few, perhaps
	UIMainMenu.tscn		# consider moving them into a subdirectory.
	UIPauseMenu.gd
	UIPauseMenu.tscn
	
	font_monster_friend.ttf			# Assets should be in snake_case, and labeled by a prefix denoting their asset type [1]
	font_monster_friend_license.txt		# Where a asset requires a license or other file alongside it, you should attempt to ensure it appears
						# next to the related file, as here where I've appended` _license`.
	
	music_hills.ogg		# [2]
	
	sound_footstep.ogg
	sound_jump.ogg
	
	voice_lets_go.wav
	voice_victory.wav

Footnotes

  1. I did this to ensure that related assets appear next to each other, but I'm curious if there's something better we could do.

  2. I've typically seen voice clips in .wav format, and music/sounds in .ogg format. Should we recommend that a project stick to one or the other?

Other considerations

  1. How should we request tilesets be organized in a small project?

  2. How do we define the difference between a small project and a large project? Or would that be up to that specific project's manager?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment