Simple Games made with Lumberyard ?

Hi.

I am a one man team at the moment and I would like to start some simple games with this awesome platform. Is it possible or should I stick to other known indie’s platforms ?

For example I want respawning terrain based on some prefabs and some basic AI respawning and a character to move around dealing with the terrain and mobs. Is it possible or I can just great great visual static maps ? I wouldnt mind that a lot but I think that in order for the game to be lighter a big static map wouldnt help.

I really like all what is in this engine (I studied some) but I wouldnt want to invest days or weeks to be dissapointed in not being able to construct what I have in mind.

Thank you!

Hi @vp73,

While I haven’t worked with respawning terrain (yet!), I have worked with the rest and it is very do-able. I suggest watching the great Lumberyard Game Tech tutorials on YouTube. I’ve started adding a few tutorials as well (such as on the spawning that you mentioned using Script Canvas).

I would suggest jumping in with both feet. The learning curve is a little steeper than other game engines, but the power and features (as well as the rapid advancement of the engine) make it worthwhile.

I will be starting my second game using Lumberyard this month.

Best of luck on your project! Look forward to seeing it!

I appreciate your feedback, thank you!

I would really like to see someone in the LY team answering and showing of some small games.

I want to start make some small games but not seeing any tutorials or showcase on that and only advanced stuff it bugs me and makes me think to not start on LY yet :frowning:

I wouldn’t like to invest more time in learning other engines though if LY can offer that too … the creation of small games.

I am a complete noob at this but have already created plenty of playable content. I’m finding LY extremely user-friendly atm. Here is a video of my latest work (building system). This is a playable charactor built in makehuman, animated with mixamo animations, then root motion fixed in Blender…all free and easy to use. I will share my LUA code to. My other videos show the game before I converted everything from script canvas to LUA.

https://youtu.be/UMbVlW0h9bY

Here is the code I have so far. It’s by far not perfect, but it works. Looks like I will have to make 2 posts since my code exceeds 10k characters. So here is the first part.


local movement =
{
Properties =
{
jmp = {default = 500.0},
fJump = 0.0,
rJump = 0.0,
cam_z = {default = EntityId()},
cam_y = {default = EntityId()},
--	is_moving = false,
--	in_air = false,
--	has_waited = false,
--	walking_bw = false,
--	roll = false,
--	fight = false,
ghostFoundation = {default = EntityId()},
ghostWall = {default = EntityId()},
ghostDoorWay = {default = EntityId()},
delayTime = 1.0,
timer = 0.0,
--	buildMode = false,
--	canImpulse = false,
}
}
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function movement:OnActivate()
pi = 3.14159265359;
self.tickBusHandler = TickBus.Connect(self)
self.fbBusId = InputEventNotificationId("fb");
self.fbBus = InputEventNotificationBus.Connect(self, self.fbBusId);
self.lrBusId = InputEventNotificationId("lr"); self.lrBus = InputEventNotificationBus.Connect(self, self.lrBusId);
self.mouse_x_bus_id = InputEventNotificationId("mouse_x");
self.mouse_x_bus = InputEventNotificationBus.Connect(self, self.mouse_x_bus_id);
self.mouse_y_bus_id = InputEventNotificationId("mouse_y"); self.mouse_y_bus = InputEventNotificationBus.Connect(self, self.mouse_y_bus_id);
self.jump_bus_id = InputEventNotificationId("jump");
self.jump_bus = InputEventNotificationBus.Connect(self, self.jump_bus_id);
self.rollBusId = InputEventNotificationId("roll");
self.rollBus = InputEventNotificationBus.Connect(self, self.rollBusId);
self.fightBusId = InputEventNotificationId("fight");
self.fightBus = InputEventNotificationBus.Connect(self, self.fightBusId);
self.buildBusId = InputEventNotificationId("build");
self.buildBus = InputEventNotificationBus.Connect(self, self.buildBusId);
self.oneBusId = InputEventNotificationId("1");
self.oneBus = InputEventNotificationBus.Connect(self, self.oneBusId);
self.twoBusId = InputEventNotificationId("2");
self.twoBus = InputEventNotificationBus.Connect(self, self.twoBusId);
self.threeBusId = InputEventNotificationId("3");
self.threeBus = InputEventNotificationBus.Connect(self, self.threeBusId);
self.fourBusId = InputEventNotificationId("4");
self.fourBus = InputEventNotificationBus.Connect(self, self.forBusId);
end
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function movement:OnHeld(floatValue)
local current_bus = InputEventNotificationBus.GetCurrentBusId()
if current_bus == self.fbBusId and
floatValue > 0 then
--	self.Properties.fJump = 500
is_moving = true
walking_bw = false
AnimGraphComponentRequestBus.Event.SetNamedParameterFloat(self.entityId, "speed", floatValue);
end
if current_bus == self.fbBusId and
floatValue < 0 then
--	self.Properties.fJump = -500
is_moving = true
walking_bw = true
AnimGraphComponentRequestBus.Event.SetNamedParameterFloat(self.entityId, "speed", floatValue);
end
if (current_bus == self.lrBusId)
and (floatValue > 0) and (walking_bw == false) then
--	self.Properties.rJump = 500
AnimGraphComponentRequestBus.Event.SetNamedParameterFloat(self.entityId, "direction", floatValue);
end
if (current_bus == self.lrBusId)
and (floatValue < 0) and (walking_bw == false) then
--	self.Properties.rJump = -500
AnimGraphComponentRequestBus.Event.SetNamedParameterFloat(self.entityId, "direction", floatValue);
end
if (current_bus == self.lrBusId)
and (floatValue > 0) and (walking_bw == true) then
--	self.Properties.rJump = 500
AnimGraphComponentRequestBus.Event.SetNamedParameterFloat(self.entityId, "direction", -floatValue);
end
if (current_bus == self.lrBusId)
and (floatValue < 0)
and (walking_bw == true) then
--	self.Properties.rJump = -500
AnimGraphComponentRequestBus.Event.SetNamedParameterFloat(self.entityId, "direction", -floatValue);
end
if ((is_moving == true) and (current_bus == self.mouse_x_bus_id)) then
TransformBus.Event.RotateAroundLocalZ(self.entityId, -floatValue * .002);
end
if ((is_moving == false) and (current_bus == self.mouse_x_bus_id)) then
TransformBus.Event.RotateAroundLocalZ(self.Properties.cam_z, -floatValue * .002);
end
if current_bus == self.mouse_y_bus_id then
TransformBus.Event.RotateAroundLocalX(self.Properties.cam_y, -floatValue * .002);
end
if current_bus == self.oneBusId then
buildMode = true
xroundto=.5
zroundto=4
yroundto=.5
TransformBus.Event.SetLocalZ(self.Properties.cam_z, 2)
TransformBus.Event.SetLocalY(self.Properties.cam_z, 1)
TransformBus.Event.SetLocalX(self.Properties.cam_z, 0)
TransformBus.Event.SetWorldTranslation(self.Properties.ghostFoundation, buildLoc)
end
if current_bus == self.twoBusId then
buildMode = true
xroundto=1
zroundto=4
yroundto=1
TransformBus.Event.SetLocalZ(self.Properties.cam_z, 2)
TransformBus.Event.SetLocalY(self.Properties.cam_z, 1)
TransformBus.Event.SetLocalX(self.Properties.cam_z, 0)
TransformBus.Event.SetWorldTranslation(self.Properties.ghostWall, buildLoc)
end
if current_bus == self.threeBusId then
buildMode = true
xroundto=1
zroundto=4
yroundto=1
TransformBus.Event.SetLocalZ(self.Properties.cam_z, 2)
TransformBus.Event.SetLocalY(self.Properties.cam_z, 1)
TransformBus.Event.SetLocalX(self.Properties.cam_z, 0)
TransformBus.Event.SetWorldTranslation(self.Properties.ghostDoorWay, buildLoc)
end
--	if current_bus == self.buildBusId and
--	TransformBus.Event.GetWorldTranslation(self.Properties.blockSpawner)
end

Here is the second half of the code.


	function movement:OnPressed(boolValue)
