Implementation Gooey's Quests

Rostyslav Zatserkovnyi

Member
Contributor
Architecture
GUI
Hunter
Finally got around to trying this out, and The Thing @Florian just mentioned is definitely worth looking at :D
The last commit message for the GooeysQuests repository kind of spoils The Thing - I didn't look at the repo until after checking out the module, but still something worth considering.

Overall the module looks fun so far!
No breaking issues on my end, one medium-priority problem: in ~25% of generated worlds Gooey wouldn't spawn in the dungeon entrance. Might just be cliff availability issues - these particular worlds seemed somewhat flat around the spawn area.
 

Florian

Active Member
Contributor
Architecture
@Rostyslav Zatserkovnyi Nice to hear that you like it.

I pushed a new version up, that contains however mostly internal changes:
  • When a dungeon gets spawned particles are shown at the entrance (as suggested by @Cervator)
  • The rooms (entrance door & cooridor) are now defined in prefabs. This includes both block placement and the check if the spawn location is correct. (There is some already some code for converting a region into the important part of the prefab format, but it lacks proper UI to be exposed to the user. I used that code for generating the new format from a structure generated by the old code)
 

Florian

Active Member
Contributor
Architecture
I worked mostly on creating some tools that assist at the creation of structure templates.

Change Log:
  • It is now possible to create items that spawn structures. For example you could create a item that spawns a part of a wall and then use it over and over again to spawn a complete wall:
  • How the structure looks, gets defined with a "structure template editor" item. The "structure template editor" item allow you to select a region with a building and then create any numbers of "structure spawn items" from it. While you hold a "structure template editor item" an outline is shown of the region that gets copied. Right clicking opens a minimasic UI:
  • To get "structure template editor" items you can use a new "structure template generator" item. When you right click a block with a structure template generator item, a "structure template editor" item gets created that has its origin at the clicked location.
I plan to move this functionality soon it it's own module.
 

Cervator

Org Co-Founder & Project Lead
Contributor
Design
Logistics
SpecOps
Neat! Very cool to see it get into structures :)

I wonder how hard it would be to make an external editor like VoxelShop (pinging @flux!) take a voxelated structure from the drawing program and create a .prefab or custom asset you could then use in-game to load up such an object placer.
 

Florian

Active Member
Contributor
Architecture
I pushed up a new version to the master branch:

Change log:
  • The item for placing structures shows now a preview via region outlines.
I also worked on adding the possibility to have the structures face the direction the player is looking at, but it it is not fully done yet.
 

Florian

Active Member
Contributor
Architecture
I pushed up a new version to the master branch.

Change log:
  • This module depends now on the structure template module. The structure template code has been moved to it.
  • The dungeon entrance spawns now at all sides of a mountain
 

Florian

Active Member
Contributor
Architecture
I pushed up a new version to the master branch:

Change log:
  • The dungeon is now generated randomly based on entrance + 3 room types (right turn, corridor, reward place holder room)
  • The dungeon entrance spawner can now also be obtained as item via (giveItem dungeonEntranceSpawner) to test out the dungeon spawning more easily.
  • The system allows you to define rooms via prefabs and how they are connected.
I am not fully happy with the current way of how rooms connections can be defined and will probably change that aspect again.
 

Cervator

Org Co-Founder & Project Lead
Contributor
Design
Logistics
SpecOps

Florian

Active Member
Contributor
Architecture
I pushed a new version to the repository.

Change log:
  • Fixed a bug that prevented gooey from spawning properly until you walked to a different place
  • Migrated the module to use the new version of the StructureTemplates module that supports now spawn conditions. (See big post in other thread!)
 

Florian

Active Member
Contributor
Architecture
I pushed a new version to the repository.

Change log:
  • The module uses now the components from the StructureTemplates module in order to specify the chain of structure spawning.
  • Dungeon entrances spawn can spawn now at more locations. A bit of teraforming gets applied to make entrances now also fit in flatter hills.
  • A few very basic dungeon rooms have been added
    Cooridor with right door option. Corridor making left turn, small storage room. In addition to that chests spawn now at locations where dungeon corridors extensions are allowed.
  • The particle spawning has been generalized and can now be specified via prefab. As a result particle get now also shown when you spawn a dungeon entrance via item. To try this out, get yourself a dungeon entrance spawner via:
    Code:
    giveItem dungeonEntranceViaMountain
    .
 
Last edited:

Cervator

Org Co-Founder & Project Lead
Contributor
Design
Logistics
SpecOps
Looking good :) Thanks for the multiplayer fix, merged it!

I was able to join a server and have Gooey spawn a few times, even placing a dungeon myself with the tool. Then on trying to place another (after once having had the tool reject a placement) I managed to crash the game. Log snippet below:

