World Library  
Flag as Inappropriate
Email this Article

Pinball FX

 

Pinball FX

Pinball FX


Developer(s) Zen Studios
Publisher(s) Microsoft Game Studios
Distributor(s) Microsoft Game Studios
Platform(s) Xbox 360 (XBLA)
Release date(s) April 25, 2007[1]
Genre(s) Pinball
Mode(s) Single player, Multiplayer

Pinball FX is a pinball machine video game for the Xbox 360. It was developed by Zen Studios and published by Microsoft Game Studios. It was released on April 25, 2007 via the Xbox Live Arcade service. The game features three tables, with six more available as downloadable content, leaderboards and online multiplayer. A sequel to the game, Pinball FX 2 was released on October 27, 2010.

The game received mixed reviews from critics, with aggregate websites GameRankings and Metacritic reporting scores of 70.56% and 69/100, respectively. Critics generally felt that the physics did well emulating a real pinball machine. Reviewers were divided on opinions of the game's multiplayer, with some calling for splitscreen gameplay, while others appreciated the online multiplayer component. It was a commercial success, selling over 362,000 copies as of July 28, 2010. It has been delisted from Xbox Live Arcade as all content can be imported into Pinball FX 2.

Contents

  • Gameplay 1
    • Tables 1.1
  • Development and marketing 2
  • Reception 3
  • References 4
  • External links 5

Gameplay

Pinball FX is the first pinball title for the Xbox 360.

Pinball FX utilizes the same basic rules as a physical pinball machine, albeit in a virtual environment. As with a traditional pinball machine, the player fires a steel ball onto the playfield using a plunger. Once the ball is in play the player controls the flippers and can nudge the machine to influence the path of the ball.[2] Each of the game's tables become more complex as the game advances, opening new paths and opportunities.[2]

The game allows use of the Xbox Live Vision camera to operate the flippers and to video chat with Xbox Live opponents.[2] It also features leaderboards and online multiplayer for up to four players.[3] Multiplayer games are won by being the first to achieve the set high score, which can be adjusted from 10 to 100 million points. Penalties can also be set for losing a ball with players losing anywhere from 5 to 25 percent of their score when a ball is lost.[2]

Tables

Pinball FX was released with three tables, Speed Machine, a racing-themed table, Extreme, which features a skateboarding theme, and Agents, adorned with secret agents and spy gadgets.[4] A fourth pirate-themed table entitled Buccaneer was released October 31, 2007 as a free download.[5] Five additional paid content tables were released prior to the release of the game's sequel, Pinball FX 2. The first table was released on January 16, 2008. Entitled Nightmare Mansion it features a campy, horror movie theme.[6] The second paid table features characters from The Rocky and Bullwinkle Show and was released April 2, 2008.[7] A third table featuring characters, sounds and music from Street Fighter II Turbo was released November 12, 2008.[8] Earth Defense, the fourth table, features an alien invasion theme. It was released September 21, 2009[9] The final table, Excalibur, was released January 27, 2010. This table features a theme based on King Arthur and the Knights of the Round Table.[10]

Tables
  • Speed Machine
  • Extreme
  • Agents

^a Free downloadable content
^b Paid downloadable content

Development and marketing

Pinball FX was first revealed to the press November 7, 2006 at a Microsoft press event in San Francisco.[11] It was then shown at the Game Developer's Conference on March 6, 2007.[12] It was released for the Xbox 360 via the Xbox Live Arcade service on April 23, 2007.[1] The game has been delisted from Xbox Live Arcade as all content can be imported into Pinball FX 2. If players wish to have the original tables but did not own the game, they can buy the Pinball FX Classic pack for Pinball FX 2, which contains the three original tables plus the Buccaneer table.[13]

Reception

Pinball FX
Aggregate scores
Aggregator Score
GameRankings 70.56%[14]
Metacritic 69/100[15]
Review scores
Publication Score
Eurogamer 7/10[4]
GamePro 3.75/5[16]
GameSpot 6.1/10[17]
GameZone 7/10[3]
IGN 6/10[18]

Pinball FX received mixed reviews from critics. On the aggregate sites GameRankings and Metacritic, it holds a score of 70.56% and 69/100, respectively.[14][15] The game was a commercial success, selling over 362,000 copies as of July 28, 2010.[19] Eurogamer's Dan Whitehead described the game as "a fantastic virtual pinball engine", comparing it to Pinball Dreams.[4] PinballAddicts praised the cost-to-value ratio, stating "at around US$10 you really can't go wrong."[20] GameZone's reviewer stated Pinball FX was "a visual treat and a solid challenge."[3]

