 
-- Golden 7's Deluxe example machine
--
-- By Vanessa "VanessaE" Dannenberg
--
-- Most symbol images taken from clker.com
-- others drawn or rendered by me.

minislots.register_machine({
	name = "golden7s_deluxe",
	description = "Golden 7's Deluxe slot machine",
	machine_shape = "upright",
	lines = {           -- reel symbol pay line positions: 0 = center, -1 = top, +1 = bottom
		{  0,  0,  0,  0,  0 }, -- pay line 1: center symbol on each reel
		{ -1, -1, -1, -1, -1 }, -- 2: top symbol on each reel
		{  1,  1,  1,  1,  1 }, -- 3: bottom symbol on each reel
		{ -1, -1,  0,  1,  1 }, -- 4: top of reels 1 and 2, center of 3, bottom of 4 and 5
		{  1,  1,  0, -1, -1 }, -- 5: bottom of reels 1, 2, center 3, top 4, 5
		{ -1, -1, -1,  0,  1 }, -- 6: top of 1, 2, 3, center 4, bottom 5
		{  1,  1,  1,  0, -1 }, -- 7: bottom of 1, 2, 3, center 4, top 5
		{ -1,  0,  1,  1,  1 }, -- 8: top of 1, center 2, bottom 3, 4, 5
		{  1,  0, -1, -1, -1 }, -- 9: bottom of 1, center 2, top 3, 4, 5
		{  1,  0, -1,  0,  1 }, -- 10: bottom 1, center 2, top 3, center 4, bottom 5
		{ -1,  0,  1,  0, -1 }, -- 11: top 1, center 2, bottom 3, center 4, top 5
		{  0, -1, -1, -1, -1 }, -- 12: center 1, top 2, 3, 4, 5
		{  0,  1,  1,  1,  1 }, -- 13: center 1, bottom 2, 3, 4, 5
		{ -1, -1, -1, -1,  0 }, -- 14: top 1, 2, 3, 4, center 5
		{  1,  1,  1,  1,  0 }, -- 15: bottom 1, 2, 3, 4, center 5
	},
	symbols = {
		"bar",
		"lemon",
		"77",
		"cherry",
		"jackpot",
		"melon",
		"2bar",
		"lemon",
		"wild",
		"7",
		"bell",
		"scatter",
		"3bar",
		"777",
		"melon",
		"bonus"
	},
	linebuttons = { -- number of lines on each button, from left to right
		1,
		3,
		5,
		9,
		15
	},
	betbuttons = { -- line bet amount on each button, from left to right
		1,
		2,
		5,
		10,
		25
	},
	matches = { -- nil == don't care about that reel in a given match
		{   1, "lemon"   ,  "lemon"   ,  nil       ,   nil      ,  nil       },
		{   2, "lemon"   ,  "lemon"   ,  "lemon"   ,   nil      ,  nil       },
		{   3, "lemon"   ,  "lemon"   ,  "lemon"   ,   "lemon"  ,  nil       },
		{   5, "lemon"   ,  "lemon"   ,  "lemon"   ,   "lemon"  ,  "lemon"   },

		{   5, "melon"   ,  "melon"   ,  "melon"   ,   nil      ,  nil       },
		{   6, "melon"   ,  "melon"   ,  "melon"   ,   "melon"  ,  nil       },
		{   7, "melon"   ,  "melon"   ,  "melon"   ,   "melon"  ,  "melon"   },

		{   7, "cherry"  ,  "cherry"  ,  nil       ,  nil       ,  nil       },
		{   8, "cherry"  ,  "cherry"  ,  "cherry"  ,  nil       ,  nil       },
		{   9, "cherry"  ,  "cherry"  ,  "cherry"  ,  "cherry"  ,  nil       },
		{  10, "cherry"  ,  "cherry"  ,  "cherry"  ,  "cherry"  ,  "cherry"  },

		{  10, "bell"    ,  "bell"    ,  "bell"    ,  nil       ,  nil       },
		{  15, "bell"    ,  "bell"    ,  "bell"    ,  "bell"    ,  nil       },
		{  20, "bell"    ,  "bell"    ,  "bell"    ,  "bell"    ,  "bell"    },

		{  25,
			{"bar", "2bar", "3bar"},
			{"bar", "2bar", "3bar"},
			{"bar", "2bar", "3bar"},
			{"bar", "2bar", "3bar"},
			{"bar", "2bar", "3bar"}
		},

		{  30, "bar"     ,  "bar"     ,  "bar"     ,  nil       ,  nil       },
		{  35, "bar"     ,  "bar"     ,  "bar"     ,  "bar"     ,  nil       },
		{  40, "bar"     ,  "bar"     ,  "bar"     ,  "bar"     ,  "bar"     },

		{  50, "2bar"    ,  "2bar"    ,  "2bar"    ,  nil       ,  nil       },
		{  55, "2bar"    ,  "2bar"    ,  "2bar"    ,  "2bar"    ,  nil       },
		{  60, "2bar"    ,  "2bar"    ,  "2bar"    ,  "2bar"    ,  "2bar"    },

		{  70, "3bar"    ,  "3bar"    ,  "3bar"    ,  nil       ,  nil       },
		{  73, "3bar"    ,  "3bar"    ,  "3bar"    ,  "3bar"    ,  nil       },
		{  75, "3bar"    ,  "3bar"    ,  "3bar"    ,  "3bar"    ,  "3bar"    },

		{  80,
			{"7", "77", "777"},
			{"7", "77", "777"},
			{"7", "77", "777"},
			{"7", "77", "777"},
			{"7", "77", "777"}
		},

		{  85, "7"       ,  "7"       ,  "7"       ,  nil       ,  nil       },
		{  88, "7"       ,  "7"       ,  "7"       ,  "7"       ,  nil       },
		{  90, "7"       ,  "7"       ,  "7"       ,  "7"       ,  "7"       },

		{  90, "77"      ,  "77"      ,  "77"      ,  nil       ,  nil       },
		{  95, "77"      ,  "77"      ,  "77"      ,  "77"      ,  nil       },
		{ 100, "77"      ,  "77"      ,  "77"      ,  "77"      ,  "77"      },

		{ 100, "777"     ,  "777"     ,  "777"     ,  nil       ,  nil       },
		{ 125, "777"     ,  "777"     ,  "777"     ,  "777"     ,  nil       },

		{ 150, "777"     ,  "777"     ,  "777"     ,  "777"     ,  "777"     },

		{ 300, "jackpot" ,  "jackpot" ,  "jackpot" , "jackpot"  ,  "jackpot" },

	},
	paytable_desc = {
		{ "@lemon", "@lemon", "@X", "@X", "@X", " pays 1"} ,
		{ "@lemon", "@lemon", "@lemon", "@X", "@X", " pays 2" },
		{ "@lemon", "@lemon", "@lemon", "@lemon", "@X", " pays 3"},
		{ "@lemon", "@lemon", "@lemon", "@lemon", "@lemon", " pays 5" },

		{ "@melon", "@melon", "@melon", "@X", "@X", " pays 5"},
		{ "@melon", "@melon", "@melon", "@melon", "@X", " pays 6" },
		{ "@melon", "@melon", "@melon", "@melon", "@melon", " pays 7" },

		{ "@cherry", "@cherry", "@X", "@X", "@X", " pays 7" },
		{ "@cherry", "@cherry", "@cherry", "@X", "@X", " pays 8" }, 
		{ "@cherry", "@cherry", "@cherry", "@cherry", "@X", " pays 9" },
		{ "@cherry", "@cherry", "@cherry", "@cherry", "@cherry", " pays 10" },

		{ "@bell", "@bell", "@bell", "@X", "@X", " pays 10" },
		{ "@bell", "@bell", "@bell", "@bell", "@X", " pays 15" }, 
		{ "@bell", "@bell", "@bell", "@bell", "@bell", " pays 20" },

		{ "Any five ", "@bar", "/", "@2bar", "/", "@3bar", " pays 25" },
		{ "@bar", "@bar", "@bar", "@X", "@X", " pays 30" },
		{ "@bar", "@bar", "@bar", "@bar", "@X", " pays 35" },
		{ "@bar", "@bar", "@bar", "@bar", "@bar", " pays 40" },

		{ "@2bar", "@2bar", "@2bar", "@X", "@X", " pays 50" },
		{ "@2bar", "@2bar", "@2bar", "@2bar", "@X", " pays 55" },
		{ "@2bar", "@2bar", "@2bar", "@2bar", "@2bar", " pays 60" },

		{ "@wild", " matches any symbol except ", "@scatter", " ", "@bonus", " or ", "@jackpot" },
		{ "All wins are multiplied by your line bet." },

		"@wrap",

		{ "@3bar", "@3bar", "@3bar", "@X", "@X", " pays 70" },
		{ "@3bar", "@3bar", "@3bar", "@3bar", "@X", " pays 73" },
		{ "@3bar", "@3bar", "@3bar", "@3bar", "@3bar", " pays 75" },

		{ "Any five ", "@7", "/", "@77", "/", "@777", " pays 80" },
		{ "@7", "@7", "@7", "@X", "@X", " pays 85" },
		{ "@7", "@7", "@7", "@7", "@X", " pays 88" },
		{ "@7", "@7", "@7", "@7", "@7", " pays 90" },

		{ "@77", "@77", "@77", "@X", "@X", " pays 90" },
		{ "@77", "@77", "@77", "@77", "@X", " pays 95" },
		{ "@77", "@77", "@77", "@77", "@77", " pays 100" },

		{ "@777", "@777", "@777", "@777", "@777", " pays 150" },
		{ "@jackpot", "@jackpot", "@jackpot", "@jackpot", "@jackpot", " pays 300" },

	},
	paylines_desc = {
		"Paylines 1 - 3:",
		"@1 3",
		"Paylines 4 and 5:",
		"@4 5",
		"Paylines 6 and 7:",
		"@6 7",
		"Paylines 8 and 9:",
		"@8 9",
		"Paylines 10 and 11:",
		"@10 11",
		"Paylines 12 - 15:",
		"@12 15"
	},
	maxbalance = 3260000,			-- 65535 50 Mg notes, minus maximum possible payout, minus a fudge amount
	currency_min = 1,				-- smallest and largest denominations of minegeld to allow
	currency_max = 100,
	bet_initiates_spin = true,		-- Most machines initiate a spin when the user presses a "Bet n" button, using
									-- the selected bet value.

									-- timings should be an even multiple of the step interval (usually 0.1s)
	reel_fast_timeout = 0.2,		-- time between "frames" while spinning fast, medium speed, or slow
	reel_medium_timeout = 0.1,
	reel_slow_timeout = 0.1,
	cutover_frames = 5,				-- number of frames to run for each fast, medium, and slow cycle
	inter_reel_steps = 3,			-- number of frames between stopping reels (using slow timeout)

	win_delay = 0.5,				-- time to wait after reels stop before showing winning lines
	line_timeout = 1,				-- time to wait between cycling among winning lines
	half_stops_weight = 5,			-- likelihood that a reel will stop between symbols, max 100 (if you want to
									-- disable that behavior and always land on a symbol, set this to 1).
	min_scatter = 3,				-- minimum number of scatter symbols needed before computing a scatter win
	scatter_value = 3,				-- value of the scatter symbol, will be multiplied by number visible * line bet
	min_bonus = 4,					-- minimum number of symbols needed to trigger the bonus round
	initiate_bonus = function(spin, def)
		return 400
	end,
	wild_doesnt_match = {
		jackpot = true
	},
	wild_multiplier = 1,				-- For every wild that contributes to a line win, multiply win by this
										-- (so one wild mult. by this, two mult. by twice this, etc)

	geometry = {						-- all measures are in Minetest formspec "inventory slots" units

		base_user_interface_width = 14.667,	-- width of the user interface
		upper_section_height = 11,		-- height of the upper section (the reels et. al)
		lower_section_height = 2,		-- height of lower section (screen, buttons)

		reel_posx = 1,					-- X/Y position of first reel, others drawn as indicated below
		reel_posy = 1,

		reel_sizex = 2,					-- Nominal X/Y size of one reel.  Note that reels are drawn with a
		reel_sizey = 9,					-- spacing of 1.3333 times their width (leaves a 0.6667 IU gap between
										-- reels on this machine).

		button_rows_posx = 6.9,			-- X starting pos for "n Lines"/"Bet n" buttons, Y pos for Spin button
		spin_cashout_posx = 12.75,		-- X pos for Spin and Cash-out/Quit buttons
		button_rows_posy = 11.14,		-- Y pos for "n Lines" row, and Cash Out/Quit button

		main_button_size = 0.8,			-- X/Y size of Lines/Bet buttons; X*2 x Y for Spin and Cash Out
		main_button_spacing = 0.9,		-- X/Y Spacing between Lines/Bet buttons, and between Spin and
										-- Cash Out buttons

		button_help_sizex = 1.6,		-- Size and position of the "Help / Pays" button
		button_help_sizey = 0.8,
		button_help_posx = 0.125,
		button_help_posy = 10.0938,

		screen_posx = 0.125,			-- X/Y position of top-left corner of lower screen (i.e. (0,0))
		screen_posy = 11.094,

		screen_line_height = 0.875,		-- Height of line 1, and 2 in 2-line mode.  In 3-line mode, line 2
										-- hight will be 2/3 of this, and line 3 height will be 1/3 of it.

		label_medium_sizex = 1.125,		-- X size of "Bal:", "Bet:", "Win:".
		line_win_label_sizex = 2.0,		-- X size of "Line Win" label
		scatter_win_label_sizex = 3.0,	-- X size of "Scatter Win:" label
		bonus_win_label_sizex = 2.75,	-- X size of "Bonus Win:" label

		digit_glyph_sizex = 0.75,		-- Nominal X size of digits, before scaling down as noted below

		cash_slot_sizex = 5.0,			-- X/Y size and position of the cash slot
		cash_slot_sizey = 0.8125,
		cash_slot_posx = 9.5781,
		cash_slot_posy = 10.0938,
		cash_slot_cin_posx = 1.9,		-- X/Y position within the "cash intake" form (uses the same size as
		cash_slot_cin_posy = 2.27,		-- above)

		paytable_column1 = 0.65,		-- position of left/right columns in the paytable screen.
		paytable_column2 = 6.9,
		paytable_posy = 0.25,
		paytable_lineheight = 0.5,		-- height of a pay table line. sets the Y spacing of the lines, and the
										-- X/Y size of reel symbols shown therein, minus a bit of padding.
		paytable_textheight = 0.35,		-- height of printed text within said line, which will be vert. centered
		paytable_textshift = 0.075,		-- use this to fine tune the text vertical position relative to symbols

		paylines_column1 = 1.5,			-- position of left and right columns in paylines screen
		paylines_column2 = 7.25,
		paylines_posy = 0.2,			-- position of first row
		paylines_sizex = 4,				-- size of the pay lines graphic
		paylines_sizey = 3,
		paylines_lineheight = 0.65,		-- text line height and font height
		paylines_textheight = 0.35,
		paylines_img_padding = 0.3		-- extra blank space to add below pay lines graphic
	}
})