...
23:04:15.276 [main] ERROR o.t.l.debug.ChunkEventErrorLogger - Multiple loads of chunk (-5, -2, -5)
23:04:15.326 [main] ERROR o.t.l.debug.ChunkEventErrorLogger - Multiple loads of chunk (-5, 2, -5)
23:04:16.326 [main] ERROR o.t.l.debug.ChunkEventErrorLogger - Multiple loads of chunk (-6, 0, -5)
23:04:16.334 [main] INFO o.t.network.internal.ServerImpl - Destroying entity: EntityRef{id = 9435, netId = 117, prefab = 'GooeysQuests:gooey'}
23:04:16.334 [main] INFO o.t.network.internal.ServerImpl - Destroying entity: EntityRef{id = 0}
23:04:16.721 [main] ERROR o.t.l.debug.ChunkEventErrorLogger - Multiple loads of chunk (-6, -1, -5)
23:04:21.935 [main] ERROR o.t.l.debug.ChunkEventErrorLogger - Multiple loads of chunk (-6, 1, -5)
23:04:22.435 [main] ERROR o.t.l.debug.ChunkEventErrorLogger - Multiple loads of chunk (-6, -2, -5)
23:04:22.535 [main] ERROR o.t.l.debug.ChunkEventErrorLogger - Multiple loads of chunk (-6, 2, -5)
23:04:25.830 [main] INFO o.t.network.internal.ServerImpl - Destroying entity: EntityRef{id = 15788, netId = 120}
23:04:31.916 [main] ERROR o.terasology.engine.TerasologyEngine - Uncaught exception, attempting clean game shutdown
java.lang.NullPointerException: null
at org.terasology.persistence.typeHandling.mathTypes.Vector3iTypeHandler.deserialize(Vector3iTypeHandler.java:41)
at org.terasology.persistence.typeHandling.mathTypes.Vector3iTypeHandler.deserialize(Vector3iTypeHandler.java:28)
at org.terasology.persistence.typeHandling.protobuf.ProtobufDeserializationContext.deserializeAs(ProtobufDeserializationContext.java:44)
at org.terasology.persistence.typeHandling.mathTypes.Region3iTypeHandler.deserialize(Region3iTypeHandler.java:54)
at org.terasology.persistence.typeHandling.mathTypes.Region3iTypeHandler.deserialize(Region3iTypeHandler.java:33)
at org.terasology.persistence.typeHandling.Serializer.deserializeOnto(Serializer.java:97)
at org.terasology.persistence.serializers.NetworkEntitySerializer.deserializeOnto(NetworkEntitySerializer.java:237)
at org.terasology.persistence.serializers.NetworkEntitySerializer.deserializeOnto(NetworkEntitySerializer.java:206)
at org.terasology.network.internal.ServerImpl.updateEntity(ServerImpl.java:375)
at org.terasology.network.internal.ServerImpl$$Lambda$216/1282899579.accept(Unknown Source)
at java.util.ArrayList.forEach(ArrayList.java:1249)
at java.util.Collections$UnmodifiableCollection.forEach(Collections.java:1080)
at org.terasology.network.internal.ServerImpl.processMessages(ServerImpl.java:273)
at org.terasology.network.internal.ServerImpl.update(ServerImpl.java:187)
at org.terasology.network.internal.NetworkSystemImpl.update(NetworkSystemImpl.java:317)
at org.terasology.engine.subsystem.common.NetworkSubsystem.preUpdate(NetworkSubsystem.java:46)
at org.terasology.engine.TerasologyEngine.mainLoop(TerasologyEngine.java:407)
at org.terasology.engine.TerasologyEngine.run(TerasologyEngine.java:369)
at org.terasology.engine.Terasology.main(Terasology.java:150)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
23:04:31.917 [main] INFO o.terasology.engine.TerasologyEngine - Shutting down Terasology...
23:04:31.995 [main] INFO o.t.n.internal.NetworkSystemImpl - Network shutdown
23:04:35.307 [main] WARN o.t.rendering.nui.skin.UISkinFormat - Failed to resolve UIWidget class UIInputBindButton, skipping style information
23:04:35.318 [main] WARN o.t.rendering.nui.asset.UIFormat - Field 'emptyIcon' not recognized for interface org.terasology.rendering.nui.UIWidget in {"type":"UIIconBar","id":"breathBar","icon":"engine:icons#bubble","family":"breathBar","emptyIcon":"engine:icons#burstBubble","halfIconMode":"shrink","spacing":2,"maxIcons":10,"layoutInfo":{"use-content-width":true,"use-content-height":true,"position-left":{"target":"CENTER"},"position-right":{"target":"RIGHT","widget":"healthBar"},"position-bottom":{"target":"TOP","widget":"healthBar","offset":1}}}
23:04:35.319 [main] WARN o.t.rendering.nui.asset.UIFormat - Field 'crosshairIcon' not recognized for interface org.terasology.rendering.nui.UIWidget in {"type":"UICrosshair","id":"crosshair","crosshairIcon":"engine:gui#crosshair","layoutInfo":{"use-content-width":true,"use-content-height":true,"position-horizontal-center":{},"position-vertical-center":{}}}
java.lang.NullPointerException
at org.terasology.persistence.typeHandling.mathTypes.Vector3iTypeHandler.deserialize(Vector3iTypeHandler.java:41)
at org.terasology.persistence.typeHandling.mathTypes.Vector3iTypeHandler.deserialize(Vector3iTypeHandler.java:28)
at org.terasology.persistence.typeHandling.protobuf.ProtobufDeserializationContext.deserializeAs(ProtobufDeserializationContext.java:44)
at org.terasology.persistence.typeHandling.mathTypes.Region3iTypeHandler.deserialize(Region3iTypeHandler.java:54)
at org.terasology.persistence.typeHandling.mathTypes.Region3iTypeHandler.deserialize(Region3iTypeHandler.java:33)
at org.terasology.persistence.typeHandling.Serializer.deserializeOnto(Serializer.java:97)
at org.terasology.persistence.serializers.NetworkEntitySerializer.deserializeOnto(NetworkEntitySerializer.java:237)
at org.terasology.persistence.serializers.NetworkEntitySerializer.deserializeOnto(NetworkEntitySerializer.java:206)
at org.terasology.network.internal.ServerImpl.updateEntity(ServerImpl.java:375)
at org.terasology.network.internal.ServerImpl$$Lambda$216/1282899579.accept(Unknown Source)
at java.util.ArrayList.forEach(ArrayList.java:1249)
at java.util.Collections$UnmodifiableCollection.forEach(Collections.java:1080)
at org.terasology.network.internal.ServerImpl.processMessages(ServerImpl.java:273)
at org.terasology.network.internal.ServerImpl.update(ServerImpl.java:187)
at org.terasology.network.internal.NetworkSystemImpl.update(NetworkSystemImpl.java:317)
at org.terasology.engine.subsystem.common.NetworkSubsystem.preUpdate(NetworkSubsystem.java:46)
at org.terasology.engine.TerasologyEngine.mainLoop(TerasologyEngine.java:407)
at org.terasology.engine.TerasologyEngine.run(TerasologyEngine.java:369)
at org.terasology.engine.Terasology.main(Terasology.java:150)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
For more details, see the log files in J:\Dev\Terasology\Git\integrate\Terasology\logs\2016-07-10_22-53-09
 

