Skip navigation

GTA IV Diary, Day Two: Sightseeing

Grand Theft Auto IV's Liberty City

(This is the second entry in this diary. Click here to read the first.)

Last night I spent several moments standing beside the Broker Bridge, gazing longingly across the Humboldt River at the captivating skyline of Algonquin Island, where I could see the peak of the Rotterdam Tower. Just beyond lay Happiness Island, and the smiling Statue of Happiness. (It's no secret that Grand Theft Auto IV's Liberty City is based on New York, but the extent to which it mimics the Big Apple is really quite marvellous.)

I would have liked to have ventured across the bridge, but for some reason the police were barring access to Manhattan—err, I mean Algonquin—Island. Developer Rockstar Games obviously doesn't want us seeing too much too quickly.

So I contented myself with exploring Brooklyn...umm, I mean Broker. I caught rides on several of the borough's elevated trains (a quick way to get around), took a joyride in an SUV through Francis International Airport (I don't recommend it—as soon as I hit the tarmac and started towards a taxiing plane, the authorities apparently assumed I was a terrorist and sent a platoon of police helicopters and hummers after me), and paid cabbies to ferry me around, which provided an opportunity to behave like a tourist and take in the local flavour.

There are 18 neighbourhoods on Broker Island alone (just a fraction of the more than 70 found in Liberty City proper), and each one has its own wonderfully authentic big city ambience.

It's easy to overlook the minutiae of ritzy townhouse communities and dilapidated ghettos as you zoom through them at 150 kilometres per hour, but once I was a passenger in leisurely moving cabs, and, later, strolling around on foot, I was astounded by the realism of each neighbourhood. Each building has its own character, each lot its own foliage, each sidewalk its own scuffs. Slowly rusting signs and weathered billboards are everywhere. Pages from old newspapers fly up in the breeze.

It would be fascinating to learn the total number of work hours involved in the monumental effort that must have been mounted to construct GTA IV's massive—and massively detailed—virtual world.

Of course, a city is nothing without the people who inhabit it, and Liberty City is teeming with interesting citizens. At one point, I simply stopped walking and stood on a corner to observe.

Dozens of people ambled by, occasionally stopping to make an offhand comment about the weather or the way I looked, sometimes in a foreign language. And everyone seemed to be more or less following the rules of modern civilization, obeying traffic laws, watching where they were walking, and generally getting along.

Then a hoodlum darted past, pursued for some unknown crime by a police officer who was radioing for backup as he ran.

I was just thinking about how nice it was to have the cops chasing someone else for a change when a stranger in an argyle sweater came up and pushed me for no reason. I pushed him back. Before I knew it, I was in another fight and the police were alerted yet again to be on the lookout for a gaunt, balding Eastern European.

I smashed in the window of a nearby sports car, hotwired it, and took off. 

When I arrived home, I intended to send Niko to bed, an action that saves game progress and provides a rare opportunity to quit playing.

Then I made the mistake of switching on the television. I immediately became engrossed in a male self-help show called The Men's Room, in which a burly guy was explaining that violence was the best way to solve problems while his meek co-host talked about how aromatherapy usually does the trick for him.

I switched the channel to a stand up comedy show featuring Ricky Gervais doing a routine about the best all-time war endings (his top pick was the atomic bomb that concluded the World War II). Then I moved on to a cartoon in which redneck marines were blasting a rather congenial, tentacled alien for “Not speakin' American.”

I finally landed on an interesting documentary explaining the origin and history of the great Liberty City. However, much like real-life TV docs, it eventually caused me to fall asleep on the couch.

My second day in Liberty City had drawn to a close.

Comments are closed

Thanks for your interest in commenting on this article, however we are no longer accepting submissions. If you would like, you may send a letter to the editor.

Report an abusive comment to our editorial staff

close

Alert us about this comment

Please let us know if this reader’s comment breaks the editor's rules and is obscene, abusive, threatening, unlawful, harassing, defamatory, profane or racially offensive by selecting the appropriate option to describe the problem.

Do not use this to complain about comments that don’t break the rules, for example those comments that you disagree with or contain spelling errors or multiple postings.

