Giter VIP home page Giter VIP logo

epic's Introduction

epic -- Enhanced Programmer for Ingame Control

A mod for minetest

Coverage Status

Overview

Create and program missions or quests by placing and configuring blocks.

Successor of the missions mod.

Links

Features

  • Create missions or quests with player interaction
  • Audio and Visual effects (skybox, background-sounds, etc)
  • Environment manipulation (set node, remove node)
  • Inventory manipulation
  • Waypoints
  • Teleporting
  • Spawn mobs
  • Send messages
  • Execute commands
  • Simple control flow (no lua coding needed)
  • Conditional branching (for example: "if player is there then execute that")
  • 3rd-party mod integrations (mobs, signs, mesecons)

Demo

For a demo visit the Damocles server.

Compatibility

  • Minetest >= 5.0

Manual

Dependencies

Optional:

  • default
  • screwdriver
  • mobs
  • mesecons
  • digilines
  • player_monoids
  • soundblock
  • monitoring
  • signs

Plugins

Settings

  • epic.log_executor (bool, false) logs executor internals to the action log
  • epic.hud.offsetx (float) hud x offset
  • epic.hud.offsety (float) hud y offset
  • epic.build_restrictions (bool, false) if true you need the epic_builder priv to place epic blocks

Portability notes

All coordinates are stored relative in the blocks. This makes it possible to copy your creations in the same or across worlds with WorldEdit or a similar tool.

Technical docs

Licenses

Code

  • MIT

Assets

epic's People

Contributors

buckaroobanzay avatar imgbotapp avatar lonewolfht avatar luk3yx avatar mistere123 avatar naturefreshmilk avatar oversword avatar thomasrudin avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

epic's Issues

Check armor block doesnt work

Untitled

in the pic above, the check armor block is used to continue the game if the armor inv is empty, else it will "bounce" the player with a teleport block and say "take off your armor first!"

What happens actually is that it allows the game to continue despite players having armor on. It is no different than a no-op block

epic_dialogue

Blocks

  • "Start dialogue"
  • "Choice"

Execution

  • with normal code-flow
  • with npc/mob on_right_click

co-op concept

Co-Operation playing

Player collection/start block

  • Execution stops for a given time at that block to allow players to gather

Execution strategies

  • Branching
    • Should everybody follow the same "path"?
    • What if someone deviates from it?
  • on_check
    • When are the checks successful?
    • If everybody is (for example) on the waypoint or just someone?
  • What to do if a player quits?
  • Limit fill_chest, spawn_mob and co to only one call

add "score" block/module

  • modify score block (add/subtract/set)
  • highscore block (last n players)
  • data storage in json format per "game/domain"

Unstash inventory does not seem to work

Using minetest 5.4.1

On a local game, using the unstash block does not seem to restore the inventory saved by a stash block

With a basic setup, a stash block, and unstash block, and a function block pointing into each - when the inventory is stashed by executing the stash block it is not restored when executing the unstash block.

I did a little logging to try and figure out why this was happening, it seems that the ctx.data variable is empty when we would expect it to have the stashed data available at ctx.data.stashed_items

Stashing seems to work, it executes fine and logging it out shows that the list at ctx.data.stashed_items is being added to, it seems to me that the context is not persisting through multiple calls properly.

This also happens when the local game is hosted as a server, not just singleplayer mode.

Clear inv block

I would like a block that clears the current player's inventory. This would be useful for removing an epic's game items before returning the players stuff from a saved inventory.

the use case would be to use the stash inv to save a player's inventory, then have the player run around the gameboard collecting items as part of the game, such as diamonds, and when the game is finished, all items are taken away, and then the original inv is returned. that way subgame items can remain sub-game-specific

The on_abort code doesnt seem to run when player leaves

I want to set it up so that a subgame grants fly for 10 min.

I set up an on_abort that revokes fly, but when I get the fly priv, then leave the game, then rejoin, I still have fly, and have it permenantly. This will be a way to get the fly priv permenantly if the bug is not fixed, so I can't to that right now.

Discord webhook block

Settings

  • Webhook URL
  • Texture basepath

Parameters

  • Texture icon
  • Message (with replacements)

log_executor crash

2020-03-27 23:38:25: ERROR[Main]: ServerError: AsyncErr: environment_Step: Runtime error from mod 'mobs_monster' in callback environment_Step(): /data/world//worldmods/epic/log_executor.lua:12: attempt to index local 'player' (a nil value)
2020-03-27 23:38:25: ERROR[Main]: stack traceback:
2020-03-27 23:38:25: ERROR[Main]: 	/data/world//worldmods/epic/log_executor.lua:12: in function 'fn'
2020-03-27 23:38:25: ERROR[Main]: 	/data/world//worldmods/epic/executor_hooks.lua:13: in function 'run_hook'
2020-03-27 23:38:25: ERROR[Main]: 	/data/world//worldmods/epic/executor.lua:89: in function 'execute_player_state'
2020-03-27 23:38:25: ERROR[Main]: 	/data/world//worldmods/epic/executor.lua:130: in function 'func'
2020-03-27 23:38:25: ERROR[Main]: 	/usr/local/share/minetest/builtin/common/after.lua:20: in function 'globalstep'
2020-03-27 23:38:25: ERROR[Main]: 	...//worldmods/monitoring/monitoring/builtin/globalstep.lua:29: in function <...//worldmods/monitoring/monitoring/builtin/globalstep.lua:20>
2020-03-27 23:38:25: ERROR[Main]: 	/usr/local/share/minetest/builtin/game/register.lua:429: in function </usr/local/share/minetest/builtin/game/register.lua:413>

