Allegro.cc - Online Community
Post Reply

Allegro.cc Forums » The Depot » ItsyRealm: Alpha #2

rss feed Print
 1   2   3 
ItsyRealm: Alpha #2
Aaron Bolyard
Member #7,537
July 2006
avatar

I fixed the issue with the reward chest in the mine. The short of it was I was transferring items and then trying to transfer them again which is a no-no. I'd rather the game crash than have duping bugs...

...but I have no idea how you got that error while eating.

The call stack in the snippet you posted is in the probe system (e.g., when you left / right click on the game world). Are you able to replicate it, and if so, can you give instructions and/or a video?

edit: ok I was able to replicate it, it's a race condition when unloading maps. The ground inventory is removed before the ground entity reference in the stage. I should be able to fix it quickly enough.

edit 2: ok I fixed it.

I'll do a test play though to find any bugs and then post an updated version.

GullRaDriel
Member #3,861
September 2003
avatar

I'm going to continue my explorations today and keep you informed ^^

Edit: btw can you release a new binary pack ? I would love to finish and collect the chest !

"Code is like shit - it only smells if it is not yours"
Allegro Wiki, full of examples and articles !!

Aaron Bolyard
Member #7,537
July 2006
avatar

Here's the latest update with all those fixes.

I haven't thoroughly tested it so there may be more bugs.

I also added a boomerang and three new melee weapons (dagger, mace, and longsworD).

GullRaDriel
Member #3,861
September 2003
avatar

Crashed when trying to kill the evil three (previous version) I was eating items to keep me alive while the ghouls where around

Error

ItsyScape/Game/ItemBroker.lua:991: provider does not exist

Traceback

[C]: in function 'assert'
ItsyScape/Game/ItemBroker.lua:991: in function 'iterateItemsByKey'
ItsyScape/Game/LocalModel/Stage.lua:691: in function 'getItemsAtTile'
ItsyScape/Game/Probe.lua:187: in function 'loot'
ItsyScape/Game/Probe.lua:112: in function 'callback'
ItsyScape/Game/LocalModel/Stage.lua:858: in function 'update'
ItsyScape/Game/LocalModel/Game.lua:73: in function 'update'
ItsyScape/Application.lua:222: in function 'func'
ItsyScape/Application.lua:117: in function 'measure'
ItsyScape/Application.lua:222: in function 'update'
main.lua:80: in function 'update'
[C]: in function 'xpcall'

Edit: updating to latest. I'm a big fan of that game :-D Nice work, I'm willing to help by submitting bugs ^^

"Code is like shit - it only smells if it is not yours"
Allegro Wiki, full of examples and articles !!

Aaron Bolyard
Member #7,537
July 2006
avatar

Thank you, GullRaDriel! :) Let me know if there's anything in the game you especially like. Have you tried defeating the squid yet? That's one of my favorite parts.

I released alpha #3!

{"name":"9NQL5tS.png","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/2\/7\/27c3a361a84fef3f208605e66be36a61.png","w":1280,"h":720,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/2\/7\/27c3a361a84fef3f208605e66be36a61"}9NQL5tS.png

Improvements since alpha #2a:

  • All weapons are fleshed out between classes

  • Fishing, cooking, and sailing skills

  • Port Isabelle and Mn'thrw

  • More mobs & drops

  • Improvements to combat XP reward computation

  • Projectiles!

  • Selling to shops

  • Lots of bug fixes

  • UI improvements

Download it on the releases page: https://github.com/aaronbolyard/itsyscape/releases/tag/alpha-20181227

Enjoy! :)

There's just the final tutorial dungeon left (plus a few features like a hint system and maybe minimaps). Whoop.

GullRaDriel
Member #3,861
September 2003
avatar

I defeated the squid, the evil three, made me a full bronze armor, a lot of craft and mining.
I also defeated the necromancer.
Is it normal that the state of the quests are not saved ? They keep respawning between loadings, even when dead.

"Code is like shit - it only smells if it is not yours"
Allegro Wiki, full of examples and articles !!

Aaron Bolyard
Member #7,537
July 2006
avatar