GameSpot's Jeff Gerstmann praised the addition of online multiplayer, stating that it "has some neat ideas that keep things interesting a bit longer."[17] Eurogamer's Dan Whitehead was more critical, stating use of the Xbox Live Vision camera was "an oddly remote and distant way of playing."[4] GameZone's reviewer disagreed, noting that use of the camera set the game apart from other titles.[3] The reviewer further praised the game's sound effects, saying that they "carried the game forward."[3]

Pinball FX‍ '​s physics system was a common point of criticism among reviewers. While some praised the physics, others felt the system had issues. Dan Whitehead of Eurogamer felt the physics were precise.[4] The reviewer from GameZone agreed, stating they "handled very well."[3] "For the most part the physics in Pinball FX hold up, but there are a few issues that harm the overall experience" stated Hilary Goldstein of IGN.[18] Jeff Gerstmann felt that the "ball movement never feels realistic."[17]

Reviewers were critical of the variety in the game. Hilary Goldstein of IGN felt the game did not have enough features, stating it had "three mediocre boards, a couple-hundred Achievement Points, and little else."[18] Jeff Gerstmann of GameSpot also criticized the variety, calling the table designs "generic", adding that they "grow old quickly."[17] GamePro‍ '​s Will Herring agreed, saying that the tables were "a little blander than might have been hoped for."[16]

References


-- Module:Hatnote -- -- -- -- This module produces hatnote links and links to related articles. It -- -- implements the and meta-templates and includes -- -- helper functions for other Lua hatnote modules. --


local libraryUtil = require('libraryUtil') local checkType = libraryUtil.checkType local mArguments -- lazily initialise Module:Arguments local yesno -- lazily initialise Module:Yesno

local p = {}


-- Helper functions


local function getArgs(frame) -- Fetches the arguments from the parent frame. Whitespace is trimmed and -- blanks are removed. mArguments = require('Module:Arguments') return mArguments.getArgs(frame, {parentOnly = true}) end

local function removeInitialColon(s) -- Removes the initial colon from a string, if present. return s:match('^:?(.*)') end

function p.findNamespaceId(link, removeColon) -- Finds the namespace id (namespace number) of a link or a pagename. This -- function will not work if the link is enclosed in double brackets. Colons -- are trimmed from the start of the link by default. To skip colon -- trimming, set the removeColon parameter to true. checkType('findNamespaceId', 1, link, 'string') checkType('findNamespaceId', 2, removeColon, 'boolean', true) if removeColon ~= false then link = removeInitialColon(link) end local namespace = link:match('^(.-):') if namespace then local nsTable = mw.site.namespaces[namespace] if nsTable then return nsTable.id end end return 0 end

function p.formatPages(...) -- Formats a list of pages using formatLink and returns it as an array. Nil -- values are not allowed. local pages = {...} local ret = {} for i, page in ipairs(pages) do ret[i] = p._formatLink(page) end return ret end

function p.formatPageTables(...) -- Takes a list of page/display tables and returns it as a list of -- formatted links. Nil values are not allowed. local pages = {...} local links = {} for i, t in ipairs(pages) do checkType('formatPageTables', i, t, 'table') local link = t[1] local display = t[2] links[i] = p._formatLink(link, display) end return links end

function p.makeWikitextError(msg, helpLink, addTrackingCategory) -- Formats an error message to be returned to wikitext. If -- addTrackingCategory is not false after being returned from -- Module:Yesno, and if we are not on a talk page, a tracking category -- is added. checkType('makeWikitextError', 1, msg, 'string') checkType('makeWikitextError', 2, helpLink, 'string', true) yesno = require('Module:Yesno') local title = mw.title.getCurrentTitle() -- Make the help link text. local helpText if helpLink then helpText = ' (help)' else helpText = end -- Make the category text. local category if not title.isTalkPage and yesno(addTrackingCategory) ~= false then category = 'Hatnote templates with errors' category = string.format( '%s:%s', mw.site.namespaces[14].name, category ) else category = end return string.format( '%s', msg, helpText, category ) end


