Implement spiral movement

Also:
- Disable polymorphing, teleportation
- Decrease camera smoothing
- Disable infuence of the mouse on the camera
- Disable parallax effect
- Add some useful effects to player
- Increase player HP
This commit is contained in:
David Vogel 2019-10-18 22:35:51 +02:00
parent 5af54b9289
commit 9b52f9e410
16 changed files with 234 additions and 90 deletions

2
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,2 @@
{
}

21
LICENSE Normal file
View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2019 David Vogel
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@ -0,0 +1,5 @@
// Copyright (c) 2019 David Vogel
//
// This software is released under the MIT License.
// https://opensource.org/licenses/MIT

View File

@ -0,0 +1,7 @@
<Entity>
<InheritTransformComponent>
</InheritTransformComponent>
<GameEffectComponent >
</GameEffectComponent >
</Entity>

View File

@ -0,0 +1,7 @@
<Entity>
<InheritTransformComponent>
</InheritTransformComponent>
<GameEffectComponent >
</GameEffectComponent >
</Entity>

View File

@ -0,0 +1,7 @@
<Entity>
<InheritTransformComponent>
</InheritTransformComponent>
<GameEffectComponent >
</GameEffectComponent >
</Entity>

View File

@ -0,0 +1,7 @@
<Entity>
<InheritTransformComponent>
</InheritTransformComponent>
<GameEffectComponent >
</GameEffectComponent >
</Entity>

View File

@ -0,0 +1,7 @@
<Entity>
<InheritTransformComponent>
</InheritTransformComponent>
<GameEffectComponent >
</GameEffectComponent >
</Entity>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

View File

@ -1,17 +0,0 @@
table.insert( actions,
{
id = "SEA_OF_SWAMP",
name = "Sea of swamp",
description = "How useful",
sprite = "mods/example/files/actions/sea_swamp.png",
type = ACTION_TYPE_MATERIAL,
spawn_level = "0,4,5,6", -- BERSERK_FIELD
spawn_probability = "1,1,1,1", -- BERSERK_FIELD
price = 350,
mana = 140,
max_uses = 3,
action = function()
add_projectile("mods/example/files/actions/sea_swamp.xml")
c.fire_rate_wait = c.fire_rate_wait + 15
end,
} )

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

View File

@ -1,56 +0,0 @@
<Entity name="$projectile_default">
<MaterialSeaSpawnerComponent
size.x="300"
size.y="256"
offset.x="0"
offset.y="158"
speed="10"
noise_threshold="0.0"
material="water_swamp" >
</MaterialSeaSpawnerComponent>
<LifetimeComponent
lifetime="300">
</LifetimeComponent>
<ParticleEmitterComponent
emitted_material_name="water_swamp"
gravity.y="0.0"
lifetime_min="6"
lifetime_max="8"
count_min="8"
count_max="8"
render_on_grid="1"
fade_based_on_lifetime="1"
area_circle_radius.min="0"
area_circle_radius.max="0"
cosmetic_force_create="0"
airflow_force="0.51"
airflow_time="1.01"
airflow_scale="0.05"
x_pos_offset_min="0"
x_pos_offset_max="0"
y_pos_offset_min="0"
y_pos_offset_max="0"
emission_interval_min_frames="1"
emission_interval_max_frames="1"
emit_cosmetic_particles="1"
image_animation_file="data/particles/image_emitters/sea_oil.png"
image_animation_speed="5"
image_animation_loop="0"
is_emitting="1" >
</ParticleEmitterComponent>
<MusicEnergyAffectorComponent
energy_target="1">
</MusicEnergyAffectorComponent>
<AudioComponent
file="data/audio/Desktop/projectiles.snd"
event_root="player_projectiles/sea_of_oil"
set_latest_event_position="1" >
</AudioComponent>
</Entity>

157
files/capture.lua Normal file
View File

