Bakugan Battle Brawlers

DVD Volume 13 cover

***Bakugan Battle Brawlers***|Template:RubyTemplate:Rubyバトルブローラーズ|Bakugan Batoru Burōrāzu}} is a Japanese-Canadian anime adventure television series produced by TMS Entertainment, Dentsu Inc., and Nelvana Animation under the direction of Mitsuo Hashimoto. The story centers on the lives of creatures called Bakugan and the "battle brawlers" who possess them. The Bakugan franchise itself is a joint venture between Sega Toys and Spin Master.

Although originally broadcast by TV Tokyo in Japan, follow-up seasons (*New Vestroia* and *Gundalian Invaders*), premiered in Canada and the US before Japan. The fourth and final season, *Mechtanium Surge*, was never broadcast in Japan and instead aired in North American markets. However, a Japan-exclusive manga series, *Baku Tech! Bakugan*, ran from August 15, 2010 to January 15, 2014. This received an anime adaption aired on TV Tokyo from April 7, 2012 to March 30, 2013, followed by a second season called *Baku Tech! Bakugan Gachi* which ran from April 6, 2013 to December 28, 2013.

In 2015, Spin Master revealed plans to relaunch *Bakugan*. The relaunch was later announced on November 30, 2017 to occur in the first quarter of 2019, with the series title announced as *Bakugan: Battle Planet*. The new series premiered on Cartoon Network in the United States on December 23, 2018, while Canada's Teletoon premiered the series on December 31, 2018.

## *Bakugan Battle Brawlers* plot

Template:Long plot

*Main article: List of Bakugan Battle Brawlers characters*
### Season 1

Dan Kuso's life changes one day when cards fall out of the sky and he grabs one, which he and his friend Shun use to invent a game they call "Bakugan." With other friends, they form a group called the "Bakugan Battle Brawlers." They then are accidentally dragged into fighting for the fate of Vestroia (the home dimension of Bakugans).

Vestroia loses its natural balance and merges with the Earth and many other worlds. A rogue Bakugan called "Naga" has been tempted to capture the power of the Infinity and Silent Cores, which together formed the Perfect Core that balanced Vestroia, but Naga has absorbed too much negative energy and thus has been trapped within the Silent Core, destabilizing Vestroia. Naga now seeks the mighty Infinity Core so that he can complete the all-powerful Perfect Core and have almighty power and absolute control over Earth and Vestroia.

Dan and the brawlers therefore decide to bring back balance by:

* meeting new friends and allies in the other worlds;
* learning more about the origin of the Bakugan; and
* facing down Naga.

### Season 2: *New Vestroia*

Two of the six Battle Brawlers (Dan and Marucho) return to New Vestroia and discover that it has been colonized by an alien race called Vestals, who are unaware that the Bakugan are intelligent beings. However, three Vestals--Mira, Ace and Baron--encounter Shun, an old friend of Dan and Marucho. In this way, Dan learns the truth about Bakugan, and as a result he forms the Bakugan Brawlers Resistance.

While battling against the evil Vexos, the top Vestal brawlers, who follow the rules of their Prince. The Brawlers destroy each of the three Dimension Controllers that keep the Bakugan in their ball form, liberating New Vestroia. The Resistance part but reunite six months later when they discover that King Zenoheld of Vestal has attacked the Six Ancient Warriors in an attempt to steal the Attribute Energies. The Six Ancient Warriors engage in a 6-on-1 battle with Zenoheld, but are unable to defeat Zenoheld's Mechanical Bakugan, Farbros.

In desperation, the Ancient Warriors give the Resistance Bakugan their attribute energies to protect them from Zenoheld, who has the Bakugan Termination System, a machine built to wipe out all Bakugan but needs the Attribute Energies to power it. These energies result in the six Bakugan evolving. After losing half the energies, the Brawlers decided to attack instead, engaging a temporary alliance with Spectra Phantom, the former leader of the Vexos, along with his sidekick Gus Grav. However, the remaining energies are taken and the Brawlers rush to New Vestroia to evacuate all the Bakugan. Drago, however, refuses to give up, manages to destroy the BT System by absorbing all 6 Attribute Energies and evolves again into Helix Dragonoid.

Things quiet down until Spectra resurfaces again to battle Dan; when he loses, he concedes that Dan is number one and joins the Brawlers, returning to his original self, Keith Clay. Keith reveals that Zenoheld is working on a powerful weapon called the Alternative System and helps construct Battle Gear for Drago. Meanwhile, the Vexos begin crumbling from within as both Volt and Lync decide to leave, feeling that Zenoheld and his son Hydron have finally gone too far but are quickly disposed of by Prince Hydron. In the final battle, the Brawlers with Gus, who joins as their newest member, manage to destroy the Alternative System and the Resistance go their separate ways.

### Season 3: *Gundalian Invaders*