-- Format link -- -- Makes a wikilink from the given link and display values. Links are escaped -- with colons if necessary, and links to sections are detected and displayed -- with " § " as a separator rather than the standard MediaWiki "#". Used in -- the template.


function p.formatLink(frame) local args = getArgs(frame) local link = args[1] local display = args[2] if not link then return p.makeWikitextError( 'no link specified', 'Template:Format hatnote link#Errors', args.category ) end return p._formatLink(link, display) end

function p._formatLink(link, display) -- Find whether we need to use the colon trick or not. We need to use the -- colon trick for categories and files, as otherwise category links -- categorise the page and file links display the file. checkType('_formatLink', 1, link, 'string') checkType('_formatLink', 2, display, 'string', true) link = removeInitialColon(link) local namespace = p.findNamespaceId(link, false) local colon if namespace == 6 or namespace == 14 then colon = ':' else colon = end -- Find whether a faux display value has been added with the | magic -- word. if not display then local prePipe, postPipe = link:match('^(.-)|(.*)$') link = prePipe or link display = postPipe end -- Find the display value. if not display then local page, section = link:match('^(.-)#(.*)$') if page then display = page .. ' § ' .. section end end -- Assemble the link. if display then return string.format('%s', colon, link, display) else return string.format('%s%s', colon, link) end end


-- Hatnote -- -- Produces standard hatnote text. Implements the template.


function p.hatnote(frame) local args = getArgs(frame) local s = args[1] local options = {} if not s then return p.makeWikitextError( 'no text specified', 'Template:Hatnote#Errors', args.category ) end options.extraclasses = args.extraclasses options.selfref = args.selfref return p._hatnote(s, options) end

