Vastly improve the boat with sound, texture, model

The boat has been revised with all-new textures, new exhaust, a better
model with few/no shading errors, animated door and sounds. The model
format had to be changed to b3d as obj does not support animation.
This commit is contained in:
Montandalar 2020-09-21 00:10:34 +10:00
parent 3d70dc0d68
commit 59fb544b00
18 changed files with 119 additions and 2145 deletions

125
init.lua
View File

@ -148,16 +148,46 @@ if minetest.get_modpath("advtrains_interlocking") ~= nil then
dofile(minetest.get_modpath("linetrack") .. "/interlocking.lua") dofile(minetest.get_modpath("linetrack") .. "/interlocking.lua")
end end
local exhaust_particle_spawner_base = {
amount = 10,
time = 0,
minpos = {x=-1, y=2.8, z=-3.4},
maxpos = {x=-1, y=2.8, z=-3.4},
minvel = {x=-0.2, y=1.8, z=-0.2},
maxvel = {x=0.2, y=2, z=0.2},
minacc = {x=0, y=-0.1, z=0},
maxacc = {x=0, y=-0.3, z=0},
minexptime = 1,
maxexptime = 3,
minsize = 1,
maxsize = 4,
collisiondetection = true,
vertical = false,
texture = "smoke_puff.png",
}
advtrains.register_wagon("boat", { advtrains.register_wagon("boat", {
mesh="linetrack_boat.obj", mesh="linetrack_boat.b3d",
textures = {"linetrack_boat.png"}, textures = {
"doors_door_steel.png",--y
"linetrack_steel_tile_dark.png", --y(exhaust)
"default_coal_block.png",
"linetrack_steel_tile_light.png",--y
"linetrack_steel_tile_dark.png",
"linetrack_steel_tile_blue.png",--y
"linetrack_diamond_plate_steel_blue.png",--y
"linetrack_steel_tile_dark.png",--y(hull)
"default_wood.png", --y
"linetrack_lifering.png", --y
"linetrack_boat_windows.png",
},
drives_on={waterline=true}, drives_on={waterline=true},
max_speed=10, max_speed=10,
seats = { seats = {
{ {
name="Driver stand", name="Driver stand",
attach_offset={x=0, y=2, z=12}, attach_offset={x=6, y=2, z=10},
view_offset={x=0, y=0, z=0}, view_offset={x=6, y=0, z=8},
group="dstand", group="dstand",
}, },
{ {
@ -234,6 +264,18 @@ advtrains.register_wagon("boat", {
require_doors_open=true, require_doors_open=true,
}, },
}, },
doors={
open={
[-1]={frames={x=0, y=1}, time=1},
[1]={frames={x=0, y=1}, time=1},
sound = "doors_steel_door_open",
},
close={
[-1]={frames={x=2, y=3}, time=1},
[1]={frames={x=2, y=3}, time=1},
sound = "doors_steel_door_close",
}
},
assign_to_seat_group = {"pass", "dstand"}, assign_to_seat_group = {"pass", "dstand"},
door_entry={-1, 1}, door_entry={-1, 1},
visual_size = {x=1, y=1}, visual_size = {x=1, y=1},
@ -242,8 +284,79 @@ advtrains.register_wagon("boat", {
is_locomotive=true, is_locomotive=true,
wagon_width=5, wagon_width=5,
drops={"default:steelblock 4"}, drops={"default:steelblock 4"},
horn_sound = "advtrains_subway_horn", horn_sound = "linetrack_boat_horn",
glow = -1, --supposed to disable effect of light to texture color, so that the entity always appears as full-bright custom_on_destroy = function(self)
if (self.sound_loop_handle) then
minetest.sound_stop(self.sound_loop_handle) --don't loop forever D:
end
return true
end,
custom_on_velocity_change = function(self, velocity, old_velocity, dtime)
if not velocity or not old_velocity then return end
if old_velocity == 0 and velocity > 0 then
self.particlespawners = {
minetest.add_particlespawner(advtrains.merge_tables(exhaust_particle_spawner_base,
{minpos = {x=1, y=2.8, z=-3.4}, maxpos = {x=1, y=2.9, z=-3.4}, attached = self.object})),
minetest.add_particlespawner(advtrains.merge_tables(exhaust_particle_spawner_base,
{minpos = {x=-1, y=2.8, z=-3.4}, minpos = {x=-1, y=2.8, z=-3.4}, attached = self.object})),
}
minetest.sound_play("linetrack_boat_start", {object = self.object})
return
end
if velocity == 0 then
if self.sound_loop_handle then
minetest.sound_stop(self.sound_loop_handle)
self.sound_loop_handle = nil
end
if self.particlespawners then
for k,v in pairs(self.particlespawners) do
minetest.delete_particlespawner(v)
end
end
if old_velocity > 0 then
minetest.sound_play("linetrack_boat_stop", {object = self.object})
end
return
end
if self.rev_tmr then
delta = minetest.get_us_time()- self.rev_start
if delta >= self.rev_tmr then
self.rev_tmr = nil
if self.rev_high then
self.sound_loop_handle = minetest.sound_play({name="linetrack_boat_idle_high", gain=0.3}, {object = self.object, loop=true})
else
self.sound_loop_handle = minetest.sound_play({name="linetrack_boat_idle_low", gain=0.3}, {object = self.object, loop=true})
end
end
elseif velocity > 0 then
if self.sound_loop_handle == nil then
if velocity > 5 then
self.sound_loop_handle = minetest.sound_play({name="linetrack_boat_idle_high", gain=0.3}, {object = self.object, loop=true})
else
self.sound_loop_handle = minetest.sound_play({name="linetrack_boat_idle_low", gain=0.3}, {object = self.object, loop=true})
end
return
end
if velocity ~= old_velocity then
if old_velocity < 5 and velocity > 5 then
minetest.sound_stop(self.sound_loop_handle)
self.sound_loop_handle = nil
minetest.sound_play({name="linetrack_boat_revup", gain=0.3}, {object = self.object})
self.rev_start = minetest.get_us_time()
self.rev_tmr = 2813000
self.rev_high = true
elseif old_velocity > 5 and velocity < 5 then
minetest.sound_stop(self.sound_loop_handle)
self.sound_loop_handle = nil
minetest.sound_play({name="linetrack_boat_revdown", gain=0.3}, {object = self.object})
self.rev_start = minetest.get_us_time()
self.rev_tmr = 373000
self.rev_high = false
end
end
end
end,
}, "Boat", "linetrack_boat_inv.png") }, "Boat", "linetrack_boat_inv.png")
minetest.register_node("linetrack:invisible_platform", { minetest.register_node("linetrack:invisible_platform", {

BIN
models/linetrack_boat.b3d Normal file

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 203 B

After

Width:  |  Height:  |  Size: 219 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 680 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 722 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 198 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 540 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 460 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 701 B