mirror of
https://github.com/IntQuant/noita_entangled_worlds.git
synced 2025-10-19 07:03:16 +00:00
sync more things
This commit is contained in:
parent
0bdb95c3ff
commit
889240bff9
7 changed files with 356 additions and 0 deletions
86
quant.ew/data/entities/animals/boss_fish/eye.lua
Normal file
86
quant.ew/data/entities/animals/boss_fish/eye.lua
Normal file
|
@ -0,0 +1,86 @@
|
|||
dofile_once("data/scripts/lib/utilities.lua")
|
||||
|
||||
local entity_id = GetUpdatedEntityID()
|
||||
local root_id = EntityGetRootEntity( entity_id )
|
||||
local x, y = EntityGetTransform( entity_id )
|
||||
|
||||
local pcomp = 0
|
||||
local scomp = 0
|
||||
local timer = 0
|
||||
|
||||
local c = EntityGetComponent( entity_id, "VariableStorageComponent" )
|
||||
if ( c ~= nil ) then
|
||||
for i,v in ipairs( c ) do
|
||||
local n = ComponentGetValue2( v, "name" )
|
||||
if ( n == "phase_timer" ) then
|
||||
timer = ComponentGetValue2( v, "value_int" )
|
||||
pcomp = v
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local hcomp = EntityGetFirstComponentIncludingDisabled( root_id, "HitboxComponent" )
|
||||
|
||||
if ( pcomp ~= 0 ) and ( hcomp ~= nil ) then
|
||||
timer = timer + 1
|
||||
|
||||
local p = EntityGetInRadiusWithTag( x, y, 160, "ew_peer" )
|
||||
local eye = EntityGetFirstComponent( entity_id, "SpriteComponent" )
|
||||
if ( eye ~= nil ) then
|
||||
local current = ComponentGetValue2( eye, "rect_animation" )
|
||||
|
||||
if ( #current == 0 ) then
|
||||
ComponentSetValue2( eye, "rect_animation", "closed" )
|
||||
EntitySetComponentIsEnabled( entity_id, hcomp, false )
|
||||
end
|
||||
|
||||
if ( #p == 0 ) then
|
||||
if ( current == "opened" ) then
|
||||
ComponentSetValue2( eye, "rect_animation", "close" )
|
||||
ComponentSetValue2( eye, "next_rect_animation", "closed" )
|
||||
timer = 0
|
||||
EntitySetComponentIsEnabled( entity_id, hcomp, false )
|
||||
elseif ( current == "close" ) and ( timer > 36 ) then
|
||||
ComponentSetValue2( eye, "rect_animation", "closed" )
|
||||
ComponentSetValue2( eye, "next_rect_animation", "closed" )
|
||||
timer = 0
|
||||
elseif ( current == "open" ) and ( timer > 36 ) then
|
||||
ComponentSetValue2( eye, "rect_animation", "opened" )
|
||||
ComponentSetValue2( eye, "next_rect_animation", "opened" )
|
||||
timer = 0
|
||||
EntitySetComponentIsEnabled( entity_id, hcomp, true )
|
||||
end
|
||||
else
|
||||
if ( current == "closed" ) then
|
||||
ComponentSetValue2( eye, "rect_animation", "open" )
|
||||
ComponentSetValue2( eye, "next_rect_animation", "opened" )
|
||||
timer = 0
|
||||
elseif ( current == "open" ) and ( timer > 36 ) then
|
||||
ComponentSetValue2( eye, "rect_animation", "opened" )
|
||||
ComponentSetValue2( eye, "next_rect_animation", "opened" )
|
||||
timer = 0
|
||||
EntitySetComponentIsEnabled( entity_id, hcomp, true )
|
||||
elseif ( current == "close" ) and ( timer > 36 ) then
|
||||
ComponentSetValue2( eye, "rect_animation", "closed" )
|
||||
ComponentSetValue2( eye, "next_rect_animation", "closed" )
|
||||
timer = 0
|
||||
end
|
||||
end
|
||||
|
||||
if ( current == "opened" ) and ( timer > 360 ) then
|
||||
timer = 0
|
||||
SetRandomSeed( x + y, GameGetFrameNum() )
|
||||
local offset = Random( 1, 100 ) * 0.01 * math.pi
|
||||
local inc = ( math.pi * 2 ) / 8
|
||||
|
||||
for a=0,7 do
|
||||
local vx = math.cos( offset + inc * a ) * 80
|
||||
local vy = 0 - math.sin( offset + inc * a ) * 80
|
||||
|
||||
shoot_projectile( root_id, "data/entities/animals/boss_fish/orb_big.xml", x, y, vx, vy )
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
ComponentSetValue2( pcomp, "value_int", timer )
|
||||
end
|
40
quant.ew/data/entities/animals/boss_spirit/create_wand.lua
Normal file
40
quant.ew/data/entities/animals/boss_spirit/create_wand.lua
Normal file
|
@ -0,0 +1,40 @@
|
|||
dofile_once("data/scripts/lib/utilities.lua")
|
||||
|
||||
local entity_id = GetUpdatedEntityID()
|
||||
local x, y = EntityGetTransform( GetUpdatedEntityID() )
|
||||
local radius = 260
|
||||
|
||||
local proj = ""
|
||||
|
||||
local s = EntityGetComponent( entity_id, "VariableStorageComponent" )
|
||||
if ( s ~= nil ) then
|
||||
for i,v in ipairs( s ) do
|
||||
local name = ComponentGetValue2( v, "name" )
|
||||
|
||||
if ( name == "type" ) then
|
||||
proj = ComponentGetValue2( v, "value_string" )
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local targets = EntityGetInRadiusWithTag( x, y, radius, "ew_peer" )
|
||||
local closest
|
||||
local v
|
||||
for _, player in ipairs(targets) do
|
||||
local px, py = EntityGetTransform(player)
|
||||
local r = px * px + py * py
|
||||
if closest == nil or r < closest then
|
||||
closest = r
|
||||
v = player
|
||||
end
|
||||
end
|
||||
|
||||
if ( string.len( proj ) > 0 ) and ( v ~= nil ) then
|
||||
local px, py = EntityGetTransform( v )
|
||||
local vel_x = math.cos( 0 - math.atan2( py - y, px - x ) ) * 2.0
|
||||
local vel_y = 0 - math.sin( 0 - math.atan2( py - y, px - x ) ) * 2.0
|
||||
|
||||
local eid = shoot_projectile_from_projectile( entity_id, proj, x, y, vel_x, vel_y )
|
||||
|
||||
EntityAddTag( eid, "boss_alchemist" )
|
||||
end
|
133
quant.ew/data/entities/animals/maggot_tiny/orb.xml
Normal file
133
quant.ew/data/entities/animals/maggot_tiny/orb.xml
Normal file
|
@ -0,0 +1,133 @@
|
|||
<Entity
|
||||
name="$projectile_default"
|
||||
tags="resist_repulsion"
|
||||
>
|
||||
|
||||
<Base file="data/entities/base_projectile.xml" >
|
||||
<VelocityComponent
|
||||
gravity_y="0"
|
||||
air_friction="0"
|
||||
mass="0.8"
|
||||
>
|
||||
</VelocityComponent>
|
||||
</Base>
|
||||
|
||||
<HomingComponent
|
||||
target_tag="mortal"
|
||||
homing_targeting_coeff="7"
|
||||
detect_distance="160"
|
||||
homing_velocity_multiplier="1.0"
|
||||
>
|
||||
</HomingComponent>
|
||||
|
||||
<ProjectileComponent
|
||||
_enabled="1"
|
||||
lob_min="0.8"
|
||||
lob_max="1.0"
|
||||
speed_min="100"
|
||||
speed_max="120"
|
||||
die_on_low_velocity="0"
|
||||
on_death_explode="1"
|
||||
on_death_gfx_leave_sprite="0"
|
||||
on_lifetime_out_explode="1"
|
||||
explosion_dont_damage_shooter="1"
|
||||
damage="2.8"
|
||||
on_collision_die="1"
|
||||
lifetime="300"
|
||||
knockback_force="1.4"
|
||||
collide_with_tag="ew_peer"
|
||||
>
|
||||
<config_explosion
|
||||
never_cache="1"
|
||||
camera_shake="4.0"
|
||||
explosion_radius="20"
|
||||
explosion_sprite="data/particles/explosion_032_slime.xml"
|
||||
explosion_sprite_lifetime="0.0"
|
||||
create_cell_probability="0"
|
||||
ray_energy="230000"
|
||||
hole_destroy_liquid="1"
|
||||
hole_enabled="1"
|
||||
damage = "1.5"
|
||||
hole_image="data/temp/explosion_hole.png"
|
||||
explosion_sprite_emissive="0"
|
||||
explosion_sprite_additive="1"
|
||||
particle_effect="0"
|
||||
damage_mortals="1"
|
||||
physics_explosion_power.min="0.4"
|
||||
physics_explosion_power.max="0.6"
|
||||
physics_throw_enabled="1"
|
||||
shake_vegetation="1"
|
||||
sparks_enabled="1"
|
||||
sparks_count_max="40"
|
||||
sparks_count_min="30"
|
||||
spark_material="spark_green"
|
||||
light_fade_time="1.2"
|
||||
light_r="35"
|
||||
light_g="240"
|
||||
light_b="140"
|
||||
stains_enabled="1"
|
||||
stains_image="data/temp/explosion_stain.png"
|
||||
audio_enabled="0" >
|
||||
</config_explosion>
|
||||
</ProjectileComponent>
|
||||
|
||||
<SpriteComponent
|
||||
_enabled="1"
|
||||
alpha="1"
|
||||
image_file="data/projectiles_gfx/orb_green_big.xml"
|
||||
next_rect_animation=""
|
||||
offset_x="8"
|
||||
offset_y="8"
|
||||
rect_animation="fireball"
|
||||
emissive="1"
|
||||
additive="1"
|
||||
update_transform_rotation="0"
|
||||
>
|
||||
</SpriteComponent>
|
||||
|
||||
<SpriteParticleEmitterComponent
|
||||
sprite_file="data/particles/orb_green_big_out.xml"
|
||||
delay="0"
|
||||
lifetime="0"
|
||||
additive="1"
|
||||
emissive="1"
|
||||
color.r="1" color.g="1" color.b="1" color.a="1"
|
||||
color_change.r="0" color_change.g="0" color_change.b="0" color_change.a="0"
|
||||
velocity.x="0" velocity.y="0"
|
||||
gravity.x="0" gravity.y="10"
|
||||
velocity_slowdown="0"
|
||||
rotation="0"
|
||||
angular_velocity="0"
|
||||
use_velocity_as_rotation="0"
|
||||
scale.x="1" scale.y="1"
|
||||
scale_velocity.x="0" scale_velocity.y="0"
|
||||
emission_interval_min_frames="1"
|
||||
emission_interval_max_frames="1"
|
||||
count_min="1" count_max="1"
|
||||
randomize_rotation.min="-0.3415"
|
||||
randomize_rotation.max="0.3415"
|
||||
randomize_angular_velocity.min="-1.3415"
|
||||
randomize_angular_velocity.max="1.3415"
|
||||
is_emitting="1"
|
||||
>
|
||||
</SpriteParticleEmitterComponent>
|
||||
|
||||
<LightComponent
|
||||
_enabled="1"
|
||||
radius="150"
|
||||
r="10"
|
||||
g="240"
|
||||
b="120">
|
||||
</LightComponent>
|
||||
|
||||
<AudioComponent
|
||||
file="data/audio/Desktop/projectiles.bank"
|
||||
event_root="projectiles/orb_b" >
|
||||
</AudioComponent>
|
||||
|
||||
<VariableStorageComponent
|
||||
name="projectile_file"
|
||||
value_string="data/entities/animals/maggot_tiny/orb.xml"
|
||||
>
|
||||
</VariableStorageComponent>
|
||||
</Entity>
|
12
quant.ew/data/scripts/animals/fungus_giga_pollen.lua
Normal file
12
quant.ew/data/scripts/animals/fungus_giga_pollen.lua
Normal file
|
@ -0,0 +1,12 @@
|
|||
dofile_once("data/scripts/lib/utilities.lua")
|
||||
|
||||
local entity_id = GetUpdatedEntityID()
|
||||
local x,y = EntityGetTransform( entity_id )
|
||||
|
||||
local targets = EntityGetInRadiusWithTag( x, y, 64, "ew_peer" )
|
||||
|
||||
if ( #targets > 0 ) then
|
||||
SetRandomSeed( x + entity_id, y + GameGetFrameNum() )
|
||||
|
||||
shoot_projectile( entity_id, "data/entities/projectiles/pollen.xml", x, y, Random( -300, 300 ), Random( -300, 10 ) )
|
||||
end
|
40
quant.ew/data/scripts/animals/necromancer_super_chase.lua
Normal file
40
quant.ew/data/scripts/animals/necromancer_super_chase.lua
Normal file
|
@ -0,0 +1,40 @@
|
|||
dofile_once("data/scripts/lib/utilities.lua")
|
||||
|
||||
local range_near = 40 -- if below, stop chase
|
||||
local range_far = 250
|
||||
local range_max = 600 -- if above, stop chase
|
||||
|
||||
local speed_near = 0.5 -- speed used at range_near
|
||||
local speed_far = 1 -- speed used at range_far
|
||||
|
||||
local entity_id = GetUpdatedEntityID()
|
||||
local pos_x, pos_y = EntityGetTransform(entity_id)
|
||||
|
||||
local function set_fly_speed(spd)
|
||||
component_write( EntityGetFirstComponent( entity_id, "CharacterPlatformingComponent" ), { fly_speed_mult = spd, fly_velocity_x = spd * 2 } )
|
||||
end
|
||||
|
||||
local target = EntityGetClosestWithTag(pos_x, pos_y, "ew_peer")
|
||||
if not target or target == 0 then
|
||||
set_fly_speed(40)
|
||||
return
|
||||
end
|
||||
|
||||
local vx, vy = EntityGetTransform(target)
|
||||
vx, vy = vec_sub(vx, vy, pos_x, pos_y)
|
||||
local dist = get_magnitude(vx, vy, pos_x, pos_y)
|
||||
|
||||
if dist < range_near or dist > range_max then
|
||||
set_fly_speed(40)
|
||||
return
|
||||
end
|
||||
|
||||
-- move directly towards player
|
||||
set_fly_speed(0)
|
||||
local speed = map(dist, range_near, range_far, speed_near, speed_far)
|
||||
speed = clamp(speed, speed_near, speed_far)
|
||||
vx, vy = vec_normalize(vx, vy)
|
||||
vx, vy = vec_mult(vx, vy, speed)
|
||||
|
||||
pos_x, pos_y = vec_add(pos_x, pos_y, vx, vy)
|
||||
EntitySetTransform(entity_id, pos_x, pos_y)
|
|
@ -0,0 +1,30 @@
|
|||
dofile_once("data/scripts/lib/utilities.lua")
|
||||
|
||||
local max_range = 150
|
||||
local min_range = 50
|
||||
|
||||
local entity_id = GetUpdatedEntityID()
|
||||
local pos_x, pos_y = EntityGetTransform(entity_id)
|
||||
|
||||
local function start_chase()
|
||||
-- enable chase & cell eater, disable this script
|
||||
print("start chase")
|
||||
EntitySetComponentsWithTagEnabled(entity_id, "enable_when_player_seen", true)
|
||||
EntityRemoveComponent(entity_id, GetUpdatedComponentID())
|
||||
end
|
||||
|
||||
local target = EntityGetClosestWithTag(pos_x, pos_y, "ew_peer")
|
||||
if not target or target == 0 then return end
|
||||
|
||||
local tx, ty = EntityGetTransform(target)
|
||||
local dist = get_distance(tx, ty, pos_x, pos_y)
|
||||
if dist > max_range then return end -- too far
|
||||
if dist < min_range then
|
||||
-- very near
|
||||
start_chase()
|
||||
return
|
||||
end
|
||||
|
||||
-- check los
|
||||
local did_hit = RaytraceSurfaces(pos_x, pos_y, tx, ty)
|
||||
if not did_hit then start_chase() end
|
15
quant.ew/data/scripts/magic/eradicate.lua
Normal file
15
quant.ew/data/scripts/magic/eradicate.lua
Normal file
|
@ -0,0 +1,15 @@
|
|||
dofile_once("data/scripts/lib/utilities.lua")
|
||||
|
||||
local entity_id = GetUpdatedEntityID()
|
||||
local x, y = EntityGetTransform( entity_id )
|
||||
|
||||
local targets = EntityGetWithTag( "mortal" )
|
||||
for i,v in ipairs( targets ) do
|
||||
if ( EntityHasTag( v, "ew_peer" ) == false ) then
|
||||
local test = EntityGetFirstComponent( v, "DamageModelComponent" )
|
||||
|
||||
if ( test ~= nil ) then
|
||||
EntityKill( v )
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Add table
Add a link
Reference in a new issue