Yes, the tasks in the quest are repeatable. They give you items that are useful (high DPS, bad defense helmets) or other rewards (decent woodcutting/combat XP from the ancient driftwood; fish and other items and sailing XP from Mn'thrw encounter; and unfocused runes from the ghostly miner foreman).

I have a few questions:

  1. Was combat intuitive?

  2. Did you know you can disengage from combat by clicking the 'run' icon on the combat status HUD?

  3. Did you know you can attack while moving when using archery/magic? This gives you an advantage against enemies with lower range or slower enemies.

  4. Did you know you can change your stance, which changes how XP is awarded upon defeating enemies?

  5. Did you know how to use magic spells? If you have the runes for a spell (and the level requirements), it lights up on the spell menu. From there, you can select the spell. When active, and if 'Use Spell' is toggled in the combat stance interface, you can then use that spell to fight.

  6. Do the skill guides help?

  7. Did you know you can click on a skill in your stats tab to see the skill guide for that skill?

I think that's it! I'm going to add a hint system that explains all this in detail.

...

video

am I a meme to you

Edgar Reynaldo
Member #8,592
May 2007
avatar

A A Ron B Olyard said:

am I a meme to you(?)

Sorry, yes. ;D

I'm going to play this after New Year's, when KrampusHack is over. ;)

Aaron Bolyard
Member #7,537
July 2006
avatar

I created social media handles / accounts across all the major ones and oh my gosh is it a pain to keep them updated.

Also I've been working on the High Chambers of Yendor (they mysteriously open up in the abandoned mines after you give Isabelle the artefacts, hmmm):

