So I’ve come to the conclusion Monkey Island 2: Le Chucks Revenge is actually a deeply tragic game about growing with absentee parents while being surrounded by a poor network of family and social support and being crippled from reengaging with siblings, and not about finding treasure at all *strokes beard*
Collaboration 101
Short post, haven’t done anything for a while, I’m managing 25 people is my reasoning, but something new needs to go here none the less. So let’s go!!
I’ve had a really successful holidays and beginning of this uni trimester working with lots of different, cool and interesting people. Collaboration is something that I was never great at, but I feel I’m getting significantly better at it. This is a handful of dot pointed tips on what I’ve learned for a successful collaborative process.
If it’s your project originally and you’re getting someone else involved, figure out what’s important to you, what’s your stake in it, and what is just the vehicle to make that happen.
I’ve been dealing with a lot of narrative stuff lately, and I feel this is a prime example of the above. I have a few very pivotal things I want to see happen in the story. Sometimes these are plot points, others might be overall tone or message. Everything else is structure, or a method of delivery. Figuring out what must be kept for you to still have a stake is a good thing, because there’s no point in collaborating if you end up disengaging with the project. But know your reasoning, WHY are these important to you. Be able to talk about it top to bottom from every angle. If you can’t answer everything about it, it loses its weight with your collaborator and probably wasn’t that important to you in the first place. Everything else, be loose, be open. One of the reasons you collaborate is to push that other stuff that you’re not so on top of to a greater place!
Have a clear understanding of roles, who has what strong points and what are they best suited to do.
One of the principle reasons I see collaborations fail is because you have two insanely talented people in the same place at the same time with the same knowledge and the same roles. As much as they might get along, there’s not a lot one can bring to the other in terms of the collaboration. Having an understanding of who you’re working with, why and how you’ll go about it will help you identify really early on if things are going to work. Even if it’s a case of the project being so big that you can’t do it by yourself, still take the time to define what those involved will be doing.
Understand that the person you’re collaborating with has different knowledge and might need to enter the discussion from a completely different angle. Take the time to understand the background to entering like that.
I’m a digital games guy but one of the people I work with a lot is from a non-digital games background. We work really well together, but I do sometimes need to step back from the actual problem we’re focusing on and make sure I understand what knowledge and experience she’s leveraging. This really comes down to trying to understand what the other person is saying as best as possible. An idea she might put forward might sound rather frivolous in my background of digital games, but once I understand how she’s seen that idea implemented in another medium, we can bring the good things of that into a digital space. Otherwise I would be referencing solely off a digital game, which (let’s face in) there’s a lot of things we’re not great at implementing in a rewarding way.
Communicate consistently in a way that works for both people.
Really obvious but I see this one not happen a lot. As much as we all love the romanticized perfect creative partner who always understands what you’re thinking even when you’re on the other side of the planet, chances are that won’t be the case. Always be in communication on elements and plans of the collaboration, keep your person (or people) in the loop of where you want to push to. But this doesn’t mean 4AM phone calls and Facebook messages all day long every time a little thing pops into your head. Make specific times to talk, doesn’t have to be formal meeting times or anything fancy. Just that ‘Okay, around this time, this is where we’re going to put things on the table and bounce ideas around’ sort of thing.
A few reason for this, first of all it’ll stop you just throwing things out there that aren’t really fully formed ideas at the drop of a hat. Secondary, it’ll give your collaborator their own head space to ponder and think on things. Thirdly you don’t know what’s going on in their life every second. Trying to pitch ideas at the worst possible moment will end in those ideas not being given the time they deserve, and even worse, if you move on things based on that conversation, it might end up steering you in the wrong direction!
So there we go, a few short thoughts on collaboration. These work for me, I have no idea if they’ll work for everyone, but there they are!
That Chance That We Have No Website….
Update: Thankfully this is now redundant!
So next week is the Qantm Student Gallery!!
(http://qantm2012.wordpress.com/)
We’re showing off our new game, Cubic Capitalist Conundrum. A new folio style website is on the way to DaijoubuGames.com which is where the games gallery page links to, but what with living in a capitalist society and all that, we need money to make that happen, which won’t be until Monday. Depending on how long it takes the universe to update, there’s a chance you’ll be popped through to here while the website goes up. So it the mean time, feel free to have a flick through the previous months work and mash F5 on DaijoubuGames.com until a website appears!
One More Thing to Explore for the Holidays
One of the major things I’ve always found interesting about sandbox games is the concept of ownership. Sandbox games from GTA and it’s car theft to Minecraft and other players creations give the player the understanding that if they can take it, it’s theirs, even when all the evidence is to the contrary. What would it take to give the player the feeling that what is theirs is theirs and they need to care for it, and what is someone else’s that you either have to negotiate your way into owning or make peace with the moral implications of taking it. Stuff like theft in Skyrim is a challenge, not a moral battle. What would make it the latter instead?
Holiday To-Do List
We’re done for the year at Uni! I thought it would be an idea to do a list of everything I want to accomplish (or at least try my hand at) over the break. Next week we have a hilarious meeting over some design choices (or at least that’s what they’re telling us) we made for our GTA in a Week project, the college wasn’t super thrilled that at one point you can pick up hookers in the game, but we’re almost certain that’s not what its about. We’ll see how that goes.
So in the mean time waiting for that meeting, here’s what I plan to do on the break and why.
-Read up on architectural design theory, particularly looking at commercial retailers and how they push customers around.
Why: We had a project this tri to design a level which we tried to build as an open world. We wanted to not have in any arbitrary barriers to path the player, but we had an order of how the path needed to play out, and objectives that the player needed to hit. We tried a whole bunch of interesting cool stuff, how we used lighting in the level to high light paths and then upon hitting objectives, gave the player information that would allow them to disregard the information of light paths. However, while it got the results we wanted, it wasn’t consistent or constant. For a lot of players this whole system was invisible to them. There needs to be better ways to do this.
-Learn how to build games in data, not the renderer.
Why: So much of what I’ve done this tri worked solely in the renderer with game objects. Even stuff like GTA in a Week and Portal in a Week was all about objects hitting other objects. This is a terrible system, performance impact is huge, it’s unreliable especially for a consistent results, and it’s inaccurate. I first learned this with a tower building game that relied on collisions, you needed to be able to neatly slot blocks into gaps and around each other. All it took was a slight error for the block to not slot in. Instead what needs to happen is a way of tracking these blocks inside data, the visual representation should just be UI. That way there is absolute yes or no as to whether a block is going to slot in. In something like GTA, this expands out to everything from traffic, to mission markers, pedestrians, whatever. Having a reliable system for all of that is an exciting thought.
-Prototype ‘Jump Pursuit’
Why: One thing I forever love in GTA4 is running, jumping over fences, and using the environment in interesting ways to get away from police without ever using a car. Along with that, games like Crackdown and Prototype seem to miss a huge opportunity in that (at least from memory) so much of the game play is getting to the objective point and beating the shit out everyone. I’d like to do something that uses those super hero environment navigation as part of objectives rather than just how you get to them. Police pursuit is the angle I’m tackling this from. Our GTA in a Week project has helped a lot in how we can de-link player action to reaction, in the sense of things not happening the moment player meets the conditions for the event, and instead letting things unfold in an aesthetically pleasing way.
-Make the Tower Building game from earlier this year as a proper game.
Why: The prototype itself didn’t work right but what did work proved manically fun. I’d like to do this Sim Tower meets Tetris game up in Unity, perhaps ship it. If nothing else this would link in to learning how to work in data.
-Research MDA Design
Why: Mechanics, Dynamics, Aesthetics. Wiki stuff here. This is new-ish stuff which on the surface has made a lot of sense for me as far as how I like to design my games and what I like the gameplay outcomes to be about. I’m not going to comment beyond that because honestly at this point I don’t know enough, but often I will be trying to achieve a specific emotional aesthetic through the gameplay. Most of my favourite games are ones that, no matter how intentional or unintentional, do the same. Dead Rising is a good example, its rule set is really pretty straight forward, but it’s the dynamics that come out of it that lead to this pressure filled panicky emotional aesthetic. That’s very cool.
-Learn Some C++
Why: Mostly I’ll be in C# over the break but it’s C# in Unity, which tripped me up when going to something that wasn’t Unity, or anything for that matter. I have no idea about classes or pointers or anything like that, but I’d like to know.
-Learn some useful design art stuff
Why: I don’t even know what this really means but I have to do a drawing subject over the break. I’m still not super interested in drawing for drawings sake, but something I’ve found quite useful is being able to quickly sketch out an idea and pass it to someone who can actually do something useful with it. I want to get better at that, what makes or breaks that sort of thing as a tool rather than an art.
Okay cool, that should fill up two months nicely. Wheee!
Portal in DarkBasic in a Week! (with Multiplayer, lol)
Dontcha just love a good gamble? This is the latest results of our rapid “prototyping” class, Valve’s Portal loosely remade in DarkBasic, totally not my choice of game engine. Prototyping is in quotes mainly because I wouldn’t really call this a game prototype, more an little adventure to see if we could pull it off, and it turns out we can!
The majority of the code work was done by Andrew Kite and myself, him working on the networked gameplay while I got together the core mechanics. Chris (from the earlier prototype FlipIt) also jumped in to throw together a proof of mechanics level, and Rhys Knight and Adem Turedi covered the art side of things.
Find below the complete source for the project. You will need to strip out code lines relating to image and audio data before it will compile. This is just to play it safe with legals and all that. I’m hoping this will come in handy for anyone needing a first person camera systems, shooting, multiplayer systems, or (funnily enough) Portals. It’s also worth saying that a lot of the core gameplay was built on the ideas that Ruccus had in his Darkbasic FPS tutorial (which despite what the post says still works pretty well). If you wanted to look into more shootery based stuff, I recommend you take a look at that.
And without further ado, source code!!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 |
Rem Project: Holes
Rem Created: 11/8/2011 4:01:01 PM
Rem Project: Holes
Rem Created: 11/8/2011 1:44:06 PM
Rem ***** Main Source File *****
Sync On
Sync Rate 30
Hide Mouse
Set Display Mode 1024,768,32
Set Window Off
`Set Variables
global State_Menu = 1
global State_Multiplayer = 2
global Player1=1
global Player2=2
global Portal1=3
global Portal2=4
global PortalView1=5
global PortalView2=6
global Bullet1=7
global Bullet2=8
global Ground=500
global CamX# = 0
global CamY# = 0
global X# = 0
global Y# = 0
global Z# = 0
global Portal2X=0
global Portal2Y=-15
global Portal2Z=44
global Portal2RotationX=0
global Portal2RotationY=180
global Portal2RotationZ=0
global IsFalling = 1
global sendMessageDelay = 0
`Player Creation
Make Object box Player1,3,9,3
Color Object Player1,RGB(000,255,000)
make camera 10
position camera 10,0,0,0
Position Object Player1, 990, 1000, 1000
Make Object Box Player2,3,9,3
Color Object Player2,RGB(255,000,000)
Position Object Player2,10,0,0
`Portals
MAKE OBJECT plain Portal1,10,10
Color Object Portal1,RGB(255,0,200)
make camera 11
position camera 11,1000,5000,1000
Position Object Portal1,-1000,-1000,-1000
MAKE OBJECT plain Portal2,10,10
Color Object Portal2,RGB(255,0,200)
make camera 12
position camera 12,1000,5000,1000
Position Object Portal2,-1000,-1000,-1000
`Bullets
Make Object Sphere Bullet1,2
Position Object Bullet1,-1000,-1000,-1000
SET OBJECT EMISSIVE Bullet1, RGB(0,0,255)
ghost object on bullet1
Make Object Sphere Bullet2,2
Position Object Bullet2,-1000,-1000,-1000
SET OBJECT EMISSIVE Bullet2, RGB(255,0,0)
`1st Floor
`ground
Make Object Box 500, 25, 5, 125
Position Object 500, 1000, 975, 1000
Color Object 500, rgb(255,0,0)
`roof
Make Object Box 624, 25, 5, 100
Position Object 624, 1000, 995, 987.5
Color Object 624, rgb(255,255,0)
`front wall
Make Object Box 1000, 25, 50, 5
Position Object 1000, 1000, 997.5, 1065
Color Object 1000, rgb(0,255,0)
`back wall
Make Object Box 1125, 25, 25, 5
Position Object 1125, 1000, 985, 935
Color Object 1125, rgb(0,0,255)
`left wall
Make Object Box 750, 5, 25, 135
Position Object 750, 985, 985, 1000
Color Object 750, rgb(255,255,255)
`right wall
Make Object Box 875, 5, 25, 135
Position Object 875, 1015, 985, 1000
Color Object 875, rgb(0,0,0)
`second floor
`ground
Make Object Box 501, 25, 5, 25
Position Object 501, 1000, 1025, 1075
Color Object 501, rgb(255,0,0)
`roof
Make Object Box 625, 25, 5, 25
Position Object 625, 1000, 1050, 1075
Color Object 625, rgb(255,255,0)
`front wall
Make Object Box 1001, 25, 30, 5
Position Object 1001, 1000, 1037.5, 1090
Color Object 1001, rgb(0,255,0)
`back wall (between levels 2 & 3)
Make Object Box 1126, 25, 75, 5
Position Object 1126, 1000, 1035, 1035
Color Object 1126, rgb(0,0,255)
`left wall (tall wall)
Make Object Box 751, 5, 110, 35
Position Object 751, 985, 1052.5, 1050
Color Object 751, rgb(255,255,255)
`right wall (tall wall)
Make Object Box 876, 5, 110, 35
Position Object 876, 1015, 1052.5, 1050
Color Object 876, rgb(0,0,0)
`left wall (small wall)
Make Object Box 752, 5, 30, 25
Position Object 752, 985, 1037.5, 1080
Color Object 752, rgb(255,255,255)
`right wall (small wall)
Make Object Box 877, 5, 30, 25
Position Object 877, 1015, 1037.5, 1080
Color Object 877, rgb(0,0,0)
`third floor
`floor part1
Make Object Box 502, 25, 5, 50
Position Object 502, 1000, 1075, 1012.5
Color Object 502, rgb(255,0,0)
`roof
Make Object Box 626, 25, 5, 80
Position Object 626, 1000, 1105, 1027.5
Color Object 626, rgb(255,255,0)
`front wall
Make Object Box 1002, 25, 50, 5
Position Object 1002, 1000, 1077.5, 1065
Color Object 1002, rgb(0,255,0)
`left wall (tall wall)
Make Object Box 753, 5, 35, 40
Position Object 753, 985, 1090, 1012.5
Color Object 753, rgb(255,255,255)
`right wall (tall wall)
Make Object Box 878, 5, 35, 40
Position Object 878, 1015, 1090, 1012.5
Color Object 878, rgb(0,0,0)
`play room
`floor
Make Object Box 503, 100, 5, 100
Position Object 503, 1000, 1075, 937.5
Color Object 503, rgb(255,0,0)
`roof
Make Object Box 627, 100, 5, 80
Position Object 627, 1000, 1150, 947.5
Color Object 627, rgb(255,255,0)
`roof left
Make Object Box 628, 37.5, 5, 20
Position Object 628, 968.75, 1150, 897.5
Color Object 628, rgb(255,255,0)
`roof right
Make Object Box 629, 37.5, 5, 20
Position Object 629, 1031.25, 1150, 897.5
Color Object 629, rgb(255,255,0)
`front wall (middle)
Make Object Box 1003, 25, 45, 5
Position Object 1003, 1000, 1130, 990
Color Object 1003, rgb(0,255,0)
`front wall (left side)
Make Object Box 1004, 37.5, 80, 5
Position Object 1004, 1031, 1112.5, 990
Color Object 1004, rgb(0,255,0)
`front wall (right side)
Make Object Box 1005, 37.5, 80, 5
Position Object 1005, 969, 1112.5, 990
Color Object 1005, rgb(0,255,0)
`back wall
Make Object Box 1127, 100, 80, 5
Position Object 1127, 1000, 1112.5, 885
Color Object 1127, rgb(0,0,255)
`platform top
Make Object Box 504, 25, 2.5, 50
Position Object 504, 1000, 1130, 912
Color Object 504, rgb(255,0,0)
`platform bottom
Make Object Box 630, 25, 2.5, 50
Position Object 630, 1000, 1127.5, 912
Color Object 629, rgb(255,255,0)
`platform left wall inner
Make Object Box 754, 2.5, 21.30, 50
Position Object 754, 986.5, 1136.90, 912.5
Color Object 754, rgb(255,255,255)
`platform left wall outer
Make Object Box 879, 2.5, 21.30, 50
Position Object 879, 983.75, 1136.90, 912.5
Color Object 879, rgb(0,0,0)
`platform right wall inner
Make Object Box 880, 2.5, 21.30, 50
Position Object 880, 1016.25, 1136.90, 912.5
Color Object 880, rgb(0,0,0)
`platform right wall outer
Make Object Box 755, 2.5, 21.30, 50
Position Object 755, 1013.75, 1136.90, 912.5
Color Object 755, rgb(255,255,255)
`left wall (room wall)
Make Object Box 758, 5, 77.5, 110
Position Object 758, 947.5, 1113.75, 937.5
Color Object 758, rgb(255,255,255)
`right wall (room wall)
Make Object Box 883, 5, 77.5, 110
Position Object 883, 1052.5, 1113.75, 937.5
Color Object 883, rgb(0,0,0)
`pipe
`back wall (leads to final room
Make Object Box 1128, 25, 60, 5
Position Object 1128, 1000, 1182.5, 885
Color Object 1128, rgb(0,0,255)
`front wall
Make Object Box 1006, 25, 30, 5
Position Object 1006, 1000, 1167.5, 910
Color Object 1006, rgb(0,255,0)
`left wall
Make Object Box 756, 5, 30, 30
Position Object 756, 985, 1167.5, 897.5
Color Object 756, rgb(255,255,255)
`right wall
Make Object Box 881, 5, 30, 30
Position Object 881, 1015, 1167.5, 897.5
Color Object 881, rgb(0,0,0)
`final room
`floor
Make Object Box 505, 25, 5, 50
Position Object 505, 1000, 1185, 932.5
Color Object 505, rgb(255,0,0)
`roof
Make Object Box 631, 25, 5, 75
Position Object 631, 1000, 1215, 920
Color Object 631, rgb(255,255,0)
`left wall
Make Object Box 757, 5, 35, 75
Position Object 757, 985, 1200, 920
Color Object 757, rgb(255,255,255)
`right wall
Make Object Box 882, 5, 35, 75
Position Object 882, 1015, 1200, 920
Color Object 882, rgb(0,0,0)
````````TEXTURECODE!``````````````
Load Image "floor.jpg",10
For LevelFloor = 500 to 505
Texture Object LevelFloor,10
Next LevelFloor
Load Image "Roof.jpg",11
For Roof = 624 to 631
Texture Object Roof,11
Next Roof
Load Image "walls.jpg",12
For LeftWall = 750 to 757
Texture Object Leftwall,12
Next Leftwall
For RightWall = 875 to 882
Texture Object Rightwall,12
Next Rightwall
Load Image "Backfrontwalls.jpg",13
For Backwall = 1125 to 1128
Texture Object Backwall,13
Next Backwall
For Frontwall = 1000 to 1006
Texture Object Frontwall,13
Next Frontwall
Load Image "fancywall.jpg",15
Texture Object 757,15
Texture Object 882,15
Texture Object 758,15
Texture Object 883,15
Load Music "Music.mp3",56789
Load Sound "Shoot.wav",1
Load Sound "Open.wav",2
Load Sound "Travel.wav",3
```Create special effects
Load Image "Effect.jpg",14
Make Particles 1,14,1,5
ghost particles on 1,50
SET PARTICLE EMISSIONS 1,1
```Create special effects
Load Image "Effect.jpg",14
Make Particles 2,14,1,5
ghost particles on 2,50
SET PARTICLE EMISSIONS 2,1
`Set State
State = State_Multiplayer
do
if State = State_Multiplayer
if keystate(59) = 1 and net game exists() = 0 `If F1 is pressed
Multiplayer_Connection()
endif
`debug()
Mechanics()
Multiplayer()
endif
sync
loop
Function Mechanics()
`````````````````
`MUSIC
````````````````
Loop Music 56789
POSITION PARTICLES 1, object position x(bullet1), object position y(bullet1), object position z(bullet1)
POSITION PARTICLES 2, object position x(bullet2), object position y(bullet2), object position z(bullet2)
`Portal Travel code
If Object Collision (Player1,Portal1)
Play sound 3
if object angle y (Portal2)=0
Position Object Player1,Object Position X(Portal2),Object Position Y(Portal2),(Object Position Z(Portal2)+10)
`yrotate object player1,0
endif
if object angle y (Portal2)=90
Position Object Player1,(Object Position X(Portal2)+10),Object Position Y(Portal2),Object Position Z(Portal2)
`yrotate object player1,90
endif
if object angle y (Portal2)=180
Position Object Player1,(Object Position X(Portal2)-10),Object Position Y(Portal2),Object Position Z(Portal2)
`yrotate object player1,180
endif
if object angle y (Portal2)=270
Position Object Player1,Object Position X(Portal2),Object Position Y(Portal2),(Object Position Z(Portal2)-10)
`yrotate object player1,260
endif
if object angle y (Portal2)=270
Position Object Player1,Object Position X(Portal2),Object Position Y(Portal2),(Object Position Z(Portal2)-10)
`yrotate object player1,260
endif
EndIf
If Object Collision (Player1,Portal2)
Play sound 3
if object angle y (Portal1)=0
Position Object Player1,Object Position X(Portal1),Object Position Y(Portal1),(Object Position Z(Portal1)+10)
`yrotate object player1,0
endif
if object angle y (Portal1)=90
Position Object Player1,(Object Position X(Portal1)+10),Object Position Y(Portal1),Object Position Z(Portal1)
`yrotate object player1,90
endif
if object angle y (Portal1)=180
Position Object Player1,(Object Position X(Portal1)-10),Object Position Y(Portal1),Object Position Z(Portal1)
`yrotate object player1,180
endif
if object angle y (Portal1)=270
Position Object Player1,Object Position X(Portal1),Object Position Y(Portal1),(Object Position Z(Portal1)-10)
`yrotate object player1,260
endif
EndIf
`Portal Visuals
SET CAMERA TO IMAGE 11,1,1024,1024,3
texture object portal2,1
SET CAMERA TO IMAGE 12,2,1024,1024,3
texture object portal1,2
`Player Move
If Scancode()=17 then move object player1,1
If Scancode()=31 then move object player1,-1
If Scancode()=30 then move object left player1,1
If Scancode()=32 then move object right player1,1
Move object down (player1),2
For LevelFloor = 500 to 505
IF Object collision (player1,LevelFloor)=1
Move object up (player1),2
ENDIF
Next LevelFloor
`left wall collisons
For LeftWall = 750 to 758
IF Object collision (player1,LeftWall)=1
position object player1,object position x(player1)+1, object position y(player1), object position z(player1)
ENDIF
Next LeftWall
`right wall collisons
For RightWall = 875 to 883
IF Object collision (player1,RightWall)=1
position object player1,object position x(player1)-1, object position y(player1), object position z(player1)
ENDIF
Next RightWall
`back wall collisons
For Backwall = 1125 to 1128
IF Object collision (player1,Backwall)=1
position object player1,object position x(player1), object position y(player1), object position z(player1)+1
ENDIF
Next Backwall
`front wall collisons
For Frontwall = 1000 to 1006
IF Object collision (player1,Frontwall)=1
position object player1,object position x(player1), object position y(player1), object position z(player1)-1
ENDIF
Next Frontwall
`Shooting and Portal Creation
Move object bullet1,2
If Mouseclick()=1
Play Sound 1
Position Object Bullet1,Object Position X(Player1),Object Position Y(Player1),Object Position Z(Player1)
yrotate object Bullet1, CAMY#
xrotate object Bullet1, CAMX#
endif
`Shooting and Portal Creation
Move object bullet2, 2
If Mouseclick()= 2 and net game exists() = 0
Play Sound 1
Position Object Bullet2,Object Position X(Player1),Object Position Y(Player1),Object Position Z(Player1)
yrotate object Bullet2, CAMY#
xrotate object Bullet2, CAMX#
endif
`Roof Portals
For Roof = 624 to 631
If Object Collision (Bullet1,Roof)
Play Sound 2
Position Object Portal1,Object Position X(Bullet1),Object Position Y(Bullet1),Object Position Z(Bullet1)
Position Object Bullet1,-1000,-1000,-1000
Position camera 11,Object Position X(Portal1),Object Position Y(Portal1),Object Position Z(Portal1)
yrotate object Portal1, 90
xrotate object Portal1, 90
zrotate object Portal1, 0
````
yrotate camera 11, 0
xrotate camera 11,90
zrotate camera 11,0
Endif
Next Roof
`Floor Portals
For LevelFloor = 500 to 505
If Object Collision (Bullet1,LevelFloor)
Play Sound 2
Position Object Portal1,Object Position X(Bullet1),Object Position Y(Bullet1),Object Position Z(Bullet1)
Position Object Bullet1,-1000,-1000,-1000
Position camera 11,Object Position X(Portal1),Object Position Y(Portal1),Object Position Z(Portal1)
yrotate object Portal1, 90
zrotate object Portal1, 90
xrotate object Portal1,0
``
yrotate camera 11,90
xrotate camera 11,0
zrotate camera 11,90
Endif
Next LevelFloor
`Left Wall Portlas
For LeftWall = 750 to 758
If Object Collision (Bullet1,LeftWall)
Play Sound 2
Position Object Portal1,Object Position X(Bullet1),Object Position Y(Bullet1),Object Position Z(Bullet1)
yrotate object Portal1, 90
xrotate object Portal1, 0
zrotate object Portal1, 0
Position camera 11,Object Position X(Bullet1),Object Position Y(Bullet1),Object Position Z(Bullet1)
Position Object Bullet1,-1000,-1000,-1000
```
yrotate camera 11, 90
zrotate camera 11, 0
xrotate camera 11, 0
Endif
Next LeftWall
`Right Wall Portals
For RightWall = 875 to 883
If Object Collision (Bullet1,RightWall)
Play Sound 2
Position Object Portal1,Object Position X(Bullet1),Object Position Y(Bullet1),Object Position Z(Bullet1)
yrotate object Portal1, 270
xrotate object Portal1, 0
zrotate object Portal1, 0
Position camera 11,Object Position X(Bullet1),Object Position Y(Bullet1),Object Position Z(Bullet1)
Position Object Bullet1,-1000,-1000,-1000
````
yrotate camera 11, 270
zrotate camera 11, 0
xrotate camera 11, 0
Endif
Next RightWall
`Forward Wall Portals
For Frontwall = 1000 to 1006
If Object Collision (Bullet1,FrontWall)
Play Sound 2
Position Object Portal1,Object Position X(Bullet1),Object Position Y(Bullet1),Object Position Z(Bullet1)
yrotate object Portal1, 180
xrotate object Portal1, 0
zrotate object Portal1, 0
Position camera 11,Object Position X(Bullet1),Object Position Y(Bullet1),Object Position Z(Bullet1)
````````````````````
yrotate camera 11, 180
zrotate camera 11, 0
xrotate camera 11, 0
Position Object Bullet1,-1000,-1000,-1000
Endif
Next FrontWall
`Back Wall Portals
For Backwall = 1125 to 1128
If Object Collision (Bullet1,Backwall)
Play Sound 2
Position Object Portal1,Object Position X(Bullet1),Object Position Y(Bullet1),Object Position Z(Bullet1)
yrotate object Portal1, 0
xrotate object Portal1, 0
zrotate object Portal1, 0
Position camera 11,Object Position X(Bullet1),Object Position Y(Bullet1),Object Position Z(Bullet1)
Position Object Bullet1,-1000,-1000,-1000
yrotate camera 11, 0
zrotate camera 11, 0
xrotate camera 11, 0
Endif
Next Backwall
`Roof Portals2
For Roof = 624 to 631
If Object Collision (Bullet2,Roof)
Play Sound 2
Position Object Portal2,Object Position X(Bullet2),Object Position Y(Bullet2),Object Position Z(Bullet2)
Position Object Bullet2,-1000,-1000,-1000
Position camera 12,Object Position X(Portal2),Object Position Y(Portal2),Object Position Z(Portal2)
yrotate object Portal2, 90
xrotate object Portal2, 90
zrotate object Portal2, 0
````
yrotate camera 12, 0
xrotate camera 12,90
zrotate camera 12,0
Endif
Next Roof
`Floor Portals2
For LevelFloor = 500 to 505
If Object Collision (Bullet2,LevelFloor)
Play Sound 2
Position Object Portal2,Object Position X(Bullet2),Object Position Y(Bullet2),Object Position Z(Bullet2)
Position Object Bullet2,-1000,-1000,-1000
Position camera 12,Object Position X(Portal2),Object Position Y(Portal2),Object Position Z(Portal2)
yrotate object Portal2, 90
zrotate object Portal2, 90
xrotate object Portal2,0
``
yrotate camera 12,90
xrotate camera 12,0
zrotate camera 12,90
Endif
Next LevelFloor
`Left Wall Portlas2
For LeftWall = 750 to 758
If Object Collision (Bullet2,LeftWall)
Play Sound 2
Position Object Portal2,Object Position X(Bullet2),Object Position Y(Bullet2),Object Position Z(Bullet2)
yrotate object Portal2, 90
xrotate object Portal2, 0
zrotate object Portal2, 0
Position camera 12,Object Position X(Bullet2),Object Position Y(Bullet2),Object Position Z(Bullet2)
Position Object Bullet2,-1000,-1000,-1000
```
yrotate camera 12, 90
zrotate camera 12, 0
xrotate camera 12, 0
Endif
Next LeftWall
`Right Wall Portals2
For RightWall = 875 to 883
If Object Collision (Bullet2,RightWall)
Play Sound 2
Position Object Portal2,Object Position X(Bullet2),Object Position Y(Bullet2),Object Position Z(Bullet2)
yrotate object Portal2, 270
xrotate object Portal2, 0
zrotate object Portal2, 0
Position camera 12,Object Position X(Bullet2),Object Position Y(Bullet2),Object Position Z(Bullet2)
Position Object Bullet2,-1000,-1000,-1000
````
yrotate camera 12, 270
zrotate camera 12, 0
xrotate camera 12, 0
Endif
Next RightWall
`Forward Wall Portals2
For Frontwall = 1000 to 1006
If Object Collision (Bullet2,FrontWall)
Play Sound 2
Position Object Portal2,Object Position X(Bullet2),Object Position Y(Bullet2),Object Position Z(Bullet2)
yrotate object Portal2, 180
xrotate object Portal2, 0
zrotate object Portal2, 0
Position camera 12,Object Position X(Bullet2),Object Position Y(Bullet2),Object Position Z(Bullet2)
````````````````````
yrotate camera 12, 180
zrotate camera 12, 0
xrotate camera 12, 0
Position Object Bullet2,-1000,-1000-,1000
Endif
Next FrontWall
`Back Wall Portals2
For Backwall = 1125 to 1128
If Object Collision (Bullet2,Backwall)
Play Sound 2
Position Object Portal2,Object Position X(Bullet2),Object Position Y(Bullet2),Object Position Z(Bullet2)
yrotate object Portal2, 0
xrotate object Portal2, 0
zrotate object Portal2, 0
Position camera 12,Object Position X(Bullet2),Object Position Y(Bullet2),Object Position Z(Bullet2)
Position Object Bullet2,-1000,-1000,-1000
yrotate camera 12, 0
zrotate camera 12, 0
xrotate camera 12, 0
Endif
Next Backwall
`FPS Camera!!
Position Camera 10,Object Position X(Player1),Object Position Y(Player1),Object Position Z(Player1)
`Mouselook
CAMY#=CAMY#+MouseMoveX()*.1
CAMX#=CAMX#+MouseMoveY()*.1
If CAMX#>90 and CAMX#<135 then CAMX#=90
If CAMX#>270 and CAMX#<225 then CAMX#=90
yrotate camera 10,CAMY#
xrotate camera 10,CAMX#
yrotate object player1,CAMY#
`xrotate object player1,CAMX#
`HUD
Circle Screen Width()/2,Screen Height()/2,5
EndFunction
Function Multiplayer_Connection()
`Retrieve the TCP/IP Connection Number
tcpip_num AS INTEGER
perform checklist for net connections
for i = 1 to checklist quantity()
if left$(checklist string$(i),15) = "Internet TCP/IP"
tcpip_num = i
endif
next i
`Find out if our user is a host or a client
userType AS STRING
clientIP AS STRING
print " "
print " "
print " "
print "Would you like to Create (Press 'c') or Join (Press 'j') a game?"
print " "
print "---NOTE---"
print " Firewall on both computers must be disabled in order to play online!"
sync
repeat
if lower$(inkey$()) = "j"
userType = "client"
print "What IP address are you connecting to? (Press any key to continue)"
print " "
print " "
print " ---How to find and input IP Address of game creator---"
print " "
print "To obtain IP address of computer creating the game"
print "1. Press Windows Start button on game creators computer"
print "2. Type 'cmd' in search"
print "3. In cmd, type 'ipconfig'"
print "4. Search for IPv4 Address"
print "5. Input IPv4 Address into gamscreen"
print " "
print "(Press any Key to Continue and enter IP Address)"
sync
wait key
cls
input clientIP
cls
endif
if lower$(inkey$()) = "c"
userType = "host"
endif
until userType <> ""
`Setup Connection
if userType = "host"
set net connection tcpip_num, " "
else
if userType = "client"
set net connection tcpip_num, clientIP
else
exit prompt "User type not specified","Multiplayer Error"
end
endif
endif
`Prompt the user for a name
playerName AS STRING
print "What would you like to call yourself? (Press any key to continue and input Name)"
sync
wait key
cls
repeat
input playerName
sync
until playerName <> ""
`Host: Create new game
if userType = "host"
create net game "Game", playerName, 2
mptype = 1
endif
`Find session
sessionID AS INTEGER
perform checklist for net sessions
join net game 2, playerName
endfunction
Function Multiplayer()
if memblock exist(1)
delete memblock 1
endif
`sets variables for message
X# as Dword
X# = int(object position x(Player1))
Y# as Dword
Y# = int(object position y(Player1))
Z# as Dword
Z# = int(object position z(Player1))
BulletX# as Dword
BulletX# = int(object position x(Bullet1))
BulletY# as Dword
BulletY# = int(object position y(Bullet1))
BulletZ# as Dword
BulletZ# = int(object position z(Bullet1))
AngleX# as Dword
AngleX# = int(object angle x(bullet1))
AngleY# as Dword
AngleY# = int(object angle y(bullet1))
AngleZ# as Dword
AngleZ# = int(object angle z(bullet1))
make memblock 1, 36
write memblock Dword 1, 0, X#
write memblock Dword 1, 4, Y#
write memblock Dword 1, 8, Z#
write memblock Dword 1, 12, BulletX#
write memblock Dword 1, 16, BulletY#
write memblock Dword 1, 20, BulletZ#
write memblock Dword 1, 24, AngleX#
write memblock Dword 1, 28, AngleY#
write memblock Dword 1, 32, AngleZ#
`inc sendMessageDelay
`if sendMessageDelay >= 100
`send player coordinates when movement keys are pressed
If Scancode()=17
send net message Memblock 0, 1, 1
endif
If Scancode()=31
send net message Memblock 0, 1, 1
endif
If Scancode()=30
send net message Memblock 0, 1, 1
endif
If Scancode()=32
send net message Memblock 0, 1, 1
endif
`endif
if mouseclick() = 1
send net message Memblock 0, 1, 1
endif
`resets delay for message send
`sendMessageDelay = 0
`checks to see if there are any waiting messages
get net message
if net message exists() = 1
`checks the type of message. Checks for 'Memblock' msgs
if net message type() = 4
net message Memblock 1
position object Player2, memblock Dword (1, 0), memblock Dword (1, 4), memblock Dword (1,
|
San Andreas Relaxation
I remember being completely blown away by one of the early Grand Theft Auto San Andreas’ screenshots when the game got announced. It’s not the one above, I couldn’t find it, but it was CJ barreling down a hill on a bike in the middle of the country side, back wheel off the ground, orange sunset silhouetting him. I think it must have been the organicness of the situation that had taken me. The country side was obviously the big show here, first time the series had got off the road so to speak. But I think the action played a big part, this little nimble bike clearly not glued the ground, in an environment that wasn’t predictable. That opportunity for things to go so wrong, but right there and then they were going right, that was cool. It was exhilarating even in concept, an emotion high of thought.
I’ve been feeling a bit anxious the past day or so. The two major projects on my hands is a multiplayer Portal clone made in Dark Basic, and a UDK level design. Neither of these are going poorly at the moment, they’re certainly not up to scratch yet, but things are moving in the right direction. What has me worried though is that like that moment in the San Andreas screenshot, the snapshot that is now is looking pretty good, but maybe a few seconds after it was taken CJ came off the bike. However, the schedule is looking good for the UDK level, and all the frame work tech for Dark Basic Portal is coming up solid, so rather than let me little moment of anxiety roll over other people with useless panicking, I decided to take an hour out of this evening to go driving.
Driving in San Andreas that is.
I like to go for walks a lot, with no objective in mind, no point to reach. Typically I will pick a direction, and walk. Simple as that. I will continue to walk until it gets boring. More and more I’m finding entertainment value in similar activities in the game worlds. Tonight on my San Andreas I mimicked the real world behavior in a lot of ways, I picked a direction, and started driving until the drive got boring. San Andreas and GTAIV for me share a similar design of having all this open world that exists to provide land marks and backdrops for a driving experience. You can explore them of course, these rolling green country sides or docklands or whatever takes your fancy, but the value in them for me in this scenario is that they exist. It’s like playspaces whose sole purpose is to back up the active play space. Vice City and even more so GTA3 don’t feature that, every mile in those games is used very well, but it means there is no dead space, no relaxation zone, no neutral horizon. And this isn’t anything to do with size, this is space use. San Andreas on the other hand has a lot of visually complex wasted space, cool things you see that at best come into mission play once or twice, if at all. This is what made the journey worth while tonight, being on the road and admiring all these complex spaces, but not having to engage with them, potentially with lack luster gameplay. Along with that is choice, this isn’t circuit driving. If I enjoyed that I would walk around my house 30 times instead of walking under the freeway into the industrial and port lands. It’s choosing which way you want to go, taking a gamble on what sights you see. It’s that little bit input into how the scenario plays out.
So from this I wonder, is there a possible interest out there in ‘relaxation’ games. Games that sit somewhere between making glowly lights by waving your hands in front of a webcam, and a full blown challenging gameplay experience. Say we took San Andreas, stripped out everything aside from the world and the driving, would it be as relaxing? Or is that part that makes it relaxing the act of me walking away from my gangster life, if only for 30 minutes, to cruise in visually stimulating country side. After all, isn’t that what I do when I go for my walks? Take the action of walking away from my computer and coding, if only for 30 minutes?
Mr Bazoo’s Massive Chicken Nugget Error
The game took weird turn yesterday, I’ll blog about this in full at some point because I was pretty happy with the design, it’s the result of reverse engineering two other games, but right now enjoy the giggle.