Back to Controller Freak

Controller Freak

Chad 'The Impaler' Sapieha leads you deep into the world of games, expertly guiding you through tricky levels of corporate double-speak, battling the industry's big bosses, and unlocking the latest gaming culture trends.

Blogroll

javax.servlet.ServletException: Processing template "tgamv3/v5/story/WBStory.html" with config "null"
	at GIS.Servlets.HTMLTemplate.processRequest(HTMLTemplate.java:231)
	at GIS.Servlets.HTMLTemplate.doGet(HTMLTemplate.java:137)
	at GIS.Servlets.StoryHTMLTemplate.doGet(StoryHTMLTemplate.java:96)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:126)
	at GIS.Common.Servlet.service(Servlet.java:106)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:103)
	at com.caucho.server.http.FilterChainServlet.doFilter(FilterChainServlet.java:95)
	at com.caucho.server.http.Invocation.service(Invocation.java:291)
	at com.caucho.server.http.CacheInvocation.service(CacheInvocation.java:132)
	at com.caucho.server.http.RunnerRequest.handleRequest(RunnerRequest.java:341)
	at com.caucho.server.http.RunnerRequest.handleConnection(RunnerRequest.java:271)
	at com.caucho.server.TcpConnection.run(TcpConnection.java:136)
	at java.lang.Thread.run(Thread.java:662)

Nested exception: GIS.Common.GICheckedException: Other exception in file: '/opt/GIS/HTML_Templates/tgamv3/v5/story/WBStory.html'  while processing select element with added parms:{}
	at GIS.Common.HTMLTemplateParser.generate(HTMLTemplateParser.java:1511)
	at GIS.Common.HTMLTemplateParser.generate(HTMLTemplateParser.java:782)
	at GIS.Common.HTMLTemplateParser.generate(HTMLTemplateParser.java:945)
	at GIS.Common.HTMLTemplateParser.generate(HTMLTemplateParser.java:782)
	at GIS.Common.HTMLTemplateParser.parse(HTMLTemplateParser.java:751)
	at GIS.Common.HTMLTemplateParser.generate(HTMLTemplateParser.java:476)
	at GIS.Servlets.HTMLTemplate.generate(HTMLTemplate.java:316)
	at GIS.Servlets.HTMLTemplate.processRequest(HTMLTemplate.java:222)
	at GIS.Servlets.HTMLTemplate.doGet(HTMLTemplate.java:137)
	at GIS.Servlets.StoryHTMLTemplate.doGet(StoryHTMLTemplate.java:96)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:126)
	at GIS.Common.Servlet.service(Servlet.java:106)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:103)
	at com.caucho.server.http.FilterChainServlet.doFilter(FilterChainServlet.java:95)
	at com.caucho.server.http.Invocation.service(Invocation.java:291)
	at com.caucho.server.http.CacheInvocation.service(CacheInvocation.java:132)
	at com.caucho.server.http.RunnerRequest.handleRequest(RunnerRequest.java:341)
	at com.caucho.server.http.RunnerRequest.handleConnection(RunnerRequest.java:271)
	at com.caucho.server.TcpConnection.run(TcpConnection.java:136)
	at java.lang.Thread.run(Thread.java:662)