{"name":"pErRq2M.png","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/c\/8\/c8eec03229d0adbd5ef343dd182b6741.png","w":640,"h":360,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/c\/8\/c8eec03229d0adbd5ef343dd182b6741"}pErRq2M.png

{"name":"18ShAJ9.png","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/e\/3\/e341aaaa02ecbf85d3f57f143a94ff84.png","w":640,"h":360,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/e\/3\/e341aaaa02ecbf85d3f57f143a94ff84"}18ShAJ9.png

I also added lighting to the Abandoned Mine:

{"name":"MFZ70ib.png","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/b\/7\/b7ed50e753d76e7b490f1603f0ef901a.png","w":640,"h":360,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/b\/7\/b7ed50e753d76e7b490f1603f0ef901a"}MFZ70ib.png

It looks a lot better...

Arvidsson
Member #4,603
May 2004
avatar

Impressive stuff! I will try to test it someday. Keep it up!

Edgar Reynaldo
Member #8,592
May 2007
avatar

We'll play this as soon as I finish my Krampus hack.

Besides you come out with new versions faster than I produce a demo!
:D

Aaron Bolyard
Member #7,537
July 2006
avatar

If it makes you feel better I haven't posted a release with the High Chambers of Yendor or anything yet. :) My next update will be in Feb/Mar when I release the demo. :o

Edgar Reynaldo
Member #8,592
May 2007
avatar

Just a question what do you use for your Shadow casting technique?

I'd like to add pervert X lighting to my 3D game but I'm not sure how to go about it.

Let's try that again.

I'd like to add per vertex lighting.

That's better stupid phone.

Aaron Bolyard
Member #7,537
July 2006
avatar

I have a hybrid deferred/forward rendering system. The lighting model is re-implemented (and slightly different) on the deferred and forward passes.

This is my forward rendering shader:

#SelectExpand
1#line 1 2 3//////////////////////////////////////////////////////////////////////////////// 4// Resource/Renderer/Forward/Base.frag.glsl 5// 6// This file is a part of ItsyScape. 7// 8// This Source Code Form is subject to the terms of the Mozilla Public 9// License, v. 2.0. If a copy of the MPL was not distributed with this 10// file, You can obtain one at http://mozilla.org/MPL/2.0/. 11/////////////////////////////////////////////////////////////////////////////// 12// 13// Based on code from Tom Dalling: 14// https://www.tomdalling.com/blog/modern-opengl/08-even-more-lighting-directional-lights-spotlights-multiple-lights/ 15// 16/////////////////////////////////////////////////////////////////////////////// 17 18#define SCAPE_MAX_LIGHTS 16 19 20varying vec3 frag_Position; 21varying vec3 frag_Normal; 22varying vec2 frag_Texture; 23 24uniform int scape_NumLights; 25 26uniform struct Light { 27 vec4 position; 28 vec3 color; 29 float attenuation; 30 float ambientCoefficient; 31 float coneAngle; 32 vec3 coneDirection; 33} scape_Lights[SCAPE_MAX_LIGHTS]; 34 35vec3 scapeApplyLight( 36 Light light, 37 vec3 position, 38 vec3 normal, 39 vec3 color) 40{ 41 vec3 direction; 42 float attenuation = 1.0; 43 if (light.position.w == 0.0) 44 { 45 direction = normalize(light.position.xyz); 46 attenuation = 1.0; 47 } 48 else 49 { 50 vec3 lightSurfaceDifference = light.position.xyz - position; 51 direction = normalize(lightSurfaceDifference); 52 float lightSurfaceDistance = length(lightSurfaceDifference); 53 attenuation = light.attenuation / lightSurfaceDistance; 54 55 float dot = dot(-direction, normalize(light.coneDirection)); 56 float lightToSurfaceAngle = degrees(acos(dot)); 57 if (lightToSurfaceAngle > light.coneAngle) 58 { 59 attenuation = 0.0; 60 } 61 } 62 63 vec3 ambient = light.ambientCoefficient * color * light.color; 64 float diffuseCoefficient = max(0.0, dot(normal, direction)); 65 vec3 diffuse = diffuseCoefficient * color * light.color; 66 67 return attenuation * diffuse + ambient; 68} 69 70vec4 performEffect(vec4 color, vec2 textureCoordinate); 71 72vec4 effect( 73 vec4 color, 74 Image texture, 75 vec2 textureCoordinate, 76 vec2 screenCoordinate) 77{ 78 vec4 diffuse = performEffect(color, frag_Texture); 79 float alpha = diffuse.a * color.a; 80 81 if (alpha < 0.1) 82 { 83 discard; 84 } 85 86 vec3 result = vec3(0.0); 87 for (int i = 0; i < scape_NumLights; ++i) 88 { 89 result += scapeApplyLight( 90 scape_Lights[i], 91 frag_Position, 92 frag_Normal, 93 diffuse.rgb); 94 } 95 96 return vec4(result.rgb, diffuse.a * color.a); 97}

(Forward rendering is unaffected by fog.)

Fog is used (sometimes heavily) in certain areas and is implemented in the deferred pass:

#SelectExpand
1#line 1 2 3//////////////////////////////////////////////////////////////////////////////// 4// Resource/Renderer/Deferred/Fog.frag.glsl 5// 6// This file is a part of ItsyScape. 7// 8// This Source Code Form is subject to the terms of the Mozilla Public 9// License, v. 2.0. If a copy of the MPL was not distributed with this 10// file, You can obtain one at http://mozilla.org/MPL/2.0/. 11/////////////////////////////////////////////////////////////////////////////// 12 13uniform Image scape_PositionTexture; 14 15uniform vec2 scape_FogParameters; 16uniform vec3 scape_FogColor; 17uniform vec3 scape_CameraEye; 18 19vec4 effect( 20 vec4 color, 21 Image texture, 22 vec2 textureCoordinate, 23 vec2 screenCoordinate) 24{ 25 vec3 position = Texel(scape_PositionTexture, textureCoordinate).xyz - scape_CameraEye; 26 float length = length(position); 27 float factor = 1.0 - clamp((scape_FogParameters.y - length) / (scape_FogParameters.y - scape_FogParameters.x), 0.0, 1.0); 28 29 return vec4(scape_FogColor * factor, factor); 30}

I walk the scene graph and collect the lights into buckets (point light, directional light, etc), then either render the lights (if deferred) or pass the parameters when drawing the nodes (if forward).

The lights in deferred are full screen effects, if necessary I'll optimize it in the future. For example, here is a point light shader:

#SelectExpand
1#line 1 2 3//////////////////////////////////////////////////////////////////////////////// 4// Resource/Renderer/Deferred/DirectionalLight.frag.glsl 5// 6// This file is a part of ItsyScape. 7// 8// This Source Code Form is subject to the terms of the Mozilla Public 9// License, v. 2.0. If a copy of the MPL was not distributed with this 10// file, You can obtain one at http://mozilla.org/MPL/2.0/. 11/////////////////////////////////////////////////////////////////////////////// 12 13uniform Image scape_PositionTexture; 14 15uniform float scape_LightAttenuation; 16uniform vec3 scape_LightPosition; 17uniform vec3 scape_LightColor; 18 19vec4 effect( 20 vec4 color, 21 Image texture, 22 vec2 textureCoordinate, 23 vec2 screenCoordinate) 24{ 25 vec3 position = Texel(scape_PositionTexture, textureCoordinate).xyz; 26 27 vec3 lightSurfaceDifference = scape_LightPosition - position; 28 float attenuation = clamp(1.0 - length(lightSurfaceDifference) / scape_LightAttenuation, 0.0, 1.0); 29 30 vec3 result = attenuation * attenuation * scape_LightColor; 31 return vec4(result, 1.0); 32}

I take the world-position from the 'scape_PositionTexture' texture and perform the lighting calculation on it that way.

The only difference between vertex and per-pixel lighting is you do the calculation in the vertex stage (and thus the result is interpolated across the triangle, resulting in a retro look). I don't think that would work well with deferred lighting (like used in my game).

Edgar Reynaldo
Member #8,592
May 2007
avatar

Aaron Bolyard
Member #7,537
July 2006
avatar

Lighting is just calculating the direction of a light relative to a surface to determine how light or dark it is, in the end it's just dot products and so on.

If you want something a bit less verbose than code I suggest https://learnopengl.com/Lighting/Basic-Lighting

Lighting is a very complex topic and my implementation is way overkill for my game.

Edgar Reynaldo
Member #8,592
May 2007
avatar

Aaron Bolyard
Member #7,537
July 2006
avatar

I fixed two major bugs.

There was a performance bug where opening/closing interfaces never removed the interface controller from the update list, resulting in 1. a memory leak 2. eroding performance as more interfaces were opened/closed. This was discovered when I kept opening/closing the rewards interface and the FPS kept going down.

This resulted in a GC/memory bug surfacing, which required me to properly use weak tables/weak_ptr to ensure scene nodes were deallocated properly. This also fixes a memory leak.

I'm going to post a new release when I add an entrance to the High Chambers of Yendor. Currently you need to teleport there using the Amulet of Yendor, which ... means you need to steal the amulet from Isabelle using debug mode. Not ideal.

...

{"name":"jKInwme.gif","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/f\/f\/ff4a36fcb9de3016f17e7a8a927b6f2b.gif","w":388,"h":315,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/f\/f\/ff4a36fcb9de3016f17e7a8a927b6f2b"}jKInwme.gif

Done like dinner. Will package up a release later.

There's just one more bug I gotta fix at some point: sometimes an inventory isn't added to the item broker before it's accessed (probably some out-of-order initialization bug) so the game crashes between loading areas. Whoops. It's a very rare crash though, which makes it harder to diagnose.

GullRaDriel
Member #3,861
September 2003
avatar

Aaron, I'm interested in 3 things:
-How you do make the android port ?
-Do you plan an Ios port and if yes how ?
-The latest release FGS ! ;-)

"Code is like shit - it only smells if it is not yours"
Allegro Wiki, full of examples and articles !!

Aaron Bolyard
Member #7,537
July 2006
avatar

1. I compile my modified version of LOVE using the Android build script and add BMASHINA, Discworld, and nbunny as dependencies. Then I build the APK and install on my device. It's pretty unplayable since you can't right click or move the camera, though.

2. Yes, that is the plan. I'm not sure how, I haven't developed for iOS before.

3. Here you go :). If you've given Isabelle all the items she requested, and then talked to her for your reward, you can access the High Chambers of Yendor by lighting the torches near Skeleton Miner Joe. Be prepared... Lots of food is a good idea, and bring two combat styles (ranged + something else is best). The rest is for you to figure out! It's probably very buggy I did minimal Q/A on the earlier areas.

...

Ooh prayers:

{"name":"611859","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/8\/b\/8b913b571d7ceaa974e58f865ca0adab.png","w":1280,"h":720,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/8\/b\/8b913b571d7ceaa974e58f865ca0adab"}611859

Also spells show the requirements now if you hover:

{"name":"611860","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/b\/c\/bc4c0a9c380d8cb15f5fd2589f8fa6e5.png","w":305,"h":251,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/b\/c\/bc4c0a9c380d8cb15f5fd2589f8fa6e5"}611860

(That's a placeholder description used if one is missing. I haven't written any for spells.)

Dizzy Egg
Member #10,824
March 2009
avatar

Ahh man, I need the j0rb pressure to ease off so I can get Itsy again! Probably another week, then I'll get stuck in....looks awesome! 8-)

----------------------------------------------------
Please check out my songs:
https://soundcloud.com/dont-rob-the-machina

Aaron Bolyard
Member #7,537
July 2006
avatar

I added the Nominomicon. Currently it only shows your quest progress but will be expanded in the future.

{"name":"611868","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/d\/2\/d23164342329fa1bb11c9c65a76e478b.png","w":1280,"h":720,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/d\/2\/d23164342329fa1bb11c9c65a76e478b"}611868

You can download the latest version with the Nominomicon and various other fixes/improvements here: https://github.com/aaronbolyard/itsyscape/releases/tag/alpha-20190125

...

Haven't had much time (been doing a bit of work for others) but I managed to add some QOL updates:

{"name":"J3cmAhH.gif","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/d\/d\/dd0fa7fab59129d99e560c006b37358b.gif","w":480,"h":320,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/d\/d\/dd0fa7fab59129d99e560c006b37358b"}J3cmAhH.gif

Tool tips & combat levels. Mn'thrw is level 106 for comparison. That's why you gotta use the cannons.

...

I did some numbers for fun since you can see combat levels now. Yendor will have level 500 stats across the board + 40,000 health which puts his combat level at a little over 20,000. If you killed Yendor dealing 100% of the damage yourself, you'd get around 80,000,000 combat XP. Level 99 (the max) is 14,000,000 XP...

The Empty King is worse, they'll have level 1000 stats across the board + infinite health. I'll probably make an exception and have their combat level '∞'.

GullRaDriel
Member #3,861
September 2003
avatar

Super nice improvements, I'll be sure to play with them :-)

"Code is like shit - it only smells if it is not yours"
Allegro Wiki, full of examples and articles !!

Aaron Bolyard
Member #7,537
July 2006
avatar

I've been working on a website, I'm hoping to get it up and running this week. It looks pretty nice. There's the website which is literally just two pages; the admin page which allows me to manage screenshots & downloads; and the API which will enable developing a launcher.

I think it looks pretty good:

{"name":"I56eFCq.png","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/8\/e\/8e2b6d509bf67108283b355d7c935b99.png","w":800,"h":522,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/8\/e\/8e2b6d509bf67108283b355d7c935b99"}I56eFCq.png

(Technical details: Build using Python/Flask. Admin side is a basic bootstrap site [because I'm literally going to be the only use using it ;D].)

And so now I'm working on adding a launcher. (Small lie: working on analytics then launcher). The launcher will download the latest version of the game (if necessary) and then launch it. It's going to be a simple C#/WinForms app so it shouldn't be too hard to port to Linux / macOS using Mono.

I've had a few hundred downloads and only a handful of comments. Since I'd like to try and approach publishers in the future, I need data on play time, retention, etc when I launch the demo. There will be an opt-out mechanism (just run ItsyRealm.exe with /f:anonymous at the command line; it's a one-off permanent request so long as you don't uninstall the game).

I'm also adding a title screen and save select. This means multiple save files :).

Unfortunately I'm going to need a code signing cert which runs upwards of $400 when I launch the demo so I don't have to deal with SmartScreen (that 'feature' is just a racket of Microsoft pushing the UWP/Windows Store platform, assholes) and have potential players freak out. But that's still about two months away...

It sucks, I want to be working on finishing the content but these little-big things need done at some point and I'd rather get them out of the way.

tl;dr: website, launcher, analytics incoming over the next couple weeks. As far as content, title screen & save select.

edit: Wee title screen.

{"name":"611900","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/d\/f\/dfba3d2e5480d224f5f3a8d41aa9f7fa.png","w":1280,"h":720,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/d\/f\/dfba3d2e5480d224f5f3a8d41aa9f7fa"}611900

edit: Wee player select.

{"name":"611901","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/e\/e\/eea6cec83b9780ee4b9ca690efc33fd9.png","w":1280,"h":720,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/e\/e\/eea6cec83b9780ee4b9ca690efc33fd9"}611901

Time to make the launcher and boom, new release! Well, when I deploy the website, first, of course...

GullRaDriel
Member #3,861
September 2003
avatar

Wow, your work rhythm didn't drop, what a good job !
:-)

With all that I can't wait, I should be able to play during the week end :-D

"Code is like shit - it only smells if it is not yours"
Allegro Wiki, full of examples and articles !!

Post Reply
 1   2   3 


Go to: