small warning to all who dare enter

small warning to all who dare enter

const DIFF_EASY		= 0
const DIFF_MEDIUM	= 1
const DIFF_HARD		= 2

# this order is important
const BLOCK_LASER	= 0
const BLOCK_WILD	= 1
const BLOCK_PAIR	= 2
const BLOCK_GOAL	= 3
const BLOCK_BLOCK   = 4

const SOLVER_ERROR_NONE				= 0
const SOLVER_ERROR_MISSING_PAIR		= 1

const blockColors = ["Blue", "Orange", "Red", "Yellow", "Purple", "Green"]

# Preload paired blocks
const blockScn = preload( "res://blocks/block.scn" )
const blockScripts = [ preload( "Blocks/LaserBlock.gd" )
			   	      , preload( "Blocks/WildBlock.gd" )
			   	      , preload( "Blocks/PairedBlock.gd" )
			   	      , preload( "Blocks/LaserBlock.gd" )
			   	      ]

# Hash map of all possible positions
var shape = {}

# Calculates the layer that a block is on.
func calcBlockLayer( x, y, z ):
	return max( max( abs( x ), abs( y ) ), abs( z ) )
# THIS IS EVERYWHERE, ANY BETTER WAY TO HAVE FUNCTIONS BETWEEN SCRIPTS?
func calcBlockLayerVec( pos ):
	return max( max( abs( pos.x ), abs( pos.y ) ), abs( pos.z ) )

# Stores a puzzle in a convenient class.
class Puzzle:

	var puzzleName			# The name of the puzzle.
	var puzzleLayers		# The amount of layers the puzzle has.
	var pairCount = []		# The amount of pair blocks on each layer.
	var blocks = []			# Information on all of the blocks in the puzzle.
	var lasers = []			# Laser connections.
	var puzzleMan			# Stores the puzzle manager for making pickled blocks.

	# Converts a puzzle to a dictionary.
	func toDict():
		var blockArr = []
		for b in range( blocks.size() ):
			blockArr.append( blocks[b].toDict() )

		var di = { pN = puzzleName
		 	     , pL = puzzleLayers
				 , bL = blockArr
				 , pC = pairCount
				 , lS = lasers
			     }
		return di

	# Converts a dictionary to a puzzle.
	func fromDict( di ):
		puzzleName = di.pN
		puzzleLayers = di.pL
		pairCount = di.pC
		lasers = di.lS

		for b in range( di.bL.size() ):
			var nb = puzzleMan.PickledBlock.new()
			nb.fromDict( di.bL[b] )
			blocks.append( nb )
		return

	# Class that stores a solution or the errors in a puzzle.
	class PuzzleSteps:
		var solveable = false
		var error = SOLVER_ERROR_NONE
		var errorBlock = null
		var solveSteps = []

	# THIS IS EVERYWHERE, ANY BETTER WAY TO HAVE FUNCTIONS BETWEEN SCRIPTS?
	# duplicate of the global definition above? Either way godot is chill and
	# doesn't complain
	func calcBlockLayerVec( pos ):
		return max( max( abs( pos.x ), abs( pos.y ) ), abs( pos.z ) )

	# Determines if a puzzle is solveable.
	func solvePuzzle():
		# Simply use the solvePuzzleSteps function and return the solveable part.
		var ps = self.solvePuzzleSteps()
		return ps.solveable

	# Determines if a puzzle is solveable and returns the steps needed to solve it.
	func solvePuzzleSteps():
		var puzzleSteps = PuzzleSteps.new()

		var pairs = []

		# Add new dictionary for each later.
		for l in range( puzzleLayers + 1 ):
			pairs.append( {} )

		# Gather paired blocks from the puzzle.
		for b in blocks:
			if b.blockClass == BLOCK_PAIR:
				b.solverFlag = false
				pairs[calcBlockLayerVec(b.blockPos)][b.name] = b

		# Make sure each pair block has a valid pair on the same layer.
		for l in pairs:
			for p in l:
				if l.has( l[p].pairName ):
					if( not l[p].solverFlag ):
						l[p].solverFlag = true
						l[l[p].pairName].solverFlag = true
						puzzleSteps.solveSteps.append( [ l[p].blockPos, l[l[p].pairName].blockPos ] )
				else:
					puzzleSteps.error = SOLVER_ERROR_MISSING_PAIR
					puzzleSteps.errorBlock = l[p]
					return puzzleSteps

		puzzleSteps.solveable = true
		return puzzleSteps