function p._hatnote(s, options) checkType('_hatnote', 1, s, 'string') checkType('_hatnote', 2, options, 'table', true) local classes = {'hatnote'} local extraclasses = options.extraclasses local selfref = options.selfref if type(extraclasses) == 'string' then classes[#classes + 1] = extraclasses end if selfref then classes[#classes + 1] = 'selfref' end return string.format( '
%s
', table.concat(classes, ' '), s )

end

return p-------------------------------------------------------------------------------- -- Module:Hatnote -- -- -- -- This module produces hatnote links and links to related articles. It -- -- implements the and meta-templates and includes -- -- helper functions for other Lua hatnote modules. --


local libraryUtil = require('libraryUtil') local checkType = libraryUtil.checkType local mArguments -- lazily initialise Module:Arguments local yesno -- lazily initialise Module:Yesno

local p = {}


-- Helper functions


local function getArgs(frame) -- Fetches the arguments from the parent frame. Whitespace is trimmed and -- blanks are removed. mArguments = require('Module:Arguments') return mArguments.getArgs(frame, {parentOnly = true}) end

local function removeInitialColon(s) -- Removes the initial colon from a string, if present. return s:match('^:?(.*)') end

function p.findNamespaceId(link, removeColon) -- Finds the namespace id (namespace number) of a link or a pagename. This -- function will not work if the link is enclosed in double brackets. Colons -- are trimmed from the start of the link by default. To skip colon -- trimming, set the removeColon parameter to true. checkType('findNamespaceId', 1, link, 'string') checkType('findNamespaceId', 2, removeColon, 'boolean', true) if removeColon ~= false then link = removeInitialColon(link) end local namespace = link:match('^(.-):') if namespace then local nsTable = mw.site.namespaces[namespace] if nsTable then return nsTable.id end end return 0 end

function p.formatPages(...) -- Formats a list of pages using formatLink and returns it as an array. Nil -- values are not allowed. local pages = {...} local ret = {} for i, page in ipairs(pages) do ret[i] = p._formatLink(page) end return ret end

function p.formatPageTables(...) -- Takes a list of page/display tables and returns it as a list of -- formatted links. Nil values are not allowed. local pages = {...} local links = {} for i, t in ipairs(pages) do checkType('formatPageTables', i, t, 'table') local link = t[1] local display = t[2] links[i] = p._formatLink(link, display) end return links end

function p.makeWikitextError(msg, helpLink, addTrackingCategory) -- Formats an error message to be returned to wikitext. If -- addTrackingCategory is not false after being returned from -- Module:Yesno, and if we are not on a talk page, a tracking category -- is added. checkType('makeWikitextError', 1, msg, 'string') checkType('makeWikitextError', 2, helpLink, 'string', true) yesno = require('Module:Yesno') local title = mw.title.getCurrentTitle() -- Make the help link text. local helpText if helpLink then helpText = ' (help)' else helpText = end -- Make the category text. local category if not title.isTalkPage and yesno(addTrackingCategory) ~= false then category = 'Hatnote templates with errors' category = string.format( '%s:%s', mw.site.namespaces[14].name, category ) else category = end return string.format( '%s', msg, helpText, category ) end


-- Format link -- -- Makes a wikilink from the given link and display values. Links are escaped -- with colons if necessary, and links to sections are detected and displayed -- with " § " as a separator rather than the standard MediaWiki "#". Used in -- the template.


function p.formatLink(frame) local args = getArgs(frame) local link = args[1] local display = args[2] if not link then return p.makeWikitextError( 'no link specified', 'Template:Format hatnote link#Errors', args.category ) end return p._formatLink(link, display) end

function p._formatLink(link, display) -- Find whether we need to use the colon trick or not. We need to use the -- colon trick for categories and files, as otherwise category links -- categorise the page and file links display the file. checkType('_formatLink', 1, link, 'string') checkType('_formatLink', 2, display, 'string', true) link = removeInitialColon(link) local namespace = p.findNamespaceId(link, false) local colon if namespace == 6 or namespace == 14 then colon = ':' else colon = end -- Find whether a faux display value has been added with the | magic -- word. if not display then local prePipe, postPipe = link:match('^(.-)|(.*)$') link = prePipe or link display = postPipe end -- Find the display value. if not display then local page, section = link:match('^(.-)#(.*)$') if page then display = page .. ' § ' .. section end end -- Assemble the link. if display then return string.format('%s', colon, link, display) else return string.format('%s%s', colon, link) end end


-- Hatnote -- -- Produces standard hatnote text. Implements the template.


function p.hatnote(frame) local args = getArgs(frame) local s = args[1] local options = {} if not s then return p.makeWikitextError( 'no text specified', 'Template:Hatnote#Errors', args.category ) end options.extraclasses = args.extraclasses options.selfref = args.selfref return p._hatnote(s, options) end

function p._hatnote(s, options) checkType('_hatnote', 1, s, 'string') checkType('_hatnote', 2, options, 'table', true) local classes = {'hatnote'} local extraclasses = options.extraclasses local selfref = options.selfref if type(extraclasses) == 'string' then classes[#classes + 1] = extraclasses end if selfref then classes[#classes + 1] = 'selfref' end return string.format( '
%s
', table.concat(classes, ' '), s )

end

return p
  1. ^ a b
  2. ^ a b c d
  3. ^ a b c d e f
  4. ^ a b c d e
  5. ^
  6. ^
  7. ^
  8. ^
  9. ^
  10. ^
  11. ^
  12. ^
  13. ^
  14. ^ a b
  15. ^ a b
  16. ^ a b
  17. ^ a b c d
  18. ^ a b c
  19. ^
  20. ^

External links

  • Official website
This article was sourced from Creative Commons Attribution-ShareAlike License; additional terms may apply. World Heritage Encyclopedia content is assembled from numerous content providers, Open Access Publishing, and in compliance with The Fair Access to Science and Technology Research Act (FASTR), Wikimedia Foundation, Inc., Public Library of Science, The Encyclopedia of Life, Open Book Publishers (OBP), PubMed, U.S. National Library of Medicine, National Center for Biotechnology Information, U.S. National Library of Medicine, National Institutes of Health (NIH), U.S. Department of Health & Human Services, and USA.gov, which sources content from all federal, state, local, tribal, and territorial government publication portals (.gov, .mil, .edu). Funding for USA.gov and content contributors is made possible from the U.S. Congress, E-Government Act of 2002.
 
Crowd sourced content that is contributed to World Heritage Encyclopedia is peer reviewed and edited by our editorial staff to ensure quality scholarly research articles.
 
By using this site, you agree to the Terms of Use and Privacy Policy. World Heritage Encyclopedia™ is a registered trademark of the World Public Library Association, a non-profit organization.
 


Copyright © World Library Foundation. All rights reserved. eBooks from Project Gutenberg are sponsored by the World Library Foundation,
a 501c(4) Member's Support Non-Profit Organization, and is NOT affiliated with any governmental agency or department.