' Just in case 'pixel' fails... lol
if BoxY > height(primary)
vSpeed = 0
wait 1000
end
endif
endfunc
function Draw()
' Ground
set color ground
draw rect 0, 460, 640, 20, 0
' Box
set color Box
draw rect BoxX, BoxY, BoxW, BoxH, 0
' Pixel
' This indicator pixel is drawn one pixel below the box center.
' The actual pixel being tested is below the left corner of the box.
set color 255, 0, 255
draw pixel BoxX + 15, BoxY + BoxH
endfunc
Unfortunately this did not work... "Read the manual", I hear you say... "pixel(x,y) Returns the color at position (x, y) as an array [r, g, b, a] with RGBA intensities in the range [0 .. 255].
I am hoping that my programing skills are the source of the problem otherwise this maybe another "can of worms".... sorry...
I'm taking a break from working on the s3d (simple 3d) library. It's included in this release, and now I want to see if it's possible to make a game using it. It is quite slow now, but I promise you that it will get faster when I implement better ways to do hidden surface removal and optimize all the sloppy code. I wrote some documentation for the library yesterday (S3D.pdf) and there are some examples under n7/examples/s3d_library, but you really need to have some basic knowledge about 3D programming and maybe played around with legacy OpenGL to use this thing. As I mentioned earlier, it's not meant to be a game engine - that comes later.
I have found a slight problem with the TM on Linux. If you look at the GUI there is a cosmetic difference.
The cosmetics do not bother me... The lower 4 radio buttons cannot be selected. At the moment, it is not really an issue, as I seem to be using only the to top 3 buttons. Just to confirm the problem, I ran N7 TM in Windows 7 via Virtualbox (refer to image) and the Win7 version looked fine.
As I am only starting to work my way through the Editor, I am not requiring the use of the "angled" collision detection yet... but you never know.... Moo Ha Ha Ha...
As I stated earlier, I am not concerned about the cosmetic differences, but those lower buttons could end being an issue...
I was going through some old drives and noticed that I have a tendency to concentrate on "old" games... Cannot figure out why... lol
I found an old text-based Moon Lander from the late 70's... and got to thinking... (Ok. Stop laughing...) I have seen "many" versions of this game for most machines that I have owned in the past... For nostalgia, I was thinking of trying my hand at an N7 version... Which got me to thinking again... (Really. Still laughing? *sigh*)
I am pretty clear on the game elements... except for one... Collision...
Oh. I know how to do simple AABB and Circular collisions but, when it comes to colliding with the "landscape", I am at a loss as to finding an efficient method of detection.
Most of my "programming" has been using Basic. Unless the "Basic" has a sprite collision system built in - detecting collision has been either by AABB, Circular or Colour detection. The latter would work for the "landscape" but it is SO inefficient... I cannot use AABB or Circular as the landscape is irregularly shaped... Oh. text was SO much easier... lol
I have always enjoyed the "old stuff"... It is probably because of the way I think... (Nope. I am not going to say it...)
Any suggestions, or constructive criticisms, are always appreciated.
J
(PS: I hope that everyone will have a great and safe Easter break...)
Question
Case 1 : I think ... [for...next] is not the best way to read text file
Case 2 : I think this is the best way, but [do..until frln(f) = "unset"] gives unexpectedly output
Please advice me what is the best way to read the whole text file ?
Thank you.
Code:
set window "readfile",400,400
f = openfile("story.txt")
'Case 1
'correctly read file
for i = 0 to 21
wln frln(f)
i = i + 1
next
'Case 2
'uncorrectly read file
do
wln frln(f)
until frln(f)="unset"
'-----------------------------------
' TINY GOLF
' =========
' Help Mario to make a hole-in-one
' and achieve The World Record
' of The Tiny Golf
'
' Made with N7_240310
'
' Controls :
' 1. LEFT click and drag from O to aim
' 2. ENTER to swing the golf club
' 3. ESC to continue / quit
'
' Acknowledgements :
' - polygon, polyline.n7, sfx.n7 by Marcus
' - some sound effects are copied from the "Pool" game by Kevin
' hit_ball_sound
' oh_no_sound
' - draggable point on a polyline by Kevin
' https://naalaa.com/forum/thread-90-post-493.html#pid493
' - sprite https://www.spriters-resource.com/game_boy_gbc/mariogolf/sheet/12294/
'----------------------------------
'-----------------
' INITIALIZATION
'-----------------
#win32
include "assets/sound_effect.n7"
include "polyline.n7"
set window "TINY GOLF",250,180,false,3
set redraw off
'color definition
visible black_alpha = [0,0,0,24]
visible black = [0,0,0]
visible white = [255,255,255]
visible gray = [150,150,150]
visible green_ = [0,80,0]
visible green = [51,153,10,24]
visible yellow = [200,200,0]
'cartesian coordinates
visible ox = 50,oy = 165 'origin point
axy = 360-45 'angle between x and y-axis
length = 150 'length of axis
'------------
' MAIN LOOP
'------------
while not keydown(KEY_ESCAPE,true)
'----------------------
' title screen
'----------------------
if title=true then Action(4,0,0)
'----------------------
' screen layout
'----------------------
'1. golf course
set color green; draw poly grass,1
set color white; draw poly grass
set caret ox,oy;wln "O"
set color black; draw ellipse holex,holey,3,2,1
set color white; draw ellipse holex,holey,3,2
'supporting lines
'set color yellow; draw line 0,70,width(primary),70
'set color yellow; draw line 144,0,144,height(primary)
'set color yellow; draw line 224,0,224,height(primary)
'set color yellow; draw line ox,oy,holex,holey
'set color yellow; draw line 117,0,117,height(primary)
'3. Score
set color white; set caret 10,40; wln "Timer"; wln round(score)
if round(score) >= 1 then
score = score - 0.05
else
free distance
hit = false
Say("TIME OUT..ESC")
redraw
play sound oh_no_sound
do;wait 1;until keydown(KEY_ESCAPE,true)
ResetPoints()
score = 50
endif
'----------
' Control
'----------
'Left click mouse
if mousebutton(0) then
points[1][0] = mousex()
points[1][1] = mousey()
'set how high your golf ball
set color black_alpha; cls 'clear screen
if drawline = true or stay then
set color yellow
draw line points[0][0],points[0][1],points[1][0],points[1][1]
draw rect points[1][0] - 8, points[1][1] - 8,16,16
Say("ENTER to shoot")
stay = true
else
Say("Drag point from O")
endif
' 2. ENTER to move ball along the PolyLine path
if keydown(KEY_RETURN,true) then
Action(3,0,2)
play sound hit_ball_sound
hit = not hit 'toggle on/off
stay = false
endif
if hit then
points[0]=[ox,oy]
points[1]=[p10,p11]
points[2]=[p20,p21]
'points[2] coordinate
p20 = p10*2
'p21 is on a line between (ox,oy) and (holex,holey)
'the equation of the line is y = -0.71x + 200.45
p21 = -0.71*p20 + 200.45
set caret width(primary)/2, height(primary) - 25
set color white;draw image Player.swing,Player.x,Player.y,2 'stay at the position during the shoot
'stop the ball and clear the remaining path's distance
if round(distance) > 0.95*path.GetLength()then
free distance
hit = false
Say("Drag square from O")
endif
'collision detection between the ball and the hole
'1.distance between the center of the ball and the center of the hole
cbh = sqr(pow(holex-pos[0],2)+pow(holey-pos[1],2))
if cbh<(2+3) then
Say("Hole-in-one")
PlayTune(1)
free distance
redraw
hit = false
do;wait 1;until keydown(KEY_RETURN,true) 'pause
endif
endif
'-------------------------------
' Standy by
'-------------------------------
if hit=false then Action(0,0,1)
redraw
fwait 30
wend
'-----------
' FUNCTIONS
'-----------
function Action(type,cell1,cell2)
set color white
select type
case 0 'stand by position
Player.standby = loadimage("assets/standby.png",2,1)
timer.Duration = (clock() - timer.Start)/1000
if round(timer.Duration)%2 = 0 then
i=cell2
else
i=cell1
endif
draw image Player.standby, Player.x, Player.y, i
case 1 'Mario's face animation
Player.face = loadimage("assets/say.png",3,1)
draw image Player.face, 20,5,j
timer.Duration = (clock() - timer.Start)/1000
if round(timer.Duration)%2 = 0 then
if j <= 1 then
j = j+1
endif
else
j = 0
endif
case 3 'swing the golf club
for k = cell1 to cell2
set color black
draw rect Player.x,Player.y,width(Player.standby),height(Player.standby),1
set color white
Player.swing = loadimage("assets/swing.png",3,1)
draw image Player.swing, Player.x, Player.y,k
redraw
wait 250
next
set color black; draw rect Player.x,Player.y,width(Player.standby),height(Player.standby),1
redraw
case 4'title screen
title = false
set color white
set caret width(primary)/2,0
center "---------"
center "Tiny Golf"
center "---------"
center
center "Help Mario"
center "to make a hole-in-one"
center "and achieve"
center "The World Record"
center "of The Tiny Golf"
center
center "Press ESC to continue"
redraw
PlayTune(1)
do; wait 1; until keydown(KEY_ESCAPE,true)
endsel
endfunc
function Say(message)
set color green_; draw rect 0,0,width(primary),35,1 '1 = filled rectangle
set color white; set caret width(primary)/2,15; center message
'Mario's face
Action(1,0,2)
draw line 0,35,width(primary),35
endfunc
I share with you a simplified version of arkanoid, to move use the arrows and to pause the "p" key. There are three levels and in each level the ball will move faster.
There is one thing that I have not been able to add and I was looking for how to do it but I did not find anything, I wanted to be able to control the movement of the ball, when the ball collides with the left or the right part of the edge of the player's racket I wanted the ball to If he moved in that direction with spin, like when a soccer player hits the ball with spin, I think it would have been more fun.
I put the missing file here because it won't let me put more than 5 at a time.
To start press the enter key and to start moving the ball press the space key.
This is not meant as "self promotion" or promotion for the company at which I work. I just thought someone might be interested in a game like this.
I started working at a really small game company back in ... 2006, I think. The first game I was involved with was called Fairy Treasure. I did all the programming, made all the graphics (yes, it's programmer art) and designed many of the levels. Last autumn we decided to port it to a more modern engine (SDL) and release it on Steam. And now it's on sale:
I had planned to release this build, mostly a bug fix, last weekend. But I was in Stockholm, and then I got a really nasty cold which prevented my brain from functioning. If your programs have been crashing while you were trying to use 'draw image xform' or 'draw poly image', this should solve it.