# Randomly shuffle an array.
func shuffleArray( arr ):
	for i in range( arr.size() - 1, 1, -1 ):
		var swapVal = randi() % (i + 1)
		var temp = arr[swapVal]
		arr[swapVal] = arr[i]
		arr[i] = temp

# Determines the block type based on puzzle size and difficulty.
func getBlockType( difficulty, pos ):
	# Determine if this is the goal block.
	if pos.x == 0 and pos.y == 0 and pos.z == 0:
		return BLOCK_GOAL

	# Determine the layer this block is on.
	var layer = calcBlockLayerVec( pos )

	# Determine how many blocks are on the outer part of the layer.
	var layerCount = 0
	if abs( pos.x ) == layer:
		layerCount += 1
	if abs( pos.y ) == layer:
		layerCount += 1
	if abs( pos.z ) == layer:
		layerCount += 1

	# Determine if this block is a laser.
	if difficulty == DIFF_EASY or difficulty == DIFF_MEDIUM:
		if layerCount == 3:
			return BLOCK_LASER

	if difficulty == DIFF_HARD:
		if abs( pos.x ) == abs( pos.z ) and pos.y == 0:
			return BLOCK_LASER

	# Determine if this block is a wild block.
	if difficulty == DIFF_EASY:
		if layerCount == 2:
			return BLOCK_WILD

	if difficulty == DIFF_MEDIUM:
		if layerCount == 2:
			if pos.y == layer || pos.y == -layer:
				return BLOCK_WILD

	if difficulty == DIFF_HARD:
		if layerCount == 1:
			if pos.y == 0:
				return BLOCK_WILD

	# Otherwise it's a normal block.
	return BLOCK_PAIR

# Generates a solveable puzzle.
func generatePuzzle( layers, difficulty ):
	var blockID = 0
	var puzzle = Puzzle.new()
	puzzle.puzzleName = "RANDOM PUZZLE"
	puzzle.puzzleLayers = layers

	# Create all possible positions.
	var layeredblocks = []
	for l in range( 0, layers + 1 ):
		layeredblocks.append( [] )
		puzzle.pairCount.append( 0 )
	for x in range( -layers, layers + 1 ):
		for y in range( -layers, layers + 1 ):
			for z in range( -layers, layers + 1 ):
				layeredblocks[calcBlockLayer( x, y, z )].append(Vector3(x,y,z))
				shape[Vector3(x,y,z)] = null

	# Generate laser lines.
	for l in range( 1, layers + 1 ):
		if difficulty == DIFF_MEDIUM or difficulty == DIFF_EASY:
			for lx in [ -l, l ]:
				for ly in [ -l, l ]:
					puzzle.lasers.append( [Vector3( lx, ly, lx ), Vector3( lx*-1, ly, lx )] )
					puzzle.lasers.append( [Vector3( lx, ly, lx ), Vector3( lx, ly, lx*-1 )] )

		if difficulty == DIFF_EASY:
			for lx in [ -l, l ]:
				for lz in [ -l, l ]:
					puzzle.lasers.append( [Vector3( lx, l, lz ), Vector3( lx, -l, lz )] )

		if difficulty == DIFF_HARD:
			for lx in [ -l, l ]:
					puzzle.lasers.append( [Vector3( lx, 0, lx ), Vector3( lx*-1, 0, lx )] )
					puzzle.lasers.append( [Vector3( lx, 0, lx ), Vector3( lx, 0, lx*-1 )] )

	# Assign block types based on position.
	for l in range( 0, layers + 1 ):
		# Randomize the pairs.
		shuffleArray( layeredblocks[l] )
		# print( "NUM ", layeredblocks[l].size() )
		var prevBlock = null
		var even = false
		for pos in layeredblocks[l]:
			var x = pos.x
			var y = pos.y
			var z = pos.z

			var t = getBlockType( difficulty, pos )

			if t == BLOCK_GOAL:
				continue

			var b = PickledBlock.new()
			b.blockPos = pos
			b.name = blockID

			blockID += 1
			puzzle.blocks.append( b )

			if t == BLOCK_LASER:
				b.setBlockClass(BLOCK_LASER)\
					.setLaserExtent( Vector3( 0, 1, 0 ) )
				continue

			if t == BLOCK_WILD:
				b.setBlockClass(BLOCK_WILD) \
					.setTextureName(blockColors[randi() % blockColors.size()])
				continue

			if even:
				# Count this pair.
				puzzle.pairCount[l] += 1

				var randColor = blockColors[randi() % blockColors.size()]
				b.setBlockClass(BLOCK_PAIR) \
					.setPairName(prevBlock.name) \
					.setTextureName(randColor)

				prevBlock.setBlockClass(BLOCK_PAIR) \
					.setPairName(b.name) \
					.setTextureName(randColor)
			even = not even
			prevBlock = b

	return puzzle

