Version MFF.
							
								
								
									
										0
									
								
								LICENSE.txt
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
							
								
								
									
										0
									
								
								README.txt
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
							
								
								
									
										0
									
								
								depends.txt
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
							
								
								
									
										123
									
								
								init.lua
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						| @@ -1,37 +1,34 @@ | ||||
|  | ||||
| local BALL_PUSH_CHECK_INTERVAL = 0.1 | ||||
|  | ||||
| local function reg_ball(color) | ||||
|  | ||||
| 	local ball_item_name = "soccer:ball_"..color.."_item" | ||||
| 	local ball_ent_name = "soccer:ball_"..color.."_entity" | ||||
| 	local ball_item_name = "soccer:ball_" .. color .. "_item" | ||||
| 	local ball_ent_name = "soccer:ball_" .. color .. "_entity" | ||||
|  | ||||
| 	minetest.register_entity(ball_ent_name, { | ||||
| 		physical = true, | ||||
| 		hp_max = 32767, | ||||
| 		collide_with_objects = false, | ||||
| 		visual = "mesh", | ||||
| 		visual_size = {x = 1.125, y = 1.125, z = 1.125}, | ||||
| 		mesh = "soccer_ball.x", | ||||
| 		hp_max = 1000, | ||||
| 		groups = { immortal = true }, | ||||
| 		textures = { "soccer_ball_"..color..".png" }, | ||||
| 		collisionbox = { -0.2, -0.2, -0.2, 0.2, 0.2, 0.2 }, | ||||
|  | ||||
| 		groups = {immortal = true}, | ||||
| 		textures = {"soccer_ball_" .. color .. ".png"}, | ||||
| 		collisionbox = { -0.25, -0.25, -0.25, 0.25, 0.25, 0.25}, | ||||
| 		timer = 0, | ||||
|  | ||||
| 		on_step = function(self, dtime) | ||||
| 			self.timer = self.timer + dtime | ||||
| 			if self.timer >= BALL_PUSH_CHECK_INTERVAL then | ||||
| 				self.object:setacceleration({x=0, y=-10, z=0}) | ||||
| 			if self.timer >= 0.2 then | ||||
| 				self.object:setacceleration({x = 0, y = -14.5, z = 0}) | ||||
| 				self.timer = 0 | ||||
| 				local vel = self.object:getvelocity() | ||||
| 				local p = self.object:getpos(); | ||||
| 				p.y = p.y - 0.5 | ||||
| 				if minetest.registered_nodes[minetest.env:get_node(p).name].walkable then | ||||
| 					vel.x = vel.x * 0.85 | ||||
| 					if vel.y < 0 then vel.y = vel.y * -0.65 end | ||||
| 					vel.z = vel.z * 0.90 | ||||
| 					vel.x = vel.x * 0.9 | ||||
| 					if vel.y < 0 then vel.y = vel.y * -0.6 end | ||||
| 					vel.z = vel.z * 0.9 | ||||
| 				end | ||||
| 				if  (math.abs(vel.x) < 0.1) | ||||
| 				 and (math.abs(vel.z) < 0.1) then | ||||
| 				if (math.abs(vel.x) <= 0.1) and (math.abs(vel.z) <= 0.1) then | ||||
| 					vel.x = 0 | ||||
| 					vel.z = 0 | ||||
| 				end | ||||
| @@ -39,14 +36,12 @@ local function reg_ball(color) | ||||
| 				local pos = self.object:getpos() | ||||
| 				local objs = minetest.env:get_objects_inside_radius(pos, 1) | ||||
| 				local player_count = 0 | ||||
| 				local final_dir = { x=0, y=0, z=0 } | ||||
| 				local final_dir = {x = 0, y = 0, z = 0} | ||||
| 				for _,obj in ipairs(objs) do | ||||
| 					if obj:is_player() then | ||||
| 						local objdir = obj:get_look_dir() | ||||
| 						local mul = 1 | ||||
| 						if (obj:get_player_control().sneak) then | ||||
| 							mul = 3 | ||||
| 						end | ||||
| 						if (obj:get_player_control().sneak) then mul = 2 end | ||||
| 						final_dir.x = final_dir.x + (objdir.x * mul) | ||||
| 						final_dir.y = final_dir.y + (objdir.y * mul) | ||||
| 						final_dir.z = final_dir.z + (objdir.z * mul) | ||||
| @@ -54,10 +49,11 @@ local function reg_ball(color) | ||||
| 					end | ||||
| 				end | ||||
| 				if final_dir.x ~= 0 or final_dir.y ~= 0 or final_dir.z ~= 0 then | ||||
| 					final_dir.x = (final_dir.x * 5) / player_count | ||||
| 					final_dir.y = (final_dir.y * 5) / player_count | ||||
| 					final_dir.z = (final_dir.z * 5) / player_count | ||||
| 					final_dir.x = (final_dir.x * 7.2) / player_count | ||||
| 					final_dir.y = (final_dir.y * 9.6) / player_count | ||||
| 					final_dir.z = (final_dir.z * 7.2) / player_count | ||||
| 					self.object:setvelocity(final_dir) | ||||
| 					minetest.sound_play("default_dig_oddly_breakable_by_hand", {object = self.object, gain = 0.5}) | ||||
| 				end | ||||
| 			end | ||||
| 		end, | ||||
| @@ -72,8 +68,7 @@ local function reg_ball(color) | ||||
|  | ||||
| 		is_moving = function(self) | ||||
| 			local v = self.object:getvelocity() | ||||
| 			if  (math.abs(v.x) <= 0.1) | ||||
| 			 and (math.abs(v.z) <= 0.1) then | ||||
| 			if (math.abs(v.x) <= 0.1) and (math.abs(v.z) <= 0.1) then | ||||
| 				v.x = 0 | ||||
| 				v.z = 0 | ||||
| 				self.object:setvelocity(v) | ||||
| @@ -86,22 +81,28 @@ local function reg_ball(color) | ||||
| 	minetest.register_craftitem(ball_item_name, { | ||||
| 		description = "Soccer Ball ("..color..")", | ||||
| 		inventory_image = "soccer_ball_"..color.."_inv.png", | ||||
|  | ||||
| 		wield_scale = {x = 0.75, y = 0.75, z = 4.5}, | ||||
| 		on_place = function(itemstack, placer, pointed_thing) | ||||
| 			local pos = pointed_thing.above | ||||
| 			--pos = { x=pos.x+0.5, y=pos.y, z=pos.z+0.5 } | ||||
| 			-- pos = { x =pos.x + 0.5, y = pos.y, z = pos.z + 0.5 } | ||||
| 			local ent = minetest.env:add_entity(pos, ball_ent_name) | ||||
| 			ent:setvelocity({x=0, y=-15, z=0}) | ||||
| 			minetest.log("action", placer:get_player_name() .. " placed a ball at " .. minetest.pos_to_string(pointed_thing.above) .. ".") | ||||
| 			ent:setvelocity({x = 0, y = -14.5, z = 0}) | ||||
| 			if not minetest.setting_getbool("creative_mode") then | ||||
| 				itemstack:take_item() | ||||
| 			end | ||||
| 			return itemstack | ||||
| 		end, | ||||
| 	}) | ||||
|  | ||||
| 	if color == "purple" then | ||||
| 		color = "pink" | ||||
| 	end | ||||
| 	minetest.register_craft({ | ||||
| 		output = ball_item_name, | ||||
| 		recipe = { | ||||
| 			{ "", "wool:white", "" }, | ||||
| 			{ "wool:white", "wool:"..color, "wool:white" }, | ||||
| 			{ "wool:white", "wool:" .. color, "wool:white" }, | ||||
| 			{ "", "wool:white", "" }, | ||||
| 		}, | ||||
| 	}) | ||||
| @@ -116,64 +117,8 @@ for _,color in ipairs(colors) do | ||||
| 	reg_ball(color) | ||||
| end | ||||
|  | ||||
| minetest.register_node("soccer:goal", { | ||||
| 	description = "Soccer Goal", | ||||
| 	drawtype = "nodebox", | ||||
| 	paramtype = "light", | ||||
| 	paramtype2 = "facedir", | ||||
| 	tiles = { "soccer_white.png" }, | ||||
| 	sunlight_propagates = true, | ||||
| 	groups = { snappy=1, cracky=1, fleshy=1, oddly_breakable_by_hand=1 }, | ||||
| 	node_box = { | ||||
| 		type = "fixed", | ||||
| 		fixed = { | ||||
| 			{ -2.5, -0.5, -0.1, -2.3, 1.5, 0.1 }, | ||||
| 			{  2.3, -0.5, -0.1,  2.5, 1.5, 0.1 }, | ||||
| 			{ -2.5,  1.5, -0.1,  2.5, 1.7, 0.1 }, | ||||
| 		}, | ||||
| 	}, | ||||
| }) | ||||
| minetest.register_alias("ball", "soccer:ball_black_item") -- For quickly using the /give command. | ||||
|  | ||||
| local nb_decal = { | ||||
| 	type = "fixed", | ||||
| 	fixed = {{ -0.5, -0.5, -0.5, 0.5, -0.499, 0.5 }}, | ||||
| }, | ||||
|  | ||||
| minetest.register_node("soccer:goal_mark", { | ||||
| 	description = "Soccer Goal Mark", | ||||
| 	drawtype = "nodebox", | ||||
| 	paramtype = "light", | ||||
| 	node_box = nb_decal, | ||||
| 	walkable = false, | ||||
| 	inventory_image = "soccer_goal_mark.png", | ||||
| 	tiles = { "soccer_goal_mark.png" }, | ||||
| 	sunlight_propagates = true, | ||||
| 	groups = { snappy=1, cracky=1, fleshy=1, oddly_breakable_by_hand=1 }, | ||||
| }) | ||||
|  | ||||
| local function reg_decal(name, desc) | ||||
| 	texture = "soccer_"..name..".png" | ||||
| 	minetest.register_node("soccer:"..name, { | ||||
| 		description = desc, | ||||
| 		drawtype = "nodebox", | ||||
| 		paramtype = "light", | ||||
| 		paramtype2 = "facedir", | ||||
| 		node_box = nb_decal, | ||||
| 		walkable = false, | ||||
| 		inventory_image = texture, | ||||
| 		wield_image = texture, | ||||
| 		tiles = { texture }, | ||||
| 		sunlight_propagates = true, | ||||
| 		groups = { snappy=1, cracky=1, fleshy=1, oddly_breakable_by_hand=1 }, | ||||
| 	}) | ||||
| if minetest.setting_getbool("log_mods") then | ||||
| 	minetest.log("action", "Carbone: [soccer] loaded.") | ||||
| end | ||||
|  | ||||
| reg_decal("line_i", "Straight Line") | ||||
| reg_decal("line_l", "L line") | ||||
| reg_decal("line_t", "T Line") | ||||
| reg_decal("line_p", "+ Line") | ||||
| reg_decal("line_d", "Diagonal Line") | ||||
| reg_decal("line_point", "Point") | ||||
| reg_decal("line_corner", "Corner") | ||||
|  | ||||
| minetest.register_alias("ball", "soccer:ball_item_black") | ||||
|   | ||||
							
								
								
									
										0
									
								
								models/soccer_ball.x
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								textures/soccer_ball_black.png
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						| Before Width: | Height: | Size: 180 B After Width: | Height: | Size: 93 B | 
| Before Width: | Height: | Size: 193 B After Width: | Height: | Size: 162 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/soccer_ball_blue.png
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						| Before Width: | Height: | Size: 148 B After Width: | Height: | Size: 93 B | 
| Before Width: | Height: | Size: 266 B After Width: | Height: | Size: 162 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/soccer_ball_green.png
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						| Before Width: | Height: | Size: 145 B After Width: | Height: | Size: 93 B | 
| Before Width: | Height: | Size: 278 B After Width: | Height: | Size: 178 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/soccer_ball_purple.png
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						| Before Width: | Height: | Size: 149 B After Width: | Height: | Size: 93 B | 
| Before Width: | Height: | Size: 266 B After Width: | Height: | Size: 162 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/soccer_ball_red.png
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						| Before Width: | Height: | Size: 145 B After Width: | Height: | Size: 93 B | 
| Before Width: | Height: | Size: 262 B After Width: | Height: | Size: 162 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/soccer_ball_yellow.png
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						| Before Width: | Height: | Size: 149 B After Width: | Height: | Size: 93 B | 
| Before Width: | Height: | Size: 264 B After Width: | Height: | Size: 162 B | 
| Before Width: | Height: | Size: 96 B | 
| Before Width: | Height: | Size: 130 B | 
| Before Width: | Height: | Size: 118 B | 
| Before Width: | Height: | Size: 86 B | 
| Before Width: | Height: | Size: 101 B | 
| Before Width: | Height: | Size: 97 B | 
| Before Width: | Height: | Size: 105 B | 
| Before Width: | Height: | Size: 94 B | 
| Before Width: | Height: | Size: 86 B |