Marvel Civil War Reading Order

September 29, 2006 | 9 Comments

Civil War As I’ve mentioned in the past, I’m a fan of Marvel’s Civil War comics. Like many, I’ve been buying up the comics and reading them as they come out, which gives an approximate reading order. When looking back at the Civil War comics released thus far, its difficult to remember the order that Marvel has intended. Checklists exist out there but are difficult for me to find (and I’ve had a number of searches come to BorkWeb looking for a reading order).

Checklist

Febuary 2006
Amazing Spider-Man #529

March 2006
Amazing Spider-Man #530
Fantastic Four #536
New Avengers: Illuminati Special

April 2006
Amazing Spider-Man #531
Civil War Opening Shot Sketchbook
Fantastic Four #537

May 2006
Civil War #1
Marvel Spotlight: Millar/McNiven
Amazing Spider-Man #532
She-Hulk #8
Wolverine #42

June 2006
Civil War #2
Civil War Front Line #1
Civil War Front Line #2
Amazing Spider-Man #533
Fantastic Four #538
New Avengers #21
Thunderbolts #103
Wolverine #43
X-Factor #8

July 2006
Civil War #3
Civil War Front Line #3
Civil War Front Line #4
Civil War: X-Men #1
Civil War: Young Avengers & Runaways#1
Amazing Spider-Man #534
Black Panther #18
Cable & Deadpool #30
Fantastic Four #539
New Avengers #22
Thunderbolts #104
Wolverine #44
X-Factor #9

August 2006
Civil War #4
Civil War Front Line #5
Civil War Front Line #6
Civil War: X-Men #2
Civil War: Young Avengers & Runaways #2
Amazing Spider-Man #535
Cable & Deadpool #31
Fantastic Four #540
Heroes For Hire #1
MS. MARVEL #6
New Avengers #23
Thunderbolts #105
Wolverine #45

September 2006
Civil War #4
Civil War Files
Civil War Front Line #6
Civil War: X-Men #3
Civil War: Young Avengers & Runaways #3
Amazing Spider-Man #535
Cable & Deadpool #32
Captain America #22
Fantastic Four #540
Heroes For Hire #2
Ms. Marvel #7
New Avengers #24
Wolverine #46

October 2006
Civil War: Choosing Sides (One Shot)
Civil War Front Line #7
Civil War: X-Men #4
Civil War: Young Avengers & Runaways #4
Captain America #23
Heroes For Hire #3
Iron Man #13
Ms. Marvel #8
New Avengers #25
Wolverine #47

November 2006
Civil War #5
Civil War Front Line #8
Amazing Spider-Man #536
Captain America #24
Fantastic Four #541
Iron Man #14
Moon Knight #7 (Casualties of War)
Punisher: War Journal #1
Wolverine #48

December 2006
Civil War #6
Civil War Front Line #9
Black Panther #23
Civil War: WAR CRIMES (One Shot)
Iron Man/Captain America Special(Casualties of War)
Moon Knight #8 (Casualties of War)
Punisher: War Journal #2
Winter Soldier: Winter Kills (Casualties of War)

January 2007
Civil War #7
Amazing Spider-Man #537
Amazing Spider-Man #538
Black Panther #24
BLADE #5 (Casualties of War)
Civil War Front Line #10
Fantastic Four #542
Fantastic Four #543
Moon Knight #10 (Casualties of War)
Punisher: War Journal #3

February 2007
Civil War Front Line #11
Civil War: Battle Damage Report
Black Panther #25

Reading Order

Here’s a reading order that I found from 606Studios…if you follow that link, you’ll get spoilers:

  1. Thor 80-85: Ragnarok
  2. Avengers 500-503: Disassembled, Avengers Finale
  3. Pulse 1-5
  4. Wolverine 20-31: Enemy Of The State
  5. Captain America 1-14: The Winter Soldier
  6. New Avengers 1-3: Breakout
  7. Secret War 1-5/The Pulse 6-9
  8. New Avengers 4-6
  9. Iron Man 1-6: Extremis
  10. Captain America 16
  11. Captain America 17
  12. Amazing Spider-Man 515-518: Skin Deep
  13. Amazing Spider-Man 519-524
  14. New Avengers 7-10: The Sentry
  15. House Of M 1-8
  16. New Avengers 11-13
  17. New Avemgers 14
  18. New Avengers 15
  19. The Pulse 11-14
  20. The Sentry 1-8
  21. Friendly Neighborhood Spider-Man 1-4, Marvel Knights Spider-Man 19-22, Amazing Spider-Man 525: The Other
  22. Amazing Spider-Man 529-531
  23. New Avengers 16-20: The Collective
  24. New Avengers Annual #1
  25. Fantastic Four 533-535
  26. New Avengers: The Illuminati
  27. Fantastic Four 536-537
  28. The Incredible Hulk 88-91
  29. The Incredible Hulk 92-present
  30. Iron Man 7-12: Execute Program
  31. Civil War 1
  32. Civil War Frontline 1
  33. New Avengers 21
  34. Amazing Spider-Man 532
  35. Civil War 2
  36. New Avengers 22
  37. Amazing Spider-Man 533
  38. Civil War Young Avengers/Runaways 1-3
  39. Civil War Frontline 2
  40. Thunderbolts 103
  41. X-Factor 8-9
  42. Civil War Frontline 3
  43. Civil War Frontline 4
  44. Thunderbolts 104
  45. Ms. Marvel 6-7
  46. Civil War Frontline 5
  47. Black Panther 18
  48. Thunderbolts 105
  49. Heroes For Hire 1
  50. New Avengers 23
  51. Fantastic Four 538
  52. Civil War 3
  53. Cable/Deadpool 30
  54. Civil War X-Men 1
  55. Civil War 4
  56. Civil War X-Men 2
  57. Fantastic Four 539
  58. Amazing Spider-Man 534
  59. Cable/Deadpool 31
  60. Eternals 1-3
  61. Wolverine 42-45: Vendetta
  62. Captain America 22
  63. Amazing Spider-Man 535

Oh, an if you’re in the Central New Hampshire area, you should get your comics from: Geeks and Gamers in Meredith, NH. w00t.

Remote JavaScripting Example - Part I

September 22, 2006 | 5 Comments

At Plymouth State we work in a multi-server environment and often wish to display dynamic content from one server in an Ajax-like fashion on another server's website. My co-worker, Zach Tirrell, and I have drummed up a solution that works to keep our layout and logic separate, while still serving our end users in a smooth, seamless, non-iFramed manner.

I'll walk through the creation of a simple search 'widget' that relies on dynamic data to populate a drop-down box.

The Tools

- PHP
- JavaScript
- XTemplate
- RemoteJSOutput: a simple script by Matthew Batchelder (me) and Zach Tirrell

Step 1: create your template

This widget is fairly simple and thus has a simple template. The template syntax is simply XTemplate syntax.

I'll name it widget.tpl and store it in a templates directory.

HTML:
  1. <!-- BEGIN: main -->
  2. <div id="sweet_borkweb_widget" style="background:#eee;border:1px solid #ccc;text-align:center;">
  3.   <div style="color:#000;">A Couple JavaScript Posts at BorkWeb</div>
  4.   <select id="borkweb_posts">
  5.     <option value=""></option>
  6.   <!-- BEGIN: post -->
  7.     <option value="{post.url}">{post.title}</option>
  8.   <!-- END: post -->
  9.   </select>
  10. </div>
  11. <!-- END: main -->

Step 2: simple template output

First we'll just spit out the template. Lets create a PHP file to do this. We'll call it widget.php

PHP:
  1. <?php
  2. include('includes/xtemplate.php');
  3. $xtpl = new XTemplate('templates/widget.tpl');
  4.  
  5. $xtpl->parse('main');
  6. $xtpl->out('main');
  7. ?>

Check out your widget so far. Its plain. Lets change that.

Step 3: add dynamic content

We want the drop down list to hold BorkWeb articles. We'll add that in now.

Note: this is where you would normally pull from a database, an RSS feed, or some other source. For simplicty, we'll be using a simple PHP array. Whoop-de-doo. Here it is:

PHP:
  1. <?php
  2. include('includes/xtemplate.php');
  3. $xtpl = new XTemplate('templates/widget.tpl');
  4.  
  5. //get list of articles
  6. $articles=array(
  7.   array('title'=>'Ajax, More Than A Buzz Word','url'=>'http://borkweb.com/story/ajax-more-than-a-buzz-word'),
  8.   array('title'=>'Ajax; Templating; and the Separation of Layout and Logic','url'=>'http://borkweb.com/story/ajax-templating-and-the-separation-of-layout-and-logic'),
  9.   array('title'=>'Deleting the Internet','url'=>'http://borkweb.com/story/deleting-the-internet'),
  10.   array('title'=>'Node Manipulation in the DOM','url'=>'http://borkweb.com/story/node-manipulation-in-the-dom'),
  11.   array('title'=>'Prototype Cheat Sheets','url'=>'http://borkweb.com/story/prototype-cheat-sheets'),
  12.   array('title'=>'Script.aculo.us Is My New Best Friend','url'=>'http://borkweb.com/story/scriptaculous-is-my-new-best-friend'),
  13.   array('title'=>'The Case For JSON: What Is It and Why Use It?','url'=>'http://borkweb.com/story/the-case-for-json-what-is-it-and-why-use-it')
  14. );
  15.  
  16. //loop over articles and place in template
  17. foreach($articles as $article)
  18. {
  19.   $xtpl->assign('post',$article);
  20.   $xtpl->parse('main.post');
  21. }//end foreach
  22.  
  23. $xtpl->parse('main');
  24. $xtpl->out('main');
  25. ?>

