forked from VoxeLibre/VoxeLibre
Compare commits
2 Commits
Author | SHA1 | Date |
---|---|---|
epCode | eb39dcf605 | |
epCode | 70b6636568 |
|
@ -64,12 +64,9 @@ Use the `/giveme` chat command to obtain them. See the in-game help for
|
|||
an explanation.
|
||||
|
||||
## Installation
|
||||
To run the game with the best performance and support, we recommend the latest
|
||||
stable version of [Minetest](http://minetest.net), be we always make an effort
|
||||
to support one version behind the latest stable version. In some cases, older
|
||||
versions might still be good enough but you would be missing out on important
|
||||
Minetest features that enable important features for our game.
|
||||
|
||||
This game requires [Minetest](http://minetest.net) to run (version 5.4.1 or
|
||||
later). So you need to install Minetest first. Only stable versions of Minetest
|
||||
are officially supported.
|
||||
There is no support for running VoxeLibre in development versions of Minetest.
|
||||
|
||||
To install VoxeLibre (if you haven't already), move this directory into the
|
||||
|
|
114
RELEASE.md
114
RELEASE.md
|
@ -28,16 +28,16 @@ git commit -m "Updated release credits and set version for v0.87"
|
|||
git add releasenotes/0_87-the_prismatic_release.md
|
||||
git commit -m "Add release notes for v0.87"
|
||||
```
|
||||
7. **Tag and push to the tag:**
|
||||
5. **Tag and push to the tag:**
|
||||
```
|
||||
git tag 0.87.0
|
||||
git push origin 0.87.0
|
||||
```
|
||||
8. Update version in game.conf to the next version with -SNAPSHOT suffix:
|
||||
6. Update version in game.conf to the next version with -SNAPSHOT suffix:
|
||||
```
|
||||
git commit -m "Post-release set version 0.88.0-SNAPSHOT"
|
||||
git commit -m "Post-release set version 0.87.0-SNAPSHOT"
|
||||
```
|
||||
9. Push the above to a new branch, and make the release PR. Merge to finalize release process.
|
||||
7. Push the above to a new branch, and make the release PR. Merge to finalize release process.
|
||||
|
||||
### Release via ContentDB
|
||||
|
||||
|
@ -68,100 +68,46 @@ git commit -m "Post-release set version 0.88.0-SNAPSHOT"
|
|||
|
||||
## Hotfix Release
|
||||
|
||||
### Before releasing
|
||||
|
||||
First, determine if the current state of the master branch is fine for the Hotfix.
|
||||
In general, Hotfixes shouldn't contain new features to minimize the risk of regressions.
|
||||
|
||||
* If it hasn't been long since the release, and the only PRs merged so far are bugfixes and/or documentation changes,
|
||||
it is certainly fine to use it as a base for the release.
|
||||
* If there are some features merged, but they are aimed at fixing/alleviating important issues with the last released version, it may still be fine.
|
||||
* If there are some simple QoL features merged that are irrelevant to the last release, it may still be fine to use it as a base for the Hotfix.
|
||||
* If there are major features or large overhauls merged, it *most probably* is **not** fine to use as a base for the Hotfix.
|
||||
|
||||
If you decided that the current state of the master branch can be used as the Hotfix version, make sure that all the PRs merged since the last release
|
||||
are in the Hotfix milestone and you are working on a clean branch based on the master branch, up-to-date with the one on the repo.
|
||||
In this case, **skip** the following section.
|
||||
The below is not up-to-date. At the next hotfix the process should be finalized and updated.
|
||||
|
||||
### Prepare release branch
|
||||
|
||||
If you decided that the current state of the master branch shouldn't be used as the Hotfix version, you must prepare a release branch.
|
||||
When hotfixing, you should never release new features. Any new code increases risk of new bugs which has additional testing/release concerns.
|
||||
To mitigate this, you just release the last release, and the relevant bug fix. For this, we do the following:
|
||||
|
||||
* Create release branch from the last release tag, push it:
|
||||
|
||||
1. Create release branch from the last release tag, push it:
|
||||
```
|
||||
git checkout -b release/0.82.1 0.82.0
|
||||
|
||||
git push origin release/0.82.1
|
||||
```
|
||||
2. Cherry-pick the relevant commits from the master branch, or merge them from other (PR) branches.
|
||||
3. Make sure your local copy of the branch contains all the relevant changes, **do not rebase**.
|
||||
|
||||
### Release process
|
||||
#### Prepare feature branch and fix
|
||||
|
||||
1. Update CREDITS.md if it is needed
|
||||
2. Update version in game.conf
|
||||
3. If you've changed CREDITS.md, run the script:
|
||||
```
|
||||
lua tools/generate_ingame_credits.lua
|
||||
```
|
||||
4. Make a commit for the above:
|
||||
```
|
||||
git add game.conf
|
||||
git commit -m "Set version for hotfix v0.87.1"
|
||||
```
|
||||
or, if credits got updated:
|
||||
```
|
||||
git add CREDITS.md
|
||||
git add mods/HUD/mcl_credits/people.lua
|
||||
git add game.conf
|
||||
git commit -m "Updated release credits and set version for hotfix v0.87.1"
|
||||
```
|
||||
5. Add a section in the last releasnotes, like this:
|
||||
```
|
||||
## 0.87.1 hotfix
|
||||
```
|
||||
and describe the changes there
|
||||
* Create feature branch from that release branch (can review it to check only fix is there, nothing else, and use to also merge into master separately)
|
||||
|
||||
`git checkout -b hotfix_bug_1_branch`
|
||||
|
||||
* Fix crash/serious bug and commit
|
||||
* Push branch and create pr to the release and also the master branch (Do not rebase, to reduce merge conflict risk. Do not delete after first merge or it needs to be repushed)
|
||||
|
||||
#### Update version and tag the release
|
||||
|
||||
* After all fixes are in release branch, pull it locally (best to avoid a merge conflict as feature branch will need to be merged into master also, which already changed version):
|
||||
|
||||
* Update version in game.conf to hotfix version and commit it. Example: version=0.82.1
|
||||
|
||||
* Tag it, push tag and branch:
|
||||
|
||||
6. Make a commit for the releasenotes changes:
|
||||
```
|
||||
git add releasenotes/0_87-the_prismatic_release.md
|
||||
git commit -m "Update release notes for hotfix v0.87.1"
|
||||
```
|
||||
7. **Tag and push to the tag:**
|
||||
```
|
||||
git tag 0.87.1
|
||||
git push origin 0.87.1
|
||||
```
|
||||
8. If you are skipping some changes from the master branch (and thus are using a prepared master branch from the previous section),
|
||||
push to the remote and skip the next two steps:
|
||||
```
|
||||
git tag 0.82.1
|
||||
|
||||
git push origin 0.82.1
|
||||
|
||||
git push origin release/0.82.1
|
||||
```
|
||||
9. If you're releasing master branch, update version in game.conf to the next version with -SNAPSHOT suffix:
|
||||
```
|
||||
git commit -m "Post-hotfix reset version 0.88.0-SNAPSHOT"
|
||||
```
|
||||
10. If you're releasing master branch, push the above to a new branch, and make the release PR. Merge to finalize release process.
|
||||
|
||||
### Release via ContentDB
|
||||
Note: If you have to do more than 1 hotfix release, can do it on the same release branch.
|
||||
|
||||
1. Go to VoxeLibre page (https://content.minetest.net/packages/Wuzzy/mineclone2/)
|
||||
2. Click [+Release] button
|
||||
3. Enter the release tag number in the title and Git reference box. For example (without quotes): "0.87.1"
|
||||
4. In the minimum minetest version, put the oldest supported version (as of 19/05/2024 it is 5.6), leave the Maximum minetest version blank
|
||||
5. Click save. Hotfix is now live.
|
||||
|
||||
### After releasing
|
||||
|
||||
...inform people.
|
||||
|
||||
* Add a comment to the forum post with the release number and change log. Maintainer will update the main post with code link.
|
||||
* Add a Discord announcement post and @everyone with link to the release issue and release notes, and describe briefly what the hotfix does.
|
||||
* Add a Matrix announcement post and @room with content like above.
|
||||
* Share the news on reddit + Lemmy. Good subs to share with:
|
||||
* r/linux_gaming
|
||||
* r/opensourcegames
|
||||
* r/opensource
|
||||
* r/freesoftware
|
||||
* r/linuxmasterrace
|
||||
* r/VoxeLibre
|
||||
* r/MineClone2 (*for now*)
|
||||
|
|
|
@ -671,13 +671,6 @@ mob will spawn e.g.
|
|||
mobs_animal:sheep_chance 11000
|
||||
mobs_monster:sand_monster_chance 100
|
||||
|
||||
Registering Mob Conversion
|
||||
----------------
|
||||
|
||||
Sometimes you need to completely replace one mob with a different version. To do this, use:
|
||||
|
||||
mcl_mobs.register_conversion(old_name, new_name)
|
||||
|
||||
|
||||
Rideable Horse Example Mob
|
||||
--------------------------
|
||||
|
|
|
@ -149,6 +149,16 @@ function mcl_mobs.register_mob(name, def)
|
|||
head_yaw = def.head_yaw or "y", -- axis to rotate head on
|
||||
horizontal_head_height = def.horizontal_head_height or 0,
|
||||
wears_armor = def.wears_armor, -- a number value used to index texture slot for armor
|
||||
-- use: armor_transforms = {arm_right = {"arm_right_bone_name", pos}}
|
||||
-- or if you need rotation as well: armor_transforms = {arm_right = {"arm_right_bone_name", pos, rot}}
|
||||
armor_transforms = def.armor_transforms or {
|
||||
head = {"Head", vector.zero()},
|
||||
chest = {"Body", vector.zero()},
|
||||
arm_right = {"Arm_Right", vector.zero()},
|
||||
arm_left = {"Arm_Left", vector.zero()},
|
||||
leg_right = {"Leg_Left", vector.zero()},
|
||||
leg_left = {"Leg_right", vector.zero()}
|
||||
},
|
||||
stepheight = def.stepheight or 0.6,
|
||||
name = name,
|
||||
description = def.description,
|
||||
|
@ -342,17 +352,6 @@ function mcl_mobs.register_mob(name, def)
|
|||
minetest.register_entity(name, setmetatable(final_def,mcl_mobs.mob_class_meta))
|
||||
end -- END mcl_mobs.register_mob function
|
||||
|
||||
function mcl_mobs.register_conversion(old_name, new_name)
|
||||
minetest.register_entity(old_name, {
|
||||
on_activate = function(self, staticdata, dtime)
|
||||
local obj = minetest.add_entity(self.object:get_pos(), new_name, staticdata)
|
||||
local hook = (obj:get_luaentity() or {})._on_after_convert
|
||||
if hook then hook(obj) end
|
||||
self.object:remove()
|
||||
end,
|
||||
_convert_to = new_name,
|
||||
})
|
||||
end
|
||||
|
||||
function mcl_mobs.get_arrow_damage_func(damage, typ)
|
||||
local typ = mcl_damage.types[typ] and typ or "arrow"
|
||||
|
|
|
@ -16,9 +16,11 @@ local function get_armor_texture(armor_name)
|
|||
return "blank.png"
|
||||
end
|
||||
local seperator = string.find(armor_name, ":")
|
||||
return "mcl_armor_"..string.sub(armor_name, seperator+1, -1)..".png^"
|
||||
return "mcl_armor_"..string.sub(armor_name, seperator+1, -1)..".png"
|
||||
end
|
||||
|
||||
--[[
|
||||
-- Old texture function
|
||||
function mob_class:set_armor_texture()
|
||||
if self.armor_list then
|
||||
local chestplate=minetest.registered_items[self.armor_list.chestplate] or {name=""}
|
||||
|
@ -55,6 +57,152 @@ function mob_class:set_armor_texture()
|
|||
self.object:set_armor_groups(armor_)
|
||||
end
|
||||
end
|
||||
]]
|
||||
|
||||
minetest.register_entity("mcl_mobs:armor_piece", {
|
||||
visual = "mesh",
|
||||
mesh = "mcl_mobs_armor_head.obj",
|
||||
textures = {get_armor_texture("mcl_armor:helmet_diamond")},
|
||||
_kill_on_detach = true,
|
||||
_armor = true,
|
||||
pointable = false,
|
||||
physical = false,
|
||||
collide_with_objects = false,
|
||||
collisionbox = {0,0,0,0,0,0},
|
||||
on_detach = function(self)
|
||||
if self.object:get_pos() and not self.object:get_attach() and self._kill_on_detach then self.object:remove() return end
|
||||
end,
|
||||
on_activate = function(self)
|
||||
minetest.after(0.2, function() -- if we are disconnected from anything unless made to, self destruct
|
||||
if self and self.object and self.object:get_pos() then
|
||||
if self.object:get_pos() and not self.object:get_attach() and self._kill_on_detach then self.object:remove() return end
|
||||
end
|
||||
end)
|
||||
end,
|
||||
}) -- specific piece selected at spawn
|
||||
|
||||
-- Adds a piece of armor (entity) into the worl based on it's name
|
||||
function mcl_mobs.add_armor_piece(itemname, r_l, pos)
|
||||
local obj = minetest.add_entity(pos or vector.zero(), "mcl_mobs:armor_piece") -- armor piece
|
||||
tex = get_armor_texture(itemname) -- texture
|
||||
local mesh = ""
|
||||
|
||||
-- choose correct model based on name
|
||||
if string.find(itemname, "chestplate") then
|
||||
if r_l then
|
||||
if r_l == "r" then
|
||||
mesh = "mcl_mobs_armor_arm_right.obj"
|
||||
else
|
||||
mesh = "mcl_mobs_armor_arm_left.obj"
|
||||
end
|
||||
else
|
||||
mesh = "mcl_mobs_armor_chest.obj"
|
||||
end
|
||||
elseif string.find(itemname, "boots") or string.find(itemname, "leggings") then
|
||||
if r_l then
|
||||
if r_l == "r" then
|
||||
mesh = "mcl_mobs_armor_leg_right.obj"
|
||||
else
|
||||
mesh = "mcl_mobs_armor_leg_left.obj"
|
||||
end
|
||||
end
|
||||
elseif string.find(itemname, "helmet") then
|
||||
mesh = "mcl_mobs_armor_head.obj"
|
||||
end
|
||||
|
||||
|
||||
obj:set_properties({textures = {tex}, mesh = mesh, visual_size = size or vector.new(1,1,1)})
|
||||
|
||||
return obj
|
||||
end
|
||||
|
||||
--[[
|
||||
minetest.register_globalstep(function(dtime)
|
||||
for _,player in ipairs(minetest.get_connected_players()) do
|
||||
mcl_mobs.add_armor_piece("mcl_armor:helmet_diamond", nil, player:get_pos())
|
||||
end
|
||||
end)]]
|
||||
|
||||
--new armor texture function
|
||||
function mob_class:set_armor_texture()
|
||||
if self.armor_list then
|
||||
local chestplate=minetest.registered_items[self.armor_list.chestplate] or {name=""}
|
||||
local boots=minetest.registered_items[self.armor_list.boots] or {name=""}
|
||||
local leggings=minetest.registered_items[self.armor_list.leggings] or {name=""}
|
||||
local helmet=minetest.registered_items[self.armor_list.helmet] or {name=""}
|
||||
|
||||
local no_armor
|
||||
|
||||
if helmet.name=="" and chestplate.name=="" and leggings.name=="" and boots.name=="" then
|
||||
no_armor = true
|
||||
end
|
||||
|
||||
for _,obj in ipairs(self.object:get_children()) do --destroy old armor entities
|
||||
if not obj:is_player() and obj:get_luaentity()._armor then
|
||||
obj:set_detach()
|
||||
end
|
||||
end
|
||||
|
||||
local tforms = self.armor_transforms
|
||||
|
||||
if chestplate.name ~= "" then
|
||||
local armor_chest = mcl_mobs.add_armor_piece(chestplate.name, false)
|
||||
local armor_right = mcl_mobs.add_armor_piece(chestplate.name, "r")
|
||||
local armor_left = mcl_mobs.add_armor_piece(chestplate.name, "l")
|
||||
|
||||
armor_chest:set_properties({visual_size = self.armor_transforms.chest[4] or vector.new(1,1,1)})
|
||||
armor_right:set_properties({visual_size = self.armor_transforms.arm_right[4] or vector.new(1,1,1)})
|
||||
armor_left:set_properties({visual_size = self.armor_transforms.arm_left[4] or vector.new(1,1,1)})
|
||||
|
||||
armor_chest:set_attach(self.object, self.armor_transforms.chest[1], self.armor_transforms.chest[2], self.armor_transforms.chest[3] or vector.zero())
|
||||
armor_right:set_attach(self.object, self.armor_transforms.arm_right[1], self.armor_transforms.arm_right[2], self.armor_transforms.arm_right[3] or vector.zero())
|
||||
armor_left:set_attach(self.object, self.armor_transforms.arm_left[1], self.armor_transforms.arm_left[2], self.armor_transforms.arm_left[3] or vector.zero())
|
||||
end
|
||||
if leggings.name ~= "" then
|
||||
local armor_right = mcl_mobs.add_armor_piece(leggings.name, "r")
|
||||
local armor_left = mcl_mobs.add_armor_piece(leggings.name, "l")
|
||||
|
||||
armor_right:set_properties({visual_size = self.armor_transforms.leg_right[4] or vector.new(1,1,1)})
|
||||
armor_left:set_properties({visual_size = self.armor_transforms.leg_left[4] or vector.new(1,1,1)})
|
||||
|
||||
armor_right:set_attach(self.object, self.armor_transforms.leg_right[1], self.armor_transforms.leg_right[2], self.armor_transforms.leg_right[3] or vector.zero())
|
||||
armor_left:set_attach(self.object, self.armor_transforms.leg_left[1], self.armor_transforms.leg_left[2], self.armor_transforms.leg_left[3] or vector.zero())
|
||||
end
|
||||
if boots.name ~= "" then
|
||||
local armor_right = mcl_mobs.add_armor_piece(boots.name, "r")
|
||||
local armor_left = mcl_mobs.add_armor_piece(boots.name, "l")
|
||||
|
||||
armor_right:set_properties({visual_size = self.armor_transforms.leg_right[4] or vector.new(1,1,1)})
|
||||
armor_left:set_properties({visual_size = self.armor_transforms.leg_left[4] or vector.new(1,1,1)})
|
||||
|
||||
armor_right:set_attach(self.object, self.armor_transforms.leg_right[1], self.armor_transforms.leg_right[2], self.armor_transforms.leg_right[3] or vector.zero())
|
||||
armor_left:set_attach(self.object, self.armor_transforms.leg_left[1], self.armor_transforms.leg_left[2], self.armor_transforms.leg_left[3] or vector.zero())
|
||||
end
|
||||
if helmet.name ~= "" then
|
||||
local armor_right = mcl_mobs.add_armor_piece(helmet.name, "r")
|
||||
|
||||
armor_right:set_properties({visual_size = self.armor_transforms.head[4] or vector.new(1,1,1)})
|
||||
|
||||
armor_right:set_attach(self.object, self.armor_transforms.head[1], self.armor_transforms.head[2], self.armor_transforms.head[3] or vector.zero())
|
||||
end
|
||||
|
||||
local armor_
|
||||
if type(self.armor) == "table" then
|
||||
armor_ = table.copy(self.armor)
|
||||
armor_.immortal = 1
|
||||
else
|
||||
armor_ = {immortal=1, fleshy = self.armor}
|
||||
end
|
||||
|
||||
for _,item in pairs(self.armor_list) do
|
||||
if not item then return end
|
||||
if type(minetest.get_item_group(item, "mcl_armor_points")) == "number" then
|
||||
armor_.fleshy=armor_.fleshy-(minetest.get_item_group(item, "mcl_armor_points")*3.5)
|
||||
end
|
||||
end
|
||||
self.object:set_armor_groups(armor_)
|
||||
end
|
||||
end
|
||||
|
||||
function mob_class:check_item_pickup()
|
||||
if self.pick_up and #self.pick_up > 0 or self.wears_armor then
|
||||
|
|
|
@ -0,0 +1,37 @@
|
|||
# Blender 4.0.2
|
||||
# www.blender.org
|
||||
o arm_left
|
||||
v 1.248355 7.302495 1.300000
|
||||
v -1.251645 0.002496 1.300000
|
||||
v -1.251645 7.302495 -1.300000
|
||||
v -1.251645 0.002496 -1.300000
|
||||
v 1.248355 0.002496 -1.300000
|
||||
v 1.248355 7.302495 -1.300000
|
||||
v 1.248355 0.002496 1.300000
|
||||
v -1.251645 7.302495 1.300000
|
||||
vn -0.0000 1.0000 -0.0000
|
||||
vn -0.0000 -1.0000 -0.0000
|
||||
vn -1.0000 -0.0000 -0.0000
|
||||
vn -0.0000 -0.0000 -1.0000
|
||||
vn 1.0000 -0.0000 -0.0000
|
||||
vn -0.0000 -0.0000 1.0000
|
||||
vt 0.750000 0.375000
|
||||
vt 0.812500 0.375000
|
||||
vt 0.812500 0.500000
|
||||
vt 0.750000 0.500000
|
||||
vt 0.687500 0.375000
|
||||
vt 0.687500 0.500000
|
||||
vt 0.687500 0.000000
|
||||
vt 0.625000 0.000000
|
||||
vt 0.625000 0.375000
|
||||
vt 0.750000 0.000000
|
||||
vt 0.812500 0.000000
|
||||
vt 0.875000 0.000000
|
||||
vt 0.875000 0.375000
|
||||
s 0
|
||||
f 6/1/1 3/2/1 8/3/1 1/4/1
|
||||
f 4/5/2 5/1/2 7/4/2 2/6/2
|
||||
f 2/5/3 8/7/3 3/8/3 4/9/3
|
||||
f 4/5/4 3/7/4 6/10/4 5/1/4
|
||||
f 5/1/5 6/10/5 1/11/5 7/2/5
|
||||
f 7/2/6 1/11/6 8/12/6 2/13/6
|
|
@ -0,0 +1,37 @@
|
|||
# Blender 4.0.2
|
||||
# www.blender.org
|
||||
o arm_right
|
||||
v 1.249876 0.007618 -1.300000
|
||||
v -1.250124 7.307617 -1.300000
|
||||
v 1.249876 7.307617 -1.300000
|
||||
v -1.250124 0.007618 1.300000
|
||||
v -1.250124 7.307617 1.300000
|
||||
v -1.250124 0.007618 -1.300000
|
||||
v 1.249876 7.307617 1.300000
|
||||
v 1.249876 0.007618 1.300000
|
||||
vn -0.0000 -0.0000 1.0000
|
||||
vn -1.0000 -0.0000 -0.0000
|
||||
vn -0.0000 -0.0000 -1.0000
|
||||
vn 1.0000 -0.0000 -0.0000
|
||||
vn -0.0000 -1.0000 -0.0000
|
||||
vn -0.0000 1.0000 -0.0000
|
||||
vt 0.812500 0.375000
|
||||
vt 0.875000 0.375000
|
||||
vt 0.875000 0.000000
|
||||
vt 0.812500 0.000000
|
||||
vt 0.750000 0.375000
|
||||
vt 0.750000 0.000000
|
||||
vt 0.687500 0.375000
|
||||
vt 0.687500 0.000000
|
||||
vt 0.625000 0.375000
|
||||
vt 0.625000 0.000000
|
||||
vt 0.687500 0.500000
|
||||
vt 0.750000 0.500000
|
||||
vt 0.812500 0.500000
|
||||
s 0
|
||||
f 4/1/1 8/2/1 7/3/1 5/4/1
|
||||
f 6/5/2 4/1/2 5/4/2 2/6/2
|
||||
f 1/7/3 6/5/3 2/6/3 3/8/3
|
||||
f 8/7/4 1/9/4 3/10/4 7/8/4
|
||||
f 1/7/5 8/11/5 4/12/5 6/5/5
|
||||
f 2/5/6 5/12/6 7/13/6 3/1/6
|
|
@ -0,0 +1,152 @@
|
|||
# Blender 4.0.2
|
||||
# www.blender.org
|
||||
o chest
|
||||
v 2.200000 -0.001495 1.200000
|
||||
v 2.200000 -0.001495 -1.200000
|
||||
v 2.200000 7.098505 -1.200000
|
||||
v -2.200000 7.098505 -1.200000
|
||||
v -2.200000 7.098505 1.200000
|
||||
v 2.200000 7.098505 1.200000
|
||||
v -2.200000 -0.001495 -1.200000
|
||||
v -2.200000 -0.001495 1.200000
|
||||
v -4.168111 7.701634 1.681621
|
||||
v 1.741822 -7.664789 4.169018
|
||||
v 1.718504 -7.797035 3.407457
|
||||
v -6.641035 -6.323022 3.407457
|
||||
v 4.191429 6.227620 1.681621
|
||||
v -6.617718 -6.190779 4.169018
|
||||
v 4.168111 6.095374 0.920061
|
||||
v -4.191429 7.569388 0.920061
|
||||
v -4.191429 6.227621 1.681620
|
||||
v 6.617716 -6.190779 4.169018
|
||||
v 6.641035 -6.323024 3.407457
|
||||
v -1.718504 -7.797033 3.407457
|
||||
v 4.168111 7.701632 1.681621
|
||||
v -1.741822 -7.664789 4.169018
|
||||
v 4.191429 7.569387 0.920061
|
||||
v -4.168111 6.095377 0.920061
|
||||
v 2.190794 0.007711 1.190794
|
||||
v 2.190794 0.007711 -1.190793
|
||||
v 2.190794 7.089298 -1.190794
|
||||
v -2.190794 7.089298 -1.190794
|
||||
v -2.190794 7.089298 1.190793
|
||||
v 2.190794 7.089298 1.190793
|
||||
v -2.190794 0.007711 -1.190793
|
||||
v -2.190794 0.007711 1.190794
|
||||
v -4.160896 7.689532 1.674153
|
||||
v 1.734052 -7.655836 4.158352
|
||||
v 1.711289 -7.784933 3.414925
|
||||
v -6.630116 -6.314117 3.414925
|
||||
v 4.180511 6.218716 1.674153
|
||||
v -6.607354 -6.185023 4.158352
|
||||
v 4.157747 6.089618 0.930726
|
||||
v -4.183659 7.560435 0.930726
|
||||
v -4.180511 6.218717 1.674152
|
||||
v 6.607353 -6.185023 4.158352
|
||||
v 6.630116 -6.314119 3.414925
|
||||
v -1.711289 -7.784931 3.414925
|
||||
v 4.160896 7.689529 1.674153
|
||||
v -1.734053 -7.655836 4.158352
|
||||
v 4.183659 7.560434 0.930727
|
||||
v -4.157747 6.089621 0.930726
|
||||
vn 1.0000 -0.0000 -0.0000
|
||||
vn -0.0000 1.0000 -0.0000
|
||||
vn -0.0000 -1.0000 -0.0000
|
||||
vn -0.0000 -0.0000 -1.0000
|
||||
vn -1.0000 -0.0000 -0.0000
|
||||
vn -0.0000 -0.0000 1.0000
|
||||
vn 0.0302 0.1710 0.9848
|
||||
vn -0.0302 -0.1710 -0.9848
|
||||
vn 0.1710 0.9698 -0.1737
|
||||
vn 0.9848 -0.1736 -0.0000
|
||||
vn -0.9848 0.1736 -0.0000
|
||||
vn -0.1710 -0.9698 0.1736
|
||||
vn -0.0302 0.1710 0.9848
|
||||
vn 0.0302 -0.1710 -0.9848
|
||||
vn -0.1710 0.9698 -0.1736
|
||||
vn 0.9848 0.1736 -0.0000
|
||||
vn -0.9848 -0.1736 -0.0000
|
||||
vn 0.1710 -0.9698 0.1736
|
||||
vn -0.1710 -0.9698 0.1737
|
||||
vn 0.1710 0.9698 -0.1736
|
||||
vt 0.250000 0.375000
|
||||
vt 0.250000 0.000000
|
||||
vt 0.312500 0.000000
|
||||
vt 0.312500 0.375000
|
||||
vt 0.312500 0.500000
|
||||
vt 0.437500 0.375000
|
||||
vt 0.437500 0.500000
|
||||
vt 0.562500 0.375000
|
||||
vt 0.562500 0.500000
|
||||
vt 0.437500 0.000000
|
||||
vt 0.500000 0.000000
|
||||
vt 0.500000 0.375000
|
||||
vt 0.625000 0.375000
|
||||
vt 0.625000 0.000000
|
||||
vt 0.032859 0.558649
|
||||
vt 0.032859 0.998468
|
||||
vt 0.362724 0.998468
|
||||
vt 0.362724 0.558649
|
||||
vt 0.039157 0.992309
|
||||
vt 0.039157 0.656118
|
||||
vt 0.060169 0.656118
|
||||
vt 0.060169 0.992309
|
||||
vt -0.003415 0.501261
|
||||
vt 0.368238 0.501261
|
||||
vt 0.368238 0.563203
|
||||
vt -0.003415 0.563203
|
||||
vt 0.368238 0.996797
|
||||
vt -0.003415 0.996797
|
||||
vt -0.003415 0.934855
|
||||
vt 0.368238 0.934855
|
||||
vt 0.394691 0.498800
|
||||
vt 0.394691 0.994336
|
||||
vt 0.363720 0.994336
|
||||
vt 0.363720 0.498800
|
||||
vt 0.032859 0.558649
|
||||
vt 0.362724 0.558649
|
||||
vt 0.368238 0.934855
|
||||
vt -0.003415 0.934855
|
||||
vt 0.368238 0.501261
|
||||
vt -0.003415 0.501261
|
||||
vt -0.003415 0.563203
|
||||
vt 0.368238 0.563203
|
||||
vt 0.394691 0.498800
|
||||
vt 0.363720 0.498800
|
||||
s 0
|
||||
f 6/1/1 1/2/1 2/3/1 3/4/1
|
||||
f 6/5/2 3/4/2 4/6/2 5/7/2
|
||||
f 8/7/3 7/6/3 2/8/3 1/9/3
|
||||
f 4/6/4 3/4/4 2/3/4 7/10/4
|
||||
f 7/10/5 8/11/5 5/12/5 4/6/5
|
||||
f 6/13/6 5/12/6 8/11/6 1/14/6
|
||||
f 13/15/7 9/16/7 14/17/7 10/18/7
|
||||
f 15/15/8 11/18/8 12/17/8 16/16/8
|
||||
f 9/19/9 13/20/9 15/21/9 16/22/9
|
||||
f 13/23/10 10/24/10 11/25/10 15/26/10
|
||||
f 14/27/11 9/28/11 16/29/11 12/30/11
|
||||
f 10/31/12 14/32/12 12/33/12 11/34/12
|
||||
f 21/16/13 17/35/13 22/36/13 18/17/13
|
||||
f 23/16/14 19/17/14 20/36/14 24/35/14
|
||||
f 17/20/15 21/19/15 23/22/15 24/21/15
|
||||
f 21/28/16 18/27/16 19/37/16 23/38/16
|
||||
f 22/39/17 17/40/17 24/41/17 20/42/17
|
||||
f 18/32/18 22/43/18 20/44/18 19/33/18
|
||||
f 30/1/5 27/4/5 26/3/5 25/2/5
|
||||
f 30/5/3 29/7/3 28/6/3 27/4/3
|
||||
f 32/7/2 25/9/2 26/8/2 31/6/2
|
||||
f 28/6/6 31/10/6 26/3/6 27/4/6
|
||||
f 31/10/1 28/6/1 29/12/1 32/11/1
|
||||
f 30/13/4 25/14/4 32/11/4 29/12/4
|
||||
f 37/15/8 34/18/8 38/17/8 33/16/8
|
||||
f 39/15/7 40/16/7 36/17/7 35/18/7
|
||||
f 33/19/19 40/22/19 39/21/19 37/20/19
|
||||
f 37/23/11 39/26/11 35/25/11 34/24/11
|
||||
f 38/27/10 36/30/10 40/29/10 33/28/10
|
||||
f 34/31/20 35/34/20 36/33/20 38/32/20
|
||||
f 45/16/14 42/17/14 46/36/14 41/35/14
|
||||
f 47/16/13 48/35/13 44/36/13 43/17/13
|
||||
f 41/20/18 48/21/18 47/22/18 45/19/18
|
||||
f 45/28/17 47/38/17 43/37/17 42/27/17
|
||||
f 46/39/16 44/42/16 48/41/16 41/40/16
|
||||
f 42/32/15 43/33/15 44/44/15 46/43/15
|
|
@ -0,0 +1,51 @@
|
|||
# Blender 4.0.2
|
||||
# www.blender.org
|
||||
o head
|
||||
v 2.300000 -0.000170 -2.300000
|
||||
v 2.300000 4.599828 2.299999
|
||||
v -2.300000 4.599828 2.299999
|
||||
v 2.300000 -0.000170 2.300000
|
||||
v -2.300000 4.599828 -2.300000
|
||||
v 2.300000 4.599828 -2.300000
|
||||
v -2.300000 -0.000170 -2.300000
|
||||
v -2.300000 -0.000170 2.300000
|
||||
v 2.286139 0.013690 -2.286139
|
||||
v 2.286139 4.585968 2.286139
|
||||
v -2.286139 4.585968 2.286139
|
||||
v 2.286139 0.013690 2.286139
|
||||
v -2.286139 4.585968 -2.286140
|
||||
v 2.286139 4.585968 -2.286140
|
||||
v -2.286139 0.013690 -2.286139
|
||||
v -2.286139 0.013690 2.286139
|
||||
vn 1.0000 -0.0000 -0.0000
|
||||
vn -0.0000 1.0000 -0.0000
|
||||
vn -0.0000 -1.0000 -0.0000
|
||||
vn -0.0000 -0.0000 -1.0000
|
||||
vn -1.0000 -0.0000 -0.0000
|
||||
vn -0.0000 -0.0000 1.0000
|
||||
vt 0.500000 0.750000
|
||||
vt 0.500000 0.500000
|
||||
vt 0.625000 0.500000
|
||||
vt 0.625000 0.750000
|
||||
vt 0.750000 0.750000
|
||||
vt 0.750000 1.000000
|
||||
vt 0.625000 1.000000
|
||||
vt 0.875000 0.750000
|
||||
vt 0.875000 1.000000
|
||||
vt 0.750000 0.500000
|
||||
vt 0.875000 0.500000
|
||||
vt 1.000000 0.750000
|
||||
vt 1.000000 0.500000
|
||||
s 0
|
||||
f 2/1/1 4/2/1 1/3/1 6/4/1
|
||||
f 5/5/2 3/6/2 2/7/2 6/4/2
|
||||
f 1/8/3 4/9/3 8/6/3 7/5/3
|
||||
f 5/5/4 6/4/4 1/3/4 7/10/4
|
||||
f 3/8/5 5/5/5 7/10/5 8/11/5
|
||||
f 2/12/6 3/8/6 8/11/6 4/13/6
|
||||
f 10/1/5 14/4/5 9/3/5 12/2/5
|
||||
f 13/5/3 14/4/3 10/7/3 11/6/3
|
||||
f 9/8/2 15/5/2 16/6/2 12/9/2
|
||||
f 13/5/6 15/10/6 9/3/6 14/4/6
|
||||
f 11/8/1 16/11/1 15/10/1 13/5/1
|
||||
f 10/12/4 12/13/4 16/11/4 11/8/4
|
|
@ -0,0 +1,64 @@
|
|||
# Blender 4.0.2
|
||||
# www.blender.org
|
||||
o leg_left
|
||||
v -1.200000 7.000000 -1.300000
|
||||
v 1.200000 -0.000000 1.300001
|
||||
v 1.200000 -0.000000 -1.299999
|
||||
v -1.200000 -0.000000 -1.299999
|
||||
v 1.400000 -0.099999 1.500001
|
||||
v -1.200000 7.000000 1.300000
|
||||
v -1.400000 3.475000 -1.500000
|
||||
v 1.400000 3.475000 -1.500000
|
||||
v -1.400000 3.475000 1.500000
|
||||
v 1.200000 7.000000 1.300000
|
||||
v 1.400000 -0.100001 -1.499999
|
||||
v 1.400000 3.475000 1.500000
|
||||
v 1.200000 7.000000 -1.300000
|
||||
v -1.400000 -0.099999 1.500001
|
||||
v -1.200000 -0.000000 1.300001
|
||||
v -1.400000 -0.100001 -1.499999
|
||||
vn -0.0000 1.0000 -0.0000
|
||||
vn 1.0000 -0.0000 -0.0000
|
||||
vn -0.0000 -0.0000 -1.0000
|
||||
vn -0.0000 -0.0000 1.0000
|
||||
vn -1.0000 -0.0000 -0.0000
|
||||
vn -0.0000 -1.0000 -0.0000
|
||||
vt 0.125000 0.375000
|
||||
vt 0.125000 0.500000
|
||||
vt 0.062500 0.500000
|
||||
vt 0.062500 0.375000
|
||||
vt 0.187500 0.375000
|
||||
vt 0.125000 0.000000
|
||||
vt 0.187500 0.000000
|
||||
vt 0.062500 0.000000
|
||||
vt 0.250000 0.375000
|
||||
vt 0.250000 0.000000
|
||||
vt 0.000000 0.375000
|
||||
vt 0.000000 0.000000
|
||||
vt 0.187500 0.500000
|
||||
vt 0.390625 0.839844
|
||||
vt 0.390625 0.871094
|
||||
vt 0.375000 0.871094
|
||||
vt 0.375000 0.839844
|
||||
vt 0.343750 0.839844
|
||||
vt 0.359375 0.839844
|
||||
vt 0.359375 0.785156
|
||||
vt 0.343750 0.785156
|
||||
vt 0.406250 0.839844
|
||||
vt 0.390625 0.785156
|
||||
vt 0.406250 0.785156
|
||||
vt 0.375000 0.785156
|
||||
vt 0.359375 0.871094
|
||||
s 0
|
||||
f 1/1/1 6/2/1 10/3/1 13/4/1
|
||||
f 13/5/2 10/1/2 2/6/2 3/7/2
|
||||
f 1/1/3 13/4/3 3/8/3 4/6/3
|
||||
f 10/9/4 6/5/4 15/7/4 2/10/4
|
||||
f 6/11/5 1/4/5 4/8/5 15/12/5
|
||||
f 3/5/6 2/13/6 15/2/6 4/1/6
|
||||
f 11/14/6 5/15/6 14/16/6 16/17/6
|
||||
f 9/18/5 7/19/5 16/20/5 14/21/5
|
||||
f 12/22/4 9/14/4 14/23/4 5/24/4
|
||||
f 7/17/3 8/19/3 11/20/3 16/25/3
|
||||
f 8/14/2 12/17/2 5/25/2 11/23/2
|
||||
f 7/17/1 9/16/1 12/26/1 8/19/1
|
|
@ -0,0 +1,64 @@
|
|||
# Blender 4.0.2
|
||||
# www.blender.org
|
||||
o leg_right
|
||||
v 1.200000 7.000000 -1.300000
|
||||
v -1.200000 7.000000 1.300000
|
||||
v 1.200000 -0.000000 -1.299999
|
||||
v -1.200000 -0.000000 1.300001
|
||||
v 1.400000 3.475000 -1.500000
|
||||
v 1.400000 -0.099999 1.500001
|
||||
v -1.400000 -0.099999 1.500001
|
||||
v -1.200000 -0.000000 -1.299999
|
||||
v -1.200000 7.000000 -1.300000
|
||||
v -1.400000 3.475000 1.500000
|
||||
v 1.400000 3.475000 1.500000
|
||||
v -1.400000 3.475000 -1.500000
|
||||
v -1.400000 -0.100001 -1.499999
|
||||
v 1.200000 -0.000000 1.300001
|
||||
v 1.400000 -0.100001 -1.499999
|
||||
v 1.200000 7.000000 1.300000
|
||||
vn -0.0000 1.0000 -0.0000
|
||||
vn -0.0000 -1.0000 -0.0000
|
||||
vn 1.0000 -0.0000 -0.0000
|
||||
vn -0.0000 -0.0000 1.0000
|
||||
vn -0.0000 -0.0000 -1.0000
|
||||
vn -1.0000 -0.0000 -0.0000
|
||||
vt 0.125000 0.375000
|
||||
vt 0.062500 0.375000
|
||||
vt 0.062500 0.500000
|
||||
vt 0.125000 0.500000
|
||||
vt 0.187500 0.375000
|
||||
vt 0.187500 0.500000
|
||||
vt 0.000000 0.375000
|
||||
vt 0.000000 0.000000
|
||||
vt 0.062500 0.000000
|
||||
vt 0.250000 0.375000
|
||||
vt 0.250000 0.000000
|
||||
vt 0.187500 0.000000
|
||||
vt 0.125000 0.000000
|
||||
vt 0.390625 0.839844
|
||||
vt 0.390625 0.785156
|
||||
vt 0.375000 0.785156
|
||||
vt 0.375000 0.839844
|
||||
vt 0.359375 0.785156
|
||||
vt 0.359375 0.839844
|
||||
vt 0.406250 0.839844
|
||||
vt 0.406250 0.785156
|
||||
vt 0.343750 0.839844
|
||||
vt 0.343750 0.785156
|
||||
vt 0.375000 0.871094
|
||||
vt 0.390625 0.871094
|
||||
vt 0.359375 0.871094
|
||||
s 0
|
||||
f 1/1/1 9/2/1 2/3/1 16/4/1
|
||||
f 8/5/2 3/1/2 14/4/2 4/6/2
|
||||
f 16/7/3 14/8/3 3/9/3 1/2/3
|
||||
f 2/10/4 4/11/4 14/12/4 16/5/4
|
||||
f 1/1/5 3/13/5 8/9/5 9/2/5
|
||||
f 9/5/6 8/12/6 4/13/6 2/1/6
|
||||
f 12/14/6 13/15/6 7/16/6 10/17/6
|
||||
f 5/17/5 15/16/5 13/18/5 12/19/5
|
||||
f 10/20/4 7/21/4 6/15/4 11/14/4
|
||||
f 11/22/3 6/23/3 15/18/3 5/19/3
|
||||
f 13/14/2 15/17/2 6/24/2 7/25/2
|
||||
f 5/17/1 12/19/1 10/26/1 11/24/1
|
Binary file not shown.
|
@ -201,6 +201,8 @@ end
|
|||
function mob_class:set_velocity(v)
|
||||
if not v then return end
|
||||
|
||||
v = 0
|
||||
|
||||
local c_x, c_y = 0, 0
|
||||
|
||||
-- can mob be pushed, if so calculate direction
|
||||
|
@ -311,6 +313,8 @@ end
|
|||
function mob_class:set_yaw(yaw, delay, dtime)
|
||||
if self.noyaw then return end
|
||||
|
||||
yaw = 0
|
||||
|
||||
if not self.object:get_yaw() or not self.object:get_pos() then return end
|
||||
|
||||
if self.state ~= PATHFINDING then
|
||||
|
|
|
@ -633,7 +633,7 @@ local function get_next_mob_spawn_pos(pos)
|
|||
-- those further away from the player.
|
||||
local fx = (math_random(1,10000)-1) / 10000
|
||||
local x = inverse_pwl(fx, SPAWN_DISTANCE_CDF_PWL)
|
||||
local distance = x * (MOB_SPAWN_ZONE_OUTER - MOB_SPAWN_ZONE_INNER) + MOB_SPAWN_ZONE_INNER
|
||||
distance = x * (MOB_SPAWN_ZONE_OUTER - MOB_SPAWN_ZONE_INNER) + MOB_SPAWN_ZONE_INNER
|
||||
--print("Using spawn distance of "..tostring(distance).." fx="..tostring(fx)..",x="..tostring(x))
|
||||
|
||||
-- TODO Floor xoff and zoff and add 0.5 so it tries to spawn in the middle of the square. Less failed attempts.
|
||||
|
|
|
@ -491,17 +491,20 @@ mcl_mobs.register_mob("mobs_mc:rover", {
|
|||
view_range = 64,
|
||||
fear_height = 4,
|
||||
attack_type = "dogfight",
|
||||
_on_after_convert = function(obj)
|
||||
})
|
||||
|
||||
-- compat
|
||||
minetest.register_entity("mobs_mc:enderman", {
|
||||
on_activate = function(self, staticdata, dtime)
|
||||
local obj = minetest.add_entity(self.object:get_pos(), "mobs_mc:rover", staticdata)
|
||||
obj:set_properties({
|
||||
mesh = "vl_rover.b3d",
|
||||
textures = { "vl_mobs_rover.png^vl_mobs_rover_face.png" },
|
||||
visual_size = {x=10, y=10},
|
||||
})
|
||||
end
|
||||
}) -- END mcl_mobs.register_mob("mobs_mc:rover", {
|
||||
|
||||
-- compat
|
||||
mcl_mobs.register_conversion("mobs_mc:enderman", "mobs_mc:rover")
|
||||
self.object:remove()
|
||||
end,
|
||||
})
|
||||
|
||||
-- End spawn
|
||||
mcl_mobs:spawn_specific(
|
||||
|
|
|
@ -96,6 +96,15 @@ local skeleton = {
|
|||
die_speed = 15,
|
||||
die_loop = false,
|
||||
},
|
||||
wears_armor = 1,
|
||||
armor_transforms = { -- scaled down armor becuase of the scaled up skeleton model
|
||||
head = {"head", vector.new(0,-0.2,0), vector.new(0,180,0), vector.new(0.44,0.44,0.44)},
|
||||
chest = {"body", vector.new(0,-0.5,0), vector.new(0,180,0), vector.new(0.44,0.44,0.44)},
|
||||
arm_right = {"arm.right", vector.new(0,-0.5,0), vector.new(0,180,0), vector.new(0.33,0.33,0.33)},
|
||||
arm_left = {"arm.left", vector.new(0,-0.5,0), vector.new(0,180,0), vector.new(0.33,0.33,0.33)},
|
||||
leg_right = {"leg.right", vector.zero(), vector.new(0,180,0), vector.new(0.33,0.33,0.33)},
|
||||
leg_left = {"leg.left", vector.zero(), vector.new(0,180,0), vector.new(0.33,0.33,0.33)}
|
||||
},
|
||||
on_spawn = function(self)
|
||||
if math.random(100) == 1 then
|
||||
self:jock_to("mobs_mc:spider", vector.zero(), vector.zero())
|
||||
|
|
|
@ -35,8 +35,7 @@ local function get_texture(self)
|
|||
if not texture or texture == "" then
|
||||
texture = "vl_stalker_default.png"
|
||||
end
|
||||
texture = texture:gsub("([\\^:\\[])","\\%1") -- escape texture modifiers
|
||||
texture = "([combine:16x24:0,0=(" .. texture .. "):0,16=(" .. texture ..")".. texture_suff
|
||||
texture = "([combine:16x24:0,0=" .. texture .. ":0,16=" .. texture .. texture_suff
|
||||
if self.attack then
|
||||
texture = texture .. ")^vl_mobs_stalker_overlay_angry.png"
|
||||
else
|
||||
|
@ -132,11 +131,7 @@ mcl_mobs.register_mob("mobs_mc:stalker", {
|
|||
self:boom(mcl_util.get_object_center(self.object), self.explosion_strength)
|
||||
end
|
||||
end
|
||||
local new_texture = get_texture(self)
|
||||
if self._stalker_texture ~= new_texture then
|
||||
self.object:set_properties({textures={new_texture, "mobs_mc_empty.png"}})
|
||||
self._stalker_texture = new_texture
|
||||
end
|
||||
self.object:set_properties({textures={get_texture(self)}})
|
||||
end,
|
||||
on_die = function(self, pos, cmi_cause)
|
||||
-- Drop a random music disc when killed by skeleton or stray
|
||||
|
@ -180,18 +175,7 @@ mcl_mobs.register_mob("mobs_mc:stalker", {
|
|||
floats = 1,
|
||||
fear_height = 4,
|
||||
view_range = 16,
|
||||
|
||||
_on_after_convert = function(obj)
|
||||
obj:set_properties({
|
||||
visual_size = {x=2, y=2},
|
||||
mesh = "vl_stalker.b3d",
|
||||
textures = {
|
||||
{get_texture({}),
|
||||
"mobs_mc_empty.png"},
|
||||
},
|
||||
})
|
||||
end,
|
||||
}) -- END mcl_mobs.register_mob("mobs_mc:stalker", {
|
||||
|
||||
mcl_mobs.register_mob("mobs_mc:stalker_overloaded", {
|
||||
description = S("Overloaded Stalker"),
|
||||
|
@ -320,8 +304,26 @@ mcl_mobs.register_mob("mobs_mc:stalker_overloaded", {
|
|||
--Having trouble when fire is placed with lightning
|
||||
fire_resistant = true,
|
||||
glow = 3,
|
||||
})
|
||||
|
||||
_on_after_convert = function(obj)
|
||||
-- compat
|
||||
minetest.register_entity("mobs_mc:creeper", {
|
||||
on_activate = function(self, staticdata, dtime)
|
||||
local obj = minetest.add_entity(self.object:get_pos(), "mobs_mc:stalker", staticdata)
|
||||
obj:set_properties({
|
||||
visual_size = {x=2, y=2},
|
||||
mesh = "vl_stalker.b3d",
|
||||
textures = {
|
||||
{get_texture({}),
|
||||
"mobs_mc_empty.png"},
|
||||
},
|
||||
})
|
||||
self.object:remove()
|
||||
end,
|
||||
})
|
||||
minetest.register_entity("mobs_mc:creeper_charged", {
|
||||
on_activate = function(self, staticdata, dtime)
|
||||
local obj = minetest.add_entity(self.object:get_pos(), "mobs_mc:stalker_overloaded", staticdata)
|
||||
obj:set_properties({
|
||||
visual_size = {x=2, y=2},
|
||||
mesh = "vl_stalker.b3d",
|
||||
|
@ -330,12 +332,9 @@ mcl_mobs.register_mob("mobs_mc:stalker_overloaded", {
|
|||
AURA},
|
||||
},
|
||||
})
|
||||
self.object:remove()
|
||||
end,
|
||||
}) -- END mcl_mobs.register_mob("mobs_mc:stalker_overloaded", {
|
||||
|
||||
-- compat
|
||||
mcl_mobs.register_conversion("mobs_mc:creeper", "mobs_mc:stalker")
|
||||
mcl_mobs.register_conversion("mobs_mc:creeper_charged", "mobs_mc:stalker_overloaded")
|
||||
})
|
||||
|
||||
mcl_mobs:spawn_specific(
|
||||
"mobs_mc:stalker",
|
||||
|
|
|
@ -60,6 +60,14 @@ local zombie = {
|
|||
head_pitch_multiplier=-1,
|
||||
breath_max = -1,
|
||||
wears_armor = 1,
|
||||
armor_transforms = {
|
||||
head = {"head", vector.zero()},
|
||||
chest = {"body", vector.zero()},
|
||||
arm_right = {"arm.right", vector.new(0,-0.9,0)},
|
||||
arm_left = {"arm.left", vector.new(0,-0.9,0)},
|
||||
leg_right = {"leg.right", vector.zero()},
|
||||
leg_left = {"leg.left", vector.zero()}
|
||||
},
|
||||
armor = {undead = 90, fleshy = 90},
|
||||
collisionbox = {-0.3, -0.01, -0.3, 0.3, 1.8, 0.3},
|
||||
visual = "mesh",
|
||||
|
|
|
@ -106,6 +106,11 @@ minetest.register_on_mods_loaded(function()
|
|||
end
|
||||
if def.groups.brewitem then
|
||||
local str = name
|
||||
if def.groups._mcl_potion == 1 then
|
||||
local stack = ItemStack(name)
|
||||
tt.reload_itemstack_description(stack)
|
||||
str = stack:to_string()
|
||||
end
|
||||
table.insert(inventory_lists["brew"], str)
|
||||
nonmisc = true
|
||||
end
|
||||
|
@ -123,12 +128,14 @@ minetest.register_on_mods_loaded(function()
|
|||
local stack = ItemStack(name)
|
||||
local potency = def._default_potent_level - 1
|
||||
stack:get_meta():set_int("mcl_potions:potion_potent", potency)
|
||||
tt.reload_itemstack_description(stack)
|
||||
table.insert(inventory_lists["brew"], stack:to_string())
|
||||
end
|
||||
if def.has_plus then
|
||||
local stack = ItemStack(name)
|
||||
local extend = def._default_extend_level
|
||||
stack:get_meta():set_int("mcl_potions:potion_plus", extend)
|
||||
tt.reload_itemstack_description(stack)
|
||||
table.insert(inventory_lists["brew"], stack:to_string())
|
||||
end
|
||||
end
|
||||
|
@ -137,17 +144,6 @@ minetest.register_on_mods_loaded(function()
|
|||
end
|
||||
end
|
||||
|
||||
-- Itemstack descriptions need to be reloaded separately, because tt invalidates minetest.registered_items iterators, somehow
|
||||
-- (and pairs() uses said iterators internally)
|
||||
-- TODO investigate the iterator invalidation, where does it happen?
|
||||
for name, list in pairs(inventory_lists) do
|
||||
for i=1, #list do
|
||||
local stack = ItemStack(list[i])
|
||||
tt.reload_itemstack_description(stack)
|
||||
list[i] = stack:to_string()
|
||||
end
|
||||
end
|
||||
|
||||
for ench, def in pairs(mcl_enchanting.enchantments) do
|
||||
local str = "mcl_enchanting:book_enchanted " .. ench .. " " .. def.max_level
|
||||
if def.inv_tool_tab then
|
||||
|
|
|
@ -84,9 +84,6 @@ local pallete_order = {
|
|||
pane_magenta_flat = 16,
|
||||
pane_magenta = 16
|
||||
}
|
||||
local EFFECT_CONVERSIONS = {
|
||||
strenght = "strength"
|
||||
}
|
||||
|
||||
local function get_beacon_beam(glass_nodename)
|
||||
if glass_nodename == "air" then return 0 end
|
||||
|
@ -221,13 +218,7 @@ local function apply_effects_to_all_players(pos)
|
|||
|
||||
local power_level = beacon_blockcheck(pos)
|
||||
|
||||
local new_effect_string = EFFECT_CONVERSIONS[effect_string]
|
||||
if new_effect_string then
|
||||
effect_string = new_effect_string
|
||||
meta:set_string("effect", effect_string)
|
||||
end
|
||||
|
||||
if effect_string == "" or ( effect_level == 2 and power_level < 4 ) then --no need to run loops when beacon is in an invalid setup :P
|
||||
if effect_level == 2 and power_level < 4 then --no need to run loops when beacon is in an invalid setup :P
|
||||
return
|
||||
end
|
||||
|
||||
|
@ -253,7 +244,8 @@ minetest.register_node("mcl_beacons:beacon", {
|
|||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
inv:set_size("input", 1)
|
||||
meta:set_string("formspec", formspec_string)
|
||||
local form = formspec_string
|
||||
meta:set_string("formspec", form)
|
||||
end,
|
||||
on_destruct = function(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
|
@ -371,6 +363,7 @@ minetest.register_node("mcl_beacons:beacon", {
|
|||
node = minetest.get_node({x=pos.x,y=y,z=pos.z})
|
||||
end
|
||||
|
||||
|
||||
if minetest.get_item_group(node.name, "glass") ~= 0 or minetest.get_item_group(node.name,"material_glass") ~= 0 then
|
||||
beam_palette_index = get_beacon_beam(node.name)
|
||||
end
|
||||
|
@ -433,15 +426,6 @@ minetest.register_abm{
|
|||
apply_effects_to_all_players(pos)
|
||||
end,
|
||||
}
|
||||
minetest.register_lbm({
|
||||
label = "Update beacon formspecs (0.87.1)",
|
||||
name = "mcl_beacons:update_beacon_formspecs_0_87_1",
|
||||
nodenames = { "mcl_beacons:beacon" },
|
||||
action = function(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("formspec", formspec_string)
|
||||
end
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "mcl_beacons:beacon",
|
||||
|
|
|
@ -340,7 +340,6 @@ local function on_put(pos, listname, index, stack, player)
|
|||
local inv = meta:get_inventory()
|
||||
local str = ""
|
||||
local stack
|
||||
local oldparam2 = minetest.get_node(pos).param2
|
||||
for i=1, inv:get_size("stand") do
|
||||
stack = inv:get_stack("stand", i)
|
||||
if not stack:is_empty() then
|
||||
|
@ -348,7 +347,7 @@ local function on_put(pos, listname, index, stack, player)
|
|||
else str = str.."0"
|
||||
end
|
||||
end
|
||||
minetest.swap_node(pos, {name = "mcl_brewing:stand_"..str, param2 = oldparam2})
|
||||
minetest.swap_node(pos, {name = "mcl_brewing:stand_"..str})
|
||||
minetest.get_node_timer(pos):start(1.0)
|
||||
--some code here to enforce only potions getting placed on stands
|
||||
end
|
||||
|
|
|
@ -22,7 +22,6 @@ minetest.register_entity("mcl_end:ender_eye", {
|
|||
self._phase = 0
|
||||
end
|
||||
end
|
||||
if not self._luck then self._luck = 0 end
|
||||
end,
|
||||
|
||||
on_step = function(self, dtime)
|
||||
|
|
|
@ -654,7 +654,7 @@ end
|
|||
minetest.register_alias("mcl_hoppers:hopper_item", "mcl_hoppers:hopper")
|
||||
|
||||
minetest.register_lbm({
|
||||
label = "Update hopper formspecs (0.60.0)",
|
||||
label = "Update hopper formspecs (0.60.0",
|
||||
name = "mcl_hoppers:update_formspec_0_60_0",
|
||||
nodenames = {"group:hopper"},
|
||||
run_at_every_load = false,
|
||||
|
|
|
@ -63,8 +63,8 @@ local function set_doll_properties(doll, mob)
|
|||
xs = doll_size_overrides[mob].x
|
||||
ys = doll_size_overrides[mob].y
|
||||
else
|
||||
xs = (mobinfo.visual_size.x or 0) * 0.33333
|
||||
ys = (mobinfo.visual_size.y or 0) * 0.33333
|
||||
xs = mobinfo.visual_size.x * 0.33333
|
||||
ys = mobinfo.visual_size.y * 0.33333
|
||||
end
|
||||
local prop = {
|
||||
mesh = mobinfo.mesh,
|
||||
|
@ -358,11 +358,6 @@ doll_def.on_activate = function(self, staticdata, dtime_s)
|
|||
if mob == "" or mob == nil then
|
||||
mob = default_mob
|
||||
end
|
||||
|
||||
-- Handle conversion of mob spawners
|
||||
local convert_to = (minetest.registered_entities[mob] or {})._convert_to
|
||||
if convert_to then mob = convert_to end
|
||||
|
||||
set_doll_properties(self.object, mob)
|
||||
self.object:set_velocity({x=0, y=0, z=0})
|
||||
self.object:set_acceleration({x=0, y=0, z=0})
|
||||
|
@ -395,11 +390,3 @@ minetest.register_lbm({
|
|||
respawn_doll(pos)
|
||||
end,
|
||||
})
|
||||
|
||||
minetest.register_on_mods_loaded(function()
|
||||
for name,mobinfo in pairs(minetest.registered_entities) do
|
||||
if ( mobinfo.is_mob or name:find("mobs_mc") ) and not ( mobinfo.visual_size or mobinfo._convert_to ) then
|
||||
minetest.log("warning", "Definition for "..tostring(name).." is missing field 'visual_size', mob spawners will not work properly")
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
|
|
@ -1091,7 +1091,6 @@ function mcl_potions.update_haste_and_fatigue(player)
|
|||
if f_fac ~= 1 then meta:set_float("mcl_potions:fatigue", 1 - f_fac)
|
||||
else meta:set_string("mcl_potions:fatigue", "") end
|
||||
meta:set_tool_capabilities()
|
||||
meta:set_string("groupcaps_hash","")
|
||||
mcl_enchanting.update_groupcaps(item)
|
||||
if h_fac == 0 and f_fac == 1 then
|
||||
player:set_wielded_item(item)
|
||||
|
@ -1400,7 +1399,6 @@ function mcl_potions._reset_haste_fatigue_item_meta(player)
|
|||
meta:set_string("mcl_potions:haste", "")
|
||||
meta:set_string("mcl_potions:fatigue", "")
|
||||
meta:set_tool_capabilities()
|
||||
meta:set_string("groupcaps_hash","")
|
||||
mcl_enchanting.update_groupcaps(item)
|
||||
end
|
||||
end
|
||||
|
@ -1834,10 +1832,6 @@ end
|
|||
|
||||
function mcl_potions.give_effect_by_level(name, object, level, duration, no_particles)
|
||||
if level == 0 then return false end
|
||||
if not registered_effects[name] then
|
||||
minetest.log("warning", "[mcl_potions] Trying to give unknown effect "..tostring(name))
|
||||
return false
|
||||
end
|
||||
if not registered_effects[name].uses_factor then
|
||||
return mcl_potions.give_effect(name, object, 0, duration, no_particles)
|
||||
end
|
||||
|
|
|
@ -173,8 +173,8 @@ function mcl_potions.register_lingering(name, descr, color, def)
|
|||
obj:set_velocity({x=dropdir.x*velocity,y=dropdir.y*velocity,z=dropdir.z*velocity})
|
||||
obj:set_acceleration({x=dropdir.x*-3, y=-9.8, z=dropdir.z*-3})
|
||||
local ent = obj:get_luaentity()
|
||||
ent._potency = stack:get_meta():get_int("mcl_potions:potion_potent")
|
||||
ent._plus = stack:get_meta():get_int("mcl_potions:potion_plus")
|
||||
ent._potency = item:get_meta():get_int("mcl_potions:potion_potent")
|
||||
ent._plus = item:get_meta():get_int("mcl_potions:potion_plus")
|
||||
ent._effect_list = def._effect_list
|
||||
end
|
||||
})
|
||||
|
|
|
@ -65,8 +65,8 @@ function mcl_potions.register_splash(name, descr, color, def)
|
|||
obj:set_velocity({x=dropdir.x*velocity,y=dropdir.y*velocity,z=dropdir.z*velocity})
|
||||
obj:set_acceleration({x=dropdir.x*-3, y=-9.8, z=dropdir.z*-3})
|
||||
local ent = obj:get_luaentity()
|
||||
ent._potency = stack:get_meta():get_int("mcl_potions:potion_potent")
|
||||
ent._plus = stack:get_meta():get_int("mcl_potions:potion_plus")
|
||||
ent._potency = item:get_meta():get_int("mcl_potions:potion_potent")
|
||||
ent._plus = item:get_meta():get_int("mcl_potions:potion_plus")
|
||||
ent._effect_list = def._effect_list
|
||||
end
|
||||
})
|
||||
|
|
|
@ -293,7 +293,7 @@ minetest.register_craftitem("mcl_throwing:snowball", {
|
|||
_doc_items_longdesc = S("Snowballs can be thrown or launched from a dispenser for fun. Hitting something with a snowball does nothing."),
|
||||
_doc_items_usagehelp = how_to_throw,
|
||||
inventory_image = "mcl_throwing_snowball.png",
|
||||
stack_max = 64,
|
||||
stack_max = 16,
|
||||
groups = { weapon_ranged = 1 },
|
||||
on_use = mcl_throwing.get_player_throw_function("mcl_throwing:snowball_entity"),
|
||||
_on_dispense = mcl_throwing.dispense_function,
|
||||
|
@ -306,7 +306,7 @@ minetest.register_craftitem("mcl_throwing:egg", {
|
|||
_doc_items_longdesc = S("Eggs can be thrown or launched from a dispenser and breaks on impact. There is a small chance that 1 or even 4 chicks will pop out of the egg."),
|
||||
_doc_items_usagehelp = how_to_throw,
|
||||
inventory_image = "mcl_throwing_egg.png",
|
||||
stack_max = 64,
|
||||
stack_max = 16,
|
||||
on_use = mcl_throwing.get_player_throw_function("mcl_throwing:egg_entity"),
|
||||
_on_dispense = mcl_throwing.dispense_function,
|
||||
groups = { craftitem = 1 },
|
||||
|
|
|
@ -166,15 +166,3 @@ One of our tools, the Python script allowing conversion of Minecraft resource pa
|
|||
* Ghast fireball related crash – by Araca
|
||||
* Crash related to server restart while a player is dead – by teknomunk
|
||||
* Crashes related to the new effects API - by teknomunk and Herowl
|
||||
|
||||
## 0.87.1 hotfix
|
||||
* Fixed crash when shooting potions from a dispenser - by teknomunk
|
||||
* Fixed crash related to custom mobspawners - by teknomunk
|
||||
* Fixed beacon crash - by teknomunk
|
||||
* Fixed eye of ender crash - by Herowl
|
||||
* Fixed Stalker texture generation - by teknomunk
|
||||
* Correctly refresh enchanted tool capabilities - by teknomunk
|
||||
* Fixed creative inventory misbehaving - by Herowl
|
||||
* Fixed variable definition in mob spawning code - by teknomunk
|
||||
* Updated documentation - by Herowl and teknomunk
|
||||
* Increased stack size for snowballs and eggs - by JoseDouglas26
|
||||
|
|
Loading…
Reference in New Issue