├── .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 | 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 | 10 | -------------------------------------------------------------------------------- /client/timeshistorian/cards/white_card.html: -------------------------------------------------------------------------------- 1 | 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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /client/cardsagainstsobriety/views/cards/black_card.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/cardsagainstsobriety/views/cards/white_card.html: -------------------------------------------------------------------------------- 1 | 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 | -------------------------------------------------------------------------------- /client/timeshistorian/timeshistorian.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.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 | 17 | -------------------------------------------------------------------------------- /client/timeshistorian/timesHistorianHand.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 17 | -------------------------------------------------------------------------------- /client/chat/chat.html: -------------------------------------------------------------------------------- 1 | 7 | 8 | 17 | 18 | -------------------------------------------------------------------------------- /_.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 | 23 | -------------------------------------------------------------------------------- /client/cardsagainstsobriety/cardsagainstsobriety.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/layout/layout.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /_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 | -------------------------------------------------------------------------------- /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 | [![Stories in Ready](https://badge.waffle.io/FrogCircle/whiskey-and-cake.png?label=ready&title=Ready)](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 | 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 | --------------------------------------------------------------------------------