Florian

Active Member
Contributor
Architecture
@Cervator something went terribly wrong in the scenario where the crash happend. The log files already begins with "Multiple loads of chunk" errors.
 

Cervator

Org Co-Founder & Project Lead
Contributor
Design
Logistics
SpecOps
@Cervator something went terribly wrong in the scenario where the crash happend. The log files already begins with "Multiple loads of chunk" errors.
Those are relatively common actually :/

Not that they aren't likely to lead to complications, but I see them on a regular basis in different ways, including when we do multiplayer testing. Most the time the game seems to continue without any apparent issues.
 

Florian

Active Member
Contributor
Architecture
I pushed a new version to the repository

Change Log:
  • Items have been added to the chests in the dungeon. Two of the added items are from the equipment module
 

Cervator

Org Co-Founder & Project Lead
Contributor
Design
Logistics
SpecOps
Tried it out! Found a bronze helmet in a chest waaay at the end of a long hallway that turned left once and had several other doorframes on the right side after that leading into little storage rooms :)

Adding Equipment + PhysicalStats to the module lineup shortly since they're dependencies now. New character screen is working as is equipping gear so that's cool new stuff too! Yay @xtariq !
 

Florian

Active Member
Contributor
Architecture
I pushed a new version to the repository

Change Log:
  • Added more templates for the dungeon generator to pick from.
    Mini Town that can have 3 different types of structures (forge, inn, shop) + a big room with stairs and 3 exits. Latter spawns rarely as otherwise the dungeon might get to big.
 

Cervator

Org Co-Founder & Project Lead
Contributor
Design
Logistics
SpecOps
Checked it out and noted for next release! Found some neat stuff, very cool :)

Terasology-160807220922-1152x720.jpg
 

Florian

Active Member
Contributor
Architecture
I pushed a new version to the repository.

Some new content can be found in the dungeon town.
I added a skeleton to the dungeon town entrance.

I would have liked to polish it a bit more, but since I want it to make it in the multi player test I released it now.
 

Cervator

Org Co-Founder & Project Lead
Contributor
Design
Logistics
SpecOps
Tested it out - very impressive! I was surprised even reading the spoiler :D

Little stuck at first but then interesting things happened!
 

Florian

Active Member
Contributor
Architecture
I pushed up a new version to the repository:
  • Skeletons no longer slow down when they have to turn, but there is still sometimes an issue where they get stuck.
  • Skeletons spawn now only for real when the player gets close enough.
  • Skeletons are now hopefully no longer initially stuck, as previously they got spawned when there was no pathfinding graph yet for that area.
  • Added one new room to the dungeon
    A bedroom
  • Improved the positioning of the skeleton at the dungeon town entrance.
  • Skeleton no longer flickers between animations when it can't find a path to the player
 
Last edited:
Top