# Storage class for blocks in a puzzle.
class PickledBlock:
	var name
	var blockClass = BLOCK_PAIR
	var pairName
	var textureName = "Red"
	var blockPos
	var laserExtent
	var solverFlag		# Keeps track of this block, only user for the solver.

	func setName(n):
		name = n
		return self

	func setPairName(n):
		pairName = n
		return self

	func setLaserExtent(n):
		laserExtent = n
		return self

	func setBlockPos(n):
		blockPos = n
		return self

	func setBlockClass(c):
		blockClass = c
		return self

	func setTextureName(t):
		textureName = t
		return self

	func toString():
		return str(name) + ": " + str(blockClass) + " @ " + str(blockPos)

	func toNode():
		# instantiate a block scene, assign the appropriate script to it
		var n = blockScn.instance()
		n.set_script(blockScripts[blockClass])

		n.set_translation(blockPos * 2)
		n.blockPos = blockPos

		n.setName(str(name)).setTexture()

		n.setBlockType( blockClass )

		if blockClass == BLOCK_PAIR:
			n.setPairName(pairName).setTexture(textureName)

		if blockClass == BLOCK_WILD:
			n.setTexture(textureName)

		if blockClass == BLOCK_LASER:
			n.setPairName(pairName).setExtent(laserExtent)
		return n

	# test me plz
	func fromNode(n):
		blockPos = n.blockPos

		name = n.name_int

		blockClass = n.getBlockType()

		if blockClass == BLOCK_PAIR:
			pairName = n.pairName
			textureName = n.textureName

		if blockClass == BLOCK_WILD:
			textureName = n.textureName

		if blockClass == BLOCK_LASER:
			pairName = n.pairName

	# Convert this object to a dictionary.
	func toDict():
		var di = { n = name
		 	     , bC = blockClass
			     , pN = pairName
			     , tN = textureName
			     , bP = blockPos
			     , lE = laserExtent
			     }
		return di

	# Make this object from a dictionary.
	func fromDict( di ):
		name = di.n
		blockClass = di.bC
		pairName = di.pN
		textureName = di.tN
		blockPos = di.bP
		laserExtent = di.lE

const DIFF_EASY		= 0
const DIFF_MEDIUM	= 1
const DIFF_HARD		= 2

const BLOCK_LASER	= 0
const BLOCK_WILD	= 1
const BLOCK_PAIR	= 2
const BLOCK_GOAL	= 3
const BLOCK_BLOCK   = 4

const SOLVER_ERROR_NONE				= 0
const SOLVER_ERROR_MISSING_PAIR		= 1

const blockColors = ["Blue", "Orange", "Red", "Yellow", "Purple", "Green"]

# Preload paired blocks
const blockScn = preload( "res://blocks/block.scn" )
const blockScripts = [ preload( "Blocks/LaserBlock.gd" )
			   	      , preload( "Blocks/WildBlock.gd" )
			   	      , preload( "Blocks/PairedBlock.gd" )
			   	      , preload( "Blocks/LaserBlock.gd" )
			   	      ]

# Hash map of all possible positions
var shape = {}

# Calculates the layer that a block is on.
func calcBlockLayer( x, y, z ):
	return max( max( abs( x ), abs( y ) ), abs( z ) )
# THIS IS EVERYWHERE, ANY BETTER WAY TO HAVE FUNCTIONS BETWEEN SCRIPTS?
func calcBlockLayerVec( pos ):
	return max( max( abs( pos.x ), abs( pos.y ) ), abs( pos.z ) )

# Stores a puzzle in a convenient class.
class Puzzle:

	var puzzleName			# The name of the puzzle.
	var puzzleLayers		# The amount of layers the puzzle has.
	var pairCount = []		# The amount of pair blocks on each layer.
	var blocks = []			# Information on all of the blocks in the puzzle.
	var lasers = []			# Laser connections.
	var puzzleMan			# Stores the puzzle manager for making pickled blocks.

	# Converts a puzzle to a dictionary.
	func toDict():
		var blockArr = []
		for b in range( blocks.size() ):
			blockArr.append( blocks[b].toDict() )

		var di = { pN = puzzleName
		 	     , pL = puzzleLayers
				 , bL = blockArr
				 , pC = pairCount
				 , lS = lasers
			     }
		return di

	# Converts a dictionary to a puzzle.
	func fromDict( di ):
		puzzleName = di.pN
		puzzleLayers = di.pL
		pairCount = di.pC
		lasers = di.lS

		for b in range( di.bL.size() ):
			var nb = puzzleMan.PickledBlock.new()
			nb.fromDict( di.bL[b] )
			blocks.append( nb )
		return

	# Class that stores a solution or the errors in a puzzle.
	class PuzzleSteps:
		var solveable = false
		var error = SOLVER_ERROR_NONE
		var errorBlock = null
		var solveSteps = []

	# THIS IS EVERYWHERE, ANY BETTER WAY TO HAVE FUNCTIONS BETWEEN SCRIPTS?
	# duplicate of the global definition above? Either way godot is chill and
	# doesn't complain
	func calcBlockLayerVec( pos ):
		return max( max( abs( pos.x ), abs( pos.y ) ), abs( pos.z ) )

	# Determines if a puzzle is solveable.
	func solvePuzzle():
		# Simply use the solvePuzzleSteps function and return the solveable part.
		var ps = self.solvePuzzleSteps()
		return ps.solveable

	# Determines if a puzzle is solveable and returns the steps needed to solve it.
	func solvePuzzleSteps():
		var puzzleSteps = PuzzleSteps.new()

		var pairs = []

		# Add new dictionary for each later.
		for l in range( puzzleLayers + 1 ):
			pairs.append( {} )

		# Gather paired blocks from the puzzle.
		for b in blocks:
			if b.blockClass == BLOCK_PAIR:
				b.solverFlag = false
				pairs[calcBlockLayerVec(b.blockPos)][b.name] = b

		# Make sure each pair block has a valid pair on the same layer.
		for l in pairs:
			for p in l:
				if l.has( l[p].pairName ):
					if( not l[p].solverFlag ):
						l[p].solverFlag = true
						l[l[p].pairName].solverFlag = true
						puzzleSteps.solveSteps.append( [ l[p].blockPos, l[l[p].pairName].blockPos ] )
				else:
					puzzleSteps.error = SOLVER_ERROR_MISSING_PAIR
					puzzleSteps.errorBlock = l[p]
					return puzzleSteps

		puzzleSteps.solveable = true
		return puzzleSteps

# Randomly shuffle an array.
func shuffleArray( arr ):
	for i in range( arr.size() - 1, 1, -1 ):
		var swapVal = randi() % (i + 1)
		var temp = arr[swapVal]
		arr[swapVal] = arr[i]
		arr[i] = temp

# Determines the block type based on puzzle size and difficulty.
func getBlockType( difficulty, pos ):
	# Determine if this is the goal block.
	if pos.x == 0 and pos.y == 0 and pos.z == 0:
		return BLOCK_GOAL

	# Determine the layer this block is on.
	var layer = calcBlockLayerVec( pos )

	# Determine how many blocks are on the outer part of the layer.
	var layerCount = 0
	if abs( pos.x ) == layer:
		layerCount += 1
	if abs( pos.y ) == layer:
		layerCount += 1
	if abs( pos.z ) == layer:
		layerCount += 1

	# Determine if this block is a laser.
	if difficulty == DIFF_EASY or difficulty == DIFF_MEDIUM:
		if layerCount == 3:
			return BLOCK_LASER

	if difficulty == DIFF_HARD:
		if abs( pos.x ) == abs( pos.z ) and pos.y == 0:
			return BLOCK_LASER

	# Determine if this block is a wild block.
	if difficulty == DIFF_EASY:
		if layerCount == 2:
			return BLOCK_WILD

	if difficulty == DIFF_MEDIUM:
		if layerCount == 2:
			if pos.y == layer || pos.y == -layer:
				return BLOCK_WILD

	if difficulty == DIFF_HARD:
		if layerCount == 1:
			if pos.y == 0:
				return BLOCK_WILD

	# Otherwise it's a normal block.
	return BLOCK_PAIR

# Generates a solveable puzzle.
func generatePuzzle( layers, difficulty ):
	var blockID = 0
	var puzzle = Puzzle.new()
	puzzle.puzzleName = "RANDOM PUZZLE"
	puzzle.puzzleLayers = layers

	# Create all possible positions.
	var layeredblocks = []
	for l in range( 0, layers + 1 ):
		layeredblocks.append( [] )
		puzzle.pairCount.append( 0 )
	for x in range( -layers, layers + 1 ):
		for y in range( -layers, layers + 1 ):
			for z in range( -layers, layers + 1 ):
				layeredblocks[calcBlockLayer( x, y, z )].append(Vector3(x,y,z))
				shape[Vector3(x,y,z)] = null

	# Generate laser lines.
	for l in range( 1, layers + 1 ):
		if difficulty == DIFF_MEDIUM or difficulty == DIFF_EASY:
			for lx in [ -l, l ]:
				for ly in [ -l, l ]:
					puzzle.lasers.append( [Vector3( lx, ly, lx ), Vector3( lx*-1, ly, lx )] )
					puzzle.lasers.append( [Vector3( lx, ly, lx ), Vector3( lx, ly, lx*-1 )] )

		if difficulty == DIFF_EASY:
			for lx in [ -l, l ]:
				for lz in [ -l, l ]:
					puzzle.lasers.append( [Vector3( lx, l, lz ), Vector3( lx, -l, lz )] )

		if difficulty == DIFF_HARD:
			for lx in [ -l, l ]:
					puzzle.lasers.append( [Vector3( lx, 0, lx ), Vector3( lx*-1, 0, lx )] )
					puzzle.lasers.append( [Vector3( lx, 0, lx ), Vector3( lx, 0, lx*-1 )] )

	# Assign block types based on position.
	for l in range( 0, layers + 1 ):
		# Randomize the pairs.
		shuffleArray( layeredblocks[l] )
		# print( "NUM ", layeredblocks[l].size() )
		var prevBlock = null
		var even = false
		for pos in layeredblocks[l]:
			var x = pos.x
			var y = pos.y
			var z = pos.z

			var t = getBlockType( difficulty, pos )

			if t == BLOCK_GOAL:
				continue

			var b = PickledBlock.new()
			b.blockPos = pos
			b.name = blockID

			blockID += 1
			puzzle.blocks.append( b )

			if t == BLOCK_LASER:
				b.setBlockClass(BLOCK_LASER)\
					.setLaserExtent( Vector3( 0, 1, 0 ) )
				continue

			if t == BLOCK_WILD:
				b.setBlockClass(BLOCK_WILD) \
					.setTextureName(blockColors[randi() % blockColors.size()])
				continue

			if even:
				# Count this pair.
				puzzle.pairCount[l] += 1

				var randColor = blockColors[randi() % blockColors.size()]
				b.setBlockClass(BLOCK_PAIR) \
					.setPairName(prevBlock.name) \
					.setTextureName(randColor)

				prevBlock.setBlockClass(BLOCK_PAIR) \
					.setPairName(b.name) \
					.setTextureName(randColor)
			even = not even
			prevBlock = b

	return puzzle

# Storage class for blocks in a puzzle.
class PickledBlock:
	var name
	var blockClass = BLOCK_PAIR
	var pairName
	var textureName = "Red"
	var blockPos
	var laserExtent
	var solverFlag		# Keeps track of this block, only user for the solver.

	func setName(n):
		name = n
		return self

	func setPairName(n):
		pairName = n
		return self

	func setLaserExtent(n):
		laserExtent = n
		return self

	func setBlockPos(n):
		blockPos = n
		return self

	func setBlockClass(c):
		blockClass = c
		return self

	func setTextureName(t):
		textureName = t
		return self

	func toString():
		return str(name) + ": " + str(blockClass) + " @ " + str(blockPos)

	func toNode():
		# instantiate a block scene, assign the appropriate script to it
		var n = blockScn.instance()
		n.set_script(blockScripts[blockClass])

		n.set_translation(blockPos * 2)
		n.blockPos = blockPos

		n.setName(str(name)).setTexture()

		n.setBlockType( blockClass )

		if blockClass == BLOCK_PAIR:
			n.setPairName(pairName).setTexture(textureName)

		if blockClass == BLOCK_WILD:
			n.setTexture(textureName)

		if blockClass == BLOCK_LASER:
			n.setPairName(pairName).setExtent(laserExtent)
		return n

	# test me plz
	func fromNode(n):
		blockPos = n.blockPos

		name = n.name_int

		blockClass = n.getBlockType()

		if blockClass == BLOCK_PAIR:
			pairName = n.pairName
			textureName = n.textureName

		if blockClass == BLOCK_WILD:
			textureName = n.textureName

		if blockClass == BLOCK_LASER:
			pairName = n.pairName

	# Convert this object to a dictionary.
	func toDict():
		var di = { n = name
		 	     , bC = blockClass
			     , pN = pairName
			     , tN = textureName
			     , bP = blockPos
			     , lE = laserExtent
			     }
		return di

	# Make this object from a dictionary.
	func fromDict( di ):
		name = di.n
		blockClass = di.bC
		pairName = di.pN
		textureName = di.tN
		blockPos = di.bP
		laserExtent = di.lE