Nested exception: GIS.Common.GICheckedException: Other exception  while processing transformation element with added parms:{cacheTime=5000, type=xsl, url=/usr/local/web_htdocs/tgamv3/v5/includes/content/blogs/blogroll-wbwgtgameblog0301.opml}
	at GIS.Common.HTMLTemplateParser.generate(HTMLTemplateParser.java:1625)
	at GIS.Common.HTMLTemplateParser.generate(HTMLTemplateParser.java:782)
	at GIS.Common.HTMLTemplateParser.parse(HTMLTemplateParser.java:751)
	at GIS.Common.HTMLTemplateParser.generate(HTMLTemplateParser.java:476)
	at GIS.Jel.JELSelectProducer.emitChoiceNode(JELSelectProducer.java:48)
	at GIS.Jel.JELSelectOneProducer.generate(JELSelectOneProducer.java:92)
	at GIS.Common.HTMLTemplateParser.generate(HTMLTemplateParser.java:1502)
	at GIS.Common.HTMLTemplateParser.generate(HTMLTemplateParser.java:782)
	at GIS.Common.HTMLTemplateParser.generate(HTMLTemplateParser.java:945)
	at GIS.Common.HTMLTemplateParser.generate(HTMLTemplateParser.java:782)
	at GIS.Common.HTMLTemplateParser.parse(HTMLTemplateParser.java:751)
	at GIS.Common.HTMLTemplateParser.generate(HTMLTemplateParser.java:476)
	at GIS.Servlets.HTMLTemplate.generate(HTMLTemplate.java:316)
	at GIS.Servlets.HTMLTemplate.processRequest(HTMLTemplate.java:222)
	at GIS.Servlets.HTMLTemplate.doGet(HTMLTemplate.java:137)
	at GIS.Servlets.StoryHTMLTemplate.doGet(StoryHTMLTemplate.java:96)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:126)
	at GIS.Common.Servlet.service(Servlet.java:106)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:103)
	at com.caucho.server.http.FilterChainServlet.doFilter(FilterChainServlet.java:95)
	at com.caucho.server.http.Invocation.service(Invocation.java:291)
	at com.caucho.server.http.CacheInvocation.service(CacheInvocation.java:132)
	at com.caucho.server.http.RunnerRequest.handleRequest(RunnerRequest.java:341)
	at com.caucho.server.http.RunnerRequest.handleConnection(RunnerRequest.java:271)
	at com.caucho.server.TcpConnection.run(TcpConnection.java:136)
	at java.lang.Thread.run(Thread.java:662)

Nested exception: java.lang.ClassCastException: org.apache.xerces.dom.ElementNSImpl cannot be cast to com.caucho.xml.QElement
	at com.caucho.xsl.Generator.getXslLocal(Generator.java:2141)
	at com.caucho.xsl.Generator.generate(Generator.java:294)
	at com.caucho.xsl.AbstractStylesheetFactory.generate(AbstractStylesheetFactory.java:819)
	at com.caucho.xsl.AbstractStylesheetFactory.newTemplates(AbstractStylesheetFactory.java:437)
	at com.caucho.xsl.AbstractStylesheetFactory.newTransformer(AbstractStylesheetFactory.java:312)
	at GIS.Universal.XMLTransformer.transform(XMLTransformer.java:262)
	at GIS.Universal.XMLTransformer.transform(XMLTransformer.java:166)
	at GIS.HTMLComments.HTMLProducers.XSLProducer.generate(XSLProducer.java:85)
	at GIS.Common.HTMLTemplateParser.generate(HTMLTemplateParser.java:1615)
	at GIS.Common.HTMLTemplateParser.generate(HTMLTemplateParser.java:782)
	at GIS.Common.HTMLTemplateParser.parse(HTMLTemplateParser.java:751)
	at GIS.Common.HTMLTemplateParser.generate(HTMLTemplateParser.java:476)
	at GIS.Jel.JELSelectProducer.emitChoiceNode(JELSelectProducer.java:48)
	at GIS.Jel.JELSelectOneProducer.generate(JELSelectOneProducer.java:92)
	at GIS.Common.HTMLTemplateParser.generate(HTMLTemplateParser.java:1502)
	at GIS.Common.HTMLTemplateParser.generate(HTMLTemplateParser.java:782)
	at GIS.Common.HTMLTemplateParser.generate(HTMLTemplateParser.java:945)
	at GIS.Common.HTMLTemplateParser.generate(HTMLTemplateParser.java:782)
	at GIS.Common.HTMLTemplateParser.parse(HTMLTemplateParser.java:751)
	at GIS.Common.HTMLTemplateParser.generate(HTMLTemplateParser.java:476)
	at GIS.Servlets.HTMLTemplate.generate(HTMLTemplate.java:316)
	at GIS.Servlets.HTMLTemplate.processRequest(HTMLTemplate.java:222)
	at GIS.Servlets.HTMLTemplate.doGet(HTMLTemplate.java:137)
	at GIS.Servlets.StoryHTMLTemplate.doGet(StoryHTMLTemplate.java:96)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:126)
	at GIS.Common.Servlet.service(Servlet.java:106)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:103)
	at com.caucho.server.http.FilterChainServlet.doFilter(FilterChainServlet.java:95)
	at com.caucho.server.http.Invocation.service(Invocation.java:291)
	at com.caucho.server.http.CacheInvocation.service(CacheInvocation.java:132)
	at com.caucho.server.http.RunnerRequest.handleRequest(RunnerRequest.java:341)
	at com.caucho.server.http.RunnerRequest.handleConnection(RunnerRequest.java:271)
	at com.caucho.server.TcpConnection.run(TcpConnection.java:136)
	at java.lang.Thread.run(Thread.java:662)