@ -0,0 +1,157 @@
-- Copyright (c) 2019 David Vogel
--
-- This software is released under the MIT License.
-- https://opensource.org/licenses/MIT
dofile("data/scripts/lib/coroutines.lua")
--dofile("data/scripts/lib/utilities.lua")
dofile("data/scripts/perks/perk_list.lua")
local CAPTURE_GRID_SIZE = 64 -- in ingame pixels
local CAPTURE_DELAY = 30 -- in frames
local CAPTURE_FORCE_HP = 40 -- * 25HP
local function getPlayer()
local players = EntityGetWithTag("player_unit")
if players == nil or #players < 1 then
return nil
end
return players[1]
end
local function getPlayerPos()
return EntityGetTransform(getPlayer())
end
local function teleportPlayer(x, y)
EntitySetTransform(getPlayer(), x, y)
end
local function setPlayerHP(hp)
local damagemodels = EntityGetComponent(getPlayer(), "DamageModelComponent")
if damagemodels ~= nil then
for i, damagemodel in ipairs(damagemodels) do
ComponentSetValue(damagemodel, "max_hp", hp)
ComponentSetValue(damagemodel, "hp", hp)
end
end
end
local function addEffectToEntity(entity, gameEffect)
local gameEffectComp = GetGameEffectLoadTo(entity, gameEffect, true)
if gameEffectComp ~= nil then
ComponentSetValue(gameEffectComp, "frames", "-1")
end
end
local function addPerkToPlayer(perkID)
local playerEntity = getPlayer()
local x, y = getPlayerPos()
local perkData = get_perk_with_id(perk_list, perkID)
-- Add effect
addEffectToEntity(playerEntity, perkData.game_effect)
-- Add ui icon etc
local perkIcon = EntityCreateNew("")
EntityAddComponent(
perkIcon,
"UIIconComponent",
{
name = perkData.ui_name,
description = perkData.ui_description,
icon_sprite_file = perkData.ui_icon
}
)
EntityAddChild(playerEntity, perkIcon)
--local effect = EntityLoad("data/entities/misc/effect_protection_all.xml", x, y)
--EntityAddChild(playerEntity, effect)
end
local function preparePlayer()
local playerEntity = getPlayer()
addEffectToEntity(playerEntity, "PROTECTION_ALL")
addPerkToPlayer("BREATH_UNDERWATER")
addPerkToPlayer("INVISIBILITY")
addPerkToPlayer("REMOVE_FOG_OF_WAR")
addPerkToPlayer("REPELLING_CAPE")
addPerkToPlayer("WORM_DETRACTOR")
setPlayerHP(CAPTURE_FORCE_HP)
end
local function resetPlayer()
setPlayerHP(CAPTURE_FORCE_HP)
end
local function doCapture()
local ox, oy = getPlayerPos()
local x, y = ox, oy
preparePlayer()
-- Coroutine to force player to x, y coordinate
async_loop(
function()
teleportPlayer(x, y)
resetPlayer()
wait(0)
end
)
-- Coroutine to calculate next coordinate, and trigger screenshots
local i = 1
async_loop(
function()
-- +x
for i = 1, i, 1 do
x, y = x + CAPTURE_GRID_SIZE, y
wait(CAPTURE_DELAY)
end
-- +y
for i = 1, i, 1 do
x, y = x, y + CAPTURE_GRID_SIZE
wait(CAPTURE_DELAY)
end
i = i + 1
-- -x
for i = 1, i, 1 do
x, y = x - CAPTURE_GRID_SIZE, y
wait(CAPTURE_DELAY)
end
-- -y
for i = 1, i, 1 do
x, y = x, y - CAPTURE_GRID_SIZE
wait(CAPTURE_DELAY)
end
i = i + 1
end
)
end
-- #### UI ####
local gui = GuiCreate()
async_loop(
function()
if gui ~= nil then
GuiStartFrame(gui)
GuiLayoutBeginVertical(gui, 50, 20)
if GuiButton(gui, 0, 0, "Start capturing map", 1) then
doCapture()
GuiDestroy(gui)
gui = nil
end
GuiTextCentered(gui, 0, 0, "Don't do anything while the capturing process is running!")
GuiTextCentered(gui, 0, 0, "Use ESC and close the game to stop the process.")
GuiLayoutEnd(gui)
end
wait(0)
end
)

View File

@ -1,5 +1,7 @@
<MagicNumbers
VIRTUAL_RESOLUTION_X="427"
VIRTUAL_RESOLUTION_Y="242"
> <!-- some magic number defaults could be overridden here -->
<MagicNumbers VIRTUAL_RESOLUTION_X="427"
VIRTUAL_RESOLUTION_Y="242"
CAMERA_NO_MOVE_BUFFER_NEAR_VIEWPORT_EDGE="0.0"
CAMERA_MOUSE_INTERPOLATION_SPEED="0.0"
CAMERA_POSITION_INTERPOLATION_SPEED="50.0"
DRAW_PARALLAX_BACKGROUND="0">
</MagicNumbers>

View File

@ -1,21 +1,18 @@
function OnModPreInit()
print("Mod - OnModPreInit()") -- first this is called for all mods
-- print("Mod - OnModPreInit()") -- first this is called for all mods
end
function OnModInit()
print("Mod - OnModInit()") -- after that this is called for all mods
-- print("Mod - OnModInit()") -- after that this is called for all mods
end
function OnModPostInit()
print("Mod - OnModPostInit()") -- then this is called for all mods
-- print("Mod - OnModPostInit()") -- then this is called for all mods
end
function OnPlayerSpawned( player_entity ) -- this
GamePrint( "Mods says: Player entity id: " .. tostring(player_entity) )
function OnPlayerSpawned(player_entity)
end
-- this code runs when all mods' filesystems are registered
ModLuaFileAppend( "data/scripts/gun/gun_actions.lua", "mods/example/files/actions.lua" ) -- basically dofile("mods/example/files/actions.lua") will appear at the end of gun_actions.lua
ModMagicNumbersFileAdd( "mods/example/files/magic_numbers.xml" ) -- will override some magic numbers using the specified file
print("Example mod init done")
ModLuaFileAppend("data/scripts/director_init.lua", "mods/capture-all/files/capture.lua")
ModMagicNumbersFileAdd("mods/capture-all/files/magic_numbers.xml") -- override some game constants

View File

@ -1,5 +1,3 @@
<Mod
name="Example mod"
description="This is an example mod for Noita.\nHave fun modding!"
>
<Mod name="Capture All"
description="This mod screen-captures a large part of the map, and stores the screenshot in image tiles.">
</Mod>