TweetFollow Us on Twitter

Talking HangMan
Volume Number:2
Issue Number:4
Column Tag:Basic School

Play the Talking HangMan Game!

By Dave Kelly, Engineer, MacTutor Editorial Board

This month I would like to thank Clear Lake Research for kindly sending me a copy of their SpeechLib Library. [Available through MacTutor's Technical Software Store. -Ed] As computers become smarter and smarter, we are sure to find those that will do many of the same tasks that humans do. Already, I get sales recordings on my telephone from some computer that goes through a list of numbers and presents their sales pitch. We can't even comprehend how far computers will take us in the future. In fact, in 1979 when I bought my first Apple ][+, I was thrilled to have that much capability. I never thought that computers would become much different, until Macintosh came along.

I've seen a large variety of speech synthesizer cards for the Apple ][. When they first came out, the speech was hardly recognizable. I've seen good ones and bad ones. When I got my Macintosh, I was excited that the Mac had a built in synthesizer, however, I was disappointed to find that the software to program the synthesizer had not been written. Well, enough talk. The CLR SpeechLib Libraries provide a low cost way to provide speech from within your MSBASIC programs (version 2.0 or greater).

MacinTalk is a copyrighted program of Apple Computer, Inc. licensed to Clear Lake Research to distribute for use with SpeechLib. SpeechLib allows you to use the MacinTalk speech synthesis system developed by Apple from MSBASIC. SpeechLib statements are similar to other CLR library statements as we have discussed in past issues of MacTutor.

Speaking of libraries, I hereby wish to make a correction to a statement that I made a couple of months ago. I stated that for some reason when you use DEFINT a-z an error results. Well, the error was partially mine. When you call a library, the library name (example: SpeechOn) will be specified as if it were an integer variable if you have used DEFINT a-z. The library name must be declared as a single precision variable type by placing an exclaimation point after the library name (example: SpeechOn! ). Therefore, when you want to use DEFINT and libraries, you should use an exclaimation point after the library name.

If you are using MacinTalk from another language, parts of the following discussion may be useful to you. SpeechLib accepts either English or phonemic spellings. Phonemic spellings produce much better sounding speech and are highly recommended. However, English is much easier to use. Phonemic sounds are shown below:

By mixing combinations of these phonemic spellings, you can form the sound that you want. You can see why it takes more time to program in phonemic spellings; each sound must be matched to the phonemes.

PHONEMIC SOUNDS

VOWELS

AA hot AX about IX solid

AE bat EH bet IY beet

AH under ER bird OH border

AO talk IH bit UH look

AX and IX should not be used in stressed syllables!

CONSONANTS

B but K camp T toy

CH check L yellow TH thin

/C loch M men V very

D dog N men W away

DH then NX sing Y yellow

F fed P put Z has

G guest R red ZH pleasure

/H hole S sail

J judge SH rush

DIPHTHONGS

AW power EY made OY boil

AY hide OW low UW crew

SPECIAL SYMBOLS

DX pity Q kitt_en RX car

LX call QX silent vowel UL=AXL

SHORT HAND SYMBOLS

IL=IXL IM=IXM IN=IXN

UL=AXL UM=AXM UN=AXN

digits 1-9 stress marks - phrase delimiter

. sentence terminator , clause delimiter

? sentence terminator ( ) noun phrase delimiters

Also included with the SpeechLib disk is the program ExceptionEdit. This program was witten by Apple to be used to create a dictionary of words and their phonemic spellings. When a word in the dictionary is encountered by MacinTalk, the phoemic spelling in the dictionary determines the pronounciation of the word. This makes using English instead of phonemic spellings possible for hard to pronounce (or spell) words. It is possible to mispell words in english to 'fool' MacinTalk into pronoucing them correctly. If you do this, then the exception dictionary is not necessary. However, you may want to read aloud a text file which must have correct spellings. You should create an exceptions dictionary in this case.

There are two SpeechLib statements used to initialize the speech output. First open the Library and define variables for the handle! (SpeechHand!=0), for possible speech errors (SpeechErr%=0), and for the phonemic spelling of the string to be output (Phon$=""). The statement SpeechOn "",SpeechHand!,SpeechErr% turns on and initializes MacinTalk.

To use english spellings with SpeechLib, you first must put the desired text into a string (example: Eng$). MacinTalk understands phonemic spellings, therefore your string must be converted before the string can be spoken. The SpeechLib command for this is:

 ReaderString SpeechHand!,Eng$, Phon$,SpeechErr%.

To use phonemic spellings or the converted Eng$ spelling (Phon$), you use the statement:

 SoundOutString SpeechHand!, Phon$, SpeechErr%

Statements are provided to change the pitch, mode and speech rate of the speech (SpeechPitch and SpeechRate). The pitch can range from 65-500. The mode selects a natural or a robotic sounding voice. The speech rate can be adjusted from 85-425 words per minute. The volume is controlled by poking the volume desired into address &H208. The range of the volume is 0 to 7, where 7 is the loudest.

The best way to sample the speech and test out phrases you want to use is to use the speech demo provided on the SpeechLib disk. This way you can find out how words sound before using them in your program. Phonemic spellings take much longer time to program until you start to learn the phonemic spelling chart. Some words may take some work to get them to sound just like you want. In fact, there are some words that I couldn't quite get to sound like I wanted. Be careful to use uppercase only for phonemic spellings and follow the Phonemic Spelling table to obtain the desired sounds. Try some out till they have the sound you want. The limitation is in the capabilities of the speech synthesizer. I found that the first few sentences that I heard were hard to understand. After getting used to it, I have no trouble distinguishing the speech. I tried it out on my 4 year old boy who seemed to catch on to the sound after a few sentences also. All things considered, the Macintosh still has a better synthesizer than I had seen prior to it's design in the early eighties (83-84?).

HANGMAC

The inspiration for HangMac came from the hand held Speak-N-Spell games. Word type games are probably the most suited to adding speech. I give you this example to show how speech could be added to a program, even after it was already written. In fact, most of the programming time was spent on the game itself and not the speech. Adding speech was a very simple task.

HangMac was written first without speech. Two basic modules were added to introduce speech. The first one I call InitTalk.

InitTalk:
    SpeechHand!=0:SpeechErr%=0:Phon$=""
    hertz%=190:mode%=0:Wpm%=125
    SpeechOn! "",SpeechHand!,SpeechErr%
    SpeechPitch! SpeechHand!,hertz%,mode%
    SpeechRate! SpeechHand!,Wpm%
    POKE &H208,5
    RETURN

InitTalk sets up all the variables used by SpeechLib. The rate, pitch, volume and mode is set up here. The other major speech module is Speakup:

Speakup:

ReaderString! SpeechHand!, Eng$,Phon$,SpeechErr%

SoundOutString! SpeechHand!,Phon$,SpeechErr%

RETURN

Speakup converts the string Eng$ to Phonemic spelling (Phon$) and outputs Phon$ to MacinTalk. Other than these two routines, the only requirement is to open and close the library properly. A note: MacinTalk must be on the same disk as BASIC in order to work. Any exception dictionaries must also be on the same disk as BASIC in order to work. You may note that some words sent to the SpeechLib routines appear to be mispelled. This is to correct some mispronounciations of english spelled words. Don't attempt to correct the spellings or the words just won't sound right.

The LIBRARY statement specifies the disk and filename of the SpeechLib library. Be sure that your disk has the right name or modify the LIBRARY statement to match the name of the disk and filename of the SpeechLib Library. The fact that all this stuff has to be contained on one disk makes this just a bit of a hassle. An 800K disk drive or a hard disk should solve that problem.

Please note that HangMac has not been tried out on a 128K Mac. When using libraries, more heap space may be required. The SpeechErr% variable returned in most of the SpeechLib calls should return a zero. HangMac does not check for this, so if you get an speech error, check to see what value SpeechErr% returns by typing PRINT SpeechErr% in the command window and hitting return just after the error occurs. If SpeechErr% is not zero after the SpeechOn call, then MacinTalk could not be opened. The most likely problem is that MacinTalk is not on the same disk as BASIC. Another possiblity is that you have run out of heap space. Use BASIC's FRE() to check on available memory space and BASIC's CLEAR statement to allocate more or less as necessary. HangMac is already set up for a data segment size of 20000. Without the statement CLEAR 20000! at the beginning of the program, the heap size is too small, which causes the disk to run alot more.

SpeechLib also provides a more efficient memory management method by storing strings on the heap. The strings may be used later by referencing the desired string. HangMac does not use this feature. If you use it, you may have to watch your heap space more closely. If you are using other CLR (or others) libraries with SpeechLib, memory management is more of a concern.

HangMac automatically checks to see if you have CLR SpeechLib and disables all the talking parts of the program through the use of the variable talk. This enables you to run HangMac without sound if you don't have CLR SpeechLib. If speech is enabled, the speech can be turned on or off at any time (it speeds up the game) by selecting the speech menu.

I recommend, before you start to play HangMac, that you add more words to the program. I have started with 15 words (words related to the MAC). To add words, add to the DATA statements at the end of the program. Next change the line toward the beginning of the HangMac program which sets the variable number to the number of words (currently 15). That's all there is to it. The more words you have the more chance there is of getting a different word every time. When I was first creating the program I started with five words, and I often got the same word more than once. The words are randomized each time a new word is selected, so you don't know which word will be used.

Choose Instructions for a quick overview of the program. If speech is turned on, the instruction window will let you choose a TALK button to have the instructions read to you. Choose OK to close the instruction window.

Choose Start Game to begin HangMac. Most of your selections will have an audio response if the speech is turned on. Three windows are displayed. The first window shows the characters which have been used or guessed already. The second window shows the word to be guessed by displaying blanks for the characters until they are guessed correctly. You may type the whole word in if you think you know what it is. If you are wrong a new part of the HangMac man is drawn on the hanging post. You have 10 tries and then you're hung.

This may not be the best Hangman game you have ever seen, but it must be the first one you have had talk to you. HangMac will mostly be exciting for younger aged children. Even now as I approach the deadline for this column, my young sons are leaning over my shoulder waiting for me to finish so they can try it. Well, I guess it's time to play.

'HANGMAC
'©MACTUTOR, 1986
'by David Kelly

    Initialize:
    CLEAR,20000!
    DEFINT a-z
    DIM wordchar(1)
    false=0:true=NOT false
    talk=true:number=15
    DIM wordarray$(number)
    ON ERROR GOTO 10
    LIBRARY "CLR SpeechLib:SpeechLib"
5 :ON ERROR GOTO 0
    IF talk=true THEN GOSUB InitTalk
    FOR i=1 TO number
        READ wordarray$(i)
    NEXT i
    blank$=""
    FOR i=1 TO 40:blank$=blank$+" ":NEXT i
    WINDOW CLOSE 1
    FOR i=1 TO 5
        MENU i,0,0,""
    NEXT i
    
    MENU 1,0,1,"File"
    MENU 1,1,1,"Instructions"
    MENU 1,2,1,"Start Game"
    MENU 1,3,1,"Quit"
    MENU 2,0,1,"Speech"
    MENU 2,1,2,"ON"
    MENU 2,2,1,"OFF"
    IF talk=false THEN MENU 2,0,0
    WrongGuess=10
    GOSUB HangSetup
    GOSUB DrawHangMac
    ON MENU GOSUB menuevent
    MENU ON
idleloop: GOTO idleloop

menuevent:
    menunumber=MENU(0):IF menunumber=2 THEN Speechmenu
    menuitem=MENU(1):MENU
    MENU 1,0,0
    ON menuitem GOSUB Instructions,Start,Quit
    RETURN

Speechmenu:
    menuitem=MENU(1):MENU
    IF menuitem=1 THEN MENU 2,1,2:MENU 2,2,1:talk=true
    IF menuitem=2 THEN MENU 2,1,1:MENU 2,2,2:talk=false
    MENU ON
    RETURN
    
InitTalk:
    SpeechHand!=0:SpeechErr%=0:Phon$=""
    hertz%=190:mode%=0:Wpm%=125
    SpeechOn! "",SpeechHand!,SpeechErr%
    SpeechPitch! SpeechHand!,hertz%,mode%
    SpeechRate! SpeechHand!,Wpm%
    POKE &H208,5
    RETURN
    
Quit:
    GOSUB ClearKeyboard
    IF talk=true THEN Eng$="Good buy.   Play again             sometime.":GOSUB 
Speakup
    IF talk=true THEN SpeechOff! SpeechHand!  :LIBRARY CLOSE
    WINDOW CLOSE 1
    WINDOW CLOSE 2
    WINDOW CLOSE 3
    MENU RESET
    END
    
Start:
    MENU ON
    x!=FRE(1)
    RANDOMIZE TIMER
    index=INT(RND(1)*number)
    IF index=0 THEN Start
    word$=wordarray$(index)
    GOSUB HangSetup
    ERASE wordchar
    DIM wordchar(LEN(word$))
    FOR i=1 TO LEN(word$)
        wordchar(i)=false
    NEXT i
    usedchar=0:used$=""
    WrongGuess=0:lose=false
    TEXTFONT(2)
    TEXTSIZE(14)
    TEXTFACE(1)
    wflag=false
    sumword=0
    GOSUB DisplayWord
    IF talk=false THEN inputchar
    Eng$="Your word is "+STR$(LEN(word$))+" characters long."
    GOSUB Speakup
inputchar:
    WINDOW 1
    GOSUB DrawHangPost
    GOSUB ClearKeyboard
    EDIT FIELD 1,"",(95,190)-(410,210),1,2
    IF talk=false THEN charloop
    Eng$="Please choose a letter"
    GOSUB Speakup
charloop:
    d=DIALOG(0)
    IF d<>6 THEN charloop
    char$=UCASE$(EDIT$(1))
    IF char$="" THEN inputchar
    IF talk=false THEN checkchar
    Eng$="You have selected, "+char$+".  "
    IF char$<"A" OR char$>"Z" THEN Eng$=Eng$+"That character is not aloud."
    IF INSTR(used$,char$)<>0 THEN Eng$=Eng$+"That letter is already used."
Wrong:IF char$<>word$ AND LEN(char$)<>1 THEN Eng$=Eng$+"WRONGE!"
    GOSUB Speakup
checkchar:
    IF char$<"A" OR char$ >"Z" THEN inputchar
    IF INSTR(used$,char$)<>0 THEN inputchar
    IF char$=word$ THEN GOSUB foundword
    IF char$<>word$ AND LEN(char$)<>1 THEN WrongGuess=WrongGuess+1:GOSUB 
DrawHangMac :GOTO inputchar
    used$=used$+char$+" "
    oldsum=sumword
    sumword=0
    FOR i=1 TO LEN(word$)
        IF char$=MID$(word$,i,1) THEN wordchar(i)=true
        sumword=wordchar(i)+sumword
    NEXT i
    Eng$="That's "
    IF oldsum=sumword THEN WrongGuess=WrongGuess+1: Eng$=Eng$+"WRONG!"
    IF sumword=-LEN(word$) THEN wflag=true
    IF (wflag=false) AND (oldsum<>sumword) THEN Eng$=Eng$+"Right.   There 
is at least one " +char$+" in the word."
    IF wflag=true THEN Eng$=Eng$+"Right.  You have guessed the word."
    IF talk=true THEN GOSUB Speakup
    GOSUB DisplayUsedChars
    GOSUB DrawHangMac
    GOSUB DisplayWord
    IF wflag=false AND lose=false THEN inputchar
    IF wflag=true THEN Eng$="You Won.  The word is "+word$+".  Select 
Start Game to Play again."
    IF lose=true THEN Eng$="You're dead.  The word is "+word$+". Select 
Start Game to Play again."
    IF talk=true THEN GOSUB Speakup
    FOR i=1 TO LEN(word$)
        wordchar(i)=true
    NEXT i
    WINDOW 1
    EDIT FIELD CLOSE 1
    MENU 1,0,1
    RETURN

HangSetup:
    WINDOW 1,"HangMac",(10,100)-(500,320),2
    TEXTFONT(2):TEXTSIZE(18):TEXTFACE(1)
    LOCATE 1,1:PRINT "HangMac"
    TEXTSIZE(10):TEXTFACE(0)
    PRINT " Copyright ©MacTutor, 1986"
    PRINT" by David Kelly."
    WINDOW 2,"",(95,30)-(410,45),2
    WINDOW 3,"",(95,65)-(410,80),2
    WINDOW 1
    RETURN

foundword:
    wflag=true
    FOR i=1 TO LEN(word$)
        wordchar(i)=true
    NEXT i
    RETURN

DisplayWord:
    WINDOW 3
    LOCATE 1,1
    PRINT blank$:LOCATE 1,1
    IF lose=true THEN PRINT word$;:RETURN
    FOR j=1 TO LEN(word$)
        IF wordchar(j)=true THEN PRINT MID$(word$,j,1); ELSE PRINT "_ 
";
    NEXT j
    RETURN
    
DisplayUsedChars:
    IF LEN(char$)>1 THEN RETURN
    WINDOW 2
    LOCATE 1,1
    PRINT used$;
    RETURN
    
DrawHangMac:
    WINDOW 1
    GOSUB DrawHangPost
    IF WrongGuess >=1 THEN CIRCLE(250,35),25
    IF WrongGuess >=2 THEN CIRCLE(260,25),5
    IF WrongGuess >=3 THEN CIRCLE(240,25),5
    IF WrongGuess >=4 THEN LINE(240,45)-(260,45)
    CALL PENSIZE(2,2)
    CALL MOVETO(250,60)
    IF WrongGuess >=5 THEN CALL LINETO(250,125)
    IF WrongGuess >=6 THEN CALL LINE(45,45)
    IF WrongGuess >=7 THEN CALL MOVETO(250,125):CALL           LINE(-45,45)
    IF WrongGuess >=8 THEN CALL MOVETO(250,90):CALL            LINE(25,-25)
    IF WrongGuess >=9 THEN CALL MOVETO(250,90):CALL            LINE(-25,-25)
    CALL PENNORMAL
    IF WrongGuess >=9 THEN CALL MOVETO(255,20):CALL            LINE(10,10):CALL 
MOVETO(255,30):CALL  LINE(10,-10)
    IF WrongGuess >=9 THEN CALL MOVETO(235,20):CALL            LINE(10,10):CALL 
MOVETO(235,30):CALL  LINE(10,-10)
    IF WrongGuess >=9 THEN lose=true
    RETURN
    
DrawHangPost:
    CALL PENSIZE(4,4)
    CALL MOVETO(250,5)
    CALL LINETO(310,5)
    CALL LINETO(310,185)
    RETURN
    
ClearKeyboard:
    key$="X"
    WHILE key$ <>""
        key$=INKEY$
    WEND
    RETURN

10 :IF ERR=53 THEN talk=false
    RESUME 5
    END
    
Instructions:
    WINDOW CLOSE 2
    WINDOW CLOSE 3
    WINDOW 1,"Instructions",(10,30)-(500,330),-2
    TEXTFONT(2):TEXTSIZE(18):TEXTFACE(1)
    LOCATE 1,15:PRINT "HangMac"
    TEXTSIZE(12):TEXTFACE(0)
    LOCATE 3,1:PRINT "HangMac is the audio version of the traditional 
game of";
    PRINT" Hangman.  To play":PRINT"the game just choose ";
    TEXTFONT(0):PRINT"Start Game";:TEXTFONT(2)
    PRINT" from the File menu.   The hanging post is"
    PRINT "drawn and you may start guessing letters by typing them onto 
the base of"
    PRINT"the hanging post.  The uppermost window will display the characters 
which"
    PRINT"you have used.  The next window shows the characters, or blanks 
for the"
    PRINT"word that you are guessing.  Each time you miss, a new part 
of the HangMac"
    PRINT"man will be drawn until the entire body is drawn.  If you guess 
wrong ten"
    PRINT"times then you lose.  Type the whole word to guess the word."
    PRINT"This program features CLR SpeechLib procedures for calling 
Macintalk."
    PRINT"To use the speech feature you must have CLR SpeechLib (available 
from"
    PRINT"Clear Lake Research, 5353 Dora Street, Suite 7, Houston, Texas 
77005"
    PRINT"(800-835-2246 X 199).  However, the program will still work 
without"
    PRINT"the speech libraries being available."
    PRINT:PRINT"HangMac, Copyright ©MacTutor, 1986, by David Kelly."
    BUTTON 1,1,"OK",(445,260)-(475,290)
    IF talk=true THEN BUTTON 2,1,"TALK",(365,260)-(425,290)
WaitforButton:
    WHILE DIALOG(0)<>1:WEND
    buttonpushed = DIALOG(1)
    IF buttonpushed=2 THEN GOSUB SpeakInstructions:GOTO WaitforButton
    BUTTON CLOSE 1
    BUTTON CLOSE 2
    WINDOW CLOSE 1
    MENU 1,0,1
    RETURN
    
SpeakInstructions:
    BUTTON 1,0:BUTTON 2,0
    Eng$=" HangMac is the audio version of the traditional game of Hangman. 
 To play"
    Eng$=Eng$+" the game just choose Start Game from the File menu. The 
hanging post is"
    Eng$=Eng$+" drawn and  you may start guessing letters by typing them 
onto the base of"
    Eng$=Eng$+" the hanging post.  The uppermost wyndoe will display 
the charactors which"
    Eng$=Eng$+" you have used.  The next wyndoe shows the characters, 
or blanks for the"
    Eng$=Eng$+" word that you are guessing.  Each time you miss, a new 
part of the HangMac"
    Eng$=Eng$+"-man will be drawn until the entire body is drawn.  If 
you guess wrong ten"
    Eng$=Eng$+" times then you luse. Type the whole word to guess the 
word."
    ReaderString! SpeechHand!,Eng$,Phon$,SpeechErr%
    SoundOutString! SpeechHand!,Phon$,SpeechErr%
    Eng$="This program features CLR SpeechLib proseedures for calling 
Macintalk."
    Eng$=Eng$+" To use the speech feature you must have CLR SpeechLib 
(available from"
    Eng$=Eng$+" Clear Lake Reserch, 5353 Dora Street, sweet 7, Huse ton, 
Texas 77005."
    Eng$=Eng$+" phone- eight hundred 835-2246 extension199.  However, 
the program will still work without the speech lybraries"
    Eng$=Eng$+" being available."
    Eng$=Eng$+" HangMac, Copy right MacTutor, nineteen eighty six, by 
Dayvid Kelly."
    ReaderString! SpeechHand!,Eng$,Phon$,SpeechErr%
    SoundOutString! SpeechHand!,Phon$,SpeechErr%
    Eng$="":Phon$=""
    BUTTON 1,1:BUTTON 2,1
    RETURN

Speakup:
    ReaderString! SpeechHand!, Eng$,Phon$,SpeechErr%
    SoundOutString! SpeechHand!,Phon$,SpeechErr%
    RETURN
    
'Add additional words (as you please)
'by adding to the DATA statements below
'change the variable 'number' at the beginning
'of the program to reflect the number of words
'available.

DATA "MACINTOSH","MOUSE","DISK","DESKTOP","CURSOR"
DATA "ICON","KEYBOARD","WINDOW","MENU","PRINTER"
DATA "MODEM","BYTE","MEMORY","PROGRAM","DATA"
 

Community Search:
MacTech Search:

Software Updates via MacUpdate

Latest Forum Discussions

See All

Fresh From the Land Down Under – The Tou...
After a two week hiatus, we are back with another episode of The TouchArcade Show. Eli is fresh off his trip to Australia, which according to him is very similar to America but more upside down. Also kangaroos all over. Other topics this week... | Read more »
TouchArcade Game of the Week: ‘Dungeon T...
I’m a little conflicted on this week’s pick. Pretty much everyone knows the legend of Dungeon Raid, the match-3 RPG hybrid that took the world by storm way back in 2011. Everyone at the time was obsessed with it, but for whatever reason the... | Read more »
SwitchArcade Round-Up: Reviews Featuring...
Hello gentle readers, and welcome to the SwitchArcade Round-Up for July 19th, 2024. In today’s article, we finish up the week with the unusual appearance of a review. I’ve spent my time with Hot Lap Racing, and I’m ready to give my verdict. After... | Read more »
Draknek Interview: Alan Hazelden on Thin...
Ever since I played my first release from Draknek & Friends years ago, I knew I wanted to sit down with Alan Hazelden and chat about the team, puzzle games, and much more. | Read more »
The Latest ‘Marvel Snap’ OTA Update Buff...
I don’t know about all of you, my fellow Marvel Snap (Free) players, but these days when I see a balance update I find myself clenching my… teeth and bracing for the impact to my decks. They’ve been pretty spicy of late, after all. How will the... | Read more »
‘Honkai Star Rail’ Version 2.4 “Finest D...
HoYoverse just announced the Honkai Star Rail (Free) version 2.4 “Finest Duel Under the Pristine Blue" update alongside a surprising collaboration. Honkai Star Rail 2.4 follows the 2.3 “Farewell, Penacony" update. Read about that here. | Read more »
‘Vampire Survivors+’ on Apple Arcade Wil...
Earlier this month, Apple revealed that poncle’s excellent Vampire Survivors+ () would be heading to Apple Arcade as a new App Store Great. I reached out to poncle to check in on the DLC for Vampire Survivors+ because only the first two DLCs were... | Read more »
Homerun Clash 2: Legends Derby opens for...
Since launching in 2018, Homerun Clash has performed admirably for HAEGIN, racking up 12 million players all eager to prove they could be the next baseball champions. Well, the title will soon be up for grabs again, as Homerun Clash 2: Legends... | Read more »
‘Neverness to Everness’ Is a Free To Pla...
Perfect World Games and Hotta Studio (Tower of Fantasy) announced a new free to play open world RPG in the form of Neverness to Everness a few days ago (via Gematsu). Neverness to Everness has an urban setting, and the two reveal trailers for it... | Read more »
Meditative Puzzler ‘Ouros’ Coming to iOS...
Ouros is a mediative puzzle game from developer Michael Kamm that launched on PC just a couple of months back, and today it has been revealed that the title is now heading to iOS and Android devices next month. Which is good news I say because this... | Read more »

Price Scanner via MacPrices.net

Amazon is still selling 16-inch MacBook Pros...
Prime Day in July is over, but Amazon is still selling 16-inch Apple MacBook Pros for $500-$600 off MSRP. Shipping is free. These are the lowest prices available this weekend for new 16″ Apple... Read more
Walmart continues to sell clearance 13-inch M...
Walmart continues to offer clearance, but new, Apple 13″ M1 MacBook Airs (8GB RAM, 256GB SSD) online for $699, $300 off original MSRP, in Space Gray, Silver, and Gold colors. These are new MacBooks... Read more
Apple is offering steep discounts, up to $600...
Apple has standard-configuration 16″ M3 Max MacBook Pros available, Certified Refurbished, starting at $2969 and ranging up to $600 off MSRP. Each model features a new outer case, shipping is free,... Read more
Save up to $480 with these 14-inch M3 Pro/M3...
Apple has 14″ M3 Pro and M3 Max MacBook Pros in stock today and available, Certified Refurbished, starting at $1699 and ranging up to $480 off MSRP. Each model features a new outer case, shipping is... Read more
Amazon has clearance 9th-generation WiFi iPad...
Amazon has Apple’s 9th generation 10.2″ WiFi iPads on sale for $80-$100 off MSRP, starting only $249. Their prices are the lowest available for new iPads anywhere: – 10″ 64GB WiFi iPad (Space Gray or... Read more
Apple is offering a $50 discount on 2nd-gener...
Apple has Certified Refurbished White and Midnight HomePods available for $249, Certified Refurbished. That’s $50 off MSRP and the lowest price currently available for a full-size Apple HomePod today... Read more
The latest MacBook Pro sale at Amazon: 16-inc...
Amazon is offering instant discounts on 16″ M3 Pro and 16″ M3 Max MacBook Pros ranging up to $400 off MSRP as part of their early July 4th sale. Shipping is free. These are the lowest prices... Read more
14-inch M3 Pro MacBook Pros with 36GB of RAM...
B&H Photo has 14″ M3 Pro MacBook Pros with 36GB of RAM and 512GB or 1TB SSDs in stock today and on sale for $200 off Apple’s MSRP, each including free 1-2 day shipping: – 14″ M3 Pro MacBook Pro (... Read more
14-inch M3 MacBook Pros with 16GB of RAM on s...
B&H Photo has 14″ M3 MacBook Pros with 16GB of RAM and 512GB or 1TB SSDs in stock today and on sale for $150-$200 off Apple’s MSRP, each including free 1-2 day shipping: – 14″ M3 MacBook Pro (... Read more
Amazon is offering $170-$200 discounts on new...
Amazon is offering a $170-$200 discount on every configuration and color of Apple’s M3-powered 15″ MacBook Airs. Prices start at $1129 for models with 8GB of RAM and 256GB of storage: – 15″ M3... Read more

Jobs Board

*Apple* Systems Engineer - Chenega Corporati...
…LLC,** a **Chenega Professional Services** ' company, is looking for a ** Apple Systems Engineer** to support the Information Technology Operations and Maintenance Read more
Solutions Engineer - *Apple* - SHI (United...
**Job Summary** An Apple Solution Engineer's primary role is tosupport SHI customers in their efforts to select, deploy, and manage Apple operating systems and Read more
*Apple* / Mac Administrator - JAMF Pro - Ame...
Amentum is seeking an ** Apple / Mac Administrator - JAMF Pro** to provide support with the Apple Ecosystem to include hardware and software to join our team and Read more
Operations Associate - *Apple* Blossom Mall...
Operations Associate - Apple Blossom Mall Location:Winchester, VA, United States (https://jobs.jcp.com/jobs/location/191170/winchester-va-united-states) - Apple Read more
Cashier - *Apple* Blossom Mall - JCPenney (...
Cashier - Apple Blossom Mall Location:Winchester, VA, United States (https://jobs.jcp.com/jobs/location/191170/winchester-va-united-states) - Apple Blossom Mall Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.