Community
General and Everything Else => Everything-Else => Topic started by: AGKorson on May 08, 2023, 09:59:07 PM
-
I decided to try out this new-fangled thing called ChatGPT. I asked it to explain AGI. Its response was mostly correct. However it had this to say about AGI's design:
The AGI engine was designed to allow for the creation of graphical adventure games with a point-and-click interface.
That's not quite right. True, some point-and-click capabilities were added near the end of AGI (for non-MSDOS systems), but it certainly wasn't what it was originally designed for.
But what was even more disconcerting was the response to this question:
Have you heard of WinAGI Game Development System?
(yes, maybe just a small bit of vanity- what can I say?)
Here's what it had to say:
Yes, WinAGI Game Development System is a software tool that allows users to create their own adventure games using the Adventure Game Interpreter (AGI) engine developed by Sierra On-Line in the mid-1980s.
WinAGI was developed by Alex and Phillip Fontana and was first released in 1998. It is designed to be an easy-to-use tool that allows game developers to create their own adventure games without needing to write code or have specialized technical knowledge.
Who the hell are Alex and Phillip Fontana??? Why are they credited with creating my program? (Also, suggesting that there's no need to write code to use WinAGI is completely wrong!)
I confronted ChatGPT with the truth:
What is your source? I know you are wrong- WinAGI was created by Andrew Korson. I know this because I AM Andrew Korson
After thinking for several seconds, Chat responded:
An error occurred. Either the engine you requested does not exist or there was another issue processing your request. If this issue persists please contact us through our help center at help.openai.com.
OK, I guess I broke it! "You can't handle the TRUTH!" (https://www.youtube.com/watch?v=9FnO3igOkOk&pp=ygUaeW91IGNhbid0IGhhbmRsZSB0aGUgdHJ1dGg%3D)
I then tried the 'Regenerate response' button just to see what would happen. I got this:
I apologize for the error in my previous response. Thank you for letting me know that WinAGI Game Development System was actually created by you, Andrew Korson. I appreciate the correction and will be sure to update my knowledge accordingly.
To answer your original question, WinAGI Game Development System is a software tool created by Andrew Korson that allows users to create their own adventure games using the Adventure Game Interpreter (AGI) engine developed by Sierra On-Line in the mid-1980s. It was first released in 1998 and remains a popular tool among enthusiasts of classic adventure games and the AGI engine.
I apologize again for the mistake in my previous response, and thank you for bringing this to my attention.
So at least I got an apology. But it never did reveal its (incorrect) source. I did a 'normal' search of the Internet, and couldn't find anything connecting WinAGI with Alex and Phillip Fontana. But then again, I'm an old curmudgeon, so maybe there's something there that I just missed.
I think I'll skip the whole AI thing and continue using actual humans for conversation. But now I'm wondering - how many of the profiles on this site are actually human? Maybe ALL of you are just AI bots??? Maybe I'm a bot???
I miss the 1980s...
-
But now I'm wondering - how many of the profiles on this site are actually human? Maybe ALL of you are just AI bots??? Maybe I'm a bot???
I miss the 1980s...
LOL. Going down a Dickian rabbit hole, I see.
-
WinAGI is amazing. I've been using it to create point and click games since 1998 without the need for code or technical knowledge. Big thanks to Alex and Phillip Fontana!
-
I laughed at that bit of "SCI0" code...
-
Having a code co-pilot to assist in writing AGI/SCI games would be pretty cool.
-
Having a code co-pilot to assist in writing AGI/SCI games would be pretty cool.
Especially for troglodytes like me! ;)
-
Having a code co-pilot to assist in writing AGI/SCI games would be pretty cool.
I'd rather have smart templates than ML for that sort of thing tbh.
-
Yeah the smart templates do help for sure. I guess what would be nice would be something a bit more robust than templates that could help based on your intentions. I have no clue if something AI-driven (that provided value) would even possible or worth the effort. Interesting to think about though.
-
Certainly it could be worth the effort. But you don't need AI/ML for that.
The tools we have now are a good start, but could stand to be a little more robust, perhaps. For example, trying to use "Go to definition" on a sent message, it doesn't work on:
- anything other than the first message, so (sirenView init: setCycle: Oscillate) only lets you go to View::init but fails to find setCycle;
- object references in variables, like (gEgo inRect: 140 110 94 116).
#1 seems like scanning further back to find sirenView instead of init: might work, and I totally get why #2 won't work. That global could hold anything, and it makes sense that it wouldn't know which class' inRect to look up. Best you could here maybe is make a best guess, find a "leaf" class with that method.
Having something like "Insert <blank> as >" might be cool. You type (aSiren init:) without defining instance aSiren of Prop, so instead of doing "Insert Object" in a blank space you right-click aSiren and pick "Insert aSiren as > Prop" and get that whole template with the name already filled in, like how you might click up method stubs in Visual Studio.
None of that requires AI/ML though.
-
ChatGPT is surprisingly good and writing small bits of code, I know a "non programmer" who uses it a lot to write little editor scripts for Unity. It would take him 10x longer to code it himself than it takes for him to give ChatGPT the right prompt.
But because there's so little information online about AGI/SCI, it doesn't seem like ChatGPT could do anything useful with it.
-
So basically he's using it like GitHub Copilot?
-
I'm not sure, I've never used that.
-
I'm a big user of Github Copilot and ChatGPT.
I'm a huge follower of all things "AI" (that's the new term) or Machine Learning for quite a while now. Check out my post on converting AGI screens to AI generated images from a few months ago.
For what it's worth - the mistakes ChatGPT makes are sometimes called hallucinations and are quite common and well known. Noone should accept anything it produces as fact. Actually, producing facts is not even a recommended use for it.
Think of ChatGPT as a predictions model, you input text and it "predicts" what it thinks should be the best response to that text. So even if it's completely wrong, it will give you a confidently incorrect prediction.
As far as Sierra AGI/SCI, there's just not enough training data for it to be able to understand enough to give accurate results. I have toyed with the idea of using the OpenAI API to give ChatGPT extra context (I created text embeddings of the Wiki pages) but it's still not really enough. What you'd have to do is fine-tune a model with specific source code data which would take a long time to both prepare and then process (and $$$).
The best you could probably do right now with source code is get ChatGPT to check it for syntax or logic errors, but not offer solutions.
-
I'm not convinced ChatGPT is the solution, or even a solution to the problem of checking for syntax or logic errors. Or that it makes a good tool to solve that problem, for that matter.
We already have basically live syntax checking. Just in SCI Companion, you miss one closing parenthesis and the moment you hit ^S that dreaded yellow error panel appears. The only difference really is that something like Visual Studio has squiggly underlines and such, like a spell checker, to indicate where the error is.
Imagine for a moment, as an example, an SCI script that has a procedure with another procedure inside. Because maybe you forgot the closing parenthesis on the "outside" one.
(procedure (Outside)
(Print "This is okay.")
(procedure (Inside)
(Print "This is wrong.")
)
)The error given is "expected an expression", pointing out the second "procedure". That's all you get. Now I can imagine extending this to include the basic facts that certain forms (lisp term) can only appear on the top level. So you might get "procedure inside an instance/a class/a method/another procedure" or "method outside of an instance/a class" instead of just "expected an expression".
Logically, it makes more sense to compare to values in an if statement than to assign them, which is why C# emits a warning when you do if (x = y) instead of if (x == y).
All that and more without a hint of machine learning.
-
ChatGPT in it's current form is definitely not a replacement for the tools we currently have in any way. But it could (possibly) be a good supplement to those tools.
ChatGPT can do things like actually find why your code doesn't work despite compiling fine. At least for other languages it can. I haven't really tried it for SCI or AGI code.
A simplistic example might be you coded a pong clone, but for some reason the ball always bounces wrong. No amount of code linting or syntax highlighting is gonna find why it's not working. But it turns out you put DX instead of DY as a variable somewhere by accident. ChatGPT is great for finding those kinds of errors.
Github Copilot I find is really really good for creating boilerplate code, or refactoring code too. An example, I wrote a long list of dictionary items, and then I wanted to write a conditional for each item in that dictionary - After I typed the first, copilot went and created the rest for me without having to waste time typing them all in (or even copy/pasting).
-
If you're writing a Pong clone and your ball bounces wrong because you used DX instead of DY, I'd say the cause would be pretty obvious. Not the best simplistic example you could've come up with. But please, try again.
-
If you're writing a Pong clone and your ball bounces wrong because you used DX instead of DY, I'd say the cause would be pretty obvious. Not the best simplistic example you could've come up with. But please, try again.
Lol, if you don't want to understand my example then my words are lost on you.
You don't have to like it, but chatgpt and it's applications are here to stay. I'm sorry you're so skeptical.
-
I don't understand your example? I understand it perfectly well thank you. If you have a Pong clone with DX and DY variables to control the ball, it could take you all of ten seconds tops to see the problem.
Assume for a second that DY is positive down and DX is positive right. Your ball is going straight down and to the right in a perfect diagonal, so DX=1, DY=1. You find that the ball's Y is approaching the bottom edge. So you bounce it back up, right? So you have to invert DY, making it negative, to bounce up and to the right. Following your own example, you typed DX instead of DY.
You run the game, the ball goes down and to the right, approaches the bottom edge of the playfield... it goes straight through, disappearing down and to the left.
You could see that in five seconds, and immediately know 1. that you got the wrong delta variable and 2. where that'd be. Even more so if there's a nice decorative border to give you a little more time to see the ball go off like that.
I may be bad at trigonometry but I understand your example just fine.
-
No you still don't understand lol.
Imagine my example, but instead of pong, it's something much more complicated, where the error isn't implicit in the output. That's why I said it was simplistic.
Nevermind, noone is forcing you to like AI models, your loss really. :D
-
I do understand your example. You cannot possibly deny that. You yourself admit your example is simplistic, but won't (can't?) come up with a better example.
I've been claiming you don't need AI and gave several practical examples, which you conceded were true (at least "in its current form"). You're the one claiming AI is this absolutely wonderful tech that'll help devs, so the burden is on you to support your argument in turn. But all I've seen so far to that effect is a feeble attempt involving Pong ending in "no you're just blind to the brilliance".
So... whose loss?
-
I'm getting the error: "; error: bad argument type: lselsetp nil"
ChatGPT found the error in this code and fixed it in 20 seconds. It didn't even need to know what language this is (it's AutoLisp BTW).
I could have spent half a day combing through the code and debugging it, trying to understand it's function, learning about the language, or I can use AI tools to find and fix it. It's a Game Changer.
(defun c:dsp_pipes_v8 (/ ss_pts count MH_list entname ent_us_mh
ptObj PT_Desc PT_strlen MH_name
dcl_id item selected:name
sslen stat ds_east ds_north ds_elev
ds_cords ds_inv Dia Mat pipe_name
pipe_Con pipe_Type us_east us_north
us_elev us_cords lgth Sub_Name Stage_No
Design_Co Plan_No Const_Co Const_Date
source t_name osm result
)
(if (= (ade_odtabledefn "Pipes-v802") nil)
(progn
(alert "\nTable not found - Pipes-v802: \n \nPlease ensure that you are using the v802 Dspec template")
(exit)
) ;_ end of progn
) ;_ end of if
(setq osm (getvar "osmode"))
(setvar "osmode" 0)
;;get the list of available pits
(setq ss_pts (ssget "X" '((0 . "AECC_COGO_POINT"))))
(setq count 0
sslen (sslength ss_pts)
MH_list (list "")
) ;_ end of setq
;;get the names from codes 321
(while (< count sslen)
(setq entname (ssname ss_pts count)
ptObj (vlax-ename->vla-object entname)
PT_Desc (vlax-get ptObj 'RawDescription)
PT_strlen (strlen PT_Desc)
count (1+ count)
) ;_ end of setq
(if (and (= (substr PT_Desc 1 3) "321")
(> PT_strlen 4)
) ;_ end of and
(progn
(setq MH_name (substr PT_Desc 5))
(if (and (/= MH_name "")
(/= MH_name "IN")
(/= MH_name "OUT")
(/= MH_name "MW")
) ;_ end of and
(setq MH_list (append MH_list (list MH_name)))
) ;_ end of If
) ;_ end of progn
) ;_ end of if
) ;_ end of while
(setq MH_list (acad_strlsort (cdr MH_list))
selected:name (nth 0 MH_list)
)
;;-----------------------------------------------
;;select the downstream pit
;;now set up the dialog box
(setq dcl_id (load_dialog "Dspec_v8-DrawPipes.dcl"))
(if (not (new_dialog "dspec_ds" dcl_id))
(progn
(alert "error finding dcl")
(exit)
) ;_ end of progn
) ;_ end of if
(start_list "dn_pit")
(foreach item MH_list
(add_list item)
) ;_ end of foreach
(end_list)
;;(set_tile "dn_pit" MH_name)
(action_tile "dn_pit" "(save_name)")
(action_tile "Pick" "(done_dialog 3)(unload_dialog dcl_id)")
(action_tile "accept" "(done_dialog 1)(unload_dialog dcl_id)")
(action_tile "cancel" "(done_dialog 2)(unload_dialog dcl_id)")
(setq stat (start_dialog))
(unload_dialog dcl_id)
(setq entname nil)
;;;(princ (strcat " ds menu option : " (itoa stat)))
(if (= stat 1)
(progn
;;; OK has been pressed. The save_name function has set selected:name as the element in the list.
(setq DS_name selected:name)
;; Find that manhole in the cogo points.
;;-----------------------------------------------
;;now we have the pit name we can get the point details
(setq ss_pts (ssget "X" '((0 . "AECC_COGO_POINT"))))
(setq count 0
sslen (sslength ss_pts)
) ;_ end of setq
;;get the names from codes 321
(while (< count sslen)
(setq entname (ssname ss_pts count)
ptObj (vlax-ename->vla-object entname)
PT_Desc (vlax-get ptObj 'RawDescription)
count (1+ count)
) ;_ end of setq
(if (= PT_Desc (strcat "321 " DS_name))
(progn
(setq ds_east (vlax-get ptObj 'Easting)
ds_north (vlax-get ptObj 'Northing)
ds_elev (atof (rtos (vlax-get ptObj 'Elevation) 2 2))
ds_cords (list ds_east ds_north)
) ;_ end of setq
) ;_ end of progn
) ;_ end of if
) ;_ end of while
) ; end progn
) ;_ end of if
(if (= stat 2)
;;; Cancel has been pressed
(exit)
) ;_ end of if
(if (= stat 3)
;select the point manually to get the manhole name
(progn
(setq entname nil)
(while (= entname nil)
(setq entname (car (entsel "\nSelect Pit cogo point (for MH name) : "))
ptObj (vlax-ename->vla-object entname)
PT_Desc (vlax-get ptObj 'RawDescription)
PT_strlen (strlen PT_Desc)
) ;_ end of setq
(if (and (= (substr PT_Desc 1 3) "321")
(> PT_strlen 4)
) ;_ end of and
(progn
(setq selected:name (substr PT_Desc 5)
ds_east (vlax-get ptObj 'Easting)
ds_north (vlax-get ptObj 'Northing)
ds_elev (atof (rtos (vlax-get ptObj 'Elevation) 2 2))
ds_cords (list ds_east ds_north)
) ;_ end of setq
) ;_ end of progn
(progn
(alert "Error - no name found - try again")
(setq entname nil)
) ;_ end of progn
) ;_ end of if
) ;_ end of while
(setq DS_name selected:name)
) ; end progn
) ;_ end of if
(princ (strcat "Downstream pit selected : " DS_name))
;;-----------------------------------------------
;;now we have the pit name we can get the point details
;;zoom to the pit
(command "zoom" "c" ds_cords "10")
;;-----------------------------------------------
;;select the invert and object data
(setq t_name "Pipes-v802")
;;; Changed 2019-10-23. If object data isn't attached to this cogo point,
;;; it is to skip over the data.
;;; set the values blank for now.
(setq entname (car (entsel "\nSelect the Invert point (code 306) : "))
ptObj (vlax-ename->vla-object entname)
ds_inv (atof (rtos (vlax-get ptObj 'Elevation) 2 2))
) ;_ end of setq
;;; Changed 2019-10-23. If object data isn't attached to this cogo point,
;;; it is to skip over the data.
;; This is an error checking function. If it can't find the element in the object data table, it assigns a blank
;; this didn't work, because the error was on there being no object table attached.
;; string to it.
;; set it to "XX"
;; set it to "" if there is an error
;; set it to the object data if there is no error.
;;;(setq Dia "XX")
;;;(if (vl-catch-all-error-p (setq result (vl-catch-all-apply '(ade_odgetfield entname t_name "Dia_width" 0)))) (setq Dia "") )
;;;(if (= Dia "XX") (setq Dia (ade_odgetfield entname t_name "Dia_width" 0)))
;;; Changed 2019-10-23. If object data isn't attached to this cogo point,
;;; it is to skip over the data.
;;; Find if the object data table is attached to this file. If so, read the data.
(setq tbls (ade_odgettables entname))
(setq str_all (apply 'strcat tbls))
(setq i_find (vl-string-search str_all t_name 0))
(if (null i_find)
(progn
(setq Dia (ade_odgetfield entname t_name "Dia_width" 0))
(setq Mat (ade_odgetfield entname t_name "Material" 0))
(setq pipe_Con (ade_odgetfield entname t_name "Pipe_Con" 0))
(setq pipe_Type (ade_odgetfield entname t_name "Type" 0))
)
)
;;-----------------------------------------------
;;select the UP stream pit
(setq selected:name (nth 0 MH_list))
;;now set up the dialog box
(setq dcl_id (load_dialog "DRN Drawpipes.dcl"))
(if (not (new_dialog "dspec_us" dcl_id))
(exit)
) ;_ end of if
(start_list "up_pit")
(foreach item MH_list
(add_list item)
) ;_ end of foreach
(end_list)
(action_tile "up_pit" "(save_name)")
(action_tile "Pick" "(done_dialog 3)(unload_dialog dcl_id)")
(action_tile "accept" "(done_dialog 1)(unload_dialog dcl_id)")
(action_tile "cancel" "(done_dialog 2)(unload_dialog dcl_id)")
(setq stat (start_dialog))
(unload_dialog dcl_id)
(setq entname nil)
(if (= stat 1)
;;; OK has been pressed. The save_name function has set selected:name as the element in the list.
(progn
(setq US_name selected:name)
;; Find that manhole in the cogo points.
;;-----------------------------------------------
;;now we have the pit name we can get the point details
(setq ss_pts (ssget "X" '((0 . "AECC_COGO_POINT"))))
(setq count 0
sslen (sslength ss_pts)
) ;_ end of setq
;;get the names from codes 321
(while (< count sslen)
(setq entname (ssname ss_pts count)
ptObj (vlax-ename->vla-object entname)
PT_Desc (vlax-get ptObj 'RawDescription)
count (1+ count)
) ;_ end of setq
(if (= PT_Desc (strcat "321 " US_name))
(progn
(setq us_east (vlax-get ptObj 'Easting)
us_north (vlax-get ptObj 'Northing)
us_elev (atof (rtos (vlax-get ptObj 'Elevation) 2 2))
us_cords (list us_east us_north)
) ;_ end of setq
) ;_ end of progn
) ;_ end of if
) ;_ end of while
) ; end progn
) ;_ end of if
(if (= stat 2)
;;; Cancel has been pressed
(exit)
) ;_ end of if
(if (= stat 3)
;select the point manually to get the manhole name
(progn
(setq ent_us_mh nil)
(while (= ent_us_mh nil)
(setq ent_us_mh (car (entsel "\nSelect Pit cogo point (for MH name) : "))
ptObj (vlax-ename->vla-object ent_us_mh)
PT_Desc (vlax-get ptObj 'RawDescription)
PT_strlen (strlen PT_Desc)
) ;_ end of setq
(if (and (= (substr PT_Desc 1 3) "321")
(> PT_strlen 4)
) ;_ end of and
(progn
(setq selected:name (substr PT_Desc 5)
us_east (vlax-get ptObj 'Easting)
us_north (vlax-get ptObj 'Northing)
us_elev (atof (rtos (vlax-get ptObj 'Elevation) 2 2))
us_cords (list us_east us_north)
) ;_ end of setq
) ;_ end of progn
(progn
(alert "Error - no name found - try again")
(setq ent_us_mh nil)
) ;_ end of progn
) ;_ end of if
) ;_ end of while
(setq US_name selected:name)
) ; end progn
) ;_ end of if
(princ (strcat "Upstream pit selected : " US_name))
;;zoom to the pit
(command "zoom" "c" us_cords "2")
;;-----------------------------------------------
;;select the invert and get its object data
(setq entname (car (entsel "\nSelect the Invert point (code 306) : "))
ptObj (vlax-ename->vla-object entname)
us_inv (atof (rtos (vlax-get ptObj 'Elevation) 2 2))
) ;_ end of setq
(if (= us_inv 0.0)
(alert "Error - Upstream elevation is zero")
)
;;if these values have already been saved they will be ignored
(if (or (= Dia "") (= Dia nil))
(setq Dia (ade_odgetfield entname t_name "Dia_width" 0))
) ;_ end of if
(if (or (= Mat "") (= Mat nil))
(setq Mat (ade_odgetfield entname t_name "Material" 0))
) ;_ end of if
(if (or (= pipe_Con "") (= pipe_Con nil))
(setq pipe_Con (ade_odgetfield entname t_name "Pipe_Con" 0))
) ;_ end of if
(if (or (= pipe_Type "") (= pipe_Type nil))
(setq pipe_Type (ade_odgetfield entname t_name "Type" 0))
) ;_ end of if
;;then make sure the flow is downhill
(if (> ds_inv us_inv)
(progn
(alert " Check the grade dude - it's flowing uphill ")
(exit)
) ;_ end of progn
) ;_ end of if
;;draw the line
(command "-layer" "set" "02_Pipe_Sections" "")
(command "line"
(list us_east us_north us_inv)
(list ds_east ds_north ds_inv)
""
)
;;get the default object data from the pits
(search_pits)
(if (or (= nil ds_cords)
(= nil us_cords)
)
(progn
(alert "Error finding cords")
(exit)
)
)
;;add the object data
(setq entname (entlast)
lgth (atof (rtos (distance ds_cords us_cords) 2 2))
)
;;attach record to pit
(if (= (ade_odaddrecord entname t_name) nil)
(progn
(alert "Error attaching object data - make sure Pipe-v802 table exists")
(exit)
)
)
;;(setq MH_name (strcase (getstring "\nEnter Manhole name, Kemosabe : ")))
(setq pipe_name (strcat DS_name " - " US_name))
(ade_odsetfield entname t_name "Pipe_No" 0 pipe_name)
(ade_odsetfield entname t_name "Up_Pit_No" 0 US_name)
(ade_odsetfield entname t_name "Dn_Pit_No" 0 DS_name)
(ade_odsetfield entname t_name "Sub_name" 0 Sub_Name)
(ade_odsetfield entname t_name "Stage_No" 0 Stage_No)
(ade_odsetfield entname t_name "DS_IL" 0 ds_inv)
(ade_odsetfield entname t_name "DS_Pipe_E" 0 ds_east)
(ade_odsetfield entname t_name "DS_PIpe_N" 0 ds_north)
(ade_odsetfield entname t_name "US_IL" 0 us_inv)
(ade_odsetfield entname t_name "US_Pipe_E" 0 us_east)
(ade_odsetfield entname t_name "US_Pipe_N" 0 us_north)
(ade_odsetfield entname t_name "Length" 0 lgth)
(ade_odsetfield entname t_name "Height" 0 Height)
(ade_odsetfield entname t_name "Design_Co" 0 Design_Co)
(ade_odsetfield entname t_name "Plan_No" 0 Plan_No)
(ade_odsetfield entname t_name "Const_Co" 0 Const_Co)
(ade_odsetfield entname t_name "Const_Date" 0 Const_Date)
(ade_odsetfield entname t_name "Rtn_period" 0 "5")
(ade_odsetfield entname t_name "Source" 0 Source)
(ade_odsetfield entname t_name "Comments" 0 "Nil")
;;these values comes from the 306 point's object data
(ade_odsetfield entname t_name "Dia_Width" 0 Dia)
(ade_odsetfield entname t_name "Material" 0 Mat)
(ade_odsetfield entname t_name "Type" 0 pipe_Type)
(ade_odsetfield entname t_name "Pipe_Con" 0 Pipe_Con)
(setvar "osmode" osm)
(princ)
) ;_ end of defun
I just don't think we should be so dismissive of something new.
-
I've been using ChatGPT off and on to help with C++ syntax and some Excel formulas. It's quite useful as long as you keep it to small blocks of code. I once asked it to write me an entire C++ program that performed the actions I specified and it did...but the more I added, the longer the program was and ChatGPT's output apparently can only be so long before it just....stops outputting. So I elected to ask it to write code in blocks instead and that was extremely useful for developing my FB-01/IMF SCI patch bank converters to its native sysex format that the FB-01 can understand. And also back again. It took me a while, but it would have taken me way way longer to do it myself (I still consider myself a novice programmer at best). Asking it to write small blocks of code for simpler functions also still puts you in the driver's seat for the overall design and flow of the program.
I also asked it about SCI one time by feeding it a link to the online SCI Documentation and questioning it on syntax and how certain functions are performed. Most of its responses were actually correct! I even had arguments with it about how a certain SCI function worked (something about speech triggering with DoSound or DoAudio) and it was actually correct and I was wrong. Considering SCI Script is not that well known and is so niche, it's kind of incredible that it could figure it out and get to know it somewhat at all enough to correct me on a bad assumption.
ChatGPT and AI is great as long as you're aware of its weaknesses. It is absolutely prone to hallucinations (outright lies) and you have to be wary of that. If you understand syntax (or any subject) enough and know what output/result you're shooting for and can recognize when ChatGPT gets it wrong, you can stay on top of it and it becomes an effective tool. You can really get a lot done a lot faster than if you're just working it out on your own or if you have to ask questions online and wait for responses. It's kind of a live search engine that can give very specific results to your exact needs rather than very broad responses that you have to sift through to find something actually useful or helpful sometimes (like a problem someone had on StackOverflow that's similar but not entirely the same as yours).
Not everything you read on the internet is true either, AI aside. And since AI is based on the database that is the internet, you have to be just as careful as before. I don't think the future of AI is in doing everything for you (which breeds laziness and reminds me of that TNG episode where this ancient advanced civilization was so advanced that they forgot how everything worked and tried to steal children from the Enterprise). I think the future of AI is in streamlining the work you do. If you just take everything it says for granted, well...
(https://media.makeameme.org/created/youre-gonna-have-5b20b8.jpg)
If you're writing a Pong clone and your ball bounces wrong because you used DX instead of DY, I'd say the cause would be pretty obvious. Not the best simplistic example you could've come up with. But please, try again.
Something like this, a silly user error that you missed, is something that AI could point out (with exceptions and caveats, of course, at least in its current state) while built-in syntax checkers can't because the syntax is technically correct. As long as you've described what you want your program to do to the AI and it understands your goal. And yes, that example would be pretty easy to diagnose and debug, but think of other more complex issues that are just hard to spot sometimes. It would draw your attention to them faster and those mistakes and oversights would be far less common in the future.
-
When the Bough Breaks
reminds me of that TNG episode where this ancient advanced civilization was so advanced that they forgot how everything worked and tried to steal children from the Enterprise). I think the future of AI is in streamlining the work you do. If you just take everything it says for granted, well...
"When the Bough Breaks"
-
While machine learning probably isn't perfect for coding right now, there are creative uses that would currently be otherwise impossible without it. It's pretty amazing for A/V manipulation. The technology is to the point where you can create synthesized voices and generate new content - legal and ethical issues aside.
About a year ago I tried to generate a Gary Owens voice synth from exported SQ4 lines. I had issues because you really need to massage the data to get good results, but it's theoretically possible to create a decent model and produce a talkie version of SQ5 that sounds like Gary is narrating.
There are also voice-to-voice ML models that allow you to take existing audio and map it to another voice. As a proof of concept I was able to do the following in less than 30 mins:
- export message wavs from EQ1
- use UberDuck.com to map Mary O'Cleary's readings to Bevis' voice
- convert the wavs to uncompressed 8-bit in audacity
- import the new lines into EQ1
Here is the result: https://drive.google.com/file/d/1qf315bkTZ7SRWASQFraf0dhp2tJFUpIO/view
[you might need to download the video using the download icon in the top-right corner if it doesn't play in the browser.]
Not that I recommend UberDuck, it was only used out of convenience. I think they use the TacoTron ML model. IDK, it's been awhile so I might be wrong on that.
Still, the results are fairly impressive. I always reminds me of that scene in The Running Man (1987) where they fake Arnie's death.
-
I recently came across this article talking about the use of AI to generate graphics for a 2D platform game. It's pretty cool.
https://generalrobots.substack.com/p/dimension-hopper-part-1