| 
					
					
						
							
						
					
					
				 | 
				@ -92,6 +92,44 @@ require "src/mob" | 
			
		
		
	
		
			
				 | 
				 | 
				require "src/projectile" | 
				 | 
				 | 
				require "src/projectile" | 
			
		
		
	
		
			
				 | 
				 | 
				require "src/tower" | 
				 | 
				 | 
				require "src/tower" | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				local sound_toggle_node_tag = "sound-on-off-icon" | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				local function make_sound_toggle_node(on) | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				    local sprite | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				    if on then | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				        sprite = pack_texture_into_sprite(TEXTURES.SOUND_ON1, 40, 30) | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				    else | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				        sprite = pack_texture_into_sprite(TEXTURES.SOUND_OFF, 40, 30) | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				    end | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				    return (am.translate(win.right - 30, win.top - 60) ^ sprite) | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				    :tag(sound_toggle_node_tag) | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				    :action(function() | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				    end) | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				end | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				local cached_music_volume = 0.2 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				local cached_sfx_volume = 0.1 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				local function toggle_mute() | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				    settings.sound_on = not settings.sound_on | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				    if settings.sound_on then | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				        settings.music_volume = cached_music_volume | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				        settings.sfx_volume = cached_sfx_volume | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				    else | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				        cached_music_volume = settings.music_volume | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				        cached_sfx_volume = settings.sfx_volume | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				        settings.music_volume = 0 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				        settings.sfx_volume = 0 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				    end | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				    update_music_volume(settings.music_volume) | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				    win.scene:replace(sound_toggle_node_tag, make_sound_toggle_node(settings.sound_on)) | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				end | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				-- text popup in the middle of the screen that dissapates, call from anywhere | 
				 | 
				 | 
				-- text popup in the middle of the screen that dissapates, call from anywhere | 
			
		
		
	
		
			
				 | 
				 | 
				function alert(message, color) | 
				 | 
				 | 
				function alert(message, color) | 
			
		
		
	
		
			
				 | 
				 | 
				    win.scene:append( | 
				 | 
				 | 
				    win.scene:append( | 
			
		
		
	
	
		
			
				| 
					
					
					
						
							
						
					
				 | 
				@ -117,6 +155,8 @@ function main_action(self) | 
			
		
		
	
		
			
				 | 
				 | 
				        end | 
				 | 
				 | 
				        end | 
			
		
		
	
		
			
				 | 
				 | 
				    elseif win:key_pressed("f4") then | 
				 | 
				 | 
				    elseif win:key_pressed("f4") then | 
			
		
		
	
		
			
				 | 
				 | 
				        win:close() | 
				 | 
				 | 
				        win:close() | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				    elseif win:key_pressed("m") then | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				        toggle_mute() | 
			
		
		
	
		
			
				 | 
				 | 
				    end | 
				 | 
				 | 
				    end | 
			
		
		
	
		
			
				 | 
				 | 
				    if self"hex_backdrop" then | 
				 | 
				 | 
				    if self"hex_backdrop" then | 
			
		
		
	
		
			
				 | 
				 | 
				        self"hex_backdrop""rotate".angle = math.wrapf(self"hex_backdrop""rotate".angle - 0.005 * am.delta_time, math.pi*2) | 
				 | 
				 | 
				        self"hex_backdrop""rotate".angle = math.wrapf(self"hex_backdrop""rotate".angle - 0.005 * am.delta_time, math.pi*2) | 
			
		
		
	
	
		
			
				| 
					
						
							
						
					
					
						
							
						
					
					
				 | 
				@ -236,21 +276,6 @@ function make_main_scene_toolbelt() | 
			
		
		
	
		
			
				 | 
				 | 
				    return am.translate(pixel_offset) ^ group | 
				 | 
				 | 
				    return am.translate(pixel_offset) ^ group | 
			
		
		
	
		
			
				 | 
				 | 
				end | 
				 | 
				 | 
				end | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				function make_sound_toggle_node(on) | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				    local sprite | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				    if on then | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				        sprite = pack_texture_into_sprite(TEXTURES.SOUND_ON1, 40, 30) | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				    else | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				        sprite = pack_texture_into_sprite(TEXTURES.SOUND_OFF, 40, 30) | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				    end | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				    return (am.translate(win.right - 30, win.top - 60) ^ sprite) | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				end | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				function toggle_mute() | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				    settings.sound_on = not settings.sound_on | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				    win.scene:replace("sound-on-off-icon", make_sound_toggle_node(settings.sound_on)) | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				end | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				function main_scene(do_backdrop, do_logo) | 
				 | 
				 | 
				function main_scene(do_backdrop, do_logo) | 
			
		
		
	
		
			
				 | 
				 | 
				    local group = am.group() | 
				 | 
				 | 
				    local group = am.group() | 
			
		
		
	
	
		
			
				| 
					
						
							
						
					
					
					
				 | 
				
  |