local current_bus = InputEventNotificationBus.GetCurrentBusId()
if self.Properties.in_air == false then
if current_bus == self.jump_bus_id then
AnimGraphComponentRequestBus.Event.SetNamedParameterBool(self.entityId, "jump", true)
self.Properties.canImpulse = true;
self.Properties.timer = self.Properties.delayTime
end
end
if buildMode == false and current_bus == self.rollBusId then
AnimGraphComponentRequestBus.Event.SetNamedParameterBool(self.entityId, "roll", true)
end
if buildMode == false and current_bus == self.fightBusId then
AnimGraphComponentRequestBus.Event.SetNamedParameterBool(self.entityId, "fight", true)
end
if buildMode == true and
current_bus == self.fightBusId then
SpawnerComponentRequestBus.Event.Spawn(self.Properties.ghostFoundation)
end
if buildMode == true and
current_bus == self.fightBusId then
SpawnerComponentRequestBus.Event.Spawn(self.Properties.ghostWall)
end if buildMode == true and
current_bus == self.rollBusId then
TransformBus.Event.RotateAroundLocalZ(self.Properties.ghostWall, (pi * .50082))
end
if buildMode == true and
current_bus == self.fightBusId then
SpawnerComponentRequestBus.Event.Spawn(self.Properties.ghostDoorWay)
end if buildMode == true and
current_bus == self.rollBusId then
TransformBus.Event.RotateAroundLocalZ(self.Properties.ghostDoorWay, (pi * .50082))
end
end
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function movement:OnReleased(floatValue)
local current_bus = InputEventNotificationBus.GetCurrentBusId()
if current_bus == self.oneBusId then
buildMode = false
TransformBus.Event.SetLocalZ(self.Properties.cam_z, 1.2)
TransformBus.Event.SetLocalX(self.Properties.cam_z, .3)
TransformBus.Event.SetLocalY(self.Properties.cam_z, 0)
TransformBus.Event.SetLocalTranslation(self.Properties.ghostFoundation, Vector3(0,0,0))
end
if current_bus == self.twoBusId then
buildMode = false
TransformBus.Event.SetLocalZ(self.Properties.cam_z, 1.2)
TransformBus.Event.SetLocalX(self.Properties.cam_z, .3)
TransformBus.Event.SetLocalY(self.Properties.cam_z, 0)
TransformBus.Event.SetLocalTranslation(self.Properties.ghostWall, Vector3(0,0,0))
end
if current_bus == self.threeBusId then
buildMode = false
TransformBus.Event.SetLocalZ(self.Properties.cam_z, 1.2)
TransformBus.Event.SetLocalX(self.Properties.cam_z, .3)
TransformBus.Event.SetLocalY(self.Properties.cam_z, 0)
TransformBus.Event.SetLocalTranslation(self.Properties.ghostDoorWay, Vector3(0,0,0))
end
if current_bus == self.fbBusId then
is_moving = false;
end
if current_bus == self.fbBusId then
AnimGraphComponentRequestBus.Event.SetNamedParameterFloat(self.entityId, "speed", floatValue);
self.Properties.fJump = 0.0
end
if current_bus == self.lrBusId then
AnimGraphComponentRequestBus.Event.SetNamedParameterFloat(self.entityId, "direction", floatValue);
self.Properties.rJump = 0.0
end
if current_bus == self.jump_bus_id then
AnimGraphComponentRequestBus.Event.SetNamedParameterBool(self.entityId, "jump", false);
end
if current_bus == self.rollBusId then
AnimGraphComponentRequestBus.Event.SetNamedParameterBool(self.entityId, "roll", false);
end
if current_bus == self.fightBusId then
AnimGraphComponentRequestBus.Event.SetNamedParameterBool(self.entityId, "fight", false);
end
if buildMode == true and
current_bus == self.fightBusId then
end
end
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function movement:OnTick(deltaTime)
local cam_y_loc = TransformBus.Event.GetLocalY(self.Properties.cam_y)
local cam_z_rot = TransformBus.Event.GetLocalRotation(self.Properties.cam_z)
local player_rot = TransformBus.Event.GetLocalRotation(self.entityId)
local pi = 3.14
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- Debug.Log(tostring(player_rot.z))
----auto camera zoom if cam_y_loc > -1 then cam_y_loc = -1 -- clamp
end
if cam_y_loc < -3 then cam_y_loc = -3 --clamp
end
if is_moving == true then
TransformBus.Event.SetLocalY(self.Properties.cam_y, cam_y_loc -.01) --zoom out
end
if is_moving == false then
TransformBus.Event.SetLocalY(self.Properties.cam_y, cam_y_loc +.02) --zoom in
end
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
----auto camera correct
if is_moving == true and cam_z_rot.z > pi and cam_z_rot.z < 6.25 then TransformBus.Event.RotateAroundLocalZ(self.Properties.cam_z,.02)
end
if is_moving == true and cam_z_rot.z < pi and cam_z_rot.z > .03 then
TransformBus.Event.RotateAroundLocalZ(self.Properties.cam_z,-.02) end
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
----in air
local config = RayCastConfiguration()
local worldPosition = TransformBus.Event.GetWorldTM(self.entityId)
config.origin = worldPosition:GetTranslation()
config.direction = Vector3(0.0, 0.0,-1.0);
local result = PhysicsSystemRequestBus.Broadcast.RayCast(config)
local count = result:GetHitCount()
if count > 0 then
local hit = result:GetHit(1) --object hit --future use
local dist = (result:GetHit(1).position.z - config.origin.z) *-1 --distance from ground
--	Debug.Log(tostring(buildLoc))
if dist > 1 then
AnimGraphComponentRequestBus.Event.SetNamedParameterBool(self.entityId, "in_air", true)
self.Properties.in_air = true
end
if dist < 1 then
AnimGraphComponentRequestBus.Event.SetNamedParameterBool(self.entityId, "in_air", false)
self.Properties.in_air = false
end
end
----------------------------------------------------------------------------------------------------------------------------------
----building system
if buildMode == true then
local build = RayCastConfiguration()
local camPosition = TransformBus.Event.GetWorldTM(self.Properties.cam_y)
local mask = PhysicalEntityTypes.Static + PhysicalEntityTypes.Terrain;
build.origin = camPosition:GetPosition()
build.direction = camPosition:GetColumn(1);
build.maxDistance = 50;
build.physicalEntityTypes = mask
local result = PhysicsSystemRequestBus.Broadcast.RayCast(build)
local count = result:GetHitCount()
if count > 0 then
local hit = result:GetHit(1)
buildHit = hit.position
spawnedBlock = hit.entityId
Debug.Log(tostring(spawnedBlock))
--	xroundto=.5
--	zroundto=4
--	yroundto=.5
if buildHit.x*xroundto<0 then x=-.5 else x=.5 end
Integer, decimal = math.modf(buildHit.x*xroundto+x)
xx = Integer/xroundto if buildHit.y*yroundto<0 then x=-.5 else x=.5 end
Integer, decimal = math.modf(buildHit.y*yroundto+x)
yy = Integer/yroundto if buildHit.z*zroundto<0 then x=-.5 else x=.5 end
Integer, decimal = math.modf(buildHit.z*zroundto+x)
zz = Integer/zroundto buildLoc = Vector3(xx,yy,zz)
Debug.Log(tostring(buildLoc)) end
end
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
---jump timer
if (self.Properties.canImpulse == true) then
if self.Properties.timer > 0.0 then
self.Properties.timer = self.Properties.timer - deltaTime;
else
PhysicsComponentRequestBus.Event.AddImpulse(self.entityId, Vector3(0,0,self.Properties.jmp))
self.Properties.canImpulse = false
end
end
end
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function movement:OnDeactivate()
self.fbBus:Disconnect()
self.lrBus:Disconnect()
self.tickBusHandler:Disconnect()
self.jump_bus:Disconnect()
end
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
return movement;

Lumberyard are characterized by high productivity, efficiency. It would be great if they tried to create something like World of Warcraft. Because I needed to buy a raise in Horific visions boost, for $ 29.00, which includes 3 zones run (4 chests total) to make the game in WOW at least a little more interesting. Developers have not been releasing updates for a long time, and fewer people are playing Warcraft.