fix reload abuse

fix reload abuse

extends Node2D

var levels = [
	preload("res://scenes/levels/blank.tscn"),
	preload("res://scenes/levels/level_2.tscn"),
	preload("res://scenes/levels/level_3.tscn")
]

var player_start = Vector2(288, 480)

var level = 1;
var start_game = true
var loading = false;
var playing = true

func _ready():
	set_fixed_process(true);
	get_node("door").close();
	get_node("edoor").close();
	reload()
	play_next()
	pass

func _fixed_process(delta):
	pass

func load_next():
	if not loading:
		get_node("the_room/level").free()
		get_node("the_room").add_child(levels[level].instance())
		get_node("door").close();
		get_node("edoor").open();
		loading = true
		playing = false
		level+=1;

func play_next():
	if loading and not playing:
		get_node("edoor").close();
		loading = false
		playing = true

func reload():
	if playing:
		get_node("the_room/level").free()
		get_node("the_room").add_child(levels[level].instance())
		get_node("door").close();
		get_node("edoor").open();
		get_node("player").moving = false;
		get_node("player").set_pos(player_start);

func open_door():
	get_node("door").open()

func close_door():
	get_node("door").close()

extends Node2D

var levels = [
	preload("res://scenes/levels/blank.tscn"),
	preload("res://scenes/levels/level_2.tscn"),
	preload("res://scenes/levels/level_3.tscn")
]

var player_start = Vector2(288, 480)

var level = 1;
var start_game = true
var loading = false;
var playing = true

func _ready():
	set_fixed_process(true);
	get_node("door").close();
	get_node("edoor").close();
	reload()
	play_next()
	pass

func _fixed_process(delta):
	pass

func load_next():
	if not loading:
		get_node("the_room/level").free()
		get_node("the_room").add_child(levels[level].instance())
		get_node("door").close();
		get_node("edoor").open();
		loading = true
		playing = false
		level+=1;

func play_next():
	if loading and not playing:
		get_node("edoor").close();
		loading = false
		playing = true

func reload():
	get_node("the_room/level").free()
	get_node("the_room").add_child(levels[level].instance())
	get_node("door").close();
	get_node("edoor").open();
	get_node("player").moving = false;
	get_node("player").set_pos(player_start);

func open_door():
	get_node("door").open()

func close_door():
	get_node("door").close()


czas na level

czas na level

fatal: unable to access 'https://github.com/SirCallidus/bomberman.git/': The requested URL returned error: 403


Add input_manager with default input map

fatal: unable to access 'https://github.com/h4de5/spiel4.git/': The requested URL returned error: 403


usunięcie spacji

usunięcie spacji


Will be moved under 'scenes'

Will be moved under 'scenes'

Deleted for now as it isn't used

fatal: unable to access 'https://github.com/agameraaron/grail-adventure.git/': The requested URL returned error: 403


Revert "ups :v"

Revert "ups :v"

This reverts commit ece943042248e7f44ba63e6406badffccc6be444.


Revert "Dostosowanie"

Revert "Dostosowanie"

This reverts commit 4c35cdbc905ed0283615ea3ec768697a94b9fea7.


Add starting XML parser helper

Add starting XML parser helper

No testing so far.

fatal: unable to access 'https://github.com/vnen/xna-rpg-godot.git/': The requested URL returned error: 403


poprawiony speed i czas

poprawiony speed i czas


Create localconf.gd

Create localconf.gd

fatal: unable to access 'https://github.com/Guilddrive/iseqdkp.git/': The requested URL returned error: 403


