From 3c67bd7ef50c439eae04c8c0d07289a2856e9b8f Mon Sep 17 00:00:00 2001 From: Jordan Craige Date: Sat, 12 May 2012 00:46:43 -0400 Subject: [PATCH 1/7] Add in dirty hack to transform a halfslab into a complete block on punch --- games/blockplanet/mods/stairs/init.lua | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/games/blockplanet/mods/stairs/init.lua b/games/blockplanet/mods/stairs/init.lua index 4929d13..46f01ba 100644 --- a/games/blockplanet/mods/stairs/init.lua +++ b/games/blockplanet/mods/stairs/init.lua @@ -91,3 +91,8 @@ stairs.register_stair_and_slab("sandstone", "default:sandstone", {"default_sandstone.png"}, "Sandstone stair", "Sandstone slab") +minetest.register_on_punchnode(function(pos, node, puncher) + if node.name == ("stairs:slab_wood") then + minetest.env:add_node(pos, {name="default:wood"}) + end +end) From 8850e484a4942cee9624676721fd68829c878e1a Mon Sep 17 00:00:00 2001 From: Jordan Craige Date: Sat, 12 May 2012 20:56:34 -0400 Subject: [PATCH 2/7] Add in Azurite ore --- games/blockplanet/mods/default/init.lua | 9 +++++++++ games/blockplanet/mods/default/init.lua~ | 2 +- .../blockplanet/mods/default/textures/azurite.png | Bin 0 -> 711 bytes 3 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 games/blockplanet/mods/default/textures/azurite.png diff --git a/games/blockplanet/mods/default/init.lua b/games/blockplanet/mods/default/init.lua index 8f970df..8898417 100644 --- a/games/blockplanet/mods/default/init.lua +++ b/games/blockplanet/mods/default/init.lua @@ -804,6 +804,15 @@ minetest.register_node("default:stone_with_iron", { sounds = default.node_sound_stone_defaults(), }) +minetest.register_node("default:azurite_ore", { + description = "Azurite Ore", + tile_images = {"azurite.png"}, + is_ground_content = true, + groups = {cracky=3}, + drop = 'default:azurite_ore', + sounds = default.node_sound_stone_defaults(), +}) + minetest.register_node("default:dirt_with_grass", { description = "Dirt with grass", tile_images = {"default_grass.png", "default_dirt.png", "default_grass_side.png"}, diff --git a/games/blockplanet/mods/default/init.lua~ b/games/blockplanet/mods/default/init.lua~ index e709097..8f970df 100644 --- a/games/blockplanet/mods/default/init.lua~ +++ b/games/blockplanet/mods/default/init.lua~ @@ -806,7 +806,7 @@ minetest.register_node("default:stone_with_iron", { minetest.register_node("default:dirt_with_grass", { description = "Dirt with grass", - tile_images = {"default_grass.png", "default_dirt.png", "default_dirt.png^default_grass_side.png"}, + tile_images = {"default_grass.png", "default_dirt.png", "default_grass_side.png"}, is_ground_content = true, groups = {crumbly=3}, drop = 'default:dirt', diff --git a/games/blockplanet/mods/default/textures/azurite.png b/games/blockplanet/mods/default/textures/azurite.png new file mode 100644 index 0000000000000000000000000000000000000000..23c5f9fe2f0d52fa5496c741f4c5a984c5b7c0f0 GIT binary patch literal 711 zcmV;&0yzDNP)Px#24YJ`L;wH)004se^;vTO000SaNLh0L01m+b01m+cxRGn^00007bV*G`2iye= z762Jn-Z4G^00KuzL_t(I%UzSvN*h5GhQB#8+1UjJAEnSzP+RdSYBnS`wO4r}!I~l@ zo7#Pf)(fSDK8u2~+0AC=^ulDRJ$Ez1{BzFt|6|V1&UCd}VT?gU2q6Gqi~&GZU#$Nv zRmH^^na>Y4TNB3PPdMjjng$VJxm;qcC4@j(9s?7G!x13_LI_AzRh*ps+z6awt!2Gl zqpDbIDa&I-1n)f`KmO`o@AZ0QS%w)51{z~zXJ?0}rzb>&#iF3!&k>QXeN`pKNUzr; zgwTy7)>^E!)OC%umc^m~&bhumBFi#F1Y-==TGBMdd(UD~bmC4`F~%^TAMoMB5Au9~ zh#(@YR?n@92#=4C?C$PTRTXefk|fUzw)97%JG}RN`}Q8^TqhD^#27$nyctIRIv}eE|CXn+= zH86Re)7_$~eE$50>GU;wdwYZsST2{C)6-Mk0^EXW+ZN{>#u&W!08~|ls*)thi*QMd zkt9j*-cuBZ6vdpf{N8#0_3Il%r1O0?+h;yMAWc(L6*C@>b-iA9R$X1a1z Date: Sat, 12 May 2012 21:56:04 -0400 Subject: [PATCH 3/7] Make mese appear to be a "dust" --- games/blockplanet/mods/mesecons/init.lua | 4 ++-- .../mesecons_textures/textures/mesecons_dust.png | Bin 0 -> 318 bytes 2 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 games/blockplanet/mods/mesecons_textures/textures/mesecons_dust.png diff --git a/games/blockplanet/mods/mesecons/init.lua b/games/blockplanet/mods/mesecons/init.lua index 8439bea..c1d4379 100644 --- a/games/blockplanet/mods/mesecons/init.lua +++ b/games/blockplanet/mods/mesecons/init.lua @@ -103,8 +103,8 @@ dofile(minetest.get_modpath("mesecons").."/internal_api.lua"); minetest.register_node("mesecons:mesecon_off", { drawtype = "raillike", tile_images = {"jeija_mesecon_off.png", "jeija_mesecon_curved_off.png", "jeija_mesecon_t_junction_off.png", "jeija_mesecon_crossing_off.png"}, - inventory_image = "jeija_mesecon_off.png", - wield_image = "jeija_mesecon_off.png", + inventory_image = "mesecons_dust.png", + wield_image = "mesecons_dust.png", paramtype = "light", is_ground_content = true, walkable = false, diff --git a/games/blockplanet/mods/mesecons_textures/textures/mesecons_dust.png b/games/blockplanet/mods/mesecons_textures/textures/mesecons_dust.png new file mode 100644 index 0000000000000000000000000000000000000000..e4436c8f71ead52303ac49f6e125f3905f60de05 GIT binary patch literal 318 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-AbW|YuPgf2@*-+1mv$)@?g>+T_cT<9?23zTJD!>Akdtd+T=ATib#R zR6i}f<$B@JHlOXn^Nuv>?dvz?d^N8+r_)wQCh@gXt(@`p1%bb7yz1TwRV?Rjv}8W- z#X3WrX+rdY8S9z9?CG$tWY4HkxS+f7!?J@1{bk Date: Sat, 12 May 2012 22:23:26 -0400 Subject: [PATCH 4/7] Rebalance "Crumbly" digging setting --- games/blockplanet/mods/default/init.lua | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/games/blockplanet/mods/default/init.lua b/games/blockplanet/mods/default/init.lua index 8898417..6b4d77c 100644 --- a/games/blockplanet/mods/default/init.lua +++ b/games/blockplanet/mods/default/init.lua @@ -29,7 +29,7 @@ minetest.register_item(":", { max_drop_level = 0, groupcaps = { fleshy = {times={[2]=2.00, [3]=1.00}, uses=0, maxlevel=1}, - crumbly = {times={[2]=3.00, [3]=0.70}, uses=0, maxlevel=1}, + crumbly = {times={[2]=3.00, [3]=1.40}, uses=0, maxlevel=1}, snappy = {times={[3]=0.40}, uses=0, maxlevel=1}, oddly_breakable_by_hand = {times={[1]=7.00,[2]=4.00,[3]=1.40}, uses=0, maxlevel=3}, } @@ -96,7 +96,7 @@ minetest.register_tool("default:shovel_wood", { tool_capabilities = { max_drop_level=0, groupcaps={ - crumbly={times={[1]=3.00, [2]=0.80, [3]=0.50}, uses=10, maxlevel=1} + crumbly={times={[1]=3.00, [2]=0.80, [3]=1.00}, uses=10, maxlevel=1} } }, }) @@ -106,7 +106,7 @@ minetest.register_tool("default:shovel_stone", { tool_capabilities = { max_drop_level=0, groupcaps={ - crumbly={times={[1]=1.50, [2]=0.50, [3]=0.30}, uses=20, maxlevel=1} + crumbly={times={[1]=1.50, [2]=0.50, [3]=0.50}, uses=20, maxlevel=1} } }, }) @@ -116,7 +116,7 @@ minetest.register_tool("default:shovel_steel", { tool_capabilities = { max_drop_level=1, groupcaps={ - crumbly={times={[1]=1.50, [2]=0.70, [3]=0.60}, uses=10, maxlevel=2} + crumbly={times={[1]=1.50, [2]=0.70, [3]=0.30}, uses=10, maxlevel=2} } }, }) From ab1362e02c7c61e875c2817be792afd851a10694 Mon Sep 17 00:00:00 2001 From: Joel Leclerc Date: Sat, 12 May 2012 20:24:58 -0600 Subject: [PATCH 5/7] Changed the camera thing a bit (sorta fixed issue #9) --- builtin/item_entity.lua | 2 +- src/player.cpp | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/builtin/item_entity.lua b/builtin/item_entity.lua index 74eacd1..333b140 100644 --- a/builtin/item_entity.lua +++ b/builtin/item_entity.lua @@ -117,7 +117,7 @@ minetest.register_entity("__builtin:item", { local playerfound = false for k, obj in pairs(objs2) do local objpos=obj:getpos() - self.object:setacceleration({x=0, y=-10, z=0}) + --self.object:setacceleration({x=0, y=-10, z=0}) if obj:get_player_name() ~= nil and objpos.y >= pos.y-1.25 and objpos.y <= pos.y+.25 then playerfound = true if self.dontbugme == false then diff --git a/src/player.cpp b/src/player.cpp index 9088275..04af842 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -46,7 +46,8 @@ Player::Player(IGameDef *gamedef): hp(PLAYER_MAX_HP), hurt_tilt_timer(0), hurt_tilt_timer_max(0), - sprinting_timer(0.0), + // For now this hack will work + sprinting_timer(2.9999), enable_sprinting_timer(0), enable_flying_timer(0), hunger(PLAYER_MAX_HUNGER), From 505e5cac323d385857387e4c06cec1538f024a63 Mon Sep 17 00:00:00 2001 From: Joel Leclerc Date: Sat, 12 May 2012 20:42:24 -0600 Subject: [PATCH 6/7] Issue #9 should be fixed now --- src/camera.cpp | 2 +- src/game.cpp | 8 ++++++++ src/player.cpp | 3 +-- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/camera.cpp b/src/camera.cpp index 21eeb90..2a0ecd1 100644 --- a/src/camera.cpp +++ b/src/camera.cpp @@ -270,7 +270,7 @@ void Camera::update(LocalPlayer* player, f32 frametime, v2u32 screensize, { m_sprinting_fov_state += incr; }*/ - if(player->sprinting_timer != -10 && player->sprinting_timer != -20) + if(player->sprinting_timer != -10 && player->sprinting_timer != -20 && player->sprinting_timer != -30) { m_sprinting_fov_state = 0.3-player->sprinting_timer; } diff --git a/src/game.cpp b/src/game.cpp index 35ce9a9..1bb0fec 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -2887,6 +2887,10 @@ void the_game( { player->sprinting_timer = 0.3; } + if(player->sprinting_timer == -30) + { + player->sprinting_timer = -10; + } if(player->sprinting_timer != -10) { if(player->sprinting_timer > 0.0) @@ -2909,6 +2913,10 @@ void the_game( { player->sprinting_timer = 0; } + if(player->sprinting_timer == -30) + { + player->sprinting_timer = -20; + } if(player->sprinting_timer != -20) { if(player->sprinting_timer < 0.3) diff --git a/src/player.cpp b/src/player.cpp index 04af842..1d2daba 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -46,8 +46,7 @@ Player::Player(IGameDef *gamedef): hp(PLAYER_MAX_HP), hurt_tilt_timer(0), hurt_tilt_timer_max(0), - // For now this hack will work - sprinting_timer(2.9999), + sprinting_timer(-30), enable_sprinting_timer(0), enable_flying_timer(0), hunger(PLAYER_MAX_HUNGER), From 137dd7c64898ac13aecf228834b67eea647d1827 Mon Sep 17 00:00:00 2001 From: Joel Leclerc Date: Mon, 14 May 2012 13:34:54 -0600 Subject: [PATCH 7/7] Added a super-hacked eating animation --- games/blockplanet/mods/default/init.lua | 1 + src/camera.cpp | 81 +++++++++++++++++++------ src/camera.h | 9 ++- src/game.cpp | 9 ++- src/itemdef.cpp | 4 ++ src/itemdef.h | 1 + src/nodedef.cpp | 3 + src/nodedef.h | 2 + src/scriptapi.cpp | 3 + src/server.cpp | 6 ++ 10 files changed, 95 insertions(+), 24 deletions(-) diff --git a/games/blockplanet/mods/default/init.lua b/games/blockplanet/mods/default/init.lua index 6b4d77c..087065f 100644 --- a/games/blockplanet/mods/default/init.lua +++ b/games/blockplanet/mods/default/init.lua @@ -1378,6 +1378,7 @@ minetest.register_node("default:apple", { description = "Apple", drawtype = "plantlike", visual_scale = 1.0, + eatable = true, tile_images = {"default_apple.png"}, inventory_image = "default_apple.png", paramtype = "light", diff --git a/src/camera.cpp b/src/camera.cpp index 2a0ecd1..61c2455 100644 --- a/src/camera.cpp +++ b/src/camera.cpp @@ -78,7 +78,13 @@ Camera::Camera(scene::ISceneManager* smgr, MapDrawControl& draw_control, m_sprinting_fov_states(5), m_digging_anim(0), - m_digging_button(-1) + m_eating_anim(0), + m_digging_button(-1), + m_eating_state(false), + + m_eatable(false), + m_is_digging(false), + m_is_eating(false) { //dstream<<__FUNCTION_NAME<= 5) + { + m_eating_state = true; + } + if(m_eating_state == false) + { + m_eating_anim += 3; + } + else + { + m_eating_anim -= 3; + } + } } void Camera::update(LocalPlayer* player, f32 frametime, v2u32 screensize, @@ -370,7 +395,8 @@ void Camera::update(LocalPlayer* player, f32 frametime, v2u32 screensize, v3f wield_position = v3f(55, -35, 65); //v3f wield_rotation = v3f(-100, 120, -100); v3f wield_rotation = v3f(-100, 120, -100); - if(m_digging_anim < 0.05 || m_digging_anim > 0.5){ + if(m_digging_anim < 0.05 || m_digging_anim > 0.5) + { f32 frac = 1.0; if(m_digging_anim > 0.5) frac = 2.0 * (m_digging_anim - 0.5); @@ -385,22 +411,37 @@ void Camera::update(LocalPlayer* player, f32 frametime, v2u32 screensize, //wield_rotation.X -= frac * 15.0 * pow(ratiothing2, 1.4f); //wield_rotation.Z += frac * 15.0 * pow(ratiothing2, 1.0f); } - if (m_digging_button != -1) + if(m_digging_button != -1) { - f32 digfrac = m_digging_anim; - wield_position.X -= 50 * sin(pow(digfrac, 0.7f) * PI); - wield_position.Y += 24 * sin(digfrac * 1.8 * PI); - wield_position.Z += 25 * 0.5; + if(m_digging_button == 0 && m_eatable) + { + m_is_eating = true; + wield_position.X = 0; + wield_position.Y = -20 + m_eating_anim; + wield_position.Z = 65; + wield_rotation.X = 0; + wield_rotation.Y = 0; + wield_rotation.Z = 0; + } + else + { + m_is_eating = false; + f32 digfrac = m_digging_anim; + wield_position.X -= 50 * sin(pow(digfrac, 0.7f) * PI); + wield_position.Y += 24 * sin(digfrac * 1.8 * PI); + wield_position.Z += 25 * 0.5; - // Euler angles are PURE EVIL, so why not use quaternions? - core::quaternion quat_begin(wield_rotation * core::DEGTORAD); - core::quaternion quat_end(v3f(80, 30, 100) * core::DEGTORAD); - core::quaternion quat_slerp; - quat_slerp.slerp(quat_begin, quat_end, sin(digfrac * PI)); - quat_slerp.toEuler(wield_rotation); - wield_rotation *= core::RADTODEG; + // Euler angles are PURE EVIL, so why not use quaternions? + core::quaternion quat_begin(wield_rotation * core::DEGTORAD); + core::quaternion quat_end(v3f(80, 30, 100) * core::DEGTORAD); + core::quaternion quat_slerp; + quat_slerp.slerp(quat_begin, quat_end, sin(digfrac * PI)); + quat_slerp.toEuler(wield_rotation); + wield_rotation *= core::RADTODEG; + } } - else { + else + { f32 bobfrac = my_modf(m_view_bobbing_anim); wield_position.X -= sin(bobfrac*PI*2.0) * 3.0; wield_position.Y += sin(my_modf(bobfrac*2.0)*PI) * 3.0; @@ -573,15 +614,19 @@ void Camera::updateViewingRange(f32 frametime_in) m_frametime_old = frametime; } -void Camera::setDigging(s32 button) +void Camera::setDigging(s32 button, bool digging) { - if (m_digging_button == -1) + if(m_digging_button == -1) + { m_digging_button = button; + } + m_is_digging = digging; } void Camera::wield(const ItemStack &item) { IItemDefManager *idef = m_gamedef->idef(); + m_eatable = item.getDefinition(idef).eatable; scene::IMesh *wield_mesh = item.getDefinition(idef).wield_mesh; if(wield_mesh) { diff --git a/src/camera.h b/src/camera.h index 41a5af6..04c0f5c 100644 --- a/src/camera.h +++ b/src/camera.h @@ -114,7 +114,8 @@ public: // Start digging animation // Pass 0 for left click, 1 for right click - void setDigging(s32 button); + // Digging is for, well... + void setDigging(s32 button, bool digging); // Replace the wielded item mesh void wield(const ItemStack &item); @@ -172,10 +173,16 @@ private: // Digging animation frame (0 <= m_digging_anim < 1) f32 m_digging_anim; + // Eating animation + f32 m_eating_anim; // If -1, no digging animation // If 0, left-click digging animation // If 1, right-click digging animation s32 m_digging_button; + bool m_eating_state; + bool m_eatable; + bool m_is_digging; + bool m_is_eating; }; #endif diff --git a/src/game.cpp b/src/game.cpp index a3c4b2e..93dea32 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -2325,8 +2325,7 @@ void the_game( } dig_time += dtime; - if (digging) - camera.setDigging(0); // left click animation + camera.setDigging(0, digging); // left click animation } if(input->getRightClicked()) @@ -2379,7 +2378,7 @@ void the_game( else { client.interact(3, pointed); - camera.setDigging(1); // right click animation + camera.setDigging(1, digging); // right click animation } } } @@ -2434,9 +2433,9 @@ void the_game( pointed_old = pointed; - if((left_punch || input->getLeftClicked()) && digging) + if(left_punch || input->getLeftClicked()) { - camera.setDigging(0); // left click animation + camera.setDigging(0, digging); // left click animation } input->resetLeftClicked(); diff --git a/src/itemdef.cpp b/src/itemdef.cpp index 934150a..8e156e0 100644 --- a/src/itemdef.cpp +++ b/src/itemdef.cpp @@ -64,6 +64,7 @@ ItemDefinition& ItemDefinition::operator=(const ItemDefinition &def) stack_max = def.stack_max; usable = def.usable; liquids_pointable = def.liquids_pointable; + eatable = def.eatable; if(def.tool_capabilities) { tool_capabilities = new ToolCapabilities( @@ -108,6 +109,7 @@ void ItemDefinition::reset() stack_max = 99; usable = false; liquids_pointable = false; + eatable = false; if(tool_capabilities) { delete tool_capabilities; @@ -137,6 +139,7 @@ void ItemDefinition::serialize(std::ostream &os) const writeS16(os, stack_max); writeU8(os, usable); writeU8(os, liquids_pointable); + writeU8(os, eatable); std::string tool_capabilities_s = ""; if(tool_capabilities){ std::ostringstream tmp_os(std::ios::binary); @@ -170,6 +173,7 @@ void ItemDefinition::deSerialize(std::istream &is) stack_max = readS16(is); usable = readU8(is); liquids_pointable = readU8(is); + eatable = readU8(is); std::string tool_capabilities_s = deSerializeString(is); if(!tool_capabilities_s.empty()) { diff --git a/src/itemdef.h b/src/itemdef.h index 904b4a2..ac6fd78 100644 --- a/src/itemdef.h +++ b/src/itemdef.h @@ -63,6 +63,7 @@ struct ItemDefinition s16 stack_max; bool usable; bool liquids_pointable; + bool eatable; // May be NULL. If non-NULL, deleted by destructor ToolCapabilities *tool_capabilities; ItemGroupList groups; diff --git a/src/nodedef.cpp b/src/nodedef.cpp index efcb341..2c435df 100644 --- a/src/nodedef.cpp +++ b/src/nodedef.cpp @@ -189,6 +189,7 @@ void ContentFeatures::reset() diggable = true; climbable = false; buildable_to = false; + eatable = false; metadata_name = ""; liquid_type = LIQUID_NONE; liquid_alternative_flowing = ""; @@ -240,6 +241,7 @@ void ContentFeatures::serialize(std::ostream &os) writeU8(os, diggable); writeU8(os, climbable); writeU8(os, buildable_to); + writeU8(os, eatable); os<m_removed) + { return; + } actionstream<getName()<<" punches object " <m_time_from_building = 0.0; + } if(pointed.type == POINTEDTHING_OBJECT) { @@ -3206,7 +3210,9 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id) // Skip if object has been removed if(pointed_object->m_removed) + { return; + } actionstream<getName()<<" right-clicks object " <