Check out your widget now. It has been populated with some data! w00t! Now to make it work, we return to our beloved widget.tpl template file.

Step 4: make the template work

We're going to add in some javascript. Lets make the dropdown list redirect the user to the selected article when the drop-down box changes.

I'm going to add this on our select box:

HTML:
  1. onchange="if(document.getElementById('borkweb_posts').value!='') document.location=document.getElementById('borkweb_posts').value;"

The template should now look like this:

HTML:
  1. <!-- BEGIN: main -->
  2. <div id="sweet_borkweb_widget" style="background:#eee;border:1px solid #ccc;text-align:center;">
  3.   <div style="color:#000;">A Couple JavaScript Posts at BorkWeb</div>
  4.   <select id="borkweb_posts" onchange="if(document.getElementById('borkweb_posts').value!='') document.location=document.getElementById('borkweb_posts').value;">
  5.     <option value=""></option>
  6.   <!-- BEGIN: post -->
  7.     <option value="{post.url}">{post.title}</option>
  8.   <!-- END: post -->
  9.   </select>
  10. </div>
  11. <!-- END: main -->

Step 5: prepare script for remoting

Now that our lovely widget is functioning, lets prepare it for inclusion in other locations. This is simple using RemoteJSOutput (a simple script written by Zach Tirrell and myself).

We'll include that PHP class and use it as follows:

PHP:
  1. <?php
  2. include('includes/RemoteJSOutput.class.php');
  3. $remoteOutput=new RemoteJSOutput();
  4.  
  5. //start output buffering via
  6. $remoteOutput->start();
  7.  
  8. include('includes/xtemplate.php');
  9. $xtpl = new XTemplate('templates/widget.tpl');
  10.  
  11. //get list of articles
  12. $articles=array(
  13.   array('title'=>'Ajax, More Than A Buzz Word','url'=>'http://borkweb.com/story/ajax-more-than-a-buzz-word'),
  14.   array('title'=>'Ajax; Templating; and the Separation of Layout and Logic','url'=>'http://borkweb.com/story/ajax-templating-and-the-separation-of-layout-and-logic'),
  15.   array('title'=>'Deleting the Internet','url'=>'http://borkweb.com/story/deleting-the-internet'),
  16.   array('title'=>'Node Manipulation in the DOM','url'=>'http://borkweb.com/story/node-manipulation-in-the-dom'),
  17.   array('title'=>'Prototype Cheat Sheets','url'=>'http://borkweb.com/story/prototype-cheat-sheets'),
  18.   array('title'=>'Script.aculo.us Is My New Best Friend','url'=>'http://borkweb.com/story/scriptaculous-is-my-new-best-friend'),
  19.   array('title'=>'The Case For JSON: What Is It and Why Use It?','url'=>'http://borkweb.com/story/the-case-for-json-what-is-it-and-why-use-it')
  20. );
  21.  
  22. //loop over articles and place in template
  23. foreach($articles as $article)
  24. {
  25.   $xtpl->assign('post',$article);
  26.   $xtpl->parse('main.post');
  27. }//end foreach
  28.  
  29. $xtpl->parse('main');
  30. $xtpl->out('main');
  31.  
  32. //spit out script encased in JS
  33. $remoteOutput->puke();
  34. ?>

Now check out your widget. Ugly, huh? Well, don't worry, thats the way its supposed to look for now.

Step 6: place your widget somewhere

Now that we have that beautiful chunk of code in operation, place it on a webpage somewhere.

Put this:

HTML:
  1. <script type="text/javascript" src="http://url.to/your/widget.php"></script>

on any page you wish to test your widget!

Optional Step 7: create a wrapper

If, like me, you aren't a fan of including RemoteJSOutput.class.php all over hell's half acre, you can create a wrapper. This not only allows you to minimize the code you have to repeatedly place everywhere, but it also keeps your widget.php script functional on its own!

Here's an example wrapper I'll call get_script.php which will display wrapper_widget.php (step 3's PHP file, renamed):

PHP:
  1. <?php
  2. include('includes/RemoteJSOutput.class.php');
  3. $remoteOutput=new RemoteJSOutput();
  4.  
  5. //start output buffering via
  6. $remoteOutput->start();
  7.  
  8. //create a list of allowable widgets/scripts/yadda yadda
  9. $allow=array('wrapper_widget');
  10.  
  11. //does the passed variable exist in the allowable widgets?
  12. if(in_array($_GET['script'],$allow))
  13. {
  14.   //include the wrapper
  15.   include($_GET['script'].'.php');
  16. }//end if
  17.  
  18. //spit out script encased in JS
  19. $remoteOutput->puke();
  20. ?>

So rather than using the script tag that Step 6 suggests, we'd use:

HTML:
  1. <script type="text/javascript" src="http://url.to/your/get_script.php?script=wrapper_widget"></script>

Conclusion

This method is simplistic and is simply touching on the topic of widgetization. I will be following up with dynamic user interactions in Part II, and finally discuss an open-standard widget library with xml definitions. Stay tuned :)

Download

Oh, and here's the code used in this tutorial all zipped up.

DotA 6.37 Released!

September 9, 2006 | 24 Comments

w00t! Another version (You can download it here or here)...although this version doesn't have too many changes:

* Fixed a big exploit with waveform
* Medusa's Purge now deals 600 damage to summoned units, instead of instantly killing them
* Rebalanced Alchemist
* Reduced the Kobold Endurance Aura from 17% ms to 15% ms
* Hand of Midas IAS from 35% to 30%
* Cyclone on creeps from 20 to 10 seconds
* Reduced Primal Roar cooldown and Call of the Wild manacost
* Treads from +60 to +65 ms and from +30% ias to +35%
* Land Mines can now be properly seen on minimap
* WTF mode now requires voting
* Added a better cancel icon for Pulse Nova
* Increased Enchantress's Intelligence per level
* Fixed a bug with -ar and -random that allowed you to get two heroes

WoW Guilds: Relationship Advice

September 8, 2006 | Leave a Comment

World of Warcraft is a great gaming passtime, guilds can be a blast and assist in many areas of your playstyle. Its pretty funny to see the responses, however, when a fellow guild member decides to ask for real life advice in a heavily game-centered environment. Here's a little example that crept up on Ethereal Legion's site, a WoW Guild on Bleeding Hollow.

Caulderon, who's in Highschool, one of our lead tanks, and a guild officer asks:

How do you ask a chick out?

Just simply say "Will you go out with me"? or would you say "Are you doing anything friday night?"

This is my dillema.

There are a few canned responses of: "Be cool," "Be confident." However, there are a few that stand out from the rest:

Tugsy writes:

I dont think a warcraft forum is the place you want to be asking these types of questions.

Meni writes:

As long as you don't accidently introduce yourself as "Caulderon" you should be fine.

Sotel writes:

Actually laugh instead of saying elohel

Shadyfigure writes:

watever you do, if she responds:

Please Kitty

you have done somthing right.

Shodan writes:

You've got to be suave. You've got to be debonaire. You can't tell her you play an MMO.

Schizoid gives the most sage advice of all.

Fundimentally the dilemma exists because regardless of what you say, you are expressing interest in her without her having to express any interest in you first, which increases your chances of rejection and justifiable anxiety. To defuse this, you must talk with her for approximately 5 minutes (which really is not that much of an investment when you are trying to get an entire date), with the goal of getting 3 indicators of interest before you pop the question. So it goes like this:

Run into her when she is definitely not in a rush or too preoccupied, like in a library or something when she wants to be distracted and kind of not interested/matter-of-factly say:

"God, I'm trying to think of something to do this weekend. I don't want to end up doing nothing."

If she doesn't like you she will say something like:

"Good luck with that, bye." = Dude she hates you, bail now and don't humiliate yourself.

If she likes you she will say something like:

"Hmmm... why don't you just go to a movie?" = Indicator of Interest #1

If she takes the bait, regardless of what she suggests, you say:

"Yeah, I guess I could do that, but I still would need someone to go with. Give me something else, help me out here."

If she doesn't like you she says something like:

"You are such a loser you don't have a friend to go with?" =Dude she REALLY hates you, bail, bail, bail...and save face.

If she likes you she will smile and give you another idea. = Indicator of Interest #2

Then you chit chat about her lame ideas for a bit and try to keep her smiling. Take about 3 minutes until you get another indicator of interest. If you get nothing then give up dude, she is probably wants you to leave her alone. Otherwise you say:

"Yeah, one of those might work. What are you planning on doing?"

1) "I don't know yet." Reply: "Hmm...well, I would like to see that one movie we were talking about. You should come with me." Your accept ratio will be much better than just asking cold.

2) "I am definitely planning on something." Reply: "Well, at least you have something to do. Have fun with that. Bye." = Tough luck, dude, but she likes you, so try again next week.

3) "Me and my bicurious girlfriends were gonna have a pillow fight, but now that I think about it... things might be a lot wilder with you around." Dude, you got game, score this one hard core (regardless of what she invites you to).

It is interesting that the close-ness of the guild encouraged Caulderon enough to ask for advice on a topic as RL (Real Life) as it gets...dating. Even though the responses were humorous and most useless...its as much as (and maybe more) than one can expect when asking a RL group of friends.

Tuna of the Dirt

September 5, 2006 | 1 Comment

I know this is old...but my wife and I were just discussing this excellent Saturday Night Live commercial spoof with Jessica Simpson. I remember watching this for the first time and dying laughing, so I figured I'd share the wealth.

Warcraft III: Age of Myths

September 2, 2006 | 20 Comments

bloatation I'm a huge fan of DotA...Warcraft III AoS maps are excellent LAN/Battle.net games that should be played by every Warcraft RTS fan at least once. Recently the group of guys that I play DotA on a periodic basis with decided to try out a new tower defense map. (which I have available for download here)

The map was Age of Myths, created by Clan TDW. The game is very similar to DotA in that there are two opposing sides, the goal is to destroy the other's base, and each side spawns creeps that follow a specific path and attack anything in their way. Each player chooses a hero that has an allotment of abilities that add to the deadliness of the game and can buy items (Here's the official list) to augment those abilities. Thats about as similar as it gets.

Here are some good/interesting differences:

  • AoM is a 12 player game (DotA is 10 player)
  • The map has an uber-zoom-out...this is awesome
  • The map has the ability to trigger re-matches where teams switch sides and pick new heroes
  • Bases are in the top left and bottom right of the map
  • Rebalance mode. If there is a leaver, the players can request a rebalance which will sort the players into a fairly balanced match-up
  • The map sports 4 lanes rather than 3
  • The map sports custom models
  • There's some funny custom sounds
  • There are 16 heroes in the game
  • Maximum hero level is 20
  • Spell effects are MUCH more elaborate than DotA
  • There are categorized items that can only be carried/purchased by specific hero types
  • Players can purchase builders to repair buildings
  • Additional troops can be purchased to help push a lane
  • Like DotA, you accrue money over time and with each kill, however, when you get a hero kill you gain a spirit point. These spirit points (or kill points) can be used to purchase items that cannot be purchased with money.
  • One of my favorite things is: All abilities for every hero are controled with Q, W, E, R, and T. There is no need to hunt around and memorize a different short-cut key set for each hero

But, with all those cool features, there are some drawbacks:

  • Its may be a bit unbalanced...for example: the caster classes are the only ones that can buy an item (and its cheap!) that allows them to teleport to anywhere on the map where a friendly structure exists.
  • The map is a bit big...I'm not sure the size is quite necessary. I may be singing a different tune when I play with more people.

All-in-all it makes for a fun game. If you are a fan of DotA, I'd highly suggest giving this one a shot as it shows real promise. Its a blast to play and has some sweet features. I guarantee you that my friends and I will be playing AoM a lot more! Oh and if you're curious, here's a list of heroes available:

Light Side

  • Bjorn Ironside - Dwarven Berserker
  • Sasaki Kojiro - Chujo Ryu Swordsman
  • Cosmos - Astral Mage
  • Gigas - Titan
  • Roland - Paladin
  • Monsopiad - Headhunter
  • Storm - Weather Seer
  • Triton - Water Archon

Dark Side

  • Arachna - Lycosa Tarentula
  • Ghelgath - Frost Fiend
  • Sludge - Virus
  • Admiral Galbator - Phantasmal Pirate
  • Magnus - Minotaur
  • Scox - Skeletal Marksman
  • Nergal - Dark Druid
  • Narglauth - Fire Caller

That's a brief list of the heroes as the stand now, I'll be featuring each one in its own blog post soon to discuss their skills, give screenshots, etc.