Added an example script

Added an example script

Added a small script to show the methods I implemented in use.

fatal: unable to access 'https://github.com/a-watson/godot-resource-bar.git/': The requested URL returned error: 403


Why wasn't this added? This belongs here now.

Should have reflected the directory structure I uploaded...


Added nwe lock script

Added nwe lock script

fatal: unable to access 'https://github.com/GameWizards/anttris.git/': The requested URL returned error: 403


jump animation preparation

jump animation preparation

fatal: unable to access 'https://github.com/DeRobyJ/Herbi.git/': The requested URL returned error: 403


Gear Moving Correctly

Gear Moving Correctly

fatal: unable to access 'https://github.com/mrfigueiredo/SelfSteam.git/': The requested URL returned error: 403


ups :v

ups :v


level 4 i 5 global

level 4 i 5 global


Fix typo

Fix typo

fatal: unable to access 'https://github.com/Paulb23/ludum_dare_39.git/': The requested URL returned error: 403


Fix monkey enemy, closes #5

Fix monkey enemy, closes #5


Update 0.1.13

Update 0.1.13

*textures random noise

fatal: unable to access 'https://github.com/HGRussian/roguelike.git/': The requested URL returned error: 403


adding forgotten file

adding forgotten file

fatal: unable to access 'https://github.com/Anatolij-Grigorjev/GodotExperimentBeatIt.git/': The requested URL returned error: 403


liczba wrogów na levelach

liczba wrogów na levelach


missing file for bbcode demo

missing file for bbcode demo

fatal: unable to access 'https://github.com/didier-v/godot.git/': The requested URL returned error: 403


increase tank health

increase tank health


Obsolesced

Obsolesced


Create MasterServer.gd

Create MasterServer.gd

fatal: unable to access 'https://github.com/lorenzobeccaro/godot-masterserver.git/': The requested URL returned error: 403


Obsolesced.

Obsolesced.


Revert "ddd"

Revert "ddd"

This reverts commit d0362455420bbf42d8efed45926eb7ceef7c230e.


split burst pattern

split burst pattern

fatal: unable to access 'https://github.com/BK-TN/IncendiumGame.git/': The requested URL returned error: 403


poprawka dźwięku you_win

poprawka dźwięku you_win


Misplaced. Real one is under 'brains'.

Misplaced. Real one is under 'brains'.


Add gut unit testing framework

Add gut unit testing framework


Fix : add 5 levels in global.gd Please squash commits if you can :s


Dostosowanie

Dostosowanie


v0.41a - Merge conflict resolved.

v0.41a - Merge conflict resolved.


Added GDScript microtests

Added GDScript microtests

fatal: unable to access 'https://github.com/godotengine/godot-tests.git/': The requested URL returned error: 403


zmniejszenie trwania wybuchu

zmniejszenie trwania wybuchu


Added sample solution backup for recommendation resource implementation of graceful degradation

fatal: unable to access 'https://github.com/ufried/resilience-tutorial.git/': The requested URL returned error: 403


removed fixed portal position

removed fixed portal position

fatal: unable to access 'https://github.com/SirCallidus/bomberman.git/': The requested URL returned error: 403


Better game over

Better game over


Start working on a new godot prototype

Start working on a new godot prototype

fatal: unable to access 'https://github.com/mvr/abyme.git/': The requested URL returned error: 403


Err, I mean moved

Err, I mean moved

that game manager.gd was moved too, ehehe

fatal: unable to access 'https://github.com/agameraaron/grail-adventure.git/': The requested URL returned error: 403


Revert "zmniejszenie trwania wybuchu"

Revert "zmniejszenie trwania wybuchu"

This reverts commit 462ec79b54b66b53a991ff4476e75d882494f2a6.


Restored one tile on starter room

Restored one tile on starter room

fatal: unable to access 'https://github.com/P1X-in/rat-is-fat.git/': The requested URL returned error: 403


Added script run by the node in the proxy scene


Create example.gd

Create example.gd

How to use it in godot


Obsolesced

Obsolesced


items handlin

items handlin


ilość bomb na raz

ilość bomb na raz


Moved.

Moved.


missing file for bbcode demo

missing file for bbcode demo

fatal: unable to access 'https://github.com/godotengine/godot-demo-projects.git/': The requested URL returned error: 403


initial commit

initial commit


Moved to /scenes/triggers

Moved to /scenes/triggers