Jump to content

Captain Spazer

Members
  • Posts

    169
  • Joined

  • Last visited

Everything posted by Captain Spazer

  1. I fixed up the AI and a couple of glitches and added a winning pose. I wish I could use the missiles with playercolors, would be cool to have the missiles as belts in the 1P mode and for every win you go up a rank and earn a new color for the belt, hehe...I have also mused around the idea of fatalities, which also would require the missiles. Like, kicking the head off at the last round.
  2. I'm trying to figure out how to do a calculation that checks if player0x = player1x at like, 20 and then continues checking for as long player0x is at 20 or closer to player1x, any ideas? Something like: if player0x = player1x && player0x >=20
  3. It might be a nice game someday ? I am quite happy with it, I am continuing work on it and I made a titlescreen with a selection between 1 player and 2 player mode, and I have just begun making the AI, this is the first time I am making an actual decision making AI, it can only walk forwards, backwards, stand still and avoid ring outs at the moment, I dread giving it attack choices... Look forward to the next update.
  4. Now it's turning into a proper fighting game. FEATURES SO FAR: Titlescreen 1P or 2P mode. Winning by hitting the opponent or making him step outside the ring 3 times. Sound effect when hit. Sound effect when blocking. 5 color variations of the gi. Input limiter - no more holding down the firebutton to make a wall of attacks. Increasingly difficult opponents. Blocking Score in 1P mode. Exciting new feature for this version: Improved Graphics! DOWNLOAD - Karate_V.1.3.bin CONTROLS: At the titlescreen choose your game mode by moving the cursor up or down with the joystick and flip the reset switch to move to the gi selection screen. At the gi selection screen move the joystick to the right to pick your gi color and flip the select switch to begin the game. Controlling the game: Move the joystick left or right to move Move the joystick in the opposite direction of your opponent to block attacks Push the joystick button to punch Move the joystick in the opposite direction of your opponent and push the joystick button to do a heavy kick Move the joystick in the direction of your opponent and push the joystick button to do a kick Move the joystick up and push the joystick button to do a jump kick Flip the reset button to restart the game. You defeat your opponent: Enjoy your victory and wait for a little while and the next match will begin. You are defeated: Flip the reset switch to restart the game. DPC+ Version I finaly managed to get into DPC+ and the sprite upgrade is amazing, I made a big karate guy by putting 2 sprites together, only it flickers, if anyone know a trick to reduce or get rid of the flickering, I would be extremely happy to learn! So far, the player can only walk across the screen, just wanted to show off the cool sprites, and maybe get some help with the flickering. Download : DPC_Karate_V.0.1.bin DPC+ progress: Next version of DPC+ version includes: Same engine as the none-DPC+ version More advanced animations Fatalities A judge An audience. How the game looks so far: Why is it taking so long for the release? Animating takes a long time, so far there are 22 sprites making up the animations and it's still not enough.
  5. Here's an attempt at an isometric boxer
  6. Thank you, glad you liked it ?
  7. I'm almost done with Dragon Hunt, a nerve-wrecking adventure game where you; the brave adventurer enters the dragons dungeon armed only with your wits and a couple of magic arrows. At this stage I am mainly hunting for bugs, if you encounter any bugs please report them. As you go through the dungeon you will notice that your senses tell you things about your surroundings. These symbols of your senses are located at the top of your screen: The wind symbol tells you that you feel a draft and that means an acid filled pit is nearby. The noise symbol tells you that you hear a noise and that means a bat is nearby. The arrow symbol tells you that you see an arrow nearby. The dragon symbol tells you that the dragon is nearby. At the bottom left side of the screen is your quiver that indicates how many arrows you have. If you step into the room with the acid pit, you fall to your death. If you step into the room the dragon is in, you will be incinerated. If you step into the room the bat is in, the bat will move you to a random room. If you step into the room with the arrow, you get an extra arrow, but only if you have less then 3, if you already have 3, you get 200 points instead. How do I win this thing? You win if you figure out where the dragon is, and shoot a magic arrow into the room that the dragon is in, this nets you 1000 points. Controls At the titlescreen flip the reset switch to begin the game. In the dungeon, you move from room to room by moving the joystick up, down, left and right. In the dungeon, you fire your arrow by holding down the firebutton and moving the joystick in the direction you wish to shoot. Upon a death scene, the score counter will blink when you can flip the reset switch to begin a new game again. What gives? The dungeon is really big and weird! The dungeon is a 4x4 grid, but the kicker is that it loops from top to bottom and side to side in order to add an extra challenge, keep in mind that you can't sense what is in a room at the far top/bottom or left/right, you can only sense what is next to your current room. Every room in the dungeon is color coded so you should quickly get a hang of orientation. Download - Dragon_Hunt_V0.9.bin
  8. Okay, I managed to make it all work, and I expanded the dungeon to a whopping of 16 rooms. I had to expand the romsize to 8k, though and I'm struggling with memory yet again for all the checks, there has to be a memory saving way to check when the dragon is in room 1 to give you a clue when you are in room 0,2 or 6. Map of the dungeon: [30 ][31 ][32 ][33 ] [20 ][21 ][22 ][23 ] [10 ][11 ][12 ][13 ] [A0 ][A1 ][A2 ][A3 ] Basically, it's a first person hunt the wumpus with a skin. EDIT: I managed to make the code smaller and free up a lot of memory by making the code a lot more efficient. Now my only trouble is how I'm going to do a check if both the dragon and the pit is next to the room the player is in. The piece of code: rem RANDOM COUNTERS Dragon_Spawner = (rand&15) + 1 Pit1_Spawner = (rand&15) + 1 rem TRANSLATES RANDOM COUNTER INTO POSITION if Dragon_Spawner = 1 then Dragon_Position = 1 if Dragon_Spawner = 2 then Dragon_Position = 2 if Dragon_Spawner = 3 then Dragon_Position = 3 if Dragon_Spawner = 4 then Dragon_Position = 10 if Dragon_Spawner = 5 then Dragon_Position = 11 if Dragon_Spawner = 6 then Dragon_Position = 12 if Dragon_Spawner = 7 then Dragon_Position = 13 if Dragon_Spawner = 8 then Dragon_Position = 20 if Dragon_Spawner = 9 then Dragon_Position = 21 if Dragon_Spawner = 10 then Dragon_Position = 22 if Dragon_Spawner = 11 then Dragon_Position = 23 if Dragon_Spawner = 12 then Dragon_Position = 30 if Dragon_Spawner = 13 then Dragon_Position = 31 if Dragon_Spawner = 14 then Dragon_Position = 32 if Dragon_Spawner = 15 then Dragon_Position = 33 if Dragon_Spawner = 16 then Dragon_Position = 33 if Pit1_Spawner = 1 then Pit1_Position = 1 if Pit1_Spawner = 2 then Pit1_Position = 2 if Pit1_Spawner = 3 then Pit1_Position = 3 if Pit1_Spawner = 4 then Pit1_Position = 10 if Pit1_Spawner = 5 then Pit1_Position = 11 if Pit1_Spawner = 6 then Pit1_Position = 12 if Pit1_Spawner = 7 then Pit1_Position = 13 if Pit1_Spawner = 8 then Pit1_Position = 20 if Pit1_Spawner = 9 then Pit1_Position = 21 if Pit1_Spawner = 10 then Pit1_Position = 22 if Pit1_Spawner = 11 then Pit1_Position = 23 if Pit1_Spawner = 12 then Pit1_Position = 30 if Pit1_Spawner = 13 then Pit1_Position = 31 if Pit1_Spawner = 14 then Pit1_Position = 32 if Pit1_Spawner = 15 then Pit1_Position = 33 if Pit1_Spawner = 16 then Pit1_Position = 33 rem IF THE ROOM THE PLAYER IS IN IS NEXT TO THE DRAGON OR THE PIT, THE BACKGROUND CHANGES COLOR if Room_Number = Dragon_Position - 1 then COLUBK = $34 if Room_Number = Dragon_Position + 1 then COLUBK = $34 if Room_Number = Dragon_Position + 10 then COLUBK = $34 if Room_Number = Dragon_Position - 10 then COLUBK = $34 if Room_Number = Pit1_Position - 1 then COLUBK = $A0 if Room_Number = Pit1_Position + 1 then COLUBK = $A0 if Room_Number = Pit1_Position + 10 then COLUBK = $A0 if Room_Number = Pit1_Position - 10 then COLUBK = $A0
  9. I'm fiddling with a 3D dungeon crawler, the dungeon is made up of a 3x3 grid where each room is stored in variable "a" 0 - 9 And the big bad monster is stored in variable "h" which randomly chooses between number 1-9 My question is: How do I make it so that the number that "h" chooses, like 3 for example, a sprite is shown in room number 3? aka variable "a" = 3 EDIT: I figured it out, I could simply do an "if h = a" calculation. Now I do have another question in a similar vain, but a bit more complicated that I need help optimizing. Any thoughts on how to make something like this more efficient? My thoughts is like this: If the dragon is calculated to be in room a1, and the player is in an adjacant room, in this case adjacant rooms would be a4 and a0 then player1's sprite is shown as an icon on the screen, indicating that the dragon is in an adjacant room. The way I set the code up, it works sometimes, sometimes the icon shows, sometimes the icon does not show up, also it eats up a big chunk of memory. rem dragon is located in a1 if n = 1 && a = 4 then player1: %11111111 %11111111 %00100011 %00000011 %01001011 %11111111 %11110101 %00001111 end if n = 1 && a = 0 then player1: %11111111 %11111111 %00100011 %00000011 %01001011 %11111111 %11110101 %00001111 end rem dragon is located in a 2 if n = 2 && a = 5 then player1: %11111111 %11111111 %00100011 %00000011 %01001011 %11111111 %11110101 %00001111 end if n = 2 && a = 0 then player1: %11111111 %11111111 %00100011 %00000011 %01001011 %11111111 %11110101 %00001111 end rem dragon is located in a 3 if n = 3 && a = 4 then player1x = 50 : player1y=50 : player1: %11111111 %11111111 %00100011 %00000011 %01001011 %11111111 %11110101 %00001111 end if n = 3 && a = 0 then player1x = 50 : player1y=50 : player1: %11111111 %11111111 %00100011 %00000011 %01001011 %11111111 %11110101 %00001111 end if n = 3 && a = 5 then player1x = 50 : player1y=50 : player1: %11111111 %11111111 %00100011 %00000011 %01001011 %11111111 %11110101 %00001111 end if n = 3 && a = 6 then player1x = 50 : player1y=50 : player1: %11111111 %11111111 %00100011 %00000011 %01001011 %11111111 %11110101 %00001111 end rem dragon is located in a 6 if n = 6 && a = 3 then player1x = 50 : player1y=50 : player1: %11111111 %11111111 %00100011 %00000011 %01001011 %11111111 %11110101 %00001111 end if n = 6 && a = 7 then player1x = 50 : player1y=50 : player1: %11111111 %11111111 %00100011 %00000011 %01001011 %11111111 %11110101 %00001111 end if n = 6 && a = 8 then player1x = 50 : player1y=50 : player1: %11111111 %11111111 %00100011 %00000011 %01001011 %11111111 %11110101 %00001111 end rem dragon is located in a 7 if n = 7 && a = 6 then player1x = 50 : player1y=50 : player1: %11111111 %11111111 %00100011 %00000011 %01001011 %11111111 %11110101 %00001111 end if n = 7 && a = 4 then player1x = 50 : player1y=50 : player1: %11111111 %11111111 %00100011 %00000011 %01001011 %11111111 %11110101 %00001111 end rem dragon is located in a 8 if n = 8 && a = 6 then player1x = 50 : player1y=50 : player1: %11111111 %11111111 %00100011 %00000011 %01001011 %11111111 %11110101 %00001111 end if n = 8 && a = 5 then player1x = 50 : player1y=50 : player1: %11111111 %11111111 %00100011 %00000011 %01001011 %11111111 %11110101 %00001111 end
  10. I have been trying to figure out how pfvline works but I can't quite seem to get the hang of putting a hole in the wall. Atm I got this: "pfvline 31 0 10 on" to make a solid long wall and scroll it to the left. Any ideas how to knock a hole in it at a random y position?
  11. I am incompetent when it comes to math, hoping someone more adept could help me out with this one: Code for collision detection for 8x8 sprite, need it to be for a 16x8 sprite rem player moves right if !joy0right then goto __Skip_Joy0_Right if player1x >= _P_Edge_Right then goto __Skip_Joy0_Right temp5 = (player1y-1)/8 temp6 = (player1x-9)/4 if temp6 < 34 then if pfread(temp6,temp5) then goto __Skip_Joy0_Right temp3 = (player1y-8)/8 if temp6 < 34 then if pfread(temp6,temp3) then goto __Skip_Joy0_Right __Skip_Joy0_Right rem player moves left if !joy0left then goto __Skip_Joy0_Left if player1x <= _P_Edge_Left then goto __Skip_Joy0_Left temp5 = (player1y-1)/8 temp6 = (player1x-18)/4 if temp6 < 34 then if pfread(temp6,temp5) then goto __Skip_Joy0_Left temp3 = (player1y-8)/8 if temp6 < 34 then if pfread(temp6,temp3) then goto __Skip_Joy0_Left
  12. Would be neat, yeah. I got a basic engine going: Jump on enemies, breaking blocks, walking, jumping, running and super jumping. I need to figure out how to do better platforming enemies as for now they can't detect walls and that makes things tricky when there are holes in the ground, heh.
  13. This is how I do extremely simple platforming enemy AI that can walk and fall of ledges: rem gravity player0y = player0y + 1 rem enemy stops when in contact with playfield if collision(player0,playfield) then player0y = player0y - 1 rem enemy walks right or left if it touches the screen borders if u = 0 then _P0_L_R = _P0_L_R - 0.35 if u = 1 then _P0_L_R = _P0_L_R + 0.35 if player0x = 15 then u = 1 if player0x = 140 then u = 0
  14. I kind of figured out a way to do it, making pretty good mario styled platforming sections with good holes and some higher platforms in the sky. With enough pieces a randomly generated mario platformer would be doable: rem Generated 26/04/2020 12:55:57 by Visual bB Version 1.0.0.554 rem ********************************** rem *<filename> * rem *<description> * rem *<author> * rem *<contact info> * rem *<license> * rem ********************************** a = 0 player0x = 20 : player0y = 72 main COLUBK=$00 COLUPF=$0E COLUP0=$44 scorecolor = $0E player0: %01100110 %00100100 %01011010 %00111100 %00011000 %00011100 %00011000 %00000000 end rem starting with full row of blocks on ground if a = 0 then var40=%11111111 : var41=%11111111 : var42=%11111111 : var43=%11111111 : var20=%00000000 : var21=%00000000 : var22=%00000000 : var23=%00000000 : a = 5 rem spawns a row at lowest level if a = 1 then var40=%11111111 : var41=%11111111 : var42=%11111111 : var43=%00000011 : var20=%00000000 : var21=%00000000 : var22=%00000000 : var23=%00000000 : a = 5 rem air platforms if a = 2 then var40=%11111111 : var41=%11111111 : var42=%11111111 : var43=%00001111 : var20=%00000000 : var21=%00000000 : var22=%00000000 : var23=%11000000 : a = 5 if a = 3 then var40=%11111111 : var41=%11111111 : var42=%11111111 : var43=%00001111 : var20=%00000000 : var21=%00000000 : var22=%00000000 : var23=%11110000 : a = 5 drawscreen rem scrolls playfield b = b + 1 if b = 1 then pfscroll left left if b >= 10 then b = 0 c = c + 1 if c = 255 then a = (rand&3) : c = 0 goto main
  15. I'm experimenting with a randomly generated horizontal scrolling playfield, trying to make something like the levels in the Game & Watch version of Super Mario Bros, it works but it's way to random, and I was hoping someone had some tips on how to store premade parts of the playfield that could be choosen and placed at random as the level scrolls in. My code so far simply involves turning pfpixels on at points where the ground and blocks should be: a = 0 player0x = 20 : player0y = 72 main COLUBK=$00 COLUPF=$0E COLUP0=$44 scorecolor = $0E player0: %01100110 %00100100 %01011010 %00111100 %00011000 %00011100 %00011000 %00000000 end rem spawns a row at lowest level if a = 0 then pfpixel 31 10 on rem spawns blocks at highest level if a = 1 then pfpixel 31 2 on rem spawns blocks at middle level if a = 2 then pfpixel 31 6 on if a = 3 then pfpixel 31 6 on : pfpixel 31 10 off : pfpixel 31 2 off drawscreen rem scrolls playfield b = b + 1 if b = 1 then pfscroll left if b >= 31 then b = 0 c = c + 1 if c = 60 then a = (rand&3) if c = 61 then c = 0 goto main
  16. Thank you, my issue is that I don't read through my codes carefully enough. something I REALLY need to work on it seems.
  17. While experimenting with a randomly scrolling maze, I managed to make a maze that's pretty similar to Entombed, I'll share it here for those who are curious about doing similar games: Bin - Entombed Maze.bin Bas - Entombed Maze.bas
  18. I seem to be over my head with this one, I'm doing a platformer experiment, the engine works perfectly, but implementing enemies seems to be problematic: Any ideas on what might be wrong with the code below? In general: There are 0-3 states of player0: 0 means no spawn, 1 means an enemy, 2 is also an enemy, 3 is gold coins for you to pickup. Picking up gold coins work, but colliding with player0 when player0 isn't gold coins does not register at all, player0 just passes through player1 without lowering pfscore1 at all. rem player picks up gold if Monster_Type > 2 && collision(player0,player1) then score = score + 100 : player0x = 255 : player0y = 255 : Monster_Type = 0 rem take damage if player0 isn't gold if Monster_Type < 3 && collision(player0,player1) then pfscore1/4
  19. I got it working again, it turned out I had missed a space.
  20. I got a mystical error message I cannot identify, any ideas what this error message means? C:\Program Files\Stella\VBB\Projects\Castle Dracula\default.bas.asm (2875): error: Value in 'lda #1000' must be <$100. Unrecoverable error(s) in pass, aborting assembly! Complete. Errors were encountered during assembly.
  21. Oh yeah, thanks guys! Silly of me.
  22. I'm having a bit of trouble with an idea, I'm using the multisprite kernel and I got 4 of the sprites as things to pick up to get score, this works fine. I'm trying to get a counter working so that once the four items have been collected an event triggers, but I can't get it to trigger. This is the code I'm using for collision and adding score: if (player0y + 6) >= player2y && player0y <= (player2y + 10) && (player0x + 10) >= player2x && player0x <= (player2x - 1) then score = score + 1 : player2y=200 if (player0y + 6) >= player3y && player0y <= (player3y + 10) && (player0x + 10) >= player3x && player0x <= (player3x - 1) then score = score + 1 : player3y=200 if (player0y + 6) >= player4y && player0y <= (player4y + 10) && (player0x + 10) >= player4x && player0x <= (player4x - 1) then score = score + 1 : player4y=200 if (player0y + 6) >= player5y && player0y <= (player5y + 10) && (player0x + 10) >= player5x && player0x <= (player5x - 1) then score = score + 1 : player5y=200 Now, if I was to add at the end for example p = p + 1 when colliding with the sprite, it does nothing. My none working experiment: if p <=4 && player0x < player1x then _P1_L_R = _P1_L_R - 0.10 : REFP1=0 if p <=4 && player0x > player1x then _P1_L_R = _P1_L_R + 0.10 : REFP1 = 8 if p <=4 && player0y < player1y then _P1_U_D = _P1_U_D - 0.10 if p <=4 && player0y > player1y then _P1_U_D = _P1_U_D + 0.10 if (player0y + 6) >= player2y && player0y <= (player2y + 10) && (player0x + 10) >= player2x && player0x <= (player2x - 1) then score = score + 1 : player2y=200 : p = p + 1 if (player0y + 6) >= player3y && player0y <= (player3y + 10) && (player0x + 10) >= player3x && player0x <= (player3x - 1) then score = score + 1 : player3y=200 : p = p + 1 if (player0y + 6) >= player4y && player0y <= (player4y + 10) && (player0x + 10) >= player4x && player0x <= (player4x - 1) then score = score + 1 : player4y=200 : p = p + 1 if (player0y + 6) >= player5y && player0y <= (player5y + 10) && (player0x + 10) >= player5x && player0x <= (player5x - 1) then score = score + 1 : player5y=200 : p = p + 1 Since this code doesn't say what happens when p > 4 then player1 should stop.
  23. While on the subject of math, how would I go about looping the spawn of the pfpixels for example 10 times? My current code seems to be wonky, sometimes I get 8 pfpixels, sometimes 9 and sometimes 10: Loop_Lettuce d = 0 Place_Lettuce temp1 = (rand&31) temp2 = (rand&14) - 1 pfpixel temp1 temp2 on d = d +1 if d >= 10 then goto main goto Place_Lettuce
  24. Ahh, that was very hard, but I got it working now that I understood that the direction of movement mattered.
×
×
  • Create New...