feature request: game_over chasing mobs

Add an api that extends mobs_redo to add mobs that when they "catch" a player by getting within punch range, throw an epic event that can do something like start a level over or end the game. This will allow super-mario-esque enemies that must be avoided rather than "conqured", or, which, when they get you, cause a certain action with epic. Another application is that when you come near a mob, a function runs that gives you a prize or a key.

On_abort + unstash inv bug

when an unstash inventory is called from an abort callback, the inventory is not replaced. It is replaced if it is called from a @sympbol block. In my case, users can type "/spawn" to leave the arena, as well as type "epic_abort" During the main game, if the leave the area (with /spawn), it is detected by an inverse waypoint, and the cleanup function is called. That method restores teh cashed inventory. However, when players leave with an /epic_abort, their inventory is not replaced.

I am also trying to implement clearing the inventory of game items before returning the player's cashed inventory. That doesnt seem to work eaither (I was using a command block with /clearinv @player

deduct after branch block removes items twice (or even more)

2020-05-16 11:52:59: ACTION[Server]: [epic] on_execute_epic player=BuckarooBanzai main_pos=(-1090,-7,2026) state={
	initialized = false,
	data = {
		
	},
	step_data = {
		
	},
	stack = {
		
	},
	name = "function@(-1090,-7,2026)",
	ip = {
		y = -7,
		x = -1090,
		z = 2026
	}
}
2020-05-16 11:52:59: ACTION[Server]: [epic] [executor] execute_player_state(BuckarooBanzai))
2020-05-16 11:52:59: ACTION[Server]: [epic] on_before_node_enter player=BuckarooBanzai pos=(-1090,-7,2026) node=epic:function
2020-05-16 11:52:59: ACTION[Server]: [epic] on_before_node_exit player=BuckarooBanzai pos=(-1090,-7,2026) node=epic:function
2020-05-16 11:52:59: ACTION[Server]: [epic] [executor] execute_player_state(BuckarooBanzai))
2020-05-16 11:52:59: ACTION[Server]: [epic] on_before_node_enter player=BuckarooBanzai pos=(-1091,-7,2026) node=epic:branch
2020-05-16 11:52:59: ACTION[Server]: [epic] [executor] execute_player_state(BuckarooBanzai))
2020-05-16 11:52:59: ACTION[Server]: [epic] on_before_node_check player=BuckarooBanzai pos=(-1091,-7,2026) node=epic:branch
2020-05-16 11:52:59: ACTION[Server]: [epic::branch] on_before_node_check player=BuckarooBanzai pos=(-1092,-7,2026) node=epic:deduct_inv
2020-05-16 11:52:59: ACTION[Server]: [epic::branch] on_before_node_check player=BuckarooBanzai pos=(-1092,-8,2026) node=epic:nop
2020-05-16 11:52:59: ACTION[Server]: [epic] on_before_node_exit player=BuckarooBanzai pos=(-1091,-7,2026) node=epic:branch
2020-05-16 11:52:59: ACTION[Server]: [epic] [executor] execute_player_state(BuckarooBanzai))
2020-05-16 11:52:59: ACTION[Server]: [epic] on_before_node_enter player=BuckarooBanzai pos=(-1092,-7,2026) node=epic:deduct_inv
2020-05-16 11:52:59: ACTION[Server]: [epic] [executor] execute_player_state(BuckarooBanzai))
2020-05-16 11:52:59: ACTION[Server]: [epic] on_before_node_check player=BuckarooBanzai pos=(-1092,-7,2026) node=epic:deduct_inv
2020-05-16 11:52:59: ACTION[Server]: [epic] on_before_node_exit player=BuckarooBanzai pos=(-1092,-7,2026) node=epic:deduct_inv
2020-05-16 11:52:59: ACTION[Server]: [epic] [executor] execute_player_state(BuckarooBanzai))
2020-05-16 11:52:59: ACTION[Server]: [epic] on_before_node_enter player=BuckarooBanzai pos=(-1093,-7,2026) node=epic:message
2020-05-16 11:52:59: ACTION[Server]: [epic] on_before_node_exit player=BuckarooBanzai pos=(-1093,-7,2026) node=epic:message
2020-05-16 11:52:59: ACTION[Server]: [epic] [executor] execute_player_state(BuckarooBanzai))
2020-05-16 11:52:59: ACTION[Server]: [epic] [executor] no more instructions in this branch @ (-1094,-7,2026) node: air
2020-05-16 11:52:59: ACTION[Server]: [epic] on_epic_exit player=BuckarooBanzai state={

kill counter bug

@BuckarooBanzai I don't think the kill counter is working, for stone monsters at least

Infinite loops easy to make

If you place the blocks with the green sides facing each other you can easily enter an infinite loop accidentally, cuasing the server to crash.

With my setup I placed a start block and an unstash block next to each other, on executing the start block the game enters an infinite loop and crashes.

The mod should either

  1. disallow this kind of placement, possibly with an error message
  2. detect this kind of loop at runtime and refuse to execute it

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.