Nested exception: java.lang.ClassCastException: org.apache.xerces.dom.ElementNSImpl cannot be cast to com.caucho.xml.QElement
	at com.caucho.xsl.Generator.getXslLocal(Generator.java:2141)
	at com.caucho.xsl.Generator.generate(Generator.java:294)
	at com.caucho.xsl.AbstractStylesheetFactory.generate(AbstractStylesheetFactory.java:819)
	at com.caucho.xsl.AbstractStylesheetFactory.newTemplates(AbstractStylesheetFactory.java:437)
	at com.caucho.xsl.AbstractStylesheetFactory.newTransformer(AbstractStylesheetFactory.java:312)
	at GIS.Universal.XMLTransformer.transform(XMLTransformer.java:262)
	at GIS.Universal.XMLTransformer.transform(XMLTransformer.java:166)
	at GIS.HTMLComments.HTMLProducers.XSLProducer.generate(XSLProducer.java:85)
	at GIS.Common.HTMLTemplateParser.generate(HTMLTemplateParser.java:1615)
	at GIS.Common.HTMLTemplateParser.generate(HTMLTemplateParser.java:782)
	at GIS.Common.HTMLTemplateParser.parse(HTMLTemplateParser.java:751)
	at GIS.Common.HTMLTemplateParser.generate(HTMLTemplateParser.java:476)
	at GIS.Jel.JELSelectProducer.emitChoiceNode(JELSelectProducer.java:48)
	at GIS.Jel.JELSelectOneProducer.generate(JELSelectOneProducer.java:92)
	at GIS.Common.HTMLTemplateParser.generate(HTMLTemplateParser.java:1502)
	at GIS.Common.HTMLTemplateParser.generate(HTMLTemplateParser.java:782)
	at GIS.Common.HTMLTemplateParser.generate(HTMLTemplateParser.java:945)
	at GIS.Common.HTMLTemplateParser.generate(HTMLTemplateParser.java:782)
	at GIS.Common.HTMLTemplateParser.parse(HTMLTemplateParser.java:751)
	at GIS.Common.HTMLTemplateParser.generate(HTMLTemplateParser.java:476)
	at GIS.Servlets.HTMLTemplate.generate(HTMLTemplate.java:316)
	at GIS.Servlets.HTMLTemplate.processRequest(HTMLTemplate.java:222)
	at GIS.Servlets.HTMLTemplate.doGet(HTMLTemplate.java:137)
	at GIS.Servlets.StoryHTMLTemplate.doGet(StoryHTMLTemplate.java:96)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:126)
	at GIS.Common.Servlet.service(Servlet.java:106)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:103)
	at com.caucho.server.http.FilterChainServlet.doFilter(FilterChainServlet.java:95)
	at com.caucho.server.http.Invocation.service(Invocation.java:291)
	at com.caucho.server.http.CacheInvocation.service(CacheInvocation.java:132)
	at com.caucho.server.http.RunnerRequest.handleRequest(RunnerRequest.java:341)
	at com.caucho.server.http.RunnerRequest.handleConnection(RunnerRequest.java:271)
	at com.caucho.server.TcpConnection.run(TcpConnection.java:136)
	at java.lang.Thread.run(Thread.java:662)