├── .floo
├── .jshintignore
├── .meteor
├── .gitignore
├── release
├── platforms
├── .finished-upgraders
├── .id
├── packages
└── versions
├── .idea
├── .name
├── misc.xml
├── scopes
│ └── scope_settings.xml
├── encodings.xml
├── vcs.xml
├── jsLibraryMappings.xml
└── modules.xml
├── _.gitattributes
├── client
├── moviecloud
│ ├── gameView.html
│ ├── .DS_Store
│ ├── cards
│ │ ├── white_card.html
│ │ └── black_card.html
│ ├── moviecloud.html
│ ├── movieHandView.html
│ └── movieCloud.js
├── .DS_Store
├── timeshistorian
│ ├── cards
│ │ ├── white_card.html
│ │ └── black_card.html
│ ├── timeshistorian.html
│ ├── timesHistorianHand.html
│ └── timesHistorian.js
├── cardsagainstsobriety
│ ├── cardsagainstsobriety.js
│ ├── views
│ │ ├── cards
│ │ │ ├── black_card.html
│ │ │ └── white_card.html
│ │ ├── player-hand-view.html
│ │ ├── game-board-view.html
│ │ ├── playerHand.js
│ │ └── gameBoard.js
│ └── cardsagainstsobriety.html
├── index.html
├── chat
│ ├── chat.html
│ └── chat.js
├── home
│ ├── home.js
│ └── home.html
├── layout
│ └── layout.html
├── router.js
└── stylesheets
│ └── cardsagainstsobriety.css
├── packages
└── .gitignore
├── smart.json
├── _.travis.yml
├── .DS_Store
├── private
├── .DS_Store
├── Movies
│ ├── .DS_Store
│ ├── Diehard.srt
│ ├── Scarface.srt
│ ├── Forrest_Gump.srt
│ ├── A_Few_Good_Men.srt
│ └── Terminator.srt
└── stopwords.txt
├── server
├── .DS_Store
├── chat
│ └── chat.js
├── fixtures.js
├── TimesHistorian.js
├── MovieCloud.js
└── blackCards.js
├── .flooignore
├── .gitignore
├── smart.lock
├── _.gitignore
├── _.editorconfig
├── _PRESS-RELEASE.md
├── README.md
├── collections
└── decks.js
├── _CONTRIBUTING.md
├── _.jshintrc
└── _STYLE-GUIDE.md
/.floo:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.jshintignore:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.meteor/.gitignore:
--------------------------------------------------------------------------------
1 | local
2 |
--------------------------------------------------------------------------------
/.idea/.name:
--------------------------------------------------------------------------------
1 | Whiskey-and-Cake-Redux
--------------------------------------------------------------------------------
/_.gitattributes:
--------------------------------------------------------------------------------
1 | * text=auto
2 |
--------------------------------------------------------------------------------
/client/moviecloud/gameView.html:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/packages/.gitignore:
--------------------------------------------------------------------------------
1 | /streams
2 |
--------------------------------------------------------------------------------
/.meteor/release:
--------------------------------------------------------------------------------
1 | METEOR@1.0.4.2
2 |
--------------------------------------------------------------------------------
/.meteor/platforms:
--------------------------------------------------------------------------------
1 | server
2 | browser
3 |
--------------------------------------------------------------------------------
/smart.json:
--------------------------------------------------------------------------------
1 | {
2 | "packages": {
3 | "streams": {}
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/_.travis.yml:
--------------------------------------------------------------------------------
1 | language: node_js
2 | node_js:
3 | - '0.8'
4 | - '0.10'
5 |
--------------------------------------------------------------------------------
/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jnis77diver/whiskey-and-cake/HEAD/.DS_Store
--------------------------------------------------------------------------------
/client/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jnis77diver/whiskey-and-cake/HEAD/client/.DS_Store
--------------------------------------------------------------------------------
/private/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jnis77diver/whiskey-and-cake/HEAD/private/.DS_Store
--------------------------------------------------------------------------------
/server/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jnis77diver/whiskey-and-cake/HEAD/server/.DS_Store
--------------------------------------------------------------------------------
/.flooignore:
--------------------------------------------------------------------------------
1 | extern
2 | node_modules
3 | tmp
4 | vendor
5 | .idea/workspace.xml
6 | .idea/misc.xml
7 |
--------------------------------------------------------------------------------
/private/Movies/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jnis77diver/whiskey-and-cake/HEAD/private/Movies/.DS_Store
--------------------------------------------------------------------------------
/client/moviecloud/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jnis77diver/whiskey-and-cake/HEAD/client/moviecloud/.DS_Store
--------------------------------------------------------------------------------
/private/Movies/Diehard.srt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jnis77diver/whiskey-and-cake/HEAD/private/Movies/Diehard.srt
--------------------------------------------------------------------------------
/private/Movies/Scarface.srt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jnis77diver/whiskey-and-cake/HEAD/private/Movies/Scarface.srt
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 | bower_components/
3 | *.log
4 |
5 | build/
6 | dist/
7 | .idea
8 | .idea/dbnavigator.xml
9 |
--------------------------------------------------------------------------------
/private/Movies/Forrest_Gump.srt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jnis77diver/whiskey-and-cake/HEAD/private/Movies/Forrest_Gump.srt
--------------------------------------------------------------------------------
/private/Movies/A_Few_Good_Men.srt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jnis77diver/whiskey-and-cake/HEAD/private/Movies/A_Few_Good_Men.srt
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/.idea/scopes/scope_settings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/.idea/encodings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/server/chat/chat.js:
--------------------------------------------------------------------------------
1 | chatStream = new Meteor.Stream('chat');
2 |
3 | chatStream.permissions.write(function() {
4 | return true;
5 | });
6 |
7 | chatStream.permissions.read(function() {
8 | return true;
9 | });
--------------------------------------------------------------------------------
/.idea/jsLibraryMappings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/client/moviecloud/cards/white_card.html:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
--------------------------------------------------------------------------------
/client/timeshistorian/cards/white_card.html:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
--------------------------------------------------------------------------------
/.meteor/.finished-upgraders:
--------------------------------------------------------------------------------
1 | # This file contains information which helps Meteor properly upgrade your
2 | # app when you run 'meteor update'. You should check it into version control
3 | # with your project.
4 |
5 | notices-for-0.9.0
6 | notices-for-0.9.1
7 | 0.9.4-platform-file
8 |
--------------------------------------------------------------------------------
/client/moviecloud/cards/black_card.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | {{text}}
6 |
7 |
8 | {{expansion}}
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/client/cardsagainstsobriety/cardsagainstsobriety.js:
--------------------------------------------------------------------------------
1 | if (Meteor.isClient) {
2 | Accounts.ui.config({
3 | passwordSignupFields: "USERNAME_ONLY"
4 | })
5 | }
6 |
7 | //with autopublish turned off, subscribe functions are necessary to get what the server-side is
8 | //publishing
9 | Meteor.subscribe("CardsRoom");
10 |
--------------------------------------------------------------------------------
/client/timeshistorian/cards/black_card.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | {{text}}
6 |
7 |
8 | {{expansion}}
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/client/cardsagainstsobriety/views/cards/black_card.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | {{text}}
6 |
7 |
8 | {{expansion}}
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/client/cardsagainstsobriety/views/cards/white_card.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | {{text}}
6 |
7 |
8 | {{expansion}}
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/client/index.html:
--------------------------------------------------------------------------------
1 |
2 | CAS
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/.meteor/.id:
--------------------------------------------------------------------------------
1 | # This file contains a token that is unique to your project.
2 | # Check it into your repository along with the rest of this directory.
3 | # It can be used for purposes such as:
4 | # - ensuring you don't accidentally deploy one app on top of another
5 | # - providing package authors with aggregated statistics
6 |
7 | 7lrj361jnwwykoraisu
8 |
--------------------------------------------------------------------------------
/smart.lock:
--------------------------------------------------------------------------------
1 | {
2 | "meteor": {},
3 | "dependencies": {
4 | "basePackages": {
5 | "streams": {}
6 | },
7 | "packages": {
8 | "streams": {
9 | "git": "https://github.com/arunoda/meteor-streams.git",
10 | "tag": "v0.1.17",
11 | "commit": "9fcbbc9b7bf542827babc92089c19e730892a22f"
12 | }
13 | }
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/client/moviecloud/moviecloud.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
Movie Cloud
5 |
You made it to Movie Cloud
6 |
Get Movie Data
7 |
8 |
9 |
10 | {{>movieCloudHand}}
11 |
12 |
13 |
--------------------------------------------------------------------------------
/client/timeshistorian/timeshistorian.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
Times Historian
5 |
You made it to Times Historian
6 |
Get NYT Data
7 |
8 |
9 |
10 | {{>timesHistorianHand}}
11 |
12 |
13 |
--------------------------------------------------------------------------------
/.meteor/packages:
--------------------------------------------------------------------------------
1 | # Meteor packages used by this project, one per line.
2 | # Check this file (and the other files in this directory) into your repository.
3 | #
4 | # 'meteor add' and 'meteor remove' will edit this file for you,
5 | # but you can also edit it by hand.
6 | # insecure
7 |
8 | meteor-platform
9 | accounts-ui
10 | accounts-password
11 | twbs:bootstrap
12 | alanning:roles
13 | sanjo:jasmine
14 | velocity:html-reporter
15 | mizzao:user-status
16 | iron:router
17 | streams
18 |
--------------------------------------------------------------------------------
/client/moviecloud/movieHandView.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
Which movie is this?
7 |
8 | {{#each getOptions}}
9 |
10 | {{> whiteMovieCard}}
11 |
12 | {{/each}}
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/client/timeshistorian/timesHistorianHand.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
What Decade is this from?
7 |
8 | {{#each getOptions}}
9 |
10 | {{> whiteTimesCard}}
11 |
12 | {{/each}}
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/client/chat/chat.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
Talk Smack
4 | {{> chatBox}}
5 |
6 |
7 |
8 |
9 |
10 | {{#each messages}}
11 | {{>chatMessage}}
12 | {{/each}}
13 |
14 |
15 | Send Chat
16 |
17 |
18 |
19 |
20 | {{user}}: {{message}}
21 |
22 |
--------------------------------------------------------------------------------
/_.gitignore:
--------------------------------------------------------------------------------
1 | ### node etc ###
2 |
3 | # Logs
4 | logs
5 | *.log
6 |
7 | # Runtime data
8 | pids
9 | *.pid
10 | *.seed
11 |
12 | # Directory for instrumented libs generated by jscoverage/JSCover
13 | lib-cov
14 |
15 | # Coverage directory used by tools like istanbul
16 | coverage
17 |
18 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
19 | .grunt
20 |
21 | # Compiled Dirs (http://nodejs.org/api/addons.html)
22 | build/
23 | dist/
24 |
25 | # Dependency directorys
26 | # Deployed apps should consider commenting these lines out:
27 | # see https://npmjs.org/doc/faq.html#Should-I-check-my-node_modules-folder-into-git
28 | node_modules/
29 | bower_components/
30 |
31 | .idea/
--------------------------------------------------------------------------------
/client/home/home.js:
--------------------------------------------------------------------------------
1 | Template.home.helpers({
2 | createRoom: function(){
3 | console.log("createRoom fcn called");
4 | console.log('Session.get(roomId) is ', Session.get('roomId'));
5 | return Session.get('roomId');
6 | },
7 | getRooms: function(roomType) {
8 | //code here to get rooms for a room type
9 | }
10 | });
11 |
12 | // player-hand-view.html template event listeners
13 | Template.home.events({
14 | "click #createCardsRoom": function(){
15 | Meteor.call('CreateCardsRoom', function(error, room){
16 | //room.room = '/cardsagainstsobriety/' + room.room;
17 | room = [room];
18 | console.log("room is ", room);
19 | Session.set('roomId', room);
20 | console.log('Session is ', Session);
21 | });
22 | console.log("create room clicked");
23 | }
24 | });
--------------------------------------------------------------------------------
/_.editorconfig:
--------------------------------------------------------------------------------
1 | # EditorConfig helps developers define and maintain consistent
2 | # coding styles between different editors and IDEs
3 | # editorconfig.org
4 |
5 | #.editorconfig
6 | # Meteor adapted EditorConfig, http://EditorConfig.org
7 | # By RaiX 2013
8 |
9 | root = true
10 |
11 | [*.js]
12 | end_of_line = lf
13 | insert_final_newline = true
14 | indent_style = space
15 | indent_size = 2
16 | trim_trailing_whitespace = true
17 | charset = utf-8
18 | max_line_length = 80
19 | indent_brace_style = 1TBS
20 | spaces_around_operators = true
21 | quote_type = auto
22 | # curly_bracket_next_line = true
23 |
24 | # We recommend you to keep these unchanged
25 | end_of_line = lf
26 | charset = utf-8
27 | trim_trailing_whitespace = true
28 | insert_final_newline = true
29 |
30 | [*.md]
31 | trim_trailing_whitespace = false
32 |
33 |
34 |
--------------------------------------------------------------------------------
/client/cardsagainstsobriety/views/player-hand-view.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Your Cards: Choose wisely. Or, not. Whatever.
5 |
6 |
Your Score: {{currentUser.score}}
7 |
8 |
DEAL
9 |
CLEAR
10 |
Your Hand
11 |
12 | {{#each playsHand}}
13 |
14 | {{> whiteCard}}
15 |
16 | {{/each}}
17 |
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/client/cardsagainstsobriety/cardsagainstsobriety.html:
--------------------------------------------------------------------------------
1 |
2 |
18 |
19 |
20 | {{#if currentUser}}
21 | {{> playerHand}}
22 | {{else}}
23 |
26 | {{/if}}
27 |
28 |
--------------------------------------------------------------------------------
/client/layout/layout.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 |
8 |
9 |
10 |
11 | {{> loginButtons}}
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 | {{#if currentUser}}
22 | {{> yield region="show"}}
23 | {{/if}}
24 |
25 |
26 | {{#if currentUser}}
27 | {{> mainBox}}
28 | {{/if}}
29 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/_PRESS-RELEASE.md:
--------------------------------------------------------------------------------
1 | # Cards Against Sobriety #
2 |
3 | ## Cards Against Humanity Redux ##
4 | Play Cards Against Humanity even if your deck or your friends aren't close by.
5 | All those against sobriety, preferably with something better to drink.
6 |
7 | ## Summary ##
8 | Cards against humanity without the humanity. Or apples to apples for grown-ups planning to get tipsy(read: no)/drunk/schwasted/totally blacked. Still no? Then here: the game is simple. Each round, one player asks a question from a Black Card, and everyone else answers with their funniest White Card.
9 |
10 | ## Problem ##
11 | So I hear you asking yourself, why not just play cards against humanity? Again, it's simple: you don't have the fucking deck, you don't have any friends, or both.
12 |
13 | ## Solution ##
14 | Hop on Cards Against Sobriety, play with your 'friends' while hanging out with your one true love(read: booze, duh), and have a damn drunk time.
15 |
16 | ## Quote from You ##
17 | "Fuck off, I'm playing Cards Against Sobriety."
18 |
19 | ## How to Get Started ##
20 | http://www.cardsagainstsobriety.meteor.com
21 |
22 | ## Customer Quote ##
23 | "I don't have to drink alone anymore!"
24 |
25 | ## Closing and Call to Action ##
26 | I'm impressed you read this far, or am I? Hint: I'm not. Go play the damn game.
27 |
--------------------------------------------------------------------------------
/client/chat/chat.js:
--------------------------------------------------------------------------------
1 | chatStream = new Meteor.Stream('chat');
2 | chatCollection = new Meteor.Collection(null);
3 |
4 | chatStream.on('chat', function(message) {
5 | chatCollection.insert({
6 | userId: this.userId,
7 | subscriptionId: this.subscriptionId,
8 | message: message
9 | });
10 | });
11 |
12 | Template.chatBox.helpers({
13 | "messages": function() {
14 | return chatCollection.find();
15 | }
16 | });
17 |
18 |
19 | var subscribedUsers = {};
20 |
21 | Template.chatMessage.helpers({
22 | "user": function() {
23 | if(this.userId == 'me') {
24 | return "me";
25 | } else if(this.userId) {
26 | var username = Session.get('user-' + this.userId);
27 | if(username) {
28 | return username;
29 | } else {
30 | getUsername(this.userId);
31 | }
32 | } else {
33 | return this.subscriptionId;
34 | }
35 | }
36 | });
37 |
38 | Template.chatBox.events({
39 | "click #send": function() {
40 | var message = $('#chat-message').val();
41 | chatCollection.insert({
42 | userId: 'me',
43 | message: message
44 | });
45 | chatStream.emit('chat', message);
46 | $('#chat-message').val('');
47 | }
48 | });
49 |
50 | function getUsername(id) {
51 | Meteor.subscribe('user-info', id);
52 | Deps.autorun(function() {
53 | var user = Meteor.users.findOne(id);
54 | if(user) {
55 | Session.set('user-' + id, user.username);
56 | }
57 | });
58 | }
--------------------------------------------------------------------------------
/client/home/home.html:
--------------------------------------------------------------------------------
1 |
2 | These are temporary links
3 |
8 |
9 |
10 |
Cards Against Sobriety
11 |
Available Rooms
12 |
13 | {{#each createRoom}}
14 |
15 | New Room
16 |
17 | {{/each}}
18 |
19 |
Or Create Your Own Room
20 |
Create Room
21 |
22 |
23 |
Movie Cloud
24 |
Available Rooms
25 |
28 |
Or Create Your Own Room
29 |
Create Room
30 |
31 |
32 |
Times Historian
33 |
Available Rooms
34 |
37 |
Or Create Your Own Room
38 |
Create Room
39 |
40 |
41 |
42 |
43 |
--------------------------------------------------------------------------------
/client/timeshistorian/timesHistorian.js:
--------------------------------------------------------------------------------
1 | // Helper functions for player-hand-view.html
2 |
3 | Template.timesHistorianHand.helpers({
4 | getOptions: function(){
5 | return Session.get("options");
6 | }
7 | });
8 |
9 |
10 |
11 | // player-hand-view.html template event listeners
12 | Template.timesHistorian.events({
13 | "click .timesButton": function (event) {
14 |
15 |
16 | var renderLines = function(articles){
17 | for (var i = 0; i < articles.length; i++){
18 | $('.articles').append(articles[i] + " ");
19 | }
20 | };
21 |
22 |
23 | Meteor.call('getTimesData', function(err, id){
24 | var options = [];
25 |
26 | // There is a very weird bug I am working on here where the data isn't
27 | // showing up in mongo, even though it must as the id had been returned.
28 | // I used a shortcut for now and will finish debugging later.
29 | var data = id
30 | // console.log(id, TimesHistorianData.findOne(id));
31 | // console.log(TimesHistorianData.find({'_id':id}));
32 | // console.log(id, data);
33 |
34 | for (var i = 0; i < data.choices.length; i++){
35 | options.push({'text':data.choices[i]});
36 | }
37 | var yearAnswer = '' + data.chosen.getFullYear();
38 | var temp = yearAnswer.split('');
39 | temp[3] = '0';
40 | var decade_answer = temp.join('');
41 | Session.set('options', options);
42 | Session.set('answer', decade_answer);
43 | renderLines(data.results);
44 | });
45 | },
46 |
47 | "click .card": function (event){
48 | if (this.text===Session.get('answer')){
49 | alert("You Won");
50 | }
51 | }
52 | });
53 |
54 |
55 |
--------------------------------------------------------------------------------
/client/router.js:
--------------------------------------------------------------------------------
1 | Router.configure({
2 | layoutTemplate: 'layout'
3 | });
4 |
5 | Router.route('/', function(){
6 | this.render('home', {to: 'show'});
7 | });
8 |
9 | Router.route('/cardsagainstsobriety', function(){
10 | this.render('cardsAgainstSobriety', {to: 'show'});
11 | }, {
12 | name: 'cardsagainstsobriety'
13 | });
14 |
15 | Router.route('/moviecloud', function() {
16 | this.render('movieCloud', {to: 'show'});
17 | }, {
18 | name: 'moviecloud'
19 | });
20 |
21 | Router.route('/timeshistorian', function() {
22 | this.render('timesHistorian', {to: 'show'});
23 | }, {
24 | name: 'timeshistorian'
25 | });
26 |
27 |
28 | Router.route('/cardsagainstsobriety/:room', {
29 | // this template will be rendered until the subscriptions are ready
30 | loadingTemplate: 'layout',
31 | /*
32 | data: function () {
33 | console.log('this.params is ', this.params);
34 | var data = CardsRoom.findOne({_id: this.params.room});
35 | console.log('returned cards data ', data);
36 | return data;
37 | },
38 | */
39 | /*
40 | waitOn: function () {
41 | // return one handle, a function, or an array
42 | return Meteor.subscribe('CardsRoom', this.params.room);
43 | },
44 | */
45 |
46 | action: function () {
47 | console.log(123);
48 | this.render('cardsAgainstSobriety', {to: 'show'});
49 | },
50 | name: 'cardsagainstsobriety2'
51 | });
52 |
53 | Router.route('/moviecloud/:_id', {
54 | // this template will be rendered until the subscriptions are ready
55 | loadingTemplate: 'layout',
56 |
57 | waitOn: function () {
58 | // return one handle, a function, or an array
59 | return Meteor.subscribe('MovieRoundData', this.params._id);
60 | },
61 |
62 | action: function () {
63 | this.render('movieCloudHand');
64 | }
65 | });
66 |
--------------------------------------------------------------------------------
/.meteor/versions:
--------------------------------------------------------------------------------
1 | accounts-base@1.2.0
2 | accounts-password@1.1.0
3 | accounts-ui@1.1.5
4 | accounts-ui-unstyled@1.1.7
5 | alanning:package-stubber@0.0.9
6 | alanning:roles@1.2.13
7 | amplify@1.0.0
8 | autoupdate@1.2.0
9 | base64@1.0.3
10 | binary-heap@1.0.3
11 | blaze@2.1.0
12 | blaze-tools@1.0.3
13 | boilerplate-generator@1.0.3
14 | callback-hook@1.0.3
15 | check@1.0.5
16 | coffeescript@1.0.6
17 | ddp@1.1.0
18 | deps@1.0.7
19 | ejson@1.0.6
20 | email@1.0.6
21 | fastclick@1.0.3
22 | geojson-utils@1.0.3
23 | html-tools@1.0.4
24 | htmljs@1.0.4
25 | http@1.1.0
26 | id-map@1.0.3
27 | iron:controller@1.0.7
28 | iron:core@1.0.7
29 | iron:dynamic-template@1.0.7
30 | iron:layout@1.0.7
31 | iron:location@1.0.7
32 | iron:middleware-stack@1.0.7
33 | iron:router@1.0.7
34 | iron:url@1.0.7
35 | jquery@1.11.3_2
36 | json@1.0.3
37 | launch-screen@1.0.2
38 | less@1.0.13
39 | livedata@1.0.13
40 | localstorage@1.0.3
41 | logging@1.0.7
42 | meteor@1.1.5
43 | meteor-platform@1.2.2
44 | minifiers@1.1.4
45 | minimongo@1.0.7
46 | mizzao:timesync@0.3.0
47 | mizzao:user-status@0.6.4
48 | mobile-status-bar@1.0.3
49 | mongo@1.1.0
50 | npm-bcrypt@0.7.8_1
51 | observe-sequence@1.0.5
52 | ordered-dict@1.0.3
53 | package-version-parser@3.0.2
54 | practicalmeteor:chai@1.9.2_3
55 | practicalmeteor:loglevel@1.1.0_3
56 | random@1.0.3
57 | reactive-dict@1.1.0
58 | reactive-var@1.0.5
59 | reload@1.1.3
60 | retry@1.0.3
61 | routepolicy@1.0.5
62 | sanjo:jasmine@0.12.6
63 | sanjo:karma@1.4.2
64 | sanjo:meteor-version@1.0.0
65 | service-configuration@1.0.4
66 | session@1.1.0
67 | sha@1.0.3
68 | spacebars@1.0.6
69 | spacebars-compiler@1.0.5
70 | srp@1.0.3
71 | streams@0.0.0
72 | templating@1.1.0
73 | tracker@1.0.6
74 | twbs:bootstrap@3.3.4
75 | ui@1.0.6
76 | underscore@1.0.3
77 | url@1.0.4
78 | velocity:core@0.4.5
79 | velocity:html-reporter@0.4.2
80 | velocity:meteor-stubs@1.0.0_2
81 | velocity:node-soft-mirror@0.3.1
82 | velocity:shim@0.1.0
83 | velocity:test-proxy@0.0.4
84 | webapp@1.2.0
85 | webapp-hashing@1.0.3
86 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | [](http://waffle.io/FrogCircle/whiskey-and-cake)
2 | # Cards Against Sobriety
3 |
4 | Play Cards Against Humanity & (obviously) get drunk, even if your deck or your friends aren't close by.
5 |
6 | ## Team
7 |
8 | - __Product Owner__: Kate Jefferson
9 | - __Scrum Master__: David Blanchard
10 | - __Development Team Members__: Sean Kim, John Games
11 |
12 | ## Table of Contents
13 |
14 | 1. [Usage](#Usage)
15 | 1. [Requirements](#requirements)
16 | 1. [Development](#development)
17 | 1. [Installing Dependencies](#installing-dependencies)
18 | 1. [Tasks](#tasks)
19 | 1. [Team](#team)
20 | 1. [Contributing](#contributing)
21 |
22 | ## Usage
23 |
24 | > BASIC RULES
25 | > To start the game, each player is dealt 10 cards and the motherfxckin' judge is randomly selected. The black card
26 | > of doom is displayed on the gameboard and everyone except the motherfxckin' judge plays the 'appropriate' white card.
27 | > For full effect, the motherfxckin' judge should read the white cards aloud, dramatically. Then she/he may choose
28 | > the winner, who gets a point. Then start a new round, and the judge will rotate. Play until you are drunk or out of alcohol.
29 | > Why's the rum gone?
30 |
31 | ## Requirements
32 |
33 | - Meteor 1.0.4.2
34 |
35 | ## Development
36 |
37 | ### Installing Dependencies
38 |
39 | From within the root directory:
40 |
41 | Install Meteor: curl https://install.meteor.com/ | sh
42 |
43 | Add dependencies: meteor add [following packages]
44 |
45 | meteor-platform, insecure, accounts-ui, accounts-password, twbs:bootstrap,
46 | sanjo:jasmine, velocity:html-reporter, mizzao:user-status
47 |
48 | ### Roadmap
49 |
50 | View the project roadmap [here](https://waffle.io/whiskey-and-cake/whiskey-and-cake-redux).
51 | View the game's original official rules [here](http://s3.amazonaws.com/cah/CAH_Rules.pdf).
52 |
53 | ## Contributing
54 |
55 | See [CONTRIBUTING.md](CONTRIBUTING.md) for contribution guidelines.
56 |
--------------------------------------------------------------------------------
/client/cardsagainstsobriety/views/game-board-view.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
Currently there are {{numPlayers}} players in the room.
7 |
8 | {{#each users}}
9 |
10 | {{username}} - Score: {{score}}
11 |
12 | {{/each}}
13 |
14 |
15 |
16 |
17 |
18 | {{#if winnerChosen}}
19 |
Let's play another, you smarmy wench
20 | {{else}}
21 | {{#if allCardsPlayed}}
22 |
ROUND OVER
23 | {{else}}
24 |
Number of cards -
25 |
26 |
27 | In play: {{cardsPlayed}}
28 |
29 |
30 | Left to be played: {{cardsLeft}}
31 |
32 | {{/if}}
33 |
34 | {{/if}}
35 |
36 |
37 |
38 |
39 |
40 |
45 |
46 | {{#if currentUser.judge}}
47 |
You're the Motha Fuckin' JUDGE
48 | {{/if}}
49 |
50 | {{#if winnerChosen}}
51 |
So somebody finds this sick shit funny..
52 | {{/if}}
53 |
54 |
55 |
56 |
57 |
58 |
59 | {{#each question}}
60 | {{> blackCard}}
61 | {{/each}}
62 |
63 |
64 |
65 |
66 |
67 | {{#each answers}}
68 |
69 | {{> whiteCard}}
70 |
71 |
72 |
73 |
74 |
75 |
76 | {{/each}}
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
--------------------------------------------------------------------------------
/client/cardsagainstsobriety/views/playerHand.js:
--------------------------------------------------------------------------------
1 | // Helper functions for player-hand-view.html
2 | Meteor.subscribe('CardsRoom');
3 |
4 | Template.playerHand.helpers({
5 | //
6 | playsHand: function(){
7 | var user = Meteor.user();
8 | // displays hand to user, filtered by username.
9 | return PlayerHand.find({owner: user._id});
10 | }
11 |
12 | });
13 |
14 | // player-hand-view.html template event listeners
15 | Template.playerHand.events({
16 |
17 | // user clicks on a white card
18 | "click .playCard": function(){
19 | var user = Meteor.user();
20 |
21 | // if user is the judge, he cannot play a white card
22 | if (user.judge) {
23 | console.log('YOU DA JUDGE BRO, NO PLAYING CARDS');
24 | return;
25 | }
26 |
27 | // each user can only play one white card per round
28 | if(GameBoard.find({owner: user._id}).fetch().length > 0){
29 | console.log("Yo, you've already played a card!");
30 | return;
31 | }
32 |
33 | // refer to decks.js for playCard function
34 | Meteor.call('playCard', this, function(err, id) {
35 | //console.log('card being played');
36 | if (err) {
37 | throw err;
38 | }
39 | });
40 |
41 | // refer to decks.js for drawWhite function
42 | Meteor.call('drawWhite', function(err, id){
43 | if(err){
44 | throw err;
45 | }
46 | });
47 |
48 | },
49 |
50 | "click #clearBoard": function(){
51 | // clear out white cards
52 | // redraw blackCard
53 | // choose new judge
54 | Meteor.call("drawBlack", function(err, res){
55 | if(err){
56 | throw err;
57 | } else {
58 | //console.log('Board Cleared');
59 | }
60 | })
61 | },
62 |
63 | "click #dealHand": function(){
64 | var roomId = Router.current().params.room;
65 | var user = Meteor.user();
66 | console.log(user, 'this is the user');
67 | var numHandCards = CardsRoom.find({_id: roomId, 'users._id': user._id }, {'users.cards': 1}).count();
68 | //var numHandCards = PlayerHand.find({owner: user._id}).count();
69 | if(numHandCards >= 10){
70 | console.log('You already have ', numHandCards, ' why not try using them?');
71 | return;
72 | }
73 |
74 | // refer to decks.js for dealHand function
75 | Meteor.call("dealHand", roomId, function(err, res){
76 | console.log('called Meteor.call dealHand');
77 | if(err){
78 | throw err;
79 | } else {
80 | //console.log('Hand Dealt');
81 | //console.log('Result object - ', res);
82 | }
83 | });
84 |
85 | // refer to decks.js for drawBlack function
86 | Meteor.call("drawBlack", function(err, res){
87 | if(err){
88 | throw err;
89 | } else {
90 | //console.log('Board Cleared');
91 | }
92 | })
93 | }
94 |
95 | });
96 |
97 |
98 |
--------------------------------------------------------------------------------
/server/fixtures.js:
--------------------------------------------------------------------------------
1 | //Cmd line if meteor running on port 3000 already.
2 | //kill -9 `ps ax | grep node | grep meteor | awk '{print $1}'`
3 | /**
4 | /* DECK INSTANTIATION */
5 |
6 | // on meteor start, clear current decks
7 | var PlayerHand = {};
8 | var GameBoard = {};
9 | var RoundInfo = {};
10 |
11 | Meteor.methods({
12 | CreateCardsRoom: function() {
13 | var WhiteDeck = [];
14 | var BlackDeck = [];
15 | // in-place shuffle algorithm for BlackCards
16 | // cards are shuffled prior to instantiating the database
17 | for (var i = 0; i < BlackCards.length; i++) {
18 | var j = Math.floor(Math.random() * i);
19 | var hole = BlackCards[i];
20 | BlackCards[i] = BlackCards[j];
21 | BlackCards[j] = hole;
22 | }
23 |
24 | // instantiate databases with shuffled data
25 | for (var i = 0; i < BlackCards.length; i++) {
26 | BlackDeck.push({
27 | text: BlackCards[i]["text"],
28 | expansion: BlackCards[i]["expansion"]
29 | });
30 | }
31 |
32 | for (var i = 0; i < WhiteCards.length; i++) {
33 | WhiteDeck.push({
34 | text: WhiteCards[i]["text"],
35 | expansion: WhiteCards[i]["expansion"]
36 | });
37 | }
38 | //var returnRoom = {};
39 | var returnRoom = CardsRoom.insert({
40 | createdBy: (Meteor.userId()),
41 | createdAt: new Date(),
42 | WhiteDeck: WhiteDeck,
43 | BlackDeck: BlackDeck,
44 | RoundInfo: {},
45 | PlayerHand: [],
46 | GameBoard: [],
47 | users: []
48 | }, function(err, roomInserted) {
49 | console.log('roomInserted is ', roomInserted);
50 | returnRoom = roomInserted;
51 | });
52 | return {room: returnRoom};
53 | //console.log('returnRoom is ', returnRoom);
54 | //return returnRoom;
55 | },
56 |
57 | JoinCardsRoom: function(roomId, userId) {
58 | CardsRoom.update({_id: roomId}, {$push: {'users': userId}});
59 | return CardsRoom.find({_id: roomId}).fetch();
60 | }
61 | });
62 |
63 | // fields added to Meteor.user on instantiation
64 | Accounts.onCreateUser(function(options, user) {
65 | user.score = 0;
66 | user.judge = false;
67 | return user;
68 | });
69 |
70 | /* PUBLISHING */
71 |
72 | Meteor.publish("CardsRoom", function() {
73 | return CardsRoom.find();
74 | });
75 | Meteor.publish("WhiteDeck", function(roomID) {
76 | return CardsRoom.find({}, {WhiteDeck: 1});
77 | });
78 | Meteor.publish("BlackDeck", function() {
79 | return CardsRoom.find({}, {BlackDeck: 1});
80 | });
81 | Meteor.publish("User", function() {
82 | return CardsRoom.find({}, {User: 1});
83 | });
84 | Meteor.publish("GameBoard", function() {
85 | return CardsRoom.find({}, {GameBoard: 1});
86 | });
87 | Meteor.publish("RoundInfo", function() {
88 | return CardsRoom.find({}, {RoundInfo: 1});
89 | });
90 | Meteor.publish("user-info", function(id) {
91 | return Meteor.users.find({_id: id}, {fields: {username: 1}});
92 | });
93 |
--------------------------------------------------------------------------------
/server/TimesHistorian.js:
--------------------------------------------------------------------------------
1 | Meteor.methods({
2 |
3 | getTimesData: function(){
4 |
5 | // function to take a date and return it in the right string format
6 | var dateToString = function(inputDate){
7 | var year = inputDate.getFullYear();
8 | var month = ''+inputDate.getMonth();
9 | if (month.length === 1){
10 | month = '0' + month;
11 | }
12 | var day = ''+inputDate.getDate();
13 | if (day.length === 1){
14 | day = '0' + day
15 | }
16 | return ''+year+month+day;
17 | };
18 |
19 | // generate a random date between start and end
20 | var genDate = function(start, end) {
21 | return new Date(start.getTime() + Math.random() * (end.getTime() - start.getTime()));
22 | };
23 |
24 | // Get random decades for the choices
25 | var getRandDecades = function(chosenDate){
26 | var result = [];
27 | var randN;
28 | var decades = ['1850','1860','1870','1880','1890','1900','1910','1920','1930','1940','1950','1960','1970','1980','1990'];
29 | var year = '' + chosenDate.getFullYear();
30 | year = year.split('');
31 | year[3] = '0';
32 | result.push(year.join(''));
33 | while (result.length < 10){
34 | randN = Math.floor((Math.random() * decades.length));
35 | if (result.indexOf(decades[randN]) === -1){
36 | result.push(decades[randN]);
37 | }
38 | }
39 | return result.sort();
40 | };
41 |
42 | // function to get the articles
43 | var getArticles = function(){
44 | var startDate = new Date(1851, 8, 19);
45 | var endDate = new Date(1999,12,31);
46 | // getting random date
47 | var randDate = genDate(startDate, endDate);
48 | // converting to string
49 | var randomDate = dateToString(randDate);
50 | var parsedArticles = [];
51 |
52 | // turning aync call to a sync
53 | var syncCall= Meteor.wrapAsync(HTTP.call);
54 | // querying api
55 | var data = syncCall('GET', "http://api.nytimes.com/svc/search/v2/articlesearch.json?begin_date="+randomDate+"&end_date="+randomDate+"&api-key=654452f497823c3cdae2119e3bdd6b4f:9:71687614");
56 | // looping through results to only find ones with valid lead paragraphs
57 | for (var i = 0; i < data.data.response.docs.length; i++){
58 | if (data.data.response.docs[i].lead_paragraph && parsedArticles.length < 5){
59 | parsedArticles.push(data.data.response.docs[i].lead_paragraph);
60 | }
61 | }
62 | return {'results': parsedArticles, 'chosen': randDate, 'choices': getRandDecades(randDate)};
63 | };
64 |
65 | var data = getArticles();
66 | var id = TimesHistorianData.insert(data);
67 | // should be returning id, but see the bug documentation client side
68 | return data;
69 |
70 | }
71 | });
72 |
73 | Meteor.publish("TimesHistorianData", function() {
74 | return TimesHistorianData.find();
75 | });
76 |
--------------------------------------------------------------------------------
/client/cardsagainstsobriety/views/gameBoard.js:
--------------------------------------------------------------------------------
1 | Template.gameBoard.helpers({
2 |
3 | // Returns all online users
4 | //CHANGE THIS TO FIND ONLY USERS IN THIS GAME
5 | users: function(){
6 | return Meteor.users.find({'status.online': true});
7 | },
8 |
9 | // Returns the black question card currently on the GameBoard
10 | question: function(){
11 | return GameBoard.find({black: true});
12 | },
13 |
14 | // Returns the white answer cards currently on the GameBoard
15 | answers: function(){
16 | return GameBoard.find({black: false});
17 | },
18 |
19 | // Returns the total number of online players
20 | numPlayers: function(){
21 | if (Meteor.users.find({'status.online': true}).count() === 0) {
22 | return 'NO';
23 | } else {
24 | return Meteor.users.find({'status.online': true}).count();
25 | }
26 | },
27 |
28 | // Returns a count of all played cards on the board
29 | cardsPlayed: function(){
30 | return GameBoard.find({black: false}).count()
31 | },
32 |
33 | // Returns a count of the cards still needed to be played for the round
34 | cardsLeft: function(){
35 | var count = Meteor.users.find({'status.online': true}).count();
36 | return Math.max(0, (count - 1) - GameBoard.find({black: false}).count());
37 | },
38 |
39 | // Returns true if all of the cards have been played, which signifies that the round is over
40 | allCardsPlayed: function(){
41 | var players = (Meteor.users.find().count() - 1);
42 | var played = GameBoard.find({black: false}).count();
43 | return players - played === 0;
44 | },
45 |
46 | // Returns true if the judge has chosen the winning card.
47 | // When true, the game-board-view.html will display a button that starts the next round
48 | winnerChosen: function(){
49 | var round = RoundInfo.findOne({});
50 | return round.roundOver;
51 | }
52 |
53 | });
54 |
55 |
56 | Template.gameBoard.events({
57 | "click .answerCards": function (event) {
58 | event.stopPropagation();
59 |
60 | // calls endRound from deck.js, which sets roundOver to true for the winnerChosen helper above
61 | Meteor.call('endRound', function(err, res){
62 | if(err){
63 | throw err;
64 | }
65 | });
66 |
67 | // store click context to pass into method call
68 | var cardOwner = this.owner;
69 |
70 | // calls incrementScore from decks.js
71 | Meteor.call('incrementScore', cardOwner, function(err, id) {
72 | if (err) {
73 | throw err;
74 | }
75 | });
76 |
77 | // stores the winning card
78 | var answer = GameBoard.findOne({owner: cardOwner});
79 | // stores the question card
80 | var question = GameBoard.findOne({black: true});
81 |
82 | // calls clearLosers from decks.js, which clears the GameBoard, then inserts
83 | // the winning card along with the card it answered into GameBoard
84 | Meteor.call("clearLosers", answer, question, function(err, result){
85 | if(err) {
86 | throw err;
87 | }
88 | });
89 |
90 | },
91 |
92 | // Event listener tied to the 'Let's play another, you smarmy wench' button
93 | // which is only shown if the judge has chosen the winning card.
94 | "click #nextRound": function(){
95 |
96 | // calls newRound which removes round data
97 | Meteor.call('newRound', function(err, result){
98 | if(err) {
99 | throw err;
100 | }
101 | })
102 |
103 | // remove cards from GameBoard
104 | Meteor.call('clearGameBoard', function (err, result) {
105 | if (err) {
106 | throw err;
107 | }
108 | })
109 |
110 | // pass 'judgeship' to next user
111 | Meteor.call('toggleJudge', function (err, result) {
112 | if (err) {
113 | throw err;
114 | }
115 | })
116 |
117 | // draw next black card
118 | Meteor.call("drawBlack", function(err, res){
119 | if(err){
120 | throw err;
121 | }
122 | })
123 | }
124 |
125 | });
126 |
127 |
128 |
129 |
--------------------------------------------------------------------------------
/client/stylesheets/cardsagainstsobriety.css:
--------------------------------------------------------------------------------
1 | /* CSS declarations go here */
2 |
3 | .container {
4 | width: 940px;
5 | margin: 0 auto;
6 | }
7 |
8 | .playerButton {
9 | background-color: white;
10 | border: 3px solid black;
11 | border-radius: 7px;
12 | padding: 5px 15px;
13 | box-shadow: 3px 3px;
14 | }
15 |
16 | .playerButton:focus {
17 | outline: 0;
18 | }
19 |
20 | .playerButton:active {
21 | box-shadow: none;
22 | transform: translate(3px, 3px);
23 | }
24 |
25 | .footer {
26 | padding-top: 15px;
27 | font-family: 'Pinyon Script', cursive;
28 | font-size: 27px;
29 | }
30 |
31 | /****** Navbar Group ******/
32 | .navbar {
33 | margin-bottom: 0;
34 | }
35 |
36 | .navbar-brand {
37 | color: white;
38 | font-family: 'Miss Fajardose', cursive;
39 | font-size: 7em;
40 | overflow: hidden;
41 | text-overflow: clip;
42 | line-height: 75px;
43 | height: auto;
44 | }
45 |
46 | a:hover, a:focus {
47 | color: dodgerblue;
48 | outline: 0;
49 | }
50 |
51 | header {
52 | background-color: black;
53 | }
54 |
55 | #login-buttons a {
56 | background-color: black;
57 | text-decoration: none;
58 | color: white;
59 | }
60 |
61 | .btn-default, .btn-default:hover, .btn-default:active, .btn-default:visited {
62 | background-color: black;
63 | outline: 0;
64 | }
65 |
66 | .btn {
67 | position: relative;
68 | top: 50%;
69 | transform: translateY(25%);
70 | border-radius: 0;
71 | border: none;
72 | }
73 |
74 | .btn:focus, .btn:active {
75 | outline: 0;
76 | }
77 |
78 | .accounts-dialog label {
79 | display: block;
80 | }
81 |
82 | #login-dropdown-list {
83 | background-color: black;
84 | color: white;
85 | }
86 |
87 | #login-buttons .login-button:hover, .accounts-dialog .login-button:hover {
88 | background-color: white;
89 | color: black;
90 | }
91 |
92 | #login-buttons .login-button, .accounts-dialog .login-button {
93 | background-color: black;
94 | color: white;
95 | }
96 |
97 | .btn-default, .btn-default:hover, .btn-default:active, .btn-default:focus {
98 | background-color: black;
99 | }
100 |
101 | #login-username-label, #login-password-label {
102 | color: white;
103 | }
104 |
105 | #login-username, #login-password, #login-password-again {
106 | color: black;
107 | }
108 |
109 | #login-dropdown-list {
110 | left: -175px;
111 | top: 40px;
112 | }
113 |
114 | /*** End of Navbar Group ***/
115 |
116 |
117 | /******* Card Group ********/
118 | .card {
119 | background-color: black;
120 | color: white;
121 | width: 125px;
122 | height: 185px;
123 | border-radius: 3px;
124 | display: table-cell;
125 | }
126 |
127 | .white {
128 | background-color: white;
129 | color: black;
130 | width: 125px;
131 | height: 185px;
132 | border: 1px solid black;
133 | border-radius: 3px;
134 | }
135 |
136 | .card-content {
137 | width: 125px;
138 | height: 185px;
139 | position: relative;
140 | border-radius: 3px;
141 | top: 50%;
142 | transform: translateY(-50%);
143 | display: inline-block;
144 | padding: 5px;
145 | }
146 |
147 | .card-text {
148 | font-family: Tahoma, Geneva, sans-serif;
149 | font-weight: 700;
150 | font-size: 12px;
151 | text-align: left;
152 | display: inline-block;
153 | }
154 |
155 | .expansion {
156 | font-size: 7px;
157 | text-align: left;
158 | display: block;
159 | position: absolute;
160 | bottom: 0;
161 | }
162 | /**** End of Card Group ****/
163 |
164 |
165 | /***** Gameboard Group *****/
166 | .bs-docs-header {
167 | margin-bottom: 25px;
168 | }
169 |
170 | .answerCards {
171 | background-color: white;
172 | color: black;
173 | width: 125px;
174 | height: 185px;
175 | border-radius: 3px;
176 | display: inline-block;
177 | margin-right: 2px;
178 | }
179 |
180 | .pickWinner {
181 | border: 1px solid black;
182 | background-color: white;
183 | }
184 |
185 | .questionCard {
186 | clear: left;
187 | display: inline-block;
188 | }
189 |
190 | .playerBoard {
191 | float: left;
192 | }
193 |
194 | .roundCounter {
195 | float: right;
196 | border: 1px solid black;
197 | padding: 5px 10px;
198 | background-color: #eaeaea;
199 | -webkit-border-radius: 5px;
200 | -moz-border-radius: 5px;
201 | border-radius: 5px;
202 | }
203 | /* End of Gameboard Group **/
204 |
205 |
206 | /**** Playerhand Group *****/
207 | .bs-docs-container#player {
208 | background-color: black;
209 | color: white;
210 | padding-bottom: 30px;
211 | }
212 |
213 | .text {
214 | text-align: center;
215 | }
216 |
217 | .textarea {
218 | width: 250px;
219 | }
220 |
221 | .playCard {
222 | display: inline-block;
223 | }
224 |
225 | #dealHand, #clearBoard {
226 | background-color: black;
227 | border: 3px solid white;
228 | box-shadow: 3px 3px white;
229 | width: 7em;
230 | margin-right: 5px;
231 | }
232 |
233 | #dealHand:active, #clearBoard:active {
234 | box-shadow: none;
235 | }
236 | /* End of Playerhand Group */
237 |
238 |
239 |
--------------------------------------------------------------------------------
/private/stopwords.txt:
--------------------------------------------------------------------------------
1 | a
2 | as
3 | able
4 | about
5 | above
6 | according
7 | accordingly
8 | across
9 | actually
10 | after
11 | afterwards
12 | again
13 | against
14 | aint
15 | all
16 | allow
17 | allows
18 | almost
19 | alone
20 | along
21 | already
22 | also
23 | although
24 | always
25 | am
26 | among
27 | amongst
28 | an
29 | and
30 | another
31 | any
32 | anybody
33 | anyhow
34 | anyone
35 | anything
36 | anyway
37 | anyways
38 | anywhere
39 | apart
40 | appear
41 | appreciate
42 | appropriate
43 | are
44 | arent
45 | around
46 | as
47 | aside
48 | ask
49 | asking
50 | associated
51 | at
52 | available
53 | away
54 | awfully
55 | b
56 | be
57 | became
58 | because
59 | become
60 | becomes
61 | becoming
62 | been
63 | before
64 | beforehand
65 | behind
66 | being
67 | believe
68 | below
69 | beside
70 | besides
71 | best
72 | better
73 | between
74 | beyond
75 | both
76 | brief
77 | but
78 | by
79 | c
80 | cmon
81 | cs
82 | came
83 | can
84 | cant
85 | cannot
86 | cant
87 | cause
88 | causes
89 | certain
90 | certainly
91 | changes
92 | clearly
93 | co
94 | com
95 | come
96 | comes
97 | concerning
98 | consequently
99 | consider
100 | considering
101 | contain
102 | containing
103 | contains
104 | corresponding
105 | could
106 | couldnt
107 | course
108 | currently
109 | d
110 | definitely
111 | described
112 | despite
113 | did
114 | didnt
115 | different
116 | do
117 | does
118 | doesnt
119 | doing
120 | dont
121 | done
122 | down
123 | downwards
124 | during
125 | e
126 | each
127 | edu
128 | eg
129 | eight
130 | either
131 | else
132 | elsewhere
133 | enough
134 | entirely
135 | especially
136 | et
137 | etc
138 | even
139 | ever
140 | every
141 | everybody
142 | everyone
143 | everything
144 | everywhere
145 | ex
146 | exactly
147 | example
148 | except
149 | f
150 | far
151 | few
152 | fifth
153 | first
154 | five
155 | followed
156 | following
157 | follows
158 | for
159 | former
160 | formerly
161 | forth
162 | four
163 | from
164 | further
165 | furthermore
166 | g
167 | get
168 | gets
169 | getting
170 | given
171 | gives
172 | go
173 | goes
174 | going
175 | gone
176 | got
177 | gotten
178 | greetings
179 | h
180 | had
181 | hadnt
182 | happens
183 | hardly
184 | has
185 | hasnt
186 | have
187 | havent
188 | having
189 | he
190 | hes
191 | hello
192 | help
193 | hence
194 | her
195 | here
196 | heres
197 | hereafter
198 | hereby
199 | herein
200 | hereupon
201 | hers
202 | herself
203 | hi
204 | him
205 | himself
206 | his
207 | hither
208 | hopefully
209 | how
210 | howbeit
211 | however
212 | i
213 | id
214 | ill
215 | im
216 | ive
217 | ie
218 | if
219 | ignored
220 | immediate
221 | in
222 | inasmuch
223 | inc
224 | indeed
225 | indicate
226 | indicated
227 | indicates
228 | inner
229 | insofar
230 | instead
231 | into
232 | inward
233 | is
234 | isnt
235 | it
236 | itd
237 | itll
238 | its
239 | its
240 | itself
241 | j
242 | just
243 | k
244 | keep
245 | keeps
246 | kept
247 | know
248 | knows
249 | known
250 | l
251 | last
252 | lately
253 | later
254 | latter
255 | latterly
256 | least
257 | less
258 | lest
259 | let
260 | lets
261 | like
262 | liked
263 | likely
264 | little
265 | look
266 | looking
267 | looks
268 | ltd
269 | m
270 | mainly
271 | many
272 | may
273 | maybe
274 | me
275 | mean
276 | meanwhile
277 | merely
278 | might
279 | more
280 | moreover
281 | most
282 | mostly
283 | much
284 | must
285 | my
286 | myself
287 | n
288 | name
289 | namely
290 | nd
291 | near
292 | nearly
293 | necessary
294 | need
295 | needs
296 | neither
297 | never
298 | nevertheless
299 | new
300 | next
301 | nine
302 | no
303 | nobody
304 | non
305 | none
306 | noone
307 | nor
308 | normally
309 | not
310 | nothing
311 | novel
312 | now
313 | nowhere
314 | o
315 | obviously
316 | of
317 | off
318 | often
319 | oh
320 | ok
321 | okay
322 | old
323 | on
324 | once
325 | one
326 | ones
327 | only
328 | onto
329 | or
330 | other
331 | others
332 | otherwise
333 | ought
334 | our
335 | ours
336 | ourselves
337 | out
338 | outside
339 | over
340 | overall
341 | own
342 | p
343 | particular
344 | particularly
345 | per
346 | perhaps
347 | placed
348 | please
349 | plus
350 | possible
351 | presumably
352 | probably
353 | provides
354 | q
355 | que
356 | quite
357 | qv
358 | r
359 | rather
360 | rd
361 | re
362 | really
363 | reasonably
364 | regarding
365 | regardless
366 | regards
367 | relatively
368 | respectively
369 | right
370 | s
371 | said
372 | same
373 | saw
374 | say
375 | saying
376 | says
377 | second
378 | secondly
379 | see
380 | seeing
381 | seem
382 | seemed
383 | seeming
384 | seems
385 | seen
386 | self
387 | selves
388 | sensible
389 | sent
390 | serious
391 | seriously
392 | seven
393 | several
394 | shall
395 | she
396 | should
397 | shouldnt
398 | since
399 | six
400 | so
401 | some
402 | somebody
403 | somehow
404 | someone
405 | something
406 | sometime
407 | sometimes
408 | somewhat
409 | somewhere
410 | soon
411 | sorry
412 | specified
413 | specify
414 | specifying
415 | still
416 | sub
417 | such
418 | sup
419 | sure
420 | t
421 | ts
422 | take
423 | taken
424 | tell
425 | tends
426 | th
427 | than
428 | thank
429 | thanks
430 | thanx
431 | that
432 | thats
433 | thats
434 | the
435 | their
436 | theirs
437 | them
438 | themselves
439 | then
440 | thence
441 | there
442 | theres
443 | thereafter
444 | thereby
445 | therefore
446 | therein
447 | theres
448 | thereupon
449 | these
450 | they
451 | theyd
452 | theyll
453 | theyre
454 | theyve
455 | think
456 | third
457 | this
458 | thorough
459 | thoroughly
460 | those
461 | though
462 | three
463 | through
464 | throughout
465 | thru
466 | thus
467 | to
468 | together
469 | too
470 | took
471 | toward
472 | towards
473 | tried
474 | tries
475 | truly
476 | try
477 | trying
478 | twice
479 | two
480 | u
481 | un
482 | under
483 | unfortunately
484 | unless
485 | unlikely
486 | until
487 | unto
488 | up
489 | upon
490 | us
491 | use
492 | used
493 | useful
494 | uses
495 | using
496 | usually
497 | uucp
498 | v
499 | value
500 | various
501 | very
502 | via
503 | viz
504 | vs
505 | w
506 | want
507 | wants
508 | was
509 | wasnt
510 | way
511 | we
512 | wed
513 | well
514 | were
515 | weve
516 | welcome
517 | well
518 | went
519 | were
520 | werent
521 | what
522 | whats
523 | whatever
524 | when
525 | whence
526 | whenever
527 | where
528 | wheres
529 | whereafter
530 | whereas
531 | whereby
532 | wherein
533 | whereupon
534 | wherever
535 | whether
536 | which
537 | while
538 | whither
539 | who
540 | whos
541 | whoever
542 | whole
543 | whom
544 | whose
545 | why
546 | will
547 | willing
548 | wish
549 | with
550 | within
551 | without
552 | wont
553 | wonder
554 | would
555 | would
556 | wouldnt
557 | x
558 | y
559 | yes
560 | yet
561 | you
562 | youd
563 | youll
564 | youre
565 | youve
566 | your
567 | yours
568 | yourself
569 | yourselves
570 | z
571 | zero
572 | yeah
--------------------------------------------------------------------------------
/collections/decks.js:
--------------------------------------------------------------------------------
1 | // create shuffled decks
2 | CardsRoom = new Meteor.Collection('CardsRoom');
3 |
4 | MovieRoundData = new Meteor.Collection("MovieRoundData");
5 | TimesHistorianData = new Meteor.Collection("TimesHistorianData");
6 | // create collection with all user hands
7 |
8 | // create collection of all cards on the game table (one black card & all played white cards)
9 |
10 | // Currently this collection provides a check for whether the round is over
11 | // This is done by initializing a roundOver property of this collection when the judge picks a winner
12 | // Then that property is deleted when a new round is started
13 |
14 | //This is where we hold our methods that get called from the client side
15 | Meteor.methods({
16 | // function deals a player hand at the beginning of the game
17 | dealHand: function(roomId) {
18 | //userArray holds an array of players that are logged in using the user-status package
19 | //var userArray = CardsRoom.find({ _id : roomId }, { users: 1 }).fetch();
20 | var userArray = CardsRoom.findOne({_id: roomId}, {users: 1}); // returns all users for that room
21 | console.log('userArray is ', userArray);
22 | var judgeCounter = 0;
23 | for (var i = 0; i < userArray.length; i++) {
24 | if (userArray[i].judge === true) {
25 | judgeCounter++;
26 | }
27 | }
28 | //if the deal button was pushed and no judges are assigned already, assign one randomly
29 | if (judgeCounter === 0) {
30 | var rng = Math.round(Math.random() * (userArray.length - 1));
31 | var randomUserId = userArray[rng]._id;
32 | CardsRoom.update({_id: roomId, "users._id": randomUserId}, {$set: {'users.$.judge': true}});
33 | //GameBoard.update({_id: gameId}, {$set: {'judge': true}});
34 | }
35 | //if the deal button was pushed and there is 1 judge already, toggle that judge
36 | if (judgeCounter === 1) {
37 | Meteor.call("toggleJudge", function(err) { //function at the end of this file
38 | if (err) {
39 | throw err;
40 | }
41 | });
42 | }
43 | //iterate over all active players and insert up to 10 cards in their hand
44 | for (var j = 0; j < userArray.length; j++) {
45 | //adding .fetch() onto the end of the find method returns an array, thus we can use length
46 | if (!(CardsRoom.find({_id: roomId, 'users._id': randomUserId[j]}, {'users.cards': 1}).length === 10)) {//PlayerHand
47 | for (var i = 0; i < 10; i++) {
48 | var _entry = CardsRoom.update({_id: roomId}, {$pop: {WhiteDeck: 1}}).fetch();
49 | CardsRoom.update({_id: roomId, 'users._id': randomUserId[j]}, {$push: {'users.cards': _entry}});
50 | }
51 | }
52 | }
53 | },
54 |
55 | // replenishes white cards in the player's hand
56 | drawWhite: function(roomId) {
57 | var userArray = CardsRoom.find({_id: roomId}, {users: 1});
58 | for (var i = 0; i < userArray.length; i++) {
59 | while (CardsRoom.find({_id: roomId, 'users._id': userArray[i]._id}, {'users.cards': 1}).length < 10) {
60 | var _entry = CardsRoom.update({_id: roomId}, {$pop: {WhiteDeck: 1}}).fetch();
61 | CardsRoom.update({_id: roomId, 'users._id': userArray[i]._id}, {$push: {'users.cards': _entry}});
62 | }
63 | }
64 | },
65 | // adds card to game board with the user id and removes from playerhand
66 | playCard: function(card, roomId) {
67 | CardsRoom.update({_id: roomId, 'users._id': userArray[i]._id}, {pull: {'users.cards': card.text}});
68 | CardsRoom.update({_id: roomId}, {
69 | GameBoard: {
70 | no: card.no,
71 | text: card.text,
72 | expansion: card.expansion,
73 | black: false,
74 | owner: card.owner
75 | }
76 | }
77 | );
78 | },
79 |
80 | // this function starts a new hand by clearing the GameBoard and adding a black card
81 | drawBlack: function(roomId) {
82 | CardsRoom.update({_id: roomId}, {$set: {'GameBoard': []}});
83 | var _entry = CardsRoom.update({_id: roomId}, {$pop: {BlackDeck: 1}}).fetch();
84 | CardsRoom.update({_id: roomId}, {$push: {'GameBoard': _entry}});
85 | },
86 |
87 | //increment score of card owner
88 | incrementScore: function(cardOwner) {
89 | CardsRoom.update({_id: roomId, "users._id": cardOwner}, {$inc: {'users.$.score': 1}});
90 | Meteor.users.update({_id: cardOwner}, {$inc: {'score': 1}});
91 | },
92 |
93 | // signals the end of the inserting a roundOver property and setting it to true
94 | endRound: function() {
95 | CardsRoom.update({_id: roomId}, {$set: {'RoundInfo.roundOver': true}})
96 | },
97 |
98 | // resets the round by removing the roundOver property
99 | newRound: function() {
100 | var round = CardsRoom.update({_id: roomId}, {$pop: {RoundInfo: 1}}).fetch();
101 | //var round = RoundInfo.findOne({});
102 | //RoundInfo.remove({_id: round._id});
103 | },
104 |
105 | // Clear losing cards from the gameboard by clearing the entire board
106 | // and then inserting the winning answer and corresponding question
107 | clearLosers: function(winnerCard, questionCard) {
108 |
109 | CardsRoom.update({_id: roomId}, {$set: {'GameBoard': []}});
110 | CardsRoom.update({_id: roomId}, {$push: {'GameBoard': winnerCard}});
111 | CardsRoom.update({_id: roomId}, {$push: {'GameBoard': questionCard}});
112 |
113 | },
114 |
115 | // clears gameboard & starts new round
116 | clearGameBoard: function() {
117 | CardsRoom.update({_id: roomId}, {$set: {'GameBoard': []}});
118 | },
119 |
120 | // rotates judge role after each round
121 | toggleJudge: function() {
122 | //var userArray = CardsRoom.find({_id: roomId}, {users: 1});
123 | var userArray = CardsRoom.find({_id: roomId}, {users: 1});
124 |
125 | //iterate through all active users
126 | for (var i = 0; i < userArray.length; i++) {
127 | //if that user is the judge
128 | if (userArray[i].judge === true) {
129 | //take his unique _.id
130 | var currentId = userArray[i]._id;
131 | //set his judge property to false
132 | CardsRoom.update({_id: roomId, "users._id": userArray[i]._id}, {$set: {'users.$.judge': true}});
133 | //if that user is the final element in the array
134 | if (i === (userArray.length - 1)) {
135 | //set the judge property to true for the first position in the array
136 | CardsRoom.update({_id: roomId, "users._id": userArray[i]._id}, {$set: {'users.$.judge': true}});
137 | //break out
138 | return;
139 | } else {
140 | //for any other position make the next array index the judge
141 | CardsRoom.update({_id: roomId, "users._id": userArray[i]._id}, {$set: {'users.$.judge': true}});
142 | //breakout
143 | return;
144 | }
145 | }
146 | }
147 | },
148 |
149 | newGame: function(roomId){
150 | CardsRoom.update({_id: roomId}, {$set: {'GameBoard': []}});
151 | CardsRoom.update({_id: roomId}, {$set: {'WhiteDeck': []}});
152 | CardsRoom.update({_id: roomId}, {$set: {'BlackDeck': []}});
153 | CardsRoom.update({_id: roomId}, {$set: {'RoundInfo': []}});
154 | CardsRoom.update({_id: roomId}, {$set: {'users.hand': []}});
155 | }
156 | });
157 |
--------------------------------------------------------------------------------
/server/MovieCloud.js:
--------------------------------------------------------------------------------
1 | var movieFiles = ['A_Beautiful_Mind.srt',
2 | 'A_Clockwork_Orange.srt',
3 | 'A_Few_Good_Men.srt',
4 | 'Back_to_the_Future.srt',
5 | 'City_of_God.srt',
6 | 'Diehard.srt',
7 | 'Fight_Club.srt',
8 | 'Forrest_Gump.srt',
9 | 'Gladiator.srt',
10 | 'Good_Will_Hunting.srt',
11 | 'Inception.srt',
12 | 'Into_the_Wild.srt',
13 | 'Memento.srt',
14 | 'One_Flew_Over_the_Cuckoos_Nest.srt',
15 | 'Pulp_Fiction.srt',
16 | 'Raiders_of_the_Lost_Arc.srt',
17 | 'Reservoir_Dogs.srt',
18 | 'Return_of_the_King.srt',
19 | 'Saving_Private_Ryan.srt',
20 | 'Scarface.srt',
21 | 'Schindlers_List.srt',
22 | 'Se7en.srt',
23 | 'Terminator.srt',
24 | 'The_Dark_Knight.srt',
25 | 'The_Departed.srt',
26 | 'The_Empire_Strikes_Back.srt',
27 | 'The_Godfather.srt',
28 | 'The_Green_Mile.srt',
29 | 'The_Lion_King.srt',
30 | 'The_Matrix.srt',
31 | 'The_Princess_Bride.srt',
32 | 'The_Shawshank_Redemption.srt',
33 | 'The_Silence_of_the_Lambs.srt',
34 | 'Toy_Story.srt'];
35 |
36 | var fs = Npm.require('fs');
37 | var parser = function() {
38 | var r = {};
39 | r.fromSrt = function(r, e) {
40 | var n = e ? !0 : !1;
41 | r = r.replace(/\r/g, "");
42 | var i = /(\d+)\n(\d{2}:\d{2}:\d{2},\d{3}) --> (\d{2}:\d{2}:\d{2},\d{3})/g;
43 | r = r.split(i), r.shift();
44 | for (var a = [], d = 0; d < r.length; d += 4)a.push({
45 | id: r[d].trim(),
46 | startTime: n ? t(r[d + 1].trim()) : r[d + 1].trim(),
47 | endTime: n ? t(r[d + 2].trim()) : r[d + 2].trim(),
48 | text: r[d + 3].trim()
49 | });
50 | return a
51 | }, r.toSrt = function(r) {
52 | if (!r instanceof Array)return "";
53 | for (var t = "", n = 0; n < r.length; n++) {
54 | var i = r[n];
55 | isNaN(i.startTime) || isNaN(i.endTime) || (i.startTime = e(parseInt(i.startTime, 10)), i.endTime = e(parseInt(i.endTime, 10))), t += i.id + "\r\n", t += i.startTime + " --> " + i.endTime + "\r\n", t += i.text.replace("\n", "\r\n") + "\r\n\r\n"
56 | }
57 | return t
58 | };
59 | var t = function(r) {
60 | var t = /(\d+):(\d{2}):(\d{2}),(\d{3})/, e = t.exec(r);
61 | if (null === e)return 0;
62 | for (var n = 1; 5 > n; n++)e[n] = parseInt(e[n], 10), isNaN(e[n]) && (e[n] = 0);
63 | return 36e5 * e[1] + 6e4 * e[2] + 1e3 * e[3] + e[4]
64 | }, e = function(r) {
65 | var t = [36e5, 6e4, 1e3], e = [];
66 | for (var n in t) {
67 | var i = (r / t[n] >> 0).toString();
68 | i.length < 2 && (i = "0" + i), r %= t[n], e.push(i)
69 | }
70 | var a = r.toString();
71 | if (a.length < 3)for (n = 0; n <= 3 - a.length; n++)a = "0" + a;
72 | return e.join(":") + "," + a
73 | };
74 | return r
75 | }();
76 | "object" == typeof exports && (module.exports = parser);
77 | var commonWords = Assets.getText('stopwords.txt');
78 |
79 | Meteor.methods({
80 |
81 | getMovieData: function() {
82 | // Reading from a file of common words to keep out of word cloud and putting into an object for quick lookup
83 | var commonWordsDic = {};
84 | _.each(commonWords.split("\n"), function(word) {
85 | commonWordsDic[word] = true;
86 | });
87 |
88 | // reading the movie directory and randomly selecting a file. We read that file using the srt parser and then
89 | // put the data into a Javascript dictionary
90 | randMovies = [];
91 | while (randMovies.length < 5) {
92 | var randN = Math.floor((Math.random() * movieFiles.length));
93 | var randMovie = movieFiles[randN].split('.')[0];
94 | if (randMovies.indexOf(randMovie) === -1) {
95 | randMovies.push(randMovie);
96 | }
97 | }
98 |
99 | var randN = Math.floor((Math.random() * randMovies.length));
100 | var randMovieFile = randMovies[randN] + '.srt';
101 | console.log(randMovies);
102 |
103 | console.log(randMovieFile);
104 | var srt = Assets.getText('Movies/' + randMovieFile);
105 | var data = parser.fromSrt(srt);
106 |
107 | // A function to read each line and count the usage of every word
108 | // We have to correct for common words and punctuation
109 | var data_convert = function(data, choices, chosen) {
110 | // initi storage object
111 | var tempObj = {};
112 |
113 | // Helper function to create a new 'word' object
114 | var newMovie = function(text) {
115 | var result = {};
116 | result['text'] = text;
117 | result['size'] = 1;
118 | tempObj[text] = result;
119 | };
120 |
121 | // Function to normalize the words. There is still a lot to do here.
122 | var splitString = function(input) {
123 | var result = [];
124 | wordList = input.split(" ");
125 | _.each(wordList, function(word) {
126 | word = word.replace(/\./g, "");
127 | word = word.replace(/\"/g, "");
128 | word = word.replace(/\'/g, "");
129 | word = word.replace(/\\/g, "");
130 | word = word.replace(/\-/g, "");
131 | word = word.replace(/\?/g, "");
132 | word = word.replace(/\,/g, "");
133 | word = word.replace(/\:/g, "");
134 | word = word.replace(/\!/g, "");
135 | word = word.replace(/\(/g, "");
136 | word = word.replace(/\)/g, "");
137 | word = word.replace(/\/g, "");
139 | word = word.replace(/\//g, "");
140 | word = word.replace('=', "");
141 | word = word.replace('#', "");
142 | word = word.replace('font', "");
143 | word = word.replace('color', "");
144 | word = word.replace('', "");
145 | word = word.replace(' ', "");
146 | word = word.replace(/[0-9]/g, "");
147 | word = word.toLowerCase();
148 | word = word.toLowerCase();
149 | if (!commonWordsDic[word] && word != "") {
150 | result.push(word);
151 | }
152 | });
153 | return result;
154 | };
155 |
156 | // Getting a random 200 lines
157 | var randStart = Math.floor(Math.random() * (data.length - 201));
158 | var randEnd = randStart + 200;
159 |
160 | // for each line
161 | for (var i = randStart; i < randEnd; i++) {
162 | var movieLine = data[i];
163 | // for each word in the parsed string
164 | _.each(splitString(movieLine.text), function(word) {
165 | // if first occurance (not in tempObj) then create new word obj
166 | if (!tempObj[word]) {
167 | newMovie(word);
168 | // otherwise increment existing object
169 | } else {
170 | tempObj[word]['size']++;
171 | }
172 | });
173 | }
174 |
175 | // transform return object to an array
176 | var resultArray = [];
177 | for (key in tempObj) {
178 | tempObj[key].size = tempObj[key].size * 5;
179 | Math.floor(Math.random() * (data.length - 100));
180 | resultArray.push(tempObj[key]);
181 | }
182 |
183 | // At this point the data in the format that D3 word cloud expects so we stringify and write to file
184 | var stringResult = {'result': resultArray, 'choices': randMovies, 'chosen': chosen};
185 | return MovieRoundData.insert(stringResult);
186 | };
187 | var id = data_convert(data, randMovies, randMovieFile.split('.')[0]);
188 | return id;
189 | //return data_convert(data, randMovies, randMovieFile.split('.')[0]);
190 | }
191 |
192 | });
193 |
194 | Meteor.publish("MovieRoundData", function() {
195 | return MovieRoundData.find();
196 | });
197 |
--------------------------------------------------------------------------------
/_CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # Contributing
2 |
3 | ## General Workflow
4 |
5 | 1. Fork the repo
6 | 1. Cut a namespaced feature branch from master
7 | - bug/...
8 | - feat/...
9 | - test/...
10 | - doc/...
11 | - refactor/...
12 | 1. Make commits to your feature branch. Prefix each commit like so:
13 | - (feat) Added a new feature
14 | - (fix) Fixed inconsistent tests [Fixes #0]
15 | - (refactor) ...
16 | - (cleanup) ...
17 | - (test) ...
18 | - (doc) ...
19 | 1. When you've finished with your fix or feature, Rebase upstream changes into your branch. submit a [pull request][]
20 | directly to master. Include a description of your changes.
21 | 1. Your pull request will be reviewed by another maintainer. The point of code
22 | reviews is to help keep the codebase clean and of high quality and, equally
23 | as important, to help you grow as a programmer. If your code reviewer
24 | requests you make a change you don't understand, ask them why.
25 | 1. Fix any issues raised by your code reviwer, and push your fixes as a single
26 | new commit.
27 | 1. Once the pull request has been reviewed, it will be merged by another member of the team. Do not merge your own commits.
28 |
29 | ## Detailed Workflow
30 |
31 | ### Fork the repo
32 |
33 | Use github’s interface to make a fork of the repo, then add that repo as an upstream remote:
34 |
35 | ```
36 | git remote add upstream https://github.com/hackreactor-labs/.git
37 | ```
38 |
39 | ### Cut a namespaced feature branch from master
40 |
41 | Your branch should follow this naming convention:
42 | - bug/...
43 | - feat/...
44 | - test/...
45 | - doc/...
46 | - refactor/...
47 |
48 | These commands will help you do this:
49 |
50 | ``` bash
51 |
52 | # Creates your branch and brings you there
53 | git checkout -b `your-branch-name`
54 | ```
55 |
56 | ### Make commits to your feature branch.
57 |
58 | Prefix each commit like so
59 | - (feat) Added a new feature
60 | - (fix) Fixed inconsistent tests [Fixes #0]
61 | - (refactor) ...
62 | - (cleanup) ...
63 | - (test) ...
64 | - (doc) ...
65 |
66 | Make changes and commits on your branch, and make sure that you
67 | only make changes that are relevant to this branch. If you find
68 | yourself making unrelated changes, make a new branch for those
69 | changes.
70 |
71 | #### Commit Message Guidelines
72 |
73 | - Commit messages should be written in the present tense; e.g. "Fix continuous
74 | integration script".
75 | - The first line of your commit message should be a brief summary of what the
76 | commit changes. Aim for about 70 characters max. Remember: This is a summary,
77 | not a detailed description of everything that changed.
78 | - If you want to explain the commit in more depth, following the first line should
79 | be a blank line and then a more detailed description of the commit. This can be
80 | as detailed as you want, so dig into details here and keep the first line short.
81 |
82 | ### Rebase upstream changes into your branch
83 |
84 | Once you are done making changes, you can begin the process of getting
85 | your code merged into the main repo. Step 1 is to rebase upstream
86 | changes to the master branch into yours by running this command
87 | from your branch:
88 |
89 | ```bash
90 | git pull --rebase upstream master
91 | ```
92 |
93 | This will start the rebase process. You must commit all of your changes
94 | before doing this. If there are no conflicts, this should just roll all
95 | of your changes back on top of the changes from upstream, leading to a
96 | nice, clean, linear commit history.
97 |
98 | If there are conflicting changes, git will start yelling at you part way
99 | through the rebasing process. Git will pause rebasing to allow you to sort
100 | out the conflicts. You do this the same way you solve merge conflicts,
101 | by checking all of the files git says have been changed in both histories
102 | and picking the versions you want. Be aware that these changes will show
103 | up in your pull request, so try and incorporate upstream changes as much
104 | as possible.
105 |
106 | You pick a file by `git add`ing it - you do not make commits during a
107 | rebase.
108 |
109 | Once you are done fixing conflicts for a specific commit, run:
110 |
111 | ```bash
112 | git rebase --continue
113 | ```
114 |
115 | This will continue the rebasing process. Once you are done fixing all
116 | conflicts you should run the existing tests to make sure you didn’t break
117 | anything, then run your new tests (there are new tests, right?) and
118 | make sure they work also.
119 |
120 | If rebasing broke anything, fix it, then repeat the above process until
121 | you get here again and nothing is broken and all the tests pass.
122 |
123 | ### Make a pull request
124 |
125 | Make a clear pull request from your fork and branch to the upstream master
126 | branch, detailing exactly what changes you made and what feature this
127 | should add. The clearer your pull request is the faster you can get
128 | your changes incorporated into this repo.
129 |
130 | At least one other person MUST give your changes a code review, and once
131 | they are satisfied they will merge your changes into upstream. Alternatively,
132 | they may have some requested changes. You should make more commits to your
133 | branch to fix these, then follow this process again from rebasing onwards.
134 |
135 | Once you get back here, make a comment requesting further review and
136 | someone will look at your code again. If they like it, it will get merged,
137 | else, just repeat again.
138 |
139 | Thanks for contributing!
140 |
141 | ### Guidelines
142 |
143 | 1. Uphold the current code standard:
144 | - Keep your code [DRY][].
145 | - Apply the [boy scout rule][].
146 | - Follow [STYLE-GUIDE.md](STYLE-GUIDE.md)
147 | 1. Run the [tests][] before submitting a pull request.
148 | 1. Tests are very, very important. Submit tests if your pull request contains
149 | new, testable behavior.
150 | 1. Your pull request is comprised of a single ([squashed][]) commit.
151 |
152 | ## Checklist:
153 |
154 | This is just to help you organize your process
155 |
156 | - [ ] Did I cut my work branch off of master (don't cut new branches from existing feature brances)?
157 | - [ ] Did I follow the correct naming convention for my branch?
158 | - [ ] Is my branch focused on a single main change?
159 | - [ ] Do all of my changes directly relate to this change?
160 | - [ ] Did I rebase the upstream master branch after I finished all my
161 | work?
162 | - [ ] Did I write a clear pull request message detailing what changes I made?
163 | - [ ] Did I get a code review?
164 | - [ ] Did I make any requested changes from that code review?
165 |
166 | If you follow all of these guidelines and make good changes, you should have
167 | no problem getting your changes merged in.
168 |
169 |
170 |
171 | [style guide]: https://github.com/hackreactor-labs/style-guide
172 | [n-queens]: https://github.com/hackreactor-labs/n-queens
173 | [Underbar]: https://github.com/hackreactor-labs/underbar
174 | [curriculum workflow diagram]: http://i.imgur.com/p0e4tQK.png
175 | [cons of merge]: https://f.cloud.github.com/assets/1577682/1458274/1391ac28-435e-11e3-88b6-69c85029c978.png
176 | [Bookstrap]: https://github.com/hackreactor/bookstrap
177 | [Taser]: https://github.com/hackreactor/bookstrap
178 | [tools workflow diagram]: http://i.imgur.com/kzlrDj7.png
179 | [Git Flow]: http://nvie.com/posts/a-successful-git-branching-model/
180 | [GitHub Flow]: http://scottchacon.com/2011/08/31/github-flow.html
181 | [Squash]: http://gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html
182 |
--------------------------------------------------------------------------------
/_.jshintrc:
--------------------------------------------------------------------------------
1 | {
2 | // JSHint Meteor Configuration File
3 | // Match the Meteor Style Guide
4 | //
5 | // By @raix with contributions from @aldeed and @awatson1978
6 | // Source https://github.com/raix/Meteor-jshintrc
7 | //
8 | // See http://jshint.com/docs/ for more details
9 |
10 | "maxerr" : 50, // {int} Maximum error before stopping
11 |
12 | // Enforcing
13 | "bitwise" : true, // true: Prohibit bitwise operators (&, |, ^, etc.)
14 | "camelcase" : true, // true: Identifiers must be in camelCase
15 | "curly" : true, // true: Require {} for every new block or scope
16 | "eqeqeq" : true, // true: Require triple equals (===) for comparison
17 | "forin" : true, // true: Require filtering for..in loops with obj.hasOwnProperty()
18 | "immed" : false, // true: Require immediate invocations to be wrapped in parens e.g. `(function () { } ());`
19 | "indent" : 2, // {int} Number of spaces to use for indentation
20 | "latedef" : false, // true: Require variables/functions to be defined before being used
21 | "newcap" : false, // true: Require capitalization of all constructor functions e.g. `new F()`
22 | "noarg" : true, // true: Prohibit use of `arguments.caller` and `arguments.callee`
23 | "noempty" : true, // true: Prohibit use of empty blocks
24 | "nonew" : false, // true: Prohibit use of constructors for side-effects (without assignment)
25 | "plusplus" : false, // true: Prohibit use of `++` & `--`
26 | "quotmark" : false, // Quotation mark consistency:
27 | // false : do nothing (default)
28 | // true : ensure whatever is used is consistent
29 | // "single" : require single quotes
30 | // "double" : require double quotes
31 | "undef" : true, // true: Require all non-global variables to be declared (prevents global leaks)
32 | "unused" : true, // true: Require all defined variables be used
33 | "strict" : true, // true: Requires all functions run in ES5 Strict Mode
34 | "trailing" : true, // true: Prohibit trailing whitespaces
35 | "maxparams" : false, // {int} Max number of formal params allowed per function
36 | "maxdepth" : false, // {int} Max depth of nested blocks (within functions)
37 | "maxstatements" : false, // {int} Max number statements per function
38 | "maxcomplexity" : false, // {int} Max cyclomatic complexity per function
39 | "maxlen" : 80, // {int} Max number of characters per line
40 |
41 | // Relaxing
42 | "asi" : false, // true: Tolerate Automatic Semicolon Insertion (no semicolons)
43 | "boss" : false, // true: Tolerate assignments where comparisons would be expected
44 | "debug" : false, // true: Allow debugger statements e.g. browser breakpoints.
45 | "eqnull" : false, // true: Tolerate use of `== null`
46 | "es5" : false, // true: Allow ES5 syntax (ex: getters and setters)
47 | "esnext" : false, // true: Allow ES.next (ES6) syntax (ex: `const`)
48 | "moz" : false, // true: Allow Mozilla specific syntax (extends and overrides esnext features)
49 | // (ex: `for each`, multiple try/catch, function expression…)
50 | "evil" : false, // true: Tolerate use of `eval` and `new Function()`
51 | "expr" : false, // true: Tolerate `ExpressionStatement` as Programs
52 | "funcscope" : false, // true: Tolerate defining variables inside control statements"
53 | "globalstrict" : true, // true: Allow global "use strict" (also enables 'strict')
54 | "iterator" : false, // true: Tolerate using the `__iterator__` property
55 | "lastsemic" : false, // true: Tolerate omitting a semicolon for the last statement of a 1-line block
56 | "laxbreak" : false, // true: Tolerate possibly unsafe line breakings
57 | "laxcomma" : false, // true: Tolerate comma-first style coding
58 | "loopfunc" : false, // true: Tolerate functions being defined in loops
59 | "multistr" : false, // true: Tolerate multi-line strings
60 | "proto" : false, // true: Tolerate using the `__proto__` property
61 | "scripturl" : false, // true: Tolerate script-targeted URLs
62 | "smarttabs" : false, // true: Tolerate mixed tabs/spaces when used for alignment
63 | "shadow" : false, // true: Allows re-define variables later in code e.g. `var x=1; x=2;`
64 | "sub" : false, // true: Tolerate using `[]` notation when it can still be expressed in dot notation
65 | "supernew" : false, // true: Tolerate `new function () { ... };` and `new Object;`
66 | "validthis" : false, // true: Tolerate using this in a non-constructor function
67 | // Environments
68 | "browser" : true, // Web Browser (window, document, etc)
69 | "couch" : false, // CouchDB
70 | "devel" : true, // Development/debugging (alert, confirm, etc)
71 | "dojo" : false, // Dojo Toolkit
72 | "jquery" : false, // jQuery
73 | "mootools" : false, // MooTools
74 | "node" : false, // Node.js
75 | "nonstandard" : false, // Widely adopted globals (escape, unescape, etc)
76 | "prototypejs" : false, // Prototype and Scriptaculous
77 | "rhino" : false, // Rhino
78 | "worker" : false, // Web Workers
79 | "wsh" : false, // Windows Scripting Host
80 | "yui" : false, // Yahoo User Interface
81 | //"meteor" : false, // Meteor.js
82 | // Legacy
83 | "nomen" : false, // true: Prohibit dangling `_` in variables
84 | "onevar" : false, // true: Allow only one `var` statement per function
85 | "passfail" : false, // true: Stop on first error
86 | "white" : false, // true: Check against strict whitespace and indentation rules
87 | // Custom globals, from http://docs.meteor.com, in the order they appear there
88 | "globals" : {
89 | "Meteor": false,
90 | "DDP": false,
91 | "Mongo": false, //Meteor.Collection renamed to Mongo.Collection
92 | "Session": false,
93 | "Accounts": false,
94 | "Template": false,
95 | "Blaze": false, //UI is being renamed Blaze
96 | "UI": false,
97 | "Match": false,
98 | "check": false,
99 | "Tracker": false, //Deps renamed to Tracker
100 | "Deps": false,
101 | "ReactiveVar": false,
102 | "EJSON": false,
103 | "HTTP": false,
104 | "Email": false,
105 | "Assets": false,
106 | "Handlebars": false, // https://github.com/meteor/meteor/wiki/Handlebars
107 | "Package": false,
108 | "App": false, //mobile-config.js
109 | // Meteor internals
110 | "DDPServer": false,
111 | "global": false,
112 | "Log": false,
113 | "MongoInternals": false,
114 | "process": false,
115 | "WebApp": false,
116 | "WebAppInternals": false,
117 | // globals useful when creating Meteor packages
118 | "Npm": false,
119 | "Tinytest": false,
120 | // common Meteor packages
121 | "Random": false,
122 | "_": false, // Underscore.js
123 | "$": false, // jQuery
124 | "Router": false // iron-router
125 | }
126 | }
127 |
128 | //{
129 | // "node": true,
130 | // "esnext": true,
131 | // "bitwise": true,
132 | // "camelcase": true,
133 | // "curly": true,
134 | // "eqeqeq": true,
135 | // "immed": true,
136 | // "indent": 2,
137 | // "latedef": true,
138 | // "newcap": true,
139 | // "noarg": true,
140 | // "quotmark": "single",
141 | // "regexp": true,
142 | // "undef": true,
143 | // "unused": true,
144 | // "strict": true,
145 | // "trailing": true,
146 | // "smarttabs": true,
147 | // "white": true
148 | //}
149 |
--------------------------------------------------------------------------------
/_STYLE-GUIDE.md:
--------------------------------------------------------------------------------
1 | ### Indentation
2 |
3 | When writing any block of code that is logically subordinate to the line immediately before and after it, that block should be indented two spaces more than the surrounding lines
4 |
5 | * Do not put any tab characters anywhere in your code. You would do best to stop pressing the tab key entirely.
6 | * Increase the indent level for all blocks by two extra spaces
7 | * When a line opens a block, the next line starts 2 spaces further in than the line that opened
8 |
9 | ```javascript
10 | // good:
11 | if(condition){
12 | action();
13 | }
14 |
15 | // bad:
16 | if(condition){
17 | action();
18 | }
19 | ```
20 |
21 | * When a line closes a block, that line starts at the same level as the line that opened the block
22 | ```javascript
23 | // good:
24 | if(condition){
25 | action();
26 | }
27 |
28 | // bad:
29 | if(condition){
30 | action();
31 | }
32 | ```
33 |
34 | * No two lines should ever have more or less than 2 spaces difference in their indentation. Any number of mistakes in the above rules could lead to this, but one example would be:
35 |
36 | ```javascript
37 | // bad:
38 | transmogrify({
39 | a: {
40 | b: function(){
41 | }
42 | }});
43 | ```
44 |
45 | * use sublime's arrow collapsing as a guide. do the collapsing lines seem like they should be 'contained' by the line with an arrow on it?
46 |
47 |
48 | ### Variable names
49 |
50 | * A single descriptive word is best.
51 |
52 | ```javascript
53 | // good:
54 | var animals = ['cat', 'dog', 'fish'];
55 |
56 | // bad:
57 | var targetInputs = ['cat', 'dog', 'fish'];
58 | ```
59 |
60 | * Collections such as arrays and maps should have plural noun variable names.
61 |
62 | ```javascript
63 | // good:
64 | var animals = ['cat', 'dog', 'fish'];
65 |
66 | // bad:
67 | var animalList = ['cat', 'dog', 'fish'];
68 |
69 | // bad:
70 | var animal = ['cat', 'dog', 'fish'];
71 | ```
72 |
73 | * Name your variables after their purpose, not their structure
74 |
75 | ```javascript
76 | // good:
77 | var animals = ['cat', 'dog', 'fish'];
78 |
79 | // bad:
80 | var array = ['cat', 'dog', 'fish'];
81 | ```
82 |
83 |
84 | ### Language constructs
85 |
86 | * Do not use `for...in` statements with the intent of iterating over a list of numeric keys. Use a for-with-semicolons statement in stead.
87 |
88 | ```javascript
89 | // good:
90 | var list = ['a', 'b', 'c']
91 | for(var i = 0; i < list.length; i++){
92 | alert(list[i]);
93 | }
94 |
95 | // bad:
96 | var list = ['a', 'b', 'c']
97 | for(var i in list){
98 | alert(list[i]);
99 | }
100 | ```
101 |
102 | * Never omit braces for statement blocks (although they are technically optional).
103 | ```javascript
104 | // good:
105 | for(key in object){
106 | alert(key);
107 | }
108 |
109 | // bad:
110 | for(key in object)
111 | alert(key);
112 | ```
113 |
114 | * Always use `===` and `!==`, since `==` and `!=` will automatically convert types in ways you're unlikely to expect.
115 |
116 | ```javascript
117 | // good:
118 |
119 | // this comparison evaluates to false, because the number zero is not the same as the empty string.
120 | if(0 === ''){
121 | alert('looks like they\'re equal');
122 | }
123 |
124 | // bad:
125 |
126 | // This comparison evaluates to true, because after type coercion, zero and the empty string are equal.
127 | if(0 == ''){
128 | alert('looks like they\'re equal');
129 | }
130 | ```
131 |
132 | * Don't use function statements for the entire first half of the course. They introduce a slew of subtle new rules to how the language behaves, and without a clear benefit. Once you and all your peers are expert level in the second half, you can start to use the more (needlessly) complicated option if you like.
133 |
134 | ```javascript
135 | // good:
136 | var go = function(){...};
137 |
138 | // bad:
139 | function stop(){...};
140 | ```
141 |
142 |
143 | ### Semicolons
144 |
145 | * Don't forget semicolons at the end of lines
146 |
147 | ```javascript
148 | // good:
149 | alert('hi');
150 |
151 | // bad:
152 | alert('hi')
153 | ```
154 |
155 | * Semicolons are not required at the end of statements that include a block--i.e. `if`, `for`, `while`, etc.
156 |
157 |
158 | ```javascript
159 | // good:
160 | if(condition){
161 | response();
162 | }
163 |
164 | // bad:
165 | if(condition){
166 | response();
167 | };
168 | ```
169 |
170 | * Misleadingly, a function may be used at the end of a normal assignment statement, and would require a semicolon (even though it looks rather like the end of some statement block).
171 |
172 | ```javascript
173 | // good:
174 | var greet = function(){
175 | alert('hi');
176 | };
177 |
178 | // bad:
179 | var greet = function(){
180 | alert('hi');
181 | }
182 | ```
183 |
184 | # Supplemental reading
185 |
186 | ### Code density
187 |
188 | * Conserve line quantity by minimizing the number lines you write in. The more concisely your code is written, the more context can be seen in one screen.
189 | * Conserve line length by minimizing the amount of complexity you put on each line. Long lines are difficult to read. Rather than a character count limit, I recommend limiting the amount of complexity you put on a single line. Try to make it easily read in one glance. This goal is in conflict with the line quantity goal, so you must do your best to balance them.
190 |
191 | ### Comments
192 |
193 | * Provide comments any time you are confident it will make reading your code easier.
194 | * Be aware that comments come at some cost. They make a file longer and can drift out of sync with the code they annotate.
195 | * Comment on what code is attempting to do, not how it will achieve it.
196 | * A good comment is often less effective than a good variable name.
197 |
198 |
199 | ### Padding & additional whitespace
200 |
201 | * Generally, we don't care where you put extra spaces, provided they are not distracting.
202 | * You may use it as padding for visual clarity. If you do though, make sure it's balanced on both sides.
203 |
204 | ```javascript
205 | // optional:
206 | alert( "I chose to put visual padding around this string" );
207 |
208 | // bad:
209 | alert( "I only put visual padding on one side of this string");
210 | ```
211 |
212 | * You may use it to align two similar lines, but it is not recommended. This pattern usually leads to unnecessary edits of many lines in your code every time you change a variable name.
213 |
214 | ```javascript
215 | // discouraged:
216 | var firstItem = getFirst ();
217 | var secondItem = getSecond();
218 | ```
219 |
220 | * Put `else` and `else if` statements on the same line as the ending curly brace for the preceding `if` block
221 | ```javascript
222 | // good:
223 | if(condition){
224 | response();
225 | }else{
226 | otherResponse();
227 | }
228 |
229 | // bad:
230 | if(condition){
231 | response();
232 | }
233 | else{
234 | otherResponse();
235 | }
236 | ```
237 |
238 |
239 |
240 | ### Working with files
241 |
242 | * Do not end a file with any character other than a newline.
243 | * Don't use the -a or -m flags for `git commit` for the first half of the class, since they conceal what is actually happening (and do slightly different things than most people expect).
244 |
245 | ```shell
246 | # good:
247 | > git add .
248 | > git commit
249 | [save edits to the commit message file using the text editor that opens]
250 |
251 | # bad:
252 | > git commit -a
253 | [save edits to the commit message file using the text editor that opens]
254 |
255 | # bad:
256 | > git add .
257 | > git commit -m "updated algorithm"
258 | ```
259 |
260 |
261 | ### Opening or closing too many blocks at once
262 |
263 | * The more blocks you open on a single line, the more your reader needs to remember about the context of what they are reading. Try to resolve your blocks early, and refactor. A good rule is to avoid closing more than two blocks on a single line--three in a pinch.
264 |
265 | ```javascript
266 | // avoid:
267 | _.ajax(url, {success: function(){
268 | // ...
269 | }});
270 |
271 | // prefer:
272 | _.ajax(url, {
273 | success: function(){
274 | // ...
275 | }
276 | });
277 | ```
278 |
279 |
280 | ### Variable declaration
281 |
282 | * Use a new var statement for each line you declare a variable on.
283 | * Do not break variable declarations onto mutiple lines.
284 | * Use a new line for each variable declaration.
285 | * See http://benalman.com/news/2012/05/multiple-var-statements-javascript/ for more details
286 |
287 | ```javascript
288 | // good:
289 | var ape;
290 | var bat;
291 |
292 | // bad:
293 | var cat,
294 | dog
295 |
296 | // use sparingly:
297 | var eel, fly;
298 | ```
299 |
300 | ### Capital letters in variable names
301 |
302 | * Some people choose to use capitalization of the first letter in their variable names to indicate that they contain a [class](http://en.wikipedia.org/wiki/Class_(computer_science\)). This capitalized variable might contain a function, a prototype, or some other construct that acts as a representative for the whole class.
303 | * Optionally, some people use a capital letter only on functions that are written to be run with the keyword `new`.
304 | * Do not use all-caps for any variables. Some people use this pattern to indicate an intended "constant" variable, but the language does not offer true constants, only mutable variables.
305 |
306 |
307 | ### Minutia
308 |
309 | * Don't rely on JavaScripts implicit global variables. If you are intending to write to the global scope, export things to `window.*` explicitly instead.
310 |
311 | ```javascript
312 | // good:
313 | var overwriteNumber = function(){
314 | window.exported = Math.random();
315 | };
316 |
317 | // bad:
318 | var overwriteNumber = function(){
319 | exported = Math.random();
320 | };
321 | ```
322 |
323 | * For lists, put commas at the end of each newline, not at the beginning of each item in a list
324 |
325 | ```javascript
326 | // good:
327 | var animals = [
328 | 'ape',
329 | 'bat',
330 | 'cat'
331 | ];
332 |
333 | // bad:
334 | var animals = [
335 | 'ape'
336 | , 'bat'
337 | , 'cat'
338 | ];
339 | ```
340 |
341 | * Avoid use of `switch` statements altogether. They are hard to outdent using the standard whitespace rules above, and are prone to error due to missing `break` statements. See [this article](http://ericleads.com/2012/12/switch-case-considered-harmful/) for more detail.
342 |
343 | * Prefer single quotes around JavaScript strings, rather than double quotes. Having a standard of any sort is preferable to a mix-and-match approach, and single quotes allow for easy embedding of HTML, which prefers double quotes around tag attributes.
344 |
345 | ```javascript
346 | // good:
347 | var dog = 'dog';
348 | var cat = 'cat';
349 |
350 | // acceptable:
351 | var dog = "dog";
352 | var cat = "cat";
353 |
354 | // bad:
355 | var dog = 'dog';
356 | var cat = "cat";
357 | ```
358 |
359 |
360 | ### HTML
361 |
362 | * Do not use ids for html elements. Use a class instead.
363 |
364 | ```html
365 |
366 |
367 |
368 |
369 |
370 | ```
371 |
372 | * Do not include a `type=text/javascript"` attribute on script tags
373 |
374 | ```html
375 |
376 |
377 |
378 |
379 |
380 | ```
381 |
--------------------------------------------------------------------------------
/client/moviecloud/movieCloud.js:
--------------------------------------------------------------------------------
1 |
2 | Meteor.subscribe('MovieRoundData');
3 |
4 |
5 | Template.movieCloudHand.helpers({
6 | getOptions: function(){
7 | return Session.get("id");
8 | }
9 | });
10 |
11 |
12 |
13 |
14 | Template.movieCloud.helpers({
15 |
16 | });
17 |
18 | // player-hand-view.html template event listeners
19 | Template.movieCloud.events({
20 | "click .movieButton": function (event) {
21 | $('.movieSVG').empty();
22 | Session.set("id",[]);
23 |
24 | var renderSVG = function(svgData){
25 | console.log(svgData);
26 | var fill = d3.scale.category20();
27 | d3.layout.cloud()
28 | .size([600, 300])
29 | .words(svgData)
30 | .padding(5)
31 | .rotate(function() { return ~~(Math.random() * 2) * 90; })
32 | .font("Impact")
33 | .fontSize(function(d) { return d.size; })
34 | .on("end", draw)
35 | .start();
36 | function draw(words) {
37 | d3.select('.movieSVG').append("svg")
38 | .attr("width", 900)
39 | .attr("height", 300)
40 | .style("padding-left",function(){return 150;})
41 | .style("padding-top",function(){return 50;})
42 | .style("padding-bottom",function(){return 100;})
43 | .style("padding-right",function(){return 150;})
44 | .append("g")
45 | .attr("transform", "translate(150,150)")
46 | .selectAll("text")
47 | .data(words)
48 | .enter().append("text")
49 | .style("font-size", function(d) { return d.size + "px"; })
50 | .style("font-family", "Impact")
51 | .style("fill", function(d, i) { return fill(i); })
52 | .attr("text-anchor", "middle")
53 | .attr("transform", function(d) {
54 | return "translate(" + [d.x, d.y] + ")rotate(" + d.rotate + ")";
55 | })
56 | .text(function(d) { return d.text; });
57 | }
58 | };
59 |
60 | Meteor.call('getMovieData', function(err, id){
61 | var options = [];
62 | var data = MovieRoundData.findOne(id);
63 | for (var i = 0; i < data.choices.length; i++){
64 | options.push({text: data.choices[i].split('_').join(" ")});
65 | }
66 | Session.set("id", options);
67 | renderSVG(data.result);
68 | Session.set("answer", data.chosen);
69 | });
70 | },
71 |
72 | "click .card": function (event){
73 | if (this.text.split(' ').join('_')===Session.get('answer')){
74 | alert("You Won");
75 | }
76 | }
77 | });
78 |
79 | // Word cloud layout by Jason Davies, http://www.jasondavies.com/word-cloud/
80 | // Algorithm due to Jonathan Feinberg, http://static.mrfeinberg.com/bv_ch03.pdf
81 | (function() {
82 | function cloud() {
83 | var size = [256, 256],
84 | text = cloudText,
85 | font = cloudFont,
86 | fontSize = cloudFontSize,
87 | fontStyle = cloudFontNormal,
88 | fontWeight = cloudFontNormal,
89 | rotate = cloudRotate,
90 | padding = cloudPadding,
91 | spiral = archimedeanSpiral,
92 | words = [],
93 | timeInterval = Infinity,
94 | event = d3.dispatch("word", "end"),
95 | timer = null,
96 | cloud = {};
97 |
98 | cloud.start = function() {
99 | var board = zeroArray((size[0] >> 5) * size[1]),
100 | bounds = null,
101 | n = words.length,
102 | i = -1,
103 | tags = [],
104 | data = words.map(function(d, i) {
105 | d.text = text.call(this, d, i);
106 | d.font = font.call(this, d, i);
107 | d.style = fontStyle.call(this, d, i);
108 | d.weight = fontWeight.call(this, d, i);
109 | d.rotate = rotate.call(this, d, i);
110 | d.size = ~~fontSize.call(this, d, i);
111 | d.padding = padding.call(this, d, i);
112 | return d;
113 | }).sort(function(a, b) { return b.size - a.size; });
114 |
115 | if (timer) clearInterval(timer);
116 | timer = setInterval(step, 0);
117 | step();
118 |
119 | return cloud;
120 |
121 | function step() {
122 | var start = +new Date,
123 | d;
124 | while (+new Date - start < timeInterval && ++i < n && timer) {
125 | d = data[i];
126 | d.x = (size[0] * (Math.random() + .5)) >> 1;
127 | d.y = (size[1] * (Math.random() + .5)) >> 1;
128 | cloudSprite(d, data, i);
129 | if (d.hasText && place(board, d, bounds)) {
130 | tags.push(d);
131 | event.word(d);
132 | if (bounds) cloudBounds(bounds, d);
133 | else bounds = [{x: d.x + d.x0, y: d.y + d.y0}, {x: d.x + d.x1, y: d.y + d.y1}];
134 | // Temporary hack
135 | d.x -= size[0] >> 1;
136 | d.y -= size[1] >> 1;
137 | }
138 | }
139 | if (i >= n) {
140 | cloud.stop();
141 | event.end(tags, bounds);
142 | }
143 | }
144 | }
145 |
146 | cloud.stop = function() {
147 | if (timer) {
148 | clearInterval(timer);
149 | timer = null;
150 | }
151 | return cloud;
152 | };
153 |
154 | cloud.timeInterval = function(x) {
155 | if (!arguments.length) return timeInterval;
156 | timeInterval = x == null ? Infinity : x;
157 | return cloud;
158 | };
159 |
160 | function place(board, tag, bounds) {
161 | var perimeter = [{x: 0, y: 0}, {x: size[0], y: size[1]}],
162 | startX = tag.x,
163 | startY = tag.y,
164 | maxDelta = Math.sqrt(size[0] * size[0] + size[1] * size[1]),
165 | s = spiral(size),
166 | dt = Math.random() < .5 ? 1 : -1,
167 | t = -dt,
168 | dxdy,
169 | dx,
170 | dy;
171 |
172 | while (dxdy = s(t += dt)) {
173 | dx = ~~dxdy[0];
174 | dy = ~~dxdy[1];
175 |
176 | if (Math.min(dx, dy) > maxDelta) break;
177 |
178 | tag.x = startX + dx;
179 | tag.y = startY + dy;
180 |
181 | if (tag.x + tag.x0 < 0 || tag.y + tag.y0 < 0 ||
182 | tag.x + tag.x1 > size[0] || tag.y + tag.y1 > size[1]) continue;
183 | // TODO only check for collisions within current bounds.
184 | if (!bounds || !cloudCollide(tag, board, size[0])) {
185 | if (!bounds || collideRects(tag, bounds)) {
186 | var sprite = tag.sprite,
187 | w = tag.width >> 5,
188 | sw = size[0] >> 5,
189 | lx = tag.x - (w << 4),
190 | sx = lx & 0x7f,
191 | msx = 32 - sx,
192 | h = tag.y1 - tag.y0,
193 | x = (tag.y + tag.y0) * sw + (lx >> 5),
194 | last;
195 | for (var j = 0; j < h; j++) {
196 | last = 0;
197 | for (var i = 0; i <= w; i++) {
198 | board[x + i] |= (last << msx) | (i < w ? (last = sprite[j * w + i]) >>> sx : 0);
199 | }
200 | x += sw;
201 | }
202 | delete tag.sprite;
203 | return true;
204 | }
205 | }
206 | }
207 | return false;
208 | }
209 |
210 | cloud.words = function(x) {
211 | if (!arguments.length) return words;
212 | words = x;
213 | return cloud;
214 | };
215 |
216 | cloud.size = function(x) {
217 | if (!arguments.length) return size;
218 | size = [+x[0], +x[1]];
219 | return cloud;
220 | };
221 |
222 | cloud.font = function(x) {
223 | if (!arguments.length) return font;
224 | font = d3.functor(x);
225 | return cloud;
226 | };
227 |
228 | cloud.fontStyle = function(x) {
229 | if (!arguments.length) return fontStyle;
230 | fontStyle = d3.functor(x);
231 | return cloud;
232 | };
233 |
234 | cloud.fontWeight = function(x) {
235 | if (!arguments.length) return fontWeight;
236 | fontWeight = d3.functor(x);
237 | return cloud;
238 | };
239 |
240 | cloud.rotate = function(x) {
241 | if (!arguments.length) return rotate;
242 | rotate = d3.functor(x);
243 | return cloud;
244 | };
245 |
246 | cloud.text = function(x) {
247 | if (!arguments.length) return text;
248 | text = d3.functor(x);
249 | return cloud;
250 | };
251 |
252 | cloud.spiral = function(x) {
253 | if (!arguments.length) return spiral;
254 | spiral = spirals[x + ""] || x;
255 | return cloud;
256 | };
257 |
258 | cloud.fontSize = function(x) {
259 | if (!arguments.length) return fontSize;
260 | fontSize = d3.functor(x);
261 | return cloud;
262 | };
263 |
264 | cloud.padding = function(x) {
265 | if (!arguments.length) return padding;
266 | padding = d3.functor(x);
267 | return cloud;
268 | };
269 |
270 | return d3.rebind(cloud, event, "on");
271 | }
272 |
273 | function cloudText(d) {
274 | return d.text;
275 | }
276 |
277 | function cloudFont() {
278 | return "serif";
279 | }
280 |
281 | function cloudFontNormal() {
282 | return "normal";
283 | }
284 |
285 | function cloudFontSize(d) {
286 | return Math.sqrt(d.value);
287 | }
288 |
289 | function cloudRotate() {
290 | return (~~(Math.random() * 6) - 3) * 30;
291 | }
292 |
293 | function cloudPadding() {
294 | return 1;
295 | }
296 |
297 | // Fetches a monochrome sprite bitmap for the specified text.
298 | // Load in batches for speed.
299 | function cloudSprite(d, data, di) {
300 | if (d.sprite) return;
301 | c.clearRect(0, 0, (cw << 5) / ratio, ch / ratio);
302 | var x = 0,
303 | y = 0,
304 | maxh = 0,
305 | n = data.length;
306 | --di;
307 | while (++di < n) {
308 | d = data[di];
309 | c.save();
310 | c.font = d.style + " " + d.weight + " " + ~~((d.size + 1) / ratio) + "px " + d.font;
311 | var w = c.measureText(d.text + "m").width * ratio,
312 | h = d.size << 1;
313 | if (d.rotate) {
314 | var sr = Math.sin(d.rotate * cloudRadians),
315 | cr = Math.cos(d.rotate * cloudRadians),
316 | wcr = w * cr,
317 | wsr = w * sr,
318 | hcr = h * cr,
319 | hsr = h * sr;
320 | w = (Math.max(Math.abs(wcr + hsr), Math.abs(wcr - hsr)) + 0x1f) >> 5 << 5;
321 | h = ~~Math.max(Math.abs(wsr + hcr), Math.abs(wsr - hcr));
322 | } else {
323 | w = (w + 0x1f) >> 5 << 5;
324 | }
325 | if (h > maxh) maxh = h;
326 | if (x + w >= (cw << 5)) {
327 | x = 0;
328 | y += maxh;
329 | maxh = 0;
330 | }
331 | if (y + h >= ch) break;
332 | c.translate((x + (w >> 1)) / ratio, (y + (h >> 1)) / ratio);
333 | if (d.rotate) c.rotate(d.rotate * cloudRadians);
334 | c.fillText(d.text, 0, 0);
335 | if (d.padding) c.lineWidth = 2 * d.padding, c.strokeText(d.text, 0, 0);
336 | c.restore();
337 | d.width = w;
338 | d.height = h;
339 | d.xoff = x;
340 | d.yoff = y;
341 | d.x1 = w >> 1;
342 | d.y1 = h >> 1;
343 | d.x0 = -d.x1;
344 | d.y0 = -d.y1;
345 | d.hasText = true;
346 | x += w;
347 | }
348 | var pixels = c.getImageData(0, 0, (cw << 5) / ratio, ch / ratio).data,
349 | sprite = [];
350 | while (--di >= 0) {
351 | d = data[di];
352 | if (!d.hasText) continue;
353 | var w = d.width,
354 | w32 = w >> 5,
355 | h = d.y1 - d.y0;
356 | // Zero the buffer
357 | for (var i = 0; i < h * w32; i++) sprite[i] = 0;
358 | x = d.xoff;
359 | if (x == null) return;
360 | y = d.yoff;
361 | var seen = 0,
362 | seenRow = -1;
363 | for (var j = 0; j < h; j++) {
364 | for (var i = 0; i < w; i++) {
365 | var k = w32 * j + (i >> 5),
366 | m = pixels[((y + j) * (cw << 5) + (x + i)) << 2] ? 1 << (31 - (i % 32)) : 0;
367 | sprite[k] |= m;
368 | seen |= m;
369 | }
370 | if (seen) seenRow = j;
371 | else {
372 | d.y0++;
373 | h--;
374 | j--;
375 | y++;
376 | }
377 | }
378 | d.y1 = d.y0 + seenRow;
379 | d.sprite = sprite.slice(0, (d.y1 - d.y0) * w32);
380 | }
381 | }
382 |
383 | // Use mask-based collision detection.
384 | function cloudCollide(tag, board, sw) {
385 | sw >>= 5;
386 | var sprite = tag.sprite,
387 | w = tag.width >> 5,
388 | lx = tag.x - (w << 4),
389 | sx = lx & 0x7f,
390 | msx = 32 - sx,
391 | h = tag.y1 - tag.y0,
392 | x = (tag.y + tag.y0) * sw + (lx >> 5),
393 | last;
394 | for (var j = 0; j < h; j++) {
395 | last = 0;
396 | for (var i = 0; i <= w; i++) {
397 | if (((last << msx) | (i < w ? (last = sprite[j * w + i]) >>> sx : 0))
398 | & board[x + i]) return true;
399 | }
400 | x += sw;
401 | }
402 | return false;
403 | }
404 |
405 | function cloudBounds(bounds, d) {
406 | var b0 = bounds[0],
407 | b1 = bounds[1];
408 | if (d.x + d.x0 < b0.x) b0.x = d.x + d.x0;
409 | if (d.y + d.y0 < b0.y) b0.y = d.y + d.y0;
410 | if (d.x + d.x1 > b1.x) b1.x = d.x + d.x1;
411 | if (d.y + d.y1 > b1.y) b1.y = d.y + d.y1;
412 | }
413 |
414 | function collideRects(a, b) {
415 | return a.x + a.x1 > b[0].x && a.x + a.x0 < b[1].x && a.y + a.y1 > b[0].y && a.y + a.y0 < b[1].y;
416 | }
417 |
418 | function archimedeanSpiral(size) {
419 | var e = size[0] / size[1];
420 | return function(t) {
421 | return [e * (t *= .1) * Math.cos(t), t * Math.sin(t)];
422 | };
423 | }
424 |
425 | function rectangularSpiral(size) {
426 | var dy = 4,
427 | dx = dy * size[0] / size[1],
428 | x = 0,
429 | y = 0;
430 | return function(t) {
431 | var sign = t < 0 ? -1 : 1;
432 | // See triangular numbers: T_n = n * (n + 1) / 2.
433 | switch ((Math.sqrt(1 + 4 * sign * t) - sign) & 3) {
434 | case 0: x += dx; break;
435 | case 1: y += dy; break;
436 | case 2: x -= dx; break;
437 | default: y -= dy; break;
438 | }
439 | return [x, y];
440 | };
441 | }
442 |
443 | // TODO reuse arrays?
444 | function zeroArray(n) {
445 | var a = [],
446 | i = -1;
447 | while (++i < n) a[i] = 0;
448 | return a;
449 | }
450 |
451 | var cloudRadians = Math.PI / 180,
452 | cw = 1 << 11 >> 5,
453 | ch = 1 << 11,
454 | canvas,
455 | ratio = 1;
456 |
457 | if (typeof document !== "undefined") {
458 | canvas = document.createElement("canvas");
459 | canvas.width = 1;
460 | canvas.height = 1;
461 | ratio = Math.sqrt(canvas.getContext("2d").getImageData(0, 0, 1, 1).data.length >> 2);
462 | canvas.width = (cw << 5) / ratio;
463 | canvas.height = ch / ratio;
464 | } else {
465 | // Attempt to use node-canvas.
466 | canvas = new Canvas(cw << 5, ch);
467 | }
468 |
469 | var c = canvas.getContext("2d"),
470 | spirals = {
471 | archimedean: archimedeanSpiral,
472 | rectangular: rectangularSpiral
473 | };
474 | c.fillStyle = c.strokeStyle = "red";
475 | c.textAlign = "center";
476 |
477 | if (typeof module === "object" && module.exports) module.exports = cloud;
478 | else (d3.layout || (d3.layout = {})).cloud = cloud;
479 | })();
--------------------------------------------------------------------------------
/server/blackCards.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Created by ppp on 3/25/2015.
3 | */
4 | BlackCards = [{"cardType": "Black", "text": "_? There's an app for that.", "expansion": "Base"},
5 | {"cardType": "Black", "text": "Why can't I sleep at night?", "expansion": "Base"},
6 | {"cardType": "Black", "text": "What's that smell?", "expansion": "Base"},
7 | {"cardType": "Black", "text": "I got 99 problems but _ ain't one.", "expansion": "Base"},
8 | {"cardType": "Black", "text": "Maybe she's born with it. Maybe it's _.", "expansion": "Base"},
9 | {"cardType": "Black", "text": "What's the next Happy Meal© toy?", "expansion": "Base"},
10 | {
11 | "cardType": "Black",
12 | "text": "Anthropologists have recently discovered a primitive tribe that worships _.",
13 | "expansion": "Base"
14 | },
15 | {
16 | "cardType": "Black",
17 | "text": "It's a pity that kids these days are all getting involved with _.",
18 | "expansion": "Base"
19 | },
20 | {
21 | "cardType": "Black",
22 | "text": "During Picasso's often-overlooked Brown Period, he produced hundreds of paintings of _.",
23 | "expansion": "Base"
24 | },
25 | {"cardType": "Black", "text": "Alternative medicine is now embracing the curative powers of _.", "expansion": "Base"},
26 | {"cardType": "Black", "text": "And the Academy Award for _ goes to _.", "expansion": "Base"},
27 | {"cardType": "Black", "text": "What's that sound?", "expansion": "Base"},
28 | {"cardType": "Black", "text": "What ended my last relationship?", "expansion": "Base"},
29 | {
30 | "cardType": "Black",
31 | "text": "MTV's new reality show features eight washed-up celebrities living with _.",
32 | "expansion": "Base"
33 | },
34 | {"cardType": "Black", "text": "I drink to forget _.", "expansion": "Base"},
35 | {
36 | "cardType": "Black",
37 | "text": "I'm sorry professor, but I couldn't complete my homework because of _.",
38 | "expansion": "Base"
39 | },
40 | {"cardType": "Black", "text": "What is Batman's guilty pleasure?", "expansion": "Base"},
41 | {
42 | "cardType": "Black",
43 | "text": "This is the way the world ends This is the way the world ends Not with a bang but with _.",
44 | "expansion": "Base"
45 | },
46 | {"cardType": "Black", "text": "What's a girl's best friend?", "expansion": "Base"},
47 | {"cardType": "Black", "text": "TSA guidelines now prohibit _ on airplanes.", "expansion": "Base"},
48 | {"cardType": "Black", "text": "_. That's how I want to die.", "expansion": "Base"},
49 | {"cardType": "Black", "text": "For my next trick, I will pull _ out of _.", "expansion": "Base"},
50 | {
51 | "cardType": "Black",
52 | "text": "In the new Disney Channel Original Movie, Hannah Montana struggles with _ for the first time.",
53 | "expansion": "Base"
54 | },
55 | {"cardType": "Black", "text": "_ is a slippery slope that leads to _.", "expansion": "Base"},
56 | {"cardType": "Black", "text": "What does Dick Cheney prefer?", "expansion": "Base"},
57 | {
58 | "cardType": "Black",
59 | "text": "Dear Abby, I'm having some trouble with _ and would like your advice.",
60 | "expansion": "Base"
61 | },
62 | {"cardType": "Black", "text": "Instead of coal, Santa now gives the bad children _.", "expansion": "Base"},
63 | {"cardType": "Black", "text": "What's the most emo?", "expansion": "Base"},
64 | {
65 | "cardType": "Black",
66 | "text": "In 1,000 years when paper money is but a distant memory, _ will be our currency.",
67 | "expansion": "Base"
68 | },
69 | {"cardType": "Black", "text": "What's the next superhero/sidekick duo?", "expansion": "Base"},
70 | {
71 | "cardType": "Black",
72 | "text": "In M. Night Shyamalan's new movie, Bruce Willis discovers that _ had really been _ all along.",
73 | "expansion": "Base"
74 | },
75 | {"cardType": "Black", "text": "A romantic, candlelit dinner would be incomplete without _.", "expansion": "Base"},
76 | {"cardType": "Black", "text": "_. Becha can't have just one!", "expansion": "Base"},
77 | {"cardType": "Black", "text": "White people like _.", "expansion": "Base"},
78 | {"cardType": "Black", "text": "_. High five, bro.", "expansion": "Base"},
79 | {"cardType": "Black", "text": "Next from J.K. Rowling: Harry Potter and the Chamber of _.", "expansion": "Base"},
80 | {"cardType": "Black", "text": "BILLY MAYS HERE FOR _.", "expansion": "Base"},
81 | {"cardType": "Black", "text": "In a world ravaged by _, our only solace is _.", "expansion": "Base"},
82 | {"cardType": "Black", "text": "War! What is it good for?", "expansion": "Base"},
83 | {"cardType": "Black", "text": "During sex, I like to think about _.", "expansion": "Base"},
84 | {"cardType": "Black", "text": "What are my parents hiding from me?", "expansion": "Base"},
85 | {"cardType": "Black", "text": "What will always get you laid?", "expansion": "Base"},
86 | {
87 | "cardType": "Black",
88 | "text": "In L.A. County Jail, word is you can trade 200 cigarettes for _.",
89 | "expansion": "Base"
90 | },
91 | {"cardType": "Black", "text": "What did I bring back from Mexico?", "expansion": "Base"},
92 | {"cardType": "Black", "text": "What don't you want to find in your Chinese food?", "expansion": "Base"},
93 | {
94 | "cardType": "Black",
95 | "text": "What will I bring back in time to convince people that I am a powerful wizard?",
96 | "expansion": "Base"
97 | },
98 | {"cardType": "Black", "text": "How am I maintaining my relationship status?", "expansion": "Base"},
99 | {"cardType": "Black", "text": "_. It's a trap!", "expansion": "Base"},
100 | {"cardType": "Black", "text": "Coming to Broadway this season, _: The Musical.", "expansion": "Base"},
101 | {
102 | "cardType": "Black",
103 | "text": "While the United States raced the Soviet Union to the moon, the Mexican government funneled millions of pesos into research on _.",
104 | "expansion": "Base"
105 | },
106 | {
107 | "cardType": "Black",
108 | "text": "After the earthquake, Sean Penn brought _ to the people of Haiti.",
109 | "expansion": "Base"
110 | },
111 | {"cardType": "Black", "text": "Next on ESPN2, the World Series of _.", "expansion": "Base"},
112 | {"cardType": "Black", "text": "Step 1: _. Step 2: _. Step 3: Profit.", "expansion": "Base"},
113 | {
114 | "cardType": "Black",
115 | "text": "Rumor has it that Vladimir Putin's favorite dish is _ stuffed with _.",
116 | "expansion": "Base"
117 | },
118 | {"cardType": "Black", "text": "But before I kill you, Mr. Bond, I must show you _.", "expansion": "Base"},
119 | {"cardType": "Black", "text": "What gives me uncontrollable gas?", "expansion": "Base"},
120 | {"cardType": "Black", "text": "What do old people smell like?", "expansion": "Base"},
121 | {"cardType": "Black", "text": "The class field trip was completely ruined by _.", "expansion": "Base"},
122 | {"cardType": "Black", "text": "When Pharaoh remained unmoved, Moses called down a Plague of _.", "expansion": "Base"},
123 | {"cardType": "Black", "text": "What's my secret power?", "expansion": "Base"},
124 | {"cardType": "Black", "text": "What's there a ton of in heaven?", "expansion": "Base"},
125 | {"cardType": "Black", "text": "What would grandma find disturbing, yet oddly charming?", "expansion": "Base"},
126 | {"cardType": "Black", "text": "I never truly understood _ until I encountered _.", "expansion": "Base"},
127 | {"cardType": "Black", "text": "What did the U.S. airdrop to the children of Afghanistan?", "expansion": "Base"},
128 | {"cardType": "Black", "text": "What helps Obama unwind?", "expansion": "Base"},
129 | {"cardType": "Black", "text": "What did Vin Diesel eat for dinner?", "expansion": "Base"},
130 | {"cardType": "Black", "text": "_: good to the last drop.", "expansion": "Base"},
131 | {"cardType": "Black", "text": "Why am I sticky?", "expansion": "Base"},
132 | {"cardType": "Black", "text": "What gets better with age?", "expansion": "Base"},
133 | {"cardType": "Black", "text": "_: kid-tested, mother-approved.", "expansion": "Base"},
134 | {"cardType": "Black", "text": "What's the crustiest?", "expansion": "Base"},
135 | {
136 | "cardType": "Black",
137 | "text": "What's Teach for America using to inspire inner city students to succeed?",
138 | "expansion": "Base"
139 | },
140 | {
141 | "cardType": "Black",
142 | "text": "Studies show that lab rats navigate mazes 50% faster after being exposed to _.",
143 | "expansion": "Base"
144 | },
145 | {
146 | "cardType": "Black",
147 | "text": "Life for American Indians was forever changed when the White Man introduced them to _.",
148 | "expansion": "Base"
149 | },
150 | {"cardType": "Black", "text": "Make a haiku.", "expansion": "Base"},
151 | {
152 | "cardType": "Black",
153 | "text": "I do not know with what weapons World War III will be fought, but World War IV will be fought with _.",
154 | "expansion": "Base"
155 | },
156 | {"cardType": "Black", "text": "Why do I hurt all over?", "expansion": "Base"},
157 | {"cardType": "Black", "text": "What am I giving up for Lent?", "expansion": "Base"},
158 | {"cardType": "Black", "text": "In Michael Jackson's final moments, he thought about _.", "expansion": "Base"},
159 | {
160 | "cardType": "Black",
161 | "text": "In an attempt to reach a wider audience, the Smithsonian Museum of Natural History has opened an interactive exhibit on _.",
162 | "expansion": "Base"
163 | },
164 | {
165 | "cardType": "Black",
166 | "text": "When I am President of the United States, I will create the Department of _.",
167 | "expansion": "Base"
168 | },
169 | {"cardType": "Black", "text": "Lifetime© presents _, the story of _.", "expansion": "Base"},
170 | {
171 | "cardType": "Black",
172 | "text": "When I am a billionaire, I shall erect a 50-foot statue to commemorate _.",
173 | "expansion": "Base"
174 | },
175 | {"cardType": "Black", "text": "When I was tripping on acid, _ turned into _.", "expansion": "Base"},
176 | {"cardType": "Black", "text": "That's right, I killed _. How, you ask? _.", "expansion": "Base"},
177 | {"cardType": "Black", "text": "What's my anti-drug?", "expansion": "Base"},
178 | {"cardType": "Black", "text": "_ + _ = _.", "expansion": "Base"},
179 | {"cardType": "Black", "text": "What never fails to liven up the party?", "expansion": "Base"},
180 | {"cardType": "Black", "text": "What's the new fad diet?", "expansion": "Base"},
181 | {
182 | "cardType": "Black",
183 | "text": "Major League Baseball has banned _ for giving players an unfair advantage.",
184 | "expansion": "Base"
185 | },
186 | {"cardType": "Black", "text": "My plan for world domination begins with _.", "expansion": "CAHe1"},
187 | {
188 | "cardType": "Black",
189 | "text": "The CIA now interrogates enemy agents by repeatedly subjecting them to _.",
190 | "expansion": "CAHe1"
191 | },
192 | {
193 | "cardType": "Black",
194 | "text": "Dear Sir or Madam, We regret to inform you that the Office of _ has denied your request for _",
195 | "expansion": "CAHe1"
196 | },
197 | {
198 | "cardType": "Black",
199 | "text": "In Rome, there are whisperings that the Vatican has a secret room devoted to _.",
200 | "expansion": "CAHe1"
201 | },
202 | {"cardType": "Black", "text": "Science will never explain _.", "expansion": "CAHe1"},
203 | {"cardType": "Black", "text": "When all else fails, I can always masturbate to _.", "expansion": "CAHe1"},
204 | {
205 | "cardType": "Black",
206 | "text": "I learned the hard way that you can't cheer up a grieving friend with _.",
207 | "expansion": "CAHe1"
208 | },
209 | {
210 | "cardType": "Black",
211 | "text": "In its new tourism campaign, Detroit proudly proclaims that it has finally eliminated _.",
212 | "expansion": "CAHe1"
213 | },
214 | {"cardType": "Black", "text": "An international tribunal has found _ guilty of _.", "expansion": "CAHe1"},
215 | {
216 | "cardType": "Black",
217 | "text": "The socialist governments of Scandinavia have declared that access to _ is a basic human right.",
218 | "expansion": "CAHe1"
219 | },
220 | {
221 | "cardType": "Black",
222 | "text": "In his new self-produced album, Kanye West raps over the sounds of _.",
223 | "expansion": "CAHe1"
224 | },
225 | {"cardType": "Black", "text": "What's the gift that keeps on giving?", "expansion": "CAHe1"},
226 | {
227 | "cardType": "Black",
228 | "text": "Next season on Man vs. Wild, Bear Grylls must survive in the depths of the Amazon with only _ and his wits.",
229 | "expansion": "CAHe1"
230 | },
231 | {"cardType": "Black", "text": "When I pooped, what came out of my butt?", "expansion": "CAHe1"},
232 | {
233 | "cardType": "Black",
234 | "text": "In the distant future, historians will agree that _ marked the beginning of America's decline.",
235 | "expansion": "CAHe1"
236 | },
237 | {"cardType": "Black", "text": "In a pinch, _ can be a suitable substitute for _.", "expansion": "CAHe1"},
238 | {"cardType": "Black", "text": "What has been making life difficult at the nudist colony?", "expansion": "CAHe1"},
239 | {"cardType": "Black", "text": "Michael Bay's new three-hour action epic pits _ against _.", "expansion": "CAHe1"},
240 | {
241 | "cardType": "Black",
242 | "text": "And I would have gotten away with it, too, if it hadn't been for _.",
243 | "expansion": "CAHe1"
244 | },
245 | {"cardType": "Black", "text": "What brought the orgy to a grinding halt?", "expansion": "CAHe1"},
246 | {"cardType": "Black", "text": "During his midlife crisis, my dad got really into _.", "expansion": "CAHe2"},
247 | {"cardType": "Black", "text": "_ would be woefully incomplete without _.", "expansion": "CAHe2"},
248 | {"cardType": "Black", "text": "My new favorite porn star is Joey "_" McGee.", "expansion": "CAHe2"},
249 | {
250 | "cardType": "Black",
251 | "text": "Before I run for president, I must destroy all evidence of my involvement with _.",
252 | "expansion": "CAHe2"
253 | },
254 | {
255 | "cardType": "Black",
256 | "text": "This is your captain speaking. Fasten your seatbelts and prepare for _.",
257 | "expansion": "CAHe2"
258 | },
259 | {
260 | "cardType": "Black",
261 | "text": "In his newest and most difficult stunt, David Blaine must escape from _.",
262 | "expansion": "CAHe2"
263 | },
264 | {
265 | "cardType": "Black",
266 | "text": "The Five Stages of Grief: denial, anger, bargaining, _, and acceptance.",
267 | "expansion": "CAHe2"
268 | },
269 | {
270 | "cardType": "Black",
271 | "text": "My mom freaked out when she looked at my browser history and found _.com/_.",
272 | "expansion": "CAHe2"
273 | },
274 | {"cardType": "Black", "text": "I went from _ to _, all thanks to _.", "expansion": "CAHe2"},
275 | {
276 | "cardType": "Black",
277 | "text": "Members of New York's social elite are paying thousands of dollars just to experience _.",
278 | "expansion": "CAHe2"
279 | },
280 | {
281 | "cardType": "Black",
282 | "text": "This month's Cosmo: "Spice up your sex life by bringing _ into the bedroom."",
283 | "expansion": "CAHe2"
284 | },
285 | {"cardType": "Black", "text": "Little Miss Muffet Sat on a tuffet, Eating her curds and _.", "expansion": "CAHe2"},
286 | {"cardType": "Black", "text": "If God didn't want us to enjoy _, he wouldn't have given us _.", "expansion": "CAHe2"},
287 | {"cardType": "Black", "text": "My country, 'tis of thee, sweet land of _.", "expansion": "CAHe2"},
288 | {
289 | "cardType": "Black",
290 | "text": "After months of debate, the Occupy Wall Street General Assembly could only agree on "More _!"",
291 | "expansion": "CAHe2"
292 | },
293 | {
294 | "cardType": "Black",
295 | "text": "I spent my whole life working toward _, only to have it ruined by _.",
296 | "expansion": "CAHe2"
297 | },
298 | {"cardType": "Black", "text": "Next time on Dr. Phil: How to talk to your child about _.", "expansion": "CAHe2"},
299 | {"cardType": "Black", "text": "Only two things in life are certain: death and _.", "expansion": "CAHe2"},
300 | {
301 | "cardType": "Black",
302 | "text": "Everyone down on the ground! We don't want to hurt anyone. We're just here for _.",
303 | "expansion": "CAHe2"
304 | },
305 | {
306 | "cardType": "Black",
307 | "text": "The healing process began when I joined a support group for victims of _.",
308 | "expansion": "CAHe2"
309 | },
310 | {"cardType": "Black", "text": "The votes are in, and the new high school mascot is _.", "expansion": "CAHe2"},
311 | {
312 | "cardType": "Black",
313 | "text": "Charades was ruined for me forever when my mom had to act out _.",
314 | "expansion": "CAHe2"
315 | },
316 | {"cardType": "Black", "text": "Before _, all we had was _.", "expansion": "CAHe2"},
317 | {"cardType": "Black", "text": "Tonight on 20/20: What you don't know about _ could kill you.", "expansion": "CAHe2"},
318 | {
319 | "cardType": "Black",
320 | "text": "You haven't truly lived until you've experienced _ and _ at the same time.",
321 | "expansion": "CAHe2"
322 | },
323 | {"cardType": "Black", "text": "D&D 4.0 isn't real D&D because of the _.", "expansion": "CAHgrognards"},
324 | {"cardType": "Black", "text": "It's a D&D retroclone with _ added.", "expansion": "CAHgrognards"},
325 | {"cardType": "Black", "text": "Storygames aren't RPGs because of the _.", "expansion": "CAHgrognards"},
326 | {"cardType": "Black", "text": "The Slayer's Guide to _.", "expansion": "CAHgrognards"},
327 | {"cardType": "Black", "text": "Worst character concept ever: _, but with _.", "expansion": "CAHgrognards"},
328 | {"cardType": "Black", "text": "Alightment: Chaotic _", "expansion": "CAHgrognards"},
329 | {"cardType": "Black", "text": "It's a D&D retroclone with _ added.", "expansion": "CAHgrognards"},
330 | {"cardType": "Black", "text": "What made the paladin fall? _", "expansion": "CAHgrognards"},
331 | {"cardType": "Black", "text": "The portal leads to the quasi-elemental plane of _.", "expansion": "CAHgrognards"},
332 | {"cardType": "Black", "text": "The Temple of Elemental _.", "expansion": "CAHgrognards"},
333 | {"cardType": "Black", "text": "Pathfinder is basically D&D _ Edition.", "expansion": "CAHgrognards"},
334 | {"cardType": "Black", "text": "_ : The Storytelling Game.", "expansion": "CAHgrognards"},
335 | {
336 | "cardType": "Black",
337 | "text": "People are wondering why Steve Jackson published GURPS _.",
338 | "expansion": "CAHgrognards"
339 | },
340 | {"cardType": "Black", "text": "Linear Fighter, Quadratic _.", "expansion": "CAHgrognards"},
341 | {"cardType": "Black", "text": "You start with 1d4 _ points.", "expansion": "CAHgrognards"},
342 | {
343 | "cardType": "Black",
344 | "text": "Back when I was 12 and I was just starting playing D&D, the game had _.",
345 | "expansion": "CAHgrognards"
346 | },
347 | {"cardType": "Black", "text": "Big Eyes, Small _.", "expansion": "CAHgrognards"},
348 | {"cardType": "Black", "text": "In the grim darkness of the future there is only _.", "expansion": "CAHgrognards"},
349 | {"cardType": "Black", "text": "My innovative new RPG has a stat for _.", "expansion": "CAHgrognards"},
350 | {"cardType": "Black", "text": "A true gamer has no problem with _.", "expansion": "CAHgrognards"},
351 | {
352 | "cardType": "Black",
353 | "text": "Elminster cast a potent _ spell and then had sex with _.",
354 | "expansion": "CAHgrognards"
355 | },
356 | {"cardType": "Black", "text": "The Deck of Many _.", "expansion": "CAHgrognards"},
357 | {"cardType": "Black", "text": "You are all at a tavern when _ approach you.", "expansion": "CAHgrognards"},
358 | {
359 | "cardType": "Black",
360 | "text": "For the convention I cosplayed as Sailor Moon, except with _.",
361 | "expansion": "CAHweeaboo"
362 | },
363 | {"cardType": "Black", "text": "The worst part of Grave of the Fireflies is all the _.", "expansion": "CAHweeaboo"},
364 | {"cardType": "Black", "text": "In the Evangelion remake, Shinji has to deal with _.", "expansion": "CAHweeaboo"},
365 | {"cardType": "Black", "text": "Worst anime convention purchase ever? _.", "expansion": "CAHweeaboo"},
366 | {"cardType": "Black", "text": "While powering up Vegeta screamed, _!", "expansion": "CAHweeaboo"},
367 | {"cardType": "Black", "text": "You evaded my _ attack. Most impressive.", "expansion": "CAHweeaboo"},
368 | {"cardType": "Black", "text": "I downloaded a doujin where _ got into _.", "expansion": "CAHweeaboo"},
369 | {
370 | "cardType": "Black",
371 | "text": "The magical girl found out that the Power of Love is useless against _.",
372 | "expansion": "CAHweeaboo"
373 | },
374 | {
375 | "cardType": "Black",
376 | "text": "The Japanese government has spent billions of yen researching _.",
377 | "expansion": "CAHweeaboo"
378 | },
379 | {"cardType": "Black", "text": "In the dubbed version they changed _ into _.", "expansion": "CAHweeaboo"},
380 | {"cardType": "Black", "text": "_ is Best Pony.", "expansion": "CAHweeaboo"},
381 | {"cardType": "Black", "text": "The _ of Haruhi Suzumiya.", "expansion": "CAHweeaboo"},
382 | {
383 | "cardType": "Black",
384 | "text": "The new thing in Akihabara is fetish cafes where you can see girls dressed up as _.",
385 | "expansion": "CAHweeaboo"
386 | },
387 | {"cardType": "Black", "text": "Your drill can pierce _!", "expansion": "CAHweeaboo"},
388 | {"cardType": "Black", "text": "Avatar: The Last _ bender.", "expansion": "CAHweeaboo"},
389 | {"cardType": "Black", "text": "In the name of _ Sailor Moon will punish you!", "expansion": "CAHweeaboo"},
390 | {"cardType": "Black", "text": "No harem anime is complete without _.", "expansion": "CAHweeaboo"},
391 | {"cardType": "Black", "text": "My boyfriend's a _ now.", "expansion": "CAHweeaboo"},
392 | {"cardType": "Black", "text": "The _ of _ has left me in despair!", "expansion": "CAHweeaboo"},
393 | {"cardType": "Black", "text": "_.tumblr.com", "expansion": "CAHweeaboo"},
394 | {"cardType": "Black", "text": "Somehow they made a cute mascot girl out of _.", "expansion": "CAHweeaboo"},
395 | {
396 | "cardType": "Black",
397 | "text": "Haruko hit Naoto in the head with her bass guitar and _ came out.",
398 | "expansion": "CAHweeaboo"
399 | },
400 | {"cardType": "Black", "text": "After blacking out during New year's Eve, I was awoken by _.", "expansion": "CAHxmas"},
401 | {
402 | "cardType": "Black",
403 | "text": "This holiday season, Tim Allen must overcome his fear of _ to save Christmas.",
404 | "expansion": "CAHxmas"
405 | },
406 | {"cardType": "Black", "text": "Jesus is _.", "expansion": "CAHxmas"},
407 | {
408 | "cardType": "Black",
409 | "text": "Every Christmas, my uncle gets drunk and tells the story about _.",
410 | "expansion": "CAHxmas"
411 | },
412 | {"cardType": "Black", "text": "What keeps me warm during the cold, cold, winter?", "expansion": "CAHxmas"},
413 | {
414 | "cardType": "Black",
415 | "text": "On the third day of Christmas, my true love gave to me: three French hens, two turtle doves, and _.",
416 | "expansion": "CAHxmas"
417 | },
418 | {
419 | "cardType": "Black",
420 | "text": "Wake up, America. Christmas is under attack by secular liberals and their _.",
421 | "expansion": "CAHxmas"
422 | },
423 | {"cardType": "Black", "text": "We got the third rope, now where's the fourth?", "expansion": "NEIndy"},
424 | {"cardType": "Black", "text": "Tonights main event, _ vs. _.", "expansion": "NEIndy"},
425 | {"cardType": "Black", "text": "Tackle, Dropdown, _.", "expansion": "NEIndy"},
426 | {"cardType": "Black", "text": "Christopher Daniels is late on his _.", "expansion": "NEIndy"},
427 | {"cardType": "Black", "text": "Instead of booking _, they should have booked _.", "expansion": "NEIndy"},
428 | {"cardType": "Black", "text": "Genius is 10% inspiration, 90% _.", "expansion": "NEIndy"},
429 | {"cardType": "Black", "text": "They found _ in the dumpster behind _.", "expansion": "NEIndy"},
430 | {"cardType": "Black", "text": "The best thing I ever got for Christmas was _.", "expansion": "NEIndy"},
431 | {"cardType": "Black", "text": "There's no crying in _.", "expansion": "NEIndy"},
432 | {"cardType": "Black", "text": "Mastodon! Pterodactyl! Triceratops! Sabretooth Tiger! _!", "expansion": "NEIndy"},
433 | {"cardType": "Black", "text": "Don't eat the _.", "expansion": "NEIndy"},
434 | {"cardType": "Black", "text": "He did _ with the _!?!", "expansion": "NEIndy"},
435 | {"cardType": "Black", "text": "SOOOOO hot, want to touch the _.", "expansion": "NEIndy"},
436 | {"cardType": "Black", "text": "Stop looking at me _!", "expansion": "NEIndy"},
437 | {"cardType": "Black", "text": "I'm cuckoo for _ puffs.", "expansion": "NEIndy"},
438 | {"cardType": "Black", "text": "Silly rabbit, _ are for kids.", "expansion": "NEIndy"},
439 | {"cardType": "Black", "text": "Between love and madness lies _.", "expansion": "NSFH"},
440 | {
441 | "cardType": "Black",
442 | "text": "Instead of chess, the Grim Reaper now gambles for your soul with a game of _.",
443 | "expansion": "NSFH"
444 | },
445 | {"cardType": "Black", "text": "My father gave his life fighting to protect _ from _.", "expansion": "NSFH"},
446 | {"cardType": "Black", "text": "Why is my throat sore?", "expansion": "NSFH"},
447 | {"cardType": "Black", "text": "_ sparked a city-wide riot that only ended with _.", "expansion": "NSFH"},
448 | {
449 | "cardType": "Black",
450 | "text": "I�m very sorry Mrs. Smith, but Little Billy has tested positive for _.",
451 | "expansion": "NSFH"
452 | },
453 | {"cardType": "Black", "text": "Instead of beating them, Chris Brown now does _ to women.", "expansion": "NSFH"},
454 | {"cardType": "Black", "text": "Instead of cutting, trendy young emo girls now engage in _.", "expansion": "NSFH"},
455 | {"cardType": "Black", "text": "The definition of rock bottom is gambling away _.", "expansion": "NSFH"},
456 | {"cardType": "Black", "text": "The Mayan prophecies really heralded the coming of _ in 2012.", "expansion": "NSFH"},
457 | {
458 | "cardType": "Black",
459 | "text": "The next US election will be fought on the key issues of _ against _.",
460 | "expansion": "NSFH"
461 | },
462 | {"cardType": "Black", "text": "When I was 10 I wrote to Santa wishing for _.", "expansion": "NSFH"},
463 | {"cardType": "Black", "text": "Where or How I met my last signifigant other: _.", "expansion": "NSFH"},
464 | {"cardType": "Black", "text": "_, Never leave home without it.", "expansion": "NSFH"},
465 | {"cardType": "Black", "text": "_. This is my fetish.", "expansion": "NSFH"},
466 | {"cardType": "Black", "text": "David Icke's newest conspiracy theory states that _ caused _.", "expansion": "NSFH"},
467 | {"cardType": "Black", "text": "I did _ so you don't have to!", "expansion": "NSFH"},
468 | {"cardType": "Black", "text": "I need your clothes, your bike, and _.", "expansion": "NSFH"},
469 | {
470 | "cardType": "Black",
471 | "text": "In a new Cold War retro movie, the red menace tries to conquer the world through the cunning use of _.",
472 | "expansion": "NSFH"
473 | },
474 | {
475 | "cardType": "Black",
476 | "text": "In college, our lecturer made us write a report comparing _ to _.",
477 | "expansion": "NSFH"
478 | },
479 | {
480 | "cardType": "Black",
481 | "text": "In The Hangover part 3, those four guys have to deal with _, _, and _.",
482 | "expansion": "NSFH"
483 | },
484 | {"cardType": "Black", "text": "My zombie survival kit includes food, water, and _.", "expansion": "NSFH"},
485 | {"cardType": "Black", "text": "The way to a man's heart is through _.", "expansion": "NSFH"},
486 | {"cardType": "Black", "text": "What was the theme of my second wedding?", "expansion": "NSFH"},
487 | {"cardType": "Black", "text": "What's the newest Japanese craze to head West?", "expansion": "NSFH"},
488 | {"cardType": "Black", "text": "Everybody loves _.", "expansion": "NSFH"},
489 | {"cardType": "Black", "text": "I can only express myself through _.", "expansion": "NSFH"},
490 | {"cardType": "Black", "text": "My new porn DVD was completely ruined by the inclusion of _", "expansion": "NSFH"},
491 | {"cardType": "Black", "text": "My three wishes will be for _, _, and _.", "expansion": "NSFH"},
492 | {"cardType": "Black", "text": "The latest horrifying school shooting was inspired by _.", "expansion": "NSFH"},
493 | {"cardType": "Black", "text": "I got fired because of my not-so-secret obsession over _.", "expansion": "NSFH"},
494 | {"cardType": "Black", "text": "My new favourite sexual position is _", "expansion": "NSFH"},
495 | {
496 | "cardType": "Black",
497 | "text": "A successful job interview begins with a firm handshake and ends with _.",
498 | "expansion": "CAHe3"
499 | },
500 | {"cardType": "Black", "text": "Lovin' you is easy 'cause you're _.", "expansion": "CAHe3"},
501 | {"cardType": "Black", "text": "My life is ruled by a vicious cycle of _ and _.", "expansion": "CAHe3"},
502 | {
503 | "cardType": "Black",
504 | "text": "The blind date was going horribly until we discovered our shared interest in _.",
505 | "expansion": "CAHe3"
506 | },
507 | {"cardType": "Black", "text": "_. Awesome in theory, kind of a mess in practice.", "expansion": "CAHe3"},
508 | {"cardType": "Black", "text": "I'm not like the rest of you. I'm too rich and busy for _.", "expansion": "CAHe3"},
509 | {
510 | "cardType": "Black",
511 | "text": "In the seventh circle of Hell, sinners must endure _ for all eternity.",
512 | "expansion": "CAHe3"
513 | },
514 | {"cardType": "Black", "text": "_: Hours of fun. Easy to use. Perfect for _!", "expansion": "CAHe3"},
515 | {"cardType": "Black", "text": "What left this stain on my couch?", "expansion": "CAHe3"},
516 | {
517 | "cardType": "Black",
518 | "text": "Call the law offices of Goldstein & Goldstein, because no one should have to tolerate _ in the workplace.",
519 | "expansion": "CAHe3"
520 | },
521 | {"cardType": "Black", "text": "When you get right down to it, _ is just _.", "expansion": "CAHe3"},
522 | {
523 | "cardType": "Black",
524 | "text": "Turns out that _-Man was neither the hero we needed nor wanted.",
525 | "expansion": "CAHe3"
526 | },
527 | {
528 | "cardType": "Black",
529 | "text": "As part of his daily regimen, Anderson Cooper sets aside 15 minutes for _.",
530 | "expansion": "CAHe3"
531 | },
532 | {"cardType": "Black", "text": "Money can't buy me love, but it can buy me _.", "expansion": "CAHe3"},
533 | {"cardType": "Black", "text": "With enough time and pressure, _ will turn into _.", "expansion": "CAHe3"},
534 | {"cardType": "Black", "text": "And what did you bring for show and tell?", "expansion": "CAHe3"},
535 | {
536 | "cardType": "Black",
537 | "text": "During high school, I never really fit in until I found _ club.",
538 | "expansion": "CAHe3"
539 | },
540 | {"cardType": "Black", "text": "Hey, baby, come back to my place and I'll show you _.", "expansion": "CAHe3"},
541 | {
542 | "cardType": "Black",
543 | "text": "After months of practice with _, I think I'm finally ready for _.",
544 | "expansion": "CAHe3"
545 | },
546 | {
547 | "cardType": "Black",
548 | "text": "To prepare for his upcoming role, Daniel Day-Lewis immersed himself in the world of _.",
549 | "expansion": "CAHe3"
550 | },
551 | {"cardType": "Black", "text": "Finally! A service that delivers _ right to your door.", "expansion": "CAHe3"},
552 | {"cardType": "Black", "text": "My gym teacher got fired for adding _ to the obstacle course.", "expansion": "CAHe3"},
553 | {"cardType": "Black", "text": "Having problems with _? Try _!", "expansion": "CAHe3"},
554 | {
555 | "cardType": "Black",
556 | "text": "As part of his contract, Prince won't perform without _ in his dressing room.",
557 | "expansion": "CAHe3"
558 | },
559 | {
560 | "cardType": "Black",
561 | "text": "Listen, son. If you want to get involved with _, I won't stop you. Just steer clear of _.",
562 | "expansion": "CAHe3"
563 | },
564 | {"cardType": "Black", "text": "I just met you and this is crazy, but here's _, so _ maybe", "expansion": "Image1"},
565 | {"cardType": "Black", "text": "It's only _ if you get caught!", "expansion": "Image1"},
566 | {"cardType": "Black", "text": "_: The Next Generation", "expansion": "Image1"},
567 | {"cardType": "Black", "text": "Terminator 4: _", "expansion": "Image1"},
568 | {"cardType": "Black", "text": "Disney presents _ on ice!", "expansion": "Image1"},
569 | {"cardType": "Black", "text": "_. The other white meat.", "expansion": "Image1"},
570 | {"cardType": "Black", "text": "A _ a day keeps the _ away.", "expansion": "Image1"},
571 | {"cardType": "Black", "text": "I'm sweating like a _ at a _.", "expansion": "Image1"},
572 | {"cardType": "Black", "text": "I love the smell of _ in the morning.", "expansion": "Image1"},
573 | {"cardType": "Black", "text": "You're not gonna believe this, but _.", "expansion": "Image1"},
574 | {"cardType": "Black", "text": "_. All the cool kids are doing it.", "expansion": "Image1"},
575 | {"cardType": "Black", "text": "So I was _ in my cubicle at work, and suddenly _!", "expansion": "Image1"},
576 | {"cardType": "Black", "text": "Baskin Robbins just added a 32nd flavor: _!", "expansion": "Image1"},
577 | {"cardType": "Black", "text": "I can drive and ____ at the same time.", "expansion": "Image1"},
578 | {"cardType": "Black", "text": "_ ain't nothin' to fuck wit'!", "expansion": "Image1"}
579 | ];
--------------------------------------------------------------------------------
/private/Movies/Terminator.srt:
--------------------------------------------------------------------------------
1 | 1
2 | 00:04:02,867 --> 00:04:05,101
3 | (ENGINE DIES)
4 |
5 | 2
6 | 00:04:05,569 --> 00:04:09,525
7 | What the hell? Goddamn
8 | son of a bitch...
9 |
10 | 3
11 | 00:04:10,992 --> 00:04:12,593
12 | Goddamn son of a...
13 |
14 | 4
15 | 00:04:24,704 --> 00:04:26,539
16 | What the hell?
17 |
18 | 5
19 | 00:05:20,143 --> 00:05:22,261
20 | Hey, my turn!
21 |
22 | 6
23 | 00:05:24,665 --> 00:05:26,232
24 | Me.
25 |
26 | 7
27 | 00:05:28,836 --> 00:05:30,304
28 | Come on.
29 |
30 | 8
31 | 00:05:30,572 --> 00:05:33,442
32 | Hey, what's wrong
33 | with this picture?
34 |
35 | 9
36 | 00:05:42,233 --> 00:05:44,551
37 | Nice night for a walk, eh?
38 |
39 | 10
40 | 00:05:49,190 --> 00:05:51,324
41 | Nice night for a walk.
42 |
43 | 11
44 | 00:05:51,392 --> 00:05:55,879
45 | Washday tomorrow.
46 | Nothing clean, right?
47 |
48 | 12
49 | 00:05:55,947 --> 00:05:57,748
50 | Nothing clean. Right.
51 |
52 | 13
53 | 00:05:57,816 --> 00:06:00,867
54 | I think this guy's a couple
55 | cans short of a six-pack.
56 |
57 | 14
58 | 00:06:01,035 --> 00:06:02,345
59 | Your clothes.
60 |
61 | 15
62 | 00:06:03,271 --> 00:06:05,164
63 | Give them to me. Now.
64 |
65 | 16
66 | 00:06:05,906 --> 00:06:07,625
67 | Fuck you, asshole!
68 |
69 | 17
70 | 00:06:30,548 --> 00:06:33,066
71 | (SIREN)
72 |
73 | 18
74 | 00:06:38,172 --> 00:06:40,607
75 | MAN: Hey, sugar, how about it?
76 |
77 | 19
78 | 00:06:41,175 --> 00:06:45,813
79 | MAN 2: (SLURRED) I don't have to
80 | put up with that bullshit, man.
81 |
82 | 20
83 | 00:06:45,881 --> 00:06:48,282
84 | She's always after me.
85 |
86 | 21
87 | 00:06:48,850 --> 00:06:50,484
88 | I don't... I don't...
89 |
90 | 22
91 | 00:07:50,844 --> 00:07:55,149
92 | Hey, buddy. Did you just
93 | see a real bright light?
94 |
95 | 23
96 | 00:07:57,501 --> 00:07:58,868
97 | POLICEMAN: See that guy?
98 |
99 | 24
100 | 00:07:58,936 --> 00:08:01,154
101 | - Hold it right there!
102 | - He's rabbiting.
103 |
104 | 25
105 | 00:08:01,222 --> 00:08:04,191
106 | - Hey! I said hold it!
107 | - Go!
108 |
109 | 26
110 | 00:08:05,059 --> 00:08:08,228
111 | That son of a bitch took my pants!
112 |
113 | 27
114 | 00:08:12,784 --> 00:08:15,085
115 | (SIREN)
116 |
117 | 28
118 | 00:08:51,805 --> 00:08:56,042
119 | - What day is it? The date!
120 | - 12th... May. Thursday.
121 |
122 | 29
123 | 00:08:56,110 --> 00:08:58,445
124 | - What year?!
125 | - What?
126 |
127 | 30
128 | 00:09:03,167 --> 00:09:05,051
129 | (SIREN)
130 |
131 | 31
132 | 00:09:10,875 --> 00:09:13,293
133 | He's got my gun! Let's go!
134 |
135 | 32
136 | 00:10:06,697 --> 00:10:09,549
137 | (SIREN)
138 |
139 | 33
140 | 00:10:26,917 --> 00:10:28,801
141 | (POLICE RADIO TRANSMITTING)
142 |
143 | 34
144 | 00:10:38,379 --> 00:10:41,831
145 | POLICE RADIO:
146 | 3831, they lost the suspect.
147 |
148 | 35
149 | 00:10:59,366 --> 00:11:01,467
150 | (SIREN)
151 |
152 | 36
153 | 00:11:27,294 --> 00:11:29,394
154 | (TURNING PAGES)
155 |
156 | 37
157 | 00:11:32,132 --> 00:11:34,366
158 | (SIREN)
159 |
160 | 38
161 | 00:12:07,834 --> 00:12:10,087
162 | Guard it for me, big buns.
163 |
164 | 39
165 | 00:12:12,723 --> 00:12:15,659
166 | - Hi.
167 | - Hi. I'm late.
168 |
169 | 40
170 | 00:12:16,627 --> 00:12:17,945
171 | So am I.
172 |
173 | 41
174 | 00:12:26,404 --> 00:12:28,105
175 | (PUNCH)
176 |
177 | 42
178 | 00:12:56,266 --> 00:12:58,484
179 | (ENGINE STARTS)
180 |
181 | 43
182 | 00:13:01,721 --> 00:13:03,806
183 | - I'm in it.
184 | - So am I.
185 |
186 | 44
187 | 00:13:09,445 --> 00:13:11,231
188 | Honey, could I have
189 | that coffee now, please?
190 |
191 | 45
192 | 00:13:11,238 --> 00:13:12,372
193 | Yes, sir.
194 |
195 | 46
196 | 00:13:13,399 --> 00:13:16,101
197 | - OK, who gets the burly beef?
198 | - Uh, I ordered barbecued beef.
199 |
200 | 47
201 | 00:13:16,104 --> 00:13:18,404
202 | - I think that's mine, but I didn't order fries.
203 | - WOMAN: He gets the barbecued beef.
204 |
205 | 48
206 | 00:13:18,472 --> 00:13:21,190
207 | - Mine's the chili beef deluxe.
208 | - OK, who gets the burly beef?
209 |
210 | 49
211 | 00:13:21,258 --> 00:13:23,843
212 | - WOMAN: Miss, we're ready to order now.
213 | - Yes, ma'am.
214 |
215 | 50
216 | 00:13:24,011 --> 00:13:24,944
217 | - (DRINK SPILLS)
218 | - Aah!
219 |
220 | 51
221 | 00:13:25,812 --> 00:13:29,250
222 | Oh, I'm so sorry. Oh, lord.
223 |
224 | 52
225 | 00:13:31,318 --> 00:13:33,370
226 | This isn't real leather, is it?
227 |
228 | 53
229 | 00:13:34,438 --> 00:13:35,721
230 | MAN 1: This special sucks.
231 |
232 | 54
233 | 00:13:35,788 --> 00:13:39,260
234 | MAN 2: Nice going, kid.
235 | Ought to give you the tip.
236 |
237 | 55
238 | 00:13:41,862 --> 00:13:45,199
239 | Look at it this way... in a hundred
240 | years, who's going to care?
241 |
242 | 56
243 | 00:13:53,173 --> 00:13:55,141
244 | The twelve-gauge auto-loader.
245 |
246 | 57
247 | 00:13:57,544 --> 00:14:01,315
248 | That's Italian. You
249 | can go pump or auto.
250 |
251 | 58
252 | 00:14:02,182 --> 00:14:05,035
253 | The .45 long slide,
254 | with laser sighting.
255 |
256 | 59
257 | 00:14:05,103 --> 00:14:08,588
258 | These are brand-new. We just
259 | got them in. That's a good gun.
260 |
261 | 60
262 | 00:14:09,156 --> 00:14:11,825
263 | Just touch the trigger, the beam
264 | comes on, and you put the red dot
265 |
266 | 61
267 | 00:14:11,826 --> 00:14:14,644
268 | where you want the bullet
269 | to go. You can't miss.
270 |
271 | 62
272 | 00:14:16,647 --> 00:14:17,997
273 | Anything else?
274 |
275 | 63
276 | 00:14:18,065 --> 00:14:20,500
277 | A phased plasma rifle
278 | in the 40-watt range.
279 |
280 | 64
281 | 00:14:20,668 --> 00:14:22,602
282 | Just what you see, pal.
283 |
284 | 65
285 | 00:14:23,754 --> 00:14:25,621
286 | The Uzi 9mm.
287 |
288 | 66
289 | 00:14:26,690 --> 00:14:31,260
290 | You know your weapons, buddy. Any one
291 | of these is ideal for home defense.
292 |
293 | 67
294 | 00:14:32,028 --> 00:14:35,314
295 | So, uh... which will it be?
296 |
297 | 68
298 | 00:14:35,482 --> 00:14:36,532
299 | All.
300 |
301 | 69
302 | 00:14:36,900 --> 00:14:39,101
303 | I may close early today.
304 |
305 | 70
306 | 00:14:39,270 --> 00:14:43,706
307 | There's a 15-day wait on the handguns,
308 | but the rifles you can take right now.
309 |
310 | 71
311 | 00:14:44,274 --> 00:14:45,792
312 | You can't do that.
313 |
314 | 72
315 | 00:14:46,259 --> 00:14:47,477
316 | Wrong.
317 |
318 | 73
319 | 00:14:54,584 --> 00:14:56,035
320 | (COCKS RIFLE)
321 |
322 | 74
323 | 00:15:13,687 --> 00:15:16,655
324 | MAN: Hi, baby. Yeah, yeah, it's me.
325 |
326 | 75
327 | 00:15:16,723 --> 00:15:20,394
328 | Listen, I need you to come pick
329 | me up. My bike just broke down.
330 |
331 | 76
332 | 00:15:20,961 --> 00:15:23,863
333 | I don't care what you're doing.
334 | Come and get me. What the...
335 |
336 | 77
337 | 00:15:24,831 --> 00:15:29,085
338 | Hey, man, you got a
339 | serious attitude problem.
340 |
341 | 78
342 | 00:16:01,268 --> 00:16:02,968
343 | (DOG BARKING)
344 |
345 | 79
346 | 00:16:22,022 --> 00:16:24,891
347 | - Sarah Connor?
348 | - Yes?
349 |
350 | 80
351 | 00:16:37,237 --> 00:16:39,705
352 | I'm on my break, Chuck.
353 | Carla's got my station.
354 |
355 | 81
356 | 00:16:39,706 --> 00:16:43,075
357 | Sarah, come here!
358 | It's about you. I mean, sort of.
359 |
360 | 82
361 | 00:16:45,896 --> 00:16:47,956
362 | It's so incredible. You're
363 | not gonna believe this.
364 |
365 | 83
366 | 00:16:47,982 --> 00:16:50,040
367 | Sit down. You are
368 | going to love this.
369 |
370 | 84
371 | 00:16:50,083 --> 00:16:51,884
372 | - Shh!
373 | - What?
374 |
375 | 85
376 | 00:16:51,885 --> 00:16:54,451
377 | Has been compiled
378 | from several witnesses.
379 |
380 | 86
381 | 00:16:54,455 --> 00:16:57,657
382 | Once again, Sarah Connor,
383 | thirty-five, mother of two,
384 |
385 | 87
386 | 00:16:57,724 --> 00:17:00,075
387 | brutally shot to death
388 | in her home this afternoon.
389 |
390 | 88
391 | 00:17:00,143 --> 00:17:02,285
392 | - You're dead, honey.
393 | - In other late-breaking news,
394 |
395 | 89
396 | 00:17:02,311 --> 00:17:04,404
397 | teamster representatives
398 | have issued a statement...
399 |
400 | 90
401 | 00:17:21,547 --> 00:17:23,698
402 | (CAR ENGINE STARTS)
403 |
404 | 91
405 | 00:17:23,766 --> 00:17:25,867
406 | (RADIO PLAYS)
407 |
408 | 92
409 | 00:18:02,555 --> 00:18:04,672
410 | (GUNFIRE)
411 |
412 | 93
413 | 00:20:15,421 --> 00:20:17,422
414 | RADIO: Yes, friends, if you're
415 | into stereo and you're into sound,
416 |
417 | 94
418 | 00:20:17,490 --> 00:20:22,426
419 | for the greatest sound around you, come to
420 | Bob's Stereo at 25000 Sepulveda Boulevard.
421 |
422 | 95
423 | 00:20:22,494 --> 00:20:26,465
424 | Yes, we've got woofers, tweeters, the newest
425 | in digital audio and compact laser discs.
426 |
427 | 96
428 | 00:20:26,532 --> 00:20:30,602
429 | We've got graphic equalizers and sound
430 | balancers that adjust the sound to fit...
431 |
432 | 97
433 | 00:20:46,769 --> 00:20:48,704
434 | ♪ In love again ♪
435 |
436 | 98
437 | 00:20:49,672 --> 00:20:53,075
438 | ♪ Drivin' on the inside shoulder ♪
439 |
440 | 99
441 | 00:20:53,242 --> 00:20:54,542
442 | Sorry.
443 |
444 | 100
445 | 00:20:54,610 --> 00:20:56,261
446 | ♪ ...for you to smooth things over ♪
447 |
448 | 101
449 | 00:20:56,328 --> 00:20:57,863
450 | ♪ Hang on ♪
451 |
452 | 102
453 | 00:20:58,188 --> 00:21:00,035
454 | ♪ Don't stand up... ♪
455 |
456 | 103
457 | 00:21:01,133 --> 00:21:03,000
458 | (TELEPHONE RINGS)
459 |
460 | 104
461 | 00:21:05,137 --> 00:21:06,705
462 | (RING)
463 |
464 | 105
465 | 00:21:06,873 --> 00:21:08,507
466 | Hello.
467 |
468 | 106
469 | 00:21:08,575 --> 00:21:12,811
470 | MAN: First, I'm gonna rip the buttons
471 | off your blouse, one by one,
472 |
473 | 107
474 | 00:21:12,878 --> 00:21:17,349
475 | and then run my tongue down your
476 | neck to your bare, gleaming breasts,
477 |
478 | 108
479 | 00:21:17,417 --> 00:21:22,855
480 | and then slowly, slowly pull
481 | your jeans off... inch by inch.
482 |
483 | 109
484 | 00:21:24,590 --> 00:21:26,340
485 | Ginger, it's Matt!
486 |
487 | 110
488 | 00:21:26,409 --> 00:21:30,662
489 | And lick your belly in circles
490 | further and further down,
491 |
492 | 111
493 | 00:21:30,729 --> 00:21:33,899
494 | and then pull your panties
495 | off with my teeth.
496 |
497 | 112
498 | 00:21:34,106 --> 00:21:35,955
499 | Who is this?
500 |
501 | 113
502 | 00:21:36,902 --> 00:21:39,304
503 | I... I, uh... Sarah?
504 |
505 | 114
506 | 00:21:40,172 --> 00:21:43,809
507 | Oh, Jesus. I'm sorry.
508 | I thought you were...
509 |
510 | 115
511 | 00:21:43,876 --> 00:21:47,112
512 | - Can I talk to Ginger, please?
513 | - Sure, Bunky.
514 |
515 | 116
516 | 00:21:47,380 --> 00:21:49,347
517 | ♪ Ow, o-oo-ooh ♪
518 |
519 | 117
520 | 00:21:50,015 --> 00:21:51,549
521 | It's the creep.
522 |
523 | 118
524 | 00:21:53,618 --> 00:21:54,485
525 | Hello.
526 |
527 | 119
528 | 00:21:54,553 --> 00:21:57,823
529 | First, I'm gonna rip the buttons
530 | off your blouse, one by one...
531 |
532 | 120
533 | 00:22:00,143 --> 00:22:03,728
534 | You fuckin' pigs! Wait till
535 | I get my hands on you!
536 |
537 | 121
538 | 00:22:03,796 --> 00:22:06,131
539 | - Get off of me!
540 | - POLICEMAN: Sit down, fella.
541 |
542 | 122
543 | 00:22:06,899 --> 00:22:08,132
544 | Ed.
545 |
546 | 123
547 | 00:22:10,369 --> 00:22:12,471
548 | - What do you got?
549 | - Dead girl.
550 |
551 | 124
552 | 00:22:12,538 --> 00:22:16,241
553 | - I can see that.
554 | - Sarah Ann Connor, secretary, 35,
555 |
556 | 125
557 | 00:22:16,309 --> 00:22:20,245
558 | shot six times at less than ten
559 | feet. Large caliber weapon.
560 |
561 | 126
562 | 00:22:20,313 --> 00:22:21,879
563 | You know, these work.
564 |
565 | 127
566 | 00:22:23,449 --> 00:22:24,982
567 | What's this?
568 |
569 | 128
570 | 00:22:25,050 --> 00:22:28,586
571 | Dead girl 2, sent over from
572 | Valley Division this afternoon.
573 |
574 | 129
575 | 00:22:30,723 --> 00:22:35,177
576 | - I'm sure there's a point to all of this.
577 | - Look at the name, Ed.
578 |
579 | 130
580 | 00:22:35,945 --> 00:22:40,098
581 | Sarah Louise... Connor.
582 | Is this right?
583 |
584 | 131
585 | 00:22:41,434 --> 00:22:42,834
586 | You're kidding me.
587 |
588 | 132
589 | 00:22:42,902 --> 00:22:45,604
590 | The press is going to be
591 | short-stroking it all over the place.
592 |
593 | 133
594 | 00:22:45,672 --> 00:22:47,494
595 | A one-day pattern killer.
596 |
597 | 134
598 | 00:22:48,720 --> 00:22:49,883
599 | I hate the weird ones.
600 |
601 | 135
602 | 00:22:54,580 --> 00:22:56,047
603 | So...
604 |
605 | 136
606 | 00:22:57,883 --> 00:22:59,851
607 | Better than mortal man deserves.
608 |
609 | 137
610 | 00:23:07,426 --> 00:23:11,596
611 | - Ginger, have you seen Pugsley?
612 | - No, not lately. Did you check messages?
613 |
614 | 138
615 | 00:23:11,763 --> 00:23:13,431
616 | Uh-uh. I thought you did.
617 |
618 | 139
619 | 00:23:13,498 --> 00:23:15,599
620 | (ANSWERING MACHINE REWINDS)
621 |
622 | 140
623 | 00:23:17,837 --> 00:23:19,805
624 | (BEEP)
625 | Hi, Sarah, this is your mom...
626 |
627 | 141
628 | 00:23:19,872 --> 00:23:22,295
629 | There you are, young man.
630 |
631 | 142
632 | 00:23:22,321 --> 00:23:26,853
633 | - You mind your mother.
634 | - So call me back, will you, dear? Uh, bye.
635 |
636 | 143
637 | 00:23:27,796 --> 00:23:28,563
638 | (BEEP)
639 |
640 | 144
641 | 00:23:28,631 --> 00:23:31,900
642 | Hi, Sarah. Dan Moorski.
643 | Uh, something's come up,
644 |
645 | 145
646 | 00:23:31,901 --> 00:23:34,402
647 | and it looks like I won't
648 | be able to make it tonight.
649 |
650 | 146
651 | 00:23:34,469 --> 00:23:37,939
652 | Just can't get out of it. Look, I'm
653 | really sorry. I'll make it up to you.
654 |
655 | 147
656 | 00:23:38,007 --> 00:23:40,942
657 | Call you in a day or so,
658 | OK? Sorry. Bye.
659 |
660 | 148
661 | 00:23:42,410 --> 00:23:45,813
662 | That bum. So what if
663 | he has a Porsche?
664 |
665 | 149
666 | 00:23:45,881 --> 00:23:49,285
667 | He can't treat you like this. It's
668 | Friday night, for Christ's sake!
669 |
670 | 150
671 | 00:23:50,753 --> 00:23:52,420
672 | I'll live.
673 |
674 | 151
675 | 00:23:52,788 --> 00:23:54,989
676 | I'll break his kneecaps.
677 |
678 | 152
679 | 00:23:55,758 --> 00:23:59,727
680 | Well... Pugsley still loves
681 | me, don't you, baby?
682 |
683 | 153
684 | 00:24:00,863 --> 00:24:03,531
685 | God. It's disgusting.
686 |
687 | 154
688 | 00:24:05,298 --> 00:24:07,151
689 | - I'm gonna go to a movie, kiddo.
690 | - OK.
691 |
692 | 155
693 | 00:24:07,219 --> 00:24:10,354
694 | - You and Matt have a good time.
695 | - We will. You, too.
696 |
697 | 156
698 | 00:24:10,422 --> 00:24:11,440
699 | OK.
700 |
701 | 157
702 | 00:24:13,459 --> 00:24:14,659
703 | (GASPS)
704 |
705 | 158
706 | 00:24:15,528 --> 00:24:17,328
707 | Damn it, Matt!
708 |
709 | 159
710 | 00:24:55,683 --> 00:24:57,784
711 | (ENGINE STARTS)
712 |
713 | 160
714 | 00:25:13,968 --> 00:25:15,502
715 | Oh, shit.
716 |
717 | 161
718 | 00:25:15,570 --> 00:25:18,370
719 | Lieutenant, are you aware
720 | that these two killings
721 |
722 | 162
723 | 00:25:18,372 --> 00:25:20,674
724 | occurred in the same order as
725 | their listings in the phone book?
726 |
727 | 163
728 | 00:25:20,742 --> 00:25:22,976
729 | Now, what can I tell you
730 | guys? No comment.
731 |
732 | 164
733 | 00:25:23,044 --> 00:25:24,845
734 | But, lieutenant, we've
735 | got two murders...
736 |
737 | 165
738 | 00:25:35,990 --> 00:25:39,359
739 | - That coffee's two hours cold.
740 | - Mm-hmm.
741 |
742 | 166
743 | 00:25:39,426 --> 00:25:41,295
744 | I put a cigarette out in it.
745 |
746 | 167
747 | 00:25:42,563 --> 00:25:45,899
748 | - Did you reach the next girl yet?
749 | - No. I keep getting an answering machine.
750 |
751 | 168
752 | 00:25:45,967 --> 00:25:47,341
753 | - Send a unit.
754 | - I sent a unit.
755 |
756 | 169
757 | 00:25:47,367 --> 00:25:49,870
758 | There's no answer at the door, and
759 | the apartment manager's not home.
760 |
761 | 170
762 | 00:25:49,937 --> 00:25:50,746
763 | Call her.
764 |
765 | 171
766 | 00:25:50,772 --> 00:25:52,955
767 | - I just called her.
768 | - Call her again.
769 |
770 | 172
771 | 00:25:53,581 --> 00:25:55,067
772 | Give me a cigarette.
773 |
774 | 173
775 | 00:25:58,079 --> 00:26:00,081
776 | (DIALING)
777 |
778 | 174
779 | 00:26:00,549 --> 00:26:01,998
780 | (RING)
781 |
782 | 175
783 | 00:26:04,435 --> 00:26:05,902
784 | (RING)
785 |
786 | 176
787 | 00:26:05,970 --> 00:26:07,337
788 | GINGER: Hi there.
789 |
790 | 177
791 | 00:26:08,005 --> 00:26:12,809
792 | Ha ha ha. Fooled you. You're talking to
793 | a machine, but don't be shy, it's OK.
794 |
795 | 178
796 | 00:26:13,077 --> 00:26:15,828
797 | (MUSIC PLAYING)
798 |
799 | 179
800 | 00:26:15,896 --> 00:26:17,997
801 | (TURNS UP VOLUME)
802 |
803 | 180
804 | 00:26:20,100 --> 00:26:20,833
805 | (ANSWERING MACHINE BEEPS)
806 |
807 | 181
808 | 00:26:20,901 --> 00:26:22,135
809 | Same shit.
810 |
811 | 182
812 | 00:26:23,804 --> 00:26:27,807
813 | I can hear it now. He's gonna be called
814 | the goddamn "Phone Book killer."
815 |
816 | 183
817 | 00:26:27,875 --> 00:26:33,045
818 | I hate these press cases,
819 | especially the weird press cases.
820 |
821 | 184
822 | 00:26:34,482 --> 00:26:37,167
823 | - Where you going?
824 | - To make a statement.
825 |
826 | 185
827 | 00:26:37,334 --> 00:26:39,702
828 | Maybe make these jackals
829 | work for us for a change.
830 |
831 | 186
832 | 00:26:39,771 --> 00:26:43,957
833 | If I can get on the tube by eleven
834 | o'clock, maybe she'll call us.
835 |
836 | 187
837 | 00:26:44,325 --> 00:26:45,559
838 | Well...
839 |
840 | 188
841 | 00:26:46,027 --> 00:26:48,745
842 | - How do I look?
843 | - Like shit, boss.
844 |
845 | 189
846 | 00:26:49,013 --> 00:26:50,213
847 | Your mama.
848 |
849 | 190
850 | 00:26:50,516 --> 00:26:51,583
851 | MAN: Lieutenant!
852 |
853 | 191
854 | 00:26:51,616 --> 00:26:54,768
855 | This just in. Police have
856 | announced the name of the victim
857 |
858 | 192
859 | 00:26:54,835 --> 00:26:58,755
860 | in the second of two execution-style
861 | murders which took place today.
862 |
863 | 193
864 | 00:26:58,822 --> 00:27:03,226
865 | Incredibly, the names of the two
866 | victims are virtually identical.
867 |
868 | 194
869 | 00:27:03,227 --> 00:27:07,373
870 | Two hours ago, 35-year-old Sarah Ann
871 | Connor was pronounced dead at the scene
872 |
873 | 195
874 | 00:27:07,399 --> 00:27:09,466
875 | - in her Santa Monica apartment...
876 | - Can we change this?
877 |
878 | 196
879 | 00:27:09,492 --> 00:27:11,026
880 | - Sure.
881 | - Sarah Louise Connor was slain by an...
882 |
883 | 197
884 | 00:27:11,052 --> 00:27:14,504
885 | - SARAH: Don't touch it!
886 | - unknown gunman earlier today in her home.
887 |
888 | 198
889 | 00:27:14,572 --> 00:27:17,323
890 | Now, police are refusing to speculate
891 | on the apparent similarity
892 |
893 | 199
894 | 00:27:17,324 --> 00:27:21,060
895 | between these shooting deaths, and no
896 | other connection between the two victims
897 |
898 | 200
899 | 00:27:21,061 --> 00:27:23,262
900 | has been established as of yet.
901 |
902 | 201
903 | 00:27:23,264 --> 00:27:26,967
904 | Of course, we'll have more on this
905 | late-breaking story as it comes in.
906 |
907 | 202
908 | 00:27:27,335 --> 00:27:31,972
909 | A spectacular fire fueled by solvents,
910 | oils, and other flammable liquids
911 |
912 | 203
913 | 00:27:32,039 --> 00:27:34,707
914 | swept through an oil company
915 | on North Spring Street
916 |
917 | 204
918 | 00:27:34,776 --> 00:27:37,611
919 | just northeast of Chinatown
920 | Wednesday night...
921 |
922 | 205
923 | 00:28:38,905 --> 00:28:41,041
924 | (LOUD ROCK MUSIC PLAYS)
925 |
926 | 206
927 | 00:28:43,244 --> 00:28:46,445
928 | ♪ On the run, I'm a moving target ♪
929 |
930 | 207
931 | 00:28:46,513 --> 00:28:49,648
932 | ♪ On the town, it's hit-and-run... ♪
933 |
934 | 208
935 | 00:28:55,640 --> 00:28:57,690
936 | ♪ Caught in a photoplay ♪
937 |
938 | 209
939 | 00:28:57,691 --> 00:29:02,595
940 | - Hey, you got a phone?
941 | - It's in the back! Hey! 4.50.
942 |
943 | 210
944 | 00:29:04,398 --> 00:29:08,869
945 | ♪ Photoplay ♪
946 |
947 | 211
948 | 00:29:15,592 --> 00:29:17,460
949 | (SINGING CONTINUES INDISTINCTLY)
950 |
951 | 212
952 | 00:29:41,969 --> 00:29:45,188
953 | WOMAN: You have reached the Los Angeles
954 | Police Department emergency number.
955 |
956 | 213
957 | 00:29:45,256 --> 00:29:48,694
958 | All our lines are busy. If you
959 | need a police car sent out to you,
960 |
961 | 214
962 | 00:29:48,796 --> 00:29:50,211
963 | please stay on the line.
964 |
965 | 215
966 | 00:29:50,277 --> 00:29:54,566
967 | POLICE RADIO: 2-11 in progress at Bob's
968 | Liquor, corner of third and Cameron.
969 |
970 | 216
971 | 00:30:14,485 --> 00:30:16,051
972 | (TURNS MUSIC ON)
973 |
974 | 217
975 | 00:30:24,395 --> 00:30:26,329
976 | ♪ Intimacy ♪
977 |
978 | 218
979 | 00:30:26,397 --> 00:30:28,431
980 | ♪ Intimacy ♪
981 |
982 | 219
983 | 00:30:28,899 --> 00:30:30,332
984 | ♪ Ya ya ya ya ♪
985 |
986 | 220
987 | 00:30:30,400 --> 00:30:32,835
988 | ♪ Intimacy ♪
989 |
990 | 221
991 | 00:30:32,903 --> 00:30:34,704
992 | ♪ Intimacy ♪
993 |
994 | 222
995 | 00:30:35,072 --> 00:30:36,338
996 | ♪ Ya ya ya ya... ♪
997 |
998 | 223
999 | 00:30:36,406 --> 00:30:37,874
1000 | ♪ I've got to... ♪
1001 |
1002 | 224
1003 | 00:30:54,308 --> 00:30:58,661
1004 | Pugsley, shoo! Go on. I'm going
1005 | to make a belt out of you.
1006 |
1007 | 225
1008 | 00:31:09,640 --> 00:31:11,074
1009 | Whoa!
1010 |
1011 | 226
1012 | 00:31:13,343 --> 00:31:15,311
1013 | Don't make me bust you up, man!
1014 |
1015 | 227
1016 | 00:31:18,315 --> 00:31:19,999
1017 | ♪ Intimacy ♪
1018 |
1019 | 228
1020 | 00:31:22,019 --> 00:31:23,303
1021 | ♪ Ah yah ♪
1022 |
1023 | 229
1024 | 00:31:27,591 --> 00:31:29,509
1025 | ♪ ...is some intimacy ♪
1026 |
1027 | 230
1028 | 00:31:30,177 --> 00:31:31,561
1029 | ♪ Ya ya ya ya ♪
1030 |
1031 | 231
1032 | 00:31:56,404 --> 00:31:58,521
1033 | (CRYING)
1034 |
1035 | 232
1036 | 00:32:14,822 --> 00:32:15,788
1037 | (RING)
1038 |
1039 | 233
1040 | 00:32:15,856 --> 00:32:18,024
1041 | GINGER:
1042 | Hi there. Ha ha ha. Fooled you.
1043 |
1044 | 234
1045 | 00:32:18,091 --> 00:32:21,293
1046 | You're talking to a machine,
1047 | but don't be shy, it's OK.
1048 |
1049 | 235
1050 | 00:32:21,361 --> 00:32:23,896
1051 | Machines need love
1052 | too, so talk to it,
1053 |
1054 | 236
1055 | 00:32:23,964 --> 00:32:26,916
1056 | and Ginger, that's me, or
1057 | Sarah will get back to you.
1058 |
1059 | 237
1060 | 00:32:26,984 --> 00:32:28,567
1061 | Wait for the beep.
1062 |
1063 | 238
1064 | 00:32:28,835 --> 00:32:29,768
1065 | (BEEP)
1066 |
1067 | 239
1068 | 00:32:29,836 --> 00:32:32,187
1069 | Ginger, this is Sarah!
1070 | Pick up if you're there!
1071 |
1072 | 240
1073 | 00:32:32,255 --> 00:32:37,423
1074 | I'm at this place on Pico Boulevard
1075 | called Technoir. I'm really scared.
1076 |
1077 | 241
1078 | 00:32:37,449 --> 00:32:40,074
1079 | I think that there's
1080 | somebody's after me.
1081 |
1082 | 242
1083 | 00:32:40,600 --> 00:32:43,056
1084 | Uh, I hope that you
1085 | play this back soon.
1086 |
1087 | 243
1088 | 00:32:43,099 --> 00:32:46,419
1089 | I need you and Matt to come and
1090 | pick me up as soon as possible.
1091 |
1092 | 244
1093 | 00:32:46,486 --> 00:32:50,305
1094 | The police keep transferring me around.
1095 | I'm gonna give them another try.
1096 |
1097 | 245
1098 | 00:32:50,373 --> 00:32:54,513
1099 | The number here is 555-9175.
1100 |
1101 | 246
1102 | 00:32:54,539 --> 00:32:56,437
1103 | Call me, kiddo. I need your help.
1104 |
1105 | 247
1106 | 00:33:14,080 --> 00:33:15,447
1107 | DETECTIVE: It's her.
1108 |
1109 | 248
1110 | 00:33:16,449 --> 00:33:20,568
1111 | - Sarah Connor? It's Lieutenant Traxler.
1112 | - Look, Lieutenant, don't put me on hold
1113 |
1114 | 249
1115 | 00:33:20,569 --> 00:33:23,672
1116 | - and don't transfer me to another department!
1117 | - Don't worry. I won't. Now, just relax.
1118 |
1119 | 250
1120 | 00:33:23,698 --> 00:33:26,745
1121 | - Can you tell me where you are?
1122 | - I'm in this bar called Technoir.
1123 |
1124 | 251
1125 | 00:33:26,771 --> 00:33:29,499
1126 | Yeah, I know. It's on Pico.
1127 | Are you all right?
1128 |
1129 | 252
1130 | 00:33:29,525 --> 00:33:32,903
1131 | Yeah, but I don't want to leave.
1132 | I think there's a guy following me.
1133 |
1134 | 253
1135 | 00:33:32,929 --> 00:33:35,413
1136 | All right, now, listen, Miss
1137 | Connor, now, listen carefully,
1138 |
1139 | 254
1140 | 00:33:35,439 --> 00:33:37,995
1141 | you're in a public place, so
1142 | you'll be safe till we get there,
1143 |
1144 | 255
1145 | 00:33:37,996 --> 00:33:40,836
1146 | but stay visible. Don't go outside
1147 | or even to the rest room.
1148 |
1149 | 256
1150 | 00:33:40,841 --> 00:33:43,242
1151 | - I'll have a car there in a hot minute.
1152 | - OK.
1153 |
1154 | 257
1155 | 00:33:43,909 --> 00:33:45,978
1156 | ♪ Ohh ♪
1157 |
1158 | 258
1159 | 00:33:46,745 --> 00:33:51,767
1160 | ♪ I'm taken, and you'll never let me go ♪
1161 |
1162 | 259
1163 | 00:33:52,234 --> 00:33:55,571
1164 | ♪ I'm your prisoner ♪
1165 |
1166 | 260
1167 | 00:33:55,673 --> 00:33:58,991
1168 | ♪ I feel the heat of your desire ♪
1169 |
1170 | 261
1171 | 00:33:59,004 --> 00:34:02,207
1172 | ♪ Touch that pistol fire ♪
1173 |
1174 | 262
1175 | 00:34:02,329 --> 00:34:05,596
1176 | ♪ You've got me burnin' ♪
1177 |
1178 | 263
1179 | 00:34:05,597 --> 00:34:07,632
1180 | ♪ You've got me burnin' ♪
1181 |
1182 | 264
1183 | 00:34:07,667 --> 00:34:10,801
1184 | - Hey, that guy didn't pay.
1185 | - ♪ You've got me burnin' ♪
1186 |
1187 | 265
1188 | 00:34:10,886 --> 00:34:13,454
1189 | - (CRACK)
1190 | - ♪ In the third degree ♪
1191 |
1192 | 266
1193 | 00:34:14,477 --> 00:34:17,442
1194 | ♪ You've got me burnin' ♪
1195 |
1196 | 267
1197 | 00:34:17,444 --> 00:34:20,813
1198 | ♪ You've got me burnin' ♪
1199 |
1200 | 268
1201 | 00:34:20,816 --> 00:34:22,664
1202 | ♪ You've got me burnin' ♪
1203 |
1204 | 269
1205 | 00:34:22,665 --> 00:34:26,886
1206 | ♪ In the third degree ♪
1207 |
1208 | 270
1209 | 00:34:31,874 --> 00:34:32,925
1210 | (CLATTERING ON FLOOR)
1211 |
1212 | 271
1213 | 00:34:32,992 --> 00:34:35,361
1214 | ♪ Can't stop my body's achin' ♪
1215 |
1216 | 272
1217 | 00:34:36,229 --> 00:34:38,180
1218 | (SINGING CONTINUES INDISTINCTLY)
1219 |
1220 | 273
1221 | 00:34:46,789 --> 00:34:49,758
1222 | ♪ You've got me burnin' ♪
1223 |
1224 | 274
1225 | 00:34:49,759 --> 00:34:52,844
1226 | ♪ You've got me burnin' ♪
1227 |
1228 | 275
1229 | 00:34:52,845 --> 00:34:54,730
1230 | ♪ You've got me burnin' ♪
1231 |
1232 | 276
1233 | 00:34:54,831 --> 00:34:58,050
1234 | ♪ In the third degree ♪
1235 |
1236 | 277
1237 | 00:34:58,718 --> 00:35:01,620
1238 | ♪ You've got me burnin' ♪
1239 |
1240 | 278
1241 | 00:35:01,622 --> 00:35:04,139
1242 | ♪ You've got me burnin'... ♪
1243 |
1244 | 279
1245 | 00:35:48,100 --> 00:35:51,003
1246 | (CROWD SCREAMING)
1247 |
1248 | 280
1249 | 00:36:44,790 --> 00:36:47,058
1250 | (CROWD SCREAMING)
1251 |
1252 | 281
1253 | 00:36:49,395 --> 00:36:51,280
1254 | Come with me if you want to live.
1255 |
1256 | 282
1257 | 00:37:00,689 --> 00:37:02,440
1258 | Come on!
1259 |
1260 | 283
1261 | 00:38:14,630 --> 00:38:17,315
1262 | This is 1-L19. I got a
1263 | hit-and-run felony.
1264 |
1265 | 284
1266 | 00:38:17,383 --> 00:38:21,803
1267 | Suspect vehicle... late model gray
1268 | Ford, headed westbound on 7th.
1269 |
1270 | 285
1271 | 00:38:21,871 --> 00:38:24,239
1272 | He's really moving, punching
1273 | lights all the way.
1274 |
1275 | 286
1276 | 00:38:24,307 --> 00:38:28,627
1277 | I'm going to need an ambulance
1278 | at 7th and Broadway right now.
1279 |
1280 | 287
1281 | 00:38:29,596 --> 00:38:30,796
1282 | Hold it!
1283 |
1284 | 288
1285 | 00:38:34,668 --> 00:38:37,402
1286 | DISPATCHER: All units watch
1287 | for a late-model gray Ford,
1288 |
1289 | 289
1290 | 00:38:37,403 --> 00:38:39,955
1291 | last seen westbound
1292 | on 7th and Broadway.
1293 |
1294 | 290
1295 | 00:38:47,647 --> 00:38:48,879
1296 | Hold on.
1297 |
1298 | 291
1299 | 00:39:00,640 --> 00:39:03,927
1300 | Are you injured? Are you shot?
1301 |
1302 | 292
1303 | 00:39:06,381 --> 00:39:07,730
1304 | No!
1305 |
1306 | 293
1307 | 00:39:09,767 --> 00:39:12,735
1308 | Do exactly what I say. Exactly.
1309 |
1310 | 294
1311 | 00:39:13,203 --> 00:39:17,074
1312 | Don't move unless I say. Don't
1313 | make a sound unless I say.
1314 |
1315 | 295
1316 | 00:39:17,141 --> 00:39:18,776
1317 | Do you understand?
1318 |
1319 | 296
1320 | 00:39:19,343 --> 00:39:22,996
1321 | - Do you understand?!
1322 | - Yes! Yes! Please, don't hurt me.
1323 |
1324 | 297
1325 | 00:39:27,385 --> 00:39:28,952
1326 | (HONKS HORN)
1327 |
1328 | 298
1329 | 00:39:41,197 --> 00:39:44,968
1330 | I'm here to help you. I'm
1331 | Reese, Sergeant Techcom,
1332 |
1333 | 299
1334 | 00:39:44,970 --> 00:39:49,856
1335 | DN38416, assigned to protect you.
1336 | You've been targeted for termination.
1337 |
1338 | 300
1339 | 00:39:55,180 --> 00:39:58,582
1340 | POLICE DISPATCHER:
1341 | Attempt to intercept, 1-L19.
1342 |
1343 | 301
1344 | 00:39:59,650 --> 00:40:04,320
1345 | (IMITATING POLICEMAN) This is 1-L19.
1346 | Westbound on Olympic approaching Overland.
1347 |
1348 | 302
1349 | 00:40:08,826 --> 00:40:12,106
1350 | This is a mistake.
1351 | I didn't do anything.
1352 |
1353 | 303
1354 | 00:40:12,132 --> 00:40:15,785
1355 | No, but you will. It's very
1356 | important that you live.
1357 |
1358 | 304
1359 | 00:40:16,111 --> 00:40:19,855
1360 | This isn't true. How could that
1361 | man just get up after you...
1362 |
1363 | 305
1364 | 00:40:19,856 --> 00:40:22,326
1365 | He's not a man. A machine.
1366 |
1367 | 306
1368 | 00:40:22,577 --> 00:40:26,777
1369 | A Terminator. A Cyberdine
1370 | systems model 101.
1371 |
1372 | 307
1373 | 00:40:34,702 --> 00:40:36,073
1374 | A machine?
1375 |
1376 | 308
1377 | 00:40:37,199 --> 00:40:41,624
1378 | - Like a robot?
1379 | - Not a robot. A cyborg.
1380 |
1381 | 309
1382 | 00:40:41,892 --> 00:40:43,471
1383 | A cybernetic organism.
1384 |
1385 | 310
1386 | 00:40:43,497 --> 00:40:46,430
1387 | - No. He was bleeding.
1388 | - Just a second.
1389 |
1390 | 311
1391 | 00:40:49,600 --> 00:40:50,950
1392 | Get your head down!
1393 |
1394 | 312
1395 | 00:41:35,662 --> 00:41:39,131
1396 | All right, listen. The Terminator's
1397 | an infiltration unit...
1398 |
1399 | 313
1400 | 00:41:39,199 --> 00:41:43,802
1401 | part man, part machine. Underneath,
1402 | it's a hyperalloy combat chassis...
1403 |
1404 | 314
1405 | 00:41:43,870 --> 00:41:47,623
1406 | microprocessor controlled,
1407 | fully armored, very tough.
1408 |
1409 | 315
1410 | 00:41:47,624 --> 00:41:50,058
1411 | But outside, it's
1412 | living human tissue.
1413 |
1414 | 316
1415 | 00:41:50,394 --> 00:41:54,547
1416 | Flesh, skin, hair, blood...
1417 | grown for the cyborgs.
1418 |
1419 | 317
1420 | 00:41:54,615 --> 00:41:56,115
1421 | Look, Reese, I don't know
1422 | what you want from...
1423 |
1424 | 318
1425 | 00:41:56,183 --> 00:41:59,352
1426 | Pay attention! I got
1427 | to ditch this car.
1428 |
1429 | 319
1430 | 00:42:04,626 --> 00:42:08,578
1431 | The 600 series had rubber
1432 | skin. We spotted them easy.
1433 |
1434 | 320
1435 | 00:42:08,646 --> 00:42:11,214
1436 | But these are new.
1437 | They look human...
1438 |
1439 | 321
1440 | 00:42:11,282 --> 00:42:15,301
1441 | Sweat, bad breath, everything.
1442 | Very hard to spot.
1443 |
1444 | 322
1445 | 00:42:15,469 --> 00:42:18,271
1446 | I had to wait till he moved on
1447 | you before I could zero him.
1448 |
1449 | 323
1450 | 00:42:18,839 --> 00:42:24,936
1451 | Look... I am not stupid, you know.
1452 | They cannot make things like that yet.
1453 |
1454 | 324
1455 | 00:42:24,962 --> 00:42:29,023
1456 | Not yet. Not for about forty years.
1457 |
1458 | 325
1459 | 00:42:31,301 --> 00:42:35,871
1460 | - Are you saying it's from the future?
1461 | - One possible future.
1462 |
1463 | 326
1464 | 00:42:36,339 --> 00:42:39,459
1465 | From your point of view...
1466 | I don't know tech stuff.
1467 |
1468 | 327
1469 | 00:42:40,794 --> 00:42:43,596
1470 | Then you're from the future,
1471 | too, is that right?
1472 |
1473 | 328
1474 | 00:42:43,664 --> 00:42:45,849
1475 | - Right.
1476 | - Right.
1477 |
1478 | 329
1479 | 00:42:53,724 --> 00:42:57,276
1480 | Cyborgs don't feel pain. I do.
1481 |
1482 | 330
1483 | 00:42:57,544 --> 00:42:59,028
1484 | Don't do that again.
1485 |
1486 | 331
1487 | 00:42:59,095 --> 00:43:01,531
1488 | - Just let me go.
1489 | - Listen!
1490 |
1491 | 332
1492 | 00:43:01,699 --> 00:43:06,186
1493 | And understand. That
1494 | Terminator is out there.
1495 |
1496 | 333
1497 | 00:43:07,088 --> 00:43:11,458
1498 | It can't be bargained with.
1499 | It can't be reasoned with.
1500 |
1501 | 334
1502 | 00:43:11,525 --> 00:43:15,762
1503 | It doesn't feel pity
1504 | or remorse or fear.
1505 |
1506 | 335
1507 | 00:43:15,830 --> 00:43:19,499
1508 | And it absolutely
1509 | will not stop. Ever!
1510 |
1511 | 336
1512 | 00:43:19,866 --> 00:43:22,351
1513 | Until you are dead.
1514 |
1515 | 337
1516 | 00:43:31,779 --> 00:43:33,680
1517 | Can you stop it?
1518 |
1519 | 338
1520 | 00:43:37,768 --> 00:43:39,368
1521 | I don't know.
1522 |
1523 | 339
1524 | 00:43:41,071 --> 00:43:43,956
1525 | With these weapons, I don't know.
1526 |
1527 | 340
1528 | 00:44:00,090 --> 00:44:03,010
1529 | POLICE RADIO: All units. All units.
1530 | Gray Ford suspect vehicle's been found
1531 |
1532 | 341
1533 | 00:44:03,011 --> 00:44:05,678
1534 | in a parking structure
1535 | at 4th and Beaudry.
1536 |
1537 | 342
1538 | 00:44:47,770 --> 00:44:49,004
1539 | Reese.
1540 |
1541 | 343
1542 | 00:44:50,090 --> 00:44:52,058
1543 | Why me?
1544 |
1545 | 344
1546 | 00:44:54,094 --> 00:44:56,112
1547 | Why does it want me?
1548 |
1549 | 345
1550 | 00:45:02,586 --> 00:45:04,687
1551 | There was a nuclear war...
1552 |
1553 | 346
1554 | 00:45:06,490 --> 00:45:08,691
1555 | A few years from now.
1556 |
1557 | 347
1558 | 00:45:11,228 --> 00:45:12,762
1559 | All this...
1560 |
1561 | 348
1562 | 00:45:13,130 --> 00:45:16,333
1563 | This whole place. Everything.
1564 |
1565 | 349
1566 | 00:45:17,001 --> 00:45:18,567
1567 | It's gone.
1568 |
1569 | 350
1570 | 00:45:20,237 --> 00:45:21,905
1571 | Just gone.
1572 |
1573 | 351
1574 | 00:45:22,272 --> 00:45:24,174
1575 | There were survivors.
1576 |
1577 | 352
1578 | 00:45:24,342 --> 00:45:26,793
1579 | Here. There.
1580 |
1581 | 353
1582 | 00:45:29,196 --> 00:45:31,398
1583 | Nobody even knew who started it.
1584 |
1585 | 354
1586 | 00:45:34,201 --> 00:45:36,468
1587 | It was the machines, Sarah.
1588 |
1589 | 355
1590 | 00:45:37,737 --> 00:45:41,874
1591 | - I don't understand.
1592 | - Defense network computers.
1593 |
1594 | 356
1595 | 00:45:42,709 --> 00:45:46,279
1596 | New... powerful...
1597 |
1598 | 357
1599 | 00:45:46,846 --> 00:45:51,284
1600 | Hooked into everything.
1601 | Trusted to run it all.
1602 |
1603 | 358
1604 | 00:45:51,652 --> 00:45:56,905
1605 | They say it got smart...
1606 | a new order of intelligence.
1607 |
1608 | 359
1609 | 00:45:57,673 --> 00:46:02,129
1610 | Then it saw all people as a threat,
1611 | not just the ones on the other side.
1612 |
1613 | 360
1614 | 00:46:03,196 --> 00:46:06,099
1615 | Decided our fate in
1616 | a microsecond...
1617 |
1618 | 361
1619 | 00:46:07,667 --> 00:46:09,435
1620 | extermination.
1621 |
1622 | 362
1623 | 00:46:23,715 --> 00:46:25,950
1624 | Did you see this war?
1625 |
1626 | 363
1627 | 00:46:26,018 --> 00:46:27,268
1628 | (TIRES SCREECH)
1629 |
1630 | 364
1631 | 00:46:37,696 --> 00:46:41,115
1632 | No. I grew up after it...
1633 |
1634 | 365
1635 | 00:46:41,183 --> 00:46:44,419
1636 | In the ruins. Starving...
1637 |
1638 | 366
1639 | 00:46:44,486 --> 00:46:46,838
1640 | - Hiding from HKs.
1641 | - HKs?
1642 |
1643 | 367
1644 | 00:46:46,906 --> 00:46:51,959
1645 | Hunter-killers. Patrol machines
1646 | built in automated factories.
1647 |
1648 | 368
1649 | 00:46:52,627 --> 00:46:57,450
1650 | Most of us were rounded up, put
1651 | in camps for orderly disposal.
1652 |
1653 | 369
1654 | 00:46:59,118 --> 00:47:01,969
1655 | This was burned in
1656 | by laser scanner.
1657 |
1658 | 370
1659 | 00:47:05,758 --> 00:47:10,179
1660 | Some of us were
1661 | kept alive... to work...
1662 |
1663 | 371
1664 | 00:47:11,046 --> 00:47:16,500
1665 | Loading bodies. The disposal
1666 | units ran night and day.
1667 |
1668 | 372
1669 | 00:47:16,568 --> 00:47:19,938
1670 | We were that close
1671 | to going out forever.
1672 |
1673 | 373
1674 | 00:47:22,406 --> 00:47:26,277
1675 | But there was one man
1676 | who taught us to fight,
1677 |
1678 | 374
1679 | 00:47:26,345 --> 00:47:32,150
1680 | to storm the wire of the camps, to smash
1681 | those metal motherfuckers into junk.
1682 |
1683 | 375
1684 | 00:47:33,118 --> 00:47:36,321
1685 | He turned it around. He brought
1686 | us back from the brink.
1687 |
1688 | 376
1689 | 00:47:36,329 --> 00:47:40,532
1690 | His name was Connor. John Connor.
1691 |
1692 | 377
1693 | 00:47:41,059 --> 00:47:42,660
1694 | Your son, Sarah.
1695 |
1696 | 378
1697 | 00:47:43,696 --> 00:47:45,730
1698 | Your unborn son.
1699 |
1700 | 379
1701 | 00:47:58,260 --> 00:48:00,261
1702 | (ENGINE WON'T TURN OVER)
1703 |
1704 | 380
1705 | 00:48:07,236 --> 00:48:09,854
1706 | (ENGINE STARTS)
1707 |
1708 | 381
1709 | 00:49:06,295 --> 00:49:07,628
1710 | (GUNSHOT)
1711 |
1712 | 382
1713 | 00:49:35,374 --> 00:49:36,791
1714 | Drive!
1715 |
1716 | 383
1717 | 00:49:43,616 --> 00:49:46,683
1718 | Reese!
1719 |
1720 | 384
1721 | 00:50:04,470 --> 00:50:07,971
1722 | No, Reese! No! No!
1723 | No! They'll kill you.
1724 |
1725 | 385
1726 | 00:50:08,039 --> 00:50:11,392
1727 | POLICEMAN 1: You in the Cadillac!
1728 | Let me see your hands now!
1729 |
1730 | 386
1731 | 00:50:13,929 --> 00:50:15,496
1732 | Get out of the car!
1733 |
1734 | 387
1735 | 00:50:19,167 --> 00:50:21,036
1736 | Drop to your knees!
1737 |
1738 | 388
1739 | 00:50:21,403 --> 00:50:24,171
1740 | - POLICEMAN 2: Out of the car.
1741 | - POLICEMAN 1: Drop to the ground.
1742 |
1743 | 389
1744 | 00:50:28,022 --> 00:50:30,178
1745 | (INDISTINCT POLICE RADIO)
1746 |
1747 | 390
1748 | 00:50:52,801 --> 00:50:54,501
1749 | Sarah...
1750 |
1751 | 391
1752 | 00:50:54,769 --> 00:50:57,172
1753 | Sarah, try to drink some of this.
1754 |
1755 | 392
1756 | 00:50:59,840 --> 00:51:04,862
1757 | Listen, are you sure it's them? Maybe...
1758 | maybe I should look at the bodies.
1759 |
1760 | 393
1761 | 00:51:05,030 --> 00:51:07,765
1762 | No. They've been identified,
1763 | and there's no doubt.
1764 |
1765 | 394
1766 | 00:51:07,833 --> 00:51:10,000
1767 | Oh, God.
1768 |
1769 | 395
1770 | 00:51:10,002 --> 00:51:11,669
1771 | God!
1772 |
1773 | 396
1774 | 00:51:11,736 --> 00:51:13,838
1775 | Ginger!
1776 |
1777 | 397
1778 | 00:51:17,075 --> 00:51:18,509
1779 | Sarah.
1780 |
1781 | 398
1782 | 00:51:19,344 --> 00:51:22,180
1783 | - Sarah, this is Dr. Silberman.
1784 | - Hi, Sarah.
1785 |
1786 | 399
1787 | 00:51:22,248 --> 00:51:25,233
1788 | I want you to tell him
1789 | everything that Reese told you.
1790 |
1791 | 400
1792 | 00:51:25,301 --> 00:51:28,870
1793 | - Do you feel up to that?
1794 | - (SOBBING) Yeah. I guess so.
1795 |
1796 | 401
1797 | 00:51:30,505 --> 00:51:32,173
1798 | You're a doctor?
1799 |
1800 | 402
1801 | 00:51:32,641 --> 00:51:36,294
1802 | - Criminal psychologist.
1803 | - Is Reese crazy?
1804 |
1805 | 403
1806 | 00:51:36,361 --> 00:51:38,791
1807 | Well, that's what
1808 | we're gonna find out.
1809 |
1810 | 404
1811 | 00:51:52,860 --> 00:51:54,962
1812 | (DISTANT SIREN)
1813 |
1814 | 405
1815 | 00:52:54,004 --> 00:52:56,389
1816 | (WHIRRING)
1817 |
1818 | 406
1819 | 00:53:03,982 --> 00:53:07,684
1820 | DR. SILBERMAN: So, you're a
1821 | soldier, fighting for whom?
1822 |
1823 | 407
1824 | 00:53:09,120 --> 00:53:14,558
1825 | With the 132nd, under
1826 | Perry. From '21 to '27.
1827 |
1828 | 408
1829 | 00:53:14,725 --> 00:53:19,479
1830 | - That's the year 2027?
1831 | - That's right. And I was assigned...
1832 |
1833 | 409
1834 | 00:53:19,547 --> 00:53:21,148
1835 | This is fucking great.
1836 |
1837 | 410
1838 | 00:53:21,215 --> 00:53:23,536
1839 | REESE: The last two years
1840 | under John Connor.
1841 |
1842 | 411
1843 | 00:53:23,562 --> 00:53:26,870
1844 | - Who was the enemy again?
1845 | - A computer defense system built for...
1846 |
1847 | 412
1848 | 00:53:26,871 --> 00:53:29,389
1849 | - (BEEP BEEP BEEP)
1850 | - Oh, damn. Sorry.
1851 |
1852 | 413
1853 | 00:53:29,424 --> 00:53:32,759
1854 | Built for SAC-NORAD
1855 | by Cyberdine systems.
1856 |
1857 | 414
1858 | 00:53:32,827 --> 00:53:34,261
1859 | I see.
1860 |
1861 | 415
1862 | 00:53:34,829 --> 00:53:40,801
1863 | And this, uh, computer thinks it can win
1864 | by killing the mother of its enemy,
1865 |
1866 | 416
1867 | 00:53:40,969 --> 00:53:44,521
1868 | killing him, in effect,
1869 | before he's even conceived,
1870 |
1871 | 417
1872 | 00:53:44,588 --> 00:53:46,890
1873 | a sort of retroactive abortion?
1874 |
1875 | 418
1876 | 00:53:48,257 --> 00:53:49,692
1877 | That guy Silberman cracks me up.
1878 |
1879 | 419
1880 | 00:53:49,760 --> 00:53:52,519
1881 | Last week, he had this guy in here that
1882 | burned his Afghan. He screwed it first,
1883 |
1884 | 420
1885 | 00:53:52,545 --> 00:53:54,498
1886 | - then he set it on fire.
1887 | - Hey, shut up.
1888 |
1889 | 421
1890 | 00:53:54,566 --> 00:53:56,683
1891 | Why didn't the computer
1892 | just kill Connor then?
1893 |
1894 | 422
1895 | 00:53:56,751 --> 00:53:59,653
1896 | Why this elaborate scheme
1897 | with the Terminator?
1898 |
1899 | 423
1900 | 00:53:59,720 --> 00:54:03,974
1901 | It had no choice. Their
1902 | defense grid was smashed.
1903 |
1904 | 424
1905 | 00:54:04,041 --> 00:54:08,195
1906 | We'd won. Taking out Connor
1907 | then would make no difference.
1908 |
1909 | 425
1910 | 00:54:08,463 --> 00:54:11,548
1911 | Skynet had to wipe out
1912 | his entire existence.
1913 |
1914 | 426
1915 | 00:54:11,616 --> 00:54:15,502
1916 | Is that when you captured the lab complex
1917 | and found that... uh, what is it called?
1918 |
1919 | 427
1920 | 00:54:15,570 --> 00:54:18,672
1921 | Uh... the time
1922 | displacement equipment?
1923 |
1924 | 428
1925 | 00:54:18,940 --> 00:54:23,043
1926 | That's right. The Terminator
1927 | had already gone through.
1928 |
1929 | 429
1930 | 00:54:23,210 --> 00:54:26,513
1931 | Connor sent me to intercept,
1932 | and they blew the whole place.
1933 |
1934 | 430
1935 | 00:54:26,680 --> 00:54:28,698
1936 | How are you supposed get back?
1937 |
1938 | 431
1939 | 00:54:28,824 --> 00:54:30,392
1940 | I can't.
1941 |
1942 | 432
1943 | 00:54:32,070 --> 00:54:34,071
1944 | Nobody goes home.
1945 |
1946 | 433
1947 | 00:54:35,573 --> 00:54:41,612
1948 | Nobody else comes through.
1949 | It's just him and me.
1950 |
1951 | 434
1952 | 00:56:12,586 --> 00:56:14,086
1953 | (COCKS RIFLE)
1954 |
1955 | 435
1956 | 00:56:26,400 --> 00:56:29,218
1957 | It's just him and me.
1958 |
1959 | 436
1960 | 00:56:31,805 --> 00:56:36,742
1961 | Why didn't you bring any weapons,
1962 | something more advanced?
1963 |
1964 | 437
1965 | 00:56:36,810 --> 00:56:39,746
1966 | Don't you have ray guns?
1967 |
1968 | 438
1969 | 00:56:40,514 --> 00:56:41,580
1970 | Ray guns.
1971 |
1972 | 439
1973 | 00:56:41,648 --> 00:56:44,183
1974 | DR. SILBERMAN ON TAPE:
1975 | Show me a piece of future technology.
1976 |
1977 | 440
1978 | 00:56:44,251 --> 00:56:48,493
1979 | You go naked. Something about the
1980 | field generated by a living organism.
1981 |
1982 | 441
1983 | 00:56:48,555 --> 00:56:50,723
1984 | - Nothing dead will go.
1985 | - Why?
1986 |
1987 | 442
1988 | 00:56:50,791 --> 00:56:55,061
1989 | - I didn't build the fucking thing!
1990 | - OK, OK. But this...
1991 |
1992 | 443
1993 | 00:56:55,129 --> 00:56:58,665
1994 | - (SIGHS) Cyborg, if it's metal...
1995 | - Surrounded by living tissue!
1996 |
1997 | 444
1998 | 00:56:58,733 --> 00:56:59,916
1999 | Oh. Right, right...
2000 |
2001 | 445
2002 | 00:57:00,784 --> 00:57:03,719
2003 | This is great stuff. I could
2004 | make a career out of this guy.
2005 |
2006 | 446
2007 | 00:57:03,786 --> 00:57:06,654
2008 | You see how clever this part is? How
2009 | it doesn't require a shred of proof?
2010 |
2011 | 447
2012 | 00:57:06,655 --> 00:57:10,726
2013 | And most paranoid delusions are
2014 | intricate, but this is brilliant.
2015 |
2016 | 448
2017 | 00:57:12,028 --> 00:57:14,412
2018 | DR. SILBERMAN: Why were the
2019 | other two women killed?
2020 |
2021 | 449
2022 | 00:57:14,438 --> 00:57:16,607
2023 | Most of the records were lost in the war.
2024 |
2025 | 450
2026 | 00:57:16,650 --> 00:57:21,515
2027 | Skynet knew almost nothing about Connor's
2028 | mother. Her full name, where she lived.
2029 |
2030 | 451
2031 | 00:57:21,541 --> 00:57:25,182
2032 | They just knew the city. The
2033 | Terminator was just being systematic.
2034 |
2035 | 452
2036 | 00:57:25,226 --> 00:57:29,021
2037 | - Uh-huh. Well, let's go back to...
2038 | - Look, you have heard enough!
2039 |
2040 | 453
2041 | 00:57:29,147 --> 00:57:32,581
2042 | I have answered your questions!
2043 | Now I have to see Sarah Connor!
2044 |
2045 | 454
2046 | 00:57:32,583 --> 00:57:36,035
2047 | - I'm afraid that's not up to me.
2048 | - Then why am I talking to you?
2049 |
2050 | 455
2051 | 00:57:36,103 --> 00:57:38,104
2052 | - Because I can help you.
2053 | - Who is in authority here?
2054 |
2055 | 456
2056 | 00:57:38,130 --> 00:57:39,939
2057 | - Reese...
2058 | - Shut up!
2059 |
2060 | 457
2061 | 00:57:40,507 --> 00:57:43,075
2062 | You still don't get it, do you?
2063 |
2064 | 458
2065 | 00:57:43,243 --> 00:57:46,678
2066 | He'll find her.
2067 | That's what he does!
2068 |
2069 | 459
2070 | 00:57:46,746 --> 00:57:50,483
2071 | That's all he does!
2072 | You can't stop him!
2073 |
2074 | 460
2075 | 00:57:50,486 --> 00:57:54,722
2076 | He'll wade through you, reach down her
2077 | throat, and pull her fucking heart out!
2078 |
2079 | 461
2080 | 00:57:54,754 --> 00:57:57,506
2081 | - Doc.
2082 | - REESE: Let... let go of me!
2083 |
2084 | 462
2085 | 00:58:01,160 --> 00:58:02,528
2086 | Sorry.
2087 |
2088 | 463
2089 | 00:58:07,433 --> 00:58:11,086
2090 | - So, Reese is crazy?
2091 | - In technical terminology...
2092 |
2093 | 464
2094 | 00:58:11,254 --> 00:58:12,821
2095 | He's a loon.
2096 |
2097 | 465
2098 | 00:58:13,189 --> 00:58:16,593
2099 | Sarah, this is what
2100 | they call body armor.
2101 |
2102 | 466
2103 | 00:58:16,960 --> 00:58:21,063
2104 | Our TAC guys wear these. It'll
2105 | stop a twelve-gauge round.
2106 |
2107 | 467
2108 | 00:58:21,131 --> 00:58:25,809
2109 | This other individual must have been wearing
2110 | one under his coat. Feel that. Go ahead.
2111 |
2112 | 468
2113 | 00:58:27,470 --> 00:58:29,504
2114 | What about when he punched
2115 | through the windshield?
2116 |
2117 | 469
2118 | 00:58:29,572 --> 00:58:32,191
2119 | He was probably on PCP.
2120 | Broke every bone in his hand
2121 |
2122 | 470
2123 | 00:58:32,259 --> 00:58:35,089
2124 | and wouldn't feel it for hours.
2125 | There was this guy once...
2126 |
2127 | 471
2128 | 00:58:35,115 --> 00:58:36,629
2129 | - You see this scar?
2130 | - Here.
2131 |
2132 | 472
2133 | 00:58:36,697 --> 00:58:38,164
2134 | Thank you.
2135 |
2136 | 473
2137 | 00:58:38,532 --> 00:58:42,652
2138 | There's a couch in this other room. Why don't
2139 | you stretch out and try to get some sleep?
2140 |
2141 | 474
2142 | 00:58:42,719 --> 00:58:45,200
2143 | It'll be at least an hour before your
2144 | mother gets here from Big Bear.
2145 |
2146 | 475
2147 | 00:58:45,256 --> 00:58:48,191
2148 | - I can't sleep.
2149 | - Try.
2150 |
2151 | 476
2152 | 00:58:48,359 --> 00:58:52,511
2153 | Well, it may not look it, but
2154 | that couch is very comfortable.
2155 |
2156 | 477
2157 | 00:58:53,880 --> 00:58:58,685
2158 | You'll be perfectly safe. We got
2159 | thirty cops in this building.
2160 |
2161 | 478
2162 | 00:58:59,553 --> 00:59:00,919
2163 | Thank you.
2164 |
2165 | 479
2166 | 00:59:06,526 --> 00:59:08,927
2167 | - Good night.
2168 | - Good night.
2169 |
2170 | 480
2171 | 00:59:08,995 --> 00:59:10,363
2172 | (BUZZ)
2173 |
2174 | 481
2175 | 00:59:15,235 --> 00:59:17,470
2176 | (BEEP BEEP BEEP)
2177 |
2178 | 482
2179 | 00:59:23,242 --> 00:59:25,251
2180 | I'm a friend of Sarah Connor.
2181 |
2182 | 483
2183 | 00:59:25,277 --> 00:59:27,436
2184 | I was told that she's here.
2185 | Could I see her, please?
2186 |
2187 | 484
2188 | 00:59:27,462 --> 00:59:30,116
2189 | No. You can't see her.
2190 | She's making a statement.
2191 |
2192 | 485
2193 | 00:59:30,142 --> 00:59:32,900
2194 | - Where is she?
2195 | - Look, it may take a while...
2196 |
2197 | 486
2198 | 00:59:32,926 --> 00:59:35,230
2199 | if you want to wait, there's
2200 | a bench over there.
2201 |
2202 | 487
2203 | 00:59:46,132 --> 00:59:48,084
2204 | I'll be back.
2205 |
2206 | 488
2207 | 01:00:14,911 --> 01:00:16,913
2208 | MAN: What the hell was that?
2209 |
2210 | 489
2211 | 01:00:26,239 --> 01:00:27,523
2212 | MAN: Gunshot!
2213 |
2214 | 490
2215 | 01:00:36,300 --> 01:00:39,203
2216 | - MAN: What is it, terrorists?
2217 | - WOMAN: Let's go! Let's go! Let's go!
2218 |
2219 | 491
2220 | 01:00:43,456 --> 01:00:45,358
2221 | Stay here.
2222 |
2223 | 492
2224 | 01:00:59,022 --> 01:01:00,078
2225 | Let's get out of here!
2226 |
2227 | 493
2228 | 01:01:00,104 --> 01:01:03,085
2229 | - Come on! Come on!
2230 | - He's got an automatic weapon!
2231 |
2232 | 494
2233 | 01:01:05,628 --> 01:01:07,713
2234 | MAN:
2235 | Move it, move it, move it, move it!
2236 |
2237 | 495
2238 | 01:01:18,342 --> 01:01:20,392
2239 | MAN: What the hell
2240 | happened to the lights?
2241 |
2242 | 496
2243 | 01:01:24,998 --> 01:01:26,465
2244 | Watch him.
2245 |
2246 | 497
2247 | 01:01:34,857 --> 01:01:36,325
2248 | (MACHINE GUN FIRE)
2249 |
2250 | 498
2251 | 01:01:39,746 --> 01:01:41,680
2252 | (BREATHING HEAVILY)
2253 |
2254 | 499
2255 | 01:01:46,937 --> 01:01:49,822
2256 | MAN: Automatic weapons!
2257 | Lock and load! Let's go!
2258 |
2259 | 500
2260 | 01:02:17,883 --> 01:02:19,383
2261 | MAN: Fire! Fire!
2262 |
2263 | 501
2264 | 01:02:33,732 --> 01:02:35,400
2265 | Ed.
2266 |
2267 | 502
2268 | 01:02:36,202 --> 01:02:37,636
2269 | Hey!
2270 |
2271 | 503
2272 | 01:03:04,213 --> 01:03:05,547
2273 | Sarah!
2274 |
2275 | 504
2276 | 01:03:07,133 --> 01:03:08,500
2277 | Reese!
2278 |
2279 | 505
2280 | 01:03:12,472 --> 01:03:13,856
2281 | This way.
2282 |
2283 | 506
2284 | 01:03:30,155 --> 01:03:31,606
2285 | (CAR ENGINE STARTS)
2286 |
2287 | 507
2288 | 01:03:54,429 --> 01:03:56,839
2289 | MAN ON CAR RADIO:
2290 | KFLB news time 4:36.
2291 |
2292 | 508
2293 | 01:03:56,865 --> 01:04:00,123
2294 | In the top story of the hour, the
2295 | largest single law enforcement
2296 |
2297 | 509
2298 | 01:04:00,149 --> 01:04:03,638
2299 | mobilization in California
2300 | history is currently underway.
2301 |
2302 | 510
2303 | 01:04:03,639 --> 01:04:05,284
2304 | - (ENGINE SPUTTERS)
2305 | - Police in five Southern counties...
2306 |
2307 | 511
2308 | 01:04:05,285 --> 01:04:07,975
2309 | are engaged in a massive
2310 | manhunt for an unident...
2311 |
2312 | 512
2313 | 01:04:11,013 --> 01:04:12,580
2314 | Take this.
2315 |
2316 | 513
2317 | 01:04:15,417 --> 01:04:17,719
2318 | All right, let's get
2319 | this off the road.
2320 |
2321 | 514
2322 | 01:04:49,168 --> 01:04:52,320
2323 | - You cold?
2324 | - Freezing.
2325 |
2326 | 515
2327 | 01:05:06,101 --> 01:05:07,619
2328 | Reese...
2329 |
2330 | 516
2331 | 01:05:08,754 --> 01:05:10,822
2332 | You got a first name?
2333 |
2334 | 517
2335 | 01:05:11,190 --> 01:05:12,306
2336 | Kyle.
2337 |
2338 | 518
2339 | 01:05:12,574 --> 01:05:17,045
2340 | Kyle... what's it like
2341 | when you go through time?
2342 |
2343 | 519
2344 | 01:05:20,048 --> 01:05:21,716
2345 | White light.
2346 |
2347 | 520
2348 | 01:05:24,353 --> 01:05:25,921
2349 | Pain.
2350 |
2351 | 521
2352 | 01:05:28,957 --> 01:05:32,877
2353 | - It's like being born maybe.
2354 | - Oh, my God.
2355 |
2356 | 522
2357 | 01:05:33,945 --> 01:05:35,981
2358 | I caught one back there.
2359 |
2360 | 523
2361 | 01:05:37,549 --> 01:05:40,685
2362 | - You mean you got shot?
2363 | - It's not bad.
2364 |
2365 | 524
2366 | 01:05:41,253 --> 01:05:44,656
2367 | - We got to get you to a doctor.
2368 | - It's OK. Forget it.
2369 |
2370 | 525
2371 | 01:05:44,824 --> 01:05:47,659
2372 | What do you mean,
2373 | forget it? Are you crazy?
2374 |
2375 | 526
2376 | 01:05:48,427 --> 01:05:50,145
2377 | Take this off.
2378 |
2379 | 527
2380 | 01:06:01,891 --> 01:06:03,373
2381 | Jesus.
2382 |
2383 | 528
2384 | 01:06:03,841 --> 01:06:05,976
2385 | See, it passed right
2386 | through the meat.
2387 |
2388 | 529
2389 | 01:06:06,444 --> 01:06:11,232
2390 | Oh, this is going to make me puke.
2391 | Would you just talk about something?
2392 |
2393 | 530
2394 | 01:06:11,300 --> 01:06:12,387
2395 | What?
2396 |
2397 | 531
2398 | 01:06:12,413 --> 01:06:16,437
2399 | I don't know. Anything.
2400 | Just talk. Tell me about my son.
2401 |
2402 | 532
2403 | 01:06:17,639 --> 01:06:19,290
2404 | He's about my height.
2405 |
2406 | 533
2407 | 01:06:22,944 --> 01:06:25,046
2408 | He has your eyes.
2409 |
2410 | 534
2411 | 01:06:28,284 --> 01:06:30,285
2412 | What's he like?
2413 |
2414 | 535
2415 | 01:06:30,552 --> 01:06:34,690
2416 | You trust him. He's got a strength.
2417 |
2418 | 536
2419 | 01:06:35,858 --> 01:06:38,376
2420 | I'd die for John Connor.
2421 |
2422 | 537
2423 | 01:06:40,779 --> 01:06:44,782
2424 | Well... at least now I know
2425 | what to name him.
2426 |
2427 | 538
2428 | 01:06:45,150 --> 01:06:47,541
2429 | I don't suppose you
2430 | know who the father is,
2431 |
2432 | 539
2433 | 01:06:47,567 --> 01:06:50,463
2434 | so I won't tell him to get
2435 | lost when I meet him.
2436 |
2437 | 540
2438 | 01:06:50,506 --> 01:06:52,940
2439 | John never said much about him.
2440 |
2441 | 541
2442 | 01:06:53,408 --> 01:06:56,077
2443 | - I know he dies before the war...
2444 | - Wait!
2445 |
2446 | 542
2447 | 01:06:57,913 --> 01:06:59,781
2448 | I don't want to know.
2449 |
2450 | 543
2451 | 01:07:00,749 --> 01:07:03,951
2452 | So, was it John that sent you here?
2453 |
2454 | 544
2455 | 01:07:04,319 --> 01:07:05,987
2456 | I volunteered.
2457 |
2458 | 545
2459 | 01:07:07,222 --> 01:07:08,355
2460 | Why?
2461 |
2462 | 546
2463 | 01:07:08,623 --> 01:07:13,895
2464 | It was a chance to meet the
2465 | legend... Sarah Connor.
2466 |
2467 | 547
2468 | 01:07:14,563 --> 01:07:18,950
2469 | Taught her son to fight, organize,
2470 |
2471 | 548
2472 | 01:07:19,018 --> 01:07:21,336
2473 | prepare from when he was a kid.
2474 |
2475 | 549
2476 | 01:07:21,404 --> 01:07:23,855
2477 | When you were in hiding
2478 | before the war...
2479 |
2480 | 550
2481 | 01:07:27,459 --> 01:07:30,928
2482 | You're talking about things I
2483 | haven't done yet in the past tense.
2484 |
2485 | 551
2486 | 01:07:30,996 --> 01:07:33,631
2487 | - It's driving me crazy.
2488 | - Aah!
2489 |
2490 | 552
2491 | 01:07:36,869 --> 01:07:39,204
2492 | Are you sure you have
2493 | the right person?
2494 |
2495 | 553
2496 | 01:07:39,572 --> 01:07:41,239
2497 | I'm sure.
2498 |
2499 | 554
2500 | 01:07:41,907 --> 01:07:45,345
2501 | Come on. Do I look like
2502 | the mother of the future?
2503 |
2504 | 555
2505 | 01:07:47,413 --> 01:07:52,317
2506 | I mean, am I tough? Organized?
2507 | I can't even balance my checkbook.
2508 |
2509 | 556
2510 | 01:07:55,354 --> 01:08:00,709
2511 | Look, Reese, I didn't ask for this
2512 | honor, and I don't want it! Any of it!
2513 |
2514 | 557
2515 | 01:08:04,314 --> 01:08:08,666
2516 | Your son gave me a message to
2517 | give to you. Made me memorize it.
2518 |
2519 | 558
2520 | 01:08:09,634 --> 01:08:12,721
2521 | "Thank you, Sarah, for your
2522 | courage through the dark years.
2523 |
2524 | 559
2525 | 01:08:12,789 --> 01:08:17,459
2526 | I can't help you with what you must soon face
2527 | except to say that the future is not set.
2528 |
2529 | 560
2530 | 01:08:17,460 --> 01:08:20,112
2531 | You must be stronger than
2532 | you imagine you can be.
2533 |
2534 | 561
2535 | 01:08:20,146 --> 01:08:25,051
2536 | You must survive, or I will
2537 | never exist". That's all.
2538 |
2539 | 562
2540 | 01:08:28,253 --> 01:08:30,438
2541 | It's a good field dressing.
2542 |
2543 | 563
2544 | 01:08:31,357 --> 01:08:35,394
2545 | You like it? It's my first.
2546 |
2547 | 564
2548 | 01:08:36,461 --> 01:08:38,896
2549 | (CAR PASSES)
2550 |
2551 | 565
2552 | 01:08:39,164 --> 01:08:42,199
2553 | Get some sleep.
2554 | It will be light soon.
2555 |
2556 | 566
2557 | 01:08:45,904 --> 01:08:47,371
2558 | OK.
2559 |
2560 | 567
2561 | 01:08:57,899 --> 01:09:00,000
2562 | Talk to me some more.
2563 |
2564 | 568
2565 | 01:09:03,004 --> 01:09:04,640
2566 | About what?
2567 |
2568 | 569
2569 | 01:09:05,807 --> 01:09:08,408
2570 | Tell me about where you're from.
2571 |
2572 | 570
2573 | 01:09:10,612 --> 01:09:12,179
2574 | All right.
2575 |
2576 | 571
2577 | 01:09:13,715 --> 01:09:18,385
2578 | You stay down by day, but at
2579 | night you can move around.
2580 |
2581 | 572
2582 | 01:09:18,453 --> 01:09:22,625
2583 | You still have to be careful
2584 | because the HKs use infrared.
2585 |
2586 | 573
2587 | 01:09:24,293 --> 01:09:30,180
2588 | But they're not too bright. John
2589 | taught us ways to dust them.
2590 |
2591 | 574
2592 | 01:09:30,848 --> 01:09:33,583
2593 | That's when the infiltrators
2594 | started to appear.
2595 |
2596 | 575
2597 | 01:09:33,651 --> 01:09:37,187
2598 | The Terminators were the
2599 | newest... The worst.
2600 |
2601 | 576
2602 | 01:09:46,848 --> 01:09:48,882
2603 | MAN OVER RADIO: Traversing
2604 | your sector in search mode.
2605 |
2606 | 577
2607 | 01:09:48,883 --> 01:09:52,118
2608 | 750 meters north of your position.
2609 |
2610 | 578
2611 | 01:09:52,253 --> 01:09:55,322
2612 | SECOND MAN:
2613 | Understood. 750 meters north.
2614 |
2615 | 579
2616 | 01:09:56,890 --> 01:09:58,458
2617 | Let's go.
2618 |
2619 | 580
2620 | 01:09:58,625 --> 01:10:00,442
2621 | MAN OVER RADIO: Intercept. Over.
2622 |
2623 | 581
2624 | 01:10:02,512 --> 01:10:05,047
2625 | There are scavenger teams
2626 | in that quadrant.
2627 |
2628 | 582
2629 | 01:10:05,115 --> 01:10:09,453
2630 | Avoid contact. Repeat, avoid
2631 | contact. We'll get them later.
2632 |
2633 | 583
2634 | 01:10:10,120 --> 01:10:11,805
2635 | MAN OVER RADIO:
2636 | Roger, echo leader.
2637 |
2638 | 584
2639 | 01:10:16,960 --> 01:10:21,531
2640 | - Sector niner, what's your status?
2641 | - Situation normal.
2642 |
2643 | 585
2644 | 01:10:37,046 --> 01:10:40,850
2645 | Firebase, what's your status? Over.
2646 |
2647 | 586
2648 | 01:10:43,487 --> 01:10:47,273
2649 | - Reese. DN384...
2650 | - Right. Let him in.
2651 |
2652 | 587
2653 | 01:10:50,878 --> 01:10:53,830
2654 | RADIO: Any infiltrators
2655 | at the shopping mall?
2656 |
2657 | 588
2658 | 01:10:53,898 --> 01:10:59,736
2659 | RADIO: No problem. They were clean.
2660 | We're cutting short the patrol. Over.
2661 |
2662 | 589
2663 | 01:11:00,104 --> 01:11:04,090
2664 | Roger, Yankee-1-7.
2665 | You are clear to return.
2666 |
2667 | 590
2668 | 01:11:08,527 --> 01:11:10,763
2669 | (BOY IMITATING GUNFIRE)
2670 |
2671 | 591
2672 | 01:11:14,985 --> 01:11:17,086
2673 | (WOMAN COUGHING)
2674 |
2675 | 592
2676 | 01:11:33,019 --> 01:11:36,138
2677 | (WOMAN SOBBING)
2678 |
2679 | 593
2680 | 01:11:52,705 --> 01:11:54,507
2681 | (SQUEAKING)
2682 |
2683 | 594
2684 | 01:12:11,675 --> 01:12:14,427
2685 | (DOGS BARKING)
2686 |
2687 | 595
2688 | 01:12:18,699 --> 01:12:20,650
2689 | MAN: Terminator! Terminator!
2690 |
2691 | 596
2692 | 01:13:04,093 --> 01:13:05,694
2693 | (PEOPLE SCREAMING)
2694 |
2695 | 597
2696 | 01:13:25,650 --> 01:13:27,833
2697 | (BIRDS CHIRPING)
2698 |
2699 | 598
2700 | 01:13:30,459 --> 01:13:33,009
2701 | (DOG BARKING IN DISTANCE)
2702 |
2703 | 599
2704 | 01:13:37,794 --> 01:13:40,229
2705 | I was dreaming about dogs.
2706 |
2707 | 600
2708 | 01:13:41,365 --> 01:13:43,767
2709 | We use them to spot Terminators.
2710 |
2711 | 601
2712 | 01:13:45,034 --> 01:13:47,703
2713 | Your world is pretty terrifying.
2714 |
2715 | 602
2716 | 01:14:17,650 --> 01:14:19,502
2717 | (FLY BUZZING)
2718 |
2719 | 603
2720 | 01:14:19,569 --> 01:14:21,704
2721 | (KNOCK ON DOOR)
2722 |
2723 | 604
2724 | 01:14:26,159 --> 01:14:30,146
2725 | Hey, buddy, you got a dead
2726 | cat in there, or what?
2727 |
2728 | 605
2729 | 01:14:30,614 --> 01:14:33,615
2730 | (KNOCKING)
2731 |
2732 | 606
2733 | 01:14:37,755 --> 01:14:40,073
2734 | Fuck you, asshole.
2735 |
2736 | 607
2737 | 01:14:58,692 --> 01:15:00,593
2738 | Goddamn!
2739 |
2740 | 608
2741 | 01:15:01,361 --> 01:15:03,129
2742 | SARAH: Thank you.
2743 |
2744 | 609
2745 | 01:15:03,130 --> 01:15:04,599
2746 | (HORN HONKS)
2747 |
2748 | 610
2749 | 01:15:07,167 --> 01:15:09,702
2750 | Uh, is this enough?
2751 |
2752 | 611
2753 | 01:15:10,370 --> 01:15:13,674
2754 | Yeah, it's enough. I don't
2755 | want to ask where you got it.
2756 |
2757 | 612
2758 | 01:15:19,746 --> 01:15:21,581
2759 | - MAN: I'm coming.
2760 | - We need a room.
2761 |
2762 | 613
2763 | 01:15:21,582 --> 01:15:23,517
2764 | - All right.
2765 | - With a kitchen.
2766 |
2767 | 614
2768 | 01:15:24,050 --> 01:15:25,851
2769 | Do you have one with a kitchen?
2770 |
2771 | 615
2772 | 01:15:37,914 --> 01:15:39,650
2773 | Mmm.
2774 |
2775 | 616
2776 | 01:15:41,317 --> 01:15:43,853
2777 | I am dying for a shower.
2778 |
2779 | 617
2780 | 01:15:45,656 --> 01:15:47,874
2781 | We should check your bandage, too.
2782 |
2783 | 618
2784 | 01:15:48,541 --> 01:15:51,277
2785 | Later. I'm going out for supplies.
2786 |
2787 | 619
2788 | 01:15:55,865 --> 01:15:57,550
2789 | Keep this.
2790 |
2791 | 620
2792 | 01:16:03,023 --> 01:16:07,092
2793 | (DOOR OPENS AND CLOSES)
2794 |
2795 | 621
2796 | 01:16:23,127 --> 01:16:26,663
2797 | SARAH: No, I can't tell you where
2798 | I am, mom. I was told not to say.
2799 |
2800 | 622
2801 | 01:16:26,664 --> 01:16:28,863
2802 | Oh, but, honey, I need to
2803 | know where I can reach you.
2804 |
2805 | 623
2806 | 01:16:28,889 --> 01:16:32,310
2807 | You tell me to hide out up here at
2808 | the cabin like some fugitive and...
2809 |
2810 | 624
2811 | 01:16:32,311 --> 01:16:36,614
2812 | and you won't tell me what's
2813 | going on? I am worried sick, dear.
2814 |
2815 | 625
2816 | 01:16:37,207 --> 01:16:39,042
2817 | OK.
2818 |
2819 | 626
2820 | 01:16:40,210 --> 01:16:43,145
2821 | - OK, here's the number. Ready?
2822 | - Yes. Go ahead.
2823 |
2824 | 627
2825 | 01:16:43,313 --> 01:16:46,856
2826 | It's 408-555...
2827 |
2828 | 628
2829 | 01:16:46,882 --> 01:16:49,074
2830 | - 1439.
2831 | - Uh-huh.
2832 |
2833 | 629
2834 | 01:16:49,117 --> 01:16:51,400
2835 | - Room 9. Got it?
2836 | - Uh-huh.
2837 |
2838 | 630
2839 | 01:16:51,526 --> 01:16:53,354
2840 | - I've got it.
2841 | - I've got to go.
2842 |
2843 | 631
2844 | 01:16:53,522 --> 01:16:58,093
2845 | I'm sorry I can't tell you more
2846 | right now. I love you, mom.
2847 |
2848 | 632
2849 | 01:17:01,831 --> 01:17:04,432
2850 | I love you, too, sweetheart.
2851 |
2852 | 633
2853 | 01:17:16,661 --> 01:17:19,864
2854 | - MAN: Tiki motel.
2855 | - Give me your address there.
2856 |
2857 | 634
2858 | 01:17:22,651 --> 01:17:24,218
2859 | SARAH: What have we got?
2860 |
2861 | 635
2862 | 01:17:27,656 --> 01:17:29,373
2863 | Mothballs.
2864 |
2865 | 636
2866 | 01:17:30,399 --> 01:17:32,118
2867 | Corn syrup.
2868 |
2869 | 637
2870 | 01:17:32,261 --> 01:17:35,497
2871 | Ammonia. What's for dinner?
2872 |
2873 | 638
2874 | 01:17:36,265 --> 01:17:39,300
2875 | - Plastique.
2876 | - Mmm, that sounds good.
2877 |
2878 | 639
2879 | 01:17:39,468 --> 01:17:40,902
2880 | What is it?
2881 |
2882 | 640
2883 | 01:17:41,670 --> 01:17:45,339
2884 | Nitroglycerin, basically.
2885 | It's a bit more stable.
2886 |
2887 | 641
2888 | 01:17:45,407 --> 01:17:47,576
2889 | I learned to make it
2890 | when I was a kid.
2891 |
2892 | 642
2893 | 01:17:59,038 --> 01:18:01,557
2894 | Make sure there's
2895 | none on the threads.
2896 |
2897 | 643
2898 | 01:18:03,425 --> 01:18:05,093
2899 | Like this.
2900 |
2901 | 644
2902 | 01:18:06,929 --> 01:18:08,964
2903 | Screw the end cap on.
2904 |
2905 | 645
2906 | 01:18:10,632 --> 01:18:12,733
2907 | Very gently.
2908 |
2909 | 646
2910 | 01:18:14,903 --> 01:18:17,939
2911 | You must've had a fun childhood.
2912 |
2913 | 647
2914 | 01:18:20,909 --> 01:18:22,610
2915 | That's good.
2916 |
2917 | 648
2918 | 01:18:22,877 --> 01:18:27,415
2919 | All right. Six more like that, and
2920 | I'll get started on the fuses.
2921 |
2922 | 649
2923 | 01:18:37,959 --> 01:18:40,160
2924 | SARAH: He'll find us, won't he?
2925 |
2926 | 650
2927 | 01:18:42,798 --> 01:18:44,465
2928 | Probably.
2929 |
2930 | 651
2931 | 01:19:02,182 --> 01:19:04,535
2932 | It'll never be over, will it?
2933 |
2934 | 652
2935 | 01:19:12,845 --> 01:19:15,281
2936 | Look at me. I'm shaking.
2937 |
2938 | 653
2939 | 01:19:16,048 --> 01:19:21,470
2940 | Some legend, huh? You must
2941 | be pretty disappointed.
2942 |
2943 | 654
2944 | 01:19:22,238 --> 01:19:26,040
2945 | No. I'm not.
2946 |
2947 | 655
2948 | 01:19:35,050 --> 01:19:36,617
2949 | Kyle...
2950 |
2951 | 656
2952 | 01:19:37,553 --> 01:19:42,189
2953 | The women in your time...
2954 | what are they like?
2955 |
2956 | 657
2957 | 01:19:44,393 --> 01:19:46,328
2958 | Good fighters.
2959 |
2960 | 658
2961 | 01:19:46,695 --> 01:19:48,796
2962 | That's not what I meant.
2963 |
2964 | 659
2965 | 01:19:50,999 --> 01:19:53,100
2966 | Was there someone special?
2967 |
2968 | 660
2969 | 01:19:54,602 --> 01:19:59,706
2970 | - Someone?
2971 | - A girl. You know.
2972 |
2973 | 661
2974 | 01:20:00,809 --> 01:20:02,376
2975 | No.
2976 |
2977 | 662
2978 | 01:20:05,030 --> 01:20:06,597
2979 | Never.
2980 |
2981 | 663
2982 | 01:20:08,233 --> 01:20:09,800
2983 | Never?
2984 |
2985 | 664
2986 | 01:20:14,739 --> 01:20:18,209
2987 | I'm sorry. I'm so sorry.
2988 |
2989 | 665
2990 | 01:20:20,979 --> 01:20:23,297
2991 | So much pain.
2992 |
2993 | 666
2994 | 01:20:24,399 --> 01:20:29,104
2995 | Pain can be controlled.
2996 | You just disconnect it.
2997 |
2998 | 667
2999 | 01:20:29,171 --> 01:20:31,322
3000 | So you feel nothing?
3001 |
3002 | 668
3003 | 01:20:36,412 --> 01:20:39,480
3004 | John Connor gave me a
3005 | picture of you once.
3006 |
3007 | 669
3008 | 01:20:41,217 --> 01:20:46,253
3009 | I didn't know why at the
3010 | time. It was very old...
3011 |
3012 | 670
3013 | 01:20:47,156 --> 01:20:50,691
3014 | Torn... faded.
3015 |
3016 | 671
3017 | 01:20:54,028 --> 01:21:00,235
3018 | You were young like you are now.
3019 | You seemed just... a little sad.
3020 |
3021 | 672
3022 | 01:21:01,637 --> 01:21:05,391
3023 | I used to always wonder what you
3024 | were thinking at that moment.
3025 |
3026 | 673
3027 | 01:21:05,858 --> 01:21:08,352
3028 | I memorized every line,
3029 |
3030 | 674
3031 | 01:21:09,678 --> 01:21:11,803
3032 | every curve.
3033 |
3034 | 675
3035 | 01:21:15,049 --> 01:21:17,902
3036 | I came across time for you, Sarah.
3037 |
3038 | 676
3039 | 01:21:18,937 --> 01:21:23,458
3040 | I love you. I always have.
3041 |
3042 | 677
3043 | 01:21:41,176 --> 01:21:42,977
3044 | I shouldn't have said that.
3045 |
3046 | 678
3047 | 01:23:13,919 --> 01:23:16,086
3048 | Think fast! (CHUCKLES)
3049 |
3050 | 679
3051 | 01:23:17,655 --> 01:23:19,389
3052 | (DOG BARKING)
3053 |
3054 | 680
3055 | 01:24:09,306 --> 01:24:10,490
3056 | (BARKS)
3057 |
3058 | 681
3059 | 01:24:45,192 --> 01:24:46,893
3060 | Trade places!
3061 |
3062 | 682
3063 | 01:24:57,621 --> 01:25:01,074
3064 | Faster! Drive faster!
3065 |
3066 | 683
3067 | 01:25:08,815 --> 01:25:11,217
3068 | (HORN HONKS)
3069 |
3070 | 684
3071 | 01:25:47,722 --> 01:25:49,106
3072 | (KYLE GRUNTS)
3073 |
3074 | 685
3075 | 01:25:50,624 --> 01:25:52,158
3076 | Kyle!
3077 |
3078 | 686
3079 | 01:25:52,825 --> 01:25:54,460
3080 | Oh, my God!
3081 |
3082 | 687
3083 | 01:26:12,840 --> 01:26:14,826
3084 | (TIRES SCREECHING)
3085 |
3086 | 688
3087 | 01:26:15,066 --> 01:26:17,733
3088 | (SARAH SCREAMING)
3089 |
3090 | 689
3091 | 01:26:28,179 --> 01:26:29,813
3092 | Kyle.
3093 |
3094 | 690
3095 | 01:26:44,111 --> 01:26:46,062
3096 | - Whoa!
3097 | - Son of a bitch!
3098 |
3099 | 691
3100 | 01:27:01,495 --> 01:27:03,263
3101 | You stay here.
3102 |
3103 | 692
3104 | 01:27:26,704 --> 01:27:28,638
3105 | Let's get out of here.
3106 |
3107 | 693
3108 | 01:27:31,675 --> 01:27:33,409
3109 | Get out.
3110 |
3111 | 694
3112 | 01:27:49,961 --> 01:27:53,213
3113 | Kyle. Come on, get up.
3114 |
3115 | 695
3116 | 01:27:59,353 --> 01:28:01,266
3117 | He's coming.
3118 |
3119 | 696
3120 | 01:28:01,292 --> 01:28:04,157
3121 | Kyle? Come on!
3122 |
3123 | 697
3124 | 01:28:05,258 --> 01:28:08,714
3125 | Help me! Get out! Get out!
3126 |
3127 | 698
3128 | 01:28:09,040 --> 01:28:10,612
3129 | Get out!
3130 |
3131 | 699
3132 | 01:28:19,873 --> 01:28:21,457
3133 | SARAH: Come on!
3134 |
3135 | 700
3136 | 01:28:27,514 --> 01:28:29,365
3137 | Faster!
3138 |
3139 | 701
3140 | 01:28:31,243 --> 01:28:32,768
3141 | (KYLE PANTING)
3142 |
3143 | 702
3144 | 01:28:32,769 --> 01:28:35,254
3145 | KYLE: Don't stop! Run!
3146 |
3147 | 703
3148 | 01:30:46,920 --> 01:30:48,854
3149 | Sarah!
3150 |
3151 | 704
3152 | 01:30:49,322 --> 01:30:50,973
3153 | Kyle!
3154 |
3155 | 705
3156 | 01:30:55,929 --> 01:30:59,398
3157 | Oh, Kyle. Kyle.
3158 |
3159 | 706
3160 | 01:31:00,634 --> 01:31:03,819
3161 | We did it, Kyle. We got it.
3162 |
3163 | 707
3164 | 01:31:23,423 --> 01:31:24,974
3165 | No!
3166 |
3167 | 708
3168 | 01:31:25,042 --> 01:31:26,976
3169 | No!
3170 |
3171 | 709
3172 | 01:32:22,165 --> 01:32:23,966
3173 | KYLE: Wait!
3174 |
3175 | 710
3176 | 01:32:28,338 --> 01:32:33,742
3177 | - SARAH: What are you doing?
3178 | - Cover, so he can't track us.
3179 |
3180 | 711
3181 | 01:32:43,670 --> 01:32:48,507
3182 | Come on! Come on. No, Kyle!
3183 |
3184 | 712
3185 | 01:32:49,643 --> 01:32:53,596
3186 | - Come on! Come on!
3187 | - Leave me here.
3188 |
3189 | 713
3190 | 01:32:53,597 --> 01:32:55,198
3191 | SARAH: Get up!
3192 |
3193 | 714
3194 | 01:33:04,407 --> 01:33:09,378
3195 | Move it, Reese!
3196 | On your feet, soldier!
3197 |
3198 | 715
3199 | 01:33:09,445 --> 01:33:12,998
3200 | On your feet! Move it!
3201 |
3202 | 716
3203 | 01:34:24,554 --> 01:34:26,655
3204 | Back. Go back.
3205 |
3206 | 717
3207 | 01:35:00,741 --> 01:35:03,009
3208 | - Run, Sarah.
3209 | - No.
3210 |
3211 | 718
3212 | 01:35:03,077 --> 01:35:04,610
3213 | Run!
3214 |
3215 | 719
3216 | 01:35:08,081 --> 01:35:09,649
3217 | Run!
3218 |
3219 | 720
3220 | 01:35:09,916 --> 01:35:12,001
3221 | Come on, motherfucker.
3222 |
3223 | 721
3224 | 01:36:01,618 --> 01:36:03,185
3225 | (SCREAMS IN PAIN)
3226 |
3227 | 722
3228 | 01:36:21,538 --> 01:36:24,738
3229 | (SCREAMING)
3230 |
3231 | 723
3232 | 01:37:04,914 --> 01:37:07,198
3233 | No, no.
3234 |
3235 | 724
3236 | 01:39:05,233 --> 01:39:07,501
3237 | You're terminated, fucker.
3238 |
3239 | 725
3240 | 01:39:48,377 --> 01:39:51,479
3241 | (SIREN APPROACHING)
3242 |
3243 | 726
3244 | 01:40:05,092 --> 01:40:06,661
3245 | Kyle.
3246 |
3247 | 727
3248 | 01:40:08,765 --> 01:40:14,718
3249 | POLICE RADIO: 6450 Bellingham Avenue,
3250 | Super Trader. 6450 Bellingham Avenue.
3251 |
3252 | 728
3253 | 01:40:14,886 --> 01:40:17,272
3254 | (RADIO CONTINUES INDISTINCTLY)
3255 |
3256 | 729
3257 | 01:40:27,599 --> 01:40:31,435
3258 | SARAH:
3259 | Tape 7, November 10. Where was I?
3260 |
3261 | 730
3262 | 01:40:32,403 --> 01:40:36,707
3263 | What's most difficult for me is trying to
3264 | decide what to tell you and what not to.
3265 |
3266 | 731
3267 | 01:40:36,975 --> 01:40:41,329
3268 | But I guess I have a while yet before you're
3269 | old enough to even understand these tapes.
3270 |
3271 | 732
3272 | 01:40:41,397 --> 01:40:45,534
3273 | They're more for me at this point,
3274 | just so that I can get it straight.
3275 |
3276 | 733
3277 | 01:41:15,981 --> 01:41:19,417
3278 | - Gasolina, por favor.
3279 | - ¿Cuánto?
3280 |
3281 | 734
3282 | 01:41:19,885 --> 01:41:23,988
3283 | - Llena el tanque.
3284 | - Fill her up, sí.
3285 |
3286 | 735
3287 | 01:41:27,625 --> 01:41:32,797
3288 | Should I tell you about your
3289 | father? Boy, that's a tough one.
3290 |
3291 | 736
3292 | 01:41:34,099 --> 01:41:38,937
3293 | Will it affect your decision to send him
3294 | here, knowing that he is your father?
3295 |
3296 | 737
3297 | 01:41:40,705 --> 01:41:43,404
3298 | If you don't send Kyle,
3299 | you can never be.
3300 |
3301 | 738
3302 | 01:41:43,408 --> 01:41:47,277
3303 | God, a person could go
3304 | crazy thinking about this.
3305 |
3306 | 739
3307 | 01:41:50,549 --> 01:41:56,120
3308 | I suppose I will tell you.
3309 | I owe him that.
3310 |
3311 | 740
3312 | 01:41:58,423 --> 01:42:00,959
3313 | Maybe it'll help if...
3314 |
3315 | 741
3316 | 01:42:01,026 --> 01:42:05,964
3317 | You know that in the few
3318 | hours that we had together...
3319 |
3320 | 742
3321 | 01:42:08,033 --> 01:42:10,602
3322 | We loved a lifetime's worth.
3323 |
3324 | 743
3325 | 01:42:14,239 --> 01:42:17,559
3326 | Usted es muy hermosa, señora,
3327 | y tengo pena decirle
3328 |
3329 | 744
3330 | 01:42:17,560 --> 01:42:22,930
3331 | que me de cinco dolares americanos,
3332 | pero si no, mi padre me va a pegar.
3333 |
3334 | 745
3335 | 01:42:23,464 --> 01:42:27,400
3336 | - What did he just say?
3337 | - He says you're very beautiful, señora...
3338 |
3339 | 746
3340 | 01:42:27,468 --> 01:42:30,838
3341 | and he's ashamed to ask you for five
3342 | American dollars for his picture,
3343 |
3344 | 747
3345 | 01:42:30,839 --> 01:42:33,708
3346 | but if he doesn't, his
3347 | father will beat him.
3348 |
3349 | 748
3350 | 01:42:33,876 --> 01:42:35,910
3351 | Pretty good hustle, kid.
3352 |
3353 | 749
3354 | 01:42:36,878 --> 01:42:39,647
3355 | - Cuatro
3356 | - Sí, sí.
3357 |
3358 | 750
3359 | 01:42:40,615 --> 01:42:42,016
3360 | Gracias.
3361 |
3362 | 751
3363 | 01:42:43,518 --> 01:42:45,519
3364 | ¡Miren, miren!
3365 |
3366 | 752
3367 | 01:42:47,472 --> 01:42:50,658
3368 | ¡Allá! ¡Viene una tormenta!
3369 |
3370 | 753
3371 | 01:42:52,893 --> 01:42:54,862
3372 | What did he just say?
3373 |
3374 | 754
3375 | 01:42:55,330 --> 01:42:57,982
3376 | He said there's a storm coming in.
3377 |
3378 | 755
3379 | 01:43:01,920 --> 01:43:03,587
3380 | I know.
3381 |
3382 | 756
3383 | 01:43:17,636 --> 01:43:19,537
3384 | (THUNDER)
3385 |
3386 |
--------------------------------------------------------------------------------