After defeating Zenoheld, the Brawlers return to Earth and with the help of newcomer Ren, they set up Bakugan Interspace. However, Ren is not all that he seems to be and reveals that he is a Gundalian in need of help, saying that his planet Gundalia, is under attack by Neathia. Shun is not convinced and discovers, that Ren is lying once Princess Fabia showed and proved Ren's story wrong. The Brawlers agree to help Fabia and head to Neathia to help fight off the Gundalians. Meanwhile, Ren begins showing signs of distrust for Barodius (Gundalia's Tyrannical Emperor) and eventually defects to rejoin the Brawlers. Unfortunately, Jake is captured by Kazarina (Gundalia's leading Bakugan biologist) and brainwashed, so the Brawlers head to Gundalia to rescue him along with Ren's imprisoned teammates (who were imprisoned for failure), joined by Nurzak (a former advisor to Barodious, who turned against him when he saw he would lead Gundalia to ruin) and Mason Brown (a teammate who had escaped imprisonment, and who had also sided with Neathia). Once they do, the Twelve Orders mount a final attack on Neathia. The Brawlers rush back in time to defend the planet while Dan and Barodius engage in their final battle. Ren and Mason's teammates Jesse Glenn, Lena Isis and Zenet Surrow are freed from their brainwashed state after Kazarina's demise. Linehalt uses his Forbidden Powers to restore the war-torn Neathia, while Barodius and Dharak are destroyed by an overload of vast energy and power from the Sacred Orb (which they tried to take anyway, despite Dan and Drago defeating them), which grants Drago new strength and abilities, allows him to evolve into Titanium Dragonoid and granting him the status of ruler over *all* Bakugan.

### Season 4: *Mechtanium Surge*

#### Part 1

The Brawlers' reign as number one in Bakugan Interspace is ended by two new powerful teams: Team Anubias and Team Sellon. To make matters worse, Dan and Drago continuously suffer from visions sent to them by Mag Mel and Razenoid. These cause them to lose fans rapidly when Drago loses control in battle several times, threatening the lives of all the children in Interspace. Shun and Marucho find themselves unable to help as Dan is keeping everything to himself. When Dan loses control once again and nearly kills Anubias in battle, all of Dan's fans abandon him and he leaves for New Vestroia to train. Shun, meanwhile, takes the reins of leader of the Battle Brawlers and charges himself with the task of returning the Brawlers to their former glory. He becomes more and more uncaring and brushes off all opinions but his own while Marucho tries to help him be a better leader. Paige and Rafe show up to learn from them, but find them in disarray. Meanwhile, Dan and Drago fix their problem and prepare to come back. Eventually, Dan controls Drago's powers as Marucho and Shun reunite and join up with Paige and Rafe. When the Chaos Bakugan start destroying Interspace, Spectra appears out of nowhere to help the Brawlers out and destroys many of the Chaos Bakugan. Afterwards, Dan returns, but is out of sync and accidentally defeats his fellow brawlers with Zenthon. He tells them later about Mag Mel (Spectra left beforehand, disappointed in Dan having changed). Shun walks out and dismisses Taylean's words. Dan later has a vision (which is true) about Gundalia being attacked by Mag Mel (who is now free). Dan arrives and tells them about Gundalia, which Paige confirms unexpectedly. The Brawlers dismiss Dan and don't let him go, but Dan says somewhat angrily that he's not asking; he's telling them that he is an original brawler and isn't gonna be cut from this fight. They let him come along and save Ren's home world.

Then they face Mag Mel and discover Interspace being destroyed, so they go back to Earth to save it but they are trapped and must figure a way to save the gate, the key, the battlers and Interspace. Just then, Anubias and Sellon reveal themselves as artificial life forms created by Mag Mel to assure his resurrection and succeeded in taking Dan's Key. In a new battle, Dan finds out that Mag Mel is actually Barodius, who survived his last encounter on Neathia after being transported to the dark reversed dimension created by Code Eve. He later plans to destroy Earth, Gundalia, Neathia, Vestal and New Vestroia by sending every civilization to the dark reversed dimension. Dan and Drago have a final brawl against Mag Mel and Razenoid with Drago evolving one more time into the legendary Fusion Dragonoid. They manage to win, but before "disappearing", Mag Mel says that his final demise will cause another disaster to befall on Dan and Drago.

#### Part 2

A few months later, Bakugan City is shown to have a peaceful start as humans have now communed with the Bakugan from New Vestroia. Not all is well when 4 Mechtogan led by Coredegon, who have broken free from their Bakugan, start terrorizing the place. Not only that, but some new enemy called Wiseman has appeared with ancient Bakugan called the Nonets. At the beginning, The Brawlers get confused because Wiseman somehow had the appearance of Gunz Lazar, the new Haos Brawler who disappeared after the four Mechtogan attacked Bakugan City. But it was later revealed that Wiseman was actually Coredegon in disguise while the real Gunz was put in a coma so his negative energy was absorbed. After Coredegon alongside his pals (in his combined form as a Mechtogan Destroyer) sent the Brawlers to the Doom Dimension, he completely destroyed the Earth and New Vestroia. With Gunz back to his normal state, Dan and the others travel through time in order to stop Mechtavius Destroyer from killing every human and Bakugan. In the final battle, Dragonoid Destroyer, who is Drago's last Mechtogan, acquires an infinite power that comes from the bond between Bakugan and humans all over the world, which gave them a chance to defeat the Nonet Mechtogan and send them back between dimensions. Dan's friends throw him a party, but soon discover Dan is missing. Shun sees Dan and Drago sailing off using a boat borrowed from Kato. Dan says that another adventure is waiting for him and Drago, and that he had enough time in the spotlight, such that he wants to let other Brawlers to rise to his rank.

## Other media

### Anime series

#### *Bakugan Battle Brawlers*

*Main article: List of Bakugan Battle Brawlers episodes*
The first episode of the anime television series (produced by TMS Entertainment, Dentsu Inc., and Japan Vistec under the direction of Mitsuo Hashimoto), made its debut in Japan on TV Tokyo on April 5, 2007 and was rebroadcast six days later on BS Japan. Nelvana Limited produced the English-language version and premiered the series on the Canadian network Teletoon in July 2007 and then on Cartoon Network on February 24, 2008. An alternative English dub produced by Odex with all the character names kept in Japanese premiered on Cartoon Network Singapore. The series currently reruns on Kabillion.

#### *New Vestroia*

*Main article: List of Bakugan Battle Brawlers: New Vestroia episodes*
In March 2009, TMS and Nelvana Entertainment companies announced that a follow-up series, ***Bakugan Battle Brawlers: New Vestroia*** (Template:RubyTemplate:Rubyバトルブローラーズニューヴェストロイア, *Bakugan Batoru Burōrāzu Nyū Vesutoroia*)--------------------------------------------------------------------------------
-- --
-- CATEGORY HANDLER --
-- --
-- This module implements the Template loop detected: Template:Category handler template in Lua, --
-- with a few improvements: all namespaces and all namespace aliases --
-- are supported, and namespace names are detected automatically for --
-- the local wiki. This module requires Module:Namespace detect --
-- and Module:Yesno to be available on the local wiki. It can be --
-- configured for different wikis by altering the values in --
-- Module:Category handler/config, and pages can be blacklisted --
-- from categorisation by using Module:Category handler/blacklist. --
-- --

-- Load required modules
local yesno = require('Module:Yesno')

-- Lazily load things we don't always need
local mShared, mappings

local p = {}

-- Helper functions

local function trimWhitespace(s, removeBlanks)
 if type(s) ~= 'string' then
 return s
 end
 s = s:match('^%s\*(.-)%s\*$')
 if removeBlanks then
 if s ~=  *then*
 return s
 else
 return nil
 end
 else
 return s
 end
end

-- CategoryHandler class

local CategoryHandler = {}
CategoryHandler.\_\_index = CategoryHandler

function CategoryHandler.new(data, args)
 local obj = setmetatable({ \_data = data, \_args = args }, CategoryHandler)

 -- Set the title object
 do
 local pagename = obj:parameter('demopage')
 local success, titleObj
 if pagename then
 success, titleObj = pcall(mw.title.new, pagename)
 end
 if success and titleObj then
 obj.title = titleObj
 if titleObj == mw.title.getCurrentTitle() then
 obj.\_usesCurrentTitle = true
 end
 else
 obj.title = mw.title.getCurrentTitle()
 obj.\_usesCurrentTitle = true
 end
 end

 -- Set suppression parameter values
 for \_, key in ipairs{'nocat', 'categories'} do
 local value = obj:parameter(key)
 value = trimWhitespace(value, true)
 obj['\_' .. key] = yesno(value)
 end
 do
 local subpage = obj:parameter('subpage')
 local category2 = obj:parameter('category2')
 if type(subpage) == 'string' then
 subpage = mw.ustring.lower(subpage)
 end
 if type(category2) == 'string' then
 subpage = mw.ustring.lower(category2)
 end
 obj.\_subpage = trimWhitespace(subpage, true)
 obj.\_category2 = trimWhitespace(category2) -- don't remove blank values
 end
 return obj
end

function CategoryHandler:parameter(key)
 local parameterNames = self.\_data.parameters[key]
 local pntype = type(parameterNames)
 if pntype == 'string' or pntype == 'number' then
 return self.\_args[parameterNames]
 elseif pntype == 'table' then
 for \_, name in ipairs(parameterNames) do
 local value = self.\_args[name]
 if value ~= nil then
 return value
 end
 end
 return nil
 else
 error(string.format(
 'invalid config key "%s"',
 tostring(key)
 ), 2)
 end
end

function CategoryHandler:isSuppressedByArguments()
 return
 -- See if a category suppression argument has been set.
 self.\_nocat == true
 or self.\_categories == false
 or (
 self.\_category2
 and self.\_category2 ~= self.\_data.category2Yes
 and self.\_category2 ~= self.\_data.category2Negative
 )

 -- Check whether we are on a subpage, and see if categories are
 -- suppressed based on our subpage status.
 or self.\_subpage == self.\_data.subpageNo and self.title.isSubpage
 or self.\_subpage == self.\_data.subpageOnly and not self.title.isSubpage
end

function CategoryHandler:shouldSkipBlacklistCheck()
 -- Check whether the category suppression arguments indicate we
 -- should skip the blacklist check.
 return self.\_nocat == false
 or self.\_categories == true
 or self.\_category2 == self.\_data.category2Yes
end

function CategoryHandler:matchesBlacklist()
 if self.\_usesCurrentTitle then
 return self.\_data.currentTitleMatchesBlacklist
 else
 mShared = mShared or require('Module:Category handler/shared')
 return mShared.matchesBlacklist(
 self.title.prefixedText,
 mw.loadData('Module:Category handler/blacklist')
 )
 end
end

function CategoryHandler:isSuppressed()
 -- Find if categories are suppressed by either the arguments or by
 -- matching the blacklist.
 return self:isSuppressedByArguments()
 or not self:shouldSkipBlacklistCheck() and self:matchesBlacklist()
end

function CategoryHandler:getNamespaceParameters()
 if self.\_usesCurrentTitle then
 return self.\_data.currentTitleNamespaceParameters
 else
 if not mappings then
 mShared = mShared or require('Module:Category handler/shared')
 mappings = mShared.getParamMappings(true) -- gets mappings with mw.loadData
 end
 return mShared.getNamespaceParameters(
 self.title,
 mappings
 )
 end
end

function CategoryHandler:namespaceParametersExist()
 -- Find whether any namespace parameters have been specified.
 -- We use the order "all" --> namespace params --> "other" as this is what
 -- the old template did.
 if self:parameter('all') then
 return true
 end
 if not mappings then
 mShared = mShared or require('Module:Category handler/shared')
 mappings = mShared.getParamMappings(true) -- gets mappings with mw.loadData
 end
 for ns, params in pairs(mappings) do
 for i, param in ipairs(params) do
 if self.\_args[param] then
 return true
 end
 end
 end
 if self:parameter('other') then
 return true
 end
 return false
end

function CategoryHandler:getCategories()
 local params = self:getNamespaceParameters()
 local nsCategory
 for i, param in ipairs(params) do
 local value = self.\_args[param]
 if value ~= nil then
 nsCategory = value
 break
 end
 end
 if nsCategory ~= nil or self:namespaceParametersExist() then
 -- Namespace parameters exist - advanced usage.
 if nsCategory == nil then
 nsCategory = self:parameter('other')
 end
 local ret = {self:parameter('all')}
 local numParam = tonumber(nsCategory)
 if numParam and numParam >= 1 and math.floor(numParam) == numParam then
 -- nsCategory is an integer
 ret[#ret + 1] = self.\_args[numParam]
 else
 ret[#ret + 1] = nsCategory
 end
 if #ret < 1 then
 return nil
 else
 return table.concat(ret)
 end
 elseif self.\_data.defaultNamespaces[self.title.namespace] then
 -- Namespace parameters don't exist, simple usage.
 return self.\_args[1]
 end
 return nil
end

-- Exports

local p = {}

function p.\_exportClasses()
 -- Used for testing purposes.
 return {
 CategoryHandler = CategoryHandler
 }
end

function p.\_main(args, data)
 data = data or mw.loadData('Module:Category handler/data')
 local handler = CategoryHandler.new(data, args)
 if handler:isSuppressed() then
 return nil
 end
 return handler:getCategories()
end

function p.main(frame, data)
 data = data or mw.loadData('Module:Category handler/data')
 local args = require('Module:Arguments').getArgs(frame, {
 wrappers = data.wrappers,
 valueFunc = function (k, v)
 v = trimWhitespace(v)
 if type(k) == 'number' then
 if v ~=  *then*
 return v
 else
 return nil
 end
 else
 return v
 end
 end
 })
 return p.\_main(args, data)
end

return p, consisting of 26 episodes was in production. The series began airing on April 12, 2009 on Teletoon in Canada, followed by Cartoon Network in the U.S on May 9, 2009. Due to the ratings in Canada, *New Vestroia* was extended with an additional 26 episode order.

The Cartoon Network website aired a special called *Maxus Unleashed*, and marks a synopsis about the first 26 episodes.

*New Vestroia* was broadcast in Japan on TV Tokyo from March 2, 2010 at 7:00PM. The opening song, titled "Cho! Saikyo! Warriors", is once again performed by Psychic Lover. The first ending was "Bang! Bang! Bakugan!" by Yoshifumi Ushima, while the second ending was "Communication Breakdown" by Crush Tears.

#### *Gundalian Invaders*

*Main article: List of Bakugan: Gundalian Invaders episodes*
Publicly announced through Bakugan.com, the official My.Bakugan.com community, and other media, Spin Master announced a third series, titled ***Bakugan Battle Brawlers: Gundalian Invaders*** (Template:RubyTemplate:Rubyバトルブローラーズガンダリアンインベーダーズ, *Bakugan Batoru Burōrāzu Gandarian Inbēdāzu*)--------------------------------------------------------------------------------
-- --
-- CATEGORY HANDLER --
-- --
-- This module implements the Template loop detected: Template:Category handler template in Lua, --
-- with a few improvements: all namespaces and all namespace aliases --
-- are supported, and namespace names are detected automatically for --
-- the local wiki. This module requires Module:Namespace detect --
-- and Module:Yesno to be available on the local wiki. It can be --
-- configured for different wikis by altering the values in --
-- Module:Category handler/config, and pages can be blacklisted --
-- from categorisation by using Module:Category handler/blacklist. --
-- --

-- Load required modules
local yesno = require('Module:Yesno')

-- Lazily load things we don't always need
local mShared, mappings

local p = {}

-- Helper functions

local function trimWhitespace(s, removeBlanks)
 if type(s) ~= 'string' then
 return s
 end
 s = s:match('^%s\*(.-)%s\*$')
 if removeBlanks then
 if s ~=  *then*
 return s
 else
 return nil
 end
 else
 return s
 end
end

-- CategoryHandler class

local CategoryHandler = {}
CategoryHandler.\_\_index = CategoryHandler

function CategoryHandler.new(data, args)
 local obj = setmetatable({ \_data = data, \_args = args }, CategoryHandler)

 -- Set the title object
 do
 local pagename = obj:parameter('demopage')
 local success, titleObj
 if pagename then
 success, titleObj = pcall(mw.title.new, pagename)
 end
 if success and titleObj then
 obj.title = titleObj
 if titleObj == mw.title.getCurrentTitle() then
 obj.\_usesCurrentTitle = true
 end
 else
 obj.title = mw.title.getCurrentTitle()
 obj.\_usesCurrentTitle = true
 end
 end

 -- Set suppression parameter values
 for \_, key in ipairs{'nocat', 'categories'} do
 local value = obj:parameter(key)
 value = trimWhitespace(value, true)
 obj['\_' .. key] = yesno(value)
 end
 do
 local subpage = obj:parameter('subpage')
 local category2 = obj:parameter('category2')
 if type(subpage) == 'string' then
 subpage = mw.ustring.lower(subpage)
 end
 if type(category2) == 'string' then
 subpage = mw.ustring.lower(category2)
 end
 obj.\_subpage = trimWhitespace(subpage, true)
 obj.\_category2 = trimWhitespace(category2) -- don't remove blank values
 end
 return obj
end

function CategoryHandler:parameter(key)
 local parameterNames = self.\_data.parameters[key]
 local pntype = type(parameterNames)
 if pntype == 'string' or pntype == 'number' then
 return self.\_args[parameterNames]
 elseif pntype == 'table' then
 for \_, name in ipairs(parameterNames) do
 local value = self.\_args[name]
 if value ~= nil then
 return value
 end
 end
 return nil
 else
 error(string.format(
 'invalid config key "%s"',
 tostring(key)
 ), 2)
 end
end

function CategoryHandler:isSuppressedByArguments()
 return
 -- See if a category suppression argument has been set.
 self.\_nocat == true
 or self.\_categories == false
 or (
 self.\_category2
 and self.\_category2 ~= self.\_data.category2Yes
 and self.\_category2 ~= self.\_data.category2Negative
 )

 -- Check whether we are on a subpage, and see if categories are
 -- suppressed based on our subpage status.
 or self.\_subpage == self.\_data.subpageNo and self.title.isSubpage
 or self.\_subpage == self.\_data.subpageOnly and not self.title.isSubpage
end

function CategoryHandler:shouldSkipBlacklistCheck()
 -- Check whether the category suppression arguments indicate we
 -- should skip the blacklist check.
 return self.\_nocat == false
 or self.\_categories == true
 or self.\_category2 == self.\_data.category2Yes
end

function CategoryHandler:matchesBlacklist()
 if self.\_usesCurrentTitle then
 return self.\_data.currentTitleMatchesBlacklist
 else
 mShared = mShared or require('Module:Category handler/shared')
 return mShared.matchesBlacklist(
 self.title.prefixedText,
 mw.loadData('Module:Category handler/blacklist')
 )
 end
end

function CategoryHandler:isSuppressed()
 -- Find if categories are suppressed by either the arguments or by
 -- matching the blacklist.
 return self:isSuppressedByArguments()
 or not self:shouldSkipBlacklistCheck() and self:matchesBlacklist()
end

function CategoryHandler:getNamespaceParameters()
 if self.\_usesCurrentTitle then
 return self.\_data.currentTitleNamespaceParameters
 else
 if not mappings then
 mShared = mShared or require('Module:Category handler/shared')
 mappings = mShared.getParamMappings(true) -- gets mappings with mw.loadData
 end
 return mShared.getNamespaceParameters(
 self.title,
 mappings
 )
 end
end

function CategoryHandler:namespaceParametersExist()
 -- Find whether any namespace parameters have been specified.
 -- We use the order "all" --> namespace params --> "other" as this is what
 -- the old template did.
 if self:parameter('all') then
 return true
 end
 if not mappings then
 mShared = mShared or require('Module:Category handler/shared')
 mappings = mShared.getParamMappings(true) -- gets mappings with mw.loadData
 end
 for ns, params in pairs(mappings) do
 for i, param in ipairs(params) do
 if self.\_args[param] then
 return true
 end
 end
 end
 if self:parameter('other') then
 return true
 end
 return false
end

function CategoryHandler:getCategories()
 local params = self:getNamespaceParameters()
 local nsCategory
 for i, param in ipairs(params) do
 local value = self.\_args[param]
 if value ~= nil then
 nsCategory = value
 break
 end
 end
 if nsCategory ~= nil or self:namespaceParametersExist() then
 -- Namespace parameters exist - advanced usage.
 if nsCategory == nil then
 nsCategory = self:parameter('other')
 end
 local ret = {self:parameter('all')}
 local numParam = tonumber(nsCategory)
 if numParam and numParam >= 1 and math.floor(numParam) == numParam then
 -- nsCategory is an integer
 ret[#ret + 1] = self.\_args[numParam]
 else
 ret[#ret + 1] = nsCategory
 end
 if #ret < 1 then
 return nil
 else
 return table.concat(ret)
 end
 elseif self.\_data.defaultNamespaces[self.title.namespace] then
 -- Namespace parameters don't exist, simple usage.
 return self.\_args[1]
 end
 return nil
end

-- Exports

local p = {}

function p.\_exportClasses()
 -- Used for testing purposes.
 return {
 CategoryHandler = CategoryHandler
 }
end

function p.\_main(args, data)
 data = data or mw.loadData('Module:Category handler/data')
 local handler = CategoryHandler.new(data, args)
 if handler:isSuppressed() then
 return nil
 end
 return handler:getCategories()
end

function p.main(frame, data)
 data = data or mw.loadData('Module:Category handler/data')
 local args = require('Module:Arguments').getArgs(frame, {
 wrappers = data.wrappers,
 valueFunc = function (k, v)
 v = trimWhitespace(v)
 if type(k) == 'number' then
 if v ~=  *then*
 return v
 else
 return nil
 end
 else
 return v
 end
 end
 })
 return p.\_main(args, data)
end

return p. It premiered in Canada on May 23, 2010 and aired in the United States on May 29, 2010. The Japanese version premiered on April 3, 2011 and ended on January 22, 2012, before being replaced by the Japanese dub of Zoobles! in its initial timeslot. The new series ties into the online game *Bakugan Dimensions* through the use of special heat-reveal DNA codes on the new series of Gundalian Invaders Bakugan.

The first opening song "Ready Go!" is done by Sissy, while the second opening, "Mega・Meta", is done by Yu Kobayashi, who is Dan's voice actor. The first ending song, "Love the Music", is done by Lisp, while the second, "Tan-Kyu-Shin", is done by KREVA, and the third is "Love Go! Courage Go!", which was performed by TAKUYA.

#### *Mechtanium Surge*

*Main article: List of Bakugan: Mechtanium Surge episodes*
In September 2010, Nelvana Entertainment announced a fourth and final season to the *Bakugan* series titled ***Bakugan Battle Brawlers: Mechtanium Surge*** (Template:RubyTemplate:Rubyバトルブローラーズメクタニウムサージ, *Bakugan Batoru Burōrāzu Mekutaniumu Sāji*)--------------------------------------------------------------------------------
-- --
-- CATEGORY HANDLER --
-- --
-- This module implements the Template loop detected: Template:Category handler template in Lua, --
-- with a few improvements: all namespaces and all namespace aliases --
-- are supported, and namespace names are detected automatically for --
-- the local wiki. This module requires Module:Namespace detect --
-- and Module:Yesno to be available on the local wiki. It can be --
-- configured for different wikis by altering the values in --
-- Module:Category handler/config, and pages can be blacklisted --
-- from categorisation by using Module:Category handler/blacklist. --
-- --

-- Load required modules
local yesno = require('Module:Yesno')

-- Lazily load things we don't always need
local mShared, mappings

local p = {}

-- Helper functions

local function trimWhitespace(s, removeBlanks)
 if type(s) ~= 'string' then
 return s
 end
 s = s:match('^%s\*(.-)%s\*$')
 if removeBlanks then
 if s ~=  *then*
 return s
 else
 return nil
 end
 else
 return s
 end
end

-- CategoryHandler class

local CategoryHandler = {}
CategoryHandler.\_\_index = CategoryHandler

function CategoryHandler.new(data, args)
 local obj = setmetatable({ \_data = data, \_args = args }, CategoryHandler)

 -- Set the title object
 do
 local pagename = obj:parameter('demopage')
 local success, titleObj
 if pagename then
 success, titleObj = pcall(mw.title.new, pagename)
 end
 if success and titleObj then
 obj.title = titleObj
 if titleObj == mw.title.getCurrentTitle() then
 obj.\_usesCurrentTitle = true
 end
 else
 obj.title = mw.title.getCurrentTitle()
 obj.\_usesCurrentTitle = true
 end
 end

 -- Set suppression parameter values
 for \_, key in ipairs{'nocat', 'categories'} do
 local value = obj:parameter(key)
 value = trimWhitespace(value, true)
 obj['\_' .. key] = yesno(value)
 end
 do
 local subpage = obj:parameter('subpage')
 local category2 = obj:parameter('category2')
 if type(subpage) == 'string' then
 subpage = mw.ustring.lower(subpage)
 end
 if type(category2) == 'string' then
 subpage = mw.ustring.lower(category2)
 end
 obj.\_subpage = trimWhitespace(subpage, true)
 obj.\_category2 = trimWhitespace(category2) -- don't remove blank values
 end
 return obj
end

function CategoryHandler:parameter(key)
 local parameterNames = self.\_data.parameters[key]
 local pntype = type(parameterNames)
 if pntype == 'string' or pntype == 'number' then
 return self.\_args[parameterNames]
 elseif pntype == 'table' then
 for \_, name in ipairs(parameterNames) do
 local value = self.\_args[name]
 if value ~= nil then
 return value
 end
 end
 return nil
 else
 error(string.format(
 'invalid config key "%s"',
 tostring(key)
 ), 2)
 end
end

function CategoryHandler:isSuppressedByArguments()
 return
 -- See if a category suppression argument has been set.
 self.\_nocat == true
 or self.\_categories == false
 or (
 self.\_category2
 and self.\_category2 ~= self.\_data.category2Yes
 and self.\_category2 ~= self.\_data.category2Negative
 )

 -- Check whether we are on a subpage, and see if categories are
 -- suppressed based on our subpage status.
 or self.\_subpage == self.\_data.subpageNo and self.title.isSubpage
 or self.\_subpage == self.\_data.subpageOnly and not self.title.isSubpage
end

function CategoryHandler:shouldSkipBlacklistCheck()
 -- Check whether the category suppression arguments indicate we
 -- should skip the blacklist check.
 return self.\_nocat == false
 or self.\_categories == true
 or self.\_category2 == self.\_data.category2Yes
end

function CategoryHandler:matchesBlacklist()
 if self.\_usesCurrentTitle then
 return self.\_data.currentTitleMatchesBlacklist
 else
 mShared = mShared or require('Module:Category handler/shared')
 return mShared.matchesBlacklist(
 self.title.prefixedText,
 mw.loadData('Module:Category handler/blacklist')
 )
 end
end

function CategoryHandler:isSuppressed()
 -- Find if categories are suppressed by either the arguments or by
 -- matching the blacklist.
 return self:isSuppressedByArguments()
 or not self:shouldSkipBlacklistCheck() and self:matchesBlacklist()
end

function CategoryHandler:getNamespaceParameters()
 if self.\_usesCurrentTitle then
 return self.\_data.currentTitleNamespaceParameters
 else
 if not mappings then
 mShared = mShared or require('Module:Category handler/shared')
 mappings = mShared.getParamMappings(true) -- gets mappings with mw.loadData
 end
 return mShared.getNamespaceParameters(
 self.title,
 mappings
 )
 end
end

function CategoryHandler:namespaceParametersExist()
 -- Find whether any namespace parameters have been specified.
 -- We use the order "all" --> namespace params --> "other" as this is what
 -- the old template did.
 if self:parameter('all') then
 return true
 end
 if not mappings then
 mShared = mShared or require('Module:Category handler/shared')
 mappings = mShared.getParamMappings(true) -- gets mappings with mw.loadData
 end
 for ns, params in pairs(mappings) do
 for i, param in ipairs(params) do
 if self.\_args[param] then
 return true
 end
 end
 end
 if self:parameter('other') then
 return true
 end
 return false
end

function CategoryHandler:getCategories()
 local params = self:getNamespaceParameters()
 local nsCategory
 for i, param in ipairs(params) do
 local value = self.\_args[param]
 if value ~= nil then
 nsCategory = value
 break
 end
 end
 if nsCategory ~= nil or self:namespaceParametersExist() then
 -- Namespace parameters exist - advanced usage.
 if nsCategory == nil then
 nsCategory = self:parameter('other')
 end
 local ret = {self:parameter('all')}
 local numParam = tonumber(nsCategory)
 if numParam and numParam >= 1 and math.floor(numParam) == numParam then
 -- nsCategory is an integer
 ret[#ret + 1] = self.\_args[numParam]
 else
 ret[#ret + 1] = nsCategory
 end
 if #ret < 1 then
 return nil
 else
 return table.concat(ret)
 end
 elseif self.\_data.defaultNamespaces[self.title.namespace] then
 -- Namespace parameters don't exist, simple usage.
 return self.\_args[1]
 end
 return nil
end

-- Exports

local p = {}

function p.\_exportClasses()
 -- Used for testing purposes.
 return {
 CategoryHandler = CategoryHandler
 }
end

function p.\_main(args, data)
 data = data or mw.loadData('Module:Category handler/data')
 local handler = CategoryHandler.new(data, args)
 if handler:isSuppressed() then
 return nil
 end
 return handler:getCategories()
end

function p.main(frame, data)
 data = data or mw.loadData('Module:Category handler/data')
 local args = require('Module:Arguments').getArgs(frame, {
 wrappers = data.wrappers,
 valueFunc = function (k, v)
 v = trimWhitespace(v)
 if type(k) == 'number' then
 if v ~=  *then*
 return v
 else
 return nil
 end
 else
 return v
 end
 end
 })
 return p.\_main(args, data)
end

return p, which launched on February 13, 2011 in Canada and in United States on March 5, 2011. It was originally set for 26 episodes but was later extended to 46. While *Mechtanium Surge* was produced for North American audiences and was never aired in Japan, a localized version aired in Taiwan and Hong Kong, using a modified version of the *New Vestroia* credit animations and songs.

#### *Baku Tech! Bakugan*

*Main article: Baku Tech! Bakugan*
In September 2010, Japanese children's anthology magazine CoroCoro Comic began serializing a Bakugan manga by Shingo Maki titled ***Baku Tech! Bakugan*** (Template:RubyTemplate:Ruby！Template:RubyTemplate:Ruby, *Bakuteku! Bakugan*)--------------------------------------------------------------------------------
-- --
-- CATEGORY HANDLER --
-- --
-- This module implements the Template loop detected: Template:Category handler template in Lua, --
-- with a few improvements: all namespaces and all namespace aliases --
-- are supported, and namespace names are detected automatically for --
-- the local wiki. This module requires Module:Namespace detect --
-- and Module:Yesno to be available on the local wiki. It can be --
-- configured for different wikis by altering the values in --
-- Module:Category handler/config, and pages can be blacklisted --
-- from categorisation by using Module:Category handler/blacklist. --
-- --

-- Load required modules
local yesno = require('Module:Yesno')

-- Lazily load things we don't always need
local mShared, mappings

local p = {}

-- Helper functions

local function trimWhitespace(s, removeBlanks)
 if type(s) ~= 'string' then
 return s
 end
 s = s:match('^%s\*(.-)%s\*$')
 if removeBlanks then
 if s ~=  *then*
 return s
 else
 return nil
 end
 else
 return s
 end
end

-- CategoryHandler class

local CategoryHandler = {}
CategoryHandler.\_\_index = CategoryHandler

function CategoryHandler.new(data, args)
 local obj = setmetatable({ \_data = data, \_args = args }, CategoryHandler)

 -- Set the title object
 do
 local pagename = obj:parameter('demopage')
 local success, titleObj
 if pagename then
 success, titleObj = pcall(mw.title.new, pagename)
 end
 if success and titleObj then
 obj.title = titleObj
 if titleObj == mw.title.getCurrentTitle() then
 obj.\_usesCurrentTitle = true
 end
 else
 obj.title = mw.title.getCurrentTitle()
 obj.\_usesCurrentTitle = true
 end
 end

 -- Set suppression parameter values
 for \_, key in ipairs{'nocat', 'categories'} do
 local value = obj:parameter(key)
 value = trimWhitespace(value, true)
 obj['\_' .. key] = yesno(value)
 end
 do
 local subpage = obj:parameter('subpage')
 local category2 = obj:parameter('category2')
 if type(subpage) == 'string' then
 subpage = mw.ustring.lower(subpage)
 end
 if type(category2) == 'string' then
 subpage = mw.ustring.lower(category2)
 end
 obj.\_subpage = trimWhitespace(subpage, true)
 obj.\_category2 = trimWhitespace(category2) -- don't remove blank values
 end
 return obj
end

function CategoryHandler:parameter(key)
 local parameterNames = self.\_data.parameters[key]
 local pntype = type(parameterNames)
 if pntype == 'string' or pntype == 'number' then
 return self.\_args[parameterNames]
 elseif pntype == 'table' then
 for \_, name in ipairs(parameterNames) do
 local value = self.\_args[name]
 if value ~= nil then
 return value
 end
 end
 return nil
 else
 error(string.format(
 'invalid config key "%s"',
 tostring(key)
 ), 2)
 end
end

function CategoryHandler:isSuppressedByArguments()
 return
 -- See if a category suppression argument has been set.
 self.\_nocat == true
 or self.\_categories == false
 or (
 self.\_category2
 and self.\_category2 ~= self.\_data.category2Yes
 and self.\_category2 ~= self.\_data.category2Negative
 )

 -- Check whether we are on a subpage, and see if categories are
 -- suppressed based on our subpage status.
 or self.\_subpage == self.\_data.subpageNo and self.title.isSubpage
 or self.\_subpage == self.\_data.subpageOnly and not self.title.isSubpage
end

function CategoryHandler:shouldSkipBlacklistCheck()
 -- Check whether the category suppression arguments indicate we
 -- should skip the blacklist check.
 return self.\_nocat == false
 or self.\_categories == true
 or self.\_category2 == self.\_data.category2Yes
end

function CategoryHandler:matchesBlacklist()
 if self.\_usesCurrentTitle then
 return self.\_data.currentTitleMatchesBlacklist
 else
 mShared = mShared or require('Module:Category handler/shared')
 return mShared.matchesBlacklist(
 self.title.prefixedText,
 mw.loadData('Module:Category handler/blacklist')
 )
 end
end

function CategoryHandler:isSuppressed()
 -- Find if categories are suppressed by either the arguments or by
 -- matching the blacklist.
 return self:isSuppressedByArguments()
 or not self:shouldSkipBlacklistCheck() and self:matchesBlacklist()
end

function CategoryHandler:getNamespaceParameters()
 if self.\_usesCurrentTitle then
 return self.\_data.currentTitleNamespaceParameters
 else
 if not mappings then
 mShared = mShared or require('Module:Category handler/shared')
 mappings = mShared.getParamMappings(true) -- gets mappings with mw.loadData
 end
 return mShared.getNamespaceParameters(
 self.title,
 mappings
 )
 end
end

function CategoryHandler:namespaceParametersExist()
 -- Find whether any namespace parameters have been specified.
 -- We use the order "all" --> namespace params --> "other" as this is what
 -- the old template did.
 if self:parameter('all') then
 return true
 end
 if not mappings then
 mShared = mShared or require('Module:Category handler/shared')
 mappings = mShared.getParamMappings(true) -- gets mappings with mw.loadData
 end
 for ns, params in pairs(mappings) do
 for i, param in ipairs(params) do
 if self.\_args[param] then
 return true
 end
 end
 end
 if self:parameter('other') then
 return true
 end
 return false
end

function CategoryHandler:getCategories()
 local params = self:getNamespaceParameters()
 local nsCategory
 for i, param in ipairs(params) do
 local value = self.\_args[param]
 if value ~= nil then
 nsCategory = value
 break
 end
 end
 if nsCategory ~= nil or self:namespaceParametersExist() then
 -- Namespace parameters exist - advanced usage.
 if nsCategory == nil then
 nsCategory = self:parameter('other')
 end
 local ret = {self:parameter('all')}
 local numParam = tonumber(nsCategory)
 if numParam and numParam >= 1 and math.floor(numParam) == numParam then
 -- nsCategory is an integer
 ret[#ret + 1] = self.\_args[numParam]
 else
 ret[#ret + 1] = nsCategory
 end
 if #ret < 1 then
 return nil
 else
 return table.concat(ret)
 end
 elseif self.\_data.defaultNamespaces[self.title.namespace] then
 -- Namespace parameters don't exist, simple usage.
 return self.\_args[1]
 end
 return nil
end

-- Exports

local p = {}

function p.\_exportClasses()
 -- Used for testing purposes.
 return {
 CategoryHandler = CategoryHandler
 }
end

function p.\_main(args, data)
 data = data or mw.loadData('Module:Category handler/data')
 local handler = CategoryHandler.new(data, args)
 if handler:isSuppressed() then
 return nil
 end
 return handler:getCategories()
end

function p.main(frame, data)
 data = data or mw.loadData('Module:Category handler/data')
 local args = require('Module:Arguments').getArgs(frame, {
 wrappers = data.wrappers,
 valueFunc = function (k, v)
 v = trimWhitespace(v)
 if type(k) == 'number' then
 if v ~=  *then*
 return v
 else
 return nil
 end
 else
 return v
 end
 end
 })
 return p.\_main(args, data)
end

return p. The series starred a new cast of characters not related to the anime series. As of August 2011, three volumes have been collected. The anime adaption of Baku Tech! Bakugan was animated by Shogakukan Music & Digital Entertainment and began aired on TV Tokyo from April 7, 2012 to March 30, 2013 as a segment on the show Oha Coro. It was followed by a sequel called *Baku Tech! Bakugan Gachi* which aired from April 6, 2013 to December 28, 2013.

#### *Baku Tech! Bakugan Gachi*

*Main article: List of Baku Tech! Bakugan Gachi episodes*
It is the sequel to *Baku Tech! Bakugan* which aired from April 6, 2013 to December 28, 2013 on TV Tokyo.

#### *Bakugan: Battle Planet*

*Main article: Bakugan: Battle Planet*
In late 2018, a reboot of the brand was launched in North America.

### Strategic game

Template:Infobox game
A strategic game called *Bakugan* was developed by Sega Toys and Spin Master and released in conjunction with the anime series, albeit beginning a year before the anime even started (2006). The game uses spherical, spring-loaded miniature figures, representing the Bakugan, which pop open when rolled onto special metal Gate cards. The objective of the game is to capture three Gate cards.

#### Reception

Bakugan marbles have been one of the top rated toys for children, winning awards and selling thousands of marbles a year. The original series 1 and 2 (B1 Bakugan) were smaller, and all Bakugan after series 3 called Bakupearl (B2 Bakugan) are larger and the current size.

According to IGN, it was one of the leading kids games for the Nintendo DS in 2009. The Toy Industry Association gave Bakugan Battle Brawlers the 2009 Property of the Year award, recognizing the property that has had the greatest success spreading its brand throughout the industry that year.

### Card game

Template:Infobox card game
The card game is played with a deck of 56 cards, consisting of 5 each of ranks 1–10, plus six additional cards which have special abilities in addition to a rank. There is no suit distinction. Although it's conceptually a trick-taking game, the player who wins the trick only saves one card on his score pile, discarding the rest; this allows for special cases where there is no single winner. At the beginning of each hand, each player rolls one die to determine the target number of captures. At the end of the hand, that player accumulates a penalty score equal to the difference between the target number and the actual number captured. The game lasts until some player has scored ten points, and the lowest score is the winner.

## Merchandising and product promotions

### Toys and electronics

In August 2009, Digital Blue announced a line of *Bakugan* branded electronics for the 20–55 (as confirmed in an interview of popular toys marketed at kids) age group. Products include branded digital cameras, alarm clocks and other electronics. The line was released in retail in Spring 2009.

The franchise generated significant revenue from merchandising and toy sales. By 2009, *Bakugan* had generated Template:US$ in toy sales. In 2010, licensed merchandise sold Template:US$ worldwide. By 2010, the franchise had generated a total of Template:US$ in merchandise sales.

### Video games

*Main article: List of Bakugan Battle Brawlers video games*
On June 6, 2010, Spin Master announced on Bakugan.com that they were working on the online game 'Bakugan Dimensions' which would be released online for all Operating Systems that supported Adobe Flash. It was released for open Beta on June 2, 2010 but the beta was shut down on June 30, 2011 because the season for Gundalian Invaders had finished.

The DS, Wii, PlayStation 2 and 3 and many other systems also had a Bakugan game developed and follows the story of your character with a Bakugan who came from the Doom Dimension. It acts as an alternate plot to the series.

### Other

In 2009, Frito-Lay introduced a set of 26 Bakugan tazos in packages of Cheetos in India. The promotion, which ran from June 10 to August 10, 2009, included a contest in which consumers could win other Bakugan prizes.

## Similar products

At least since 2016, Spin Master sued Alpha (over Screechers Wild!), Lingdong (over Eonster Hunter) and both Choirock and Mattel (over Turning MecardTemplate:Notetag), alleging that the rival toys in question breached the Canadian company's patents related to Bakugan toys. Later, Spin Master and Alpha reached a settlement, in which Alpha would stop selling Screechers Wild! toys in Canada, the United States and the United Kingdom after January 31, 2019. Spin Master lost a case over Turning Mecard in Mainland China against Choirock in March 2019, but the lawsuits filed against Mattel in Canada, the United States and Mexico are still ongoing as of January 2019.

## References

1. ↑ Nelvana Spins New Toy Deal. AWN Headline News (January 22, 2007). Archived from the original on July 15, 2014. Retrieved on June 11, 2009.
2. ↑ BAKUGAN – Trademark of Spin Master Ltd. (en). Retrieved on 2018-10-10.
3. ↑ BAKUGAN BATTLE BRAWLERS – Trademark of Spin Master Ltd. (en). Retrieved on 2018-10-10.
4. ↑ Baku Tech! Bakugan Battle Manga Gets TV Anime – News. Anime News Network (2012-01-16). Retrieved on 2012-11-17.
5. ↑ Bakugan Franchise Relaunches With Bakugan Battle Planet Series in December (en). Anime News Network (2018-10-10). Retrieved on 2018-10-10.
6. ↑ http://www.animationmagazine.net/tv/cartoon-network-toasts-2019-with-1-hour-steven-universe-special/
7. ↑ Bakugan: Battle Planet Anime's U.S./Canada TV Premieres Scheduled (en). Anime News Network (2018-12-20). Retrieved on 2018-12-20.
8. ↑ https://www.animationmagazine.net/tv/tv-licensing-news-round-up/
9. ↑ Production is slated to begin for the 2nd series of the worldwide smash hit animated series "BAKUGAN" (PDF). TMS Entertainment (2008-12-16). Archived from the original on 11 April 2009. Retrieved on 2009-03-25.
10. ↑ Bakugan: Gundalian Invaders. Teletoon.com. Archived from the original on 2011-12-04. Retrieved on 2011-11-10.
11. ↑ 爆ＴＥＣＨ！　爆丸　１. Shogakukan. Retrieved on June 10, 2011.
12. ↑ Activision's Bakugan Battle Brawlers One of the Leading Kids Games for 2009 Holiday – Nintendo DS News at IGN. Ds.ign.com. Retrieved on 2011-11-10.
13. ↑ TIA TOTY Awards. Toy Industry Association, Inc. (2009-03-28). Archived from the original on 24 February 2009. Retrieved on 2009-03-28.
14. ↑ **Lua error in package.lua at line 80: module 'Module:Citation/CS1/Configuration' not found.**
15. ↑ **Lua error in package.lua at line 80: module 'Module:Citation/CS1/Configuration' not found.**
16. ↑ **Lua error in package.lua at line 80: module 'Module:Citation/CS1/Configuration' not found.**
17. ↑ :: Cheetos ::. Cheetos.in. Archived from the original on 2011-09-12. Retrieved on 2011-11-10.
18. ↑ **Lua error in package.lua at line 80: module 'Module:Citation/CS1/Configuration' not found.**
19. ↑ **Lua error in package.lua at line 80: module 'Module:Citation/CS1/Configuration' not found.**
20. ↑ 20.0 20.1 **Lua error in package.lua at line 80: module 'Module:Citation/CS1/Configuration' not found.**
21. ↑ 21.0 21.1 **Lua error in package.lua at line 80: module 'Module:Citation/CS1/Configuration' not found.**
22. ↑ **Lua error in package.lua at line 80: module 'Module:Citation/CS1/Configuration' not found.**
23. ↑ 23.0 23.1 **Lua error in package.lua at line 80: module 'Module:Citation/CS1/Configuration' not found.**
24. ↑ 24.0 24.1 Template:Cite press release

## External links

* Official Website
* Nelvana's Bakugan website
* Template:Ann
* Template:Ann